--- nono/vm/vm.h 2026/04/29 17:04:28 1.1 +++ nono/vm/vm.h 2026/04/29 17:04:32 1.1.1.2 @@ -6,35 +6,31 @@ #pragma once #include "device.h" -#include "scsi.h" + +// VM 種別 +enum vmtype_t { + VMTYPE_NONE = 0, + VMTYPE_X68030, + VMTYPE_LUNA, + VMTYPE_RXZ, // Human68k .r .x .z console emulation + VMTYPE_LUNA88K, +}; class VM { public: - // VM 種別 - enum vmtype_t { - TYPE_NONE = 0, - TYPE_X68030, - TYPE_LUNA, - TYPE_RXZ, // human68k .r .x .z console emulation - }; - - public: - VM(vmtype_t); + VM(); virtual ~VM(); // 動的なコンストラクション bool Create(); // 初期化 - bool Init(); + virtual bool Init(); // 設定の適用 bool Apply(); - // VM 種別を取得する。 - vmtype_t GetType() const { return vmtype; } - // 電源ボタンを押す。 // XXX この辺はもうちょっと検討したほうがいい virtual void PowerButton() = 0; @@ -62,87 +58,8 @@ class VM // VM の全デバイスの電源をオン bool DevicePowerOn(); - vmtype_t vmtype {}; - BusErrDevice *buserr = NULL; + std::unique_ptr buserr; void (*poweroff_callback)() = NULL; }; -class VM_X68030 : public VM -{ - typedef VM inherited; - public: - VM_X68030(); - virtual ~VM_X68030(); - - // 電源ボタンを押す - virtual void PowerButton(); - - // 電源ボタンの状態を取得。オンなら true。 - bool IsPowerButton() const { return power_button; } - - private: - // 電源ボタンの状態。オンなら true。 - bool power_button = false; - - // デバイス - XIOSpaceDevice *xiospace = NULL; -}; - -class VM_LUNA : public VM -{ - typedef VM inherited; - public: - VM_LUNA(); - virtual ~VM_LUNA(); - - // 電源ボタンを押す。 - virtual void PowerButton(); - - private: - // デバイスマップ用の識別子 - enum { - NONE, - BUSERR, - RAM, - PROM, - MK48, - PIO0, - PIO1, - SIO, - TAS, - SYSCLK, - ZRAM, - MROM, - BITMAP, - BT454, - CRTC2, - SCSI, - LANCE, - }; - - CRTC2Device *crtc2 = NULL; - MK48T02Device *mk48 = NULL; - PIO0Device *pio0 = NULL; - PIO1Device *pio1 = NULL; - SysClkDevice *sysclk = NULL; - MaskROMDevice *maskrom = NULL; - NullDevice *nulldev = NULL; - - static const uint8 maptable[256]; -}; - -class VM_RXZ : public VM -{ - typedef VM inherited; - public: - VM_RXZ(const char *file, const char *arg); - virtual ~VM_RXZ(); - - // 電源ボタンを押す。 - virtual void PowerButton(); - - private: - Human68k *human68k = NULL; -}; - -extern VM *gVM; +extern std::unique_ptr gVM;