genesis: merge r874 from upstream (sprite corner-case fix)
This commit is contained in:
parent
100c67ebfa
commit
0f6dbd5570
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue