UIQ3 bugfixes, SVP drc indirect jumps, stuff
[picodrive.git] / platform / uiq3 / engine / vid.cpp
index bd1b3fd..ea3cf9b 100644 (file)
@@ -182,7 +182,7 @@ static void drawTextM2Fat(int x, int y, const char *text)
 static void drawTextFpsCenter0(const char *text)\r
 {\r
        if(!text) return;\r
-       drawTextM2(214, 216, text);\r
+       drawTextM2((Pico.video.reg[12]&1) ? 234 : 214, 216, text);\r
 }\r
 \r
 static void drawTextFpsFit0(const char *text)\r
@@ -206,7 +206,7 @@ static void drawTextFps0(const char *text)
 static void drawTextNoticeCenter0(const char *text)\r
 {\r
        if(!text) return;\r
-       drawTextM2(2, 216, text);\r
+       drawTextM2(42, 216, text);\r
 }\r
 \r
 static void drawTextNoticeFit0(const char *text)\r
@@ -250,12 +250,14 @@ static void fillLocalPal(void)
                memcpy32(localPal+0xc0, localPal+0x40, 0x40);\r
                localPal[0xe0] = 0x00000000; // reserved pixels for OSD\r
                localPal[0xf0] = 0x00ee0000;\r
-       } else if (rendstatus & 0x20) { // mid-frame palette changes\r
+       }\r
+       else if (rendstatus & PDRAW_SONIC_MODE) { // mid-frame palette changes\r
                vidConvCpyRGB32(localPal, Pico.cram, 0x40);\r
                vidConvCpyRGB32(localPal+0x40, HighPal, 0x40);\r
                vidConvCpyRGB32(localPal+0x80, HighPal+0x40, 0x40);\r
        } else {\r
                vidConvCpyRGB32(localPal, Pico.cram, 0x40);\r
+               memcpy32(localPal+0x80, localPal, 0x40); // for sprite prio mess\r
        }\r
 }\r
 \r
@@ -266,8 +268,6 @@ static void vidBlit_90(int full)
        unsigned char *ps = PicoDraw2FB+328*8;\r
        unsigned long *pd = (unsigned long *) screenbuff;\r
 \r
-       if (Pico.m.dirtyPal) fillLocalPal();\r
-\r
        if(Pico.video.reg[12]&1)\r
                vidConvCpy_90(pd, ps, localPal, 320/8);\r
        else {\r
@@ -284,8 +284,6 @@ static void vidBlit_270(int full)
        unsigned char *ps = PicoDraw2FB+328*8;\r
        unsigned long *pd = (unsigned long *) screenbuff;\r
 \r
-       if (Pico.m.dirtyPal) fillLocalPal();\r
-\r
        if(Pico.video.reg[12]&1)\r
                vidConvCpy_270(pd, ps, localPal, 320/8);\r
        else {\r
@@ -303,8 +301,6 @@ static void vidBlitCenter_0(int full)
        unsigned char *ps = PicoDraw2FB+328*8+8;\r
        unsigned long *pd = (unsigned long *) screenbuff;\r
 \r
-       if (Pico.m.dirtyPal) fillLocalPal();\r
-\r
        if(Pico.video.reg[12]&1) ps += 32;\r
        vidConvCpy_center_0(pd, ps, localPal);\r
        if(full) vidClear(pd + 224*256, 96);\r
@@ -316,8 +312,6 @@ static void vidBlitCenter_180(int full)
        unsigned char *ps = PicoDraw2FB+328*8+8;\r
        unsigned long *pd = (unsigned long *) screenbuff;\r
 \r
-       if (Pico.m.dirtyPal) fillLocalPal();\r
-\r
        if(Pico.video.reg[12]&1) ps += 32;\r
        vidConvCpy_center_180(pd, ps, localPal);\r
        if(full) vidClear(pd + 224*256, 96);\r
@@ -326,8 +320,6 @@ static void vidBlitCenter_180(int full)
 \r
 static void vidBlitFit_0(int full)\r
 {\r
-       if (Pico.m.dirtyPal) fillLocalPal();\r
-\r
        if(Pico.video.reg[12]&1)\r
                 vidConvCpy_center2_40c_0(screenbuff, PicoDraw2FB+328*8, localPal, 168);\r
        else vidConvCpy_center2_32c_0(screenbuff, PicoDraw2FB+328*8, localPal, 168);\r
@@ -337,8 +329,6 @@ static void vidBlitFit_0(int full)
 \r
 static void vidBlitFit_180(int full)\r
 {\r
-       if (Pico.m.dirtyPal) fillLocalPal();\r
-\r
        if(Pico.video.reg[12]&1)\r
             vidConvCpy_center2_40c_180(screenbuff, PicoDraw2FB+328*8, localPal, 168);\r
        else vidConvCpy_center2_32c_180(screenbuff, PicoDraw2FB+328*8-64, localPal, 168);\r
@@ -348,8 +338,6 @@ static void vidBlitFit_180(int full)
 \r
 static void vidBlitFit2_0(int full)\r
 {\r
-       if (Pico.m.dirtyPal) fillLocalPal();\r
-\r
        if(Pico.video.reg[12]&1)\r
             vidConvCpy_center2_40c_0(screenbuff, PicoDraw2FB+328*8, localPal, 224);\r
        else vidConvCpy_center2_32c_0(screenbuff, PicoDraw2FB+328*8, localPal, 224);\r
@@ -359,8 +347,6 @@ static void vidBlitFit2_0(int full)
 \r
 static void vidBlitFit2_180(int full)\r
 {\r
-       if (Pico.m.dirtyPal) fillLocalPal();\r
-\r
        if(Pico.video.reg[12]&1)\r
             vidConvCpy_center2_40c_180(screenbuff, PicoDraw2FB+328*8, localPal, 224);\r
        else vidConvCpy_center2_32c_180(screenbuff, PicoDraw2FB+328*8-64, localPal, 224);\r
@@ -453,6 +439,7 @@ int vidInit(void *vidmem, int reinit)
                vidBlit = vidBlit_270;\r
        }\r
 \r
+       fillLocalPal();\r
        vidBlit(1);\r
        PicoOpt |= 0x100;\r
        Pico.m.dirtyPal = 1;\r
@@ -475,6 +462,7 @@ void vidDrawFrame(char *noticeStr, char *fpsStr, int num)
                drawTextFps(fpsStr);\r
        drawTextNotice(noticeStr);\r
 \r
+       if (Pico.m.dirtyPal) fillLocalPal();\r
        vidBlit(!num); // copy full frame once a second\r
 }\r
 \r