unsigned char HighLnSpr[240][3 + MAX_LINE_SPRITES]; // sprite_count, ^flags, tile_count, [spritep]...\r
\r
int rendstatus, rendstatus_old;\r
+int rendlines;\r
int DrawScanline;\r
int PicoDrawMask = -1;\r
\r
// MUST be called every frame\r
PICO_INTERNAL void PicoFrameStart(void)\r
{\r
+ int lines = 224;\r
+\r
// prepare to do this frame\r
rendstatus = 0;\r
- if ((Pico.video.reg[12]&6) == 6)\r
+ if ((Pico.video.reg[12] & 6) == 6)\r
rendstatus |= PDRAW_INTERLACE; // interlace mode\r
+ if (!(Pico.video.reg[12] & 1))\r
+ rendstatus |= PDRAW_32_COLS;\r
if (Pico.video.reg[1] & 8)\r
- rendstatus |= PDRAW_240LINES;\r
+ lines = 240;\r
\r
DrawScanline = 0;\r
skip_next_line = 0;\r
\r
- if (rendstatus != rendstatus_old) {\r
+ if (rendstatus != rendstatus_old || lines != rendlines) {\r
+ rendlines = lines;\r
rendstatus_old = rendstatus;\r
- emu_video_mode_change((rendstatus & PDRAW_240LINES) ? 0 : 8,\r
- (rendstatus & PDRAW_240LINES) ? 240 : 224,\r
- (Pico.video.reg[12] & 1) ? 0 : 1);\r
+ emu_video_mode_change((lines == 240) ? 0 : 8,\r
+ lines, (Pico.video.reg[12] & 1) ? 0 : 1);\r
}\r
\r
if (PicoOpt & POPT_ALT_RENDERER)\r
\r
static void PicoLine(int line, int offs, int sh, int bgc)\r
{\r
+ int skip = 0;\r
+\r
if (skip_next_line > 0) {\r
skip_next_line--;\r
return;\r
\r
DrawScanline = line;\r
if (PicoScanBegin != NULL)\r
- skip_next_line = PicoScanBegin(line + offs);\r
+ skip = PicoScanBegin(line + offs);\r
+\r
+ if (skip) {\r
+ skip_next_line = skip - 1;\r
+ return;\r
+ }\r
\r
// Draw screen:\r
BackFill(bgc, sh);\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
+ if (rendlines != 240)\r
offs = 8;\r
\r
// need to know which pixels are bg for 32x\r