+.global DrawAllSprites @ int *hcache, int prio, int sh\r
+\r
+DrawAllSprites:\r
+ ldr r3, =rendstatus\r
+ ldr r12,[r3]\r
+ tst r12,#(PDRAW_ACC_SPRITES|PDRAW_SPRITES_MOVED)\r
+ beq das_no_prep\r
+ stmfd sp!, {r0,r2,lr}\r
+ and r0, r12,#PDRAW_DIRTY_SPRITES\r
+ bic r12,r12,#(PDRAW_ACC_SPRITES|PDRAW_SPRITES_MOVED)\r
+ str r12,[r3]\r
+ bl PrepareSprites\r
+ ldmfd sp!, {r0,r2,lr}\r
+\r
+das_no_prep:\r
+ ldr r12,=HighCacheS_ptr\r
+ ldr r3, =DrawScanline\r
+ ldr r1, =HighLnSpr\r
+ str r0, [r12]\r
+ ldr r12,[r3]\r
+ mov r3, #(MAX_LINE_SPRITES+2)\r
+ mla r1, r12, r3, r1\r
+ mov r12,#0\r
+ ldr r3, [r1]\r
+ ands r3, r3, #0x7f\r
+ streq r12,[r0]\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,[r1,#1] @ end marker\r
+ add r10,r1, #2\r
+ add r10,r10,r3 @ r10=HighLnSpr end\r
+\r
+ mov r8, r2, lsl #4\r
+ tst r4, #PDRAW_ACC_SPRITES\r
+ orrne r8, r8, #1\r
+ str r8, [sp, #-4] @ no calls after this point\r
+\r
+.if OVERRIDE_HIGHCOL\r
+ ldr r11,=HighCol\r
+ mov r12,#0xf\r
+ ldr r11,[r11]\r
+.else\r
+ ldr r11,=HighCol\r
+ mov r12,#0xf\r
+.endif\r
+ ldr lr, =(Pico+0x10000) @ lr=Pico.vram\r
+\r
+@ + 0 : hhhhvvvv ----hhvv yyyyyyyy yyyyyyyy // v, h: horiz. size\r