diff --git a/source/genesis.c b/source/genesis.c index 96ac2f0..21953a7 100644 --- a/source/genesis.c +++ b/source/genesis.c @@ -258,8 +258,21 @@ void gen_reset(int hard_reset) /* 8-bit / 16-bit modes */ if ((system_hw & SYSTEM_PBC) == SYSTEM_MD) { - /* reset cartridge hardware & mapping */ - md_cart_reset(hard_reset); + if (system_hw == SYSTEM_MCD) + { + /* reset CD hardware */ + scd_reset(1); + + /* reset & halt SUB-CPU */ + s68k.cycles = 0; + s68k_pulse_reset(); + s68k_pulse_halt(); + } + else + { + /* reset MD cartridge hardware */ + md_cart_reset(hard_reset); + } /* Z80 bus is released & Z80 is reseted */ m68k.memory_map[0xa0].read8 = m68k_read_bus_8; @@ -301,17 +314,6 @@ void gen_reset(int hard_reset) } } - if (system_hw == SYSTEM_MCD) - { - /* reset CD hardware */ - scd_reset(1); - - /* reset & halt SUB-CPU */ - s68k.cycles = 0; - s68k_pulse_reset(); - s68k_pulse_halt(); - } - /* reset MAIN-CPU */ m68k_pulse_reset(); } @@ -376,21 +378,29 @@ void gen_tmss_w(unsigned int offset, unsigned int data) void gen_bankswitch_w(unsigned int data) { - if (data & 1) + if (system_hw == SYSTEM_MD) { - /* enable cartridge ROM */ - m68k.memory_map[0].base = cart.base; - } - else - { - /* enable internal BOOT ROM */ - m68k.memory_map[0].base = boot_rom; + if (data & 1) + { + /* enable cartridge ROM */ + m68k.memory_map[0].base = cart.base; + } + else + { + /* enable internal BOOT ROM */ + m68k.memory_map[0].base = boot_rom; + } } } unsigned int gen_bankswitch_r(void) { - return (m68k.memory_map[0].base == cart.base); + if (system_hw == SYSTEM_MD) + { + return (m68k.memory_map[0].base == cart.base); + } + + return 0xff; } diff --git a/source/loadrom.c b/source/loadrom.c index ce573bb..0ec1862 100644 --- a/source/loadrom.c +++ b/source/loadrom.c @@ -431,12 +431,6 @@ int load_bios(void) /* loaded BIOS region */ system_bios = (system_bios & 0xf0) | (region_code >> 4); - - } - else - { - /* CD BOOT ROM disabled (SYSTEM ERROR) */ - memset(scd.bootrom, 0xff, sizeof(scd.bootrom)); } return size; @@ -543,13 +537,14 @@ int load_rom(char *filename) ggenie_shutdown(); areplay_shutdown(); - /* unload any existing disc */ if (romtype == SYSTEM_MCD) { + /* unload CD image */ cdd_unload(); } else { + /* no CD image loaded */ cdd.loaded = 0; } @@ -590,11 +585,12 @@ int load_rom(char *filename) /* load file into ROM buffer */ char extension[4]; int size = load_archive(filename, cart.rom, sizeof(cart.rom), extension); - if (!size) return(0); /* mark CD BIOS as unloaded */ system_bios &= ~0x10; + if (!size) return(0); + /* convert lower case to upper case */ *(uint32 *)(extension) &= 0xdfdfdfdf; @@ -721,8 +717,11 @@ int load_rom(char *filename) /* boot from CD */ scd.cartridge.boot = 0x00; - /* CD unloaded */ + /* no CD image loaded */ cdd.loaded = 0; + + /* clear CD TOC */ + cdd_unload(); } /* special ROM cartridges that use CD hardware */ @@ -737,9 +736,12 @@ int load_rom(char *filename) /* load CD BOOT ROM */ if (load_bios()) { - /* CD unloaded */ + /* no CD image loaded */ cdd.loaded = 0; + /* clear CD TOC */ + cdd_unload(); + /* boot from cartridge */ scd.cartridge.boot = 0x40; } @@ -747,6 +749,9 @@ int load_rom(char *filename) { /* assume Mega Drive hardware */ system_hw = SYSTEM_MD; + + /* copy back to cartridge ROM area */ + memcpy(cart.rom, scd.cartridge.area, sizeof(scd.cartridge.area)); } }