--- nono/vm/subram.h 2026/04/29 17:05:25 1.1.1.2 +++ nono/vm/subram.h 2026/04/29 17:05:29 1.1.1.3 @@ -17,26 +17,34 @@ class SubRAMBaseDevice : public IODevice { using inherited = IODevice; public: - SubRAMBaseDevice(int objid_, uint ramsize_kb); + SubRAMBaseDevice(uint objid_, uint ramsize_kb); ~SubRAMBaseDevice() override; void ResetHard(bool poweron) override; - busdata Read8(uint32 addr) override; - busdata Read16(uint32 addr) override; - busdata Read32(uint32 addr) override; - busdata Write8(uint32 addr, uint32 data) override; - busdata Write16(uint32 addr, uint32 data) override; - busdata Write32(uint32 addr, uint32 data) override; - busdata Peek8(uint32 addr) override; - bool 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: // アドレスデコーダ uint32 Decoder(uint32 addr) const; + // RAM 容量(バイト単位)を取得 + uint GetSize() const { return mask + 1; } + std::unique_ptr ram {}; - uint ramsize {}; + uint32 mask {}; }; // サブメモリ (XP/Lance との共有 RAM) @@ -44,18 +52,18 @@ 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; };