--- nono/wx/wxmainframe.cpp 2026/04/29 17:05:53 1.1.1.24 +++ nono/wx/wxmainframe.cpp 2026/04/29 17:05:58 1.1.1.25 @@ -20,6 +20,7 @@ #include "wxmainview.h" #include "wxmonitor.h" #include "wxmpumonitor.h" +#include "wxpagetablemonitor.h" #include "wxpalettemonitor.h" #include "wxromwindow.h" #include "wxsoftkey.h" @@ -442,6 +443,7 @@ WXMainFrame::WXMainFrame(wxWindow *paren wxMenu *menuMPU = new wxMenu(); AppendIf(menuMPU, ID_MONITOR_MPUREG, _("&Registers")); AppendIf(menuMPU, ID_MONITOR_MPUATC, "&ATC"); + AppendIf(menuMPU, ID_SUBWIN_MPUPT, _("&Page Table")); AppendIf(menuMPU, ID_MONITOR_MPUCACHE, _("&Caches")); AppendIf(menuMPU, ID_MONITOR_INTERRUPT, _("&Interrupts")); AppendIfSeparator(menuMPU, VMCap::M88K); @@ -635,8 +637,7 @@ WXMainFrame::WXMainFrame(wxWindow *paren // SHOW イベントを最初にも一度起こしたいため // ステータスパネルを一旦非表示にする (これで SHOW(false) イベントが飛ぶ) statuspanel->Hide(); - const ConfigItem& item_show = gConfig->Find("show-statuspanel"); - if (item_show.AsInt() != 0) { + if (gConfig->Find("show-statuspanel").AsBool()) { // 必要なら改めて表示 (これで SHOW(true) イベントが飛ぶ) statuspanel->Show(); } @@ -647,10 +648,10 @@ WXMainFrame::WXMainFrame(wxWindow *paren // 来た or 外れたことを示すので、wxFrame (というかたぶん wxTopLevelWindow) // を継承している WXMainFrameに飛んでくるのだが、処理の都合上 WXMainView で // 扱いたいので、そちらに回す。 - Connect(wxEVT_ACTIVATE, wxActivateEventHandler(WXMainView::OnActivate), - NULL, mainview); + Bind(wxEVT_ACTIVATE, &WXMainView::OnActivate, mainview); // ウィンドウ表示後に続きの処理をするための単発アイドルイベント。 + // こっちは Disconnect() するので Bind() は使えない。 Connect(wxEVT_IDLE, wxIdleEventHandler(WXMainFrame::OnIdle)); // VM からの通知を接続 @@ -2194,6 +2195,23 @@ WXMainFrame::DoWindow(int id, bool enabl break; } + case ID_SUBWIN_MPUPT: + { + wxString name = MPUName() + " " + _("Page Table"); + if (MPUName() == "MC68030") { + try { + windows[id].reset(new WXPageTable68030Window(this, name)); + } catch (...) { } + } else if (MPUName() == "MC68040") { + try { + windows[id].reset(new WXPageTable68040Window(this, name)); + } catch (...) { } + } else { + // not supported + } + break; + } + case ID_SUBWIN_NEWSIO: try { windows[id].reset(new WXScrollMonitorWindow(this,