--- nono/vm/sram.h 2026/04/29 17:05:13 1.1.1.9 +++ nono/vm/sram.h 2026/04/29 17:05:17 1.1.1.10 @@ -12,6 +12,7 @@ #include "device.h" #include "mappedfile.h" +#include class SRAMDevice : public IODevice { @@ -34,11 +35,23 @@ class SRAMDevice : public IODevice uint64 Write8(uint32 addr, uint32 data) override; uint64 Write16(uint32 addr, uint32 data) override; uint64 Peek8(uint32 addr) override; + uint64 Poke8(uint32 addr, uint32 data) override; - void write_enable(bool value); + void WriteEnable(bool value); + + // SRAM の指定の位置の値を副作用なく読み出す + uint32 Get8(uint32 offset) const; + uint32 Get16(uint32 offset) const; + uint32 Get32(uint32 offset) const; + + // SRAM $ed0008.L RAM 容量を返す (ホストファイル起動用) + uint32 GetRAMSize() const { return Get32(0x0008); } // SRAM $ed000c.L ROM 起動アドレスを返す (romemu 用) - uint32 GetROMAddr() const; + uint32 GetROMAddr() const { return Get32(0x000c); } + + // SRAM の初期値 + static std::array InitialData; private: // RAM 容量欄を設定値に同期させる。 @@ -47,9 +60,6 @@ class SRAMDevice : public IODevice // アドレスデコーダ uint64 Decoder(uint32 addr) const; - // ホストファイル起動用の読み出し値を返す - uint32 PeekHostBoot(uint32 offset) const; - // ファイル std::string filename {}; MappedFile file {}; @@ -58,4 +68,6 @@ class SRAMDevice : public IODevice bool writeable {}; }; -extern SRAMDevice *gSRAM; +static inline SRAMDevice *GetSRAMDevice() { + return Object::GetObject(OBJ_SRAM); +}