Annotation of nono/vm/romemu_luna.h, revision 1.1.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.