Annotation of nono/vm/romemu_luna.h, revision 1.1

1.1     ! root        1: //
        !             2: // nono
        !             3: // Copyright (C) 2020 [email protected]
        !             4: //
        !             5: 
        !             6: #pragma once
        !             7: 
        !             8: #include "romimg_luna.h"
        !             9: 
        !            10: class LunaPROMEmuDevice : public PROMDevice
        !            11: {
        !            12:        typedef PROMDevice inherited;
        !            13: 
        !            14:        // このデバイス先頭アドレス
        !            15:        static const uint32 baseaddr            = 0x41000000;
        !            16: 
        !            17:        // 謎の I/O 空間
        !            18:        static const uint32 ROMIO_BASE                  = 0x41010000;
        !            19:        static const uint32 ROMIO_IPL_INIT              = (ROMIO_BASE + 0);
        !            20:        static const uint32 ROMIO_IPL_PROMPT    = (ROMIO_BASE + 4);
        !            21:        static const uint32 ROMIO_IPL_CLOSE             = (ROMIO_BASE + 8);
        !            22: 
        !            23:  public:
        !            24:        LunaPROMEmuDevice();
        !            25:        virtual ~LunaPROMEmuDevice();
        !            26: 
        !            27:        virtual bool Init();
        !            28:        virtual void ResetHard();
        !            29: 
        !            30:        virtual uint64 Read32(uint32 addr);
        !            31: 
        !            32:  private:
        !            33:        uint64 Decoder(uint32 addr) const;
        !            34: 
        !            35:        uint32 IPL_Init();
        !            36:        uint32 IPL_Close();
        !            37:        uint32 IPL_Prompt();
        !            38:        uint32 IPL_Command();
        !            39:        void IPL_CommandG(const std::vector<std::string>& arg);
        !            40:        void IPL_CommandGH();
        !            41:        uint32 LoadHostFile();
        !            42:        void IPL_CommandK(const std::vector<std::string>& arg);
        !            43:        bool CommandKInput(const std::string& val);
        !            44:        uint32 IPL_CommandX();
        !            45: 
        !            46:        // NVRAM
        !            47:        uint8 CalcNVRAMCsum();
        !            48:        void WriteNVRAMCsum();
        !            49:        bool VerifyNVRAM();
        !            50:        bool InitNVRAM();
        !            51: 
        !            52:        // NVRAM の設定に従って起動
        !            53:        uint32 LoadByNVRAM(const std::string& fname);
        !            54: 
        !            55:        // 状態マシン
        !            56:        int ipl_state {};
        !            57:        // 'g' コマンドで読み込んだプログラムのエントリポイント。
        !            58:        // なければ 0。'x' コマンドで使う。
        !            59:        uint32 entrypoint;
        !            60:        // エラーメッセージの受け渡し用
        !            61:        // 基本的にエラーが起きた時だけ更新するので、ここにエラーメッセージを
        !            62:        // 返す可能性がある関数をコールする前に呼び出し側が clear() しておき、
        !            63:        // 関数から戻ったら empty() かどうか確認する、errno みたいな使い方。
        !            64:        std::string errmsg;
        !            65: 
        !            66:        // ROM モニタ用コンソール画面
        !            67:        TextScreen text;
        !            68: 
        !            69:        // 入力バッファ
        !            70:        std::string inputbuf {};
        !            71:        int inputpos {};                        // カーソル位置
        !            72:        bool is_shift;                          // SHIFT キー押し下げ中
        !            73: 
        !            74:        // プロンプトと入力モード
        !            75:        std::string prompt {};          // 現在のプロンプト文字列
        !            76:        // プロンプトの状態。
        !            77:        // 0 が通常プロンプト。
        !            78:        // 1 以降は k コマンドのプロンプトを示す
        !            79:        int prompt_idx {};
        !            80:        const std::string default_prompt = ">"; // デフォルトプロンプト
        !            81: 
        !            82:        // NVRAM
        !            83:        // 本来他デバイスはすべてグローバル参照できるのだが、LUNA の NVRAM は
        !            84:        // RTC と兼用になっていて、RTCDevice *gRTC として見えるので
        !            85:        // MK48T02Device にするには dynamic_cast する必要がある。
        !            86:        MK48T02Device *nvram;
        !            87: 
        !            88:        // LUNA キーコード -> ASCII 変換テーブル
        !            89:        static const uint8 lunakey2asciitable[128];
        !            90:        static const uint8 lunakey2shifttable[128];
        !            91: };

unix.superglobalmegacorp.com

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