--- nono/vm/interrupt.cpp 2026/04/29 17:05:28 1.1.1.10 +++ nono/vm/interrupt.cpp 2026/04/29 17:05:37 1.1.1.12 @@ -42,8 +42,9 @@ #include "goldfish_pic.h" #include "lance.h" #include "pedec.h" -#include "m68030.h" +#include "m680x0.h" #include "mfp.h" +#include "monitor.h" #include "mpu680x0.h" #include "newsctlr.h" #include "nmi.h" @@ -193,22 +194,11 @@ M680x0Interrupt::~M680x0Interrupt() bool M680x0Interrupt::Init() { - if (inherited::Init() == false) { - return false; - } - mpu680x0 = GetMPU680x0Device(mpu); return true; } -// リセット -void -M680x0Interrupt::ResetHard(bool poweron) -{ - inherited::ResetHard(poweron); -} - void M680x0Interrupt::ChangeInterrupt() { @@ -232,8 +222,8 @@ M680x0Interrupt::ChangeInterrupt() // コンストラクタ X68030Interrupt::X68030Interrupt() { - monitor.func = ToMonitorCallback(&X68030Interrupt::MonitorUpdate); - monitor.Regist(ID_MONITOR_INTERRUPT); + monitor = gMonitorManager->Regist(ID_MONITOR_INTERRUPT, this); + monitor->func = ToMonitorCallback(&X68030Interrupt::MonitorUpdate); } // デストラクタ @@ -287,7 +277,7 @@ X68030Interrupt::Init() disp_list.push_back((uint32)IntmapPEDEC); // 行数が確定したのでサイズ設定 - monitor.SetSize(41, 1 + disp_list.size() + 5/*PEDEC*/); + monitor->SetSize(41, 1 + disp_list.size() + 5/*PEDEC*/); return true; } @@ -372,8 +362,8 @@ X68030Interrupt::MonitorUpdate(Monitor * // コンストラクタ LunaInterrupt::LunaInterrupt() { - monitor.func = ToMonitorCallback(&LunaInterrupt::MonitorUpdate); - monitor.Regist(ID_MONITOR_INTERRUPT); + monitor = gMonitorManager->Regist(ID_MONITOR_INTERRUPT, this); + monitor->func = ToMonitorCallback(&LunaInterrupt::MonitorUpdate); } // デストラクタ @@ -410,7 +400,7 @@ LunaInterrupt::Init() }; // 行数が確定したのでサイズ設定 - monitor.SetSize(40, 1 + disp_list.size()); + monitor->SetSize(40, 1 + disp_list.size()); return true; } @@ -463,8 +453,8 @@ LunaInterrupt::MonitorUpdate(Monitor *, // コンストラクタ NewsInterrupt::NewsInterrupt() { - monitor.func = ToMonitorCallback(&NewsInterrupt::MonitorUpdate); - monitor.Regist(ID_MONITOR_INTERRUPT); + monitor = gMonitorManager->Regist(ID_MONITOR_INTERRUPT, this); + monitor->func = ToMonitorCallback(&NewsInterrupt::MonitorUpdate); } // デストラクタ @@ -496,7 +486,7 @@ NewsInterrupt::Init() }; // 行数が確定したのでサイズ設定 - monitor.SetSize(40, 1 + disp_list.size()); + monitor->SetSize(40, 1 + disp_list.size()); return true; } @@ -571,8 +561,8 @@ NewsInterrupt::MonitorUpdate(Monitor *, // コンストラクタ Virt68kInterrupt::Virt68kInterrupt() { - monitor.func = ToMonitorCallback(&Virt68kInterrupt::MonitorUpdate); - monitor.Regist(ID_MONITOR_INTERRUPT); + monitor = gMonitorManager->Regist(ID_MONITOR_INTERRUPT, this); + monitor->func = ToMonitorCallback(&Virt68kInterrupt::MonitorUpdate); } // デストラクタ @@ -617,7 +607,7 @@ Virt68kInterrupt::Init() // ここまでの行数でサイズ設定。 // この後各割り込みソースの Init() から GFPIC への RegistIRQ() する // たびに増やされていく。 - monitor.SetSize(77, 2 + disp_list.size() + 1); + monitor->SetSize(77, 2 + disp_list.size() + 1); return true; } @@ -625,8 +615,8 @@ Virt68kInterrupt::Init() void Virt68kInterrupt::IncMonitorHeight() { - auto size = monitor.GetSize(); - monitor.SetSize(size.width, size.height + 1); + auto size = monitor->GetSize(); + monitor->SetSize(size.width, size.height + 1); } // 割り込みアクノリッジに応答する