
calc84maniac
By: a guest on
Nov 28th, 2010 | syntax:
None | size: 0.68 KB | hits: 112 | expires: Never
@ void setPixel(void* buffer, unsigned x, unsigned y, unsigned color);
.global setPixel
@ Notes:
@ Only bottom 4 bits of color are used, the rest can be garbage.
@ This routine will not write pixels offscreen.
@ Cycle timing (not including function call):
@ * Offscreen pixel: 5 cycles
@ * Onscreen pixel, x%2==0: 16 cycles
@ * Onscreen pixel, x%2==1: 15 cycles
@ Code size: 68 bytes
setPixel:
cmp r1,#320
cmplo r2,#240
bxhs lr
add r2,r2,r2,lsl #2
add r0,r0,r2,lsl #5
movs r1,r1,lsr #1
ldrb r2,[r0,r1]
bcc 1f
and r3,r3,#0x0F
bic r2,r2,#0x0F
orr r2,r2,r3
strb r2,[r0,r1]
bx lr
1:
bic r2,r2,#0xF0
orr r2,r2,r3,lsl #4
strb r2,[r0,r1]
bx lr