Home » Recent acquisitions » Acorn ADFS disks » adfs_AcornUser_199610.adf » Regulars » StarInfo/Docking/!FixGourad/!RunImage

StarInfo/Docking/!FixGourad/!RunImage

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Recent acquisitions » Acorn ADFS disks » adfs_AcornUser_199610.adf » Regulars
Filename: StarInfo/Docking/!FixGourad/!RunImage
Read OK:
File size: 7400 bytes
Load address: 0000
Exec address: 0000
File contents
  ��0O�����0�0� R��(�O� �t

)� Perpetual Motion  -  !RunImage file
� � Andrew Docking 1996

(
2Y� ------------------------- WHEN THINGS GO WRONG HANDLING CODE ----------------------
<`� � ș "Hourglass_Smash" : � 0 : � 0,(�$+" (internal error code "+�(�)+" at line "+�(�)+")")
F
P
Z
d
n(� "Fixed intensity gourad shading"''
x
�S� --------------------------- SETUP PROCEDURES --------------------------------
�
��setup_reference_lists
��initialise_edge_tables
��initialise_gourad_colsets
�
�S� --------------------------- 3D OBJECT SETUP PROCEDURES ----------------------
�
��setup_3d_crafts
�
�
�S� --------------------------- COMPILE MAIN CODE -------------------------------
��assemble_screen_handlers
�assemble_3d_handlers

S� --------------------------- INITIALISE UNIVERSAL STACK ----------------------
"� init_stack
,
6S� --------------------------- SETUP GAME SCREEN -------------------------------
@�15
J�13
T�
^
hd%=1
re%=1
|f%=0
�
��
��=0
�ȗ mx,my,b
�� screen_swap
�
� clr_scr
�
�aa%=!(craft_header_list%)
�
�� f%=0 : � e%=1 : aa%!44+=1
�� f%=0 : � e%=0 : aa%!44-=1
�
�� aa%!44<-4 e%=1
� aa%!44>4 e%=0

� d%=1 : aa%!8-=2
&� d%=0 : aa%!8+=2
0
:� aa%!8>1400 d%=1
D� aa%!8<300 d%=0
N
X
aa%!40+=2
b
l	f%+=1
v
�A%=0
�� craft_movement_handler
�� project_craft
�
�
�� f%>=15 f%=0
��0
�
�
�
�
��
�


_� ------------------------------------ SCREEN HANDLING CODE -------------------------------
 
*� �assemble_screen_handlers
4
>� pass%,link,sp,stack%
H
R
len%=8192
\
flink=14
p	sp=11
z
�� stack% 8192
�� code% len%
�
�#� "Assembling screen handlers"'
�
�� pass%=8 � 10 � 2
�
P%= code%
�L%= code% + len%
�[ OPT pass%
�
� .screen_adr%          EQUD 0
�%.stack_base%          EQUD stack%
�

.init_stack
LDR     sp,stack_base%
$MOV     PC,link
.
8
B
L.bank%     EQUD   1
VI.vduin%    EQUD   148            ; for use with "OS_ReadVduVariables"
`           EQUD   -1
j7.vduout%   EQUD   0                ; screen address
t
~
�.screen_swap
�&STMFA      (sp)!,{r0-r10,r12,link}
�:MOV        r0,#19               ; wait for vsync event
�SWI        "OS_Byte"
�
�3LDR        r4,bank%             ; load bank no.
�4RSB        r4,r4,#3             ; bank = 3 -bank
�4STR        r4,bank%             ; store bank no.
�
�MOV        r0,#112
�MOV        r1,r4
�SWI        "OS_Byte"
MOV        r0,#113

RSB        r1,r4,#3
SWI        "OS_Byte"

(?ADR        r0,vduin%            ; get new screen adr in r12
2ADR        r1,vduout%
<$SWI        "OS_ReadVduVariables"
FLDR        r12,vduout%
PSTR        r12,screen_adr%
Z&LDMFA      (sp)!,{r0-r10,r12,link}
dMOV        PC,link
n
x
�.clr_scr
�&STMFA      (sp)!,{r0-r10,r12,link}
�LDR        r12,screen_adr%
�MOV        r9,#256
�
�MOV        r0,#0
�MOV        r1,r0
�MOV        r2,r0
�MOV        r3,r0
�MOV        r4,r0
�MOV        r5,r0
�MOV        r6,r0
�MOV        r7,r0

.clrscr_loop
]
"� I%=1 � 10
,[ OPT pass%
6STMIA      r12!,{r0-r7}
@]
J�
T
^[ OPT pass%
hSUBS       r9,r9,#1
rBGT        clrscr_loop
|
�&LDMFA      (sp)!,{r0-r10,r12,link}
�
�(MOV        PC,link    ; exit routine
�
�
�
�
�[; ----------------------------------- Rendering routines ------------------------------
�
�<.gourad_colsets_base%               EQUD gourad_colsets%
�
�.gourad_scan_line
� ; r0 is x coord of scan line
; r1 is y coord
; r2 is length
; r3 is start intensity
&; r4 is end intensity
0
:*STMFA          (sp)!,{r0-r10,r12,link}
D"LDR            r12,screen_adr%
N2ADD            r12,r12,r0                ; + x
X6MOV            r7,r1,ASL#8               ; y * 256
b5MOV            r8,r1,ASL#6               ; y * 64
lGADD            r7,r7,r8                  ; (y*64) + (y*256) = y*320
vMADD            r12,r12,r7                ; r12 is final adr of line start
�
�
�GSUB            r4,r4,r3                  ; r4 = end int - start int
�
�?�swm_rdiv_sca(4,2,5)                    ; r5 is scaled step
�BMOV            r0,#0                     ; r0 is scaled offset
�
�+LDR            r10,gourad_colsets_base%
�'LDR            r8,gourad_colset_no%
�#ADD            r10,r10,r8,ASL#5
�
�.gourad_scan_line_loop
�*ADD            r1,r3,r0,ASR#div_scale%
?LDRB           r9,[r10,r1]                ; load pix colour
KSTRB           r9,[r12],#1                ; store to screen and inc r12

 LADD            r0,r0,r5                   ; scaled offset += scaled step
*
4SUBS           r2,r2,#1
>(BGE            gourad_scan_line_loop
H
R
\
f.end_gourad_scan_line
p*LDMFA          (sp)!,{r0-r10,r12,link}
zMOV            PC,link
�
�
�
�
�
�
�9.scan_conv_wkarea_base%        EQUD scan_conv_wkarea%
�.scan_conv_wkarea%
�'EQUB 0              ; top intensity
�*EQUB 12             ; bottom intensity
�
EQUB 0
�
EQUB 0
�
	
EQUD 0
	
	EQUD scan_conv_tex_lhs%
	$EQUD scan_conv_tex_rhs%
	.
	8
	B.scan_convert_gourad_line
	L
	V*STMFA          (sp)!,{r0-r10,r12,link}
	`; r0 x1
	j; r1 y1
	t; r2 x2
	~; r3 y2
	�
	�
	�
	�CMP            r1,r3
	�/BEQ            end_scan_convert_gourad_line
	�
	�[CMP            r1,r3                      ; if y1 > y2, swap x1 with x1, and y1 with y2
	�MOVGT          r4,r0
	�MOVGT          r5,r1
	�MOVGT          r0,r2
	�MOVGT          r1,r3
	�MOVGT          r2,r4
MOVGT          r3,r5



-LDR            r12,scan_conv_wkarea_base%
(MLDRLE          r10,[r12,#8]               ; load adr of lhs base if y1<y2
2^LDRLEB         r6,[r12,#0]                ; load top int and bottom int correct way around
<OLDRLEB         r7,[r12,#1]                ; r6 is top int, r7 is bottom int
F
P
ZMLDRGT          r10,[r12,#12]              ; load adr of rhs base if y1>y2
d^LDRGTB         r6,[r12,#1]                ; load top int and bottom int reverse way around
nOLDRGTB         r7,[r12,#0]                ; r6 is top int, r7 is bottom int
x
�
�
�
�:SUB            r4,r2,r0                   ; r4 = x2-x1
�:SUB            r5,r3,r1                   ; r5 = y2-y1
�6�swm_rdiv_sca(4,5,3)                     ; r3 is m
�
�ISUB            r7,r7,r6                   ; r7 = bottom int - top int
�D�swm_rdiv_sca(7,5,8)                     ; r8 = scaled step size
�MOV            r14,#0
�
�
�
FMOV            r2,r0,ASL#div_scale%       ; scale up x start coord

.scan_conv_loop
"AMOV            r0,r2,ASR#div_scale%       ; r0 is new x coord
,
6IADD            r12,r10,r1,ASL#4           ; r12 = base + y coord * 16
@7STR            r0,[r12]                   ; store x
J
TTADD            r9,r6,r14,ASR#div_scale%   ; scale down int and store at base + 4
^STR            r9,[r12,#4]
h
rCADD            r2,r2,r3                   ; inc scaled x with m
|TADD            r14,r14,r8                 ; inc scaled int with scaled step size
�
�;ADD            r1,r1,#1                   ; inc y coord
�SUBS           r5,r5,#1
�!BGT            scan_conv_loop
�
�
�
�!.end_scan_convert_gourad_line
�*LDMFA          (sp)!,{r0-r10,r12,link}
�MOV            PC,link
�
�
�6.quad_workspace_base%         EQUD quad_workspace%
.quad_workspace%
EQUD 0         ; x0
EQUD 20         ; y0
&
0EQUD 20         ; x1
:EQUD 60         ; y1
D
NEQUD 90         ; x2
XEQUD 50         ; y2
b
lEQUD 80         ; x3
vEQUD 0         ; y3
�
�0EQUB 0         ; intensities for each vertex
�
EQUB 0
�EQUB 32
�
EQUB 0
�
�&.gourad_colset_no%          EQUD 0
�
�.plot_gourad_quad
�; r0 is colset to use
�*STMFA          (sp)!,{r0-r10,r12,link}
�
�'STR            r0,gourad_colset_no%

+LDR            r12,quad_workspace_base%

-LDR            r10,scan_conv_wkarea_base%



 ; side 0 - 1

*1LDR            r0,[r12]                  ; x0

41LDR            r1,[r12,#4]               ; y0

>1LDR            r2,[r12,#8]               ; x1

H1LDR            r3,[r12,#12]              ; y1

R5LDRB           r4,[r12,#32]              ; p0 int

\;STRB           r4,[r10,#0]               ; store p0 int

f5LDRB           r5,[r12,#33]              ; p1 int

p;STRB           r5,[r10,#1]               ; store p1 int

z+BL             scan_convert_gourad_line

�

�; side 1 - 2

�4LDR            r0,[r12,#8]                  ; x1

�2LDR            r1,[r12,#12]               ; y1

�2LDR            r2,[r12,#16]               ; x2

�1LDR            r3,[r12,#20]              ; y2

�5LDRB           r4,[r12,#33]              ; p1 int

�;STRB           r4,[r10,#0]               ; store p1 int

�5LDRB           r5,[r12,#34]              ; p2 int

�;STRB           r5,[r10,#1]               ; store p2 int

�+BL             scan_convert_gourad_line

�

�; side 2 - 3
5LDR            r0,[r12,#16]                  ; x2
2LDR            r1,[r12,#20]               ; y2
2LDR            r2,[r12,#24]               ; x3
$1LDR            r3,[r12,#28]              ; y3
.5LDRB           r4,[r12,#34]              ; p2 int
8;STRB           r4,[r10,#0]               ; store p2 int
B5LDRB           r5,[r12,#35]              ; p3 int
L;STRB           r5,[r10,#1]               ; store p3 int
V+BL             scan_convert_gourad_line
`
j; side 3 - 0
t5LDR            r0,[r12,#24]                  ; x3
~2LDR            r1,[r12,#28]               ; y3
�1LDR            r2,[r12,#0]               ; x0
�0LDR            r3,[r12,#4]              ; y0
�5LDRB           r4,[r12,#35]              ; p3 int
�;STRB           r4,[r10,#0]               ; store p3 int
�5LDRB           r5,[r12,#32]              ; p0 int
�;STRB           r5,[r10,#1]               ; store p0 int
�+BL             scan_convert_gourad_line
�
�
�3MOV            r4,#255                   ; ymin
�3MOV            r5,#0                     ; ymax
�
"; find polygon y max and y min

1LDR            r6,[r12,#4]               ; y0
CMP            r6,r4
MOVLT          r4,r6
(CMP            r6,r5
2MOVGT          r5,r6
<1LDR            r6,[r12,#12]              ; y1
FCMP            r6,r4
PMOVLT          r4,r6
ZCMP            r6,r5
dMOVGT          r5,r6
n1LDR            r6,[r12,#20]              ; y2
xCMP            r6,r4
�MOVLT          r4,r6
�CMP            r6,r5
�MOVGT          r5,r6
�1LDR            r6,[r12,#28]              ; y3
�CMP            r6,r4
�MOVLT          r4,r6
�CMP            r6,r5
�MOVGT          r5,r6
�
�
�<LDR            r12,[r10,#8]              ; lhs list base
�<LDR            r9,[r10,#12]              ; rhs list base
�
;SUB            r5,r5,r4                  ; r5 is y size
MOV            r1,r4

".fill_gourad_poly_loop
,KADD            r8,r12,r1,ASL#4           ; r8 = lhs base + y coord * 16
6KADD            r7,r9,r1,ASL#4            ; r7 = rhs base + y coord * 16
@
JALDR            r0,[r8]                   ; load start x coord
T; r1 is y coord
^LDR            r2,[r7]
h?SUB            r2,r2,r0                  ; r2 is now length
r8LDR            r3,[r8,#4]                ; start int
|6LDR            r4,[r7,#4]                ; end int
�
�#BL             gourad_scan_line
�
�>ADD            r1,r1,#1                  ; y coord in poly
�SUBS           r5,r5,#1
�(BGT            fill_gourad_poly_loop
�
�
�*LDMFA          (sp)!,{r0-r10,r12,link}
�MOV            PC,link
�
�
�


.plot_dot

; r6 is x
&
; r7 is y
0*STMFA          (sp)!,{r0-r10,r12,link}
:"LDR            r12,screen_adr%
DADD            r12,r12,r6
N
XMOV            r2,r7,ASL#8
bMOV            r3,r7,ASL#6
lADD            r2,r2,r3
vADD            r12,r12,r2
�
�MOV            r10,#255
�STRB           r10,[r12]
�
�*LDMFA          (sp)!,{r0-r10,r12,link}
�MOV            PC,link
�
�
�S; ----------------------- global list addresses -------------------------------
�
�8.swm_rdiv_list_base%             EQUD swm_rdiv_list%
�
�]
� pass%

�
 
*P� --------------------------- SETUP GOURAD MAP STUFF -----------------------
4
>
H
R � �initialise_gourad_colsets
\
f� no_of_colsets%,col
p
z)fh=�"<Perpetual_Motion$Dir>.Col�Sets"
�
��#fh,no_of_colsets%
�
�6� 12 colours in one set ( 1 byte for each colour )
�
�'� gourad_colsets% 32*no_of_colsets%
�
�"� I%=0 � (32*no_of_colsets%)-1
�  col=�#fh
�  gourad_colsets%?I%=col
�� I%
�
��#fh

�

$
.
8W� --------------------------- 3d object handlers ----------------------------------
B
L��assemble_3d_handlers
V
`� adr%,pass%,link,sp
j
tlink=14
~	sp=11
�
�"� continues on in code% memory
�
�adr%=P%
�
�&� "Assembling 3D object handlers"'
�
�� pass%=8 � 10 � 2
�
�P%=adr%
�L%=code% + len%
�
[ OPT pass%


]; Addresses already used ( in front of code so it it uses these instead of the previous )

(6.quad_workspace_base%         EQUD quad_workspace%
25.swm_rdiv_list_base%          EQUD swm_rdiv_list%
<
F
P2.sine_table_base%             EQUD sine_table%
Z4.cosine_table_base%           EQUD cosine_table%
d9.craft_header_list_base%      EQUD craft_header_list%
n
x*.screen_x_origin%             EQUD 160
�*.screen_y_origin%             EQUD 128
�
�
�
� ; r0 is craft no. to project
�.project_craft
�/STMFA               (sp)!,{r0-r10,r12,link}
�
�;; rotate original data around z and put into trans data
�
�3LDR                 r10,craft_header_list_base%
�SLDR                 r12,[r10,r0,ASL#2]          ; r10 is header of craft no. r0
�SLDR                 r10,[r12,#52]               ; r10 is no. of points in craft

MLDR                 r8,[r12,#60]                ; r8 is base of orig data
NLDR                 r9,[r12,#64]                ; r9 is base of trans data
"
,-LDR                 r0,cosine_table_base%
6+LDR                 r1,sine_table_base%
@
J;LDR                 r5,[r12,#40]                ; z rot
T
^ILDR                 r6,[r0,r5,ASL#2]            ; r6 is c   ( * 256 )
hILDR                 r7,[r1,r5,ASL#2]            ; r7 is s   ( * 256 )
r
|
�; X = ( x * c ) - ( y * s )
�; Y = ( y * c ) + ( x * s )
�!.rotate_craft_original_data_z
�7LDR                 r0,[r8],#4                  ; x
�7LDR                 r1,[r8],#4                  ; y
�
�7LDR                 r2,[r8],#4                  ; z
�=STR                 r2,[r9,#8]                  ; store z
�
�BMUL                 r2,r0,r6                    ; r2 = (x * c)
�BMUL                 r3,r1,r7                    ; r3 = (y * s)
�]SUB                 r4,r2,r3                    ; r4 = (x * c) - (y * s)  ( r4 is new x )
�BMOV                 r4,r4,ASR#8                 ; scale down x

SSTR                 r4,[r9],#4                  ; store x and inc to y position

&DMUL                 r2,r1,r6                    ; r2 = ( y * c )
0DMUL                 r3,r0,r7                    ; r3 = ( x * s )
:aADD                 r4,r2,r3                    ; r4 = ( y * c ) + ( x * s )  ( r4 is new y )
DBMOV                 r4,r4,ASR#8                 ; scale down y
N
X"STR                 r4,[r9],#8
b
l"SUBS                r10,r10,#1
v4BGT                 rotate_craft_original_data_z
�
�
�
�
�:; rotate trans data around y and store into trans data
�
�SLDR                 r10,[r12,#52]               ; r10 is no. of points in craft
�NLDR                 r9,[r12,#64]                ; r9 is base of trans data
�
�-LDR                 r0,cosine_table_base%
�+LDR                 r1,sine_table_base%
�
�;LDR                 r5,[r12,#36]                ; y rot

ILDR                 r6,[r0,r5,ASL#2]            ; r6 is c   ( * 256 )
ILDR                 r7,[r1,r5,ASL#2]            ; r7 is s   ( * 256 )
 
*; X = ( x * c ) - ( z * s )
4; Z = ( z * c ) + ( x * s )
>.rotate_craft_trans_data_y
H7LDR                 r0,[r9]                     ; x
R7LDR                 r1,[r9,#8]                  ; z
\
fDMUL                 r2,r0,r6                    ; r2 = ( x * c )
pDMUL                 r3,r1,r7                    ; r3 = ( z * s )
z[SUB                 r4,r2,r3                    ; r4 = ( x * c ) - ( z * s )    (  x  )
�IMOV                 r4,r4,ASR#8                 ; scale down x by 256
�
�"STR                 r4,[r9],#8
�
�DMUL                 r2,r1,r6                    ; r2 = ( z * c )
�DMUL                 r3,r0,r7                    ; r3 = ( x * s )
�ZADD                 r4,r2,r3                    ; r4 = ( z * c ) + ( x * s )   (  z  )
�IMOV                 r4,r4,ASR#8                 ; scale down z by 256
�
�"STR                 r4,[r9],#4
�
�"SUBS                r10,r10,#1
�1BGT                 rotate_craft_trans_data_y



$
.
84; project trans data and store in final x,y data
B
LSLDR                 r10,[r12,#52]               ; r10 is no. of points in craft
V
`OLDR                 r8,[r12,#64]                 ; r8 is base of trans data
jMLDR                 r9,[r12,#68]                 ; r9 is base of x,y data
t
~DLDR                 r3,[r12,#0]                 ; x pos of craft
�DLDR                 r4,[r12,#4]                 ; y pos of craft
�DLDR                 r5,[r12,#8]                 ; z pos of craft
�
�.project_craft_trans_data
�7LDR                 r0,[r8],#4                  ; x
�7LDR                 r1,[r8],#4                  ; y
�7LDR                 r2,[r8],#4                  ; z
�
�>ADD                 r0,r0,r3                    ; offset x
�>ADD                 r1,r1,r4                    ; offset y
�>ADD                 r2,r2,r5                    ; offset z
�
MMOV                 r0,r0,ASL#8                 ; scale up x and y by 256

#MOV                 r1,r1,ASL#8

:�swm_rdiv_act(0,2,6)                           ; x / z
(:�swm_rdiv_act(1,2,7)                           ; y / z
2
<"ADD                 r6,r6,#160
F"ADD                 r7,r7,#128
P
Z"STR                 r6,[r9],#4
d"STR                 r7,[r9],#4
n
x"SUBS                r10,r10,#1
�0BGT                 project_craft_trans_data
�
�
�; plot craft facets
�
�SLDR                 r10,[r12,#56]               ; r10 is no. of facets in craft
�RLDR                 r9,[r12,#72]                ; r9 is base of rendering data
�LLDR                 r8,[r12,#68]                ; r8 is base of x,y data
�
�
�.plot_craft_facets
�/LDR                 r7,quad_workspace_base%
�@LDR                 r0,[r9],#4                  ; r0 is type

8LDR                 r5,[r9],#4                  ; p0
OADD                 r6,r8,r5,ASL#3              ; r6 is adr of x,y point r5
"7LDR                 r1,[r6]                     ; x
,7LDR                 r2,[r6,#4]                  ; y
6=STR                 r1,[r7],#4                  ; store x
@=STR                 r2,[r7],#4                  ; store y
JMSTMFA               (sp)!,{r1,r2}               ; store x1,y1 coord pairs
T
^8LDR                 r5,[r9],#4                  ; p1
hOADD                 r6,r8,r5,ASL#3              ; r6 is adr of x,y point r5
r7LDR                 r1,[r6]                     ; x
|7LDR                 r2,[r6,#4]                  ; y
�=STR                 r1,[r7],#4                  ; store x
�=STR                 r2,[r7],#4                  ; store y
�MSTMFA               (sp)!,{r1,r2}               ; store x2,y2 coord pairs
�
�
�8LDR                 r5,[r9],#4                  ; p2
�OADD                 r6,r8,r5,ASL#3              ; r6 is adr of x,y point r5
�7LDR                 r1,[r6]                     ; x
�7LDR                 r2,[r6,#4]                  ; y
�=STR                 r1,[r7],#4                  ; store x
�=STR                 r2,[r7],#4                  ; store y
�MSTMFA               (sp)!,{r1,r2}               ; store x3,y3 coord pairs
�

8LDR                 r5,[r9],#4                  ; p3
OADD                 r6,r8,r5,ASL#3              ; r6 is adr of x,y point r5
&7LDR                 r1,[r6]                     ; x
07LDR                 r2,[r6,#4]                  ; y
:=STR                 r1,[r7],#4                  ; store x
D=STR                 r2,[r7],#4                  ; store y
N
XKLDR                 r3,[r9],#4                  ; intensity information
bSTR                 r3,[r7]
l
v1LDMFA               (sp)!,{r6,r5,r4,r3,r2,r1}
�; r1,r2 is x1,y1
�; r3,r4 is x2,y2
�; r5,r6 is x3,y3
�
�5;           x1          y3          y1         x3
�4;           |           |           |          |
�9; vis = ( x1-x2 ) * ( y3-y2 ) - ( y1-y2 ) * ( x3-x2 )
�/;                 |                       |
�0;                 r3                      r4
�
�FSUB                 r1,r1,r3                     ; r1 is ( x1-x2 )
�FSUB                 r6,r6,r4                     ; r6 is ( y3-y2 )
�FSUB                 r2,r2,r4                     ; r2 is ( y1-y2 )
FSUB                 r5,r5,r3                     ; r5 is ( x3-x2 )

QMUL                 r3,r1,r6                     ; r3 = ( x1-x2 ) * ( y3-y2 )
 QMUL                 r4,r2,r5                     ; r4 = ( y1-y2 ) * ( x3-x2 )
*
4@SUBS                r1,r3,r4                     ; r1 is ans
>
H(BLGT                plot_gourad_quad
R
\
f
p"SUBS                r10,r10,#1
z)BGT                 plot_craft_facets
�
�/LDMFA               (sp)!,{r0-r10,r12,link}
�MOV                 PC,link
�
�
�
�
�
�%; r0 is no. of craft to calculate
�.craft_movement_handler
�/STMFA               (sp)!,{r0-r10,r12,link}
�
�3LDR                 r10,craft_header_list_base%
SLDR                 r12,[r10,r0,ASL#2]          ; r12 is header of craft no. r0

GLDR                 r0,[r12,#44]                ; r0 is y rot speed
$ALDR                 r1,[r12,#36]                ; r1 is y rot
.
8NADD                 r1,r1,r0                    ; add y rot speed to y rot
B
LNCMP                 r1,#360                     ; ensure y rot is in range
V"SUBGE               r1,r1,#360
`MOVS                r1,r1
j"ADDLT               r1,r1,#360
t
~ASTR                 r1,[r12,#36]                ; store y rot
�$LDR                 r2,[r12,#40]
�NCMP                 r2,#360                     ; ensure y rot is in range
�"SUBGE               r2,r2,#360
�MOVS                r2,r2
�"ADDLT               r2,r2,#360
�$STR                 r2,[r12,#40]
�
�/LDMFA               (sp)!,{r0-r10,r12,link}
�MOV                 PC,link
�
�]
�
� pass%


�

(
2
<P� --------------------------- SETUP 3D CRAFTS ------------------------------
F
P
Z
d� �setup_3d_crafts
n
xș "Hourglass_On"
�
�1fh=�"<Perpetual_Motion$Dir>.Crafts.CraftData"
�
��#fh,no_of_craft%
�'� craft_header_list% no_of_craft%*4
�
�5craft_3d_data_size%=8               : � size in K
�-� craft_3d_data% craft_3d_data_size%*1024
�
�
�P%=craft_3d_data%
�0L%=craft_3d_data%+(craft_3d_data_size%*1024)
�
$� craft_no%=0 � (no_of_craft%-1)

�#fh,craft_points%
"�#fh,craft_facets%
,
6(craft_orig_dat%=�init_craft_orig_dat
@*craft_trans_dat%=�init_craft_trans_dat
J*craft_final_dat%=�init_craft_final_dat
T,craft_render_dat%=�init_craft_render_dat
^
h$craft_header%=�init_craft_header
r
|2craft_header_list%!(craft_no%*4)=craft_header%
�
�
�� craft_no%
�
�ș "Hourglass_Off"
��#fh
�
��
�
�
�� �init_craft_orig_dat
�� adr%,pno%,x%,y%,z%
�
 adr%=P%
 
  � pno%=0 � (craft_points%-1)
 &
 0�#fh,x%
 :�#fh,y%
 D�#fh,z%
 N
 X
 b[ OPT 10
 lEQUD x%
 vEQUD y%
 �EQUD z%
 �]
 �
 �
� pno%
 �	=adr%
 �
 �
 �� �init_craft_trans_dat
 �� adr%,pno%
 �
 �adr%=P%
 �
 � � pno%=0 � (craft_points%-1)
!
![ OPT 10
!%EQUD 0                        ; x
! %EQUD 0                        ; y
!*%EQUD 0                        ; z
!4]
!>
!H
� pno%
!R	=adr%
!\
!f
!p� �init_craft_final_dat
!z� adr%,pno%
!�
!�adr%=P%
!�
!� � pno%=0 � (craft_points%-1)
!�
!�[ OPT 10
!�%EQUD 0                        ; x
!�%EQUD 0                        ; y
!�]
!�
!�
� pno%
!�	=adr%
!�
"
"� �init_craft_render_dat
"=� adr%,fno%,type%,p0%,p1%,p2%,p3%,int0%,int1%,int2%,int3%
"$
".adr%=P%
"8
"B
"L
"V � fno%=0 � (craft_facets%-1)
"`
"j�#fh,type%
"t�#fh,p0%
"~�#fh,p1%
"��#fh,p2%
"��#fh,p3%
"�
"�int0%=�#fh
"�int1%=�#fh
"�int2%=�#fh
"�int3%=�#fh
"�
"�[ OPT 10
"�$EQUD type%                ; type
"� EQUD p0%                ; p0
"� EQUD p1%                ; p1
# EQUD p2%                ; p2
#
 EQUD p3%                ; p3
#
#&EQUB int0%                ; p0 int
#(&EQUB int1%                ; p1 int
#2&EQUB int2%                ; p2 int
#<&EQUB int3%                ; p3 int
#F]
#P
� fno%
#Z	=adr%
#d
#n
#x� �init_craft_header
#�
� adr%
#�
#�adr%=P%
#�
#�[ OPT 10
#�>EQUD 0                        ; position vector components
#�
EQUD 0
#�EQUD 500
#�
#�>EQUD 0                        ; velocity vector components
#�
EQUD 0
#�
EQUD 0
#�
$BEQUD 0                        ; acceleration vector components
$
EQUD 0
$
EQUD 0
$"
$,)EQUD 0                        ; y rot
$6)EQUD 0                        ; z rot
$@/EQUD 0                        ; y rot speed
$J/EQUD 0                        ; z rot speed
$T
$^EQUD craft_points%
$hEQUD craft_facets%
$rEQUD craft_orig_dat%
$|EQUD craft_trans_dat%
$�EQUD craft_final_dat%
$�EQUD craft_render_dat%
$�]
$�	=adr%
$�
$�
$�
$�
$�
$�
$�
$�� �initialise_edge_tables
$�
%"� scan_conv_tex_lhs% (256*4)*4
%"� scan_conv_tex_rhs% (256*4)*4
%
%&�
%0
%:
%D
%N
%X
%b
%l
%v
%�Q� --------------------------- DIVISION ROUTINES -----------------------------
%�
%�� �setup_reference_lists
%�
%�� swm_rdiv_list% 8192*4
%�
%�div_scale%=18
%�
%�� I%
%�
%�� I%=1 � 8191
%�
%�  no=(1/I%)*(2^div_scale%)
&  swm_rdiv_list%!(I%<<2)=no
&
&�
& 
&*� sine_table% 360*4
&4� cosine_table% 360*4
&>
&H� I%=0 � 359
&R
&\)   sine_table%!(I%<<2)=(�(�(I%))*256)
&f+   cosine_table%!(I%<<2)=(�(�(I%))*256)
&p
&z�
&�
&��
&�
&�
&�
&�"� �swm_rdiv_act(no%,div%,ans%)
&�
&�
wk0%=0
&�
wk1%=1
&�
wk2%=2
&�
&�� wk0%,wk1%,wk2%,I%
&�
'� I%=0 � 14
'
'  � wk0%=no% : wk0%+=1
'$  � wk0%=div% : wk0%+=1
'.  � wk0%=ans% : wk0%+=1
'8  � wk0%=wk1% : wk0%+=1
'B  � wk0%=wk2% : wk0%+=1
'L
'V� I%
'`
'j� I%=0 � 14
't
'~  � wk1%=no% : wk1%+=1
'�  � wk1%=div% : wk1%+=1
'�  � wk1%=ans% : wk1%+=1
'�  � wk1%=wk0% : wk1%+=1
'�  � wk1%=wk2% : wk1%+=1
'�
'�� I%
'�
'�� I%=0 � 14
'�
'�  � wk2%=no% : wk2%+=1
'�  � wk2%=div% : wk2%+=1
'�  � wk2%=ans% : wk2%+=1
(  � wk2%=wk0% : wk2%+=1
(
  � wk2%=wk1% : wk2%+=1
(
(� I%
((
(2M� wk0%=wk1% : � 0,(" identical work registers in division macro... ") : �
(<M� wk1%=wk2% : � 0,(" identical work registers in division macro... ") : �
(FM� wk0%=wk2% : � 0,(" identical work registers in division macro... ") : �
(P
(ZR� no%=div% : � 0,(" identical analytical registers in division macro... ") : �
(dS� div%=ans% : � 0,(" identical analytical registers in division macro... ") : �
(nR� no%=ans% : � 0,(" identical analytical registers in division macro... ") : �
(x
(�[ OPT pass%
(�"STMFA   (sp)!,{wk0%,wk1%,wk2%}
(�
(�&LDR       wk0%,swm_rdiv_list_base%
(�A�S      wk1%,div%,#1<<31                  ; check if negative
(�ERSBMI     div%,div%,#0                      ; if so make positive
(�ILDR       wk2%,[wk0%,div%,LSL#2]             ; load number from table
(�cMUL       ans%,wk2%,no%                      ; perfrom multiplication of number*(1/divisor)<<16
(�RMOV       ans%,ans%,ASR#div_scale%                  ; scale down to get result
(�
(�CMP       wk1%,#0
(�RSBMI     ans%,ans%,#0
(�
)"LDMFA   (sp)!,{wk0%,wk1%,wk2%}
)
)]
)"=0
),
)6
)@
)J
)T"� �swm_rdiv_sca(no%,div%,ans%)
)^
)h
wk0%=0
)r
wk1%=1
)|
wk2%=2
)�
)�� wk0%,wk1%,wk2%,I%
)�
)�� I%=0 � 14
)�
)�  � wk0%=no% : wk0%+=1
)�  � wk0%=div% : wk0%+=1
)�  � wk0%=ans% : wk0%+=1
)�  � wk0%=wk1% : wk0%+=1
)�  � wk0%=wk2% : wk0%+=1
)�
)�� I%
)�
*� I%=0 � 14
*
*  � wk1%=no% : wk1%+=1
*&  � wk1%=div% : wk1%+=1
*0  � wk1%=ans% : wk1%+=1
*:  � wk1%=wk0% : wk1%+=1
*D  � wk1%=wk2% : wk1%+=1
*N
*X� I%
*b
*l� I%=0 � 14
*v
*�  � wk2%=no% : wk2%+=1
*�  � wk2%=div% : wk2%+=1
*�  � wk2%=ans% : wk2%+=1
*�  � wk2%=wk0% : wk2%+=1
*�  � wk2%=wk1% : wk2%+=1
*�
*�� I%
*�
*�M� wk0%=wk1% : � 0,(" identical work registers in division macro... ") : �
*�M� wk1%=wk2% : � 0,(" identical work registers in division macro... ") : �
*�M� wk0%=wk2% : � 0,(" identical work registers in division macro... ") : �
*�
*�R� no%=div% : � 0,(" identical analytical registers in division macro... ") : �
+S� div%=ans% : � 0,(" identical analytical registers in division macro... ") : �
+R� no%=ans% : � 0,(" identical analytical registers in division macro... ") : �
+
+ [ OPT pass%
+*"STMFA   (sp)!,{wk0%,wk1%,wk2%}
+4
+>&LDR       wk0%,swm_rdiv_list_base%
+HA�S      wk1%,div%,#1<<31                  ; check if negative
+RERSBMI     div%,div%,#0                      ; if so make positive
+\ILDR       wk2%,[wk0%,div%,LSL#2]             ; load number from table
+fcMUL       ans%,wk2%,no%                      ; perfrom multiplication of number*(1/divisor)<<16
+p
+zCMP       wk1%,#0
+�RSBMI     ans%,ans%,#0
+�
+�"LDMFA   (sp)!,{wk0%,wk1%,wk2%}
+�
+�]
+�=0
+�
�,�����O�@-� �C��	 ����$��4���4��	 ����,��#��������Qs*Basic -quit  @
00000000  20 20 9f e5 0c 30 4f e2  03 00 82 e0 0f 1c 80 e2  |  ...0O.........|
00000010  04 30 10 e4 04 30 01 e4  04 20 52 e2 fb ff ff 1a  |.0...0... R.....|
00000020  28 c0 4f e2 97 20 00 ea  00 74 00 00 0d 00 0a 29  |(.O.. ...t.....)|
00000030  f4 20 50 65 72 70 65 74  75 61 6c 20 4d 6f 74 69  |. Perpetual Moti|
00000040  6f 6e 20 20 2d 20 20 21  52 75 6e 49 6d 61 67 65  |on  -  !RunImage|
00000050  20 66 69 6c 65 0d 00 14  1b f4 20 a9 20 41 6e 64  | file..... . And|
00000060  72 65 77 20 44 6f 63 6b  69 6e 67 20 31 39 39 36  |rew Docking 1996|
00000070  0d 00 1e 04 0d 00 28 04  0d 00 32 59 f4 20 2d 2d  |......(...2Y. --|
00000080  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000090  2d 2d 2d 2d 2d 2d 2d 20  57 48 45 4e 20 54 48 49  |------- WHEN THI|
000000a0  4e 47 53 20 47 4f 20 57  52 4f 4e 47 20 48 41 4e  |NGS GO WRONG HAN|
000000b0  44 4c 49 4e 47 20 43 4f  44 45 20 2d 2d 2d 2d 2d  |DLING CODE -----|
000000c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000000d0  2d 0d 00 3c 60 ee 20 85  20 c8 99 20 22 48 6f 75  |-..<`. . .. "Hou|
000000e0  72 67 6c 61 73 73 5f 53  6d 61 73 68 22 20 3a 20  |rglass_Smash" : |
000000f0  eb 20 30 20 3a 20 85 20  30 2c 28 f6 24 2b 22 20  |. 0 : . 0,(.$+" |
00000100  28 69 6e 74 65 72 6e 61  6c 20 65 72 72 6f 72 20  |(internal error |
00000110  63 6f 64 65 20 22 2b c3  28 9f 29 2b 22 20 61 74  |code "+.(.)+" at|
00000120  20 6c 69 6e 65 20 22 2b  c3 28 9e 29 2b 22 29 22  | line "+.(.)+")"|
00000130  29 0d 00 46 04 0d 00 50  04 0d 00 5a 04 0d 00 64  |)..F...P...Z...d|
00000140  04 0d 00 6e 28 f1 20 22  46 69 78 65 64 20 69 6e  |...n(. "Fixed in|
00000150  74 65 6e 73 69 74 79 20  67 6f 75 72 61 64 20 73  |tensity gourad s|
00000160  68 61 64 69 6e 67 22 27  27 0d 00 78 04 0d 00 82  |hading"''..x....|
00000170  53 f4 20 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |S. -------------|
00000180  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 20 53  |-------------- S|
00000190  45 54 55 50 20 50 52 4f  43 45 44 55 52 45 53 20  |ETUP PROCEDURES |
000001a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000001c0  0d 00 8c 04 0d 00 96 1a  f2 73 65 74 75 70 5f 72  |.........setup_r|
000001d0  65 66 65 72 65 6e 63 65  5f 6c 69 73 74 73 0d 00  |eference_lists..|
000001e0  a0 1b f2 69 6e 69 74 69  61 6c 69 73 65 5f 65 64  |...initialise_ed|
000001f0  67 65 5f 74 61 62 6c 65  73 0d 00 aa 1e f2 69 6e  |ge_tables.....in|
00000200  69 74 69 61 6c 69 73 65  5f 67 6f 75 72 61 64 5f  |itialise_gourad_|
00000210  63 6f 6c 73 65 74 73 0d  00 b4 04 0d 00 be 53 f4  |colsets.......S.|
00000220  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | ---------------|
00000230  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 20 33 44 20  |------------ 3D |
00000240  4f 42 4a 45 43 54 20 53  45 54 55 50 20 50 52 4f  |OBJECT SETUP PRO|
00000250  43 45 44 55 52 45 53 20  2d 2d 2d 2d 2d 2d 2d 2d  |CEDURES --------|
00000260  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 0d 00  |--------------..|
00000270  c8 04 0d 00 d2 14 f2 73  65 74 75 70 5f 33 64 5f  |.......setup_3d_|
00000280  63 72 61 66 74 73 0d 00  dc 04 0d 00 e6 04 0d 00  |crafts..........|
00000290  f0 53 f4 20 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |.S. ------------|
000002a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 20  |--------------- |
000002b0  43 4f 4d 50 49 4c 45 20  4d 41 49 4e 20 43 4f 44  |COMPILE MAIN COD|
000002c0  45 20 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |E --------------|
000002d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000002e0  2d 0d 00 fa 1d f2 61 73  73 65 6d 62 6c 65 5f 73  |-.....assemble_s|
000002f0  63 72 65 65 6e 5f 68 61  6e 64 6c 65 72 73 0d 01  |creen_handlers..|
00000300  04 19 f2 61 73 73 65 6d  62 6c 65 5f 33 64 5f 68  |...assemble_3d_h|
00000310  61 6e 64 6c 65 72 73 0d  01 0e 04 0d 01 18 53 f4  |andlers.......S.|
00000320  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | ---------------|
00000330  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 20 49 4e 49  |------------ INI|
00000340  54 49 41 4c 49 53 45 20  55 4e 49 56 45 52 53 41  |TIALISE UNIVERSA|
00000350  4c 20 53 54 41 43 4b 20  2d 2d 2d 2d 2d 2d 2d 2d  |L STACK --------|
00000360  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 0d 01  |--------------..|
00000370  22 10 d6 20 69 6e 69 74  5f 73 74 61 63 6b 0d 01  |".. init_stack..|
00000380  2c 04 0d 01 36 53 f4 20  2d 2d 2d 2d 2d 2d 2d 2d  |,...6S. --------|
00000390  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000003a0  2d 2d 2d 20 53 45 54 55  50 20 47 41 4d 45 20 53  |--- SETUP GAME S|
000003b0  43 52 45 45 4e 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |CREEN ----------|
000003c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000003d0  2d 2d 2d 2d 2d 0d 01 40  07 eb 31 35 0d 01 4a 07  |-----..@..15..J.|
000003e0  eb 31 33 0d 01 54 05 87  0d 01 5e 04 0d 01 68 08  |.13..T....^...h.|
000003f0  64 25 3d 31 0d 01 72 08  65 25 3d 31 0d 01 7c 08  |d%=1..r.e%=1..|.|
00000400  66 25 3d 30 0d 01 86 04  0d 01 90 05 f5 0d 01 9a  |f%=0............|
00000410  07 d1 3d 30 0d 01 a4 0e  c8 97 20 6d 78 2c 6d 79  |..=0...... mx,my|
00000420  2c 62 0d 01 ae 11 d6 20  73 63 72 65 65 6e 5f 73  |,b..... screen_s|
00000430  77 61 70 0d 01 b8 0d d6  20 63 6c 72 5f 73 63 72  |wap..... clr_scr|
00000440  0d 01 c2 04 0d 01 cc 1d  61 61 25 3d 21 28 63 72  |........aa%=!(cr|
00000450  61 66 74 5f 68 65 61 64  65 72 5f 6c 69 73 74 25  |aft_header_list%|
00000460  29 0d 01 d6 04 0d 01 e0  1f e7 20 66 25 3d 30 20  |)......... f%=0 |
00000470  3a 20 e7 20 65 25 3d 31  20 3a 20 61 61 25 21 34  |: . e%=1 : aa%!4|
00000480  34 2b 3d 31 0d 01 ea 1f  e7 20 66 25 3d 30 20 3a  |4+=1..... f%=0 :|
00000490  20 e7 20 65 25 3d 30 20  3a 20 61 61 25 21 34 34  | . e%=0 : aa%!44|
000004a0  2d 3d 31 0d 01 f4 04 0d  01 fe 14 e7 20 61 61 25  |-=1......... aa%|
000004b0  21 34 34 3c 2d 34 20 65  25 3d 31 0d 02 08 13 e7  |!44<-4 e%=1.....|
000004c0  20 61 61 25 21 34 34 3e  34 20 65 25 3d 30 0d 02  | aa%!44>4 e%=0..|
000004d0  12 04 0d 02 1c 15 e7 20  64 25 3d 31 20 3a 20 61  |....... d%=1 : a|
000004e0  61 25 21 38 2d 3d 32 0d  02 26 15 e7 20 64 25 3d  |a%!8-=2..&.. d%=|
000004f0  30 20 3a 20 61 61 25 21  38 2b 3d 32 0d 02 30 04  |0 : aa%!8+=2..0.|
00000500  0d 02 3a 15 e7 20 61 61  25 21 38 3e 31 34 30 30  |..:.. aa%!8>1400|
00000510  20 64 25 3d 31 0d 02 44  14 e7 20 61 61 25 21 38  | d%=1..D.. aa%!8|
00000520  3c 33 30 30 20 64 25 3d  30 0d 02 4e 04 0d 02 58  |<300 d%=0..N...X|
00000530  0d 61 61 25 21 34 30 2b  3d 32 0d 02 62 04 0d 02  |.aa%!40+=2..b...|
00000540  6c 09 66 25 2b 3d 31 0d  02 76 04 0d 02 80 08 41  |l.f%+=1..v.....A|
00000550  25 3d 30 0d 02 8a 1c d6  20 63 72 61 66 74 5f 6d  |%=0..... craft_m|
00000560  6f 76 65 6d 65 6e 74 5f  68 61 6e 64 6c 65 72 0d  |ovement_handler.|
00000570  02 94 13 d6 20 70 72 6f  6a 65 63 74 5f 63 72 61  |.... project_cra|
00000580  66 74 0d 02 9e 04 0d 02  a8 04 0d 02 b2 11 e7 20  |ft............. |
00000590  66 25 3e 3d 31 35 20 66  25 3d 30 0d 02 bc 06 fd  |f%>=15 f%=0.....|
000005a0  30 0d 02 c6 04 0d 02 d0  04 0d 02 da 04 0d 02 e4  |0...............|
000005b0  04 0d 02 ee 05 e0 0d 02  f8 04 0d 03 02 04 0d 03  |................|
000005c0  0c 04 0d 03 16 5f f4 20  2d 2d 2d 2d 2d 2d 2d 2d  |....._. --------|
000005d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000005e0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 20 53 43 52  |------------ SCR|
000005f0  45 45 4e 20 48 41 4e 44  4c 49 4e 47 20 43 4f 44  |EEN HANDLING COD|
00000600  45 20 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |E --------------|
00000610  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000620  2d 0d 03 20 04 0d 03 2a  1f dd 20 f2 61 73 73 65  |-.. ...*.. .asse|
00000630  6d 62 6c 65 5f 73 63 72  65 65 6e 5f 68 61 6e 64  |mble_screen_hand|
00000640  6c 65 72 73 0d 03 34 04  0d 03 3e 1a ea 20 70 61  |lers..4...>.. pa|
00000650  73 73 25 2c 6c 69 6e 6b  2c 73 70 2c 73 74 61 63  |ss%,link,sp,stac|
00000660  6b 25 0d 03 48 04 0d 03  52 0d 6c 65 6e 25 3d 38  |k%..H...R.len%=8|
00000670  31 39 32 0d 03 5c 04 0d  03 66 0b 6c 69 6e 6b 3d  |192..\...f.link=|
00000680  31 34 0d 03 70 09 73 70  3d 31 31 0d 03 7a 04 0d  |14..p.sp=11..z..|
00000690  03 84 11 de 20 73 74 61  63 6b 25 20 38 31 39 32  |.... stack% 8192|
000006a0  0d 03 8e 10 de 20 63 6f  64 65 25 20 6c 65 6e 25  |..... code% len%|
000006b0  0d 03 98 04 0d 03 a2 23  f1 20 22 41 73 73 65 6d  |.......#. "Assem|
000006c0  62 6c 69 6e 67 20 73 63  72 65 65 6e 20 68 61 6e  |bling screen han|
000006d0  64 6c 65 72 73 22 27 0d  03 ac 04 0d 03 b6 16 e3  |dlers"'.........|
000006e0  20 70 61 73 73 25 3d 38  20 b8 20 31 30 20 88 20  | pass%=8 . 10 . |
000006f0  32 0d 03 c0 0d 50 25 3d  20 63 6f 64 65 25 0d 03  |2....P%= code%..|
00000700  ca 14 4c 25 3d 20 63 6f  64 65 25 20 2b 20 6c 65  |..L%= code% + le|
00000710  6e 25 0d 03 d4 0f 5b 20  4f 50 54 20 70 61 73 73  |n%....[ OPT pass|
00000720  25 0d 03 de 04 0d 03 e8  20 2e 73 63 72 65 65 6e  |%....... .screen|
00000730  5f 61 64 72 25 20 20 20  20 20 20 20 20 20 20 45  |_adr%          E|
00000740  51 55 44 20 30 0d 03 f2  25 2e 73 74 61 63 6b 5f  |QUD 0...%.stack_|
00000750  62 61 73 65 25 20 20 20  20 20 20 20 20 20 20 45  |base%          E|
00000760  51 55 44 20 73 74 61 63  6b 25 0d 03 fc 04 0d 04  |QUD stack%......|
00000770  06 04 0d 04 10 0f 2e 69  6e 69 74 5f 73 74 61 63  |.......init_stac|
00000780  6b 0d 04 1a 1a 4c 44 52  20 20 20 20 20 73 70 2c  |k....LDR     sp,|
00000790  73 74 61 63 6b 5f 62 61  73 65 25 0d 04 24 13 4d  |stack_base%..$.M|
000007a0  4f 56 20 20 20 20 20 50  43 2c 6c 69 6e 6b 0d 04  |OV     PC,link..|
000007b0  2e 04 0d 04 38 04 0d 04  42 04 0d 04 4c 17 2e 62  |....8...B...L..b|
000007c0  61 6e 6b 25 20 20 20 20  20 45 51 55 44 20 20 20  |ank%     EQUD   |
000007d0  31 0d 04 56 49 2e 76 64  75 69 6e 25 20 20 20 20  |1..VI.vduin%    |
000007e0  45 51 55 44 20 20 20 31  34 38 20 20 20 20 20 20  |EQUD   148      |
000007f0  20 20 20 20 20 20 3b 20  66 6f 72 20 75 73 65 20  |      ; for use |
00000800  77 69 74 68 20 22 4f 53  5f 52 65 61 64 56 64 75  |with "OS_ReadVdu|
00000810  56 61 72 69 61 62 6c 65  73 22 0d 04 60 18 20 20  |Variables"..`.  |
00000820  20 20 20 20 20 20 20 20  20 45 51 55 44 20 20 20  |         EQUD   |
00000830  2d 31 0d 04 6a 37 2e 76  64 75 6f 75 74 25 20 20  |-1..j7.vduout%  |
00000840  20 45 51 55 44 20 20 20  30 20 20 20 20 20 20 20  | EQUD   0       |
00000850  20 20 20 20 20 20 20 20  20 3b 20 73 63 72 65 65  |         ; scree|
00000860  6e 20 61 64 64 72 65 73  73 0d 04 74 04 0d 04 7e  |n address..t...~|
00000870  04 0d 04 88 10 2e 73 63  72 65 65 6e 5f 73 77 61  |......screen_swa|
00000880  70 0d 04 92 26 53 54 4d  46 41 20 20 20 20 20 20  |p...&STMFA      |
00000890  28 73 70 29 21 2c 7b 72  30 2d 72 31 30 2c 72 31  |(sp)!,{r0-r10,r1|
000008a0  32 2c 6c 69 6e 6b 7d 0d  04 9c 3a 4d 4f 56 20 20  |2,link}...:MOV  |
000008b0  20 20 20 20 20 20 72 30  2c 23 31 39 20 20 20 20  |      r0,#19    |
000008c0  20 20 20 20 20 20 20 20  20 20 20 3b 20 77 61 69  |           ; wai|
000008d0  74 20 66 6f 72 20 76 73  79 6e 63 20 65 76 65 6e  |t for vsync even|
000008e0  74 0d 04 a6 18 53 57 49  20 20 20 20 20 20 20 20  |t....SWI        |
000008f0  22 4f 53 5f 42 79 74 65  22 0d 04 b0 04 0d 04 ba  |"OS_Byte".......|
00000900  33 4c 44 52 20 20 20 20  20 20 20 20 72 34 2c 62  |3LDR        r4,b|
00000910  61 6e 6b 25 20 20 20 20  20 20 20 20 20 20 20 20  |ank%            |
00000920  20 3b 20 6c 6f 61 64 20  62 61 6e 6b 20 6e 6f 2e  | ; load bank no.|
00000930  0d 04 c4 34 52 53 42 20  20 20 20 20 20 20 20 72  |...4RSB        r|
00000940  34 2c 72 34 2c 23 33 20  20 20 20 20 20 20 20 20  |4,r4,#3         |
00000950  20 20 20 20 3b 20 62 61  6e 6b 20 3d 20 33 20 2d  |    ; bank = 3 -|
00000960  62 61 6e 6b 0d 04 ce 34  53 54 52 20 20 20 20 20  |bank...4STR     |
00000970  20 20 20 72 34 2c 62 61  6e 6b 25 20 20 20 20 20  |   r4,bank%     |
00000980  20 20 20 20 20 20 20 20  3b 20 73 74 6f 72 65 20  |        ; store |
00000990  62 61 6e 6b 20 6e 6f 2e  0d 04 d8 04 0d 04 e2 16  |bank no.........|
000009a0  4d 4f 56 20 20 20 20 20  20 20 20 72 30 2c 23 31  |MOV        r0,#1|
000009b0  31 32 0d 04 ec 14 4d 4f  56 20 20 20 20 20 20 20  |12....MOV       |
000009c0  20 72 31 2c 72 34 0d 04  f6 18 53 57 49 20 20 20  | r1,r4....SWI   |
000009d0  20 20 20 20 20 22 4f 53  5f 42 79 74 65 22 0d 05  |     "OS_Byte"..|
000009e0  00 16 4d 4f 56 20 20 20  20 20 20 20 20 72 30 2c  |..MOV        r0,|
000009f0  23 31 31 33 0d 05 0a 17  52 53 42 20 20 20 20 20  |#113....RSB     |
00000a00  20 20 20 72 31 2c 72 34  2c 23 33 0d 05 14 18 53  |   r1,r4,#3....S|
00000a10  57 49 20 20 20 20 20 20  20 20 22 4f 53 5f 42 79  |WI        "OS_By|
00000a20  74 65 22 0d 05 1e 04 0d  05 28 3f 41 44 52 20 20  |te"......(?ADR  |
00000a30  20 20 20 20 20 20 72 30  2c 76 64 75 69 6e 25 20  |      r0,vduin% |
00000a40  20 20 20 20 20 20 20 20  20 20 20 3b 20 67 65 74  |           ; get|
00000a50  20 6e 65 77 20 73 63 72  65 65 6e 20 61 64 72 20  | new screen adr |
00000a60  69 6e 20 72 31 32 0d 05  32 19 41 44 52 20 20 20  |in r12..2.ADR   |
00000a70  20 20 20 20 20 72 31 2c  76 64 75 6f 75 74 25 0d  |     r1,vduout%.|
00000a80  05 3c 24 53 57 49 20 20  20 20 20 20 20 20 22 4f  |.<$SWI        "O|
00000a90  53 5f 52 65 61 64 56 64  75 56 61 72 69 61 62 6c  |S_ReadVduVariabl|
00000aa0  65 73 22 0d 05 46 1a 4c  44 52 20 20 20 20 20 20  |es"..F.LDR      |
00000ab0  20 20 72 31 32 2c 76 64  75 6f 75 74 25 0d 05 50  |  r12,vduout%..P|
00000ac0  1e 53 54 52 20 20 20 20  20 20 20 20 72 31 32 2c  |.STR        r12,|
00000ad0  73 63 72 65 65 6e 5f 61  64 72 25 0d 05 5a 26 4c  |screen_adr%..Z&L|
00000ae0  44 4d 46 41 20 20 20 20  20 20 28 73 70 29 21 2c  |DMFA      (sp)!,|
00000af0  7b 72 30 2d 72 31 30 2c  72 31 32 2c 6c 69 6e 6b  |{r0-r10,r12,link|
00000b00  7d 0d 05 64 16 4d 4f 56  20 20 20 20 20 20 20 20  |}..d.MOV        |
00000b10  50 43 2c 6c 69 6e 6b 0d  05 6e 04 0d 05 78 04 0d  |PC,link..n...x..|
00000b20  05 82 0c 2e 63 6c 72 5f  73 63 72 0d 05 8c 26 53  |....clr_scr...&S|
00000b30  54 4d 46 41 20 20 20 20  20 20 28 73 70 29 21 2c  |TMFA      (sp)!,|
00000b40  7b 72 30 2d 72 31 30 2c  72 31 32 2c 6c 69 6e 6b  |{r0-r10,r12,link|
00000b50  7d 0d 05 96 1e 4c 44 52  20 20 20 20 20 20 20 20  |}....LDR        |
00000b60  72 31 32 2c 73 63 72 65  65 6e 5f 61 64 72 25 0d  |r12,screen_adr%.|
00000b70  05 a0 16 4d 4f 56 20 20  20 20 20 20 20 20 72 39  |...MOV        r9|
00000b80  2c 23 32 35 36 0d 05 aa  04 0d 05 b4 14 4d 4f 56  |,#256........MOV|
00000b90  20 20 20 20 20 20 20 20  72 30 2c 23 30 0d 05 be  |        r0,#0...|
00000ba0  14 4d 4f 56 20 20 20 20  20 20 20 20 72 31 2c 72  |.MOV        r1,r|
00000bb0  30 0d 05 c8 14 4d 4f 56  20 20 20 20 20 20 20 20  |0....MOV        |
00000bc0  72 32 2c 72 30 0d 05 d2  14 4d 4f 56 20 20 20 20  |r2,r0....MOV    |
00000bd0  20 20 20 20 72 33 2c 72  30 0d 05 dc 14 4d 4f 56  |    r3,r0....MOV|
00000be0  20 20 20 20 20 20 20 20  72 34 2c 72 30 0d 05 e6  |        r4,r0...|
00000bf0  14 4d 4f 56 20 20 20 20  20 20 20 20 72 35 2c 72  |.MOV        r5,r|
00000c00  30 0d 05 f0 14 4d 4f 56  20 20 20 20 20 20 20 20  |0....MOV        |
00000c10  72 36 2c 72 30 0d 05 fa  14 4d 4f 56 20 20 20 20  |r6,r0....MOV    |
00000c20  20 20 20 20 72 37 2c 72  30 0d 06 04 04 0d 06 0e  |    r7,r0.......|
00000c30  10 2e 63 6c 72 73 63 72  5f 6c 6f 6f 70 0d 06 18  |..clrscr_loop...|
00000c40  05 5d 0d 06 22 0f e3 20  49 25 3d 31 20 b8 20 31  |.]..".. I%=1 . 1|
00000c50  30 0d 06 2c 0f 5b 20 4f  50 54 20 70 61 73 73 25  |0..,.[ OPT pass%|
00000c60  0d 06 36 1b 53 54 4d 49  41 20 20 20 20 20 20 72  |..6.STMIA      r|
00000c70  31 32 21 2c 7b 72 30 2d  72 37 7d 0d 06 40 05 5d  |12!,{r0-r7}..@.]|
00000c80  0d 06 4a 05 ed 0d 06 54  04 0d 06 5e 0f 5b 20 4f  |..J....T...^.[ O|
00000c90  50 54 20 70 61 73 73 25  0d 06 68 17 53 55 42 53  |PT pass%..h.SUBS|
00000ca0  20 20 20 20 20 20 20 72  39 2c 72 39 2c 23 31 0d  |       r9,r9,#1.|
00000cb0  06 72 1a 42 47 54 20 20  20 20 20 20 20 20 63 6c  |.r.BGT        cl|
00000cc0  72 73 63 72 5f 6c 6f 6f  70 0d 06 7c 04 0d 06 86  |rscr_loop..|....|
00000cd0  26 4c 44 4d 46 41 20 20  20 20 20 20 28 73 70 29  |&LDMFA      (sp)|
00000ce0  21 2c 7b 72 30 2d 72 31  30 2c 72 31 32 2c 6c 69  |!,{r0-r10,r12,li|
00000cf0  6e 6b 7d 0d 06 90 04 0d  06 9a 28 4d 4f 56 20 20  |nk}.......(MOV  |
00000d00  20 20 20 20 20 20 50 43  2c 6c 69 6e 6b 20 20 20  |      PC,link   |
00000d10  20 3b 20 65 78 69 74 20  72 6f 75 74 69 6e 65 0d  | ; exit routine.|
00000d20  06 a4 04 0d 06 ae 04 0d  06 b8 04 0d 06 c2 04 0d  |................|
00000d30  06 cc 5b 3b 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |..[; -----------|
00000d40  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000d50  2d 2d 2d 2d 2d 2d 2d 2d  20 52 65 6e 64 65 72 69  |-------- Renderi|
00000d60  6e 67 20 72 6f 75 74 69  6e 65 73 20 2d 2d 2d 2d  |ng routines ----|
00000d70  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000d80  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 06 d6 04 0d 06  |----------......|
00000d90  e0 3c 2e 67 6f 75 72 61  64 5f 63 6f 6c 73 65 74  |.<.gourad_colset|
00000da0  73 5f 62 61 73 65 25 20  20 20 20 20 20 20 20 20  |s_base%         |
00000db0  20 20 20 20 20 20 45 51  55 44 20 67 6f 75 72 61  |      EQUD goura|
00000dc0  64 5f 63 6f 6c 73 65 74  73 25 0d 06 ea 04 0d 06  |d_colsets%......|
00000dd0  f4 15 2e 67 6f 75 72 61  64 5f 73 63 61 6e 5f 6c  |...gourad_scan_l|
00000de0  69 6e 65 0d 06 fe 20 3b  20 72 30 20 69 73 20 78  |ine... ; r0 is x|
00000df0  20 63 6f 6f 72 64 20 6f  66 20 73 63 61 6e 20 6c  | coord of scan l|
00000e00  69 6e 65 0d 07 08 13 3b  20 72 31 20 69 73 20 79  |ine....; r1 is y|
00000e10  20 63 6f 6f 72 64 0d 07  12 12 3b 20 72 32 20 69  | coord....; r2 i|
00000e20  73 20 6c 65 6e 67 74 68  0d 07 1c 1b 3b 20 72 33  |s length....; r3|
00000e30  20 69 73 20 73 74 61 72  74 20 69 6e 74 65 6e 73  | is start intens|
00000e40  69 74 79 0d 07 26 19 3b  20 72 34 20 69 73 20 65  |ity..&.; r4 is e|
00000e50  6e 64 20 69 6e 74 65 6e  73 69 74 79 0d 07 30 04  |nd intensity..0.|
00000e60  0d 07 3a 2a 53 54 4d 46  41 20 20 20 20 20 20 20  |..:*STMFA       |
00000e70  20 20 20 28 73 70 29 21  2c 7b 72 30 2d 72 31 30  |   (sp)!,{r0-r10|
00000e80  2c 72 31 32 2c 6c 69 6e  6b 7d 0d 07 44 22 4c 44  |,r12,link}..D"LD|
00000e90  52 20 20 20 20 20 20 20  20 20 20 20 20 72 31 32  |R            r12|
00000ea0  2c 73 63 72 65 65 6e 5f  61 64 72 25 0d 07 4e 32  |,screen_adr%..N2|
00000eb0  41 44 44 20 20 20 20 20  20 20 20 20 20 20 20 72  |ADD            r|
00000ec0  31 32 2c 72 31 32 2c 72  30 20 20 20 20 20 20 20  |12,r12,r0       |
00000ed0  20 20 20 20 20 20 20 20  20 3b 20 2b 20 78 0d 07  |         ; + x..|
00000ee0  58 36 4d 4f 56 20 20 20  20 20 20 20 20 20 20 20  |X6MOV           |
00000ef0  20 72 37 2c 72 31 2c 41  53 4c 23 38 20 20 20 20  | r7,r1,ASL#8    |
00000f00  20 20 20 20 20 20 20 20  20 20 20 3b 20 79 20 2a  |           ; y *|
00000f10  20 32 35 36 0d 07 62 35  4d 4f 56 20 20 20 20 20  | 256..b5MOV     |
00000f20  20 20 20 20 20 20 20 72  38 2c 72 31 2c 41 53 4c  |       r8,r1,ASL|
00000f30  23 36 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |#6              |
00000f40  20 3b 20 79 20 2a 20 36  34 0d 07 6c 47 41 44 44  | ; y * 64..lGADD|
00000f50  20 20 20 20 20 20 20 20  20 20 20 20 72 37 2c 72  |            r7,r|
00000f60  37 2c 72 38 20 20 20 20  20 20 20 20 20 20 20 20  |7,r8            |
00000f70  20 20 20 20 20 20 3b 20  28 79 2a 36 34 29 20 2b  |      ; (y*64) +|
00000f80  20 28 79 2a 32 35 36 29  20 3d 20 79 2a 33 32 30  | (y*256) = y*320|
00000f90  0d 07 76 4d 41 44 44 20  20 20 20 20 20 20 20 20  |..vMADD         |
00000fa0  20 20 20 72 31 32 2c 72  31 32 2c 72 37 20 20 20  |   r12,r12,r7   |
00000fb0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
00000fc0  31 32 20 69 73 20 66 69  6e 61 6c 20 61 64 72 20  |12 is final adr |
00000fd0  6f 66 20 6c 69 6e 65 20  73 74 61 72 74 0d 07 80  |of line start...|
00000fe0  04 0d 07 8a 04 0d 07 94  47 53 55 42 20 20 20 20  |........GSUB    |
00000ff0  20 20 20 20 20 20 20 20  72 34 2c 72 34 2c 72 33  |        r4,r4,r3|
00001000  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001010  20 20 3b 20 72 34 20 3d  20 65 6e 64 20 69 6e 74  |  ; r4 = end int|
00001020  20 2d 20 73 74 61 72 74  20 69 6e 74 0d 07 9e 04  | - start int....|
00001030  0d 07 a8 3f a4 73 77 6d  5f 72 64 69 76 5f 73 63  |...?.swm_rdiv_sc|
00001040  61 28 34 2c 32 2c 35 29  20 20 20 20 20 20 20 20  |a(4,2,5)        |
00001050  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 72 35  |            ; r5|
00001060  20 69 73 20 73 63 61 6c  65 64 20 73 74 65 70 0d  | is scaled step.|
00001070  07 b2 42 4d 4f 56 20 20  20 20 20 20 20 20 20 20  |..BMOV          |
00001080  20 20 72 30 2c 23 30 20  20 20 20 20 20 20 20 20  |  r0,#0         |
00001090  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 72 30  |            ; r0|
000010a0  20 69 73 20 73 63 61 6c  65 64 20 6f 66 66 73 65  | is scaled offse|
000010b0  74 0d 07 bc 04 0d 07 c6  2b 4c 44 52 20 20 20 20  |t.......+LDR    |
000010c0  20 20 20 20 20 20 20 20  72 31 30 2c 67 6f 75 72  |        r10,gour|
000010d0  61 64 5f 63 6f 6c 73 65  74 73 5f 62 61 73 65 25  |ad_colsets_base%|
000010e0  0d 07 d0 27 4c 44 52 20  20 20 20 20 20 20 20 20  |...'LDR         |
000010f0  20 20 20 72 38 2c 67 6f  75 72 61 64 5f 63 6f 6c  |   r8,gourad_col|
00001100  73 65 74 5f 6e 6f 25 0d  07 da 23 41 44 44 20 20  |set_no%...#ADD  |
00001110  20 20 20 20 20 20 20 20  20 20 72 31 30 2c 72 31  |          r10,r1|
00001120  30 2c 72 38 2c 41 53 4c  23 35 0d 07 e4 04 0d 07  |0,r8,ASL#5......|
00001130  ee 1a 2e 67 6f 75 72 61  64 5f 73 63 61 6e 5f 6c  |...gourad_scan_l|
00001140  69 6e 65 5f 6c 6f 6f 70  0d 07 f8 2a 41 44 44 20  |ine_loop...*ADD |
00001150  20 20 20 20 20 20 20 20  20 20 20 72 31 2c 72 33  |           r1,r3|
00001160  2c 72 30 2c 41 53 52 23  64 69 76 5f 73 63 61 6c  |,r0,ASR#div_scal|
00001170  65 25 0d 08 02 3f 4c 44  52 42 20 20 20 20 20 20  |e%...?LDRB      |
00001180  20 20 20 20 20 72 39 2c  5b 72 31 30 2c 72 31 5d  |     r9,[r10,r1]|
00001190  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000011a0  3b 20 6c 6f 61 64 20 70  69 78 20 63 6f 6c 6f 75  |; load pix colou|
000011b0  72 0d 08 0c 4b 53 54 52  42 20 20 20 20 20 20 20  |r...KSTRB       |
000011c0  20 20 20 20 72 39 2c 5b  72 31 32 5d 2c 23 31 20  |    r9,[r12],#1 |
000011d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
000011e0  20 73 74 6f 72 65 20 74  6f 20 73 63 72 65 65 6e  | store to screen|
000011f0  20 61 6e 64 20 69 6e 63  20 72 31 32 0d 08 16 04  | and inc r12....|
00001200  0d 08 20 4c 41 44 44 20  20 20 20 20 20 20 20 20  |.. LADD         |
00001210  20 20 20 72 30 2c 72 30  2c 72 35 20 20 20 20 20  |   r0,r0,r5     |
00001220  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00001230  73 63 61 6c 65 64 20 6f  66 66 73 65 74 20 2b 3d  |scaled offset +=|
00001240  20 73 63 61 6c 65 64 20  73 74 65 70 0d 08 2a 04  | scaled step..*.|
00001250  0d 08 34 1b 53 55 42 53  20 20 20 20 20 20 20 20  |..4.SUBS        |
00001260  20 20 20 72 32 2c 72 32  2c 23 31 0d 08 3e 28 42  |   r2,r2,#1..>(B|
00001270  47 45 20 20 20 20 20 20  20 20 20 20 20 20 67 6f  |GE            go|
00001280  75 72 61 64 5f 73 63 61  6e 5f 6c 69 6e 65 5f 6c  |urad_scan_line_l|
00001290  6f 6f 70 0d 08 48 04 0d  08 52 04 0d 08 5c 04 0d  |oop..H...R...\..|
000012a0  08 66 19 2e 65 6e 64 5f  67 6f 75 72 61 64 5f 73  |.f..end_gourad_s|
000012b0  63 61 6e 5f 6c 69 6e 65  0d 08 70 2a 4c 44 4d 46  |can_line..p*LDMF|
000012c0  41 20 20 20 20 20 20 20  20 20 20 28 73 70 29 21  |A          (sp)!|
000012d0  2c 7b 72 30 2d 72 31 30  2c 72 31 32 2c 6c 69 6e  |,{r0-r10,r12,lin|
000012e0  6b 7d 0d 08 7a 1a 4d 4f  56 20 20 20 20 20 20 20  |k}..z.MOV       |
000012f0  20 20 20 20 20 50 43 2c  6c 69 6e 6b 0d 08 84 04  |     PC,link....|
00001300  0d 08 8e 04 0d 08 98 04  0d 08 a2 04 0d 08 ac 04  |................|
00001310  0d 08 b6 04 0d 08 c0 39  2e 73 63 61 6e 5f 63 6f  |.......9.scan_co|
00001320  6e 76 5f 77 6b 61 72 65  61 5f 62 61 73 65 25 20  |nv_wkarea_base% |
00001330  20 20 20 20 20 20 20 45  51 55 44 20 73 63 61 6e  |       EQUD scan|
00001340  5f 63 6f 6e 76 5f 77 6b  61 72 65 61 25 0d 08 ca  |_conv_wkarea%...|
00001350  16 2e 73 63 61 6e 5f 63  6f 6e 76 5f 77 6b 61 72  |..scan_conv_wkar|
00001360  65 61 25 0d 08 d4 27 45  51 55 42 20 30 20 20 20  |ea%...'EQUB 0   |
00001370  20 20 20 20 20 20 20 20  20 20 20 3b 20 74 6f 70  |           ; top|
00001380  20 69 6e 74 65 6e 73 69  74 79 0d 08 de 2a 45 51  | intensity...*EQ|
00001390  55 42 20 31 32 20 20 20  20 20 20 20 20 20 20 20  |UB 12           |
000013a0  20 20 3b 20 62 6f 74 74  6f 6d 20 69 6e 74 65 6e  |  ; bottom inten|
000013b0  73 69 74 79 0d 08 e8 0a  45 51 55 42 20 30 0d 08  |sity....EQUB 0..|
000013c0  f2 0a 45 51 55 42 20 30  0d 08 fc 04 0d 09 06 0a  |..EQUB 0........|
000013d0  45 51 55 44 20 30 0d 09  10 04 0d 09 1a 1b 45 51  |EQUD 0........EQ|
000013e0  55 44 20 73 63 61 6e 5f  63 6f 6e 76 5f 74 65 78  |UD scan_conv_tex|
000013f0  5f 6c 68 73 25 0d 09 24  1b 45 51 55 44 20 73 63  |_lhs%..$.EQUD sc|
00001400  61 6e 5f 63 6f 6e 76 5f  74 65 78 5f 72 68 73 25  |an_conv_tex_rhs%|
00001410  0d 09 2e 04 0d 09 38 04  0d 09 42 1d 2e 73 63 61  |......8...B..sca|
00001420  6e 5f 63 6f 6e 76 65 72  74 5f 67 6f 75 72 61 64  |n_convert_gourad|
00001430  5f 6c 69 6e 65 0d 09 4c  04 0d 09 56 2a 53 54 4d  |_line..L...V*STM|
00001440  46 41 20 20 20 20 20 20  20 20 20 20 28 73 70 29  |FA          (sp)|
00001450  21 2c 7b 72 30 2d 72 31  30 2c 72 31 32 2c 6c 69  |!,{r0-r10,r12,li|
00001460  6e 6b 7d 0d 09 60 0b 3b  20 72 30 20 78 31 0d 09  |nk}..`.; r0 x1..|
00001470  6a 0b 3b 20 72 31 20 79  31 0d 09 74 0b 3b 20 72  |j.; r1 y1..t.; r|
00001480  32 20 78 32 0d 09 7e 0b  3b 20 72 33 20 79 32 0d  |2 x2..~.; r3 y2.|
00001490  09 88 04 0d 09 92 04 0d  09 9c 04 0d 09 a6 18 43  |...............C|
000014a0  4d 50 20 20 20 20 20 20  20 20 20 20 20 20 72 31  |MP            r1|
000014b0  2c 72 33 0d 09 b0 2f 42  45 51 20 20 20 20 20 20  |,r3.../BEQ      |
000014c0  20 20 20 20 20 20 65 6e  64 5f 73 63 61 6e 5f 63  |      end_scan_c|
000014d0  6f 6e 76 65 72 74 5f 67  6f 75 72 61 64 5f 6c 69  |onvert_gourad_li|
000014e0  6e 65 0d 09 ba 04 0d 09  c4 5b 43 4d 50 20 20 20  |ne.......[CMP   |
000014f0  20 20 20 20 20 20 20 20  20 72 31 2c 72 33 20 20  |         r1,r3  |
00001500  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001510  20 20 20 20 3b 20 69 66  20 79 31 20 3e 20 79 32  |    ; if y1 > y2|
00001520  2c 20 73 77 61 70 20 78  31 20 77 69 74 68 20 78  |, swap x1 with x|
00001530  31 2c 20 61 6e 64 20 79  31 20 77 69 74 68 20 79  |1, and y1 with y|
00001540  32 0d 09 ce 18 4d 4f 56  47 54 20 20 20 20 20 20  |2....MOVGT      |
00001550  20 20 20 20 72 34 2c 72  30 0d 09 d8 18 4d 4f 56  |    r4,r0....MOV|
00001560  47 54 20 20 20 20 20 20  20 20 20 20 72 35 2c 72  |GT          r5,r|
00001570  31 0d 09 e2 18 4d 4f 56  47 54 20 20 20 20 20 20  |1....MOVGT      |
00001580  20 20 20 20 72 30 2c 72  32 0d 09 ec 18 4d 4f 56  |    r0,r2....MOV|
00001590  47 54 20 20 20 20 20 20  20 20 20 20 72 31 2c 72  |GT          r1,r|
000015a0  33 0d 09 f6 18 4d 4f 56  47 54 20 20 20 20 20 20  |3....MOVGT      |
000015b0  20 20 20 20 72 32 2c 72  34 0d 0a 00 18 4d 4f 56  |    r2,r4....MOV|
000015c0  47 54 20 20 20 20 20 20  20 20 20 20 72 33 2c 72  |GT          r3,r|
000015d0  35 0d 0a 0a 04 0d 0a 14  04 0d 0a 1e 2d 4c 44 52  |5...........-LDR|
000015e0  20 20 20 20 20 20 20 20  20 20 20 20 72 31 32 2c  |            r12,|
000015f0  73 63 61 6e 5f 63 6f 6e  76 5f 77 6b 61 72 65 61  |scan_conv_wkarea|
00001600  5f 62 61 73 65 25 0d 0a  28 4d 4c 44 52 4c 45 20  |_base%..(MLDRLE |
00001610  20 20 20 20 20 20 20 20  20 72 31 30 2c 5b 72 31  |         r10,[r1|
00001620  32 2c 23 38 5d 20 20 20  20 20 20 20 20 20 20 20  |2,#8]           |
00001630  20 20 20 20 3b 20 6c 6f  61 64 20 61 64 72 20 6f  |    ; load adr o|
00001640  66 20 6c 68 73 20 62 61  73 65 20 69 66 20 79 31  |f lhs base if y1|
00001650  3c 79 32 0d 0a 32 5e 4c  44 52 4c 45 42 20 20 20  |<y2..2^LDRLEB   |
00001660  20 20 20 20 20 20 72 36  2c 5b 72 31 32 2c 23 30  |      r6,[r12,#0|
00001670  5d 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |]               |
00001680  20 3b 20 6c 6f 61 64 20  74 6f 70 20 69 6e 74 20  | ; load top int |
00001690  61 6e 64 20 62 6f 74 74  6f 6d 20 69 6e 74 20 63  |and bottom int c|
000016a0  6f 72 72 65 63 74 20 77  61 79 20 61 72 6f 75 6e  |orrect way aroun|
000016b0  64 0d 0a 3c 4f 4c 44 52  4c 45 42 20 20 20 20 20  |d..<OLDRLEB     |
000016c0  20 20 20 20 72 37 2c 5b  72 31 32 2c 23 31 5d 20  |    r7,[r12,#1] |
000016d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
000016e0  20 72 36 20 69 73 20 74  6f 70 20 69 6e 74 2c 20  | r6 is top int, |
000016f0  72 37 20 69 73 20 62 6f  74 74 6f 6d 20 69 6e 74  |r7 is bottom int|
00001700  0d 0a 46 04 0d 0a 50 04  0d 0a 5a 4d 4c 44 52 47  |..F...P...ZMLDRG|
00001710  54 20 20 20 20 20 20 20  20 20 20 72 31 30 2c 5b  |T          r10,[|
00001720  72 31 32 2c 23 31 32 5d  20 20 20 20 20 20 20 20  |r12,#12]        |
00001730  20 20 20 20 20 20 3b 20  6c 6f 61 64 20 61 64 72  |      ; load adr|
00001740  20 6f 66 20 72 68 73 20  62 61 73 65 20 69 66 20  | of rhs base if |
00001750  79 31 3e 79 32 0d 0a 64  5e 4c 44 52 47 54 42 20  |y1>y2..d^LDRGTB |
00001760  20 20 20 20 20 20 20 20  72 36 2c 5b 72 31 32 2c  |        r6,[r12,|
00001770  23 31 5d 20 20 20 20 20  20 20 20 20 20 20 20 20  |#1]             |
00001780  20 20 20 3b 20 6c 6f 61  64 20 74 6f 70 20 69 6e  |   ; load top in|
00001790  74 20 61 6e 64 20 62 6f  74 74 6f 6d 20 69 6e 74  |t and bottom int|
000017a0  20 72 65 76 65 72 73 65  20 77 61 79 20 61 72 6f  | reverse way aro|
000017b0  75 6e 64 0d 0a 6e 4f 4c  44 52 47 54 42 20 20 20  |und..nOLDRGTB   |
000017c0  20 20 20 20 20 20 72 37  2c 5b 72 31 32 2c 23 30  |      r7,[r12,#0|
000017d0  5d 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |]               |
000017e0  20 3b 20 72 36 20 69 73  20 74 6f 70 20 69 6e 74  | ; r6 is top int|
000017f0  2c 20 72 37 20 69 73 20  62 6f 74 74 6f 6d 20 69  |, r7 is bottom i|
00001800  6e 74 0d 0a 78 04 0d 0a  82 04 0d 0a 8c 04 0d 0a  |nt..x...........|
00001810  96 04 0d 0a a0 3a 53 55  42 20 20 20 20 20 20 20  |.....:SUB       |
00001820  20 20 20 20 20 72 34 2c  72 32 2c 72 30 20 20 20  |     r4,r2,r0   |
00001830  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001840  3b 20 72 34 20 3d 20 78  32 2d 78 31 0d 0a aa 3a  |; r4 = x2-x1...:|
00001850  53 55 42 20 20 20 20 20  20 20 20 20 20 20 20 72  |SUB            r|
00001860  35 2c 72 33 2c 72 31 20  20 20 20 20 20 20 20 20  |5,r3,r1         |
00001870  20 20 20 20 20 20 20 20  20 20 3b 20 72 35 20 3d  |          ; r5 =|
00001880  20 79 32 2d 79 31 0d 0a  b4 36 a4 73 77 6d 5f 72  | y2-y1...6.swm_r|
00001890  64 69 76 5f 73 63 61 28  34 2c 35 2c 33 29 20 20  |div_sca(4,5,3)  |
000018a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000018b0  20 20 20 3b 20 72 33 20  69 73 20 6d 0d 0a be 04  |   ; r3 is m....|
000018c0  0d 0a c8 49 53 55 42 20  20 20 20 20 20 20 20 20  |...ISUB         |
000018d0  20 20 20 72 37 2c 72 37  2c 72 36 20 20 20 20 20  |   r7,r7,r6     |
000018e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
000018f0  72 37 20 3d 20 62 6f 74  74 6f 6d 20 69 6e 74 20  |r7 = bottom int |
00001900  2d 20 74 6f 70 20 69 6e  74 0d 0a d2 44 a4 73 77  |- top int...D.sw|
00001910  6d 5f 72 64 69 76 5f 73  63 61 28 37 2c 35 2c 38  |m_rdiv_sca(7,5,8|
00001920  29 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |)               |
00001930  20 20 20 20 20 20 3b 20  72 38 20 3d 20 73 63 61  |      ; r8 = sca|
00001940  6c 65 64 20 73 74 65 70  20 73 69 7a 65 0d 0a dc  |led step size...|
00001950  19 4d 4f 56 20 20 20 20  20 20 20 20 20 20 20 20  |.MOV            |
00001960  72 31 34 2c 23 30 0d 0a  e6 04 0d 0a f0 04 0d 0a  |r14,#0..........|
00001970  fa 04 0d 0b 04 46 4d 4f  56 20 20 20 20 20 20 20  |.....FMOV       |
00001980  20 20 20 20 20 72 32 2c  72 30 2c 41 53 4c 23 64  |     r2,r0,ASL#d|
00001990  69 76 5f 73 63 61 6c 65  25 20 20 20 20 20 20 20  |iv_scale%       |
000019a0  3b 20 73 63 61 6c 65 20  75 70 20 78 20 73 74 61  |; scale up x sta|
000019b0  72 74 20 63 6f 6f 72 64  0d 0b 0e 04 0d 0b 18 13  |rt coord........|
000019c0  2e 73 63 61 6e 5f 63 6f  6e 76 5f 6c 6f 6f 70 0d  |.scan_conv_loop.|
000019d0  0b 22 41 4d 4f 56 20 20  20 20 20 20 20 20 20 20  |."AMOV          |
000019e0  20 20 72 30 2c 72 32 2c  41 53 52 23 64 69 76 5f  |  r0,r2,ASR#div_|
000019f0  73 63 61 6c 65 25 20 20  20 20 20 20 20 3b 20 72  |scale%       ; r|
00001a00  30 20 69 73 20 6e 65 77  20 78 20 63 6f 6f 72 64  |0 is new x coord|
00001a10  0d 0b 2c 04 0d 0b 36 49  41 44 44 20 20 20 20 20  |..,...6IADD     |
00001a20  20 20 20 20 20 20 20 72  31 32 2c 72 31 30 2c 72  |       r12,r10,r|
00001a30  31 2c 41 53 4c 23 34 20  20 20 20 20 20 20 20 20  |1,ASL#4         |
00001a40  20 20 3b 20 72 31 32 20  3d 20 62 61 73 65 20 2b  |  ; r12 = base +|
00001a50  20 79 20 63 6f 6f 72 64  20 2a 20 31 36 0d 0b 40  | y coord * 16..@|
00001a60  37 53 54 52 20 20 20 20  20 20 20 20 20 20 20 20  |7STR            |
00001a70  72 30 2c 5b 72 31 32 5d  20 20 20 20 20 20 20 20  |r0,[r12]        |
00001a80  20 20 20 20 20 20 20 20  20 20 20 3b 20 73 74 6f  |           ; sto|
00001a90  72 65 20 78 0d 0b 4a 04  0d 0b 54 54 41 44 44 20  |re x..J...TTADD |
00001aa0  20 20 20 20 20 20 20 20  20 20 20 72 39 2c 72 36  |           r9,r6|
00001ab0  2c 72 31 34 2c 41 53 52  23 64 69 76 5f 73 63 61  |,r14,ASR#div_sca|
00001ac0  6c 65 25 20 20 20 3b 20  73 63 61 6c 65 20 64 6f  |le%   ; scale do|
00001ad0  77 6e 20 69 6e 74 20 61  6e 64 20 73 74 6f 72 65  |wn int and store|
00001ae0  20 61 74 20 62 61 73 65  20 2b 20 34 0d 0b 5e 1e  | at base + 4..^.|
00001af0  53 54 52 20 20 20 20 20  20 20 20 20 20 20 20 72  |STR            r|
00001b00  39 2c 5b 72 31 32 2c 23  34 5d 0d 0b 68 04 0d 0b  |9,[r12,#4]..h...|
00001b10  72 43 41 44 44 20 20 20  20 20 20 20 20 20 20 20  |rCADD           |
00001b20  20 72 32 2c 72 32 2c 72  33 20 20 20 20 20 20 20  | r2,r2,r3       |
00001b30  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 69 6e  |            ; in|
00001b40  63 20 73 63 61 6c 65 64  20 78 20 77 69 74 68 20  |c scaled x with |
00001b50  6d 0d 0b 7c 54 41 44 44  20 20 20 20 20 20 20 20  |m..|TADD        |
00001b60  20 20 20 20 72 31 34 2c  72 31 34 2c 72 38 20 20  |    r14,r14,r8  |
00001b70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00001b80  20 69 6e 63 20 73 63 61  6c 65 64 20 69 6e 74 20  | inc scaled int |
00001b90  77 69 74 68 20 73 63 61  6c 65 64 20 73 74 65 70  |with scaled step|
00001ba0  20 73 69 7a 65 0d 0b 86  04 0d 0b 90 3b 41 44 44  | size.......;ADD|
00001bb0  20 20 20 20 20 20 20 20  20 20 20 20 72 31 2c 72  |            r1,r|
00001bc0  31 2c 23 31 20 20 20 20  20 20 20 20 20 20 20 20  |1,#1            |
00001bd0  20 20 20 20 20 20 20 3b  20 69 6e 63 20 79 20 63  |       ; inc y c|
00001be0  6f 6f 72 64 0d 0b 9a 1b  53 55 42 53 20 20 20 20  |oord....SUBS    |
00001bf0  20 20 20 20 20 20 20 72  35 2c 72 35 2c 23 31 0d  |       r5,r5,#1.|
00001c00  0b a4 21 42 47 54 20 20  20 20 20 20 20 20 20 20  |..!BGT          |
00001c10  20 20 73 63 61 6e 5f 63  6f 6e 76 5f 6c 6f 6f 70  |  scan_conv_loop|
00001c20  0d 0b ae 04 0d 0b b8 04  0d 0b c2 04 0d 0b cc 21  |...............!|
00001c30  2e 65 6e 64 5f 73 63 61  6e 5f 63 6f 6e 76 65 72  |.end_scan_conver|
00001c40  74 5f 67 6f 75 72 61 64  5f 6c 69 6e 65 0d 0b d6  |t_gourad_line...|
00001c50  2a 4c 44 4d 46 41 20 20  20 20 20 20 20 20 20 20  |*LDMFA          |
00001c60  28 73 70 29 21 2c 7b 72  30 2d 72 31 30 2c 72 31  |(sp)!,{r0-r10,r1|
00001c70  32 2c 6c 69 6e 6b 7d 0d  0b e0 1a 4d 4f 56 20 20  |2,link}....MOV  |
00001c80  20 20 20 20 20 20 20 20  20 20 50 43 2c 6c 69 6e  |          PC,lin|
00001c90  6b 0d 0b ea 04 0d 0b f4  04 0d 0b fe 36 2e 71 75  |k...........6.qu|
00001ca0  61 64 5f 77 6f 72 6b 73  70 61 63 65 5f 62 61 73  |ad_workspace_bas|
00001cb0  65 25 20 20 20 20 20 20  20 20 20 45 51 55 44 20  |e%         EQUD |
00001cc0  71 75 61 64 5f 77 6f 72  6b 73 70 61 63 65 25 0d  |quad_workspace%.|
00001cd0  0c 08 14 2e 71 75 61 64  5f 77 6f 72 6b 73 70 61  |....quad_workspa|
00001ce0  63 65 25 0d 0c 12 17 45  51 55 44 20 30 20 20 20  |ce%....EQUD 0   |
00001cf0  20 20 20 20 20 20 3b 20  78 30 0d 0c 1c 18 45 51  |      ; x0....EQ|
00001d00  55 44 20 32 30 20 20 20  20 20 20 20 20 20 3b 20  |UD 20         ; |
00001d10  79 30 0d 0c 26 04 0d 0c  30 18 45 51 55 44 20 32  |y0..&...0.EQUD 2|
00001d20  30 20 20 20 20 20 20 20  20 20 3b 20 78 31 0d 0c  |0         ; x1..|
00001d30  3a 18 45 51 55 44 20 36  30 20 20 20 20 20 20 20  |:.EQUD 60       |
00001d40  20 20 3b 20 79 31 0d 0c  44 04 0d 0c 4e 18 45 51  |  ; y1..D...N.EQ|
00001d50  55 44 20 39 30 20 20 20  20 20 20 20 20 20 3b 20  |UD 90         ; |
00001d60  78 32 0d 0c 58 18 45 51  55 44 20 35 30 20 20 20  |x2..X.EQUD 50   |
00001d70  20 20 20 20 20 20 3b 20  79 32 0d 0c 62 04 0d 0c  |      ; y2..b...|
00001d80  6c 18 45 51 55 44 20 38  30 20 20 20 20 20 20 20  |l.EQUD 80       |
00001d90  20 20 3b 20 78 33 0d 0c  76 17 45 51 55 44 20 30  |  ; x3..v.EQUD 0|
00001da0  20 20 20 20 20 20 20 20  20 3b 20 79 33 0d 0c 80  |         ; y3...|
00001db0  04 0d 0c 8a 30 45 51 55  42 20 30 20 20 20 20 20  |....0EQUB 0     |
00001dc0  20 20 20 20 3b 20 69 6e  74 65 6e 73 69 74 69 65  |    ; intensitie|
00001dd0  73 20 66 6f 72 20 65 61  63 68 20 76 65 72 74 65  |s for each verte|
00001de0  78 0d 0c 94 0a 45 51 55  42 20 30 0d 0c 9e 0b 45  |x....EQUB 0....E|
00001df0  51 55 42 20 33 32 0d 0c  a8 0a 45 51 55 42 20 30  |QUB 32....EQUB 0|
00001e00  0d 0c b2 04 0d 0c bc 26  2e 67 6f 75 72 61 64 5f  |.......&.gourad_|
00001e10  63 6f 6c 73 65 74 5f 6e  6f 25 20 20 20 20 20 20  |colset_no%      |
00001e20  20 20 20 20 45 51 55 44  20 30 0d 0c c6 04 0d 0c  |    EQUD 0......|
00001e30  d0 15 2e 70 6c 6f 74 5f  67 6f 75 72 61 64 5f 71  |...plot_gourad_q|
00001e40  75 61 64 0d 0c da 19 3b  20 72 30 20 69 73 20 63  |uad....; r0 is c|
00001e50  6f 6c 73 65 74 20 74 6f  20 75 73 65 0d 0c e4 2a  |olset to use...*|
00001e60  53 54 4d 46 41 20 20 20  20 20 20 20 20 20 20 28  |STMFA          (|
00001e70  73 70 29 21 2c 7b 72 30  2d 72 31 30 2c 72 31 32  |sp)!,{r0-r10,r12|
00001e80  2c 6c 69 6e 6b 7d 0d 0c  ee 04 0d 0c f8 27 53 54  |,link}.......'ST|
00001e90  52 20 20 20 20 20 20 20  20 20 20 20 20 72 30 2c  |R            r0,|
00001ea0  67 6f 75 72 61 64 5f 63  6f 6c 73 65 74 5f 6e 6f  |gourad_colset_no|
00001eb0  25 0d 0d 02 2b 4c 44 52  20 20 20 20 20 20 20 20  |%...+LDR        |
00001ec0  20 20 20 20 72 31 32 2c  71 75 61 64 5f 77 6f 72  |    r12,quad_wor|
00001ed0  6b 73 70 61 63 65 5f 62  61 73 65 25 0d 0d 0c 2d  |kspace_base%...-|
00001ee0  4c 44 52 20 20 20 20 20  20 20 20 20 20 20 20 72  |LDR            r|
00001ef0  31 30 2c 73 63 61 6e 5f  63 6f 6e 76 5f 77 6b 61  |10,scan_conv_wka|
00001f00  72 65 61 5f 62 61 73 65  25 0d 0d 16 04 0d 0d 20  |rea_base%...... |
00001f10  10 3b 20 73 69 64 65 20  30 20 2d 20 31 0d 0d 2a  |.; side 0 - 1..*|
00001f20  31 4c 44 52 20 20 20 20  20 20 20 20 20 20 20 20  |1LDR            |
00001f30  72 30 2c 5b 72 31 32 5d  20 20 20 20 20 20 20 20  |r0,[r12]        |
00001f40  20 20 20 20 20 20 20 20  20 20 3b 20 78 30 0d 0d  |          ; x0..|
00001f50  34 31 4c 44 52 20 20 20  20 20 20 20 20 20 20 20  |41LDR           |
00001f60  20 72 31 2c 5b 72 31 32  2c 23 34 5d 20 20 20 20  | r1,[r12,#4]    |
00001f70  20 20 20 20 20 20 20 20  20 20 20 3b 20 79 30 0d  |           ; y0.|
00001f80  0d 3e 31 4c 44 52 20 20  20 20 20 20 20 20 20 20  |.>1LDR          |
00001f90  20 20 72 32 2c 5b 72 31  32 2c 23 38 5d 20 20 20  |  r2,[r12,#8]   |
00001fa0  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 78 31  |            ; x1|
00001fb0  0d 0d 48 31 4c 44 52 20  20 20 20 20 20 20 20 20  |..H1LDR         |
00001fc0  20 20 20 72 33 2c 5b 72  31 32 2c 23 31 32 5d 20  |   r3,[r12,#12] |
00001fd0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 79  |             ; y|
00001fe0  31 0d 0d 52 35 4c 44 52  42 20 20 20 20 20 20 20  |1..R5LDRB       |
00001ff0  20 20 20 20 72 34 2c 5b  72 31 32 2c 23 33 32 5d  |    r4,[r12,#32]|
00002000  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00002010  70 30 20 69 6e 74 0d 0d  5c 3b 53 54 52 42 20 20  |p0 int..\;STRB  |
00002020  20 20 20 20 20 20 20 20  20 72 34 2c 5b 72 31 30  |         r4,[r10|
00002030  2c 23 30 5d 20 20 20 20  20 20 20 20 20 20 20 20  |,#0]            |
00002040  20 20 20 3b 20 73 74 6f  72 65 20 70 30 20 69 6e  |   ; store p0 in|
00002050  74 0d 0d 66 35 4c 44 52  42 20 20 20 20 20 20 20  |t..f5LDRB       |
00002060  20 20 20 20 72 35 2c 5b  72 31 32 2c 23 33 33 5d  |    r5,[r12,#33]|
00002070  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00002080  70 31 20 69 6e 74 0d 0d  70 3b 53 54 52 42 20 20  |p1 int..p;STRB  |
00002090  20 20 20 20 20 20 20 20  20 72 35 2c 5b 72 31 30  |         r5,[r10|
000020a0  2c 23 31 5d 20 20 20 20  20 20 20 20 20 20 20 20  |,#1]            |
000020b0  20 20 20 3b 20 73 74 6f  72 65 20 70 31 20 69 6e  |   ; store p1 in|
000020c0  74 0d 0d 7a 2b 42 4c 20  20 20 20 20 20 20 20 20  |t..z+BL         |
000020d0  20 20 20 20 73 63 61 6e  5f 63 6f 6e 76 65 72 74  |    scan_convert|
000020e0  5f 67 6f 75 72 61 64 5f  6c 69 6e 65 0d 0d 84 04  |_gourad_line....|
000020f0  0d 0d 8e 10 3b 20 73 69  64 65 20 31 20 2d 20 32  |....; side 1 - 2|
00002100  0d 0d 98 34 4c 44 52 20  20 20 20 20 20 20 20 20  |...4LDR         |
00002110  20 20 20 72 30 2c 5b 72  31 32 2c 23 38 5d 20 20  |   r0,[r12,#8]  |
00002120  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002130  3b 20 78 31 0d 0d a2 32  4c 44 52 20 20 20 20 20  |; x1...2LDR     |
00002140  20 20 20 20 20 20 20 72  31 2c 5b 72 31 32 2c 23  |       r1,[r12,#|
00002150  31 32 5d 20 20 20 20 20  20 20 20 20 20 20 20 20  |12]             |
00002160  20 20 3b 20 79 31 0d 0d  ac 32 4c 44 52 20 20 20  |  ; y1...2LDR   |
00002170  20 20 20 20 20 20 20 20  20 72 32 2c 5b 72 31 32  |         r2,[r12|
00002180  2c 23 31 36 5d 20 20 20  20 20 20 20 20 20 20 20  |,#16]           |
00002190  20 20 20 20 3b 20 78 32  0d 0d b6 31 4c 44 52 20  |    ; x2...1LDR |
000021a0  20 20 20 20 20 20 20 20  20 20 20 72 33 2c 5b 72  |           r3,[r|
000021b0  31 32 2c 23 32 30 5d 20  20 20 20 20 20 20 20 20  |12,#20]         |
000021c0  20 20 20 20 20 3b 20 79  32 0d 0d c0 35 4c 44 52  |     ; y2...5LDR|
000021d0  42 20 20 20 20 20 20 20  20 20 20 20 72 34 2c 5b  |B           r4,[|
000021e0  72 31 32 2c 23 33 33 5d  20 20 20 20 20 20 20 20  |r12,#33]        |
000021f0  20 20 20 20 20 20 3b 20  70 31 20 69 6e 74 0d 0d  |      ; p1 int..|
00002200  ca 3b 53 54 52 42 20 20  20 20 20 20 20 20 20 20  |.;STRB          |
00002210  20 72 34 2c 5b 72 31 30  2c 23 30 5d 20 20 20 20  | r4,[r10,#0]    |
00002220  20 20 20 20 20 20 20 20  20 20 20 3b 20 73 74 6f  |           ; sto|
00002230  72 65 20 70 31 20 69 6e  74 0d 0d d4 35 4c 44 52  |re p1 int...5LDR|
00002240  42 20 20 20 20 20 20 20  20 20 20 20 72 35 2c 5b  |B           r5,[|
00002250  72 31 32 2c 23 33 34 5d  20 20 20 20 20 20 20 20  |r12,#34]        |
00002260  20 20 20 20 20 20 3b 20  70 32 20 69 6e 74 0d 0d  |      ; p2 int..|
00002270  de 3b 53 54 52 42 20 20  20 20 20 20 20 20 20 20  |.;STRB          |
00002280  20 72 35 2c 5b 72 31 30  2c 23 31 5d 20 20 20 20  | r5,[r10,#1]    |
00002290  20 20 20 20 20 20 20 20  20 20 20 3b 20 73 74 6f  |           ; sto|
000022a0  72 65 20 70 32 20 69 6e  74 0d 0d e8 2b 42 4c 20  |re p2 int...+BL |
000022b0  20 20 20 20 20 20 20 20  20 20 20 20 73 63 61 6e  |            scan|
000022c0  5f 63 6f 6e 76 65 72 74  5f 67 6f 75 72 61 64 5f  |_convert_gourad_|
000022d0  6c 69 6e 65 0d 0d f2 04  0d 0d fc 10 3b 20 73 69  |line........; si|
000022e0  64 65 20 32 20 2d 20 33  0d 0e 06 35 4c 44 52 20  |de 2 - 3...5LDR |
000022f0  20 20 20 20 20 20 20 20  20 20 20 72 30 2c 5b 72  |           r0,[r|
00002300  31 32 2c 23 31 36 5d 20  20 20 20 20 20 20 20 20  |12,#16]         |
00002310  20 20 20 20 20 20 20 20  20 3b 20 78 32 0d 0e 10  |         ; x2...|
00002320  32 4c 44 52 20 20 20 20  20 20 20 20 20 20 20 20  |2LDR            |
00002330  72 31 2c 5b 72 31 32 2c  23 32 30 5d 20 20 20 20  |r1,[r12,#20]    |
00002340  20 20 20 20 20 20 20 20  20 20 20 3b 20 79 32 0d  |           ; y2.|
00002350  0e 1a 32 4c 44 52 20 20  20 20 20 20 20 20 20 20  |..2LDR          |
00002360  20 20 72 32 2c 5b 72 31  32 2c 23 32 34 5d 20 20  |  r2,[r12,#24]  |
00002370  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 78  |             ; x|
00002380  33 0d 0e 24 31 4c 44 52  20 20 20 20 20 20 20 20  |3..$1LDR        |
00002390  20 20 20 20 72 33 2c 5b  72 31 32 2c 23 32 38 5d  |    r3,[r12,#28]|
000023a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
000023b0  79 33 0d 0e 2e 35 4c 44  52 42 20 20 20 20 20 20  |y3...5LDRB      |
000023c0  20 20 20 20 20 72 34 2c  5b 72 31 32 2c 23 33 34  |     r4,[r12,#34|
000023d0  5d 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |]              ;|
000023e0  20 70 32 20 69 6e 74 0d  0e 38 3b 53 54 52 42 20  | p2 int..8;STRB |
000023f0  20 20 20 20 20 20 20 20  20 20 72 34 2c 5b 72 31  |          r4,[r1|
00002400  30 2c 23 30 5d 20 20 20  20 20 20 20 20 20 20 20  |0,#0]           |
00002410  20 20 20 20 3b 20 73 74  6f 72 65 20 70 32 20 69  |    ; store p2 i|
00002420  6e 74 0d 0e 42 35 4c 44  52 42 20 20 20 20 20 20  |nt..B5LDRB      |
00002430  20 20 20 20 20 72 35 2c  5b 72 31 32 2c 23 33 35  |     r5,[r12,#35|
00002440  5d 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |]              ;|
00002450  20 70 33 20 69 6e 74 0d  0e 4c 3b 53 54 52 42 20  | p3 int..L;STRB |
00002460  20 20 20 20 20 20 20 20  20 20 72 35 2c 5b 72 31  |          r5,[r1|
00002470  30 2c 23 31 5d 20 20 20  20 20 20 20 20 20 20 20  |0,#1]           |
00002480  20 20 20 20 3b 20 73 74  6f 72 65 20 70 33 20 69  |    ; store p3 i|
00002490  6e 74 0d 0e 56 2b 42 4c  20 20 20 20 20 20 20 20  |nt..V+BL        |
000024a0  20 20 20 20 20 73 63 61  6e 5f 63 6f 6e 76 65 72  |     scan_conver|
000024b0  74 5f 67 6f 75 72 61 64  5f 6c 69 6e 65 0d 0e 60  |t_gourad_line..`|
000024c0  04 0d 0e 6a 10 3b 20 73  69 64 65 20 33 20 2d 20  |...j.; side 3 - |
000024d0  30 0d 0e 74 35 4c 44 52  20 20 20 20 20 20 20 20  |0..t5LDR        |
000024e0  20 20 20 20 72 30 2c 5b  72 31 32 2c 23 32 34 5d  |    r0,[r12,#24]|
000024f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002500  20 20 3b 20 78 33 0d 0e  7e 32 4c 44 52 20 20 20  |  ; x3..~2LDR   |
00002510  20 20 20 20 20 20 20 20  20 72 31 2c 5b 72 31 32  |         r1,[r12|
00002520  2c 23 32 38 5d 20 20 20  20 20 20 20 20 20 20 20  |,#28]           |
00002530  20 20 20 20 3b 20 79 33  0d 0e 88 31 4c 44 52 20  |    ; y3...1LDR |
00002540  20 20 20 20 20 20 20 20  20 20 20 72 32 2c 5b 72  |           r2,[r|
00002550  31 32 2c 23 30 5d 20 20  20 20 20 20 20 20 20 20  |12,#0]          |
00002560  20 20 20 20 20 3b 20 78  30 0d 0e 92 30 4c 44 52  |     ; x0...0LDR|
00002570  20 20 20 20 20 20 20 20  20 20 20 20 72 33 2c 5b  |            r3,[|
00002580  72 31 32 2c 23 34 5d 20  20 20 20 20 20 20 20 20  |r12,#4]         |
00002590  20 20 20 20 20 3b 20 79  30 0d 0e 9c 35 4c 44 52  |     ; y0...5LDR|
000025a0  42 20 20 20 20 20 20 20  20 20 20 20 72 34 2c 5b  |B           r4,[|
000025b0  72 31 32 2c 23 33 35 5d  20 20 20 20 20 20 20 20  |r12,#35]        |
000025c0  20 20 20 20 20 20 3b 20  70 33 20 69 6e 74 0d 0e  |      ; p3 int..|
000025d0  a6 3b 53 54 52 42 20 20  20 20 20 20 20 20 20 20  |.;STRB          |
000025e0  20 72 34 2c 5b 72 31 30  2c 23 30 5d 20 20 20 20  | r4,[r10,#0]    |
000025f0  20 20 20 20 20 20 20 20  20 20 20 3b 20 73 74 6f  |           ; sto|
00002600  72 65 20 70 33 20 69 6e  74 0d 0e b0 35 4c 44 52  |re p3 int...5LDR|
00002610  42 20 20 20 20 20 20 20  20 20 20 20 72 35 2c 5b  |B           r5,[|
00002620  72 31 32 2c 23 33 32 5d  20 20 20 20 20 20 20 20  |r12,#32]        |
00002630  20 20 20 20 20 20 3b 20  70 30 20 69 6e 74 0d 0e  |      ; p0 int..|
00002640  ba 3b 53 54 52 42 20 20  20 20 20 20 20 20 20 20  |.;STRB          |
00002650  20 72 35 2c 5b 72 31 30  2c 23 31 5d 20 20 20 20  | r5,[r10,#1]    |
00002660  20 20 20 20 20 20 20 20  20 20 20 3b 20 73 74 6f  |           ; sto|
00002670  72 65 20 70 30 20 69 6e  74 0d 0e c4 2b 42 4c 20  |re p0 int...+BL |
00002680  20 20 20 20 20 20 20 20  20 20 20 20 73 63 61 6e  |            scan|
00002690  5f 63 6f 6e 76 65 72 74  5f 67 6f 75 72 61 64 5f  |_convert_gourad_|
000026a0  6c 69 6e 65 0d 0e ce 04  0d 0e d8 04 0d 0e e2 33  |line...........3|
000026b0  4d 4f 56 20 20 20 20 20  20 20 20 20 20 20 20 72  |MOV            r|
000026c0  34 2c 23 32 35 35 20 20  20 20 20 20 20 20 20 20  |4,#255          |
000026d0  20 20 20 20 20 20 20 20  20 3b 20 79 6d 69 6e 0d  |         ; ymin.|
000026e0  0e ec 33 4d 4f 56 20 20  20 20 20 20 20 20 20 20  |..3MOV          |
000026f0  20 20 72 35 2c 23 30 20  20 20 20 20 20 20 20 20  |  r5,#0         |
00002700  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 79 6d  |            ; ym|
00002710  61 78 0d 0e f6 04 0d 0f  00 22 3b 20 66 69 6e 64  |ax......."; find|
00002720  20 70 6f 6c 79 67 6f 6e  20 79 20 6d 61 78 20 61  | polygon y max a|
00002730  6e 64 20 79 20 6d 69 6e  0d 0f 0a 31 4c 44 52 20  |nd y min...1LDR |
00002740  20 20 20 20 20 20 20 20  20 20 20 72 36 2c 5b 72  |           r6,[r|
00002750  31 32 2c 23 34 5d 20 20  20 20 20 20 20 20 20 20  |12,#4]          |
00002760  20 20 20 20 20 3b 20 79  30 0d 0f 14 18 43 4d 50  |     ; y0....CMP|
00002770  20 20 20 20 20 20 20 20  20 20 20 20 72 36 2c 72  |            r6,r|
00002780  34 0d 0f 1e 18 4d 4f 56  4c 54 20 20 20 20 20 20  |4....MOVLT      |
00002790  20 20 20 20 72 34 2c 72  36 0d 0f 28 18 43 4d 50  |    r4,r6..(.CMP|
000027a0  20 20 20 20 20 20 20 20  20 20 20 20 72 36 2c 72  |            r6,r|
000027b0  35 0d 0f 32 18 4d 4f 56  47 54 20 20 20 20 20 20  |5..2.MOVGT      |
000027c0  20 20 20 20 72 35 2c 72  36 0d 0f 3c 31 4c 44 52  |    r5,r6..<1LDR|
000027d0  20 20 20 20 20 20 20 20  20 20 20 20 72 36 2c 5b  |            r6,[|
000027e0  72 31 32 2c 23 31 32 5d  20 20 20 20 20 20 20 20  |r12,#12]        |
000027f0  20 20 20 20 20 20 3b 20  79 31 0d 0f 46 18 43 4d  |      ; y1..F.CM|
00002800  50 20 20 20 20 20 20 20  20 20 20 20 20 72 36 2c  |P            r6,|
00002810  72 34 0d 0f 50 18 4d 4f  56 4c 54 20 20 20 20 20  |r4..P.MOVLT     |
00002820  20 20 20 20 20 72 34 2c  72 36 0d 0f 5a 18 43 4d  |     r4,r6..Z.CM|
00002830  50 20 20 20 20 20 20 20  20 20 20 20 20 72 36 2c  |P            r6,|
00002840  72 35 0d 0f 64 18 4d 4f  56 47 54 20 20 20 20 20  |r5..d.MOVGT     |
00002850  20 20 20 20 20 72 35 2c  72 36 0d 0f 6e 31 4c 44  |     r5,r6..n1LD|
00002860  52 20 20 20 20 20 20 20  20 20 20 20 20 72 36 2c  |R            r6,|
00002870  5b 72 31 32 2c 23 32 30  5d 20 20 20 20 20 20 20  |[r12,#20]       |
00002880  20 20 20 20 20 20 20 3b  20 79 32 0d 0f 78 18 43  |       ; y2..x.C|
00002890  4d 50 20 20 20 20 20 20  20 20 20 20 20 20 72 36  |MP            r6|
000028a0  2c 72 34 0d 0f 82 18 4d  4f 56 4c 54 20 20 20 20  |,r4....MOVLT    |
000028b0  20 20 20 20 20 20 72 34  2c 72 36 0d 0f 8c 18 43  |      r4,r6....C|
000028c0  4d 50 20 20 20 20 20 20  20 20 20 20 20 20 72 36  |MP            r6|
000028d0  2c 72 35 0d 0f 96 18 4d  4f 56 47 54 20 20 20 20  |,r5....MOVGT    |
000028e0  20 20 20 20 20 20 72 35  2c 72 36 0d 0f a0 31 4c  |      r5,r6...1L|
000028f0  44 52 20 20 20 20 20 20  20 20 20 20 20 20 72 36  |DR            r6|
00002900  2c 5b 72 31 32 2c 23 32  38 5d 20 20 20 20 20 20  |,[r12,#28]      |
00002910  20 20 20 20 20 20 20 20  3b 20 79 33 0d 0f aa 18  |        ; y3....|
00002920  43 4d 50 20 20 20 20 20  20 20 20 20 20 20 20 72  |CMP            r|
00002930  36 2c 72 34 0d 0f b4 18  4d 4f 56 4c 54 20 20 20  |6,r4....MOVLT   |
00002940  20 20 20 20 20 20 20 72  34 2c 72 36 0d 0f be 18  |       r4,r6....|
00002950  43 4d 50 20 20 20 20 20  20 20 20 20 20 20 20 72  |CMP            r|
00002960  36 2c 72 35 0d 0f c8 18  4d 4f 56 47 54 20 20 20  |6,r5....MOVGT   |
00002970  20 20 20 20 20 20 20 72  35 2c 72 36 0d 0f d2 04  |       r5,r6....|
00002980  0d 0f dc 04 0d 0f e6 3c  4c 44 52 20 20 20 20 20  |.......<LDR     |
00002990  20 20 20 20 20 20 20 72  31 32 2c 5b 72 31 30 2c  |       r12,[r10,|
000029a0  23 38 5d 20 20 20 20 20  20 20 20 20 20 20 20 20  |#8]             |
000029b0  20 3b 20 6c 68 73 20 6c  69 73 74 20 62 61 73 65  | ; lhs list base|
000029c0  0d 0f f0 3c 4c 44 52 20  20 20 20 20 20 20 20 20  |...<LDR         |
000029d0  20 20 20 72 39 2c 5b 72  31 30 2c 23 31 32 5d 20  |   r9,[r10,#12] |
000029e0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
000029f0  68 73 20 6c 69 73 74 20  62 61 73 65 0d 0f fa 04  |hs list base....|
00002a00  0d 10 04 3b 53 55 42 20  20 20 20 20 20 20 20 20  |...;SUB         |
00002a10  20 20 20 72 35 2c 72 35  2c 72 34 20 20 20 20 20  |   r5,r5,r4     |
00002a20  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
00002a30  35 20 69 73 20 79 20 73  69 7a 65 0d 10 0e 18 4d  |5 is y size....M|
00002a40  4f 56 20 20 20 20 20 20  20 20 20 20 20 20 72 31  |OV            r1|
00002a50  2c 72 34 0d 10 18 04 0d  10 22 1a 2e 66 69 6c 6c  |,r4......"..fill|
00002a60  5f 67 6f 75 72 61 64 5f  70 6f 6c 79 5f 6c 6f 6f  |_gourad_poly_loo|
00002a70  70 0d 10 2c 4b 41 44 44  20 20 20 20 20 20 20 20  |p..,KADD        |
00002a80  20 20 20 20 72 38 2c 72  31 32 2c 72 31 2c 41 53  |    r8,r12,r1,AS|
00002a90  4c 23 34 20 20 20 20 20  20 20 20 20 20 20 3b 20  |L#4           ; |
00002aa0  72 38 20 3d 20 6c 68 73  20 62 61 73 65 20 2b 20  |r8 = lhs base + |
00002ab0  79 20 63 6f 6f 72 64 20  2a 20 31 36 0d 10 36 4b  |y coord * 16..6K|
00002ac0  41 44 44 20 20 20 20 20  20 20 20 20 20 20 20 72  |ADD            r|
00002ad0  37 2c 72 39 2c 72 31 2c  41 53 4c 23 34 20 20 20  |7,r9,r1,ASL#4   |
00002ae0  20 20 20 20 20 20 20 20  20 3b 20 72 37 20 3d 20  |         ; r7 = |
00002af0  72 68 73 20 62 61 73 65  20 2b 20 79 20 63 6f 6f  |rhs base + y coo|
00002b00  72 64 20 2a 20 31 36 0d  10 40 04 0d 10 4a 41 4c  |rd * 16..@...JAL|
00002b10  44 52 20 20 20 20 20 20  20 20 20 20 20 20 72 30  |DR            r0|
00002b20  2c 5b 72 38 5d 20 20 20  20 20 20 20 20 20 20 20  |,[r8]           |
00002b30  20 20 20 20 20 20 20 20  3b 20 6c 6f 61 64 20 73  |        ; load s|
00002b40  74 61 72 74 20 78 20 63  6f 6f 72 64 0d 10 54 13  |tart x coord..T.|
00002b50  3b 20 72 31 20 69 73 20  79 20 63 6f 6f 72 64 0d  |; r1 is y coord.|
00002b60  10 5e 1a 4c 44 52 20 20  20 20 20 20 20 20 20 20  |.^.LDR          |
00002b70  20 20 72 32 2c 5b 72 37  5d 0d 10 68 3f 53 55 42  |  r2,[r7]..h?SUB|
00002b80  20 20 20 20 20 20 20 20  20 20 20 20 72 32 2c 72  |            r2,r|
00002b90  32 2c 72 30 20 20 20 20  20 20 20 20 20 20 20 20  |2,r0            |
00002ba0  20 20 20 20 20 20 3b 20  72 32 20 69 73 20 6e 6f  |      ; r2 is no|
00002bb0  77 20 6c 65 6e 67 74 68  0d 10 72 38 4c 44 52 20  |w length..r8LDR |
00002bc0  20 20 20 20 20 20 20 20  20 20 20 72 33 2c 5b 72  |           r3,[r|
00002bd0  38 2c 23 34 5d 20 20 20  20 20 20 20 20 20 20 20  |8,#4]           |
00002be0  20 20 20 20 20 3b 20 73  74 61 72 74 20 69 6e 74  |     ; start int|
00002bf0  0d 10 7c 36 4c 44 52 20  20 20 20 20 20 20 20 20  |..|6LDR         |
00002c00  20 20 20 72 34 2c 5b 72  37 2c 23 34 5d 20 20 20  |   r4,[r7,#4]   |
00002c10  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 65  |             ; e|
00002c20  6e 64 20 69 6e 74 0d 10  86 04 0d 10 90 23 42 4c  |nd int.......#BL|
00002c30  20 20 20 20 20 20 20 20  20 20 20 20 20 67 6f 75  |             gou|
00002c40  72 61 64 5f 73 63 61 6e  5f 6c 69 6e 65 0d 10 9a  |rad_scan_line...|
00002c50  04 0d 10 a4 3e 41 44 44  20 20 20 20 20 20 20 20  |....>ADD        |
00002c60  20 20 20 20 72 31 2c 72  31 2c 23 31 20 20 20 20  |    r1,r1,#1    |
00002c70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00002c80  79 20 63 6f 6f 72 64 20  69 6e 20 70 6f 6c 79 0d  |y coord in poly.|
00002c90  10 ae 1b 53 55 42 53 20  20 20 20 20 20 20 20 20  |...SUBS         |
00002ca0  20 20 72 35 2c 72 35 2c  23 31 0d 10 b8 28 42 47  |  r5,r5,#1...(BG|
00002cb0  54 20 20 20 20 20 20 20  20 20 20 20 20 66 69 6c  |T            fil|
00002cc0  6c 5f 67 6f 75 72 61 64  5f 70 6f 6c 79 5f 6c 6f  |l_gourad_poly_lo|
00002cd0  6f 70 0d 10 c2 04 0d 10  cc 04 0d 10 d6 2a 4c 44  |op...........*LD|
00002ce0  4d 46 41 20 20 20 20 20  20 20 20 20 20 28 73 70  |MFA          (sp|
00002cf0  29 21 2c 7b 72 30 2d 72  31 30 2c 72 31 32 2c 6c  |)!,{r0-r10,r12,l|
00002d00  69 6e 6b 7d 0d 10 e0 1a  4d 4f 56 20 20 20 20 20  |ink}....MOV     |
00002d10  20 20 20 20 20 20 20 50  43 2c 6c 69 6e 6b 0d 10  |       PC,link..|
00002d20  ea 04 0d 10 f4 04 0d 10  fe 04 0d 11 08 04 0d 11  |................|
00002d30  12 0d 2e 70 6c 6f 74 5f  64 6f 74 0d 11 1c 0d 3b  |...plot_dot....;|
00002d40  20 72 36 20 69 73 20 78  0d 11 26 0d 3b 20 72 37  | r6 is x..&.; r7|
00002d50  20 69 73 20 79 0d 11 30  2a 53 54 4d 46 41 20 20  | is y..0*STMFA  |
00002d60  20 20 20 20 20 20 20 20  28 73 70 29 21 2c 7b 72  |        (sp)!,{r|
00002d70  30 2d 72 31 30 2c 72 31  32 2c 6c 69 6e 6b 7d 0d  |0-r10,r12,link}.|
00002d80  11 3a 22 4c 44 52 20 20  20 20 20 20 20 20 20 20  |.:"LDR          |
00002d90  20 20 72 31 32 2c 73 63  72 65 65 6e 5f 61 64 72  |  r12,screen_adr|
00002da0  25 0d 11 44 1d 41 44 44  20 20 20 20 20 20 20 20  |%..D.ADD        |
00002db0  20 20 20 20 72 31 32 2c  72 31 32 2c 72 36 0d 11  |    r12,r12,r6..|
00002dc0  4e 04 0d 11 58 1e 4d 4f  56 20 20 20 20 20 20 20  |N...X.MOV       |
00002dd0  20 20 20 20 20 72 32 2c  72 37 2c 41 53 4c 23 38  |     r2,r7,ASL#8|
00002de0  0d 11 62 1e 4d 4f 56 20  20 20 20 20 20 20 20 20  |..b.MOV         |
00002df0  20 20 20 72 33 2c 72 37  2c 41 53 4c 23 36 0d 11  |   r3,r7,ASL#6..|
00002e00  6c 1b 41 44 44 20 20 20  20 20 20 20 20 20 20 20  |l.ADD           |
00002e10  20 72 32 2c 72 32 2c 72  33 0d 11 76 1d 41 44 44  | r2,r2,r3..v.ADD|
00002e20  20 20 20 20 20 20 20 20  20 20 20 20 72 31 32 2c  |            r12,|
00002e30  72 31 32 2c 72 32 0d 11  80 04 0d 11 8a 1b 4d 4f  |r12,r2........MO|
00002e40  56 20 20 20 20 20 20 20  20 20 20 20 20 72 31 30  |V            r10|
00002e50  2c 23 32 35 35 0d 11 94  1c 53 54 52 42 20 20 20  |,#255....STRB   |
00002e60  20 20 20 20 20 20 20 20  72 31 30 2c 5b 72 31 32  |        r10,[r12|
00002e70  5d 0d 11 9e 04 0d 11 a8  2a 4c 44 4d 46 41 20 20  |].......*LDMFA  |
00002e80  20 20 20 20 20 20 20 20  28 73 70 29 21 2c 7b 72  |        (sp)!,{r|
00002e90  30 2d 72 31 30 2c 72 31  32 2c 6c 69 6e 6b 7d 0d  |0-r10,r12,link}.|
00002ea0  11 b2 1a 4d 4f 56 20 20  20 20 20 20 20 20 20 20  |...MOV          |
00002eb0  20 20 50 43 2c 6c 69 6e  6b 0d 11 bc 04 0d 11 c6  |  PC,link.......|
00002ec0  04 0d 11 d0 53 3b 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |....S; ---------|
00002ed0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 20 67  |-------------- g|
00002ee0  6c 6f 62 61 6c 20 6c 69  73 74 20 61 64 64 72 65  |lobal list addre|
00002ef0  73 73 65 73 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |sses -----------|
00002f00  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00002f10  2d 2d 2d 2d 0d 11 da 04  0d 11 e4 38 2e 73 77 6d  |----.......8.swm|
00002f20  5f 72 64 69 76 5f 6c 69  73 74 5f 62 61 73 65 25  |_rdiv_list_base%|
00002f30  20 20 20 20 20 20 20 20  20 20 20 20 20 45 51 55  |             EQU|
00002f40  44 20 73 77 6d 5f 72 64  69 76 5f 6c 69 73 74 25  |D swm_rdiv_list%|
00002f50  0d 11 ee 04 0d 11 f8 05  5d 0d 12 02 0b ed 20 70  |........]..... p|
00002f60  61 73 73 25 0d 12 0c 04  0d 12 16 05 e1 0d 12 20  |ass%........... |
00002f70  04 0d 12 2a 50 f4 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |...*P. ---------|
00002f80  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00002f90  2d 2d 20 53 45 54 55 50  20 47 4f 55 52 41 44 20  |-- SETUP GOURAD |
00002fa0  4d 41 50 20 53 54 55 46  46 20 2d 2d 2d 2d 2d 2d  |MAP STUFF ------|
00002fb0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00002fc0  2d 0d 12 34 04 0d 12 3e  04 0d 12 48 04 0d 12 52  |-..4...>...H...R|
00002fd0  20 dd 20 f2 69 6e 69 74  69 61 6c 69 73 65 5f 67  | . .initialise_g|
00002fe0  6f 75 72 61 64 5f 63 6f  6c 73 65 74 73 0d 12 5c  |ourad_colsets..\|
00002ff0  04 0d 12 66 18 ea 20 6e  6f 5f 6f 66 5f 63 6f 6c  |...f.. no_of_col|
00003000  73 65 74 73 25 2c 63 6f  6c 0d 12 70 04 0d 12 7a  |sets%,col..p...z|
00003010  29 66 68 3d 8e 22 3c 50  65 72 70 65 74 75 61 6c  |)fh=."<Perpetual|
00003020  5f 4d 6f 74 69 6f 6e 24  44 69 72 3e 2e 43 6f 6c  |_Motion$Dir>.Col|
00003030  a0 53 65 74 73 22 0d 12  84 04 0d 12 8e 17 e8 23  |.Sets".........#|
00003040  66 68 2c 6e 6f 5f 6f 66  5f 63 6f 6c 73 65 74 73  |fh,no_of_colsets|
00003050  25 0d 12 98 04 0d 12 a2  36 f4 20 31 32 20 63 6f  |%.......6. 12 co|
00003060  6c 6f 75 72 73 20 69 6e  20 6f 6e 65 20 73 65 74  |lours in one set|
00003070  20 28 20 31 20 62 79 74  65 20 66 6f 72 20 65 61  | ( 1 byte for ea|
00003080  63 68 20 63 6f 6c 6f 75  72 20 29 0d 12 ac 04 0d  |ch colour ).....|
00003090  12 b6 27 de 20 67 6f 75  72 61 64 5f 63 6f 6c 73  |..'. gourad_cols|
000030a0  65 74 73 25 20 33 32 2a  6e 6f 5f 6f 66 5f 63 6f  |ets% 32*no_of_co|
000030b0  6c 73 65 74 73 25 0d 12  c0 04 0d 12 ca 22 e3 20  |lsets%.......". |
000030c0  49 25 3d 30 20 b8 20 28  33 32 2a 6e 6f 5f 6f 66  |I%=0 . (32*no_of|
000030d0  5f 63 6f 6c 73 65 74 73  25 29 2d 31 0d 12 d4 0e  |_colsets%)-1....|
000030e0  20 20 63 6f 6c 3d 9a 23  66 68 0d 12 de 1c 20 20  |  col=.#fh....  |
000030f0  67 6f 75 72 61 64 5f 63  6f 6c 73 65 74 73 25 3f  |gourad_colsets%?|
00003100  49 25 3d 63 6f 6c 0d 12  e8 08 ed 20 49 25 0d 12  |I%=col..... I%..|
00003110  f2 04 0d 12 fc 08 d9 23  66 68 0d 13 06 04 0d 13  |.......#fh......|
00003120  10 05 e1 0d 13 1a 04 0d  13 24 04 0d 13 2e 04 0d  |.........$......|
00003130  13 38 57 f4 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |.8W. -----------|
00003140  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00003150  20 33 64 20 6f 62 6a 65  63 74 20 68 61 6e 64 6c  | 3d object handl|
00003160  65 72 73 20 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |ers ------------|
00003170  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00003180  2d 2d 2d 2d 2d 2d 0d 13  42 04 0d 13 4c 1a dd f2  |------..B...L...|
00003190  61 73 73 65 6d 62 6c 65  5f 33 64 5f 68 61 6e 64  |assemble_3d_hand|
000031a0  6c 65 72 73 0d 13 56 04  0d 13 60 18 ea 20 61 64  |lers..V...`.. ad|
000031b0  72 25 2c 70 61 73 73 25  2c 6c 69 6e 6b 2c 73 70  |r%,pass%,link,sp|
000031c0  0d 13 6a 04 0d 13 74 0b  6c 69 6e 6b 3d 31 34 0d  |..j...t.link=14.|
000031d0  13 7e 09 73 70 3d 31 31  0d 13 88 04 0d 13 92 22  |.~.sp=11......."|
000031e0  f4 20 63 6f 6e 74 69 6e  75 65 73 20 6f 6e 20 69  |. continues on i|
000031f0  6e 20 63 6f 64 65 25 20  6d 65 6d 6f 72 79 0d 13  |n code% memory..|
00003200  9c 04 0d 13 a6 0b 61 64  72 25 3d 50 25 0d 13 b0  |......adr%=P%...|
00003210  04 0d 13 ba 26 f1 20 22  41 73 73 65 6d 62 6c 69  |....&. "Assembli|
00003220  6e 67 20 33 44 20 6f 62  6a 65 63 74 20 68 61 6e  |ng 3D object han|
00003230  64 6c 65 72 73 22 27 0d  13 c4 04 0d 13 ce 16 e3  |dlers"'.........|
00003240  20 70 61 73 73 25 3d 38  20 b8 20 31 30 20 88 20  | pass%=8 . 10 . |
00003250  32 0d 13 d8 04 0d 13 e2  0b 50 25 3d 61 64 72 25  |2........P%=adr%|
00003260  0d 13 ec 13 4c 25 3d 63  6f 64 65 25 20 2b 20 6c  |....L%=code% + l|
00003270  65 6e 25 0d 13 f6 04 0d  14 00 0f 5b 20 4f 50 54  |en%........[ OPT|
00003280  20 70 61 73 73 25 0d 14  0a 04 0d 14 14 5d 3b 20  | pass%.......]; |
00003290  41 64 64 72 65 73 73 65  73 20 61 6c 72 65 61 64  |Addresses alread|
000032a0  79 20 75 73 65 64 20 28  20 69 6e 20 66 72 6f 6e  |y used ( in fron|
000032b0  74 20 6f 66 20 63 6f 64  65 20 73 6f 20 69 74 20  |t of code so it |
000032c0  69 74 20 75 73 65 73 20  74 68 65 73 65 20 69 6e  |it uses these in|
000032d0  73 74 65 61 64 20 6f 66  20 74 68 65 20 70 72 65  |stead of the pre|
000032e0  76 69 6f 75 73 20 29 0d  14 1e 04 0d 14 28 36 2e  |vious )......(6.|
000032f0  71 75 61 64 5f 77 6f 72  6b 73 70 61 63 65 5f 62  |quad_workspace_b|
00003300  61 73 65 25 20 20 20 20  20 20 20 20 20 45 51 55  |ase%         EQU|
00003310  44 20 71 75 61 64 5f 77  6f 72 6b 73 70 61 63 65  |D quad_workspace|
00003320  25 0d 14 32 35 2e 73 77  6d 5f 72 64 69 76 5f 6c  |%..25.swm_rdiv_l|
00003330  69 73 74 5f 62 61 73 65  25 20 20 20 20 20 20 20  |ist_base%       |
00003340  20 20 20 45 51 55 44 20  73 77 6d 5f 72 64 69 76  |   EQUD swm_rdiv|
00003350  5f 6c 69 73 74 25 0d 14  3c 04 0d 14 46 04 0d 14  |_list%..<...F...|
00003360  50 32 2e 73 69 6e 65 5f  74 61 62 6c 65 5f 62 61  |P2.sine_table_ba|
00003370  73 65 25 20 20 20 20 20  20 20 20 20 20 20 20 20  |se%             |
00003380  45 51 55 44 20 73 69 6e  65 5f 74 61 62 6c 65 25  |EQUD sine_table%|
00003390  0d 14 5a 34 2e 63 6f 73  69 6e 65 5f 74 61 62 6c  |..Z4.cosine_tabl|
000033a0  65 5f 62 61 73 65 25 20  20 20 20 20 20 20 20 20  |e_base%         |
000033b0  20 20 45 51 55 44 20 63  6f 73 69 6e 65 5f 74 61  |  EQUD cosine_ta|
000033c0  62 6c 65 25 0d 14 64 39  2e 63 72 61 66 74 5f 68  |ble%..d9.craft_h|
000033d0  65 61 64 65 72 5f 6c 69  73 74 5f 62 61 73 65 25  |eader_list_base%|
000033e0  20 20 20 20 20 20 45 51  55 44 20 63 72 61 66 74  |      EQUD craft|
000033f0  5f 68 65 61 64 65 72 5f  6c 69 73 74 25 0d 14 6e  |_header_list%..n|
00003400  04 0d 14 78 2a 2e 73 63  72 65 65 6e 5f 78 5f 6f  |...x*.screen_x_o|
00003410  72 69 67 69 6e 25 20 20  20 20 20 20 20 20 20 20  |rigin%          |
00003420  20 20 20 45 51 55 44 20  31 36 30 0d 14 82 2a 2e  |   EQUD 160...*.|
00003430  73 63 72 65 65 6e 5f 79  5f 6f 72 69 67 69 6e 25  |screen_y_origin%|
00003440  20 20 20 20 20 20 20 20  20 20 20 20 20 45 51 55  |             EQU|
00003450  44 20 31 32 38 0d 14 8c  04 0d 14 96 04 0d 14 a0  |D 128...........|
00003460  04 0d 14 aa 20 3b 20 72  30 20 69 73 20 63 72 61  |.... ; r0 is cra|
00003470  66 74 20 6e 6f 2e 20 74  6f 20 70 72 6f 6a 65 63  |ft no. to projec|
00003480  74 0d 14 b4 12 2e 70 72  6f 6a 65 63 74 5f 63 72  |t.....project_cr|
00003490  61 66 74 0d 14 be 2f 53  54 4d 46 41 20 20 20 20  |aft.../STMFA    |
000034a0  20 20 20 20 20 20 20 20  20 20 20 28 73 70 29 21  |           (sp)!|
000034b0  2c 7b 72 30 2d 72 31 30  2c 72 31 32 2c 6c 69 6e  |,{r0-r10,r12,lin|
000034c0  6b 7d 0d 14 c8 04 0d 14  d2 3b 3b 20 72 6f 74 61  |k}.......;; rota|
000034d0  74 65 20 6f 72 69 67 69  6e 61 6c 20 64 61 74 61  |te original data|
000034e0  20 61 72 6f 75 6e 64 20  7a 20 61 6e 64 20 70 75  | around z and pu|
000034f0  74 20 69 6e 74 6f 20 74  72 61 6e 73 20 64 61 74  |t into trans dat|
00003500  61 0d 14 dc 04 0d 14 e6  33 4c 44 52 20 20 20 20  |a.......3LDR    |
00003510  20 20 20 20 20 20 20 20  20 20 20 20 20 72 31 30  |             r10|
00003520  2c 63 72 61 66 74 5f 68  65 61 64 65 72 5f 6c 69  |,craft_header_li|
00003530  73 74 5f 62 61 73 65 25  0d 14 f0 53 4c 44 52 20  |st_base%...SLDR |
00003540  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003550  72 31 32 2c 5b 72 31 30  2c 72 30 2c 41 53 4c 23  |r12,[r10,r0,ASL#|
00003560  32 5d 20 20 20 20 20 20  20 20 20 20 3b 20 72 31  |2]          ; r1|
00003570  30 20 69 73 20 68 65 61  64 65 72 20 6f 66 20 63  |0 is header of c|
00003580  72 61 66 74 20 6e 6f 2e  20 72 30 0d 14 fa 53 4c  |raft no. r0...SL|
00003590  44 52 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |DR              |
000035a0  20 20 20 72 31 30 2c 5b  72 31 32 2c 23 35 32 5d  |   r10,[r12,#52]|
000035b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
000035c0  20 72 31 30 20 69 73 20  6e 6f 2e 20 6f 66 20 70  | r10 is no. of p|
000035d0  6f 69 6e 74 73 20 69 6e  20 63 72 61 66 74 0d 15  |oints in craft..|
000035e0  04 04 0d 15 0e 4d 4c 44  52 20 20 20 20 20 20 20  |.....MLDR       |
000035f0  20 20 20 20 20 20 20 20  20 20 72 38 2c 5b 72 31  |          r8,[r1|
00003600  32 2c 23 36 30 5d 20 20  20 20 20 20 20 20 20 20  |2,#60]          |
00003610  20 20 20 20 20 20 3b 20  72 38 20 69 73 20 62 61  |      ; r8 is ba|
00003620  73 65 20 6f 66 20 6f 72  69 67 20 64 61 74 61 0d  |se of orig data.|
00003630  15 18 4e 4c 44 52 20 20  20 20 20 20 20 20 20 20  |..NLDR          |
00003640  20 20 20 20 20 20 20 72  39 2c 5b 72 31 32 2c 23  |       r9,[r12,#|
00003650  36 34 5d 20 20 20 20 20  20 20 20 20 20 20 20 20  |64]             |
00003660  20 20 20 3b 20 72 39 20  69 73 20 62 61 73 65 20  |   ; r9 is base |
00003670  6f 66 20 74 72 61 6e 73  20 64 61 74 61 0d 15 22  |of trans data.."|
00003680  04 0d 15 2c 2d 4c 44 52  20 20 20 20 20 20 20 20  |...,-LDR        |
00003690  20 20 20 20 20 20 20 20  20 72 30 2c 63 6f 73 69  |         r0,cosi|
000036a0  6e 65 5f 74 61 62 6c 65  5f 62 61 73 65 25 0d 15  |ne_table_base%..|
000036b0  36 2b 4c 44 52 20 20 20  20 20 20 20 20 20 20 20  |6+LDR           |
000036c0  20 20 20 20 20 20 72 31  2c 73 69 6e 65 5f 74 61  |      r1,sine_ta|
000036d0  62 6c 65 5f 62 61 73 65  25 0d 15 40 04 0d 15 4a  |ble_base%..@...J|
000036e0  3b 4c 44 52 20 20 20 20  20 20 20 20 20 20 20 20  |;LDR            |
000036f0  20 20 20 20 20 72 35 2c  5b 72 31 32 2c 23 34 30  |     r5,[r12,#40|
00003700  5d 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |]               |
00003710  20 3b 20 7a 20 72 6f 74  0d 15 54 04 0d 15 5e 49  | ; z rot..T...^I|
00003720  4c 44 52 20 20 20 20 20  20 20 20 20 20 20 20 20  |LDR             |
00003730  20 20 20 20 72 36 2c 5b  72 30 2c 72 35 2c 41 53  |    r6,[r0,r5,AS|
00003740  4c 23 32 5d 20 20 20 20  20 20 20 20 20 20 20 20  |L#2]            |
00003750  3b 20 72 36 20 69 73 20  63 20 20 20 28 20 2a 20  |; r6 is c   ( * |
00003760  32 35 36 20 29 0d 15 68  49 4c 44 52 20 20 20 20  |256 )..hILDR    |
00003770  20 20 20 20 20 20 20 20  20 20 20 20 20 72 37 2c  |             r7,|
00003780  5b 72 31 2c 72 35 2c 41  53 4c 23 32 5d 20 20 20  |[r1,r5,ASL#2]   |
00003790  20 20 20 20 20 20 20 20  20 3b 20 72 37 20 69 73  |         ; r7 is|
000037a0  20 73 20 20 20 28 20 2a  20 32 35 36 20 29 0d 15  | s   ( * 256 )..|
000037b0  72 04 0d 15 7c 04 0d 15  86 1f 3b 20 58 20 3d 20  |r...|.....; X = |
000037c0  28 20 78 20 2a 20 63 20  29 20 2d 20 28 20 79 20  |( x * c ) - ( y |
000037d0  2a 20 73 20 29 0d 15 90  1f 3b 20 59 20 3d 20 28  |* s )....; Y = (|
000037e0  20 79 20 2a 20 63 20 29  20 2b 20 28 20 78 20 2a  | y * c ) + ( x *|
000037f0  20 73 20 29 0d 15 9a 21  2e 72 6f 74 61 74 65 5f  | s )...!.rotate_|
00003800  63 72 61 66 74 5f 6f 72  69 67 69 6e 61 6c 5f 64  |craft_original_d|
00003810  61 74 61 5f 7a 0d 15 a4  37 4c 44 52 20 20 20 20  |ata_z...7LDR    |
00003820  20 20 20 20 20 20 20 20  20 20 20 20 20 72 30 2c  |             r0,|
00003830  5b 72 38 5d 2c 23 34 20  20 20 20 20 20 20 20 20  |[r8],#4         |
00003840  20 20 20 20 20 20 20 20  20 3b 20 78 0d 15 ae 37  |         ; x...7|
00003850  4c 44 52 20 20 20 20 20  20 20 20 20 20 20 20 20  |LDR             |
00003860  20 20 20 20 72 31 2c 5b  72 38 5d 2c 23 34 20 20  |    r1,[r8],#4  |
00003870  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003880  3b 20 79 0d 15 b8 04 0d  15 c2 37 4c 44 52 20 20  |; y.......7LDR  |
00003890  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 72  |               r|
000038a0  32 2c 5b 72 38 5d 2c 23  34 20 20 20 20 20 20 20  |2,[r8],#4       |
000038b0  20 20 20 20 20 20 20 20  20 20 20 3b 20 7a 0d 15  |           ; z..|
000038c0  cc 3d 53 54 52 20 20 20  20 20 20 20 20 20 20 20  |.=STR           |
000038d0  20 20 20 20 20 20 72 32  2c 5b 72 39 2c 23 38 5d  |      r2,[r9,#8]|
000038e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000038f0  20 20 3b 20 73 74 6f 72  65 20 7a 0d 15 d6 04 0d  |  ; store z.....|
00003900  15 e0 42 4d 55 4c 20 20  20 20 20 20 20 20 20 20  |..BMUL          |
00003910  20 20 20 20 20 20 20 72  32 2c 72 30 2c 72 36 20  |       r2,r0,r6 |
00003920  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003930  20 20 20 3b 20 72 32 20  3d 20 28 78 20 2a 20 63  |   ; r2 = (x * c|
00003940  29 0d 15 ea 42 4d 55 4c  20 20 20 20 20 20 20 20  |)...BMUL        |
00003950  20 20 20 20 20 20 20 20  20 72 33 2c 72 31 2c 72  |         r3,r1,r|
00003960  37 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |7               |
00003970  20 20 20 20 20 3b 20 72  33 20 3d 20 28 79 20 2a  |     ; r3 = (y *|
00003980  20 73 29 0d 15 f4 5d 53  55 42 20 20 20 20 20 20  | s)...]SUB      |
00003990  20 20 20 20 20 20 20 20  20 20 20 72 34 2c 72 32  |           r4,r2|
000039a0  2c 72 33 20 20 20 20 20  20 20 20 20 20 20 20 20  |,r3             |
000039b0  20 20 20 20 20 20 20 3b  20 72 34 20 3d 20 28 78  |       ; r4 = (x|
000039c0  20 2a 20 63 29 20 2d 20  28 79 20 2a 20 73 29 20  | * c) - (y * s) |
000039d0  20 28 20 72 34 20 69 73  20 6e 65 77 20 78 20 29  | ( r4 is new x )|
000039e0  0d 15 fe 42 4d 4f 56 20  20 20 20 20 20 20 20 20  |...BMOV         |
000039f0  20 20 20 20 20 20 20 20  72 34 2c 72 34 2c 41 53  |        r4,r4,AS|
00003a00  52 23 38 20 20 20 20 20  20 20 20 20 20 20 20 20  |R#8             |
00003a10  20 20 20 20 3b 20 73 63  61 6c 65 20 64 6f 77 6e  |    ; scale down|
00003a20  20 78 0d 16 08 04 0d 16  12 53 53 54 52 20 20 20  | x.......SSTR   |
00003a30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 72 34  |              r4|
00003a40  2c 5b 72 39 5d 2c 23 34  20 20 20 20 20 20 20 20  |,[r9],#4        |
00003a50  20 20 20 20 20 20 20 20  20 20 3b 20 73 74 6f 72  |          ; stor|
00003a60  65 20 78 20 61 6e 64 20  69 6e 63 20 74 6f 20 79  |e x and inc to y|
00003a70  20 70 6f 73 69 74 69 6f  6e 0d 16 1c 04 0d 16 26  | position......&|
00003a80  44 4d 55 4c 20 20 20 20  20 20 20 20 20 20 20 20  |DMUL            |
00003a90  20 20 20 20 20 72 32 2c  72 31 2c 72 36 20 20 20  |     r2,r1,r6   |
00003aa0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003ab0  20 3b 20 72 32 20 3d 20  28 20 79 20 2a 20 63 20  | ; r2 = ( y * c |
00003ac0  29 0d 16 30 44 4d 55 4c  20 20 20 20 20 20 20 20  |)..0DMUL        |
00003ad0  20 20 20 20 20 20 20 20  20 72 33 2c 72 30 2c 72  |         r3,r0,r|
00003ae0  37 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |7               |
00003af0  20 20 20 20 20 3b 20 72  33 20 3d 20 28 20 78 20  |     ; r3 = ( x |
00003b00  2a 20 73 20 29 0d 16 3a  61 41 44 44 20 20 20 20  |* s )..:aADD    |
00003b10  20 20 20 20 20 20 20 20  20 20 20 20 20 72 34 2c  |             r4,|
00003b20  72 32 2c 72 33 20 20 20  20 20 20 20 20 20 20 20  |r2,r3           |
00003b30  20 20 20 20 20 20 20 20  20 3b 20 72 34 20 3d 20  |         ; r4 = |
00003b40  28 20 79 20 2a 20 63 20  29 20 2b 20 28 20 78 20  |( y * c ) + ( x |
00003b50  2a 20 73 20 29 20 20 28  20 72 34 20 69 73 20 6e  |* s )  ( r4 is n|
00003b60  65 77 20 79 20 29 0d 16  44 42 4d 4f 56 20 20 20  |ew y )..DBMOV   |
00003b70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 72 34  |              r4|
00003b80  2c 72 34 2c 41 53 52 23  38 20 20 20 20 20 20 20  |,r4,ASR#8       |
00003b90  20 20 20 20 20 20 20 20  20 20 3b 20 73 63 61 6c  |          ; scal|
00003ba0  65 20 64 6f 77 6e 20 79  0d 16 4e 04 0d 16 58 22  |e down y..N...X"|
00003bb0  53 54 52 20 20 20 20 20  20 20 20 20 20 20 20 20  |STR             |
00003bc0  20 20 20 20 72 34 2c 5b  72 39 5d 2c 23 38 0d 16  |    r4,[r9],#8..|
00003bd0  62 04 0d 16 6c 22 53 55  42 53 20 20 20 20 20 20  |b...l"SUBS      |
00003be0  20 20 20 20 20 20 20 20  20 20 72 31 30 2c 72 31  |          r10,r1|
00003bf0  30 2c 23 31 0d 16 76 34  42 47 54 20 20 20 20 20  |0,#1..v4BGT     |
00003c00  20 20 20 20 20 20 20 20  20 20 20 20 72 6f 74 61  |            rota|
00003c10  74 65 5f 63 72 61 66 74  5f 6f 72 69 67 69 6e 61  |te_craft_origina|
00003c20  6c 5f 64 61 74 61 5f 7a  0d 16 80 04 0d 16 8a 04  |l_data_z........|
00003c30  0d 16 94 04 0d 16 9e 04  0d 16 a8 3a 3b 20 72 6f  |...........:; ro|
00003c40  74 61 74 65 20 74 72 61  6e 73 20 64 61 74 61 20  |tate trans data |
00003c50  61 72 6f 75 6e 64 20 79  20 61 6e 64 20 73 74 6f  |around y and sto|
00003c60  72 65 20 69 6e 74 6f 20  74 72 61 6e 73 20 64 61  |re into trans da|
00003c70  74 61 0d 16 b2 04 0d 16  bc 53 4c 44 52 20 20 20  |ta.......SLDR   |
00003c80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 72 31  |              r1|
00003c90  30 2c 5b 72 31 32 2c 23  35 32 5d 20 20 20 20 20  |0,[r12,#52]     |
00003ca0  20 20 20 20 20 20 20 20  20 20 3b 20 72 31 30 20  |          ; r10 |
00003cb0  69 73 20 6e 6f 2e 20 6f  66 20 70 6f 69 6e 74 73  |is no. of points|
00003cc0  20 69 6e 20 63 72 61 66  74 0d 16 c6 4e 4c 44 52  | in craft...NLDR|
00003cd0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003ce0  20 72 39 2c 5b 72 31 32  2c 23 36 34 5d 20 20 20  | r9,[r12,#64]   |
00003cf0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
00003d00  39 20 69 73 20 62 61 73  65 20 6f 66 20 74 72 61  |9 is base of tra|
00003d10  6e 73 20 64 61 74 61 0d  16 d0 04 0d 16 da 2d 4c  |ns data.......-L|
00003d20  44 52 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |DR              |
00003d30  20 20 20 72 30 2c 63 6f  73 69 6e 65 5f 74 61 62  |   r0,cosine_tab|
00003d40  6c 65 5f 62 61 73 65 25  0d 16 e4 2b 4c 44 52 20  |le_base%...+LDR |
00003d50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003d60  72 31 2c 73 69 6e 65 5f  74 61 62 6c 65 5f 62 61  |r1,sine_table_ba|
00003d70  73 65 25 0d 16 ee 04 0d  16 f8 3b 4c 44 52 20 20  |se%.......;LDR  |
00003d80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 72  |               r|
00003d90  35 2c 5b 72 31 32 2c 23  33 36 5d 20 20 20 20 20  |5,[r12,#36]     |
00003da0  20 20 20 20 20 20 20 20  20 20 20 3b 20 79 20 72  |           ; y r|
00003db0  6f 74 0d 17 02 04 0d 17  0c 49 4c 44 52 20 20 20  |ot.......ILDR   |
00003dc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 72 36  |              r6|
00003dd0  2c 5b 72 30 2c 72 35 2c  41 53 4c 23 32 5d 20 20  |,[r0,r5,ASL#2]  |
00003de0  20 20 20 20 20 20 20 20  20 20 3b 20 72 36 20 69  |          ; r6 i|
00003df0  73 20 63 20 20 20 28 20  2a 20 32 35 36 20 29 0d  |s c   ( * 256 ).|
00003e00  17 16 49 4c 44 52 20 20  20 20 20 20 20 20 20 20  |..ILDR          |
00003e10  20 20 20 20 20 20 20 72  37 2c 5b 72 31 2c 72 35  |       r7,[r1,r5|
00003e20  2c 41 53 4c 23 32 5d 20  20 20 20 20 20 20 20 20  |,ASL#2]         |
00003e30  20 20 20 3b 20 72 37 20  69 73 20 73 20 20 20 28  |   ; r7 is s   (|
00003e40  20 2a 20 32 35 36 20 29  0d 17 20 04 0d 17 2a 1f  | * 256 ).. ...*.|
00003e50  3b 20 58 20 3d 20 28 20  78 20 2a 20 63 20 29 20  |; X = ( x * c ) |
00003e60  2d 20 28 20 7a 20 2a 20  73 20 29 0d 17 34 1f 3b  |- ( z * s )..4.;|
00003e70  20 5a 20 3d 20 28 20 7a  20 2a 20 63 20 29 20 2b  | Z = ( z * c ) +|
00003e80  20 28 20 78 20 2a 20 73  20 29 0d 17 3e 1e 2e 72  | ( x * s )..>..r|
00003e90  6f 74 61 74 65 5f 63 72  61 66 74 5f 74 72 61 6e  |otate_craft_tran|
00003ea0  73 5f 64 61 74 61 5f 79  0d 17 48 37 4c 44 52 20  |s_data_y..H7LDR |
00003eb0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003ec0  72 30 2c 5b 72 39 5d 20  20 20 20 20 20 20 20 20  |r0,[r9]         |
00003ed0  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 78 0d  |            ; x.|
00003ee0  17 52 37 4c 44 52 20 20  20 20 20 20 20 20 20 20  |.R7LDR          |
00003ef0  20 20 20 20 20 20 20 72  31 2c 5b 72 39 2c 23 38  |       r1,[r9,#8|
00003f00  5d 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |]               |
00003f10  20 20 20 3b 20 7a 0d 17  5c 04 0d 17 66 44 4d 55  |   ; z..\...fDMU|
00003f20  4c 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |L               |
00003f30  20 20 72 32 2c 72 30 2c  72 36 20 20 20 20 20 20  |  r2,r0,r6      |
00003f40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00003f50  72 32 20 3d 20 28 20 78  20 2a 20 63 20 29 0d 17  |r2 = ( x * c )..|
00003f60  70 44 4d 55 4c 20 20 20  20 20 20 20 20 20 20 20  |pDMUL           |
00003f70  20 20 20 20 20 20 72 33  2c 72 31 2c 72 37 20 20  |      r3,r1,r7  |
00003f80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003f90  20 20 3b 20 72 33 20 3d  20 28 20 7a 20 2a 20 73  |  ; r3 = ( z * s|
00003fa0  20 29 0d 17 7a 5b 53 55  42 20 20 20 20 20 20 20  | )..z[SUB       |
00003fb0  20 20 20 20 20 20 20 20  20 20 72 34 2c 72 32 2c  |          r4,r2,|
00003fc0  72 33 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r3              |
00003fd0  20 20 20 20 20 20 3b 20  72 34 20 3d 20 28 20 78  |      ; r4 = ( x|
00003fe0  20 2a 20 63 20 29 20 2d  20 28 20 7a 20 2a 20 73  | * c ) - ( z * s|
00003ff0  20 29 20 20 20 20 28 20  20 78 20 20 29 0d 17 84  | )    (  x  )...|
00004000  49 4d 4f 56 20 20 20 20  20 20 20 20 20 20 20 20  |IMOV            |
00004010  20 20 20 20 20 72 34 2c  72 34 2c 41 53 52 23 38  |     r4,r4,ASR#8|
00004020  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004030  20 3b 20 73 63 61 6c 65  20 64 6f 77 6e 20 78 20  | ; scale down x |
00004040  62 79 20 32 35 36 0d 17  8e 04 0d 17 98 22 53 54  |by 256......."ST|
00004050  52 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |R               |
00004060  20 20 72 34 2c 5b 72 39  5d 2c 23 38 0d 17 a2 04  |  r4,[r9],#8....|
00004070  0d 17 ac 44 4d 55 4c 20  20 20 20 20 20 20 20 20  |...DMUL         |
00004080  20 20 20 20 20 20 20 20  72 32 2c 72 31 2c 72 36  |        r2,r1,r6|
00004090  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000040a0  20 20 20 20 3b 20 72 32  20 3d 20 28 20 7a 20 2a  |    ; r2 = ( z *|
000040b0  20 63 20 29 0d 17 b6 44  4d 55 4c 20 20 20 20 20  | c )...DMUL     |
000040c0  20 20 20 20 20 20 20 20  20 20 20 20 72 33 2c 72  |            r3,r|
000040d0  30 2c 72 37 20 20 20 20  20 20 20 20 20 20 20 20  |0,r7            |
000040e0  20 20 20 20 20 20 20 20  3b 20 72 33 20 3d 20 28  |        ; r3 = (|
000040f0  20 78 20 2a 20 73 20 29  0d 17 c0 5a 41 44 44 20  | x * s )...ZADD |
00004100  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004110  72 34 2c 72 32 2c 72 33  20 20 20 20 20 20 20 20  |r4,r2,r3        |
00004120  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 72 34  |            ; r4|
00004130  20 3d 20 28 20 7a 20 2a  20 63 20 29 20 2b 20 28  | = ( z * c ) + (|
00004140  20 78 20 2a 20 73 20 29  20 20 20 28 20 20 7a 20  | x * s )   (  z |
00004150  20 29 0d 17 ca 49 4d 4f  56 20 20 20 20 20 20 20  | )...IMOV       |
00004160  20 20 20 20 20 20 20 20  20 20 72 34 2c 72 34 2c  |          r4,r4,|
00004170  41 53 52 23 38 20 20 20  20 20 20 20 20 20 20 20  |ASR#8           |
00004180  20 20 20 20 20 20 3b 20  73 63 61 6c 65 20 64 6f  |      ; scale do|
00004190  77 6e 20 7a 20 62 79 20  32 35 36 0d 17 d4 04 0d  |wn z by 256.....|
000041a0  17 de 22 53 54 52 20 20  20 20 20 20 20 20 20 20  |.."STR          |
000041b0  20 20 20 20 20 20 20 72  34 2c 5b 72 39 5d 2c 23  |       r4,[r9],#|
000041c0  34 0d 17 e8 04 0d 17 f2  22 53 55 42 53 20 20 20  |4......."SUBS   |
000041d0  20 20 20 20 20 20 20 20  20 20 20 20 20 72 31 30  |             r10|
000041e0  2c 72 31 30 2c 23 31 0d  17 fc 31 42 47 54 20 20  |,r10,#1...1BGT  |
000041f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 72  |               r|
00004200  6f 74 61 74 65 5f 63 72  61 66 74 5f 74 72 61 6e  |otate_craft_tran|
00004210  73 5f 64 61 74 61 5f 79  0d 18 06 04 0d 18 10 04  |s_data_y........|
00004220  0d 18 1a 04 0d 18 24 04  0d 18 2e 04 0d 18 38 34  |......$.......84|
00004230  3b 20 70 72 6f 6a 65 63  74 20 74 72 61 6e 73 20  |; project trans |
00004240  64 61 74 61 20 61 6e 64  20 73 74 6f 72 65 20 69  |data and store i|
00004250  6e 20 66 69 6e 61 6c 20  78 2c 79 20 64 61 74 61  |n final x,y data|
00004260  0d 18 42 04 0d 18 4c 53  4c 44 52 20 20 20 20 20  |..B...LSLDR     |
00004270  20 20 20 20 20 20 20 20  20 20 20 20 72 31 30 2c  |            r10,|
00004280  5b 72 31 32 2c 23 35 32  5d 20 20 20 20 20 20 20  |[r12,#52]       |
00004290  20 20 20 20 20 20 20 20  3b 20 72 31 30 20 69 73  |        ; r10 is|
000042a0  20 6e 6f 2e 20 6f 66 20  70 6f 69 6e 74 73 20 69  | no. of points i|
000042b0  6e 20 63 72 61 66 74 0d  18 56 04 0d 18 60 4f 4c  |n craft..V...`OL|
000042c0  44 52 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |DR              |
000042d0  20 20 20 72 38 2c 5b 72  31 32 2c 23 36 34 5d 20  |   r8,[r12,#64] |
000042e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000042f0  3b 20 72 38 20 69 73 20  62 61 73 65 20 6f 66 20  |; r8 is base of |
00004300  74 72 61 6e 73 20 64 61  74 61 0d 18 6a 4d 4c 44  |trans data..jMLD|
00004310  52 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |R               |
00004320  20 20 72 39 2c 5b 72 31  32 2c 23 36 38 5d 20 20  |  r9,[r12,#68]  |
00004330  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00004340  20 72 39 20 69 73 20 62  61 73 65 20 6f 66 20 78  | r9 is base of x|
00004350  2c 79 20 64 61 74 61 0d  18 74 04 0d 18 7e 44 4c  |,y data..t...~DL|
00004360  44 52 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |DR              |
00004370  20 20 20 72 33 2c 5b 72  31 32 2c 23 30 5d 20 20  |   r3,[r12,#0]  |
00004380  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00004390  20 78 20 70 6f 73 20 6f  66 20 63 72 61 66 74 0d  | x pos of craft.|
000043a0  18 88 44 4c 44 52 20 20  20 20 20 20 20 20 20 20  |..DLDR          |
000043b0  20 20 20 20 20 20 20 72  34 2c 5b 72 31 32 2c 23  |       r4,[r12,#|
000043c0  34 5d 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |4]              |
000043d0  20 20 20 3b 20 79 20 70  6f 73 20 6f 66 20 63 72  |   ; y pos of cr|
000043e0  61 66 74 0d 18 92 44 4c  44 52 20 20 20 20 20 20  |aft...DLDR      |
000043f0  20 20 20 20 20 20 20 20  20 20 20 72 35 2c 5b 72  |           r5,[r|
00004400  31 32 2c 23 38 5d 20 20  20 20 20 20 20 20 20 20  |12,#8]          |
00004410  20 20 20 20 20 20 20 3b  20 7a 20 70 6f 73 20 6f  |       ; z pos o|
00004420  66 20 63 72 61 66 74 0d  18 9c 04 0d 18 a6 1d 2e  |f craft.........|
00004430  70 72 6f 6a 65 63 74 5f  63 72 61 66 74 5f 74 72  |project_craft_tr|
00004440  61 6e 73 5f 64 61 74 61  0d 18 b0 37 4c 44 52 20  |ans_data...7LDR |
00004450  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004460  72 30 2c 5b 72 38 5d 2c  23 34 20 20 20 20 20 20  |r0,[r8],#4      |
00004470  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 78 0d  |            ; x.|
00004480  18 ba 37 4c 44 52 20 20  20 20 20 20 20 20 20 20  |..7LDR          |
00004490  20 20 20 20 20 20 20 72  31 2c 5b 72 38 5d 2c 23  |       r1,[r8],#|
000044a0  34 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |4               |
000044b0  20 20 20 3b 20 79 0d 18  c4 37 4c 44 52 20 20 20  |   ; y...7LDR   |
000044c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 72 32  |              r2|
000044d0  2c 5b 72 38 5d 2c 23 34  20 20 20 20 20 20 20 20  |,[r8],#4        |
000044e0  20 20 20 20 20 20 20 20  20 20 3b 20 7a 0d 18 ce  |          ; z...|
000044f0  04 0d 18 d8 3e 41 44 44  20 20 20 20 20 20 20 20  |....>ADD        |
00004500  20 20 20 20 20 20 20 20  20 72 30 2c 72 30 2c 72  |         r0,r0,r|
00004510  33 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |3               |
00004520  20 20 20 20 20 3b 20 6f  66 66 73 65 74 20 78 0d  |     ; offset x.|
00004530  18 e2 3e 41 44 44 20 20  20 20 20 20 20 20 20 20  |..>ADD          |
00004540  20 20 20 20 20 20 20 72  31 2c 72 31 2c 72 34 20  |       r1,r1,r4 |
00004550  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004560  20 20 20 3b 20 6f 66 66  73 65 74 20 79 0d 18 ec  |   ; offset y...|
00004570  3e 41 44 44 20 20 20 20  20 20 20 20 20 20 20 20  |>ADD            |
00004580  20 20 20 20 20 72 32 2c  72 32 2c 72 35 20 20 20  |     r2,r2,r5   |
00004590  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000045a0  20 3b 20 6f 66 66 73 65  74 20 7a 0d 18 f6 04 0d  | ; offset z.....|
000045b0  19 00 4d 4d 4f 56 20 20  20 20 20 20 20 20 20 20  |..MMOV          |
000045c0  20 20 20 20 20 20 20 72  30 2c 72 30 2c 41 53 4c  |       r0,r0,ASL|
000045d0  23 38 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |#8              |
000045e0  20 20 20 3b 20 73 63 61  6c 65 20 75 70 20 78 20  |   ; scale up x |
000045f0  61 6e 64 20 79 20 62 79  20 32 35 36 0d 19 0a 23  |and y by 256...#|
00004600  4d 4f 56 20 20 20 20 20  20 20 20 20 20 20 20 20  |MOV             |
00004610  20 20 20 20 72 31 2c 72  31 2c 41 53 4c 23 38 0d  |    r1,r1,ASL#8.|
00004620  19 14 04 0d 19 1e 3a a4  73 77 6d 5f 72 64 69 76  |......:.swm_rdiv|
00004630  5f 61 63 74 28 30 2c 32  2c 36 29 20 20 20 20 20  |_act(0,2,6)     |
00004640  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004650  20 20 20 20 20 20 3b 20  78 20 2f 20 7a 0d 19 28  |      ; x / z..(|
00004660  3a a4 73 77 6d 5f 72 64  69 76 5f 61 63 74 28 31  |:.swm_rdiv_act(1|
00004670  2c 32 2c 37 29 20 20 20  20 20 20 20 20 20 20 20  |,2,7)           |
00004680  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004690  3b 20 79 20 2f 20 7a 0d  19 32 04 0d 19 3c 22 41  |; y / z..2...<"A|
000046a0  44 44 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |DD              |
000046b0  20 20 20 72 36 2c 72 36  2c 23 31 36 30 0d 19 46  |   r6,r6,#160..F|
000046c0  22 41 44 44 20 20 20 20  20 20 20 20 20 20 20 20  |"ADD            |
000046d0  20 20 20 20 20 72 37 2c  72 37 2c 23 31 32 38 0d  |     r7,r7,#128.|
000046e0  19 50 04 0d 19 5a 22 53  54 52 20 20 20 20 20 20  |.P...Z"STR      |
000046f0  20 20 20 20 20 20 20 20  20 20 20 72 36 2c 5b 72  |           r6,[r|
00004700  39 5d 2c 23 34 0d 19 64  22 53 54 52 20 20 20 20  |9],#4..d"STR    |
00004710  20 20 20 20 20 20 20 20  20 20 20 20 20 72 37 2c  |             r7,|
00004720  5b 72 39 5d 2c 23 34 0d  19 6e 04 0d 19 78 22 53  |[r9],#4..n...x"S|
00004730  55 42 53 20 20 20 20 20  20 20 20 20 20 20 20 20  |UBS             |
00004740  20 20 20 72 31 30 2c 72  31 30 2c 23 31 0d 19 82  |   r10,r10,#1...|
00004750  30 42 47 54 20 20 20 20  20 20 20 20 20 20 20 20  |0BGT            |
00004760  20 20 20 20 20 70 72 6f  6a 65 63 74 5f 63 72 61  |     project_cra|
00004770  66 74 5f 74 72 61 6e 73  5f 64 61 74 61 0d 19 8c  |ft_trans_data...|
00004780  04 0d 19 96 04 0d 19 a0  17 3b 20 70 6c 6f 74 20  |.........; plot |
00004790  63 72 61 66 74 20 66 61  63 65 74 73 0d 19 aa 04  |craft facets....|
000047a0  0d 19 b4 53 4c 44 52 20  20 20 20 20 20 20 20 20  |...SLDR         |
000047b0  20 20 20 20 20 20 20 20  72 31 30 2c 5b 72 31 32  |        r10,[r12|
000047c0  2c 23 35 36 5d 20 20 20  20 20 20 20 20 20 20 20  |,#56]           |
000047d0  20 20 20 20 3b 20 72 31  30 20 69 73 20 6e 6f 2e  |    ; r10 is no.|
000047e0  20 6f 66 20 66 61 63 65  74 73 20 69 6e 20 63 72  | of facets in cr|
000047f0  61 66 74 0d 19 be 52 4c  44 52 20 20 20 20 20 20  |aft...RLDR      |
00004800  20 20 20 20 20 20 20 20  20 20 20 72 39 2c 5b 72  |           r9,[r|
00004810  31 32 2c 23 37 32 5d 20  20 20 20 20 20 20 20 20  |12,#72]         |
00004820  20 20 20 20 20 20 20 3b  20 72 39 20 69 73 20 62  |       ; r9 is b|
00004830  61 73 65 20 6f 66 20 72  65 6e 64 65 72 69 6e 67  |ase of rendering|
00004840  20 64 61 74 61 0d 19 c8  4c 4c 44 52 20 20 20 20  | data...LLDR    |
00004850  20 20 20 20 20 20 20 20  20 20 20 20 20 72 38 2c  |             r8,|
00004860  5b 72 31 32 2c 23 36 38  5d 20 20 20 20 20 20 20  |[r12,#68]       |
00004870  20 20 20 20 20 20 20 20  20 3b 20 72 38 20 69 73  |         ; r8 is|
00004880  20 62 61 73 65 20 6f 66  20 78 2c 79 20 64 61 74  | base of x,y dat|
00004890  61 0d 19 d2 04 0d 19 dc  04 0d 19 e6 16 2e 70 6c  |a.............pl|
000048a0  6f 74 5f 63 72 61 66 74  5f 66 61 63 65 74 73 0d  |ot_craft_facets.|
000048b0  19 f0 2f 4c 44 52 20 20  20 20 20 20 20 20 20 20  |../LDR          |
000048c0  20 20 20 20 20 20 20 72  37 2c 71 75 61 64 5f 77  |       r7,quad_w|
000048d0  6f 72 6b 73 70 61 63 65  5f 62 61 73 65 25 0d 19  |orkspace_base%..|
000048e0  fa 40 4c 44 52 20 20 20  20 20 20 20 20 20 20 20  |.@LDR           |
000048f0  20 20 20 20 20 20 72 30  2c 5b 72 39 5d 2c 23 34  |      r0,[r9],#4|
00004900  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004910  20 20 3b 20 72 30 20 69  73 20 74 79 70 65 0d 1a  |  ; r0 is type..|
00004920  04 04 0d 1a 0e 38 4c 44  52 20 20 20 20 20 20 20  |.....8LDR       |
00004930  20 20 20 20 20 20 20 20  20 20 72 35 2c 5b 72 39  |          r5,[r9|
00004940  5d 2c 23 34 20 20 20 20  20 20 20 20 20 20 20 20  |],#4            |
00004950  20 20 20 20 20 20 3b 20  70 30 0d 1a 18 4f 41 44  |      ; p0...OAD|
00004960  44 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |D               |
00004970  20 20 72 36 2c 72 38 2c  72 35 2c 41 53 4c 23 33  |  r6,r8,r5,ASL#3|
00004980  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00004990  72 36 20 69 73 20 61 64  72 20 6f 66 20 78 2c 79  |r6 is adr of x,y|
000049a0  20 70 6f 69 6e 74 20 72  35 0d 1a 22 37 4c 44 52  | point r5.."7LDR|
000049b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000049c0  20 72 31 2c 5b 72 36 5d  20 20 20 20 20 20 20 20  | r1,[r6]        |
000049d0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 78  |             ; x|
000049e0  0d 1a 2c 37 4c 44 52 20  20 20 20 20 20 20 20 20  |..,7LDR         |
000049f0  20 20 20 20 20 20 20 20  72 32 2c 5b 72 36 2c 23  |        r2,[r6,#|
00004a00  34 5d 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |4]              |
00004a10  20 20 20 20 3b 20 79 0d  1a 36 3d 53 54 52 20 20  |    ; y..6=STR  |
00004a20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 72  |               r|
00004a30  31 2c 5b 72 37 5d 2c 23  34 20 20 20 20 20 20 20  |1,[r7],#4       |
00004a40  20 20 20 20 20 20 20 20  20 20 20 3b 20 73 74 6f  |           ; sto|
00004a50  72 65 20 78 0d 1a 40 3d  53 54 52 20 20 20 20 20  |re x..@=STR     |
00004a60  20 20 20 20 20 20 20 20  20 20 20 20 72 32 2c 5b  |            r2,[|
00004a70  72 37 5d 2c 23 34 20 20  20 20 20 20 20 20 20 20  |r7],#4          |
00004a80  20 20 20 20 20 20 20 20  3b 20 73 74 6f 72 65 20  |        ; store |
00004a90  79 0d 1a 4a 4d 53 54 4d  46 41 20 20 20 20 20 20  |y..JMSTMFA      |
00004aa0  20 20 20 20 20 20 20 20  20 28 73 70 29 21 2c 7b  |         (sp)!,{|
00004ab0  72 31 2c 72 32 7d 20 20  20 20 20 20 20 20 20 20  |r1,r2}          |
00004ac0  20 20 20 20 20 3b 20 73  74 6f 72 65 20 78 31 2c  |     ; store x1,|
00004ad0  79 31 20 63 6f 6f 72 64  20 70 61 69 72 73 0d 1a  |y1 coord pairs..|
00004ae0  54 04 0d 1a 5e 38 4c 44  52 20 20 20 20 20 20 20  |T...^8LDR       |
00004af0  20 20 20 20 20 20 20 20  20 20 72 35 2c 5b 72 39  |          r5,[r9|
00004b00  5d 2c 23 34 20 20 20 20  20 20 20 20 20 20 20 20  |],#4            |
00004b10  20 20 20 20 20 20 3b 20  70 31 0d 1a 68 4f 41 44  |      ; p1..hOAD|
00004b20  44 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |D               |
00004b30  20 20 72 36 2c 72 38 2c  72 35 2c 41 53 4c 23 33  |  r6,r8,r5,ASL#3|
00004b40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00004b50  72 36 20 69 73 20 61 64  72 20 6f 66 20 78 2c 79  |r6 is adr of x,y|
00004b60  20 70 6f 69 6e 74 20 72  35 0d 1a 72 37 4c 44 52  | point r5..r7LDR|
00004b70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004b80  20 72 31 2c 5b 72 36 5d  20 20 20 20 20 20 20 20  | r1,[r6]        |
00004b90  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 78  |             ; x|
00004ba0  0d 1a 7c 37 4c 44 52 20  20 20 20 20 20 20 20 20  |..|7LDR         |
00004bb0  20 20 20 20 20 20 20 20  72 32 2c 5b 72 36 2c 23  |        r2,[r6,#|
00004bc0  34 5d 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |4]              |
00004bd0  20 20 20 20 3b 20 79 0d  1a 86 3d 53 54 52 20 20  |    ; y...=STR  |
00004be0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 72  |               r|
00004bf0  31 2c 5b 72 37 5d 2c 23  34 20 20 20 20 20 20 20  |1,[r7],#4       |
00004c00  20 20 20 20 20 20 20 20  20 20 20 3b 20 73 74 6f  |           ; sto|
00004c10  72 65 20 78 0d 1a 90 3d  53 54 52 20 20 20 20 20  |re x...=STR     |
00004c20  20 20 20 20 20 20 20 20  20 20 20 20 72 32 2c 5b  |            r2,[|
00004c30  72 37 5d 2c 23 34 20 20  20 20 20 20 20 20 20 20  |r7],#4          |
00004c40  20 20 20 20 20 20 20 20  3b 20 73 74 6f 72 65 20  |        ; store |
00004c50  79 0d 1a 9a 4d 53 54 4d  46 41 20 20 20 20 20 20  |y...MSTMFA      |
00004c60  20 20 20 20 20 20 20 20  20 28 73 70 29 21 2c 7b  |         (sp)!,{|
00004c70  72 31 2c 72 32 7d 20 20  20 20 20 20 20 20 20 20  |r1,r2}          |
00004c80  20 20 20 20 20 3b 20 73  74 6f 72 65 20 78 32 2c  |     ; store x2,|
00004c90  79 32 20 63 6f 6f 72 64  20 70 61 69 72 73 0d 1a  |y2 coord pairs..|
00004ca0  a4 04 0d 1a ae 04 0d 1a  b8 38 4c 44 52 20 20 20  |.........8LDR   |
00004cb0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 72 35  |              r5|
00004cc0  2c 5b 72 39 5d 2c 23 34  20 20 20 20 20 20 20 20  |,[r9],#4        |
00004cd0  20 20 20 20 20 20 20 20  20 20 3b 20 70 32 0d 1a  |          ; p2..|
00004ce0  c2 4f 41 44 44 20 20 20  20 20 20 20 20 20 20 20  |.OADD           |
00004cf0  20 20 20 20 20 20 72 36  2c 72 38 2c 72 35 2c 41  |      r6,r8,r5,A|
00004d00  53 4c 23 33 20 20 20 20  20 20 20 20 20 20 20 20  |SL#3            |
00004d10  20 20 3b 20 72 36 20 69  73 20 61 64 72 20 6f 66  |  ; r6 is adr of|
00004d20  20 78 2c 79 20 70 6f 69  6e 74 20 72 35 0d 1a cc  | x,y point r5...|
00004d30  37 4c 44 52 20 20 20 20  20 20 20 20 20 20 20 20  |7LDR            |
00004d40  20 20 20 20 20 72 31 2c  5b 72 36 5d 20 20 20 20  |     r1,[r6]    |
00004d50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004d60  20 3b 20 78 0d 1a d6 37  4c 44 52 20 20 20 20 20  | ; x...7LDR     |
00004d70  20 20 20 20 20 20 20 20  20 20 20 20 72 32 2c 5b  |            r2,[|
00004d80  72 36 2c 23 34 5d 20 20  20 20 20 20 20 20 20 20  |r6,#4]          |
00004d90  20 20 20 20 20 20 20 20  3b 20 79 0d 1a e0 3d 53  |        ; y...=S|
00004da0  54 52 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |TR              |
00004db0  20 20 20 72 31 2c 5b 72  37 5d 2c 23 34 20 20 20  |   r1,[r7],#4   |
00004dc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00004dd0  20 73 74 6f 72 65 20 78  0d 1a ea 3d 53 54 52 20  | store x...=STR |
00004de0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004df0  72 32 2c 5b 72 37 5d 2c  23 34 20 20 20 20 20 20  |r2,[r7],#4      |
00004e00  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 73 74  |            ; st|
00004e10  6f 72 65 20 79 0d 1a f4  4d 53 54 4d 46 41 20 20  |ore y...MSTMFA  |
00004e20  20 20 20 20 20 20 20 20  20 20 20 20 20 28 73 70  |             (sp|
00004e30  29 21 2c 7b 72 31 2c 72  32 7d 20 20 20 20 20 20  |)!,{r1,r2}      |
00004e40  20 20 20 20 20 20 20 20  20 3b 20 73 74 6f 72 65  |         ; store|
00004e50  20 78 33 2c 79 33 20 63  6f 6f 72 64 20 70 61 69  | x3,y3 coord pai|
00004e60  72 73 0d 1a fe 04 0d 1b  08 04 0d 1b 12 38 4c 44  |rs...........8LD|
00004e70  52 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |R               |
00004e80  20 20 72 35 2c 5b 72 39  5d 2c 23 34 20 20 20 20  |  r5,[r9],#4    |
00004e90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00004ea0  70 33 0d 1b 1c 4f 41 44  44 20 20 20 20 20 20 20  |p3...OADD       |
00004eb0  20 20 20 20 20 20 20 20  20 20 72 36 2c 72 38 2c  |          r6,r8,|
00004ec0  72 35 2c 41 53 4c 23 33  20 20 20 20 20 20 20 20  |r5,ASL#3        |
00004ed0  20 20 20 20 20 20 3b 20  72 36 20 69 73 20 61 64  |      ; r6 is ad|
00004ee0  72 20 6f 66 20 78 2c 79  20 70 6f 69 6e 74 20 72  |r of x,y point r|
00004ef0  35 0d 1b 26 37 4c 44 52  20 20 20 20 20 20 20 20  |5..&7LDR        |
00004f00  20 20 20 20 20 20 20 20  20 72 31 2c 5b 72 36 5d  |         r1,[r6]|
00004f10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004f20  20 20 20 20 20 3b 20 78  0d 1b 30 37 4c 44 52 20  |     ; x..07LDR |
00004f30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004f40  72 32 2c 5b 72 36 2c 23  34 5d 20 20 20 20 20 20  |r2,[r6,#4]      |
00004f50  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 79 0d  |            ; y.|
00004f60  1b 3a 3d 53 54 52 20 20  20 20 20 20 20 20 20 20  |.:=STR          |
00004f70  20 20 20 20 20 20 20 72  31 2c 5b 72 37 5d 2c 23  |       r1,[r7],#|
00004f80  34 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |4               |
00004f90  20 20 20 3b 20 73 74 6f  72 65 20 78 0d 1b 44 3d  |   ; store x..D=|
00004fa0  53 54 52 20 20 20 20 20  20 20 20 20 20 20 20 20  |STR             |
00004fb0  20 20 20 20 72 32 2c 5b  72 37 5d 2c 23 34 20 20  |    r2,[r7],#4  |
00004fc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004fd0  3b 20 73 74 6f 72 65 20  79 0d 1b 4e 04 0d 1b 58  |; store y..N...X|
00004fe0  4b 4c 44 52 20 20 20 20  20 20 20 20 20 20 20 20  |KLDR            |
00004ff0  20 20 20 20 20 72 33 2c  5b 72 39 5d 2c 23 34 20  |     r3,[r9],#4 |
00005000  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005010  20 3b 20 69 6e 74 65 6e  73 69 74 79 20 69 6e 66  | ; intensity inf|
00005020  6f 72 6d 61 74 69 6f 6e  0d 1b 62 1f 53 54 52 20  |ormation..b.STR |
00005030  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005040  72 33 2c 5b 72 37 5d 0d  1b 6c 04 0d 1b 76 31 4c  |r3,[r7]..l...v1L|
00005050  44 4d 46 41 20 20 20 20  20 20 20 20 20 20 20 20  |DMFA            |
00005060  20 20 20 28 73 70 29 21  2c 7b 72 36 2c 72 35 2c  |   (sp)!,{r6,r5,|
00005070  72 34 2c 72 33 2c 72 32  2c 72 31 7d 0d 1b 80 14  |r4,r3,r2,r1}....|
00005080  3b 20 72 31 2c 72 32 20  69 73 20 78 31 2c 79 31  |; r1,r2 is x1,y1|
00005090  0d 1b 8a 14 3b 20 72 33  2c 72 34 20 69 73 20 78  |....; r3,r4 is x|
000050a0  32 2c 79 32 0d 1b 94 14  3b 20 72 35 2c 72 36 20  |2,y2....; r5,r6 |
000050b0  69 73 20 78 33 2c 79 33  0d 1b 9e 04 0d 1b a8 35  |is x3,y3.......5|
000050c0  3b 20 20 20 20 20 20 20  20 20 20 20 78 31 20 20  |;           x1  |
000050d0  20 20 20 20 20 20 20 20  79 33 20 20 20 20 20 20  |        y3      |
000050e0  20 20 20 20 79 31 20 20  20 20 20 20 20 20 20 78  |    y1         x|
000050f0  33 0d 1b b2 34 3b 20 20  20 20 20 20 20 20 20 20  |3...4;          |
00005100  20 7c 20 20 20 20 20 20  20 20 20 20 20 7c 20 20  | |           |  |
00005110  20 20 20 20 20 20 20 20  20 7c 20 20 20 20 20 20  |         |      |
00005120  20 20 20 20 7c 0d 1b bc  39 3b 20 76 69 73 20 3d  |    |...9; vis =|
00005130  20 28 20 78 31 2d 78 32  20 29 20 2a 20 28 20 79  | ( x1-x2 ) * ( y|
00005140  33 2d 79 32 20 29 20 2d  20 28 20 79 31 2d 79 32  |3-y2 ) - ( y1-y2|
00005150  20 29 20 2a 20 28 20 78  33 2d 78 32 20 29 0d 1b  | ) * ( x3-x2 )..|
00005160  c6 2f 3b 20 20 20 20 20  20 20 20 20 20 20 20 20  |./;             |
00005170  20 20 20 20 7c 20 20 20  20 20 20 20 20 20 20 20  |    |           |
00005180  20 20 20 20 20 20 20 20  20 20 20 20 7c 0d 1b d0  |            |...|
00005190  30 3b 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0;              |
000051a0  20 20 20 72 33 20 20 20  20 20 20 20 20 20 20 20  |   r3           |
000051b0  20 20 20 20 20 20 20 20  20 20 20 72 34 0d 1b da  |           r4...|
000051c0  04 0d 1b e4 46 53 55 42  20 20 20 20 20 20 20 20  |....FSUB        |
000051d0  20 20 20 20 20 20 20 20  20 72 31 2c 72 31 2c 72  |         r1,r1,r|
000051e0  33 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |3               |
000051f0  20 20 20 20 20 20 3b 20  72 31 20 69 73 20 28 20  |      ; r1 is ( |
00005200  78 31 2d 78 32 20 29 0d  1b ee 46 53 55 42 20 20  |x1-x2 )...FSUB  |
00005210  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 72  |               r|
00005220  36 2c 72 36 2c 72 34 20  20 20 20 20 20 20 20 20  |6,r6,r4         |
00005230  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 72 36  |            ; r6|
00005240  20 69 73 20 28 20 79 33  2d 79 32 20 29 0d 1b f8  | is ( y3-y2 )...|
00005250  46 53 55 42 20 20 20 20  20 20 20 20 20 20 20 20  |FSUB            |
00005260  20 20 20 20 20 72 32 2c  72 32 2c 72 34 20 20 20  |     r2,r2,r4   |
00005270  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005280  20 20 3b 20 72 32 20 69  73 20 28 20 79 31 2d 79  |  ; r2 is ( y1-y|
00005290  32 20 29 0d 1c 02 46 53  55 42 20 20 20 20 20 20  |2 )...FSUB      |
000052a0  20 20 20 20 20 20 20 20  20 20 20 72 35 2c 72 35  |           r5,r5|
000052b0  2c 72 33 20 20 20 20 20  20 20 20 20 20 20 20 20  |,r3             |
000052c0  20 20 20 20 20 20 20 20  3b 20 72 35 20 69 73 20  |        ; r5 is |
000052d0  28 20 78 33 2d 78 32 20  29 0d 1c 0c 04 0d 1c 16  |( x3-x2 ).......|
000052e0  51 4d 55 4c 20 20 20 20  20 20 20 20 20 20 20 20  |QMUL            |
000052f0  20 20 20 20 20 72 33 2c  72 31 2c 72 36 20 20 20  |     r3,r1,r6   |
00005300  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005310  20 20 3b 20 72 33 20 3d  20 28 20 78 31 2d 78 32  |  ; r3 = ( x1-x2|
00005320  20 29 20 2a 20 28 20 79  33 2d 79 32 20 29 0d 1c  | ) * ( y3-y2 )..|
00005330  20 51 4d 55 4c 20 20 20  20 20 20 20 20 20 20 20  | QMUL           |
00005340  20 20 20 20 20 20 72 34  2c 72 32 2c 72 35 20 20  |      r4,r2,r5  |
00005350  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005360  20 20 20 3b 20 72 34 20  3d 20 28 20 79 31 2d 79  |   ; r4 = ( y1-y|
00005370  32 20 29 20 2a 20 28 20  78 33 2d 78 32 20 29 0d  |2 ) * ( x3-x2 ).|
00005380  1c 2a 04 0d 1c 34 40 53  55 42 53 20 20 20 20 20  |.*...4@SUBS     |
00005390  20 20 20 20 20 20 20 20  20 20 20 72 31 2c 72 33  |           r1,r3|
000053a0  2c 72 34 20 20 20 20 20  20 20 20 20 20 20 20 20  |,r4             |
000053b0  20 20 20 20 20 20 20 20  3b 20 72 31 20 69 73 20  |        ; r1 is |
000053c0  61 6e 73 0d 1c 3e 04 0d  1c 48 28 42 4c 47 54 20  |ans..>...H(BLGT |
000053d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 70  |               p|
000053e0  6c 6f 74 5f 67 6f 75 72  61 64 5f 71 75 61 64 0d  |lot_gourad_quad.|
000053f0  1c 52 04 0d 1c 5c 04 0d  1c 66 04 0d 1c 70 22 53  |.R...\...f...p"S|
00005400  55 42 53 20 20 20 20 20  20 20 20 20 20 20 20 20  |UBS             |
00005410  20 20 20 72 31 30 2c 72  31 30 2c 23 31 0d 1c 7a  |   r10,r10,#1..z|
00005420  29 42 47 54 20 20 20 20  20 20 20 20 20 20 20 20  |)BGT            |
00005430  20 20 20 20 20 70 6c 6f  74 5f 63 72 61 66 74 5f  |     plot_craft_|
00005440  66 61 63 65 74 73 0d 1c  84 04 0d 1c 8e 2f 4c 44  |facets......./LD|
00005450  4d 46 41 20 20 20 20 20  20 20 20 20 20 20 20 20  |MFA             |
00005460  20 20 28 73 70 29 21 2c  7b 72 30 2d 72 31 30 2c  |  (sp)!,{r0-r10,|
00005470  72 31 32 2c 6c 69 6e 6b  7d 0d 1c 98 1f 4d 4f 56  |r12,link}....MOV|
00005480  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005490  20 50 43 2c 6c 69 6e 6b  0d 1c a2 04 0d 1c ac 04  | PC,link........|
000054a0  0d 1c b6 04 0d 1c c0 04  0d 1c ca 04 0d 1c d4 25  |...............%|
000054b0  3b 20 72 30 20 69 73 20  6e 6f 2e 20 6f 66 20 63  |; r0 is no. of c|
000054c0  72 61 66 74 20 74 6f 20  63 61 6c 63 75 6c 61 74  |raft to calculat|
000054d0  65 0d 1c de 1b 2e 63 72  61 66 74 5f 6d 6f 76 65  |e.....craft_move|
000054e0  6d 65 6e 74 5f 68 61 6e  64 6c 65 72 0d 1c e8 2f  |ment_handler.../|
000054f0  53 54 4d 46 41 20 20 20  20 20 20 20 20 20 20 20  |STMFA           |
00005500  20 20 20 20 28 73 70 29  21 2c 7b 72 30 2d 72 31  |    (sp)!,{r0-r1|
00005510  30 2c 72 31 32 2c 6c 69  6e 6b 7d 0d 1c f2 04 0d  |0,r12,link}.....|
00005520  1c fc 33 4c 44 52 20 20  20 20 20 20 20 20 20 20  |..3LDR          |
00005530  20 20 20 20 20 20 20 72  31 30 2c 63 72 61 66 74  |       r10,craft|
00005540  5f 68 65 61 64 65 72 5f  6c 69 73 74 5f 62 61 73  |_header_list_bas|
00005550  65 25 0d 1d 06 53 4c 44  52 20 20 20 20 20 20 20  |e%...SLDR       |
00005560  20 20 20 20 20 20 20 20  20 20 72 31 32 2c 5b 72  |          r12,[r|
00005570  31 30 2c 72 30 2c 41 53  4c 23 32 5d 20 20 20 20  |10,r0,ASL#2]    |
00005580  20 20 20 20 20 20 3b 20  72 31 32 20 69 73 20 68  |      ; r12 is h|
00005590  65 61 64 65 72 20 6f 66  20 63 72 61 66 74 20 6e  |eader of craft n|
000055a0  6f 2e 20 72 30 0d 1d 10  04 0d 1d 1a 47 4c 44 52  |o. r0.......GLDR|
000055b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000055c0  20 72 30 2c 5b 72 31 32  2c 23 34 34 5d 20 20 20  | r0,[r12,#44]   |
000055d0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
000055e0  30 20 69 73 20 79 20 72  6f 74 20 73 70 65 65 64  |0 is y rot speed|
000055f0  0d 1d 24 41 4c 44 52 20  20 20 20 20 20 20 20 20  |..$ALDR         |
00005600  20 20 20 20 20 20 20 20  72 31 2c 5b 72 31 32 2c  |        r1,[r12,|
00005610  23 33 36 5d 20 20 20 20  20 20 20 20 20 20 20 20  |#36]            |
00005620  20 20 20 20 3b 20 72 31  20 69 73 20 79 20 72 6f  |    ; r1 is y ro|
00005630  74 0d 1d 2e 04 0d 1d 38  4e 41 44 44 20 20 20 20  |t......8NADD    |
00005640  20 20 20 20 20 20 20 20  20 20 20 20 20 72 31 2c  |             r1,|
00005650  72 31 2c 72 30 20 20 20  20 20 20 20 20 20 20 20  |r1,r0           |
00005660  20 20 20 20 20 20 20 20  20 3b 20 61 64 64 20 79  |         ; add y|
00005670  20 72 6f 74 20 73 70 65  65 64 20 74 6f 20 79 20  | rot speed to y |
00005680  72 6f 74 0d 1d 42 04 0d  1d 4c 4e 43 4d 50 20 20  |rot..B...LNCMP  |
00005690  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 72  |               r|
000056a0  31 2c 23 33 36 30 20 20  20 20 20 20 20 20 20 20  |1,#360          |
000056b0  20 20 20 20 20 20 20 20  20 20 20 3b 20 65 6e 73  |           ; ens|
000056c0  75 72 65 20 79 20 72 6f  74 20 69 73 20 69 6e 20  |ure y rot is in |
000056d0  72 61 6e 67 65 0d 1d 56  22 53 55 42 47 45 20 20  |range..V"SUBGE  |
000056e0  20 20 20 20 20 20 20 20  20 20 20 20 20 72 31 2c  |             r1,|
000056f0  72 31 2c 23 33 36 30 0d  1d 60 1d 4d 4f 56 53 20  |r1,#360..`.MOVS |
00005700  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 72  |               r|
00005710  31 2c 72 31 0d 1d 6a 22  41 44 44 4c 54 20 20 20  |1,r1..j"ADDLT   |
00005720  20 20 20 20 20 20 20 20  20 20 20 20 72 31 2c 72  |            r1,r|
00005730  31 2c 23 33 36 30 0d 1d  74 04 0d 1d 7e 41 53 54  |1,#360..t...~AST|
00005740  52 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |R               |
00005750  20 20 72 31 2c 5b 72 31  32 2c 23 33 36 5d 20 20  |  r1,[r12,#36]  |
00005760  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00005770  73 74 6f 72 65 20 79 20  72 6f 74 0d 1d 88 24 4c  |store y rot...$L|
00005780  44 52 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |DR              |
00005790  20 20 20 72 32 2c 5b 72  31 32 2c 23 34 30 5d 0d  |   r2,[r12,#40].|
000057a0  1d 92 4e 43 4d 50 20 20  20 20 20 20 20 20 20 20  |..NCMP          |
000057b0  20 20 20 20 20 20 20 72  32 2c 23 33 36 30 20 20  |       r2,#360  |
000057c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000057d0  20 20 20 3b 20 65 6e 73  75 72 65 20 79 20 72 6f  |   ; ensure y ro|
000057e0  74 20 69 73 20 69 6e 20  72 61 6e 67 65 0d 1d 9c  |t is in range...|
000057f0  22 53 55 42 47 45 20 20  20 20 20 20 20 20 20 20  |"SUBGE          |
00005800  20 20 20 20 20 72 32 2c  72 32 2c 23 33 36 30 0d  |     r2,r2,#360.|
00005810  1d a6 1d 4d 4f 56 53 20  20 20 20 20 20 20 20 20  |...MOVS         |
00005820  20 20 20 20 20 20 20 72  32 2c 72 32 0d 1d b0 22  |       r2,r2..."|
00005830  41 44 44 4c 54 20 20 20  20 20 20 20 20 20 20 20  |ADDLT           |
00005840  20 20 20 20 72 32 2c 72  32 2c 23 33 36 30 0d 1d  |    r2,r2,#360..|
00005850  ba 24 53 54 52 20 20 20  20 20 20 20 20 20 20 20  |.$STR           |
00005860  20 20 20 20 20 20 72 32  2c 5b 72 31 32 2c 23 34  |      r2,[r12,#4|
00005870  30 5d 0d 1d c4 04 0d 1d  ce 2f 4c 44 4d 46 41 20  |0]......./LDMFA |
00005880  20 20 20 20 20 20 20 20  20 20 20 20 20 20 28 73  |              (s|
00005890  70 29 21 2c 7b 72 30 2d  72 31 30 2c 72 31 32 2c  |p)!,{r0-r10,r12,|
000058a0  6c 69 6e 6b 7d 0d 1d d8  1f 4d 4f 56 20 20 20 20  |link}....MOV    |
000058b0  20 20 20 20 20 20 20 20  20 20 20 20 20 50 43 2c  |             PC,|
000058c0  6c 69 6e 6b 0d 1d e2 04  0d 1d ec 05 5d 0d 1d f6  |link........]...|
000058d0  04 0d 1e 00 0b ed 20 70  61 73 73 25 0d 1e 0a 04  |...... pass%....|
000058e0  0d 1e 14 05 e1 0d 1e 1e  04 0d 1e 28 04 0d 1e 32  |...........(...2|
000058f0  04 0d 1e 3c 50 f4 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |...<P. ---------|
00005900  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00005910  2d 2d 20 53 45 54 55 50  20 33 44 20 43 52 41 46  |-- SETUP 3D CRAF|
00005920  54 53 20 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |TS -------------|
00005930  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00005940  2d 0d 1e 46 04 0d 1e 50  04 0d 1e 5a 04 0d 1e 64  |-..F...P...Z...d|
00005950  16 dd 20 f2 73 65 74 75  70 5f 33 64 5f 63 72 61  |.. .setup_3d_cra|
00005960  66 74 73 0d 1e 6e 04 0d  1e 78 15 c8 99 20 22 48  |fts..n...x... "H|
00005970  6f 75 72 67 6c 61 73 73  5f 4f 6e 22 0d 1e 82 04  |ourglass_On"....|
00005980  0d 1e 8c 31 66 68 3d 8e  22 3c 50 65 72 70 65 74  |...1fh=."<Perpet|
00005990  75 61 6c 5f 4d 6f 74 69  6f 6e 24 44 69 72 3e 2e  |ual_Motion$Dir>.|
000059a0  43 72 61 66 74 73 2e 43  72 61 66 74 44 61 74 61  |Crafts.CraftData|
000059b0  22 0d 1e 96 04 0d 1e a0  15 e8 23 66 68 2c 6e 6f  |".........#fh,no|
000059c0  5f 6f 66 5f 63 72 61 66  74 25 0d 1e aa 27 de 20  |_of_craft%...'. |
000059d0  63 72 61 66 74 5f 68 65  61 64 65 72 5f 6c 69 73  |craft_header_lis|
000059e0  74 25 20 6e 6f 5f 6f 66  5f 63 72 61 66 74 25 2a  |t% no_of_craft%*|
000059f0  34 0d 1e b4 04 0d 1e be  35 63 72 61 66 74 5f 33  |4.......5craft_3|
00005a00  64 5f 64 61 74 61 5f 73  69 7a 65 25 3d 38 20 20  |d_data_size%=8  |
00005a10  20 20 20 20 20 20 20 20  20 20 20 20 20 3a 20 f4  |             : .|
00005a20  20 73 69 7a 65 20 69 6e  20 4b 0d 1e c8 2d de 20  | size in K...-. |
00005a30  63 72 61 66 74 5f 33 64  5f 64 61 74 61 25 20 63  |craft_3d_data% c|
00005a40  72 61 66 74 5f 33 64 5f  64 61 74 61 5f 73 69 7a  |raft_3d_data_siz|
00005a50  65 25 2a 31 30 32 34 0d  1e d2 04 0d 1e dc 04 0d  |e%*1024.........|
00005a60  1e e6 15 50 25 3d 63 72  61 66 74 5f 33 64 5f 64  |...P%=craft_3d_d|
00005a70  61 74 61 25 0d 1e f0 30  4c 25 3d 63 72 61 66 74  |ata%...0L%=craft|
00005a80  5f 33 64 5f 64 61 74 61  25 2b 28 63 72 61 66 74  |_3d_data%+(craft|
00005a90  5f 33 64 5f 64 61 74 61  5f 73 69 7a 65 25 2a 31  |_3d_data_size%*1|
00005aa0  30 32 34 29 0d 1e fa 04  0d 1f 04 24 e3 20 63 72  |024).......$. cr|
00005ab0  61 66 74 5f 6e 6f 25 3d  30 20 b8 20 28 6e 6f 5f  |aft_no%=0 . (no_|
00005ac0  6f 66 5f 63 72 61 66 74  25 2d 31 29 0d 1f 0e 04  |of_craft%-1)....|
00005ad0  0d 1f 18 16 e8 23 66 68  2c 63 72 61 66 74 5f 70  |.....#fh,craft_p|
00005ae0  6f 69 6e 74 73 25 0d 1f  22 16 e8 23 66 68 2c 63  |oints%.."..#fh,c|
00005af0  72 61 66 74 5f 66 61 63  65 74 73 25 0d 1f 2c 04  |raft_facets%..,.|
00005b00  0d 1f 36 28 63 72 61 66  74 5f 6f 72 69 67 5f 64  |..6(craft_orig_d|
00005b10  61 74 25 3d a4 69 6e 69  74 5f 63 72 61 66 74 5f  |at%=.init_craft_|
00005b20  6f 72 69 67 5f 64 61 74  0d 1f 40 2a 63 72 61 66  |orig_dat..@*craf|
00005b30  74 5f 74 72 61 6e 73 5f  64 61 74 25 3d a4 69 6e  |t_trans_dat%=.in|
00005b40  69 74 5f 63 72 61 66 74  5f 74 72 61 6e 73 5f 64  |it_craft_trans_d|
00005b50  61 74 0d 1f 4a 2a 63 72  61 66 74 5f 66 69 6e 61  |at..J*craft_fina|
00005b60  6c 5f 64 61 74 25 3d a4  69 6e 69 74 5f 63 72 61  |l_dat%=.init_cra|
00005b70  66 74 5f 66 69 6e 61 6c  5f 64 61 74 0d 1f 54 2c  |ft_final_dat..T,|
00005b80  63 72 61 66 74 5f 72 65  6e 64 65 72 5f 64 61 74  |craft_render_dat|
00005b90  25 3d a4 69 6e 69 74 5f  63 72 61 66 74 5f 72 65  |%=.init_craft_re|
00005ba0  6e 64 65 72 5f 64 61 74  0d 1f 5e 04 0d 1f 68 24  |nder_dat..^...h$|
00005bb0  63 72 61 66 74 5f 68 65  61 64 65 72 25 3d a4 69  |craft_header%=.i|
00005bc0  6e 69 74 5f 63 72 61 66  74 5f 68 65 61 64 65 72  |nit_craft_header|
00005bd0  0d 1f 72 04 0d 1f 7c 32  63 72 61 66 74 5f 68 65  |..r...|2craft_he|
00005be0  61 64 65 72 5f 6c 69 73  74 25 21 28 63 72 61 66  |ader_list%!(craf|
00005bf0  74 5f 6e 6f 25 2a 34 29  3d 63 72 61 66 74 5f 68  |t_no%*4)=craft_h|
00005c00  65 61 64 65 72 25 0d 1f  86 04 0d 1f 90 04 0d 1f  |eader%..........|
00005c10  9a 0f ed 20 63 72 61 66  74 5f 6e 6f 25 0d 1f a4  |... craft_no%...|
00005c20  04 0d 1f ae 16 c8 99 20  22 48 6f 75 72 67 6c 61  |....... "Hourgla|
00005c30  73 73 5f 4f 66 66 22 0d  1f b8 08 d9 23 66 68 0d  |ss_Off".....#fh.|
00005c40  1f c2 04 0d 1f cc 05 e1  0d 1f d6 04 0d 1f e0 04  |................|
00005c50  0d 1f ea 1a dd 20 a4 69  6e 69 74 5f 63 72 61 66  |..... .init_craf|
00005c60  74 5f 6f 72 69 67 5f 64  61 74 0d 1f f4 18 ea 20  |t_orig_dat..... |
00005c70  61 64 72 25 2c 70 6e 6f  25 2c 78 25 2c 79 25 2c  |adr%,pno%,x%,y%,|
00005c80  7a 25 0d 1f fe 04 0d 20  08 0b 61 64 72 25 3d 50  |z%..... ..adr%=P|
00005c90  25 0d 20 12 04 0d 20 1c  20 e3 20 70 6e 6f 25 3d  |%. ... . . pno%=|
00005ca0  30 20 b8 20 28 63 72 61  66 74 5f 70 6f 69 6e 74  |0 . (craft_point|
00005cb0  73 25 2d 31 29 0d 20 26  04 0d 20 30 0b e8 23 66  |s%-1). &.. 0..#f|
00005cc0  68 2c 78 25 0d 20 3a 0b  e8 23 66 68 2c 79 25 0d  |h,x%. :..#fh,y%.|
00005cd0  20 44 0b e8 23 66 68 2c  7a 25 0d 20 4e 04 0d 20  | D..#fh,z%. N.. |
00005ce0  58 04 0d 20 62 0c 5b 20  4f 50 54 20 31 30 0d 20  |X.. b.[ OPT 10. |
00005cf0  6c 0b 45 51 55 44 20 78  25 0d 20 76 0b 45 51 55  |l.EQUD x%. v.EQU|
00005d00  44 20 79 25 0d 20 80 0b  45 51 55 44 20 7a 25 0d  |D y%. ..EQUD z%.|
00005d10  20 8a 05 5d 0d 20 94 04  0d 20 9e 0a ed 20 70 6e  | ..]. ... ... pn|
00005d20  6f 25 0d 20 a8 09 3d 61  64 72 25 0d 20 b2 04 0d  |o%. ..=adr%. ...|
00005d30  20 bc 04 0d 20 c6 1b dd  20 a4 69 6e 69 74 5f 63  | ... ... .init_c|
00005d40  72 61 66 74 5f 74 72 61  6e 73 5f 64 61 74 0d 20  |raft_trans_dat. |
00005d50  d0 0f ea 20 61 64 72 25  2c 70 6e 6f 25 0d 20 da  |... adr%,pno%. .|
00005d60  04 0d 20 e4 0b 61 64 72  25 3d 50 25 0d 20 ee 04  |.. ..adr%=P%. ..|
00005d70  0d 20 f8 20 e3 20 70 6e  6f 25 3d 30 20 b8 20 28  |. . . pno%=0 . (|
00005d80  63 72 61 66 74 5f 70 6f  69 6e 74 73 25 2d 31 29  |craft_points%-1)|
00005d90  0d 21 02 04 0d 21 0c 0c  5b 20 4f 50 54 20 31 30  |.!...!..[ OPT 10|
00005da0  0d 21 16 25 45 51 55 44  20 30 20 20 20 20 20 20  |.!.%EQUD 0      |
00005db0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005dc0  20 20 3b 20 78 0d 21 20  25 45 51 55 44 20 30 20  |  ; x.! %EQUD 0 |
00005dd0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005de0  20 20 20 20 20 20 20 3b  20 79 0d 21 2a 25 45 51  |       ; y.!*%EQ|
00005df0  55 44 20 30 20 20 20 20  20 20 20 20 20 20 20 20  |UD 0            |
00005e00  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 7a 0d  |            ; z.|
00005e10  21 34 05 5d 0d 21 3e 04  0d 21 48 0a ed 20 70 6e  |!4.].!>..!H.. pn|
00005e20  6f 25 0d 21 52 09 3d 61  64 72 25 0d 21 5c 04 0d  |o%.!R.=adr%.!\..|
00005e30  21 66 04 0d 21 70 1b dd  20 a4 69 6e 69 74 5f 63  |!f..!p.. .init_c|
00005e40  72 61 66 74 5f 66 69 6e  61 6c 5f 64 61 74 0d 21  |raft_final_dat.!|
00005e50  7a 0f ea 20 61 64 72 25  2c 70 6e 6f 25 0d 21 84  |z.. adr%,pno%.!.|
00005e60  04 0d 21 8e 0b 61 64 72  25 3d 50 25 0d 21 98 04  |..!..adr%=P%.!..|
00005e70  0d 21 a2 20 e3 20 70 6e  6f 25 3d 30 20 b8 20 28  |.!. . pno%=0 . (|
00005e80  63 72 61 66 74 5f 70 6f  69 6e 74 73 25 2d 31 29  |craft_points%-1)|
00005e90  0d 21 ac 04 0d 21 b6 0c  5b 20 4f 50 54 20 31 30  |.!...!..[ OPT 10|
00005ea0  0d 21 c0 25 45 51 55 44  20 30 20 20 20 20 20 20  |.!.%EQUD 0      |
00005eb0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005ec0  20 20 3b 20 78 0d 21 ca  25 45 51 55 44 20 30 20  |  ; x.!.%EQUD 0 |
00005ed0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005ee0  20 20 20 20 20 20 20 3b  20 79 0d 21 d4 05 5d 0d  |       ; y.!..].|
00005ef0  21 de 04 0d 21 e8 0a ed  20 70 6e 6f 25 0d 21 f2  |!...!... pno%.!.|
00005f00  09 3d 61 64 72 25 0d 21  fc 04 0d 22 06 04 0d 22  |.=adr%.!..."..."|
00005f10  10 1c dd 20 a4 69 6e 69  74 5f 63 72 61 66 74 5f  |... .init_craft_|
00005f20  72 65 6e 64 65 72 5f 64  61 74 0d 22 1a 3d ea 20  |render_dat.".=. |
00005f30  61 64 72 25 2c 66 6e 6f  25 2c 74 79 70 65 25 2c  |adr%,fno%,type%,|
00005f40  70 30 25 2c 70 31 25 2c  70 32 25 2c 70 33 25 2c  |p0%,p1%,p2%,p3%,|
00005f50  69 6e 74 30 25 2c 69 6e  74 31 25 2c 69 6e 74 32  |int0%,int1%,int2|
00005f60  25 2c 69 6e 74 33 25 0d  22 24 04 0d 22 2e 0b 61  |%,int3%."$.."..a|
00005f70  64 72 25 3d 50 25 0d 22  38 04 0d 22 42 04 0d 22  |dr%=P%."8.."B.."|
00005f80  4c 04 0d 22 56 20 e3 20  66 6e 6f 25 3d 30 20 b8  |L.."V . fno%=0 .|
00005f90  20 28 63 72 61 66 74 5f  66 61 63 65 74 73 25 2d  | (craft_facets%-|
00005fa0  31 29 0d 22 60 04 0d 22  6a 0e e8 23 66 68 2c 74  |1)."`.."j..#fh,t|
00005fb0  79 70 65 25 0d 22 74 0c  e8 23 66 68 2c 70 30 25  |ype%."t..#fh,p0%|
00005fc0  0d 22 7e 0c e8 23 66 68  2c 70 31 25 0d 22 88 0c  |."~..#fh,p1%."..|
00005fd0  e8 23 66 68 2c 70 32 25  0d 22 92 0c e8 23 66 68  |.#fh,p2%."...#fh|
00005fe0  2c 70 33 25 0d 22 9c 04  0d 22 a6 0e 69 6e 74 30  |,p3%."..."..int0|
00005ff0  25 3d 9a 23 66 68 0d 22  b0 0e 69 6e 74 31 25 3d  |%=.#fh."..int1%=|
00006000  9a 23 66 68 0d 22 ba 0e  69 6e 74 32 25 3d 9a 23  |.#fh."..int2%=.#|
00006010  66 68 0d 22 c4 0e 69 6e  74 33 25 3d 9a 23 66 68  |fh."..int3%=.#fh|
00006020  0d 22 ce 04 0d 22 d8 0c  5b 20 4f 50 54 20 31 30  |."..."..[ OPT 10|
00006030  0d 22 e2 24 45 51 55 44  20 74 79 70 65 25 20 20  |.".$EQUD type%  |
00006040  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00006050  74 79 70 65 0d 22 ec 20  45 51 55 44 20 70 30 25  |type.". EQUD p0%|
00006060  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006070  3b 20 70 30 0d 22 f6 20  45 51 55 44 20 70 31 25  |; p0.". EQUD p1%|
00006080  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006090  3b 20 70 31 0d 23 00 20  45 51 55 44 20 70 32 25  |; p1.#. EQUD p2%|
000060a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000060b0  3b 20 70 32 0d 23 0a 20  45 51 55 44 20 70 33 25  |; p2.#. EQUD p3%|
000060c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000060d0  3b 20 70 33 0d 23 14 04  0d 23 1e 26 45 51 55 42  |; p3.#...#.&EQUB|
000060e0  20 69 6e 74 30 25 20 20  20 20 20 20 20 20 20 20  | int0%          |
000060f0  20 20 20 20 20 20 3b 20  70 30 20 69 6e 74 0d 23  |      ; p0 int.#|
00006100  28 26 45 51 55 42 20 69  6e 74 31 25 20 20 20 20  |(&EQUB int1%    |
00006110  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 70 31  |            ; p1|
00006120  20 69 6e 74 0d 23 32 26  45 51 55 42 20 69 6e 74  | int.#2&EQUB int|
00006130  32 25 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |2%              |
00006140  20 20 3b 20 70 32 20 69  6e 74 0d 23 3c 26 45 51  |  ; p2 int.#<&EQ|
00006150  55 42 20 69 6e 74 33 25  20 20 20 20 20 20 20 20  |UB int3%        |
00006160  20 20 20 20 20 20 20 20  3b 20 70 33 20 69 6e 74  |        ; p3 int|
00006170  0d 23 46 05 5d 0d 23 50  0a ed 20 66 6e 6f 25 0d  |.#F.].#P.. fno%.|
00006180  23 5a 09 3d 61 64 72 25  0d 23 64 04 0d 23 6e 04  |#Z.=adr%.#d..#n.|
00006190  0d 23 78 18 dd 20 a4 69  6e 69 74 5f 63 72 61 66  |.#x.. .init_craf|
000061a0  74 5f 68 65 61 64 65 72  0d 23 82 0a ea 20 61 64  |t_header.#... ad|
000061b0  72 25 0d 23 8c 04 0d 23  96 0b 61 64 72 25 3d 50  |r%.#...#..adr%=P|
000061c0  25 0d 23 a0 04 0d 23 aa  0c 5b 20 4f 50 54 20 31  |%.#...#..[ OPT 1|
000061d0  30 0d 23 b4 3e 45 51 55  44 20 30 20 20 20 20 20  |0.#.>EQUD 0     |
000061e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000061f0  20 20 20 3b 20 70 6f 73  69 74 69 6f 6e 20 76 65  |   ; position ve|
00006200  63 74 6f 72 20 63 6f 6d  70 6f 6e 65 6e 74 73 0d  |ctor components.|
00006210  23 be 0a 45 51 55 44 20  30 0d 23 c8 0c 45 51 55  |#..EQUD 0.#..EQU|
00006220  44 20 35 30 30 0d 23 d2  04 0d 23 dc 3e 45 51 55  |D 500.#...#.>EQU|
00006230  44 20 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |D 0             |
00006240  20 20 20 20 20 20 20 20  20 20 20 3b 20 76 65 6c  |           ; vel|
00006250  6f 63 69 74 79 20 76 65  63 74 6f 72 20 63 6f 6d  |ocity vector com|
00006260  70 6f 6e 65 6e 74 73 0d  23 e6 0a 45 51 55 44 20  |ponents.#..EQUD |
00006270  30 0d 23 f0 0a 45 51 55  44 20 30 0d 23 fa 04 0d  |0.#..EQUD 0.#...|
00006280  24 04 42 45 51 55 44 20  30 20 20 20 20 20 20 20  |$.BEQUD 0       |
00006290  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000062a0  20 3b 20 61 63 63 65 6c  65 72 61 74 69 6f 6e 20  | ; acceleration |
000062b0  76 65 63 74 6f 72 20 63  6f 6d 70 6f 6e 65 6e 74  |vector component|
000062c0  73 0d 24 0e 0a 45 51 55  44 20 30 0d 24 18 0a 45  |s.$..EQUD 0.$..E|
000062d0  51 55 44 20 30 0d 24 22  04 0d 24 2c 29 45 51 55  |QUD 0.$"..$,)EQU|
000062e0  44 20 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |D 0             |
000062f0  20 20 20 20 20 20 20 20  20 20 20 3b 20 79 20 72  |           ; y r|
00006300  6f 74 0d 24 36 29 45 51  55 44 20 30 20 20 20 20  |ot.$6)EQUD 0    |
00006310  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006320  20 20 20 20 3b 20 7a 20  72 6f 74 0d 24 40 2f 45  |    ; z rot.$@/E|
00006330  51 55 44 20 30 20 20 20  20 20 20 20 20 20 20 20  |QUD 0           |
00006340  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 79  |             ; y|
00006350  20 72 6f 74 20 73 70 65  65 64 0d 24 4a 2f 45 51  | rot speed.$J/EQ|
00006360  55 44 20 30 20 20 20 20  20 20 20 20 20 20 20 20  |UD 0            |
00006370  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 7a 20  |            ; z |
00006380  72 6f 74 20 73 70 65 65  64 0d 24 54 04 0d 24 5e  |rot speed.$T..$^|
00006390  16 45 51 55 44 20 63 72  61 66 74 5f 70 6f 69 6e  |.EQUD craft_poin|
000063a0  74 73 25 0d 24 68 16 45  51 55 44 20 63 72 61 66  |ts%.$h.EQUD craf|
000063b0  74 5f 66 61 63 65 74 73  25 0d 24 72 18 45 51 55  |t_facets%.$r.EQU|
000063c0  44 20 63 72 61 66 74 5f  6f 72 69 67 5f 64 61 74  |D craft_orig_dat|
000063d0  25 0d 24 7c 19 45 51 55  44 20 63 72 61 66 74 5f  |%.$|.EQUD craft_|
000063e0  74 72 61 6e 73 5f 64 61  74 25 0d 24 86 19 45 51  |trans_dat%.$..EQ|
000063f0  55 44 20 63 72 61 66 74  5f 66 69 6e 61 6c 5f 64  |UD craft_final_d|
00006400  61 74 25 0d 24 90 1a 45  51 55 44 20 63 72 61 66  |at%.$..EQUD craf|
00006410  74 5f 72 65 6e 64 65 72  5f 64 61 74 25 0d 24 9a  |t_render_dat%.$.|
00006420  05 5d 0d 24 a4 09 3d 61  64 72 25 0d 24 ae 04 0d  |.].$..=adr%.$...|
00006430  24 b8 04 0d 24 c2 04 0d  24 cc 04 0d 24 d6 04 0d  |$...$...$...$...|
00006440  24 e0 04 0d 24 ea 04 0d  24 f4 1d dd 20 f2 69 6e  |$...$...$... .in|
00006450  69 74 69 61 6c 69 73 65  5f 65 64 67 65 5f 74 61  |itialise_edge_ta|
00006460  62 6c 65 73 0d 24 fe 04  0d 25 08 22 de 20 73 63  |bles.$...%.". sc|
00006470  61 6e 5f 63 6f 6e 76 5f  74 65 78 5f 6c 68 73 25  |an_conv_tex_lhs%|
00006480  20 28 32 35 36 2a 34 29  2a 34 0d 25 12 22 de 20  | (256*4)*4.%.". |
00006490  73 63 61 6e 5f 63 6f 6e  76 5f 74 65 78 5f 72 68  |scan_conv_tex_rh|
000064a0  73 25 20 28 32 35 36 2a  34 29 2a 34 0d 25 1c 04  |s% (256*4)*4.%..|
000064b0  0d 25 26 05 e1 0d 25 30  04 0d 25 3a 04 0d 25 44  |.%&...%0..%:..%D|
000064c0  04 0d 25 4e 04 0d 25 58  04 0d 25 62 04 0d 25 6c  |..%N..%X..%b..%l|
000064d0  04 0d 25 76 04 0d 25 80  51 f4 20 2d 2d 2d 2d 2d  |..%v..%.Q. -----|
000064e0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000064f0  2d 2d 2d 2d 2d 2d 20 44  49 56 49 53 49 4f 4e 20  |------ DIVISION |
00006500  52 4f 55 54 49 4e 45 53  20 2d 2d 2d 2d 2d 2d 2d  |ROUTINES -------|
00006510  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00006520  2d 2d 2d 2d 2d 2d 0d 25  8a 04 0d 25 94 1c dd 20  |------.%...%... |
00006530  f2 73 65 74 75 70 5f 72  65 66 65 72 65 6e 63 65  |.setup_reference|
00006540  5f 6c 69 73 74 73 0d 25  9e 04 0d 25 a8 1b de 20  |_lists.%...%... |
00006550  73 77 6d 5f 72 64 69 76  5f 6c 69 73 74 25 20 38  |swm_rdiv_list% 8|
00006560  31 39 32 2a 34 0d 25 b2  04 0d 25 bc 11 64 69 76  |192*4.%...%..div|
00006570  5f 73 63 61 6c 65 25 3d  31 38 0d 25 c6 04 0d 25  |_scale%=18.%...%|
00006580  d0 08 ea 20 49 25 0d 25  da 04 0d 25 e4 11 e3 20  |... I%.%...%... |
00006590  49 25 3d 31 20 b8 20 38  31 39 31 0d 25 ee 04 0d  |I%=1 . 8191.%...|
000065a0  25 f8 1e 20 20 6e 6f 3d  28 31 2f 49 25 29 2a 28  |%..  no=(1/I%)*(|
000065b0  32 5e 64 69 76 5f 73 63  61 6c 65 25 29 0d 26 02  |2^div_scale%).&.|
000065c0  1f 20 20 73 77 6d 5f 72  64 69 76 5f 6c 69 73 74  |.  swm_rdiv_list|
000065d0  25 21 28 49 25 3c 3c 32  29 3d 6e 6f 0d 26 0c 04  |%!(I%<<2)=no.&..|
000065e0  0d 26 16 05 ed 0d 26 20  04 0d 26 2a 17 de 20 73  |.&....& ..&*.. s|
000065f0  69 6e 65 5f 74 61 62 6c  65 25 20 33 36 30 2a 34  |ine_table% 360*4|
00006600  0d 26 34 19 de 20 63 6f  73 69 6e 65 5f 74 61 62  |.&4.. cosine_tab|
00006610  6c 65 25 20 33 36 30 2a  34 0d 26 3e 04 0d 26 48  |le% 360*4.&>..&H|
00006620  10 e3 20 49 25 3d 30 20  b8 20 33 35 39 0d 26 52  |.. I%=0 . 359.&R|
00006630  04 0d 26 5c 29 20 20 20  73 69 6e 65 5f 74 61 62  |..&\)   sine_tab|
00006640  6c 65 25 21 28 49 25 3c  3c 32 29 3d 28 b5 28 b2  |le%!(I%<<2)=(.(.|
00006650  28 49 25 29 29 2a 32 35  36 29 0d 26 66 2b 20 20  |(I%))*256).&f+  |
00006660  20 63 6f 73 69 6e 65 5f  74 61 62 6c 65 25 21 28  | cosine_table%!(|
00006670  49 25 3c 3c 32 29 3d 28  9b 28 b2 28 49 25 29 29  |I%<<2)=(.(.(I%))|
00006680  2a 32 35 36 29 0d 26 70  04 0d 26 7a 05 ed 0d 26  |*256).&p..&z...&|
00006690  84 04 0d 26 8e 05 e1 0d  26 98 04 0d 26 a2 04 0d  |...&....&...&...|
000066a0  26 ac 04 0d 26 b6 22 dd  20 a4 73 77 6d 5f 72 64  |&...&.". .swm_rd|
000066b0  69 76 5f 61 63 74 28 6e  6f 25 2c 64 69 76 25 2c  |iv_act(no%,div%,|
000066c0  61 6e 73 25 29 0d 26 c0  04 0d 26 ca 0a 77 6b 30  |ans%).&...&..wk0|
000066d0  25 3d 30 0d 26 d4 0a 77  6b 31 25 3d 31 0d 26 de  |%=0.&..wk1%=1.&.|
000066e0  0a 77 6b 32 25 3d 32 0d  26 e8 04 0d 26 f2 17 ea  |.wk2%=2.&...&...|
000066f0  20 77 6b 30 25 2c 77 6b  31 25 2c 77 6b 32 25 2c  | wk0%,wk1%,wk2%,|
00006700  49 25 0d 26 fc 04 0d 27  06 0f e3 20 49 25 3d 30  |I%.&...'... I%=0|
00006710  20 b8 20 31 34 0d 27 10  04 0d 27 1a 1a 20 20 e7  | . 14.'...'..  .|
00006720  20 77 6b 30 25 3d 6e 6f  25 20 3a 20 77 6b 30 25  | wk0%=no% : wk0%|
00006730  2b 3d 31 0d 27 24 1b 20  20 e7 20 77 6b 30 25 3d  |+=1.'$.  . wk0%=|
00006740  64 69 76 25 20 3a 20 77  6b 30 25 2b 3d 31 0d 27  |div% : wk0%+=1.'|
00006750  2e 1b 20 20 e7 20 77 6b  30 25 3d 61 6e 73 25 20  |..  . wk0%=ans% |
00006760  3a 20 77 6b 30 25 2b 3d  31 0d 27 38 1b 20 20 e7  |: wk0%+=1.'8.  .|
00006770  20 77 6b 30 25 3d 77 6b  31 25 20 3a 20 77 6b 30  | wk0%=wk1% : wk0|
00006780  25 2b 3d 31 0d 27 42 1b  20 20 e7 20 77 6b 30 25  |%+=1.'B.  . wk0%|
00006790  3d 77 6b 32 25 20 3a 20  77 6b 30 25 2b 3d 31 0d  |=wk2% : wk0%+=1.|
000067a0  27 4c 04 0d 27 56 08 ed  20 49 25 0d 27 60 04 0d  |'L..'V.. I%.'`..|
000067b0  27 6a 0f e3 20 49 25 3d  30 20 b8 20 31 34 0d 27  |'j.. I%=0 . 14.'|
000067c0  74 04 0d 27 7e 1a 20 20  e7 20 77 6b 31 25 3d 6e  |t..'~.  . wk1%=n|
000067d0  6f 25 20 3a 20 77 6b 31  25 2b 3d 31 0d 27 88 1b  |o% : wk1%+=1.'..|
000067e0  20 20 e7 20 77 6b 31 25  3d 64 69 76 25 20 3a 20  |  . wk1%=div% : |
000067f0  77 6b 31 25 2b 3d 31 0d  27 92 1b 20 20 e7 20 77  |wk1%+=1.'..  . w|
00006800  6b 31 25 3d 61 6e 73 25  20 3a 20 77 6b 31 25 2b  |k1%=ans% : wk1%+|
00006810  3d 31 0d 27 9c 1b 20 20  e7 20 77 6b 31 25 3d 77  |=1.'..  . wk1%=w|
00006820  6b 30 25 20 3a 20 77 6b  31 25 2b 3d 31 0d 27 a6  |k0% : wk1%+=1.'.|
00006830  1b 20 20 e7 20 77 6b 31  25 3d 77 6b 32 25 20 3a  |.  . wk1%=wk2% :|
00006840  20 77 6b 31 25 2b 3d 31  0d 27 b0 04 0d 27 ba 08  | wk1%+=1.'...'..|
00006850  ed 20 49 25 0d 27 c4 04  0d 27 ce 0f e3 20 49 25  |. I%.'...'... I%|
00006860  3d 30 20 b8 20 31 34 0d  27 d8 04 0d 27 e2 1a 20  |=0 . 14.'...'.. |
00006870  20 e7 20 77 6b 32 25 3d  6e 6f 25 20 3a 20 77 6b  | . wk2%=no% : wk|
00006880  32 25 2b 3d 31 0d 27 ec  1b 20 20 e7 20 77 6b 32  |2%+=1.'..  . wk2|
00006890  25 3d 64 69 76 25 20 3a  20 77 6b 32 25 2b 3d 31  |%=div% : wk2%+=1|
000068a0  0d 27 f6 1b 20 20 e7 20  77 6b 32 25 3d 61 6e 73  |.'..  . wk2%=ans|
000068b0  25 20 3a 20 77 6b 32 25  2b 3d 31 0d 28 00 1b 20  |% : wk2%+=1.(.. |
000068c0  20 e7 20 77 6b 32 25 3d  77 6b 30 25 20 3a 20 77  | . wk2%=wk0% : w|
000068d0  6b 32 25 2b 3d 31 0d 28  0a 1b 20 20 e7 20 77 6b  |k2%+=1.(..  . wk|
000068e0  32 25 3d 77 6b 31 25 20  3a 20 77 6b 32 25 2b 3d  |2%=wk1% : wk2%+=|
000068f0  31 0d 28 14 04 0d 28 1e  08 ed 20 49 25 0d 28 28  |1.(...(... I%.((|
00006900  04 0d 28 32 4d e7 20 77  6b 30 25 3d 77 6b 31 25  |..(2M. wk0%=wk1%|
00006910  20 3a 20 85 20 30 2c 28  22 20 69 64 65 6e 74 69  | : . 0,(" identi|
00006920  63 61 6c 20 77 6f 72 6b  20 72 65 67 69 73 74 65  |cal work registe|
00006930  72 73 20 69 6e 20 64 69  76 69 73 69 6f 6e 20 6d  |rs in division m|
00006940  61 63 72 6f 2e 2e 2e 20  22 29 20 3a 20 e0 0d 28  |acro... ") : ..(|
00006950  3c 4d e7 20 77 6b 31 25  3d 77 6b 32 25 20 3a 20  |<M. wk1%=wk2% : |
00006960  85 20 30 2c 28 22 20 69  64 65 6e 74 69 63 61 6c  |. 0,(" identical|
00006970  20 77 6f 72 6b 20 72 65  67 69 73 74 65 72 73 20  | work registers |
00006980  69 6e 20 64 69 76 69 73  69 6f 6e 20 6d 61 63 72  |in division macr|
00006990  6f 2e 2e 2e 20 22 29 20  3a 20 e0 0d 28 46 4d e7  |o... ") : ..(FM.|
000069a0  20 77 6b 30 25 3d 77 6b  32 25 20 3a 20 85 20 30  | wk0%=wk2% : . 0|
000069b0  2c 28 22 20 69 64 65 6e  74 69 63 61 6c 20 77 6f  |,(" identical wo|
000069c0  72 6b 20 72 65 67 69 73  74 65 72 73 20 69 6e 20  |rk registers in |
000069d0  64 69 76 69 73 69 6f 6e  20 6d 61 63 72 6f 2e 2e  |division macro..|
000069e0  2e 20 22 29 20 3a 20 e0  0d 28 50 04 0d 28 5a 52  |. ") : ..(P..(ZR|
000069f0  e7 20 6e 6f 25 3d 64 69  76 25 20 3a 20 85 20 30  |. no%=div% : . 0|
00006a00  2c 28 22 20 69 64 65 6e  74 69 63 61 6c 20 61 6e  |,(" identical an|
00006a10  61 6c 79 74 69 63 61 6c  20 72 65 67 69 73 74 65  |alytical registe|
00006a20  72 73 20 69 6e 20 64 69  76 69 73 69 6f 6e 20 6d  |rs in division m|
00006a30  61 63 72 6f 2e 2e 2e 20  22 29 20 3a 20 e0 0d 28  |acro... ") : ..(|
00006a40  64 53 e7 20 64 69 76 25  3d 61 6e 73 25 20 3a 20  |dS. div%=ans% : |
00006a50  85 20 30 2c 28 22 20 69  64 65 6e 74 69 63 61 6c  |. 0,(" identical|
00006a60  20 61 6e 61 6c 79 74 69  63 61 6c 20 72 65 67 69  | analytical regi|
00006a70  73 74 65 72 73 20 69 6e  20 64 69 76 69 73 69 6f  |sters in divisio|
00006a80  6e 20 6d 61 63 72 6f 2e  2e 2e 20 22 29 20 3a 20  |n macro... ") : |
00006a90  e0 0d 28 6e 52 e7 20 6e  6f 25 3d 61 6e 73 25 20  |..(nR. no%=ans% |
00006aa0  3a 20 85 20 30 2c 28 22  20 69 64 65 6e 74 69 63  |: . 0,(" identic|
00006ab0  61 6c 20 61 6e 61 6c 79  74 69 63 61 6c 20 72 65  |al analytical re|
00006ac0  67 69 73 74 65 72 73 20  69 6e 20 64 69 76 69 73  |gisters in divis|
00006ad0  69 6f 6e 20 6d 61 63 72  6f 2e 2e 2e 20 22 29 20  |ion macro... ") |
00006ae0  3a 20 e0 0d 28 78 04 0d  28 82 0f 5b 20 4f 50 54  |: ..(x..(..[ OPT|
00006af0  20 70 61 73 73 25 0d 28  8c 22 53 54 4d 46 41 20  | pass%.(."STMFA |
00006b00  20 20 28 73 70 29 21 2c  7b 77 6b 30 25 2c 77 6b  |  (sp)!,{wk0%,wk|
00006b10  31 25 2c 77 6b 32 25 7d  0d 28 96 04 0d 28 a0 26  |1%,wk2%}.(...(.&|
00006b20  4c 44 52 20 20 20 20 20  20 20 77 6b 30 25 2c 73  |LDR       wk0%,s|
00006b30  77 6d 5f 72 64 69 76 5f  6c 69 73 74 5f 62 61 73  |wm_rdiv_list_bas|
00006b40  65 25 0d 28 aa 41 80 53  20 20 20 20 20 20 77 6b  |e%.(.A.S      wk|
00006b50  31 25 2c 64 69 76 25 2c  23 31 3c 3c 33 31 20 20  |1%,div%,#1<<31  |
00006b60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006b70  3b 20 63 68 65 63 6b 20  69 66 20 6e 65 67 61 74  |; check if negat|
00006b80  69 76 65 0d 28 b4 45 52  53 42 4d 49 20 20 20 20  |ive.(.ERSBMI    |
00006b90  20 64 69 76 25 2c 64 69  76 25 2c 23 30 20 20 20  | div%,div%,#0   |
00006ba0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006bb0  20 20 20 3b 20 69 66 20  73 6f 20 6d 61 6b 65 20  |   ; if so make |
00006bc0  70 6f 73 69 74 69 76 65  0d 28 be 49 4c 44 52 20  |positive.(.ILDR |
00006bd0  20 20 20 20 20 20 77 6b  32 25 2c 5b 77 6b 30 25  |      wk2%,[wk0%|
00006be0  2c 64 69 76 25 2c 4c 53  4c 23 32 5d 20 20 20 20  |,div%,LSL#2]    |
00006bf0  20 20 20 20 20 20 20 20  20 3b 20 6c 6f 61 64 20  |         ; load |
00006c00  6e 75 6d 62 65 72 20 66  72 6f 6d 20 74 61 62 6c  |number from tabl|
00006c10  65 0d 28 c8 63 4d 55 4c  20 20 20 20 20 20 20 61  |e.(.cMUL       a|
00006c20  6e 73 25 2c 77 6b 32 25  2c 6e 6f 25 20 20 20 20  |ns%,wk2%,no%    |
00006c30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006c40  20 20 3b 20 70 65 72 66  72 6f 6d 20 6d 75 6c 74  |  ; perfrom mult|
00006c50  69 70 6c 69 63 61 74 69  6f 6e 20 6f 66 20 6e 75  |iplication of nu|
00006c60  6d 62 65 72 2a 28 31 2f  64 69 76 69 73 6f 72 29  |mber*(1/divisor)|
00006c70  3c 3c 31 36 0d 28 d2 52  4d 4f 56 20 20 20 20 20  |<<16.(.RMOV     |
00006c80  20 20 61 6e 73 25 2c 61  6e 73 25 2c 41 53 52 23  |  ans%,ans%,ASR#|
00006c90  64 69 76 5f 73 63 61 6c  65 25 20 20 20 20 20 20  |div_scale%      |
00006ca0  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 73 63  |            ; sc|
00006cb0  61 6c 65 20 64 6f 77 6e  20 74 6f 20 67 65 74 20  |ale down to get |
00006cc0  72 65 73 75 6c 74 0d 28  dc 04 0d 28 e6 15 43 4d  |result.(...(..CM|
00006cd0  50 20 20 20 20 20 20 20  77 6b 31 25 2c 23 30 0d  |P       wk1%,#0.|
00006ce0  28 f0 1a 52 53 42 4d 49  20 20 20 20 20 61 6e 73  |(..RSBMI     ans|
00006cf0  25 2c 61 6e 73 25 2c 23  30 0d 28 fa 04 0d 29 04  |%,ans%,#0.(...).|
00006d00  22 4c 44 4d 46 41 20 20  20 28 73 70 29 21 2c 7b  |"LDMFA   (sp)!,{|
00006d10  77 6b 30 25 2c 77 6b 31  25 2c 77 6b 32 25 7d 0d  |wk0%,wk1%,wk2%}.|
00006d20  29 0e 04 0d 29 18 05 5d  0d 29 22 06 3d 30 0d 29  |)...)..].)".=0.)|
00006d30  2c 04 0d 29 36 04 0d 29  40 04 0d 29 4a 04 0d 29  |,..)6..)@..)J..)|
00006d40  54 22 dd 20 a4 73 77 6d  5f 72 64 69 76 5f 73 63  |T". .swm_rdiv_sc|
00006d50  61 28 6e 6f 25 2c 64 69  76 25 2c 61 6e 73 25 29  |a(no%,div%,ans%)|
00006d60  0d 29 5e 04 0d 29 68 0a  77 6b 30 25 3d 30 0d 29  |.)^..)h.wk0%=0.)|
00006d70  72 0a 77 6b 31 25 3d 31  0d 29 7c 0a 77 6b 32 25  |r.wk1%=1.)|.wk2%|
00006d80  3d 32 0d 29 86 04 0d 29  90 17 ea 20 77 6b 30 25  |=2.)...)... wk0%|
00006d90  2c 77 6b 31 25 2c 77 6b  32 25 2c 49 25 0d 29 9a  |,wk1%,wk2%,I%.).|
00006da0  04 0d 29 a4 0f e3 20 49  25 3d 30 20 b8 20 31 34  |..)... I%=0 . 14|
00006db0  0d 29 ae 04 0d 29 b8 1a  20 20 e7 20 77 6b 30 25  |.)...)..  . wk0%|
00006dc0  3d 6e 6f 25 20 3a 20 77  6b 30 25 2b 3d 31 0d 29  |=no% : wk0%+=1.)|
00006dd0  c2 1b 20 20 e7 20 77 6b  30 25 3d 64 69 76 25 20  |..  . wk0%=div% |
00006de0  3a 20 77 6b 30 25 2b 3d  31 0d 29 cc 1b 20 20 e7  |: wk0%+=1.)..  .|
00006df0  20 77 6b 30 25 3d 61 6e  73 25 20 3a 20 77 6b 30  | wk0%=ans% : wk0|
00006e00  25 2b 3d 31 0d 29 d6 1b  20 20 e7 20 77 6b 30 25  |%+=1.)..  . wk0%|
00006e10  3d 77 6b 31 25 20 3a 20  77 6b 30 25 2b 3d 31 0d  |=wk1% : wk0%+=1.|
00006e20  29 e0 1b 20 20 e7 20 77  6b 30 25 3d 77 6b 32 25  |)..  . wk0%=wk2%|
00006e30  20 3a 20 77 6b 30 25 2b  3d 31 0d 29 ea 04 0d 29  | : wk0%+=1.)...)|
00006e40  f4 08 ed 20 49 25 0d 29  fe 04 0d 2a 08 0f e3 20  |... I%.)...*... |
00006e50  49 25 3d 30 20 b8 20 31  34 0d 2a 12 04 0d 2a 1c  |I%=0 . 14.*...*.|
00006e60  1a 20 20 e7 20 77 6b 31  25 3d 6e 6f 25 20 3a 20  |.  . wk1%=no% : |
00006e70  77 6b 31 25 2b 3d 31 0d  2a 26 1b 20 20 e7 20 77  |wk1%+=1.*&.  . w|
00006e80  6b 31 25 3d 64 69 76 25  20 3a 20 77 6b 31 25 2b  |k1%=div% : wk1%+|
00006e90  3d 31 0d 2a 30 1b 20 20  e7 20 77 6b 31 25 3d 61  |=1.*0.  . wk1%=a|
00006ea0  6e 73 25 20 3a 20 77 6b  31 25 2b 3d 31 0d 2a 3a  |ns% : wk1%+=1.*:|
00006eb0  1b 20 20 e7 20 77 6b 31  25 3d 77 6b 30 25 20 3a  |.  . wk1%=wk0% :|
00006ec0  20 77 6b 31 25 2b 3d 31  0d 2a 44 1b 20 20 e7 20  | wk1%+=1.*D.  . |
00006ed0  77 6b 31 25 3d 77 6b 32  25 20 3a 20 77 6b 31 25  |wk1%=wk2% : wk1%|
00006ee0  2b 3d 31 0d 2a 4e 04 0d  2a 58 08 ed 20 49 25 0d  |+=1.*N..*X.. I%.|
00006ef0  2a 62 04 0d 2a 6c 0f e3  20 49 25 3d 30 20 b8 20  |*b..*l.. I%=0 . |
00006f00  31 34 0d 2a 76 04 0d 2a  80 1a 20 20 e7 20 77 6b  |14.*v..*..  . wk|
00006f10  32 25 3d 6e 6f 25 20 3a  20 77 6b 32 25 2b 3d 31  |2%=no% : wk2%+=1|
00006f20  0d 2a 8a 1b 20 20 e7 20  77 6b 32 25 3d 64 69 76  |.*..  . wk2%=div|
00006f30  25 20 3a 20 77 6b 32 25  2b 3d 31 0d 2a 94 1b 20  |% : wk2%+=1.*.. |
00006f40  20 e7 20 77 6b 32 25 3d  61 6e 73 25 20 3a 20 77  | . wk2%=ans% : w|
00006f50  6b 32 25 2b 3d 31 0d 2a  9e 1b 20 20 e7 20 77 6b  |k2%+=1.*..  . wk|
00006f60  32 25 3d 77 6b 30 25 20  3a 20 77 6b 32 25 2b 3d  |2%=wk0% : wk2%+=|
00006f70  31 0d 2a a8 1b 20 20 e7  20 77 6b 32 25 3d 77 6b  |1.*..  . wk2%=wk|
00006f80  31 25 20 3a 20 77 6b 32  25 2b 3d 31 0d 2a b2 04  |1% : wk2%+=1.*..|
00006f90  0d 2a bc 08 ed 20 49 25  0d 2a c6 04 0d 2a d0 4d  |.*... I%.*...*.M|
00006fa0  e7 20 77 6b 30 25 3d 77  6b 31 25 20 3a 20 85 20  |. wk0%=wk1% : . |
00006fb0  30 2c 28 22 20 69 64 65  6e 74 69 63 61 6c 20 77  |0,(" identical w|
00006fc0  6f 72 6b 20 72 65 67 69  73 74 65 72 73 20 69 6e  |ork registers in|
00006fd0  20 64 69 76 69 73 69 6f  6e 20 6d 61 63 72 6f 2e  | division macro.|
00006fe0  2e 2e 20 22 29 20 3a 20  e0 0d 2a da 4d e7 20 77  |.. ") : ..*.M. w|
00006ff0  6b 31 25 3d 77 6b 32 25  20 3a 20 85 20 30 2c 28  |k1%=wk2% : . 0,(|
00007000  22 20 69 64 65 6e 74 69  63 61 6c 20 77 6f 72 6b  |" identical work|
00007010  20 72 65 67 69 73 74 65  72 73 20 69 6e 20 64 69  | registers in di|
00007020  76 69 73 69 6f 6e 20 6d  61 63 72 6f 2e 2e 2e 20  |vision macro... |
00007030  22 29 20 3a 20 e0 0d 2a  e4 4d e7 20 77 6b 30 25  |") : ..*.M. wk0%|
00007040  3d 77 6b 32 25 20 3a 20  85 20 30 2c 28 22 20 69  |=wk2% : . 0,(" i|
00007050  64 65 6e 74 69 63 61 6c  20 77 6f 72 6b 20 72 65  |dentical work re|
00007060  67 69 73 74 65 72 73 20  69 6e 20 64 69 76 69 73  |gisters in divis|
00007070  69 6f 6e 20 6d 61 63 72  6f 2e 2e 2e 20 22 29 20  |ion macro... ") |
00007080  3a 20 e0 0d 2a ee 04 0d  2a f8 52 e7 20 6e 6f 25  |: ..*...*.R. no%|
00007090  3d 64 69 76 25 20 3a 20  85 20 30 2c 28 22 20 69  |=div% : . 0,(" i|
000070a0  64 65 6e 74 69 63 61 6c  20 61 6e 61 6c 79 74 69  |dentical analyti|
000070b0  63 61 6c 20 72 65 67 69  73 74 65 72 73 20 69 6e  |cal registers in|
000070c0  20 64 69 76 69 73 69 6f  6e 20 6d 61 63 72 6f 2e  | division macro.|
000070d0  2e 2e 20 22 29 20 3a 20  e0 0d 2b 02 53 e7 20 64  |.. ") : ..+.S. d|
000070e0  69 76 25 3d 61 6e 73 25  20 3a 20 85 20 30 2c 28  |iv%=ans% : . 0,(|
000070f0  22 20 69 64 65 6e 74 69  63 61 6c 20 61 6e 61 6c  |" identical anal|
00007100  79 74 69 63 61 6c 20 72  65 67 69 73 74 65 72 73  |ytical registers|
00007110  20 69 6e 20 64 69 76 69  73 69 6f 6e 20 6d 61 63  | in division mac|
00007120  72 6f 2e 2e 2e 20 22 29  20 3a 20 e0 0d 2b 0c 52  |ro... ") : ..+.R|
00007130  e7 20 6e 6f 25 3d 61 6e  73 25 20 3a 20 85 20 30  |. no%=ans% : . 0|
00007140  2c 28 22 20 69 64 65 6e  74 69 63 61 6c 20 61 6e  |,(" identical an|
00007150  61 6c 79 74 69 63 61 6c  20 72 65 67 69 73 74 65  |alytical registe|
00007160  72 73 20 69 6e 20 64 69  76 69 73 69 6f 6e 20 6d  |rs in division m|
00007170  61 63 72 6f 2e 2e 2e 20  22 29 20 3a 20 e0 0d 2b  |acro... ") : ..+|
00007180  16 04 0d 2b 20 0f 5b 20  4f 50 54 20 70 61 73 73  |...+ .[ OPT pass|
00007190  25 0d 2b 2a 22 53 54 4d  46 41 20 20 20 28 73 70  |%.+*"STMFA   (sp|
000071a0  29 21 2c 7b 77 6b 30 25  2c 77 6b 31 25 2c 77 6b  |)!,{wk0%,wk1%,wk|
000071b0  32 25 7d 0d 2b 34 04 0d  2b 3e 26 4c 44 52 20 20  |2%}.+4..+>&LDR  |
000071c0  20 20 20 20 20 77 6b 30  25 2c 73 77 6d 5f 72 64  |     wk0%,swm_rd|
000071d0  69 76 5f 6c 69 73 74 5f  62 61 73 65 25 0d 2b 48  |iv_list_base%.+H|
000071e0  41 80 53 20 20 20 20 20  20 77 6b 31 25 2c 64 69  |A.S      wk1%,di|
000071f0  76 25 2c 23 31 3c 3c 33  31 20 20 20 20 20 20 20  |v%,#1<<31       |
00007200  20 20 20 20 20 20 20 20  20 20 20 3b 20 63 68 65  |           ; che|
00007210  63 6b 20 69 66 20 6e 65  67 61 74 69 76 65 0d 2b  |ck if negative.+|
00007220  52 45 52 53 42 4d 49 20  20 20 20 20 64 69 76 25  |RERSBMI     div%|
00007230  2c 64 69 76 25 2c 23 30  20 20 20 20 20 20 20 20  |,div%,#0        |
00007240  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00007250  69 66 20 73 6f 20 6d 61  6b 65 20 70 6f 73 69 74  |if so make posit|
00007260  69 76 65 0d 2b 5c 49 4c  44 52 20 20 20 20 20 20  |ive.+\ILDR      |
00007270  20 77 6b 32 25 2c 5b 77  6b 30 25 2c 64 69 76 25  | wk2%,[wk0%,div%|
00007280  2c 4c 53 4c 23 32 5d 20  20 20 20 20 20 20 20 20  |,LSL#2]         |
00007290  20 20 20 20 3b 20 6c 6f  61 64 20 6e 75 6d 62 65  |    ; load numbe|
000072a0  72 20 66 72 6f 6d 20 74  61 62 6c 65 0d 2b 66 63  |r from table.+fc|
000072b0  4d 55 4c 20 20 20 20 20  20 20 61 6e 73 25 2c 77  |MUL       ans%,w|
000072c0  6b 32 25 2c 6e 6f 25 20  20 20 20 20 20 20 20 20  |k2%,no%         |
000072d0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 70  |             ; p|
000072e0  65 72 66 72 6f 6d 20 6d  75 6c 74 69 70 6c 69 63  |erfrom multiplic|
000072f0  61 74 69 6f 6e 20 6f 66  20 6e 75 6d 62 65 72 2a  |ation of number*|
00007300  28 31 2f 64 69 76 69 73  6f 72 29 3c 3c 31 36 0d  |(1/divisor)<<16.|
00007310  2b 70 04 0d 2b 7a 15 43  4d 50 20 20 20 20 20 20  |+p..+z.CMP      |
00007320  20 77 6b 31 25 2c 23 30  0d 2b 84 1a 52 53 42 4d  | wk1%,#0.+..RSBM|
00007330  49 20 20 20 20 20 61 6e  73 25 2c 61 6e 73 25 2c  |I     ans%,ans%,|
00007340  23 30 0d 2b 8e 04 0d 2b  98 22 4c 44 4d 46 41 20  |#0.+...+."LDMFA |
00007350  20 20 28 73 70 29 21 2c  7b 77 6b 30 25 2c 77 6b  |  (sp)!,{wk0%,wk|
00007360  31 25 2c 77 6b 32 25 7d  0d 2b a2 04 0d 2b ac 05  |1%,wk2%}.+...+..|
00007370  5d 0d 2b b6 06 3d 30 0d  2b c0 04 0d ff 00 00 01  |].+..=0.+.......|
00007380  01 01 00 02 2c 0f 00 00  0c 10 1f e5 0c 10 81 e0  |....,...........|
00007390  14 10 0f e5 18 d0 4f e2  00 40 2d e9 20 00 1f e5  |......O..@-. ...|
000073a0  43 10 8f e2 09 20 a0 e3  d4 00 00 ef 24 00 9f e5  |C.... ......$...|
000073b0  34 10 1f e5 01 00 80 e0  34 10 8f e2 09 20 a0 e3  |4.......4.... ..|
000073c0  d4 00 00 ef 2c 00 a0 e3  23 00 cf e5 08 00 8f e2  |....,...#.......|
000073d0  05 00 00 ef 00 80 bd e8  51 73 00 00 2a 42 61 73  |........Qs..*Bas|
000073e0  69 63 20 2d 71 75 69 74  20 20 40 00 00 00 00 00  |ic -quit  @.....|
000073f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00007400