From 1e612ed0c84f46f08a380069550ba9606c726e01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Banaan=20Ananas?= Date: Mon, 29 Aug 2011 12:17:31 +0000 Subject: [PATCH] small fix for MESS --- src/emu/video/tms9928a.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/emu/video/tms9928a.c b/src/emu/video/tms9928a.c index 4b9bba35dd8..77696556c09 100644 --- a/src/emu/video/tms9928a.c +++ b/src/emu/video/tms9928a.c @@ -469,11 +469,15 @@ void tms9928a_device::device_timer(emu_timer &timer, device_timer_id id, int par UINT8 sprite_height = sprite_size * ( sprite_mag + 1 ); UINT8 spr_drawn[32+256+32] = { 0 }; UINT8 num_sprites = 0; + bool fifth_encountered = false; for ( UINT16 sprattr = 0; sprattr < 128; sprattr += 4 ) { int spr_y = m_vMem[ m_spriteattribute + sprattr + 0 ]; + if (!fifth_encountered) + m_FifthSprite = sprattr / 4; + /* Stop processing sprites */ if ( spr_y == 208 ) break; @@ -496,15 +500,7 @@ void tms9928a_device::device_timer(emu_timer &timer, device_timer_id id, int par /* Fifth sprite encountered? */ if( num_sprites == 5 ) - { - m_FifthSprite = sprattr / 4; - - if (~m_StatusReg & 0x40) - { - m_StatusReg |= m_FifthSprite; - if (~m_StatusReg & 0x80) m_StatusReg |= 0x40; - } - } + fifth_encountered = true; if ( sprite_mag ) pataddr += ( ( ( y - spr_y ) & 0x1F ) >> 1 ); @@ -552,6 +548,14 @@ void tms9928a_device::device_timer(emu_timer &timer, device_timer_id id, int par } } } + + /* Update sprite overflow bits */ + if (~m_StatusReg & 0x40) + { + m_StatusReg |= m_FifthSprite; + if (fifth_encountered && ~m_StatusReg & 0x80) + m_StatusReg |= 0x40; + } } /* Right border */