--- nono/wx/wxdumpmonitor.cpp 2026/04/29 17:05:23 1.1.1.14 +++ nono/wx/wxdumpmonitor.cpp 2026/04/29 17:05:31 1.1.1.15 @@ -11,6 +11,8 @@ #include "wxdumpmonitor.h" #include "mainapp.h" #include "mainbus.h" +#include "monitor.h" +#include "mpu680x0.h" enum { ID_TEXT = IDGROUP_MEMDUMP, @@ -63,6 +65,7 @@ WXMemdumpWindow::WXMemdumpWindow(wxWindo // 上枠用の下敷きパネル auto *ctrlpanel = new wxPanel(this); + ctrlpanel->SetName("WXMemdumpWindow.CtrlPanel"); topsizer->Add(ctrlpanel, 0, wxEXPAND); // 上枠用の横 sizer @@ -89,12 +92,25 @@ WXMemdumpWindow::WXMemdumpWindow(wxWindo // 表示形式 (機種によって選択肢と名前が異なる) if (gMainApp.Has(VMCap::M68K)) { + auto mpu680x0 = GetMPU680x0Device(GetMPUDevice()); fmts.emplace_back(Memdump::Byte, _("Byte")); fmts.emplace_back(Memdump::Word, _("Word")); fmts.emplace_back(Memdump::Long, _("Long Word")); - fmts.emplace_back(Memdump::M68030PageShort, - _("MMU Descriptor (Short Format)")); - fmts.emplace_back(Memdump::M68030Disasm, _("68030 Disassemble")); + switch (mpu680x0->GetMPUType()) { + case m680x0MPUType::M68030: + fmts.emplace_back(Memdump::M68030PageShort, + _("MMU Descriptor (Short Format)")); + break; + case m680x0MPUType::M68040: + fmts.emplace_back(Memdump::M68040TableDesc, + _("MMU Table Descriptor")); + fmts.emplace_back(Memdump::M68040PageDesc, + _("MMU Page Descriptor")); + break; + default: + break; + } + fmts.emplace_back(Memdump::M680x0Disasm, _("680x0 Disassemble")); } else { fmts.emplace_back(Memdump::Byte, _("Byte")); fmts.emplace_back(Memdump::Word, _("Half Word")); @@ -138,7 +154,7 @@ WXMemdumpWindow::WXMemdumpWindow(wxWindo // メモリダンプオブジェクトを取得 auto mon = screen->GetMonitor(); - memdump = dynamic_cast(mon.obj); + memdump = dynamic_cast(mon->obj); assert(memdump); // 初期値をコントロールに設定 @@ -348,7 +364,7 @@ WXMemdumpWindow::OnDClick(wxMouseEvent& PANIC("not supported"); break; - case Memdump::M68030Disasm: + case Memdump::M680x0Disasm: len = 2; addr = GetAddrAtDisasm(x, y, len); break;