Commodore DOS (Disk Operating System) ist ein Disketten-Betriebssystem des Unternehmens Commodore, das in den Diskettenlaufwerken der Commodore-8-Bit-Reihe eingesetzt wurde, z. B. CBM 3040, CBM 4040, CBM 8050, CBM 8250, VC1540, VC1541, VC1570/71, VC1581, SFD1001, SFD1002.
CBM DOS Versionen Es existieren mindestens sieben Versionen von Commodore DOS. Die folgende Liste enthält die Versionsnummern und die zugehörigen Laufwerke. Sofern nicht anders angegeben, haben Laufwerke ein 5¼-Zoll-Format. Der "lp" -Code bezeichnet "Low-Profile"-Laufwerke. Laufwerke, deren Modellnummern mit 15 beginnen, werden über die serielle IEEE-488-Bus-Protokolle (IEC-Bus) (TALK/LISTEN) verbunden. Alle anderen verwenden den parallelen IEEE-488.
1.0 – Commodore 2040 und Commodore 3040 2.0 – Commodore 4040 und Commodore 3040 2.5 – Commodore 8050 2.6 – Commodore 1540, Commodore 1541, SX-64, Commodore 1551, Commodore 2031 (+"lp") und Commodore 4031 2.7 – Commodore 8050, Commodore 8250 (+"lp") und Commodore SFD1001 3.0 – Commodore 1570, Commodore 1571 und Commodore 8280 (8280: 8-Zoll), wie auch in Commodore-D9060- und Commodore-9090-Festplatten 3.1 – Integrierte Commodore 1571 im C128D-CR 10.0 – Commodore 1581 (3½-Zoll)
Hardware der Diskettenlaufwerke Ausführliche Erläuterungen zur Hardware siehe im eigenen Artikel CBM-Diskettenlaufwerke.
Bei typischen Computersystemen jener Zeit, und im Prinzip bis heute, waren Diskettenlaufwerke fast direkt über den Prozessorbus angebunden. Um das Kodieren der Daten kümmerte sich entweder ein einfacher Controllerchip oder die Software des Betriebssystems. Auch das Dateisystem wurde vom Betriebssystem des Computers verwaltet.
Bei den Computern der Commodore-8-Bit-Reihe wählte man einen anderen Weg. Um die Kosten für den Computer, der anfangs häufig ohne Diskettenlaufwerk eingesetzt wurde, zu minimieren und die Anbindung von Laufwerken so flexibel wie möglich zu halten, verfügte der Computer nur über sehr einfache und allgemein gehaltene, zeichenorientierte (nicht blockorientierte) Soft- und Hardware-Schnittstellen zu externen Geräten. Die vollständige Logik zum Kodieren/Dekodieren von Sektoren sowie die Dateisystem- und DOS-Befehlslogik war im Diskettenlaufwerk realisiert.
Commodore-8-Bit-Diskettenlaufwerkseinheiten (Units) waren deshalb eigenständige Computer mit einem oder zwei vom eigentlichen Computer unabhängigen Prozessoren. Eine Unit verfügte über ein oder mehr Laufwerke (Drives). Mehrere Units konnten an einen Computer angeschlossen werden. Das Betriebssystem, das in diesen Laufwerken zum Einsatz kam, war Commodore DOS. Im Gegensatz zu den DOS-Varianten der meisten anderen damaligen Firmen war es nicht auf einer Diskette gespeichert, sondern in ROM-Chips (Firmware) innerhalb des Laufwerks. Dadurch ergibt sich ein schnellerer Systemstart (das DOS ist beim Einschalten innerhalb von 1 bis 2 Sekunden einsatzbereit), geringere Kosten (ROM-Speicher war damals deutlich billiger als die gleiche Menge RAM-Speicher) aber auch eine geringere Flexibilität (neuere DOS-Versionen mit Fehlerkorrekturen oder zusätzlichen Funktionen können nur durch einen Umbau des Laufwerks verwendet werden, während bei anderen Systemen nur der Austausch eines Datenträgers erforderlich war).
Die ursprünglichen Modelle für die Commodore-PET-Reihe besaßen zwei symmetrische CPUs, 2 KB RAM und 16 KB ROM. CPU 1 realisierte die Logik, um Sektoren zu lesen und zu schreiben, während CPU 2 sich um die Dateisystemlogik sowie um die Kommunikation mit dem Computer kümmerte. Die Kommunikation zwischen den beiden Prozessoren fand über den Hauptspeicher statt: CPU 2 schrieb Befehls-Tupel (Aktion, Drive, Spur, Sektor, Speicheradresse) in einen definierten Speicherbereich, die CPU 1 auslas, ausführte und das Befehls-Tupel mit dem Ergebniscode überschrieb. Die beiden CPUs konnten dabei gleichzeitig denselben Speicher verwenden, indem man sich eine spezielle Eigenschaft der 6502-Prozessoren zunutze machte – diese greifen nur in einer der beiden Hälften jedes Taktzyklus auf den Systembus zu. Die CPUs wurden nun so verschaltet, dass CPU 1 jeweils in der ersten Takthälfte und CPU 2 in der zweiten Takthälfte den Bus benutzte, ganz genau so, wie sich in den Commodore-Computern der Prozessor und der Videochip den Bus teilten.
Grundsätzlich gelten alle diese Angaben auch für die Festplatten CBM 9060 und CBM 9090.
Spätere Geräte verfügten über nur ein Laufwerk und die zweite CPU wurde aus Kostengründen eingespart. Die einzelne CPU übernahm beide Aufgaben, die ursprüngliche Konzeption des Systems blieb dabei allerdings bestehen: Die Aufgaben der CPU 2 (Dateisystem) liefen als Hauptprogramm ab, während die Aufgaben der CPU 1 (Hardwaresteuerung) in einer Interruptroutine erledigt wurden.
Eigenschaften von Commodore DOS Aktionen wie das Formatieren von Disketten, das Umbenennen, Löschen oder Kopieren von Dateien werden also von Commodore DOS ausgeführt und laufen vollständig in der Laufwerkseinheit ab. Das DOS bietet ein flaches Dateisystem (Details siehe unter SFD100x) ohne Unterverzeichnisse und mit einer limitierten Anzahl von Einträgen, also Dateien, je Datenträger (Diskette bzw. Festplatte). Die Maximalanzahl an Einträgen variiert dabei mit der Kapazität des jeweiligen Datenträgers, von der 170-KB-Diskette bis zum 4,5-MB-Festplattenlaufwerk.
Unterstützte Dateitypen Jede Datei trägt im Inhaltsverzeichnis eine Kennung, die sie einem der folgenden Dateitypen zuordnet: Sequentielle Datei (SEQ) – für unstrukturierte, in einem durchgehenden Strom zu lesende Daten, die Länge steht im Inhaltsverzeichnis, jeder Datenblock trägt in den ersten beiden Bytes die Blocknummer des Folgeblocks für diese Datei auf der Diskette, so dass je Block nur 254 Nutzbytes gespeichert sind. Programmdatei (PRG) – strukturiert wie eine sequentielle Datei; enthält in den ersten beiden Nutzbytes die Ladeadresse im Arbeitsspeicher des Computers und danach den binären Speicherinhalt, wie er aus diesem Speicherbereich kopiert wurde bzw. wieder in ihn zurückgeschrieben werden soll. Relative Datei (REL) – Direktzugriffsdatei, die es über separat gespeicherte Zeiger („Pointer“, in einem oder mehreren dann wieder sequentiell verlinkten Datenblöcken) auf die von ihr belegten Diskettenblöcke erlaubt, direkt auf bestimmte Orte innerhalb der Datei zuzugreifen, ohne den ganzen Inhalt davor durchlesen zu müssen. Bei den meisten anderen Betriebssystemen ist das für alle Dateien möglich, Commodore DOS spart ein wenig Speicherplatz, indem die dafür notwendigen Strukturen bei den nicht-relativen Dateitypen nicht angelegt werden. User-Datei (USR) – strukturiert wie eine sequentielle Datei; muss keinerlei sonstige Regeln erfüllen. Das Inhaltsverzeichnis selbst ist zwar ähnlich einer sequentiellen Datei abgespeichert, aber taucht nicht im Inhaltsverzeichnis auf (auch nicht als „.“ wie bei Unix oder MS-DOS). Beim Auslesen wird es wie ein nicht ausführbares BASIC-Programm formatiert und wie ein solches in den Arbeitsspeicher geladen und kann dort mit dem LIST-Befehl des Basic-Interpreters angesehen werden (der Versuch, dieses Pseudo-Programm mit dem Befehl RUN zu starten, führt dagegen zu einer Fehlermeldung). Da es wie ein BASIC-Programm geladen wird, überschreibt es aber auch ein evtl. dort vorher stehendes BASIC-Programm, das anschließend wieder geladen werden muss. Erst in Version 4 von Commodore BASIC gibt es eigene Befehle zum Ansehen des Inhaltsverzeichnisses, ohne ein im Arbeitsspeicher vorhandenes BASIC-Programm zu überschreiben.
Befehlsübertragung Jedes Laufwerk kann über die Schnittstelle zum Computer 15 virtuelle Kanäle oder Dateien (0–14) unterhalten, d. h. der Computer kann auf einem Laufwerk bis zu 15 Dateien zum Lesen bzw. Schreiben offen halten. (Die tatsächliche Anzahl offener Dateien wird dabei in der Praxis vom RAM des Laufwerks begrenzt, üblicherweise können 3–4 Dateien und der Befehlskanal offen gehalten werden, wobei relative Dateien doppelt zählen.)
Andererseits arbeitet der Computer seinerseits mit eigenen virtuellen Kanälen, die durch ihre Nummer identifiziert und den Geräten bei der Eröffnung zugeteilt werden; bei der Eröffnung des Kanals wird dem Gerät (z. B. Diskettenlaufwerk) auch mitgeteilt, welchen virtuellen Kanal es für diese Verbindung verwenden soll. Die Nummern sind dabei beliebige „Namen“, über die reale Puffer im Computer und den Geräten adressiert werden.
Kanal 15 („Befehlskanal“) hat für ein Diskettenlaufwerk eine Sonderbedeutung: Über ihn laufen Befehle vom Computer an Commodore DOS sowie Statusmeldungen in die andere Richtung. Auf Computerseite wird der Befehlskanal allerdings genau wie eine normale Datei behandelt.
Kanal 0 ist für Leseoperationen vorgesehen und Kanal 1 für Schreiboperationen (insb. dem Laden und Speichern von Programmen), so dass bei Benutzen dieser Kanäle die Art des Zugriffs nicht mehr spezifiziert werden muss.
Empfangen und Senden von Daten und Befehlen Der Datenaustausch zwischen Computer und Laufwerk wird ermöglicht über die erwähnten virtuellen Kanäle ("Sekundäradressen") im Laufwerk. Bei Commodore-Computern (z. B. C64) existieren analoge virtuelle Kanäle ("Dateinummern") auch auf Computerseite, verwaltet durch Routinen im ROM-basierten Betriebssystem (Kernal). Diese werden vom BASIC-Interpreter bei Eingabe von bestimmten BASIC-Befehlen aufgerufen oder direkt von Programmen, vor allem Assembler-Programmen. Die computerseitigen virtuellen Kanalnummern ("Dateinummern") werden dabei dem Laufwerk nie mitgeteilt, sondern nur innerhalb des Rechners selbst verwendet. Die Laufwerke identifizieren Dateien ausschließlich über die "Sekundäradressen".
Die folgenden Beispiele illustrieren somit eher die Ansprache des DOS von der BASIC-Ebene aus und die Abhängigkeit der Benutzerfreundlichkeit von der Implementation von Letzterer. „Gerät“ meint dabei in diesem Zusammenhang ausdrücklich eine Commodore-Diskettenstation und wird verwendet, um begrifflich eine solche von einem „Laufwerk“ zu unterscheiden, da manche Stationen ja aus zwei Laufwerken bestehen.
Beispiel 1: Umbenennen einer Datei
OPEN 1,10,15: PRINT#1,"R:NEUNAME=ALTNAME": CLOSE 1 oder abgekürzt OPEN 1,10,15,"R:NEUNAME=ALTNAME": CLOSE 1
Der OPEN-Befehl öffnet den virtuellen Kanal ("Dateinummer") 1 auf Computerseite, weist ihn Gerät 10 am seriellen Bus zu und schickt diesem Gerät die Information, seinerseits den virtuellen Kanal ("Sekundäradresse") mit Nummer 15 zu verwenden (d. h. einen Pufferbereich zu reservieren und ihn „15“ zu nennen); Anhand dieser Nummer 15 weiß das Gerät, dass über diesen Kanal keine Daten für eine Datei, sondern DOS-Befehle gesendet werden, die es ausführen soll. Der zweite Befehl schickt den Befehl „R“ (kann auch RENAME ausgeschrieben werden) an Kanal 1 mit dem neuen und alten Dateinamen. Der dritte Befehl schließt den virtuellen Kanal.
Beispiel 2: Öffnen einer Datei und Hineinschreiben eines Textes
OPEN 1,8,13,"0:TESTDATEI,S,W" oder OPEN 1,8,1,"0:TESTDATEI,S" oder DOPEN#1,"TESTDATEI,W"
PRINT#1,"WIKIPEDIA, DIE FREIE ENZYKLOPAEDIE" CLOSE 1