--- nono/vm/mainram.h 2026/04/29 17:05:18 1.1 +++ nono/vm/mainram.h 2026/04/29 17:06:01 1.1.1.5 @@ -18,43 +18,44 @@ class MainRAMDevice : public IODevice using inherited = IODevice; public: MainRAMDevice(); - virtual ~MainRAMDevice() override; + ~MainRAMDevice() 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 ReadBurst16(busaddr addr, uint32 *dst) override; + busdata WriteBurst16(busaddr addr, const uint32 *dst) override; + busdata Peek1(uint32 addr) override; + bool Poke1(uint32 addr, uint32 data) override; + + // 領域アクセス + bool ReadMem(uint32 addr, void *dst, uint32 len); + bool WriteMem(uint32 addr, const void *src, uint32 len); // RAM 容量(バイト単位)を取得 - int GetSize() const { return ram_size; } + size_t GetSize() const { return ram_size; } // RAM 容量(MB単位)を取得 - int GetSizeMB() const { return (uint)ram_size / 1024 / 1024; } + uint GetSizeMB() const { return (uint)(ram_size / 1024 / 1024); } - // アクセスウェイトを設定 - void SetWait(uint32 wait); - - // path で指定されたホストファイルをロードする - bool LoadFromFile(LoadInfo *); - // data, size で指定されたバッファをロードする - bool LoadFromData(LoadInfo *); - - static std::unique_ptr mainram; + // アクセスウェイト [clock] を設定 + void SetWait(uint32 wait_clock); private: + std::unique_ptr mainram {}; + // RAM 容量(バイト単位)。ram[] の確保したバイト数 - int ram_size {}; + size_t ram_size {}; + + // アクセスウェイト + busdata normal_wait {}; + busdata burst_wait {}; - uint32 read_wait {}; - uint32 write_wait {}; + // 電源オン時にメモリをクリアする。 + bool clear_on_boot {}; }; -static inline MainRAMDevice *GetMainRAMDevice() { +inline MainRAMDevice *GetMainRAMDevice() { return Object::GetObject(OBJ_MAINRAM); }