Home » Archimedes archive » Acorn User » AU 1998-09.adf » Regulars » StarInfo/Jeffs/Plasma9

StarInfo/Jeffs/Plasma9

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 User » AU 1998-09.adf » Regulars
Filename: StarInfo/Jeffs/Plasma9
Read OK:
File size: 0D32 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM  Plasma Ball MkII  (RWJ 05/97)
   20REM
   30REM  BASIC routine now translated into assembly, with a little
   40REM  extra BASIC for moving the sparks around.
   50
   60PROCreserve
   70MODE 9:OFF
   80DIM code% 2000,dir% 64,stack% 12000
   90DIM IN% 8,OUT% 4
  100sx%=160:sy%=128:REM  screen centre
  110PROCdirections
  120PROCcode
  130
  140Q%=9
  150DIM plasma%(Q%,4):plasma%()=0
  160b1%=20:b2%=100
  170REPEAT
  180!screen=FNscreen_start
  190CLS:GCOL0,7:CIRCLE 640,512,b2%*4+8
  200 FOR J%=1 TO 2
  210  FOR I%=0 TO Q%
  220   IF J%=1 THEN
  230    IF plasma%(I%,0)=0 PROCnew_bolt
  240    plasma%(I%,0)-=1
  250    plasma%(I%,1)+=plasma%(I%,3):plasma%(I%,2)+=plasma%(I%,4)
  260   ENDIF
  270   z=COS(RAD(plasma%(I%,1)))
  280   IF J%=1 AND z<0 OR J%=2 AND z>=0 THEN
  290    !fromx=SIN(RAD(plasma%(I%,1)))*b1%+sx%
  300    !fromy=COS(RAD(plasma%(I%,1)))*SIN(RAD(plasma%(I%,2)))*b1%+sy%
  310    !tox=SIN(RAD(plasma%(I%,1)))*b2%+sx%
  320    !toy=COS(RAD(plasma%(I%,1)))*SIN(RAD(plasma%(I%,2)))*b2%+sy%
  330    CALL bolt_init
  340    IF INKEY-99:REPEATUNTILGET
  350   ENDIF
  360  NEXT
  370  IF J%=1 GCOL0,1:CIRCLEFILL 640,512,b1%*4
  380 NEXT
  390WAIT:SYS 6,113,screen%:screen%=screen% EOR 3:SYS 6,112,screen%
  400UNTIL FALSE
  410
  420END
  430
  440DEF PROCnew_bolt
  450plasma%(I%,0)=RND(50)
  460IF RND(3)>1 THEN
  470 plasma%(I%,1)=RND(360)
  480 plasma%(I%,2)=RND(360)
  490ENDIF
  500plasma%(I%,3)=RND(5)-3
  510plasma%(I%,4)=RND(5)-3
  520ENDPROC
  530
  540DEF PROCdirections
  550D%=0
  560FOR Y%=-1 TO 1:FOR X%=-1 TO 1
  570 IF X%<>0 OR Y%<>0 !(dir%+D%)=X%:!(dir%+D%+4)=Y%:D%+=8
  580NEXT:NEXT
  590ENDPROC
  600
  610DEF PROCcode
  620FOR pass%=0 TO 2 STEP 2
  630P%=code%
  640[OPT pass%
  650.dir:EQUD dir%
  660.stack:EQUD stack%
  670.big:EQUD&0FFFFFFF
  680.screen:EQUD0
  690
  700.bolt_init
  710STMFD r13!,{r14}
  720MOV r0,#4:STR r0,colour
  730LDR r12,dir:LDR r5,stack:MOV r8,#0:LDR r3,big
  740LDR r1,fromx:LDR r2,fromy:LDR r6,tox:LDR r7,toy
  750MOV r0,#0
  760BL bolt
  770LDMFD r13!,{r15}
  780.fromx:EQUD0
  790.tox:EQUD0
  800.fromy:EQUD0
  810.toy:EQUD0
  820
  830.bolt
  840STMFD r13!,{r0,r14}
  850ADD r0,r0,#1:\ Level
  860\ Plot?
  870BL plot
  880SUB r9,r1,r6:MOV r10,r9:MUL r9,r10,r9
  890SUB r10,r2,r7:MOV r11,r10:MLA r9,r10,r11,r9
  900\  Next step must be nearer to target than last
  910CMP r9,r3:BPL exit
  920\  Hit target?
  930CMP r1,r6:CMPEQ r2,r7:BNE nohit
  940 \  Set hit flag and colour
  950 MOV r8,#1:MOV r9,#6:STR r9,colour:B exit
  960.nohit
  970\  Save distance to target
  980MOV r3,r9
  990.loop
 1000 \  Push X,Y,dist onto stack
 1010 STMIA r5!,{r1-r3}
 1020 \  Get random direction
 1030 BL rand:AND r4,r4,#7:ADD r4,r12,r4,LSL#3
 1040 LDR r9,[r4]:ADD r1,r1,r9:LDR r9,[r4,#4]:ADD r2,r2,r9
 1050 BL bolt
 1060CMP r8,#0:BEQ loop
 1070.exit
 1080CMP r8,#1:BLEQ plot
 1090CMP r0,#1:LDMNEDB r5!,{r1-r3}
 1100LDMFD r13!,{r0,r15}
 1110
 1120.colour:EQUD4
 1130.plot
 1140STMFD r13!,{r0-r12,r14}
 1150LDR r0,screen:MOV r3,#160
 1160MLA r0,r2,r3,r0:ADD r0,r0,r1,LSR#1
 1170ANDS r1,r1,#1:BNE hi
 1180 LDR r5,colour
 1190 LDRB r4,[r0]:AND r4,r4,#240:ORR r4,r4,r5:STRB r4,[r0]:B quitp
 1200.hi
 1210 LDR r5,colour:MOV r5,r5,LSL#4
 1220 LDRB r4,[r0]:AND r4,r4,#7:ORR r4,r4,r5:STRB r4,[r0]
 1230.quitp
 1240LDMFD r13!,{r0-r12,r15}
 1250
 1260.rand
 1270STMFD r13!,{r1-r2,r14}
 1280LDR r4,seed
 1290CMP r4,#0
 1300MOVEQ r4,#255
 1310MOV r2,#17
 1320.rdloop
 1330MOV r1,r4,ASR#13
 1340EOR r1,r1,r4,ASR#24
 1350MOVS r1,r1,ROR #1
 1360ADCS r4,r4,r4
 1370SUBS r2,r2,#1
 1380BNE rdloop
 1390STR r4,seed
 1400LDMFD r13!,{r1-r2,r15}
 1410.seed:EQUD RND
 1420]
 1430NEXT
 1440ENDPROC
 1450
 1460DEF FNscreen_start
 1470!IN%=148:IN%!4=-1
 1480SYS &31,IN%,OUT%
 1490=!OUT%
 1500
 1510DEF PROCreserve
 1520SYS &5C,2 TO ,screenalloc
 1530additional=160*256*2-screenalloc
 1540IF additional>0 SYS &2A,2,additional
 1550SYS 6,112,2:CLS:SYS 6,112,1:CLS:SYS 6,113,1
 1560SYS 6,112,2:screen%=2
 1570ENDPROC
 1580

$�  Plasma Ball MkII  (RWJ 05/97)
�
@�  BASIC routine now translated into assembly, with a little
(0�  extra BASIC for moving the sparks around.
2
<�reserve
F	� 9:�
P%� code% 2000,dir% 64,stack% 12000
Z� IN% 8,OUT% 4
d$sx%=160:sy%=128:�  screen centre
n�directions
x	�code
�
�Q%=9
�� plasma%(Q%,4):plasma%()=0
�b1%=20:b2%=100
��
�!screen=�screen_start
��:�0,7:ȏ 640,512,b2%*4+8
� � J%=1 � 2
�  � I%=0 � Q%
�   � J%=1 �
�#    � plasma%(I%,0)=0 �new_bolt
�    plasma%(I%,0)-=1
�A    plasma%(I%,1)+=plasma%(I%,3):plasma%(I%,2)+=plasma%(I%,4)
   �
   z=�(�(plasma%(I%,1)))
#   � J%=1 � z<0 � J%=2 � z>=0 �
"*    !fromx=�(�(plasma%(I%,1)))*b1%+sx%
,>    !fromy=�(�(plasma%(I%,1)))*�(�(plasma%(I%,2)))*b1%+sy%
6(    !tox=�(�(plasma%(I%,1)))*b2%+sx%
@<    !toy=�(�(plasma%(I%,1)))*�(�(plasma%(I%,2)))*b2%+sy%
J    � bolt_init
T    � �-99:���
^   �
h  �
r$  � J%=1 �0,1:ȏȐ 640,512,b1%*4
| �
�<Ȗ:ș 6,113,screen%:screen%=screen% � 3:ș 6,112,screen%
�� �
�
��
�
�� �new_bolt
�plasma%(I%,0)=�(50)
�� �(3)>1 �
� plasma%(I%,1)=�(360)
� plasma%(I%,2)=�(360)
��
�plasma%(I%,3)=�(5)-3
�plasma%(I%,4)=�(5)-3
�

� �directions
&D%=0
0� Y%=-1 � 1:� X%=-1 � 1
:8 � X%<>0 � Y%<>0 !(dir%+D%)=X%:!(dir%+D%+4)=Y%:D%+=8
D�:�
N�
X
b� �code
l� pass%=0 � 2 � 2
vP%=code%
�[OPT pass%
�.dir:EQUD dir%
�.stack:EQUD stack%
�.big:EQUD&0FFFFFFF
�.screen:EQUD0
�
�.bolt_init
�STMFD r13!,{r14}
�MOV r0,#4:STR r0,colour
�1LDR r12,dir:LDR r5,stack:MOV r8,#0:LDR r3,big
�3LDR r1,fromx:LDR r2,fromy:LDR r6,tox:LDR r7,toy
�
MOV r0,#0
�BL bolt
LDMFD r13!,{r15}
.fromx:EQUD0
.tox:EQUD0
 .fromy:EQUD0
*.toy:EQUD0
4
>	.bolt
HSTMFD r13!,{r0,r14}
RADD r0,r0,#1:\ Level
\\ Plot?
fBL plot
p)SUB r9,r1,r6:MOV r10,r9:MUL r9,r10,r9
z/SUB r10,r2,r7:MOV r11,r10:MLA r9,r10,r11,r9
�3\  Next step must be nearer to target than last
�CMP r9,r3:BPL exit
�\  Hit target?
�#CMP r1,r6:CMPEQ r2,r7:BNE nohit
� \  Set hit flag and colour
�- MOV r8,#1:MOV r9,#6:STR r9,colour:B exit
�
.nohit
�\  Save distance to target
�
MOV r3,r9
�	.loop
�  \  Push X,Y,dist onto stack
� STMIA r5!,{r1-r3}
� \  Get random direction
+ BL rand:� r4,r4,#7:ADD r4,r12,r4,LSL#3
9 LDR r9,[r4]:ADD r1,r1,r9:LDR r9,[r4,#4]:ADD r2,r2,r9
 BL bolt
$CMP r8,#0:BEQ loop
.	.exit
8CMP r8,#1:BLEQ plot
B!CMP r0,#1:LDMNEDB r5!,{r1-r3}
LLDMFD r13!,{r0,r15}
V
`.colour:EQUD4
j	.plot
tSTMFD r13!,{r0-r12,r14}
~LDR r0,screen:MOV r3,#160
�&MLA r0,r2,r3,r0:ADD r0,r0,r1,LSR#1
��S r1,r1,#1:BNE hi
� LDR r5,colour
�? LDRB r4,[r0]:� r4,r4,#240:�R r4,r4,r5:STRB r4,[r0]:B quitp
�.hi
�" LDR r5,colour:MOV r5,r5,LSL#4
�5 LDRB r4,[r0]:� r4,r4,#7:�R r4,r4,r5:STRB r4,[r0]
�
.quitp
�LDMFD r13!,{r0-r12,r15}
�
�	.rand
�STMFD r13!,{r1-r2,r14}
LDR r4,seed


CMP r4,#0
�Q r4,#255
MOV r2,#17
(.rdloop
2MOV r1,r4,ASR#13
<� r1,r1,r4,ASR#24
FMOVS r1,r1,ROR #1
PADCS r4,r4,r4
ZSUBS r2,r2,#1
dBNE rdloop
nSTR r4,seed
xLDMFD r13!,{r1-r2,r15}
�.seed:EQUD �
�]
��
��
�
�� �screen_start
�!IN%=148:IN%!4=-1
�ș &31,IN%,OUT%
�
=!OUT%
�
�� �reserve
�ș &5C,2 � ,screenalloc
�$additional=160*256*2-screenalloc
&� additional>0 ș &2A,2,additional
(ș 6,112,2:�:ș 6,112,1:�:ș 6,113,1
ș 6,112,2:screen%=2
"�
,
�
00000000  0d 00 0a 24 f4 20 20 50  6c 61 73 6d 61 20 42 61  |...$.  Plasma Ba|
00000010  6c 6c 20 4d 6b 49 49 20  20 28 52 57 4a 20 30 35  |ll MkII  (RWJ 05|
00000020  2f 39 37 29 0d 00 14 05  f4 0d 00 1e 40 f4 20 20  |/97)........@.  |
00000030  42 41 53 49 43 20 72 6f  75 74 69 6e 65 20 6e 6f  |BASIC routine no|
00000040  77 20 74 72 61 6e 73 6c  61 74 65 64 20 69 6e 74  |w translated int|
00000050  6f 20 61 73 73 65 6d 62  6c 79 2c 20 77 69 74 68  |o assembly, with|
00000060  20 61 20 6c 69 74 74 6c  65 0d 00 28 30 f4 20 20  | a little..(0.  |
00000070  65 78 74 72 61 20 42 41  53 49 43 20 66 6f 72 20  |extra BASIC for |
00000080  6d 6f 76 69 6e 67 20 74  68 65 20 73 70 61 72 6b  |moving the spark|
00000090  73 20 61 72 6f 75 6e 64  2e 0d 00 32 04 0d 00 3c  |s around...2...<|
000000a0  0c f2 72 65 73 65 72 76  65 0d 00 46 09 eb 20 39  |..reserve..F.. 9|
000000b0  3a 87 0d 00 50 25 de 20  63 6f 64 65 25 20 32 30  |:...P%. code% 20|
000000c0  30 30 2c 64 69 72 25 20  36 34 2c 73 74 61 63 6b  |00,dir% 64,stack|
000000d0  25 20 31 32 30 30 30 0d  00 5a 12 de 20 49 4e 25  |% 12000..Z.. IN%|
000000e0  20 38 2c 4f 55 54 25 20  34 0d 00 64 24 73 78 25  | 8,OUT% 4..d$sx%|
000000f0  3d 31 36 30 3a 73 79 25  3d 31 32 38 3a f4 20 20  |=160:sy%=128:.  |
00000100  73 63 72 65 65 6e 20 63  65 6e 74 72 65 0d 00 6e  |screen centre..n|
00000110  0f f2 64 69 72 65 63 74  69 6f 6e 73 0d 00 78 09  |..directions..x.|
00000120  f2 63 6f 64 65 0d 00 82  04 0d 00 8c 08 51 25 3d  |.code........Q%=|
00000130  39 0d 00 96 1f de 20 70  6c 61 73 6d 61 25 28 51  |9..... plasma%(Q|
00000140  25 2c 34 29 3a 70 6c 61  73 6d 61 25 28 29 3d 30  |%,4):plasma%()=0|
00000150  0d 00 a0 12 62 31 25 3d  32 30 3a 62 32 25 3d 31  |....b1%=20:b2%=1|
00000160  30 30 0d 00 aa 05 f5 0d  00 b4 19 21 73 63 72 65  |00.........!scre|
00000170  65 6e 3d a4 73 63 72 65  65 6e 5f 73 74 61 72 74  |en=.screen_start|
00000180  0d 00 be 1d db 3a e6 30  2c 37 3a c8 8f 20 36 34  |.....:.0,7:.. 64|
00000190  30 2c 35 31 32 2c 62 32  25 2a 34 2b 38 0d 00 c8  |0,512,b2%*4+8...|
000001a0  0f 20 e3 20 4a 25 3d 31  20 b8 20 32 0d 00 d2 11  |. . J%=1 . 2....|
000001b0  20 20 e3 20 49 25 3d 30  20 b8 20 51 25 0d 00 dc  |  . I%=0 . Q%...|
000001c0  0f 20 20 20 e7 20 4a 25  3d 31 20 8c 0d 00 e6 23  |.   . J%=1 ....#|
000001d0  20 20 20 20 e7 20 70 6c  61 73 6d 61 25 28 49 25  |    . plasma%(I%|
000001e0  2c 30 29 3d 30 20 f2 6e  65 77 5f 62 6f 6c 74 0d  |,0)=0 .new_bolt.|
000001f0  00 f0 18 20 20 20 20 70  6c 61 73 6d 61 25 28 49  |...    plasma%(I|
00000200  25 2c 30 29 2d 3d 31 0d  00 fa 41 20 20 20 20 70  |%,0)-=1...A    p|
00000210  6c 61 73 6d 61 25 28 49  25 2c 31 29 2b 3d 70 6c  |lasma%(I%,1)+=pl|
00000220  61 73 6d 61 25 28 49 25  2c 33 29 3a 70 6c 61 73  |asma%(I%,3):plas|
00000230  6d 61 25 28 49 25 2c 32  29 2b 3d 70 6c 61 73 6d  |ma%(I%,2)+=plasm|
00000240  61 25 28 49 25 2c 34 29  0d 01 04 08 20 20 20 cd  |a%(I%,4)....   .|
00000250  0d 01 0e 1c 20 20 20 7a  3d 9b 28 b2 28 70 6c 61  |....   z=.(.(pla|
00000260  73 6d 61 25 28 49 25 2c  31 29 29 29 0d 01 18 23  |sma%(I%,1)))...#|
00000270  20 20 20 e7 20 4a 25 3d  31 20 80 20 7a 3c 30 20  |   . J%=1 . z<0 |
00000280  84 20 4a 25 3d 32 20 80  20 7a 3e 3d 30 20 8c 0d  |. J%=2 . z>=0 ..|
00000290  01 22 2a 20 20 20 20 21  66 72 6f 6d 78 3d b5 28  |."*    !fromx=.(|
000002a0  b2 28 70 6c 61 73 6d 61  25 28 49 25 2c 31 29 29  |.(plasma%(I%,1))|
000002b0  29 2a 62 31 25 2b 73 78  25 0d 01 2c 3e 20 20 20  |)*b1%+sx%..,>   |
000002c0  20 21 66 72 6f 6d 79 3d  9b 28 b2 28 70 6c 61 73  | !fromy=.(.(plas|
000002d0  6d 61 25 28 49 25 2c 31  29 29 29 2a b5 28 b2 28  |ma%(I%,1)))*.(.(|
000002e0  70 6c 61 73 6d 61 25 28  49 25 2c 32 29 29 29 2a  |plasma%(I%,2)))*|
000002f0  62 31 25 2b 73 79 25 0d  01 36 28 20 20 20 20 21  |b1%+sy%..6(    !|
00000300  74 6f 78 3d b5 28 b2 28  70 6c 61 73 6d 61 25 28  |tox=.(.(plasma%(|
00000310  49 25 2c 31 29 29 29 2a  62 32 25 2b 73 78 25 0d  |I%,1)))*b2%+sx%.|
00000320  01 40 3c 20 20 20 20 21  74 6f 79 3d 9b 28 b2 28  |.@<    !toy=.(.(|
00000330  70 6c 61 73 6d 61 25 28  49 25 2c 31 29 29 29 2a  |plasma%(I%,1)))*|
00000340  b5 28 b2 28 70 6c 61 73  6d 61 25 28 49 25 2c 32  |.(.(plasma%(I%,2|
00000350  29 29 29 2a 62 32 25 2b  73 79 25 0d 01 4a 13 20  |)))*b2%+sy%..J. |
00000360  20 20 20 d6 20 62 6f 6c  74 5f 69 6e 69 74 0d 01  |   . bolt_init..|
00000370  54 12 20 20 20 20 e7 20  a6 2d 39 39 3a f5 fd a5  |T.    . .-99:...|
00000380  0d 01 5e 08 20 20 20 cd  0d 01 68 07 20 20 ed 0d  |..^.   ...h.  ..|
00000390  01 72 24 20 20 e7 20 4a  25 3d 31 20 e6 30 2c 31  |.r$  . J%=1 .0,1|
000003a0  3a c8 8f c8 90 20 36 34  30 2c 35 31 32 2c 62 31  |:.... 640,512,b1|
000003b0  25 2a 34 0d 01 7c 06 20  ed 0d 01 86 3c c8 96 3a  |%*4..|. ....<..:|
000003c0  c8 99 20 36 2c 31 31 33  2c 73 63 72 65 65 6e 25  |.. 6,113,screen%|
000003d0  3a 73 63 72 65 65 6e 25  3d 73 63 72 65 65 6e 25  |:screen%=screen%|
000003e0  20 82 20 33 3a c8 99 20  36 2c 31 31 32 2c 73 63  | . 3:.. 6,112,sc|
000003f0  72 65 65 6e 25 0d 01 90  07 fd 20 a3 0d 01 9a 04  |reen%..... .....|
00000400  0d 01 a4 05 e0 0d 01 ae  04 0d 01 b8 0f dd 20 f2  |.............. .|
00000410  6e 65 77 5f 62 6f 6c 74  0d 01 c2 17 70 6c 61 73  |new_bolt....plas|
00000420  6d 61 25 28 49 25 2c 30  29 3d b3 28 35 30 29 0d  |ma%(I%,0)=.(50).|
00000430  01 cc 0e e7 20 b3 28 33  29 3e 31 20 8c 0d 01 d6  |.... .(3)>1 ....|
00000440  19 20 70 6c 61 73 6d 61  25 28 49 25 2c 31 29 3d  |. plasma%(I%,1)=|
00000450  b3 28 33 36 30 29 0d 01  e0 19 20 70 6c 61 73 6d  |.(360).... plasm|
00000460  61 25 28 49 25 2c 32 29  3d b3 28 33 36 30 29 0d  |a%(I%,2)=.(360).|
00000470  01 ea 05 cd 0d 01 f4 18  70 6c 61 73 6d 61 25 28  |........plasma%(|
00000480  49 25 2c 33 29 3d b3 28  35 29 2d 33 0d 01 fe 18  |I%,3)=.(5)-3....|
00000490  70 6c 61 73 6d 61 25 28  49 25 2c 34 29 3d b3 28  |plasma%(I%,4)=.(|
000004a0  35 29 2d 33 0d 02 08 05  e1 0d 02 12 04 0d 02 1c  |5)-3............|
000004b0  11 dd 20 f2 64 69 72 65  63 74 69 6f 6e 73 0d 02  |.. .directions..|
000004c0  26 08 44 25 3d 30 0d 02  30 1b e3 20 59 25 3d 2d  |&.D%=0..0.. Y%=-|
000004d0  31 20 b8 20 31 3a e3 20  58 25 3d 2d 31 20 b8 20  |1 . 1:. X%=-1 . |
000004e0  31 0d 02 3a 38 20 e7 20  58 25 3c 3e 30 20 84 20  |1..:8 . X%<>0 . |
000004f0  59 25 3c 3e 30 20 21 28  64 69 72 25 2b 44 25 29  |Y%<>0 !(dir%+D%)|
00000500  3d 58 25 3a 21 28 64 69  72 25 2b 44 25 2b 34 29  |=X%:!(dir%+D%+4)|
00000510  3d 59 25 3a 44 25 2b 3d  38 0d 02 44 07 ed 3a ed  |=Y%:D%+=8..D..:.|
00000520  0d 02 4e 05 e1 0d 02 58  04 0d 02 62 0b dd 20 f2  |..N....X...b.. .|
00000530  63 6f 64 65 0d 02 6c 15  e3 20 70 61 73 73 25 3d  |code..l.. pass%=|
00000540  30 20 b8 20 32 20 88 20  32 0d 02 76 0c 50 25 3d  |0 . 2 . 2..v.P%=|
00000550  63 6f 64 65 25 0d 02 80  0e 5b 4f 50 54 20 70 61  |code%....[OPT pa|
00000560  73 73 25 0d 02 8a 12 2e  64 69 72 3a 45 51 55 44  |ss%.....dir:EQUD|
00000570  20 64 69 72 25 0d 02 94  16 2e 73 74 61 63 6b 3a  | dir%.....stack:|
00000580  45 51 55 44 20 73 74 61  63 6b 25 0d 02 9e 16 2e  |EQUD stack%.....|
00000590  62 69 67 3a 45 51 55 44  26 30 46 46 46 46 46 46  |big:EQUD&0FFFFFF|
000005a0  46 0d 02 a8 11 2e 73 63  72 65 65 6e 3a 45 51 55  |F.....screen:EQU|
000005b0  44 30 0d 02 b2 04 0d 02  bc 0e 2e 62 6f 6c 74 5f  |D0.........bolt_|
000005c0  69 6e 69 74 0d 02 c6 14  53 54 4d 46 44 20 72 31  |init....STMFD r1|
000005d0  33 21 2c 7b 72 31 34 7d  0d 02 d0 1b 4d 4f 56 20  |3!,{r14}....MOV |
000005e0  72 30 2c 23 34 3a 53 54  52 20 72 30 2c 63 6f 6c  |r0,#4:STR r0,col|
000005f0  6f 75 72 0d 02 da 31 4c  44 52 20 72 31 32 2c 64  |our...1LDR r12,d|
00000600  69 72 3a 4c 44 52 20 72  35 2c 73 74 61 63 6b 3a  |ir:LDR r5,stack:|
00000610  4d 4f 56 20 72 38 2c 23  30 3a 4c 44 52 20 72 33  |MOV r8,#0:LDR r3|
00000620  2c 62 69 67 0d 02 e4 33  4c 44 52 20 72 31 2c 66  |,big...3LDR r1,f|
00000630  72 6f 6d 78 3a 4c 44 52  20 72 32 2c 66 72 6f 6d  |romx:LDR r2,from|
00000640  79 3a 4c 44 52 20 72 36  2c 74 6f 78 3a 4c 44 52  |y:LDR r6,tox:LDR|
00000650  20 72 37 2c 74 6f 79 0d  02 ee 0d 4d 4f 56 20 72  | r7,toy....MOV r|
00000660  30 2c 23 30 0d 02 f8 0b  42 4c 20 62 6f 6c 74 0d  |0,#0....BL bolt.|
00000670  03 02 14 4c 44 4d 46 44  20 72 31 33 21 2c 7b 72  |...LDMFD r13!,{r|
00000680  31 35 7d 0d 03 0c 10 2e  66 72 6f 6d 78 3a 45 51  |15}.....fromx:EQ|
00000690  55 44 30 0d 03 16 0e 2e  74 6f 78 3a 45 51 55 44  |UD0.....tox:EQUD|
000006a0  30 0d 03 20 10 2e 66 72  6f 6d 79 3a 45 51 55 44  |0.. ..fromy:EQUD|
000006b0  30 0d 03 2a 0e 2e 74 6f  79 3a 45 51 55 44 30 0d  |0..*..toy:EQUD0.|
000006c0  03 34 04 0d 03 3e 09 2e  62 6f 6c 74 0d 03 48 17  |.4...>..bolt..H.|
000006d0  53 54 4d 46 44 20 72 31  33 21 2c 7b 72 30 2c 72  |STMFD r13!,{r0,r|
000006e0  31 34 7d 0d 03 52 18 41  44 44 20 72 30 2c 72 30  |14}..R.ADD r0,r0|
000006f0  2c 23 31 3a 5c 20 4c 65  76 65 6c 0d 03 5c 0b 5c  |,#1:\ Level..\.\|
00000700  20 50 6c 6f 74 3f 0d 03  66 0b 42 4c 20 70 6c 6f  | Plot?..f.BL plo|
00000710  74 0d 03 70 29 53 55 42  20 72 39 2c 72 31 2c 72  |t..p)SUB r9,r1,r|
00000720  36 3a 4d 4f 56 20 72 31  30 2c 72 39 3a 4d 55 4c  |6:MOV r10,r9:MUL|
00000730  20 72 39 2c 72 31 30 2c  72 39 0d 03 7a 2f 53 55  | r9,r10,r9..z/SU|
00000740  42 20 72 31 30 2c 72 32  2c 72 37 3a 4d 4f 56 20  |B r10,r2,r7:MOV |
00000750  72 31 31 2c 72 31 30 3a  4d 4c 41 20 72 39 2c 72  |r11,r10:MLA r9,r|
00000760  31 30 2c 72 31 31 2c 72  39 0d 03 84 33 5c 20 20  |10,r11,r9...3\  |
00000770  4e 65 78 74 20 73 74 65  70 20 6d 75 73 74 20 62  |Next step must b|
00000780  65 20 6e 65 61 72 65 72  20 74 6f 20 74 61 72 67  |e nearer to targ|
00000790  65 74 20 74 68 61 6e 20  6c 61 73 74 0d 03 8e 16  |et than last....|
000007a0  43 4d 50 20 72 39 2c 72  33 3a 42 50 4c 20 65 78  |CMP r9,r3:BPL ex|
000007b0  69 74 0d 03 98 12 5c 20  20 48 69 74 20 74 61 72  |it....\  Hit tar|
000007c0  67 65 74 3f 0d 03 a2 23  43 4d 50 20 72 31 2c 72  |get?...#CMP r1,r|
000007d0  36 3a 43 4d 50 45 51 20  72 32 2c 72 37 3a 42 4e  |6:CMPEQ r2,r7:BN|
000007e0  45 20 6e 6f 68 69 74 0d  03 ac 1f 20 5c 20 20 53  |E nohit.... \  S|
000007f0  65 74 20 68 69 74 20 66  6c 61 67 20 61 6e 64 20  |et hit flag and |
00000800  63 6f 6c 6f 75 72 0d 03  b6 2d 20 4d 4f 56 20 72  |colour...- MOV r|
00000810  38 2c 23 31 3a 4d 4f 56  20 72 39 2c 23 36 3a 53  |8,#1:MOV r9,#6:S|
00000820  54 52 20 72 39 2c 63 6f  6c 6f 75 72 3a 42 20 65  |TR r9,colour:B e|
00000830  78 69 74 0d 03 c0 0a 2e  6e 6f 68 69 74 0d 03 ca  |xit.....nohit...|
00000840  1e 5c 20 20 53 61 76 65  20 64 69 73 74 61 6e 63  |.\  Save distanc|
00000850  65 20 74 6f 20 74 61 72  67 65 74 0d 03 d4 0d 4d  |e to target....M|
00000860  4f 56 20 72 33 2c 72 39  0d 03 de 09 2e 6c 6f 6f  |OV r3,r9.....loo|
00000870  70 0d 03 e8 20 20 5c 20  20 50 75 73 68 20 58 2c  |p...  \  Push X,|
00000880  59 2c 64 69 73 74 20 6f  6e 74 6f 20 73 74 61 63  |Y,dist onto stac|
00000890  6b 0d 03 f2 16 20 53 54  4d 49 41 20 72 35 21 2c  |k.... STMIA r5!,|
000008a0  7b 72 31 2d 72 33 7d 0d  03 fc 1c 20 5c 20 20 47  |{r1-r3}.... \  G|
000008b0  65 74 20 72 61 6e 64 6f  6d 20 64 69 72 65 63 74  |et random direct|
000008c0  69 6f 6e 0d 04 06 2b 20  42 4c 20 72 61 6e 64 3a  |ion...+ BL rand:|
000008d0  80 20 72 34 2c 72 34 2c  23 37 3a 41 44 44 20 72  |. r4,r4,#7:ADD r|
000008e0  34 2c 72 31 32 2c 72 34  2c 4c 53 4c 23 33 0d 04  |4,r12,r4,LSL#3..|
000008f0  10 39 20 4c 44 52 20 72  39 2c 5b 72 34 5d 3a 41  |.9 LDR r9,[r4]:A|
00000900  44 44 20 72 31 2c 72 31  2c 72 39 3a 4c 44 52 20  |DD r1,r1,r9:LDR |
00000910  72 39 2c 5b 72 34 2c 23  34 5d 3a 41 44 44 20 72  |r9,[r4,#4]:ADD r|
00000920  32 2c 72 32 2c 72 39 0d  04 1a 0c 20 42 4c 20 62  |2,r2,r9.... BL b|
00000930  6f 6c 74 0d 04 24 16 43  4d 50 20 72 38 2c 23 30  |olt..$.CMP r8,#0|
00000940  3a 42 45 51 20 6c 6f 6f  70 0d 04 2e 09 2e 65 78  |:BEQ loop.....ex|
00000950  69 74 0d 04 38 17 43 4d  50 20 72 38 2c 23 31 3a  |it..8.CMP r8,#1:|
00000960  42 4c 45 51 20 70 6c 6f  74 0d 04 42 21 43 4d 50  |BLEQ plot..B!CMP|
00000970  20 72 30 2c 23 31 3a 4c  44 4d 4e 45 44 42 20 72  | r0,#1:LDMNEDB r|
00000980  35 21 2c 7b 72 31 2d 72  33 7d 0d 04 4c 17 4c 44  |5!,{r1-r3}..L.LD|
00000990  4d 46 44 20 72 31 33 21  2c 7b 72 30 2c 72 31 35  |MFD r13!,{r0,r15|
000009a0  7d 0d 04 56 04 0d 04 60  11 2e 63 6f 6c 6f 75 72  |}..V...`..colour|
000009b0  3a 45 51 55 44 34 0d 04  6a 09 2e 70 6c 6f 74 0d  |:EQUD4..j..plot.|
000009c0  04 74 1b 53 54 4d 46 44  20 72 31 33 21 2c 7b 72  |.t.STMFD r13!,{r|
000009d0  30 2d 72 31 32 2c 72 31  34 7d 0d 04 7e 1d 4c 44  |0-r12,r14}..~.LD|
000009e0  52 20 72 30 2c 73 63 72  65 65 6e 3a 4d 4f 56 20  |R r0,screen:MOV |
000009f0  72 33 2c 23 31 36 30 0d  04 88 26 4d 4c 41 20 72  |r3,#160...&MLA r|
00000a00  30 2c 72 32 2c 72 33 2c  72 30 3a 41 44 44 20 72  |0,r2,r3,r0:ADD r|
00000a10  30 2c 72 30 2c 72 31 2c  4c 53 52 23 31 0d 04 92  |0,r0,r1,LSR#1...|
00000a20  16 80 53 20 72 31 2c 72  31 2c 23 31 3a 42 4e 45  |..S r1,r1,#1:BNE|
00000a30  20 68 69 0d 04 9c 12 20  4c 44 52 20 72 35 2c 63  | hi.... LDR r5,c|
00000a40  6f 6c 6f 75 72 0d 04 a6  3f 20 4c 44 52 42 20 72  |olour...? LDRB r|
00000a50  34 2c 5b 72 30 5d 3a 80  20 72 34 2c 72 34 2c 23  |4,[r0]:. r4,r4,#|
00000a60  32 34 30 3a 84 52 20 72  34 2c 72 34 2c 72 35 3a  |240:.R r4,r4,r5:|
00000a70  53 54 52 42 20 72 34 2c  5b 72 30 5d 3a 42 20 71  |STRB r4,[r0]:B q|
00000a80  75 69 74 70 0d 04 b0 07  2e 68 69 0d 04 ba 22 20  |uitp.....hi..." |
00000a90  4c 44 52 20 72 35 2c 63  6f 6c 6f 75 72 3a 4d 4f  |LDR r5,colour:MO|
00000aa0  56 20 72 35 2c 72 35 2c  4c 53 4c 23 34 0d 04 c4  |V r5,r5,LSL#4...|
00000ab0  35 20 4c 44 52 42 20 72  34 2c 5b 72 30 5d 3a 80  |5 LDRB r4,[r0]:.|
00000ac0  20 72 34 2c 72 34 2c 23  37 3a 84 52 20 72 34 2c  | r4,r4,#7:.R r4,|
00000ad0  72 34 2c 72 35 3a 53 54  52 42 20 72 34 2c 5b 72  |r4,r5:STRB r4,[r|
00000ae0  30 5d 0d 04 ce 0a 2e 71  75 69 74 70 0d 04 d8 1b  |0].....quitp....|
00000af0  4c 44 4d 46 44 20 72 31  33 21 2c 7b 72 30 2d 72  |LDMFD r13!,{r0-r|
00000b00  31 32 2c 72 31 35 7d 0d  04 e2 04 0d 04 ec 09 2e  |12,r15}.........|
00000b10  72 61 6e 64 0d 04 f6 1a  53 54 4d 46 44 20 72 31  |rand....STMFD r1|
00000b20  33 21 2c 7b 72 31 2d 72  32 2c 72 31 34 7d 0d 05  |3!,{r1-r2,r14}..|
00000b30  00 0f 4c 44 52 20 72 34  2c 73 65 65 64 0d 05 0a  |..LDR r4,seed...|
00000b40  0d 43 4d 50 20 72 34 2c  23 30 0d 05 14 0e ec 51  |.CMP r4,#0.....Q|
00000b50  20 72 34 2c 23 32 35 35  0d 05 1e 0e 4d 4f 56 20  | r4,#255....MOV |
00000b60  72 32 2c 23 31 37 0d 05  28 0b 2e 72 64 6c 6f 6f  |r2,#17..(..rdloo|
00000b70  70 0d 05 32 14 4d 4f 56  20 72 31 2c 72 34 2c 41  |p..2.MOV r1,r4,A|
00000b80  53 52 23 31 33 0d 05 3c  15 82 20 72 31 2c 72 31  |SR#13..<.. r1,r1|
00000b90  2c 72 34 2c 41 53 52 23  32 34 0d 05 46 15 4d 4f  |,r4,ASR#24..F.MO|
00000ba0  56 53 20 72 31 2c 72 31  2c 52 4f 52 20 23 31 0d  |VS r1,r1,ROR #1.|
00000bb0  05 50 11 41 44 43 53 20  72 34 2c 72 34 2c 72 34  |.P.ADCS r4,r4,r4|
00000bc0  0d 05 5a 11 53 55 42 53  20 72 32 2c 72 32 2c 23  |..Z.SUBS r2,r2,#|
00000bd0  31 0d 05 64 0e 42 4e 45  20 72 64 6c 6f 6f 70 0d  |1..d.BNE rdloop.|
00000be0  05 6e 0f 53 54 52 20 72  34 2c 73 65 65 64 0d 05  |.n.STR r4,seed..|
00000bf0  78 1a 4c 44 4d 46 44 20  72 31 33 21 2c 7b 72 31  |x.LDMFD r13!,{r1|
00000c00  2d 72 32 2c 72 31 35 7d  0d 05 82 10 2e 73 65 65  |-r2,r15}.....see|
00000c10  64 3a 45 51 55 44 20 b3  0d 05 8c 05 5d 0d 05 96  |d:EQUD .....]...|
00000c20  05 ed 0d 05 a0 05 e1 0d  05 aa 04 0d 05 b4 13 dd  |................|
00000c30  20 a4 73 63 72 65 65 6e  5f 73 74 61 72 74 0d 05  | .screen_start..|
00000c40  be 15 21 49 4e 25 3d 31  34 38 3a 49 4e 25 21 34  |..!IN%=148:IN%!4|
00000c50  3d 2d 31 0d 05 c8 13 c8  99 20 26 33 31 2c 49 4e  |=-1...... &31,IN|
00000c60  25 2c 4f 55 54 25 0d 05  d2 0a 3d 21 4f 55 54 25  |%,OUT%....=!OUT%|
00000c70  0d 05 dc 04 0d 05 e6 0e  dd 20 f2 72 65 73 65 72  |......... .reser|
00000c80  76 65 0d 05 f0 1b c8 99  20 26 35 43 2c 32 20 b8  |ve...... &5C,2 .|
00000c90  20 2c 73 63 72 65 65 6e  61 6c 6c 6f 63 0d 05 fa  | ,screenalloc...|
00000ca0  24 61 64 64 69 74 69 6f  6e 61 6c 3d 31 36 30 2a  |$additional=160*|
00000cb0  32 35 36 2a 32 2d 73 63  72 65 65 6e 61 6c 6c 6f  |256*2-screenallo|
00000cc0  63 0d 06 04 26 e7 20 61  64 64 69 74 69 6f 6e 61  |c...&. additiona|
00000cd0  6c 3e 30 20 c8 99 20 26  32 41 2c 32 2c 61 64 64  |l>0 .. &2A,2,add|
00000ce0  69 74 69 6f 6e 61 6c 0d  06 0e 28 c8 99 20 36 2c  |itional...(.. 6,|
00000cf0  31 31 32 2c 32 3a db 3a  c8 99 20 36 2c 31 31 32  |112,2:.:.. 6,112|
00000d00  2c 31 3a db 3a c8 99 20  36 2c 31 31 33 2c 31 0d  |,1:.:.. 6,113,1.|
00000d10  06 18 18 c8 99 20 36 2c  31 31 32 2c 32 3a 73 63  |..... 6,112,2:sc|
00000d20  72 65 65 6e 25 3d 32 0d  06 22 05 e1 0d 06 2c 04  |reen%=2.."....,.|
00000d30  0d ff                                             |..|
00000d32