diff options
-rw-r--r-- | src/emu/machine/eepromdev.c | 24 | ||||
-rw-r--r-- | src/emu/romload.c | 2 | ||||
-rw-r--r-- | src/mame/drivers/groundfx.c | 18 |
3 files changed, 29 insertions, 15 deletions
diff --git a/src/emu/machine/eepromdev.c b/src/emu/machine/eepromdev.c index a18d2df36d6..a8a5ac06191 100644 --- a/src/emu/machine/eepromdev.c +++ b/src/emu/machine/eepromdev.c @@ -343,6 +343,13 @@ void eepromdev_set_data(const device_config *device, const UINT8 *data, int leng assert(length <= ((1 << eestate->intf->address_bits) * eestate->intf->data_bits / 8)); memcpy(eestate->data, data, length); +/* temporary: write data to eeprom.bin when this happens so we capture it + for adding to a region */ +{ + FILE *f = fopen("eeprom.bin", "wb"); + fwrite(eestate->data, 1, (1 << eestate->intf->address_bits) * eestate->intf->data_bits / 8, f); + fclose(f); +} } void *eepromdev_get_data_pointer(const device_config *device, UINT32 *length, UINT32 *size) @@ -375,6 +382,7 @@ static DEVICE_START(eeprom) { eeprom_state *eestate = get_safe_token(device); const eeprom_config *config; + UINT8 *region_base; /* validate some basic stuff */ assert(device != NULL); @@ -394,6 +402,22 @@ static DEVICE_START(eeprom) memset(eestate->data, 0xff, (1 << eestate->intf->address_bits) * eestate->intf->data_bits / 8); if ((config->default_data != NULL) && (config->default_data_size != 0)) eepromdev_set_data(device, config->default_data, config->default_data_size); + + region_base = memory_region(device->machine, device->tag); + if (region_base != NULL) + { + UINT32 region_length = memory_region_length(device->machine, device->tag); + UINT32 region_flags = memory_region_flags(device->machine, device->tag); + + if (region_length != (1 << eestate->intf->address_bits) * eestate->intf->data_bits / 8) + fatalerror("eeprom region '%s' wrong size (expected size = 0x%X)", device->tag, (1 << eestate->intf->address_bits) * eestate->intf->data_bits / 8); + if (eestate->intf->data_bits == 8 && (region_flags & ROMREGION_WIDTHMASK) != ROMREGION_8BIT) + fatalerror("eeprom region '%s' needs to be an 8-bit region", device->tag); + if (eestate->intf->data_bits == 16 && ((region_flags & ROMREGION_WIDTHMASK) != ROMREGION_16BIT || (region_flags & ROMREGION_ENDIANMASK) != ROMREGION_BE)) + fatalerror("eeprom region '%s' needs to be a 16-bit big-endian region (flags=%08x)", device->tag, region_flags); + memcpy(eestate->data, region_base, region_length); + } + eestate->serial_count = 0; eestate->latch = 0; eestate->reset_line = ASSERT_LINE; diff --git a/src/emu/romload.c b/src/emu/romload.c index 8f01ea4c0ba..ad37030c8bb 100644 --- a/src/emu/romload.c +++ b/src/emu/romload.c @@ -1242,7 +1242,7 @@ static void process_disk_entries(rom_load_data *romdata, const char *regiontag, static UINT32 normalize_flags_for_cpu(running_machine *machine, UINT32 startflags, const char *rgntag) { const device_config *device = cputag_get_cpu(machine, rgntag); - if (device != NULL) + if (device != NULL && cpu_get_databus_width(device, ADDRESS_SPACE_PROGRAM) != 0) { int buswidth; diff --git a/src/mame/drivers/groundfx.c b/src/mame/drivers/groundfx.c index 27651283e4a..20c667e07bb 100644 --- a/src/mame/drivers/groundfx.c +++ b/src/mame/drivers/groundfx.c @@ -115,18 +115,6 @@ static TIMER_CALLBACK( groundfx_interrupt5 ) EPROM **********************************************************/ -static const UINT8 default_eeprom[128]= -{ - 0x62,0x11,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0x80,0x30,0x05,0x00,0x00,0x96,0x14, - 0x17,0x70,0x35,0xcd,0x75,0x30,0x24,0xaa,0x75,0x30,0x51,0xd9,0x75,0x30,0x2d,0x2b, - 0x75,0x30,0x51,0xb9,0x00,0x00,0xe0,0xa0,0x17,0x70,0x35,0xcd,0x75,0x30,0x24,0xaa, - 0x75,0x30,0x51,0xd9,0x75,0x30,0x2d,0x2b,0x75,0x30,0x51,0xb9,0x00,0x00,0xff,0xff, - 0x17,0x70,0x35,0xcd,0x75,0x30,0x24,0xaa,0x75,0x30,0x51,0xd9,0x75,0x30,0x2d,0x2b, - 0x75,0x30,0x51,0xb9,0xff,0xff,0xff,0xff,0x17,0x70,0x35,0xcd,0x75,0x30,0x24,0xaa, - 0x75,0x30,0x51,0xd9,0x75,0x30,0x2d,0x2b,0x75,0x30,0x51,0xb9,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff -}; - static const eeprom_interface groundfx_eeprom_interface = { 6, /* address bits */ @@ -366,8 +354,7 @@ static MACHINE_DRIVER_START( groundfx ) MDRV_CPU_PROGRAM_MAP(groundfx_map) MDRV_CPU_VBLANK_INT("screen", groundfx_interrupt) -// MDRV_NVRAM_HANDLER(groundfx) - MDRV_EEPROM_ADD("eeprom", groundfx_eeprom_interface, 128, default_eeprom) + MDRV_EEPROM_NODEFAULT_ADD("eeprom", groundfx_eeprom_interface) /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) @@ -425,6 +412,9 @@ ROM_START( groundfx ) ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) ROM_LOAD16_BYTE( "d51-01.73", 0x000000, 0x200000, CRC(92f09155) SHA1(8015e1997818bb480174394eb43840bf26679bcf) ) /* Ensoniq samples */ ROM_LOAD16_BYTE( "d51-02.74", 0xc00000, 0x200000, CRC(20a9428f) SHA1(c9033d02a49c72f704808f5f899101617d5814e5) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) + ROM_LOAD( "eeprom.bin", 0x0000, 0x0080, CRC(6f58851d) SHA1(33bd4478f097dca6b5d222adb89699c6d35ed009) ) ROM_END |