All pastes #40412 Raw Edit

joat

public text v1 · immutable
#40412 ·published 2006-02-06 22:54 UTC
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

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@