From 25565246d887a6da10494833f5d7ce5821242194 Mon Sep 17 00:00:00 2001 From: angelosa Date: Wed, 22 Nov 2017 04:42:43 +0100 Subject: MT #00525 (nw) --- src/mame/drivers/metro.cpp | 32 ++++++++++++++++++++++++++------ src/mame/includes/metro.h | 2 ++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/mame/drivers/metro.cpp b/src/mame/drivers/metro.cpp index 6b0fe78b2f5..6734362c730 100644 --- a/src/mame/drivers/metro.cpp +++ b/src/mame/drivers/metro.cpp @@ -108,7 +108,6 @@ driver modified by Hau #include "sound/ym2413.h" #include "sound/2610intf.h" #include "sound/ymf278b.h" - #include "speaker.h" @@ -226,6 +225,25 @@ INTERRUPT_GEN_MEMBER(metro_state::metro_periodic_interrupt) update_irq_state(); } +TIMER_DEVICE_CALLBACK_MEMBER(metro_state::bangball_scanline) +{ + int scanline = param; + + // vblank irq + if(scanline == 224) + { + m_requested_int[m_vblank_bit] = 1; + m_requested_int[4] = 1; // ??? + update_irq_state(); + } + else if(scanline < 224 && (*m_irq_enable & 2) == 0) + { + // pretty likely hblank irq (pressing a button when clearing a stage) + m_requested_int[1] = 1; + update_irq_state(); + } +} + /* lev 2-7 (lev 1 seems sound related) */ INTERRUPT_GEN_MEMBER(metro_state::karatour_interrupt) { @@ -3152,9 +3170,10 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( bangball, msgogo ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(bangball_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt) - MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 60) // ? - + MCFG_CPU_VBLANK_INT_REMOVE() + MCFG_CPU_PERIODIC_INT_REMOVE() + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", metro_state, bangball_scanline, "screen", 0, 1) + // doesn't like 58.2 Hz MCFG_DEVICE_MODIFY("screen") MCFG_SCREEN_REFRESH_RATE(60) @@ -3163,8 +3182,9 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( batlbubl, msgogo ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(batlbubl_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt) - MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 60) // ? + MCFG_CPU_VBLANK_INT_REMOVE() + MCFG_CPU_PERIODIC_INT_REMOVE() + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", metro_state, bangball_scanline, "screen", 0, 1) // doesn't like 58.2 Hz MCFG_DEVICE_MODIFY("screen") diff --git a/src/mame/includes/metro.h b/src/mame/includes/metro.h index d1692e70cb0..7c66b057575 100644 --- a/src/mame/includes/metro.h +++ b/src/mame/includes/metro.h @@ -13,6 +13,7 @@ #include "video/imagetek_i4100.h" #include "machine/eepromser.h" #include "machine/gen_latch.h" +#include "machine/timer.h" #include "screen.h" class metro_state : public driver_device @@ -102,6 +103,7 @@ public: uint32_t screen_update_psac_vdp2_mix(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(metro_vblank_interrupt); INTERRUPT_GEN_MEMBER(metro_periodic_interrupt); + TIMER_DEVICE_CALLBACK_MEMBER(bangball_scanline); INTERRUPT_GEN_MEMBER(karatour_interrupt); INTERRUPT_GEN_MEMBER(puzzlet_interrupt); IRQ_CALLBACK_MEMBER(metro_irq_callback); -- cgit v1.2.3