--- nono/vm/prom.h 2026/04/29 17:04:53 1.1.1.4 +++ nono/vm/prom.h 2026/04/29 17:05:10 1.1.1.7 @@ -4,39 +4,57 @@ // Licensed under nono-license.txt // +// +// PROM (LUNA-I, LUNA88K 共通) +// + #pragma once -#include "ethernet.h" #include "rom.h" -#include "stopwatch.h" -class PROMDevice - : public ROMDevice +class PROMDevice; + +class PROM0Device : public IODevice { - using inherited = ROMDevice; + using inherited = IODevice; public: - PROMDevice(); - virtual ~PROMDevice() override; + PROM0Device(); + virtual ~PROM0Device() override; bool Init() override; - bool PowerOn() override; - void ResetHard() override; + void ResetHard(bool poweron) 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: - bool InitLuna1(); - bool InitLuna88k(); - uint64 Write(uint32 addr); + // アドレスデコーダ + static uint32 Decoder(uint32 addr); + + // 書き込みの共通部分 + uint64 Write(); + + IODevice *prom {}; +}; - // ROM->RAM 切り替え用フラグ。true なら ROM モード - bool isrom {}; +class PROMDevice : public ROMDevice +{ + using inherited = ROMDevice; + public: + PROMDevice(); + virtual ~PROMDevice() override; - // パフォーマンス測定用 - Stopwatch sw {}; + bool Init() override; + + private: + bool InitLuna1(); + bool InitLuna88k(); }; -extern std::unique_ptr gPROM; +extern PROM0Device *gPROM0; +extern IODevice *gPROM;