diff options
Diffstat (limited to 'src/devices/video/mc6845.cpp')
-rw-r--r-- | src/devices/video/mc6845.cpp | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/src/devices/video/mc6845.cpp b/src/devices/video/mc6845.cpp index 1e9f7fe7b66..7cec011be11 100644 --- a/src/devices/video/mc6845.cpp +++ b/src/devices/video/mc6845.cpp @@ -659,6 +659,28 @@ void mc6845_device::update_upd_adr_timer() } +bool mc6845_device::match_line() +{ + /* Check if we've reached the end of active display */ + if ( m_line_counter == m_vert_disp ) + { + m_line_enable_ff = false; + m_current_disp_addr = m_disp_start_addr; + } + + /* Check if VSYNC should be enabled */ + if ( m_line_counter == m_vert_sync_pos ) + { + m_vsync_width_counter = 0; + m_vsync_ff = 1; + + return true; + } + + return false; +} + + void mc6845_device::handle_line_timer() { bool new_vsync = m_vsync; @@ -698,21 +720,8 @@ void mc6845_device::handle_line_timer() m_line_counter = ( m_line_counter + 1 ) & 0x7F; m_line_address = ( m_line_address + m_horiz_disp ) & 0x3fff; - /* Check if we've reached the end of active display */ - if ( m_line_counter == m_vert_disp ) - { - m_line_enable_ff = false; - m_current_disp_addr = m_disp_start_addr; - } - - /* Check if VSYNC should be enabled */ - if ( m_line_counter == m_vert_sync_pos ) - { - m_vsync_width_counter = 0; - m_vsync_ff = 1; - + if (match_line()) new_vsync = true; - } } else { @@ -731,6 +740,10 @@ void mc6845_device::handle_line_timer() m_line_counter = 0; m_line_address = m_disp_start_addr; m_line_enable_ff = true; + + if (match_line()) + new_vsync = true; + /* also update the cursor state now */ update_cursor_state(); |