--- nono/vm/romemu_luna88k.h 2026/04/29 17:04:45 1.1.1.4 +++ nono/vm/romemu_luna88k.h 2026/04/29 17:04:50 1.1.1.5 @@ -6,44 +6,32 @@ #pragma once -#include "device.h" +#include "romemu_luna.h" -class Luna88kPROMEmuDevice : public IODevice +class Luna88kPROMEmuDevice : public LunaPROMEmuDevice { - using inherited = IODevice; - - // このデバイス先頭アドレス - static const uint32 baseaddr = 0x41000000; - - // 謎の I/O 空間 - static const uint32 ROMIO_BASE = 0x41010000; - static const uint32 ROMIO_IPL = (ROMIO_BASE + 0); + using inherited = LunaPROMEmuDevice; public: Luna88kPROMEmuDevice(); virtual ~Luna88kPROMEmuDevice() override; bool Init() override; - void ResetHard() override; - - uint64 Read8(uint32 addr) override; - uint64 Read16(uint32 addr) override; - uint64 Read32(uint32 addr) override; - uint64 Write8(uint32 addr, uint32 data) override; - uint64 Write16(uint32 addr, uint32 data) override; - uint64 Write32(uint32 addr, uint32 data) override; - uint64 Peek8(uint32 addr) override; private: - uint64 Decoder(uint32 addr) const; - - // 起動時の処理を行う - uint32 IPL(); - - // 自前 ROM 部分 - std::unique_ptr romdata {}; - uint32 romdatalen {}; + uint32 ROM_Init() override; + uint32 ROM_Entry() override; + void Command() override; + void CommandB(const std::vector& arg); + void CommandBH(); + void CommandNvram(const std::vector& arg); + + // NVRAM + uint8 CalcNVRAMCsum(); + void WriteNVRAMCsum(); + bool VerifyNVRAM(); + bool InitNVRAM(); + void GetNVRAM(bootinfo_t&); - // リセット後 IPL を完了したら true - bool ipl_done {}; + uint32 b_entrypoint {}; };