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
41 class SLOT_MAINROM : public DEVICE
49 #ifdef MAINROM_PLUS_RAM_32K
53 SLOT_MAINROM(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
55 set_device_name(_T("Main ROM"));
61 void write_data8(uint32_t addr, uint32_t data);
62 uint32_t read_data8(uint32_t addr);
63 bool process_state(FILEIO* state_fio, bool loading);
68 class SLOT_CART : public DEVICE
76 uint8_t rom[1024*1024*4];
88 SLOT_CART(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
91 event_register_id = -1;
93 set_device_name(_T("ROM Cartridge"));
99 void write_data8(uint32_t addr, uint32_t data);
100 uint32_t read_data8(uint32_t addr);
101 bool process_state(FILEIO* state_fio, bool loading);
103 void event_callback(int event_id, int err);
104 int event_register_id;
108 void open_cart(const _TCHAR *file_path);
110 bool is_cart_inserted()
115 void set_context_sound(SOUND_CART *device)
120 bool load_cart(const _TCHAR *file_path/*, uint8_t *rom*/);
125 #if defined(MSXDOS2_SLOT)
126 class SLOT_MSXDOS2 : public DEVICE
129 uint8_t wdmy[0x2000];
130 uint8_t rdmy[0x2000];
133 uint8_t rom[0x10000];
137 SLOT_MSXDOS2(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
139 set_device_name(_T("MSX-DOS2"));
145 void write_data8(uint32_t addr, uint32_t data);
146 uint32_t read_data8(uint32_t addr);
147 bool process_state(FILEIO* state_fio, bool loading);
153 #if defined(LDC_SLOT)
154 class SLOT_LDC : public DEVICE
157 DEVICE *d_cpu, *d_ldp, *d_vdp;
159 uint8_t wdmy[0x2000];
160 uint8_t rdmy[0x2000];
169 bool pc4, mute_l, mute_r;
172 SLOT_LDC(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
174 set_device_name(_T("LDC Control"));
181 void write_data8(uint32_t addr, uint32_t data);
182 uint32_t read_data8(uint32_t addr);
183 void write_signal(int id, uint32_t data, uint32_t mask);
184 void event_callback(int event_id, int err);
185 bool process_state(FILEIO* state_fio, bool loading);
188 void set_context_cpu(DEVICE* device)
192 void set_context_ldp(DEVICE* device)
196 void set_context_vdp(DEVICE* device)
205 #if defined(SUBROM_SLOT)
206 class SLOT_SUBROM : public DEVICE
209 uint8_t wdmy[0x2000];
210 uint8_t rdmy[0x2000];
213 #if defined(_MSX2_VARIANTS)
220 SLOT_SUBROM(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
222 set_device_name(_T("Sub ROM"));
228 void write_data8(uint32_t addr, uint32_t data);
229 uint32_t read_data8(uint32_t addr);
233 // FDD with ROM-PATCH
235 #if defined(FDD_PATCH_SLOT)
236 class SLOT_FDD_PATCH : public DEVICE
239 uint8_t wdmy[0x2000];
240 uint8_t rdmy[0x2000];
246 SLOT_FDD_PATCH(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
248 set_device_name(_T("FDD I/F"));
254 void write_data8(uint32_t addr, uint32_t data);
255 uint32_t read_data8(uint32_t addr);
261 #if defined(MAPPERRAM_SLOT)
262 class SLOT_MAPPERRAM : public DEVICE
265 uint8_t wdmy[0x2000];
266 uint8_t rdmy[0x2000];
269 uint8_t ram[MAPPERRAM_SIZE];
273 SLOT_MAPPERRAM(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
275 set_device_name(_T("Mapper RAM"));
281 void write_data8(uint32_t addr, uint32_t data);
282 uint32_t read_data8(uint32_t addr);
283 void write_io8(uint32_t addr, uint32_t data);
284 bool process_state(FILEIO* state_fio, bool loading);
290 #if defined(RAM64K_SLOT)
291 class SLOT_RAM64K : public DEVICE
294 uint8_t ram[0x10000];
297 SLOT_RAM64K(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
299 set_device_name(_T("RAM 64KB"));
305 void write_data8(uint32_t addr, uint32_t data);
306 uint32_t read_data8(uint32_t addr);
307 bool process_state(FILEIO* state_fio, bool loading);
313 #if defined(FIRMWARE32K1_SLOT)
314 class SLOT_FIRMWARE32K : public DEVICE
317 uint8_t wdmy[0x2000];
318 uint8_t rdmy[0x2000];
322 const _TCHAR* m_filename;
325 SLOT_FIRMWARE32K(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
327 set_device_name(_T("Firmware 32KB"));
329 ~SLOT_FIRMWARE32K() {}
333 void write_data8(uint32_t addr, uint32_t data);
334 uint32_t read_data8(uint32_t addr);
337 void set_context_filename(const _TCHAR* filename)
339 m_filename = filename;
346 #if defined(MSXMUSIC_SLOT)
347 class SLOT_MSXMUSIC : public DEVICE
350 uint8_t wdmy[0x2000];
351 uint8_t rdmy[0x2000];
357 SLOT_MSXMUSIC(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
359 set_device_name(_T("MSX-MUSIC"));
365 void write_data8(uint32_t addr, uint32_t data);
366 uint32_t read_data8(uint32_t addr);
372 class MEMORY_EX : public DEVICE
377 #if defined(FDD_PATCH_SLOT)
378 DISK* disk[MAX_DRIVE];
380 bool access[MAX_DRIVE];
382 #if defined(FDD_PATCH_SLOT) && defined(_MSX_VDP_MESS)
385 #if defined(MAPPERRAM_SLOT)
391 //uint32_t slot_select;
392 void update_map(uint32_t val);
395 MEMORY_EX(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
397 ssl[0] = ssl[1] = ssl[2] = ssl[3] = 0;
398 expanded[0] = expanded[1] = expanded[2] = expanded[3] = false;
399 set_device_name(_T("Memory Bus (ex)"));
404 #if defined(FDD_PATCH_SLOT)
409 void write_data8(uint32_t addr, uint32_t data);
410 uint32_t read_data8(uint32_t addr);
411 uint32_t fetch_op(uint32_t addr, int* wait);
412 void write_io8(uint32_t addr, uint32_t data);
413 void write_signal(int id, uint32_t data, uint32_t mask);
414 #if defined(FDD_PATCH_SLOT)
415 uint32_t read_signal(int id);
416 bool bios_ret_z80(uint16_t PC, pair32_t* af, pair32_t* bc, pair32_t* de, pair32_t* hl, pair32_t* ix, pair32_t* iy, uint8_t* iff1);
418 bool process_state(FILEIO* state_fio, bool loading);
421 void set_context_slot_dummy(DEVICE *device)
424 for(i=0; i<16; i++) d_slot[i] = device;
426 void set_context_slot(int drv, DEVICE *device)
428 d_slot[drv & 0x0f] = device;
429 if (drv & 0x80) expanded[drv & 0x03] = true;
431 #if defined(FDD_PATCH_SLOT)
432 void set_context_fdd_patch(DEVICE *device)
436 void open_disk(int drv, const _TCHAR* file_path, int bank);
437 void close_disk(int drv);
438 bool is_disk_inserted(int drv);
439 void is_disk_protected(int drv, bool value);
440 bool is_disk_protected(int drv);
442 #if defined(MAPPERRAM_SLOT)
443 void set_context_mapper(DEVICE *device)
448 #if defined(FDD_PATCH_SLOT) && defined(_MSX_VDP_MESS)
449 void set_context_vdp(DEVICE *device)