diff --git a/src/mame/drivers/nmk16.c b/src/mame/drivers/nmk16.c index 1ed5990f442..e34e17e16c8 100644 --- a/src/mame/drivers/nmk16.c +++ b/src/mame/drivers/nmk16.c @@ -3516,18 +3516,17 @@ static const ym2203_interface ym2203_config = ym2203_irqhandler }; -/* Not 100% sure that this is really vblank-in irq, but Vandyke definitely works better with this arrangement, sword collisions are fussy otherwise - (mostly noticeable with attract mode). */ -static TIMER_CALLBACK( nmk16_vblank_in_irq ) +static TIMER_DEVICE_CALLBACK( nmk16_scanline ) { - cputag_set_input_line(machine, "maincpu", 2, HOLD_LINE); -} + int scanline = param; -static INTERRUPT_GEN( nmk16_vblank_out_irq ) -{ - cpu_set_input_line(device, 4, HOLD_LINE); + if(scanline == 240) // vblank-out irq + cputag_set_input_line(timer.machine, "maincpu", 4, HOLD_LINE); - timer_set(device->machine, device->machine->primary_screen->time_until_pos(0), NULL,0, nmk16_vblank_in_irq); + /* This is either vblank-in or sprite dma irq complete, Vandyke definitely relies that irq fires at scanline ~0 instead of 112 (as per previous + cpu_getiloops() implementation), mostly noticeable with sword collisions and related attract mode behaviour. */ + if(scanline == 0) + cputag_set_input_line(timer.machine, "maincpu", 2, HOLD_LINE); } static const nmk112_interface nmk16_nmk112_intf = @@ -3540,8 +3539,8 @@ static MACHINE_CONFIG_START( tharrier, driver_device ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 10000000) /* 10 MHz */ MDRV_CPU_PROGRAM_MAP(tharrier_map) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) MDRV_CPU_ADD("audiocpu", Z80, 3000000) MDRV_CPU_PROGRAM_MAP(tharrier_sound_map) @@ -3586,8 +3585,8 @@ static MACHINE_CONFIG_START( manybloc, driver_device ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 10000000) /* 10? MHz - check */ MDRV_CPU_PROGRAM_MAP(manybloc_map) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) MDRV_CPU_PERIODIC_INT(irq1_line_hold,56)/* this needs to equal the framerate on this, rather than being double it .. */ + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) MDRV_CPU_ADD("audiocpu", Z80, 3000000) MDRV_CPU_PROGRAM_MAP(tharrier_sound_map) @@ -3630,8 +3629,8 @@ static MACHINE_CONFIG_START( mustang, driver_device ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 10000000) /* 10 MHz ? */ MDRV_CPU_PROGRAM_MAP(mustang_map) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) MDRV_MACHINE_RESET(NMK004) @@ -3673,8 +3672,8 @@ static MACHINE_CONFIG_START( mustangb, driver_device ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 10000000) /* 10 MHz ? */ MDRV_CPU_PROGRAM_MAP(mustangb_map) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) SEIBU_SOUND_SYSTEM_CPU(14318180/4) @@ -3708,8 +3707,8 @@ static MACHINE_CONFIG_START( bioship, driver_device ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, BIOSHIP_CRYSTAL1 ) /* 10.0 MHz (verified) */ MDRV_CPU_PROGRAM_MAP(bioship_map) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) MDRV_CPU_PERIODIC_INT(irq1_line_hold,100)/* 112 breaks the title screen */ + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) MDRV_MACHINE_RESET(NMK004) @@ -3750,8 +3749,8 @@ static MACHINE_CONFIG_START( vandyke, driver_device ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, XTAL_10MHz) /* 68000p12 running at 10Mhz, verified on pcb */ MDRV_CPU_PROGRAM_MAP(vandyke_map) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) MDRV_MACHINE_RESET(NMK004) @@ -3792,8 +3791,8 @@ static MACHINE_CONFIG_START( vandykeb, driver_device ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 10000000) /* 10 MHz ? */ MDRV_CPU_PROGRAM_MAP(vandykeb_map) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) MDRV_CPU_ADD("mcu", PIC16C57, 12000000) /* 3MHz */ MDRV_DEVICE_DISABLE() @@ -3827,8 +3826,8 @@ static MACHINE_CONFIG_START( acrobatm, driver_device ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 10000000) /* 10 MHz (verified on pcb) */ MDRV_CPU_PROGRAM_MAP(acrobatm_map) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) MDRV_MACHINE_RESET(NMK004) @@ -3871,8 +3870,8 @@ static MACHINE_CONFIG_START( tdragonb, driver_device ) /* bootleg using Raiden s MDRV_CPU_ADD("maincpu", M68000, 10000000) MDRV_CPU_PROGRAM_MAP(tdragonb_map) //MDRV_CPU_VBLANK_INT("screen", irq4_line_hold) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ?? drives music */ + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) SEIBU_SOUND_SYSTEM_CPU(14318180/4) @@ -3902,9 +3901,9 @@ static MACHINE_CONFIG_START( tdragon, driver_device ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, XTAL_8MHz) /* verified on pcb */ MDRV_CPU_PROGRAM_MAP(tdragon_map) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) //MDRV_CPU_VBLANK_INT("screen", irq4_line_hold) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ?? drives music */ + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) MDRV_MACHINE_RESET(NMK004) @@ -3981,8 +3980,8 @@ static MACHINE_CONFIG_START( strahl, driver_device ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz ? */ MDRV_CPU_PROGRAM_MAP(strahl_map) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) MDRV_MACHINE_RESET(NMK004) @@ -4826,7 +4825,7 @@ static MACHINE_CONFIG_START( stagger1, driver_device ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000,XTAL_12MHz) /* 68000p10 running at 12mhz, verified on pcb */ MDRV_CPU_PROGRAM_MAP(afega) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) MDRV_CPU_ADD("audiocpu", Z80, XTAL_4MHz) /* verified on pcb */ MDRV_CPU_PROGRAM_MAP(afega_sound_cpu) @@ -4907,7 +4906,7 @@ static MACHINE_CONFIG_START( firehawk, driver_device ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000,12000000) MDRV_CPU_PROGRAM_MAP(afega) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) MDRV_CPU_ADD("audiocpu", Z80,4000000) MDRV_CPU_PROGRAM_MAP(firehawk_sound_cpu) @@ -4942,8 +4941,8 @@ static MACHINE_CONFIG_START( twinactn, driver_device ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000,12000000) MDRV_CPU_PROGRAM_MAP(twinactn_map) - MDRV_CPU_VBLANK_INT("screen",nmk16_vblank_out_irq) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ + MDRV_TIMER_ADD_SCANLINE("scantimer", nmk16_scanline, "screen", 0, 1) MDRV_CPU_ADD("audiocpu", Z80, 4000000) MDRV_CPU_PROGRAM_MAP(twinactn_sound_cpu)