--- nono/vm/mpu.h 2026/04/29 17:05:16 1.1.1.13 +++ nono/vm/mpu.h 2026/04/29 17:05:24 1.1.1.14 @@ -23,7 +23,7 @@ class MPUDevice : public Device using inherited = Device; public: MPUDevice(); - virtual ~MPUDevice() override; + ~MPUDevice() override; bool Init() override; void PowerOff() override; @@ -40,28 +40,20 @@ class MPUDevice : public Device virtual uint32 GetLaddr() const = 0; virtual uint32 GetPaddr() const = 0; + // MPU 名を取得する。("MC68030" みたいなやつ、ログ名とは別) + virtual const char *GetMPUName() const = 0; + // MPU クロック [kHz] を取得する。 int GetClockSpeed() const { return clock_khz; } // MPU クロック [nsec] を取得する。 uint64 GetClock_nsec() const { return clock_nsec; } - // アクセスウェイトを加算 - virtual void AddCycle(int32 cycle) = 0; - // 割り込み発生を 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; + // デバイスが CI (キャッシュ禁止) をセットする。 + virtual void SetCI() = 0; protected: void TraceMessage(MessageID, uint32); @@ -83,9 +75,6 @@ class MPUDevice : public Device static const char * const rmstr[4]; }; -// XXX 互換性のためまだしばらく必要 -extern MPUDevice *gMPU; - static inline MPUDevice *GetMPUDevice() { return Object::GetObject(OBJ_MPU); }