pd[x] = pal|t; \
}
-static int TileNormM4(int sx, int addr, int pal)
+static void TileNormM4(int sx, unsigned int pack, int pal)
{
unsigned char *pd = Pico.est.HighCol + sx;
- unsigned int pack, t;
-
- pack = *(unsigned int *)(PicoMem.vram + addr); /* Get 4 bitplanes / 8 pixels */
- if (pack)
- {
- PLANAR_PIXEL(0, 0)
- PLANAR_PIXEL(1, 1)
- PLANAR_PIXEL(2, 2)
- PLANAR_PIXEL(3, 3)
- PLANAR_PIXEL(4, 4)
- PLANAR_PIXEL(5, 5)
- PLANAR_PIXEL(6, 6)
- PLANAR_PIXEL(7, 7)
- return 0;
- }
+ unsigned int t;
- return 1; /* Tile blank */
+ PLANAR_PIXEL(0, 0)
+ PLANAR_PIXEL(1, 1)
+ PLANAR_PIXEL(2, 2)
+ PLANAR_PIXEL(3, 3)
+ PLANAR_PIXEL(4, 4)
+ PLANAR_PIXEL(5, 5)
+ PLANAR_PIXEL(6, 6)
+ PLANAR_PIXEL(7, 7)
}
-static int TileFlipM4(int sx,int addr,int pal)
+static void TileFlipM4(int sx, unsigned int pack, int pal)
{
unsigned char *pd = Pico.est.HighCol + sx;
- unsigned int pack, t;
-
- pack = *(unsigned int *)(PicoMem.vram + addr); /* Get 4 bitplanes / 8 pixels */
- if (pack)
- {
- PLANAR_PIXEL(0, 7)
- PLANAR_PIXEL(1, 6)
- PLANAR_PIXEL(2, 5)
- PLANAR_PIXEL(3, 4)
- PLANAR_PIXEL(4, 3)
- PLANAR_PIXEL(5, 2)
- PLANAR_PIXEL(6, 1)
- PLANAR_PIXEL(7, 0)
- return 0;
- }
+ unsigned int t;
- return 1; /* Tile blank */
+ PLANAR_PIXEL(0, 7)
+ PLANAR_PIXEL(1, 6)
+ PLANAR_PIXEL(2, 5)
+ PLANAR_PIXEL(3, 4)
+ PLANAR_PIXEL(4, 3)
+ PLANAR_PIXEL(5, 2)
+ PLANAR_PIXEL(6, 1)
+ PLANAR_PIXEL(7, 0)
}
static void draw_sprites(int scanline)
struct PicoVideo *pv = &Pico.video;
unsigned int sprites_addr[8];
unsigned int sprites_x[8];
+ unsigned int pack;
unsigned char *sat;
int xoff = 8; // relative to HighCol, which is (screen - 8)
int sprite_base, addr_mask;
pv->status |= SR_C;
// now draw all sprites backwards
- for (--s; s >= 0; s--)
- TileNormM4(sprites_x[s], sprites_addr[s], 0x10);
+ for (--s; s >= 0; s--) {
+ pack = *(unsigned int *)(PicoMem.vram + sprites_addr[s]);
+ TileNormM4(sprites_x[s], pack, 0x10);
+ }
}
// tilex_ty_prio merged to reduce register pressure
// Draw tiles across screen:
for (; cells > 0; dx += 8, tilex_ty_prio++, cells--)
{
- int code, zero;
+ unsigned int pack;
+ int code;
code = nametab[tilex_ty_prio & 0x1f];
if (code == blank)
pal = (code>>7) & 0x10;
}
- if (code&0x0200) zero = TileFlipM4(dx, addr, pal);
- else zero = TileNormM4(dx, addr, pal);
-
- if (zero)
- blank = code; // We know this tile is blank now
+ pack = *(unsigned int *)(PicoMem.vram + addr); /* Get 4 bitplanes / 8 pixels */
+ if (pack == 0) {
+ blank = code;
+ continue;
+ }
+ if (code & 0x0200) TileFlipM4(dx, pack, pal);
+ else TileNormM4(dx, pack, pal);
}
}