OSDN Git Service

[VM] Floppy / CMT : Add Write protection feature, but testing is not enough X-)
[csp-qt/common_source_project-fm7.git] / source / src / vm / x1 / x1.h
1 /*\r
2         SHARP X1 Emulator 'eX1'\r
3         SHARP X1twin Emulator 'eX1twin'\r
4         SHARP X1turbo Emulator 'eX1turbo'\r
5 \r
6         Author : Takeda.Toshiya\r
7         Date   : 2009.03.11-\r
8 \r
9         [ virtual machine ]\r
10 */\r
11 \r
12 #ifndef _X1_H_\r
13 #define _X1_H_\r
14 \r
15 #if defined(_X1TURBOZ)\r
16 #define DEVICE_NAME             "SHARP X1turboZ"\r
17 #define CONFIG_NAME             "x1turboz"\r
18 #elif defined(_X1TURBO)\r
19 #define DEVICE_NAME             "SHARP X1turbo"\r
20 #define CONFIG_NAME             "x1turbo"\r
21 #elif defined(_X1TWIN)\r
22 #define DEVICE_NAME             "SHARP X1twin"\r
23 #define CONFIG_NAME             "x1twin"\r
24 #else\r
25 #define DEVICE_NAME             "SHARP X1"\r
26 #define CONFIG_NAME             "x1"\r
27 #endif\r
28 \r
29 #if defined(_X1TURBO) || defined(_X1TURBOZ)\r
30 #define _X1TURBO_FEATURE\r
31 #endif\r
32 \r
33 // device informations for virtual machine (x1)\r
34 //#ifdef _X1TURBO_FEATURE\r
35 //24KHz\r
36 //#define FRAMES_PER_SEC        55.49\r
37 //#define LINES_PER_FRAME       448\r
38 //#define CHARS_PER_LINE        56\r
39 //#define HD46505_HORIZ_FREQ    24860\r
40 //#else\r
41 // 15KHz\r
42 #define FRAMES_PER_SEC          61.94\r
43 #define LINES_PER_FRAME         258\r
44 #define CHARS_PER_LINE          56\r
45 #define HD46505_HORIZ_FREQ      15980\r
46 //#endif\r
47 #define CPU_CLOCKS              4000000\r
48 #define SCREEN_WIDTH            640\r
49 #define SCREEN_HEIGHT           400\r
50 #define MAX_DRIVE               4\r
51 #define IO_ADDR_MAX             0x10000\r
52 #define HAS_AY_3_8910\r
53 #define Z80_IO_WAIT\r
54 #ifdef _X1TURBO_FEATURE\r
55 #define SINGLE_MODE_DMA\r
56 #endif\r
57 #define DATAREC_FF_REW_SPEED    16\r
58 #define SUPPORT_VARIABLE_TIMING\r
59 \r
60 #ifdef _X1TURBO_FEATURE\r
61 #define IPL_ROM_FILE_SIZE       0x8000\r
62 #define IPL_ROM_FILE_NAME       _T("IPLROM.X1T")\r
63 #define SUB_ROM_FILE_NAME       _T("SUBROM.X1T")\r
64 #define KBD_ROM_FILE_NAME       _T("KBDROM.X1T")\r
65 #else\r
66 #define IPL_ROM_FILE_SIZE       0x1000\r
67 #define IPL_ROM_FILE_NAME       _T("IPLROM.X1")\r
68 #define SUB_ROM_FILE_NAME       _T("SUBROM.X1")\r
69 #define KBD_ROM_FILE_NAME       _T("KBDROM.X1")\r
70 #endif\r
71 #define CRC32_MSM80C49_262      0x43EE7D6F      // X1turbo with CMT\r
72 #define CRC32_MSM80C49_277      0x75904EFB      // X1turbo (not supported yet)\r
73 \r
74 #ifdef _X1TWIN\r
75 // device informations for virtual machine (pce)\r
76 #define PCE_FRAMES_PER_SEC      60\r
77 #define PCE_LINES_PER_FRAME     262\r
78 #define PCE_CPU_CLOCKS          7159090\r
79 #endif\r
80 \r
81 // device informations for win32\r
82 #define USE_SPECIAL_RESET\r
83 #ifdef _X1TURBO_FEATURE\r
84 #define USE_DEVICE_TYPE         2\r
85 #endif\r
86 #define USE_FD1\r
87 #define USE_FD2\r
88 #define FD_BASE_NUMBER          0\r
89 #define USE_TAPE\r
90 #ifdef _X1TWIN\r
91 #define USE_CART1\r
92 #endif\r
93 #define NOTIFY_KEY_DOWN\r
94 #define USE_SHIFT_NUMPAD_KEY\r
95 #define USE_ALT_F10_KEY\r
96 #define USE_AUTO_KEY            8\r
97 #define USE_AUTO_KEY_RELEASE    10\r
98 #define USE_MONITOR_TYPE        2\r
99 #define USE_CRT_FILTER\r
100 #define USE_SCANLINE\r
101 #define USE_SOUND_DEVICE_TYPE   3\r
102 #define USE_ACCESS_LAMP\r
103 #define USE_DEBUGGER\r
104 #define USE_STATE\r
105 \r
106 #include "../../common.h"\r
107 \r
108 class EMU;\r
109 class DEVICE;\r
110 class EVENT;\r
111 \r
112 class DATAREC;\r
113 class HD46505;\r
114 class I8255;\r
115 class MB8877;\r
116 class YM2151;\r
117 class YM2203;\r
118 class Z80;\r
119 class Z80CTC;\r
120 class Z80SIO;\r
121 #ifdef _X1TURBO_FEATURE\r
122 class Z80DMA;\r
123 #endif\r
124 \r
125 class DISPLAY;\r
126 class EMM;\r
127 class FLOPPY;\r
128 class IO;\r
129 class JOYSTICK;\r
130 class MEMORY;\r
131 class MOUSE;\r
132 class PRINTER;\r
133 class PSUB;\r
134 \r
135 class MCS48;\r
136 class UPD1990A;\r
137 class SUB;\r
138 class KEYBOARD;\r
139 \r
140 #ifdef _X1TWIN\r
141 class HUC6280;\r
142 class PCE;\r
143 #endif\r
144 \r
145 class FILEIO;\r
146 \r
147 class VM\r
148 {\r
149 protected:\r
150         EMU* emu;\r
151         \r
152         // devices for x1\r
153         EVENT* event;\r
154         \r
155         DATAREC* drec;\r
156         HD46505* crtc;\r
157         I8255* pio;\r
158         MB8877* fdc;\r
159         YM2151* opm1;\r
160         YM2151* opm2;\r
161         YM2203* psg;\r
162         Z80* cpu;\r
163         Z80CTC* ctc;\r
164         Z80SIO* sio;\r
165         Z80CTC* ctc1;\r
166         Z80CTC* ctc2;\r
167 #ifdef _X1TURBO_FEATURE\r
168         Z80DMA* dma;\r
169 #endif\r
170         \r
171         DISPLAY* display;\r
172         EMM* emm;\r
173         FLOPPY* floppy;\r
174         IO* io;\r
175         JOYSTICK* joy;\r
176         MEMORY* memory;\r
177         MOUSE* mouse;\r
178         PRINTER* printer;\r
179         PSUB* psub;\r
180         \r
181         MCS48* cpu_sub;\r
182         UPD1990A* rtc_sub;\r
183         I8255* pio_sub;\r
184         SUB* sub;\r
185         \r
186         MCS48* cpu_kbd;\r
187         KEYBOARD* kbd;\r
188         \r
189         bool pseudo_sub_cpu;\r
190         int sound_device_type;\r
191         \r
192 #ifdef _X1TWIN\r
193         // device for pce\r
194         EVENT* pceevent;\r
195         \r
196         HUC6280* pcecpu;\r
197         PCE* pce;\r
198 #endif\r
199         \r
200 public:\r
201         // ----------------------------------------\r
202         // initialize\r
203         // ----------------------------------------\r
204         \r
205         VM(EMU* parent_emu);\r
206         ~VM();\r
207         \r
208         // ----------------------------------------\r
209         // for emulation class\r
210         // ----------------------------------------\r
211         \r
212         // drive virtual machine\r
213         void reset();\r
214         void special_reset();\r
215         void run();\r
216         double frame_rate();\r
217         \r
218 #ifdef USE_DEBUGGER\r
219         // debugger\r
220         DEVICE *get_cpu(int index);\r
221 #endif\r
222         \r
223         // draw screen\r
224         void draw_screen();\r
225         int access_lamp();\r
226         \r
227         // sound generation\r
228         void initialize_sound(int rate, int samples);\r
229         uint16* create_sound(int* extra_frames);\r
230         int sound_buffer_ptr();\r
231         \r
232         // notify key\r
233         void key_down(int code, bool repeat);\r
234         void key_up(int code);\r
235         \r
236         // user interface\r
237         void open_disk(int drv, _TCHAR* file_path, int offset);\r
238         void close_disk(int drv);\r
239         bool disk_inserted(int drv);\r
240         void write_protect_fd(int drv, bool flag);\r
241         bool is_write_protect_fd(int drv);\r
242         void play_tape(_TCHAR* file_path);\r
243         void rec_tape(_TCHAR* file_path);\r
244         void close_tape();\r
245         bool tape_inserted();\r
246         bool now_skip();\r
247 #ifdef _X1TWIN\r
248         void open_cart(int drv, _TCHAR* file_path);\r
249         void close_cart(int drv);\r
250         bool cart_inserted(int drv);\r
251 #endif\r
252         \r
253         void update_config();\r
254 #ifdef _X1TURBO_FEATURE\r
255         void update_dipswitch();\r
256 #endif\r
257         void save_state(FILEIO* state_fio);\r
258         bool load_state(FILEIO* state_fio);\r
259         \r
260         // ----------------------------------------\r
261         // for each device\r
262         // ----------------------------------------\r
263         \r
264         // devices\r
265         DEVICE* get_device(int id);\r
266         DEVICE* dummy;\r
267         DEVICE* first_device;\r
268         DEVICE* last_device;\r
269 };\r
270 \r
271 #endif\r