rendered paste body@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 <this> else <that>
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
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@