From 63afa61876dca14fcee603c2aa70c3c36dfce4b0 Mon Sep 17 00:00:00 2001 From: Wilbert Pol Date: Mon, 8 Sep 2014 19:54:21 +0000 Subject: [PATCH] (MESS) sms.c: Prevent vdp register 6 contents from being overwritten while a line is being drawn. Fixes title screen in backtof3. [Enik Land, Wilbert Pol] --- src/emu/video/315_5124.c | 9 ++++++--- src/emu/video/315_5124.h | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/emu/video/315_5124.c b/src/emu/video/315_5124.c index 5eab5d14d3a..c4fbdcebae3 100644 --- a/src/emu/video/315_5124.c +++ b/src/emu/video/315_5124.c @@ -156,6 +156,7 @@ sega315_5124_device::sega315_5124_device(const machine_config &mconfig, const ch , m_cram_size( SEGA315_5124_CRAM_SIZE ) , m_palette_offset( 0 ) , m_supports_224_240( false ) + , m_latched_reg6(0) , m_is_pal(false) , m_int_cb(*this) , m_pause_cb(*this) @@ -172,6 +173,7 @@ sega315_5124_device::sega315_5124_device(const machine_config &mconfig, device_t , m_cram_size( cram_size ) , m_palette_offset( palette_offset ) , m_supports_224_240( supports_224_240 ) + , m_latched_reg6(0) , m_is_pal(false) , m_int_cb(*this) , m_pause_cb(*this) @@ -367,6 +369,7 @@ void sega315_5124_device::device_timer(emu_timer &timer, device_timer_id id, int m_int_cb(ASSERT_LINE); } } + m_latched_reg6 = m_reg[0x06]; break; case TIMER_VINT: @@ -465,13 +468,13 @@ void sega315_5124_device::process_line_timer() if (m_line_counter == 0x00) { m_line_counter = m_reg[0x0a]; - m_hint_timer->adjust( m_screen->time_until_pos( vpos, HINT_HPOS ) ); m_pending_status |= STATUS_HINT; } else { m_line_counter--; } + m_hint_timer->adjust( m_screen->time_until_pos( vpos, HINT_HPOS ) ); /* Draw borders */ m_lborder_timer->adjust( m_screen->time_until_pos( vpos, SEGA315_5124_LBORDER_START ), vpos ); @@ -977,7 +980,7 @@ void sega315_5124_device::draw_sprites_mode4( int *line_buffer, int *priority_se sprite_x -= 0x08; /* sprite shift */ } - if (m_reg[0x06] & 0x04) + if (m_latched_reg6 & 0x04) { sprite_tile_selected += 256; /* pattern table select */ } @@ -1109,7 +1112,7 @@ void sega315_5124_device::draw_sprites_tms9918_mode( int *line_buffer, int line { bool sprite_col_occurred = false; int sprite_col_x = m_screen->width(); - UINT16 sprite_pattern_base = ((m_reg[0x06] & 0x07) << 11); + UINT16 sprite_pattern_base = ((m_latched_reg6 & 0x07) << 11); if (m_display_disabled) return; diff --git a/src/emu/video/315_5124.h b/src/emu/video/315_5124.h index 86d9ce7eaa9..f62c7f18433 100644 --- a/src/emu/video/315_5124.h +++ b/src/emu/video/315_5124.h @@ -144,6 +144,7 @@ protected: int m_sprite_count; int m_sprite_height; int m_sprite_zoom; + UINT8 m_latched_reg6; /* line_buffer will be used to hold 5 lines of line data. Line #0 is the regular blitting area. Lines #1-#4 will be used as a kind of cache to be used for vertical scaling in the gamegear