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

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: 
1.1.1.7   root       15:  protected:
1.1       root       16:        // このデバイス先頭アドレス
                     17:        static const uint32 baseaddr            = 0x41000000;
                     18: 
                     19:        // 謎の I/O 空間
1.1.1.2   root       20:        static const uint32 ROMIO_BASE          = 0x41010000;
                     21:        static const uint32 ROMIO_INIT          = (ROMIO_BASE + 0);
                     22:        static const uint32 ROMIO_KEYIN         = (ROMIO_BASE + 4);
                     23:        static const uint32 ROMIO_CLOSE         = (ROMIO_BASE + 8);
1.1.1.6   root       24:        static const uint32 ROMIO_ENTRY         = (ROMIO_BASE + 12);
1.1       root       25: 
1.1.1.9 ! root       26:        // 文字コード
        !            27:        // 概ね ASCII だが制御コード部分は必要な文字だけを適当に割り当てる。
        !            28:        static const char BS            = 0x08;
        !            29:        static const char LF            = 0x0a;
        !            30:        static const char UP            = 0x1c;
        !            31:        static const char LEFT          = 0x1d;
        !            32:        static const char RIGHT         = 0x1e;
        !            33:        static const char DOWN          = 0x1f;
        !            34: 
1.1.1.7   root       35:        // ブート情報格納用
                     36:        struct bootinfo_t {
                     37:                int dkunit {};
                     38:                int dkpart {};
                     39:                std::string dkfile {};
                     40:        };
                     41: 
1.1       root       42:  public:
                     43:        LunaPROMEmuDevice();
1.1.1.5   root       44:        virtual ~LunaPROMEmuDevice() override;
1.1       root       45: 
1.1.1.2   root       46:        bool Init() override;
                     47:        void ResetHard() override;
1.1       root       48: 
1.1.1.2   root       49:        uint64 Read8(uint32 addr) override;
                     50:        uint64 Read16(uint32 addr) override;
                     51:        uint64 Read32(uint32 addr) override;
                     52:        uint64 Write8(uint32 addr, uint32 data) override;
                     53:        uint64 Write16(uint32 addr, uint32 data) override;
                     54:        uint64 Write32(uint32 addr, uint32 data) override;
                     55:        uint64 Peek8(uint32 addr) override;
1.1       root       56: 
1.1.1.7   root       57:  protected:
                     58:        virtual uint32 ROM_Init() = 0;
                     59:        virtual uint32 ROM_Entry() = 0;
                     60:        virtual void ROM_Close();
1.1.1.9 ! root       61:        virtual void GetChar(char);
1.1.1.7   root       62:        virtual void Command() = 0;
1.1       root       63: 
1.1.1.7   root       64:        void InitDevice();
                     65:        void InitScreen(const char *machine_name);
1.1.1.9 ! root       66:        void ClearPrompt();
1.1.1.2   root       67:        void ConsoleUpdate();
1.1.1.9 ! root       68: 
        !            69:        // NVRAM
        !            70:        uint8 CalcNVRAMCsum() const;
        !            71:        void WriteNVRAMCsum();
        !            72:        bool VerifyNVRAM() const;
        !            73: 
1.1       root       74:        uint32 LoadHostFile();
1.1.1.7   root       75:        uint32 LoadGuestFile(const bootinfo_t&);
1.1.1.2   root       76: 
1.1.1.4   root       77:        std::unique_ptr<uint8[]> romdata {};
1.1       root       78: 
                     79:        // エラーメッセージの受け渡し用
                     80:        // 基本的にエラーが起きた時だけ更新するので、ここにエラーメッセージを
                     81:        // 返す可能性がある関数をコールする前に呼び出し側が clear() しておき、
                     82:        // 関数から戻ったら empty() かどうか確認する、errno みたいな使い方。
1.1.1.4   root       83:        std::string errmsg {};
1.1       root       84: 
                     85:        // ROM モニタ用コンソール画面
1.1.1.9 ! root       86:        TextScreen text {};
1.1       root       87: 
                     88:        // 入力バッファ
                     89:        std::string inputbuf {};
                     90: 
1.1.1.7   root       91:        // 現在のプロンプト文字列
                     92:        std::string prompt {};
1.1       root       93: 
1.1.1.9 ! root       94:        // プロンプトのある行(最上行が 0)
        !            95:        int prompt_y {};
        !            96: 
        !            97:        // カーソル位置(入力バッファ先頭が0)
        !            98:        int inputpos {};
        !            99: 
1.1       root      100:        // NVRAM
                    101:        // 本来他デバイスはすべてグローバル参照できるのだが、LUNA の NVRAM は
                    102:        // RTC と兼用になっていて、RTCDevice *gRTC として見えるので
                    103:        // MK48T02Device にするには dynamic_cast する必要がある。
1.1.1.4   root      104:        MK48T02Device *nvram {};
1.1       root      105: 
1.1.1.7   root      106:  private:
                    107:        uint64 Decoder(uint32 addr) const;
                    108: 
1.1.1.8   root      109:        // ROM->RAM 切り替え用フラグ。true なら ROM モード
                    110:        bool isrom {};
                    111: 
1.1.1.7   root      112:        // キー入力
                    113:        void ROM_Keyin();
                    114: 
                    115:        bool is_shift {};                       // SHIFT キー押し下げ中
                    116:        int mousecnt {};                        // マウス入力をスキップするためのカウンタ
                    117: 
1.1       root      118:        // LUNA キーコード -> ASCII 変換テーブル
                    119:        static const uint8 lunakey2asciitable[128];
                    120:        static const uint8 lunakey2shifttable[128];
                    121: };

unix.superglobalmegacorp.com

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