--- nono/vm/vm.h 2026/04/29 17:04:45 1.1.1.5 +++ nono/vm/vm.h 2026/04/29 17:04:59 1.1.1.8 @@ -13,7 +13,6 @@ enum vmtype_t { VMTYPE_NONE = 0, VMTYPE_X68030, VMTYPE_LUNA1, - VMTYPE_RXZ, // Human68k .r .x .z console emulation VMTYPE_LUNA88K, }; // VM 種別 (ビットマスク表現) @@ -21,12 +20,10 @@ enum vmf_t { VMF_NONE = 0, VMF_X68030 = (1 << VMTYPE_X68030), VMF_LUNA1 = (1 << VMTYPE_LUNA1), - VMF_RXZ = (1 << VMTYPE_RXZ), VMF_LUNA88K = (1 << VMTYPE_LUNA88K), - VMF_X68K = VMF_X68030 | VMF_RXZ, VMF_LUNA = VMF_LUNA1 | VMF_LUNA88K, - VMF_M68K = VMF_X68K | VMF_LUNA1, + VMF_M68K = VMF_X68030 | VMF_LUNA1, VMF_M88K = VMF_LUNA88K, VMF_ALL = 0xffffffff, }; @@ -44,44 +41,29 @@ class VM bool Create(); // 初期化 - bool Init(); + virtual bool Init(); // 設定の適用 bool Apply(); - // 電源ボタンを押す。 - // XXX この辺はもうちょっと検討したほうがいい + // 電源ボタンを押す。(UI スレッドから呼ばれる) virtual void PowerButton() = 0; // 電源ボタンの状態を取得する。 // モーメンタリスイッチの場合は常に false。 virtual bool IsPowerButton() const { return false; } - // VM の全デバイスの電源をオフ - bool DevicePowerOff(); + // ブートページを ROM に切り替える + void SwitchBootPageToROM(Device *parent) { SwitchBootPage(parent, true); } + // ブートページを RAM に切り替える + void SwitchBootPageToRAM(Device *parent) { SwitchBootPage(parent, false); } - // VM 電源オフ時のコールバックを設定する。(GUI から呼ばれる) - void SetPowerOffCallback(void (*callback)()); - - // 外部リセットボタンを押す。 - void ResetButton() { ResetHard(); } - - // ハードウェアリセット - void ResetHard(); - - // MPU の RESET 命令によるリセット - void ResetSoft(); - - // BusErr デバイスを取得する - BusErrDevice *GetBusErrDevice() const { return buserr.get(); } + // MPU の RESET 命令によるリセット (機種ごとに異なるため) + virtual void ResetByMPU() { } protected: - // VM の全デバイスの電源をオン - bool DevicePowerOn(); - - std::unique_ptr buserr {}; - - void (*poweroff_callback)() {}; + // ブートページを切り替える (内部用) + virtual void SwitchBootPage(Device *parent, bool isrom); }; extern std::unique_ptr gVM;