From 0f6dbd5570b3de741f2dce5b52a4ccec4c306c07 Mon Sep 17 00:00:00 2001 From: goyuken Date: Fri, 11 Jul 2014 18:55:43 +0000 Subject: [PATCH] genesis: merge r874 from upstream (sprite corner-case fix) --- .../Consoles/Sega/gpgx/GPGX.cs | 2 +- genplus-gx/core/vdp_render.c | 64 ++++++++++-------- output/dll/libgenplusgx.dll | Bin 1916416 -> 1916416 bytes 3 files changed, 36 insertions(+), 30 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx/GPGX.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx/GPGX.cs index 6e512bd9fe..7235608de1 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx/GPGX.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx/GPGX.cs @@ -21,7 +21,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx "", isPorted: true, isReleased: true, - portedVersion: "r872", + portedVersion: "r874", portedUrl: "https://code.google.com/p/genplus-gx/" )] public class GPGX : IEmulator, ISyncSoundProvider, IVideoProvider diff --git a/genplus-gx/core/vdp_render.c b/genplus-gx/core/vdp_render.c index a0d1880700..eb763b7c74 100644 --- a/genplus-gx/core/vdp_render.c +++ b/genplus-gx/core/vdp_render.c @@ -3862,44 +3862,50 @@ void parse_satb_m5(int line) do { - /* Read Y position & size from internal SAT */ + /* Read Y position from internal SAT cache */ ypos = (q[link] >> im2_flag) & 0x1FF; - size = q[link + 1] >> 8; - /* Sprite height */ - height = 8 + ((size & 3) << 3); - - /* Y range */ - ypos = line - ypos; - - /* Sprite is visble on this line ? */ - if ((ypos >= 0) && (ypos < height)) + /* Check if sprite Y position has been reached */ + if (line >= ypos) { - /* Sprite overflow */ - if (count == max) + /* Read sprite size from internal SAT cache */ + size = q[link + 1] >> 8; + + /* Sprite height */ + height = 8 + ((size & 3) << 3); + + /* Y range */ + ypos = line - ypos; + + /* Check if sprite is visible on current line */ + if (ypos < height) { - status |= 0x40; - break; + /* Sprite overflow */ + if (count == max) + { + status |= 0x40; + break; + } + + /* Update sprite list (only name, attribute & xpos are parsed from VRAM) */ + object_info->attr = p[link + 2]; + object_info->xpos = p[link + 3] & 0x1ff; + object_info->ypos = ypos; + object_info->size = size & 0x0f; + + /* Increment Sprite count */ + ++count; + + /* Next sprite entry */ + object_info++; } - - /* Update sprite list (only name, attribute & xpos are parsed from VRAM) */ - object_info->attr = p[link + 2]; - object_info->xpos = p[link + 3] & 0x1ff; - object_info->ypos = ypos; - object_info->size = size & 0x0f; - - /* Increment Sprite count */ - ++count; - - /* Next sprite entry */ - object_info++; } - /* Read link data from internal SAT */ + /* Read link data from internal SAT cache */ link = (q[link + 1] & 0x7F) << 2; - /* Last sprite */ - if (link == 0) break; + /* Stop parsing if link data points to first entry (#0) or after the last entry (#64 in H32 mode, #80 in H40 mode) */ + if ((link == 0) || (link >= bitmap.viewport.w)) break; } while (--total); diff --git a/output/dll/libgenplusgx.dll b/output/dll/libgenplusgx.dll index defe8a7b01c97a7119027b6f7e9fdef545069d61..18fc402ec5ee7c8c91c768bcf749b2089fbad8ec 100644 GIT binary patch delta 6965 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 Tx1>F|19Si#L%AiL-q`Y2n9v20 delta 6943 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