--- nono/vm/xpbus.h 2026/04/29 17:05:17 1.1 +++ nono/vm/xpbus.h 2026/04/29 17:05:29 1.1.1.3 @@ -10,16 +10,17 @@ #pragma once -#include "device.h" +#include "mainbus.h" #include +class SubRAMDevice; class SubRAM2Device; class XPRAMDevice; // XP 外部バス -class XPbusDevice : public IOContainerDevice +class XPbusDevice : public IODevice { - using inherited = IOContainerDevice; + using inherited = IODevice; public: XPbusDevice(); ~XPbusDevice() override; @@ -27,14 +28,10 @@ class XPbusDevice : public IOContainerDe bool Init() override; void ResetHard(bool poweron) override; - // 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; + busdata Read1(uint32 addr) override; + busdata Write1(uint32 addr, uint32 data) override; + busdata Peek1(uint32 addr) override; + bool Poke1(uint32 addr, uint32 data) override; // RAM Control Register (RMCR) を設定/取得 uint32 GetRMCR() const; @@ -42,9 +39,6 @@ class XPbusDevice : public IOContainerDe // 内蔵 RAM の先頭番地を取得 (モニタ用) uint32 GetXPRAMAddr() const { return ram_addr; } - protected: - IODevice *GetDevice(uint32 addr) const override; - private: inline IODevice *SearchDevice(uint32 addr) const; @@ -56,8 +50,8 @@ class XPbusDevice : public IOContainerDe // XP 内蔵 512 バイト RAM の位置 uint32 ram_addr {}; - IODevice *subram {}; // 共有 SRAM - IODevice *nopio {}; + SubRAMDevice *subram {}; // 共有 SRAM + NopIODevice *nopio {}; }; // XP 内蔵 RAM @@ -68,14 +62,10 @@ class XPRAMDevice : public IODevice XPRAMDevice(); ~XPRAMDevice() 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; - uint64 Poke8(uint32 addr, uint32 data) override; + busdata Read1(uint32 addr) override; + busdata Write1(uint32 addr, uint32 data) override; + busdata Peek1(uint32 addr) override; + bool Poke1(uint32 addr, uint32 data) override; private: std::array ram {};