2 NEC PC-6001 Emulator 'yaPC-6001'
3 NEC PC-6001mkII Emulator 'yaPC-6201'
4 NEC PC-6001mkIISR Emulator 'yaPC-6401'
5 NEC PC-6601 Emulator 'yaPC-6601'
6 NEC PC-6601SR Emulator 'yaPC-6801'
18 #define DEVICE_NAME "NEC PC-6001"
19 #define CONFIG_NAME "pc6001"
20 #define SUB_CPU_ROM_FILE_NAME "SUBCPU.60"
21 #define SCREEN_WIDTH 256
22 #define SCREEN_HEIGHT 192
23 #define CPU_CLOCKS 3993600
25 #elif defined(_PC6001MK2)
26 #define DEVICE_NAME "NEC PC-6001mkII"
27 #define CONFIG_NAME "pc6001mk2"
28 #define SUB_CPU_ROM_FILE_NAME "SUBCPU.62"
29 #define SCREEN_WIDTH 640
30 #define SCREEN_HEIGHT 400
31 #define WINDOW_HEIGHT_ASPECT 480
32 #define CPU_CLOCKS 4000000
34 #elif defined(_PC6001MK2SR)
35 #define DEVICE_NAME "NEC PC-6001mkIISR"
36 #define CONFIG_NAME "pc6001mk2sr"
37 #define SUB_CPU_ROM_FILE_NAME "SUBCPU.68"
38 #define SCREEN_WIDTH 640
39 #define SCREEN_HEIGHT 400
40 #define WINDOW_HEIGHT_ASPECT 480
41 #define CPU_CLOCKS 3580000
42 #elif defined(_PC6601)
43 #define DEVICE_NAME "NEC PC-6601"
44 #define CONFIG_NAME "pc6601"
45 #define SUB_CPU_ROM_FILE_NAME "SUBCPU.66"
46 #define SCREEN_WIDTH 640
47 #define SCREEN_HEIGHT 400
48 #define WINDOW_HEIGHT_ASPECT 480
49 #define CPU_CLOCKS 4000000
51 #elif defined(_PC6601SR)
52 #define DEVICE_NAME "NEC PC-6601SR"
53 #define CONFIG_NAME "pc6601sr"
54 #define SUB_CPU_1_ROM_FILE_NAME "SUBCPU1.68"
55 #define SUB_CPU_2_ROM_FILE_NAME "SUBCPU2.68"
56 #define SUB_CPU_3_ROM_FILE_NAME "SUBCPU3.68"
57 #define SCREEN_WIDTH 640
58 #define SCREEN_HEIGHT 400
59 #define WINDOW_HEIGHT_ASPECT 480
60 #define CPU_CLOCKS 3580000
63 // device informations for virtual machine
64 #define FRAMES_PER_SEC 60
65 #define LINES_PER_FRAME 262
67 #define MC6847_ATTR_OFS 0
68 #define MC6847_VRAM_OFS 0x200
69 #define MC6847_ATTR_AG 0x80
70 #define MC6847_ATTR_AS 0x40
71 #define MC6847_ATTR_INTEXT 0x20
72 #define MC6847_ATTR_GM0 0x10
73 #define MC6847_ATTR_GM1 0x08
74 #define MC6847_ATTR_GM2 0x04
75 #define MC6847_ATTR_CSS 0x02
76 #define MC6847_ATTR_INV 0x01
78 // device informations for win32
80 #if defined(_PC6601) || defined(_PC6601SR)
81 #define USE_FLOPPY_DISK 4
83 #define USE_FLOPPY_DISK 2
86 #define USE_TAPE_BUTTON
88 #define NOTIFY_KEY_DOWN
89 #define USE_SHIFT_NUMPAD_KEY
90 #define USE_ALT_F10_KEY
91 #define USE_AUTO_KEY 6
92 #define USE_AUTO_KEY_RELEASE 10
93 #define USE_AUTO_KEY_CAPS
95 #define USE_SCREEN_FILTER
99 #define USE_SOUND_VOLUME 4
101 #define USE_SOUND_VOLUME 5
105 #define USE_PRINTER_TYPE 3
108 #define USE_CPU_MCS48
111 #include "../../common.h"
112 #include "../../fileio.h"
113 #include "../vm_template.h"
115 #ifdef USE_SOUND_VOLUME
116 static const _TCHAR *sound_device_caption[] = {
118 #if !defined(_PC6001)
121 _T("CMT (Signal)"), _T("Noise (FDD)"), _T("Noise (CMT)"),
139 #if defined(_PC6001MK2SR) || defined(_PC6601SR)
154 #if defined(_PC6601) || defined(_PC6601SR)
168 class VM : public VM_TEMPLATE
182 NOISE* noise_head_down;
183 NOISE* noise_head_up;
184 #if defined(_PC6001MK2SR) || defined(_PC6601SR)
192 PC6001::DISPLAY* display;
196 #if defined(_PC6601) || defined(_PC6601SR)
197 PC6001::FLOPPY* floppy;
199 PC6001::JOYSTICK* joystick;
200 PC6001::MEMORY* memory;
202 PC6001::TIMER* timer;
212 UPD765A* fdc_pc80s31k;
215 bool support_sub_cpu;
216 bool support_pc80s31k;
219 // ----------------------------------------
221 // ----------------------------------------
226 // ----------------------------------------
227 // for emulation class
228 // ----------------------------------------
230 // drive virtual machine
236 DEVICE *get_cpu(int index);
243 void initialize_sound(int rate, int samples);
244 uint16_t* create_sound(int* extra_frames);
245 int get_sound_buffer_ptr();
246 #ifdef USE_SOUND_VOLUME
247 void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
251 void key_down(int code, bool repeat);
252 void key_up(int code);
255 void open_cart(int drv, const _TCHAR* file_path);
256 void close_cart(int drv);
257 bool is_cart_inserted(int drv);
258 void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
259 void close_floppy_disk(int drv);
260 bool is_floppy_disk_inserted(int drv);
261 void is_floppy_disk_protected(int drv, bool value);
262 bool is_floppy_disk_protected(int drv);
263 uint32_t is_floppy_disk_accessed();
264 void play_tape(int drv, const _TCHAR* file_path);
265 void rec_tape(int drv, const _TCHAR* file_path);
266 void close_tape(int drv);
267 bool is_tape_inserted(int drv);
268 bool is_tape_playing(int drv);
269 bool is_tape_recording(int drv);
270 int get_tape_position(int drv);
271 const _TCHAR* get_tape_message(int drv);
272 void push_play(int drv);
273 void push_stop(int drv);
274 void push_fast_forward(int drv);
275 void push_fast_rewind(int drv);
276 void push_apss_forward(int drv) {}
277 void push_apss_rewind(int drv) {}
278 bool is_frame_skippable();
280 void update_config();
281 bool process_state(FILEIO* state_fio, bool loading);
283 // ----------------------------------------
285 // ----------------------------------------
288 DEVICE* get_device(int id);
290 //DEVICE* first_device;
291 //DEVICE* last_device;