--- nono/wx/wxapp.cpp 2026/04/29 17:05:27 1.1.1.15 +++ nono/wx/wxapp.cpp 2026/04/29 17:05:44 1.1.1.19 @@ -100,15 +100,27 @@ WXApp::OnRun() item_fontsize.Err("Must be either 12, 16 or 24"); return EXIT_FAILURE; } - pFontManager.reset(new FontManager()); + try { + pFontManager.reset(new FontManager()); + } catch (...) { } + if ((bool)pFontManager == false) { + warnx("Failed to initialize FontManager"); + return EXIT_FAILURE; + } gFontManager = pFontManager.get(); gFontManager->SetFont(fontid); // ホスト情報用のモニタ (どこでやるのがいいか) - pHostInfo.reset(new HostInfoMonitor()); + try { + pHostInfo.reset(new HostInfoMonitor()); + } catch (...) { } + if ((bool)pHostInfo == false) { + warnx("Failed to initialize HostInfoMonitor"); + return EXIT_FAILURE; + } gHostInfo = pHostInfo.get(); - // 手順 4. (vm/device.h) + // 手順 6. (vm/device.h) // これ以降モニタの登録をしてはいけない。 gMonitorManager->Fix(); @@ -225,7 +237,7 @@ WXApp::ParseMemdumpValue(uint id, const std::string& name, const std::string& value) { auto mon = gMonitorManager->Get(id); - auto memdump = dynamic_cast(mon.obj); + auto memdump = dynamic_cast(mon->obj); assert(memdump); errno = 0; @@ -260,15 +272,15 @@ WXApp::ParseMemdumpValue(uint id, if (gMainApp.Has(VMCap::M88K)) { fmt = Memdump::M88200Page; } else { - // ロングは指定できないけど使われてないので放置 - fmt = Memdump::M68030PageShort; + // m68k はちょっと複雑すぎて放置。 + goto usage; } break; case 'I': if (gMainApp.Has(VMCap::M88K)) { fmt = Memdump::M88100Disasm; } else { - fmt = Memdump::M68030Disasm; + fmt = Memdump::M680x0Disasm; } break; case 'Z': @@ -329,8 +341,13 @@ WXApp::SearchMonitorName(const char *nam for (uint id = ID_MONITOR_START; id <= ID_SUBWIN_END; id++) { if (id < ID_SUBWIN_START) { - // モニターは登録されていなければ除外する - if (gMonitorManager->Find(id) == NULL) { + // モニターは登録されていなければ除外する。 + Monitor *mon = gMonitorManager->Find(id); + if (mon == NULL) { + continue; + } + // SLIRP モニタだけ、登録はされてて obj が NULL という状態がある。 + if (mon->obj == NULL) { continue; } } else {