Home » Archimedes archive » Acorn Computing » 1994 06 subscription disc.adf » 9406s » PD/3D_Tutor/MakeMod

PD/3D_Tutor/MakeMod

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 » Acorn Computing » 1994 06 subscription disc.adf » 9406s
Filename: PD/3D_Tutor/MakeMod
Read OK:
File size: 0C3B bytes
Load address: 0000
Exec address: 0000
File contents
   10REM > Listing3
   20REM 3-Dimensional Plot routines (glasses effect)
   30REM by Paul Mason
   40REM LEN Paul Mason, 1994
   50
   60DIM code% 8192
   70FOR opt%=4 TO 7 STEP 3
   80  P%=0:O%=code%
   90  [OPT opt%
  100  DCD 0
  110  DCD 0
  120  DCD 0
  130  DCD 0
  140  DCD title
  150  DCD help
  160  DCD 0
  170  DCD &3D3D00
  180  DCD handler
  190  DCD swilist
  200  DCD 0
  210  .title
  220  DCB "3DLines"
  230  DCB 0
  240  .help
  250  DCB "3D Plotter"+CHR$(9)
  260  DCB " (9 Jan 1994) by Paul Mason, � Paul Mason"
  270  DCB 0:ALIGN
  280  .swilist
  290  DCB "3D"
  300  DCB 0
  310  DCB "Plot"
  320  DCW 0:ALIGN
  330  .handler
  340  CMP R11,#0
  350  BEQ threeDplot
  360  ADR R0,swierr
  370  ORRS PC,R14,#(1<<28)
  380  .swierr
  390  DCD &1E6
  400  DCB "Unknown 3D operation"
  410  DCB 0:ALIGN
  420
  430  .divide
  440  ; < R0 = numerator
  450  ;   R1 = denominator
  460  ; > R2 = result of division
  470  CMP R1,#0
  480  BEQ end
  490  MOV R5,#1
  500  CMP R0,#0
  510  MVNLT R5,R5:RSBLT R0,R0,#0
  520  CMP R1,#0
  530  MVNLT R5,R5:RSBLT R1,R1,#0
  540  MOV R2,#0
  550  MOV R3,#0
  560  MOV R4,#1
  570  .div_lp1
  580  ADD R2,R2,#1
  590  MOV R1,R1,ASL#1
  600  CMP R1,R0
  610  BLE div_lp1
  620  .div_lp2
  630  SUB R2,R2,#1
  640  MOV R1,R1,ASR#1
  650  CMP R0,R1
  660  BLT div_lp2
  670  CMP R1,#0
  680  ADDGE R3,R3,R4,ASL R2
  690  SUB R0,R0,R1
  700  CMP R2,#0
  710  BGT div_lp2
  720  CMP R5,#0
  730  RSBLT R3,R3,#0
  740  MOV R2,R3
  750  .end
  760  MOV PC,R14
  770
  780  .threeDdata1
  790  DCD 0
  800  DCD 0
  810  DCD 0
  820  .threeDdata2
  830  DCD 0
  840  DCD 0
  850  DCD 0
  860  .threeDdata3
  870  DCD 0
  880  DCD 0
  890  DCD 0
  900  .threeDdata4
  910  DCD 0
  920  DCD 0
  930  DCD 0
  940  .threeDact
  950  DCD 0
  960  .temp
  970  DCD 0
  980
  990  .threeDplot
 1000  STMFD R13!,{R0-R12,R14}
 1010  ADR R12,threeDdata4
 1020  CMP R3,#1
 1030  MOVLT R3,#1
 1040  STMIA R12,{R1,R2,R3}
 1050  STR R0,threeDact
 1060  FNplot(-1)
 1070  FNplot(1)
 1080  ADR R12,threeDdata3
 1090  SUB R11,R12,#12
 1100  LDMIA R12,{R0-R8}
 1110  STMIA R11,{R0-R8}
 1120  LDMFD R13!,{R0-R12,PC}
 1130  ]
 1140NEXT
 1150SYS "OS_File",10,"3DPlotMod",&FFA,,code%,O%
 1160END
 1170
 1180DEFFNconv(x%,y%,z%,val%)
 1190 [OPT opt%
 1200 FNconvert(x%,z%,val%)
 1210 FNconvert(y%,z%,0)
 1220 ]
 1230=0
 1240
 1250DEFPROCcolour(col%)
 1260 [OPT opt%
 1270 SWI 256+18
 1280 SWI 256+1
 1290 SWI 256+col%
 1300 ]
 1310ENDPROC
 1320
 1330DEFFNconvert(xy%,z%,val%)
 1340 [OPT opt%
 1350 STMFD R13!,{R0-R5}
 1360 STR z%,temp
 1370 TST xy%,#(1<<31)
 1380 RSBNE xy%,xy%,#0
 1390 MOV xy%,xy%,LSL #9
 1400 RSBNE xy%,xy%,#0
 1410 ADD z%,z%,#512
 1420 MOV R0,xy%
 1430 MOV R1,z%
 1440 BL divide
 1450 MOV xy%,R2
 1460 LDR z%,temp
 1470 MOV R0,#16
 1480 MOVS R1,z%,ASR #9
 1490 MOVLE R1,#1
 1500 BL divide
 1510 RSB R2,R2,#16
 1520 ]
 1530 CASE val% OF
 1540   WHEN 1 : [OPT opt%:ADD xy%,xy%,R2:]
 1550   WHEN -1 : [OPT opt%:SUB xy%,xy%,R2:]
 1560 ENDCASE
 1570 [OPT opt%
 1580 LDR z%,temp
 1590 LDMFD R13!,{R0-R5}
 1600 ]
 1610=0
 1620
 1630DEFFNplot_it
 1640 [OPT opt%
 1650 LDMIA R12!,{R8,R9,R10}
 1660 FNconv(8,9,10,side%)
 1670 MOV R1,R8
 1680 MOV R2,R9
 1690 SWI "XOS_Plot"
 1700 ]
 1710=0
 1720
 1730DEFFNplot(side%)
 1740 IF side%=1 PROCcolour(2)
 1750 IF side%=-1 PROCcolour(1)
 1760 [OPT opt%
 1770 ADR R12,threeDdata1
 1780 MOV R0,#4
 1790 FNplot_it
 1800 FNplot_it
 1810 FNplot_it
 1820 LDR R0,threeDact
 1830 FNplot_it
 1840 ]
 1850=0
 1860
 1870DEFFNadrb(reg%,addr%)
 1880 [OPT opt%
 1890 ADR reg%,(addr%+1024)
 1900 SUB reg%,reg%,#1024
 1910 ]
 1920=0

� > Listing3
2� 3-Dimensional Plot routines (glasses effect)
� by Paul Mason
(� � Paul Mason, 1994
2
<� code% 8192
F� opt%=4 � 7 � 3
P  P%=0:O%=code%
Z  [OPT opt%
d  DCD 0
n  DCD 0
x  DCD 0
�  DCD 0
�  DCD title
�  DCD help
�  DCD 0
�  DCD &3D3D00
�  DCD handler
�  DCD swilist
�  DCD 0
�  .title
�  DCB "3DLines"
�  DCB 0
�  .help
�  DCB "3D Plotter"+�(9)
5  DCB " (9 Jan 1994) by Paul Mason, � Paul Mason"
  DCB 0:ALIGN
  .swilist
"  DCB "3D"
,  DCB 0
6  DCB "Plot"
@  DCW 0:ALIGN
J  .handler
T  CMP R11,#0
^  BEQ threeDplot
h  ADR R0,swierr
r  �RS PC,R14,#(1<<28)
|
  .swierr
�  DCD &1E6
�   DCB "Unknown 3D operation"
�  DCB 0:ALIGN
�
�
  .divide
�  ; < R0 = numerator
�  ;   R1 = denominator
�!  ; > R2 = result of division
�  CMP R1,#0
�
  BEQ end
�  MOV R5,#1
�  CMP R0,#0
�   MVNLT R5,R5:RSBLT R0,R0,#0
  CMP R1,#0
   MVNLT R5,R5:RSBLT R1,R1,#0
  MOV R2,#0
&  MOV R3,#0
0  MOV R4,#1
:  .div_lp1
D  ADD R2,R2,#1
N  MOV R1,R1,ASL#1
X  CMP R1,R0
b  BLE div_lp1
l  .div_lp2
v  SUB R2,R2,#1
�  MOV R1,R1,ASR#1
�  CMP R0,R1
�  BLT div_lp2
�  CMP R1,#0
�  ADDGE R3,R3,R4,ASL R2
�  SUB R0,R0,R1
�  CMP R2,#0
�  BGT div_lp2
�  CMP R5,#0
�  RSBLT R3,R3,#0
�  MOV R2,R3
�
  .end
�  MOV PC,R14

  .threeDdata1
  DCD 0
   DCD 0
*  DCD 0
4  .threeDdata2
>  DCD 0
H  DCD 0
R  DCD 0
\  .threeDdata3
f  DCD 0
p  DCD 0
z  DCD 0
�  .threeDdata4
�  DCD 0
�  DCD 0
�  DCD 0
�  .threeDact
�  DCD 0
�  .temp
�  DCD 0
�
�  .threeDplot
�  STMFD R13!,{R0-R12,R14}
�  ADR R12,threeDdata4
�  CMP R3,#1
  MOVLT R3,#1
  STMIA R12,{R1,R2,R3}
  STR R0,threeDact
$  �plot(-1)
.  �plot(1)
8  ADR R12,threeDdata3
B  SUB R11,R12,#12
L  LDMIA R12,{R0-R8}
V  STMIA R11,{R0-R8}
`  LDMFD R13!,{R0-R12,PC}
j  ]
t�
~.ș "OS_File",10,"3DPlotMod",&FFA,,code%,O%
��
�
�ݤconv(x%,y%,z%,val%)
� [OPT opt%
� �convert(x%,z%,val%)
� �convert(y%,z%,0)
� ]
�=0
�
���colour(col%)
� [OPT opt%
� SWI 256+18
 SWI 256+1

 SWI 256+col%
 ]
�
(
2ݤconvert(xy%,z%,val%)
< [OPT opt%
F STMFD R13!,{R0-R5}
P STR z%,temp
Z TST xy%,#(1<<31)
d RSBNE xy%,xy%,#0
n MOV xy%,xy%,LSL #9
x RSBNE xy%,xy%,#0
� ADD z%,z%,#512
� MOV R0,xy%
� MOV R1,z%
� BL divide
� MOV xy%,R2
� LDR z%,temp
� MOV R0,#16
� MOVS R1,z%,ASR #9
� MOVLE R1,#1
� BL divide
� RSB R2,R2,#16
� ]
� Ȏ val% �
'   � 1 : [OPT opt%:ADD xy%,xy%,R2:]
(   � -1 : [OPT opt%:SUB xy%,xy%,R2:]
 �
" [OPT opt%
, LDR z%,temp
6 LDMFD R13!,{R0-R5}
@ ]
J=0
T
^
ݤplot_it
h [OPT opt%
r LDMIA R12!,{R8,R9,R10}
| �conv(8,9,10,side%)
� MOV R1,R8
� MOV R2,R9
� SWI "XOS_Plot"
� ]
�=0
�
�ݤplot(side%)
� � side%=1 �colour(2)
� � side%=-1 �colour(1)
� [OPT opt%
� ADR R12,threeDdata1
� MOV R0,#4
�
 �plot_it

 �plot_it

 �plot_it
 LDR R0,threeDact
&
 �plot_it
0 ]
:=0
D
Nݤadrb(reg%,addr%)
X [OPT opt%
b ADR reg%,(addr%+1024)
l SUB reg%,reg%,#1024
v ]
�=0
�
00000000  0d 00 0a 10 f4 20 3e 20  4c 69 73 74 69 6e 67 33  |..... > Listing3|
00000010  0d 00 14 32 f4 20 33 2d  44 69 6d 65 6e 73 69 6f  |...2. 3-Dimensio|
00000020  6e 61 6c 20 50 6c 6f 74  20 72 6f 75 74 69 6e 65  |nal Plot routine|
00000030  73 20 28 67 6c 61 73 73  65 73 20 65 66 66 65 63  |s (glasses effec|
00000040  74 29 0d 00 1e 13 f4 20  62 79 20 50 61 75 6c 20  |t)..... by Paul |
00000050  4d 61 73 6f 6e 0d 00 28  18 f4 20 a9 20 50 61 75  |Mason..(.. . Pau|
00000060  6c 20 4d 61 73 6f 6e 2c  20 31 39 39 34 0d 00 32  |l Mason, 1994..2|
00000070  04 0d 00 3c 10 de 20 63  6f 64 65 25 20 38 31 39  |...<.. code% 819|
00000080  32 0d 00 46 14 e3 20 6f  70 74 25 3d 34 20 b8 20  |2..F.. opt%=4 . |
00000090  37 20 88 20 33 0d 00 50  13 20 20 50 25 3d 30 3a  |7 . 3..P.  P%=0:|
000000a0  4f 25 3d 63 6f 64 65 25  0d 00 5a 0f 20 20 5b 4f  |O%=code%..Z.  [O|
000000b0  50 54 20 6f 70 74 25 0d  00 64 0b 20 20 44 43 44  |PT opt%..d.  DCD|
000000c0  20 30 0d 00 6e 0b 20 20  44 43 44 20 30 0d 00 78  | 0..n.  DCD 0..x|
000000d0  0b 20 20 44 43 44 20 30  0d 00 82 0b 20 20 44 43  |.  DCD 0....  DC|
000000e0  44 20 30 0d 00 8c 0f 20  20 44 43 44 20 74 69 74  |D 0....  DCD tit|
000000f0  6c 65 0d 00 96 0e 20 20  44 43 44 20 68 65 6c 70  |le....  DCD help|
00000100  0d 00 a0 0b 20 20 44 43  44 20 30 0d 00 aa 11 20  |....  DCD 0.... |
00000110  20 44 43 44 20 26 33 44  33 44 30 30 0d 00 b4 11  | DCD &3D3D00....|
00000120  20 20 44 43 44 20 68 61  6e 64 6c 65 72 0d 00 be  |  DCD handler...|
00000130  11 20 20 44 43 44 20 73  77 69 6c 69 73 74 0d 00  |.  DCD swilist..|
00000140  c8 0b 20 20 44 43 44 20  30 0d 00 d2 0c 20 20 2e  |..  DCD 0....  .|
00000150  74 69 74 6c 65 0d 00 dc  13 20 20 44 43 42 20 22  |title....  DCB "|
00000160  33 44 4c 69 6e 65 73 22  0d 00 e6 0b 20 20 44 43  |3DLines"....  DC|
00000170  42 20 30 0d 00 f0 0b 20  20 2e 68 65 6c 70 0d 00  |B 0....  .help..|
00000180  fa 1b 20 20 44 43 42 20  22 33 44 20 50 6c 6f 74  |..  DCB "3D Plot|
00000190  74 65 72 22 2b bd 28 39  29 0d 01 04 35 20 20 44  |ter"+.(9)...5  D|
000001a0  43 42 20 22 20 28 39 20  4a 61 6e 20 31 39 39 34  |CB " (9 Jan 1994|
000001b0  29 20 62 79 20 50 61 75  6c 20 4d 61 73 6f 6e 2c  |) by Paul Mason,|
000001c0  20 a9 20 50 61 75 6c 20  4d 61 73 6f 6e 22 0d 01  | . Paul Mason"..|
000001d0  0e 11 20 20 44 43 42 20  30 3a 41 4c 49 47 4e 0d  |..  DCB 0:ALIGN.|
000001e0  01 18 0e 20 20 2e 73 77  69 6c 69 73 74 0d 01 22  |...  .swilist.."|
000001f0  0e 20 20 44 43 42 20 22  33 44 22 0d 01 2c 0b 20  |.  DCB "3D"..,. |
00000200  20 44 43 42 20 30 0d 01  36 10 20 20 44 43 42 20  | DCB 0..6.  DCB |
00000210  22 50 6c 6f 74 22 0d 01  40 11 20 20 44 43 57 20  |"Plot"..@.  DCW |
00000220  30 3a 41 4c 49 47 4e 0d  01 4a 0e 20 20 2e 68 61  |0:ALIGN..J.  .ha|
00000230  6e 64 6c 65 72 0d 01 54  10 20 20 43 4d 50 20 52  |ndler..T.  CMP R|
00000240  31 31 2c 23 30 0d 01 5e  14 20 20 42 45 51 20 74  |11,#0..^.  BEQ t|
00000250  68 72 65 65 44 70 6c 6f  74 0d 01 68 13 20 20 41  |hreeDplot..h.  A|
00000260  44 52 20 52 30 2c 73 77  69 65 72 72 0d 01 72 19  |DR R0,swierr..r.|
00000270  20 20 84 52 53 20 50 43  2c 52 31 34 2c 23 28 31  |  .RS PC,R14,#(1|
00000280  3c 3c 32 38 29 0d 01 7c  0d 20 20 2e 73 77 69 65  |<<28)..|.  .swie|
00000290  72 72 0d 01 86 0e 20 20  44 43 44 20 26 31 45 36  |rr....  DCD &1E6|
000002a0  0d 01 90 20 20 20 44 43  42 20 22 55 6e 6b 6e 6f  |...   DCB "Unkno|
000002b0  77 6e 20 33 44 20 6f 70  65 72 61 74 69 6f 6e 22  |wn 3D operation"|
000002c0  0d 01 9a 11 20 20 44 43  42 20 30 3a 41 4c 49 47  |....  DCB 0:ALIG|
000002d0  4e 0d 01 a4 04 0d 01 ae  0d 20 20 2e 64 69 76 69  |N........  .divi|
000002e0  64 65 0d 01 b8 18 20 20  3b 20 3c 20 52 30 20 3d  |de....  ; < R0 =|
000002f0  20 6e 75 6d 65 72 61 74  6f 72 0d 01 c2 1a 20 20  | numerator....  |
00000300  3b 20 20 20 52 31 20 3d  20 64 65 6e 6f 6d 69 6e  |;   R1 = denomin|
00000310  61 74 6f 72 0d 01 cc 21  20 20 3b 20 3e 20 52 32  |ator...!  ; > R2|
00000320  20 3d 20 72 65 73 75 6c  74 20 6f 66 20 64 69 76  | = result of div|
00000330  69 73 69 6f 6e 0d 01 d6  0f 20 20 43 4d 50 20 52  |ision....  CMP R|
00000340  31 2c 23 30 0d 01 e0 0d  20 20 42 45 51 20 65 6e  |1,#0....  BEQ en|
00000350  64 0d 01 ea 0f 20 20 4d  4f 56 20 52 35 2c 23 31  |d....  MOV R5,#1|
00000360  0d 01 f4 0f 20 20 43 4d  50 20 52 30 2c 23 30 0d  |....  CMP R0,#0.|
00000370  01 fe 20 20 20 4d 56 4e  4c 54 20 52 35 2c 52 35  |..   MVNLT R5,R5|
00000380  3a 52 53 42 4c 54 20 52  30 2c 52 30 2c 23 30 0d  |:RSBLT R0,R0,#0.|
00000390  02 08 0f 20 20 43 4d 50  20 52 31 2c 23 30 0d 02  |...  CMP R1,#0..|
000003a0  12 20 20 20 4d 56 4e 4c  54 20 52 35 2c 52 35 3a  |.   MVNLT R5,R5:|
000003b0  52 53 42 4c 54 20 52 31  2c 52 31 2c 23 30 0d 02  |RSBLT R1,R1,#0..|
000003c0  1c 0f 20 20 4d 4f 56 20  52 32 2c 23 30 0d 02 26  |..  MOV R2,#0..&|
000003d0  0f 20 20 4d 4f 56 20 52  33 2c 23 30 0d 02 30 0f  |.  MOV R3,#0..0.|
000003e0  20 20 4d 4f 56 20 52 34  2c 23 31 0d 02 3a 0e 20  |  MOV R4,#1..:. |
000003f0  20 2e 64 69 76 5f 6c 70  31 0d 02 44 12 20 20 41  | .div_lp1..D.  A|
00000400  44 44 20 52 32 2c 52 32  2c 23 31 0d 02 4e 15 20  |DD R2,R2,#1..N. |
00000410  20 4d 4f 56 20 52 31 2c  52 31 2c 41 53 4c 23 31  | MOV R1,R1,ASL#1|
00000420  0d 02 58 0f 20 20 43 4d  50 20 52 31 2c 52 30 0d  |..X.  CMP R1,R0.|
00000430  02 62 11 20 20 42 4c 45  20 64 69 76 5f 6c 70 31  |.b.  BLE div_lp1|
00000440  0d 02 6c 0e 20 20 2e 64  69 76 5f 6c 70 32 0d 02  |..l.  .div_lp2..|
00000450  76 12 20 20 53 55 42 20  52 32 2c 52 32 2c 23 31  |v.  SUB R2,R2,#1|
00000460  0d 02 80 15 20 20 4d 4f  56 20 52 31 2c 52 31 2c  |....  MOV R1,R1,|
00000470  41 53 52 23 31 0d 02 8a  0f 20 20 43 4d 50 20 52  |ASR#1....  CMP R|
00000480  30 2c 52 31 0d 02 94 11  20 20 42 4c 54 20 64 69  |0,R1....  BLT di|
00000490  76 5f 6c 70 32 0d 02 9e  0f 20 20 43 4d 50 20 52  |v_lp2....  CMP R|
000004a0  31 2c 23 30 0d 02 a8 1b  20 20 41 44 44 47 45 20  |1,#0....  ADDGE |
000004b0  52 33 2c 52 33 2c 52 34  2c 41 53 4c 20 52 32 0d  |R3,R3,R4,ASL R2.|
000004c0  02 b2 12 20 20 53 55 42  20 52 30 2c 52 30 2c 52  |...  SUB R0,R0,R|
000004d0  31 0d 02 bc 0f 20 20 43  4d 50 20 52 32 2c 23 30  |1....  CMP R2,#0|
000004e0  0d 02 c6 11 20 20 42 47  54 20 64 69 76 5f 6c 70  |....  BGT div_lp|
000004f0  32 0d 02 d0 0f 20 20 43  4d 50 20 52 35 2c 23 30  |2....  CMP R5,#0|
00000500  0d 02 da 14 20 20 52 53  42 4c 54 20 52 33 2c 52  |....  RSBLT R3,R|
00000510  33 2c 23 30 0d 02 e4 0f  20 20 4d 4f 56 20 52 32  |3,#0....  MOV R2|
00000520  2c 52 33 0d 02 ee 0a 20  20 2e 65 6e 64 0d 02 f8  |,R3....  .end...|
00000530  10 20 20 4d 4f 56 20 50  43 2c 52 31 34 0d 03 02  |.  MOV PC,R14...|
00000540  04 0d 03 0c 12 20 20 2e  74 68 72 65 65 44 64 61  |.....  .threeDda|
00000550  74 61 31 0d 03 16 0b 20  20 44 43 44 20 30 0d 03  |ta1....  DCD 0..|
00000560  20 0b 20 20 44 43 44 20  30 0d 03 2a 0b 20 20 44  | .  DCD 0..*.  D|
00000570  43 44 20 30 0d 03 34 12  20 20 2e 74 68 72 65 65  |CD 0..4.  .three|
00000580  44 64 61 74 61 32 0d 03  3e 0b 20 20 44 43 44 20  |Ddata2..>.  DCD |
00000590  30 0d 03 48 0b 20 20 44  43 44 20 30 0d 03 52 0b  |0..H.  DCD 0..R.|
000005a0  20 20 44 43 44 20 30 0d  03 5c 12 20 20 2e 74 68  |  DCD 0..\.  .th|
000005b0  72 65 65 44 64 61 74 61  33 0d 03 66 0b 20 20 44  |reeDdata3..f.  D|
000005c0  43 44 20 30 0d 03 70 0b  20 20 44 43 44 20 30 0d  |CD 0..p.  DCD 0.|
000005d0  03 7a 0b 20 20 44 43 44  20 30 0d 03 84 12 20 20  |.z.  DCD 0....  |
000005e0  2e 74 68 72 65 65 44 64  61 74 61 34 0d 03 8e 0b  |.threeDdata4....|
000005f0  20 20 44 43 44 20 30 0d  03 98 0b 20 20 44 43 44  |  DCD 0....  DCD|
00000600  20 30 0d 03 a2 0b 20 20  44 43 44 20 30 0d 03 ac  | 0....  DCD 0...|
00000610  10 20 20 2e 74 68 72 65  65 44 61 63 74 0d 03 b6  |.  .threeDact...|
00000620  0b 20 20 44 43 44 20 30  0d 03 c0 0b 20 20 2e 74  |.  DCD 0....  .t|
00000630  65 6d 70 0d 03 ca 0b 20  20 44 43 44 20 30 0d 03  |emp....  DCD 0..|
00000640  d4 04 0d 03 de 11 20 20  2e 74 68 72 65 65 44 70  |......  .threeDp|
00000650  6c 6f 74 0d 03 e8 1d 20  20 53 54 4d 46 44 20 52  |lot....  STMFD R|
00000660  31 33 21 2c 7b 52 30 2d  52 31 32 2c 52 31 34 7d  |13!,{R0-R12,R14}|
00000670  0d 03 f2 19 20 20 41 44  52 20 52 31 32 2c 74 68  |....  ADR R12,th|
00000680  72 65 65 44 64 61 74 61  34 0d 03 fc 0f 20 20 43  |reeDdata4....  C|
00000690  4d 50 20 52 33 2c 23 31  0d 04 06 11 20 20 4d 4f  |MP R3,#1....  MO|
000006a0  56 4c 54 20 52 33 2c 23  31 0d 04 10 1a 20 20 53  |VLT R3,#1....  S|
000006b0  54 4d 49 41 20 52 31 32  2c 7b 52 31 2c 52 32 2c  |TMIA R12,{R1,R2,|
000006c0  52 33 7d 0d 04 1a 16 20  20 53 54 52 20 52 30 2c  |R3}....  STR R0,|
000006d0  74 68 72 65 65 44 61 63  74 0d 04 24 0f 20 20 a4  |threeDact..$.  .|
000006e0  70 6c 6f 74 28 2d 31 29  0d 04 2e 0e 20 20 a4 70  |plot(-1)....  .p|
000006f0  6c 6f 74 28 31 29 0d 04  38 19 20 20 41 44 52 20  |lot(1)..8.  ADR |
00000700  52 31 32 2c 74 68 72 65  65 44 64 61 74 61 33 0d  |R12,threeDdata3.|
00000710  04 42 15 20 20 53 55 42  20 52 31 31 2c 52 31 32  |.B.  SUB R11,R12|
00000720  2c 23 31 32 0d 04 4c 17  20 20 4c 44 4d 49 41 20  |,#12..L.  LDMIA |
00000730  52 31 32 2c 7b 52 30 2d  52 38 7d 0d 04 56 17 20  |R12,{R0-R8}..V. |
00000740  20 53 54 4d 49 41 20 52  31 31 2c 7b 52 30 2d 52  | STMIA R11,{R0-R|
00000750  38 7d 0d 04 60 1c 20 20  4c 44 4d 46 44 20 52 31  |8}..`.  LDMFD R1|
00000760  33 21 2c 7b 52 30 2d 52  31 32 2c 50 43 7d 0d 04  |3!,{R0-R12,PC}..|
00000770  6a 07 20 20 5d 0d 04 74  05 ed 0d 04 7e 2e c8 99  |j.  ]..t....~...|
00000780  20 22 4f 53 5f 46 69 6c  65 22 2c 31 30 2c 22 33  | "OS_File",10,"3|
00000790  44 50 6c 6f 74 4d 6f 64  22 2c 26 46 46 41 2c 2c  |DPlotMod",&FFA,,|
000007a0  63 6f 64 65 25 2c 4f 25  0d 04 88 05 e0 0d 04 92  |code%,O%........|
000007b0  04 0d 04 9c 19 dd a4 63  6f 6e 76 28 78 25 2c 79  |.......conv(x%,y|
000007c0  25 2c 7a 25 2c 76 61 6c  25 29 0d 04 a6 0e 20 5b  |%,z%,val%).... [|
000007d0  4f 50 54 20 6f 70 74 25  0d 04 b0 19 20 a4 63 6f  |OPT opt%.... .co|
000007e0  6e 76 65 72 74 28 78 25  2c 7a 25 2c 76 61 6c 25  |nvert(x%,z%,val%|
000007f0  29 0d 04 ba 16 20 a4 63  6f 6e 76 65 72 74 28 79  |).... .convert(y|
00000800  25 2c 7a 25 2c 30 29 0d  04 c4 06 20 5d 0d 04 ce  |%,z%,0).... ]...|
00000810  06 3d 30 0d 04 d8 04 0d  04 e2 12 dd f2 63 6f 6c  |.=0..........col|
00000820  6f 75 72 28 63 6f 6c 25  29 0d 04 ec 0e 20 5b 4f  |our(col%).... [O|
00000830  50 54 20 6f 70 74 25 0d  04 f6 0f 20 53 57 49 20  |PT opt%.... SWI |
00000840  32 35 36 2b 31 38 0d 05  00 0e 20 53 57 49 20 32  |256+18.... SWI 2|
00000850  35 36 2b 31 0d 05 0a 11  20 53 57 49 20 32 35 36  |56+1.... SWI 256|
00000860  2b 63 6f 6c 25 0d 05 14  06 20 5d 0d 05 1e 05 e1  |+col%.... ].....|
00000870  0d 05 28 04 0d 05 32 1a  dd a4 63 6f 6e 76 65 72  |..(...2...conver|
00000880  74 28 78 79 25 2c 7a 25  2c 76 61 6c 25 29 0d 05  |t(xy%,z%,val%)..|
00000890  3c 0e 20 5b 4f 50 54 20  6f 70 74 25 0d 05 46 17  |<. [OPT opt%..F.|
000008a0  20 53 54 4d 46 44 20 52  31 33 21 2c 7b 52 30 2d  | STMFD R13!,{R0-|
000008b0  52 35 7d 0d 05 50 10 20  53 54 52 20 7a 25 2c 74  |R5}..P. STR z%,t|
000008c0  65 6d 70 0d 05 5a 15 20  54 53 54 20 78 79 25 2c  |emp..Z. TST xy%,|
000008d0  23 28 31 3c 3c 33 31 29  0d 05 64 15 20 52 53 42  |#(1<<31)..d. RSB|
000008e0  4e 45 20 78 79 25 2c 78  79 25 2c 23 30 0d 05 6e  |NE xy%,xy%,#0..n|
000008f0  17 20 4d 4f 56 20 78 79  25 2c 78 79 25 2c 4c 53  |. MOV xy%,xy%,LS|
00000900  4c 20 23 39 0d 05 78 15  20 52 53 42 4e 45 20 78  |L #9..x. RSBNE x|
00000910  79 25 2c 78 79 25 2c 23  30 0d 05 82 13 20 41 44  |y%,xy%,#0.... AD|
00000920  44 20 7a 25 2c 7a 25 2c  23 35 31 32 0d 05 8c 0f  |D z%,z%,#512....|
00000930  20 4d 4f 56 20 52 30 2c  78 79 25 0d 05 96 0e 20  | MOV R0,xy%.... |
00000940  4d 4f 56 20 52 31 2c 7a  25 0d 05 a0 0e 20 42 4c  |MOV R1,z%.... BL|
00000950  20 64 69 76 69 64 65 0d  05 aa 0f 20 4d 4f 56 20  | divide.... MOV |
00000960  78 79 25 2c 52 32 0d 05  b4 10 20 4c 44 52 20 7a  |xy%,R2.... LDR z|
00000970  25 2c 74 65 6d 70 0d 05  be 0f 20 4d 4f 56 20 52  |%,temp.... MOV R|
00000980  30 2c 23 31 36 0d 05 c8  16 20 4d 4f 56 53 20 52  |0,#16.... MOVS R|
00000990  31 2c 7a 25 2c 41 53 52  20 23 39 0d 05 d2 10 20  |1,z%,ASR #9.... |
000009a0  4d 4f 56 4c 45 20 52 31  2c 23 31 0d 05 dc 0e 20  |MOVLE R1,#1.... |
000009b0  42 4c 20 64 69 76 69 64  65 0d 05 e6 12 20 52 53  |BL divide.... RS|
000009c0  42 20 52 32 2c 52 32 2c  23 31 36 0d 05 f0 06 20  |B R2,R2,#16.... |
000009d0  5d 0d 05 fa 0e 20 c8 8e  20 76 61 6c 25 20 ca 0d  |].... .. val% ..|
000009e0  06 04 27 20 20 20 c9 20  31 20 3a 20 5b 4f 50 54  |..'   . 1 : [OPT|
000009f0  20 6f 70 74 25 3a 41 44  44 20 78 79 25 2c 78 79  | opt%:ADD xy%,xy|
00000a00  25 2c 52 32 3a 5d 0d 06  0e 28 20 20 20 c9 20 2d  |%,R2:]...(   . -|
00000a10  31 20 3a 20 5b 4f 50 54  20 6f 70 74 25 3a 53 55  |1 : [OPT opt%:SU|
00000a20  42 20 78 79 25 2c 78 79  25 2c 52 32 3a 5d 0d 06  |B xy%,xy%,R2:]..|
00000a30  18 06 20 cb 0d 06 22 0e  20 5b 4f 50 54 20 6f 70  |.. ...". [OPT op|
00000a40  74 25 0d 06 2c 10 20 4c  44 52 20 7a 25 2c 74 65  |t%..,. LDR z%,te|
00000a50  6d 70 0d 06 36 17 20 4c  44 4d 46 44 20 52 31 33  |mp..6. LDMFD R13|
00000a60  21 2c 7b 52 30 2d 52 35  7d 0d 06 40 06 20 5d 0d  |!,{R0-R5}..@. ].|
00000a70  06 4a 06 3d 30 0d 06 54  04 0d 06 5e 0d dd a4 70  |.J.=0..T...^...p|
00000a80  6c 6f 74 5f 69 74 0d 06  68 0e 20 5b 4f 50 54 20  |lot_it..h. [OPT |
00000a90  6f 70 74 25 0d 06 72 1b  20 4c 44 4d 49 41 20 52  |opt%..r. LDMIA R|
00000aa0  31 32 21 2c 7b 52 38 2c  52 39 2c 52 31 30 7d 0d  |12!,{R8,R9,R10}.|
00000ab0  06 7c 18 20 a4 63 6f 6e  76 28 38 2c 39 2c 31 30  |.|. .conv(8,9,10|
00000ac0  2c 73 69 64 65 25 29 0d  06 86 0e 20 4d 4f 56 20  |,side%).... MOV |
00000ad0  52 31 2c 52 38 0d 06 90  0e 20 4d 4f 56 20 52 32  |R1,R8.... MOV R2|
00000ae0  2c 52 39 0d 06 9a 13 20  53 57 49 20 22 58 4f 53  |,R9.... SWI "XOS|
00000af0  5f 50 6c 6f 74 22 0d 06  a4 06 20 5d 0d 06 ae 06  |_Plot".... ]....|
00000b00  3d 30 0d 06 b8 04 0d 06  c2 11 dd a4 70 6c 6f 74  |=0..........plot|
00000b10  28 73 69 64 65 25 29 0d  06 cc 19 20 e7 20 73 69  |(side%).... . si|
00000b20  64 65 25 3d 31 20 f2 63  6f 6c 6f 75 72 28 32 29  |de%=1 .colour(2)|
00000b30  0d 06 d6 1a 20 e7 20 73  69 64 65 25 3d 2d 31 20  |.... . side%=-1 |
00000b40  f2 63 6f 6c 6f 75 72 28  31 29 0d 06 e0 0e 20 5b  |.colour(1).... [|
00000b50  4f 50 54 20 6f 70 74 25  0d 06 ea 18 20 41 44 52  |OPT opt%.... ADR|
00000b60  20 52 31 32 2c 74 68 72  65 65 44 64 61 74 61 31  | R12,threeDdata1|
00000b70  0d 06 f4 0e 20 4d 4f 56  20 52 30 2c 23 34 0d 06  |.... MOV R0,#4..|
00000b80  fe 0d 20 a4 70 6c 6f 74  5f 69 74 0d 07 08 0d 20  |.. .plot_it.... |
00000b90  a4 70 6c 6f 74 5f 69 74  0d 07 12 0d 20 a4 70 6c  |.plot_it.... .pl|
00000ba0  6f 74 5f 69 74 0d 07 1c  15 20 4c 44 52 20 52 30  |ot_it.... LDR R0|
00000bb0  2c 74 68 72 65 65 44 61  63 74 0d 07 26 0d 20 a4  |,threeDact..&. .|
00000bc0  70 6c 6f 74 5f 69 74 0d  07 30 06 20 5d 0d 07 3a  |plot_it..0. ]..:|
00000bd0  06 3d 30 0d 07 44 04 0d  07 4e 16 dd a4 61 64 72  |.=0..D...N...adr|
00000be0  62 28 72 65 67 25 2c 61  64 64 72 25 29 0d 07 58  |b(reg%,addr%)..X|
00000bf0  0e 20 5b 4f 50 54 20 6f  70 74 25 0d 07 62 1a 20  |. [OPT opt%..b. |
00000c00  41 44 52 20 72 65 67 25  2c 28 61 64 64 72 25 2b  |ADR reg%,(addr%+|
00000c10  31 30 32 34 29 0d 07 6c  18 20 53 55 42 20 72 65  |1024)..l. SUB re|
00000c20  67 25 2c 72 65 67 25 2c  23 31 30 32 34 0d 07 76  |g%,reg%,#1024..v|
00000c30  06 20 5d 0d 07 80 06 3d  30 0d ff                 |. ]....=0..|
00000c3b