--- nono/cli/cli_app.cpp 2026/04/29 17:04:30 1.1.1.2 +++ nono/cli/cli_app.cpp 2026/04/29 17:04:51 1.1.1.6 @@ -1,22 +1,24 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #include "header.h" #include "mainapp.h" -#include "mpu.h" +#include "mpu680x0.h" #include "pluto.h" -#include "rtc.h" #include "vm.h" +void cli_halt_callback(void *); + // wxApp と相似にするためのクラス class CLIApp { public: - bool OnInit(); + int OnInit(); bool Parse(); - void OnCreate(); + [[noreturn]] void OnCreate(); int ac; char **av; @@ -30,38 +32,40 @@ main(int ac, char *av[]) // wxApp とよく似せるため app->ac = ac; app->av = av; - if (!app->OnInit()) { - return 1; - } - return 0; + return app->OnInit(); } // ここがエントリポイント(のつもり) -bool +int CLIApp::OnInit() { - if (!gMainApp.Init(true, ac, av)) { - return false; + int rv; + + // CLI 側では関係ないが wx 側で必要なので初期化は2ステージに分かれている + rv = gMainApp.Init1(true, ac, av); + if (rv != MainApp::PASS) { + return rv; + } + if (!gMainApp.Init2()) { + return EXIT_FAILURE; } - if (!gMainApp.Start()) { - return false; + + // VM にコールバックを登録 + if (gMPU680x0) { + gMPU680x0->SetHaltCallback(cli_halt_callback, NULL); } // メインウィンドウに相当するところ OnCreate(); - return true; + return EXIT_SUCCESS; } // メインウィンドウ作成後のイベントに相当するところ void CLIApp::OnCreate() { - // 時刻開始? - // なるべく VM が開始する直前にしたい。 - gRTC->InitRTC(); - - // VM 実行開始 + // 電源投入 gVM->PowerButton(); // ? @@ -69,3 +73,11 @@ CLIApp::OnCreate() sleep(1); } } + +// m680x0 ダブルバスフォールト時に呼ばれるコールバック。 +void +cli_halt_callback(void *dummy) +{ + // どうする? + warnx("Double bus fault has occurred in VM"); +}