--- nono/vm/subram.h 2026/04/29 17:05:17 1.1.1.1 +++ nono/vm/subram.h 2026/04/29 17:06:00 1.1.1.5 @@ -17,26 +17,35 @@ class SubRAMBaseDevice : public IODevice { using inherited = IODevice; public: - SubRAMBaseDevice(int objid_, uint ramsize_kb); - virtual ~SubRAMBaseDevice() override; + SubRAMBaseDevice(uint objid_, uint ramsize_kb); + ~SubRAMBaseDevice() override; + bool Init() 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; - uint64 Poke8(uint32 addr, uint32 data) override; + busdata Read(busaddr addr) override; + busdata Write(busaddr addr, uint32 data) override; + busdata Peek1(uint32 addr) override; + bool Poke1(uint32 addr, uint32 data) override; + + // XP からのバイトアクセス + busdata Read1(uint32 addr) override; + busdata Write1(uint32 addr, uint32 data) override; + + // Lance からのワードアクセス (これは override ではない) + busdata Read2(uint32 addr); + busdata Write2(uint32 addr, uint32 data); + busdata Peek2(uint32 addr) const; private: // アドレスデコーダ - uint64 Decoder(uint32 addr) const; + uint32 Decoder(uint32 addr) const; + + // RAM 容量(バイト単位)を取得 + uint GetSize() const { return mask + 1; } std::unique_ptr ram {}; - uint ramsize {}; + uint32 mask {}; }; // サブメモリ (XP/Lance との共有 RAM) @@ -44,21 +53,21 @@ class SubRAMDevice : public SubRAMBaseDe { using inherited = SubRAMBaseDevice; public: - SubRAMDevice(int ramsize_kb); + explicit SubRAMDevice(uint ramsize_kb); ~SubRAMDevice() override; void ResetHard(bool poweron) override; }; -// サブメモリ2 (XP の非共有部) +// サブメモリ 2 (XP の非共有部) class SubRAM2Device : public SubRAMBaseDevice { using inherited = SubRAMBaseDevice; public: - SubRAM2Device(int ramsize_kb); + explicit SubRAM2Device(uint ramsize_kb); ~SubRAM2Device() override; }; -static inline SubRAMDevice *GetSubRAMDevice() { +inline SubRAMDevice *GetSubRAMDevice() { return Object::GetObject(OBJ_SUBRAM); }