--- nono/vm/romemu_luna88k.h 2026/04/29 17:04:50 1.1.1.5 +++ nono/vm/romemu_luna88k.h 2026/04/29 17:05:24 1.1.1.12 @@ -4,34 +4,67 @@ // Licensed under nono-license.txt // +// +// LUNA-88K の ROM エミュレーション +// + #pragma once #include "romemu_luna.h" +class MPU88xx0Device; + class Luna88kPROMEmuDevice : public LunaPROMEmuDevice { using inherited = LunaPROMEmuDevice; + // プロンプト種別 + enum { + PROMPT_DEFAULT = 0, + PROMPT_NVRAM_UPDATE, + PROMPT_NVRAM_NEW, + PROMPT_NVRAM_INIT, + }; + public: Luna88kPROMEmuDevice(); - virtual ~Luna88kPROMEmuDevice() override; + ~Luna88kPROMEmuDevice() override; bool Init() override; + // DOS call エミュレーション + bool FLineCallback(MPU88xx0Device *cpu); + private: - uint32 ROM_Init() override; - uint32 ROM_Entry() override; + void ROM_InitMD() override; + void ProcessChar(char asciicode) override; + uint32 LoadFile(const std::string& fname) override; void Command() override; + + void CommandH(const std::vector& arg); void CommandB(const std::vector& arg); - void CommandBH(); void CommandNvram(const std::vector& arg); + void CommandNvramShowAll(); + void CommandNvramShow(const std::vector& arg); + void CommandNvramUpdate(const std::vector& arg); + void CommandNvramUpdate2(char); + void CommandNvramNew2(char); + void CommandNvramDelete(const std::vector& arg); + void CommandNvramInit(); + void CommandNvramInit2(char); // NVRAM - uint8 CalcNVRAMCsum(); - void WriteNVRAMCsum(); - bool VerifyNVRAM(); - bool InitNVRAM(); - void GetNVRAM(bootinfo_t&); - - uint32 b_entrypoint {}; + uint32 FindNVRAM(const std::string& key) const; + bool InitNVRAM() override; + void GetNVRAM(bootinfo_t&) override; + + // nvram コマンドの遷移で覚えておくもの + int nvram_offset {}; + std::string nvram_key {}; + std::string nvram_val {}; + + // プロンプトの状態。 + // 0 (PROMPT_DEFAULT) が通常の行入力プロンプト。 + // PROMPT_NVRAM_* は nvram コマンドでの確認プロンプト。 + int prompt_idx {}; };