@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ lib2d_a.s - 2d library functions @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ .section .iwram,"ax",%progbits .arm .align @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ C prototype: @ void clearScreen(uint32 fourPix) @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ .global clearScreen .func clearScreen clearScreen: @ Save registers that get clobbered stmfd sp!, {r4-r11} @ Clear some registers mov r1, r0 mov r2, r0 mov r3, r0 mov r4, r0 mov r5, r0 mov r6, r0 mov r7, r0 mov r8, r0 mov r9, r0 @ Synthesise the VRAM back buffer address mov r10, #0x04000000 ldrh r10, [r10] tst r10, #(1<<4) mov r10, #0x06000000 addeq r10, r10, #0xA000 @ Clear 160 bytes, 240 times mov r11, #240 clrL: stmia r10!, {r0-r9} stmia r10!, {r0-r9} stmia r10!, {r0-r9} stmia r10!, {r0-r9} subs r11, r11, #1 bne clrL @ Restore used registers and return ldmfd sp!, {r4-r11} bx lr .endfunc .pool @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ C prototype: @ void drawPixel(uint32 x, uint32 y, uint32 color, uint32 baseAddr) @ Draws a pixel at (x,y) in the framebuffer specified by baseAddr @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ .global gfxPixel .func gfxPixel gfxPixel: @ r0 = y*240 + x add r0, r0, r1, lsl #8 sub r0, r0, r1, lsl #4 @ if x & 1 then else tst r0, #1 bne oddP @ r1 = ([r0] & 0xFF00) | color ldrh r1, [r3, r0] and r1, r1, #0xFF00 orr r1, r1, r2 strh r1, [r3, r0] bx lr oddP: @ r1 = (color << 8) | ([r0] & 0x00FF) sub r0, r0, #1 ldrh r1, [r3, r0] and r1, r1, #0xFF orr r1, r1, r2, lsl #8 strh r1, [r3, r0] @ Cleanup and return to caller bx lr .endfunc .pool @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@