Magic Disk 64

home to index to html: MD9203-KURSE-FLOPPY-KURS_1-A.html
              Floppy-Kurs:              
      "Es rappelt in der Kiste..."      
                (Teil 1)                
----------------------------------------
In Anlehnung an  diverse  Geräusche  die
das  Laufwerk  unseres Computerlieblings
an und wann von sich  gibt, wünsche  ich
Sie  herzlich willkommen zum ersten Teil
unseres neuen Floppykurses.             
In  den  nächsten Monaten will ich Ihnen
hier die  Funktionsweise  und  effektive
Benutzung  des  Floppylaufwerks 1541 des
64ers erklären. Beginnend mit den Grund-
lagen  zur  Datenspeichrung auf Diskette
werden wir  uns  über  sequentielle  und
relative  Dateiverwaltung  immer mehr an
die 'Innereien' der Floppy  herantasten,
und uns auch mit dem Diskettenaufbau und
Direktzugriff  beschäftigen. Danach will
ich Ihnen zeigen, wie einfach es ist die
Floppy in Assembler zu programmieren und
Ihnen desweiteren meine gesammelten Tips
und Tricks zur  Floppy  offenbaren.  Ich
wünsche  Ihnen also viel Spaß bei diesem
Kurs und will gleich zu Sache kommen... 
GRUNDLAGEN DER DATENEIN-/AUSGABE        
Dieser erste Teil des Floppy-Kurses soll
ganz den Grundlagen und der  sequentiel-
len  Fileprogrammierung  gewidmet  sein.
Kommen wir zunächst einmal zu den Grund-
begriffen  der Datenein- und ausgabe des
64ers. Wenn Sie sich mit  BASIC  ausken-
nen, so wissen Sie, daß es prinzipiell 5
BASIC-Befehle  gibt, mit denen wir Daten
an externe, oder  von  externen  Geräten
senden und empfangen können. Diese sind:
* OPEN, zum Üffnen eines Datenkanals,   
* PRINT#, zum Senden von Daten in einen 
  Datenkanal,                           
* GET#, zum Lesen von Daten  von  einem 
  Datenkanal,                           
* INPUT#,   zum   einfacheren    (BASIC-
  orientierten) Lesen von einem Datenka-
  nal, und                              
* CLOSE, zum abschließenden Schließen   
  eines Datenkanals.                    
Datenein- und ausgaben werden nun  prin-
zipiell  mit  drei verschiedenen Parame-
tern zu den obigen  Befehlen  gesteuert.
Sie  geben  an,  welchem logischen Kanal
der aktuelle  Datenaustausch  zugeordnet
wird  und  geben  Informationen über die
Art des Zugriffs  (lesen/schreiben)  und
über  das entsprechende Gerät, das ange-
sprochen werden soll. Diese drei Parame-
ter  sind die "logische Filenummer", die
"Sekundäradresse"  und  die  "Gerätenum-
mer".                                   
Die  logische  Filenummer  ist eine Zahl
zwischen 1 und 127, die als Kennung  für
eine  Ein-/Ausgabeoperation dient. Durch
den OPEN-Befehl wird ihr eine  bestimmte
Fileoperation  zugewiesen,  die sie ein-
deutig definiert. Wird also ein Datenka-
nal  zur  Floppy mit der logischen File-
nummer 1 und ein Datenkanal zum  Drucker
mit der logischen Filenummer 2 geöffnet,
so  weiß  das  Betriebssystem  des 64ers
immer, wohin es Daten mit einer der bei-
den   Filenummern   senden   soll.   Ein
"PRINT#1,A$" sendet so die  Stringvaria-
ble A$ an den momentan offenen Floppyka-
nal (nachdem die Filenummer 1  so  durch
'OPEN'  definiert wurde), wohingegen der
Befehl "PRINT#2,A$"  dieselbe  Stringva-
riable  an  den  Drucker sendet (nachdem
ihm die Filenummer 2 zugeordnet wurde). 
Die  Gerätenummer  spezifiziert  nun das
Gerät, mit dem Daten ausgetauscht werden
sollen. Sie kann Werte zwischen 0 und 15
annehmen. Hierzu gibt es eine Liste, die
die verschiedenen  Geräte  spezifiziert.
Das Betriebssystem des C64 benötigt die-
se Nummer deshalb, weil die  verschiede-
nen  Peripheriegeräte mit unterschiedli-
chen Betriebssystemroutinen angesprochen
werden müssen. Die Verteilung der  Gerä-
tenummern  an  die entsprechenden Geräte
ist wiefolgt festgelegt:                
Ger.num.  Gerät                         
----------------------                  
  0       Bildschirm                    
  1       Datasette                     
  2       RS232-Schnittstelle           
  4       Drucker 1                     
  5       Drucker 2                     
  8       Floppylaufwerk 1              
  9       Floppylaufwerk 2              
 10       Floppylaufwerk 3              
 11       Floppylaufwerk 4              
Die restlichen  Nummern  sind  unbelegt.
Wie Sie sehen ist es also möglich bis zu
4  Floppylaufwerke  und 2 Drucker an den
C64  anzuschließen,  die  alle  getrennt
voneinander  angesprochen werden können.
Ebenso ist  die  Kommunikation  mit  dem
Bildschirm  über  die Gerätenummer 0 mö-
glich. Hierbei empfangen Sie direkt  die
Eingaben,  die  gerade  vom Benutzer auf
den Bildschirm geschrieben werden.      
Die     Sekundäradresse    einer    Ein-
/Ausgabeoperation gibt nun die Art einer
Datenoperation an. Sie kann  Werte  zwi-
schen  0  und 15 annehmen, wobei es fol-
gende Bedeutungen gibt:                 
SAdr. Bedeutung                         
------------------------                
   0  Programm laden                    
   1  Programm speichern                
2-14  Daten Lesen oder Schreiben        
  15  Floppybefehlskanal                
In der Regel werden die Sekundäradressen
zwischen 2 und 14 verwendet. Die  Adres-
sen 0, 1 und 15 sind spezielle Adressen,
die  eingens für die Verwaltung von Mas-
senspeichern gedacht sind. Normalerweise
muß man nämlich beim Zugriff  auf  einen
Massenspeicher  (so wie auch das Floppy-
laufwerk einer  ist)  grundsätzlich  die
Art  des  Zugriffs explizit im Filenamen
angeben. Möchte man aber ein Programmfi-
le (dazu später mehr) lesen oder schrei-
ben, so kann man sich die Angabe im  Fi-
lenamen sparen und die Adressen 0 oder 1
benutzen.  Die  Floppy  weiß in dem Fall
direkt, daß sie ein Programmfile  lesen,
bzw. schreiben soll. Dazu will ich Ihnen
später noch ein paar Beispiele liefern. 
Die  Sekundäradresse  15 ist ausschließ-
lich für das Floppylaufwerk  reserviert.
Mit  ihr  wird  der sogenannte Floppybe-
fehlskanal geöffnet. Dieser ist nicht an
ein spezielles File gebunden  und  dient
der  Öbertragung  von  Befehlen  an  die
Floppy selbst. Die 1541 verfügt nämlich,
wie der C64  auch,  über  einen  eigenen
Mikroprozessor  (den  6502,  ein Artver-
wandter des 6510,  der  im  64er  seinen
Dienst   verrichtet)   und  eigene  Ein-
/Ausgabechips.  Sie  stellt  im  Prinzip
einen  autonomen Computer dar, der rich-
tig Programmiert werden kann. Die  wich-
tigsten  Funktionen  sind  in spezeillen
Floppybefehlen zusammengefasst und  wer-
den über den erwähnten Befehlskanal auf-
gerufen (wie z.B. der Befehl,  die  ein-
liegende  Diskette  zu formatieren, oder
ein spezielles File von der einliegenden
Diskette zu löschen). Der Floppybefehls-
kanal hat später, wenn wir die Direktzu-
griffbefehle behandeln, und in Zusammen-
hang  mit  der relativen Dateiverwaltung
eine große Bedeutung.                   
Die  obig  beschriebenen  Parameter, die
der OPEN-Befehl benötigt müssen wiefolgt
angewandt werden (Praxisbeispiele werden
wir im Laufe dieses Kurses noch genügend
kennenlernen, deshalb hier nur eine Syn-
taxdefinition):                         
OPEN (log.Filenr.),(Ger.nr.),(Sek.adr.) 
DER FLOPPYBEFEHLSKANAL                  
Wir wollen uns nun mit der Benutzung des
Floppybefehlskanals   beschäftigen   und
einmal  die  alltäglichen  Floppybefehle
durchgehen.                             
Bevor  Sie  also  einen  Befehl  an  die
Floppy schicken, müssen Sie den Befehls-
kanal öffnen.  Dies  geschieht  mit  dem
Befehl  "OPEN  1,8,15".  Wir öffnen hier
einen Kanal mit der logischen Filenummer
1, verbunden mit dem Gerät Nummer 8 (der
Floppy nämlich) und mit  der  Sekundära-
dresse 15 (eben dem Befehlskanal dersel-
bigen). Nun können Sie der Floppy Befeh-
le senden, die diese dann unabhängig vom
64er  bearbeiten  wird.  Sie können also
Ihren 64er währenddessen in  seinem  ak-
tuellen  Programm  fortfahren lassen. Er
arbeitet, solange die Floppy selbst  ar-
beitet,  unabhängig  von  ihr. Nur, wenn
während dieser Zeit ein weiterer Disket-
tenzugriff notwendig wird, wird der 64er
angehalten (s.u.)                       
Ich   will   Ihnen   nun  die  Standard-
Floppybefehle auflisten, die wir einfach
benutzen können. Später  beim  Direktzu-
griff und bei der relativen Dateiverwal-
tung werden wir ebenfalls über  den  Be-
fehlskanal der Floppy Anweisungen geben,
uns die Daten, die wir von ihr verlangen
entprechend vorzubereiten.              
Kommen  wir  jedoch  erst  einmal zu den
einfachen Befehlen:                     
* Der NEW-Befehl:                       
Mit  diesem  Befehl formatieren wir eine
neue  Diskette.  Grundsätzlich  bestehen
die  Floppybefehle aus einem oder mehre-
ren Buchstaben, sowie den zu  jedem  Be-
fehl  variierenden Parametern. Beim NEW-
Befehl ist die Befehlskennung ein  "N:",
nach diesen beiden Zeichen folgt nun der
Name,  den  die  Diskette erhalten soll,
sowie eine zwei Zeichen lange  Identifi-
kationskennung   ("ID").   Floppybefehle
werden nach dem Üffnen des Befehlskanals
immer mit einem  "PRINT#lfn"  (lfn=logi-
sche   Filenummer)  an  die  Floppy  ge-
schickt.  Mit   dem   folgenden   BASIC-
Kommando  fordern  wir  die  Floppy also
dazu auf, die einliegende  Diskette  mit
dem  Namen  "MEINE DISK" und der ID "MD"
zu formatieren. Der  Befehlskanal  wurde
unter  der logischen Filenummer 1 geöff-
net (wie in obigem Beispiel), also  sen-
den wir den Befehl auch an Kanal 1:     
PRINT#1,"N:MEINE DISK,MD"               
Die Floppy beginnt nun mit der Formatie-
rung der Diskette. Der 64er meldet  sich
mit  einem "READY." zurück, und Sie kön-
nen während  der  Formatierung  mit  ihm
arbeiten.  Sie  können  den Befehlskanal
nun offen halten und  weitere  Floppybe-
fehle senden, oder aber auch irgend eine
andere  Tätigkeit  mit  dem Rechner tun.
Achten Sie allerdings darauf,  daß  beim
weiteren Senden eines Befehls, sowie dem
Schließen des Befehlskanals, der Rechner
blockiert wird. Das liegt daran, daß die
Floppy  während einer internen Operation
dem 64er signalisiert,  daß  sie  gerade
"BUSY",  also  am Arbeiten ist. Soll der
C64 nun mit der Floppy kommunizieren, so
wartet er solange, bis die Floppy wieder
frei wird. Demnach führt  jeder  weitere
Befehl,  der die Floppy anspricht unwei-
gerlich zu einem zwischenzeitlichen Stop
des Rechners.                           
Der NEW-Befehl kennt übrigens zwei  Syn-
taxen.  Öbergeben  Sie  einen  Namen UND
eine ID, dann wird die Diskette physisch
formatiert. Das heißt, sie wird Spur  um
Spur  neu angelegt, wobei die neuen Spu-
ren mit Nullen aufgefüllt werden. Daten,
die sich evtl. auf ihr  befanden  werden
somit  komplett  gelöscht. Öbergeben Sie
aber nur einen Diskettennamen, und keine
ID, so  wird  die  Diskette  "softforma-
tiert".  Es wird lediglich der neue Name
über den  alten  geschrieben,  und  alle
Blocks  als unbelegt gekennzeichnet. Die
ID bleibt die alte. Die alten Daten sind
jedoch immer noch auf den Spuren enthal-
ten  und  können  evtl. gerettet werden.
Ausserdem ist das  softformatieren  wei-
taus  schneller  als  ein "hardformatie-
ren". Es funktioniert allerdings nur bei
schon einmal hardformatierten Disketten,
da diese  die  grundlegende  Diskettens-
truktur schon enthalten.                
Sie schließen den  oben  geöffneten  Be-
fehlskanal  übrigens  wieder  mit "CLOSE
1". Tun Sie das bitte  immer,  wenn  Sie
ein  Datenfile,  oder  den  Befehlskanal
nicht mehr brauchen, da der 64er  intern
immer  nur  10  offene  Kanäle verwalten
kann.                                   
* Der RENAME-Befehl:                    
Mit  dem  Rename-Befehl  können  Sie den
Namen eines schon bestehenden Files  um-
benennen.   Die  Syntax  ist  eigentlich
recht einfach. Das Kürzel für RENAME ist
"R:" es folgen nun der neue und der alte
Filename getrennt durch ein "="-Zeichen.
Hier    ein    Beispiel:PRINT#1,"R:MAGIC
DISK=GAME ON"                           
Dieser Befehl benennt das File "GAME ON"
in "MAGIC DISK" um. Wieder benutzten wir
die  log.  Filenummer  1,  die  oben  im
OPEN-Befehl definiert wurde.            
* Der VALIDATE-Befehl:                  
VALIDATE bedeutet "überprüfen", und sel-
biges   tut   der   Validate-Befehl  der
Floppy. Haben Sie nämlich Grund zu glau-
ben,  daß die Diskettenstruktur durchei-
nandergekommen ist, so zum Beispiel wenn
Sie ein, oder  mehrere  Files  speichern
wollten,  für die aber nicht ausreichend
Platz vorhanden war,  dann  sollten  Sie
diesen  Befehl  verwenden. Er untersucht
die Diskette auf ihre korrekte  Struktur
und  korrigiert  alles,  was nicht einer
normalen  Diskettenstruktur  entspricht.
In  dem Beispiel mit einem nur teilweise
gespeicherten Programm  sind  die  schon
geschiebenen  Blocks  dieses  Files  als
belegt gekennzeichnet, obwohl  das  File
im  Directoryeintrag  mit "0 Blocks" und
einem "*" als unbrauchbar gekennzeichnet
ist. Der Validate-Befehl erkennt nun die
fälschlicherweise  belegten  Blocks  und
gibt sie wieder frei. Desweiteren löscht
er den markierten Eintrag aus dem Direc-
tory. Er  benötigt  keinerlei  Parameter
und  kann folgendermaßen aufgerufen wer-
den:                                    
PRINT#1,"V"                             
Die Floppy beginnt nun mit der  Validie-
rung.  Diese  kann  je nach dem wie voll
und wieviele einzelne Files auf der Dis-
kette  enthalten  sind,  bis  zu mehrere
Minuten in Anspruch nehmen.             
* Der SCRATCH-Befehl:                   
Dieser  Befehl  löscht ein File auf Dis-
kette. Englisch  "to  scratch"  bedeutet
"kratzen"   und  im  Öbertragenen  Sinne
"kratzt" die Floppy tatsächlich ein File
von der Diskettenoberfläche.            
Der Scratch-Befehl wird mit "S:"  einge-
leitet, gefolgt von dem oder den Filena-
men, die gelöscht werden sollen. Hierbei
dürfen Sie sogar sogenannte Filepatterns
benutzen, die eine Fileangabe  abkürzen.
Ein  "Pattern"  ist  eine Maske, die man
der Floppy für einen Filenamen übergibt.
Alle Files,  deren  Namen  dieser  Maske
entsprechen   sind  damit  angesprochen,
werden in unserem Fall  also  durch  den
Scratch-Befehl   gelöscht.  Hier  einige
Beispiele:                              
PRINT#1,"S:FILE1"                       
PRINT#1,"S:TEST1,TEST2,TEST10,TEST11"   
PRINT#1,"S:TEST?"                       
PRINT#1,"S:TEST*"                       
Im ersten Beispiel wird das File  namens
"FILE1"  gelöscht.  Das  zweite Beispiel
löscht  die  Files   "TEST1",   "TEST2",
"TEST10",  und "TEST11". Selbiges können
wir aber auch mit  Filepatterns  verkür-
zen.  So können wir zum Beispiel mit dem
Fragezeichen eine  Fileangabe  abkürzen.
es steht für ein beliebiges Zeichen. Das
dritte Beispiel löscht also gleichzeitig
die  Files "TEST1" und "TEST2". Im vier-
ten Beispiel benutzen wir  den  Asterisk
("*") als Abkürzung. Er steht für alles,
was hinter den Zeichen "TEST" folgt. Wir
löschen  mit diesem Befehl also auf Ein-
mal alle vier Files aus dem zweiten Bei-
spiel.                                  
DIE VERSCHIEDENEN DATEITYPEN            
Nachdem wir nun Grundsätzliches über die
Kommunikation  mit  der  Floppy  gelernt
haben, möchte ich Sie nun in die einzel-
nen  File-Arten  selbiger einführen. Das
benötigen wir, um  die  unterschiedliche
Programmierung  der einzelnen File-Typen
zu verstehen. Insgesamt kennt  die  1541
fünf   verschiedene   File-Typen.  Diese
sind:* Programm-Dateien (PRG):          
In diesen Files sind Daten  sequentiell,
also Byte hinter Byte abgespeichert. Sie
enthalten  ausschließlich Programmdaten,
also  direkt  ausführbare  BASIC-,  oder
Maschinenprogramme.                     
* Sequentielle Dateien (SEQ):           
Diese   Fileart  unterscheidet  sich  in
nichts mit  der  vorherigen.  Die  Daten
liegen  hier  ebenfalls  sequentiell auf
der Diskette  vor.  Der  einzige  Grund,
warum man zwei Filearten zur sequentiel-
len Speicherung gewählt  hat,  ist  der,
daß in SEQ-Files immer nur Daten von und
zu  Programmen gespeichert werden sollen
und keine  Programme  selbst.  Wenn  Sie
also  eine  Adressverwaltung programmie-
ren, so sollten  Sie  Ihre  Adressen  in
einer  SEQ-Datei  speichern.  Dies kenn-
zeichnet Ihre Daten eben als  Daten  und
nicht  als ausführbares Programm (obwohl
Sie genausogut eine PRG-Datei  verwenden
könnten!). Die Unterscheidung ist beson-
ders wichtig für  den  LOAD-Befehl,  der
SEQ-Dateien  gar  nicht erst liest, son-
dern ausschließlich PRG-Dateien  in  den
Speicher des 64ers transferiert.        
* Relative Dateien (REL):               
In  relativen  Dateien  liegen die Daten
für uns Anwender  nicht  hintereinander,
sondern  relativ zueinander vor. Hierbei
wird beim Anlegen einer  REL-Datei  eine
Datensatzlänge  vorgegeben,  die für ein
REL-File immer gleich bleibt.  Wenn  Sie
nun  Daten in die Datei scheiben, werden
selbige zu einem  Datensatz  zusammenge-
fasst  und mit einer fortlaufenden Satz-
nummer versehen. Wenn Sie  zum  Beispiel
die  Adressen  Ihrer Adressverwaltung in
relativen  Datensätzen  speichern,   und
sich merken, unter welchen Datensatznum-
mern Sie die einzelnen Adressen  wieder-
finden,  so  können Sie direkt auf einen
Datensatz zugreifen.  Die  Vorteile  ge-
genüber sequentieller Speicherung liegen
auf  der  Hand:  durch den Direktzugriff
sind die  Daten  erstens  schneller  er-
reichbar,  weil nicht eine komplette Da-
tei eingelesen werden muß, sondern  eben
immer  nur  ein  einziger Datensatz, und
sie können zweitens extern gelagert wer-
den,  so  daß Sie kostbaren Arbeitsspei-
cher im 64er sparen. Die  Programmierung
von  relativen  Dateien  wird  uns im 2.
Teil dieses Kurses noch näher beschäfti-
gen.                                    
Bitte Teil 2 laden...                   
Valid HTML 4.0 Transitional Valid CSS!