--- nono/vm/mpu88xx0.h 2026/04/29 17:05:25 1.1.1.13 +++ nono/vm/mpu88xx0.h 2026/04/29 17:05:43 1.1.1.16 @@ -17,14 +17,11 @@ #include "m88200.h" #include -class MPU88xx0Device : public MPUDevice, private M88100 +class MPU88xx0Device : public MainMPUDevice, private M88100 { - using inherited = MPUDevice; + using inherited = MainMPUDevice; friend class Luna88kPROMEmuDevice; - static const uint32 CPU_STATE_NORMAL = 0; - static const uint32 CPU_STATE_STOP = 1; // 疑似 STOP 状態 - enum ExceptionKind { NORMAL, DATA, @@ -59,9 +56,6 @@ class MPU88xx0Device : public MPUDevice, // 割り込みが許可なら true bool IsIntrEnable() const { return (reg.psr & PSR_IND) == 0; } - // CPU の実行状態 (uint32) を返す。 - uint32 GetState() const { return cpu_state; } - // 現在アクセス中の論理アドレス、物理アドレスを取得。 uint32 GetLaddr() const override; uint32 GetPaddr() const override; @@ -105,11 +99,11 @@ class MPU88xx0Device : public MPUDevice, void ExecTrace(Event& ev); // トレース設定。デバッガから呼び出される。 - void SetTrace(bool trace_on) override; + void SetTrace(bool enable) override; uint64 fetch() { reg.nip = reg.fip; - reg.opF = cmmu[0]->load_32(reg.fip); + reg.opF = cmmu[0]->load_4(reg.fip); reg.fip += 4; return reg.opF; } @@ -147,7 +141,7 @@ class MPU88xx0Device : public MPUDevice, bool IsMXM() const { return (reg.psr & PSR_MXM) != 0; } // FPxS1, FPxS2 レジスタを設定 - static void SetFPxS(uint32& h, uint32& l, double src, uint32 t); + static void SetFPxS(uint32 *h, uint32 *l, double src, uint32 t); void SetFPS1(double src, uint32 t1); void SetFPS2(double src, uint32 t2); void SetFPS1(uint32 src); @@ -173,9 +167,8 @@ class MPU88xx0Device : public MPUDevice, uint32 nop_counter {}; // STOP 検出用の nop 命令カウンタ // ロードストア命令用の下処理 - bool ldst_usr(uint32& usr); uint32 ldst_scale(uint32 size); - bool ldst_align(uint32 size, uint32& addr); + // 浮動小数点数命令用の処理 void ops_int(int mode); @@ -229,10 +222,6 @@ OP_PROTO(illegal); // ペンディング中の割り込みレベル int intr_pending {}; - // CPU の状態 - void ChangeState(uint32 new_state); - uint32 cpu_state {}; - // 疑似 STOP 状態に入る機能を有効にする場合 true bool pseudo_stop_enable {}; @@ -242,7 +231,7 @@ OP_PROTO(illegal); // レジスタモニター DECLARE_MONITOR_CALLBACK(MonitorUpdate); - Monitor monitor { this }; + Monitor *monitor {}; // イベントコールバック EventCallback_t exec_normal {};