OSDN Git Service

0f79b75d33c26f6e1d600ca3ae8bd10a8d0096e1
[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 // 4:3\r
82 #define SCREEN_WIDTH_ASPECT 400 \r
83 #define SCREEN_HEIGHT_ASPECT 300\r
84 // device informations for win32\r
85 #define USE_SPECIAL_RESET\r
86 #ifdef _X1TURBO_FEATURE\r
87 #define USE_DEVICE_TYPE         2\r
88 #endif\r
89 #define USE_FD1\r
90 #define USE_FD2\r
91 #define FD_BASE_NUMBER          0\r
92 #define USE_TAPE\r
93 #ifdef _X1TWIN\r
94 #define USE_CART1\r
95 #endif\r
96 #define NOTIFY_KEY_DOWN\r
97 #define USE_SHIFT_NUMPAD_KEY\r
98 #define USE_ALT_F10_KEY\r
99 #define USE_AUTO_KEY            8\r
100 #define USE_AUTO_KEY_RELEASE    10\r
101 #define USE_MONITOR_TYPE        2\r
102 #define USE_CRT_FILTER\r
103 #define USE_SCANLINE\r
104 #define USE_ACCESS_LAMP\r
105 #define USE_SOUND_DEVICE_TYPE   3\r
106 #define USE_DEBUGGER\r
107 #define USE_STATE\r
108 \r
109 #include "../../common.h"\r
110 #include "../../fileio.h"\r
111 \r
112 class EMU;\r
113 class DEVICE;\r
114 class EVENT;\r
115 \r
116 class DATAREC;\r
117 class HD46505;\r
118 class I8255;\r
119 class MB8877;\r
120 class YM2151;\r
121 class YM2203;\r
122 class Z80;\r
123 class Z80CTC;\r
124 class Z80SIO;\r
125 #ifdef _X1TURBO_FEATURE\r
126 class Z80DMA;\r
127 #endif\r
128 \r
129 class DISPLAY;\r
130 class EMM;\r
131 class FLOPPY;\r
132 class IO;\r
133 class JOYSTICK;\r
134 class MEMORY;\r
135 class MOUSE;\r
136 class PRINTER;\r
137 class PSUB;\r
138 \r
139 class MCS48;\r
140 class UPD1990A;\r
141 class SUB;\r
142 class KEYBOARD;\r
143 \r
144 #ifdef _X1TWIN\r
145 class HUC6280;\r
146 class PCE;\r
147 #endif\r
148 \r
149 class FILEIO;\r
150 \r
151 class VM\r
152 {\r
153 protected:\r
154         EMU* emu;\r
155         \r
156         // devices for x1\r
157         EVENT* event;\r
158         \r
159         DATAREC* drec;\r
160         HD46505* crtc;\r
161         I8255* pio;\r
162         MB8877* fdc;\r
163         YM2151* opm1;\r
164         YM2151* opm2;\r
165         YM2203* psg;\r
166         Z80* cpu;\r
167         Z80CTC* ctc;\r
168         Z80SIO* sio;\r
169         Z80CTC* ctc1;\r
170         Z80CTC* ctc2;\r
171 #ifdef _X1TURBO_FEATURE\r
172         Z80DMA* dma;\r
173 #endif\r
174         \r
175         DISPLAY* display;\r
176         EMM* emm;\r
177         FLOPPY* floppy;\r
178         IO* io;\r
179         JOYSTICK* joy;\r
180         MEMORY* memory;\r
181         MOUSE* mouse;\r
182         PRINTER* printer;\r
183         PSUB* psub;\r
184         \r
185         MCS48* cpu_sub;\r
186         UPD1990A* rtc_sub;\r
187         I8255* pio_sub;\r
188         SUB* sub;\r
189         \r
190         MCS48* cpu_kbd;\r
191         KEYBOARD* kbd;\r
192         \r
193         bool pseudo_sub_cpu;\r
194         int sound_device_type;\r
195         \r
196 #ifdef _X1TWIN\r
197         // device for pce\r
198         EVENT* pceevent;\r
199         \r
200         HUC6280* pcecpu;\r
201         PCE* pce;\r
202 #endif\r
203         \r
204 public:\r
205         // ----------------------------------------\r
206         // initialize\r
207         // ----------------------------------------\r
208         \r
209         VM(EMU* parent_emu);\r
210         ~VM();\r
211         \r
212         // ----------------------------------------\r
213         // for emulation class\r
214         // ----------------------------------------\r
215         \r
216         // drive virtual machine\r
217         void reset();\r
218         void special_reset();\r
219         void run();\r
220         double frame_rate();\r
221         \r
222 #ifdef USE_DEBUGGER\r
223         // debugger\r
224         DEVICE *get_cpu(int index);\r
225 #endif\r
226         \r
227         // draw screen\r
228         void draw_screen();\r
229         int access_lamp();\r
230         \r
231         // sound generation\r
232         void initialize_sound(int rate, int samples);\r
233         uint16* create_sound(int* extra_frames);\r
234         int sound_buffer_ptr();\r
235         \r
236         // notify key\r
237         void key_down(int code, bool repeat);\r
238         void key_up(int code);\r
239         \r
240         // user interface\r
241         void open_disk(int drv, _TCHAR* file_path, int offset);\r
242         void close_disk(int drv);\r
243         bool disk_inserted(int drv);\r
244         void write_protect_fd(int drv, bool flag);\r
245         bool is_write_protect_fd(int drv);\r
246         void play_tape(_TCHAR* file_path);\r
247         void rec_tape(_TCHAR* file_path);\r
248         void close_tape();\r
249         bool tape_inserted();\r
250         bool now_skip();\r
251         int get_tape_ptr(void);\r
252    \r
253 #ifdef _X1TWIN\r
254         void open_cart(int drv, _TCHAR* file_path);\r
255         void close_cart(int drv);\r
256         bool cart_inserted(int drv);\r
257 #endif\r
258         \r
259         void update_config();\r
260 #ifdef _X1TURBO_FEATURE\r
261         void update_dipswitch();\r
262 #endif\r
263         void save_state(FILEIO* state_fio);\r
264         bool load_state(FILEIO* state_fio);\r
265         \r
266         // ----------------------------------------\r
267         // for each device\r
268         // ----------------------------------------\r
269         \r
270         // devices\r
271         DEVICE* get_device(int id);\r
272         DEVICE* dummy;\r
273         DEVICE* first_device;\r
274         DEVICE* last_device;\r
275 };\r
276 \r
277 #endif\r