core vdp, arm rendering fix (1st window col prio)
authorkub <derkub@gmail.com>
Tue, 18 Jun 2024 20:45:02 +0000 (22:45 +0200)
committerkub <derkub@gmail.com>
Tue, 18 Jun 2024 20:45:02 +0000 (22:45 +0200)
pico/draw.c
pico/draw_arm.S

index 1b4ceb3..7c170ba 100644 (file)
@@ -566,7 +566,7 @@ static void DrawLayer(int plane_sh, u32 *hcache, int cellskip, int maxcells,
     ts.nametab+=(ts.line>>4)<<shift[width];\r
 \r
     DrawStripInterlace(&ts, plane_sh);\r
-  } else ifpvid->reg[11]&4) {\r
+  } else if (pvid->reg[11]&4) {\r
     // shit, we have 2-cell column based vscroll\r
     // luckily this doesn't happen too often\r
     ts.line=ymask|(shift[width]<<24); // save some stuff instead of line\r
index c01439a..37617b9 100644 (file)
@@ -461,7 +461,6 @@ DrawLayer:
     subs    r10,r10, #0x01000000\r
     bmi     .dsloop_exit\r
 \r
-.dsloop_enter:\r
     and     r7, r5, r8\r
     add     r7, lr, r7, lsl #1 @ Pico.vram+((tilex&ts->xmask) as halfwords)\r
     ldrh    r7, [r7, r12]      @ r7=code (int, but from unsigned, no sign extend)\r
@@ -1385,6 +1384,9 @@ DrawWindow:
     and     r10, r10, #7\r
     mov     r10, r10, lsl #1      @ r10=ty\r
 \r
+    ldr     r6, [r11, #OFS_EST_rendstatus]\r
+    ldr     lr, [r11, #OFS_EST_PicoMem_vram]\r
+\r
     mov     r12, r12, lsl #10\r
 \r
     tst     r4, #1                @ 40 cell mode?\r
@@ -1394,12 +1396,6 @@ DrawWindow:
     addeq   r12, r12, r5, lsl #6  @ nametab\r
     add     r12, r12, r0, lsl #2  @ +starttile\r
 \r
-    ldr     lr, [r11, #OFS_EST_PicoMem_vram]\r
-    ldr     r6, [r11, #OFS_EST_rendstatus]\r
-\r
-    @ fetch the first code now\r
-    ldrh    r7, [lr, r12]\r
-\r
     ands    r6, r6, #PDRAW_WND_DIFF_PRIO\r
     cmpeq   r2, #1                @ prio && !(rendstatus & WND_DIFF_PRIO)?\r
     ldmeqfd sp!, {r4-r11,pc}      @ yes, assume that whole window uses same priority\r
@@ -1412,20 +1408,18 @@ DrawWindow:
     @ cache some stuff to avoid mem access\r
     ldr     r11, [r11, #OFS_EST_HighCol]\r
     mov     r8, r8, lsl #1        @ cells\r
-    add     r11,r11,#8\r
     mvn     r9, #0                @ r9=prevcode=-1\r
-    add     r1, r11, r0, lsl #4   @ r1=pdest\r
+    add     r1, r11, r0, lsl #4   @ r1=pdest=HighCol+starttile (+8 added in loop)\r
     mov     r0, #0xf\r
-    b       .dwloop_enter\r
 \r
     @ r4,r5 are scratch in this loop\r
 .dwloop:\r
     add     r1, r1, #8\r
 .dwloop_nor1:\r
-    add     r12, r12, #2    @ halfwords\r
     ldrh    r7, [lr, r12]   @ r7=code (int, but from unsigned, no sign extend)\r
+    add     r12, r12, #2    @ halfwords\r
     subs    r8, r8, #1\r
-    beq     .dwloop_end     @ done\r
+    bmi     .dwloop_end     @ done\r
 \r
     eor     r5, r6, r7, lsr #15\r
     tst     r5, #1\r
@@ -1435,7 +1429,6 @@ DrawWindow:
     cmp     r7, r9\r
     beq     .dw_samecode    @ we know stuff about this tile already\r
 \r
-.dwloop_enter:\r
     mov     r9, r7          @ remember code\r
 \r
     movs    r2, r9, lsl #20 @ if (code&0x1000)\r