You are on page 1of 2

MOV R0, #.

red
MOV R1, #7
MOV R2, #9
MOV R3, #15
MOV R4, #25
bl rect
MOV R0, #.green
MOV R1, #7
MOV R2, #9
MOV R3, #15
MOV R4, #1
bl rect
MOV R0, #.blue
MOV R1, #7
MOV R2, #9
MOV R3, #1
MOV R4, #25
bl rect
HALT

//R0 - colour
//R1 - start x
//R2 - start y
//R3 - length x
//R4 - length y
rect:
PUSH {R2,R4,LR}
CMP R4, #1
BLT rectError
ADD R4, R4, R2 //Convert length to 1 past finishing point
rectLoop: BL horizLine
ADD R2, R2, #1
CMP R2, R4
BLT rectLoop
POP {R2,R4,LR}
RET
rectError: HALT //At least parameter is out of range
//R0 - colour
//R1 - start x
//R2 - start y
//R3 - length x
horizLine:
PUSH {R1,R3,LR}
CMP R3, #1
BLT horizLineError
ADD R3, R3, R1 //Convert length to 1 past finishing point
horizLineLoop: BL point
ADD R1, R1, #1
CMP R1, R3
BLT horizLineLoop
POP {R1,R3,LR}
RET
horizLineError: HALT //At least one parameter is out of range

//R0 - colour
//R1 - start x
//R2 - start y
//R4 - length y
vertLine:
PUSH {R2,R4,LR}
CMP R4, #1
BLT vertLineError
ADD R4, R4, R2 //Convert length to 1 past finishing point
vertLineLoop: BL point
ADD R2, R2, #1
CMP R2, R4
BLT vertLineLoop
POP {R2,R4,LR}
RET
vertLineError: HALT //At least one parameter is out of range

//Pass colour in R0, x coordinate in R1, y coordinate in R2


point:
PUSH {R3,R4,LR}
CMP R1, #63
BGT pointError
CMP R1, #0
BLT pointError
CMP R2, #47
BGT pointError
CMP R2, #0
BLT pointError
MOV R3, R2
LSL R3, R3, #6
ADD R3, R3, R1
LSL R3, R3, #2
MOV R4, #.PixelScreen
STR R0, [R4+R3]
POP {R3,R4,LR}
RET
pointError: HALT //Error - x (R0) or y (R1) value is out of range

You might also like