From 474a76b00de14e8d4c832852f695b10049694dec Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 24 Nov 2018 13:09:24 +0100 Subject: deco_irq: alternate fix for dragngun lockup (nw) --- src/mame/machine/deco_irq.cpp | 8 ++++---- src/mame/video/deco16ic.cpp | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/mame/machine/deco_irq.cpp b/src/mame/machine/deco_irq.cpp index a6f8e38df47..28144df49c3 100644 --- a/src/mame/machine/deco_irq.cpp +++ b/src/mame/machine/deco_irq.cpp @@ -63,7 +63,7 @@ void deco_irq_device::device_start() // allocate scanline timer and start it m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(deco_irq_device::scanline_callback), this)); - m_scanline_timer->adjust(m_screen->time_until_pos(0, m_screen->visible_area().right() + 1)); + m_scanline_timer->adjust(m_screen->time_until_pos(0)); // register for save states save_item(NAME(m_lightgun_irq)); @@ -93,7 +93,7 @@ TIMER_CALLBACK_MEMBER( deco_irq_device::scanline_callback ) uint16_t y = m_screen->vpos(); // raster irq? - if (m_raster_irq_scanline >= visible.top() && m_raster_irq_scanline <= visible.bottom() && y == (m_raster_irq_scanline - 1)) + if (m_raster_irq_scanline >= visible.top() && m_raster_irq_scanline <= visible.bottom() && y == m_raster_irq_scanline) { if (!m_raster_irq_masked) { @@ -115,14 +115,14 @@ TIMER_CALLBACK_MEMBER( deco_irq_device::scanline_callback ) } // vblank-in? - if (y == visible.bottom()) + if (y == (visible.bottom() + 1)) { m_vblank_irq = true; m_vblank_irq_cb(ASSERT_LINE); } // wait for next line - m_scanline_timer->adjust(m_screen->time_until_pos(y + 1, visible.right() + 1)); + m_scanline_timer->adjust(m_screen->time_until_pos(y + 1)); } diff --git a/src/mame/video/deco16ic.cpp b/src/mame/video/deco16ic.cpp index 9bee26d4253..0943f16d649 100644 --- a/src/mame/video/deco16ic.cpp +++ b/src/mame/video/deco16ic.cpp @@ -621,7 +621,9 @@ READ16_MEMBER( deco16ic_device::pf2_data_r ) WRITE16_MEMBER( deco16ic_device::pf_control_w ) { - screen().update_partial(screen().vpos()); + // update until current scanline (inclusive if we're in hblank) + int ydelta = (screen().hpos() > screen().visible_area().right()) ? 0 : 1; + screen().update_partial(screen().vpos() - ydelta); COMBINE_DATA(&m_pf12_control[offset]); } -- cgit v1.2.3