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

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

unix.superglobalmegacorp.com

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