Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
C64IVC20
Disketten kopieren
toll er Besitzer eines Commodore 64 und einer 1541-Floppy noch nicht beim
ra men geärgert? Solange es sich um reine Basic-Programme handelt, geht es noch:
Originaldiskette
einlegen,
Programm laden,
Diskette wechseln,
Programm
nsaven«, Diskette
wechseln,
Programm laden.
560 i'EXT I : RUN
570 IFRW=ITHEN610
5800PENI,8,5,NF$+",R":POKE252,0:POKE253,AH%(NR)+1
580 SYSMR:NR=NR+1:AL%(NR)=PEEK(254):AH%(NR)=PEEK(255)
600 CLOSEI'RETURN
6100PENI,8,5,NF$+",W":POKE252,0:POKE253,AH%(NR)+1
620 POKE254,AL%(NR+I):POKE255,AH%(NR+1):SYSMW
630 NR =NR + I : CLOSE I : RETURN
640 PRINT"~OPIE FERTIG !
650 GOSUB880:RUN
660 REM *** ENDE ***
670 POKE56,160:END
680 :
680 REM *** FORMATIEREN ***
700 INPUT"~ISKNAME";FO$:ID$="":INPUT"MDISK-ID";ID$:IFID$<)""THENID$=","+ID$
710 FO$=FO$+ID$
720 PRINT"~ITTE ZIELDISKETTE EINLEGEN"
730 GOSUB890
740 OPENI ,8,15, "N: "+FO$: CLOSE I
750 GOSUB880:GOTOI70
760 REM DIRECTORY EINLESEN
770 GETtIl ,A$,B$
780 GET#I,BL$,B$
790 GETttl,A$
800 GET#I,B$:IFST<>0THENRETURN
810 IFB$<>CHR$(34)THEN800
820 GET#I,B$: IFB$< >CHR$(34)THENNF$=NF$+B$:GOT0820
830 GET#I,B$:IFB$=CHR$(32)THEN830
840 NF$=NF$+","+B$:FORI=0TOI:GET#I,B$:NF$=NF$+B$:i'EXT
850 GET# I ,B$' I FB$< ) " "THEN850
860 RETURN
870 REM *** FEHLER-AUSGABE ***
880 OPENI5,8,15:INPUT#15,A,B$,C,D:PRINTA;B$;C;D:CLOSEI5:GOSUB990:RETURN
890
S00 REM *** DIRECTORY ***
SI0 PRINT"OJ"
820 OPEN3,8,0,"$0":GET#3,A$,A$
830 GET#3,A$,A$,BL$,BH$
840 IFA$=""THENCLOSE3:GOT0980
850 BL$=BL$+CHR$(0):BH$=BH$+CHR$(0)
S60 PRINT256*ASC(BH$)+ASC(BL$);
870 SYSMQ:GOT0930
S80 GOSUB 890:GOT0170
890 PRINTSPC(69)" ":PRINTSPC(29)"~TASTE*~"
1000 POKEI98,0:WAITI98,I:GETA$:RETURN
READY.
die zugehörigen Blocklängen
in ein Variablenarray
(BL%(I)). Das dauert etwas
länger, weil der Speicherplatz
begrenzt ist und der
Basic-Interpreter mitunter
eine Garbage-Collection
(Müll-Sammlung) durchführt,
um Platz zu schaffen.
Die Anzahl der Files wird in
der Variablen AN festgehalten.
Ist die Diskette leer,
weil man zum Beispiel noch
die gerade formatierte Zieldiskette
im Laufwerk hatte,
springt das Programm ins
Menü zurück.
In Zeile 370 bis 440 erfolgt
die Auswahl, welche Files
kopiert werden sollen. Das
Programm schreibt dazu die
einzelnen Namen mit der zugehörigen
Blocklänge auf
den Bildschirm und Sie können
mIt »J« oder »N« aussuchen.
Die Entscheidung
merkt sich das Programm
wieder in einem Variablenarray
(CF%(I)): Ist
CF% =-1, wird kopiert,
sonst nicht. Gleichzeitig
wird in der Variablen BL
aufaddiert, wieviele Blöcke
zu kopieren sind, damit das
Programm herausbekommt,
ob ein Durchgang ausreicht
oder nicht. Wenn Sie alle Files
mit »N« kennzeichnen,
springt das Programm wieder
ins Menü.
Nachdem nun endlich alle
Entscheidungen und Vorbereitungen
abgeschlossen
sind, geht es ans Kopieren
(Zeile 460 bis 650). Der Reihe
nach werden alle gekennzeichneten
Files in den
Speicher eingelesen. Dazu
wird das Laufwerk mit
»OPEN«-Befehlen angesprochen,
weil so alle Arten von
Files geladen und auch abgespeichert
werden können.
(Mit »LOAD« könnten
R6'
pfl'
flN'
a\...~
""",
pE'
..... '
.....'
Bild 1. Basicprogramm
»Disk CoPV"
i. ~..t;:.9 Rf\M -
t""'" - l-- s "te.ne"d~:f\
o 1. e u:e9Uf'l9 \<.oP \e
o.J~"'- i.. a. zur ver:nge oe l.~'iP'f{Q"t-te
,..,'
"",,<I>'.
-----------------------------4 6\.0",·<1"
cF~/'< \)'
p'/.< 1 ) ~ .
f\\..'1,< 1)"0
f\t'\'/.< 1)'
RI>l'
1 ,J'
wir die Zeropage-Speicherstellen
252 bis 255 ($FC bis
$FF).
Werfen wir nun noch einen
Blick auf die Maschinensprach-Teile
(Bild 3 bis
5). Dabei soll vor allem erläutert
werden, wie man
den vollen RAM-Speicher
des C 64 nutzen kann.
Dazu ist ein kurzer Blick
auf die Speicheraufteilung
6\Oec \IC.e
f\rft.an1 d er O\.lrc.h9~ u-f der 0 6\Oec~e
'1. r
a \"l\ d e f'l\eS. a re'(lden
fiT' \ der \l:OP 1 e
f'lf\za h \ der ZO deS r '1 \ eS ufO \...esef\ '1bef\ ga.be
f!lf\z:a. n ond 1"YP o\J'\. '1n e 't. offl SC. nre c:'\.orY -f\o~
l"'a. rne a.~nde ai>c:n '1n enr oO'\. '1n t :z. \Jer 0 '1 re
pr o9 f' e def' \"\ i>c:n '1n enr oU'\. '1ne f
f\df' ei> i> def' f'I\a n '1nenf'
f\drei>i>e der M:a.SC..f('IEln e n
f\drli!;~i>e r r'1\e n .f\a.9S r'1\ei> cn9:a. en9 r
felldd :~eer ~OPd~~r e'1nzee\nne;e\nel:<1>°u'1rm SP:'11C::neer
Fe nge l.n Fl. SP
6\OC.~\a:er Fl.\e:l.f'lze\n e : F'1\es '1ffl
f\nzan\ sse der el.f\ze\f\e nre.l.ben
Endadre sse der oder SC:
Endad~:er Lese:\e
F\ a9 .fentJa.r l.asc"10'
des C 64 erforderlich, insbesondere
den Teil ab $AOOO
bis $FFFF (dez. 40960
65535). Hier liegt normalerweise
der Basic-Interpreter,
der 8 KByte Adreßraum benötigt
($AOOO - $COOO). Darüber
liegen in 4 KByte die
Ein-Ausgabe-Einheiten
($DOOO - $EOOO). Ganz oben
im Speicher befindet sich
das Betriebssystem, das genau
wie der Basic-Interpreter
8 KByte belegt ($EOOO
$FFFF). Zusätzlich ist aber
der gesamte Bereich auch
noch mit RAM bestückt. Woher
weiß der Prozessor nun,
was er benutzen soll? Lediglich
3 Bits in Speicherstelle 1
sind für die Auswahl zuständig:
Bit 0 schaltet den Basic
Interpreter ein und aus, Bit 1
gleichzeitig BasiC-Interpreter
und Betriebssystem, Bit 2
ist für uns schon uninteresnur
Programmfiles geladen
werden.) Erfreulicherweise
enthält die Variable NF$
nicht nur den Namen des jeweiligen
Files, sondern
auch den Typ, also PRG,
SEQ oder USR. Deshalb
können alle Filetypen mit
ein und derselben Routine
verarbeitet werden.
Der Unterschied zwischen
Lesen und Schreiben liegt
lediglich darin, daß dem
»OPEN«-Befehl im ersten
Falle ein R (für Read), im
zweiten ein W (für Write) angehängt
wird. Die Datenübertragung
selbst erledigt
das Maschinenprogramm,
dem wir uns gleich zuwenden
werden. Um Variablen
an diese Routinen übergeben
zu können, benutzen
Ausgabe4/April1984
~93