X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fmode4.c;h=c945f6fecbe0c9dd99f8125bcf1130f4a5bbd4a5;hb=ea38612fad50103e224a3d00492d40b7dcff9e94;hp=3beb709d724ed93bbb6cf440a752366527b043b4;hpb=19954be1966a04304b16d9180b003ec8ca3bc532;p=picodrive.git diff --git a/pico/mode4.c b/pico/mode4.c index 3beb709..c945f6f 100644 --- a/pico/mode4.c +++ b/pico/mode4.c @@ -1,3 +1,10 @@ +/* + * mode4/SMS renderer + * (C) notaz, 2009-2010 + * + * This work is licensed under the terms of MAME license. + * See COPYING file in the top-level directory. + */ /* * TODO: * - TMS9918 modes? @@ -8,7 +15,7 @@ */ #include "pico_int.h" -static void (*FinalizeLineM4)(void); +static void (*FinalizeLineM4)(int line); static int skip_next_line; static int screen_offset; @@ -193,11 +200,10 @@ void PicoFrameStartMode4(void) int lines = 192; skip_next_line = 0; screen_offset = 24; - rendstatus = 0; + Pico.est.rendstatus = PDRAW_32_COLS; if ((Pico.video.reg[0] & 6) == 6 && (Pico.video.reg[1] & 0x18)) { if (Pico.video.reg[1] & 0x08) { - rendstatus |= PDRAW_240LINES; screen_offset = 0; lines = 240; } @@ -207,10 +213,13 @@ void PicoFrameStartMode4(void) } } - if (rendstatus != rendstatus_old) { - rendstatus_old = rendstatus; + if (Pico.est.rendstatus != rendstatus_old || lines != rendlines) { emu_video_mode_change(screen_offset, lines, 1); + rendstatus_old = Pico.est.rendstatus; + rendlines = lines; } + + DrawLineDest = (char *)DrawLineDestBase + screen_offset * DrawLineDestIncrement; } void PicoLineMode4(int line) @@ -229,10 +238,12 @@ void PicoLineMode4(int line) DrawDisplayM4(line); if (FinalizeLineM4 != NULL) - FinalizeLineM4(); + FinalizeLineM4(line); if (PicoScanEnd != NULL) skip_next_line = PicoScanEnd(line + screen_offset); + + DrawLineDest = (char *)DrawLineDest + DrawLineDestIncrement; } void PicoDoHighPal555M4(void) @@ -256,19 +267,20 @@ void PicoDoHighPal555M4(void) t |= (t >> 4) & 0x08610861; *dpal = t; } + HighPal[0xe0] = 0; } -static void FinalizeLineRGB555M4(void) +static void FinalizeLineRGB555M4(int line) { if (Pico.m.dirtyPal) PicoDoHighPal555M4(); // standard FinalizeLine can finish it for us, // with features like scaling and such - FinalizeLineRGB555(0); + FinalizeLine555(0, line, &Pico.est); } -static void FinalizeLine8bitM4(void) +static void FinalizeLine8bitM4(int line) { unsigned char *pd = DrawLineDest; @@ -278,13 +290,13 @@ static void FinalizeLine8bitM4(void) memcpy32((int *)pd, (int *)(HighCol+8), 256/4); } -void PicoDrawSetColorFormatMode4(int which) +void PicoDrawSetOutputMode4(pdso_t which) { switch (which) { - case 2: FinalizeLineM4 = FinalizeLine8bitM4; break; - case 1: FinalizeLineM4 = FinalizeLineRGB555M4; break; - default:FinalizeLineM4 = NULL; break; + case PDF_8BIT: FinalizeLineM4 = FinalizeLine8bitM4; break; + case PDF_RGB555: FinalizeLineM4 = FinalizeLineRGB555M4; break; + default: FinalizeLineM4 = NULL; break; } }