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)
{
int rgnum;
address_space *space = cpu_get_address_space(chip->cpu, ADDRESS_SPACE_PROGRAM);
if (LOG_MEMORY_MAP) mame_printf_debug("----\nRemapping:\n");
/* 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 */
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 */
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)
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)
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)
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 */
if (readbank != NULL)