cps1.cpp: Interrupt acknowledge routine based on schematics (nw)

This commit is contained in:
AJR 2017-06-06 11:45:05 -04:00
parent 08e7ef5682
commit 5de599fd94
3 changed files with 24 additions and 2 deletions

View File

@ -339,7 +339,7 @@ INTERRUPT_GEN_MEMBER(cps_state::cps1_interrupt)
/* Strider also has a IRQ4 handler. It is input port related, but the game */
/* works without it. It is the *only* CPS1 game to have that. */
/* ...until we found out that ganbare relies on it, see below */
device.execute().set_input_line(2, HOLD_LINE);
device.execute().set_input_line(2, ASSERT_LINE);
}
TIMER_DEVICE_CALLBACK_MEMBER(cps_state::ganbare_interrupt)
@ -347,7 +347,17 @@ TIMER_DEVICE_CALLBACK_MEMBER(cps_state::ganbare_interrupt)
/* not sure on the timing or source of this - the game needs it once per frame, */
/* otherwise you get a "HARD ERROR" after boot */
if (param == 0)
m_maincpu->set_input_line(4, HOLD_LINE);
m_maincpu->set_input_line(4, ASSERT_LINE);
}
IRQ_CALLBACK_MEMBER(cps_state::cps1_int_ack)
{
// clear the IPL1 and IPL2 flip-flops
m_maincpu->set_input_line(2, CLEAR_LINE);
m_maincpu->set_input_line(4, CLEAR_LINE);
// assert VPA
return M68K_INT_ACK_AUTOVECTOR;
}
@ -3296,6 +3306,7 @@ static MACHINE_CONFIG_START( cps1_10MHz )
MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz ) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(sub_map)
@ -3367,6 +3378,7 @@ static MACHINE_CONFIG_DERIVED( qsound, cps1_12MHz )
MCFG_CPU_REPLACE("maincpu", M68000, XTAL_12MHz ) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(qsound_main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack)
MCFG_CPU_REPLACE("audiocpu", Z80, XTAL_8MHz) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(qsound_sub_map)

View File

@ -1565,6 +1565,7 @@ static MACHINE_CONFIG_START( fcrash )
MCFG_CPU_ADD("maincpu", M68000, 10000000)
MCFG_CPU_PROGRAM_MAP(fcrash_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack)
MCFG_CPU_ADD("audiocpu", Z80, 24000000/6) /* ? */
MCFG_CPU_PROGRAM_MAP(sound_map)
@ -1629,6 +1630,7 @@ static MACHINE_CONFIG_START( kodb )
MCFG_CPU_ADD("maincpu", M68000, 10000000)
MCFG_CPU_PROGRAM_MAP(fcrash_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack)
MCFG_CPU_ADD("audiocpu", Z80, 3579545)
MCFG_CPU_PROGRAM_MAP(kodb_sound_map)
@ -1725,6 +1727,7 @@ static MACHINE_CONFIG_START( knightsb )
MCFG_CPU_ADD("maincpu", M68000, 24000000 / 2)
MCFG_CPU_PROGRAM_MAP(knightsb_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack)
MCFG_CPU_ADD("audiocpu", Z80, 29821000 / 8)
MCFG_CPU_PROGRAM_MAP(knightsb_z80map)
@ -2107,6 +2110,7 @@ static MACHINE_CONFIG_START( dinopic )
MCFG_CPU_ADD("maincpu", M68000, 12000000)
MCFG_CPU_PROGRAM_MAP(dinopic_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack)
//MCFG_CPU_ADD("audiocpu", PIC16C57, 12000000)
//MCFG_DEVICE_DISABLE() /* no valid dumps .. */
@ -2266,6 +2270,7 @@ static MACHINE_CONFIG_START( sgyxz )
MCFG_CPU_ADD("maincpu", M68000, 12000000)
MCFG_CPU_PROGRAM_MAP(sgyxz_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack)
MCFG_CPU_ADD("audiocpu", Z80, 3579545)
MCFG_CPU_PROGRAM_MAP(sgyxz_sound_map)
@ -2360,6 +2365,7 @@ static MACHINE_CONFIG_START( punipic )
MCFG_CPU_ADD("maincpu", M68000, 12000000)
MCFG_CPU_PROGRAM_MAP(punipic_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack)
//MCFG_CPU_ADD("audiocpu", PIC16C57, 12000000)
//MCFG_DEVICE_DISABLE() /* no valid dumps .. */
@ -2555,6 +2561,7 @@ static MACHINE_CONFIG_START( sf2m1 )
MCFG_CPU_ADD("maincpu", M68000, XTAL_12MHz )
MCFG_CPU_PROGRAM_MAP(sf2m1_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz)
MCFG_CPU_PROGRAM_MAP(sgyxz_sound_map)
@ -2888,6 +2895,7 @@ static MACHINE_CONFIG_START( slampic )
MCFG_CPU_ADD("maincpu", M68000, 12000000)
MCFG_CPU_PROGRAM_MAP(slampic_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack)
//MCFG_CPU_ADD("audiocpu", PIC16C57, 12000000)
//MCFG_DEVICE_DISABLE() /* no valid dumps .. */
@ -2989,6 +2997,7 @@ static MACHINE_CONFIG_START( varthb )
MCFG_CPU_ADD("maincpu", M68000, 12000000)
MCFG_CPU_PROGRAM_MAP(varthb_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack)
MCFG_CPU_ADD("audiocpu", Z80, 3579545)
MCFG_CPU_PROGRAM_MAP(sgyxz_sound_map)

View File

@ -324,6 +324,7 @@ public:
DECLARE_WRITE_LINE_MEMBER(screen_vblank_cps1);
INTERRUPT_GEN_MEMBER(cps1_interrupt);
TIMER_DEVICE_CALLBACK_MEMBER(ganbare_interrupt);
IRQ_CALLBACK_MEMBER(cps1_int_ack);
TIMER_DEVICE_CALLBACK_MEMBER(cps2_interrupt);
TIMER_CALLBACK_MEMBER(cps2_update_digital_volume);