final fixes for UIQ3
[picodrive.git] / Pico / Draw2.c
index 3a511b2..054cee9 100644 (file)
@@ -27,8 +27,6 @@
 #define LINE_WIDTH 328\r
 #endif\r
 \r
-int currpri = 0;\r
-\r
 static int HighCache2A[41*(TILE_ROWS+1)+1+1]; // caches for high layers\r
 static int HighCache2B[41*(TILE_ROWS+1)+1+1];\r
 \r
@@ -284,12 +282,8 @@ static void DrawLayerFull(int plane, int *hcache, int planestart, int planeend)
                        code=Pico.vram[nametab_row+(tilex&xmask)];\r
                        if (code==blank) continue;\r
 \r
-#ifdef USE_CACHE\r
                        if (code>>15) { // high priority tile\r
                                *hcache++ = code|(dx<<16)|(trow<<27); // cache it\r
-#else\r
-                       if ((code>>15) != currpri) {\r
-#endif\r
                                continue;\r
                        }\r
 \r
@@ -485,8 +479,7 @@ static void DrawAllSpritesFull(int prio, int maxwidth)
 #ifndef _ASM_DRAW_C\r
 static void BackFillFull(int reg7)\r
 {\r
-       unsigned int back, i;\r
-       unsigned int *p=(unsigned int *)PicoDraw2FB;\r
+       unsigned int back;\r
 \r
        // Start with a background color:\r
 //     back=PicoCramHigh[reg7&0x3f];\r
@@ -494,16 +487,11 @@ static void BackFillFull(int reg7)
        back|=back<<8;\r
        back|=back<<16;\r
 \r
-       for(i = LINE_WIDTH*(8+(END_ROW-START_ROW)*8)/16; i; i--) {\r
-               *p++ = back; // do 16 pixels per iteration\r
-               *p++ = back;\r
-               *p++ = back;\r
-               *p++ = back;\r
-       }\r
+       memset32((int *)PicoDraw2FB, back, LINE_WIDTH*(8+(END_ROW-START_ROW)*8)/4);\r
 }\r
 #endif\r
 \r
-static void DrawDisplayFull()\r
+static void DrawDisplayFull(void)\r
 {\r
        struct PicoVideo *pvid=&Pico.video;\r
        int win, edge=0, hvwin=0; // LSb->MSb: hwin&plane, vwin&plane, full\r
@@ -518,7 +506,8 @@ static void DrawDisplayFull()
        }\r
 \r
        // horizontal window?\r
-       if((win=pvid->reg[0x12])) {\r
+       if ((win=pvid->reg[0x12]))\r
+       {\r
                hvwin=1; // hwindow shares display with plane A\r
                edge=win&0x1f;\r
                if(win == 0x80) {\r
@@ -537,7 +526,8 @@ static void DrawDisplayFull()
        }\r
 \r
        // check for vertical window, but only if win is not fullscreen\r
-       if(hvwin != 4) {\r
+       if (hvwin != 4)\r
+       {\r
                win=pvid->reg[0x11];\r
                edge=win&0x1f;\r
                if (win&0x80) {\r
@@ -561,15 +551,16 @@ static void DrawDisplayFull()
                }\r
        }\r
 \r
-       if(hvwin==1) { winend|=maxcolc<<16; planeend|=maxcolc<<16; }\r
+       if (hvwin==1) { winend|=maxcolc<<16; planeend|=maxcolc<<16; }\r
 \r
-       currpri = 0;\r
-       DrawLayerFull(1, HighCache2B, START_ROW, (maxcolc<<16)|END_ROW);\r
-       switch(hvwin) {\r
+       HighCache2A[1] = HighCache2B[1] = 0;\r
+       if (PicoDrawMask & PDRAW_LAYERB_ON)\r
+               DrawLayerFull(1, HighCache2B, START_ROW, (maxcolc<<16)|END_ROW);\r
+       if (PicoDrawMask & PDRAW_LAYERA_ON) switch (hvwin)\r
+       {\r
                case 4:\r
                // fullscreen window\r
                DrawWindowFull(START_ROW, (maxcolc<<16)|END_ROW, 0);\r
-               HighCache2A[1] = 0;\r
                break;\r
 \r
                case 3:\r
@@ -591,12 +582,13 @@ static void DrawDisplayFull()
                DrawLayerFull(0, HighCache2A, START_ROW, (maxcolc<<16)|END_ROW);\r
                break;\r
        }\r
-       DrawAllSpritesFull(0, maxw);\r
+       if (PicoDrawMask & PDRAW_SPRITES_LOW_ON)\r
+               DrawAllSpritesFull(0, maxw);\r
 \r
-#ifdef USE_CACHE\r
-       if(HighCache2B[1]) DrawTilesFromCacheF(HighCache2B);\r
-       if(HighCache2A[1]) DrawTilesFromCacheF(HighCache2A);\r
-       switch(hvwin) {\r
+       if (HighCache2B[1]) DrawTilesFromCacheF(HighCache2B);\r
+       if (HighCache2A[1]) DrawTilesFromCacheF(HighCache2A);\r
+       if (PicoDrawMask & PDRAW_LAYERA_ON) switch (hvwin)\r
+       {\r
                case 4:\r
                // fullscreen window\r
                DrawWindowFull(START_ROW, (maxcolc<<16)|END_ROW, 1);\r
@@ -614,18 +606,15 @@ static void DrawDisplayFull()
                DrawWindowFull(winstart, winend, 1);\r
                break;\r
        }\r
-#else\r
-       currpri = 1;\r
-       // TODO\r
-#endif\r
-       DrawAllSpritesFull(1, maxw);\r
+       if (PicoDrawMask & PDRAW_SPRITES_HI_ON)\r
+               DrawAllSpritesFull(1, maxw);\r
 }\r
 \r
 \r
 PICO_INTERNAL void PicoFrameFull()\r
 {\r
        // prepare cram?\r
-       if(PicoPrepareCram) PicoPrepareCram();\r
+       if (PicoPrepareCram) PicoPrepareCram();\r
 \r
        // Draw screen:\r
        BackFillFull(Pico.video.reg[7]);\r