home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 44
/
Amiga_Dream_44.iso
/
RiscPc
/
jeux
/
biohazard.arc
/
s
/
AffLine1
< prev
next >
Wrap
Text File
|
1994-05-30
|
21KB
|
810 lines
; Use the GET directive to include register definitions as if typed here
KEEP
GET h.WolfReg
; Use the GET directive to include a list of SWI names as if typed here
GET h.SWInames
; Area name C$$code advisable as wanted to link with C output
AREA |C$$code|, CODE, READONLY
; Export global symbols
IMPORT |x$stack_overflow|
EXPORT |DrawScaledLine|
EXPORT |LowDetailLine|
EXPORT |MegaLowDetailLine|
EXPORT |ExtraMegaLowDetailLine|
EXPORT |SuperExtraMegaLowDetailLine|
EXPORT |RedrawScreen|
EXPORT |BigRedrawScreen|
DSLineX DCB "DrawScaledLine", 0
ALIGN
DSLineY DCD &ff000000 + DSLineY - DSLineX
;scale line of graphics block to height value.
;on entry -
; r0 = pointer to Plot_Block where :-
; 0 = pointer to block_data
; 1 = initial_x_intercept
; 2 = height
; 3 = screen_address
; 4 = pointer to div_table
; 5 = quadrant
; 6 = Players
|DrawScaledLine|
STMFD r13!,{r0-r12,link}
LDMIA r0,{r0-r6}
;validate height
CMP r2,#1
BLE EndLDLine
CMP r2,#5120
MOVGE r2,#5120
;set max height according to players
CMP r6,#0
MOV r12,#254
MOVNE r12,#126
;compute pointer to graphical data
AND r7,r1,#63
ADD r0,r0,r7,LSL #6
;get gradient
LDR r4,[r4,r2,LSL #2]
MOV r4,r4,LSL #6 ;multiply by 64*2 (side length)
MOV r7,#0 ;clear gradient counter
;move to correct screen position
CMP r2,r12 ;max height value
BGT DSclipheight ;if height larger than screen height
RSB r5,r2,r12 ;find height difference
MOV r5,r5,LSR #1 ;divide by 2 for upper & lower limits
MOV r6,r5,LSL #8 ;multiply by 320 ((r5*256)+(r5*64))
ADD r5,r6,r5,LSL #6
ADD r3,r3,r5
DSloop LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndDSLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndDSLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndDSLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndDSLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndDSLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndDSLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndDSLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndDSLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BNE DSloop
EndDSLine
LDMFD r13!,{r0-r12,pc}
DSclipheight
SUB r10,r2,r12
MOV r10,r10,LSR #1 ;find height difference
MUL r7,r10,r4 ;multiply the gradient by the height diff
MOV r2,r12
B DSloop
LDLineX DCB "LowDetailLine", 0
ALIGN
LDLineY DCD &ff000000 + LDLineY - LDLineX
;scale line of graphics block to height value.
;on entry -
; r0 = pointer to Plot_Block where :-
; 0 = pointer to block_data
; 1 = initial_x_intercept
; 2 = height
; 3 = screen_address
; 4 = pointer to div_table
; 5 = quadrant
; 6 = Players
|LowDetailLine|
STMFD r13!,{r0-r12,link}
LDMIA r0,{r0-r6}
;validate height
CMP r2,#1
BLE EndLDLine
CMP r2,#5120
MOVGE r2,#5120
;set max height according to players
CMP r6,#0
MOV r12,#254
MOVNE r12,#126
;compute pointer to graphical data
AND r7,r1,#63
ADD r0,r0,r7,LSL #6
;get gradient
LDR r4,[r4,r2,LSL #2]
MOV r4,r4,LSL #6 ;multiply by 64*2 (side length)
MOV r7,#0 ;clear gradient counter
;move to correct screen position
CMP r2,r12 ;max height value
BGT LDclipheight ;if height larger than screen height
RSB r5,r2,r12 ;find height difference
MOV r5,r5,LSR #1 ;divide by 2 for upper & lower limits
MOV r6,r5,LSL #8 ;multiply by 320 ((r5*256)+(r5*64))
ADD r5,r6,r5,LSL #6
ADD r3,r3,r5
LDloop LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BNE LDloop
EndLDLine
LDMFD r13!,{r0-r12,pc}
LDclipheight
SUB r10,r2,r12
MOV r10,r10,LSR #1 ;find height difference
MUL r7,r10,r4 ;multiply the gradient by the height diff
MOV r2,r12
B LDloop
MLDLineX DCB "MegaLowDetailLine", 0
ALIGN
MLDLineY DCD &ff000000 + MLDLineY - MLDLineX
;scale line of graphics block to height value.
;on entry -
; r0 = pointer to Plot_Block where :-
; 0 = pointer to block_data
; 1 = initial_x_intercept
; 2 = height
; 3 = screen_address
; 4 = pointer to div_table
; 5 = quadrant
; 6 = Players
|MegaLowDetailLine|
STMFD r13!,{r0-r12,link}
LDMIA r0,{r0-r6}
;validate height
CMP r2,#1
BLE EndMLDLine
CMP r2,#5120
MOVGE r2,#5120
;round height
MOV r2,r2,ASR #1
MOV r2,r2,LSL #1
;set max height according to players
CMP r6,#0
MOV r12,#254
MOVNE r12,#126
;compute pointer to graphical data
AND r7,r1,#63
ADD r0,r0,r7,LSL #6
;get gradient
LDR r4,[r4,r2,LSL #2]
MOV r4,r4,LSL #6 ;multiply by 64*2 (side length)
MOV r7,#0 ;clear gradient counter
;move to correct screen position
CMP r2,r12 ;max height value
BGT MLDclipheight ;if height larger than screen height
RSB r5,r2,r12 ;find height difference
MOV r5,r5,LSR #1 ;divide by 2 for upper & lower limits
MOV r6,r5,LSL #8 ;multiply by 320 ((r5*256)+(r5*64))
ADD r5,r6,r5,LSL #6
ADD r3,r3,r5
MOV r4,r4,LSL #1
MLDloop LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BNE MLDloop
EndMLDLine
LDMFD r13!,{r0-r12,pc}
MLDclipheight
SUB r10,r2,r12
MOV r10,r10,LSR #1 ;find height difference
MUL r7,r10,r4 ;multiply the gradient by the height diff
MOV r2,r12
MOV r4,r4,LSL #1
B MLDloop
EMLDLineX DCB "ExtraMegaLowDetailLine", 0
ALIGN
EMLDLineY DCD &ff000000 + EMLDLineY - EMLDLineX
;scale line of graphics block to height value.
;on entry -
; r0 = pointer to Plot_Block where :-
; 0 = pointer to block_data
; 1 = initial_x_intercept
; 2 = height
; 3 = screen_address
; 4 = pointer to div_table
; 5 = quadrant
; 6 = Players
; 7 = ScanLine
|ExtraMegaLowDetailLine|
STMFD r13!,{r0-r12,link}
LDMIA r0,{r0-r6}
;validate height
CMP r2,#1
BLE EndEMLDLine
CMP r2,#5120
MOVGE r2,#5120
;round height
MOV r2,r2,ASR #1
MOV r2,r2,LSL #1
;set max height according to players
CMP r6,#0
MOV r12,#254
MOVNE r12,#126
;compute pointer to graphical data
AND r7,r1,#63
ADD r0,r0,r7,LSL #6
;get gradient
LDR r4,[r4,r2,LSL #2]
MOV r4,r4,LSL #6 ;multiply by 64*2 (side length)
MOV r7,#0 ;clear gradient counter
;move to correct screen position
CMP r2,r12 ;max height value
BGT EMLDclipheight ;if height larger than screen height
RSB r5,r2,r12 ;find height difference
MOV r5,r5,LSR #1 ;divide by 2 for upper & lower limits
MOV r6,r5,LSL #8 ;multiply by 320 ((r5*256)+(r5*64))
ADD r5,r6,r5,LSL #6
ADD r3,r3,r5
MOV r4,r4,LSL #1
EMLDloop LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndEMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndEMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndEMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndEMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndEMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndEMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndEMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BEQ EndEMLDLine
LDRB r6,[r0,r7,ASR #20]
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
STRB r6,[r3,#1]
STRB r6,[r3,#2]
STRB r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#2
BNE EMLDloop
EndEMLDLine
LDMFD r13!,{r0-r12,pc}
EMLDclipheight
SUB r10,r2,r12
MOV r10,r10,LSR #1 ;find height difference
MUL r7,r10,r4 ;multiply the gradient by the height diff
MOV r2,r12
MOV r4,r4,LSL #1
B EMLDloop
SEMLDLineX DCB "SuperExtraMegaLowDetailLine", 0
ALIGN
SEMLDLineY DCD &ff000000 + SEMLDLineY - SEMLDLineX
;scale line of graphics block to height value.
;on entry -
; r0 = pointer to Plot_Block where :-
; 0 = pointer to block_data
; 1 = initial_x_intercept
; 2 = height
; 3 = screen_address
; 4 = pointer to div_table
; 5 = quadrant
; 6 = Players
; 7 = ScanLine
|SuperExtraMegaLowDetailLine|
STMFD r13!,{r0-r12,link}
LDMIA r0,{r0-r6}
;validate height
CMP r2,#1
BLE EndEMLDLine
CMP r2,#5120
MOVGE r2,#5120
;round height
MOV r2,r2,ASR #1
MOV r2,r2,LSL #1
;set max height according to players
CMP r6,#0
MOV r12,#254
MOVNE r12,#128
;compute pointer to graphical data
AND r7,r1,#63
ADD r0,r0,r7,LSL #6
;get gradient
LDR r4,[r4,r2,LSL #2]
MOV r4,r4,LSL #6 ;multiply by 64*2 (side length)
MOV r7,#0 ;clear gradient counter
;move to correct screen position
CMP r2,r12 ;max height value
BGT SEMLDclipheight ;if height larger than screen height
RSB r5,r2,r12 ;find height difference
MOV r5,r5,LSR #1 ;divide by 2 for upper & lower limits
MOV r6,r5,LSL #8 ;multiply by 320 ((r5*256)+(r5*64))
ADD r5,r6,r5,LSL #6
ADD r3,r3,r5
SEMLDloop LDRB r6,[r0,r7,ASR #20]
ADD r6,r6,r6,LSL #8
ADD r6,r6,r6,LSL #16
STR r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndSEMLDLine
LDRB r6,[r0,r7,ASR #20]
ADD r6,r6,r6,LSL #8
ADD r6,r6,r6,LSL #16
STR r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndSEMLDLine
LDRB r6,[r0,r7,ASR #20]
ADD r6,r6,r6,LSL #8
ADD r6,r6,r6,LSL #16
STR r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndSEMLDLine
LDRB r6,[r0,r7,ASR #20]
ADD r6,r6,r6,LSL #8
ADD r6,r6,r6,LSL #16
STR r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndSEMLDLine
LDRB r6,[r0,r7,ASR #20]
ADD r6,r6,r6,LSL #8
ADD r6,r6,r6,LSL #16
STR r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndSEMLDLine
LDRB r6,[r0,r7,ASR #20]
ADD r6,r6,r6,LSL #8
ADD r6,r6,r6,LSL #16
STR r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndSEMLDLine
LDRB r6,[r0,r7,ASR #20]
ADD r6,r6,r6,LSL #8
ADD r6,r6,r6,LSL #16
STR r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BEQ EndSEMLDLine
LDRB r6,[r0,r7,ASR #20]
ADD r6,r6,r6,LSL #8
ADD r6,r6,r6,LSL #16
STR r6,[r3],#320
ADD r7,r7,r4 ;increment gradient
SUBS r2,r2,#1
BNE SEMLDloop
EndSEMLDLine
LDMFD r13!,{r0-r12,pc}
SEMLDclipheight
SUB r10,r2,r12
MOV r10,r10,LSR #1 ;find height difference
MUL r7,r10,r4 ;multiply the gradient by the height diff
MOV r2,r12
B SEMLDloop
RDScreenX DCB "RedrawScreen", 0
ALIGN
RDScreenY DCD &ff000000 + RDScreenY - RDScreenX
;draw background graphics.
;on entry -
; r0 = screen address
|RedrawScreen|
STMFD r13!,{r0-r12,link}
;initial height value
MOV r1,#64
;load initial colour value into r2 & make word sized
MOV r2,#44
ADD r2,r2,r2,LSL #8
ADD r2,r2,r2,LSL #16
;move into other registers
MOV r3,r2
MOV r4,r2
MOV r5,r2
MOV r6,r2
MOV r7,r2
MOV r8,r2
MOV r9,r2
MOV r10,r2
MOV r11,r2
RDloop STMIA r0!,{r2-r11} ;plot one line of colour data on screen
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
SUBS r1,r1,#1
BNE RDloop
;next height value
MOV r1,#64
;load next colour value into r2 & make word sized
MOV r2,#42
ADD r2,r2,r2,LSL #8
ADD r2,r2,r2,LSL #16
;move into other registers
MOV r3,r2
MOV r4,r2
MOV r5,r2
MOV r6,r2
MOV r7,r2
MOV r8,r2
MOV r9,r2
MOV r10,r2
MOV r11,r2
RDloopA STMIA r0!,{r2-r11} ;plot one line of colour data on screen
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
SUBS r1,r1,#1
BNE RDloopA
EndRDScreen
LDMFD r13!,{r0-r12,pc}
BRDScreenX DCB "BigRedrawScreen", 0
ALIGN
BRDScreenY DCD &ff000000 + BRDScreenY - BRDScreenX
;draw background graphics.
;on entry -
; r0 = screen address
|BigRedrawScreen|
STMFD r13!,{r0-r12,link}
;initial height value
MOV r1,#127
;load initial colour value into r2 & make word sized
MOV r2,#44
ADD r2,r2,r2,LSL #8
ADD r2,r2,r2,LSL #16
;move into other registers
MOV r3,r2
MOV r4,r2
MOV r5,r2
MOV r6,r2
MOV r7,r2
MOV r8,r2
MOV r9,r2
MOV r10,r2
MOV r11,r2
BRDloop STMIA r0!,{r2-r11} ;plot one line of colour data on screen
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
SUBS r1,r1,#1
BNE BRDloop
;next height value
MOV r1,#127
;load next colour value into r2 & make word sized
MOV r2,#46
ADD r2,r2,r2,LSL #8
ADD r2,r2,r2,LSL #16
;move into other registers
MOV r3,r2
MOV r4,r2
MOV r5,r2
MOV r6,r2
MOV r7,r2
MOV r8,r2
MOV r9,r2
MOV r10,r2
MOV r11,r2
BRDloopA STMIA r0!,{r2-r11} ;plot one line of colour data on screen
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
STMIA r0!,{r2-r11}
SUBS r1,r1,#1
BNE BRDloopA
EndBRDScreen
LDMFD r13!,{r0-r12,pc}
END