toaplan2.cpp: Generate (and acknowledge) video interrupts within VDP

This commit is contained in:
AJR 2017-06-07 20:38:29 -04:00
parent 20ac866d56
commit 97303de706
4 changed files with 96 additions and 76 deletions

View File

@ -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)

View File

@ -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;
};

View File

@ -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");
}
}

View File

@ -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<class Object> static devcb_base &set_vint_out_cb(device_t &device, Object &&obj) { return downcast<gp9001vdp_device &>(device).m_vint_out_cb.set_callback(std::forward<Object>(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<uint16_t> m_vram_fg;
required_shared_ptr<uint16_t> m_vram_top;
required_shared_ptr<uint16_t> m_spriteram;
devcb_write_line m_vint_out_cb;
emu_timer *m_raise_irq_timer;
};
DECLARE_DEVICE_TYPE(GP9001_VDP, gp9001vdp_device)