Home » Archimedes archive » Acorn User » AU 1998-02 B.adf » Regulars » StarInfo/Boham/DiscCopy

StarInfo/Boham/DiscCopy

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-02 B.adf » Regulars
Filename: StarInfo/Boham/DiscCopy
Read OK:
File size: 0621 bytes
Load address: 0000
Exec address: 0000
File contents
    1*ADFS
    2*DRIVE 0
    3MODE 27:OFF
    4PRINT"Insert source disc and press space"
    5PROCw
    6DIM d% 256
    7SYS "ADFS_DescribeDisc",":0",d%
    8sect_size% = 1<<(d%?0)
    9PRINT "Sector size       = ";sect_size%;" bytes"
   10PRINT "Sectors per track = ";d%?1
   11track_size% = (d%?1 * sect_size%)
   12PRINT "Track size        = ";track_size% DIV 1024;" Kb"
   13tracks% = d%!16 / track_size%
   14PRINT "Total tracks      = ";tracks%
   15disc_size%=d%!16
   16PRINT "Disc size         = ";(d%!16)DIV1024;" Kb"
   17PRINT "Disc name         = ";FNs(d%+22,10)
   18PRINT ''''
   19DIM read% disc_size%
   20a%=0
   21FOR track% = 0 TO tracks%-1
   22FOR sector% = 0 TO (d%?1)-1
   23SYS "XADFS_DiscOp",,1,a%,read%+a%,sect_size% TO r0;f%
   24IF (f% AND 1)<>0 THEN
   25IF FNs(r0+4,255)="Escape" THEN ERROR EXT 0,"Escape":END
   26GCOL 1
   27COLOUR 1
   28ELSE
   29COLOUR 7
   30GCOL 2
   31ENDIF
   32PRINT TAB(0,20);"Track: ";track%;TAB(20);"Sector: ";sector%;"  ";TAB(40);"Disc address: &";FNh8(a%)
   33
   34RECTANGLEFILL track%*8,sector%*8,4,4
   35a%=a%+sect_size%
   36NEXT ,
   37:
   38REM SYS "OS_File",10,":4.DiscDUMP",&FFD,,read%,read%+disc_size%
   39PRINT "Insert destination disc:"
   40A=GET
   41a%=0
   42FOR track% = 0 TO tracks%-1
   43FOR sector% = 0 TO (d%?1)-1
   44SYS "XADFS_DiscOp",,2,a%,read%+a%,sect_size% TO r0;f%
   45IF (f% AND 1)<>0 THEN
   46IF FNs(r0+4,255)="Escape" THEN ERROR EXT 0,"Escape":END
   47GCOL 5
   48COLOUR 5
   49ELSE
   50COLOUR 7
   51GCOL 4
   52ENDIF
   53PRINT TAB(0,20);"Track: ";track%;TAB(20);"Sector: ";sector%;"  ";TAB(40);"Disc address: &";FNh8(a%)
   54
   55RECTANGLEFILL track%*8,sector%*8,4,4
   56a%=a%+sect_size%
   57NEXT ,
   58
   59END
   60:
   61DEFPROCw
   62WHILE GET<>32
   63ENDWHILE
   64ENDPROC
   65:
   66DEFFNs(a,l)
   67LOCAL a$,m
   68a$=""
   69m=a+l
   70WHILE ?a>31 AND a<m
   71a$=a$+CHR$(?a)
   72a=a+1
   73ENDWHILE
   74=a$
   75:
   76DEFFNh8(n)
   77=RIGHT$("0000000"+STR$~(n),8)
	*ADFS
*DRIVE 0

� 27:�
)�"Insert source disc and press space"
�w
� d% 256
"ș "ADFS_DescribeDisc",":0",d%
sect_size% = 1<<(d%?0)
	0� "Sector size       = ";sect_size%;" bytes"

!� "Sectors per track = ";d%?1
%track_size% = (d%?1 * sect_size%)
5� "Track size        = ";track_size% � 1024;" Kb"

!tracks% = d%!16 / track_size%
$� "Total tracks      = ";tracks%
disc_size%=d%!16
/� "Disc size         = ";(d%!16)�1024;" Kb"
)� "Disc name         = ";�s(d%+22,10)

� ''''
� read% disc_size%
a%=0
� track% = 0 � tracks%-1
� sector% = 0 � (d%?1)-1
7ș "XADFS_DiscOp",,1,a%,read%+a%,sect_size% � r0;f%
� (f% � 1)<>0 �
.� �s(r0+4,255)="Escape" � � � 0,"Escape":�
� 1
� 1
�
� 7
� 2
�
 Y� �0,20);"Track: ";track%;�20);"Sector: ";sector%;"  ";�40);"Disc address: &";�h8(a%)
!
"ȓȐ track%*8,sector%*8,4,4
#a%=a%+sect_size%
$� ,
%:
&A� SYS "OS_File",10,":4.DiscDUMP",&FFD,,read%,read%+disc_size%
' � "Insert destination disc:"
(A=�
)a%=0
*� track% = 0 � tracks%-1
+� sector% = 0 � (d%?1)-1
,7ș "XADFS_DiscOp",,2,a%,read%+a%,sect_size% � r0;f%
-� (f% � 1)<>0 �
..� �s(r0+4,255)="Escape" � � � 0,"Escape":�
/� 5
0� 5
1�
2� 7
3� 4
4�
5Y� �0,20);"Track: ";track%;�20);"Sector: ";sector%;"  ";�40);"Disc address: &";�h8(a%)
6
7ȓȐ track%*8,sector%*8,4,4
8a%=a%+sect_size%
9� ,
:
;�
<:
=��w
>ȕ �<>32
?�
@�
A:
Bݤs(a,l)
C
� a$,m
D	a$=""
E	m=a+l
Fȕ ?a>31 � a<m
Ga$=a$+�(?a)
H	a=a+1
I�
J=a$
K:
Lݤh8(n)
M=�"0000000"+�~(n),8)
�
00000000  0d 00 01 09 2a 41 44 46  53 0d 00 02 0c 2a 44 52  |....*ADFS....*DR|
00000010  49 56 45 20 30 0d 00 03  0a eb 20 32 37 3a 87 0d  |IVE 0..... 27:..|
00000020  00 04 29 f1 22 49 6e 73  65 72 74 20 73 6f 75 72  |..)."Insert sour|
00000030  63 65 20 64 69 73 63 20  61 6e 64 20 70 72 65 73  |ce disc and pres|
00000040  73 20 73 70 61 63 65 22  0d 00 05 06 f2 77 0d 00  |s space".....w..|
00000050  06 0c de 20 64 25 20 32  35 36 0d 00 07 22 c8 99  |... d% 256..."..|
00000060  20 22 41 44 46 53 5f 44  65 73 63 72 69 62 65 44  | "ADFS_DescribeD|
00000070  69 73 63 22 2c 22 3a 30  22 2c 64 25 0d 00 08 1a  |isc",":0",d%....|
00000080  73 65 63 74 5f 73 69 7a  65 25 20 3d 20 31 3c 3c  |sect_size% = 1<<|
00000090  28 64 25 3f 30 29 0d 00  09 30 f1 20 22 53 65 63  |(d%?0)...0. "Sec|
000000a0  74 6f 72 20 73 69 7a 65  20 20 20 20 20 20 20 3d  |tor size       =|
000000b0  20 22 3b 73 65 63 74 5f  73 69 7a 65 25 3b 22 20  | ";sect_size%;" |
000000c0  62 79 74 65 73 22 0d 00  0a 21 f1 20 22 53 65 63  |bytes"...!. "Sec|
000000d0  74 6f 72 73 20 70 65 72  20 74 72 61 63 6b 20 3d  |tors per track =|
000000e0  20 22 3b 64 25 3f 31 0d  00 0b 25 74 72 61 63 6b  | ";d%?1...%track|
000000f0  5f 73 69 7a 65 25 20 3d  20 28 64 25 3f 31 20 2a  |_size% = (d%?1 *|
00000100  20 73 65 63 74 5f 73 69  7a 65 25 29 0d 00 0c 35  | sect_size%)...5|
00000110  f1 20 22 54 72 61 63 6b  20 73 69 7a 65 20 20 20  |. "Track size   |
00000120  20 20 20 20 20 3d 20 22  3b 74 72 61 63 6b 5f 73  |     = ";track_s|
00000130  69 7a 65 25 20 81 20 31  30 32 34 3b 22 20 4b 62  |ize% . 1024;" Kb|
00000140  22 0d 00 0d 21 74 72 61  63 6b 73 25 20 3d 20 64  |"...!tracks% = d|
00000150  25 21 31 36 20 2f 20 74  72 61 63 6b 5f 73 69 7a  |%!16 / track_siz|
00000160  65 25 0d 00 0e 24 f1 20  22 54 6f 74 61 6c 20 74  |e%...$. "Total t|
00000170  72 61 63 6b 73 20 20 20  20 20 20 3d 20 22 3b 74  |racks      = ";t|
00000180  72 61 63 6b 73 25 0d 00  0f 14 64 69 73 63 5f 73  |racks%....disc_s|
00000190  69 7a 65 25 3d 64 25 21  31 36 0d 00 10 2f f1 20  |ize%=d%!16.../. |
000001a0  22 44 69 73 63 20 73 69  7a 65 20 20 20 20 20 20  |"Disc size      |
000001b0  20 20 20 3d 20 22 3b 28  64 25 21 31 36 29 81 31  |   = ";(d%!16).1|
000001c0  30 32 34 3b 22 20 4b 62  22 0d 00 11 29 f1 20 22  |024;" Kb"...). "|
000001d0  44 69 73 63 20 6e 61 6d  65 20 20 20 20 20 20 20  |Disc name       |
000001e0  20 20 3d 20 22 3b a4 73  28 64 25 2b 32 32 2c 31  |  = ";.s(d%+22,1|
000001f0  30 29 0d 00 12 0a f1 20  27 27 27 27 0d 00 13 16  |0)..... ''''....|
00000200  de 20 72 65 61 64 25 20  64 69 73 63 5f 73 69 7a  |. read% disc_siz|
00000210  65 25 0d 00 14 08 61 25  3d 30 0d 00 15 1c e3 20  |e%....a%=0..... |
00000220  74 72 61 63 6b 25 20 3d  20 30 20 b8 20 74 72 61  |track% = 0 . tra|
00000230  63 6b 73 25 2d 31 0d 00  16 1c e3 20 73 65 63 74  |cks%-1..... sect|
00000240  6f 72 25 20 3d 20 30 20  b8 20 28 64 25 3f 31 29  |or% = 0 . (d%?1)|
00000250  2d 31 0d 00 17 37 c8 99  20 22 58 41 44 46 53 5f  |-1...7.. "XADFS_|
00000260  44 69 73 63 4f 70 22 2c  2c 31 2c 61 25 2c 72 65  |DiscOp",,1,a%,re|
00000270  61 64 25 2b 61 25 2c 73  65 63 74 5f 73 69 7a 65  |ad%+a%,sect_size|
00000280  25 20 b8 20 72 30 3b 66  25 0d 00 18 13 e7 20 28  |% . r0;f%..... (|
00000290  66 25 20 80 20 31 29 3c  3e 30 20 8c 0d 00 19 2e  |f% . 1)<>0 .....|
000002a0  e7 20 a4 73 28 72 30 2b  34 2c 32 35 35 29 3d 22  |. .s(r0+4,255)="|
000002b0  45 73 63 61 70 65 22 20  8c 20 85 20 a2 20 30 2c  |Escape" . . . 0,|
000002c0  22 45 73 63 61 70 65 22  3a e0 0d 00 1a 07 e6 20  |"Escape":...... |
000002d0  31 0d 00 1b 07 fb 20 31  0d 00 1c 05 cc 0d 00 1d  |1..... 1........|
000002e0  07 fb 20 37 0d 00 1e 07  e6 20 32 0d 00 1f 05 cd  |.. 7..... 2.....|
000002f0  0d 00 20 59 f1 20 8a 30  2c 32 30 29 3b 22 54 72  |.. Y. .0,20);"Tr|
00000300  61 63 6b 3a 20 22 3b 74  72 61 63 6b 25 3b 8a 32  |ack: ";track%;.2|
00000310  30 29 3b 22 53 65 63 74  6f 72 3a 20 22 3b 73 65  |0);"Sector: ";se|
00000320  63 74 6f 72 25 3b 22 20  20 22 3b 8a 34 30 29 3b  |ctor%;"  ";.40);|
00000330  22 44 69 73 63 20 61 64  64 72 65 73 73 3a 20 26  |"Disc address: &|
00000340  22 3b a4 68 38 28 61 25  29 0d 00 21 04 0d 00 22  |";.h8(a%)..!..."|
00000350  1f c8 93 c8 90 20 74 72  61 63 6b 25 2a 38 2c 73  |..... track%*8,s|
00000360  65 63 74 6f 72 25 2a 38  2c 34 2c 34 0d 00 23 14  |ector%*8,4,4..#.|
00000370  61 25 3d 61 25 2b 73 65  63 74 5f 73 69 7a 65 25  |a%=a%+sect_size%|
00000380  0d 00 24 07 ed 20 2c 0d  00 25 05 3a 0d 00 26 41  |..$.. ,..%.:..&A|
00000390  f4 20 53 59 53 20 22 4f  53 5f 46 69 6c 65 22 2c  |. SYS "OS_File",|
000003a0  31 30 2c 22 3a 34 2e 44  69 73 63 44 55 4d 50 22  |10,":4.DiscDUMP"|
000003b0  2c 26 46 46 44 2c 2c 72  65 61 64 25 2c 72 65 61  |,&FFD,,read%,rea|
000003c0  64 25 2b 64 69 73 63 5f  73 69 7a 65 25 0d 00 27  |d%+disc_size%..'|
000003d0  20 f1 20 22 49 6e 73 65  72 74 20 64 65 73 74 69  | . "Insert desti|
000003e0  6e 61 74 69 6f 6e 20 64  69 73 63 3a 22 0d 00 28  |nation disc:"..(|
000003f0  07 41 3d a5 0d 00 29 08  61 25 3d 30 0d 00 2a 1c  |.A=...).a%=0..*.|
00000400  e3 20 74 72 61 63 6b 25  20 3d 20 30 20 b8 20 74  |. track% = 0 . t|
00000410  72 61 63 6b 73 25 2d 31  0d 00 2b 1c e3 20 73 65  |racks%-1..+.. se|
00000420  63 74 6f 72 25 20 3d 20  30 20 b8 20 28 64 25 3f  |ctor% = 0 . (d%?|
00000430  31 29 2d 31 0d 00 2c 37  c8 99 20 22 58 41 44 46  |1)-1..,7.. "XADF|
00000440  53 5f 44 69 73 63 4f 70  22 2c 2c 32 2c 61 25 2c  |S_DiscOp",,2,a%,|
00000450  72 65 61 64 25 2b 61 25  2c 73 65 63 74 5f 73 69  |read%+a%,sect_si|
00000460  7a 65 25 20 b8 20 72 30  3b 66 25 0d 00 2d 13 e7  |ze% . r0;f%..-..|
00000470  20 28 66 25 20 80 20 31  29 3c 3e 30 20 8c 0d 00  | (f% . 1)<>0 ...|
00000480  2e 2e e7 20 a4 73 28 72  30 2b 34 2c 32 35 35 29  |... .s(r0+4,255)|
00000490  3d 22 45 73 63 61 70 65  22 20 8c 20 85 20 a2 20  |="Escape" . . . |
000004a0  30 2c 22 45 73 63 61 70  65 22 3a e0 0d 00 2f 07  |0,"Escape":.../.|
000004b0  e6 20 35 0d 00 30 07 fb  20 35 0d 00 31 05 cc 0d  |. 5..0.. 5..1...|
000004c0  00 32 07 fb 20 37 0d 00  33 07 e6 20 34 0d 00 34  |.2.. 7..3.. 4..4|
000004d0  05 cd 0d 00 35 59 f1 20  8a 30 2c 32 30 29 3b 22  |....5Y. .0,20);"|
000004e0  54 72 61 63 6b 3a 20 22  3b 74 72 61 63 6b 25 3b  |Track: ";track%;|
000004f0  8a 32 30 29 3b 22 53 65  63 74 6f 72 3a 20 22 3b  |.20);"Sector: ";|
00000500  73 65 63 74 6f 72 25 3b  22 20 20 22 3b 8a 34 30  |sector%;"  ";.40|
00000510  29 3b 22 44 69 73 63 20  61 64 64 72 65 73 73 3a  |);"Disc address:|
00000520  20 26 22 3b a4 68 38 28  61 25 29 0d 00 36 04 0d  | &";.h8(a%)..6..|
00000530  00 37 1f c8 93 c8 90 20  74 72 61 63 6b 25 2a 38  |.7..... track%*8|
00000540  2c 73 65 63 74 6f 72 25  2a 38 2c 34 2c 34 0d 00  |,sector%*8,4,4..|
00000550  38 14 61 25 3d 61 25 2b  73 65 63 74 5f 73 69 7a  |8.a%=a%+sect_siz|
00000560  65 25 0d 00 39 07 ed 20  2c 0d 00 3a 04 0d 00 3b  |e%..9.. ,..:...;|
00000570  05 e0 0d 00 3c 05 3a 0d  00 3d 07 dd f2 77 0d 00  |....<.:..=...w..|
00000580  3e 0c c8 95 20 a5 3c 3e  33 32 0d 00 3f 05 ce 0d  |>... .<>32..?...|
00000590  00 40 05 e1 0d 00 41 05  3a 0d 00 42 0c dd a4 73  |.@....A.:..B...s|
000005a0  28 61 2c 6c 29 0d 00 43  0a ea 20 61 24 2c 6d 0d  |(a,l)..C.. a$,m.|
000005b0  00 44 09 61 24 3d 22 22  0d 00 45 09 6d 3d 61 2b  |.D.a$=""..E.m=a+|
000005c0  6c 0d 00 46 12 c8 95 20  3f 61 3e 33 31 20 80 20  |l..F... ?a>31 . |
000005d0  61 3c 6d 0d 00 47 0f 61  24 3d 61 24 2b bd 28 3f  |a<m..G.a$=a$+.(?|
000005e0  61 29 0d 00 48 09 61 3d  61 2b 31 0d 00 49 05 ce  |a)..H.a=a+1..I..|
000005f0  0d 00 4a 07 3d 61 24 0d  00 4b 05 3a 0d 00 4c 0b  |..J.=a$..K.:..L.|
00000600  dd a4 68 38 28 6e 29 0d  00 4d 18 3d c2 22 30 30  |..h8(n)..M.=."00|
00000610  30 30 30 30 30 22 2b c3  7e 28 6e 29 2c 38 29 0d  |00000"+.~(n),8).|
00000620  ff                                                |.|
00000621