X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fmode4.c;h=1462dde5de7613af5d4d4d4066498f59d1b15587;hb=679af8a3f466a2a4a20f58e4181a231fb73e9836;hp=095250f9f0ac54631270b68175c73543c8be114f;hpb=87b0845f3733166b491ae236feb8bc2eb0fca2ec;p=picodrive.git diff --git a/pico/mode4.c b/pico/mode4.c index 095250f..1462dde 100644 --- a/pico/mode4.c +++ b/pico/mode4.c @@ -8,7 +8,7 @@ */ #include "pico_int.h" -static void (*FinalizeLineM4)(void); +static void (*FinalizeLineM4)(int line); static int skip_next_line; static int screen_offset; @@ -190,17 +190,26 @@ static void DrawDisplayM4(int scanline) void PicoFrameStartMode4(void) { + int lines = 192; skip_next_line = 0; screen_offset = 24; - rendstatus = PDRAW_192LINES; + rendstatus = PDRAW_32_COLS; + if ((Pico.video.reg[0] & 6) == 6 && (Pico.video.reg[1] & 0x18)) { - rendstatus &= ~PDRAW_192LINES; if (Pico.video.reg[1] & 0x08) { screen_offset = 0; - rendstatus |= PDRAW_240LINES; + lines = 240; } - else // it's 224 lines + else { screen_offset = 8; + lines = 224; + } + } + + if (rendstatus != rendstatus_old || lines != rendlines) { + rendstatus_old = rendstatus; + rendlines = lines; + emu_video_mode_change(screen_offset, lines, 1); } } @@ -220,7 +229,7 @@ void PicoLineMode4(int line) DrawDisplayM4(line); if (FinalizeLineM4 != NULL) - FinalizeLineM4(); + FinalizeLineM4(line); if (PicoScanEnd != NULL) skip_next_line = PicoScanEnd(line + screen_offset); @@ -249,30 +258,24 @@ void PicoDoHighPal555M4(void) } } -static void FinalizeLineRGB555M4(void) +static void FinalizeLineRGB555M4(int line) { - unsigned short *pd=DrawLineDest; - unsigned char *ps=HighCol+8; - unsigned short *pal=HighPal; - int i; - if (Pico.m.dirtyPal) PicoDoHighPal555M4(); - if (!(PicoOpt & POPT_DIS_32C_BORDER)) - pd += 32; - - for (i = 256/4; i > 0; i--) { - *pd++ = pal[*ps++]; - *pd++ = pal[*ps++]; - *pd++ = pal[*ps++]; - *pd++ = pal[*ps++]; - } + // standard FinalizeLine can finish it for us, + // with features like scaling and such + FinalizeLineRGB555(0, line); } -static void FinalizeLine8bitM4(void) +static void FinalizeLine8bitM4(int line) { - memcpy32(DrawLineDest, (int *)(HighCol+8), 256/4); + unsigned char *pd = DrawLineDest; + + if (!(PicoOpt & POPT_DIS_32C_BORDER)) + pd += 32; + + memcpy32((int *)pd, (int *)(HighCol+8), 256/4); } void PicoDrawSetColorFormatMode4(int which)