home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 44
/
Amiga_Dream_44.iso
/
RiscPc
/
jeux
/
biohazard.arc
/
s
/
BorderVGA
< prev
next >
Wrap
Text File
|
1995-03-26
|
12KB
|
507 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 |DrawBorderVGA|
EXPORT |DrawBarVGA|
EXPORT |AdaptiveRedrawScreenVGA|
;draw border graphics.
;on entry -
; r0 = screen address
; r1 = screen width
; r2 = screen height
; r3 = pointer to backdrop data
|DrawBorderVGA|
STMFD r13!,{r0-r12,link}
;LDMFD r13!,{r0-r12,pc}
;multiply height by 2 for VGA display
MOV r2,r2,LSL #1
;check if whole screen is black
;CMP r2,#460
;BGT DrawBlack
;preserve screen address
MOV r12,r0
;initial height value
MOV r8,#240
DBloop LDMIA r3!,{r4-r7} ;plot one line of colour data on screen
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUB r0,r0,#320
LDMIA r3!,{r4-r7}
STMIA r0,{r4-r7}
ADD r0,r0,#320
STMIA r0!,{r4-r7}
SUBS r8,r8,#1
BNE DBloop
LDMFD r13!,{r0-r12,pc}
;register for use in MULs
MOV r11,#320
;calculate offset to top left corner
RSB r3,r2,#480
MOV r4,r3,LSR #1
MUL r3,r4,r11
RSB r4,r1,#320
MOV r5,r4,LSR #1
ADD r3,r3,r5
ADD r3,r3,r12
;plot black area of screen
;get height for use as counter
MOV r8,r2
;load initial colour value into r4 & make word sized
MOV r4,#0
ADD r4,r4,r4,LSL #8
ADD r4,r4,r4,LSL #16
;move into other registers
MOV r5,r4
MOV r6,r4
MOV r7,r4
BLloopA MOV r9,r1 ;reset width counter
BLloop STMIA r3!,{r4-r7} ;plot one block of colour data on screen
SUBS r9,r9,#16
BNE BLloop
;update screen pointer to start of next line
RSB r10,r1,#320
ADD r3,r3,r10
SUBS r8,r8,#1
BNE BLloopA
ADD r2,r2,#4
ADD r1,r1,#2
;calculate offset to top left corner
RSB r3,r2,#480
MOV r4,r3,LSR #1
MUL r3,r4,r11
RSB r4,r1,#320
MOV r5,r4,LSR #1
ADD r3,r3,r5
;add to screen start position
ADD r3,r3,r12
;draw dark lines on top and left sides
;get darker colour value
MOV r0,#7
;plot top line
MOV r4,r1
SUB r4,r4,#1
topline STRB r0,[r3,r4]
ADD r3,r3,#320
STRB r0,[r3,r4]
SUB r3,r3,#320
SUBS r4,r4,#1
BNE topline
;plot left side line
MOV r4,r2
leftline STRB r0,[r3],#320
SUBS r4,r4,#1
BNE leftline
SUB r3,r3,#320
;get lighter colour value
MOV r0,#22
;plot bottom line
MOV r4,r1
SUB r4,r4,#1
SUB r3,r3,#640
botline STRB r0,[r3,r4]
ADD r3,r3,#320
STRB r0,[r3,r4]
SUB r3,r3,#320
SUBS r4,r4,#1
BNE botline
;plot right side line
MOV r4,r2
ADD r3,r3,r1
SUB r3,r3,#1
SUB r4,r4,#2
rightline STRB r0,[r3]
SUB r3,r3,#320
SUBS r4,r4,#1
BNE rightline
ADD r2,r2,#4
ADD r1,r1,#2
;calculate offset to top left corner
RSB r3,r2,#480
MOV r4,r3,LSR #1
MUL r3,r4,r11
RSB r4,r1,#320
MOV r5,r4,LSR #1
ADD r3,r3,r5
;add to screen start position
ADD r3,r3,r12
;draw dark lines on top and left sides
;get darker colour value
MOV r0,#7
;plot top line
MOV r4,r1
SUB r4,r4,#1
topline1 STRB r0,[r3,r4]
ADD r3,r3,#320
STRB r0,[r3,r4]
SUB r3,r3,#320
SUBS r4,r4,#1
BNE topline1
;plot left side line
MOV r4,r2
leftline1 STRB r0,[r3],#320
SUBS r4,r4,#1
BNE leftline1
SUB r3,r3,#320
;get lighter colour value
MOV r0,#22
;plot bottom line
MOV r4,r1
SUB r4,r4,#1
SUB r3,r3,#640
botline1 STRB r0,[r3,r4]
ADD r3,r3,#320
STRB r0,[r3,r4]
SUB r3,r3,#320
SUBS r4,r4,#1
BNE botline1
;plot right side line
MOV r4,r2
ADD r3,r3,r1
SUB r3,r3,#1
SUB r4,r4,#2
rightline1
STRB r0,[r3]
SUB r3,r3,#320
SUBS r4,r4,#1
BNE rightline1
EndDrawBorder
LDMFD r13!,{r0-r12,pc}
;draw whole screen in black
DrawBlack
;initial height value
MOV r3,#480
;load initial colour value into r4 & make word sized
MOV r4,#0
ADD r4,r4,r4,LSL #8
ADD r4,r4,r4,LSL #16
;move into other registers
MOV r5,r4
MOV r6,r4
MOV r7,r4
DBLloop STMIA r0!,{r4-r7} ;plot one line of colour data on screen
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
STMIA r0!,{r4-r7}
SUBS r3,r3,#1
BNE DBLloop
B EndDrawBorder
;draw bar graphics.
;on entry -
; r0 = screen address
; r1 = pointer to bar graphics data
|DrawBarVGA|
STMFD r13!,{r0-r12,link}
MOV r14,#16
DrawBarLoop
LDMIA r1!,{r2-r9} ;plot one line of graphics data on screen
STMIA r0!,{r2-r9}
LDMIA r1!,{r2-r9}
STMIA r0!,{r2-r9}
LDMIA r1!,{r2-r9}
STMIA r0!,{r2-r9}
LDMIA r1!,{r2-r9}
STMIA r0!,{r2-r9}
LDMIA r1!,{r2-r9}
STMIA r0!,{r2-r9}
LDMIA r1!,{r2-r9}
STMIA r0!,{r2-r9}
LDMIA r1!,{r2-r9}
STMIA r0!,{r2-r9}
LDMIA r1!,{r2-r9}
STMIA r0!,{r2-r9}
LDMIA r1!,{r2-r9}
STMIA r0!,{r2-r9}
LDMIA r1!,{r2-r9}
STMIA r0!,{r2-r9}
SUBS r14,r14,#1
BNE DrawBarLoop
EndDrawBar
LDMFD r13!,{r0-r12,pc}
;clear background
;on entry -
; r0 = screen address
; r1 = screen width
; r2 = screen height
|AdaptiveRedrawScreenVGA|
STMFD r13!,{r0-r12,link}
;double screen height for VGA
MOV r2,r2,LSL #1
;calculate offset to top left corner
RSB r3,r2,#480
MOV r4,r3,LSR #1
MOV r11,r4,LSL #8
ADD r3,r11,r4,LSL #6
;RSB r4,r1,#320
;MOV r5,r4,LSR #1
;ADD r3,r3,r5
ADD r3,r3,r0
;divide screen height by 2
MOV r2,r2,LSR #1
;plot top half of screen
;get height for use as counter
MOV r8,r2
;load initial colour value into r4 & make word sized
MOV r4,#44
ADD r4,r4,r4,LSL #8
ADD r4,r4,r4,LSL #16
;move into other registers
MOV r5,r4
MOV r6,r4
MOV r7,r4
BLloopA2 MOV r9,r1 ;reset width counter
BLloop2 STMIA r3!,{r4-r7} ;plot one block of colour data on screen
SUBS r9,r9,#16
BNE BLloop2
;update screen pointer to start of next line
RSB r10,r1,#320
ADD r3,r3,r10
SUBS r8,r8,#1
BNE BLloopA2
;plot bottom half of screen
;get height for use as counter
MOV r8,r2
;load initial colour value into r4 & make word sized
MOV r4,#46
ADD r4,r4,r4,LSL #8
ADD r4,r4,r4,LSL #16
;move into other registers
MOV r5,r4
MOV r6,r4
MOV r7,r4
BLloopA1 MOV r9,r1 ;reset width counter
BLloop1 STMIA r3!,{r4-r7} ;plot one block of colour data on screen
SUBS r9,r9,#16
BNE BLloop1
;update screen pointer to start of next line
RSB r10,r1,#320
ADD r3,r3,r10
SUBS r8,r8,#1
BNE BLloopA1
EndAdaptiveRedrawScreen
LDMFD r13!,{r0-r12,pc}
END