2 SHARP X1 Emulator 'eX1'
3 SHARP X1twin Emulator 'eX1twin'
4 SHARP X1turbo Emulator 'eX1turbo'
6 Author : Takeda.Toshiya
15 #if defined(_X1TURBOZ)
16 #define DEVICE_NAME "SHARP X1turboZ"
17 #define CONFIG_NAME "x1turboz"
18 #elif defined(_X1TURBO)
19 #define DEVICE_NAME "SHARP X1turbo"
20 #define CONFIG_NAME "x1turbo"
21 #elif defined(_X1TWIN)
22 #define DEVICE_NAME "SHARP X1twin"
23 #define CONFIG_NAME "x1twin"
25 #define DEVICE_NAME "SHARP X1"
26 #define CONFIG_NAME "x1"
29 #if defined(_X1TURBO) || defined(_X1TURBOZ)
30 #define _X1TURBO_FEATURE
33 // device informations for virtual machine (x1)
34 #define VDP_CLOCK 28636363
35 //#ifdef _X1TURBO_FEATURE
37 //#define FRAMES_PER_SEC 55.49
38 //#define LINES_PER_FRAME 448
39 //#define CHARS_PER_LINE 56
40 //#define HD46505_CHAR_CLOCK (VDP_CLOCK * 1.5 / 32.0)
43 #define FRAMES_PER_SEC 61.94
44 #define LINES_PER_FRAME 258
45 #define CHARS_PER_LINE 56
46 #define HD46505_CHAR_CLOCK (VDP_CLOCK / 32.0)
48 #define CPU_CLOCKS 4000000
49 #define SCREEN_WIDTH 640
50 #define SCREEN_HEIGHT 400
51 #define WINDOW_HEIGHT_ASPECT 480
53 #define IO_ADDR_MAX 0x10000
56 #ifdef _X1TURBO_FEATURE
57 #define SINGLE_MODE_DMA
59 #define DATAREC_FAST_FWD_SPEED 16
60 #define DATAREC_FAST_REW_SPEED 16
61 #define PRINTER_STROBE_RISING_EDGE
62 #define SUPPORT_VARIABLE_TIMING
64 #ifdef _X1TURBO_FEATURE
65 #define IPL_ROM_FILE_SIZE 0x8000
66 #define IPL_ROM_FILE_NAME _T("IPLROM.X1T")
67 #define SUB_ROM_FILE_NAME _T("SUBROM.X1T")
68 #define KBD_ROM_FILE_NAME _T("KBDROM.X1T")
70 #define IPL_ROM_FILE_SIZE 0x1000
71 #define IPL_ROM_FILE_NAME _T("IPLROM.X1")
72 #define SUB_ROM_FILE_NAME _T("SUBROM.X1")
73 #define KBD_ROM_FILE_NAME _T("KBDROM.X1")
75 #define CRC32_MSM80C49_262 0x43EE7D6F // X1turbo with CMT
76 #define CRC32_MSM80C49_277 0x75904EFB // X1turbo (not supported yet)
79 // device informations for virtual machine (pce)
80 #define PCE_FRAMES_PER_SEC 60
81 #define PCE_LINES_PER_FRAME 262
82 #define PCE_CPU_CLOCKS 7159090
85 // device informations for win32
86 #define USE_SPECIAL_RESET
87 #ifdef _X1TURBO_FEATURE
88 #define USE_DEVICE_TYPE 2
90 #define DEVICE_TYPE_DEFAULT 1
91 #define USE_DRIVE_TYPE 2
95 #define FD_BASE_NUMBER 0
97 #define USE_TAPE_BUTTON
101 #define NOTIFY_KEY_DOWN
102 #define USE_SHIFT_NUMPAD_KEY
103 #define USE_ALT_F10_KEY
104 #define USE_AUTO_KEY 8
105 #define USE_AUTO_KEY_RELEASE 10
106 #define USE_MONITOR_TYPE 2
107 #define USE_CRT_FILTER
109 #define USE_ACCESS_LAMP
110 #define USE_SOUND_DEVICE_TYPE 3
112 #define DATAREC_SOUND
113 #define USE_SOUND_FILES 5
114 #define USE_SOUND_FILES_FDD
115 #define USE_SOUND_FILES_BUTTONS
116 #define SUPPORT_ROMA_KANA_CONVERSION
118 #define SOUND_DEVICE_TYPE_DEFAULT 1
119 #if defined(USE_SOUND_FILES)
120 # if defined(_X1TWIN)
121 # define USE_SOUND_VOLUME 7
123 # define USE_SOUND_VOLUME 6
126 # if defined(_X1TWIN)
127 # define USE_SOUND_VOLUME 5
129 # define USE_SOUND_VOLUME 4
132 #define SUPPORT_TV_RENDER
134 #define USE_JOY_BUTTON_CAPTIONS
137 #define USE_PRINTER_TYPE 4
141 #include "../../common.h"
142 #include "../../fileio.h"
144 #ifdef USE_SOUND_VOLUME
145 static const _TCHAR *sound_device_caption[] = {
146 _T("PSG"), _T("CZ-8BS1 #1"), _T("CZ-8BS1 #2"), _T("CMT"),
150 #if defined(USE_SOUND_FILES)
151 _T("FDD SEEK"), _T("CMT BUTTONS"),
156 #ifdef USE_JOY_BUTTON_CAPTIONS
158 static const _TCHAR *joy_button_captions[] = {
173 static const _TCHAR *joy_button_captions[] = {
185 static const uint16_t ANKFONT7f_9f[0x21 * 8] = {
186 0x0000, 0x3000, 0x247f, 0x6c24, 0x484c, 0xce4b, 0x0000, 0x0000,
188 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff,
189 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff,
190 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff,
191 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff,
192 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
193 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
194 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
195 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
196 0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080, 0x8080,
197 0xc0c0, 0xc0c0, 0xc0c0, 0xc0c0, 0xc0c0, 0xc0c0, 0xc0c0, 0xc0c0,
198 0xe0e0, 0xe0e0, 0xe0e0, 0xe0e0, 0xe0e0, 0xe0e0, 0xe0e0, 0xe0e0,
199 0xf0f0, 0xf0f0, 0xf0f0, 0xf0f0, 0xf0f0, 0xf0f0, 0xf0f0, 0xf0f0,
200 0xf8f8, 0xf8f8, 0xf8f8, 0xf8f8, 0xf8f8, 0xf8f8, 0xf8f8, 0xf8f8,
201 0xfcfc, 0xfcfc, 0xfcfc, 0xfcfc, 0xfcfc, 0xfcfc, 0xfcfc, 0xfcfc,
202 0xfefe, 0xfefe, 0xfefe, 0xfefe, 0xfefe, 0xfefe, 0xfefe, 0xfefe,
203 0x0101, 0x0202, 0x0404, 0x0808, 0x1010, 0x2020, 0x4040, 0x8080,
205 0x0000, 0x0000, 0x0000, 0x0000, 0x00ff, 0x0000, 0x0000, 0x0000,
206 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
207 0x1010, 0x1010, 0x1010, 0x1010, 0x00ff, 0x0000, 0x0000, 0x0000,
208 0x0000, 0x0000, 0x0000, 0x0000, 0x10ff, 0x1010, 0x1010, 0x1010,
209 0x1010, 0x1010, 0x1010, 0x1010, 0x10f0, 0x1010, 0x1010, 0x1010,
210 0x1010, 0x1010, 0x1010, 0x1010, 0x101f, 0x1010, 0x1010, 0x1010,
211 0x1010, 0x1010, 0x1010, 0x1010, 0x10ff, 0x1010, 0x1010, 0x1010,
212 0x0000, 0x0000, 0x0000, 0x0000, 0x10f0, 0x1010, 0x1010, 0x1010,
213 0x1010, 0x1010, 0x1010, 0x1010, 0x00f0, 0x0000, 0x0000, 0x0000,
214 0x1010, 0x1010, 0x1010, 0x1010, 0x001f, 0x0000, 0x0000, 0x0000,
215 0x0000, 0x0000, 0x0000, 0x0000, 0x101f, 0x1010, 0x1010, 0x1010,
216 0x0000, 0x0000, 0x0000, 0x0000, 0x4080, 0x2020, 0x1010, 0x1010,
217 0x1010, 0x1010, 0x0810, 0x0408, 0x0003, 0x0000, 0x0000, 0x0000,
218 0x1010, 0x1010, 0x2010, 0x4020, 0x0080, 0x0000, 0x0000, 0x0000,
219 0x0000, 0x0000, 0x0000, 0x0000, 0x0403, 0x0808, 0x1010, 0x1010,
220 0x8080, 0x4040, 0x2020, 0x1010, 0x0808, 0x0404, 0x0202, 0x0101
223 static const uint16_t ANKFONTe0_ff[0x20 * 8] = {
224 0x0000, 0x7e3c, 0xffff, 0xdbdb, 0xffff, 0xe7db, 0x7eff, 0x003c,
225 0x0000, 0x423c, 0x8181, 0xa5a5, 0x8181, 0x99a5, 0x4281, 0x003c,
226 0x0000, 0x3810, 0x7c7c, 0xfefe, 0xfefe, 0x106c, 0x7c38, 0x0000,
227 0x0000, 0x6c00, 0xfefe, 0xfefe, 0xfefe, 0x7c7c, 0x1038, 0x0000,
228 0x0000, 0x1010, 0x3838, 0x7c7c, 0x7cfe, 0x387c, 0x1038, 0x0010,
229 0x0000, 0x3810, 0x7c7c, 0x5438, 0xfefe, 0x6cfe, 0x7c10, 0x0000,
230 0x0101, 0x0303, 0x0707, 0x0f0f, 0x1f1f, 0x3f3f, 0x7f7f, 0xffff,
231 0x8080, 0xc0c0, 0xe0e0, 0xf0f0, 0xf8f8, 0xfcfc, 0xfefe, 0xffff,
232 0x8181, 0x4242, 0x2424, 0x1818, 0x1818, 0x2424, 0x4242, 0x8181,
233 0xf0f0, 0xf0f0, 0xf0f0, 0xf0f0, 0x0000, 0x0000, 0x0000, 0x0000,
234 0x0000, 0x0000, 0x0000, 0x0000, 0xf0f0, 0xf0f0, 0xf0f0, 0xf0f0,
235 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0000, 0x0000, 0x0000, 0x0000,
236 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f,
237 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0xf0f0, 0xf0f0, 0xf0f0, 0xf0f0,
238 0xf0f0, 0xf0f0, 0xf0f0, 0xf0f0, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f,
239 0x81ff, 0x8181, 0x8181, 0x8181, 0x8181, 0x8181, 0x8181, 0xff81,
241 0x55aa, 0x55aa, 0x55aa, 0x55aa, 0x55aa, 0x55aa, 0x55aa, 0x55aa,
242 0x1000, 0x1010, 0xf01e, 0x1010, 0x1010, 0x1010, 0x7e10, 0x00c0,
243 0x1000, 0x2418, 0x7c42, 0x1090, 0x781c, 0x5410, 0xfe54, 0x0000,
244 0x1000, 0x1010, 0xfe10, 0x1010, 0x3030, 0x565c, 0x9090, 0x0010,
245 0x1000, 0x1210, 0xf412, 0x3034, 0x5030, 0x9654, 0x1090, 0x0000,
246 0x0800, 0x8808, 0x5292, 0x1454, 0x2020, 0x5020, 0x465c, 0x0040,
247 0x0000, 0xe23c, 0x8282, 0x82fa, 0x7a82, 0x4242, 0x0044, 0x0000,
248 0x0000, 0x443c, 0x8242, 0xf282, 0x8282, 0x8282, 0x3844, 0x0000,
249 0x0800, 0x5e18, 0xa468, 0xe4be, 0xbea4, 0xb2a2, 0x0a5a, 0x0002,
250 0x0000, 0x2628, 0x4042, 0xe23c, 0x2222, 0x4222, 0x4442, 0x0004,
251 0x0800, 0x0808, 0xda7a, 0x5454, 0x46e4, 0xe442, 0x08c4, 0x0000,
252 0x0000, 0x7e40, 0x8848, 0x28be, 0x2828, 0x3e28, 0x08e8, 0x0008,
253 0x0000, 0x723c, 0x9252, 0x9292, 0x8292, 0x84fc, 0x8484, 0x0000,
254 0x0000, 0x1010, 0x2010, 0x2020, 0x6040, 0x8c50, 0x8286, 0x0000,
255 0x0000, 0x4040, 0x784e, 0x88c0, 0x388e, 0x0848, 0x7e08, 0x0000,
256 0x0000, 0x7c00, 0x0000, 0x0000, 0x10fe, 0x1010, 0x1010, 0x0010
274 #ifdef _X1TURBO_FEATURE
319 #ifdef _X1TURBO_FEATURE
340 int sound_device_type;
351 // ----------------------------------------
353 // ----------------------------------------
358 // ----------------------------------------
359 // for emulation class
360 // ----------------------------------------
362 // drive virtual machine
364 void special_reset();
366 double get_frame_rate();
370 DEVICE *get_cpu(int index);
375 uint32_t get_access_lamp_status();
378 void initialize_sound(int rate, int samples);
379 uint16_t* create_sound(int* extra_frames);
380 int get_sound_buffer_ptr();
381 #ifdef USE_SOUND_VOLUME
382 void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
386 void key_down(int code, bool repeat);
387 void key_up(int code);
390 void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
391 void close_floppy_disk(int drv);
392 bool is_floppy_disk_inserted(int drv);
393 void is_floppy_disk_protected(int drv, bool value);
394 bool is_floppy_disk_protected(int drv);
395 void play_tape(const _TCHAR* file_path);
396 void rec_tape(const _TCHAR* file_path);
398 bool is_tape_inserted();
399 bool is_tape_playing();
400 bool is_tape_recording();
401 int get_tape_position();
404 void push_fast_forward();
405 void push_fast_rewind();
406 void push_apss_forward();
407 void push_apss_rewind();
408 bool is_frame_skippable();
410 void open_cart(int drv, const _TCHAR* file_path);
411 void close_cart(int drv);
412 bool is_cart_inserted(int drv);
415 void update_config();
416 #ifdef _X1TURBO_FEATURE
417 void update_dipswitch();
419 void save_state(FILEIO* state_fio);
420 bool load_state(FILEIO* state_fio);
422 // ----------------------------------------
424 // ----------------------------------------
427 DEVICE* get_device(int id);
429 DEVICE* first_device;