home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 44
/
Amiga_Dream_44.iso
/
RiscPc
/
jeux
/
biohazard.arc
/
s
/
VIDC10cs
< prev
next >
Wrap
Text File
|
1995-01-08
|
9KB
|
397 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
EXPORT |ConvertScreen|
;Convert Screen
;
; on entry :-
; r0 = pointer to 8 bpp virtual screen
; r1 = pointer to converted screen
; r2 = number of bits per pixel to convert to
; r3 = table of colour entries for current mode.
|ConvertScreen|
STMFD r13!,{r0-r12,link}
;find which coversion routine to use
CMP r2,#8
BEQ EndConvertScreen
CMP r2,#4
BEQ Conv4bpp
CMP r2,#2
BEQ Conv2bpp
CMP r2,#1
BNE EndConvertScreen
Conv1bpp
;create mask
MOV r14,#255
MOV r12,#256
C1loopB
MOV r11,#10
C1loopA
;load initial data
LDMIA r0!,{r4,r5,r6,r7}
;convert data
;word one
AND r8,r14,r4
LDR r8,[r3,r8,LSL #2]
AND r9,r14,r4,LSR #8
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #1
AND r9,r14,r4,LSR #16
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #2
AND r9,r14,r4,LSR #24
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #3
;word two
AND r9,r14,r5
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #4
AND r9,r14,r5,LSR #8
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #5
AND r9,r14,r5,LSR #16
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #6
AND r9,r14,r5,LSR #24
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #7
;word three
AND r9,r14,r6
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #8
AND r9,r14,r6,LSR #8
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #9
AND r9,r14,r6,LSR #16
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #10
AND r9,r14,r6,LSR #24
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #11
;word four
AND r9,r14,r7
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #12
AND r9,r14,r7,LSR #8
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #13
AND r9,r14,r7,LSR #16
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #14
AND r9,r14,r7,LSR #24
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #15
;load initial data
LDMIA r0!,{r4,r5,r6,r7}
;word five
AND r9,r14,r4
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #16
AND r9,r14,r4,LSR #8
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #17
AND r9,r14,r4,LSR #16
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #18
AND r9,r14,r4,LSR #24
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #19
;word six
AND r9,r14,r5
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #20
AND r9,r14,r5,LSR #8
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #21
AND r9,r14,r5,LSR #16
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #22
AND r9,r14,r5,LSR #24
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #23
;word seven
AND r9,r14,r6
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #24
AND r9,r14,r6,LSR #8
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #25
AND r9,r14,r6,LSR #16
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #26
AND r9,r14,r6,LSR #24
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #27
;word eight
AND r9,r14,r7
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #28
AND r9,r14,r7,LSR #8
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #29
AND r9,r14,r7,LSR #16
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #30
AND r9,r14,r7,LSR #24
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #31
;store on screen
STR r8,[r1],#4
SUBS r11,r11,#1
BNE C1loopA
ADD r1,r1,#280
SUBS r12,r12,#1
BNE C1loopB
B EndConvertScreen
Conv2bpp
;create mask
MOV r14,#255
MOV r12,#256
C2loopB
MOV r11,#20
C2loopA
;load initial data
LDMIA r0!,{r4,r5,r6,r7}
;convert data
;word one
AND r8,r14,r4
LDR r8,[r3,r8,LSL #2]
AND r9,r14,r4,LSR #8
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #2
AND r9,r14,r4,LSR #16
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #4
AND r9,r14,r4,LSR #24
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #6
;word two
AND r9,r14,r5
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #8
AND r9,r14,r5,LSR #8
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #10
AND r9,r14,r5,LSR #16
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #12
AND r9,r14,r5,LSR #24
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #14
;word three
AND r9,r14,r6
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #16
AND r9,r14,r6,LSR #8
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #18
AND r9,r14,r6,LSR #16
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #20
AND r9,r14,r6,LSR #24
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #22
;word four
AND r9,r14,r7
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #24
AND r9,r14,r7,LSR #8
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #26
AND r9,r14,r7,LSR #16
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #28
AND r9,r14,r7,LSR #24
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #30
;store on screen
STR r8,[r1],#4
SUBS r11,r11,#1
BNE C2loopA
ADD r1,r1,#240
SUBS r12,r12,#1
BNE C2loopB
B EndConvertScreen
Conv4bpp
;create mask
MOV r14,#255
MOV r12,#256
C4loopB
MOV r11,#40
C4loopA
;load initial data
LDMIA r0!,{r4,r5}
;convert data
AND r7,r14,r4
LDR r7,[r3,r7,LSL #2]
AND r6,r14,r4,LSR #8
LDR r6,[r3,r6,LSL #2]
ADD r7,r7,r6,LSL #4
AND r6,r14,r4,LSR #16
LDR r6,[r3,r6,LSL #2]
ADD r7,r7,r6,LSL #8
AND r6,r14,r4,LSR #24
LDR r6,[r3,r6,LSL #2]
ADD r7,r7,r6,LSL #12
AND r6,r14,r5
LDR r6,[r3,r6,LSL #2]
ADD r7,r7,r6,LSL #16
AND r6,r14,r5,LSR #8
LDR r6,[r3,r6,LSL #2]
ADD r7,r7,r6,LSL #20
AND r6,r14,r5,LSR #16
LDR r6,[r3,r6,LSL #2]
ADD r7,r7,r6,LSL #24
AND r6,r14,r5,LSR #24
LDR r6,[r3,r6,LSL #2]
ADD r7,r7,r6,LSL #28
;store on screen
STR r7,[r1],#4
SUBS r11,r11,#1
BNE C4loopA
ADD r1,r1,#160
SUBS r12,r12,#1
BNE C4loopB
B EndConvertScreen
Conv8bpp
;create mask
MOV r14,#255
MOV r12,#256
C8loopB
MOV r11,#40
C8loopA
;load initial data
LDMIA r0!,{r4,r5}
;convert data
;word one
AND r8,r14,r4
LDR r8,[r3,r8,LSL #2]
AND r9,r14,r4,LSR #8
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #8
AND r9,r14,r4,LSR #16
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #16
AND r9,r14,r4,LSR #24
LDR r9,[r3,r9,LSL #2]
ADD r8,r8,r9,LSL #24
AND r9,r14,r5
LDR r9,[r3,r9,LSL #2]
AND r10,r14,r5,LSR #8
LDR r10,[r3,r10,LSL #2]
ADD r9,r9,r10,LSL #8
AND r10,r14,r5,LSR #16
LDR r10,[r3,r10,LSL #2]
ADD r9,r9,r10,LSL #16
AND r10,r14,r5,LSR #24
LDR r10,[r3,r10,LSL #2]
ADD r9,r9,r10,LSL #24
;store on screen
STMIA r1!,{r8,r9}
SUBS r11,r11,#1
BNE C8loopA
SUBS r12,r12,#1
BNE C8loopB
EndConvertScreen
LDMFD r13!,{r0-r12,pc}
END