--- nono/wx/wxmainframe.h 2026/04/29 17:04:28 1.1 +++ nono/wx/wxmainframe.h 2026/04/29 17:04:42 1.1.1.6 @@ -1,10 +1,13 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once +#include "wxheader.h" +#include "vm.h" #include enum { @@ -18,30 +21,48 @@ enum { // ウィンドウの紐付けをする。 // ウィンドウ ID (メニュー ID としても使う) - // wxmainframe.cpp 末尾の monitor_names[] と一致させること + // wxmainframe.cpp 末尾の monitor_info[] と一致させること WinID_Start = 0, WinID_MONITOR_LOG = WinID_Start, WinID_MONITOR_SCHEDULER, WinID_MONITOR_MPUREG, WinID_MONITOR_MPUATC, - WinID_MONITOR_MPUBRHIST, + WinID_MONITOR_BPOINT, + WinID_MONITOR_BRHIST68K, + WinID_MONITOR_BRHIST88K, + WinID_MONITOR_EXHIST68K, + WinID_MONITOR_EXHIST88K, + WinID_MONITOR_CMMU7, + WinID_MONITOR_CMMU6, + WinID_MONITOR_ATC7, + WinID_MONITOR_ATC6, + WinID_MONITOR_CACHE7, + WinID_MONITOR_CACHE6, WinID_MONITOR_MEMDUMP, - WinID_MONITOR_MFP, WinID_MONITOR_SPC, WinID_MONITOR_RTC, + WinID_MONITOR_DMAC, + WinID_MONITOR_MFP, + WinID_MONITOR_SCC, WinID_MONITOR_SIO, + WinID_MONITOR_PIO0, + WinID_MONITOR_LUNAKEYBOARD, WinID_MONITOR_LCD, WinID_MONITOR_LANCE, + WinID_MONITOR_SYSCTLR, WinID_MONITOR_BITMAP, WinID_MONITOR_BITMAP0, + WinID_MONITOR_HOSTINFO, WinID_MONITOR_NETDRIVER, WinID_SOFTKEY, + WinID_LCD, // ウィンドウ ID ここまで。 WinID_MAX, // ここからそれ以外の ID ID_FULL_SPEED = WinID_MAX, + ID_RESET_VM, ID_SCALE_START, ID_SCALE_1_00, ID_SCALE_0_75, @@ -51,14 +72,29 @@ enum { ID_FONTSIZE_START, // START 以降は fontsize_t と同じ順に並べること ID_FONTSIZE_12, ID_FONTSIZE_16, - ID_FONTSIZE_24, ID_FONTSIZE_END, + + ID_MONRATE_START, + ID_MONRATE_20, + ID_MONRATE_5, + ID_MONRATE_1, + ID_MONRATE_END, + + ID_MOUSEMODE, }; class WXMainFrame : public wxFrame { - typedef wxFrame inherited; + using inherited = wxFrame; + + public: + // モニタウィンドウ識別名情報 + struct monitor_info { + const char * const name; // モニタ名 + vmf_t feature; // 機種 + }; + public: WXMainFrame(wxWindow *); virtual ~WXMainFrame(); @@ -70,18 +106,27 @@ class WXMainFrame // VM からの電源オフコールバック void PowerOffCallback(); + // VM からのダブルバスフォールト・コールバック + void HaltCallback(); + // モニタウィンドウ識別名一覧 // (引数 -M で指定されるやつ) - static const char *monitor_names[WinID_MAX]; + static struct monitor_info monitor_info[WinID_MAX]; // 起動時にオープンするモニタウィンドウの一覧 static std::array monitor_start; + // モニタウィンドウの更新頻度取得 + int GetMonitorRate() const { return monitor_rate; } + private: void OnCreate(wxCommandEvent& event); + void OnClose(wxCloseEvent& event); + void OnActivate(wxActivateEvent& event); void OnFullSpeed(wxCommandEvent& event); void OnFullSpeedUI(wxUpdateUIEvent& event); + void OnResetVM(wxCommandEvent& event); void OnExit(wxCommandEvent&); @@ -89,11 +134,18 @@ class WXMainFrame void OnMenuScaleUI(wxUpdateUIEvent& event); void OnMenuFontSize(wxCommandEvent& event); void OnMenuFontSizeUI(wxUpdateUIEvent& event); + void OnMenuMonRate(wxCommandEvent& event); + void OnMenuMonRateUI(wxUpdateUIEvent& event); + + void OnMouseMode(wxCommandEvent& event); + void OnMouseModeUI(wxUpdateUIEvent& event); void OnWindow(wxCommandEvent&); void DoWindow(int id, bool enable); void OnWindowUI(wxUpdateUIEvent&); + void OnAbout(wxCommandEvent&); + // ウィンドウをリストに追加する。 void AddWindow(int id, wxWindow *); @@ -101,7 +153,15 @@ class WXMainFrame bool IsExistWindow(int id); // サブウィンドウリスト - wxWindow *windows[WinID_MAX] {}; + std::unique_ptr windows[WinID_MAX] {}; + + // モニタの更新頻度(これが実行中の一次情報) + int monitor_rate {}; + // モニタ更新頻度 ID -> 数値変換 + static const int IDtoMonRate[]; + + // ダブルバスフォールト・イベント + void OnHaltNotify(wxCommandEvent& event); wxDECLARE_EVENT_TABLE(); };