Show a basic storage type to handle a simple RGB raster graphics image,
and some primitive associated functions.

If possible provide a function to allocate an uninitialised image,
given its width and height, and provide 3 additional functions:

   one to fill an image with a plain RGB color,
   one to set a given pixel with a color,
   one to get the color of a pixel.


(If there are specificities about the storage or the allocation, explain those.)

These functions are used as a base for the articles in the category raster graphics operations, 
and a basic output function to check the results
is available in the article write ppm file.




 
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