summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/marineb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/marineb.cpp')
-rw-r--r--src/mame/drivers/marineb.cpp31
1 files changed, 22 insertions, 9 deletions
diff --git a/src/mame/drivers/marineb.cpp b/src/mame/drivers/marineb.cpp
index ded73a301e0..f49c32879c8 100644
--- a/src/mame/drivers/marineb.cpp
+++ b/src/mame/drivers/marineb.cpp
@@ -58,11 +58,21 @@ void marineb_state::machine_reset()
void marineb_state::machine_start()
{
+ save_item(NAME(m_irq_mask));
}
WRITE_LINE_MEMBER(marineb_state::irq_mask_w)
{
m_irq_mask = state;
+ if (!m_irq_mask)
+ m_maincpu->set_input_line(0, CLEAR_LINE);
+}
+
+WRITE_LINE_MEMBER(marineb_state::nmi_mask_w)
+{
+ m_irq_mask = state;
+ if (!m_irq_mask)
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
void marineb_state::marineb_map(address_map &map)
@@ -516,16 +526,16 @@ static GFXDECODE_START( hopprobo )
GFXDECODE_ENTRY( "gfx2", 0x0000, marineb_big_spritelayout, 0, 64 )
GFXDECODE_END
-INTERRUPT_GEN_MEMBER(marineb_state::marineb_vblank_irq)
+WRITE_LINE_MEMBER(marineb_state::marineb_vblank_irq)
{
- if(m_irq_mask)
- device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
+ if (state && m_irq_mask)
+ m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
-INTERRUPT_GEN_MEMBER(marineb_state::wanted_vblank_irq)
+WRITE_LINE_MEMBER(marineb_state::wanted_vblank_irq)
{
- if(m_irq_mask)
- device.execute().set_input_line(0, HOLD_LINE);
+ if (state && m_irq_mask)
+ m_maincpu->set_input_line(0, HOLD_LINE);
}
@@ -535,10 +545,9 @@ MACHINE_CONFIG_START(marineb_state::marineb)
MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) /* 3 MHz? */
MCFG_CPU_PROGRAM_MAP(marineb_map)
MCFG_CPU_IO_MAP(marineb_io_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", marineb_state, marineb_vblank_irq)
MCFG_DEVICE_ADD("outlatch", LS259, 0)
- MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(marineb_state, irq_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(marineb_state, nmi_mask_w))
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(marineb_state, flipscreen_y_w))
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(marineb_state, flipscreen_x_w))
@@ -550,6 +559,7 @@ MACHINE_CONFIG_START(marineb_state::marineb)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MCFG_SCREEN_UPDATE_DRIVER(marineb_state, screen_update_marineb)
MCFG_SCREEN_PALETTE("palette")
+ MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(marineb_state, marineb_vblank_irq))
MCFG_GFXDECODE_ADD("gfxdecode", "palette", marineb)
MCFG_PALETTE_ADD("palette", 256)
@@ -606,12 +616,15 @@ MACHINE_CONFIG_START(marineb_state::wanted)
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_IO_MAP(wanted_io_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", marineb_state, wanted_vblank_irq)
+
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(marineb_state, irq_mask_w))
/* video hardware */
MCFG_GFXDECODE_MODIFY("gfxdecode", wanted)
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_UPDATE_DRIVER(marineb_state, screen_update_springer)
+ MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(marineb_state, wanted_vblank_irq))
// sound hardware (PSG type verified only for bcruzm12)
MCFG_SOUND_REPLACE("ay1", AY8912, SOUND_CLOCK)