--- nono/vm/sysctlr.cpp 2026/04/29 17:04:50 1.1.1.4 +++ nono/vm/sysctlr.cpp 2026/04/29 17:04:56 1.1.1.5 @@ -146,11 +146,13 @@ // コンストラクタ SysCtlrDevice::SysCtlrDevice() + : inherited("SystemCtlr") { - logname = "sysctlr"; - devname = "SysCtlr"; + AddAlias("SysCtlr"); - monitor_size = nnSize(24, 10); + monitor.func = (MonitorCallback_t)&SysCtlrDevice::MonitorUpdate; + monitor.SetSize(24, 10); + monitor.Regist(ID_MONITOR_INTERRUPT); } // デストラクタ @@ -277,7 +279,7 @@ SysCtlrDevice::Peek8(uint32 addr) } void -SysCtlrDevice::MonitorUpdate(TextScreen& monitor) +SysCtlrDevice::MonitorUpdate(Monitor *, TextScreen& screen) { int y; struct { @@ -298,18 +300,18 @@ SysCtlrDevice::MonitorUpdate(TextScreen& // CPU の割り込み可否は本当は関係ないけど、便宜的に一緒に表示したい bool ei = gMPU88xx0->GetCPU()->IsIntrEnable(); - monitor.Clear(); + screen.Clear(); y = 0; // XXX CPU の実装数によってウィンドウ幅を変える。 // はみ出したところは描画されないのでヘッダは4つ分出力しておく - monitor.Print(0, y++, "Lv Device Count CPU0 CPU1 CPU2 CPU3"); + screen.Print(0, y++, "Lv Device Count CPU0 CPU1 CPU2 CPU3"); for (int i = 0; i < countof(table); i++) { uint32 map = table[i].map; int clz = __builtin_clz(map); int lv = (31 - clz) / 4; - monitor.Print(0, y, "%d", lv); - monitor.Print(2, y, TA::OnOff(intmap & map), "%s", table[i].name); - monitor.Print(8, y, "%10u", counter[clz]); + screen.Print(0, y, "%d", lv); + screen.Print(2, y, TA::OnOff(intmap & map), "%s", table[i].name); + screen.Print(8, y, "%10u", counter[clz]); // CPU ごとのマスク // XXX 今は CPU は1つしかない @@ -318,11 +320,11 @@ SysCtlrDevice::MonitorUpdate(TextScreen& // 動作としては常にマスクされてて通過しないから問題ないが、 // 見せる分にはマスクされているではなく無効と見せたほうがいい。 if (lv == 1 && map != (IntmapSoft0 << n)) { - monitor.Puts(20 + n * 5, y, "----"); + screen.Puts(20 + n * 5, y, "----"); } else if ((cpu[n].intmask & map) == 0) { - monitor.Puts(20 + n * 5, y, "Mask"); + screen.Puts(20 + n * 5, y, "Mask"); } else if (!ei) { - monitor.Puts(20 + n * 5, y, "IND"); + screen.Puts(20 + n * 5, y, "IND"); } }