--- nono/vm/xpbus.h 2026/04/29 17:05:17 1.1 +++ nono/vm/xpbus.h 2026/04/29 17:06:00 1.1.1.6 @@ -10,16 +10,18 @@ #pragma once -#include "device.h" +#include "mainbus.h" #include +class NopIODevice; +class SubRAMDevice; class SubRAM2Device; class XPRAMDevice; -// XP 外部バス -class XPbusDevice : public IOContainerDevice +// XP 物理バス +class XPbusDevice : public IODevice { - using inherited = IOContainerDevice; + using inherited = IODevice; public: XPbusDevice(); ~XPbusDevice() override; @@ -27,14 +29,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 +40,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 +51,8 @@ class XPbusDevice : public IOContainerDe // XP 内蔵 512 バイト RAM の位置 uint32 ram_addr {}; - IODevice *subram {}; // 共有 SRAM - IODevice *nopio {}; + SubRAMDevice *subram {}; // 共有 SRAM + NopIODevice *nopio {}; }; // XP 内蔵 RAM @@ -68,19 +63,15 @@ 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 {}; }; -static inline XPbusDevice *GetXPbusDevice() { +inline XPbusDevice *GetXPbusDevice() { return Object::GetObject(OBJ_XPBUS); }