--- nono/vm/mpu88xx0.cpp 2026/04/29 17:05:50 1.1.1.19 +++ nono/vm/mpu88xx0.cpp 2026/04/29 17:06:00 1.1.1.20 @@ -54,7 +54,7 @@ MPU88xx0Device::MPU88xx0Device() // レジスタモニター monitor = gMonitorManager->Regist(ID_MONITOR_MPUREG, this); - monitor->func = ToMonitorCallback(&MPU88xx0Device::MonitorUpdate); + monitor->SetCallback(&MPU88xx0Device::MonitorScreen); monitor->SetSize(79, 25); } @@ -71,11 +71,9 @@ MPU88xx0Device::Init() return false; } - const ConfigItem& item_stop = gConfig->Find("mpu-pseudo-stop"); - pseudo_stop_enable = (bool)item_stop.AsInt(); + pseudo_stop_enable = gConfig->Find("mpu-pseudo-stop").AsBool(); - const ConfigItem& item_altname = gConfig->Find(".m88k-altname"); - m88100disasm::use_altname = item_altname.AsInt(); + m88100disasm::use_altname = gConfig->Find(".m88k-altname").AsBool(); // MPU のバージョン。 const ConfigItem& item_88100ver = gConfig->Find("m88100-version"); @@ -147,8 +145,8 @@ MPU88xx0Device::ResetHard(bool poweron) // リセット例外が起動するまでに時間がかかるというところを都合よく真似て // おく。 - exec_event->func = ToEventCallback(&MPU88xx0Device::ResetCallback); - exec_event->time = (8 + 256) * clock_nsec; + exec_event->SetCallback(&MPU88xx0Device::ResetCallback); + exec_event->time = (8 + 256) * clock_tsec; exec_event->SetName(GetName() + " Reset"); scheduler->RestartEvent(exec_event); } @@ -163,10 +161,9 @@ MPU88xx0Device::ResetCallback(Event *ev) // 例外履歴に記録 (例外発生はブランチ履歴にも記録) // リセット例外も発生時の XIP を記録する。(LUNA-88K の PROM 1.20) + last_vector = 0; exhist.AddEntry(reg.xip | 1, 0, 0xfc000000 | 0); brhist.AddEntry(reg.xip | 1, 0, 0xfc000000 | 0); - // デバッガに通知 (例外ブレーク用) - debugger->NotifyExceptionMain(0); // 内部の例外状態をクリア resetting = false; @@ -217,8 +214,8 @@ MPU88xx0Device::ResetCallback(Event *ev) // 以降は通常走行 int cycle = used_cycle - cycle_start; - exec_event->func = exec_normal; - exec_event->time = cycle * clock_nsec; + exec_event->SetCallback(exec_normal); + exec_event->time = cycle * clock_tsec; exec_event->SetName(GetName() + " Execute"); scheduler->StartEvent(exec_event); } @@ -240,25 +237,7 @@ MPU88xx0Device::SetTrace(bool enable) } else { exec_normal = ToEventCallback(&MPU88xx0Device::ExecNormal); } - exec_event->func = exec_normal; -} - -// アクセス中の論理アドレスを取得 -uint32 -MPU88xx0Device::GetLaddr() const -{ - m88200 *m = m88200::GetBusMaster(); - assert(m); - return m->GetLaddr(); -} - -// アクセス中の物理アドレスを取得 -uint32 -MPU88xx0Device::GetPaddr() const -{ - m88200 *m = m88200::GetBusMaster(); - assert(m); - return m->GetPaddr(); + exec_event->SetCallback(exec_normal); } // Interrupt @@ -315,7 +294,7 @@ MPU88xx0Device::SetFLineCallback(bool (* // モニター更新 void -MPU88xx0Device::MonitorUpdate(Monitor *, TextScreen& screen) +MPU88xx0Device::MonitorScreen(Monitor *, TextScreen& screen) { m88100reg tmp; int x;