2 NEC PC-8001 Emulator 'ePC-8001'
3 NEC PC-8001mkII Emulator 'ePC-8001mkII'
4 NEC PC-8001mkIISR Emulator 'ePC-8001mkIISR'
5 NEC PC-8801 Emulator 'ePC-8801'
6 NEC PC-8801mkII Emulator 'ePC-8801mkII'
7 NEC PC-8801MA Emulator 'ePC-8801MA'
9 Author : Takeda.Toshiya
18 #if defined(_PC8801MA)
19 #define DEVICE_NAME "NEC PC-8801MA"
20 #define CONFIG_NAME "pc8801ma"
21 #elif defined(_PC8801MK2)
22 #define DEVICE_NAME "NEC PC-8801mkII"
23 #define CONFIG_NAME "pc8801mk2"
24 #elif defined(_PC8801)
25 #define DEVICE_NAME "NEC PC-8801"
26 #define CONFIG_NAME "pc8801"
27 #elif defined(_PC8001SR)
28 #define DEVICE_NAME "NEC PC-8001mkIISR"
29 #define CONFIG_NAME "pc8001mk2sr"
30 #elif defined(_PC8001MK2)
31 #define DEVICE_NAME "NEC PC-8001mkII"
32 #define CONFIG_NAME "pc8001mk2"
33 #elif defined(_PC8001)
34 #define DEVICE_NAME "NEC PC-8001"
35 #define CONFIG_NAME "pc8001"
38 #if defined(_PC8001) || defined(_PC8001MK2) || defined(_PC8001SR)
39 #define PC8001_VARIANT
41 #define PC8801_VARIANT
43 #if defined(_PC8801MA)
44 #define PC8801SR_VARIANT
47 #if defined(PC8001_VARIANT)
48 #define MODE_PC80_V1 0
49 #define MODE_PC80_V2 1
52 #define MODE_PC88_V1S 0
53 #define MODE_PC88_V1H 1
54 #define MODE_PC88_V2 2
58 #if defined(_PC8801MA)
59 #define SUPPORT_PC88_KANJI1
60 #define SUPPORT_PC88_KANJI2
61 #define SUPPORT_PC88_DICTIONARY
62 #define SUPPORT_PC88_HIGH_CLOCK
63 #define SUPPORT_PC88_OPN1
64 #define SUPPORT_PC88_OPN2
65 #define SUPPORT_PC88_OPNA
66 #define SUPPORT_PC88_CDROM
67 #define SUPPORT_PC88_VAB
68 #define SUPPORT_PC88_HMB20
69 #define SUPPORT_PC88_JOYSTICK
70 #if defined(SUPPORT_PC88_VAB)
72 #define PC88_EXRAM_BANKS 8
73 #define PC88_VAB_PAGE 1
75 #define PC88_EXRAM_BANKS 4
78 #elif defined(_PC8801MK2)
79 #define SUPPORT_PC88_KANJI1
80 // #define SUPPORT_PC88_KANJI2
81 #define SUPPORT_PC88_OPN2
82 #define SUPPORT_PC88_OPNA
83 #elif defined(_PC8801)
84 #define SUPPORT_PC88_KANJI1
85 // #define SUPPORT_PC88_KANJI2
86 // #define SUPPORT_PC88_OPN2
87 // #define SUPPORT_PC88_OPNA
88 #elif defined(_PC8001SR)
89 #define SUPPORT_PC88_KANJI1
90 // #define SUPPORT_PC88_KANJI2
91 #define SUPPORT_PC88_OPN1
92 #define SUPPORT_PC88_OPN2
93 #define SUPPORT_PC88_OPNA
94 #define PC88_EXRAM_BANKS 1
95 #elif defined(_PC8001MK2)
96 #define SUPPORT_PC88_KANJI1
97 // #define SUPPORT_PC88_KANJI2
98 #define SUPPORT_PC88_OPN2
99 #define SUPPORT_PC88_OPNA
100 #define PC88_EXRAM_BANKS 1
101 #elif defined(_PC8001)
102 // #define SUPPORT_PC88_KANJI1
103 // #define SUPPORT_PC88_KANJI2
104 // #define SUPPORT_PC88_OPN2
105 // #define SUPPORT_PC88_OPNA
107 #define SUPPORT_PC88_PCG8100
109 // device informations for virtual machine
110 #define FRAMES_PER_SEC 62.422
111 #define LINES_PER_FRAME 260
112 #define CPU_CLOCKS 3993624
113 #define SCREEN_WIDTH 640
114 #define SCREEN_HEIGHT 400
115 #define WINDOW_HEIGHT_ASPECT 480
117 #define UPD765A_NO_ST1_EN_OR_FOR_RESULT7
118 #if defined(PC8801_VARIANT)
119 #define PC80S31K_NO_WAIT
121 #if defined(SUPPORT_PC88_CDROM)
122 #define SCSI_HOST_AUTO_ACK
123 #define SCSI_DEV_IMMEDIATE_SELECT
125 #define Z80_MEMORY_WAIT
126 #define OVERRIDE_SOUND_FREQ_48000HZ 55467
128 // device informations for win32
129 #if defined(PC8001_VARIANT)
130 #define USE_BOOT_MODE 3
131 #define USE_CPU_TYPE 2
133 #define USE_BOOT_MODE 4
134 #define USE_CPU_TYPE 3
136 #if defined(_PC8801MA)
138 #define BOOT_MODE_DEFAULT 2
139 #define CPU_TYPE_DEFAULT 1
141 #define USE_DIPSWITCH
142 #define USE_JOYSTICK_TYPE 2
143 #define USE_FLOPPY_DISK 2
145 #define TAPE_BINARY_ONLY
146 #if defined(SUPPORT_PC88_CDROM)
147 #define USE_COMPACT_DISC 1
149 #define USE_KEY_LOCKED
150 // slow enough for N88-
\93ú
\96{
\8cêBASIC
151 #define USE_AUTO_KEY 8
152 #define USE_AUTO_KEY_RELEASE 10
153 #define USE_AUTO_KEY_NUMPAD
154 #define USE_MONITOR_TYPE 2
155 #define USE_SCREEN_FILTER
158 #if defined(_PC8801MA)
159 #define USE_SOUND_TYPE 6 // OPNA,OPN,OPN+OPNA,OPN+OPN,OPNA+OPNA,OPNA+OPN
160 #elif defined(_PC8001SR)
161 #define USE_SOUND_TYPE 3 // OPN,OPN+OPN,OPN+OPNA
162 #elif defined(_PC8001MK2) || defined(_PC8801MK2)
163 #define USE_SOUND_TYPE 3 // None,OPN,OPNA
165 #if defined(SUPPORT_PC88_OPN1)
166 #if defined(SUPPORT_PC88_OPNA)
167 #define SOUND_VOLUME_OPN1 4
169 #define SOUND_VOLUME_OPN1 2
172 #define SOUND_VOLUME_OPN1 0
174 #if defined(SUPPORT_PC88_OPN2)
175 #if defined(SUPPORT_PC88_OPNA)
176 #define SOUND_VOLUME_OPN2 4
178 #define SOUND_VOLUME_OPN2 2
181 #define SOUND_VOLUME_OPN2 0
183 #if defined(SUPPORT_PC88_CDROM)
184 #define SOUND_VOLUME_CDROM 1
185 #define SOUND_VOLUME_CDROM 1
187 #define SOUND_VOLUME_CDROM 0
189 #if defined(SUPPORT_PC88_HMB20)
190 #define SOUND_VOLUME_HMB20 1
192 #define SOUND_VOLUME_HMB20 0
194 #if defined(SUPPORT_PC88_PCG8100)
195 #define SOUND_VOLUME_PCG8100 1
197 #define SOUND_VOLUME_PCG8100 0
199 #define USE_SOUND_VOLUME (SOUND_VOLUME_OPN1 + SOUND_VOLUME_OPN2 + SOUND_VOLUME_CDROM + SOUND_VOLUME_HMB20 + SOUND_VOLUME_PCG8100 + 1 + 1)
201 #define SUPPORT_TV_RENDER
205 #define USE_PRINTER_TYPE 3
210 #include "../../common.h"
211 #include "../../fileio.h"
212 #include "../vm_template.h"
214 #ifdef USE_SOUND_VOLUME
215 static const _TCHAR *sound_device_caption[USE_SOUND_VOLUME] = {
216 #ifdef SUPPORT_PC88_OPN1
217 _T("OPN1 (FM)"), _T("OPN1 (PSG)"),
218 #ifdef SUPPORT_PC88_OPNA
219 _T("OPN1 (ADPCM)"), _T("OPN1 (Rhythm)"),
222 #ifdef SUPPORT_PC88_OPN2
223 _T("OPN2 (FM)"), _T("OPN2 (PSG)"),
224 #ifdef SUPPORT_PC88_OPNA
225 _T("OPN2 (ADPCM)"), _T("OPN2 (Rhythm)"),
228 #ifdef SUPPORT_PC88_CDROM
231 #ifdef SUPPORT_PC88_HMB20
234 #ifdef SUPPORT_PC88_PCG8100
237 _T("Beep"), _T("Noise (FDD)"),
250 #if defined(SUPPORT_PC88_OPN1) || defined(SUPPORT_PC88_OPN2)
258 #ifdef SUPPORT_PC88_CDROM
263 #ifdef SUPPORT_PC88_HMB20
267 #ifdef SUPPORT_PC88_PCG8100
273 class VM : public VM_TEMPLATE
277 //csp_state_utils* state_entry;
287 #ifdef SUPPORT_PC88_OPN1
290 #ifdef SUPPORT_PC88_OPN2
298 UPD765A* pc88fdc_sub;
299 NOISE* pc88noise_seek;
300 NOISE* pc88noise_head_down;
301 NOISE* pc88noise_head_up;
304 #ifdef SUPPORT_PC88_CDROM
305 SCSI_HOST* pc88scsi_host;
306 SCSI_CDROM* pc88scsi_cdrom;
309 #ifdef SUPPORT_PC88_HMB20
313 #ifdef SUPPORT_PC88_PCG8100
325 // ----------------------------------------
327 // ----------------------------------------
332 // ----------------------------------------
333 // for emulation class
334 // ----------------------------------------
336 // drive virtual machine
339 double get_frame_rate();
343 DEVICE *get_cpu(int index);
350 void initialize_sound(int rate, int samples);
351 uint16_t* create_sound(int* extra_frames);
352 int get_sound_buffer_ptr();
353 #ifdef USE_SOUND_VOLUME
354 void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
358 void key_down(int code, bool repeat);
359 void key_up(int code);
360 bool get_caps_locked();
361 bool get_kana_locked();
364 void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
365 void close_floppy_disk(int drv);
366 bool is_floppy_disk_inserted(int drv);
367 void is_floppy_disk_protected(int drv, bool value);
368 bool is_floppy_disk_protected(int drv);
369 uint32_t is_floppy_disk_accessed();
370 void play_tape(int drv, const _TCHAR* file_path);
371 void rec_tape(int drv, const _TCHAR* file_path);
372 void close_tape(int drv);
373 bool is_tape_inserted(int drv);
374 #ifdef SUPPORT_PC88_CDROM
375 void open_compact_disc(int drv, const _TCHAR* file_path);
376 void close_compact_disc(int drv);
377 bool is_compact_disc_inserted(int drv);
378 uint32_t is_compact_disc_accessed();
380 bool is_frame_skippable();
382 void update_config();
383 bool process_state(FILEIO* state_fio, bool loading);
385 // ----------------------------------------
387 // ----------------------------------------
390 DEVICE* get_device(int id);
392 //DEVICE* first_device;
393 //DEVICE* last_device;