|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2017 [email protected] ! 4: // ! 5: ! 6: #pragma once ! 7: ! 8: #include "device.h" ! 9: #include "scsi.h" ! 10: ! 11: class VM ! 12: { ! 13: public: ! 14: // VM 種別 ! 15: enum vmtype_t { ! 16: TYPE_NONE = 0, ! 17: TYPE_X68030, ! 18: TYPE_LUNA, ! 19: TYPE_RXZ, // human68k .r .x .z console emulation ! 20: }; ! 21: ! 22: public: ! 23: VM(vmtype_t); ! 24: virtual ~VM(); ! 25: ! 26: // 動的なコンストラクション ! 27: bool Create(); ! 28: ! 29: // 初期化 ! 30: bool Init(); ! 31: ! 32: // 設定の適用 ! 33: bool Apply(); ! 34: ! 35: // VM 種別を取得する。 ! 36: vmtype_t GetType() const { return vmtype; } ! 37: ! 38: // 電源ボタンを押す。 ! 39: // XXX この辺はもうちょっと検討したほうがいい ! 40: virtual void PowerButton() = 0; ! 41: ! 42: // 電源ボタンの状態を取得する。 ! 43: // モーメンタリスイッチの場合は常に false。 ! 44: virtual bool IsPowerButton() const { return false; } ! 45: ! 46: // VM の全デバイスの電源をオフ ! 47: bool DevicePowerOff(); ! 48: ! 49: // VM 電源オフ時のコールバックを設定する。(GUI から呼ばれる) ! 50: void SetPowerOffCallback(void (*callback)()); ! 51: ! 52: // 外部リセットボタンを押す。 ! 53: void ResetButton() { ResetHard(); } ! 54: ! 55: // ハードウェアリセット ! 56: void ResetHard(); ! 57: ! 58: // MPU の RESET 命令によるリセット ! 59: void ResetSoft(); ! 60: ! 61: protected: ! 62: // VM の全デバイスの電源をオン ! 63: bool DevicePowerOn(); ! 64: ! 65: vmtype_t vmtype {}; ! 66: BusErrDevice *buserr = NULL; ! 67: void (*poweroff_callback)() = NULL; ! 68: }; ! 69: ! 70: class VM_X68030 : public VM ! 71: { ! 72: typedef VM inherited; ! 73: public: ! 74: VM_X68030(); ! 75: virtual ~VM_X68030(); ! 76: ! 77: // 電源ボタンを押す ! 78: virtual void PowerButton(); ! 79: ! 80: // 電源ボタンの状態を取得。オンなら true。 ! 81: bool IsPowerButton() const { return power_button; } ! 82: ! 83: private: ! 84: // 電源ボタンの状態。オンなら true。 ! 85: bool power_button = false; ! 86: ! 87: // デバイス ! 88: XIOSpaceDevice *xiospace = NULL; ! 89: }; ! 90: ! 91: class VM_LUNA : public VM ! 92: { ! 93: typedef VM inherited; ! 94: public: ! 95: VM_LUNA(); ! 96: virtual ~VM_LUNA(); ! 97: ! 98: // 電源ボタンを押す。 ! 99: virtual void PowerButton(); ! 100: ! 101: private: ! 102: // デバイスマップ用の識別子 ! 103: enum { ! 104: NONE, ! 105: BUSERR, ! 106: RAM, ! 107: PROM, ! 108: MK48, ! 109: PIO0, ! 110: PIO1, ! 111: SIO, ! 112: TAS, ! 113: SYSCLK, ! 114: ZRAM, ! 115: MROM, ! 116: BITMAP, ! 117: BT454, ! 118: CRTC2, ! 119: SCSI, ! 120: LANCE, ! 121: }; ! 122: ! 123: CRTC2Device *crtc2 = NULL; ! 124: MK48T02Device *mk48 = NULL; ! 125: PIO0Device *pio0 = NULL; ! 126: PIO1Device *pio1 = NULL; ! 127: SysClkDevice *sysclk = NULL; ! 128: MaskROMDevice *maskrom = NULL; ! 129: NullDevice *nulldev = NULL; ! 130: ! 131: static const uint8 maptable[256]; ! 132: }; ! 133: ! 134: class VM_RXZ : public VM ! 135: { ! 136: typedef VM inherited; ! 137: public: ! 138: VM_RXZ(const char *file, const char *arg); ! 139: virtual ~VM_RXZ(); ! 140: ! 141: // 電源ボタンを押す。 ! 142: virtual void PowerButton(); ! 143: ! 144: private: ! 145: Human68k *human68k = NULL; ! 146: }; ! 147: ! 148: extern VM *gVM;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.