Home » Archimedes archive » Acorn User » AU 1998-12.adf » Regulars » StarInfo/Madams/water

StarInfo/Madams/water

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-12.adf » Regulars
Filename: StarInfo/Madams/water
Read OK:
File size: 0EA8 bytes
Load address: 0000
Exec address: 0000
File contents
   10MODE 9
   20ONERROR REPORT:PRINT ERL:END
   30OFF
   40
   50DIM p% 64*35*4
   60DIM o% 64*35*4
   70DIM screen% 8
   80DIM prog% 8192
   90DIM sprite% 256*4*8
  100DIM border% 5
  110
  120!screen%=148
  130screen%!4=-1
  140SYS "OS_ReadVduVariables",screen%,screen%
  150screen%=!screen%
  160
  170FOR r%=0 TO 64*35*4 STEP 4
  180o%!r%=0
  190p%!r%=0
  200NEXT
  210
  211FOR r%=0 TO 15
  212COLOUR r%,0,0,64+(r%*12.7)
  213NEXT
  350
  360PROCassemble
  370PROCsetup
  380
  390MOUSE ON
  400
  410CALL prog%
  420END
  430
  440
  450DEFPROCassemble
  460screen=0
  470oadr=1
  480padr=2
  490x=3
  500y=4
  510lx=5
  520ly=6
  530o=7
  540p=8
  550pos=9
  560sprite=10
  570
  580FOR pass%=0 TO 2 STEP 2
  590P%=prog%
  600[OPT pass%
  610
  620.screenat EQUD screen%
  630.spriteat EQUD sprite%
  640.oat      EQUD o%
  650.pat      EQUD p%
  660
  670 STMFD R13!,{R14}
  680
  690.progstart
  700 
  710 SWI "OS_Mouse"
  720 
  730 ADD R0,R0,#64
  740 RSB R1,R1,#1024+64
  750 MOV lx,#0
  760 MOV ly,#0
  770 
  780 CMP R2,#0
  790BEQ skipbuttons
  800 MOV lx,R0,ASR#5
  810 MOV ly,R1,ASR#5
  820.skipbuttons
  830
  840 LDR screen,screenat
  850 LDR sprite,spriteat
  860 LDR oadr,oat
  870 LDR padr,pat
  880 
  890 CMP lx,#1
  900 MOVLE lx,#0
  910 CMP lx,#41
  920 MOVGT lx,#0
  930 CMP ly,#1
  940 MOVLE ly,#0
  950 CMP ly,#33
  960 MOVGT ly,#0
  970 
  980 CMP lx,#0
  990BEQ skippullup
 1000 CMP ly,#0
 1010BEQ skippullup
 1020 ADD pos,lx,ly,LSL#6
 1030 MOV o,#2048
 1040 STR o,[oadr,pos,LSL#2]
 1050.skippullup
 1060
 1070 ADD oadr,oadr,#520
 1080 ADD padr,padr,#520
 1090 MOV y,#2
 1100.yloop
 1110 MOV x,#2
 1120.xloop
 1130 LDR o,[oadr],#4
 1140 CMP x,lx
 1150BNE skipbranch
 1160 CMP y,ly
 1170BNE skipbranch
 1180B skipwibble
 1190.skipbranch
 1200 LDR p,[padr]
 1210 MOV R14,o,LSL#2
 1220 SUB R14,R14,o
 1230 SUB p,p,R14,ASR#2
 1240 LDR R12,[oadr],#-8
 1250 LDR R14,[oadr],#260
 1260 ADD R12,R12,R14
 1270 LDR R14,[oadr],#-512
 1280 ADD R12,R12,R14
 1290 LDR R14,[oadr],#256
 1300 ADD R12,R12,R14
 1310 ADD p,p,R12,ASR#3
 1320 STR p,[padr],#4
 1330 ADD o,o,p,ASR#1
 1340 MOV R14,o,LSL#3
 1350 SUB o,R14,o
 1360 MOV o,o,ASR#3
 1370 STR o,[oadr],#4
 1380.skipwibble
 1390 ADD o,o,#256
 1400 MOVS o,o,ASR#1
 1410 MOVMI o,#0
 1420 CMP o,#255
 1430 MOVGT o,#255
 1440 MOV o,o,LSL#5
 1450 ADD o,o,sprite
 1460 
 1470 LDMIA (o)!,{R8,R11,R12,R14}
 1480 STR R8,[screen],#160
 1490 STR R11,[screen],#160
 1500 STR R12,[screen],#160
 1510 STR R14,[screen],#160
 1520 LDMIA (o)!,{R8,R11,R12,R14}
 1530 STR R8,[screen],#160
 1540 STR R11,[screen],#160
 1550 STR R12,[screen],#160
 1560 STR R14,[screen],#4-160*7
 1570 
 1580 ADD x,x,#1
 1590 CMP x,#41
 1591 
 1600BLE xloop
 1610 ADD oadr,oadr,#24<<2
 1620 ADD padr,padr,#24<<2
 1630 ADD screen,screen,#160*7
 1640 ADD y,y,#1
 1650 CMP y,#33
 1660BLE yloop
 1670
 1680 MOV R0,#19
 1690 SWI "OS_Byte"
 1700 
 1710 SWI "OS_ReadEscapeState"
 1720BCC progstart
 1730
 1740 LDMFD R13!,{PC}
 1750]
 1760NEXT
 1770ENDPROC
 1780
 1790DEFPROCsetup
 1800DIM dither%(15),set%(15),n%(7)
 1810
 1820FOR c%=1 TO 5
 1830
 1840VDU 23,17,4,1|
 1850
 1860FOR r%=0 TO 15
 1870READ f%,g%
 1880dither%(r%)=f%+(g%<<8)
 1890NEXT
 1900
 1910DATA 0,0, 1,0, 1,4, 5,4, 5,5
 1920DATA 37,5, 37,133, 165,133, 165,165
 1930DATA 165,229, 181,229, 181,245, 245,245
 1940DATA 245,247, 253,247, 253,255
 1950
 1960FOR rep%=255 TO 0 STEP -1
 1970PROCdither(rep%)
 1980RECTANGLE FILL 0,988,32
 1990sprite%!(rep%*32)=!screen%
 2000sprite%!(rep%*32+4)=screen%!160
 2010sprite%!(rep%*32+8)=screen%!320
 2020sprite%!(rep%*32+12)=screen%!480
 2030sprite%!(rep%*32+16)=screen%!640
 2040sprite%!(rep%*32+20)=screen%!800
 2050sprite%!(rep%*32+24)=screen%!960
 2060sprite%!(rep%*32+28)=screen%!1120
 2070NEXT
 2080CLS
 2090ENDPROC
 2100
 2110
 2120DEFPROCdither(c%)
 2130a%=c% DIV 16
 2140b%=c% MOD 16
 2150IF a%=0 a%=1:b%=0
 2160IF a%=15 b%=0
 2170
 2180FOR shift%=0 TO 15
 2190set%(shift%)=1
 2200IF (dither%(b%) AND (1<<shift%))=0 set%(shift%)=0
 2210NEXT
 2220
 2230FOR r%=0 TO 7
 2240IF set%(r%*2)=1 n%(r%)=a%+1 ELSE n%(r%)=a%
 2250IF set%(r%*2+1)=1 n%(r%)+=(a%+1)<<4 ELSE n%(r%)+=a%<<4
 2260NEXT
 2270
 2280VDU 23,2,n%(0),n%(2),n%(4),n%(6),n%(0),n%(2),n%(4),n%(6)
 2290VDU 23,3,n%(1),n%(3),n%(5),n%(7),n%(1),n%(3),n%(5),n%(7)
 2300VDU 23,4,n%(0),n%(2),n%(4),n%(6),n%(0),n%(2),n%(4),n%(6)
 2310VDU 23,5,n%(1),n%(3),n%(5),n%(7),n%(1),n%(3),n%(5),n%(7)
 2320GCOL 80,0
 2330ENDPROC

� 9
� �:� �:�
�
(
2� p% 64*35*4
<� o% 64*35*4
F� screen% 8
P� prog% 8192
Z� sprite% 256*4*8
d� border% 5
n
x!screen%=148
�screen%!4=-1
�,ș "OS_ReadVduVariables",screen%,screen%
�screen%=!screen%
�
�� r%=0 � 64*35*4 � 4
�o%!r%=0
�p%!r%=0
��
�
�� r%=0 � 15
�� r%,0,0,64+(r%*12.7)
��
^
h
�assemble
r
�setup
|
�ȗ �
�
�� prog%
��
�
�
���assemble
�screen=0
�
oadr=1
�
padr=2
�x=3
�y=4
�lx=5
ly=6
o=7
p=8
&	pos=9
0
sprite=10
:
D� pass%=0 � 2 � 2
NP%=prog%
X[OPT pass%
b
l.screenat EQUD screen%
v.spriteat EQUD sprite%
�.oat      EQUD o%
�.pat      EQUD p%
�
� STMFD R13!,{R14}
�
�.progstart
� 
� SWI "OS_Mouse"
� 
� ADD R0,R0,#64
� RSB R1,R1,#1024+64
� MOV lx,#0
� MOV ly,#0
 
 CMP R2,#0
BEQ skipbuttons
  MOV lx,R0,ASR#5
* MOV ly,R1,ASR#5
4.skipbuttons
>
H LDR screen,screenat
R LDR sprite,spriteat
\ LDR oadr,oat
f LDR padr,pat
p 
z CMP lx,#1
� MOVLE lx,#0
� CMP lx,#41
� MOVGT lx,#0
� CMP ly,#1
� MOVLE ly,#0
� CMP ly,#33
� MOVGT ly,#0
� 
� CMP lx,#0
�BEQ skippullup
� CMP ly,#0
�BEQ skippullup
� ADD pos,lx,ly,LSL#6
 MOV o,#2048
 STR o,[oadr,pos,LSL#2]
.skippullup
$
. ADD oadr,oadr,#520
8 ADD padr,padr,#520
B
 MOV y,#2
L
.yloop
V
 MOV x,#2
`
.xloop
j LDR o,[oadr],#4
t
 CMP x,lx
~BNE skipbranch
�
 CMP y,ly
�BNE skipbranch
�B skipwibble
�.skipbranch
� LDR p,[padr]
� MOV R14,o,LSL#2
� SUB R14,R14,o
� SUB p,p,R14,ASR#2
� LDR R12,[oadr],#-8
� LDR R14,[oadr],#260
� ADD R12,R12,R14
� LDR R14,[oadr],#-512
 ADD R12,R12,R14

 LDR R14,[oadr],#256
 ADD R12,R12,R14
 ADD p,p,R12,ASR#3
( STR p,[padr],#4
2 ADD o,o,p,ASR#1
< MOV R14,o,LSL#3
F SUB o,R14,o
P MOV o,o,ASR#3
Z STR o,[oadr],#4
d.skipwibble
n ADD o,o,#256
x MOVS o,o,ASR#1
� MOVMI o,#0
� CMP o,#255
� MOVGT o,#255
� MOV o,o,LSL#5
� ADD o,o,sprite
� 
�  LDMIA (o)!,{R8,R11,R12,R14}
� STR R8,[screen],#160
� STR R11,[screen],#160
� STR R12,[screen],#160
� STR R14,[screen],#160
�  LDMIA (o)!,{R8,R11,R12,R14}
� STR R8,[screen],#160
 STR R11,[screen],#160
 STR R12,[screen],#160
 STR R14,[screen],#4-160*7
" 
, ADD x,x,#1
6 CMP x,#41
7 
@
BLE xloop
J ADD oadr,oadr,#24<<2
T ADD padr,padr,#24<<2
^ ADD screen,screen,#160*7
h ADD y,y,#1
r CMP y,#33
|
BLE yloop
�
� MOV R0,#19
� SWI "OS_Byte"
� 
� SWI "OS_ReadEscapeState"
�BCC progstart
�
� LDMFD R13!,{PC}
�]
��
��
�
���setup
 � dither%(15),set%(15),n%(7)

� c%=1 � 5
&
0� 23,17,4,1|
:
D� r%=0 � 15
N� f%,g%
Xdither%(r%)=f%+(g%<<8)
b�
l
v� 0,0, 1,0, 1,4, 5,4, 5,5
�$� 37,5, 37,133, 165,133, 165,165
�(� 165,229, 181,229, 181,245, 245,245
�� 245,247, 253,247, 253,255
�
�� rep%=255 � 0 � -1
��dither(rep%)
�ȓ Ȑ 0,988,32
�sprite%!(rep%*32)=!screen%
�#sprite%!(rep%*32+4)=screen%!160
�#sprite%!(rep%*32+8)=screen%!320
�$sprite%!(rep%*32+12)=screen%!480
�$sprite%!(rep%*32+16)=screen%!640
�$sprite%!(rep%*32+20)=screen%!800
$sprite%!(rep%*32+24)=screen%!960
%sprite%!(rep%*32+28)=screen%!1120
�
 �
*�
4
>
H��dither(c%)
Ra%=c% � 16
\b%=c% � 16
f� a%=0 a%=1:b%=0
p� a%=15 b%=0
z
�� shift%=0 � 15
�set%(shift%)=1
�2� (dither%(b%) � (1<<shift%))=0 set%(shift%)=0
��
�
�� r%=0 � 7
�*� set%(r%*2)=1 n%(r%)=a%+1 � n%(r%)=a%
�6� set%(r%*2+1)=1 n%(r%)+=(a%+1)<<4 � n%(r%)+=a%<<4
��
�
�:� 23,2,n%(0),n%(2),n%(4),n%(6),n%(0),n%(2),n%(4),n%(6)
�:� 23,3,n%(1),n%(3),n%(5),n%(7),n%(1),n%(3),n%(5),n%(7)
�:� 23,4,n%(0),n%(2),n%(4),n%(6),n%(0),n%(2),n%(4),n%(6)
	:� 23,5,n%(1),n%(3),n%(5),n%(7),n%(1),n%(3),n%(5),n%(7)
	
� 80,0
	�
�
00000000  0d 00 0a 07 eb 20 39 0d  00 14 0e ee 85 20 f6 3a  |..... 9...... .:|
00000010  f1 20 9e 3a e0 0d 00 1e  05 87 0d 00 28 04 0d 00  |. .:........(...|
00000020  32 10 de 20 70 25 20 36  34 2a 33 35 2a 34 0d 00  |2.. p% 64*35*4..|
00000030  3c 10 de 20 6f 25 20 36  34 2a 33 35 2a 34 0d 00  |<.. o% 64*35*4..|
00000040  46 0f de 20 73 63 72 65  65 6e 25 20 38 0d 00 50  |F.. screen% 8..P|
00000050  10 de 20 70 72 6f 67 25  20 38 31 39 32 0d 00 5a  |.. prog% 8192..Z|
00000060  15 de 20 73 70 72 69 74  65 25 20 32 35 36 2a 34  |.. sprite% 256*4|
00000070  2a 38 0d 00 64 0f de 20  62 6f 72 64 65 72 25 20  |*8..d.. border% |
00000080  35 0d 00 6e 04 0d 00 78  10 21 73 63 72 65 65 6e  |5..n...x.!screen|
00000090  25 3d 31 34 38 0d 00 82  10 73 63 72 65 65 6e 25  |%=148....screen%|
000000a0  21 34 3d 2d 31 0d 00 8c  2c c8 99 20 22 4f 53 5f  |!4=-1...,.. "OS_|
000000b0  52 65 61 64 56 64 75 56  61 72 69 61 62 6c 65 73  |ReadVduVariables|
000000c0  22 2c 73 63 72 65 65 6e  25 2c 73 63 72 65 65 6e  |",screen%,screen|
000000d0  25 0d 00 96 14 73 63 72  65 65 6e 25 3d 21 73 63  |%....screen%=!sc|
000000e0  72 65 65 6e 25 0d 00 a0  04 0d 00 aa 18 e3 20 72  |reen%......... r|
000000f0  25 3d 30 20 b8 20 36 34  2a 33 35 2a 34 20 88 20  |%=0 . 64*35*4 . |
00000100  34 0d 00 b4 0b 6f 25 21  72 25 3d 30 0d 00 be 0b  |4....o%!r%=0....|
00000110  70 25 21 72 25 3d 30 0d  00 c8 05 ed 0d 00 d2 04  |p%!r%=0.........|
00000120  0d 00 d3 0f e3 20 72 25  3d 30 20 b8 20 31 35 0d  |..... r%=0 . 15.|
00000130  00 d4 19 fb 20 72 25 2c  30 2c 30 2c 36 34 2b 28  |.... r%,0,0,64+(|
00000140  72 25 2a 31 32 2e 37 29  0d 00 d5 05 ed 0d 01 5e  |r%*12.7).......^|
00000150  04 0d 01 68 0d f2 61 73  73 65 6d 62 6c 65 0d 01  |...h..assemble..|
00000160  72 0a f2 73 65 74 75 70  0d 01 7c 04 0d 01 86 08  |r..setup..|.....|
00000170  c8 97 20 ee 0d 01 90 04  0d 01 9a 0b d6 20 70 72  |.. .......... pr|
00000180  6f 67 25 0d 01 a4 05 e0  0d 01 ae 04 0d 01 b8 04  |og%.............|
00000190  0d 01 c2 0e dd f2 61 73  73 65 6d 62 6c 65 0d 01  |......assemble..|
000001a0  cc 0c 73 63 72 65 65 6e  3d 30 0d 01 d6 0a 6f 61  |..screen=0....oa|
000001b0  64 72 3d 31 0d 01 e0 0a  70 61 64 72 3d 32 0d 01  |dr=1....padr=2..|
000001c0  ea 07 78 3d 33 0d 01 f4  07 79 3d 34 0d 01 fe 08  |..x=3....y=4....|
000001d0  6c 78 3d 35 0d 02 08 08  6c 79 3d 36 0d 02 12 07  |lx=5....ly=6....|
000001e0  6f 3d 37 0d 02 1c 07 70  3d 38 0d 02 26 09 70 6f  |o=7....p=8..&.po|
000001f0  73 3d 39 0d 02 30 0d 73  70 72 69 74 65 3d 31 30  |s=9..0.sprite=10|
00000200  0d 02 3a 04 0d 02 44 15  e3 20 70 61 73 73 25 3d  |..:...D.. pass%=|
00000210  30 20 b8 20 32 20 88 20  32 0d 02 4e 0c 50 25 3d  |0 . 2 . 2..N.P%=|
00000220  70 72 6f 67 25 0d 02 58  0e 5b 4f 50 54 20 70 61  |prog%..X.[OPT pa|
00000230  73 73 25 0d 02 62 04 0d  02 6c 1a 2e 73 63 72 65  |ss%..b...l..scre|
00000240  65 6e 61 74 20 45 51 55  44 20 73 63 72 65 65 6e  |enat EQUD screen|
00000250  25 0d 02 76 1a 2e 73 70  72 69 74 65 61 74 20 45  |%..v..spriteat E|
00000260  51 55 44 20 73 70 72 69  74 65 25 0d 02 80 15 2e  |QUD sprite%.....|
00000270  6f 61 74 20 20 20 20 20  20 45 51 55 44 20 6f 25  |oat      EQUD o%|
00000280  0d 02 8a 15 2e 70 61 74  20 20 20 20 20 20 45 51  |.....pat      EQ|
00000290  55 44 20 70 25 0d 02 94  04 0d 02 9e 15 20 53 54  |UD p%........ ST|
000002a0  4d 46 44 20 52 31 33 21  2c 7b 52 31 34 7d 0d 02  |MFD R13!,{R14}..|
000002b0  a8 04 0d 02 b2 0e 2e 70  72 6f 67 73 74 61 72 74  |.......progstart|
000002c0  0d 02 bc 05 20 0d 02 c6  13 20 53 57 49 20 22 4f  |.... .... SWI "O|
000002d0  53 5f 4d 6f 75 73 65 22  0d 02 d0 05 20 0d 02 da  |S_Mouse".... ...|
000002e0  12 20 41 44 44 20 52 30  2c 52 30 2c 23 36 34 0d  |. ADD R0,R0,#64.|
000002f0  02 e4 17 20 52 53 42 20  52 31 2c 52 31 2c 23 31  |... RSB R1,R1,#1|
00000300  30 32 34 2b 36 34 0d 02  ee 0e 20 4d 4f 56 20 6c  |024+64.... MOV l|
00000310  78 2c 23 30 0d 02 f8 0e  20 4d 4f 56 20 6c 79 2c  |x,#0.... MOV ly,|
00000320  23 30 0d 03 02 05 20 0d  03 0c 0e 20 43 4d 50 20  |#0.... .... CMP |
00000330  52 32 2c 23 30 0d 03 16  13 42 45 51 20 73 6b 69  |R2,#0....BEQ ski|
00000340  70 62 75 74 74 6f 6e 73  0d 03 20 14 20 4d 4f 56  |pbuttons.. . MOV|
00000350  20 6c 78 2c 52 30 2c 41  53 52 23 35 0d 03 2a 14  | lx,R0,ASR#5..*.|
00000360  20 4d 4f 56 20 6c 79 2c  52 31 2c 41 53 52 23 35  | MOV ly,R1,ASR#5|
00000370  0d 03 34 10 2e 73 6b 69  70 62 75 74 74 6f 6e 73  |..4..skipbuttons|
00000380  0d 03 3e 04 0d 03 48 18  20 4c 44 52 20 73 63 72  |..>...H. LDR scr|
00000390  65 65 6e 2c 73 63 72 65  65 6e 61 74 0d 03 52 18  |een,screenat..R.|
000003a0  20 4c 44 52 20 73 70 72  69 74 65 2c 73 70 72 69  | LDR sprite,spri|
000003b0  74 65 61 74 0d 03 5c 11  20 4c 44 52 20 6f 61 64  |teat..\. LDR oad|
000003c0  72 2c 6f 61 74 0d 03 66  11 20 4c 44 52 20 70 61  |r,oat..f. LDR pa|
000003d0  64 72 2c 70 61 74 0d 03  70 05 20 0d 03 7a 0e 20  |dr,pat..p. ..z. |
000003e0  43 4d 50 20 6c 78 2c 23  31 0d 03 84 10 20 4d 4f  |CMP lx,#1.... MO|
000003f0  56 4c 45 20 6c 78 2c 23  30 0d 03 8e 0f 20 43 4d  |VLE lx,#0.... CM|
00000400  50 20 6c 78 2c 23 34 31  0d 03 98 10 20 4d 4f 56  |P lx,#41.... MOV|
00000410  47 54 20 6c 78 2c 23 30  0d 03 a2 0e 20 43 4d 50  |GT lx,#0.... CMP|
00000420  20 6c 79 2c 23 31 0d 03  ac 10 20 4d 4f 56 4c 45  | ly,#1.... MOVLE|
00000430  20 6c 79 2c 23 30 0d 03  b6 0f 20 43 4d 50 20 6c  | ly,#0.... CMP l|
00000440  79 2c 23 33 33 0d 03 c0  10 20 4d 4f 56 47 54 20  |y,#33.... MOVGT |
00000450  6c 79 2c 23 30 0d 03 ca  05 20 0d 03 d4 0e 20 43  |ly,#0.... .... C|
00000460  4d 50 20 6c 78 2c 23 30  0d 03 de 12 42 45 51 20  |MP lx,#0....BEQ |
00000470  73 6b 69 70 70 75 6c 6c  75 70 0d 03 e8 0e 20 43  |skippullup.... C|
00000480  4d 50 20 6c 79 2c 23 30  0d 03 f2 12 42 45 51 20  |MP ly,#0....BEQ |
00000490  73 6b 69 70 70 75 6c 6c  75 70 0d 03 fc 18 20 41  |skippullup.... A|
000004a0  44 44 20 70 6f 73 2c 6c  78 2c 6c 79 2c 4c 53 4c  |DD pos,lx,ly,LSL|
000004b0  23 36 0d 04 06 10 20 4d  4f 56 20 6f 2c 23 32 30  |#6.... MOV o,#20|
000004c0  34 38 0d 04 10 1b 20 53  54 52 20 6f 2c 5b 6f 61  |48.... STR o,[oa|
000004d0  64 72 2c 70 6f 73 2c 4c  53 4c 23 32 5d 0d 04 1a  |dr,pos,LSL#2]...|
000004e0  0f 2e 73 6b 69 70 70 75  6c 6c 75 70 0d 04 24 04  |..skippullup..$.|
000004f0  0d 04 2e 17 20 41 44 44  20 6f 61 64 72 2c 6f 61  |.... ADD oadr,oa|
00000500  64 72 2c 23 35 32 30 0d  04 38 17 20 41 44 44 20  |dr,#520..8. ADD |
00000510  70 61 64 72 2c 70 61 64  72 2c 23 35 32 30 0d 04  |padr,padr,#520..|
00000520  42 0d 20 4d 4f 56 20 79  2c 23 32 0d 04 4c 0a 2e  |B. MOV y,#2..L..|
00000530  79 6c 6f 6f 70 0d 04 56  0d 20 4d 4f 56 20 78 2c  |yloop..V. MOV x,|
00000540  23 32 0d 04 60 0a 2e 78  6c 6f 6f 70 0d 04 6a 14  |#2..`..xloop..j.|
00000550  20 4c 44 52 20 6f 2c 5b  6f 61 64 72 5d 2c 23 34  | LDR o,[oadr],#4|
00000560  0d 04 74 0d 20 43 4d 50  20 78 2c 6c 78 0d 04 7e  |..t. CMP x,lx..~|
00000570  12 42 4e 45 20 73 6b 69  70 62 72 61 6e 63 68 0d  |.BNE skipbranch.|
00000580  04 88 0d 20 43 4d 50 20  79 2c 6c 79 0d 04 92 12  |... CMP y,ly....|
00000590  42 4e 45 20 73 6b 69 70  62 72 61 6e 63 68 0d 04  |BNE skipbranch..|
000005a0  9c 10 42 20 73 6b 69 70  77 69 62 62 6c 65 0d 04  |..B skipwibble..|
000005b0  a6 0f 2e 73 6b 69 70 62  72 61 6e 63 68 0d 04 b0  |...skipbranch...|
000005c0  11 20 4c 44 52 20 70 2c  5b 70 61 64 72 5d 0d 04  |. LDR p,[padr]..|
000005d0  ba 14 20 4d 4f 56 20 52  31 34 2c 6f 2c 4c 53 4c  |.. MOV R14,o,LSL|
000005e0  23 32 0d 04 c4 12 20 53  55 42 20 52 31 34 2c 52  |#2.... SUB R14,R|
000005f0  31 34 2c 6f 0d 04 ce 16  20 53 55 42 20 70 2c 70  |14,o.... SUB p,p|
00000600  2c 52 31 34 2c 41 53 52  23 32 0d 04 d8 17 20 4c  |,R14,ASR#2.... L|
00000610  44 52 20 52 31 32 2c 5b  6f 61 64 72 5d 2c 23 2d  |DR R12,[oadr],#-|
00000620  38 0d 04 e2 18 20 4c 44  52 20 52 31 34 2c 5b 6f  |8.... LDR R14,[o|
00000630  61 64 72 5d 2c 23 32 36  30 0d 04 ec 14 20 41 44  |adr],#260.... AD|
00000640  44 20 52 31 32 2c 52 31  32 2c 52 31 34 0d 04 f6  |D R12,R12,R14...|
00000650  19 20 4c 44 52 20 52 31  34 2c 5b 6f 61 64 72 5d  |. LDR R14,[oadr]|
00000660  2c 23 2d 35 31 32 0d 05  00 14 20 41 44 44 20 52  |,#-512.... ADD R|
00000670  31 32 2c 52 31 32 2c 52  31 34 0d 05 0a 18 20 4c  |12,R12,R14.... L|
00000680  44 52 20 52 31 34 2c 5b  6f 61 64 72 5d 2c 23 32  |DR R14,[oadr],#2|
00000690  35 36 0d 05 14 14 20 41  44 44 20 52 31 32 2c 52  |56.... ADD R12,R|
000006a0  31 32 2c 52 31 34 0d 05  1e 16 20 41 44 44 20 70  |12,R14.... ADD p|
000006b0  2c 70 2c 52 31 32 2c 41  53 52 23 33 0d 05 28 14  |,p,R12,ASR#3..(.|
000006c0  20 53 54 52 20 70 2c 5b  70 61 64 72 5d 2c 23 34  | STR p,[padr],#4|
000006d0  0d 05 32 14 20 41 44 44  20 6f 2c 6f 2c 70 2c 41  |..2. ADD o,o,p,A|
000006e0  53 52 23 31 0d 05 3c 14  20 4d 4f 56 20 52 31 34  |SR#1..<. MOV R14|
000006f0  2c 6f 2c 4c 53 4c 23 33  0d 05 46 10 20 53 55 42  |,o,LSL#3..F. SUB|
00000700  20 6f 2c 52 31 34 2c 6f  0d 05 50 12 20 4d 4f 56  | o,R14,o..P. MOV|
00000710  20 6f 2c 6f 2c 41 53 52  23 33 0d 05 5a 14 20 53  | o,o,ASR#3..Z. S|
00000720  54 52 20 6f 2c 5b 6f 61  64 72 5d 2c 23 34 0d 05  |TR o,[oadr],#4..|
00000730  64 0f 2e 73 6b 69 70 77  69 62 62 6c 65 0d 05 6e  |d..skipwibble..n|
00000740  11 20 41 44 44 20 6f 2c  6f 2c 23 32 35 36 0d 05  |. ADD o,o,#256..|
00000750  78 13 20 4d 4f 56 53 20  6f 2c 6f 2c 41 53 52 23  |x. MOVS o,o,ASR#|
00000760  31 0d 05 82 0f 20 4d 4f  56 4d 49 20 6f 2c 23 30  |1.... MOVMI o,#0|
00000770  0d 05 8c 0f 20 43 4d 50  20 6f 2c 23 32 35 35 0d  |.... CMP o,#255.|
00000780  05 96 11 20 4d 4f 56 47  54 20 6f 2c 23 32 35 35  |... MOVGT o,#255|
00000790  0d 05 a0 12 20 4d 4f 56  20 6f 2c 6f 2c 4c 53 4c  |.... MOV o,o,LSL|
000007a0  23 35 0d 05 aa 13 20 41  44 44 20 6f 2c 6f 2c 73  |#5.... ADD o,o,s|
000007b0  70 72 69 74 65 0d 05 b4  05 20 0d 05 be 20 20 4c  |prite.... ...  L|
000007c0  44 4d 49 41 20 28 6f 29  21 2c 7b 52 38 2c 52 31  |DMIA (o)!,{R8,R1|
000007d0  31 2c 52 31 32 2c 52 31  34 7d 0d 05 c8 19 20 53  |1,R12,R14}.... S|
000007e0  54 52 20 52 38 2c 5b 73  63 72 65 65 6e 5d 2c 23  |TR R8,[screen],#|
000007f0  31 36 30 0d 05 d2 1a 20  53 54 52 20 52 31 31 2c  |160.... STR R11,|
00000800  5b 73 63 72 65 65 6e 5d  2c 23 31 36 30 0d 05 dc  |[screen],#160...|
00000810  1a 20 53 54 52 20 52 31  32 2c 5b 73 63 72 65 65  |. STR R12,[scree|
00000820  6e 5d 2c 23 31 36 30 0d  05 e6 1a 20 53 54 52 20  |n],#160.... STR |
00000830  52 31 34 2c 5b 73 63 72  65 65 6e 5d 2c 23 31 36  |R14,[screen],#16|
00000840  30 0d 05 f0 20 20 4c 44  4d 49 41 20 28 6f 29 21  |0...  LDMIA (o)!|
00000850  2c 7b 52 38 2c 52 31 31  2c 52 31 32 2c 52 31 34  |,{R8,R11,R12,R14|
00000860  7d 0d 05 fa 19 20 53 54  52 20 52 38 2c 5b 73 63  |}.... STR R8,[sc|
00000870  72 65 65 6e 5d 2c 23 31  36 30 0d 06 04 1a 20 53  |reen],#160.... S|
00000880  54 52 20 52 31 31 2c 5b  73 63 72 65 65 6e 5d 2c  |TR R11,[screen],|
00000890  23 31 36 30 0d 06 0e 1a  20 53 54 52 20 52 31 32  |#160.... STR R12|
000008a0  2c 5b 73 63 72 65 65 6e  5d 2c 23 31 36 30 0d 06  |,[screen],#160..|
000008b0  18 1e 20 53 54 52 20 52  31 34 2c 5b 73 63 72 65  |.. STR R14,[scre|
000008c0  65 6e 5d 2c 23 34 2d 31  36 30 2a 37 0d 06 22 05  |en],#4-160*7..".|
000008d0  20 0d 06 2c 0f 20 41 44  44 20 78 2c 78 2c 23 31  | ..,. ADD x,x,#1|
000008e0  0d 06 36 0e 20 43 4d 50  20 78 2c 23 34 31 0d 06  |..6. CMP x,#41..|
000008f0  37 05 20 0d 06 40 0d 42  4c 45 20 78 6c 6f 6f 70  |7. ..@.BLE xloop|
00000900  0d 06 4a 19 20 41 44 44  20 6f 61 64 72 2c 6f 61  |..J. ADD oadr,oa|
00000910  64 72 2c 23 32 34 3c 3c  32 0d 06 54 19 20 41 44  |dr,#24<<2..T. AD|
00000920  44 20 70 61 64 72 2c 70  61 64 72 2c 23 32 34 3c  |D padr,padr,#24<|
00000930  3c 32 0d 06 5e 1d 20 41  44 44 20 73 63 72 65 65  |<2..^. ADD scree|
00000940  6e 2c 73 63 72 65 65 6e  2c 23 31 36 30 2a 37 0d  |n,screen,#160*7.|
00000950  06 68 0f 20 41 44 44 20  79 2c 79 2c 23 31 0d 06  |.h. ADD y,y,#1..|
00000960  72 0e 20 43 4d 50 20 79  2c 23 33 33 0d 06 7c 0d  |r. CMP y,#33..|.|
00000970  42 4c 45 20 79 6c 6f 6f  70 0d 06 86 04 0d 06 90  |BLE yloop.......|
00000980  0f 20 4d 4f 56 20 52 30  2c 23 31 39 0d 06 9a 12  |. MOV R0,#19....|
00000990  20 53 57 49 20 22 4f 53  5f 42 79 74 65 22 0d 06  | SWI "OS_Byte"..|
000009a0  a4 05 20 0d 06 ae 1d 20  53 57 49 20 22 4f 53 5f  |.. .... SWI "OS_|
000009b0  52 65 61 64 45 73 63 61  70 65 53 74 61 74 65 22  |ReadEscapeState"|
000009c0  0d 06 b8 11 42 43 43 20  70 72 6f 67 73 74 61 72  |....BCC progstar|
000009d0  74 0d 06 c2 04 0d 06 cc  14 20 4c 44 4d 46 44 20  |t........ LDMFD |
000009e0  52 31 33 21 2c 7b 50 43  7d 0d 06 d6 05 5d 0d 06  |R13!,{PC}....]..|
000009f0  e0 05 ed 0d 06 ea 05 e1  0d 06 f4 04 0d 06 fe 0b  |................|
00000a00  dd f2 73 65 74 75 70 0d  07 08 20 de 20 64 69 74  |..setup... . dit|
00000a10  68 65 72 25 28 31 35 29  2c 73 65 74 25 28 31 35  |her%(15),set%(15|
00000a20  29 2c 6e 25 28 37 29 0d  07 12 04 0d 07 1c 0e e3  |),n%(7).........|
00000a30  20 63 25 3d 31 20 b8 20  35 0d 07 26 04 0d 07 30  | c%=1 . 5..&...0|
00000a40  10 ef 20 32 33 2c 31 37  2c 34 2c 31 7c 0d 07 3a  |.. 23,17,4,1|..:|
00000a50  04 0d 07 44 0f e3 20 72  25 3d 30 20 b8 20 31 35  |...D.. r%=0 . 15|
00000a60  0d 07 4e 0b f3 20 66 25  2c 67 25 0d 07 58 1a 64  |..N.. f%,g%..X.d|
00000a70  69 74 68 65 72 25 28 72  25 29 3d 66 25 2b 28 67  |ither%(r%)=f%+(g|
00000a80  25 3c 3c 38 29 0d 07 62  05 ed 0d 07 6c 04 0d 07  |%<<8)..b....l...|
00000a90  76 1d dc 20 30 2c 30 2c  20 31 2c 30 2c 20 31 2c  |v.. 0,0, 1,0, 1,|
00000aa0  34 2c 20 35 2c 34 2c 20  35 2c 35 0d 07 80 24 dc  |4, 5,4, 5,5...$.|
00000ab0  20 33 37 2c 35 2c 20 33  37 2c 31 33 33 2c 20 31  | 37,5, 37,133, 1|
00000ac0  36 35 2c 31 33 33 2c 20  31 36 35 2c 31 36 35 0d  |65,133, 165,165.|
00000ad0  07 8a 28 dc 20 31 36 35  2c 32 32 39 2c 20 31 38  |..(. 165,229, 18|
00000ae0  31 2c 32 32 39 2c 20 31  38 31 2c 32 34 35 2c 20  |1,229, 181,245, |
00000af0  32 34 35 2c 32 34 35 0d  07 94 1f dc 20 32 34 35  |245,245..... 245|
00000b00  2c 32 34 37 2c 20 32 35  33 2c 32 34 37 2c 20 32  |,247, 253,247, 2|
00000b10  35 33 2c 32 35 35 0d 07  9e 04 0d 07 a8 17 e3 20  |53,255......... |
00000b20  72 65 70 25 3d 32 35 35  20 b8 20 30 20 88 20 2d  |rep%=255 . 0 . -|
00000b30  31 0d 07 b2 11 f2 64 69  74 68 65 72 28 72 65 70  |1.....dither(rep|
00000b40  25 29 0d 07 bc 12 c8 93  20 c8 90 20 30 2c 39 38  |%)...... .. 0,98|
00000b50  38 2c 33 32 0d 07 c6 1e  73 70 72 69 74 65 25 21  |8,32....sprite%!|
00000b60  28 72 65 70 25 2a 33 32  29 3d 21 73 63 72 65 65  |(rep%*32)=!scree|
00000b70  6e 25 0d 07 d0 23 73 70  72 69 74 65 25 21 28 72  |n%...#sprite%!(r|
00000b80  65 70 25 2a 33 32 2b 34  29 3d 73 63 72 65 65 6e  |ep%*32+4)=screen|
00000b90  25 21 31 36 30 0d 07 da  23 73 70 72 69 74 65 25  |%!160...#sprite%|
00000ba0  21 28 72 65 70 25 2a 33  32 2b 38 29 3d 73 63 72  |!(rep%*32+8)=scr|
00000bb0  65 65 6e 25 21 33 32 30  0d 07 e4 24 73 70 72 69  |een%!320...$spri|
00000bc0  74 65 25 21 28 72 65 70  25 2a 33 32 2b 31 32 29  |te%!(rep%*32+12)|
00000bd0  3d 73 63 72 65 65 6e 25  21 34 38 30 0d 07 ee 24  |=screen%!480...$|
00000be0  73 70 72 69 74 65 25 21  28 72 65 70 25 2a 33 32  |sprite%!(rep%*32|
00000bf0  2b 31 36 29 3d 73 63 72  65 65 6e 25 21 36 34 30  |+16)=screen%!640|
00000c00  0d 07 f8 24 73 70 72 69  74 65 25 21 28 72 65 70  |...$sprite%!(rep|
00000c10  25 2a 33 32 2b 32 30 29  3d 73 63 72 65 65 6e 25  |%*32+20)=screen%|
00000c20  21 38 30 30 0d 08 02 24  73 70 72 69 74 65 25 21  |!800...$sprite%!|
00000c30  28 72 65 70 25 2a 33 32  2b 32 34 29 3d 73 63 72  |(rep%*32+24)=scr|
00000c40  65 65 6e 25 21 39 36 30  0d 08 0c 25 73 70 72 69  |een%!960...%spri|
00000c50  74 65 25 21 28 72 65 70  25 2a 33 32 2b 32 38 29  |te%!(rep%*32+28)|
00000c60  3d 73 63 72 65 65 6e 25  21 31 31 32 30 0d 08 16  |=screen%!1120...|
00000c70  05 ed 0d 08 20 05 db 0d  08 2a 05 e1 0d 08 34 04  |.... ....*....4.|
00000c80  0d 08 3e 04 0d 08 48 10  dd f2 64 69 74 68 65 72  |..>...H...dither|
00000c90  28 63 25 29 0d 08 52 0e  61 25 3d 63 25 20 81 20  |(c%)..R.a%=c% . |
00000ca0  31 36 0d 08 5c 0e 62 25  3d 63 25 20 83 20 31 36  |16..\.b%=c% . 16|
00000cb0  0d 08 66 14 e7 20 61 25  3d 30 20 61 25 3d 31 3a  |..f.. a%=0 a%=1:|
00000cc0  62 25 3d 30 0d 08 70 10  e7 20 61 25 3d 31 35 20  |b%=0..p.. a%=15 |
00000cd0  62 25 3d 30 0d 08 7a 04  0d 08 84 13 e3 20 73 68  |b%=0..z...... sh|
00000ce0  69 66 74 25 3d 30 20 b8  20 31 35 0d 08 8e 12 73  |ift%=0 . 15....s|
00000cf0  65 74 25 28 73 68 69 66  74 25 29 3d 31 0d 08 98  |et%(shift%)=1...|
00000d00  32 e7 20 28 64 69 74 68  65 72 25 28 62 25 29 20  |2. (dither%(b%) |
00000d10  80 20 28 31 3c 3c 73 68  69 66 74 25 29 29 3d 30  |. (1<<shift%))=0|
00000d20  20 73 65 74 25 28 73 68  69 66 74 25 29 3d 30 0d  | set%(shift%)=0.|
00000d30  08 a2 05 ed 0d 08 ac 04  0d 08 b6 0e e3 20 72 25  |............. r%|
00000d40  3d 30 20 b8 20 37 0d 08  c0 2a e7 20 73 65 74 25  |=0 . 7...*. set%|
00000d50  28 72 25 2a 32 29 3d 31  20 6e 25 28 72 25 29 3d  |(r%*2)=1 n%(r%)=|
00000d60  61 25 2b 31 20 8b 20 6e  25 28 72 25 29 3d 61 25  |a%+1 . n%(r%)=a%|
00000d70  0d 08 ca 36 e7 20 73 65  74 25 28 72 25 2a 32 2b  |...6. set%(r%*2+|
00000d80  31 29 3d 31 20 6e 25 28  72 25 29 2b 3d 28 61 25  |1)=1 n%(r%)+=(a%|
00000d90  2b 31 29 3c 3c 34 20 8b  20 6e 25 28 72 25 29 2b  |+1)<<4 . n%(r%)+|
00000da0  3d 61 25 3c 3c 34 0d 08  d4 05 ed 0d 08 de 04 0d  |=a%<<4..........|
00000db0  08 e8 3a ef 20 32 33 2c  32 2c 6e 25 28 30 29 2c  |..:. 23,2,n%(0),|
00000dc0  6e 25 28 32 29 2c 6e 25  28 34 29 2c 6e 25 28 36  |n%(2),n%(4),n%(6|
00000dd0  29 2c 6e 25 28 30 29 2c  6e 25 28 32 29 2c 6e 25  |),n%(0),n%(2),n%|
00000de0  28 34 29 2c 6e 25 28 36  29 0d 08 f2 3a ef 20 32  |(4),n%(6)...:. 2|
00000df0  33 2c 33 2c 6e 25 28 31  29 2c 6e 25 28 33 29 2c  |3,3,n%(1),n%(3),|
00000e00  6e 25 28 35 29 2c 6e 25  28 37 29 2c 6e 25 28 31  |n%(5),n%(7),n%(1|
00000e10  29 2c 6e 25 28 33 29 2c  6e 25 28 35 29 2c 6e 25  |),n%(3),n%(5),n%|
00000e20  28 37 29 0d 08 fc 3a ef  20 32 33 2c 34 2c 6e 25  |(7)...:. 23,4,n%|
00000e30  28 30 29 2c 6e 25 28 32  29 2c 6e 25 28 34 29 2c  |(0),n%(2),n%(4),|
00000e40  6e 25 28 36 29 2c 6e 25  28 30 29 2c 6e 25 28 32  |n%(6),n%(0),n%(2|
00000e50  29 2c 6e 25 28 34 29 2c  6e 25 28 36 29 0d 09 06  |),n%(4),n%(6)...|
00000e60  3a ef 20 32 33 2c 35 2c  6e 25 28 31 29 2c 6e 25  |:. 23,5,n%(1),n%|
00000e70  28 33 29 2c 6e 25 28 35  29 2c 6e 25 28 37 29 2c  |(3),n%(5),n%(7),|
00000e80  6e 25 28 31 29 2c 6e 25  28 33 29 2c 6e 25 28 35  |n%(1),n%(3),n%(5|
00000e90  29 2c 6e 25 28 37 29 0d  09 10 0a e6 20 38 30 2c  |),n%(7)..... 80,|
00000ea0  30 0d 09 1a 05 e1 0d ff                           |0.......|
00000ea8