|
|
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.