--- nono/vm/interrupt.cpp 2026/04/29 17:05:28 1.1.1.10 +++ nono/vm/interrupt.cpp 2026/04/29 17:06:00 1.1.1.14 @@ -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->SetCallback(&X68030Interrupt::MonitorScreen); } // デストラクタ @@ -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; } @@ -329,7 +319,7 @@ X68030Interrupt::InterruptAcknowledge(in } void -X68030Interrupt::MonitorUpdate(Monitor *, TextScreen& screen) +X68030Interrupt::MonitorScreen(Monitor *, TextScreen& screen) { int y; @@ -361,7 +351,7 @@ X68030Interrupt::MonitorUpdate(Monitor * } // PEDEC 分も一緒に表示したい - pedec->MonitorUpdate(screen, intr_mask, y); + pedec->MonitorScreen(screen, intr_mask, y); } @@ -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->SetCallback(&LunaInterrupt::MonitorScreen); } // デストラクタ @@ -410,7 +400,7 @@ LunaInterrupt::Init() }; // 行数が確定したのでサイズ設定 - monitor.SetSize(40, 1 + disp_list.size()); + monitor->SetSize(40, 1 + disp_list.size()); return true; } @@ -424,7 +414,7 @@ LunaInterrupt::InterruptAcknowledge(int } void -LunaInterrupt::MonitorUpdate(Monitor *, TextScreen& screen) +LunaInterrupt::MonitorScreen(Monitor *, TextScreen& screen) { int y; @@ -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->SetCallback(&NewsInterrupt::MonitorScreen); } // デストラクタ @@ -496,7 +486,7 @@ NewsInterrupt::Init() }; // 行数が確定したのでサイズ設定 - monitor.SetSize(40, 1 + disp_list.size()); + monitor->SetSize(40, 1 + disp_list.size()); return true; } @@ -532,7 +522,7 @@ NewsInterrupt::PeekStatus() const } void -NewsInterrupt::MonitorUpdate(Monitor *, TextScreen& screen) +NewsInterrupt::MonitorScreen(Monitor *, TextScreen& screen) { int y; @@ -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->SetCallback(&Virt68kInterrupt::MonitorScreen); } // デストラクタ @@ -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,7 @@ Virt68kInterrupt::Init() void Virt68kInterrupt::IncMonitorHeight() { - auto size = monitor.GetSize(); - monitor.SetSize(size.width, size.height + 1); + monitor->AddHeight(1); } // 割り込みアクノリッジに応答する @@ -638,7 +627,7 @@ Virt68kInterrupt::InterruptAcknowledge(i } void -Virt68kInterrupt::MonitorUpdate(Monitor *, TextScreen& screen) +Virt68kInterrupt::MonitorScreen(Monitor *, TextScreen& screen) { int y; @@ -673,7 +662,7 @@ Virt68kInterrupt::MonitorUpdate(Monitor } // 各入力ピンの状態も表示しないと何も分からない。 - gfpic[lv]->MonitorUpdateSummary(screen, 15, y); + gfpic[lv]->MonitorScreenSummary(screen, 15, y); screen.Print(51, y, "%26s", format_number(counter[clz]).c_str()); y++; @@ -685,6 +674,6 @@ Virt68kInterrupt::MonitorUpdate(Monitor for (uint32 map : disp_list) { int clz = __builtin_clz(map); int lv = (31 - clz) / 4; - y = gfpic[lv]->MonitorUpdateDetail(screen, y, lv); + y = gfpic[lv]->MonitorScreenDetail(screen, y, lv); } }