mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
sms: improve sr a bit
This commit is contained in:
parent
7669591e08
commit
1c25c32c11
2 changed files with 16 additions and 4 deletions
11
pico/mode4.c
11
pico/mode4.c
|
@ -91,7 +91,7 @@ static void draw_sprites(int scanline)
|
||||||
}
|
}
|
||||||
sprite_base = (pv->reg[6] & 4) << (13-2-1);
|
sprite_base = (pv->reg[6] & 4) << (13-2-1);
|
||||||
|
|
||||||
for (i = s = 0; i < 64 && s < 8; i++)
|
for (i = s = 0; i < 64; i++)
|
||||||
{
|
{
|
||||||
int y;
|
int y;
|
||||||
y = sat[i] + 1;
|
y = sat[i] + 1;
|
||||||
|
@ -99,6 +99,10 @@ static void draw_sprites(int scanline)
|
||||||
break;
|
break;
|
||||||
if (y + h <= scanline || scanline < y)
|
if (y + h <= scanline || scanline < y)
|
||||||
continue; // not on this line
|
continue; // not on this line
|
||||||
|
if (s >= 8) {
|
||||||
|
pv->status |= SR_SOVR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
sprites_x[s] = xoff + sat[0x80 + i*2];
|
sprites_x[s] = xoff + sat[0x80 + i*2];
|
||||||
sprites_addr[s] = sprite_base + ((sat[0x80 + i*2 + 1] & addr_mask) << (5-1)) +
|
sprites_addr[s] = sprite_base + ((sat[0x80 + i*2 + 1] & addr_mask) << (5-1)) +
|
||||||
|
@ -106,6 +110,10 @@ static void draw_sprites(int scanline)
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// really half-assed but better than nothing
|
||||||
|
if (s > 1)
|
||||||
|
pv->status |= SR_C;
|
||||||
|
|
||||||
// now draw all sprites backwards
|
// now draw all sprites backwards
|
||||||
for (--s; s >= 0; s--)
|
for (--s; s >= 0; s--)
|
||||||
TileNormM4(sprites_x[s], sprites_addr[s], 0x10);
|
TileNormM4(sprites_x[s], sprites_addr[s], 0x10);
|
||||||
|
@ -300,3 +308,4 @@ void PicoDrawSetOutputMode4(pdso_t which)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// vim:shiftwidth=2:ts=2:expandtab
|
||||||
|
|
|
@ -31,9 +31,12 @@ static unsigned char vdp_data_read(void)
|
||||||
|
|
||||||
static unsigned char vdp_ctl_read(void)
|
static unsigned char vdp_ctl_read(void)
|
||||||
{
|
{
|
||||||
unsigned char d = Pico.video.pending_ints << 7;
|
struct PicoVideo *pv = &Pico.video;
|
||||||
Pico.video.pending = 0;
|
unsigned char d;
|
||||||
Pico.video.pending_ints = 0;
|
|
||||||
|
d = pv->status | (pv->pending_ints << 7);
|
||||||
|
pv->pending = pv->pending_ints = 0;
|
||||||
|
pv->status = 0;
|
||||||
|
|
||||||
elprintf(EL_SR, "VDP sr: %02x", d);
|
elprintf(EL_SR, "VDP sr: %02x", d);
|
||||||
return d;
|
return d;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue