Home » Archimedes archive » Archimedes World » AW-1991-11.adf » November91 » !AWNov91/Goodies/3DGraphics/MODULESRC

!AWNov91/Goodies/3DGraphics/MODULESRC

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 » Archimedes archive » Archimedes World » AW-1991-11.adf » November91
Filename: !AWNov91/Goodies/3DGraphics/MODULESRC
Read OK:
File size: 24AB bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >MODULESRC
   15REM LEN Archimedes World November 1991
   20DIM code% &3500
   30REM registers
   40lhs=0
   50rhs=1
   60div=2
   70mod=3
   80divsgn=4
   90modsgn=5
  100count=6
  110index=7
  120sp=13
  130link=14
  140:
  150FOR pass=4 TO 7 STEP 3
  160O%=code%
  170P%=0
  180[ OPT pass
  190ALIGN
  200equd 0                        ;start code
  210equd initialise_code          ;init code
  220equd finialise_code           ;quit code
  230equd 0                        ;service code
  240equd title_string             ;module title
  250equd help_string              ;help text
  260equd 0                        ;command block
  270equd &200                     ;swi chunk base
  280equd swi_handle               ;swi handler
  290equd swi_decode               ;swi decoding table
  300equd 0                        ;swi decoding code
  310;
  320.title_string
  330;
  340; string given in *modules
  350;
  360equs "3DGraphics"
  370equb 0
  380align
  390;
  400.help_string
  410;
  420; string given in *help modules
  430;
  440equs "VectorGraphics"
  450equb 9
  460equs "0.03 (09 Apr 1991)"
  470equb 0
  480align
  490;
  500.initialise_code
  510;
  520; initialise module code
  530;
  540stmfd (sp)!,{R0,link}
  550mov r0,#45
  560bl set_viewangle
  570mov r0,#1
  580bl set_xangle
  590bl set_yangle
  600bl set_zangle
  610ldmfd (sp)!,{R0,pc}
  620:
  630.finialise_code
  640;
  650;quit module code
  660;
  670stmfd (sp)!,{link}
  680ldmfd (sp)!,{pc}
  690:
  700align
  710.swi_decode
  720;
  730; sys command table the first is the block command
  740;
  750equs "Vector"
  760equb 0
  770equs "Plot"
  780equb 0
  790equs "SetViewangle"
  800equb 0
  810equs "SetXangle"
  820equb 0
  830equs "SetYangle"
  840equb 0
  850equs "SetZangle"
  860equb 0
  870equs "CalculateObject"
  880equb 0
  890equs "PlotObjectLine"
  900equb 0
  910equs "PlotObjectSolid"
  920equb 0
  930equb 0
  940align
  950;
  960.swi_handle
  970;
  980; setion to jump to correct rountine on sys
  990;
 1000cmp r11,#(endofjumptable-startofjumptable)/4
 1010addcc pc,pc,r11,lsl#2
 1020b error
 1030;
 1040.startofjumptable
 1050
 1060b plot_code
 1070b setview_code
 1080b setx_code
 1090b sety_code
 1100b setz_code
 1110b calcobject_code
 1120b plotobjectL_code
 1130b plotobjectS_code
 1140
 1150.endofjumptable
 1160mov pc,link
 1170;
 1180; illegal sys error
 1190;
 1200.error
 1210stmfd (sp)!,{link}
 1220swi 1
 1230equb 10
 1240equs "SWI not known"
 1250equb 13
 1260equb 10
 1270equb 0
 1280align
 1290ldmfd (sp)!,{pc}
 1300;
 1310; following procedures are sys calls
 1320;
 1330.plot_code
 1340stmfd (sp)!,{link}
 1350bl transfer
 1360ldmfd (sp)!,{pc}
 1370;
 1380.setview_code
 1390stmfd (sp)!,{link}
 1400bl set_viewangle
 1410ldmfd (sp)!,{pc}
 1420;
 1430.setx_code
 1440stmfd (sp)!,{link}
 1450bl set_xangle
 1460ldmfd (sp)!,{pc}
 1470;
 1480.sety_code
 1490stmfd (sp)!,{link}
 1500bl set_yangle
 1510ldmfd (sp)!,{pc}
 1520;
 1530.setz_code
 1540stmfd (sp)!,{link}
 1550bl set_zangle
 1560ldmfd (sp)!,{pc}
 1570;
 1580.calcobject_code
 1590stmfd (sp)!,{link}
 1600bl calc_object
 1610ldmfd (sp)!,{pc}
 1620;
 1630.plotobjectL_code
 1640stmfd (sp)!,{link}
 1650bl plot_objectL
 1660ldmfd (sp)!,{pc}
 1670;
 1680.plotobjectS_code
 1690stmfd (sp)!,{link}
 1700bl plot_objectS
 1710ldmfd (sp)!,{pc}
 1720align
 1730.getsin
 1740;
 1750; on entry r0 is angle in degrees
 1760; on exit r6 is int value of angle
 1770;
 1780stmfd (sp)!,{r0,r1,link}
 1790mov r0,r0,lsl#2
 1800adr r1,sin
 1810ldr r6,[r1,r0]
 1820ldmfd (sp)!,{r0,r1,pc}
 1830.sin
 1840;
 1850]
 1860A=O%
 1870FOR sin%=0 TO 359
 1880IF SINRAD(sin%)<0.0001 AND SINRAD(sin%)>-0.0001 THEN
 1890!O%=2
 1900ELSE
 1910!O%=(1/SINRAD(sin%))*1024
 1920ENDIF
 1930O%=O%+4
 1940P%=P%+4
 1950NEXT
 1960[
 1970;
 1980opt pass
 1990.getcos
 2000;
 2010; on entry r0 is angle in degrees
 2020; on exit r7 is int value of angle
 2030;
 2040stmfd (sp)!,{r0,r1,link}
 2050mov r0,r0,lsl#2
 2060adr r1,cos
 2070ldr r7,[r1,r0]
 2080ldmfd (sp)!,{r0,r1,pc}
 2090.cos
 2100;
 2110]
 2120FOR cos%=0 TO 359
 2130IF COSRAD(cos%)<0.0001 AND COSRAD(cos%)>-0.0001 THEN
 2140!O%=2
 2150ELSE
 2160!O%=(1/COSRAD(cos%))*1024
 2170ENDIF
 2180O%=O%+4
 2190P%=P%+4
 2200NEXT
 2210[
 2220;
 2230opt pass
 2240;
 2250.divide
 2260; r0 lhs
 2270; r1 rhs
 2280; r2 on exit lhs DIV rhs
 2290; r3 on exit lhs MOD rhs
 2300; answer+0 DIV
 2310; answer+4 MOD
 2320;
 2330stmfd (sp)!,{r0-r6,link}
 2340eors divsgn,lhs,rhs
 2350movs modsgn,lhs
 2360rsbmi lhs,lhs,#0
 2370teq rhs,#0
 2380rsbmi rhs,rhs,#0
 2390bl udiv32
 2400teq divsgn,#0
 2410rsbmi div,div,#0
 2420teq modsgn,#0
 2430rsbmi mod,mod,#0
 2440adr count,answer
 2450stmia count,{mod,div}
 2460ldmfd (sp)!,{r0-r6,pc}
 2470;
 2480.udiv32
 2490teq rhs,#0
 2500beq diverr
 2510mov mod,#0
 2520mov div,#0
 2530mov count,#32
 2540;
 2550.divlp1
 2560subs count,count,#1
 2570moveq pc,link
 2580movs lhs,lhs,asl#1
 2590bpl divlp1
 2600;
 2610.divlp2
 2620movs lhs,lhs,asl#1
 2630adc mod,mod,mod
 2640cmp mod,rhs
 2650subcs mod,mod,rhs
 2660adc div,div,div
 2670subs count,count,#1
 2680bne divlp2
 2690;
 2700.diverr
 2710mov pc,link
 2720;
 2730.set_xangle
 2740stmfd (sp)!,{r0-r2,link}
 2750adr r2,answer
 2760mov r1,#90
 2770bl divide
 2780ldr r1,[r2,#4]
 2790cmp r1,#0
 2800addeq r0,r0,#1
 2810mov r1,#360
 2820bl divide
 2830ldr r0,[r2,#4]
 2840adr r1,xangle
 2850str  r0,[r1]
 2860ldmfd (sp)!,{r0-r2,pc}
 2870;
 2880.set_yangle
 2890stmfd (sp)!,{r0-r2,link}
 2900adr r2,answer
 2910mov r1,#90
 2920bl divide
 2930ldr r1,[r2,#4]
 2940cmp r1,#0
 2950addeq r0,r0,#1
 2960mov r1,#360
 2970bl divide
 2980ldr r0,[r2,#4]
 2990adr r1,yangle
 3000str r0,[r1]
 3010ldmfd (sp)!,{r0-r2,pc}
 3020;
 3030.set_zangle
 3040stmfd (sp)!,{r0-r2,link}
 3050adr r2,answer
 3060mov r1,#90
 3070bl divide
 3080ldr r1,[r2,#4]
 3090cmp r1,#0
 3100addeq r0,r0,#1
 3110mov r1,#360
 3120bl divide
 3130ldr r0,[r2,#4]
 3140adr r1,zangle
 3150str r0,[r1]
 3160ldmfd (sp)!,{r0-r2,pc}
 3170;
 3180.set_viewangle
 3190stmfd (sp)!,{r0-r2,link}
 3200adr r2,answer
 3210mov r1,#90
 3220bl divide
 3230ldr r1,[r2,#4]
 3240cmp r1,#0
 3250addeq r0,r0,#1
 3260mov r1,#360
 3270bl divide
 3280ldr r0,[r2,#4]
 3290adr r1,viewangle
 3300str r0,[r1]
 3310ldmfd (sp)!,{r0-r2,pc}
 3320;
 3330.plot3D
 3340;
 3350;  converts x,y,z position to x,y position and plots point
 3360;
 3370stmfd (sp)!,{r0-r3,link}
 3380bl calc_pos
 3390adr r3,plotaction
 3400ldmia r3,{r0-r2}
 3410swi "OS_Plot"
 3420ldmfd (sp)!,{r0-r3,pc}
 3430;
 3440.transfer
 3450;
 3460;  transfers r0-r3 to storage points, plotaction,xpos,ypos,zpos
 3470;
 3480stmfd (sp)!,{r0-r4,link}
 3490adr r4,plotaction
 3500stmia r4,{r0-r3}
 3510bl plot3D
 3520ldmfd (sp)!,{r0-r4,pc}
 3530
 3540;
 3550.answer
 3560equd 0
 3570equd 0
 3580.viewangle
 3590equd 0
 3600.xangle
 3610equd 0
 3620.yangle
 3630equd 0
 3640.zangle
 3650equd 0
 3660.plotaction
 3670equd 0
 3680.xpos
 3690equd 0
 3700.ypos
 3710equd 0
 3720.zpos
 3730equd 0
 3740;
 3750.readpos
 3760;
 3770; reads point storage block and *1024
 3780; stores result in r8-r10
 3790;
 3800stmfd (sp)!,{r0,link}
 3810adr r0,xpos
 3820ldmia r0,{r8-r10}
 3830cmp r8,#0
 3840addeq r8,r8,#1
 3850cmp r9,#0
 3860addeq r9,r9,#1
 3870cmp r10,#0
 3880addeq r10,r10,#1
 3890mov r8,r8,asl#10
 3900mov r9,r9,asl#10
 3910mov r10,r10,asl#10
 3920.skip
 3930ldmfd (sp)!,{r0,pc}
 3940;
 3950.calc_pos
 3960;
 3970; calculates 2D position from all given information
 3980;
 3990stmfd (sp)!,{r0-r10,link}
 4000bl readpos
 4010adr r0,zangle
 4020ldr r0,[r0]
 4030bl getcos
 4040bl getsin
 4050mov r0,r8
 4060mov r1,r7
 4070bl divide
 4080adr r0,answer
 4090ldr r3,[r0]
 4100mov r0,r9
 4110mov r1,r6
 4120bl divide
 4130adr r0,answer
 4140ldr r4,[r0]
 4150sub r0,r3,r4
 4160adr r1,xpos
 4170str r0,[r1]
 4180mov r0,r8
 4190mov r1,r6
 4200bl divide
 4210adr r0,answer
 4220ldr r3,[r0]
 4230mov r0,r9
 4240mov r1,r7
 4250bl divide
 4260adr r0,answer
 4270ldr r4,[r0]
 4280add r0,r3,r4
 4290adr r1,ypos
 4300str r0,[r1]
 4310mov r10,r10,asr#10
 4320adr r1,zpos
 4330str r10,[r1]
 4340;
 4350bl readpos
 4360adr r0,yangle
 4370ldr r0,[r0]
 4380bl getcos
 4390bl getsin
 4400mov r0,r8
 4410mov r1,r7
 4420bl divide
 4430adr r0,answer
 4440ldr r3,[r0]
 4450mov r0,r10
 4460mov r1,r6
 4470bl divide
 4480adr r0,answer
 4490ldr r4,[r0]
 4500add r0,r3,r4
 4510adr r1,xpos
 4520str r0,[r1]
 4530mov r9,r9,asr#10
 4540adr r1,ypos
 4550str r9,[r1]
 4560mov r0,r10
 4570mov r1,r7
 4580bl divide
 4590adr r0,answer
 4600ldr r3,[r0]
 4610mov r0,r8
 4620mov r1,r6
 4630bl divide
 4640adr r0,answer
 4650ldr r4,[r0]
 4660sub r0,r3,r4
 4670adr r1,zpos
 4680str r0,[r1]
 4690;
 4700bl readpos
 4710adr r0,xangle
 4720ldr r0,[r0]
 4730bl getcos
 4740bl getsin
 4750mov r8,r8,asr#10
 4760adr r1,xpos
 4770str r8,[r1]
 4780mov r0,r9
 4790mov r1,r7
 4800bl divide
 4810adr r0,answer
 4820ldr r3,[r0]
 4830mov r0,r10
 4840mov r1,r6
 4850bl divide
 4860adr r0,answer
 4870ldr r4,[r0]
 4880sub r0,r3,r4
 4890adr r1,ypos
 4900str r0,[r1]
 4910mov r0,r9
 4920mov r1,r6
 4930bl divide
 4940adr r0,answer
 4950ldr r3,[r0]
 4960mov r0,10
 4970mov r1,r7
 4980bl divide
 4990adr r0,answer
 5000ldr r4,[r0]
 5010add r0,r3,r4
 5020adr r1,zpos
 5030str r0,[r1]
 5040;
 5050bl readpos
 5060adr r0,viewangle
 5070ldr r0,[r0]
 5080bl getcos
 5090bl getsin
 5100mov r0,r10
 5110mov r1,r7
 5120bl divide
 5130adr r0,answer
 5140ldr r3,[r0]
 5150mov r8,r8,asr#10
 5160add r8,r8,r3
 5170adr r1,xpos
 5180str r8,[r1]
 5190;
 5200mov r0,r10
 5210mov r1,r6
 5220bl divide
 5230adr r0,answer
 5240ldr r3,[r0]
 5250mov r9,r9,asr#10
 5260add r9,r9,r3
 5270adr r1,ypos
 5280str r9,[r1]
 5290;
 5300ldmfd (sp)!,{r0-r10,pc}
 5310;
 5320.calc_object
 5330stmfd (sp)!,{r0-r6,link}
 5340; r0 is pointer to co-ordinate block
 5350; r1 is pointer to plot block
 5360stmfd (sp)!,{r0}
 5370mov r0,r2
 5380bl set_xangle
 5390mov r0,r3
 5400bl set_yangle
 5410mov r0,r4
 5420bl set_zangle
 5430mov r0,r5
 5440bl set_viewangle
 5450ldmfd (sp)!,{r0}
 5460adr r2,plotaction
 5470.return
 5480ldmia r0!,{r3-r6}
 5490cmp r3,#256
 5500streq r3,[r1,#0]
 5510ldmeqfd (sp)!,{r0-r6,pc}
 5520stmia r2,{r3-r6}
 5530bl calc_pos
 5540ldmia r2,{r3-r5}
 5550stmia r1!,{r3-r5}
 5560b return
 5570;
 5580.plot_objectL
 5590stmfd (sp)!,{r0-r2,link}
 5600; r0 is pointer to plot block
 5610mov r3,r0
 5620.returnplot
 5630ldmia r3!,{r0-r2}
 5640cmp r0,#256
 5650ldmeqfd (sp)!,{r0-r2,pc}
 5660swi "OS_Plot"
 5670b returnplot
 5680;
 5690.plot_objectS
 5700stmfd (sp)!,{link}
 5710; r0 is pointer to plot block
 5720ldmfd (sp)!,{pc}
 5730]
 5740NEXT
 5750PROCsave
 5760END
 5770:
 5780DEFPROCsave
 5790OSCLI "SAVE 3DGraphics "+STR$~code%+" "+STR$~O%
 5800OSCLI "SETTYPE 3DGraphics FFA"
 5810ENDPROC

� >MODULESRC
&� � Archimedes World November 1991
� code% &3500
� registers
(	lhs=0
2	rhs=1
<	div=2
F	mod=3
Pdivsgn=4
Zmodsgn=5
dcount=6
nindex=7
x	sp=13
�link=14
�:
�� pass=4 � 7 � 3
�O%=code%
�P%=0
�[ OPT pass
�	ALIGN
�-equd 0                        ;start code
�,equd initialise_code          ;init code
�,equd finialise_code           ;quit code
�/equd 0                        ;service code
�/equd title_string             ;module title
�,equd help_string              ;help text
0equd 0                        ;command block
1equd &200                     ;swi chunk base
.equd swi_handle               ;swi handler
"5equd swi_decode               ;swi decoding table
,4equd 0                        ;swi decoding code
6;
@.title_string
J;
T; string given in *modules
^;
hequs "3DGraphics"
r
equb 0
|	align
�;
�.help_string
�;
�#; string given in *help modules
�;
�equs "VectorGraphics"
�
equb 9
�equs "0.03 (09 Apr 1991)"
�
equb 0
�	align
�;
�.initialise_code
�;
; initialise module code
;
stmfd (sp)!,{R0,link}
&mov r0,#45
0bl set_viewangle
:
mov r0,#1
Dbl set_xangle
Nbl set_yangle
Xbl set_zangle
bldmfd (sp)!,{R0,pc}
l:
v.finialise_code
�;
�;quit module code
�;
�stmfd (sp)!,{link}
�ldmfd (sp)!,{pc}
�:
�	align
�.swi_decode
�;
�6; sys command table the first is the block command
�;
�equs "Vector"
�
equb 0
equs "Plot"

equb 0
equs "SetViewangle"
 
equb 0
*equs "SetXangle"
4
equb 0
>equs "SetYangle"
H
equb 0
Requs "SetZangle"
\
equb 0
fequs "CalculateObject"
p
equb 0
zequs "PlotObjectLine"
�
equb 0
�equs "PlotObjectSolid"
�
equb 0
�
equb 0
�	align
�;
�.swi_handle
�;
�/; setion to jump to correct rountine on sys
�;
�0cmp r11,#(endofjumptable-startofjumptable)/4
�addcc pc,pc,r11,lsl#2
�b error
;
.startofjumptable

$b plot_code
.b setview_code
8b setx_code
Bb sety_code
Lb setz_code
Vb calcobject_code
`b plotobjectL_code
jb plotobjectS_code
t
~.endofjumptable
�mov pc,link
�;
�; illegal sys error
�;
�
.error
�stmfd (sp)!,{link}
�	swi 1
�equb 10
�equs "SWI not known"
�equb 13
�equb 10
�
equb 0
	align

ldmfd (sp)!,{pc}
;
(; following procedures are sys calls
(;
2.plot_code
<stmfd (sp)!,{link}
Fbl transfer
Pldmfd (sp)!,{pc}
Z;
d.setview_code
nstmfd (sp)!,{link}
xbl set_viewangle
�ldmfd (sp)!,{pc}
�;
�.setx_code
�stmfd (sp)!,{link}
�bl set_xangle
�ldmfd (sp)!,{pc}
�;
�.sety_code
�stmfd (sp)!,{link}
�bl set_yangle
�ldmfd (sp)!,{pc}
�;
�.setz_code
stmfd (sp)!,{link}
bl set_zangle
ldmfd (sp)!,{pc}
";
,.calcobject_code
6stmfd (sp)!,{link}
@bl calc_object
Jldmfd (sp)!,{pc}
T;
^.plotobjectL_code
hstmfd (sp)!,{link}
rbl plot_objectL
|ldmfd (sp)!,{pc}
�;
�.plotobjectS_code
�stmfd (sp)!,{link}
�bl plot_objectS
�ldmfd (sp)!,{pc}
�	align
�.getsin
�;
�%; on entry r0 is angle in degrees
�&; on exit r6 is int value of angle
�;
�stmfd (sp)!,{r0,r1,link}
�mov r0,r0,lsl#2
adr r1,sin
ldr r6,[r1,r0]
ldmfd (sp)!,{r0,r1,pc}
&.sin
0;
:]
DA=O%
N� sin%=0 � 359
X*� ��(sin%)<0.0001 � ��(sin%)>-0.0001 �
b	!O%=2
l�
v!O%=(1/��(sin%))*1024
��
�O%=O%+4
�P%=P%+4
��
�[
�;
�opt pass
�.getcos
�;
�%; on entry r0 is angle in degrees
�&; on exit r7 is int value of angle
�;
�stmfd (sp)!,{r0,r1,link}
mov r0,r0,lsl#2
adr r1,cos
ldr r7,[r1,r0]
 ldmfd (sp)!,{r0,r1,pc}
*.cos
4;
>]
H� cos%=0 � 359
R*� ��(cos%)<0.0001 � ��(cos%)>-0.0001 �
\	!O%=2
f�
p!O%=(1/��(cos%))*1024
z�
�O%=O%+4
�P%=P%+4
��
�[
�;
�opt pass
�;
�.divide
�; r0 lhs
�; r1 rhs
�; r2 on exit lhs � rhs
�; r3 on exit lhs � rhs
�; answer+0 �
	; answer+4 �
	;
	stmfd (sp)!,{r0-r6,link}
	$eors divsgn,lhs,rhs
	.movs modsgn,lhs
	8rsbmi lhs,lhs,#0
	Bteq rhs,#0
	Lrsbmi rhs,rhs,#0
	V
bl udiv32
	`teq divsgn,#0
	jrsbmi div,div,#0
	tteq modsgn,#0
	~rsbmi mod,mod,#0
	�adr count,answer
	�stmia count,{mod,div}
	�ldmfd (sp)!,{r0-r6,pc}
	�;
	�.udiv32
	�teq rhs,#0
	�beq diverr
	�mov mod,#0
	�mov div,#0
	�mov count,#32
	�;
	�.divlp1
subs count,count,#1

moveq pc,link
movs lhs,lhs,asl#1
bpl divlp1
(;
2.divlp2
<movs lhs,lhs,asl#1
Fadc mod,mod,mod
Pcmp mod,rhs
Zsubcs mod,mod,rhs
dadc div,div,div
nsubs count,count,#1
xbne divlp2
�;
�.diverr
�mov pc,link
�;
�.set_xangle
�stmfd (sp)!,{r0-r2,link}
�adr r2,answer
�mov r1,#90
�
bl divide
�ldr r1,[r2,#4]
�
cmp r1,#0
�addeq r0,r0,#1
�mov r1,#360

bl divide
ldr r0,[r2,#4]
adr r1,xangle
"str  r0,[r1]
,ldmfd (sp)!,{r0-r2,pc}
6;
@.set_yangle
Jstmfd (sp)!,{r0-r2,link}
Tadr r2,answer
^mov r1,#90
h
bl divide
rldr r1,[r2,#4]
|
cmp r1,#0
�addeq r0,r0,#1
�mov r1,#360
�
bl divide
�ldr r0,[r2,#4]
�adr r1,yangle
�str r0,[r1]
�ldmfd (sp)!,{r0-r2,pc}
�;
�.set_zangle
�stmfd (sp)!,{r0-r2,link}
�adr r2,answer
�mov r1,#90
�
bl divide
ldr r1,[r2,#4]

cmp r1,#0
addeq r0,r0,#1
&mov r1,#360
0
bl divide
:ldr r0,[r2,#4]
Dadr r1,zangle
Nstr r0,[r1]
Xldmfd (sp)!,{r0-r2,pc}
b;
l.set_viewangle
vstmfd (sp)!,{r0-r2,link}
�adr r2,answer
�mov r1,#90
�
bl divide
�ldr r1,[r2,#4]
�
cmp r1,#0
�addeq r0,r0,#1
�mov r1,#360
�
bl divide
�ldr r0,[r2,#4]
�adr r1,viewangle
�str r0,[r1]
�ldmfd (sp)!,{r0-r2,pc}
�;

.plot3D

;

>;  converts x,y,z position to x,y position and plots point

 ;

*stmfd (sp)!,{r0-r3,link}

4bl calc_pos

>adr r3,plotaction

Hldmia r3,{r0-r2}

Rswi "OS_Plot"

\ldmfd (sp)!,{r0-r3,pc}

f;

p
.transfer

z;

�C;  transfers r0-r3 to storage points, plotaction,xpos,ypos,zpos

�;

�stmfd (sp)!,{r0-r4,link}

�adr r4,plotaction

�stmia r4,{r0-r3}

�
bl plot3D

�ldmfd (sp)!,{r0-r4,pc}

�

�;

�.answer

�
equd 0

�
equd 0

�.viewangle

equd 0
.xangle

equd 0
$.yangle
.
equd 0
8.zangle
B
equd 0
L.plotaction
V
equd 0
`	.xpos
j
equd 0
t	.ypos
~
equd 0
�	.zpos
�
equd 0
�;
�.readpos
�;
�); reads point storage block and *1024
�; stores result in r8-r10
�;
�stmfd (sp)!,{r0,link}
�adr r0,xpos
�ldmia r0,{r8-r10}
�
cmp r8,#0
addeq r8,r8,#1


cmp r9,#0
addeq r9,r9,#1
cmp r10,#0
(addeq r10,r10,#1
2mov r8,r8,asl#10
<mov r9,r9,asl#10
Fmov r10,r10,asl#10
P	.skip
Zldmfd (sp)!,{r0,pc}
d;
n
.calc_pos
x;
�7; calculates 2D position from all given information
�;
�stmfd (sp)!,{r0-r10,link}
�bl readpos
�adr r0,zangle
�ldr r0,[r0]
�
bl getcos
�
bl getsin
�
mov r0,r8
�
mov r1,r7
�
bl divide
�adr r0,answer
�ldr r3,[r0]

mov r0,r9

mov r1,r6

bl divide
"adr r0,answer
,ldr r4,[r0]
6sub r0,r3,r4
@adr r1,xpos
Jstr r0,[r1]
T
mov r0,r8
^
mov r1,r6
h
bl divide
radr r0,answer
|ldr r3,[r0]
�
mov r0,r9
�
mov r1,r7
�
bl divide
�adr r0,answer
�ldr r4,[r0]
�add r0,r3,r4
�adr r1,ypos
�str r0,[r1]
�mov r10,r10,asr#10
�adr r1,zpos
�str r10,[r1]
�;
�bl readpos
adr r0,yangle
ldr r0,[r0]

bl getcos
&
bl getsin
0
mov r0,r8
:
mov r1,r7
D
bl divide
Nadr r0,answer
Xldr r3,[r0]
bmov r0,r10
l
mov r1,r6
v
bl divide
�adr r0,answer
�ldr r4,[r0]
�add r0,r3,r4
�adr r1,xpos
�str r0,[r1]
�mov r9,r9,asr#10
�adr r1,ypos
�str r9,[r1]
�mov r0,r10
�
mov r1,r7
�
bl divide
�adr r0,answer
�ldr r3,[r0]

mov r0,r8

mov r1,r6

bl divide
 adr r0,answer
*ldr r4,[r0]
4sub r0,r3,r4
>adr r1,zpos
Hstr r0,[r1]
R;
\bl readpos
fadr r0,xangle
pldr r0,[r0]
z
bl getcos
�
bl getsin
�mov r8,r8,asr#10
�adr r1,xpos
�str r8,[r1]
�
mov r0,r9
�
mov r1,r7
�
bl divide
�adr r0,answer
�ldr r3,[r0]
�mov r0,r10
�
mov r1,r6
�
bl divide
�adr r0,answer
ldr r4,[r0]
sub r0,r3,r4
adr r1,ypos
$str r0,[r1]
.
mov r0,r9
8
mov r1,r6
B
bl divide
Ladr r0,answer
Vldr r3,[r0]
`
mov r0,10
j
mov r1,r7
t
bl divide
~adr r0,answer
�ldr r4,[r0]
�add r0,r3,r4
�adr r1,zpos
�str r0,[r1]
�;
�bl readpos
�adr r0,viewangle
�ldr r0,[r0]
�
bl getcos
�
bl getsin
�mov r0,r10
�
mov r1,r7

bl divide

adr r0,answer
ldr r3,[r0]
mov r8,r8,asr#10
(add r8,r8,r3
2adr r1,xpos
<str r8,[r1]
F;
Pmov r0,r10
Z
mov r1,r6
d
bl divide
nadr r0,answer
xldr r3,[r0]
�mov r9,r9,asr#10
�add r9,r9,r3
�adr r1,ypos
�str r9,[r1]
�;
�ldmfd (sp)!,{r0-r10,pc}
�;
�.calc_object
�stmfd (sp)!,{r0-r6,link}
�(; r0 is pointer to co-ordinate block
�!; r1 is pointer to plot block
�stmfd (sp)!,{r0}
�
mov r0,r2
bl set_xangle

mov r0,r3
bl set_yangle
"
mov r0,r4
,bl set_zangle
6
mov r0,r5
@bl set_viewangle
Jldmfd (sp)!,{r0}
Tadr r2,plotaction
^.return
hldmia r0!,{r3-r6}
rcmp r3,#256
|streq r3,[r1,#0]
�ldmeqfd (sp)!,{r0-r6,pc}
�stmia r2,{r3-r6}
�bl calc_pos
�ldmia r2,{r3-r5}
�stmia r1!,{r3-r5}
�b return
�;
�.plot_objectL
�stmfd (sp)!,{r0-r2,link}
�!; r0 is pointer to plot block
�
mov r3,r0
�.returnplot
�ldmia r3!,{r0-r2}
cmp r0,#256
ldmeqfd (sp)!,{r0-r2,pc}
swi "OS_Plot"
&b returnplot
0;
:.plot_objectS
Dstmfd (sp)!,{link}
N!; r0 is pointer to plot block
Xldmfd (sp)!,{pc}
b]
l�
v	�save
��
�:
�
��save
�)� "SAVE 3DGraphics "+�~code%+" "+�~O%
�� "SETTYPE 3DGraphics FFA"
��
�
00000000  0d 00 0a 10 f4 20 3e 4d  4f 44 55 4c 45 53 52 43  |..... >MODULESRC|
00000010  0d 00 0f 26 f4 20 a9 20  41 72 63 68 69 6d 65 64  |...&. . Archimed|
00000020  65 73 20 57 6f 72 6c 64  20 4e 6f 76 65 6d 62 65  |es World Novembe|
00000030  72 20 31 39 39 31 0d 00  14 11 de 20 63 6f 64 65  |r 1991..... code|
00000040  25 20 26 33 35 30 30 0d  00 1e 0f f4 20 72 65 67  |% &3500..... reg|
00000050  69 73 74 65 72 73 0d 00  28 09 6c 68 73 3d 30 0d  |isters..(.lhs=0.|
00000060  00 32 09 72 68 73 3d 31  0d 00 3c 09 64 69 76 3d  |.2.rhs=1..<.div=|
00000070  32 0d 00 46 09 6d 6f 64  3d 33 0d 00 50 0c 64 69  |2..F.mod=3..P.di|
00000080  76 73 67 6e 3d 34 0d 00  5a 0c 6d 6f 64 73 67 6e  |vsgn=4..Z.modsgn|
00000090  3d 35 0d 00 64 0b 63 6f  75 6e 74 3d 36 0d 00 6e  |=5..d.count=6..n|
000000a0  0b 69 6e 64 65 78 3d 37  0d 00 78 09 73 70 3d 31  |.index=7..x.sp=1|
000000b0  33 0d 00 82 0b 6c 69 6e  6b 3d 31 34 0d 00 8c 05  |3....link=14....|
000000c0  3a 0d 00 96 14 e3 20 70  61 73 73 3d 34 20 b8 20  |:..... pass=4 . |
000000d0  37 20 88 20 33 0d 00 a0  0c 4f 25 3d 63 6f 64 65  |7 . 3....O%=code|
000000e0  25 0d 00 aa 08 50 25 3d  30 0d 00 b4 0e 5b 20 4f  |%....P%=0....[ O|
000000f0  50 54 20 70 61 73 73 0d  00 be 09 41 4c 49 47 4e  |PT pass....ALIGN|
00000100  0d 00 c8 2d 65 71 75 64  20 30 20 20 20 20 20 20  |...-equd 0      |
00000110  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000120  20 20 3b 73 74 61 72 74  20 63 6f 64 65 0d 00 d2  |  ;start code...|
00000130  2c 65 71 75 64 20 69 6e  69 74 69 61 6c 69 73 65  |,equd initialise|
00000140  5f 63 6f 64 65 20 20 20  20 20 20 20 20 20 20 3b  |_code          ;|
00000150  69 6e 69 74 20 63 6f 64  65 0d 00 dc 2c 65 71 75  |init code...,equ|
00000160  64 20 66 69 6e 69 61 6c  69 73 65 5f 63 6f 64 65  |d finialise_code|
00000170  20 20 20 20 20 20 20 20  20 20 20 3b 71 75 69 74  |           ;quit|
00000180  20 63 6f 64 65 0d 00 e6  2f 65 71 75 64 20 30 20  | code.../equd 0 |
00000190  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000001a0  20 20 20 20 20 20 20 3b  73 65 72 76 69 63 65 20  |       ;service |
000001b0  63 6f 64 65 0d 00 f0 2f  65 71 75 64 20 74 69 74  |code.../equd tit|
000001c0  6c 65 5f 73 74 72 69 6e  67 20 20 20 20 20 20 20  |le_string       |
000001d0  20 20 20 20 20 20 3b 6d  6f 64 75 6c 65 20 74 69  |      ;module ti|
000001e0  74 6c 65 0d 00 fa 2c 65  71 75 64 20 68 65 6c 70  |tle...,equd help|
000001f0  5f 73 74 72 69 6e 67 20  20 20 20 20 20 20 20 20  |_string         |
00000200  20 20 20 20 20 3b 68 65  6c 70 20 74 65 78 74 0d  |     ;help text.|
00000210  01 04 30 65 71 75 64 20  30 20 20 20 20 20 20 20  |..0equd 0       |
00000220  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000230  20 3b 63 6f 6d 6d 61 6e  64 20 62 6c 6f 63 6b 0d  | ;command block.|
00000240  01 0e 31 65 71 75 64 20  26 32 30 30 20 20 20 20  |..1equd &200    |
00000250  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000260  20 3b 73 77 69 20 63 68  75 6e 6b 20 62 61 73 65  | ;swi chunk base|
00000270  0d 01 18 2e 65 71 75 64  20 73 77 69 5f 68 61 6e  |....equd swi_han|
00000280  64 6c 65 20 20 20 20 20  20 20 20 20 20 20 20 20  |dle             |
00000290  20 20 3b 73 77 69 20 68  61 6e 64 6c 65 72 0d 01  |  ;swi handler..|
000002a0  22 35 65 71 75 64 20 73  77 69 5f 64 65 63 6f 64  |"5equd swi_decod|
000002b0  65 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |e               |
000002c0  3b 73 77 69 20 64 65 63  6f 64 69 6e 67 20 74 61  |;swi decoding ta|
000002d0  62 6c 65 0d 01 2c 34 65  71 75 64 20 30 20 20 20  |ble..,4equd 0   |
000002e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000002f0  20 20 20 20 20 3b 73 77  69 20 64 65 63 6f 64 69  |     ;swi decodi|
00000300  6e 67 20 63 6f 64 65 0d  01 36 05 3b 0d 01 40 11  |ng code..6.;..@.|
00000310  2e 74 69 74 6c 65 5f 73  74 72 69 6e 67 0d 01 4a  |.title_string..J|
00000320  05 3b 0d 01 54 1e 3b 20  73 74 72 69 6e 67 20 67  |.;..T.; string g|
00000330  69 76 65 6e 20 69 6e 20  2a 6d 6f 64 75 6c 65 73  |iven in *modules|
00000340  0d 01 5e 05 3b 0d 01 68  15 65 71 75 73 20 22 33  |..^.;..h.equs "3|
00000350  44 47 72 61 70 68 69 63  73 22 0d 01 72 0a 65 71  |DGraphics"..r.eq|
00000360  75 62 20 30 0d 01 7c 09  61 6c 69 67 6e 0d 01 86  |ub 0..|.align...|
00000370  05 3b 0d 01 90 10 2e 68  65 6c 70 5f 73 74 72 69  |.;.....help_stri|
00000380  6e 67 0d 01 9a 05 3b 0d  01 a4 23 3b 20 73 74 72  |ng....;...#; str|
00000390  69 6e 67 20 67 69 76 65  6e 20 69 6e 20 2a 68 65  |ing given in *he|
000003a0  6c 70 20 6d 6f 64 75 6c  65 73 0d 01 ae 05 3b 0d  |lp modules....;.|
000003b0  01 b8 19 65 71 75 73 20  22 56 65 63 74 6f 72 47  |...equs "VectorG|
000003c0  72 61 70 68 69 63 73 22  0d 01 c2 0a 65 71 75 62  |raphics"....equb|
000003d0  20 39 0d 01 cc 1d 65 71  75 73 20 22 30 2e 30 33  | 9....equs "0.03|
000003e0  20 28 30 39 20 41 70 72  20 31 39 39 31 29 22 0d  | (09 Apr 1991)".|
000003f0  01 d6 0a 65 71 75 62 20  30 0d 01 e0 09 61 6c 69  |...equb 0....ali|
00000400  67 6e 0d 01 ea 05 3b 0d  01 f4 14 2e 69 6e 69 74  |gn....;.....init|
00000410  69 61 6c 69 73 65 5f 63  6f 64 65 0d 01 fe 05 3b  |ialise_code....;|
00000420  0d 02 08 1c 3b 20 69 6e  69 74 69 61 6c 69 73 65  |....; initialise|
00000430  20 6d 6f 64 75 6c 65 20  63 6f 64 65 0d 02 12 05  | module code....|
00000440  3b 0d 02 1c 19 73 74 6d  66 64 20 28 73 70 29 21  |;....stmfd (sp)!|
00000450  2c 7b 52 30 2c 6c 69 6e  6b 7d 0d 02 26 0e 6d 6f  |,{R0,link}..&.mo|
00000460  76 20 72 30 2c 23 34 35  0d 02 30 14 62 6c 20 73  |v r0,#45..0.bl s|
00000470  65 74 5f 76 69 65 77 61  6e 67 6c 65 0d 02 3a 0d  |et_viewangle..:.|
00000480  6d 6f 76 20 72 30 2c 23  31 0d 02 44 11 62 6c 20  |mov r0,#1..D.bl |
00000490  73 65 74 5f 78 61 6e 67  6c 65 0d 02 4e 11 62 6c  |set_xangle..N.bl|
000004a0  20 73 65 74 5f 79 61 6e  67 6c 65 0d 02 58 11 62  | set_yangle..X.b|
000004b0  6c 20 73 65 74 5f 7a 61  6e 67 6c 65 0d 02 62 17  |l set_zangle..b.|
000004c0  6c 64 6d 66 64 20 28 73  70 29 21 2c 7b 52 30 2c  |ldmfd (sp)!,{R0,|
000004d0  70 63 7d 0d 02 6c 05 3a  0d 02 76 13 2e 66 69 6e  |pc}..l.:..v..fin|
000004e0  69 61 6c 69 73 65 5f 63  6f 64 65 0d 02 80 05 3b  |ialise_code....;|
000004f0  0d 02 8a 15 3b 71 75 69  74 20 6d 6f 64 75 6c 65  |....;quit module|
00000500  20 63 6f 64 65 0d 02 94  05 3b 0d 02 9e 16 73 74  | code....;....st|
00000510  6d 66 64 20 28 73 70 29  21 2c 7b 6c 69 6e 6b 7d  |mfd (sp)!,{link}|
00000520  0d 02 a8 14 6c 64 6d 66  64 20 28 73 70 29 21 2c  |....ldmfd (sp)!,|
00000530  7b 70 63 7d 0d 02 b2 05  3a 0d 02 bc 09 61 6c 69  |{pc}....:....ali|
00000540  67 6e 0d 02 c6 0f 2e 73  77 69 5f 64 65 63 6f 64  |gn.....swi_decod|
00000550  65 0d 02 d0 05 3b 0d 02  da 36 3b 20 73 79 73 20  |e....;...6; sys |
00000560  63 6f 6d 6d 61 6e 64 20  74 61 62 6c 65 20 74 68  |command table th|
00000570  65 20 66 69 72 73 74 20  69 73 20 74 68 65 20 62  |e first is the b|
00000580  6c 6f 63 6b 20 63 6f 6d  6d 61 6e 64 0d 02 e4 05  |lock command....|
00000590  3b 0d 02 ee 11 65 71 75  73 20 22 56 65 63 74 6f  |;....equs "Vecto|
000005a0  72 22 0d 02 f8 0a 65 71  75 62 20 30 0d 03 02 0f  |r"....equb 0....|
000005b0  65 71 75 73 20 22 50 6c  6f 74 22 0d 03 0c 0a 65  |equs "Plot"....e|
000005c0  71 75 62 20 30 0d 03 16  17 65 71 75 73 20 22 53  |qub 0....equs "S|
000005d0  65 74 56 69 65 77 61 6e  67 6c 65 22 0d 03 20 0a  |etViewangle".. .|
000005e0  65 71 75 62 20 30 0d 03  2a 14 65 71 75 73 20 22  |equb 0..*.equs "|
000005f0  53 65 74 58 61 6e 67 6c  65 22 0d 03 34 0a 65 71  |SetXangle"..4.eq|
00000600  75 62 20 30 0d 03 3e 14  65 71 75 73 20 22 53 65  |ub 0..>.equs "Se|
00000610  74 59 61 6e 67 6c 65 22  0d 03 48 0a 65 71 75 62  |tYangle"..H.equb|
00000620  20 30 0d 03 52 14 65 71  75 73 20 22 53 65 74 5a  | 0..R.equs "SetZ|
00000630  61 6e 67 6c 65 22 0d 03  5c 0a 65 71 75 62 20 30  |angle"..\.equb 0|
00000640  0d 03 66 1a 65 71 75 73  20 22 43 61 6c 63 75 6c  |..f.equs "Calcul|
00000650  61 74 65 4f 62 6a 65 63  74 22 0d 03 70 0a 65 71  |ateObject"..p.eq|
00000660  75 62 20 30 0d 03 7a 19  65 71 75 73 20 22 50 6c  |ub 0..z.equs "Pl|
00000670  6f 74 4f 62 6a 65 63 74  4c 69 6e 65 22 0d 03 84  |otObjectLine"...|
00000680  0a 65 71 75 62 20 30 0d  03 8e 1a 65 71 75 73 20  |.equb 0....equs |
00000690  22 50 6c 6f 74 4f 62 6a  65 63 74 53 6f 6c 69 64  |"PlotObjectSolid|
000006a0  22 0d 03 98 0a 65 71 75  62 20 30 0d 03 a2 0a 65  |"....equb 0....e|
000006b0  71 75 62 20 30 0d 03 ac  09 61 6c 69 67 6e 0d 03  |qub 0....align..|
000006c0  b6 05 3b 0d 03 c0 0f 2e  73 77 69 5f 68 61 6e 64  |..;.....swi_hand|
000006d0  6c 65 0d 03 ca 05 3b 0d  03 d4 2f 3b 20 73 65 74  |le....;.../; set|
000006e0  69 6f 6e 20 74 6f 20 6a  75 6d 70 20 74 6f 20 63  |ion to jump to c|
000006f0  6f 72 72 65 63 74 20 72  6f 75 6e 74 69 6e 65 20  |orrect rountine |
00000700  6f 6e 20 73 79 73 0d 03  de 05 3b 0d 03 e8 30 63  |on sys....;...0c|
00000710  6d 70 20 72 31 31 2c 23  28 65 6e 64 6f 66 6a 75  |mp r11,#(endofju|
00000720  6d 70 74 61 62 6c 65 2d  73 74 61 72 74 6f 66 6a  |mptable-startofj|
00000730  75 6d 70 74 61 62 6c 65  29 2f 34 0d 03 f2 19 61  |umptable)/4....a|
00000740  64 64 63 63 20 70 63 2c  70 63 2c 72 31 31 2c 6c  |ddcc pc,pc,r11,l|
00000750  73 6c 23 32 0d 03 fc 0b  62 20 65 72 72 6f 72 0d  |sl#2....b error.|
00000760  04 06 05 3b 0d 04 10 15  2e 73 74 61 72 74 6f 66  |...;.....startof|
00000770  6a 75 6d 70 74 61 62 6c  65 0d 04 1a 04 0d 04 24  |jumptable......$|
00000780  0f 62 20 70 6c 6f 74 5f  63 6f 64 65 0d 04 2e 12  |.b plot_code....|
00000790  62 20 73 65 74 76 69 65  77 5f 63 6f 64 65 0d 04  |b setview_code..|
000007a0  38 0f 62 20 73 65 74 78  5f 63 6f 64 65 0d 04 42  |8.b setx_code..B|
000007b0  0f 62 20 73 65 74 79 5f  63 6f 64 65 0d 04 4c 0f  |.b sety_code..L.|
000007c0  62 20 73 65 74 7a 5f 63  6f 64 65 0d 04 56 15 62  |b setz_code..V.b|
000007d0  20 63 61 6c 63 6f 62 6a  65 63 74 5f 63 6f 64 65  | calcobject_code|
000007e0  0d 04 60 16 62 20 70 6c  6f 74 6f 62 6a 65 63 74  |..`.b plotobject|
000007f0  4c 5f 63 6f 64 65 0d 04  6a 16 62 20 70 6c 6f 74  |L_code..j.b plot|
00000800  6f 62 6a 65 63 74 53 5f  63 6f 64 65 0d 04 74 04  |objectS_code..t.|
00000810  0d 04 7e 13 2e 65 6e 64  6f 66 6a 75 6d 70 74 61  |..~..endofjumpta|
00000820  62 6c 65 0d 04 88 0f 6d  6f 76 20 70 63 2c 6c 69  |ble....mov pc,li|
00000830  6e 6b 0d 04 92 05 3b 0d  04 9c 17 3b 20 69 6c 6c  |nk....;....; ill|
00000840  65 67 61 6c 20 73 79 73  20 65 72 72 6f 72 0d 04  |egal sys error..|
00000850  a6 05 3b 0d 04 b0 0a 2e  65 72 72 6f 72 0d 04 ba  |..;.....error...|
00000860  16 73 74 6d 66 64 20 28  73 70 29 21 2c 7b 6c 69  |.stmfd (sp)!,{li|
00000870  6e 6b 7d 0d 04 c4 09 73  77 69 20 31 0d 04 ce 0b  |nk}....swi 1....|
00000880  65 71 75 62 20 31 30 0d  04 d8 18 65 71 75 73 20  |equb 10....equs |
00000890  22 53 57 49 20 6e 6f 74  20 6b 6e 6f 77 6e 22 0d  |"SWI not known".|
000008a0  04 e2 0b 65 71 75 62 20  31 33 0d 04 ec 0b 65 71  |...equb 13....eq|
000008b0  75 62 20 31 30 0d 04 f6  0a 65 71 75 62 20 30 0d  |ub 10....equb 0.|
000008c0  05 00 09 61 6c 69 67 6e  0d 05 0a 14 6c 64 6d 66  |...align....ldmf|
000008d0  64 20 28 73 70 29 21 2c  7b 70 63 7d 0d 05 14 05  |d (sp)!,{pc}....|
000008e0  3b 0d 05 1e 28 3b 20 66  6f 6c 6c 6f 77 69 6e 67  |;...(; following|
000008f0  20 70 72 6f 63 65 64 75  72 65 73 20 61 72 65 20  | procedures are |
00000900  73 79 73 20 63 61 6c 6c  73 0d 05 28 05 3b 0d 05  |sys calls..(.;..|
00000910  32 0e 2e 70 6c 6f 74 5f  63 6f 64 65 0d 05 3c 16  |2..plot_code..<.|
00000920  73 74 6d 66 64 20 28 73  70 29 21 2c 7b 6c 69 6e  |stmfd (sp)!,{lin|
00000930  6b 7d 0d 05 46 0f 62 6c  20 74 72 61 6e 73 66 65  |k}..F.bl transfe|
00000940  72 0d 05 50 14 6c 64 6d  66 64 20 28 73 70 29 21  |r..P.ldmfd (sp)!|
00000950  2c 7b 70 63 7d 0d 05 5a  05 3b 0d 05 64 11 2e 73  |,{pc}..Z.;..d..s|
00000960  65 74 76 69 65 77 5f 63  6f 64 65 0d 05 6e 16 73  |etview_code..n.s|
00000970  74 6d 66 64 20 28 73 70  29 21 2c 7b 6c 69 6e 6b  |tmfd (sp)!,{link|
00000980  7d 0d 05 78 14 62 6c 20  73 65 74 5f 76 69 65 77  |}..x.bl set_view|
00000990  61 6e 67 6c 65 0d 05 82  14 6c 64 6d 66 64 20 28  |angle....ldmfd (|
000009a0  73 70 29 21 2c 7b 70 63  7d 0d 05 8c 05 3b 0d 05  |sp)!,{pc}....;..|
000009b0  96 0e 2e 73 65 74 78 5f  63 6f 64 65 0d 05 a0 16  |...setx_code....|
000009c0  73 74 6d 66 64 20 28 73  70 29 21 2c 7b 6c 69 6e  |stmfd (sp)!,{lin|
000009d0  6b 7d 0d 05 aa 11 62 6c  20 73 65 74 5f 78 61 6e  |k}....bl set_xan|
000009e0  67 6c 65 0d 05 b4 14 6c  64 6d 66 64 20 28 73 70  |gle....ldmfd (sp|
000009f0  29 21 2c 7b 70 63 7d 0d  05 be 05 3b 0d 05 c8 0e  |)!,{pc}....;....|
00000a00  2e 73 65 74 79 5f 63 6f  64 65 0d 05 d2 16 73 74  |.sety_code....st|
00000a10  6d 66 64 20 28 73 70 29  21 2c 7b 6c 69 6e 6b 7d  |mfd (sp)!,{link}|
00000a20  0d 05 dc 11 62 6c 20 73  65 74 5f 79 61 6e 67 6c  |....bl set_yangl|
00000a30  65 0d 05 e6 14 6c 64 6d  66 64 20 28 73 70 29 21  |e....ldmfd (sp)!|
00000a40  2c 7b 70 63 7d 0d 05 f0  05 3b 0d 05 fa 0e 2e 73  |,{pc}....;.....s|
00000a50  65 74 7a 5f 63 6f 64 65  0d 06 04 16 73 74 6d 66  |etz_code....stmf|
00000a60  64 20 28 73 70 29 21 2c  7b 6c 69 6e 6b 7d 0d 06  |d (sp)!,{link}..|
00000a70  0e 11 62 6c 20 73 65 74  5f 7a 61 6e 67 6c 65 0d  |..bl set_zangle.|
00000a80  06 18 14 6c 64 6d 66 64  20 28 73 70 29 21 2c 7b  |...ldmfd (sp)!,{|
00000a90  70 63 7d 0d 06 22 05 3b  0d 06 2c 14 2e 63 61 6c  |pc}..".;..,..cal|
00000aa0  63 6f 62 6a 65 63 74 5f  63 6f 64 65 0d 06 36 16  |cobject_code..6.|
00000ab0  73 74 6d 66 64 20 28 73  70 29 21 2c 7b 6c 69 6e  |stmfd (sp)!,{lin|
00000ac0  6b 7d 0d 06 40 12 62 6c  20 63 61 6c 63 5f 6f 62  |k}..@.bl calc_ob|
00000ad0  6a 65 63 74 0d 06 4a 14  6c 64 6d 66 64 20 28 73  |ject..J.ldmfd (s|
00000ae0  70 29 21 2c 7b 70 63 7d  0d 06 54 05 3b 0d 06 5e  |p)!,{pc}..T.;..^|
00000af0  15 2e 70 6c 6f 74 6f 62  6a 65 63 74 4c 5f 63 6f  |..plotobjectL_co|
00000b00  64 65 0d 06 68 16 73 74  6d 66 64 20 28 73 70 29  |de..h.stmfd (sp)|
00000b10  21 2c 7b 6c 69 6e 6b 7d  0d 06 72 13 62 6c 20 70  |!,{link}..r.bl p|
00000b20  6c 6f 74 5f 6f 62 6a 65  63 74 4c 0d 06 7c 14 6c  |lot_objectL..|.l|
00000b30  64 6d 66 64 20 28 73 70  29 21 2c 7b 70 63 7d 0d  |dmfd (sp)!,{pc}.|
00000b40  06 86 05 3b 0d 06 90 15  2e 70 6c 6f 74 6f 62 6a  |...;.....plotobj|
00000b50  65 63 74 53 5f 63 6f 64  65 0d 06 9a 16 73 74 6d  |ectS_code....stm|
00000b60  66 64 20 28 73 70 29 21  2c 7b 6c 69 6e 6b 7d 0d  |fd (sp)!,{link}.|
00000b70  06 a4 13 62 6c 20 70 6c  6f 74 5f 6f 62 6a 65 63  |...bl plot_objec|
00000b80  74 53 0d 06 ae 14 6c 64  6d 66 64 20 28 73 70 29  |tS....ldmfd (sp)|
00000b90  21 2c 7b 70 63 7d 0d 06  b8 09 61 6c 69 67 6e 0d  |!,{pc}....align.|
00000ba0  06 c2 0b 2e 67 65 74 73  69 6e 0d 06 cc 05 3b 0d  |....getsin....;.|
00000bb0  06 d6 25 3b 20 6f 6e 20  65 6e 74 72 79 20 72 30  |..%; on entry r0|
00000bc0  20 69 73 20 61 6e 67 6c  65 20 69 6e 20 64 65 67  | is angle in deg|
00000bd0  72 65 65 73 0d 06 e0 26  3b 20 6f 6e 20 65 78 69  |rees...&; on exi|
00000be0  74 20 72 36 20 69 73 20  69 6e 74 20 76 61 6c 75  |t r6 is int valu|
00000bf0  65 20 6f 66 20 61 6e 67  6c 65 0d 06 ea 05 3b 0d  |e of angle....;.|
00000c00  06 f4 1c 73 74 6d 66 64  20 28 73 70 29 21 2c 7b  |...stmfd (sp)!,{|
00000c10  72 30 2c 72 31 2c 6c 69  6e 6b 7d 0d 06 fe 13 6d  |r0,r1,link}....m|
00000c20  6f 76 20 72 30 2c 72 30  2c 6c 73 6c 23 32 0d 07  |ov r0,r0,lsl#2..|
00000c30  08 0e 61 64 72 20 72 31  2c 73 69 6e 0d 07 12 12  |..adr r1,sin....|
00000c40  6c 64 72 20 72 36 2c 5b  72 31 2c 72 30 5d 0d 07  |ldr r6,[r1,r0]..|
00000c50  1c 1a 6c 64 6d 66 64 20  28 73 70 29 21 2c 7b 72  |..ldmfd (sp)!,{r|
00000c60  30 2c 72 31 2c 70 63 7d  0d 07 26 08 2e 73 69 6e  |0,r1,pc}..&..sin|
00000c70  0d 07 30 05 3b 0d 07 3a  05 5d 0d 07 44 08 41 3d  |..0.;..:.]..D.A=|
00000c80  4f 25 0d 07 4e 12 e3 20  73 69 6e 25 3d 30 20 b8  |O%..N.. sin%=0 .|
00000c90  20 33 35 39 0d 07 58 2a  e7 20 b5 b2 28 73 69 6e  | 359..X*. ..(sin|
00000ca0  25 29 3c 30 2e 30 30 30  31 20 80 20 b5 b2 28 73  |%)<0.0001 . ..(s|
00000cb0  69 6e 25 29 3e 2d 30 2e  30 30 30 31 20 8c 0d 07  |in%)>-0.0001 ...|
00000cc0  62 09 21 4f 25 3d 32 0d  07 6c 05 cc 0d 07 76 19  |b.!O%=2..l....v.|
00000cd0  21 4f 25 3d 28 31 2f b5  b2 28 73 69 6e 25 29 29  |!O%=(1/..(sin%))|
00000ce0  2a 31 30 32 34 0d 07 80  05 cd 0d 07 8a 0b 4f 25  |*1024.........O%|
00000cf0  3d 4f 25 2b 34 0d 07 94  0b 50 25 3d 50 25 2b 34  |=O%+4....P%=P%+4|
00000d00  0d 07 9e 05 ed 0d 07 a8  05 5b 0d 07 b2 05 3b 0d  |.........[....;.|
00000d10  07 bc 0c 6f 70 74 20 70  61 73 73 0d 07 c6 0b 2e  |...opt pass.....|
00000d20  67 65 74 63 6f 73 0d 07  d0 05 3b 0d 07 da 25 3b  |getcos....;...%;|
00000d30  20 6f 6e 20 65 6e 74 72  79 20 72 30 20 69 73 20  | on entry r0 is |
00000d40  61 6e 67 6c 65 20 69 6e  20 64 65 67 72 65 65 73  |angle in degrees|
00000d50  0d 07 e4 26 3b 20 6f 6e  20 65 78 69 74 20 72 37  |...&; on exit r7|
00000d60  20 69 73 20 69 6e 74 20  76 61 6c 75 65 20 6f 66  | is int value of|
00000d70  20 61 6e 67 6c 65 0d 07  ee 05 3b 0d 07 f8 1c 73  | angle....;....s|
00000d80  74 6d 66 64 20 28 73 70  29 21 2c 7b 72 30 2c 72  |tmfd (sp)!,{r0,r|
00000d90  31 2c 6c 69 6e 6b 7d 0d  08 02 13 6d 6f 76 20 72  |1,link}....mov r|
00000da0  30 2c 72 30 2c 6c 73 6c  23 32 0d 08 0c 0e 61 64  |0,r0,lsl#2....ad|
00000db0  72 20 72 31 2c 63 6f 73  0d 08 16 12 6c 64 72 20  |r r1,cos....ldr |
00000dc0  72 37 2c 5b 72 31 2c 72  30 5d 0d 08 20 1a 6c 64  |r7,[r1,r0].. .ld|
00000dd0  6d 66 64 20 28 73 70 29  21 2c 7b 72 30 2c 72 31  |mfd (sp)!,{r0,r1|
00000de0  2c 70 63 7d 0d 08 2a 08  2e 63 6f 73 0d 08 34 05  |,pc}..*..cos..4.|
00000df0  3b 0d 08 3e 05 5d 0d 08  48 12 e3 20 63 6f 73 25  |;..>.]..H.. cos%|
00000e00  3d 30 20 b8 20 33 35 39  0d 08 52 2a e7 20 9b b2  |=0 . 359..R*. ..|
00000e10  28 63 6f 73 25 29 3c 30  2e 30 30 30 31 20 80 20  |(cos%)<0.0001 . |
00000e20  9b b2 28 63 6f 73 25 29  3e 2d 30 2e 30 30 30 31  |..(cos%)>-0.0001|
00000e30  20 8c 0d 08 5c 09 21 4f  25 3d 32 0d 08 66 05 cc  | ...\.!O%=2..f..|
00000e40  0d 08 70 19 21 4f 25 3d  28 31 2f 9b b2 28 63 6f  |..p.!O%=(1/..(co|
00000e50  73 25 29 29 2a 31 30 32  34 0d 08 7a 05 cd 0d 08  |s%))*1024..z....|
00000e60  84 0b 4f 25 3d 4f 25 2b  34 0d 08 8e 0b 50 25 3d  |..O%=O%+4....P%=|
00000e70  50 25 2b 34 0d 08 98 05  ed 0d 08 a2 05 5b 0d 08  |P%+4.........[..|
00000e80  ac 05 3b 0d 08 b6 0c 6f  70 74 20 70 61 73 73 0d  |..;....opt pass.|
00000e90  08 c0 05 3b 0d 08 ca 0b  2e 64 69 76 69 64 65 0d  |...;.....divide.|
00000ea0  08 d4 0c 3b 20 72 30 20  6c 68 73 0d 08 de 0c 3b  |...; r0 lhs....;|
00000eb0  20 72 31 20 72 68 73 0d  08 e8 1a 3b 20 72 32 20  | r1 rhs....; r2 |
00000ec0  6f 6e 20 65 78 69 74 20  6c 68 73 20 81 20 72 68  |on exit lhs . rh|
00000ed0  73 0d 08 f2 1a 3b 20 72  33 20 6f 6e 20 65 78 69  |s....; r3 on exi|
00000ee0  74 20 6c 68 73 20 83 20  72 68 73 0d 08 fc 10 3b  |t lhs . rhs....;|
00000ef0  20 61 6e 73 77 65 72 2b  30 20 81 0d 09 06 10 3b  | answer+0 .....;|
00000f00  20 61 6e 73 77 65 72 2b  34 20 83 0d 09 10 05 3b  | answer+4 .....;|
00000f10  0d 09 1a 1c 73 74 6d 66  64 20 28 73 70 29 21 2c  |....stmfd (sp)!,|
00000f20  7b 72 30 2d 72 36 2c 6c  69 6e 6b 7d 0d 09 24 17  |{r0-r6,link}..$.|
00000f30  65 6f 72 73 20 64 69 76  73 67 6e 2c 6c 68 73 2c  |eors divsgn,lhs,|
00000f40  72 68 73 0d 09 2e 13 6d  6f 76 73 20 6d 6f 64 73  |rhs....movs mods|
00000f50  67 6e 2c 6c 68 73 0d 09  38 14 72 73 62 6d 69 20  |gn,lhs..8.rsbmi |
00000f60  6c 68 73 2c 6c 68 73 2c  23 30 0d 09 42 0e 74 65  |lhs,lhs,#0..B.te|
00000f70  71 20 72 68 73 2c 23 30  0d 09 4c 14 72 73 62 6d  |q rhs,#0..L.rsbm|
00000f80  69 20 72 68 73 2c 72 68  73 2c 23 30 0d 09 56 0d  |i rhs,rhs,#0..V.|
00000f90  62 6c 20 75 64 69 76 33  32 0d 09 60 11 74 65 71  |bl udiv32..`.teq|
00000fa0  20 64 69 76 73 67 6e 2c  23 30 0d 09 6a 14 72 73  | divsgn,#0..j.rs|
00000fb0  62 6d 69 20 64 69 76 2c  64 69 76 2c 23 30 0d 09  |bmi div,div,#0..|
00000fc0  74 11 74 65 71 20 6d 6f  64 73 67 6e 2c 23 30 0d  |t.teq modsgn,#0.|
00000fd0  09 7e 14 72 73 62 6d 69  20 6d 6f 64 2c 6d 6f 64  |.~.rsbmi mod,mod|
00000fe0  2c 23 30 0d 09 88 14 61  64 72 20 63 6f 75 6e 74  |,#0....adr count|
00000ff0  2c 61 6e 73 77 65 72 0d  09 92 19 73 74 6d 69 61  |,answer....stmia|
00001000  20 63 6f 75 6e 74 2c 7b  6d 6f 64 2c 64 69 76 7d  | count,{mod,div}|
00001010  0d 09 9c 1a 6c 64 6d 66  64 20 28 73 70 29 21 2c  |....ldmfd (sp)!,|
00001020  7b 72 30 2d 72 36 2c 70  63 7d 0d 09 a6 05 3b 0d  |{r0-r6,pc}....;.|
00001030  09 b0 0b 2e 75 64 69 76  33 32 0d 09 ba 0e 74 65  |....udiv32....te|
00001040  71 20 72 68 73 2c 23 30  0d 09 c4 0e 62 65 71 20  |q rhs,#0....beq |
00001050  64 69 76 65 72 72 0d 09  ce 0e 6d 6f 76 20 6d 6f  |diverr....mov mo|
00001060  64 2c 23 30 0d 09 d8 0e  6d 6f 76 20 64 69 76 2c  |d,#0....mov div,|
00001070  23 30 0d 09 e2 11 6d 6f  76 20 63 6f 75 6e 74 2c  |#0....mov count,|
00001080  23 33 32 0d 09 ec 05 3b  0d 09 f6 0b 2e 64 69 76  |#32....;.....div|
00001090  6c 70 31 0d 0a 00 17 73  75 62 73 20 63 6f 75 6e  |lp1....subs coun|
000010a0  74 2c 63 6f 75 6e 74 2c  23 31 0d 0a 0a 11 6d 6f  |t,count,#1....mo|
000010b0  76 65 71 20 70 63 2c 6c  69 6e 6b 0d 0a 14 16 6d  |veq pc,link....m|
000010c0  6f 76 73 20 6c 68 73 2c  6c 68 73 2c 61 73 6c 23  |ovs lhs,lhs,asl#|
000010d0  31 0d 0a 1e 0e 62 70 6c  20 64 69 76 6c 70 31 0d  |1....bpl divlp1.|
000010e0  0a 28 05 3b 0d 0a 32 0b  2e 64 69 76 6c 70 32 0d  |.(.;..2..divlp2.|
000010f0  0a 3c 16 6d 6f 76 73 20  6c 68 73 2c 6c 68 73 2c  |.<.movs lhs,lhs,|
00001100  61 73 6c 23 31 0d 0a 46  13 61 64 63 20 6d 6f 64  |asl#1..F.adc mod|
00001110  2c 6d 6f 64 2c 6d 6f 64  0d 0a 50 0f 63 6d 70 20  |,mod,mod..P.cmp |
00001120  6d 6f 64 2c 72 68 73 0d  0a 5a 15 73 75 62 63 73  |mod,rhs..Z.subcs|
00001130  20 6d 6f 64 2c 6d 6f 64  2c 72 68 73 0d 0a 64 13  | mod,mod,rhs..d.|
00001140  61 64 63 20 64 69 76 2c  64 69 76 2c 64 69 76 0d  |adc div,div,div.|
00001150  0a 6e 17 73 75 62 73 20  63 6f 75 6e 74 2c 63 6f  |.n.subs count,co|
00001160  75 6e 74 2c 23 31 0d 0a  78 0e 62 6e 65 20 64 69  |unt,#1..x.bne di|
00001170  76 6c 70 32 0d 0a 82 05  3b 0d 0a 8c 0b 2e 64 69  |vlp2....;.....di|
00001180  76 65 72 72 0d 0a 96 0f  6d 6f 76 20 70 63 2c 6c  |verr....mov pc,l|
00001190  69 6e 6b 0d 0a a0 05 3b  0d 0a aa 0f 2e 73 65 74  |ink....;.....set|
000011a0  5f 78 61 6e 67 6c 65 0d  0a b4 1c 73 74 6d 66 64  |_xangle....stmfd|
000011b0  20 28 73 70 29 21 2c 7b  72 30 2d 72 32 2c 6c 69  | (sp)!,{r0-r2,li|
000011c0  6e 6b 7d 0d 0a be 11 61  64 72 20 72 32 2c 61 6e  |nk}....adr r2,an|
000011d0  73 77 65 72 0d 0a c8 0e  6d 6f 76 20 72 31 2c 23  |swer....mov r1,#|
000011e0  39 30 0d 0a d2 0d 62 6c  20 64 69 76 69 64 65 0d  |90....bl divide.|
000011f0  0a dc 12 6c 64 72 20 72  31 2c 5b 72 32 2c 23 34  |...ldr r1,[r2,#4|
00001200  5d 0d 0a e6 0d 63 6d 70  20 72 31 2c 23 30 0d 0a  |]....cmp r1,#0..|
00001210  f0 12 61 64 64 65 71 20  72 30 2c 72 30 2c 23 31  |..addeq r0,r0,#1|
00001220  0d 0a fa 0f 6d 6f 76 20  72 31 2c 23 33 36 30 0d  |....mov r1,#360.|
00001230  0b 04 0d 62 6c 20 64 69  76 69 64 65 0d 0b 0e 12  |...bl divide....|
00001240  6c 64 72 20 72 30 2c 5b  72 32 2c 23 34 5d 0d 0b  |ldr r0,[r2,#4]..|
00001250  18 11 61 64 72 20 72 31  2c 78 61 6e 67 6c 65 0d  |..adr r1,xangle.|
00001260  0b 22 10 73 74 72 20 20  72 30 2c 5b 72 31 5d 0d  |.".str  r0,[r1].|
00001270  0b 2c 1a 6c 64 6d 66 64  20 28 73 70 29 21 2c 7b  |.,.ldmfd (sp)!,{|
00001280  72 30 2d 72 32 2c 70 63  7d 0d 0b 36 05 3b 0d 0b  |r0-r2,pc}..6.;..|
00001290  40 0f 2e 73 65 74 5f 79  61 6e 67 6c 65 0d 0b 4a  |@..set_yangle..J|
000012a0  1c 73 74 6d 66 64 20 28  73 70 29 21 2c 7b 72 30  |.stmfd (sp)!,{r0|
000012b0  2d 72 32 2c 6c 69 6e 6b  7d 0d 0b 54 11 61 64 72  |-r2,link}..T.adr|
000012c0  20 72 32 2c 61 6e 73 77  65 72 0d 0b 5e 0e 6d 6f  | r2,answer..^.mo|
000012d0  76 20 72 31 2c 23 39 30  0d 0b 68 0d 62 6c 20 64  |v r1,#90..h.bl d|
000012e0  69 76 69 64 65 0d 0b 72  12 6c 64 72 20 72 31 2c  |ivide..r.ldr r1,|
000012f0  5b 72 32 2c 23 34 5d 0d  0b 7c 0d 63 6d 70 20 72  |[r2,#4]..|.cmp r|
00001300  31 2c 23 30 0d 0b 86 12  61 64 64 65 71 20 72 30  |1,#0....addeq r0|
00001310  2c 72 30 2c 23 31 0d 0b  90 0f 6d 6f 76 20 72 31  |,r0,#1....mov r1|
00001320  2c 23 33 36 30 0d 0b 9a  0d 62 6c 20 64 69 76 69  |,#360....bl divi|
00001330  64 65 0d 0b a4 12 6c 64  72 20 72 30 2c 5b 72 32  |de....ldr r0,[r2|
00001340  2c 23 34 5d 0d 0b ae 11  61 64 72 20 72 31 2c 79  |,#4]....adr r1,y|
00001350  61 6e 67 6c 65 0d 0b b8  0f 73 74 72 20 72 30 2c  |angle....str r0,|
00001360  5b 72 31 5d 0d 0b c2 1a  6c 64 6d 66 64 20 28 73  |[r1]....ldmfd (s|
00001370  70 29 21 2c 7b 72 30 2d  72 32 2c 70 63 7d 0d 0b  |p)!,{r0-r2,pc}..|
00001380  cc 05 3b 0d 0b d6 0f 2e  73 65 74 5f 7a 61 6e 67  |..;.....set_zang|
00001390  6c 65 0d 0b e0 1c 73 74  6d 66 64 20 28 73 70 29  |le....stmfd (sp)|
000013a0  21 2c 7b 72 30 2d 72 32  2c 6c 69 6e 6b 7d 0d 0b  |!,{r0-r2,link}..|
000013b0  ea 11 61 64 72 20 72 32  2c 61 6e 73 77 65 72 0d  |..adr r2,answer.|
000013c0  0b f4 0e 6d 6f 76 20 72  31 2c 23 39 30 0d 0b fe  |...mov r1,#90...|
000013d0  0d 62 6c 20 64 69 76 69  64 65 0d 0c 08 12 6c 64  |.bl divide....ld|
000013e0  72 20 72 31 2c 5b 72 32  2c 23 34 5d 0d 0c 12 0d  |r r1,[r2,#4]....|
000013f0  63 6d 70 20 72 31 2c 23  30 0d 0c 1c 12 61 64 64  |cmp r1,#0....add|
00001400  65 71 20 72 30 2c 72 30  2c 23 31 0d 0c 26 0f 6d  |eq r0,r0,#1..&.m|
00001410  6f 76 20 72 31 2c 23 33  36 30 0d 0c 30 0d 62 6c  |ov r1,#360..0.bl|
00001420  20 64 69 76 69 64 65 0d  0c 3a 12 6c 64 72 20 72  | divide..:.ldr r|
00001430  30 2c 5b 72 32 2c 23 34  5d 0d 0c 44 11 61 64 72  |0,[r2,#4]..D.adr|
00001440  20 72 31 2c 7a 61 6e 67  6c 65 0d 0c 4e 0f 73 74  | r1,zangle..N.st|
00001450  72 20 72 30 2c 5b 72 31  5d 0d 0c 58 1a 6c 64 6d  |r r0,[r1]..X.ldm|
00001460  66 64 20 28 73 70 29 21  2c 7b 72 30 2d 72 32 2c  |fd (sp)!,{r0-r2,|
00001470  70 63 7d 0d 0c 62 05 3b  0d 0c 6c 12 2e 73 65 74  |pc}..b.;..l..set|
00001480  5f 76 69 65 77 61 6e 67  6c 65 0d 0c 76 1c 73 74  |_viewangle..v.st|
00001490  6d 66 64 20 28 73 70 29  21 2c 7b 72 30 2d 72 32  |mfd (sp)!,{r0-r2|
000014a0  2c 6c 69 6e 6b 7d 0d 0c  80 11 61 64 72 20 72 32  |,link}....adr r2|
000014b0  2c 61 6e 73 77 65 72 0d  0c 8a 0e 6d 6f 76 20 72  |,answer....mov r|
000014c0  31 2c 23 39 30 0d 0c 94  0d 62 6c 20 64 69 76 69  |1,#90....bl divi|
000014d0  64 65 0d 0c 9e 12 6c 64  72 20 72 31 2c 5b 72 32  |de....ldr r1,[r2|
000014e0  2c 23 34 5d 0d 0c a8 0d  63 6d 70 20 72 31 2c 23  |,#4]....cmp r1,#|
000014f0  30 0d 0c b2 12 61 64 64  65 71 20 72 30 2c 72 30  |0....addeq r0,r0|
00001500  2c 23 31 0d 0c bc 0f 6d  6f 76 20 72 31 2c 23 33  |,#1....mov r1,#3|
00001510  36 30 0d 0c c6 0d 62 6c  20 64 69 76 69 64 65 0d  |60....bl divide.|
00001520  0c d0 12 6c 64 72 20 72  30 2c 5b 72 32 2c 23 34  |...ldr r0,[r2,#4|
00001530  5d 0d 0c da 14 61 64 72  20 72 31 2c 76 69 65 77  |]....adr r1,view|
00001540  61 6e 67 6c 65 0d 0c e4  0f 73 74 72 20 72 30 2c  |angle....str r0,|
00001550  5b 72 31 5d 0d 0c ee 1a  6c 64 6d 66 64 20 28 73  |[r1]....ldmfd (s|
00001560  70 29 21 2c 7b 72 30 2d  72 32 2c 70 63 7d 0d 0c  |p)!,{r0-r2,pc}..|
00001570  f8 05 3b 0d 0d 02 0b 2e  70 6c 6f 74 33 44 0d 0d  |..;.....plot3D..|
00001580  0c 05 3b 0d 0d 16 3e 3b  20 20 63 6f 6e 76 65 72  |..;...>;  conver|
00001590  74 73 20 78 2c 79 2c 7a  20 70 6f 73 69 74 69 6f  |ts x,y,z positio|
000015a0  6e 20 74 6f 20 78 2c 79  20 70 6f 73 69 74 69 6f  |n to x,y positio|
000015b0  6e 20 61 6e 64 20 70 6c  6f 74 73 20 70 6f 69 6e  |n and plots poin|
000015c0  74 0d 0d 20 05 3b 0d 0d  2a 1c 73 74 6d 66 64 20  |t.. .;..*.stmfd |
000015d0  28 73 70 29 21 2c 7b 72  30 2d 72 33 2c 6c 69 6e  |(sp)!,{r0-r3,lin|
000015e0  6b 7d 0d 0d 34 0f 62 6c  20 63 61 6c 63 5f 70 6f  |k}..4.bl calc_po|
000015f0  73 0d 0d 3e 15 61 64 72  20 72 33 2c 70 6c 6f 74  |s..>.adr r3,plot|
00001600  61 63 74 69 6f 6e 0d 0d  48 14 6c 64 6d 69 61 20  |action..H.ldmia |
00001610  72 33 2c 7b 72 30 2d 72  32 7d 0d 0d 52 11 73 77  |r3,{r0-r2}..R.sw|
00001620  69 20 22 4f 53 5f 50 6c  6f 74 22 0d 0d 5c 1a 6c  |i "OS_Plot"..\.l|
00001630  64 6d 66 64 20 28 73 70  29 21 2c 7b 72 30 2d 72  |dmfd (sp)!,{r0-r|
00001640  33 2c 70 63 7d 0d 0d 66  05 3b 0d 0d 70 0d 2e 74  |3,pc}..f.;..p..t|
00001650  72 61 6e 73 66 65 72 0d  0d 7a 05 3b 0d 0d 84 43  |ransfer..z.;...C|
00001660  3b 20 20 74 72 61 6e 73  66 65 72 73 20 72 30 2d  |;  transfers r0-|
00001670  72 33 20 74 6f 20 73 74  6f 72 61 67 65 20 70 6f  |r3 to storage po|
00001680  69 6e 74 73 2c 20 70 6c  6f 74 61 63 74 69 6f 6e  |ints, plotaction|
00001690  2c 78 70 6f 73 2c 79 70  6f 73 2c 7a 70 6f 73 0d  |,xpos,ypos,zpos.|
000016a0  0d 8e 05 3b 0d 0d 98 1c  73 74 6d 66 64 20 28 73  |...;....stmfd (s|
000016b0  70 29 21 2c 7b 72 30 2d  72 34 2c 6c 69 6e 6b 7d  |p)!,{r0-r4,link}|
000016c0  0d 0d a2 15 61 64 72 20  72 34 2c 70 6c 6f 74 61  |....adr r4,plota|
000016d0  63 74 69 6f 6e 0d 0d ac  14 73 74 6d 69 61 20 72  |ction....stmia r|
000016e0  34 2c 7b 72 30 2d 72 33  7d 0d 0d b6 0d 62 6c 20  |4,{r0-r3}....bl |
000016f0  70 6c 6f 74 33 44 0d 0d  c0 1a 6c 64 6d 66 64 20  |plot3D....ldmfd |
00001700  28 73 70 29 21 2c 7b 72  30 2d 72 34 2c 70 63 7d  |(sp)!,{r0-r4,pc}|
00001710  0d 0d ca 04 0d 0d d4 05  3b 0d 0d de 0b 2e 61 6e  |........;.....an|
00001720  73 77 65 72 0d 0d e8 0a  65 71 75 64 20 30 0d 0d  |swer....equd 0..|
00001730  f2 0a 65 71 75 64 20 30  0d 0d fc 0e 2e 76 69 65  |..equd 0.....vie|
00001740  77 61 6e 67 6c 65 0d 0e  06 0a 65 71 75 64 20 30  |wangle....equd 0|
00001750  0d 0e 10 0b 2e 78 61 6e  67 6c 65 0d 0e 1a 0a 65  |.....xangle....e|
00001760  71 75 64 20 30 0d 0e 24  0b 2e 79 61 6e 67 6c 65  |qud 0..$..yangle|
00001770  0d 0e 2e 0a 65 71 75 64  20 30 0d 0e 38 0b 2e 7a  |....equd 0..8..z|
00001780  61 6e 67 6c 65 0d 0e 42  0a 65 71 75 64 20 30 0d  |angle..B.equd 0.|
00001790  0e 4c 0f 2e 70 6c 6f 74  61 63 74 69 6f 6e 0d 0e  |.L..plotaction..|
000017a0  56 0a 65 71 75 64 20 30  0d 0e 60 09 2e 78 70 6f  |V.equd 0..`..xpo|
000017b0  73 0d 0e 6a 0a 65 71 75  64 20 30 0d 0e 74 09 2e  |s..j.equd 0..t..|
000017c0  79 70 6f 73 0d 0e 7e 0a  65 71 75 64 20 30 0d 0e  |ypos..~.equd 0..|
000017d0  88 09 2e 7a 70 6f 73 0d  0e 92 0a 65 71 75 64 20  |...zpos....equd |
000017e0  30 0d 0e 9c 05 3b 0d 0e  a6 0c 2e 72 65 61 64 70  |0....;.....readp|
000017f0  6f 73 0d 0e b0 05 3b 0d  0e ba 29 3b 20 72 65 61  |os....;...); rea|
00001800  64 73 20 70 6f 69 6e 74  20 73 74 6f 72 61 67 65  |ds point storage|
00001810  20 62 6c 6f 63 6b 20 61  6e 64 20 2a 31 30 32 34  | block and *1024|
00001820  0d 0e c4 1d 3b 20 73 74  6f 72 65 73 20 72 65 73  |....; stores res|
00001830  75 6c 74 20 69 6e 20 72  38 2d 72 31 30 0d 0e ce  |ult in r8-r10...|
00001840  05 3b 0d 0e d8 19 73 74  6d 66 64 20 28 73 70 29  |.;....stmfd (sp)|
00001850  21 2c 7b 72 30 2c 6c 69  6e 6b 7d 0d 0e e2 0f 61  |!,{r0,link}....a|
00001860  64 72 20 72 30 2c 78 70  6f 73 0d 0e ec 15 6c 64  |dr r0,xpos....ld|
00001870  6d 69 61 20 72 30 2c 7b  72 38 2d 72 31 30 7d 0d  |mia r0,{r8-r10}.|
00001880  0e f6 0d 63 6d 70 20 72  38 2c 23 30 0d 0f 00 12  |...cmp r8,#0....|
00001890  61 64 64 65 71 20 72 38  2c 72 38 2c 23 31 0d 0f  |addeq r8,r8,#1..|
000018a0  0a 0d 63 6d 70 20 72 39  2c 23 30 0d 0f 14 12 61  |..cmp r9,#0....a|
000018b0  64 64 65 71 20 72 39 2c  72 39 2c 23 31 0d 0f 1e  |ddeq r9,r9,#1...|
000018c0  0e 63 6d 70 20 72 31 30  2c 23 30 0d 0f 28 14 61  |.cmp r10,#0..(.a|
000018d0  64 64 65 71 20 72 31 30  2c 72 31 30 2c 23 31 0d  |ddeq r10,r10,#1.|
000018e0  0f 32 14 6d 6f 76 20 72  38 2c 72 38 2c 61 73 6c  |.2.mov r8,r8,asl|
000018f0  23 31 30 0d 0f 3c 14 6d  6f 76 20 72 39 2c 72 39  |#10..<.mov r9,r9|
00001900  2c 61 73 6c 23 31 30 0d  0f 46 16 6d 6f 76 20 72  |,asl#10..F.mov r|
00001910  31 30 2c 72 31 30 2c 61  73 6c 23 31 30 0d 0f 50  |10,r10,asl#10..P|
00001920  09 2e 73 6b 69 70 0d 0f  5a 17 6c 64 6d 66 64 20  |..skip..Z.ldmfd |
00001930  28 73 70 29 21 2c 7b 72  30 2c 70 63 7d 0d 0f 64  |(sp)!,{r0,pc}..d|
00001940  05 3b 0d 0f 6e 0d 2e 63  61 6c 63 5f 70 6f 73 0d  |.;..n..calc_pos.|
00001950  0f 78 05 3b 0d 0f 82 37  3b 20 63 61 6c 63 75 6c  |.x.;...7; calcul|
00001960  61 74 65 73 20 32 44 20  70 6f 73 69 74 69 6f 6e  |ates 2D position|
00001970  20 66 72 6f 6d 20 61 6c  6c 20 67 69 76 65 6e 20  | from all given |
00001980  69 6e 66 6f 72 6d 61 74  69 6f 6e 0d 0f 8c 05 3b  |information....;|
00001990  0d 0f 96 1d 73 74 6d 66  64 20 28 73 70 29 21 2c  |....stmfd (sp)!,|
000019a0  7b 72 30 2d 72 31 30 2c  6c 69 6e 6b 7d 0d 0f a0  |{r0-r10,link}...|
000019b0  0e 62 6c 20 72 65 61 64  70 6f 73 0d 0f aa 11 61  |.bl readpos....a|
000019c0  64 72 20 72 30 2c 7a 61  6e 67 6c 65 0d 0f b4 0f  |dr r0,zangle....|
000019d0  6c 64 72 20 72 30 2c 5b  72 30 5d 0d 0f be 0d 62  |ldr r0,[r0]....b|
000019e0  6c 20 67 65 74 63 6f 73  0d 0f c8 0d 62 6c 20 67  |l getcos....bl g|
000019f0  65 74 73 69 6e 0d 0f d2  0d 6d 6f 76 20 72 30 2c  |etsin....mov r0,|
00001a00  72 38 0d 0f dc 0d 6d 6f  76 20 72 31 2c 72 37 0d  |r8....mov r1,r7.|
00001a10  0f e6 0d 62 6c 20 64 69  76 69 64 65 0d 0f f0 11  |...bl divide....|
00001a20  61 64 72 20 72 30 2c 61  6e 73 77 65 72 0d 0f fa  |adr r0,answer...|
00001a30  0f 6c 64 72 20 72 33 2c  5b 72 30 5d 0d 10 04 0d  |.ldr r3,[r0]....|
00001a40  6d 6f 76 20 72 30 2c 72  39 0d 10 0e 0d 6d 6f 76  |mov r0,r9....mov|
00001a50  20 72 31 2c 72 36 0d 10  18 0d 62 6c 20 64 69 76  | r1,r6....bl div|
00001a60  69 64 65 0d 10 22 11 61  64 72 20 72 30 2c 61 6e  |ide..".adr r0,an|
00001a70  73 77 65 72 0d 10 2c 0f  6c 64 72 20 72 34 2c 5b  |swer..,.ldr r4,[|
00001a80  72 30 5d 0d 10 36 10 73  75 62 20 72 30 2c 72 33  |r0]..6.sub r0,r3|
00001a90  2c 72 34 0d 10 40 0f 61  64 72 20 72 31 2c 78 70  |,r4..@.adr r1,xp|
00001aa0  6f 73 0d 10 4a 0f 73 74  72 20 72 30 2c 5b 72 31  |os..J.str r0,[r1|
00001ab0  5d 0d 10 54 0d 6d 6f 76  20 72 30 2c 72 38 0d 10  |]..T.mov r0,r8..|
00001ac0  5e 0d 6d 6f 76 20 72 31  2c 72 36 0d 10 68 0d 62  |^.mov r1,r6..h.b|
00001ad0  6c 20 64 69 76 69 64 65  0d 10 72 11 61 64 72 20  |l divide..r.adr |
00001ae0  72 30 2c 61 6e 73 77 65  72 0d 10 7c 0f 6c 64 72  |r0,answer..|.ldr|
00001af0  20 72 33 2c 5b 72 30 5d  0d 10 86 0d 6d 6f 76 20  | r3,[r0]....mov |
00001b00  72 30 2c 72 39 0d 10 90  0d 6d 6f 76 20 72 31 2c  |r0,r9....mov r1,|
00001b10  72 37 0d 10 9a 0d 62 6c  20 64 69 76 69 64 65 0d  |r7....bl divide.|
00001b20  10 a4 11 61 64 72 20 72  30 2c 61 6e 73 77 65 72  |...adr r0,answer|
00001b30  0d 10 ae 0f 6c 64 72 20  72 34 2c 5b 72 30 5d 0d  |....ldr r4,[r0].|
00001b40  10 b8 10 61 64 64 20 72  30 2c 72 33 2c 72 34 0d  |...add r0,r3,r4.|
00001b50  10 c2 0f 61 64 72 20 72  31 2c 79 70 6f 73 0d 10  |...adr r1,ypos..|
00001b60  cc 0f 73 74 72 20 72 30  2c 5b 72 31 5d 0d 10 d6  |..str r0,[r1]...|
00001b70  16 6d 6f 76 20 72 31 30  2c 72 31 30 2c 61 73 72  |.mov r10,r10,asr|
00001b80  23 31 30 0d 10 e0 0f 61  64 72 20 72 31 2c 7a 70  |#10....adr r1,zp|
00001b90  6f 73 0d 10 ea 10 73 74  72 20 72 31 30 2c 5b 72  |os....str r10,[r|
00001ba0  31 5d 0d 10 f4 05 3b 0d  10 fe 0e 62 6c 20 72 65  |1]....;....bl re|
00001bb0  61 64 70 6f 73 0d 11 08  11 61 64 72 20 72 30 2c  |adpos....adr r0,|
00001bc0  79 61 6e 67 6c 65 0d 11  12 0f 6c 64 72 20 72 30  |yangle....ldr r0|
00001bd0  2c 5b 72 30 5d 0d 11 1c  0d 62 6c 20 67 65 74 63  |,[r0]....bl getc|
00001be0  6f 73 0d 11 26 0d 62 6c  20 67 65 74 73 69 6e 0d  |os..&.bl getsin.|
00001bf0  11 30 0d 6d 6f 76 20 72  30 2c 72 38 0d 11 3a 0d  |.0.mov r0,r8..:.|
00001c00  6d 6f 76 20 72 31 2c 72  37 0d 11 44 0d 62 6c 20  |mov r1,r7..D.bl |
00001c10  64 69 76 69 64 65 0d 11  4e 11 61 64 72 20 72 30  |divide..N.adr r0|
00001c20  2c 61 6e 73 77 65 72 0d  11 58 0f 6c 64 72 20 72  |,answer..X.ldr r|
00001c30  33 2c 5b 72 30 5d 0d 11  62 0e 6d 6f 76 20 72 30  |3,[r0]..b.mov r0|
00001c40  2c 72 31 30 0d 11 6c 0d  6d 6f 76 20 72 31 2c 72  |,r10..l.mov r1,r|
00001c50  36 0d 11 76 0d 62 6c 20  64 69 76 69 64 65 0d 11  |6..v.bl divide..|
00001c60  80 11 61 64 72 20 72 30  2c 61 6e 73 77 65 72 0d  |..adr r0,answer.|
00001c70  11 8a 0f 6c 64 72 20 72  34 2c 5b 72 30 5d 0d 11  |...ldr r4,[r0]..|
00001c80  94 10 61 64 64 20 72 30  2c 72 33 2c 72 34 0d 11  |..add r0,r3,r4..|
00001c90  9e 0f 61 64 72 20 72 31  2c 78 70 6f 73 0d 11 a8  |..adr r1,xpos...|
00001ca0  0f 73 74 72 20 72 30 2c  5b 72 31 5d 0d 11 b2 14  |.str r0,[r1]....|
00001cb0  6d 6f 76 20 72 39 2c 72  39 2c 61 73 72 23 31 30  |mov r9,r9,asr#10|
00001cc0  0d 11 bc 0f 61 64 72 20  72 31 2c 79 70 6f 73 0d  |....adr r1,ypos.|
00001cd0  11 c6 0f 73 74 72 20 72  39 2c 5b 72 31 5d 0d 11  |...str r9,[r1]..|
00001ce0  d0 0e 6d 6f 76 20 72 30  2c 72 31 30 0d 11 da 0d  |..mov r0,r10....|
00001cf0  6d 6f 76 20 72 31 2c 72  37 0d 11 e4 0d 62 6c 20  |mov r1,r7....bl |
00001d00  64 69 76 69 64 65 0d 11  ee 11 61 64 72 20 72 30  |divide....adr r0|
00001d10  2c 61 6e 73 77 65 72 0d  11 f8 0f 6c 64 72 20 72  |,answer....ldr r|
00001d20  33 2c 5b 72 30 5d 0d 12  02 0d 6d 6f 76 20 72 30  |3,[r0]....mov r0|
00001d30  2c 72 38 0d 12 0c 0d 6d  6f 76 20 72 31 2c 72 36  |,r8....mov r1,r6|
00001d40  0d 12 16 0d 62 6c 20 64  69 76 69 64 65 0d 12 20  |....bl divide.. |
00001d50  11 61 64 72 20 72 30 2c  61 6e 73 77 65 72 0d 12  |.adr r0,answer..|
00001d60  2a 0f 6c 64 72 20 72 34  2c 5b 72 30 5d 0d 12 34  |*.ldr r4,[r0]..4|
00001d70  10 73 75 62 20 72 30 2c  72 33 2c 72 34 0d 12 3e  |.sub r0,r3,r4..>|
00001d80  0f 61 64 72 20 72 31 2c  7a 70 6f 73 0d 12 48 0f  |.adr r1,zpos..H.|
00001d90  73 74 72 20 72 30 2c 5b  72 31 5d 0d 12 52 05 3b  |str r0,[r1]..R.;|
00001da0  0d 12 5c 0e 62 6c 20 72  65 61 64 70 6f 73 0d 12  |..\.bl readpos..|
00001db0  66 11 61 64 72 20 72 30  2c 78 61 6e 67 6c 65 0d  |f.adr r0,xangle.|
00001dc0  12 70 0f 6c 64 72 20 72  30 2c 5b 72 30 5d 0d 12  |.p.ldr r0,[r0]..|
00001dd0  7a 0d 62 6c 20 67 65 74  63 6f 73 0d 12 84 0d 62  |z.bl getcos....b|
00001de0  6c 20 67 65 74 73 69 6e  0d 12 8e 14 6d 6f 76 20  |l getsin....mov |
00001df0  72 38 2c 72 38 2c 61 73  72 23 31 30 0d 12 98 0f  |r8,r8,asr#10....|
00001e00  61 64 72 20 72 31 2c 78  70 6f 73 0d 12 a2 0f 73  |adr r1,xpos....s|
00001e10  74 72 20 72 38 2c 5b 72  31 5d 0d 12 ac 0d 6d 6f  |tr r8,[r1]....mo|
00001e20  76 20 72 30 2c 72 39 0d  12 b6 0d 6d 6f 76 20 72  |v r0,r9....mov r|
00001e30  31 2c 72 37 0d 12 c0 0d  62 6c 20 64 69 76 69 64  |1,r7....bl divid|
00001e40  65 0d 12 ca 11 61 64 72  20 72 30 2c 61 6e 73 77  |e....adr r0,answ|
00001e50  65 72 0d 12 d4 0f 6c 64  72 20 72 33 2c 5b 72 30  |er....ldr r3,[r0|
00001e60  5d 0d 12 de 0e 6d 6f 76  20 72 30 2c 72 31 30 0d  |]....mov r0,r10.|
00001e70  12 e8 0d 6d 6f 76 20 72  31 2c 72 36 0d 12 f2 0d  |...mov r1,r6....|
00001e80  62 6c 20 64 69 76 69 64  65 0d 12 fc 11 61 64 72  |bl divide....adr|
00001e90  20 72 30 2c 61 6e 73 77  65 72 0d 13 06 0f 6c 64  | r0,answer....ld|
00001ea0  72 20 72 34 2c 5b 72 30  5d 0d 13 10 10 73 75 62  |r r4,[r0]....sub|
00001eb0  20 72 30 2c 72 33 2c 72  34 0d 13 1a 0f 61 64 72  | r0,r3,r4....adr|
00001ec0  20 72 31 2c 79 70 6f 73  0d 13 24 0f 73 74 72 20  | r1,ypos..$.str |
00001ed0  72 30 2c 5b 72 31 5d 0d  13 2e 0d 6d 6f 76 20 72  |r0,[r1]....mov r|
00001ee0  30 2c 72 39 0d 13 38 0d  6d 6f 76 20 72 31 2c 72  |0,r9..8.mov r1,r|
00001ef0  36 0d 13 42 0d 62 6c 20  64 69 76 69 64 65 0d 13  |6..B.bl divide..|
00001f00  4c 11 61 64 72 20 72 30  2c 61 6e 73 77 65 72 0d  |L.adr r0,answer.|
00001f10  13 56 0f 6c 64 72 20 72  33 2c 5b 72 30 5d 0d 13  |.V.ldr r3,[r0]..|
00001f20  60 0d 6d 6f 76 20 72 30  2c 31 30 0d 13 6a 0d 6d  |`.mov r0,10..j.m|
00001f30  6f 76 20 72 31 2c 72 37  0d 13 74 0d 62 6c 20 64  |ov r1,r7..t.bl d|
00001f40  69 76 69 64 65 0d 13 7e  11 61 64 72 20 72 30 2c  |ivide..~.adr r0,|
00001f50  61 6e 73 77 65 72 0d 13  88 0f 6c 64 72 20 72 34  |answer....ldr r4|
00001f60  2c 5b 72 30 5d 0d 13 92  10 61 64 64 20 72 30 2c  |,[r0]....add r0,|
00001f70  72 33 2c 72 34 0d 13 9c  0f 61 64 72 20 72 31 2c  |r3,r4....adr r1,|
00001f80  7a 70 6f 73 0d 13 a6 0f  73 74 72 20 72 30 2c 5b  |zpos....str r0,[|
00001f90  72 31 5d 0d 13 b0 05 3b  0d 13 ba 0e 62 6c 20 72  |r1]....;....bl r|
00001fa0  65 61 64 70 6f 73 0d 13  c4 14 61 64 72 20 72 30  |eadpos....adr r0|
00001fb0  2c 76 69 65 77 61 6e 67  6c 65 0d 13 ce 0f 6c 64  |,viewangle....ld|
00001fc0  72 20 72 30 2c 5b 72 30  5d 0d 13 d8 0d 62 6c 20  |r r0,[r0]....bl |
00001fd0  67 65 74 63 6f 73 0d 13  e2 0d 62 6c 20 67 65 74  |getcos....bl get|
00001fe0  73 69 6e 0d 13 ec 0e 6d  6f 76 20 72 30 2c 72 31  |sin....mov r0,r1|
00001ff0  30 0d 13 f6 0d 6d 6f 76  20 72 31 2c 72 37 0d 14  |0....mov r1,r7..|
00002000  00 0d 62 6c 20 64 69 76  69 64 65 0d 14 0a 11 61  |..bl divide....a|
00002010  64 72 20 72 30 2c 61 6e  73 77 65 72 0d 14 14 0f  |dr r0,answer....|
00002020  6c 64 72 20 72 33 2c 5b  72 30 5d 0d 14 1e 14 6d  |ldr r3,[r0]....m|
00002030  6f 76 20 72 38 2c 72 38  2c 61 73 72 23 31 30 0d  |ov r8,r8,asr#10.|
00002040  14 28 10 61 64 64 20 72  38 2c 72 38 2c 72 33 0d  |.(.add r8,r8,r3.|
00002050  14 32 0f 61 64 72 20 72  31 2c 78 70 6f 73 0d 14  |.2.adr r1,xpos..|
00002060  3c 0f 73 74 72 20 72 38  2c 5b 72 31 5d 0d 14 46  |<.str r8,[r1]..F|
00002070  05 3b 0d 14 50 0e 6d 6f  76 20 72 30 2c 72 31 30  |.;..P.mov r0,r10|
00002080  0d 14 5a 0d 6d 6f 76 20  72 31 2c 72 36 0d 14 64  |..Z.mov r1,r6..d|
00002090  0d 62 6c 20 64 69 76 69  64 65 0d 14 6e 11 61 64  |.bl divide..n.ad|
000020a0  72 20 72 30 2c 61 6e 73  77 65 72 0d 14 78 0f 6c  |r r0,answer..x.l|
000020b0  64 72 20 72 33 2c 5b 72  30 5d 0d 14 82 14 6d 6f  |dr r3,[r0]....mo|
000020c0  76 20 72 39 2c 72 39 2c  61 73 72 23 31 30 0d 14  |v r9,r9,asr#10..|
000020d0  8c 10 61 64 64 20 72 39  2c 72 39 2c 72 33 0d 14  |..add r9,r9,r3..|
000020e0  96 0f 61 64 72 20 72 31  2c 79 70 6f 73 0d 14 a0  |..adr r1,ypos...|
000020f0  0f 73 74 72 20 72 39 2c  5b 72 31 5d 0d 14 aa 05  |.str r9,[r1]....|
00002100  3b 0d 14 b4 1b 6c 64 6d  66 64 20 28 73 70 29 21  |;....ldmfd (sp)!|
00002110  2c 7b 72 30 2d 72 31 30  2c 70 63 7d 0d 14 be 05  |,{r0-r10,pc}....|
00002120  3b 0d 14 c8 10 2e 63 61  6c 63 5f 6f 62 6a 65 63  |;.....calc_objec|
00002130  74 0d 14 d2 1c 73 74 6d  66 64 20 28 73 70 29 21  |t....stmfd (sp)!|
00002140  2c 7b 72 30 2d 72 36 2c  6c 69 6e 6b 7d 0d 14 dc  |,{r0-r6,link}...|
00002150  28 3b 20 72 30 20 69 73  20 70 6f 69 6e 74 65 72  |(; r0 is pointer|
00002160  20 74 6f 20 63 6f 2d 6f  72 64 69 6e 61 74 65 20  | to co-ordinate |
00002170  62 6c 6f 63 6b 0d 14 e6  21 3b 20 72 31 20 69 73  |block...!; r1 is|
00002180  20 70 6f 69 6e 74 65 72  20 74 6f 20 70 6c 6f 74  | pointer to plot|
00002190  20 62 6c 6f 63 6b 0d 14  f0 14 73 74 6d 66 64 20  | block....stmfd |
000021a0  28 73 70 29 21 2c 7b 72  30 7d 0d 14 fa 0d 6d 6f  |(sp)!,{r0}....mo|
000021b0  76 20 72 30 2c 72 32 0d  15 04 11 62 6c 20 73 65  |v r0,r2....bl se|
000021c0  74 5f 78 61 6e 67 6c 65  0d 15 0e 0d 6d 6f 76 20  |t_xangle....mov |
000021d0  72 30 2c 72 33 0d 15 18  11 62 6c 20 73 65 74 5f  |r0,r3....bl set_|
000021e0  79 61 6e 67 6c 65 0d 15  22 0d 6d 6f 76 20 72 30  |yangle..".mov r0|
000021f0  2c 72 34 0d 15 2c 11 62  6c 20 73 65 74 5f 7a 61  |,r4..,.bl set_za|
00002200  6e 67 6c 65 0d 15 36 0d  6d 6f 76 20 72 30 2c 72  |ngle..6.mov r0,r|
00002210  35 0d 15 40 14 62 6c 20  73 65 74 5f 76 69 65 77  |5..@.bl set_view|
00002220  61 6e 67 6c 65 0d 15 4a  14 6c 64 6d 66 64 20 28  |angle..J.ldmfd (|
00002230  73 70 29 21 2c 7b 72 30  7d 0d 15 54 15 61 64 72  |sp)!,{r0}..T.adr|
00002240  20 72 32 2c 70 6c 6f 74  61 63 74 69 6f 6e 0d 15  | r2,plotaction..|
00002250  5e 0b 2e 72 65 74 75 72  6e 0d 15 68 15 6c 64 6d  |^..return..h.ldm|
00002260  69 61 20 72 30 21 2c 7b  72 33 2d 72 36 7d 0d 15  |ia r0!,{r3-r6}..|
00002270  72 0f 63 6d 70 20 72 33  2c 23 32 35 36 0d 15 7c  |r.cmp r3,#256..||
00002280  14 73 74 72 65 71 20 72  33 2c 5b 72 31 2c 23 30  |.streq r3,[r1,#0|
00002290  5d 0d 15 86 1c 6c 64 6d  65 71 66 64 20 28 73 70  |]....ldmeqfd (sp|
000022a0  29 21 2c 7b 72 30 2d 72  36 2c 70 63 7d 0d 15 90  |)!,{r0-r6,pc}...|
000022b0  14 73 74 6d 69 61 20 72  32 2c 7b 72 33 2d 72 36  |.stmia r2,{r3-r6|
000022c0  7d 0d 15 9a 0f 62 6c 20  63 61 6c 63 5f 70 6f 73  |}....bl calc_pos|
000022d0  0d 15 a4 14 6c 64 6d 69  61 20 72 32 2c 7b 72 33  |....ldmia r2,{r3|
000022e0  2d 72 35 7d 0d 15 ae 15  73 74 6d 69 61 20 72 31  |-r5}....stmia r1|
000022f0  21 2c 7b 72 33 2d 72 35  7d 0d 15 b8 0c 62 20 72  |!,{r3-r5}....b r|
00002300  65 74 75 72 6e 0d 15 c2  05 3b 0d 15 cc 11 2e 70  |eturn....;.....p|
00002310  6c 6f 74 5f 6f 62 6a 65  63 74 4c 0d 15 d6 1c 73  |lot_objectL....s|
00002320  74 6d 66 64 20 28 73 70  29 21 2c 7b 72 30 2d 72  |tmfd (sp)!,{r0-r|
00002330  32 2c 6c 69 6e 6b 7d 0d  15 e0 21 3b 20 72 30 20  |2,link}...!; r0 |
00002340  69 73 20 70 6f 69 6e 74  65 72 20 74 6f 20 70 6c  |is pointer to pl|
00002350  6f 74 20 62 6c 6f 63 6b  0d 15 ea 0d 6d 6f 76 20  |ot block....mov |
00002360  72 33 2c 72 30 0d 15 f4  0f 2e 72 65 74 75 72 6e  |r3,r0.....return|
00002370  70 6c 6f 74 0d 15 fe 15  6c 64 6d 69 61 20 72 33  |plot....ldmia r3|
00002380  21 2c 7b 72 30 2d 72 32  7d 0d 16 08 0f 63 6d 70  |!,{r0-r2}....cmp|
00002390  20 72 30 2c 23 32 35 36  0d 16 12 1c 6c 64 6d 65  | r0,#256....ldme|
000023a0  71 66 64 20 28 73 70 29  21 2c 7b 72 30 2d 72 32  |qfd (sp)!,{r0-r2|
000023b0  2c 70 63 7d 0d 16 1c 11  73 77 69 20 22 4f 53 5f  |,pc}....swi "OS_|
000023c0  50 6c 6f 74 22 0d 16 26  10 62 20 72 65 74 75 72  |Plot"..&.b retur|
000023d0  6e 70 6c 6f 74 0d 16 30  05 3b 0d 16 3a 11 2e 70  |nplot..0.;..:..p|
000023e0  6c 6f 74 5f 6f 62 6a 65  63 74 53 0d 16 44 16 73  |lot_objectS..D.s|
000023f0  74 6d 66 64 20 28 73 70  29 21 2c 7b 6c 69 6e 6b  |tmfd (sp)!,{link|
00002400  7d 0d 16 4e 21 3b 20 72  30 20 69 73 20 70 6f 69  |}..N!; r0 is poi|
00002410  6e 74 65 72 20 74 6f 20  70 6c 6f 74 20 62 6c 6f  |nter to plot blo|
00002420  63 6b 0d 16 58 14 6c 64  6d 66 64 20 28 73 70 29  |ck..X.ldmfd (sp)|
00002430  21 2c 7b 70 63 7d 0d 16  62 05 5d 0d 16 6c 05 ed  |!,{pc}..b.]..l..|
00002440  0d 16 76 09 f2 73 61 76  65 0d 16 80 05 e0 0d 16  |..v..save.......|
00002450  8a 05 3a 0d 16 94 0a dd  f2 73 61 76 65 0d 16 9e  |..:......save...|
00002460  29 ff 20 22 53 41 56 45  20 33 44 47 72 61 70 68  |). "SAVE 3DGraph|
00002470  69 63 73 20 22 2b c3 7e  63 6f 64 65 25 2b 22 20  |ics "+.~code%+" |
00002480  22 2b c3 7e 4f 25 0d 16  a8 1e ff 20 22 53 45 54  |"+.~O%..... "SET|
00002490  54 59 50 45 20 33 44 47  72 61 70 68 69 63 73 20  |TYPE 3DGraphics |
000024a0  46 46 41 22 0d 16 b2 05  e1 0d ff                 |FFA".......|
000024ab