--- nono/vm/mpu.h 2026/04/29 17:04:32 1.1.1.2 +++ nono/vm/mpu.h 2026/04/29 17:04:42 1.1.1.4 @@ -1,6 +1,7 @@ // // nono -// Copyright (C) 2017 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // // MPU 共通部 @@ -8,13 +9,16 @@ #pragma once #include "device.h" +#include "event.h" class MPUDevice : public Device { - typedef Device inherited; + using inherited = Device; public: MPUDevice(); - virtual ~MPUDevice(); + ~MPUDevice() override; + + virtual void ResetHard() override; // MPU を request サイクル分実行する virtual uint32 Run(uint64 request) = 0; @@ -36,11 +40,15 @@ class MPUDevice : public Device virtual uint32 GetLaddr() const = 0; virtual uint32 GetPaddr() const = 0; + // アクセスウェイトを加算 + virtual void AddCycle(uint64 cycle) = 0; + // 割り込み発生を MPU に通知 (オートベクタ) - virtual void Interrupt(int level) = 0; -}; + virtual void Interrupt(Object *src, int level) = 0; -#include "mpu680x0.h" -#include "mpu88xx0.h" + protected: + // リセット例外を起こすイベント + Event reset_event {}; +}; extern std::unique_ptr gMPU;