vdp sprite rendering fixes
authorkub <derkub@gmail.com>
Sun, 1 Mar 2020 17:50:55 +0000 (18:50 +0100)
committerkub <derkub@gmail.com>
Sun, 1 Mar 2020 17:50:55 +0000 (18:50 +0100)
pico/draw.c
pico/draw_arm.S

index 9ce727d..b797875 100644 (file)
@@ -333,7 +333,7 @@ static void DrawStripVSRam(struct TileStrip *ts, int plane_sh, int cellskip)
     }\r
 \r
     code=PicoMem.vram[ts->nametab+nametabadd+(tilex&ts->xmask)];\r
-    if (code==blank) continue;\r
+    if ((code<<16|ty)==blank) continue;\r
     if (code>>15) { // high priority tile\r
       int cval = code | (dx<<16) | (ty<<25);\r
       if(code&0x1000) cval^=7<<26;\r
@@ -353,7 +353,7 @@ static void DrawStripVSRam(struct TileStrip *ts, int plane_sh, int cellskip)
     pack = *(unsigned int *)(PicoMem.vram + addr+ty);\r
 \r
     if (!pack) {\r
-      blank = code;\r
+      blank = code<<16|ty;\r
       continue;\r
     }\r
 \r
@@ -638,7 +638,7 @@ static void DrawTilesFromCache(int *hc, int sh, int rlim, struct PicoEState *est
   {\r
     int blank=-1; // The tile we know is blank\r
     while ((code=*hc++)) {\r
-      if (!(code & 0x8000) || (unsigned short)code == blank)\r
+      if ((code<<16|code>>25) == blank)\r
         continue;\r
       // Get tile address/2:\r
       addr = (code & 0x7ff) << 4;\r
@@ -646,7 +646,7 @@ static void DrawTilesFromCache(int *hc, int sh, int rlim, struct PicoEState *est
 \r
       pack = *(unsigned int *)(PicoMem.vram + addr);\r
       if (!pack) {\r
-        blank = (unsigned short)code;\r
+        blank = code<<16|code>>25;\r
         continue;\r
       }\r
 \r
@@ -1026,7 +1026,8 @@ static void DrawSpritesHiAS(unsigned char *sprited, int sh)
     delta<<=4; // Delta of address\r
 \r
     if (entry+1 == cnt) width = p[entry+1]; // last sprite width limited?\r
-    for (; width; width--,sx+=8,tile+=delta)\r
+    mp = mb+(sx>>3);\r
+    for (m = *mp << 8; width; width--, sx+=8, *mp++ = m, tile+=delta)\r
     {\r
       unsigned int pack;\r
 \r
@@ -1090,8 +1091,7 @@ static void DrawSpritesForced(unsigned char *sprited)
     delta<<=4; // Delta of address\r
 \r
     if (entry+1 == cnt) width = p[entry+1]; // last sprite width limited?\r
-    mp = mb+(sx>>3);\r
-    for (m = *mp << 8; width; width--, sx+=8, *mp++ = m, tile+=delta)\r
+    for (; width; width--,sx+=8,tile+=delta)\r
     {\r
       unsigned int pack;\r
 \r
index de45f59..860ab0f 100644 (file)
@@ -796,8 +796,6 @@ DrawTilesFromCache:
     bic     r4, r1, #0xfe00\r
     add     r1, r11, r4     @ r1=pdest\r
 \r
-    movs    r7, r6, lsl #16\r
-    bpl     .dtfc_loop      @ !(code & 0x8000)\r
     cmp     r5, r7, lsr #16\r
     beq     .dtfc_samecode  @ if (code==prevcode)\r
 \r