patches to make f1 super lap work, submitted by Haze, make Sixtoe happy!

This commit is contained in:
Michaël Banaan Ananas 2012-09-03 13:27:36 +00:00
parent 459a3a7b8e
commit 96069a185d
4 changed files with 44 additions and 4 deletions

View File

@ -956,8 +956,9 @@ static UINT32 am2ImmediateQuick(v60_state *cpustate)
static UINT32 am2Error1(v60_state *cpustate)
{
fatalerror("CPU - AM2 - 1 (cpustate->PC=%06x)", cpustate->PC);
return 0; /* never reached, fatalerror won't return */
// f1lap trips this, why?
logerror("CPU - AM2 - 1 (cpustate->PC=%06x)", cpustate->PC);
return 0;
}
static UINT32 am2Error2(v60_state *cpustate)

View File

@ -1583,6 +1583,18 @@ static INPUT_PORTS_START( f1lap )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Gear Up")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_LSHIFT) PORT_NAME("Gear Down")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_Z)
PORT_MODIFY("SERVICE34_A")
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) // service coin mirror
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) // seems to be a service switch mirror
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
@ -2780,7 +2792,6 @@ ROM_END
**************************************************************************************************************************
**************************************************************************************************************************
F1 Super Lap
Requires 2 linked system 32 boards to function
protected via FD1149 317-0210
*/
ROM_START( f1lap )
@ -4211,9 +4222,19 @@ DRIVER_INIT_MEMBER(segas32_state,f1en)
}
DRIVER_INIT_MEMBER(segas32_state,f1lap)
{
segas32_common_init(machine(), read16_delegate(FUNC(segas32_state::analog_custom_io_r),this), write16_delegate(FUNC(segas32_state::analog_custom_io_w),this));
m_dual_pcb_comms = auto_alloc_array(machine(), UINT16, 0x1000/2);
machine().device("maincpu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0x800000, 0x800fff, read16_delegate(FUNC(segas32_state::dual_pcb_comms_r),this), write16_delegate(FUNC(segas32_state::dual_pcb_comms_w),this));
machine().device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x801000, 0x801003, read16_delegate(FUNC(segas32_state::dual_pcb_masterslave),this));
// machine().device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0x800048, 0x800049, write16_delegate(FUNC(segas32_state::f1en_comms_echo_w),this));
m_system32_prot_vblank = f1lap_fd1149_vblank;
m_sw1_output = f1lap_sw1_output;
}

View File

@ -178,6 +178,7 @@ public:
void darkedge_fd1149_vblank(device_t *device);
void f1lap_fd1149_vblank(device_t *device);
extern const UINT8 ga2_v25_opcode_table[];

View File

@ -221,7 +221,6 @@ void darkedge_fd1149_vblank(device_t *device)
}
}
WRITE16_MEMBER(segas32_state::darkedge_protection_w)
{
logerror("%06x:darkedge_prot_w(%06X) = %04X & %04X\n",
@ -236,6 +235,24 @@ READ16_MEMBER(segas32_state::darkedge_protection_r)
return 0xffff;
}
/******************************************************************************
******************************************************************************
F1 Super Lap
******************************************************************************
******************************************************************************/
void f1lap_fd1149_vblank(device_t *device)
{
address_space *space = device->memory().space(AS_PROGRAM);
space->write_byte(0x20F7C6, 0);
// needed to start a game
UINT8 val = space->read_byte(0x20EE81);
if (val == 0xff) space->write_byte(0x20EE81,0);
}
/******************************************************************************