--- nono/vm/romemu_luna88k.h 2026/04/29 17:04:32 1.1.1.1 +++ nono/vm/romemu_luna88k.h 2026/04/29 17:04:36 1.1.1.2 @@ -1,15 +1,16 @@ // // nono -// Copyright (C) 2020 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once -#include "romimg_luna.h" +#include "device.h" -class Luna88kPROMEmuDevice : public PROMDevice +class Luna88kPROMEmuDevice : public IODevice { - typedef PROMDevice inherited; + using inherited = IODevice; // このデバイス先頭アドレス static const uint32 baseaddr = 0x41000000; @@ -20,12 +21,18 @@ class Luna88kPROMEmuDevice : public PROM public: Luna88kPROMEmuDevice(); - virtual ~Luna88kPROMEmuDevice(); + ~Luna88kPROMEmuDevice() override; - virtual bool Init(); - virtual void ResetHard(); + bool Init() override; + void ResetHard() override; - virtual uint64 Read32(uint32 addr); + 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; @@ -33,6 +40,10 @@ class Luna88kPROMEmuDevice : public PROM // 起動時の処理を行う uint32 IPL(); + // 自前 ROM 部分 + std::unique_ptr romdata {}; + uint32 romdatalen {}; + // リセット後 IPL を完了したら true bool ipl_done = false; };