19.11.2020 Aufrufe

64er Magazin 84_4

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!