void DrawTilesFromCache(int *hc, int sh, int rlim);\r
void DrawSpritesSHi(unsigned char *sprited);\r
void DrawLayer(int plane_sh, int *hcache, int cellskip, int maxcells);\r
-void FinalizeLineBGR444(int sh);\r
+void FinalizeLineBGR444(int sh, int line);\r
void *blockcpy(void *dst, const void *src, size_t n);\r
void blockcpy_or(void *dst, void *src, size_t n, int pat);\r
#else\r
}\r
}\r
\r
-static void FinalizeLineBGR444(int sh)\r
+static void FinalizeLineBGR444(int sh, int line)\r
{\r
unsigned short *pd=DrawLineDest;\r
unsigned char *ps=HighCol+8;\r
}\r
\r
\r
-void FinalizeLineRGB555(int sh)\r
+void FinalizeLineRGB555(int sh, int line)\r
{\r
unsigned short *pd=DrawLineDest;\r
unsigned char *ps=HighCol+8;\r
}\r
#endif\r
\r
-static void FinalizeLine8bit(int sh)\r
+static void FinalizeLine8bit(int sh, int line)\r
{\r
unsigned char *pd = DrawLineDest;\r
int len, rs = rendstatus;\r
}\r
}\r
\r
-static void (*FinalizeLine)(int sh);\r
+static void (*FinalizeLine)(int sh, int line);\r
\r
// --------------------------------------------\r
\r
PrepareSprites(1);\r
}\r
\r
-static void DrawBlankedLine(int line, int offs)\r
+static void DrawBlankedLine(int line, int offs, int sh, int bgc)\r
{\r
- int sh = (Pico.video.reg[0xC]&8)>>3; // shadow/hilight?\r
-\r
if (PicoScanBegin != NULL)\r
PicoScanBegin(line + offs);\r
\r
- BackFill(Pico.video.reg[7], sh);\r
+ BackFill(bgc, sh);\r
\r
if (FinalizeLine != NULL)\r
- FinalizeLine(sh);\r
+ FinalizeLine(sh, line);\r
\r
if (PicoScanEnd != NULL)\r
PicoScanEnd(line + offs);\r
}\r
\r
-static void PicoLine(int line, int offs)\r
+static void PicoLine(int line, int offs, int sh, int bgc)\r
{\r
- int sh;\r
if (skip_next_line > 0) {\r
skip_next_line--;\r
return;\r
}\r
\r
- sh=(Pico.video.reg[0xC]&8)>>3; // shadow/hilight?\r
-\r
DrawScanline = line;\r
if (PicoScanBegin != NULL)\r
skip_next_line = PicoScanBegin(line + offs);\r
\r
// Draw screen:\r
- BackFill(Pico.video.reg[7], sh);\r
+ BackFill(bgc, sh);\r
if (Pico.video.reg[1]&0x40)\r
DrawDisplay(sh);\r
\r
if (FinalizeLine != NULL)\r
- FinalizeLine(sh);\r
+ FinalizeLine(sh, line);\r
\r
if (PicoScanEnd != NULL)\r
skip_next_line = PicoScanEnd(line + offs);\r
void PicoDrawSync(int to, int blank_last_line)\r
{\r
int line, offs = 0;\r
+ int sh = (Pico.video.reg[0xC] & 8) >> 3; // shadow/hilight?\r
+ int bgc = Pico.video.reg[7];\r
\r
if (!(rendstatus & PDRAW_240LINES))\r
offs = 8;\r
\r
+ // need to know which pixels are bg for 32x\r
+ if (PicoAHW & PAHW_32X)\r
+ bgc = 0;\r
+\r
for (line = DrawScanline; line < to; line++)\r
{\r
#if !CAN_HANDLE_240_LINES\r
if (line >= 224) break;\r
#endif\r
- PicoLine(line, offs);\r
+ PicoLine(line, offs, sh, bgc);\r
}\r
\r
#if !CAN_HANDLE_240_LINES\r
if (line <= to)\r
{\r
if (blank_last_line)\r
- DrawBlankedLine(line, offs);\r
- else PicoLine(line, offs);\r
+ DrawBlankedLine(line, offs, sh, bgc);\r
+ else PicoLine(line, offs, sh, bgc);\r
line++;\r
}\r
DrawScanline = line;\r
switch (which)\r
{\r
case 2: FinalizeLine = FinalizeLine8bit; break;\r
- case 1: FinalizeLine = FinalizeLineRGB555; break;\r
+ case 1: FinalizeLine = (PicoAHW & PAHW_32X) ? FinalizeLine32xRGB555 : FinalizeLineRGB555; break;\r
case 0: FinalizeLine = FinalizeLineBGR444; break;\r
default:FinalizeLine = NULL; break;\r
}\r