CBM-Dateisystem

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Das insbesondere von Commodore-Diskettenlaufwerken wie der 1541 benutzte Dateisystem organisiert die Dateien und ihre Metadaten wie Dateiname und Dateityp. Es wird als CBM-Dateisystem bezeichnet.

Überblick[Bearbeiten | Quelltext bearbeiten]

Die Organisation des Datenträgers (z. B. der Diskette) erfolgt in Blöcken zu je 254 Bytes. Jeder Block wird in einem Sektor (engl. sector) gespeichert, der 256 Bytes fassen kann. In den ersten beiden Bytes (mit Spur und Sektor innerhalb der Spur) wird die Position des in der Datei nachfolgenden Blocks gespeichert. Der letzte Block wird durch einen Spurwert von 0 gekennzeichnet und der Sektorwert ist dann dabei der Index auf das letzte darin genutzte Byte (also Sektorwert+1 abzüglich 2 für die Spur/Sektor-Angabe zu Beginn ergibt die Anzahl der darin befindlichen Nutzdaten). Die Daten sind also in Form einer verketteten Liste auf dem Datenträger gespeichert. Die exakte Länge einer Datei kann damit nur durch das vollständige Lesen und Durchgehen alle Blöcke ermittelt werden.

In der Struktur ist der Datenträger in eine Vielzahl von Spuren (engl. tracks) aufgeteilt, welche dann jeweils mehrere Sektoren fassen. Dabei hängt die Anzahl der Sektoren einer Spur von der Spurnummer ab und zwar so, dass die auf dem Datenträger außen liegende Spuren, die einen größeren Umfang haben und mehr Daten aufnehmen können, mehr Sektoren aufweisen.

Welche Sektoren auf dem Datenträger bereits belegt sind, wird in der Block Availability Map (BAM) gespeichert, was in erster Linie das Auffinden von unbenutzten Blöcken beim Schreiben von neuen Dateien beschleunigt.
Bei einem VALIDATE des Datenträgers wird die BAM neu aufgebaut auch gewisse Metainformationen (aber nicht die Dateiblockanzahl im Directory) gegebenenfalls korrigiert, indem alle Dateien durchgegangen und die von ihnen benutzten Sektoren in der BAM markiert werden.
Außer in gewissen Fehlerfällen (z. B. Stromausfall beim Schreiben auf den Datenträger) und bestimmten Anwendungsfällen (z.B. eigenes VLIR-Format von GEOS) sollten BAM und tatsächliche Belegung identisch sein.

Schließlich werden bestimmte Metainformationen zu den Dateien wie Dateiname, Dateigröße (verwendete Sektoren inkl. Metadaten als "Blockanzahl"), Startspur und -sektor und Dateityp in einem Verzeichnis, dem sogenannten Directory gespeichert, der als fester Ausgangspunkt für den Zugriff auf Dateien dient.

CBM-DOS erlaubt auch den Direktzugriff auf beliebige Sektoren des Datenträgers. Dadurch wird eine Datenverwaltung abseits der Standarddateistrukturen möglich - so wird im Handbuch der 1541 die Implementierung von einfachen Random Access Files erklärt. Sofern der Programmierer sich dabei auf die für Dateien verfügbaren Blöcke beschränkt und die BAM und das Directory berücksichtigt, ist zu einem gewissen Grad auch die Koexistenz mit "normalen" Dateien möglich, sofern auf den Einsatz des Floppy-Befehls VALIDATE verzichtet wird.
Beispiele dafür wären ein eigenes über das CBM-Dateisystem gelagerte Dateisystem wie bei CP/M oder die autarke Blockverwaltung bei Forth.

Dateitypen[Bearbeiten | Quelltext bearbeiten]

Das CBM-Dateisystem kennt folgende Dateitypen (File types): PRG, SEQ und USR werden dabei vom Laufwerk fast identisch behandelt; der Dateityp ist in erster Linie Konvention. Aufbau und Verwaltung von REL-Dateien dagegen sind unterschiedlich.

  • PRG: Programmdateien. Per Konvention enthalten die ersten beiden Datenbytes die Startadresse, an dem das Programm vorzugsweise geladen werden soll.
  • SEQ: Sequentielle Dateien. Werden zur Datenspeicherung aus Programmen heraus benutzt.
  • USR: User-Dateien können Maschinenspracheprogramme enthalten, die direkt im Diskettenlaufwerk (nicht durch den Computer) ausgeführt werden. Gestartet werden USR-Dateien mit dem Floppy-Befehl &0:<Dateiname> oder (nur bei den frühesten 1541-Modellen) automatisch nach einem Reset, wenn DATA- und CLOCK-Leitungen auf Masse liegen und dies die erste Datei im Directory ist. Außerdem verwendet GEOS USR-Dateien für interne Zwecke.[1]
  • REL: Relative Dateien können zur Datenspeicherung aus Programmen heraus benutzt werden. Sie ermöglichen den wahlfreien Zugriff auf Datensätze über eine Datensatznummer. Die bei relativen Dateien nötigen zusätzlichen Verwaltungsinformationen sind in Side Sectors und bei neueren DOS-Varianten auch in Super Side Sectors abgelegt.
  • CBM: Subdirectory (bei der 1581)

DEL bezeichnet eine gelöschte Datei und taucht normalerweise nicht auf. Entsprechende Directory-Einträge können jedoch durch Tricks bzw. Directory-Manipulation erzeugt werden. Sie werden oft für die optische Auflockerung einer Directory-Darstellung verwendet, etwa für Trennelemente oder Hinweistexte.

Mögliche Zusatzmarkierungen beim Dateityp im Directory:

  • Befindet sich dahinter das Zeichen <, so besitzt diese Datei einen softwareseitigen Überschreibschutz (engl. lock). Dieser schützt aber nicht vor dem Formatieren der ganzen Diskette.
  • Das Zeichen * 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 Floppy-Befehl VALIDATE werden tatsächlich alle schon reservierten Datenblöcke wieder freigegeben!
    *DEL wird nicht angezeigt, sondern bedeutet einen leeren Eintrag.

Begrenzungen und Einschränkungen[Bearbeiten | Quelltext bearbeiten]

Generell:

  • PRG/SEQ/USR-Dateien können nur byte-weise von ganz vorne bis ganz hinten gelesen werden. Ein wahlweiser Zugriff (direktes "Springen" an bestimmte Stellen in einer Datei) ist nicht möglich.
  • Die auf Byte exakte Dateilänge lässt sich nur relativ aufwändig durch ein vollständiges Lesen aller Blöcke ermitteln.
  • Maximale theoretische Größe 16.711.680 Bytes brutto (255 Spuren mit 256 Sektoren á 256 Bytes).

Für 1541:

  • PRG: Die maximale Dateigröße wird durch den verfügbaren Platz auf der Diskette beschränkt (siehe SEQ). Im gängigen Gebrauch beträgt die maximale nutzbare Länge eines per RUN zu startenden Programms auf dem C64 202 Blöcke. Details dazu siehe LOAD.
  • SEQ: Die maximale Dateigröße wird durch den verfügbaren Platz auf der Diskette beschränkt: 168.656 Bytes.
  • USR: siehe SEQ.
  • REL: Eine relative Datei kann den gesamten verfügbaren Platz auf einer Diskette einnehmen. Dabei verwenden die Nutzdaten max. 167.132 Bytes bei max. 65.535 Datensätzen bzw. Records, die max. 254 Bytes groß sein können. Die Verwaltungsdaten verbrauchen max. 6 Side Sector Blöcke und enthalten je max. 120 Blockverweise.

Quellen[Bearbeiten | Quelltext bearbeiten]

  1. GEOS FAQ - file types. Sprache:englisch

Weblinks[Bearbeiten | Quelltext bearbeiten]

WP-W11.png Wikipedia: Commodore DOS