From 354a6677eb9bac41efb166853a216c484636d59c Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Tue, 22 Dec 2009 15:27:42 +0000 Subject: [PATCH] Converted eeprom to eeprom device in simpsons and plygonet. This begs the question: shouldn't we remove the auto-init hacks from games like simpsons? We force most other Konami games to use the F2/F3 reset technique. --- src/mame/drivers/plygonet.c | 46 ++++++++++-------------------------- src/mame/drivers/simpsons.c | 18 ++++++++++++-- src/mame/includes/simpsons.h | 4 ++-- src/mame/machine/simpsons.c | 45 +++++++++-------------------------- 4 files changed, 42 insertions(+), 71 deletions(-) diff --git a/src/mame/drivers/plygonet.c b/src/mame/drivers/plygonet.c index 3f6e9e048e7..cd25420395b 100644 --- a/src/mame/drivers/plygonet.c +++ b/src/mame/drivers/plygonet.c @@ -85,7 +85,7 @@ #include "cpu/z80/z80.h" #include "cpu/dsp56k/dsp56k.h" #include "sound/k054539.h" -#include "machine/eeprom.h" +#include "machine/eepromdev.h" VIDEO_START( polygonet ); VIDEO_UPDATE( polygonet ); @@ -95,8 +95,6 @@ WRITE32_HANDLER( polygonet_ttl_ram_w ); READ32_HANDLER( polygonet_roz_ram_r ); WRITE32_HANDLER( polygonet_roz_ram_w ); -static int init_eeprom_count; - /* 68k-side shared ram */ static UINT32* shared_ram; @@ -121,34 +119,16 @@ static const eeprom_interface eeprom_intf = "0100110000000" /* unlock command */ }; -static NVRAM_HANDLER( polygonet ) -{ - if (read_or_write) - eeprom_save(file); - else - { - eeprom_init(machine, &eeprom_intf); - - if (file) - { - init_eeprom_count = 0; - eeprom_load(file); - } - else - init_eeprom_count = 10; - } -} - -static READ32_HANDLER( polygonet_eeprom_r ) +static READ32_DEVICE_HANDLER( polygonet_eeprom_r ) { if (ACCESSING_BITS_0_15) { - return 0x0200 | (eeprom_read_bit()<<8); + return 0x0200 | (eepromdev_read_bit(device)<<8); } else { - UINT8 lowInputBits = input_port_read(space->machine, "IN1"); - UINT8 highInputBits = input_port_read(space->machine, "IN0"); + UINT8 lowInputBits = input_port_read(device->machine, "IN1"); + UINT8 highInputBits = input_port_read(device->machine, "IN0"); return ((highInputBits << 24) | (lowInputBits << 16)); } @@ -157,13 +137,13 @@ static READ32_HANDLER( polygonet_eeprom_r ) } -static WRITE32_HANDLER( polygonet_eeprom_w ) +static WRITE32_DEVICE_HANDLER( polygonet_eeprom_w ) { if (ACCESSING_BITS_24_31) { - eeprom_write_bit((data & 0x01000000) ? ASSERT_LINE : CLEAR_LINE); - eeprom_set_cs_line((data & 0x02000000) ? CLEAR_LINE : ASSERT_LINE); - eeprom_set_clock_line((data & 0x04000000) ? ASSERT_LINE : CLEAR_LINE); + eepromdev_write_bit(device, (data & 0x01000000) ? ASSERT_LINE : CLEAR_LINE); + eepromdev_set_cs_line(device, (data & 0x02000000) ? CLEAR_LINE : ASSERT_LINE); + eepromdev_set_clock_line(device, (data & 0x04000000) ? ASSERT_LINE : CLEAR_LINE); return; } @@ -544,8 +524,8 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x200000, 0x21ffff) AM_RAM_WRITE(plygonet_palette_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x400000, 0x40001f) AM_RAM AM_BASE((UINT32**)&K053936_0_ctrl) AM_RANGE(0x440000, 0x440fff) AM_READWRITE(polygonet_roz_ram_r, polygonet_roz_ram_w) - AM_RANGE(0x480000, 0x4bffff) AM_READ(polygonet_eeprom_r) - AM_RANGE(0x4C0000, 0x4fffff) AM_WRITE(polygonet_eeprom_w) + AM_RANGE(0x480000, 0x4bffff) AM_DEVREAD("eeprom", polygonet_eeprom_r) + AM_RANGE(0x4C0000, 0x4fffff) AM_DEVWRITE("eeprom", polygonet_eeprom_w) AM_RANGE(0x500000, 0x503fff) AM_RAM_WRITE(shared_ram_write) AM_BASE(&shared_ram) AM_RANGE(0x504000, 0x504003) AM_WRITE(dsp_w_lines) AM_RANGE(0x506000, 0x50600f) AM_READWRITE(dsp_host_interface_r, dsp_host_interface_w) @@ -668,7 +648,8 @@ static MACHINE_DRIVER_START( plygonet ) MDRV_MACHINE_START(polygonet) MDRV_GFXDECODE(plygonet) - MDRV_NVRAM_HANDLER(polygonet) + + MDRV_EEPROM_NODEFAULT_ADD("eeprom", eeprom_intf) /* TODO: TEMPORARY! UNTIL A MORE LOCALIZED SYNC CAN BE MADE */ MDRV_QUANTUM_TIME(HZ(1200000)) @@ -765,7 +746,6 @@ static DRIVER_INIT(polygonet) dsp56k_update_handler = memory_set_direct_update_handler(cputag_get_address_space(machine, "dsp", ADDRESS_SPACE_PROGRAM), plygonet_dsp56k_direct_handler); /* save states */ - state_save_register_global(machine, init_eeprom_count); state_save_register_global_pointer(machine, dsp56k_bank00_ram, 2 * 8 * dsp56k_bank00_size); state_save_register_global_pointer(machine, dsp56k_bank01_ram, 2 * 8 * dsp56k_bank01_size); state_save_register_global_pointer(machine, dsp56k_bank02_ram, 2 * 8 * dsp56k_bank02_size); diff --git a/src/mame/drivers/simpsons.c b/src/mame/drivers/simpsons.c index 7e6d4a0a415..f42a90a68d2 100644 --- a/src/mame/drivers/simpsons.c +++ b/src/mame/drivers/simpsons.c @@ -70,6 +70,7 @@ Custom ICs - 053260 - sound chip (QFP80) #include "cpu/konami/konami.h" /* for the callback and the firq irq definition */ #include "cpu/z80/z80.h" #include "video/konicdev.h" +#include "machine/eepromdev.h" #include "sound/2151intf.h" #include "sound/k053260.h" #include "includes/simpsons.h" @@ -85,7 +86,7 @@ Custom ICs - 053260 - sound chip (QFP80) static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x0fff) AM_RAM AM_RANGE(0x1f80, 0x1f80) AM_READ_PORT("COIN") - AM_RANGE(0x1f81, 0x1f81) AM_READ(simpsons_eeprom_r) + AM_RANGE(0x1f81, 0x1f81) AM_DEVREAD("eeprom", simpsons_eeprom_r) AM_RANGE(0x1f90, 0x1f90) AM_READ_PORT("P1") AM_RANGE(0x1f91, 0x1f91) AM_READ_PORT("P2") AM_RANGE(0x1f92, 0x1f92) AM_READ_PORT("P3") @@ -93,7 +94,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x1fa0, 0x1fa7) AM_DEVWRITE("k053246", k053246_w) AM_RANGE(0x1fb0, 0x1fbf) AM_DEVWRITE("k053251", k053251_w) AM_RANGE(0x1fc0, 0x1fc0) AM_WRITE(simpsons_coin_counter_w) - AM_RANGE(0x1fc2, 0x1fc2) AM_WRITE(simpsons_eeprom_w) + AM_RANGE(0x1fc2, 0x1fc2) AM_DEVWRITE("eeprom", simpsons_eeprom_w) AM_RANGE(0x1fc4, 0x1fc4) AM_READ(simpsons_sound_interrupt_r) AM_RANGE(0x1fc6, 0x1fc7) AM_DEVREADWRITE("konami", simpsons_sound_r, k053260_w) AM_RANGE(0x1fc8, 0x1fc9) AM_DEVREAD("k053246", k053246_r) @@ -280,6 +281,17 @@ static const k053247_interface simpsons_k053246_intf = simpsons_sprite_callback }; +static const eeprom_interface eeprom_intf = +{ + 7, /* address bits */ + 8, /* data bits */ + "011000", /* read command */ + "011100", /* write command */ + 0, /* erase command */ + "0100000000000",/* lock command */ + "0100110000000" /* unlock command */ +}; + static MACHINE_DRIVER_START( simpsons ) /* basic machine hardware */ @@ -293,6 +305,8 @@ static MACHINE_DRIVER_START( simpsons ) MDRV_MACHINE_RESET(simpsons) MDRV_NVRAM_HANDLER(simpsons) + + MDRV_EEPROM_NODEFAULT_ADD("eeprom", eeprom_intf) /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK) diff --git a/src/mame/includes/simpsons.h b/src/mame/includes/simpsons.h index a24ef24e3f7..da1da94981d 100644 --- a/src/mame/includes/simpsons.h +++ b/src/mame/includes/simpsons.h @@ -2,8 +2,8 @@ extern int simpsons_firq_enabled; -READ8_HANDLER( simpsons_eeprom_r ); -WRITE8_HANDLER( simpsons_eeprom_w ); +READ8_DEVICE_HANDLER( simpsons_eeprom_r ); +WRITE8_DEVICE_HANDLER( simpsons_eeprom_w ); WRITE8_HANDLER( simpsons_coin_counter_w ); READ8_HANDLER( simpsons_sound_interrupt_r ); READ8_DEVICE_HANDLER( simpsons_sound_r ); diff --git a/src/mame/machine/simpsons.c b/src/mame/machine/simpsons.c index 27258c5810b..242729d30fb 100644 --- a/src/mame/machine/simpsons.c +++ b/src/mame/machine/simpsons.c @@ -1,7 +1,7 @@ #include "driver.h" #include "video/konicdev.h" #include "cpu/konami/konami.h" -#include "machine/eeprom.h" +#include "machine/eepromdev.h" #include "sound/k053260.h" #include "includes/simpsons.h" @@ -16,44 +16,21 @@ int simpsons_firq_enabled; static int init_eeprom_count; -static const eeprom_interface eeprom_intf = -{ - 7, /* address bits */ - 8, /* data bits */ - "011000", /* read command */ - "011100", /* write command */ - 0, /* erase command */ - "0100000000000",/* lock command */ - "0100110000000" /* unlock command */ -}; - NVRAM_HANDLER( simpsons ) { - if (read_or_write) - eeprom_save(file); - else - { - eeprom_init(machine, &eeprom_intf); - - if (file) - { - init_eeprom_count = 0; - eeprom_load(file); - } - else - init_eeprom_count = 10; - } + if (!read_or_write) + init_eeprom_count = file ? 0 : 10; } -READ8_HANDLER( simpsons_eeprom_r ) +READ8_DEVICE_HANDLER( simpsons_eeprom_r ) { int res; - res = (eeprom_read_bit() << 4); + res = (eepromdev_read_bit(device) << 4); res |= 0x20;//konami_eeprom_ack() << 5; /* add the ack */ - res |= input_port_read(space->machine, "TEST") & 1; /* test switch */ + res |= input_port_read(device->machine, "TEST") & 1; /* test switch */ if (init_eeprom_count) { @@ -63,16 +40,16 @@ READ8_HANDLER( simpsons_eeprom_r ) return res; } -WRITE8_HANDLER( simpsons_eeprom_w ) +WRITE8_DEVICE_HANDLER( simpsons_eeprom_w ) { if ( data == 0xff ) return; - eeprom_write_bit(data & 0x80); - eeprom_set_cs_line((data & 0x08) ? CLEAR_LINE : ASSERT_LINE); - eeprom_set_clock_line((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); + eepromdev_write_bit(device, data & 0x80); + eepromdev_set_cs_line(device, (data & 0x08) ? CLEAR_LINE : ASSERT_LINE); + eepromdev_set_clock_line(device, (data & 0x10) ? ASSERT_LINE : CLEAR_LINE); - simpsons_video_banking( space->machine, data & 3 ); + simpsons_video_banking( device->machine, data & 3 ); simpsons_firq_enabled = data & 0x04; }