--- nono/vm/prom.h 2026/04/29 17:04:55 1.1.1.5 +++ nono/vm/prom.h 2026/04/29 17:04:59 1.1.1.6 @@ -6,10 +6,39 @@ #pragma once -#include "ethernet.h" #include "rom.h" #include "stopwatch.h" +class PROMDevice; + +class PROM0Device : public IODevice +{ + using inherited = IODevice; + public: + PROM0Device(); + virtual ~PROM0Device() 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: + // アドレスデコーダ + static uint32 Decoder(uint32 addr); + + // 書き込みの共通部分 + uint64 Write(); + + IODevice *prom {}; +}; + class PROMDevice : public ROMDevice { using inherited = ROMDevice; @@ -19,23 +48,16 @@ class PROMDevice : public ROMDevice bool Init() override; bool PowerOn() override; - void ResetHard() override; uint64 Read8(uint32 addr) override; - uint64 Write8(uint32 addr, uint32 data) override; - uint64 Write16(uint32 addr, uint32 data) override; - uint64 Write32(uint32 addr, uint32 data) override; private: bool InitLuna1(); bool InitLuna88k(); - uint64 Write(uint32 addr); - - // ROM->RAM 切り替え用フラグ。true なら ROM モード - bool isrom {}; // パフォーマンス測定用 Stopwatch sw {}; }; -extern std::unique_ptr gPROM; +extern std::unique_ptr gPROM0; +extern std::unique_ptr gPROM;