--- nono/vm/nmi.cpp 2026/04/29 17:05:10 1.1 +++ nono/vm/nmi.cpp 2026/04/29 17:05:25 1.1.1.4 @@ -13,12 +13,9 @@ #include "mainapp.h" #include "scheduler.h" -// グローバル参照用 -NMIDevice *gNMI; - // コンストラクタ NMIDevice::NMIDevice() - : inherited("NMI") + : inherited(OBJ_NMI) { event.func = ToEventCallback(&NMIDevice::NegateCallback); event.time = 100_msec; @@ -28,15 +25,21 @@ NMIDevice::NMIDevice() // デストラクタ NMIDevice::~NMIDevice() { - gNMI = NULL; } // 初期化 bool NMIDevice::Init() { - gScheduler->ConnectMessage(MessageID::NMI, this, - ToMessageCallback(&NMIDevice::AssertCallback)); + if (inherited::Init() == false) { + return false; + } + + interrupt = GetInterruptDevice(); + + scheduler->ConnectMessage(MessageID::NMI, this, + ToMessageCallback(&NMIDevice::AssertMessage)); + return true; } @@ -44,34 +47,34 @@ NMIDevice::Init() void NMIDevice::PressNMI() { - gScheduler->SendMessage(MessageID::NMI); + scheduler->SendMessage(MessageID::NMI); } // NMI 信号線をアサートする void NMIDevice::AssertNMI() { - gInterrupt->AssertINT(this); + interrupt->AssertINT(this); } // NMI 信号線をネゲートする void NMIDevice::NegateNMI() { - gInterrupt->NegateINT(this); + interrupt->NegateINT(this); } // NMI アサートのメッセージコールバック void -NMIDevice::AssertCallback(MessageID msgid, uint32 arg) +NMIDevice::AssertMessage(MessageID msgid, uint32 arg) { AssertNMI(); - if (gMainApp.HasVMFeature(VMF_LUNA)) { + if (gMainApp.Has(VMCap::LUNA)) { // LUNA(-I) は誰がいつどうネゲートしているのか分からないが // コードが能動的にネゲートしているようには見えないので、 // とりあえず適当な時間経過後に自動的にネゲートしておいてみる。 - gScheduler->RestartEvent(event); + scheduler->RestartEvent(event); } }