--- nono/vm/vm.h 2026/04/29 17:04:53 1.1.1.7 +++ nono/vm/vm.h 2026/04/29 17:05:24 1.1.1.12 @@ -4,37 +4,19 @@ // Licensed under nono-license.txt // +// +// VM (基本クラス) +// + #pragma once #include "device.h" -// VM 種別 -enum vmtype_t { - VMTYPE_NONE = 0, - VMTYPE_X68030, - VMTYPE_LUNA1, - VMTYPE_RXZ, // Human68k .r .x .z console emulation - VMTYPE_LUNA88K, -}; -// VM 種別 (ビットマスク表現) -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_M88K = VMF_LUNA88K, - VMF_ALL = 0xffffffff, -}; - class VM { + protected: + VM(const char *vmname_); public: - VM(); virtual ~VM(); // 明示的な後始末 @@ -44,23 +26,29 @@ class VM bool Create(); // 初期化 - virtual bool Init(); + bool Init(); + + // スレッド開始 + bool StartThread(); // 設定の適用 bool Apply(); - // 電源ボタンを押す。(UI スレッドから呼ばれる) - virtual void PowerButton() = 0; + // VM 名取得 (ウィンドウタイトル用) + const char *GetVMName() const { return vmname; } - // 電源ボタンの状態を取得する。 - // モーメンタリスイッチの場合は常に false。 - virtual bool IsPowerButton() const { return false; } + protected: + std::unique_ptr pDebugger {}; + 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 {}; - // ブートページを切り替える。 - virtual void SwitchBootPage(Device *parent, bool isrom); - - // MPU の RESET 命令によるリセット (機種ごとに異なるため) - virtual void ResetByMPU() { } + private: + const char *vmname {}; // VM 機種名(表示名) }; - -extern std::unique_ptr gVM;