Commodore DOS ist der Name des Disketten-Betriebssystems der Firma 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.
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 gehalten, zeichenorientierte (nicht blockorientierte) Software- und Hardware-Schnittstellen zu externen Geräten, während die vollständige Logik zum Kodieren/Dekodieren von Sektoren sowie die Dateisystem- und DOS-Befehlslogik im Diskettenlaufwerk realisiert war.
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"). Es konnten mehrere Units an einen Computer angeschlossen werden. Das Betriebssystem, das in diesen Laufwerken zum Einsatz kam, war Commodore DOS. Im Gegensatz zu den DOSen der meisten anderen damaligen Firmen war es nicht auf einer Diskette gespeichert, sondern in ROM-Chips (Firmware) innerhalb des Laufwerks.
Die ursprünglichen Modelle für die Commodore-PET-Reihe besaßen zwei symmetrische CPUs, 2 KiB RAM und 16 KiB 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 zunutzemachte - 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 genauso wie sich in den Commodore-Computern selbst der Prozessor und der Videochip den Bus teilten.
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.
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.)
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.
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:neu=alt": CLOSE 1
oder abgekürzt OPEN 1,10,15,"R:neu=alt": CLOSE 1
Dies öffnet den virtuellen Kanal 1, weist ihn Gerät 10 am seriellen Bus zu und schickt diesem Gerät die Information, eine Datei/Kanal mit Nummer 15 zu öffnen (d. h. einen Pufferbereich zu reservieren und ihn "15" zu nennen); daher weiß das Gerät, dass keine Daten, sondern ein DOS-Befehl folgt, den 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,"TESTDATEI,S,W"
oder OPEN 1,8,1,"TESTDATEI,S"
oder DOPEN#1,"TESTDATEI,W"
PRINT#1,"WIKIPEDIA, DIE FREIE ENZYKLOPAEDIE"
CLOSE 1
Der erste OPEN-Befehl öffnet virtuellen Kanal 1 und weist in Gerät 10 zu. Diesem Gerät wird zunächst mitgeteilt, dass eine Datei zu öffnen sei, die fortan über die Nummer 13 anzusprechen ist. Da es sich um eine echte Datei handelt und diese einen Namen braucht, wird das folgende als Name der Datei interpretiert (bis zum Komma). Danach folgt "S" als Angabe, dass es eine Datei vom Typ SEQ (sequentielles lesen/schreiben) werden soll, und "W" für WRITE (Schreibzugriff). Andere Zugriffsmodi sind "R" (Read) und "M" (Modify).
Der darunterstehende Befehl erfüllt genau dieselbe Funktion, aber da Datei Nummer 1 benutzt wird und diese standardmäßig für Schreiboperationen reserviert ist, entfällt die Angabe für den Schreibzugriff. Der nächste Befehl setzt BASIC 4.0 oder höher voraus und erfüllt den gleichen Zweck, ohne dass der Benutzer sich um weitere Parameter kümmern muss.
Der nächste Befehl schickt den Text an den virtuellen Kanal (Puffer im RAM des Laufwerks), bevor der letzte ihn schließt. Erst der CLOSE-Befehl veranlasst das Schreiben des Textes auf die Diskette und die Freigabe des Puffers für andere Zwecke.
Während dieses Vorgehen mit einer Ebene von virtuellen Kanälen auf Computer- und Laufwerksseite für Programme Möglichkeiten des geräteunabhängigen Zugriffs bietet (Ansprechen von Laufwerken in der selben Form wie von Druckern, Modems, Tastatur, Bildschirm etc.), ist es für simple Laufwerksoperationen unhandlich. Commodore integrierte daher in spätere Versionen von BASIC Befehle zum einfacheren Zugriff auf Disketteninhalte:
'''Beispiel 3: Umbenennen einer Datei in BASIC 4.0 oder 7.0 (z. B. C128)
RENAME"alt"TO"neu"
Technisch betrachtet arbeitet dieser Befehl wie Beispiel 1 (außer dass er Gerät 8 anstelle von 10 anspricht).
Auch integrieren BASIC-Erweiterungen für CBM-Rechner häufig einen Befehl (i.a. "@"), der das direkte Senden von Befehlen auf dem Befehlskanal eines Laufwerks ermöglicht, ohne dass der Benutzer sich um die Ebene von Dateien und Kanälen zu kümmern braucht:
'''Beispiel 4: Umbenennen einer Datei mit DOS-Wedge oder z. B. JiffyDOS
@R:neu=alt
Insbesondere die Abfrage des Befehlskanals von Seiten des Computers wird hierdurch stark erleichtert, denn auf diesem Weg meldet sich ja das DOS beim Computer:
'''Beispiel 5: Abfragen des Status des Geräts mit DOS-Wedge oder z. B. JiffyDOS
@
Ausgabe z. B.: 00, OK, 00, 00
Commodore-Disketteneinheiten melden ihren Status in der o.g. Form als CBM-ASCII-String an den Computer. Die erste Zahl gibt die Nummer des aufgetretenen Ereignisses (i.A. Fehler, aber auch z.B. bei der 1581 das vorgenommene Auswählen einer Partition) an, 0 bedeutet hier keiner. Nach einem Komma folgt der Fehler als Klartext (jedoch weniger differenziert als die Nummer, so werden Lesefehler aus verschiedenen Gründen als "READ ERROR" gemeldet und sind anhand ihrer Nummer genauer einzugrenzen), dann zwei Zahlen, die für gewöhnlich (aber nicht bei allen Meldungen) Spur und Sektor des Ereignisses angeben. Der Status ist auch ab BASIC 4.0 als Textstring in der Systemvariablen STATUS$ (i. A. verkürzt zu ST$) und die Ereignisnummer in STATUS (oder ST) enthalten.
This article is licensed under the GNU Free Documentation License.
It uses material from the
"Commodore DOS".
Home Page • arts • business • computers • games • health • hospitals • home • kids & teens • news • physicians • recreation• reference • regional • science • shopping • society • sports • world