03718: shdancer: Freeze on stage 2-4 [Phil Bennett]

segaic16.c: Treat unsupported read and write accesses to defined devices/memory as open-bus reads or unmapped writes instead of falling through to the memory-mapping registers [Phil Bennett]
This commit is contained in:
Phil Bennett 2010-08-21 18:30:19 +00:00
parent 2cd0d9ca47
commit 71090cf8fa

View File

@ -295,11 +295,12 @@ static UINT16 memory_mapper_r(struct memory_mapper_chip *chip, offs_t offset, UI
static void update_memory_mapping(running_machine *machine, struct memory_mapper_chip *chip, int decrypt) static void update_memory_mapping(running_machine *machine, struct memory_mapper_chip *chip, int decrypt)
{ {
int rgnum; int rgnum;
address_space *space = cpu_get_address_space(chip->cpu, ADDRESS_SPACE_PROGRAM);
if (LOG_MEMORY_MAP) mame_printf_debug("----\nRemapping:\n"); if (LOG_MEMORY_MAP) mame_printf_debug("----\nRemapping:\n");
/* first reset everything back to the beginning */ /* first reset everything back to the beginning */
memory_install_readwrite16_handler(cpu_get_address_space(chip->cpu, ADDRESS_SPACE_PROGRAM), 0x000000, 0xffffff, 0, 0, segaic16_memory_mapper_lsb_r, segaic16_memory_mapper_lsb_w); memory_install_readwrite16_handler(space, 0x000000, 0xffffff, 0, 0, segaic16_memory_mapper_lsb_r, segaic16_memory_mapper_lsb_w);
/* loop over the regions */ /* loop over the regions */
for (rgnum = 0; chip->map[rgnum].regbase != 0; rgnum++) for (rgnum = 0; chip->map[rgnum].regbase != 0; rgnum++)
@ -328,13 +329,18 @@ static void update_memory_mapping(running_machine *machine, struct memory_mapper
/* map it */ /* map it */
if (read != NULL) if (read != NULL)
memory_install_read16_handler(cpu_get_address_space(chip->cpu, ADDRESS_SPACE_PROGRAM), region_start, region_end, 0, region_mirror, read); memory_install_read16_handler(space, region_start, region_end, 0, region_mirror, read);
else if (readbank != NULL) else if (readbank != NULL)
memory_install_read_bank(cpu_get_address_space(chip->cpu, ADDRESS_SPACE_PROGRAM), region_start, region_end, 0, region_mirror, readbank); memory_install_read_bank(space, region_start, region_end, 0, region_mirror, readbank);
else
memory_install_read16_handler(space, region_start, region_end, 0, region_mirror, segaic16_open_bus_r);
if (write != NULL) if (write != NULL)
memory_install_write16_handler(cpu_get_address_space(chip->cpu, ADDRESS_SPACE_PROGRAM), region_start, region_end, 0, region_mirror, write); memory_install_write16_handler(space, region_start, region_end, 0, region_mirror, write);
else if (writebank != NULL) else if (writebank != NULL)
memory_install_write_bank(cpu_get_address_space(chip->cpu, ADDRESS_SPACE_PROGRAM), region_start, region_end, 0, region_mirror, writebank); memory_install_write_bank(space, region_start, region_end, 0, region_mirror, writebank);
else
memory_unmap_write(space, region_start, region_end, 0, region_mirror);
/* set the bank pointer */ /* set the bank pointer */
if (readbank != NULL) if (readbank != NULL)