Home » Recent acquisitions » Acorn ADFS disks » adfs_AcornUser_199610.adf » Regulars » StarInfo/Turnbull/!PoorJenny/A

StarInfo/Turnbull/!PoorJenny/A

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/Turnbull/!PoorJenny/A
Read OK:
File size: 0FF7 bytes
Load address: 0000
Exec address: 0000
File contents
   10ON ERROR ERROR EXT ERR,REPORT$+" at line "+STR$ERL:END
   30MODE13:OFF
   40DIMjenny%&5000:!jenny%=&5000:OSCLI("Load <Jenny$Dir>.Jenny "+STR$~(jenny%+4))
   50jenny%+=jenny%!8:jenny%+=jenny%!32
   70SS%=7:TC%=5:SC%=4:WC%=4
   80codelen%=&4000:DIMcode%codelen%
   90REPEAT
  100 PROCassemble
  110 REPEAT
  120  CALLblert%
  130  k=INKEY0
  140 UNTIL k<>-1
  150 CASE CHR$k OF
  160 WHEN " ":
  170  SS%=RND(8)
  180  TC%=RND(8)
  190  SC%=RND(8)
  200  WC%=RND(8)
  201 WHEN "e", "E":
  202  SS%=FNget
  203  TC%=FNget
  204  SC%=FNget
  205  WC%=FNget
  220 WHEN "p", "P":
  221  VDU 30
  230  PRINT SS%,TC%,SC%,WC%
  240  REPEATUNTILGET=32
  250 ENDCASE
  260UNTIL0
  270END
  280:
  281DEF FNget
  282REPEAT
  283 k=GET-48
  284UNTIL k>0 AND k<9
  285=k
  290:
  300DEFPROCassemble
  310FORT%=0TO2STEP2:P%=code%
  320[OPT T%
  330:
  340.test%
  350EQUD -1:EQUD -1:EQUD -1:EQUD -1
  360EQUD -1:EQUD -1:EQUD -1:EQUD -1
  370EQUD -1:EQUD -1:EQUD -1:EQUD -1
  380EQUD -1:EQUD -1:EQUD -1:EQUD -1
  390:
  400.vduvars%:EQUD 148:EQUD -1
  410.scraddr%:EQUD -1
  420:
  430:
  440.anim%:EQUD 1<<32-SS%:EQUD 0
  450:
  460.blert%
  470STMFD R13!,{R0-R12,R14}
  480ADR R0,vduvars%
  490ADR R1,scraddr%
  500SWI "OS_ReadVduVariables"
  510LDR R14,scraddr%
  520OPT FNadr(12,jenny%,2)
  530REM Rotate anim vector
  540ADR R2,anim%
  550LDMIA R2,{R0-R1}
  560ADD R0,R0,R1,ASR#TC%
  570SUB R1,R1,R0,ASR#TC%
  580STMIA R2,{R0-R1}
  590REM Initial coordinates
  600MOV R2,#1<<32-1
  610MOV R3,#1<<32-1
  620OPT FNmla(2,0,-160,2)
  630OPT FNmla(3,1,-160,3)
  640ADD R2,R2,R0,ASR#1
  650ADD R3,R3,R1,ASR#1
  660OPT FNmla(2,1,128,2)
  670OPT FNmla(3,0,-128,3)
  680SUB R2,R2,R1,ASR#1
  690ADD R3,R3,R0,ASR#1
  700REM Initial wibble factor
  710MOV R6,R0
  720MOV R7,R1
  730REM The loops
  740MOV R11,#256
  750.yloop%
  760SUB R6,R6,R7,ASR#SC%
  770ADD R7,R7,R6,ASR#SC%
  780MOV R4,R6
  790MOV R5,#0
  800SUB R11,R11,#320<<16
  810.xloop%
  820MOV R9,#0
  830]:FORU%=0TO3:[OPT T%
  840ADD R8,R3,R5,ASL#WC%
  850MOV R10,R8,LSR#32-SS%
  860ADD R10,R12,R10,ASL#SS%
  870ADD R8,R2,R4,ASL#WC%
  880LDRB R10,[R10,R8,LSR#32-SS%]
  890ORR R9,R9,R10,LSL#8*U%
  900ADD R2,R2,R0
  910ADD R3,R3,R1
  920ADD R4,R4,R5,ASR#SC%
  930SUB R5,R5,R4,ASR#SC%
  940]:NEXT:[OPT T%
  950STR R9,[R14],#4
  960ADDS R11,R11,#4<<16
  970BLE xloop%
  980OPT FNmla(2,0,-320,2)
  990OPT FNmla(3,1,-320,3)
 1000SUB R2,R2,R1
 1010ADD R3,R3,R0
 1020SUBS R11,R11,#1
 1030BGT yloop%
 1040LDMFD R13!,{R0-R12,PC}
 1050:
 1060]:IFP%>code%+codelen%THENERROR255,"Code isn't big enough"
 1070NEXT
 1080ENDPROC
 1090REM Miscellaneous macros used in most ARM code programs
 1100:
 1110DEFPROCmode(X%,Y%,C%)
 1120DIMJ%64:P%=J%:[OPT 2
 1130EQUD 1:EQUD X%:EQUD Y%:EQUD C%:EQUD -1
 1140]:IFC%=3THEN[OPT 2:EQUD 3:EQUD 255:]
 1150[OPT 2:EQUD -1:]:MODEJ%
 1160ENDPROC
 1170:
 1180DEFFNadr(R%,A%,I%)
 1190IF(P%AND3)<>0THENPRINT"Code isn't word aligned!":END
 1200IF(T%AND2)=0THENP%+=I%<<2:=T%
 1210LOCALN%,O%,H%,U%:H%=A%-(P%+8):N%=0:O%=15
 1220FORU%=1TOI%:IFH%=0THEN
 1230[OPT T%:MOV R%,O%:]
 1240ELSEWHILE(H%AND3)=0:H%=H%>>2:N%+=2:ENDWHILE
 1250IF(H%AND256)=0THEN
 1260[OPT T%:ADD R%,O%,#(H%AND255)<<N%:]:H%-=H%AND255
 1270ELSE[OPT T%:SUB R%,O%,#(256-H%AND255)<<N%:]:H%+=256-H%AND255
 1280ENDIF
 1290ENDIF:O%=R%:NEXT
 1300IFH%<>0THENPRINT"Could not ADR to &";~A%;" in ";I%;" instructions (R%=";R%;")":END
 1310=T%
 1320:
 1330DEFFNmakej(J%,N%,dummy%)
 1340FORU%=0TON%-1:[OPT T%
 1350EQUD dummy%-J%
 1360]:NEXT:=T%
 1370:
 1380DEFFNregisterj(J%,N%)
 1390IFP%<J%THENERROR255,"j routines must come after j table (J%=&"+STR$~J%+")"
 1400J%!(N%<<2)=P%-J%
 1410=T%
 1420:
 1430REM Does R=S*C+O
 1440REM Copes with R=O
 1450REM Takes registers R, S and O and constant C
 1460:
 1470DEFFNmla(R%,S%,C%,O%)
 1480IFC%=0THEN[OPT T%:MOV R%,O%:]
 1490LOCALN%
 1500N%=0:WHILEC%<>0
 1510WHILE(C%AND1)=0:N%+=1:C%=C%>>1:ENDWHILE
 1520IF(C%AND2)=0THEN
 1530[OPT T%:ADD R%,O%,S%,ASL#N%:]:C%-=1
 1540ELSE[OPT T%:SUB R%,O%,S%,ASL#N%:]:C%+=1
 1550ENDIF:O%=R%:ENDWHILE
 1560=T%
 1570:
 1580REM Does R+=[(N<<F) div D]*C
 1590REM Also N=(N<<F) mod D
 1600REM M is maximum expected value of (N<<F) div D
 1610REM Copes with (N<<F) bigger than 2^32
 1620REM N and D are unsigned
 1630REM Takes registers R, N, D and constants C, F and M
 1640:
 1650DEFFNdiva(R%,N%,F%,D%,C%,M%)
 1660LOCALU%
 1670M%=1+INT(LN(M%)/LN(2))
 1680IFM%>F%+1THEN
 1690FORU%=M%-1TOF%+1STEP-1:[OPT T%
 1700CMP D%,N%,ASR#U%-F%
 1710SUBLE N%,N%,D%,ASL#U%-F%
 1720]:IFC%>=0THEN
 1730[OPT T%:ADDLE R%,R%,#C%<<U%:]
 1740ELSE[OPT T%:SUBLE R%,R%,#-C%<<U%:]
 1750ENDIF:NEXT
 1760ENDIF:IFM%>F%THEN
 1770[OPT T%
 1780CMP N%,D%
 1790SUBGE N%,N%,D%
 1800]:IFC%>=0THEN
 1810[OPT T%:ADDGE R%,R%,#C%<<F%:]
 1820ELSE[OPT T%:SUBGE R%,R%,#-C%<<F%:]
 1830ENDIF
 1840ENDIF:IFF%>0THEN
 1850FORU%=F%-1TO0STEP-1:[OPT T%
 1860RSBS N%,D%,N%,ASL#1
 1870ADDLT N%,N%,D%
 1880]:IFC%>=0THEN
 1890[OPT T%:ADDGE R%,R%,#C%<<U%:]
 1900ELSE[OPT T%:SUBGE R%,R%,#-C%<<U%:]
 1910ENDIF:NEXT
 1920ENDIF:=T%

!� � � � �,�$+" at line "+Þ:�
	�13:�
(H�jenny%&5000:!jenny%=&5000:�("Load <Jenny$Dir>.Jenny "+�~(jenny%+4))
2&jenny%+=jenny%!8:jenny%+=jenny%!32
FSS%=7:TC%=5:SC%=4:WC%=4
P!codelen%=&4000:�code%codelen%
Z�
d �assemble
n �
x
  �blert%
�
  k=�0
� � k<>-1
� Ȏ �k �
� � " ":
�  SS%=�(8)
�  TC%=�(8)
�  SC%=�(8)
�  WC%=�(8)
� � "e", "E":
�  SS%=�get
�  TC%=�get
�  SC%=�get
�  WC%=�get
� � "p", "P":
�
  � 30
�  � SS%,TC%,SC%,WC%
�  ���=32
� �
�0
�
:

� �get
�
 k=�-48
� k>0 � k<9
=k
":
,��assemble
6�T%=0�2�2:P%=code%
@[OPT T%
J:
T
.test%
^#EQUD -1:EQUD -1:EQUD -1:EQUD -1
h#EQUD -1:EQUD -1:EQUD -1:EQUD -1
r#EQUD -1:EQUD -1:EQUD -1:EQUD -1
|#EQUD -1:EQUD -1:EQUD -1:EQUD -1
�:
�.vduvars%:EQUD 148:EQUD -1
�.scraddr%:EQUD -1
�:
�:
� .anim%:EQUD 1<<32-SS%:EQUD 0
�:
�.blert%
�STMFD R13!,{R0-R12,R14}
�ADR R0,vduvars%
�ADR R1,scraddr%
�SWI "OS_ReadVduVariables"
�LDR R14,scraddr%
OPT �adr(12,jenny%,2)
� Rotate anim vector
ADR R2,anim%
&LDMIA R2,{R0-R1}
0ADD R0,R0,R1,ASR#TC%
:SUB R1,R1,R0,ASR#TC%
DSTMIA R2,{R0-R1}
N� Initial coordinates
XMOV R2,#1<<32-1
bMOV R3,#1<<32-1
lOPT �mla(2,0,-160,2)
vOPT �mla(3,1,-160,3)
�ADD R2,R2,R0,ASR#1
�ADD R3,R3,R1,ASR#1
�OPT �mla(2,1,128,2)
�OPT �mla(3,0,-128,3)
�SUB R2,R2,R1,ASR#1
�ADD R3,R3,R0,ASR#1
�� Initial wibble factor
�
MOV R6,R0
�
MOV R7,R1
�� The loops
�MOV R11,#256
�.yloop%
�SUB R6,R6,R7,ASR#SC%
ADD R7,R7,R6,ASR#SC%

MOV R4,R6

MOV R5,#0
 SUB R11,R11,#320<<16
*.xloop%
4
MOV R9,#0
>]:�U%=0�3:[OPT T%
HADD R8,R3,R5,ASL#WC%
RMOV R10,R8,LSR#32-SS%
\ADD R10,R12,R10,ASL#SS%
fADD R8,R2,R4,ASL#WC%
p LDRB R10,[R10,R8,LSR#32-SS%]
z�R R9,R9,R10,LSL#8*U%
�ADD R2,R2,R0
�ADD R3,R3,R1
�ADD R4,R4,R5,ASR#SC%
�SUB R5,R5,R4,ASR#SC%
�]:�:[OPT T%
�STR R9,[R14],#4
�ADDS R11,R11,#4<<16
�BLE xloop%
�OPT �mla(2,0,-320,2)
�OPT �mla(3,1,-320,3)
�SUB R2,R2,R1
�ADD R3,R3,R0
�SUBS R11,R11,#1
BGT yloop%
LDMFD R13!,{R0-R12,PC}
:
$5]:�P%>code%+codelen%��255,"Code isn't big enough"
.�
8�
B9� Miscellaneous macros used in most ARM code programs
L:
V��mode(X%,Y%,C%)
`�J%64:P%=J%:[OPT 2
j*EQUD 1:EQUD X%:EQUD Y%:EQUD C%:EQUD -1
t$]:�C%=3�[OPT 2:EQUD 3:EQUD 255:]
~[OPT 2:EQUD -1:]:�J%
��
�:
�ݤadr(R%,A%,I%)
�,�(P%�3)<>0��"Code isn't word aligned!":�
��(T%�2)=0�P%+=I%<<2:=T%
�(�N%,O%,H%,U%:H%=A%-(P%+8):N%=0:O%=15
��U%=1�I%:�H%=0�
�[OPT T%:MOV R%,O%:]
� �ȕ(H%�3)=0:H%=H%>>2:N%+=2:�
��(H%�256)=0�
�0[OPT T%:ADD R%,O%,#(H%�255)<<N%:]:H%-=H%�255
�9�[OPT T%:SUB R%,O%,#(256-H%�255)<<N%:]:H%+=256-H%�255
�


�:O%=R%:�
L�H%<>0��"Could not ADR to &";~A%;" in ";I%;" instructions (R%=";R%;")":�
=T%
(:
2ݤmakej(J%,N%,dummy%)
<�U%=0�N%-1:[OPT T%
FEQUD dummy%-J%
P]:�:=T%
Z:
dݤregisterj(J%,N%)
nC�P%<J%��255,"j routines must come after j table (J%=&"+�~J%+")"
xJ%!(N%<<2)=P%-J%
�=T%
�:
�� Does R=S*C+O
�� Copes with R=O
�/� Takes registers R, S and O and constant C
�:
�ݤmla(R%,S%,C%,O%)
��C%=0�[OPT T%:MOV R%,O%:]
��N%
�N%=0:ȕC%<>0
�ȕ(C%�1)=0:N%+=1:C%=C%>>1:�
��(C%�2)=0�
�'[OPT T%:ADD R%,O%,S%,ASL#N%:]:C%-=1
(�[OPT T%:SUB R%,O%,S%,ASL#N%:]:C%+=1

�:O%=R%:�
=T%
":
,� Does R+=[(N<<F) div D]*C
6� Also N=(N<<F) mod D
@1� M is maximum expected value of (N<<F) div D
J(� Copes with (N<<F) bigger than 2^32
T� N and D are unsigned
^6� Takes registers R, N, D and constants C, F and M
h:
rݤdiva(R%,N%,F%,D%,C%,M%)
|�U%
�M%=1+�(�(M%)/�(2))
�
�M%>F%+1�
��U%=M%-1�F%+1�-1:[OPT T%
�CMP D%,N%,ASR#U%-F%
�SUBLE N%,N%,D%,ASL#U%-F%
�
]:�C%>=0�
�![OPT T%:ADDLE R%,R%,#C%<<U%:]
�#�[OPT T%:SUBLE R%,R%,#-C%<<U%:]
��:�
�
�:�M%>F%�
�[OPT T%
�
CMP N%,D%
�SUBGE N%,N%,D%

]:�C%>=0�
![OPT T%:ADDGE R%,R%,#C%<<F%:]
#�[OPT T%:SUBGE R%,R%,#-C%<<F%:]
&�
0�:�F%>0�
:�U%=F%-1�0�-1:[OPT T%
DRSBS N%,D%,N%,ASL#1
NADDLT N%,N%,D%
X
]:�C%>=0�
b![OPT T%:ADDGE R%,R%,#C%<<U%:]
l#�[OPT T%:SUBGE R%,R%,#-C%<<U%:]
v�:�
�	�:=T%
�
00000000  0d 00 0a 21 ee 20 85 20  85 20 a2 20 9f 2c f6 24  |...!. . . . .,.$|
00000010  2b 22 20 61 74 20 6c 69  6e 65 20 22 2b c3 9e 3a  |+" at line "+..:|
00000020  e0 0d 00 1e 09 eb 31 33  3a 87 0d 00 28 48 de 6a  |......13:...(H.j|
00000030  65 6e 6e 79 25 26 35 30  30 30 3a 21 6a 65 6e 6e  |enny%&5000:!jenn|
00000040  79 25 3d 26 35 30 30 30  3a ff 28 22 4c 6f 61 64  |y%=&5000:.("Load|
00000050  20 3c 4a 65 6e 6e 79 24  44 69 72 3e 2e 4a 65 6e  | <Jenny$Dir>.Jen|
00000060  6e 79 20 22 2b c3 7e 28  6a 65 6e 6e 79 25 2b 34  |ny "+.~(jenny%+4|
00000070  29 29 0d 00 32 26 6a 65  6e 6e 79 25 2b 3d 6a 65  |))..2&jenny%+=je|
00000080  6e 6e 79 25 21 38 3a 6a  65 6e 6e 79 25 2b 3d 6a  |nny%!8:jenny%+=j|
00000090  65 6e 6e 79 25 21 33 32  0d 00 46 1b 53 53 25 3d  |enny%!32..F.SS%=|
000000a0  37 3a 54 43 25 3d 35 3a  53 43 25 3d 34 3a 57 43  |7:TC%=5:SC%=4:WC|
000000b0  25 3d 34 0d 00 50 21 63  6f 64 65 6c 65 6e 25 3d  |%=4..P!codelen%=|
000000c0  26 34 30 30 30 3a de 63  6f 64 65 25 63 6f 64 65  |&4000:.code%code|
000000d0  6c 65 6e 25 0d 00 5a 05  f5 0d 00 64 0e 20 f2 61  |len%..Z....d. .a|
000000e0  73 73 65 6d 62 6c 65 0d  00 6e 06 20 f5 0d 00 78  |ssemble..n. ...x|
000000f0  0d 20 20 d6 62 6c 65 72  74 25 0d 00 82 0a 20 20  |.  .blert%....  |
00000100  6b 3d a6 30 0d 00 8c 0c  20 fd 20 6b 3c 3e 2d 31  |k=.0.... . k<>-1|
00000110  0d 00 96 0c 20 c8 8e 20  bd 6b 20 ca 0d 00 a0 0b  |.... .. .k .....|
00000120  20 c9 20 22 20 22 3a 0d  00 aa 0e 20 20 53 53 25  | . " ":....  SS%|
00000130  3d b3 28 38 29 0d 00 b4  0e 20 20 54 43 25 3d b3  |=.(8)....  TC%=.|
00000140  28 38 29 0d 00 be 0e 20  20 53 43 25 3d b3 28 38  |(8)....  SC%=.(8|
00000150  29 0d 00 c8 0e 20 20 57  43 25 3d b3 28 38 29 0d  |)....  WC%=.(8).|
00000160  00 c9 10 20 c9 20 22 65  22 2c 20 22 45 22 3a 0d  |... . "e", "E":.|
00000170  00 ca 0e 20 20 53 53 25  3d a4 67 65 74 0d 00 cb  |...  SS%=.get...|
00000180  0e 20 20 54 43 25 3d a4  67 65 74 0d 00 cc 0e 20  |.  TC%=.get.... |
00000190  20 53 43 25 3d a4 67 65  74 0d 00 cd 0e 20 20 57  | SC%=.get....  W|
000001a0  43 25 3d a4 67 65 74 0d  00 dc 10 20 c9 20 22 70  |C%=.get.... . "p|
000001b0  22 2c 20 22 50 22 3a 0d  00 dd 0a 20 20 ef 20 33  |", "P":....  . 3|
000001c0  30 0d 00 e6 17 20 20 f1  20 53 53 25 2c 54 43 25  |0....  . SS%,TC%|
000001d0  2c 53 43 25 2c 57 43 25  0d 00 f0 0c 20 20 f5 fd  |,SC%,WC%....  ..|
000001e0  a5 3d 33 32 0d 00 fa 06  20 cb 0d 01 04 06 fd 30  |.=32.... ......0|
000001f0  0d 01 0e 05 e0 0d 01 18  05 3a 0d 01 19 0a dd 20  |.........:..... |
00000200  a4 67 65 74 0d 01 1a 05  f5 0d 01 1b 0b 20 6b 3d  |.get......... k=|
00000210  a5 2d 34 38 0d 01 1c 0f  fd 20 6b 3e 30 20 80 20  |.-48..... k>0 . |
00000220  6b 3c 39 0d 01 1d 06 3d  6b 0d 01 22 05 3a 0d 01  |k<9....=k..".:..|
00000230  2c 0e dd f2 61 73 73 65  6d 62 6c 65 0d 01 36 16  |,...assemble..6.|
00000240  e3 54 25 3d 30 b8 32 88  32 3a 50 25 3d 63 6f 64  |.T%=0.2.2:P%=cod|
00000250  65 25 0d 01 40 0b 5b 4f  50 54 20 54 25 0d 01 4a  |e%..@.[OPT T%..J|
00000260  05 3a 0d 01 54 0a 2e 74  65 73 74 25 0d 01 5e 23  |.:..T..test%..^#|
00000270  45 51 55 44 20 2d 31 3a  45 51 55 44 20 2d 31 3a  |EQUD -1:EQUD -1:|
00000280  45 51 55 44 20 2d 31 3a  45 51 55 44 20 2d 31 0d  |EQUD -1:EQUD -1.|
00000290  01 68 23 45 51 55 44 20  2d 31 3a 45 51 55 44 20  |.h#EQUD -1:EQUD |
000002a0  2d 31 3a 45 51 55 44 20  2d 31 3a 45 51 55 44 20  |-1:EQUD -1:EQUD |
000002b0  2d 31 0d 01 72 23 45 51  55 44 20 2d 31 3a 45 51  |-1..r#EQUD -1:EQ|
000002c0  55 44 20 2d 31 3a 45 51  55 44 20 2d 31 3a 45 51  |UD -1:EQUD -1:EQ|
000002d0  55 44 20 2d 31 0d 01 7c  23 45 51 55 44 20 2d 31  |UD -1..|#EQUD -1|
000002e0  3a 45 51 55 44 20 2d 31  3a 45 51 55 44 20 2d 31  |:EQUD -1:EQUD -1|
000002f0  3a 45 51 55 44 20 2d 31  0d 01 86 05 3a 0d 01 90  |:EQUD -1....:...|
00000300  1e 2e 76 64 75 76 61 72  73 25 3a 45 51 55 44 20  |..vduvars%:EQUD |
00000310  31 34 38 3a 45 51 55 44  20 2d 31 0d 01 9a 15 2e  |148:EQUD -1.....|
00000320  73 63 72 61 64 64 72 25  3a 45 51 55 44 20 2d 31  |scraddr%:EQUD -1|
00000330  0d 01 a4 05 3a 0d 01 ae  05 3a 0d 01 b8 20 2e 61  |....:....:... .a|
00000340  6e 69 6d 25 3a 45 51 55  44 20 31 3c 3c 33 32 2d  |nim%:EQUD 1<<32-|
00000350  53 53 25 3a 45 51 55 44  20 30 0d 01 c2 05 3a 0d  |SS%:EQUD 0....:.|
00000360  01 cc 0b 2e 62 6c 65 72  74 25 0d 01 d6 1b 53 54  |....blert%....ST|
00000370  4d 46 44 20 52 31 33 21  2c 7b 52 30 2d 52 31 32  |MFD R13!,{R0-R12|
00000380  2c 52 31 34 7d 0d 01 e0  13 41 44 52 20 52 30 2c  |,R14}....ADR R0,|
00000390  76 64 75 76 61 72 73 25  0d 01 ea 13 41 44 52 20  |vduvars%....ADR |
000003a0  52 31 2c 73 63 72 61 64  64 72 25 0d 01 f4 1d 53  |R1,scraddr%....S|
000003b0  57 49 20 22 4f 53 5f 52  65 61 64 56 64 75 56 61  |WI "OS_ReadVduVa|
000003c0  72 69 61 62 6c 65 73 22  0d 01 fe 14 4c 44 52 20  |riables"....LDR |
000003d0  52 31 34 2c 73 63 72 61  64 64 72 25 0d 02 08 19  |R14,scraddr%....|
000003e0  4f 50 54 20 a4 61 64 72  28 31 32 2c 6a 65 6e 6e  |OPT .adr(12,jenn|
000003f0  79 25 2c 32 29 0d 02 12  18 f4 20 52 6f 74 61 74  |y%,2)..... Rotat|
00000400  65 20 61 6e 69 6d 20 76  65 63 74 6f 72 0d 02 1c  |e anim vector...|
00000410  10 41 44 52 20 52 32 2c  61 6e 69 6d 25 0d 02 26  |.ADR R2,anim%..&|
00000420  14 4c 44 4d 49 41 20 52  32 2c 7b 52 30 2d 52 31  |.LDMIA R2,{R0-R1|
00000430  7d 0d 02 30 18 41 44 44  20 52 30 2c 52 30 2c 52  |}..0.ADD R0,R0,R|
00000440  31 2c 41 53 52 23 54 43  25 0d 02 3a 18 53 55 42  |1,ASR#TC%..:.SUB|
00000450  20 52 31 2c 52 31 2c 52  30 2c 41 53 52 23 54 43  | R1,R1,R0,ASR#TC|
00000460  25 0d 02 44 14 53 54 4d  49 41 20 52 32 2c 7b 52  |%..D.STMIA R2,{R|
00000470  30 2d 52 31 7d 0d 02 4e  19 f4 20 49 6e 69 74 69  |0-R1}..N.. Initi|
00000480  61 6c 20 63 6f 6f 72 64  69 6e 61 74 65 73 0d 02  |al coordinates..|
00000490  58 13 4d 4f 56 20 52 32  2c 23 31 3c 3c 33 32 2d  |X.MOV R2,#1<<32-|
000004a0  31 0d 02 62 13 4d 4f 56  20 52 33 2c 23 31 3c 3c  |1..b.MOV R3,#1<<|
000004b0  33 32 2d 31 0d 02 6c 18  4f 50 54 20 a4 6d 6c 61  |32-1..l.OPT .mla|
000004c0  28 32 2c 30 2c 2d 31 36  30 2c 32 29 0d 02 76 18  |(2,0,-160,2)..v.|
000004d0  4f 50 54 20 a4 6d 6c 61  28 33 2c 31 2c 2d 31 36  |OPT .mla(3,1,-16|
000004e0  30 2c 33 29 0d 02 80 16  41 44 44 20 52 32 2c 52  |0,3)....ADD R2,R|
000004f0  32 2c 52 30 2c 41 53 52  23 31 0d 02 8a 16 41 44  |2,R0,ASR#1....AD|
00000500  44 20 52 33 2c 52 33 2c  52 31 2c 41 53 52 23 31  |D R3,R3,R1,ASR#1|
00000510  0d 02 94 17 4f 50 54 20  a4 6d 6c 61 28 32 2c 31  |....OPT .mla(2,1|
00000520  2c 31 32 38 2c 32 29 0d  02 9e 18 4f 50 54 20 a4  |,128,2)....OPT .|
00000530  6d 6c 61 28 33 2c 30 2c  2d 31 32 38 2c 33 29 0d  |mla(3,0,-128,3).|
00000540  02 a8 16 53 55 42 20 52  32 2c 52 32 2c 52 31 2c  |...SUB R2,R2,R1,|
00000550  41 53 52 23 31 0d 02 b2  16 41 44 44 20 52 33 2c  |ASR#1....ADD R3,|
00000560  52 33 2c 52 30 2c 41 53  52 23 31 0d 02 bc 1b f4  |R3,R0,ASR#1.....|
00000570  20 49 6e 69 74 69 61 6c  20 77 69 62 62 6c 65 20  | Initial wibble |
00000580  66 61 63 74 6f 72 0d 02  c6 0d 4d 4f 56 20 52 36  |factor....MOV R6|
00000590  2c 52 30 0d 02 d0 0d 4d  4f 56 20 52 37 2c 52 31  |,R0....MOV R7,R1|
000005a0  0d 02 da 0f f4 20 54 68  65 20 6c 6f 6f 70 73 0d  |..... The loops.|
000005b0  02 e4 10 4d 4f 56 20 52  31 31 2c 23 32 35 36 0d  |...MOV R11,#256.|
000005c0  02 ee 0b 2e 79 6c 6f 6f  70 25 0d 02 f8 18 53 55  |....yloop%....SU|
000005d0  42 20 52 36 2c 52 36 2c  52 37 2c 41 53 52 23 53  |B R6,R6,R7,ASR#S|
000005e0  43 25 0d 03 02 18 41 44  44 20 52 37 2c 52 37 2c  |C%....ADD R7,R7,|
000005f0  52 36 2c 41 53 52 23 53  43 25 0d 03 0c 0d 4d 4f  |R6,ASR#SC%....MO|
00000600  56 20 52 34 2c 52 36 0d  03 16 0d 4d 4f 56 20 52  |V R4,R6....MOV R|
00000610  35 2c 23 30 0d 03 20 18  53 55 42 20 52 31 31 2c  |5,#0.. .SUB R11,|
00000620  52 31 31 2c 23 33 32 30  3c 3c 31 36 0d 03 2a 0b  |R11,#320<<16..*.|
00000630  2e 78 6c 6f 6f 70 25 0d  03 34 0d 4d 4f 56 20 52  |.xloop%..4.MOV R|
00000640  39 2c 23 30 0d 03 3e 15  5d 3a e3 55 25 3d 30 b8  |9,#0..>.]:.U%=0.|
00000650  33 3a 5b 4f 50 54 20 54  25 0d 03 48 18 41 44 44  |3:[OPT T%..H.ADD|
00000660  20 52 38 2c 52 33 2c 52  35 2c 41 53 4c 23 57 43  | R8,R3,R5,ASL#WC|
00000670  25 0d 03 52 19 4d 4f 56  20 52 31 30 2c 52 38 2c  |%..R.MOV R10,R8,|
00000680  4c 53 52 23 33 32 2d 53  53 25 0d 03 5c 1b 41 44  |LSR#32-SS%..\.AD|
00000690  44 20 52 31 30 2c 52 31  32 2c 52 31 30 2c 41 53  |D R10,R12,R10,AS|
000006a0  4c 23 53 53 25 0d 03 66  18 41 44 44 20 52 38 2c  |L#SS%..f.ADD R8,|
000006b0  52 32 2c 52 34 2c 41 53  4c 23 57 43 25 0d 03 70  |R2,R4,ASL#WC%..p|
000006c0  20 4c 44 52 42 20 52 31  30 2c 5b 52 31 30 2c 52  | LDRB R10,[R10,R|
000006d0  38 2c 4c 53 52 23 33 32  2d 53 53 25 5d 0d 03 7a  |8,LSR#32-SS%]..z|
000006e0  19 84 52 20 52 39 2c 52  39 2c 52 31 30 2c 4c 53  |..R R9,R9,R10,LS|
000006f0  4c 23 38 2a 55 25 0d 03  84 10 41 44 44 20 52 32  |L#8*U%....ADD R2|
00000700  2c 52 32 2c 52 30 0d 03  8e 10 41 44 44 20 52 33  |,R2,R0....ADD R3|
00000710  2c 52 33 2c 52 31 0d 03  98 18 41 44 44 20 52 34  |,R3,R1....ADD R4|
00000720  2c 52 34 2c 52 35 2c 41  53 52 23 53 43 25 0d 03  |,R4,R5,ASR#SC%..|
00000730  a2 18 53 55 42 20 52 35  2c 52 35 2c 52 34 2c 41  |..SUB R5,R5,R4,A|
00000740  53 52 23 53 43 25 0d 03  ac 0f 5d 3a ed 3a 5b 4f  |SR#SC%....]:.:[O|
00000750  50 54 20 54 25 0d 03 b6  13 53 54 52 20 52 39 2c  |PT T%....STR R9,|
00000760  5b 52 31 34 5d 2c 23 34  0d 03 c0 17 41 44 44 53  |[R14],#4....ADDS|
00000770  20 52 31 31 2c 52 31 31  2c 23 34 3c 3c 31 36 0d  | R11,R11,#4<<16.|
00000780  03 ca 0e 42 4c 45 20 78  6c 6f 6f 70 25 0d 03 d4  |...BLE xloop%...|
00000790  18 4f 50 54 20 a4 6d 6c  61 28 32 2c 30 2c 2d 33  |.OPT .mla(2,0,-3|
000007a0  32 30 2c 32 29 0d 03 de  18 4f 50 54 20 a4 6d 6c  |20,2)....OPT .ml|
000007b0  61 28 33 2c 31 2c 2d 33  32 30 2c 33 29 0d 03 e8  |a(3,1,-320,3)...|
000007c0  10 53 55 42 20 52 32 2c  52 32 2c 52 31 0d 03 f2  |.SUB R2,R2,R1...|
000007d0  10 41 44 44 20 52 33 2c  52 33 2c 52 30 0d 03 fc  |.ADD R3,R3,R0...|
000007e0  13 53 55 42 53 20 52 31  31 2c 52 31 31 2c 23 31  |.SUBS R11,R11,#1|
000007f0  0d 04 06 0e 42 47 54 20  79 6c 6f 6f 70 25 0d 04  |....BGT yloop%..|
00000800  10 1a 4c 44 4d 46 44 20  52 31 33 21 2c 7b 52 30  |..LDMFD R13!,{R0|
00000810  2d 52 31 32 2c 50 43 7d  0d 04 1a 05 3a 0d 04 24  |-R12,PC}....:..$|
00000820  35 5d 3a e7 50 25 3e 63  6f 64 65 25 2b 63 6f 64  |5]:.P%>code%+cod|
00000830  65 6c 65 6e 25 8c 85 32  35 35 2c 22 43 6f 64 65  |elen%..255,"Code|
00000840  20 69 73 6e 27 74 20 62  69 67 20 65 6e 6f 75 67  | isn't big enoug|
00000850  68 22 0d 04 2e 05 ed 0d  04 38 05 e1 0d 04 42 39  |h".......8....B9|
00000860  f4 20 4d 69 73 63 65 6c  6c 61 6e 65 6f 75 73 20  |. Miscellaneous |
00000870  6d 61 63 72 6f 73 20 75  73 65 64 20 69 6e 20 6d  |macros used in m|
00000880  6f 73 74 20 41 52 4d 20  63 6f 64 65 20 70 72 6f  |ost ARM code pro|
00000890  67 72 61 6d 73 0d 04 4c  05 3a 0d 04 56 14 dd f2  |grams..L.:..V...|
000008a0  6d 6f 64 65 28 58 25 2c  59 25 2c 43 25 29 0d 04  |mode(X%,Y%,C%)..|
000008b0  60 16 de 4a 25 36 34 3a  50 25 3d 4a 25 3a 5b 4f  |`..J%64:P%=J%:[O|
000008c0  50 54 20 32 0d 04 6a 2a  45 51 55 44 20 31 3a 45  |PT 2..j*EQUD 1:E|
000008d0  51 55 44 20 58 25 3a 45  51 55 44 20 59 25 3a 45  |QUD X%:EQUD Y%:E|
000008e0  51 55 44 20 43 25 3a 45  51 55 44 20 2d 31 0d 04  |QUD C%:EQUD -1..|
000008f0  74 24 5d 3a e7 43 25 3d  33 8c 5b 4f 50 54 20 32  |t$]:.C%=3.[OPT 2|
00000900  3a 45 51 55 44 20 33 3a  45 51 55 44 20 32 35 35  |:EQUD 3:EQUD 255|
00000910  3a 5d 0d 04 7e 18 5b 4f  50 54 20 32 3a 45 51 55  |:]..~.[OPT 2:EQU|
00000920  44 20 2d 31 3a 5d 3a eb  4a 25 0d 04 88 05 e1 0d  |D -1:]:.J%......|
00000930  04 92 05 3a 0d 04 9c 13  dd a4 61 64 72 28 52 25  |...:......adr(R%|
00000940  2c 41 25 2c 49 25 29 0d  04 a6 2c e7 28 50 25 80  |,A%,I%)...,.(P%.|
00000950  33 29 3c 3e 30 8c f1 22  43 6f 64 65 20 69 73 6e  |3)<>0.."Code isn|
00000960  27 74 20 77 6f 72 64 20  61 6c 69 67 6e 65 64 21  |'t word aligned!|
00000970  22 3a e0 0d 04 b0 1b e7  28 54 25 80 32 29 3d 30  |":......(T%.2)=0|
00000980  8c 50 25 2b 3d 49 25 3c  3c 32 3a 3d 54 25 0d 04  |.P%+=I%<<2:=T%..|
00000990  ba 28 ea 4e 25 2c 4f 25  2c 48 25 2c 55 25 3a 48  |.(.N%,O%,H%,U%:H|
000009a0  25 3d 41 25 2d 28 50 25  2b 38 29 3a 4e 25 3d 30  |%=A%-(P%+8):N%=0|
000009b0  3a 4f 25 3d 31 35 0d 04  c4 13 e3 55 25 3d 31 b8  |:O%=15.....U%=1.|
000009c0  49 25 3a e7 48 25 3d 30  8c 0d 04 ce 17 5b 4f 50  |I%:.H%=0.....[OP|
000009d0  54 20 54 25 3a 4d 4f 56  20 52 25 2c 4f 25 3a 5d  |T T%:MOV R%,O%:]|
000009e0  0d 04 d8 20 cc c8 95 28  48 25 80 33 29 3d 30 3a  |... ...(H%.3)=0:|
000009f0  48 25 3d 48 25 3e 3e 32  3a 4e 25 2b 3d 32 3a ce  |H%=H%>>2:N%+=2:.|
00000a00  0d 04 e2 10 e7 28 48 25  80 32 35 36 29 3d 30 8c  |.....(H%.256)=0.|
00000a10  0d 04 ec 30 5b 4f 50 54  20 54 25 3a 41 44 44 20  |...0[OPT T%:ADD |
00000a20  52 25 2c 4f 25 2c 23 28  48 25 80 32 35 35 29 3c  |R%,O%,#(H%.255)<|
00000a30  3c 4e 25 3a 5d 3a 48 25  2d 3d 48 25 80 32 35 35  |<N%:]:H%-=H%.255|
00000a40  0d 04 f6 39 cc 5b 4f 50  54 20 54 25 3a 53 55 42  |...9.[OPT T%:SUB|
00000a50  20 52 25 2c 4f 25 2c 23  28 32 35 36 2d 48 25 80  | R%,O%,#(256-H%.|
00000a60  32 35 35 29 3c 3c 4e 25  3a 5d 3a 48 25 2b 3d 32  |255)<<N%:]:H%+=2|
00000a70  35 36 2d 48 25 80 32 35  35 0d 05 00 05 cd 0d 05  |56-H%.255.......|
00000a80  0a 0d cd 3a 4f 25 3d 52  25 3a ed 0d 05 14 4c e7  |...:O%=R%:....L.|
00000a90  48 25 3c 3e 30 8c f1 22  43 6f 75 6c 64 20 6e 6f  |H%<>0.."Could no|
00000aa0  74 20 41 44 52 20 74 6f  20 26 22 3b 7e 41 25 3b  |t ADR to &";~A%;|
00000ab0  22 20 69 6e 20 22 3b 49  25 3b 22 20 69 6e 73 74  |" in ";I%;" inst|
00000ac0  72 75 63 74 69 6f 6e 73  20 28 52 25 3d 22 3b 52  |ructions (R%=";R|
00000ad0  25 3b 22 29 22 3a e0 0d  05 1e 07 3d 54 25 0d 05  |%;")":.....=T%..|
00000ae0  28 05 3a 0d 05 32 19 dd  a4 6d 61 6b 65 6a 28 4a  |(.:..2...makej(J|
00000af0  25 2c 4e 25 2c 64 75 6d  6d 79 25 29 0d 05 3c 16  |%,N%,dummy%)..<.|
00000b00  e3 55 25 3d 30 b8 4e 25  2d 31 3a 5b 4f 50 54 20  |.U%=0.N%-1:[OPT |
00000b10  54 25 0d 05 46 12 45 51  55 44 20 64 75 6d 6d 79  |T%..F.EQUD dummy|
00000b20  25 2d 4a 25 0d 05 50 0b  5d 3a ed 3a 3d 54 25 0d  |%-J%..P.]:.:=T%.|
00000b30  05 5a 05 3a 0d 05 64 16  dd a4 72 65 67 69 73 74  |.Z.:..d...regist|
00000b40  65 72 6a 28 4a 25 2c 4e  25 29 0d 05 6e 43 e7 50  |erj(J%,N%)..nC.P|
00000b50  25 3c 4a 25 8c 85 32 35  35 2c 22 6a 20 72 6f 75  |%<J%..255,"j rou|
00000b60  74 69 6e 65 73 20 6d 75  73 74 20 63 6f 6d 65 20  |tines must come |
00000b70  61 66 74 65 72 20 6a 20  74 61 62 6c 65 20 28 4a  |after j table (J|
00000b80  25 3d 26 22 2b c3 7e 4a  25 2b 22 29 22 0d 05 78  |%=&"+.~J%+")"..x|
00000b90  14 4a 25 21 28 4e 25 3c  3c 32 29 3d 50 25 2d 4a  |.J%!(N%<<2)=P%-J|
00000ba0  25 0d 05 82 07 3d 54 25  0d 05 8c 05 3a 0d 05 96  |%....=T%....:...|
00000bb0  12 f4 20 44 6f 65 73 20  52 3d 53 2a 43 2b 4f 0d  |.. Does R=S*C+O.|
00000bc0  05 a0 14 f4 20 43 6f 70  65 73 20 77 69 74 68 20  |.... Copes with |
00000bd0  52 3d 4f 0d 05 aa 2f f4  20 54 61 6b 65 73 20 72  |R=O.../. Takes r|
00000be0  65 67 69 73 74 65 72 73  20 52 2c 20 53 20 61 6e  |egisters R, S an|
00000bf0  64 20 4f 20 61 6e 64 20  63 6f 6e 73 74 61 6e 74  |d O and constant|
00000c00  20 43 0d 05 b4 05 3a 0d  05 be 16 dd a4 6d 6c 61  | C....:......mla|
00000c10  28 52 25 2c 53 25 2c 43  25 2c 4f 25 29 0d 05 c8  |(R%,S%,C%,O%)...|
00000c20  1d e7 43 25 3d 30 8c 5b  4f 50 54 20 54 25 3a 4d  |..C%=0.[OPT T%:M|
00000c30  4f 56 20 52 25 2c 4f 25  3a 5d 0d 05 d2 07 ea 4e  |OV R%,O%:].....N|
00000c40  25 0d 05 dc 10 4e 25 3d  30 3a c8 95 43 25 3c 3e  |%....N%=0:..C%<>|
00000c50  30 0d 05 e6 1f c8 95 28  43 25 80 31 29 3d 30 3a  |0......(C%.1)=0:|
00000c60  4e 25 2b 3d 31 3a 43 25  3d 43 25 3e 3e 31 3a ce  |N%+=1:C%=C%>>1:.|
00000c70  0d 05 f0 0e e7 28 43 25  80 32 29 3d 30 8c 0d 05  |.....(C%.2)=0...|
00000c80  fa 27 5b 4f 50 54 20 54  25 3a 41 44 44 20 52 25  |.'[OPT T%:ADD R%|
00000c90  2c 4f 25 2c 53 25 2c 41  53 4c 23 4e 25 3a 5d 3a  |,O%,S%,ASL#N%:]:|
00000ca0  43 25 2d 3d 31 0d 06 04  28 cc 5b 4f 50 54 20 54  |C%-=1...(.[OPT T|
00000cb0  25 3a 53 55 42 20 52 25  2c 4f 25 2c 53 25 2c 41  |%:SUB R%,O%,S%,A|
00000cc0  53 4c 23 4e 25 3a 5d 3a  43 25 2b 3d 31 0d 06 0e  |SL#N%:]:C%+=1...|
00000cd0  0d cd 3a 4f 25 3d 52 25  3a ce 0d 06 18 07 3d 54  |..:O%=R%:.....=T|
00000ce0  25 0d 06 22 05 3a 0d 06  2c 1e f4 20 44 6f 65 73  |%..".:..,.. Does|
00000cf0  20 52 2b 3d 5b 28 4e 3c  3c 46 29 20 64 69 76 20  | R+=[(N<<F) div |
00000d00  44 5d 2a 43 0d 06 36 19  f4 20 41 6c 73 6f 20 4e  |D]*C..6.. Also N|
00000d10  3d 28 4e 3c 3c 46 29 20  6d 6f 64 20 44 0d 06 40  |=(N<<F) mod D..@|
00000d20  31 f4 20 4d 20 69 73 20  6d 61 78 69 6d 75 6d 20  |1. M is maximum |
00000d30  65 78 70 65 63 74 65 64  20 76 61 6c 75 65 20 6f  |expected value o|
00000d40  66 20 28 4e 3c 3c 46 29  20 64 69 76 20 44 0d 06  |f (N<<F) div D..|
00000d50  4a 28 f4 20 43 6f 70 65  73 20 77 69 74 68 20 28  |J(. Copes with (|
00000d60  4e 3c 3c 46 29 20 62 69  67 67 65 72 20 74 68 61  |N<<F) bigger tha|
00000d70  6e 20 32 5e 33 32 0d 06  54 1a f4 20 4e 20 61 6e  |n 2^32..T.. N an|
00000d80  64 20 44 20 61 72 65 20  75 6e 73 69 67 6e 65 64  |d D are unsigned|
00000d90  0d 06 5e 36 f4 20 54 61  6b 65 73 20 72 65 67 69  |..^6. Takes regi|
00000da0  73 74 65 72 73 20 52 2c  20 4e 2c 20 44 20 61 6e  |sters R, N, D an|
00000db0  64 20 63 6f 6e 73 74 61  6e 74 73 20 43 2c 20 46  |d constants C, F|
00000dc0  20 61 6e 64 20 4d 0d 06  68 05 3a 0d 06 72 1d dd  | and M..h.:..r..|
00000dd0  a4 64 69 76 61 28 52 25  2c 4e 25 2c 46 25 2c 44  |.diva(R%,N%,F%,D|
00000de0  25 2c 43 25 2c 4d 25 29  0d 06 7c 07 ea 55 25 0d  |%,C%,M%)..|..U%.|
00000df0  06 86 16 4d 25 3d 31 2b  a8 28 aa 28 4d 25 29 2f  |...M%=1+.(.(M%)/|
00000e00  aa 28 32 29 29 0d 06 90  0d e7 4d 25 3e 46 25 2b  |.(2)).....M%>F%+|
00000e10  31 8c 0d 06 9a 1c e3 55  25 3d 4d 25 2d 31 b8 46  |1......U%=M%-1.F|
00000e20  25 2b 31 88 2d 31 3a 5b  4f 50 54 20 54 25 0d 06  |%+1.-1:[OPT T%..|
00000e30  a4 17 43 4d 50 20 44 25  2c 4e 25 2c 41 53 52 23  |..CMP D%,N%,ASR#|
00000e40  55 25 2d 46 25 0d 06 ae  1c 53 55 42 4c 45 20 4e  |U%-F%....SUBLE N|
00000e50  25 2c 4e 25 2c 44 25 2c  41 53 4c 23 55 25 2d 46  |%,N%,D%,ASL#U%-F|
00000e60  25 0d 06 b8 0d 5d 3a e7  43 25 3e 3d 30 8c 0d 06  |%....]:.C%>=0...|
00000e70  c2 21 5b 4f 50 54 20 54  25 3a 41 44 44 4c 45 20  |.![OPT T%:ADDLE |
00000e80  52 25 2c 52 25 2c 23 43  25 3c 3c 55 25 3a 5d 0d  |R%,R%,#C%<<U%:].|
00000e90  06 cc 23 cc 5b 4f 50 54  20 54 25 3a 53 55 42 4c  |..#.[OPT T%:SUBL|
00000ea0  45 20 52 25 2c 52 25 2c  23 2d 43 25 3c 3c 55 25  |E R%,R%,#-C%<<U%|
00000eb0  3a 5d 0d 06 d6 07 cd 3a  ed 0d 06 e0 0d cd 3a e7  |:].....:......:.|
00000ec0  4d 25 3e 46 25 8c 0d 06  ea 0b 5b 4f 50 54 20 54  |M%>F%.....[OPT T|
00000ed0  25 0d 06 f4 0d 43 4d 50  20 4e 25 2c 44 25 0d 06  |%....CMP N%,D%..|
00000ee0  fe 12 53 55 42 47 45 20  4e 25 2c 4e 25 2c 44 25  |..SUBGE N%,N%,D%|
00000ef0  0d 07 08 0d 5d 3a e7 43  25 3e 3d 30 8c 0d 07 12  |....]:.C%>=0....|
00000f00  21 5b 4f 50 54 20 54 25  3a 41 44 44 47 45 20 52  |![OPT T%:ADDGE R|
00000f10  25 2c 52 25 2c 23 43 25  3c 3c 46 25 3a 5d 0d 07  |%,R%,#C%<<F%:]..|
00000f20  1c 23 cc 5b 4f 50 54 20  54 25 3a 53 55 42 47 45  |.#.[OPT T%:SUBGE|
00000f30  20 52 25 2c 52 25 2c 23  2d 43 25 3c 3c 46 25 3a  | R%,R%,#-C%<<F%:|
00000f40  5d 0d 07 26 05 cd 0d 07  30 0c cd 3a e7 46 25 3e  |]..&....0..:.F%>|
00000f50  30 8c 0d 07 3a 19 e3 55  25 3d 46 25 2d 31 b8 30  |0...:..U%=F%-1.0|
00000f60  88 2d 31 3a 5b 4f 50 54  20 54 25 0d 07 44 17 52  |.-1:[OPT T%..D.R|
00000f70  53 42 53 20 4e 25 2c 44  25 2c 4e 25 2c 41 53 4c  |SBS N%,D%,N%,ASL|
00000f80  23 31 0d 07 4e 12 41 44  44 4c 54 20 4e 25 2c 4e  |#1..N.ADDLT N%,N|
00000f90  25 2c 44 25 0d 07 58 0d  5d 3a e7 43 25 3e 3d 30  |%,D%..X.]:.C%>=0|
00000fa0  8c 0d 07 62 21 5b 4f 50  54 20 54 25 3a 41 44 44  |...b![OPT T%:ADD|
00000fb0  47 45 20 52 25 2c 52 25  2c 23 43 25 3c 3c 55 25  |GE R%,R%,#C%<<U%|
00000fc0  3a 5d 0d 07 6c 23 cc 5b  4f 50 54 20 54 25 3a 53  |:]..l#.[OPT T%:S|
00000fd0  55 42 47 45 20 52 25 2c  52 25 2c 23 2d 43 25 3c  |UBGE R%,R%,#-C%<|
00000fe0  3c 55 25 3a 5d 0d 07 76  07 cd 3a ed 0d 07 80 09  |<U%:]..v..:.....|
00000ff0  cd 3a 3d 54 25 0d ff                              |.:=T%..|
00000ff7