--- nono/vm/vm.h 2026/04/29 17:05:16 1.1.1.11 +++ nono/vm/vm.h 2026/04/29 17:05:24 1.1.1.12 @@ -12,17 +12,11 @@ #include "device.h" -// デバイスを作成して代入するマクロ。 -// …だったが今となってはあまり意味がなくなっている。 -#define NEWDV(NAME, NEW_CTOR) do { \ - __CONCAT(p,NAME).reset(NEW_CTOR); \ - assert(__CONCAT(p,NAME)); \ -} while (0) - class VM { + protected: + VM(const char *vmname_); public: - VM(); virtual ~VM(); // 明示的な後始末 @@ -32,7 +26,7 @@ class VM bool Create(); // 初期化 - virtual bool Init(); + bool Init(); // スレッド開始 bool StartThread(); @@ -40,31 +34,21 @@ class VM // 設定の適用 bool Apply(); - // ブートページを ROM に切り替える - void SwitchBootPageToROM(Device *parent) { SwitchBootPage(parent, true); } - // ブートページを RAM に切り替える - void SwitchBootPageToRAM(Device *parent) { SwitchBootPage(parent, false); } - - // MPU の RESET 命令によるリセット (機種ごとに異なるため) - virtual void ResetByMPU(); + // VM 名取得 (ウィンドウタイトル用) + const char *GetVMName() const { return vmname; } protected: - // ブートページを切り替える (内部用) - virtual void SwitchBootPage(Device *parent, bool isrom); + 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 {}; - std::unique_ptr pBusErr {}; - std::unique_ptr pDebugger {}; - std::unique_ptr pInterrupt {}; - std::unique_ptr pKeyboard {}; - std::unique_ptr pMainbus {}; - std::unique_ptr pMainRAM {}; - 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 {}; + private: + const char *vmname {}; // VM 機種名(表示名) }; - -extern VM *gVM;