2 Common Source Code Project
3 MSX Series (experimental)
5 Origin : src/vm/msx/memory.h
19 #include "../../emu.h"
20 #include "../device.h"
23 #include "sound_cart.h"
28 #define SIG_LDC_MUTE 2
30 #define SIG_MEMORY_SEL 0
32 #if defined(FDD_PATCH_SLOT)
37 // or MAIN ROM 32K + MAIN RAM 32K
39 class SLOT_MAINROM : public DEVICE
47 #ifdef MAINROM_PLUS_RAM_32K
51 SLOT_MAINROM(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
53 set_device_name(_T("Main ROM"));
59 void write_data8(uint32_t addr, uint32_t data);
60 uint32_t read_data8(uint32_t addr);
61 bool process_state(FILEIO* state_fio, bool loading);
66 class SLOT_CART : public DEVICE
74 uint8_t rom[1024*1024*4];
86 SLOT_CART(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
89 event_register_id = -1;
91 set_device_name(_T("ROM Cartridge"));
97 void write_data8(uint32_t addr, uint32_t data);
98 uint32_t read_data8(uint32_t addr);
99 bool process_state(FILEIO* state_fio, bool loading);
101 void event_callback(int event_id, int err);
102 int event_register_id;
106 void open_cart(const _TCHAR *file_path);
108 bool is_cart_inserted()
113 void set_context_sound(SOUND_CART *device)
118 bool load_cart(const _TCHAR *file_path/*, uint8_t *rom*/);
123 #if defined(MSXDOS2_SLOT)
124 class SLOT_MSXDOS2 : public DEVICE
127 uint8_t wdmy[0x2000];
128 uint8_t rdmy[0x2000];
131 uint8_t rom[0x10000];
135 SLOT_MSXDOS2(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
137 set_device_name(_T("MSX-DOS2"));
143 void write_data8(uint32_t addr, uint32_t data);
144 uint32_t read_data8(uint32_t addr);
145 bool process_state(FILEIO* state_fio, bool loading);
151 #if defined(LDC_SLOT)
152 class SLOT_LDC : public DEVICE
155 DEVICE *d_cpu, *d_ldp, *d_vdp;
157 uint8_t wdmy[0x2000];
158 uint8_t rdmy[0x2000];
167 bool pc4, mute_l, mute_r;
170 SLOT_LDC(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
172 set_device_name(_T("LDC Control"));
179 void write_data8(uint32_t addr, uint32_t data);
180 uint32_t read_data8(uint32_t addr);
181 void write_signal(int id, uint32_t data, uint32_t mask);
182 void event_callback(int event_id, int err);
183 bool process_state(FILEIO* state_fio, bool loading);
186 void set_context_cpu(DEVICE* device)
190 void set_context_ldp(DEVICE* device)
194 void set_context_vdp(DEVICE* device)
203 #if defined(SUBROM_SLOT)
204 class SLOT_SUBROM : public DEVICE
207 uint8_t wdmy[0x2000];
208 uint8_t rdmy[0x2000];
211 #if defined(_MSX2_VARIANTS)
218 SLOT_SUBROM(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
220 set_device_name(_T("Sub ROM"));
226 void write_data8(uint32_t addr, uint32_t data);
227 uint32_t read_data8(uint32_t addr);
231 // FDD with ROM-PATCH
233 #if defined(FDD_PATCH_SLOT)
234 class SLOT_FDD_PATCH : public DEVICE
237 uint8_t wdmy[0x2000];
238 uint8_t rdmy[0x2000];
244 SLOT_FDD_PATCH(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
246 set_device_name(_T("FDD I/F"));
252 void write_data8(uint32_t addr, uint32_t data);
253 uint32_t read_data8(uint32_t addr);
259 #if defined(MAPPERRAM_SLOT)
260 class SLOT_MAPPERRAM : public DEVICE
263 uint8_t wdmy[0x2000];
264 uint8_t rdmy[0x2000];
267 uint8_t ram[MAPPERRAM_SIZE];
271 SLOT_MAPPERRAM(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
273 set_device_name(_T("Mapper RAM"));
279 void write_data8(uint32_t addr, uint32_t data);
280 uint32_t read_data8(uint32_t addr);
281 void write_io8(uint32_t addr, uint32_t data);
282 bool process_state(FILEIO* state_fio, bool loading);
288 #if defined(RAM64K_SLOT)
289 class SLOT_RAM64K : public DEVICE
292 uint8_t ram[0x10000];
295 SLOT_RAM64K(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
297 set_device_name(_T("RAM 64KB"));
303 void write_data8(uint32_t addr, uint32_t data);
304 uint32_t read_data8(uint32_t addr);
305 bool process_state(FILEIO* state_fio, bool loading);
311 #if defined(FIRMWARE32K1_SLOT)
312 class SLOT_FIRMWARE32K : public DEVICE
315 uint8_t wdmy[0x2000];
316 uint8_t rdmy[0x2000];
320 const _TCHAR* m_filename;
323 SLOT_FIRMWARE32K(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
325 set_device_name(_T("Firmware 32KB"));
327 ~SLOT_FIRMWARE32K() {}
331 void write_data8(uint32_t addr, uint32_t data);
332 uint32_t read_data8(uint32_t addr);
335 void set_context_filename(const _TCHAR* filename)
337 m_filename = filename;
344 #if defined(MSXMUSIC_SLOT)
345 class SLOT_MSXMUSIC : public DEVICE
348 uint8_t wdmy[0x2000];
349 uint8_t rdmy[0x2000];
355 SLOT_MSXMUSIC(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
357 set_device_name(_T("MSX-MUSIC"));
363 void write_data8(uint32_t addr, uint32_t data);
364 uint32_t read_data8(uint32_t addr);
370 class MEMORY_EX : public DEVICE
375 #if defined(FDD_PATCH_SLOT)
376 DISK* disk[MAX_DRIVE];
378 bool access[MAX_DRIVE];
380 #if defined(FDD_PATCH_SLOT) && defined(_MSX_VDP_MESS)
383 #if defined(MAPPERRAM_SLOT)
389 //uint32_t slot_select;
390 void update_map(uint32_t val);
393 MEMORY_EX(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
395 ssl[0] = ssl[1] = ssl[2] = ssl[3] = 0;
396 expanded[0] = expanded[1] = expanded[2] = expanded[3] = false;
397 set_device_name(_T("Memory Bus (ex)"));
402 #if defined(FDD_PATCH_SLOT)
407 void write_data8(uint32_t addr, uint32_t data);
408 uint32_t read_data8(uint32_t addr);
409 uint32_t fetch_op(uint32_t addr, int* wait);
410 void write_io8(uint32_t addr, uint32_t data);
411 void write_signal(int id, uint32_t data, uint32_t mask);
412 #if defined(FDD_PATCH_SLOT)
413 uint32_t read_signal(int id);
414 bool bios_ret_z80(uint16_t PC, pair_t* af, pair_t* bc, pair_t* de, pair_t* hl, pair_t* ix, pair_t* iy, uint8_t* iff1);
416 bool process_state(FILEIO* state_fio, bool loading);
419 void set_context_slot_dummy(DEVICE *device)
422 for(i=0; i<16; i++) d_slot[i] = device;
424 void set_context_slot(int drv, DEVICE *device)
426 d_slot[drv & 0x0f] = device;
427 if (drv & 0x80) expanded[drv & 0x03] = true;
429 #if defined(FDD_PATCH_SLOT)
430 void set_context_fdd_patch(DEVICE *device)
434 void open_disk(int drv, const _TCHAR* file_path, int bank);
435 void close_disk(int drv);
436 bool is_disk_inserted(int drv);
437 void is_disk_protected(int drv, bool value);
438 bool is_disk_protected(int drv);
440 #if defined(MAPPERRAM_SLOT)
441 void set_context_mapper(DEVICE *device)
446 #if defined(FDD_PATCH_SLOT) && defined(_MSX_VDP_MESS)
447 void set_context_vdp(DEVICE *device)