Directory

Aus C64-Wiki
Wechseln zu: Navigation, Suche
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. Directory (Begriffsklärung).
(thumbnail)
Beispiel eines Directorys einer Diskette

Das englische Wort Directory bezeichnet das Inhaltsverzeichnis einer Diskette. Technisch befinden sich im Directory Verwaltungsdaten zu den auf der Diskette gespeicherten Dateien, insbesondere die Zuordnung von Dateinamen zu Position der Datei auf der Diskette; für die Verwaltung der freien Blöcke der Diskette ist die BAM zuständig (siehe auch CBM-Dateisystem).


Inhaltsverzeichnis

[Bearbeiten] Unterschiede 1541/1581

Das Directory einer 5,25" Diskette beginnt beim Commodore DOS einer Floppy 1541 auf Spur 18 im Sektor 1 und kann maximal 144 Einträge enthalten (siehe Details). Bei Verwendung einer 3,5" Zoll Diskette in einem 1581 Laufwerk hat die Directory-Spur 40 Blocks, so dass abzüglich Header und BAM Platz bleibt, um bis zu 296 Einträge aufzunehmen.

[Bearbeiten] Anzeige des Directorys

Das Directory kann z.B. mit der BASIC-Eingabe LOAD"$",8 in den Speicher des C64/116/128 oder VC20 geladen und mit einem anschließenden LIST angezeigt werden.

"DATENDISK 1"       99 2A  (Diskettenbezeichnung: Name, Disk-ID)
0   "----------------" DEL (Directory-Einträge: Genutzte Blöcke, Dateiname, Dateityp)
0   "- EIGENES SPIEL-" DEL
0   "----------------" DEL
100 "GEISTERJAGD",8:   PRG< (Manipulierter Directory-Eintrag)
64  "DATEN1"           SEQ<
44  "DATEN2"           REL<
56  "DATEN3"           USR<
100 "DATEN"           *SEQ 
350 BLOCKS FREE             (Anzahl freier Blöcke bzw. freier Diskettenspeicher)

Anmerkung: Hier ist das Directory einer 5,25"-Diskette zu sehen, die in einer 1541 formatiert und per Disketteneditor manipuliert wurde (insbesondere die ersten vier Directory-Einträge).

Bedeutung des Dateityps (siehe auch CBM-Dateisystem):

  • PRG Programmdateien
  • SEQ Sequentielle Datei (typischerweise Daten, nicht ausführbarer Code)
  • USR User-Dateien (Sonderform der sequentiellen Dateien, per OPEN lassen sich diese Dateien ggf. direkt in der Floppy ausführen)
  • REL relative Dateien (enthalten mehrere gleichgroße Datensätze und besondere Verwaltungsblöcke)
  • DEL gelöschte Datei (normalerweise nicht sichtbar)
  • CBM Subdirectory bei einer 1581-Disk
  • DIR Subdirectory auf CMD-Speichermedien

Zusätze zur Dateitypangabe:

  • < nach dem Dateityp: die Datei besitzt einen softwareseitigen Überschreibschutz (engl. lock). Dieser schützt aber nicht vor dem Formatieren der ganzen Diskette.
  • * vor dem Dateityp: auch engl. splat file genannt, markiert eine noch geöffnete oder nicht richtig geschlossene Datei. Das Entfernen einer solchen Datei funktioniert mit dem Floppy-Befehl SCRATCH nur unvollständig, sondern erst mittels VALIDATE werden tatsächlich alle schon reservierten Datenblöcke wieder freigegeben!

Technische Details: Das DOS des Diskettenlaufwerks (bei einer 1541) liest beim LOAD"$",8 die interne Verwaltungsstruktur ab Spur 18 Sektor 1 ein und bringt sie in eine Form, die vom BASIC-Interpreter des Computer dargestellt werden kann (1541 ROM $EC9E). Hier handelt es sich also um einen "Hack", denn natürlich handelt es sich nicht um ein ausführbares BASIC-Programm, und z.B. sind die "Zeilennummern" völlig durcheinander.

Im Falle eines Doppellaufwerks, lädt LOAD"$" das Verzeichnis beider Laufwerke oder mit Dateiname "$0" bzw. "$1" wird lediglich das gewünschte Laufwerk ausgewählt:

LOAD"$",8

SEARCHING FOR $
LOADING
READY.
LIST

 1 "DOPPELT         " JK 2A
 1    "DRIVE1"           SEQ
 1    "DRIVE0"           SEQ
 662 BLOCKS FREE.
 0 "LEER            " JK 2A
 1    "OUT"              SEQ
 1    "B"                SEQ
 1    "DRIVE0"           SEQ
 1    "DRIVE0 NEW"       SEQ
 660 BLOCKS FREE.
READY.

Kaum dokumentiert ist übrigens die Möglichkeit, das Directory quasi im Rohformat auszulesen, indem man es mit einer Sekundäradresse > 0 öffnet (z.B. OPEN 1,8,1,"$". In diesem Fall wird in den ersten 254 Bytes die BAM gesendet und anschließend die Directory-Einträge wie in Details beschrieben, allerdings ohne Verkettungszeiger. Joker-Zeichen und Dateitypeinschränkungen werden in diesem Modus ignoriert.

[Bearbeiten] Joker

Die Auswahl der Directory-Einträge lässt sich mit einer Maske beeinflussen bzw. filtern, wobei die CBM DOS-üblichen Joker-Symbole * und ? Verwendung finden. Die Zusammensetzung der Maske ergibt sich aus den optionalen Angaben

  • einer optionale Laufwerksangabe (Drive), die unmittelbar dem Befehlszeichen "$" folgt und aus einer optionalen Ziffer und mit einem Doppelpunkt abgeschlossen ist,
  • eines Dateinamens oder Dateinamenmusters (enthalten Joker-Symbole), welche mehrfach jeweils durch ein Komma getrennt vorkommen können,
  • eines abschließenden Dateitypselektors eingeleitet mit dem "="-Symbol gefolgt von der Typkennung.

Beispiele:

LOAD "$0:*=P",8      Zeigt von Laufwerk 0 nur Programmdateien des Directorys (P für PRG,
LIST                 entsprechend mit S, U, R für SEQ, USR, REL).
LOAD "$:WA?R*",8     Alle Dateien, deren Name mit WA beginnt und an der 4. Stelle ein R besitzt,
LIST                 werden gelistet.
LOAD "$:?E,A*=S",8   Zeigt nur sequentielle Dateien, deren Name entweder 2-stellig auf E endet oder
LIST                 mit mit A beginnt.
LOAD"$$",8           Nur die Disketteninformation und die Anzahl freier Blöcke
LIST                 werden ausgegeben (sofern es keine Datei lautend auf "$" gibt).

[Bearbeiten] Directory verlustfrei anzeigen

Die Anzeige des Directorys mit LOAD"$",8 und LIST zerstört ein gerade im Speicher befindliches BASIC-Programm. Dies kann man mit Hilfe eines Maschinensprache-Programms vermeiden. Ein Beispiel dazu gibt es bei der Beschreibung des Assembler-Befehls STX.

Mit LOAD"$",8,1 kann zwar unter BASIC 2.0 das Directory verlustfrei angezeigt werden, allerdings erscheint die Anzeige kompakt und überwiegend als Datenmüll, was bei weitem nicht so übersichtlich wie ein LOAD"$",8 ist.

Einen eigenen Befehl oder eine spezielle Tastenbelegung bzw. -folge für die verlustfreie Directory-Anzeige bieten neuere BASIC-Dialekte, BASIC-Erweiterungen und Steckmodule. Einige Beispiele (sofern erforderlich mit Parameter für Geräteadresse 8 und Laufwerk 0):

(thumbnail)
Directory-Ausgabe unter BASIC 2.0 mit LOAD"$",8 (unten) und LOAD"$",8,1 (oben)


Name Typ Befehl
BASIC V2.0 BASIC-Dialekt LOAD"$",8,1
BASIC V3.5 BASIC-Dialekt DIRECTORY
F3  (C16, Plus4)
BASIC V4.0, BASIC 7.0 BASIC-Dialekt CATALOG, DIRECTORY
F3  (C128)
Simons' Basic BASIC-Erweiterung DIR "$"
Commodore DOS Wedge 5.1 BASIC-Erweiterung @$ oder >$
@$0:* oder >$0:*
TEDMON (BASIC 4.0, BASIC 7.0) Maschinensprachemonitor @,$ oder @8,$
Supermon+64 Maschinensprachemonitor @,$ oder @8,$
Final Cartridge 3 Steckmodul CATALOG
Action Replay Steckmodul $
Turbo Trans Schnelllader CTRL  D 
Speed-DOS Schnelllader @$
>$
F7 
JiffyDOS Schnelllader @$:*
V-DOS Schnelllader CTRL  D 
Help, Help Plus Steckmodul $

[Bearbeiten] Aufbau des Directorys

Bei einer 1541 beginnt das Directory mit Sektor 1 in Spur 18 und belegt alle weiteren 18 Sektoren der Spur. Jeder Directory-Block enthält 8 Einträge mit einer Länge von 30 Bytes, dazu kommen noch 7 × 2 Füllbytes zwischen den Einträgen:

Position Beschreibung
0 Spurnummer des nächsten Blocks (Verkettungszeiger) - gegebenenfalls 0, wenn kein Folgeblock)
1 Sektornummer des nächsten Blocks (Verkettungszeiger)
2 - 31 1. Dateieintrag
34 -63 2. Dateieintrag
66 - 95 3. Dateieintrag
98 - 121 4. Dateieintrag
130 -159 5. Dateieintrag
162 - 191 6. Dateieintrag
194 - 223 7. Dateieintrag
226 - 255 8. Dateieintrag

Insgesamt enthält das Directory somit 144 Einträge. Die einzelnen Einträge sind folgendermaßen aufgebaut:

Position Beschreibung
0 Dateityp-Kennung
1 Spurnummer des ersten Datenblocks
2 Sektornummer des ersten Datenblocks
3 -18 Dateiname (aufgefüllt mit SHIFT-SPACE)
19 Spurnummer des ersten Side-Sector-Blocks (nur bei relativen Dateien)
20 Sektornummer des ersten Side-Sector-Blocks (nur bei relativen Dateien)
21 Datensatzlänge (nur bei relativen Dateien)
22 - 25 Zwischenspeicher für DOS-Operationen
26 Spurnummer des ersten Datenblocks der neuen Datei beim Überschreiben mit REPLACE ("@:DATEINAME")
27 Sektornummer des ersten Datenblocks der neuen Datei beim Überschreiben mit REPLACE
28 Anzahl der verwendeten Blöcke (Low)
29 Anzahl der verwendeten Blöcke (High)

Die Dateitypkennung besitzt folgenden Aufbau:

Bit Beschreibung
0 - 2 Typ der Datei:
3 - 4 unbenutzt
5 1 = Datei befindet sich im REPLACE-Modus
6 1 = SCRATCH-Schutz (engl. lock flag)
7 0 = Datei noch geöffnet bzw. nicht richtig geschlossen (engl. splat file)

[Bearbeiten] Weblinks