CBM-Dateisystem

Aus C64-Wiki
Wechseln zu: Navigation, Suche

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]

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 übrigen beiden Bytes wird die Position des in der Datei nachfolgenden Blocks bzw. beim letzten Block die Anzahl der darin genutzte Bytes gespeichert. Die Daten sind also in Form einer verketteten Liste auf dem Datenträger gespeichert.

Eine Spur (engl. track) des Datenträgers fasst mehrere Sektoren; wie viele, ist typischerweise abhängig von der Spurnummer, da auf dem Datenträger außen liegende Spuren einen größeren Umfang haben als die inneren und somit mehr Daten speichern können.

Welche Sektoren auf dem Datenträger bereits belegt sind, wird in der Block Availability Map (BAM) gespeichert. Bei einem VALIDATE des Datenträgers wird die BAM neu aufgebaut und Metainformationen wie die Dateilänge 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 (Stromausfall beim Schreiben auf den Datenträger etc.) 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 im Directory gespeichert.

CBM-DOS erlaubt auch den Direktzugriff auf die 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]

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.

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]

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) 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]

  1. GEOS FAQ - file types. Sprache:englisch

Weblinks[Bearbeiten]

WP-W11.png Wikipedia: Commodore DOS