mirror of
https://github.com/holub/mame
synced 2025-05-23 14:19:01 +03:00
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.
This commit is contained in:
parent
ff7213f6f1
commit
354a6677eb
@ -85,7 +85,7 @@
|
|||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
#include "cpu/dsp56k/dsp56k.h"
|
#include "cpu/dsp56k/dsp56k.h"
|
||||||
#include "sound/k054539.h"
|
#include "sound/k054539.h"
|
||||||
#include "machine/eeprom.h"
|
#include "machine/eepromdev.h"
|
||||||
|
|
||||||
VIDEO_START( polygonet );
|
VIDEO_START( polygonet );
|
||||||
VIDEO_UPDATE( polygonet );
|
VIDEO_UPDATE( polygonet );
|
||||||
@ -95,8 +95,6 @@ WRITE32_HANDLER( polygonet_ttl_ram_w );
|
|||||||
READ32_HANDLER( polygonet_roz_ram_r );
|
READ32_HANDLER( polygonet_roz_ram_r );
|
||||||
WRITE32_HANDLER( polygonet_roz_ram_w );
|
WRITE32_HANDLER( polygonet_roz_ram_w );
|
||||||
|
|
||||||
static int init_eeprom_count;
|
|
||||||
|
|
||||||
/* 68k-side shared ram */
|
/* 68k-side shared ram */
|
||||||
static UINT32* shared_ram;
|
static UINT32* shared_ram;
|
||||||
|
|
||||||
@ -121,34 +119,16 @@ static const eeprom_interface eeprom_intf =
|
|||||||
"0100110000000" /* unlock command */
|
"0100110000000" /* unlock command */
|
||||||
};
|
};
|
||||||
|
|
||||||
static NVRAM_HANDLER( polygonet )
|
static READ32_DEVICE_HANDLER( polygonet_eeprom_r )
|
||||||
{
|
|
||||||
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 )
|
|
||||||
{
|
{
|
||||||
if (ACCESSING_BITS_0_15)
|
if (ACCESSING_BITS_0_15)
|
||||||
{
|
{
|
||||||
return 0x0200 | (eeprom_read_bit()<<8);
|
return 0x0200 | (eepromdev_read_bit(device)<<8);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UINT8 lowInputBits = input_port_read(space->machine, "IN1");
|
UINT8 lowInputBits = input_port_read(device->machine, "IN1");
|
||||||
UINT8 highInputBits = input_port_read(space->machine, "IN0");
|
UINT8 highInputBits = input_port_read(device->machine, "IN0");
|
||||||
return ((highInputBits << 24) | (lowInputBits << 16));
|
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)
|
if (ACCESSING_BITS_24_31)
|
||||||
{
|
{
|
||||||
eeprom_write_bit((data & 0x01000000) ? ASSERT_LINE : CLEAR_LINE);
|
eepromdev_write_bit(device, (data & 0x01000000) ? ASSERT_LINE : CLEAR_LINE);
|
||||||
eeprom_set_cs_line((data & 0x02000000) ? CLEAR_LINE : ASSERT_LINE);
|
eepromdev_set_cs_line(device, (data & 0x02000000) ? CLEAR_LINE : ASSERT_LINE);
|
||||||
eeprom_set_clock_line((data & 0x04000000) ? ASSERT_LINE : CLEAR_LINE);
|
eepromdev_set_clock_line(device, (data & 0x04000000) ? ASSERT_LINE : CLEAR_LINE);
|
||||||
return;
|
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(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(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(0x440000, 0x440fff) AM_READWRITE(polygonet_roz_ram_r, polygonet_roz_ram_w)
|
||||||
AM_RANGE(0x480000, 0x4bffff) AM_READ(polygonet_eeprom_r)
|
AM_RANGE(0x480000, 0x4bffff) AM_DEVREAD("eeprom", polygonet_eeprom_r)
|
||||||
AM_RANGE(0x4C0000, 0x4fffff) AM_WRITE(polygonet_eeprom_w)
|
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(0x500000, 0x503fff) AM_RAM_WRITE(shared_ram_write) AM_BASE(&shared_ram)
|
||||||
AM_RANGE(0x504000, 0x504003) AM_WRITE(dsp_w_lines)
|
AM_RANGE(0x504000, 0x504003) AM_WRITE(dsp_w_lines)
|
||||||
AM_RANGE(0x506000, 0x50600f) AM_READWRITE(dsp_host_interface_r, dsp_host_interface_w)
|
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_MACHINE_START(polygonet)
|
||||||
|
|
||||||
MDRV_GFXDECODE(plygonet)
|
MDRV_GFXDECODE(plygonet)
|
||||||
MDRV_NVRAM_HANDLER(polygonet)
|
|
||||||
|
MDRV_EEPROM_NODEFAULT_ADD("eeprom", eeprom_intf)
|
||||||
|
|
||||||
/* TODO: TEMPORARY! UNTIL A MORE LOCALIZED SYNC CAN BE MADE */
|
/* TODO: TEMPORARY! UNTIL A MORE LOCALIZED SYNC CAN BE MADE */
|
||||||
MDRV_QUANTUM_TIME(HZ(1200000))
|
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);
|
dsp56k_update_handler = memory_set_direct_update_handler(cputag_get_address_space(machine, "dsp", ADDRESS_SPACE_PROGRAM), plygonet_dsp56k_direct_handler);
|
||||||
|
|
||||||
/* save states */
|
/* 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_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_bank01_ram, 2 * 8 * dsp56k_bank01_size);
|
||||||
state_save_register_global_pointer(machine, dsp56k_bank02_ram, 2 * 8 * dsp56k_bank02_size);
|
state_save_register_global_pointer(machine, dsp56k_bank02_ram, 2 * 8 * dsp56k_bank02_size);
|
||||||
|
@ -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/konami/konami.h" /* for the callback and the firq irq definition */
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
#include "video/konicdev.h"
|
#include "video/konicdev.h"
|
||||||
|
#include "machine/eepromdev.h"
|
||||||
#include "sound/2151intf.h"
|
#include "sound/2151intf.h"
|
||||||
#include "sound/k053260.h"
|
#include "sound/k053260.h"
|
||||||
#include "includes/simpsons.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 )
|
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x0fff) AM_RAM
|
AM_RANGE(0x0000, 0x0fff) AM_RAM
|
||||||
AM_RANGE(0x1f80, 0x1f80) AM_READ_PORT("COIN")
|
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(0x1f90, 0x1f90) AM_READ_PORT("P1")
|
||||||
AM_RANGE(0x1f91, 0x1f91) AM_READ_PORT("P2")
|
AM_RANGE(0x1f91, 0x1f91) AM_READ_PORT("P2")
|
||||||
AM_RANGE(0x1f92, 0x1f92) AM_READ_PORT("P3")
|
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(0x1fa0, 0x1fa7) AM_DEVWRITE("k053246", k053246_w)
|
||||||
AM_RANGE(0x1fb0, 0x1fbf) AM_DEVWRITE("k053251", k053251_w)
|
AM_RANGE(0x1fb0, 0x1fbf) AM_DEVWRITE("k053251", k053251_w)
|
||||||
AM_RANGE(0x1fc0, 0x1fc0) AM_WRITE(simpsons_coin_counter_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(0x1fc4, 0x1fc4) AM_READ(simpsons_sound_interrupt_r)
|
||||||
AM_RANGE(0x1fc6, 0x1fc7) AM_DEVREADWRITE("konami", simpsons_sound_r, k053260_w)
|
AM_RANGE(0x1fc6, 0x1fc7) AM_DEVREADWRITE("konami", simpsons_sound_r, k053260_w)
|
||||||
AM_RANGE(0x1fc8, 0x1fc9) AM_DEVREAD("k053246", k053246_r)
|
AM_RANGE(0x1fc8, 0x1fc9) AM_DEVREAD("k053246", k053246_r)
|
||||||
@ -280,6 +281,17 @@ static const k053247_interface simpsons_k053246_intf =
|
|||||||
simpsons_sprite_callback
|
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 )
|
static MACHINE_DRIVER_START( simpsons )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
@ -293,6 +305,8 @@ static MACHINE_DRIVER_START( simpsons )
|
|||||||
|
|
||||||
MDRV_MACHINE_RESET(simpsons)
|
MDRV_MACHINE_RESET(simpsons)
|
||||||
MDRV_NVRAM_HANDLER(simpsons)
|
MDRV_NVRAM_HANDLER(simpsons)
|
||||||
|
|
||||||
|
MDRV_EEPROM_NODEFAULT_ADD("eeprom", eeprom_intf)
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK)
|
MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK)
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
extern int simpsons_firq_enabled;
|
extern int simpsons_firq_enabled;
|
||||||
|
|
||||||
READ8_HANDLER( simpsons_eeprom_r );
|
READ8_DEVICE_HANDLER( simpsons_eeprom_r );
|
||||||
WRITE8_HANDLER( simpsons_eeprom_w );
|
WRITE8_DEVICE_HANDLER( simpsons_eeprom_w );
|
||||||
WRITE8_HANDLER( simpsons_coin_counter_w );
|
WRITE8_HANDLER( simpsons_coin_counter_w );
|
||||||
READ8_HANDLER( simpsons_sound_interrupt_r );
|
READ8_HANDLER( simpsons_sound_interrupt_r );
|
||||||
READ8_DEVICE_HANDLER( simpsons_sound_r );
|
READ8_DEVICE_HANDLER( simpsons_sound_r );
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "video/konicdev.h"
|
#include "video/konicdev.h"
|
||||||
#include "cpu/konami/konami.h"
|
#include "cpu/konami/konami.h"
|
||||||
#include "machine/eeprom.h"
|
#include "machine/eepromdev.h"
|
||||||
#include "sound/k053260.h"
|
#include "sound/k053260.h"
|
||||||
#include "includes/simpsons.h"
|
#include "includes/simpsons.h"
|
||||||
|
|
||||||
@ -16,44 +16,21 @@ int simpsons_firq_enabled;
|
|||||||
static int init_eeprom_count;
|
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 )
|
NVRAM_HANDLER( simpsons )
|
||||||
{
|
{
|
||||||
if (read_or_write)
|
if (!read_or_write)
|
||||||
eeprom_save(file);
|
init_eeprom_count = file ? 0 : 10;
|
||||||
else
|
|
||||||
{
|
|
||||||
eeprom_init(machine, &eeprom_intf);
|
|
||||||
|
|
||||||
if (file)
|
|
||||||
{
|
|
||||||
init_eeprom_count = 0;
|
|
||||||
eeprom_load(file);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
init_eeprom_count = 10;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_HANDLER( simpsons_eeprom_r )
|
READ8_DEVICE_HANDLER( simpsons_eeprom_r )
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
res = (eeprom_read_bit() << 4);
|
res = (eepromdev_read_bit(device) << 4);
|
||||||
|
|
||||||
res |= 0x20;//konami_eeprom_ack() << 5; /* add the ack */
|
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)
|
if (init_eeprom_count)
|
||||||
{
|
{
|
||||||
@ -63,16 +40,16 @@ READ8_HANDLER( simpsons_eeprom_r )
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( simpsons_eeprom_w )
|
WRITE8_DEVICE_HANDLER( simpsons_eeprom_w )
|
||||||
{
|
{
|
||||||
if ( data == 0xff )
|
if ( data == 0xff )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
eeprom_write_bit(data & 0x80);
|
eepromdev_write_bit(device, data & 0x80);
|
||||||
eeprom_set_cs_line((data & 0x08) ? CLEAR_LINE : ASSERT_LINE);
|
eepromdev_set_cs_line(device, (data & 0x08) ? CLEAR_LINE : ASSERT_LINE);
|
||||||
eeprom_set_clock_line((data & 0x10) ? ASSERT_LINE : CLEAR_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;
|
simpsons_firq_enabled = data & 0x04;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user