2 Common Source Code Project
3 MSX Series (experimental)
5 Origin : src/vm/msx/msx.h
17 #define DEVICE_NAME "PIONEER PX-7"
18 #define CONFIG_NAME "px7"
20 #define DEVICE_NAME "ASCII MSX1"
21 #define CONFIG_NAME "msx1"
23 #define DEVICE_NAME "ASCII MSX2"
24 #define CONFIG_NAME "msx2"
26 #define DEVICE_NAME "ASCII MSX2+"
27 #define CONFIG_NAME "msx2p"
29 #define DEVICE_NAME "TOSHIBA HX-20+"
30 #define CONFIG_NAME "hx20"
32 #define DEVICE_NAME "Panasonic FS-A1"
33 #define CONFIG_NAME "fsa1"
34 #elif defined(_HBF1XDJ)
35 #define DEVICE_NAME "SONY HB-F1XDJ"
36 #define CONFIG_NAME "hbf1xdj"
41 #define _MSX1_VARIANTS
42 #define MAINROM_SLOT 0x00
43 #define CART1_SLOT 0x01
45 #define CART2_SLOT 0x03
46 #define MAINROM_PLUS_RAM_32K
50 #define _MSX1_VARIANTS
51 #define MAINROM_SLOT 0x00
52 #define CART1_SLOT 0x01
53 #define CART2_SLOT 0x02
54 #define RAM64K_SLOT 0x83
55 #define FDD_PATCH_SLOT 0x8B
56 #define FIRMWARE32K1_SLOT 0x8F
57 #define FIRMWARE32K1_FILENAME _T("HX20FIRM.ROM")
58 #define MSX_PSG_STEREO
62 #define _MSX2_VARIANTS
63 #define MAINROM_SLOT 0x00
64 #define CART1_SLOT 0x01
65 #define CART2_SLOT 0x02
66 #define RAM64K_SLOT 0x83
67 #define SUBROM_SLOT 0x87
68 #define FIRMWARE32K1_SLOT 0x8B
69 #define FIRMWARE32K1_FILENAME _T("FSA1FIRM1.ROM")
70 #define FIRMWARE32K2_SLOT 0x8F
71 #define FIRMWARE32K2_FILENAME _T("FSA1FIRM2.ROM")
72 #define MSX_KEYBOARD_50ON
74 #elif defined(_HBF1XDJ)
76 #define _MSX2P_VARIANTS
77 #define MAINROM_SLOT 0x80
78 //#define HALNOTE_SLOT 0x8C /* MSX-JE */
79 #define CART1_SLOT 0x01
80 #define CART2_SLOT 0x02
81 #define MAPPERRAM_SLOT 0x83
82 #define SUBROM_SLOT 0x87
83 #define FDD_PATCH_SLOT 0x8B
84 #define MSXMUSIC_SLOT 0x8F
85 #define MAPPERRAM_SIZE (64*1024)
86 #define MAPPERRAM_MASK 0x03
90 #define _MSX2P_VARIANTS
91 #define MAINROM_SLOT 0x80
92 #define MSXMUSIC_SLOT 0x88
93 #define MSXDOS2_SLOT 0x8C
94 #define CART1_SLOT 0x01
95 #define CART2_SLOT 0x02
96 #define MAPPERRAM_SLOT 0x83
97 #define SUBROM_SLOT 0x87
98 #define FDD_PATCH_SLOT 0x8B
99 #define MAPPERRAM_SIZE (2*1024*1024)
100 #define MAPPERRAM_MASK 0x7F
101 #define MSX_FDD_PATCH_WITH_2HD
105 #define _MSX2_VARIANTS
106 #define MAINROM_SLOT 0x00
107 #define CART1_SLOT 0x01
108 #define CART2_SLOT 0x02
109 #define MAPPERRAM_SLOT 0x83
110 #define SUBROM_SLOT 0x87
111 #define MSXDOS2_SLOT 0x8B
112 #define FDD_PATCH_SLOT 0x8F
113 #define MAPPERRAM_SIZE (128*1024)
114 #define MAPPERRAM_MASK 0x07
118 #define _MSX1_VARIANTS
119 #define MAINROM_SLOT 0x00
120 #define CART1_SLOT 0x01
121 #define CART2_SLOT 0x02
122 #define MAPPERRAM_SLOT 0x83
123 #define MSXMUSIC_SLOT 0x87
124 #define FDD_PATCH_SLOT 0x8B
125 #define MAPPERRAM_SIZE (128*1024)
126 #define MAPPERRAM_MASK 0x07
130 #if defined(_MSX_VDP_MESS)
131 #if defined(_MSX2P_VARIANTS)
132 #define V99X8 v9958_device
133 #elif defined(_MSX2_VARIANTS)
134 #define V99X8 v9938_device
138 // device informations for virtual machine
139 #define FRAMES_PER_SEC 60
140 #define LINES_PER_FRAME 262
141 #define CPU_CLOCKS 3579545
142 #if !defined(_MSX1_VARIANTS)
143 #if defined(_MSX_VDP_MESS)
144 //#define SCREEN_WIDTH (544) // v99x8_device::HVISIBLE
145 //#define SCREEN_HEIGHT (480) //
146 //#define WINDOW_WIDTH_ASPECT (544*9/8)
147 #define SCREEN_WIDTH ((256 + 15)*2) // same as V99X8_WIDTH
148 #define SCREEN_HEIGHT ((212 + 15)*2) // same as V99X8_HEIGHT
149 #define WINDOW_WIDTH_ASPECT ((288 + 17)*2)
151 #define SCREEN_WIDTH ((256 + 15)*2) // V99X8_WIDTH
152 #define SCREEN_HEIGHT ((212 + 15)*2) // V99X8_HEIGHT
153 #define WINDOW_WIDTH_ASPECT ((288 + 17)*2)
156 #define SCREEN_WIDTH 512
157 #define SCREEN_HEIGHT 384
158 #define WINDOW_WIDTH_ASPECT 576
160 #define TMS9918A_VRAM_SIZE 0x4000
161 #define TMS9918A_LIMIT_SPRITES
162 #if defined(LDC_SLOT)
163 #define TMS9918A_SUPER_IMPOSE
165 #if defined(FDD_PATCH_SLOT)
167 #define SUPPORT_MEDIA_TYPE_1DD
168 #define Z80_PSEUDO_BIOS
170 #define HAS_AY_3_8910
171 // for Flappy Limited '85
172 #define AY_3_891X_PORT_MODE 0x80
174 // device informations for win32
177 #define USE_TAPE_BUTTON
178 #if defined(LDC_SLOT)
179 #define USE_LASER_DISC 1
180 #define USE_MOVIE_PLAYER
182 #if defined(FDD_PATCH_SLOT)
183 #define USE_FLOPPY_DISK 2
185 #define USE_ALT_F10_KEY
186 #define USE_AUTO_KEY 6
187 #define USE_AUTO_KEY_RELEASE 10
189 #define USE_SOUND_VOLUME 8
191 #define USE_SOUND_VOLUME 7
197 #define USE_PRINTER_TYPE 4
198 #if defined(MSX_PSG_STEREO)
199 #define USE_SOUND_TYPE 2
202 #define SUPPORT_TV_RENDER
204 #include "../../common.h"
205 #include "../../fileio.h"
206 #include "../vm_template.h"
208 #ifdef USE_SOUND_VOLUME
209 static const _TCHAR *sound_device_caption[] = {
210 _T("PSG"), _T("Beep"), _T("CMT (Signal)"),
214 _T("Cart#1"), _T("Cart#2"), _T("MSX-MUSIC"), _T("Noise (CMT)"),
225 #if defined(LDC_SLOT)
232 #if !defined(_MSX1_VARIANTS)
244 #if !defined(_MSX1_VARIANTS)
251 #if defined(MSX_PSG_STEREO)
254 #if defined(USE_PRINTER)
257 #if defined(LDC_SLOT)
260 #if defined(MAPPERRAM_SLOT)
261 class SLOT_MAPPERRAM;
263 #if defined(RAM64K_SLOT)
266 #if defined(SUBROM_SLOT)
269 #if defined(FIRMWARE32K1_SLOT)
270 class SLOT_FIRMWARE32K;
272 #if defined(FDD_PATCH_SLOT)
273 class SLOT_FDD_PATCH;
275 #if defined(MSXDOS2_SLOT)
280 #if defined(MSXMUSIC_SLOT)
287 class VM : public VM_TEMPLATE
291 //csp_state_utils* state_entry;
299 #if defined(LDC_SLOT)
306 #if !defined(_MSX1_VARIANTS)
314 MSX::JOYSTICK* joystick;
315 MSX::KEYBOARD* keyboard;
316 MSX::MEMORY_EX* memory;
317 #if !defined(_MSX1_VARIANTS)
320 MSX::SLOT_MAINROM *slot_mainrom;
321 MSX::SLOT_CART *slot_cart[2];
322 MSX::SOUND_CART* sound_cart[2];
323 MSX::KANJIROM* kanjirom;
324 #if defined(MSX_PSG_STEREO)
325 MSX::PSG_STEREO* psg_stereo;
328 MSX::PRINTER* printer;
330 #if defined(LDC_SLOT)
331 MSX::SLOT_LDC *slot_ldc;
333 #if defined(MAPPERRAM_SLOT)
334 MSX::SLOT_MAPPERRAM *slot_ram;
336 #if defined(RAM64K_SLOT)
337 MSX::SLOT_RAM64K *slot_ram;
339 #if defined(SUBROM_SLOT)
340 MSX::SLOT_SUBROM *slot_subrom;
342 #if defined(FIRMWARE32K1_SLOT)
343 MSX::SLOT_FIRMWARE32K *slot_firmware32k1;
345 #if defined(FIRMWARE32K2_SLOT)
346 MSX::SLOT_FIRMWARE32K *slot_firmware32k2;
348 #if defined(FDD_PATCH_SLOT)
349 MSX::SLOT_FDD_PATCH *slot_fdd_patch;
351 #if defined(MSXDOS2_SLOT)
352 MSX::SLOT_MSXDOS2 *slot_msxdos2;
355 #if defined(MSXMUSIC_SLOT)
356 MSX::SLOT_MSXMUSIC *slot_msxmusic;
360 // ----------------------------------------
362 // ----------------------------------------
367 // ----------------------------------------
368 // for emulation class
369 // ----------------------------------------
371 // drive virtual machine
377 DEVICE *get_cpu(int index);
384 void initialize_sound(int rate, int samples);
385 uint16_t* create_sound(int* extra_frames);
386 int get_sound_buffer_ptr();
387 #if defined(LDC_SLOT)
388 void movie_sound_callback(uint8_t *buffer, long size);
390 #ifdef USE_SOUND_VOLUME
391 void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
395 void open_cart(int drv, const _TCHAR* file_path);
396 void close_cart(int drv);
397 bool is_cart_inserted(int drv);
398 void play_tape(int drv, const _TCHAR* file_path);
399 void rec_tape(int drv, const _TCHAR* file_path);
400 void close_tape(int drv);
401 bool is_tape_inserted(int drv);
402 bool is_tape_playing(int drv);
403 bool is_tape_recording(int drv);
404 int get_tape_position(int drv);
405 const _TCHAR* get_tape_message(int drv);
406 void push_play(int drv);
407 void push_stop(int drv);
408 void push_fast_forward(int drv);
409 void push_fast_rewind(int drv);
410 void push_apss_forward(int drv) {}
411 void push_apss_rewind(int drv) {}
412 #if defined(LDC_SLOT)
413 void open_laser_disc(int drv, const _TCHAR* file_path);
414 void close_laser_disc(int drv);
415 bool is_laser_disc_inserted(int drv);
416 uint32_t is_laser_disc_accessed();
418 #if defined(FDD_PATCH_SLOT)
419 void open_floppy_disk(int drv, const _TCHAR* file_path, int bank);
420 void close_floppy_disk(int drv);
421 bool is_floppy_disk_inserted(int drv);
422 void is_floppy_disk_protected(int drv, bool value);
423 bool is_floppy_disk_protected(int drv);
424 uint32_t is_floppy_disk_accessed();
426 bool is_frame_skippable();
428 void update_config();
429 bool process_state(FILEIO* state_fio, bool loading);
431 // ----------------------------------------
433 // ----------------------------------------
436 DEVICE* get_device(int id);
438 //DEVICE* first_device;
439 //DEVICE* last_device;