2 NEC PC-8801MA Emulator 'ePC-8801MA'
3 NEC PC-8001mkIISR Emulator 'ePC-8001mkIISR'
5 Author : Takeda.Toshiya
14 #if defined(_PC8801MA)
15 #define DEVICE_NAME "NEC PC-8801MA"
16 #define CONFIG_NAME "pc8801ma"
17 #elif defined(_PC8001SR)
18 #define DEVICE_NAME "NEC PC-8001mkIISR"
19 #define CONFIG_NAME "pc8001mk2sr"
22 #if defined(_PC8001SR)
23 #define MODE_PC80_V1 0
24 #define MODE_PC80_V2 1
27 #define MODE_PC88_V1S 0
28 #define MODE_PC88_V1H 1
29 #define MODE_PC88_V2 2
33 #if defined(_PC8801MA)
34 #define SUPPORT_PC88_DICTIONARY
35 #define SUPPORT_PC88_HIGH_CLOCK
36 #define SUPPORT_PC88_OPNA
37 #define SUPPORT_PC88_SB2
38 #define SUPPORT_PC88_CDROM
39 #define SUPPORT_PC88_VAB
40 #define SUPPORT_PC88_HMB20
41 #if defined(SUPPORT_PC88_VAB)
43 #define PC88_EXRAM_BANKS 8
44 #define PC88_VAB_PAGE 1
46 #define PC88_EXRAM_BANKS 4
50 #define SUPPORT_PC88_JOYSTICK
51 #define SUPPORT_PC88_PCG8100
53 // device informations for virtual machine
54 #define FRAMES_PER_SEC 62.422
55 #define LINES_PER_FRAME 260
56 #define CPU_CLOCKS 3993624
57 #define SCREEN_WIDTH 640
58 #define SCREEN_HEIGHT 400
59 #define WINDOW_HEIGHT_ASPECT 480
61 #define UPD765A_NO_ST1_EN_OR_FOR_RESULT7
62 #if defined(_PC8801MA)
63 #define PC80S31K_NO_WAIT
65 #if defined(SUPPORT_PC88_CDROM)
66 #define SCSI_HOST_AUTO_ACK
67 #define SCSI_DEV_IMMEDIATE_SELECT
69 #define Z80_MEMORY_WAIT
70 #define OVERRIDE_SOUND_FREQ_48000HZ 55467
72 // device informations for win32
73 #if defined(_PC8001SR)
74 #define USE_BOOT_MODE 3
75 #define USE_CPU_TYPE 2
77 #define USE_BOOT_MODE 4
78 #define USE_CPU_TYPE 3
80 #if defined(_PC8801MA)
82 #define BOOT_MODE_DEFAULT 2
83 #define CPU_TYPE_DEFAULT 1
86 #define USE_JOYSTICK_TYPE 2
87 #define USE_FLOPPY_DISK 2
89 #define TAPE_BINARY_ONLY
90 #if defined(SUPPORT_PC88_CDROM)
91 #define USE_COMPACT_DISC 1
93 #define USE_KEY_LOCKED
94 // slow enough for N88-
\93ú
\96{
\8cêBASIC
95 #define USE_AUTO_KEY 8
96 #define USE_AUTO_KEY_RELEASE 10
97 #define USE_AUTO_KEY_NUMPAD
98 #define USE_MONITOR_TYPE 2
99 #define USE_SCREEN_FILTER
101 #ifdef SUPPORT_PC88_OPNA
102 #ifdef SUPPORT_PC88_SB2
103 #define USE_SOUND_TYPE 6
105 #define USE_SOUND_TYPE 2
111 #undef _SOUNDS_PCG8100
117 #if defined(SUPPORT_PC88_OPNA)
118 #define _SOUNDS_OPN 4
119 #else /* ToDo: PC8001 without OPN/OPNA */
120 #define _SOUNDS_OPN 2
122 #if defined(SUPPORT_PC88_SB2)
123 #if defined(SUPPORT_PC88_OPNA)
124 #define _SOUNDS_SB2 4
126 #define _SOUNDS_SB2 2
128 #else /* Have not SB2 */
129 #define _SOUNDS_SB2 0
131 #if defined(SUPPORT_PC88_PCG8100)
132 #define _SOUNDS_PCG8100 1
134 #define _SOUNDS_PCG8100 0
136 #if defined(SUPPORT_PC88_CDROM)
137 #define _SOUNDS_CDROM 1
139 #define _SOUNDS_CDROM 0
141 #if defined(SUPPORT_PC88_HMB20)
142 #define _SOUNDS_HMB20 1
144 #define _SOUNDS_HMB20 0
146 #define _SOUNDS_BEEP 1
147 #define _SOUNDS_NOISE 1
149 #define USE_SOUND_VOLUME (_SOUNDS_OPN + _SOUNDS_SB2 + _SOUNDS_PCG8100 + _SOUNDS_CDROM + _SOUNDS_HMB20 + _SOUNDS_BEEP + _SOUNDS_NOISE)
152 #define SUPPORT_TV_RENDER
156 #define USE_PRINTER_TYPE 3
161 #include "../../common.h"
162 #include "../../fileio.h"
163 #include "../vm_template.h"
165 #ifdef USE_SOUND_VOLUME
166 static const _TCHAR *sound_device_caption[USE_SOUND_VOLUME] = {
167 #ifdef SUPPORT_PC88_OPNA
168 _T("OPNA (FM)"), _T("OPNA (PSG)"), _T("OPNA (ADPCM)"), _T("OPNA (Rhythm)"),
170 _T("OPN (FM)"), _T("OPN (PSG)"),
172 #ifdef SUPPORT_PC88_SB2
173 #ifdef SUPPORT_PC88_OPNA
174 _T("SB2 (FM)"), _T("SB2 (PSG)"), _T("SB2 (ADPCM)"), _T("SB2 (Rhythm)"),
176 _T("SB2 (FM)"), _T("SB2 (PSG)"),
179 #ifdef SUPPORT_PC88_CDROM
182 #ifdef SUPPORT_PC88_HMB20
185 #ifdef SUPPORT_PC88_PCG8100
188 _T("Beep"), _T("Noise (FDD)"),
207 #ifdef SUPPORT_PC88_CDROM
212 #ifdef SUPPORT_PC88_HMB20
216 #ifdef SUPPORT_PC88_PCG8100
222 class VM : public VM_TEMPLATE
226 //csp_state_utils* state_entry;
237 #ifdef SUPPORT_PC88_SB2
245 UPD765A* pc88fdc_sub;
246 NOISE* pc88noise_seek;
247 NOISE* pc88noise_head_down;
248 NOISE* pc88noise_head_up;
251 #ifdef SUPPORT_PC88_CDROM
252 SCSI_HOST* pc88scsi_host;
253 SCSI_CDROM* pc88scsi_cdrom;
256 #ifdef SUPPORT_PC88_HMB20
260 #ifdef SUPPORT_PC88_PCG8100
272 // ----------------------------------------
274 // ----------------------------------------
279 // ----------------------------------------
280 // for emulation class
281 // ----------------------------------------
283 // drive virtual machine
286 double get_frame_rate();
290 DEVICE *get_cpu(int index);
297 void initialize_sound(int rate, int samples);
298 uint16_t* create_sound(int* extra_frames);
299 int get_sound_buffer_ptr();
300 #ifdef USE_SOUND_VOLUME
301 void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
305 void key_down(int code, bool repeat);
306 void key_up(int code);
307 bool get_caps_locked();
308 bool get_kana_locked();
311 void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
312 void close_floppy_disk(int drv);
313 bool is_floppy_disk_inserted(int drv);
314 void is_floppy_disk_protected(int drv, bool value);
315 bool is_floppy_disk_protected(int drv);
316 uint32_t is_floppy_disk_accessed();
317 void play_tape(int drv, const _TCHAR* file_path);
318 void rec_tape(int drv, const _TCHAR* file_path);
319 void close_tape(int drv);
320 bool is_tape_inserted(int drv);
321 #ifdef SUPPORT_PC88_CDROM
322 void open_compact_disc(int drv, const _TCHAR* file_path);
323 void close_compact_disc(int drv);
324 bool is_compact_disc_inserted(int drv);
325 uint32_t is_compact_disc_accessed();
327 bool is_frame_skippable();
329 void update_config();
330 bool process_state(FILEIO* state_fio, bool loading);
332 // ----------------------------------------
334 // ----------------------------------------
337 DEVICE* get_device(int id);
339 //DEVICE* first_device;
340 //DEVICE* last_device;