--- nono/vm/vm.h 2026/04/29 17:04:32 1.1.1.2 +++ nono/vm/vm.h 2026/04/29 17:05:49 1.1.1.15 @@ -1,65 +1,58 @@ // // nono -// Copyright (C) 2017 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt +// + +// +// VM (基本クラス) // #pragma once #include "device.h" -// VM 種別 -enum vmtype_t { - VMTYPE_NONE = 0, - VMTYPE_X68030, - VMTYPE_LUNA, - VMTYPE_RXZ, // Human68k .r .x .z console emulation - VMTYPE_LUNA88K, -}; - class VM { + protected: + explicit VM(const char *vmname_); + public: + enum CreationPhase : bool { + First = false, + Second = true, + }; + public: - VM(); virtual ~VM(); + // 明示的な後始末 + void Dispose(); + // 動的なコンストラクション - bool Create(); + bool Create(CreationPhase); // 初期化 - virtual bool Init(); - - // 設定の適用 - bool Apply(); - - // 電源ボタンを押す。 - // XXX この辺はもうちょっと検討したほうがいい - virtual void PowerButton() = 0; - - // 電源ボタンの状態を取得する。 - // モーメンタリスイッチの場合は常に false。 - virtual bool IsPowerButton() const { return false; } + bool Init(); - // VM の全デバイスの電源をオフ - bool DevicePowerOff(); + // スレッド開始 + bool StartThread(); - // VM 電源オフ時のコールバックを設定する。(GUI から呼ばれる) - void SetPowerOffCallback(void (*callback)()); - - // 外部リセットボタンを押す。 - void ResetButton() { ResetHard(); } - - // ハードウェアリセット - void ResetHard(); - - // MPU の RESET 命令によるリセット - void ResetSoft(); + // VM 名取得 (ウィンドウタイトル用) + const char *GetVMName() const { return vmname; } protected: - // VM の全デバイスの電源をオン - bool DevicePowerOn(); + std::unique_ptr pDebugger {}; + std::unique_ptr pEventManager {}; + std::unique_ptr pKeyboard {}; + std::unique_ptr pMainbus {}; + std::unique_ptr pMPU {}; + std::unique_ptr pNMI {}; + std::unique_ptr pPower {}; + std::unique_ptr pRenderer {}; + std::unique_ptr pScheduler {}; + std::unique_ptr pSignalThread {}; + std::unique_ptr pSyncer {}; - std::unique_ptr buserr; - void (*poweroff_callback)() = NULL; + private: + const char *vmname {}; // VM 機種名(表示名) }; - -extern std::unique_ptr gVM;