/***************************************************************************** * * includes/msx_slot.h * ****************************************************************************/ #ifndef MSX_SLOT_H_ #define MSX_SLOT_H_ enum { MSX_LAYOUT_SLOT_ENTRY, MSX_LAYOUT_KANJI_ENTRY, MSX_LAYOUT_RAMIO_SET_BITS_ENTRY, MSX_LAYOUT_LAST }; typedef struct { int entry; int type; int slot_primary, slot_secondary, slot_page, page_extent; int size, option; } msx_slot_layout; #define MSX_LAYOUT_INIT(msx) \ static const msx_slot_layout msx_slot_layout_##msx[] = { #define MSX_LAYOUT_SLOT(prim, sec, page, extend, type, size, option) \ { \ MSX_LAYOUT_SLOT_ENTRY, \ SLOT_##type, \ prim, \ sec, \ page, \ extend, \ size, \ option \ }, #define MSX_LAYOUT_KANJI(offset) \ { \ MSX_LAYOUT_KANJI_ENTRY, \ SLOT_EMPTY, \ 0, \ 0, \ 0, \ 0, \ 0, \ offset \ }, #define MSX_LAYOUT_RAMIO_SET_BITS(offset) \ { \ MSX_LAYOUT_RAMIO_SET_BITS_ENTRY, \ SLOT_EMPTY, \ 0, \ 0, \ 0, \ 0, \ 0, \ offset \ }, #define MSX_LAYOUT_END \ { \ MSX_LAYOUT_LAST, \ SLOT_END, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0 \ } \ }; enum msx_slot_type { SLOT_EMPTY = 0, SLOT_MSXDOS2, SLOT_KONAMI_SCC, SLOT_KONAMI, SLOT_ASCII8, SLOT_ASCII16, SLOT_GAMEMASTER2, SLOT_ASCII8_SRAM, SLOT_ASCII16_SRAM, SLOT_RTYPE, SLOT_MAJUTSUSHI, SLOT_FMPAC, SLOT_SUPERLOADRUNNER, SLOT_SYNTHESIZER, SLOT_CROSS_BLAIM, SLOT_DISK_ROM, SLOT_KOREAN_80IN1, SLOT_KOREAN_126IN1, SLOT_KOREAN_90IN1, SLOT_LAST_CARTRIDGE_TYPE = SLOT_KOREAN_90IN1, SLOT_SOUNDCARTRIDGE, SLOT_ROM, SLOT_RAM, SLOT_RAM_MM, SLOT_CARTRIDGE1, SLOT_CARTRIDGE2, SLOT_DISK_ROM2, SLOT_END }; enum msx_mem_type { MSX_MEM_ROM, MSX_MEM_RAM, MSX_MEM_HANDLER }; typedef struct { int m_type; int m_start_page; int m_bank_mask; int m_banks[4]; int m_size; UINT8 *m_mem; const char *m_sramfile; union { struct { UINT8 *mem; int sram_support; int sram_active; int opll_active; } fmpac; struct { int active; } scc; struct { UINT8 *mem; int sram_mask; int empty_mask; } sram; struct { int scc_active; int sccp_active; int ram_mode[4]; int banks_saved[4]; int mode; } sccp; } m_cart; } slot_state; typedef struct { int slot_type; int mem_type; char name[32]; int (*init)(running_machine &machine, slot_state*, int page, UINT8 *mem, int size); void (*reset)(running_machine &machine, slot_state*); void (*map)(running_machine &machine, slot_state*, int page); void (*write)(running_machine &machine, slot_state*, UINT16, UINT8); int (*loadsram)(running_machine &machine, slot_state*); int (*savesram)(running_machine &machine, slot_state*); } msx_slot; extern const msx_slot msx_slot_list[]; #define MSX_SLOT_START \ const msx_slot msx_slot_list[] = { #define MSX_SLOT_ROM(type, ent) { \ type, \ MSX_MEM_ROM, \ #type, \ slot_##ent##_init, \ slot_##ent##_reset, \ slot_##ent##_map, \ NULL, \ NULL, \ NULL \ }, #define MSX_SLOT_RAM(type, ent) { \ type, \ MSX_MEM_RAM, \ #type, \ slot_##ent##_init, \ slot_##ent##_reset, \ slot_##ent##_map, \ NULL, \ NULL, \ NULL \ }, #define MSX_SLOT(type, ent) { \ type, \ MSX_MEM_HANDLER, \ #type, \ slot_##ent##_init, \ slot_##ent##_reset, \ slot_##ent##_map, \ slot_##ent##_write, \ NULL, \ NULL \ }, #define MSX_SLOT_SRAM(type, ent) { \ type, \ MSX_MEM_HANDLER, \ #type, \ slot_##ent##_init, \ slot_##ent##_reset, \ slot_##ent##_map, \ slot_##ent##_write, \ slot_##ent##_loadsram, \ slot_##ent##_savesram \ }, #define MSX_SLOT_NULL(type) { \ type, \ MSX_MEM_ROM, \ #type, \ NULL, \ NULL, \ NULL, \ NULL, \ NULL, \ NULL \ }, #define MSX_SLOT_END \ { SLOT_END, 0, "", NULL, NULL, NULL, NULL, NULL } \ }; #define MSX_SLOT_INIT(nm) static int \ slot_##nm##_init (running_machine &machine, slot_state *state, int page, UINT8 *mem, int size) #define MSX_SLOT_MAP(nm) \ static void slot_##nm##_map (running_machine &machine, slot_state *state, int page) #define MSX_SLOT_WRITE(nm) \ static void slot_##nm##_write (running_machine &machine, slot_state *state, UINT16 addr, UINT8 val) #define MSX_SLOT_RESET(nm) \ static void slot_##nm##_reset (running_machine &machine, slot_state *state) #define MSX_SLOT_LOADSRAM(nm) \ static int slot_##nm##_loadsram (running_machine &machine, slot_state *state) #define MSX_SLOT_SAVESRAM(nm) \ static int slot_##nm##_savesram (running_machine &machine, slot_state *state) typedef struct { char name[9]; const msx_slot_layout *layout; } msx_driver_struct; extern const msx_driver_struct msx_driver_list[]; #define MSX_DRIVER_LIST \ const msx_driver_struct msx_driver_list[] = { #define MSX_DRIVER(foo) \ { #foo, msx_slot_layout_##foo }, #define MSX_DRIVER_END \ { "", NULL } \ }; #endif /* MSX_SLOT_H_ */