From 97303de7068709ac6cf54772c4d9fa08134ae7bf Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 7 Jun 2017 20:38:29 -0400 Subject: toaplan2.cpp: Generate (and acknowledge) video interrupts within VDP --- src/mame/drivers/toaplan2.cpp | 114 ++++++++++++++++++++---------------------- src/mame/includes/toaplan2.h | 15 +----- src/mame/video/gp9001.cpp | 30 ++++++++++- src/mame/video/gp9001.h | 13 +++++ 4 files changed, 96 insertions(+), 76 deletions(-) diff --git a/src/mame/drivers/toaplan2.cpp b/src/mame/drivers/toaplan2.cpp index ea3387c8da0..9a68a9b5e40 100644 --- a/src/mame/drivers/toaplan2.cpp +++ b/src/mame/drivers/toaplan2.cpp @@ -386,8 +386,6 @@ To reset the NVRAM in Othello Derby, hold P1 Button 1 down while booting. void toaplan2_state::machine_start() { - m_raise_irq_timer = timer_alloc(TIMER_RAISE_IRQ); - save_item(NAME(m_mcu_data)); save_item(NAME(m_old_p1_paddle_h)); save_item(NAME(m_old_p2_paddle_h)); @@ -498,28 +496,18 @@ DRIVER_INIT_MEMBER(toaplan2_state,enmadaio) Toaplan games ***************************************************************************/ -void toaplan2_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +IRQ_CALLBACK_MEMBER(toaplan2_state::fixeightbl_irq_ack) { - switch (id) - { - case TIMER_RAISE_IRQ: - m_maincpu->set_input_line(param, HOLD_LINE); - break; - default: - assert_always(false, "Unknown id in toaplan2_state::device_timer"); - } + m_maincpu->set_input_line(M68K_IRQ_2, CLEAR_LINE); + return M68K_INT_ACK_AUTOVECTOR; } -void toaplan2_state::toaplan2_vblank_irq(int irq_line) +IRQ_CALLBACK_MEMBER(toaplan2_state::pipibibsbl_irq_ack) { - // the IRQ appears to fire at line 0xe6 - m_raise_irq_timer->adjust(m_screen->time_until_pos(0xe6), irq_line); + m_maincpu->set_input_line(M68K_IRQ_4, CLEAR_LINE); + return M68K_INT_ACK_AUTOVECTOR; } -INTERRUPT_GEN_MEMBER(toaplan2_state::toaplan2_vblank_irq1){ toaplan2_vblank_irq(1); } -INTERRUPT_GEN_MEMBER(toaplan2_state::toaplan2_vblank_irq2){ toaplan2_vblank_irq(2); } -INTERRUPT_GEN_MEMBER(toaplan2_state::toaplan2_vblank_irq4){ toaplan2_vblank_irq(4); } - READ16_MEMBER(toaplan2_state::video_count_r) { @@ -3322,7 +3310,6 @@ static MACHINE_CONFIG_START( tekipaki ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz) /* 10MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(tekipaki_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2) @@ -3340,8 +3327,9 @@ static MACHINE_CONFIG_START( tekipaki ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) @@ -3374,7 +3362,6 @@ static MACHINE_CONFIG_START( ghox ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(ghox_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) #ifdef USE_HD64x180 MCFG_CPU_ADD("audiocpu", Z180, XTAL_10MHz) /* HD647180 CPU actually */ @@ -3399,6 +3386,7 @@ static MACHINE_CONFIG_START( ghox ) MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) @@ -3464,7 +3452,6 @@ static MACHINE_CONFIG_START( dogyuun ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_25MHz/2) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(dogyuun_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) MCFG_CPU_ADD("audiocpu", V25, XTAL_25MHz/2) /* NEC V25 type Toaplan marked CPU ??? */ MCFG_CPU_PROGRAM_MAP(v25_mem) @@ -3485,10 +3472,11 @@ static MACHINE_CONFIG_START( dogyuun ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) - MCFG_DEVICE_ADD("gp9001_1", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001_1", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) @@ -3509,7 +3497,6 @@ static MACHINE_CONFIG_START( kbash ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) /* 16MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(kbash_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) /* ROM based v25 */ MCFG_CPU_ADD("audiocpu", V25, XTAL_16MHz) /* NEC V25 type Toaplan marked CPU ??? */ @@ -3534,8 +3521,9 @@ static MACHINE_CONFIG_START( kbash ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) @@ -3555,7 +3543,6 @@ static MACHINE_CONFIG_START( kbash2 ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) /* 16MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(kbash2_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -3571,8 +3558,9 @@ static MACHINE_CONFIG_START( kbash2 ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) @@ -3592,7 +3580,6 @@ static MACHINE_CONFIG_START( truxton2 ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(truxton2_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq2) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -3606,8 +3593,9 @@ static MACHINE_CONFIG_START( truxton2 ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_2)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,truxton2) @@ -3639,7 +3627,6 @@ static MACHINE_CONFIG_START( pipibibs ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(pipibibs_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) MCFG_CPU_ADD("audiocpu", Z80, XTAL_27MHz/8) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(pipibibs_sound_z80_mem) @@ -3662,8 +3649,9 @@ static MACHINE_CONFIG_START( pipibibs ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) @@ -3681,7 +3669,7 @@ static MACHINE_CONFIG_START( pipibibsbl ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz) /* 10MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(pipibibi_bootleg_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) + MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(toaplan2_state, pipibibsbl_irq_ack) MCFG_CPU_ADD("audiocpu", Z80, XTAL_27MHz/8) /* ??? 3.37MHz */ MCFG_CPU_PROGRAM_MAP(pipibibs_sound_z80_mem) @@ -3704,8 +3692,9 @@ static MACHINE_CONFIG_START( pipibibsbl ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(ASSERTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) @@ -3760,7 +3749,6 @@ static MACHINE_CONFIG_START( fixeight ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(fixeight_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) MCFG_CPU_ADD("audiocpu", V25, XTAL_16MHz) /* NEC V25 type Toaplan marked CPU ??? */ MCFG_CPU_PROGRAM_MAP(fixeight_v25_mem) @@ -3782,8 +3770,9 @@ static MACHINE_CONFIG_START( fixeight ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,truxton2) @@ -3803,7 +3792,7 @@ static MACHINE_CONFIG_START( fixeightbl ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz) /* 10MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(fixeightbl_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq2) + MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(toaplan2_state, fixeightbl_irq_ack) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -3820,8 +3809,9 @@ static MACHINE_CONFIG_START( fixeightbl ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(ASSERTLINE("maincpu", M68K_IRQ_2)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,fixeightbl) @@ -3839,7 +3829,6 @@ static MACHINE_CONFIG_START( vfive ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz/2) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(vfive_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) MCFG_CPU_ADD("audiocpu", V25, XTAL_20MHz/2) /* Verified on pcb, NEC V25 type Toaplan mark scratched out */ MCFG_CPU_PROGRAM_MAP(vfive_v25_mem) @@ -3860,8 +3849,9 @@ static MACHINE_CONFIG_START( vfive ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) @@ -3878,7 +3868,6 @@ static MACHINE_CONFIG_START( batsugun ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_32MHz/2) /* 16MHz , 32MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(batsugun_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) MCFG_CPU_ADD("audiocpu", V25, XTAL_32MHz/2) /* NEC V25 type Toaplan marked CPU ??? */ MCFG_CPU_PROGRAM_MAP(v25_mem) @@ -3901,10 +3890,11 @@ static MACHINE_CONFIG_START( batsugun ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) - MCFG_DEVICE_ADD("gp9001_1", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001_1", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) @@ -3924,7 +3914,6 @@ static MACHINE_CONFIG_START( pwrkick ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) MCFG_CPU_PROGRAM_MAP(pwrkick_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) MCFG_UPD4992_ADD("rtc") @@ -3943,8 +3932,9 @@ static MACHINE_CONFIG_START( pwrkick ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) @@ -3959,7 +3949,6 @@ static MACHINE_CONFIG_START( othldrby ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) MCFG_CPU_PROGRAM_MAP(othldrby_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) MCFG_UPD4992_ADD("rtc") @@ -3976,8 +3965,9 @@ static MACHINE_CONFIG_START( othldrby ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) @@ -3993,7 +3983,6 @@ static MACHINE_CONFIG_START( enmadaio ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz/2) MCFG_CPU_PROGRAM_MAP(enmadaio_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -4006,8 +3995,9 @@ static MACHINE_CONFIG_START( enmadaio ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) @@ -4027,7 +4017,6 @@ static MACHINE_CONFIG_START( snowbro2 ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) MCFG_CPU_PROGRAM_MAP(snowbro2_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -4043,8 +4032,9 @@ static MACHINE_CONFIG_START( snowbro2 ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) @@ -4064,7 +4054,6 @@ static MACHINE_CONFIG_START( mahoudai ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_32MHz/2) /* 16MHz , 32MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(mahoudai_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) MCFG_CPU_ADD("audiocpu", Z80, XTAL_32MHz/8) /* 4MHz , 32MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(raizing_sound_z80_mem) @@ -4088,8 +4077,9 @@ static MACHINE_CONFIG_START( mahoudai ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,bgaregga) @@ -4109,7 +4099,6 @@ static MACHINE_CONFIG_START( shippumd ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_32MHz/2) /* 16MHz , 32MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(shippumd_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) MCFG_CPU_ADD("audiocpu", Z80, XTAL_32MHz/8) /* 4MHz , 32MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(raizing_sound_z80_mem) @@ -4133,8 +4122,9 @@ static MACHINE_CONFIG_START( shippumd ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,bgaregga) @@ -4153,7 +4143,6 @@ static MACHINE_CONFIG_START( bgaregga ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_32MHz/2) /* 16MHz , 32MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(bgaregga_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq4) MCFG_CPU_ADD("audiocpu", Z80, XTAL_32MHz/8) /* 4MHz , 32MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(bgaregga_sound_z80_mem) @@ -4177,8 +4166,9 @@ static MACHINE_CONFIG_START( bgaregga ) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,bgaregga) @@ -4210,7 +4200,6 @@ static MACHINE_CONFIG_START( batrider ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_32MHz/2) /* 16MHz , 32MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(batrider_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq2) MCFG_CPU_ADD("audiocpu", Z80, XTAL_32MHz/8) /* 4MHz , 32MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(batrider_sound_z80_mem) @@ -4228,14 +4217,16 @@ static MACHINE_CONFIG_START( batrider ) //MCFG_SCREEN_SIZE(432, 262) //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_truxton2) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(toaplan2_state, screen_vblank_toaplan2)) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", batrider) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_2)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,batrider) @@ -4267,7 +4258,6 @@ static MACHINE_CONFIG_START( bbakraid ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_32MHz/2) /* 16MHz , 32MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(bbakraid_68k_mem) - MCFG_CPU_VBLANK_INT_DRIVER("screen", toaplan2_state, toaplan2_vblank_irq1) MCFG_CPU_ADD("audiocpu", Z80, XTAL_32MHz/6) /* 5.3333MHz , 32MHz Oscillator */ MCFG_CPU_PROGRAM_MAP(bbakraid_sound_z80_mem) @@ -4288,14 +4278,16 @@ static MACHINE_CONFIG_START( bbakraid ) //MCFG_SCREEN_SIZE(432, 262) //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_truxton2) + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(toaplan2_state, screen_vblank_toaplan2)) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", batrider) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0) + MCFG_DEVICE_ADD("gp9001", GP9001_VDP, XTAL_27MHz) MCFG_GFX_PALETTE("palette") + MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_1)) MCFG_VIDEO_START_OVERRIDE(toaplan2_state,batrider) diff --git a/src/mame/includes/toaplan2.h b/src/mame/includes/toaplan2.h index 51cf2e9923b..521f53933f8 100644 --- a/src/mame/includes/toaplan2.h +++ b/src/mame/includes/toaplan2.h @@ -21,11 +21,6 @@ class toaplan2_state : public driver_device { public: - enum - { - TIMER_RAISE_IRQ - }; - toaplan2_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_shared_ram(*this, "shared_ram"), @@ -87,8 +82,6 @@ public: bitmap_ind8 m_custom_priority_bitmap; bitmap_ind16 m_secondary_render_bitmap; - emu_timer * m_raise_irq_timer; - tilemap_t *m_tx_tilemap; /* Tilemap for extra-text-layer */ DECLARE_READ16_MEMBER(video_count_r); DECLARE_WRITE8_MEMBER(toaplan2_coin_w); @@ -166,18 +159,14 @@ public: uint32_t screen_update_truxton2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_bootleg(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(screen_vblank_toaplan2); - INTERRUPT_GEN_MEMBER(toaplan2_vblank_irq1); - INTERRUPT_GEN_MEMBER(toaplan2_vblank_irq2); - INTERRUPT_GEN_MEMBER(toaplan2_vblank_irq4); + IRQ_CALLBACK_MEMBER(fixeightbl_irq_ack); + IRQ_CALLBACK_MEMBER(pipibibsbl_irq_ack); INTERRUPT_GEN_MEMBER(bbakraid_snd_interrupt); void truxton2_postload(); void create_tx_tilemap(int dx = 0, int dx_flipped = 0); - void toaplan2_vblank_irq(int irq_line); DECLARE_WRITE8_MEMBER(pwrkick_coin_w); DECLARE_WRITE8_MEMBER(pwrkick_coin_lockout_w); DECLARE_WRITE_LINE_MEMBER(toaplan2_reset); -protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/mame/video/gp9001.cpp b/src/mame/video/gp9001.cpp index 6fcf7e3bf44..a8ccd177b02 100644 --- a/src/mame/video/gp9001.cpp +++ b/src/mame/video/gp9001.cpp @@ -223,7 +223,8 @@ gp9001vdp_device::gp9001vdp_device(const machine_config &mconfig, const char *ta m_vram_bg(*this, "vram_bg"), m_vram_fg(*this, "vram_fg"), m_vram_top(*this, "vram_top"), - m_spriteram(*this, "spriteram") + m_spriteram(*this, "spriteram"), + m_vint_out_cb(*this) { } @@ -297,6 +298,10 @@ void gp9001vdp_device::device_start() create_tilemaps(); + m_vint_out_cb.resolve(); + + m_raise_irq_timer = timer_alloc(TIMER_RAISE_IRQ); + save_pointer(NAME(sp.vram16_buffer.get()), SPRITERAM_SIZE/2); save_item(NAME(gp9001_scroll_reg)); @@ -357,6 +362,10 @@ void gp9001vdp_device::device_reset() sp.flip = 0; init_scroll_regs(); + + if (!m_vint_out_cb.isnull()) + m_vint_out_cb(0); + m_raise_irq_timer->adjust(attotime::never); } @@ -503,7 +512,7 @@ void gp9001vdp_device::gp9001_scroll_reg_data_w(uint16_t data, uint16_t mem_mask case 0x0e: /******* Initialise video controller register ? *******/ - case 0x0f: break; + case 0x0f: if (!m_vint_out_cb.isnull()) m_vint_out_cb(0); break; default: logerror("Hmmm, writing %08x to unknown video control register (%08x) !!!\n",data,gp9001_scroll_reg); @@ -922,4 +931,21 @@ void gp9001vdp_device::gp9001_screen_eof(void) { /** Shift sprite RAM buffers *** Used to fix sprite lag **/ if (sp.use_sprite_buffer) memcpy(sp.vram16_buffer.get(),m_spriteram,SPRITERAM_SIZE); + + // the IRQ appears to fire at line 0xe6 + if (!m_vint_out_cb.isnull()) + m_raise_irq_timer->adjust(screen().time_until_pos(0xe6)); +} + + +void gp9001vdp_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch (id) + { + case TIMER_RAISE_IRQ: + m_vint_out_cb(1); + break; + default: + assert_always(false, "Unknown id in gp9001vdp_device::device_timer"); + } } diff --git a/src/mame/video/gp9001.h b/src/mame/video/gp9001.h index 703d4e08ee5..e5b053100e6 100644 --- a/src/mame/video/gp9001.h +++ b/src/mame/video/gp9001.h @@ -6,14 +6,23 @@ #pragma once +#define MCFG_GP9001_VINT_CALLBACK(_devcb) \ + devcb = &gp9001vdp_device::set_vint_out_cb(*device, DEVCB_##_devcb); + class gp9001vdp_device : public device_t, public device_gfx_interface, public device_video_interface, public device_memory_interface { + enum + { + TIMER_RAISE_IRQ + }; + public: gp9001vdp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template static devcb_base &set_vint_out_cb(device_t &device, Object &&obj) { return downcast(device).m_vint_out_cb.set_callback(std::forward(obj)); } void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, const uint8_t* primap ); void gp9001_draw_custom_tilemap( bitmap_ind16 &bitmap, tilemap_t* tilemap, const uint8_t* priremap, const uint8_t* pri_enable ); @@ -65,6 +74,7 @@ public: protected: virtual void device_start() override; virtual void device_reset() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; @@ -159,6 +169,9 @@ private: required_shared_ptr m_vram_fg; required_shared_ptr m_vram_top; required_shared_ptr m_spriteram; + + devcb_write_line m_vint_out_cb; + emu_timer *m_raise_irq_timer; }; DECLARE_DEVICE_TYPE(GP9001_VDP, gp9001vdp_device) -- cgit v1.2.3