static void enable_rom(int enable, int mode) { romconfig = enable; if (enable == 0) { cart_config_changed_slotmain(2, 2, mode); } else { cart_config_changed_slotmain(3, 3, mode); } }
static BYTE rex_io2_read(WORD addr) { if ((addr & 0xff) < 0xc0) { /* disable cartridge rom */ cart_config_changed_slotmain(2, 2, CMODE_READ); rex_active = 0; } else { /* enable cartridge rom */ cart_config_changed_slotmain(0, 0, CMODE_READ); rex_active = 1; } return 0; }
static void kcs_io1_store(WORD addr, BYTE value) { DBG(("io1 w %04x %02x (to 16k)", addr, value)); config = CMODE_16KGAME; cart_config_changed_slotmain((BYTE)config, (BYTE)config, CMODE_WRITE); freeze_flag = 0; }
void snapshot64_freeze(void) { DBG(("SNAPSHOT64: freeze\n")); romconfig = 1; cart_config_changed_slotmain(3, 3, CMODE_READ | CMODE_RELEASE_FREEZE); /* cart_config_changed_slotmain(3, 3, CMODE_READ); */ }
static BYTE kcs_io1_read(WORD addr) { config = (addr & 2) ? CMODE_RAM : CMODE_8KGAME; cart_config_changed_slotmain((BYTE)config, (BYTE)config, CMODE_READ); return roml_banks[0x1e00 + (addr & 0xff)]; }
void simon_config_setup(BYTE *rawcart) { memcpy(roml_banks, rawcart, 0x2000); memcpy(romh_banks, &rawcart[0x2000], 0x2000); cart_config_changed_slotmain(1, 1, CMODE_READ); simon_a000 = 1; }
static void epyxfastload_alarm_handler(CLOCK offset, void *data) { /* Virtual capacitor charged, disable rom */ alarm_unset(epyxrom_alarm); epyxrom_alarm_time = CLOCK_MAX; cart_config_changed_slotmain(2, 2, CMODE_READ); }
void freezeframe_freeze(void) { DBG(("Freeze Frame: freeze\n")); cart_config_changed_slotmain(2, 3, CMODE_READ | CMODE_RELEASE_FREEZE); freezeframe_rom_8000 = 1; freezeframe_rom_e000 = 1; }
void kcs_config_setup(BYTE *rawcart) { memcpy(roml_banks, rawcart, 0x2000); memcpy(romh_banks, &rawcart[0x2000], 0x2000); config = CMODE_8KGAME; cart_config_changed_slotmain(CMODE_8KGAME, CMODE_8KGAME, CMODE_READ); freeze_flag = 0; }
void stb_config_setup(BYTE *rawcart) { /* copy banks 0 and 1 */ memcpy(roml_banks, rawcart, 0x4000); /* turn on normal config: bank 0 */ cart_config_changed_slotmain(0, 0, CMODE_READ); }
static void epyxfastload_trigger_access(void) { /* Discharge virtual capacitor, enable rom */ alarm_unset(epyxrom_alarm); epyxrom_alarm_time = maincpu_clk + EPYX_ROM_CYCLES; alarm_set(epyxrom_alarm, epyxrom_alarm_time); cart_config_changed_slotmain(0, 0, CMODE_READ); }
void freezeframe_config_setup(BYTE *rawcart) { memcpy(roml_banks, rawcart, FREEZE_FRAME_CART_SIZE); memcpy(romh_banks, rawcart, FREEZE_FRAME_CART_SIZE); cart_config_changed_slotmain(2, 0, CMODE_READ); freezeframe_rom_8000 = 1; freezeframe_rom_e000 = 0; }
void ross_config_setup(BYTE *rawcart) { memcpy(&roml_banks[0x0000], &rawcart[0x0000], 0x2000); memcpy(&romh_banks[0x0000], &rawcart[0x2000], 0x2000); memcpy(&roml_banks[0x2000], &rawcart[0x4000], 0x2000); memcpy(&romh_banks[0x2000], &rawcart[0x6000], 0x2000); cart_config_changed_slotmain(0, 0, CMODE_READ); }
static void dsm_io1_store(WORD addr, BYTE value) { DBG(("io1 w %04x %02x\n", addr, value)); if (addr == 0) { cart_config_changed_slotmain(CMODE_RAM, CMODE_RAM, CMODE_READ); DBG(("Diashow Maker disabled\n")); } }
void REGPARM2 snapshot64_io2_store(WORD addr, BYTE value) { DBG(("io2 wr %04x %02x\n", addr, value)); if ((addr & 0xff) == 0) { romconfig = value & 1; if (romconfig == 0) { cart_config_changed_slotmain(2, 2, CMODE_WRITE); /* cart_config_changed_slotmain(2, 2, CMODE_WRITE | CMODE_RELEASE_FREEZE); */ } else { cart_config_changed_slotmain(3, 3, CMODE_WRITE); /* cart_config_changed_slotmain(3, 3, CMODE_WRITE | CMODE_RELEASE_FREEZE); */ } } }
void ocean_config_setup(BYTE *rawcart) { memcpy(roml_banks, rawcart, 0x2000 * 64); memcpy(romh_banks, &rawcart[0x2000 * 16], 0x2000 * 16); /* Hack: using 16kB configuration, but some carts are 8kB only */ cart_config_changed_slotmain(1, 1, CMODE_READ); }
static void kcs_io2_store(WORD addr, BYTE value) { DBG(("io2 w %04x %02x (%s)", addr, value, (freeze_flag == 0) ? "to 16k" : "-")); if (freeze_flag == 0) { config = CMODE_16KGAME; cart_config_changed_slotmain((BYTE)config, (BYTE)config, CMODE_WRITE); } export_ram0[0x1f00 + (addr & 0x7f)] = value; }
static BYTE dsm_io1_read(WORD addr) { DBG(("io1 r %04x\n", addr)); if (addr == 0) { cart_config_changed_slotmain(CMODE_RAM, CMODE_RAM, CMODE_READ); DBG(("Diashow Maker disabled\n")); } return 0; /* invalid */ }
void actionreplay2_config_init(void) { roml_bank = 1; ar_enabled = 1; ar_cap_enable = 0; ar_cap_disable = 0; DBG(("config init\n")); cart_config_changed_slotmain((BYTE)(0 | (roml_bank << CMODE_BANK_SHIFT)), (BYTE)(0 | (roml_bank << CMODE_BANK_SHIFT)), CMODE_READ); }
static BYTE kcs_io2_read(WORD addr) { DBG(("io2 r %04x (%s)", addr, (addr & 0x80) ? "release NMI" : "-")); if (addr & 0x80) { cart_config_changed_slotmain((BYTE)config, (BYTE)config, CMODE_READ | CMODE_RELEASE_FREEZE); freeze_flag = 1; } return export_ram0[0x1f00 + (addr & 0x7f)]; }
static BYTE freezeframe_io2_read(WORD addr) { DBG(("io2 r %04x\n", addr)); if (addr == 0) { cart_config_changed_slotmain(2, 2, CMODE_READ); DBG(("Freeze Frame disabled\n")); } return 0; /* invalid */ }
static BYTE freezeframe_io1_read(WORD addr) { DBG(("io1 r %04x\n", addr)); if (addr == 0) { cart_config_changed_slotmain(2, 1, CMODE_READ); DBG(("Freeze Frame: switching to 8k game mode\n")); } return 0; /* invalid */ }
void freezemachine_reset(void) { if (allow_toggle) { rom_A14 ^= 1; /* select other 16k ROM bank on every other reset */ } roml_toggle = 0; cart_config_changed_slotmain(2, (BYTE)(0 | (rom_A14 << CMODE_BANK_SHIFT)), CMODE_READ); DBG(("Freeze Machine: reset (%d)\n", rom_A14)); }
static BYTE REGPARM1 freezemachine_io2_read(WORD addr) { DBG(("io2 r %04x\n", addr)); if (addr == 0) { cart_config_changed_slotmain(2, 2, CMODE_READ); DBG(("Freeze Machine: disabled\n")); } return 0; /* invalid */ }
static BYTE freezemachine_io1_read(WORD addr) { DBG(("io1 r %04x\n", addr)); if (addr == 0) { roml_toggle = 1; cart_config_changed_slotmain(2, (BYTE)(1 | (rom_A14 << CMODE_BANK_SHIFT)), CMODE_READ); DBG(("Freeze Machine: switching to 16k game mapping\n")); } return 0; /* invalid */ }
void actionreplay2_freeze(void) { roml_bank = 0; ar_enabled = 1; ar_cap_enable = 0; ar_cap_disable = 0; DBG(("freeze\n")); cart_config_changed_slotmain((BYTE)(3 | (roml_bank << CMODE_BANK_SHIFT)), (BYTE)(3 | (roml_bank << CMODE_BANK_SHIFT)), CMODE_READ); cartridge_release_freeze(); }
void freezemachine_config_setup(BYTE *rawcart) { rom_A14 = allow_toggle; /* the following first reset will turn it to 0 again */ roml_toggle = 0; memcpy(roml_banks, rawcart, 0x2000); memcpy(romh_banks, &rawcart[0x2000], 0x2000); memcpy(&roml_banks[0x2000], &rawcart[0x4000], 0x2000); memcpy(&romh_banks[0x2000], &rawcart[0x6000], 0x2000); cart_config_changed_slotmain(2, 0 | (0 << CMODE_BANK_SHIFT), CMODE_READ); }
static void cap_charge(void) { DBG(("cap_charge\n")); ar_cap_disable++; if (ar_cap_disable == CAPDISABLE) { ar_enabled = 0; ar_cap_enable = 0; cart_config_changed_slotmain((BYTE)(2 | (roml_bank << CMODE_BANK_SHIFT)), (BYTE)(2 | (roml_bank << CMODE_BANK_SHIFT)), CMODE_READ); DBG(("disabled\n")); } }
static BYTE kcs_io1_read(WORD addr) { DBG(("io1 r %04x (%s)", addr, (addr & 2) ? "cart off" : "to 8k")); /* A1 switches off roml/romh banks */ config = (addr & 2) ? CMODE_RAM : CMODE_8KGAME; cart_config_changed_slotmain((BYTE)config, (BYTE)config, CMODE_READ); freeze_flag = 0; return roml_banks[0x1e00 + (addr & 0xff)]; }
static void kcs_io2_store(WORD addr, BYTE value) { #if 0 /* FIXME: nothing really is connected to addr bit7 according to the schematics */ if (addr & 0x80) { cart_config_changed_slotmain((BYTE)config, (BYTE)config, CMODE_WRITE | CMODE_RELEASE_FREEZE); } #endif /* FIXME: in the schematics A4 is connected to CS - this smells like a mistake */ export_ram0[addr & 0x7f] = value; }