--- nono/vm/interrupt.cpp 2026/04/29 17:04:45 1.1.1.1 +++ nono/vm/interrupt.cpp 2026/04/29 17:04:47 1.1.1.2 @@ -134,7 +134,7 @@ M680x0Interrupt::NegateINT(Device *sourc // コンストラクタ X68030Interrupt::X68030Interrupt() { - monitor_size = nnSize(24, 6); + monitor_size = nnSize(24, 11); } // デストラクタ @@ -201,10 +201,18 @@ X68030Interrupt::MonitorUpdate(TextScree { "SCC", IntmapSCC }, { "DMAC", IntmapDMAC }, { "PEDEC", IntmapPEDEC }, + }, tablePEDEC[] = { + { "SPC", PEDECDevice::IntmapSPC }, + { "FDC", PEDECDevice::IntmapFDC }, + { "FDD", PEDECDevice::IntmapFDD }, + { "HDD", PEDECDevice::IntmapHDD }, + { "PRT", PEDECDevice::IntmapPRT }, }; // CPU の割り込み可否は本当は関係ないけど、便宜的に一緒に表示したい uint intr_level = gMPU680x0->GetCPU()->reg.intr_level; + // PEDEC 分も一緒に表示したい + uint32 pintr = gPEDEC->GetInt(); monitor.Clear(); @@ -222,7 +230,18 @@ X68030Interrupt::MonitorUpdate(TextScree } y++; } - // XXX PEDEC 分もここに表示したい + + // pintr は下位ワードが割り込み状態、上位ワードが許可状態。 + uint32 pmask = pintr >> 16; + for (int i = 0; i < countof(tablePEDEC); i++) { + uint32 map = tablePEDEC[i].map; + monitor.Puts(3, y, TA::OnOff(pintr & map), tablePEDEC[i].name); + // XXX カウンタはまだない + if (intr_level >= 1 || (pmask & map) == 0) { + monitor.Puts(20, y, "Mask"); + } + y++; + } } //