RosettaCodeData/Task/Bitmap/ARM-Assembly/bitmap.arm

52 lines
1.1 KiB
Plaintext

Bitmap_FloodFill:
;input:
;r0 = color to fill screen with (15-bit color)
STMFD sp!,{r0-r12,lr}
MOV R2,#160
MOV R4,#0x06000000
outerloop_floodfill:
MOV R1,#240 ;restore inner loop counter
innerloop_floodfill:
strH r0,[r4]
add r4,r4,#2 ;next pixel
subs r1,r1,#1 ;decrement loop counter
bne innerloop_floodfill
subs r2,r2,#1
bne outerloop_floodfill
LDMFD sp!,{r0-r12,pc}
Bitmap_Locate:
;given x and y coordinates, offsets vram addr to that pixel on screen.
;input:
;r0 = x
;r1 = y
;output: r2 = vram area
STMFD sp!,{r4-r12,lr}
mov r2,#0x06000000 ;vram base
mov r4,#240*2 ;240 pixels across, 2 bytes per pixel
mul r1,r4,r1
add r2,r2,r1 ;add y*480
add r2,r2,r0,lsl #1 ;add x*2
LDMFD sp!,{r4-r12,pc}
Bitmap_StorePixel:
;input: r3 = color
;r0 = x
;r1 = y
bl Bitmap_Locate
strH r3,[r2] ;store the pixel color in video memory
bx lr
Bitmap_GetPixel:
;retrieves the color of the pixel at [r2] and stores its color value in r3.
;r0 = x
;r1 = y
;output in r3
bl Bitmap_Locate
ldrH r3,[r2]
bx lr