summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/emu/machine/eepromdev.c24
-rw-r--r--src/emu/romload.c2
-rw-r--r--src/mame/drivers/groundfx.c18
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