--- nono/vm/vm.h 2026/04/29 17:04:32 1.1.1.2 +++ nono/vm/vm.h 2026/04/29 17:04:45 1.1.1.5 @@ -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,24 @@ enum vmtype_t { VMTYPE_NONE = 0, VMTYPE_X68030, - VMTYPE_LUNA, + 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 { @@ -22,11 +37,14 @@ class VM VM(); virtual ~VM(); + // 明示的な後始末 + void Dispose(); + // 動的なコンストラクション bool Create(); // 初期化 - virtual bool Init(); + bool Init(); // 設定の適用 bool Apply(); @@ -54,12 +72,16 @@ class VM // MPU の RESET 命令によるリセット void ResetSoft(); + // BusErr デバイスを取得する + BusErrDevice *GetBusErrDevice() const { return buserr.get(); } + protected: // VM の全デバイスの電源をオン bool DevicePowerOn(); - std::unique_ptr buserr; - void (*poweroff_callback)() = NULL; + std::unique_ptr buserr {}; + + void (*poweroff_callback)() {}; }; extern std::unique_ptr gVM;