home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 44
/
Amiga_Dream_44.iso
/
RiscPc
/
jeux
/
biohazard.arc
/
s
/
KCourse
< prev
next >
Wrap
Text File
|
1994-11-14
|
12KB
|
432 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 |PlotFloor|
PltFloorX DCB "PlotFloor", 0
ALIGN
PltFloorY DCD &ff000000 + PltFloorY - PltFloorX
;on entry
;
; r0 = pointer to data block where :-
;
; 0 = pointer to perspective plot data
; format of plot data is :-
; word 1...x1 x start position
; word 2...y1 y start position
; word 3...xg x increment value (per screen pixel)
; word 4...yg y increment value (per screen pixel)
; 1 = screen address (of the first line to draw on)
; 2 = pointer to sprite data to use as floor.
; This is simply a 64x64 block of data
; 3 = counter (number of lines to draw)
; 4 = x offset
; 5 = y offset
; 6 = screen width
; 7 = screen height
|PlotFloor|
STMFD r13!,{r0-r12,link}
;load up block data
MOV r14,r0
LDMIA r14,{r0-r7}
;find address of sprite
ADD r2,r2,#8
LDR r8,[r2,#32]
ADD r2,r8,r2
Plot_Loop
;load up the next block of perspective plot data
LDMIA r0!,{r9-r12}
SUB r9,r9,r5
ADD r10,r10,r4
;store vars on stack
; screen address is updated by line drawing procedure
; source base is used by the line drawing program and not changed
STMFD r13!,{r0,r3,r4,r5,r6,r7}
;main line drawing procedure
;load screen width and 511 register
MOV r4,r6
MOV r3,#512
SUB r3,r3,#1
Draw_Line
;extract x,y positions in sprite data from x & y
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
;construct address from x & y values
ADD r0,r0,r14,LSL #9
;load byte from source_base + (x + 128(y))
MOVS r0,r0,LSR #1
LDRB r5,[r2,r0]
ANDCS r5,r5,#15
MOVCC r5,r5,LSR #4
ORR r5,r5,r5,LSL #4
;check byte is within limits
CMP r10,#33554432
MOVGE r5,#34
CMP r10,#0
MOVLT r5,#34
CMP r9,#33554432
MOVGE r5,#34
CMP r9,#0
MOVLT r5,#34
;update x & y
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 2 word 1
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r14,[r2,r0]
ANDCS r14,r14,#15
MOVCC r14,r14,LSR #4
ORR r14,r14,r14,LSL #4
CMP r10,#33554432
MOVGE r14,#34
CMP r10,#0
MOVLT r14,#34
CMP r9,#33554432
MOVGE r14,#34
CMP r9,#0
MOVLT r14,#34
ADD r5,r5,r14,LSL #8
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 3 word 1
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r14,[r2,r0]
ANDCS r14,r14,#15
MOVCC r14,r14,LSR #4
ORR r14,r14,r14,LSL #4
CMP r10,#33554432
MOVGE r14,#34
CMP r10,#0
MOVLT r14,#34
CMP r9,#33554432
MOVGE r14,#34
CMP r9,#0
MOVLT r14,#34
ADD r5,r5,r14,LSL #16
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 4 word 1
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r14,[r2,r0]
ANDCS r14,r14,#15
MOVCC r14,r14,LSR #4
ORR r14,r14,r14,LSL #4
CMP r10,#33554432
MOVGE r14,#34
CMP r10,#0
MOVLT r14,#34
CMP r9,#33554432
MOVGE r14,#34
CMP r9,#0
MOVLT r14,#34
ADD r5,r5,r14,LSL #24
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 1 word 2
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r6,[r2,r0]
ANDCS r6,r6,#15
MOVCC r6,r6,LSR #4
ORR r6,r6,r6,LSL #4
CMP r10,#33554432
MOVGE r6,#34
CMP r10,#0
MOVLT r6,#34
CMP r9,#33554432
MOVGE r6,#34
CMP r9,#0
MOVLT r6,#34
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 2 word 2
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r14,[r2,r0]
ANDCS r14,r14,#15
MOVCC r14,r14,LSR #4
ORR r14,r14,r14,LSL #4
CMP r10,#33554432
MOVGE r14,#34
CMP r10,#0
MOVLT r14,#34
CMP r9,#33554432
MOVGE r14,#34
CMP r9,#0
MOVLT r14,#34
ADD r6,r6,r14,LSL #8
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 3 word 2
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r14,[r2,r0]
ANDCS r14,r14,#15
MOVCC r14,r14,LSR #4
ORR r14,r14,r14,LSL #4
CMP r10,#33554432
MOVGE r14,#34
CMP r10,#0
MOVLT r14,#34
CMP r9,#33554432
MOVGE r14,#34
CMP r9,#0
MOVLT r14,#34
ADD r6,r6,r14,LSL #16
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 4 word 2
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r14,[r2,r0]
ANDCS r14,r14,#15
MOVCC r14,r14,LSR #4
ORR r14,r14,r14,LSL #4
CMP r10,#33554432
MOVGE r14,#34
CMP r10,#0
MOVLT r14,#34
CMP r9,#33554432
MOVGE r14,#34
CMP r9,#0
MOVLT r14,#34
ADD r6,r6,r14,LSL #24
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 1 word 3
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r7,[r2,r0]
ANDCS r7,r7,#15
MOVCC r7,r7,LSR #4
ORR r7,r7,r7,LSL #4
CMP r10,#33554432
MOVGE r7,#34
CMP r10,#0
MOVLT r7,#34
CMP r9,#33554432
MOVGE r7,#34
CMP r9,#0
MOVLT r7,#34
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 2 word 3
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r14,[r2,r0]
ANDCS r14,r14,#15
MOVCC r14,r14,LSR #4
ORR r14,r14,r14,LSL #4
CMP r10,#33554432
MOVGE r14,#34
CMP r10,#0
MOVLT r14,#34
CMP r9,#33554432
MOVGE r14,#34
CMP r9,#0
MOVLT r14,#34
ADD r7,r7,r14,LSL #8
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 3 word 3
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r14,[r2,r0]
ANDCS r14,r14,#15
MOVCC r14,r14,LSR #4
ORR r14,r14,r14,LSL #4
CMP r10,#33554432
MOVGE r14,#34
CMP r10,#0
MOVLT r14,#34
CMP r9,#33554432
MOVGE r14,#34
CMP r9,#0
MOVLT r14,#34
ADD r7,r7,r14,LSL #16
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 4 word 3
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r14,[r2,r0]
ANDCS r14,r14,#15
MOVCC r14,r14,LSR #4
ORR r14,r14,r14,LSL #4
CMP r10,#33554432
MOVGE r14,#34
CMP r10,#0
MOVLT r14,#34
CMP r9,#33554432
MOVGE r14,#34
CMP r9,#0
MOVLT r14,#34
ADD r7,r7,r14,LSL #24
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 1 word 4
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r8,[r2,r0]
ANDCS r8,r8,#15
MOVCC r8,r8,LSR #4
ORR r8,r8,r8,LSL #4
CMP r10,#33554432
MOVGE r8,#34
CMP r10,#0
MOVLT r8,#34
CMP r9,#33554432
MOVGE r8,#34
CMP r9,#0
MOVLT r8,#34
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 2 word 4
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r14,[r2,r0]
ANDCS r14,r14,#15
MOVCC r14,r14,LSR #4
ORR r14,r14,r14,LSL #4
CMP r10,#33554432
MOVGE r14,#34
CMP r10,#0
MOVLT r14,#34
CMP r9,#33554432
MOVGE r14,#34
CMP r9,#0
MOVLT r14,#34
ADD r8,r8,r14,LSL #8
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 3 word 4
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r14,[r2,r0]
ANDCS r14,r14,#15
MOVCC r14,r14,LSR #4
ORR r14,r14,r14,LSL #4
CMP r10,#33554432
MOVGE r14,#34
CMP r10,#0
MOVLT r14,#34
CMP r9,#33554432
MOVGE r14,#34
CMP r9,#0
MOVLT r14,#34
ADD r8,r8,r14,LSL #16
ADD r9,r9,r11
ADD r10,r10,r12
;load byte 4 word 4
AND r0,r3,r9,LSR #16
AND r14,r3,r10,LSR #16
ADD r0,r0,r14,LSL #9
MOVS r0,r0,LSR #1
LDRB r14,[r2,r0]
ANDCS r14,r14,#15
MOVCC r14,r14,LSR #4
ORR r14,r14,r14,LSL #4
CMP r10,#33554432
MOVGE r14,#34
CMP r10,#0
MOVLT r14,#34
CMP r9,#33554432
MOVGE r14,#34
CMP r9,#0
MOVLT r14,#34
ADD r8,r8,r14,LSL #24
ADD r9,r9,r11
ADD r10,r10,r12
;write block to screen
STMIA r1!,{r5-r8}
SUBS r4,r4,#8
BNE Draw_Line
;load vars from stack & decrement line counter
LDMFD r13!,{r0,r3,r4,r5,r6,r7}
SUBS r3,r3,#1
;adjust pointer to screen to start of next line
RSB r8,r6,#80
ADD r1,r1,r8
BNE Plot_Loop
EndPlotFloor
LDMFD r13!,{r0-r12,pc}
END