--- nono/vm/romemu_luna88k.h 2026/04/29 17:04:32 1.1 +++ nono/vm/romemu_luna88k.h 2026/04/29 17:04:50 1.1.1.5 @@ -1,38 +1,37 @@ // // nono -// Copyright (C) 2020 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once -#include "romimg_luna.h" +#include "romemu_luna.h" -class Luna88kPROMEmuDevice : public PROMDevice +class Luna88kPROMEmuDevice : public LunaPROMEmuDevice { - typedef PROMDevice inherited; - - // このデバイス先頭アドレス - 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(); + virtual ~Luna88kPROMEmuDevice() override; - virtual bool Init(); - virtual void ResetHard(); - - virtual uint64 Read32(uint32 addr); + bool Init() override; private: - uint64 Decoder(uint32 addr) const; - - // 起動時の処理を行う - uint32 IPL(); + 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 = false; + uint32 b_entrypoint {}; };