OSDN Git Service

[VM][General][WIP] Syncing to UPSTREAM 2015-01-21 , work-in-progress.
[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 IO;\r
120 class MB8877;\r
121 class YM2151;\r
122 class YM2203;\r
123 class Z80;\r
124 class Z80CTC;\r
125 class Z80SIO;\r
126 #ifdef _X1TURBO_FEATURE\r
127 class Z80DMA;\r
128 #endif\r
129 \r
130 class DISPLAY;\r
131 class EMM;\r
132 class FLOPPY;\r
133 class IOBUS;\r
134 class JOYSTICK;\r
135 class MEMORY;\r
136 class MOUSE;\r
137 class PRINTER;\r
138 class PSUB;\r
139 \r
140 class MCS48;\r
141 class UPD1990A;\r
142 class SUB;\r
143 class KEYBOARD;\r
144 \r
145 #ifdef _X1TWIN\r
146 class HUC6280;\r
147 class PCE;\r
148 #endif\r
149 \r
150 class FILEIO;\r
151 \r
152 class VM\r
153 {\r
154 protected:\r
155         EMU* emu;\r
156         \r
157         // devices for x1\r
158         EVENT* event;\r
159         \r
160         DATAREC* drec;\r
161         HD46505* crtc;\r
162         I8255* pio;\r
163         IO *io;\r
164         MB8877* fdc;\r
165         YM2151* opm1;\r
166         YM2151* opm2;\r
167         YM2203* psg;\r
168         Z80* cpu;\r
169         Z80CTC* ctc;\r
170         Z80SIO* sio;\r
171         Z80CTC* ctc1;\r
172         Z80CTC* ctc2;\r
173 #ifdef _X1TURBO_FEATURE\r
174         Z80DMA* dma;\r
175 #endif\r
176         \r
177         DISPLAY* display;\r
178         EMM* emm;\r
179         FLOPPY* floppy;\r
180         IOBUS* iobus;\r
181         JOYSTICK* joy;\r
182         MEMORY* memory;\r
183         MOUSE* mouse;\r
184         PRINTER* printer;\r
185         PSUB* psub;\r
186         \r
187         MCS48* cpu_sub;\r
188         UPD1990A* rtc_sub;\r
189         I8255* pio_sub;\r
190         SUB* sub;\r
191         \r
192         MCS48* cpu_kbd;\r
193         KEYBOARD* kbd;\r
194         \r
195         bool pseudo_sub_cpu;\r
196         int sound_device_type;\r
197         \r
198 #ifdef _X1TWIN\r
199         // device for pce\r
200         EVENT* pceevent;\r
201         \r
202         HUC6280* pcecpu;\r
203         PCE* pce;\r
204 #endif\r
205         \r
206 public:\r
207         // ----------------------------------------\r
208         // initialize\r
209         // ----------------------------------------\r
210         \r
211         VM(EMU* parent_emu);\r
212         ~VM();\r
213         \r
214         // ----------------------------------------\r
215         // for emulation class\r
216         // ----------------------------------------\r
217         \r
218         // drive virtual machine\r
219         void reset();\r
220         void special_reset();\r
221         void run();\r
222         double frame_rate();\r
223         \r
224 #ifdef USE_DEBUGGER\r
225         // debugger\r
226         DEVICE *get_cpu(int index);\r
227 #endif\r
228         \r
229         // draw screen\r
230         void draw_screen();\r
231         int access_lamp();\r
232         \r
233         // sound generation\r
234         void initialize_sound(int rate, int samples);\r
235         uint16* create_sound(int* extra_frames);\r
236         int sound_buffer_ptr();\r
237         \r
238         // notify key\r
239         void key_down(int code, bool repeat);\r
240         void key_up(int code);\r
241         \r
242         // user interface\r
243         void open_disk(int drv, _TCHAR* file_path, int offset);\r
244         void close_disk(int drv);\r
245         bool disk_inserted(int drv);\r
246         void write_protect_fd(int drv, bool flag);\r
247         bool is_write_protect_fd(int drv);\r
248         void play_tape(_TCHAR* file_path);\r
249         void rec_tape(_TCHAR* file_path);\r
250         void close_tape();\r
251         bool tape_inserted();\r
252         bool now_skip();\r
253         int get_tape_ptr(void);\r
254    \r
255 #ifdef _X1TWIN\r
256         void open_cart(int drv, _TCHAR* file_path);\r
257         void close_cart(int drv);\r
258         bool cart_inserted(int drv);\r
259 #endif\r
260         \r
261         void update_config();\r
262 #ifdef _X1TURBO_FEATURE\r
263         void update_dipswitch();\r
264 #endif\r
265         void save_state(FILEIO* state_fio);\r
266         bool load_state(FILEIO* state_fio);\r
267         \r
268         // ----------------------------------------\r
269         // for each device\r
270         // ----------------------------------------\r
271         \r
272         // devices\r
273         DEVICE* get_device(int id);\r
274         DEVICE* dummy;\r
275         DEVICE* first_device;\r
276         DEVICE* last_device;\r
277 };\r
278 \r
279 #endif\r