default cfg changed
[picodrive.git] / Pico / Draw.s
index dca251d..036d3a9 100644 (file)
@@ -25,7 +25,6 @@
 .equ PDRAW_DIRTY_SPRITES, (1<<4)\r
 .equ PDRAW_PLANE_HI_PRIO, (1<<6)\r
 .equ PDRAW_SHHI_DONE,     (1<<7)\r
-.equ MAX_LINE_SPRITES,    30\r
 \r
 @ helper\r
 .macro TilePixel pat lsrr offs\r
@@ -947,26 +946,19 @@ DrawTilesFromCache:
 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
 \r
 \r
-.global DrawSpritesSHi @ int prio_unused, int sh\r
+.global DrawSpritesSHi @ unsigned char *sprited\r
 \r
 DrawSpritesSHi:\r
-    ldr     r3, =DrawScanline\r
-    ldr     r2, =HighLnSpr\r
-    ldr     r12,[r3]\r
-    mov     r3, #(MAX_LINE_SPRITES+2)\r
-    mla     r2, r12, r3, r2\r
-    ldr     r3, [r2]\r
+    ldr     r3, [r0]\r
+    mov     r12,#0xff\r
     ands    r3, r3, #0x7f\r
     bxeq    lr\r
 \r
     stmfd   sp!, {r4-r11,lr}\r
-    mov     r12,#0xff\r
-    strb    r12,[r2,#1]     @ set end marker\r
-    add     r10,r2, #2\r
+    strb    r12,[r0,#2]     @ set end marker\r
+    add     r10,r0, #3      @ r10=HighLnSpr end\r
     add     r10,r10,r3      @ r10=HighLnSpr end\r
 \r
-    str     r1, [sp, #-4]   @ no calls after this point\r
-\r
 .if OVERRIDE_HIGHCOL\r
     ldr     r11,=HighCol\r
     mov     r12,#0xf\r
@@ -982,7 +974,7 @@ DrawSpriteSHi:
     @ draw next sprite\r
     ldrb    r0, [r10,#-1]!\r
     ldr     r1, =HighPreSpr\r
-    ldr     r8, [sp, #-4]\r
+@    ldr     r8, [sp, #-4]\r
     cmp     r0, #0xff\r
     ldmeqfd sp!, {r4-r11,pc} @ end of list\r
     and     r0, r0, #0x7f\r
@@ -994,12 +986,12 @@ DrawSpriteSHi:
     mov     r9, r9, lsl #16\r
     mov     r3, r9, lsr #31 @ priority\r
     mov     r9, r9, lsr #16\r
-    orr     r9, r9, r8, lsl #31 @ r9=code|sh[31]\r
+@    orr     r9, r9, r8, lsl #31 @ r9=code|sh[31]   @@ sh is always on here now\r
     and     r4, r9, #0x6000\r
     orr     r9, r9, r4, lsl #16\r
-    orr     r9, r9, #0x10000000 @ r9=scc1 ???? ... <code> (s=shadow/hilight, cc=pal)\r
+    orr     r9, r9, #0x90000000 @ r9=scc1 ???? ... <code> (s=shadow/hilight, cc=pal)\r
     cmp     r12,r9, lsr #28 @ sh/hi with pal3?\r
-    cmpne   r3, #1          @ if not, is hi prio\r
+    cmpne   r3, #1          @ if not, is ir hi prio?\r
     bne     DrawSpriteSHi   @ non-operator low sprite, already drawn\r
 \r
     ldr     r3, [r0]        @ sprite[0]\r
@@ -1030,8 +1022,6 @@ DrawSpriteSHi:
     add     r8, r8, r7, lsl #1 @ tile+=(row&7)<<1; // Tile address\r
 \r
     mov     r5, r5, lsl #4     @ delta<<=4; // Delta of address\r
-\r
-    orrs    r3, r9, r9, lsl #4\r
     mov     r3, r4, lsr #9     @ r3=pal=((code>>9)&0x30);\r
 \r
     add     r6, r6, #1         @ inc now\r
@@ -1136,44 +1126,34 @@ DrawSpriteSHi:
 \r
 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
 \r
-.global DrawAllSprites @ int prio, int sh\r
+.global DrawAllSprites @ unsigned char *sprited, int prio, int sh\r
 \r
 DrawAllSprites:\r
     ldr     r3, =rendstatus\r
-    orr     r1, r1, r0, lsl #1\r
+    orr     r1, r2, r1, lsl #1\r
     ldr     r12,[r3]\r
-    tst     r12,#(PDRAW_ACC_SPRITES|PDRAW_SPRITES_MOVED)\r
+    tst     r12,#(PDRAW_DIRTY_SPRITES|PDRAW_SPRITES_MOVED)\r
     beq     das_no_prep\r
-    stmfd   sp!, {r1,lr}\r
+    stmfd   sp!, {r0,r1,lr}\r
     and     r0, r12,#PDRAW_DIRTY_SPRITES\r
-    bic     r12,r12,#(PDRAW_ACC_SPRITES|PDRAW_SPRITES_MOVED)\r
+    bic     r12,r12,#(PDRAW_DIRTY_SPRITES|PDRAW_SPRITES_MOVED)\r
     str     r12,[r3]\r
     bl      PrepareSprites\r
-    ldmfd   sp!, {r1,lr}\r
+    ldmfd   sp!, {r0,r1,lr}\r
 \r
 das_no_prep:\r
-    ldr     r3, =DrawScanline\r
-    ldr     r2, =HighLnSpr\r
-    ldr     r12,[r3]\r
-    mov     r3, #(MAX_LINE_SPRITES+2)\r
-    mla     r2, r12, r3, r2\r
-    ldr     r3, [r2]\r
+    ldr     r3, [r0]\r
     ands    r3, r3, #0x7f\r
     bxeq    lr\r
 \r
     @ time to do some real work\r
     stmfd   sp!, {r4-r11,lr}\r
-    ldr     r4, =rendstatus\r
     mov     r12,#0xff\r
-    ldr     r4, [r4]\r
-    strb    r12,[r2,#1]     @ set end marker\r
-    add     r10,r2, #2\r
+    strb    r12,[r0,#2]     @ set end marker\r
+    add     r10,r0, #3\r
     add     r10,r10,r3      @ r10=HighLnSpr end\r
 \r
-    mov     r8, r1, lsl #4\r
-    tst     r4, #PDRAW_ACC_SPRITES\r
-    orrne   r8, r8, #1\r
-    str     r8, [sp, #-4]   @ no calls after this point\r
+    str     r1, [sp, #-4]   @ no calls after this point\r
 \r
 .if OVERRIDE_HIGHCOL\r
     ldr     r11,=HighCol\r
@@ -1196,7 +1176,7 @@ DrawSprite: @ was: unsigned int *sprite, int sh, int acc_sprites
     mov     r2, r0, lsr #7\r
     cmp     r0, #0xff\r
     ldmeqfd sp!, {r4-r11,pc} @ end of list\r
-    cmp     r2, r8, lsr #5\r
+    cmp     r2, r8, lsr #1\r
     bne     DrawSprite      @ wrong priority\r
     and     r0, r0, #0x7f\r
     add     r0, r1, r0, lsl #3\r
@@ -1220,7 +1200,7 @@ DrawSprite: @ was: unsigned int *sprite, int sh, int acc_sprites
     mov     r2, r9, asr #16 @ r2=sx\r
     mov     r9, r9, lsl #16\r
     mov     r9, r9, lsr #16\r
-    orr     r9, r9, r8, lsl #27 @ r9=code|sh[31]|as[27]\r
+    orr     r9, r9, r8, lsl #31 @ r9=code|sh[31]\r
 \r
     tst     r9, #0x1000\r
     movne   r4, r5, lsl #3\r
@@ -1242,11 +1222,10 @@ DrawSprite: @ was: unsigned int *sprite, int sh, int acc_sprites
     mov     r5, r5, lsl #4     @ delta<<=4; // Delta of address\r
     and     r4, r9, #0x6000\r
     orr     r9, r9, r4, lsl #16\r
-    orr     r9, r9, #0x10000000 @ r9=scc1 a??? ... <code> (s=shadow/hilight, cc=pal, a=acc_spr)\r
+    orrs    r9, r9, #0x10000000 @ r9=scc1 ???? ... <code> (s=shadow/hilight, cc=pal)\r
 \r
-    orrs    r3, r9, r9, lsl #4\r
     mov     r3, r4, lsr #9     @ r3=pal=((code>>9)&0x30);\r
-    orrmi   r3, r3, #0x40      @ for shadow|as\r
+    orrmi   r3, r3, #0x40      @ for sh/hi\r
 \r
     add     r6, r6, #1         @ inc now\r
     adds    r0, r2, #0         @ mov sx to r0 and set ZV flags\r
@@ -1351,7 +1330,7 @@ DrawWindow:
     add     r12, r12, r0, lsl #2  @ +starttile\r
 \r
     ldr     r6, =rendstatus\r
-    ldr     lr, =(Pico+0x10000) @ lr=Pico.vram\r
+    ldr     lr, =(Pico+0x10000)   @ lr=Pico.vram\r
     ldr     r6, [r6]\r
 \r
     @ fetch the first code now\r
@@ -1463,7 +1442,7 @@ DrawWindow:
 .dwloop_end:\r
     ldr     r0, =rendstatus\r
     ldr     r1, [r0]\r
-    and     r6, r6, #2\r
+    and     r6, r6, #PDRAW_WND_DIFF_PRIO\r
     orr     r1, r1, r6\r
     str     r1, [r0]\r
 \r