Floppy/BASIC Diskcopy
Das folgende in BASIC geschriebene Kopierprogramm kopiert eine ganze Diskette von Floppy 8 auf Floppy 9. Dabei wird sektorweise kopiert, d.h. die Zieldiskette ist mit der Quelldiskette auf Ebene des CBM-Dateisystems identisch. Da kein Schnelllader benutzt wird, ist das Programm allerdings sehr langsam. Durch z.B. JiffyDOS lässt sich der reine Datentransfer beschleunigen.
Disketten mit Kopierschutz, mit 40 Spuren oder ähnlichem lassen sich nicht mit diesem Programm kopieren.
Die in den Headern der Sektoren eingebettete Disketten-ID (die z.B. beim Formatieren angegeben wird) wird nicht überschrieben, ihre Kopie in der BAM aber schon. Unterstützt das Ziellaufwerk also IDs in Sektoren-Headern (z.B. echte Laufwerke oder Emulation per G64-Format; D64 ist nicht betroffen), empfiehlt es sich, die Zieldiskette vorher mit der ID der Quelldiskette zu formatieren.
Pure BASIC-Version[Bearbeiten | Quelltext bearbeiten]
Diese Version benutzt nur BASIC-Befehle und braucht zum Kopieren von 1541 zu 1541 etwa eine Stunde.
100 data 17,21,24,19,30,18,35,17,0,0 110 tr=1:se=0:sd=8:dd=9 120 print"copying from drive ";sd;" to drive ";dd 130 read mt,ms 140 if mt=0 then print"finished":end 150 for tr=tr to mt 160 for se=0 to ms-1 170 print"track ";tr;", sector ";se 180 open1,sd,5,"#":open2,dd,5,"#":rem Puffer öffnen 190 open3,sd,15:open4,dd,15:rem Kommandokanäle öffnen 200 print#3,"u1:5 0 "+str$(tr)+str$(se):rem Sektor lesen 210 print#4,"b-p:5 0":rem Lesepointer zurücksetzen 220 print#3,"b-p:5 0" 230 for i=0 to 255:get#1,a$ 240 if a$=""then a$=chr$(0):rem GET liefert keine Nullbytes 250 print#2,a$;:next i 260 print#4,"u2:5 0 "+str$(tr)+str$(se):rem Sektor schreiben 270 close4:close2:close1:close3 280 next se:next tr 290 goto 130
Mit Assembler beschleunigte Version[Bearbeiten | Quelltext bearbeiten]
In dieser Version wurde die innere Schleife zum Kopieren der Daten (Zeilen 230-250) durch eine Assembler-Hilfsroutine ersetzt. Außerdem werden die Datenkanäle zwischen dem Lesen der Sektoren offengelassen. Dadurch braucht das Programm zum Kopieren einer Diskette "nur" noch etwa 18 Minuten (mit zwei JiffyDOS-1541 ist es schneller, und mit z.B. dem SD2IEC und einer Jiffy-1541 dauert der Kopiervorgang nur noch sieben Minuten).
- Download: DCOPY.PRG
100 data 17,21,24,19,30,18,35,17,0,0 110 tr=1:se=0:sd=8:dd=9 120 print"copying from drive ";sd;" to drive ";dd 130 open1,sd,5,"#":open2,dd,5,"#" 140 open3,sd,15:open4,dd,15 150 read mt,ms 160 if mt=0 then 300 170 for tr=tr to mt 180 for se=0 to ms-1 190 print"track ";tr;", sector ";se;" " 200 print#3,"u1:5 0 "+str$(tr)+str$(se) 210 print#4,"b-p:5 0" 220 print#3,"b-p:5 0" 230 sys 4096:rem 256 Bytes von #1 nach #2 kopieren 240 print#4,"u2:5 0 "+str$(tr)+str$(se) 250 next se:next tr 260 goto 150 300 close4:close2:close1:close3 310 print"finished"
.C:1000 LDX #$01 - 256 Bytes aus Dateinummer 1 lesen .C:1002 JSR $FFC6 .C:1005 LDY #$00 .C:1007 LDX #$01 .C:1009 JSR $FFCF .C:100c STA $C000,Y .C:100f INY .C:1010 BNE $1007 .C:1012 JSR $FFCC .C:1015 LDX #$02 - 256 Bytes nach Dateinummer 2 schreiben .C:1017 JSR $FFC9 .C:101a LDY #$00 .C:101c LDA $C000,Y .C:101f LDX #$02 .C:1021 JSR $FFD2 .C:1024 INY .C:1025 BNE $101C .C:1027 JSR $FFCC .C:102a RTS