diff options
Diffstat (limited to 'src/mame/drivers/marineb.cpp')
-rw-r--r-- | src/mame/drivers/marineb.cpp | 31 |
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) |