--- nono/vm/bankram.h 2026/04/29 17:05:20 1.1 +++ nono/vm/bankram.h 2026/04/29 17:05:24 1.1.1.2 @@ -11,25 +11,26 @@ #pragma once #include "device.h" +#include class BankRAMDevice : public IODevice { using inherited = IODevice; public: BankRAMDevice(int objid_, int ram_size_MB); - virtual ~BankRAMDevice() override; + ~BankRAMDevice() 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 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; // バンクページ取得・設定 uint32 GetPage() const { return page; } @@ -38,6 +39,9 @@ class BankRAMDevice : public IODevice // バンクメモリ容量 [MB]を取得 (負数は扱わない) uint GetSize() const { return ram_size / 1024 / 1024; } + // アクセス状況の取得とクリア + void FetchAccStat(uint8 *buf); + private: // アドレスデコーダ inline uint32 Decoder(uint32 addr) const; @@ -50,4 +54,11 @@ class BankRAMDevice : public IODevice // ページ番号をリニアアドレスにした状態で保持。 uint32 pageaddr {}; + + // アクセス状況 + std::array accstat_read {}; + std::array accstat_write {}; }; + +// GetBankRAMDevice() は用意していない。 +// BankRAMDevice は存在しない場合があるので FindObject() を使うこと。