Annotation of nono/cli/cli_app.cpp, revision 1.1.1.3

1.1       root        1: //
                      2: // nono
1.1.1.3 ! root        3: // Copyright (C) 2020 nono project
        !             4: // Licensed under nono-license.txt
1.1       root        5: //
                      6: 
                      7: #include "header.h"
                      8: #include "mainapp.h"
1.1.1.3 ! root        9: #include "mpu680x0.h"
1.1       root       10: #include "pluto.h"
                     11: #include "rtc.h"
                     12: #include "vm.h"
                     13: 
1.1.1.3 ! root       14: void cli_halt_callback(void *);
        !            15: 
1.1       root       16: // wxApp と相似にするためのクラス
                     17: class CLIApp
                     18: {
                     19:  public:
                     20:        bool OnInit();
                     21:        bool Parse();
1.1.1.3 ! root       22:        [[noreturn]] void OnCreate();
1.1       root       23: 
                     24:        int ac;
                     25:        char **av;
                     26: };
                     27: 
                     28: int
                     29: main(int ac, char *av[])
                     30: {
1.1.1.2   root       31:        std::unique_ptr<CLIApp> app(new CLIApp());
1.1       root       32: 
                     33:        // wxApp とよく似せるため
                     34:        app->ac = ac;
                     35:        app->av = av;
1.1.1.2   root       36:        if (!app->OnInit()) {
1.1       root       37:                return 1;
                     38:        }
                     39:        return 0;
                     40: }
                     41: 
                     42: // ここがエントリポイント(のつもり)
                     43: bool
                     44: CLIApp::OnInit()
                     45: {
1.1.1.2   root       46:        if (!gMainApp.Init(true, ac, av)) {
1.1       root       47:                return false;
                     48:        }
1.1.1.2   root       49:        if (!gMainApp.Start()) {
1.1       root       50:                return false;
                     51:        }
                     52: 
                     53:        // メインウィンドウに相当するところ
                     54:        OnCreate();
                     55: 
                     56:        return true;
                     57: }
                     58: 
                     59: // メインウィンドウ作成後のイベントに相当するところ
                     60: void
                     61: CLIApp::OnCreate()
                     62: {
1.1.1.3 ! root       63:        // VM にコールバックを登録
        !            64:        if (gMPU680x0) {
        !            65:                gMPU680x0->SetHaltCallback(cli_halt_callback, NULL);
        !            66:        }
        !            67: 
1.1       root       68:        // 時刻開始?
                     69:        // なるべく VM が開始する直前にしたい。
                     70:        gRTC->InitRTC();
                     71: 
                     72:        // VM 実行開始
                     73:        gVM->PowerButton();
                     74: 
                     75:        // ?
                     76:        for (;;) {
                     77:                sleep(1);
                     78:        }
                     79: }
1.1.1.3 ! root       80: 
        !            81: // m680x0 ダブルバスフォールト時に呼ばれるコールバック。
        !            82: void
        !            83: cli_halt_callback(void *dummy)
        !            84: {
        !            85:        // どうする?
        !            86:        warnx("Double bus fault has occurred in VM");
        !            87: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.