From 12d8a146aa09ba3a2540bc190bc133095aaf74c1 Mon Sep 17 00:00:00 2001 From: AmatCoder Date: Thu, 7 Mar 2019 16:08:14 +0100 Subject: mc6845.cpp: Check if vsync should be enabled when frame is reset Fix MT 06927 --- src/devices/video/mc6845.cpp | 41 +++++++++++++++++++++++++++-------------- src/devices/video/mc6845.h | 1 + 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/devices/video/mc6845.cpp b/src/devices/video/mc6845.cpp index fe8e4a0119b..4fbf9f5dfa2 100644 --- a/src/devices/video/mc6845.cpp +++ b/src/devices/video/mc6845.cpp @@ -657,6 +657,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; @@ -696,21 +718,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 { @@ -729,6 +738,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(); diff --git a/src/devices/video/mc6845.h b/src/devices/video/mc6845.h index 0fa337789e0..1bb0683ee85 100644 --- a/src/devices/video/mc6845.h +++ b/src/devices/video/mc6845.h @@ -211,6 +211,7 @@ protected: void set_hsync(int state); void set_vsync(int state); void set_cur(int state); + bool match_line(); void handle_line_timer(); virtual void update_cursor_state(); virtual uint8_t draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle &cliprect); -- cgit v1.2.3