Home » Archimedes archive » Acorn User » AU 1998-04 A.adf » Regulars » StarInfo/Reysenbach/MSearchSA

StarInfo/Reysenbach/MSearchSA

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-04 A.adf » Regulars
Filename: StarInfo/Reysenbach/MSearchSA
Read OK:
File size: 0CB6 bytes
Load address: 0000
Exec address: 0000
File contents
   10 REM >MERSSA
   20 REM Mersenne prime numbers
   30 REM >>> STRONG ARM ONLY !!! <<<
   40 REM by A Reysenbach
   50 :
   60 MODE 28
   70 size%=15                  :REM adjust size% HERE
   80 room%=4+3*(size%<<10)
   90 DIM search 448 + room%
  100 :
  110 max%=(size%<<13)-31
  120 DIM X%(max%)
  130 FOR Y%=3 TO SQR(max%) STEP 2
  140  IF X%(Y%)=0 FOR Z%=Y%*Y% TO max% STEP Y%<<1:X%(Z%)=1:NEXT
  150 NEXT
  160 :
  170 PROCass
  180 PRINT"search for Mersenne prime numbers !"
  190 INPUT'"exponents from .. to ....";K%,L%
  200 K%=ABS(K%):L%=ABS(L%):IF K%<3 K%=3
  210 IF L%>max% PRINT"max.=";max%;"; adjust variable size%'":END
  220 TIME=0
  230 FOR H%=((K%>>1)<<1)+1 TO L% STEP 2
  240  IFX%(H%)=0THEN
  250   Z%=USR(search):PRINT"2^";H%;"-1 is ";
  270   IFZ%<>1PRINT"composite"ELSEPRINT"prime"
  280  ENDIF
  290 NEXT
  300 PRINTTIME/100" sec"
  310 END
  320 :
  330 DEF PROCass
  340 a=0:b=1:c=2:d=3:e=4:f=5:g=6
  350 q=7:ptr=8:w=9:x=10:y=11:z=12
  360 FOR pass=0 TO 2 STEP 2
  370 P%=search
  380 :
  390[OPT    pass
  400 ADR    d,block
  410 ADD    ptr,d,#(3*size%)<<10
  420 SUB    b,q,#1
  430 MOV    w,b,LSR #5
  440 MOV    w,w,LSL #2
  450 ADD    f,w,#4
  460 SUB    c,ptr,f
  470 MOV    z,#0
  480.zeroes
  490 STR    z,[c,f]
  500 SUBS   f,f,#4
  510 BGE    zeroes
  520 MOV    c,#3
  530 STR    c,[ptr]
  540 STR    b,block
  550 AND    q,q,#%11111
  560 STR    q,block+4
  570 SUB    q,ptr,#size%<<10
  580.square
  590 SUB    g,ptr,w
  600 MOV    e,q
  610 MOV    f,w
  620.init
  630 LDR    c,[g,f]
  640 FN_umul(d,y,c,c)
  650 STR    d,[e],#-4
  660 SUBS   f,f,#4
  670 STR    y,[e],#-4
  680 BGE    init
  690 MOV    g,#4
  700 MOV    x,#0
  710 MOV    y,#0
  720.fetch
  730 CMP    g,w,LSL #1
  740 BGE    spread
  750 MOV    a,#0
  760 MOV    b,#0
  770 SUBS   c,g,w
  780 MOVLE  e,ptr
  790 SUBGT  e,ptr,c
  800 SUBLE  f,ptr,g
  810 SUBGT  f,ptr,w
  820.accum
  830 LDR    c,[e],#-4
  840 LDR    d,[f],#4
  850 FN_umul(d,c,c,d)
  860 ADDS   b,b,d
  870 ADCS   a,a,c
  880 ADC    z,z,#0
  890 CMP    e,f
  900 BGT    accum
  910 ADDS   b,b,b
  920 ADCS   a,a,a
  930 ADC    z,z,z
  940 LDR    d,[q,-g]
  950 ADDS   b,b,d
  960 ADCS   a,a,x
  970 ADC    z,z,#0
  980 ADDS   b,b,y
  990 ADCS   y,a,#0
 1000 ADC    x,z,#0
 1010 STR    b,[q,-g]
 1020 ADD    g,g,#4
 1030 MOV    z,#0
 1040 B      fetch
 1050.spread
 1060 LDR    d,[q,-g]
 1070 ADDS   y,y,d
 1080 STR    y,[q,-g]
 1090 ADD    g,g,#4
 1100 LDR    c,[q,-g]
 1110 ADC    x,x,c
 1120 STR    x,[q,-g]
 1130 LDR    d,[q,-w]
 1140 LDR    y,block+4
 1150 RSB    x,y,#32
 1160 MOV    e,d,LSR y
 1170 BIC    a,d,e,LSL y
 1180 MOV    d,d,LSR y
 1190 STR    a,[q,-w]
 1200 MOV    f,w
 1210 SUB    e,q,w
 1220 SUB    g,e,w
 1230 SUB    g,g,#4
 1240 SUB    c,ptr,w
 1250.modul
 1260 LDR    a,[g,f]
 1270 ADD    d,d,a,LSL x
 1280 LDR    b,[e,f]
 1290 ADDS   b,b,z
 1300 MOV    z,#0
 1310 ADC    z,z,#0
 1320 ADDS   b,b,d
 1330 ADC    z,z,#0
 1340 MOV    d,a,LSR y
 1350 STR    b,[c,f]
 1360 SUBS   f,f,#4
 1370 BGE    modul
 1380 LDR    a,[ptr,-w]
 1390 MOVS   f,a,LSR y
 1400.final
 1410 BICGT  a,a,f,LSL y
 1420 STRGT  a,[ptr,-w]
 1430 LDR    b,block
 1440 SUBS   b,b,#1
 1450 STR    b,block
 1460 ADDEQ  f,f,#4
 1470 MOV    d,ptr
 1480.carry
 1490 LDR    a,[d],#-4
 1500 ADDS   a,a,f
 1510 MOVCS  f,#1
 1520 STR    a,[d,#4]
 1530 BCS    carry
 1540 CMP    b,#0
 1550 BGT    square
 1560 LDR    a,[ptr,-w]
 1570 MOVS   f,a,LSR y
 1580 BGT    final
 1590 LDR    a,[ptr]
 1600 MOV    pc,r14
 1610.block
 1620 FN_work(room%)
 1630]
 1640 NEXT pass
 1650 P%=Q%
 1660 ENDPROC
 1670 :
 1680 DEF FN_work(bytes%)
 1690 P%+=bytes%
 1700 =pass
 1710 :
 1720 DEF FN_umul(Rl,Rh,Rm,Rs)
 1730 [OPT   pass
 1740 DCD    &E0800090+(Rh<<16)+(Rl<<12)+(Rs<<8)+Rm
 1750 ]
 1760 =""

 � >MERSSA
 � Mersenne prime numbers
" � >>> STRONG ARM ONLY !!! <<<
( � by A Reysenbach
2 :
<	 � 28
F3 size%=15                  :� adjust size% HERE
P room%=4+3*(size%<<10)
Z � search 448 + room%
d :
n max%=(size%<<13)-31
x � X%(max%)
� � Y%=3 � �(max%) � 2
�5  � X%(Y%)=0 � Z%=Y%*Y% � max% � Y%<<1:X%(Z%)=1:�
� �
� :
�	 �ass
�+ �"search for Mersenne prime numbers !"
�( �'"exponents from .. to ....";K%,L%
�" K%=�(K%):L%=�(L%):� K%<3 K%=3
�9 � L%>max% �"max.=";max%;"; adjust variable size%'":�
� �=0
�! � H%=((K%>>1)<<1)+1 � L% � 2
�  �X%(H%)=0�
�&   Z%=�(search):�"2^";H%;"-1 is ";
"   �Z%<>1�"composite"��"prime"
  �
" �
, �/100" sec"
6 �
@ :
J � �ass
T  a=0:b=1:c=2:d=3:e=4:f=5:g=6
^! q=7:ptr=8:w=9:x=10:y=11:z=12
h � pass=0 � 2 � 2
r P%=search
| :
�[OPT    pass
� ADR    d,block
�  ADD    ptr,d,#(3*size%)<<10
� SUB    b,q,#1
� MOV    w,b,LSR #5
� MOV    w,w,LSL #2
� ADD    f,w,#4
� SUB    c,ptr,f
� MOV    z,#0
�.zeroes
� STR    z,[c,f]
� SUBS   f,f,#4
� BGE    zeroes
 MOV    c,#3
 STR    c,[ptr]
 STR    b,block
& �    q,q,#%11111
0 STR    q,block+4
: SUB    q,ptr,#size%<<10
D.square
N SUB    g,ptr,w
X MOV    e,q
b MOV    f,w
l	.init
v LDR    c,[g,f]
� �_umul(d,y,c,c)
� STR    d,[e],#-4
� SUBS   f,f,#4
� STR    y,[e],#-4
� BGE    init
� MOV    g,#4
� MOV    x,#0
� MOV    y,#0
�
.fetch
� CMP    g,w,LSL #1
� BGE    spread
� MOV    a,#0
� MOV    b,#0
 SUBS   c,g,w
 MOVLE  e,ptr
 SUBGT  e,ptr,c
  SUBLE  f,ptr,g
* SUBGT  f,ptr,w
4
.accum
> LDR    c,[e],#-4
H LDR    d,[f],#4
R �_umul(d,c,c,d)
\ ADDS   b,b,d
f ADCS   a,a,c
p ADC    z,z,#0
z CMP    e,f
� BGT    accum
� ADDS   b,b,b
� ADCS   a,a,a
� ADC    z,z,z
� LDR    d,[q,-g]
� ADDS   b,b,d
� ADCS   a,a,x
� ADC    z,z,#0
� ADDS   b,b,y
� ADCS   y,a,#0
� ADC    x,z,#0
� STR    b,[q,-g]
� ADD    g,g,#4
 MOV    z,#0
 B      fetch
.spread
$ LDR    d,[q,-g]
. ADDS   y,y,d
8 STR    y,[q,-g]
B ADD    g,g,#4
L LDR    c,[q,-g]
V ADC    x,x,c
` STR    x,[q,-g]
j LDR    d,[q,-w]
t LDR    y,block+4
~ RSB    x,y,#32
� MOV    e,d,LSR y
� BIC    a,d,e,LSL y
� MOV    d,d,LSR y
� STR    a,[q,-w]
� MOV    f,w
� SUB    e,q,w
� SUB    g,e,w
� SUB    g,g,#4
� SUB    c,ptr,w
�
.modul
� LDR    a,[g,f]
� ADD    d,d,a,LSL x
 LDR    b,[e,f]

 ADDS   b,b,z
 MOV    z,#0
 ADC    z,z,#0
( ADDS   b,b,d
2 ADC    z,z,#0
< MOV    d,a,LSR y
F STR    b,[c,f]
P SUBS   f,f,#4
Z BGE    modul
d LDR    a,[ptr,-w]
n MOVS   f,a,LSR y
x
.final
� BICGT  a,a,f,LSL y
� STRGT  a,[ptr,-w]
� LDR    b,block
� SUBS   b,b,#1
� STR    b,block
� ADDEQ  f,f,#4
� MOV    d,ptr
�
.carry
� LDR    a,[d],#-4
� ADDS   a,a,f
� MOVCS  f,#1
� STR    a,[d,#4]
� BCS    carry
 CMP    b,#0
 BGT    square
 LDR    a,[ptr,-w]
" MOVS   f,a,LSR y
, BGT    final
6 LDR    a,[ptr]
@ MOV    pc,r14
J
.block
T �_work(room%)
^]
h � pass
r
 P%=Q%
| �
� :
� � �_work(bytes%)
� P%+=bytes%
�
 =pass
� :
� � �_umul(Rl,Rh,Rm,Rs)
� [OPT   pass
�2 DCD    &E0800090+(Rh<<16)+(Rl<<12)+(Rs<<8)+Rm
� ]
� =""
�
00000000  0d 00 0a 0e 20 f4 20 3e  4d 45 52 53 53 41 0d 00  |.... . >MERSSA..|
00000010  14 1d 20 f4 20 4d 65 72  73 65 6e 6e 65 20 70 72  |.. . Mersenne pr|
00000020  69 6d 65 20 6e 75 6d 62  65 72 73 0d 00 1e 22 20  |ime numbers..." |
00000030  f4 20 3e 3e 3e 20 53 54  52 4f 4e 47 20 41 52 4d  |. >>> STRONG ARM|
00000040  20 4f 4e 4c 59 20 21 21  21 20 3c 3c 3c 0d 00 28  | ONLY !!! <<<..(|
00000050  16 20 f4 20 62 79 20 41  20 52 65 79 73 65 6e 62  |. . by A Reysenb|
00000060  61 63 68 0d 00 32 06 20  3a 0d 00 3c 09 20 eb 20  |ach..2. :..<. . |
00000070  32 38 0d 00 46 33 20 73  69 7a 65 25 3d 31 35 20  |28..F3 size%=15 |
00000080  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000090  20 3a f4 20 61 64 6a 75  73 74 20 73 69 7a 65 25  | :. adjust size%|
000000a0  20 48 45 52 45 0d 00 50  1a 20 72 6f 6f 6d 25 3d  | HERE..P. room%=|
000000b0  34 2b 33 2a 28 73 69 7a  65 25 3c 3c 31 30 29 0d  |4+3*(size%<<10).|
000000c0  00 5a 19 20 de 20 73 65  61 72 63 68 20 34 34 38  |.Z. . search 448|
000000d0  20 2b 20 72 6f 6f 6d 25  0d 00 64 06 20 3a 0d 00  | + room%..d. :..|
000000e0  6e 18 20 6d 61 78 25 3d  28 73 69 7a 65 25 3c 3c  |n. max%=(size%<<|
000000f0  31 33 29 2d 33 31 0d 00  78 0f 20 de 20 58 25 28  |13)-31..x. . X%(|
00000100  6d 61 78 25 29 0d 00 82  19 20 e3 20 59 25 3d 33  |max%).... . Y%=3|
00000110  20 b8 20 b6 28 6d 61 78  25 29 20 88 20 32 0d 00  | . .(max%) . 2..|
00000120  8c 35 20 20 e7 20 58 25  28 59 25 29 3d 30 20 e3  |.5  . X%(Y%)=0 .|
00000130  20 5a 25 3d 59 25 2a 59  25 20 b8 20 6d 61 78 25  | Z%=Y%*Y% . max%|
00000140  20 88 20 59 25 3c 3c 31  3a 58 25 28 5a 25 29 3d  | . Y%<<1:X%(Z%)=|
00000150  31 3a ed 0d 00 96 06 20  ed 0d 00 a0 06 20 3a 0d  |1:..... ..... :.|
00000160  00 aa 09 20 f2 61 73 73  0d 00 b4 2b 20 f1 22 73  |... .ass...+ ."s|
00000170  65 61 72 63 68 20 66 6f  72 20 4d 65 72 73 65 6e  |earch for Mersen|
00000180  6e 65 20 70 72 69 6d 65  20 6e 75 6d 62 65 72 73  |ne prime numbers|
00000190  20 21 22 0d 00 be 28 20  e8 27 22 65 78 70 6f 6e  | !"...( .'"expon|
000001a0  65 6e 74 73 20 66 72 6f  6d 20 2e 2e 20 74 6f 20  |ents from .. to |
000001b0  2e 2e 2e 2e 22 3b 4b 25  2c 4c 25 0d 00 c8 22 20  |....";K%,L%..." |
000001c0  4b 25 3d 94 28 4b 25 29  3a 4c 25 3d 94 28 4c 25  |K%=.(K%):L%=.(L%|
000001d0  29 3a e7 20 4b 25 3c 33  20 4b 25 3d 33 0d 00 d2  |):. K%<3 K%=3...|
000001e0  39 20 e7 20 4c 25 3e 6d  61 78 25 20 f1 22 6d 61  |9 . L%>max% ."ma|
000001f0  78 2e 3d 22 3b 6d 61 78  25 3b 22 3b 20 61 64 6a  |x.=";max%;"; adj|
00000200  75 73 74 20 76 61 72 69  61 62 6c 65 20 73 69 7a  |ust variable siz|
00000210  65 25 27 22 3a e0 0d 00  dc 08 20 d1 3d 30 0d 00  |e%'":..... .=0..|
00000220  e6 21 20 e3 20 48 25 3d  28 28 4b 25 3e 3e 31 29  |.! . H%=((K%>>1)|
00000230  3c 3c 31 29 2b 31 20 b8  20 4c 25 20 88 20 32 0d  |<<1)+1 . L% . 2.|
00000240  00 f0 10 20 20 e7 58 25  28 48 25 29 3d 30 8c 0d  |...  .X%(H%)=0..|
00000250  00 fa 26 20 20 20 5a 25  3d ba 28 73 65 61 72 63  |..&   Z%=.(searc|
00000260  68 29 3a f1 22 32 5e 22  3b 48 25 3b 22 2d 31 20  |h):."2^";H%;"-1 |
00000270  69 73 20 22 3b 0d 01 0e  22 20 20 20 e7 5a 25 3c  |is ";..."   .Z%<|
00000280  3e 31 f1 22 63 6f 6d 70  6f 73 69 74 65 22 8b f1  |>1."composite"..|
00000290  22 70 72 69 6d 65 22 0d  01 18 07 20 20 cd 0d 01  |"prime"....  ...|
000002a0  22 06 20 ed 0d 01 2c 11  20 f1 91 2f 31 30 30 22  |". ...,. ../100"|
000002b0  20 73 65 63 22 0d 01 36  06 20 e0 0d 01 40 06 20  | sec"..6. ...@. |
000002c0  3a 0d 01 4a 0b 20 dd 20  f2 61 73 73 0d 01 54 20  |:..J. . .ass..T |
000002d0  20 61 3d 30 3a 62 3d 31  3a 63 3d 32 3a 64 3d 33  | a=0:b=1:c=2:d=3|
000002e0  3a 65 3d 34 3a 66 3d 35  3a 67 3d 36 0d 01 5e 21  |:e=4:f=5:g=6..^!|
000002f0  20 71 3d 37 3a 70 74 72  3d 38 3a 77 3d 39 3a 78  | q=7:ptr=8:w=9:x|
00000300  3d 31 30 3a 79 3d 31 31  3a 7a 3d 31 32 0d 01 68  |=10:y=11:z=12..h|
00000310  15 20 e3 20 70 61 73 73  3d 30 20 b8 20 32 20 88  |. . pass=0 . 2 .|
00000320  20 32 0d 01 72 0e 20 50  25 3d 73 65 61 72 63 68  | 2..r. P%=search|
00000330  0d 01 7c 06 20 3a 0d 01  86 10 5b 4f 50 54 20 20  |..|. :....[OPT  |
00000340  20 20 70 61 73 73 0d 01  90 13 20 41 44 52 20 20  |  pass.... ADR  |
00000350  20 20 64 2c 62 6c 6f 63  6b 0d 01 9a 20 20 41 44  |  d,block...  AD|
00000360  44 20 20 20 20 70 74 72  2c 64 2c 23 28 33 2a 73  |D    ptr,d,#(3*s|
00000370  69 7a 65 25 29 3c 3c 31  30 0d 01 a4 12 20 53 55  |ize%)<<10.... SU|
00000380  42 20 20 20 20 62 2c 71  2c 23 31 0d 01 ae 16 20  |B    b,q,#1.... |
00000390  4d 4f 56 20 20 20 20 77  2c 62 2c 4c 53 52 20 23  |MOV    w,b,LSR #|
000003a0  35 0d 01 b8 16 20 4d 4f  56 20 20 20 20 77 2c 77  |5.... MOV    w,w|
000003b0  2c 4c 53 4c 20 23 32 0d  01 c2 12 20 41 44 44 20  |,LSL #2.... ADD |
000003c0  20 20 20 66 2c 77 2c 23  34 0d 01 cc 13 20 53 55  |   f,w,#4.... SU|
000003d0  42 20 20 20 20 63 2c 70  74 72 2c 66 0d 01 d6 10  |B    c,ptr,f....|
000003e0  20 4d 4f 56 20 20 20 20  7a 2c 23 30 0d 01 e0 0b  | MOV    z,#0....|
000003f0  2e 7a 65 72 6f 65 73 0d  01 ea 13 20 53 54 52 20  |.zeroes.... STR |
00000400  20 20 20 7a 2c 5b 63 2c  66 5d 0d 01 f4 12 20 53  |   z,[c,f].... S|
00000410  55 42 53 20 20 20 66 2c  66 2c 23 34 0d 01 fe 12  |UBS   f,f,#4....|
00000420  20 42 47 45 20 20 20 20  7a 65 72 6f 65 73 0d 02  | BGE    zeroes..|
00000430  08 10 20 4d 4f 56 20 20  20 20 63 2c 23 33 0d 02  |.. MOV    c,#3..|
00000440  12 13 20 53 54 52 20 20  20 20 63 2c 5b 70 74 72  |.. STR    c,[ptr|
00000450  5d 0d 02 1c 13 20 53 54  52 20 20 20 20 62 2c 62  |].... STR    b,b|
00000460  6c 6f 63 6b 0d 02 26 15  20 80 20 20 20 20 71 2c  |lock..&. .    q,|
00000470  71 2c 23 25 31 31 31 31  31 0d 02 30 15 20 53 54  |q,#%11111..0. ST|
00000480  52 20 20 20 20 71 2c 62  6c 6f 63 6b 2b 34 0d 02  |R    q,block+4..|
00000490  3a 1c 20 53 55 42 20 20  20 20 71 2c 70 74 72 2c  |:. SUB    q,ptr,|
000004a0  23 73 69 7a 65 25 3c 3c  31 30 0d 02 44 0b 2e 73  |#size%<<10..D..s|
000004b0  71 75 61 72 65 0d 02 4e  13 20 53 55 42 20 20 20  |quare..N. SUB   |
000004c0  20 67 2c 70 74 72 2c 77  0d 02 58 0f 20 4d 4f 56  | g,ptr,w..X. MOV|
000004d0  20 20 20 20 65 2c 71 0d  02 62 0f 20 4d 4f 56 20  |    e,q..b. MOV |
000004e0  20 20 20 66 2c 77 0d 02  6c 09 2e 69 6e 69 74 0d  |   f,w..l..init.|
000004f0  02 76 13 20 4c 44 52 20  20 20 20 63 2c 5b 67 2c  |.v. LDR    c,[g,|
00000500  66 5d 0d 02 80 14 20 a4  5f 75 6d 75 6c 28 64 2c  |f].... ._umul(d,|
00000510  79 2c 63 2c 63 29 0d 02  8a 15 20 53 54 52 20 20  |y,c,c).... STR  |
00000520  20 20 64 2c 5b 65 5d 2c  23 2d 34 0d 02 94 12 20  |  d,[e],#-4.... |
00000530  53 55 42 53 20 20 20 66  2c 66 2c 23 34 0d 02 9e  |SUBS   f,f,#4...|
00000540  15 20 53 54 52 20 20 20  20 79 2c 5b 65 5d 2c 23  |. STR    y,[e],#|
00000550  2d 34 0d 02 a8 10 20 42  47 45 20 20 20 20 69 6e  |-4.... BGE    in|
00000560  69 74 0d 02 b2 10 20 4d  4f 56 20 20 20 20 67 2c  |it.... MOV    g,|
00000570  23 34 0d 02 bc 10 20 4d  4f 56 20 20 20 20 78 2c  |#4.... MOV    x,|
00000580  23 30 0d 02 c6 10 20 4d  4f 56 20 20 20 20 79 2c  |#0.... MOV    y,|
00000590  23 30 0d 02 d0 0a 2e 66  65 74 63 68 0d 02 da 16  |#0.....fetch....|
000005a0  20 43 4d 50 20 20 20 20  67 2c 77 2c 4c 53 4c 20  | CMP    g,w,LSL |
000005b0  23 31 0d 02 e4 12 20 42  47 45 20 20 20 20 73 70  |#1.... BGE    sp|
000005c0  72 65 61 64 0d 02 ee 10  20 4d 4f 56 20 20 20 20  |read.... MOV    |
000005d0  61 2c 23 30 0d 02 f8 10  20 4d 4f 56 20 20 20 20  |a,#0.... MOV    |
000005e0  62 2c 23 30 0d 03 02 11  20 53 55 42 53 20 20 20  |b,#0.... SUBS   |
000005f0  63 2c 67 2c 77 0d 03 0c  11 20 4d 4f 56 4c 45 20  |c,g,w.... MOVLE |
00000600  20 65 2c 70 74 72 0d 03  16 13 20 53 55 42 47 54  | e,ptr.... SUBGT|
00000610  20 20 65 2c 70 74 72 2c  63 0d 03 20 13 20 53 55  |  e,ptr,c.. . SU|
00000620  42 4c 45 20 20 66 2c 70  74 72 2c 67 0d 03 2a 13  |BLE  f,ptr,g..*.|
00000630  20 53 55 42 47 54 20 20  66 2c 70 74 72 2c 77 0d  | SUBGT  f,ptr,w.|
00000640  03 34 0a 2e 61 63 63 75  6d 0d 03 3e 15 20 4c 44  |.4..accum..>. LD|
00000650  52 20 20 20 20 63 2c 5b  65 5d 2c 23 2d 34 0d 03  |R    c,[e],#-4..|
00000660  48 14 20 4c 44 52 20 20  20 20 64 2c 5b 66 5d 2c  |H. LDR    d,[f],|
00000670  23 34 0d 03 52 14 20 a4  5f 75 6d 75 6c 28 64 2c  |#4..R. ._umul(d,|
00000680  63 2c 63 2c 64 29 0d 03  5c 11 20 41 44 44 53 20  |c,c,d)..\. ADDS |
00000690  20 20 62 2c 62 2c 64 0d  03 66 11 20 41 44 43 53  |  b,b,d..f. ADCS|
000006a0  20 20 20 61 2c 61 2c 63  0d 03 70 12 20 41 44 43  |   a,a,c..p. ADC|
000006b0  20 20 20 20 7a 2c 7a 2c  23 30 0d 03 7a 0f 20 43  |    z,z,#0..z. C|
000006c0  4d 50 20 20 20 20 65 2c  66 0d 03 84 11 20 42 47  |MP    e,f.... BG|
000006d0  54 20 20 20 20 61 63 63  75 6d 0d 03 8e 11 20 41  |T    accum.... A|
000006e0  44 44 53 20 20 20 62 2c  62 2c 62 0d 03 98 11 20  |DDS   b,b,b.... |
000006f0  41 44 43 53 20 20 20 61  2c 61 2c 61 0d 03 a2 11  |ADCS   a,a,a....|
00000700  20 41 44 43 20 20 20 20  7a 2c 7a 2c 7a 0d 03 ac  | ADC    z,z,z...|
00000710  14 20 4c 44 52 20 20 20  20 64 2c 5b 71 2c 2d 67  |. LDR    d,[q,-g|
00000720  5d 0d 03 b6 11 20 41 44  44 53 20 20 20 62 2c 62  |].... ADDS   b,b|
00000730  2c 64 0d 03 c0 11 20 41  44 43 53 20 20 20 61 2c  |,d.... ADCS   a,|
00000740  61 2c 78 0d 03 ca 12 20  41 44 43 20 20 20 20 7a  |a,x.... ADC    z|
00000750  2c 7a 2c 23 30 0d 03 d4  11 20 41 44 44 53 20 20  |,z,#0.... ADDS  |
00000760  20 62 2c 62 2c 79 0d 03  de 12 20 41 44 43 53 20  | b,b,y.... ADCS |
00000770  20 20 79 2c 61 2c 23 30  0d 03 e8 12 20 41 44 43  |  y,a,#0.... ADC|
00000780  20 20 20 20 78 2c 7a 2c  23 30 0d 03 f2 14 20 53  |    x,z,#0.... S|
00000790  54 52 20 20 20 20 62 2c  5b 71 2c 2d 67 5d 0d 03  |TR    b,[q,-g]..|
000007a0  fc 12 20 41 44 44 20 20  20 20 67 2c 67 2c 23 34  |.. ADD    g,g,#4|
000007b0  0d 04 06 10 20 4d 4f 56  20 20 20 20 7a 2c 23 30  |.... MOV    z,#0|
000007c0  0d 04 10 11 20 42 20 20  20 20 20 20 66 65 74 63  |.... B      fetc|
000007d0  68 0d 04 1a 0b 2e 73 70  72 65 61 64 0d 04 24 14  |h.....spread..$.|
000007e0  20 4c 44 52 20 20 20 20  64 2c 5b 71 2c 2d 67 5d  | LDR    d,[q,-g]|
000007f0  0d 04 2e 11 20 41 44 44  53 20 20 20 79 2c 79 2c  |.... ADDS   y,y,|
00000800  64 0d 04 38 14 20 53 54  52 20 20 20 20 79 2c 5b  |d..8. STR    y,[|
00000810  71 2c 2d 67 5d 0d 04 42  12 20 41 44 44 20 20 20  |q,-g]..B. ADD   |
00000820  20 67 2c 67 2c 23 34 0d  04 4c 14 20 4c 44 52 20  | g,g,#4..L. LDR |
00000830  20 20 20 63 2c 5b 71 2c  2d 67 5d 0d 04 56 11 20  |   c,[q,-g]..V. |
00000840  41 44 43 20 20 20 20 78  2c 78 2c 63 0d 04 60 14  |ADC    x,x,c..`.|
00000850  20 53 54 52 20 20 20 20  78 2c 5b 71 2c 2d 67 5d  | STR    x,[q,-g]|
00000860  0d 04 6a 14 20 4c 44 52  20 20 20 20 64 2c 5b 71  |..j. LDR    d,[q|
00000870  2c 2d 77 5d 0d 04 74 15  20 4c 44 52 20 20 20 20  |,-w]..t. LDR    |
00000880  79 2c 62 6c 6f 63 6b 2b  34 0d 04 7e 13 20 52 53  |y,block+4..~. RS|
00000890  42 20 20 20 20 78 2c 79  2c 23 33 32 0d 04 88 15  |B    x,y,#32....|
000008a0  20 4d 4f 56 20 20 20 20  65 2c 64 2c 4c 53 52 20  | MOV    e,d,LSR |
000008b0  79 0d 04 92 17 20 42 49  43 20 20 20 20 61 2c 64  |y.... BIC    a,d|
000008c0  2c 65 2c 4c 53 4c 20 79  0d 04 9c 15 20 4d 4f 56  |,e,LSL y.... MOV|
000008d0  20 20 20 20 64 2c 64 2c  4c 53 52 20 79 0d 04 a6  |    d,d,LSR y...|
000008e0  14 20 53 54 52 20 20 20  20 61 2c 5b 71 2c 2d 77  |. STR    a,[q,-w|
000008f0  5d 0d 04 b0 0f 20 4d 4f  56 20 20 20 20 66 2c 77  |].... MOV    f,w|
00000900  0d 04 ba 11 20 53 55 42  20 20 20 20 65 2c 71 2c  |.... SUB    e,q,|
00000910  77 0d 04 c4 11 20 53 55  42 20 20 20 20 67 2c 65  |w.... SUB    g,e|
00000920  2c 77 0d 04 ce 12 20 53  55 42 20 20 20 20 67 2c  |,w.... SUB    g,|
00000930  67 2c 23 34 0d 04 d8 13  20 53 55 42 20 20 20 20  |g,#4.... SUB    |
00000940  63 2c 70 74 72 2c 77 0d  04 e2 0a 2e 6d 6f 64 75  |c,ptr,w.....modu|
00000950  6c 0d 04 ec 13 20 4c 44  52 20 20 20 20 61 2c 5b  |l.... LDR    a,[|
00000960  67 2c 66 5d 0d 04 f6 17  20 41 44 44 20 20 20 20  |g,f].... ADD    |
00000970  64 2c 64 2c 61 2c 4c 53  4c 20 78 0d 05 00 13 20  |d,d,a,LSL x.... |
00000980  4c 44 52 20 20 20 20 62  2c 5b 65 2c 66 5d 0d 05  |LDR    b,[e,f]..|
00000990  0a 11 20 41 44 44 53 20  20 20 62 2c 62 2c 7a 0d  |.. ADDS   b,b,z.|
000009a0  05 14 10 20 4d 4f 56 20  20 20 20 7a 2c 23 30 0d  |... MOV    z,#0.|
000009b0  05 1e 12 20 41 44 43 20  20 20 20 7a 2c 7a 2c 23  |... ADC    z,z,#|
000009c0  30 0d 05 28 11 20 41 44  44 53 20 20 20 62 2c 62  |0..(. ADDS   b,b|
000009d0  2c 64 0d 05 32 12 20 41  44 43 20 20 20 20 7a 2c  |,d..2. ADC    z,|
000009e0  7a 2c 23 30 0d 05 3c 15  20 4d 4f 56 20 20 20 20  |z,#0..<. MOV    |
000009f0  64 2c 61 2c 4c 53 52 20  79 0d 05 46 13 20 53 54  |d,a,LSR y..F. ST|
00000a00  52 20 20 20 20 62 2c 5b  63 2c 66 5d 0d 05 50 12  |R    b,[c,f]..P.|
00000a10  20 53 55 42 53 20 20 20  66 2c 66 2c 23 34 0d 05  | SUBS   f,f,#4..|
00000a20  5a 11 20 42 47 45 20 20  20 20 6d 6f 64 75 6c 0d  |Z. BGE    modul.|
00000a30  05 64 16 20 4c 44 52 20  20 20 20 61 2c 5b 70 74  |.d. LDR    a,[pt|
00000a40  72 2c 2d 77 5d 0d 05 6e  15 20 4d 4f 56 53 20 20  |r,-w]..n. MOVS  |
00000a50  20 66 2c 61 2c 4c 53 52  20 79 0d 05 78 0a 2e 66  | f,a,LSR y..x..f|
00000a60  69 6e 61 6c 0d 05 82 17  20 42 49 43 47 54 20 20  |inal.... BICGT  |
00000a70  61 2c 61 2c 66 2c 4c 53  4c 20 79 0d 05 8c 16 20  |a,a,f,LSL y.... |
00000a80  53 54 52 47 54 20 20 61  2c 5b 70 74 72 2c 2d 77  |STRGT  a,[ptr,-w|
00000a90  5d 0d 05 96 13 20 4c 44  52 20 20 20 20 62 2c 62  |].... LDR    b,b|
00000aa0  6c 6f 63 6b 0d 05 a0 12  20 53 55 42 53 20 20 20  |lock.... SUBS   |
00000ab0  62 2c 62 2c 23 31 0d 05  aa 13 20 53 54 52 20 20  |b,b,#1.... STR  |
00000ac0  20 20 62 2c 62 6c 6f 63  6b 0d 05 b4 12 20 41 44  |  b,block.... AD|
00000ad0  44 45 51 20 20 66 2c 66  2c 23 34 0d 05 be 11 20  |DEQ  f,f,#4.... |
00000ae0  4d 4f 56 20 20 20 20 64  2c 70 74 72 0d 05 c8 0a  |MOV    d,ptr....|
00000af0  2e 63 61 72 72 79 0d 05  d2 15 20 4c 44 52 20 20  |.carry.... LDR  |
00000b00  20 20 61 2c 5b 64 5d 2c  23 2d 34 0d 05 dc 11 20  |  a,[d],#-4.... |
00000b10  41 44 44 53 20 20 20 61  2c 61 2c 66 0d 05 e6 10  |ADDS   a,a,f....|
00000b20  20 4d 4f 56 43 53 20 20  66 2c 23 31 0d 05 f0 14  | MOVCS  f,#1....|
00000b30  20 53 54 52 20 20 20 20  61 2c 5b 64 2c 23 34 5d  | STR    a,[d,#4]|
00000b40  0d 05 fa 11 20 42 43 53  20 20 20 20 63 61 72 72  |.... BCS    carr|
00000b50  79 0d 06 04 10 20 43 4d  50 20 20 20 20 62 2c 23  |y.... CMP    b,#|
00000b60  30 0d 06 0e 12 20 42 47  54 20 20 20 20 73 71 75  |0.... BGT    squ|
00000b70  61 72 65 0d 06 18 16 20  4c 44 52 20 20 20 20 61  |are.... LDR    a|
00000b80  2c 5b 70 74 72 2c 2d 77  5d 0d 06 22 15 20 4d 4f  |,[ptr,-w]..". MO|
00000b90  56 53 20 20 20 66 2c 61  2c 4c 53 52 20 79 0d 06  |VS   f,a,LSR y..|
00000ba0  2c 11 20 42 47 54 20 20  20 20 66 69 6e 61 6c 0d  |,. BGT    final.|
00000bb0  06 36 13 20 4c 44 52 20  20 20 20 61 2c 5b 70 74  |.6. LDR    a,[pt|
00000bc0  72 5d 0d 06 40 12 20 4d  4f 56 20 20 20 20 70 63  |r]..@. MOV    pc|
00000bd0  2c 72 31 34 0d 06 4a 0a  2e 62 6c 6f 63 6b 0d 06  |,r14..J..block..|
00000be0  54 12 20 a4 5f 77 6f 72  6b 28 72 6f 6f 6d 25 29  |T. ._work(room%)|
00000bf0  0d 06 5e 05 5d 0d 06 68  0b 20 ed 20 70 61 73 73  |..^.]..h. . pass|
00000c00  0d 06 72 0a 20 50 25 3d  51 25 0d 06 7c 06 20 e1  |..r. P%=Q%..|. .|
00000c10  0d 06 86 06 20 3a 0d 06  90 15 20 dd 20 a4 5f 77  |.... :.... . ._w|
00000c20  6f 72 6b 28 62 79 74 65  73 25 29 0d 06 9a 0f 20  |ork(bytes%).... |
00000c30  50 25 2b 3d 62 79 74 65  73 25 0d 06 a4 0a 20 3d  |P%+=bytes%.... =|
00000c40  70 61 73 73 0d 06 ae 06  20 3a 0d 06 b8 1a 20 dd  |pass.... :.... .|
00000c50  20 a4 5f 75 6d 75 6c 28  52 6c 2c 52 68 2c 52 6d  | ._umul(Rl,Rh,Rm|
00000c60  2c 52 73 29 0d 06 c2 10  20 5b 4f 50 54 20 20 20  |,Rs).... [OPT   |
00000c70  70 61 73 73 0d 06 cc 32  20 44 43 44 20 20 20 20  |pass...2 DCD    |
00000c80  26 45 30 38 30 30 30 39  30 2b 28 52 68 3c 3c 31  |&E0800090+(Rh<<1|
00000c90  36 29 2b 28 52 6c 3c 3c  31 32 29 2b 28 52 73 3c  |6)+(Rl<<12)+(Rs<|
00000ca0  3c 38 29 2b 52 6d 0d 06  d6 06 20 5d 0d 06 e0 08  |<8)+Rm.... ]....|
00000cb0  20 3d 22 22 0d ff                                 | =""..|
00000cb6