mirror of
https://github.com/holub/mame
synced 2025-06-23 12:58:37 +03:00
deco_irq: alternate fix for dragngun lockup (nw)
This commit is contained in:
parent
ac7590f8ee
commit
474a76b00d
@ -63,7 +63,7 @@ void deco_irq_device::device_start()
|
|||||||
|
|
||||||
// allocate scanline timer and start it
|
// 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 = 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
|
// register for save states
|
||||||
save_item(NAME(m_lightgun_irq));
|
save_item(NAME(m_lightgun_irq));
|
||||||
@ -93,7 +93,7 @@ TIMER_CALLBACK_MEMBER( deco_irq_device::scanline_callback )
|
|||||||
uint16_t y = m_screen->vpos();
|
uint16_t y = m_screen->vpos();
|
||||||
|
|
||||||
// raster irq?
|
// 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)
|
if (!m_raster_irq_masked)
|
||||||
{
|
{
|
||||||
@ -115,14 +115,14 @@ TIMER_CALLBACK_MEMBER( deco_irq_device::scanline_callback )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// vblank-in?
|
// vblank-in?
|
||||||
if (y == visible.bottom())
|
if (y == (visible.bottom() + 1))
|
||||||
{
|
{
|
||||||
m_vblank_irq = true;
|
m_vblank_irq = true;
|
||||||
m_vblank_irq_cb(ASSERT_LINE);
|
m_vblank_irq_cb(ASSERT_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// wait for next 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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -621,7 +621,9 @@ READ16_MEMBER( deco16ic_device::pf2_data_r )
|
|||||||
|
|
||||||
WRITE16_MEMBER( deco16ic_device::pf_control_w )
|
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]);
|
COMBINE_DATA(&m_pf12_control[offset]);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user