relocated scanline timer start at the first active pixel instead of left border, this makes vdp interrupt timing accurate

This commit is contained in:
Michaël Banaan Ananas 2012-09-03 21:00:28 +00:00
parent 900ddb7a9b
commit b9e1ceeff4

View File

@ -300,7 +300,7 @@ void tms9928a_device::device_timer(emu_timer &timer, device_timer_id id, int par
for ( int i = 0; i < TMS9928A_TOTAL_HORZ; i++ )
p[i] = BackColour;
/* vblank is set 1 line after end of active display */
/* vblank is set at the last cycle of the first inactive line */
if ( y == 193 )
{
m_StatusReg |= 0x80;
@ -581,7 +581,7 @@ void tms9928a_device::device_timer(emu_timer &timer, device_timer_id id, int par
}
/* Schedule next callback */
m_line_timer->adjust( m_screen->time_until_pos( ( raw_vpos + 1 ) % m_screen->height() , 0 ) );
m_line_timer->adjust( m_screen->time_until_pos( ( raw_vpos + 1 ) % m_screen->height() , TMS9928A_HORZ_DISPLAY_START ) );
}
@ -672,6 +672,6 @@ void tms9928a_device::device_reset()
m_latch = 0;
m_mode = 0;
m_line_timer->adjust( m_screen->time_until_pos( 0, 0 ) );
m_line_timer->adjust( m_screen->time_until_pos( 0, TMS9928A_HORZ_DISPLAY_START ) );
}