--- nono/vm/mpu.h 2026/04/29 17:05:28 1.1.1.15 +++ nono/vm/mpu.h 2026/04/29 17:05:49 1.1.1.17 @@ -11,7 +11,6 @@ #pragma once #include "device.h" -#include "event.h" #include "message.h" #include @@ -35,7 +34,7 @@ class MPUDevice : public Device protected: // 1命令実行イベント - Event exec_event { this }; + Event *exec_event {}; Debugger *debugger {}; }; @@ -44,6 +43,12 @@ class MPUDevice : public Device class MainMPUDevice : public MPUDevice { using inherited = MPUDevice; + protected: + // CPU の実行状態 + static const uint32 CPU_STATE_NORMAL = 0; + static const uint32 CPU_STATE_STOP = 1; + static const uint32 CPU_STATE_HALT = 2; + public: MainMPUDevice(); ~MainMPUDevice() override; @@ -59,6 +64,9 @@ class MainMPUDevice : public MPUDevice virtual uint32 GetLaddr() const = 0; virtual uint32 GetPaddr() const = 0; + // CPU の実行状態 (uint32) を返す。 + uint32 GetState() const noexcept { return cpu_state; } + // MPU 名を取得する。("MC68030" みたいなやつ、ログ名とは別) virtual const char *GetMPUName() const = 0; @@ -79,7 +87,13 @@ class MainMPUDevice : public MPUDevice protected: void TraceMessage(MessageID, uint32); - virtual void SetTrace(bool trace_on) = 0; + virtual void SetTrace(bool enable) = 0; + + // CPU の状態 + void ChangeState(uint32 new_state); + + // CPU の実行状態 + uint32 cpu_state {}; uint clock_khz {}; // MPU クロック [kHz] uint64 clock_nsec {}; // MPU クロック [nsec]