OSDN Git Service

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