--- nono/vm/bankram.h 2026/04/29 17:05:20 1.1 +++ nono/vm/bankram.h 2026/04/29 17:05:50 1.1.1.4 @@ -11,25 +11,22 @@ #pragma once #include "device.h" +#include "mainbus.h" class BankRAMDevice : public IODevice { using inherited = IODevice; public: - BankRAMDevice(int objid_, int ram_size_MB); - virtual ~BankRAMDevice() override; + BankRAMDevice(uint objid_, int ram_size_MB); + ~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 Read(busaddr addr) override; + busdata Write(busaddr addr, uint32 data) override; + busdata Peek1(uint32 addr) override; + bool Poke1(uint32 addr, uint32 data) override; // バンクページ取得・設定 uint32 GetPage() const { return page; } @@ -38,6 +35,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 +50,14 @@ class BankRAMDevice : public IODevice // ページ番号をリニアアドレスにした状態で保持。 uint32 pageaddr {}; + + // ウェイト [nsec] + busdata wait {}; + + // アクセス状況 + alignas(8) uint8 accstat_read[AccStat::BANKLEN] {}; + alignas(8) uint8 accstat_write[AccStat::BANKLEN] {}; }; + +// GetBankRAMDevice() は用意していない。 +// BankRAMDevice は存在しない場合があるので FindObject() を使うこと。