bugfix for ARM asm sprite rendering
authorkub <derkub@gmail.com>
Wed, 26 Feb 2020 19:31:40 +0000 (20:31 +0100)
committerkub <derkub@gmail.com>
Wed, 26 Feb 2020 19:31:40 +0000 (20:31 +0100)
pico/draw.c
pico/draw_arm.S

index da87ede..e654501 100644 (file)
@@ -1243,7 +1243,7 @@ static void DrawAllSprites(unsigned char *sprited, int prio, int sh,
                            struct PicoEState *est)\r
 {\r
   unsigned char *p;\r
-  int cnt, w = sprited[2];\r
+  int cnt, w;\r
 \r
   cnt = sprited[0] & 0x7f;\r
   if (cnt == 0) return;\r
index 967bf6a..0eb161e 100644 (file)
@@ -1169,7 +1169,9 @@ DrawSprite:
     mov     r2, r0, lsl #24\r
     cmp     r0, #0xff\r
     ldmeqfd sp!, {r1,r3-r11,pc} @ end of list\r
-    eor     r2, r2, r4, lsl #30\r
+    eors    r2, r2, r4, lsl #30\r
+    bic     r2, r4, #0xff000000\r
+    str     r2, [sp]\r
     bmi     DrawSprite      @ wrong priority\r
     ldr     r1, [r7, #OFS_EST_HighPreSpr]\r
     and     r0, r0, #0x7f\r
@@ -1210,8 +1212,6 @@ DrawSprite:
     add     r6, r6, #1         @ inc now\r
     cmp     r4, #0x1000000     @ check width of last sprite\r
     movhs   r6, r4, lsr #24\r
-    bichs   r4, r4, #0xff000000\r
-    strhs   r4, [sp]\r
 \r
     @ cache some stuff to avoid mem access\r
     mov     r5, r5, lsl #4     @ delta<<=4; // Delta of address\r