mirror of
https://github.com/holub/mame
synced 2025-10-07 17:27:06 +03:00
ssfindo.cpp: added preliminary eeprom hook up. tetfight is now playable (coins work). Left as not working since eeprom isn't correctly saved, thus the inputs are screwed on reset. (nw)
This commit is contained in:
parent
38a3d40dbb
commit
b01afdbf3b
@ -127,6 +127,7 @@ Notes:
|
|||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "cpu/arm7/arm7.h"
|
#include "cpu/arm7/arm7.h"
|
||||||
#include "cpu/arm7/arm7core.h"
|
#include "cpu/arm7/arm7core.h"
|
||||||
|
#include "machine/i2cmem.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
|
||||||
@ -223,12 +224,14 @@ public:
|
|||||||
: driver_device(mconfig, type, tag),
|
: driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_palette(*this, "palette"),
|
m_palette(*this, "palette"),
|
||||||
|
m_i2cmem(*this, "i2cmem"),
|
||||||
m_vram(*this, "vram"),
|
m_vram(*this, "vram"),
|
||||||
m_flashrom(*this, "flash"),
|
m_flashrom(*this, "flash"),
|
||||||
m_io_ps7500(*this, "PS7500") { }
|
m_io_ps7500(*this, "PS7500") { }
|
||||||
|
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device<palette_device> m_palette;
|
required_device<palette_device> m_palette;
|
||||||
|
optional_device<i2cmem_device> m_i2cmem;
|
||||||
|
|
||||||
required_shared_ptr<uint32_t> m_vram;
|
required_shared_ptr<uint32_t> m_vram;
|
||||||
|
|
||||||
@ -432,7 +435,7 @@ READ32_MEMBER(ssfindo_state::PS7500_IO_r)
|
|||||||
|
|
||||||
if( m_iocr_hack)
|
if( m_iocr_hack)
|
||||||
{
|
{
|
||||||
return (m_io_ps7500->read() & 0x80) | 0x34 | (machine().rand()&3); //eeprom read ?
|
return (m_io_ps7500->read() & 0x80) | 0x34 | (m_i2cmem->read_sda() ? 0x03 : 0x00); //eeprom read
|
||||||
}
|
}
|
||||||
|
|
||||||
return (m_io_ps7500->read() & 0x80) | 0x37;
|
return (m_io_ps7500->read() & 0x80) | 0x37;
|
||||||
@ -502,6 +505,13 @@ WRITE32_MEMBER(ssfindo_state::PS7500_IO_w)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case IOCR:
|
case IOCR:
|
||||||
|
//popmessage("IOLINESW %i = %x @%x\n",offset,data,space.device().safe_pc());
|
||||||
|
COMBINE_DATA(&m_PS7500_IO[offset]);
|
||||||
|
// TODO: correct hook-up
|
||||||
|
m_i2cmem->write_scl((data & 0x01) ? 1 : 0);
|
||||||
|
m_i2cmem->write_sda((data & 0x02) ? 1 : 0);
|
||||||
|
break;
|
||||||
|
|
||||||
case REFCR:
|
case REFCR:
|
||||||
case DRAMCR:
|
case DRAMCR:
|
||||||
case SD0CR:
|
case SD0CR:
|
||||||
@ -516,9 +526,6 @@ WRITE32_MEMBER(ssfindo_state::PS7500_IO_w)
|
|||||||
case VIDINITA: //TODO: bit 30 (last bit) p.105
|
case VIDINITA: //TODO: bit 30 (last bit) p.105
|
||||||
COMBINE_DATA(&m_PS7500_IO[offset]);
|
COMBINE_DATA(&m_PS7500_IO[offset]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -636,8 +643,8 @@ static ADDRESS_MAP_START( tetfight_map, AS_PROGRAM, 32, ssfindo_state )
|
|||||||
AM_RANGE(0x00000000, 0x001fffff) AM_ROM
|
AM_RANGE(0x00000000, 0x001fffff) AM_ROM
|
||||||
AM_RANGE(0x03200000, 0x032001ff) AM_READWRITE(PS7500_IO_r,PS7500_IO_w)
|
AM_RANGE(0x03200000, 0x032001ff) AM_READWRITE(PS7500_IO_r,PS7500_IO_w)
|
||||||
AM_RANGE(0x03400000, 0x03400003) AM_WRITE(FIFO_w)
|
AM_RANGE(0x03400000, 0x03400003) AM_WRITE(FIFO_w)
|
||||||
AM_RANGE(0x03240000, 0x03240003) AM_READ_PORT("DSW")
|
AM_RANGE(0x03240000, 0x03240003) AM_READ_PORT("IN0")
|
||||||
AM_RANGE(0x03240004, 0x03240007) AM_READ_PORT("IN0")
|
AM_RANGE(0x03240004, 0x03240007) AM_READ_PORT("IN1")
|
||||||
AM_RANGE(0x03240008, 0x0324000b) AM_READ_PORT("DSW2")
|
AM_RANGE(0x03240008, 0x0324000b) AM_READ_PORT("DSW2")
|
||||||
AM_RANGE(0x03240020, 0x03240023) AM_READWRITE(tetfight_unk_r, tetfight_unk_w)
|
AM_RANGE(0x03240020, 0x03240023) AM_READWRITE(tetfight_unk_r, tetfight_unk_w)
|
||||||
AM_RANGE(0x10000000, 0x14ffffff) AM_RAM AM_SHARE("vram")
|
AM_RANGE(0x10000000, 0x14ffffff) AM_RAM AM_SHARE("vram")
|
||||||
@ -719,31 +726,33 @@ static INPUT_PORTS_START( tetfight )
|
|||||||
PORT_START("PS7500")
|
PORT_START("PS7500")
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
|
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
|
||||||
|
|
||||||
PORT_START("DSW")
|
PORT_START("IN0")
|
||||||
PORT_DIPNAME( 0x01, 0x01, "DSW 0" )
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
PORT_DIPNAME( 0x02, 0x02, "DSW 1" )
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
PORT_DIPNAME( 0x04, 0x04, "DSW 2" )
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
|
||||||
PORT_DIPNAME( 0x08, 0x08, "DSW 3" )
|
PORT_START("IN1")
|
||||||
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
|
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
|
||||||
PORT_DIPNAME( 0x10, 0x010, "DSW 4" )
|
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
|
||||||
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
|
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
|
||||||
PORT_DIPNAME( 0x20, 0x20, "DSW 5" )
|
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
|
||||||
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
|
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
|
||||||
PORT_DIPNAME( 0x40, 0x040, "DSW 6" )
|
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
|
||||||
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
|
||||||
PORT_DIPNAME( 0x80, 0x80, "DSW 7" )
|
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
|
||||||
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||||
|
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
|
||||||
|
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
|
||||||
|
|
||||||
PORT_START("DSW2")
|
PORT_START("DSW2")
|
||||||
PORT_DIPNAME( 0x01, 0x01, "Test Mode" )
|
PORT_DIPNAME( 0x01, 0x01, "Test Mode" )
|
||||||
@ -761,25 +770,15 @@ static INPUT_PORTS_START( tetfight )
|
|||||||
PORT_DIPNAME( 0x10, 0x010, "DSW 4" )
|
PORT_DIPNAME( 0x10, 0x010, "DSW 4" )
|
||||||
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
|
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
PORT_DIPNAME( 0x20, 0x20, "DSW 5" )
|
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Free_Play ) )
|
||||||
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
|
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
PORT_DIPNAME( 0x40, 0x040, "DSW 6" )
|
PORT_DIPNAME( 0x40, 0x040, "DSW 6" )
|
||||||
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
PORT_DIPNAME( 0x80, 0x80, "DSW 7" )
|
PORT_DIPNAME( 0x80, 0x80, "Number of rounds" )
|
||||||
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
PORT_DIPSETTING( 0x80, "2" )
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
PORT_DIPSETTING( 0x00, "1" )
|
||||||
|
|
||||||
PORT_START("IN0")
|
|
||||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 ) //guess
|
|
||||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
|
|
||||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
|
|
||||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
|
|
||||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
|
|
||||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
|
|
||||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
|
|
||||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
|
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
@ -791,6 +790,7 @@ static MACHINE_CONFIG_START( ssfindo )
|
|||||||
|
|
||||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", ssfindo_state, interrupt)
|
MCFG_CPU_VBLANK_INT_DRIVER("screen", ssfindo_state, interrupt)
|
||||||
|
|
||||||
|
MCFG_24C01_ADD("i2cmem")
|
||||||
|
|
||||||
MCFG_SCREEN_ADD("screen", RASTER)
|
MCFG_SCREEN_ADD("screen", RASTER)
|
||||||
MCFG_SCREEN_REFRESH_RATE(60)
|
MCFG_SCREEN_REFRESH_RATE(60)
|
||||||
@ -808,13 +808,17 @@ static MACHINE_CONFIG_DERIVED( ppcar, ssfindo )
|
|||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_CPU_MODIFY("maincpu")
|
MCFG_CPU_MODIFY("maincpu")
|
||||||
MCFG_CPU_PROGRAM_MAP(ppcar_map)
|
MCFG_CPU_PROGRAM_MAP(ppcar_map)
|
||||||
|
|
||||||
|
MCFG_DEVICE_REMOVE("i2cmem")
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
static MACHINE_CONFIG_DERIVED( tetfight, ssfindo )
|
static MACHINE_CONFIG_DERIVED( tetfight, ppcar )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_CPU_MODIFY("maincpu")
|
MCFG_CPU_MODIFY("maincpu")
|
||||||
MCFG_CPU_PROGRAM_MAP(tetfight_map)
|
MCFG_CPU_PROGRAM_MAP(tetfight_map)
|
||||||
|
|
||||||
|
MCFG_24C02_ADD("i2cmem")
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
ROM_START( ssfindo )
|
ROM_START( ssfindo )
|
||||||
@ -829,7 +833,7 @@ ROM_START( ssfindo )
|
|||||||
ROM_LOAD16_BYTE( "du3", 0x800000, 0x400000, CRC(d1e8afb2) SHA1(598dfcbba14435a1d0571dcefe0ec62fec657fca) )
|
ROM_LOAD16_BYTE( "du3", 0x800000, 0x400000, CRC(d1e8afb2) SHA1(598dfcbba14435a1d0571dcefe0ec62fec657fca) )
|
||||||
ROM_LOAD16_BYTE( "du2", 0x800001, 0x400000, CRC(56998515) SHA1(9b71a44f56a545ff0c1170775c839d21bd01f545) )
|
ROM_LOAD16_BYTE( "du2", 0x800001, 0x400000, CRC(56998515) SHA1(9b71a44f56a545ff0c1170775c839d21bd01f545) )
|
||||||
|
|
||||||
ROM_REGION(0x80, "eeprom", 0 ) /* eeprom */
|
ROM_REGION(0x80, "i2cmem", 0 ) /* eeprom */
|
||||||
ROM_LOAD( "24c01a.u36", 0x00, 0x80, CRC(b4f4849b) SHA1(f8f17dc94b2a305048693cfb78d14be57310ce56) )
|
ROM_LOAD( "24c01a.u36", 0x00, 0x80, CRC(b4f4849b) SHA1(f8f17dc94b2a305048693cfb78d14be57310ce56) )
|
||||||
|
|
||||||
ROM_REGION(0x10000, "user4", 0 ) /* qdsp code */
|
ROM_REGION(0x10000, "user4", 0 ) /* qdsp code */
|
||||||
@ -872,19 +876,19 @@ ROM_START( tetfight )
|
|||||||
ROM_REGION16_LE(0x1000000, "flash", ROMREGION_ERASEFF ) /* flash roms */
|
ROM_REGION16_LE(0x1000000, "flash", ROMREGION_ERASEFF ) /* flash roms */
|
||||||
/* nothing? */
|
/* nothing? */
|
||||||
|
|
||||||
ROM_REGION(0x100, "eeprom", 0 ) /* eeprom */
|
ROM_REGION(0x100, "i2cmem", 0 ) /* 24c02 eeprom */
|
||||||
ROM_LOAD( "u1", 0x00, 0x100, CRC(dd207b40) SHA1(6689d9dfa980bdfbd4e4e6cef7973e22ebbfe22e) )
|
ROM_LOAD( "u1", 0x00, 0x100, CRC(dd207b40) SHA1(6689d9dfa980bdfbd4e4e6cef7973e22ebbfe22e) )
|
||||||
|
|
||||||
ROM_REGION(0x10000, "user4", 0 ) /* qdsp code */
|
ROM_REGION(0x10000, "user4", 0 ) /* qdsp code */
|
||||||
ROM_LOAD( "u12", 0x000000, 0x10000, CRC(49976f7b) SHA1(eba5b97b81736f3c184ae0c19f1b10c5ae250d51) ) // = e.u14 on ssfindo
|
ROM_LOAD( "u12", 0x000000, 0x10000, CRC(49976f7b) SHA1(eba5b97b81736f3c184ae0c19f1b10c5ae250d51) ) // 27c512 = e.u14 on ssfindo
|
||||||
|
|
||||||
ROM_REGION(0x100000, "user5", ROMREGION_ERASE00 )/* qdsp samples */
|
ROM_REGION(0x100000, "user5", ROMREGION_ERASE00 )/* qdsp samples */
|
||||||
// probably the same, but wasn't dumped
|
// probably the same, but wasn't dumped
|
||||||
//ROM_LOAD( "1008s-1.u16", 0x000000, 0x100000, CRC(9aef9545) SHA1(f23ef72c3e3667923768dfdd0c5b4951b23dcbcf) )
|
//ROM_LOAD( "1008s-1.u16", 0x000000, 0x100000, CRC(9aef9545) SHA1(f23ef72c3e3667923768dfdd0c5b4951b23dcbcf) )
|
||||||
|
|
||||||
ROM_REGION(0x100000, "user6", 0 ) /* samples - same internal structure as qdsp samples */
|
ROM_REGION(0x100000, "user6", 0 ) /* samples - same internal structure as qdsp samples */
|
||||||
ROM_LOAD( "u11", 0x000000, 0x80000, CRC(073050f6) SHA1(07f362f3ba468bde2341a99e6b26931d11459a92) )
|
ROM_LOAD( "u11", 0x000000, 0x80000, CRC(073050f6) SHA1(07f362f3ba468bde2341a99e6b26931d11459a92) ) // 27c040
|
||||||
ROM_LOAD( "u15", 0x080000, 0x80000, CRC(477f8089) SHA1(8084facb254d60da7983d628d5945d27b9494e65) )
|
ROM_LOAD( "u15", 0x080000, 0x80000, CRC(477f8089) SHA1(8084facb254d60da7983d628d5945d27b9494e65) ) // 27c040
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
DRIVER_INIT_MEMBER(ssfindo_state,common)
|
DRIVER_INIT_MEMBER(ssfindo_state,common)
|
||||||
|
Loading…
Reference in New Issue
Block a user