--- nono/vm/vm.h 2026/04/29 17:04:32 1.1.1.2 +++ nono/vm/vm.h 2026/04/29 17:04:59 1.1.1.8 @@ -1,6 +1,7 @@ // // nono -// Copyright (C) 2017 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once @@ -11,10 +12,21 @@ enum vmtype_t { VMTYPE_NONE = 0, VMTYPE_X68030, - VMTYPE_LUNA, - VMTYPE_RXZ, // Human68k .r .x .z console emulation + VMTYPE_LUNA1, VMTYPE_LUNA88K, }; +// VM 種別 (ビットマスク表現) +enum vmf_t { + VMF_NONE = 0, + VMF_X68030 = (1 << VMTYPE_X68030), + VMF_LUNA1 = (1 << VMTYPE_LUNA1), + VMF_LUNA88K = (1 << VMTYPE_LUNA88K), + + VMF_LUNA = VMF_LUNA1 | VMF_LUNA88K, + VMF_M68K = VMF_X68030 | VMF_LUNA1, + VMF_M88K = VMF_LUNA88K, + VMF_ALL = 0xffffffff, +}; class VM { @@ -22,6 +34,9 @@ class VM VM(); virtual ~VM(); + // 明示的な後始末 + void Dispose(); + // 動的なコンストラクション bool Create(); @@ -31,35 +46,24 @@ class VM // 設定の適用 bool Apply(); - // 電源ボタンを押す。 - // XXX この辺はもうちょっと検討したほうがいい + // 電源ボタンを押す。(UI スレッドから呼ばれる) virtual void PowerButton() = 0; // 電源ボタンの状態を取得する。 // モーメンタリスイッチの場合は常に false。 virtual bool IsPowerButton() const { return false; } - // VM の全デバイスの電源をオフ - bool DevicePowerOff(); - - // VM 電源オフ時のコールバックを設定する。(GUI から呼ばれる) - void SetPowerOffCallback(void (*callback)()); + // ブートページを ROM に切り替える + void SwitchBootPageToROM(Device *parent) { SwitchBootPage(parent, true); } + // ブートページを RAM に切り替える + void SwitchBootPageToRAM(Device *parent) { SwitchBootPage(parent, false); } - // 外部リセットボタンを押す。 - void ResetButton() { ResetHard(); } - - // ハードウェアリセット - void ResetHard(); - - // MPU の RESET 命令によるリセット - void ResetSoft(); + // MPU の RESET 命令によるリセット (機種ごとに異なるため) + virtual void ResetByMPU() { } protected: - // VM の全デバイスの電源をオン - bool DevicePowerOn(); - - std::unique_ptr buserr; - void (*poweroff_callback)() = NULL; + // ブートページを切り替える (内部用) + virtual void SwitchBootPage(Device *parent, bool isrom); }; extern std::unique_ptr gVM;