--- nono/vm/mpu.h 2026/04/29 17:04:47 1.1.1.6 +++ nono/vm/mpu.h 2026/04/29 17:04:59 1.1.1.9 @@ -9,17 +9,15 @@ #pragma once #include "device.h" -#include "event.h" class MPUDevice : public Device { using inherited = Device; public: - MPUDevice(); + MPUDevice(const std::string& objname_); virtual ~MPUDevice() override; bool Init() override; - void ResetHard() override; // MPU を vtime [nsec] 分実行する virtual uint32 Run(uint32 vtime) = 0; @@ -50,11 +48,19 @@ class MPUDevice : public Device // 割り込み発生を MPU に通知 virtual void Interrupt(int level) = 0; + // MPU からのアクセスをエミュレートする。 + // アドレスは論理アドレス。 + // 空間は現在のデータ空間。 + // アクセスエラーは (int64)-1 を返す。 + virtual uint64 Read8(uint32 addr) = 0; + virtual uint64 Read16(uint32 addr) = 0; + virtual uint64 Read32(uint32 addr) = 0; + virtual uint64 Write8(uint32 addr, uint32 data) = 0; + virtual uint64 Write16(uint32 addr, uint32 data) = 0; + virtual uint64 Write32(uint32 addr, uint32 data) = 0; + protected: int clock_khz {}; // MPU クロック [kHz] - - // イベント (リセット例外、割り込み) - Event event {}; }; extern std::unique_ptr gMPU;