.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
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\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
@ 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
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
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
\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
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
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
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
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
.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