Commodore-DOS
| Commodore DOS/CBM DOS | ||
|---|---|---|
| Teil der DOS-Familie | ||
|
Verzeichnisliste einer formatierten 1541-Diskette | ||
| Allgemeine Information | ||
| Entwickler | Commodore International | |
| Entwicklungsmodell | geschlossene Quelle | |
| Lizenz | proprietäre Software | |
| Tatsächlicher Zustand | Historisch | |
| Sprachen | Englisch | |
| Versionen | ||
| Neueste stabile Version | 10,0 (?) | |
| zusammenhängende Posts | ||
| QDOS , PC-DOS , MS-DOS , FreeDOS | ||
Commodore DOS , auch bekannt als CBM DOS , ist das Festplattenbetriebssystem, das mit 8-Bit-Computern von Commodore verwendet wird . Im Gegensatz zu den meisten anderen DOS , die von der Festplatte in den eigenen RAM des Computers geladen und dort ausgeführt werden, läuft CBM DOS intern auf dem Laufwerk: DOS befindet sich im ROM innerhalb des Laufwerks und wird dort von einer oder mehreren CPUs der MOS 6502 -Familie ausgeführt .
CBM DOS-Versionen
Es ist bekannt, dass mindestens sieben nummerierte Versionen von Commodore DOS existieren; Die folgende Liste enthält die Versionsnummern und zugehörigen Laufwerke. Sofern nicht anders angegeben, sind die Laufwerke im 5¼-Zoll-Formfaktor. Der Code „lp“ bezeichnet Einheiten mit „niedrigem Profil“. Einheiten mit Modellnummern, die mit 15 beginnen, verbinden sich über Commodores proprietäre serielle IEEE-488-Bus (IEC-Bus) (TALK/LISTEN)-Protokolle; alle anderen verwenden IEEE-488 parallel .
- 1.0 – Gefunden auf den Diskettenlaufwerken 2040 und 3040
- 2.0: Gefunden auf den Diskettenlaufwerken 4040 und 3040
- 2.5: Gefunden auf 8050- Diskettenlaufwerken
- 2.6: Gefunden auf den 1540- , 1541- , einschließlich der in SX-64- , 1551- , 2031- (+ "lp") und 4031 - Diskettenlaufwerken eingebauten
- 2.7: Gefunden auf den Diskettenlaufwerken 8050 , 8250 (+ "lp") und SFD-1001
- 3.0 – Auf den Diskettenlaufwerken 1570 , 1571 External und 8280 (8280: 8 Zoll) sowie auf den Festplatten 9060 und 9090 zu finden .
- 3.1 - Gefunden in der eingebetteten Einheit 1571 der C128DCR-Computer
- 10.0: Gefunden im 1581 -Diskettenlaufwerk (3½ Zoll)
Version 2.6 war die mit Abstand am weitesten verbreitete und bekannteste Version, da sie auf dem 1541 als Teil der C64 -Systeme verwendet wurde .
Hinweis: Die überarbeitete Firmware für 1571, die den relativen Dateifehler behoben hat, wurde ebenfalls als V3.0 identifiziert. Daher ist es nicht möglich, die beiden Versionen nur anhand der Versionsnummer zu unterscheiden.
Übersicht
1541 Arten von Dateien und Verzeichnissen
Die Commdore 1541-Diskette kann bis zu 144 Dateien in einem flachen Namensraum (keine Unterverzeichnisse ) enthalten; Das Verzeichnis wird auf der reservierten Spur 18 gespeichert, die sich auf halber Strecke zwischen der Mitte und dem Rand einer einseitigen Platte mit 35 Spuren befindet. Ein Dateiname kann bis zu 16 Byte lang sein und ist theoretisch eindeutig; Durch die Verwendung direkter Zugriffsmethoden in der Verzeichnisstruktur ist es möglich, eine Datei in eine andere umzubenennen, obwohl der Zugriff auf diese Datei schwierig oder unmöglich sein kann. Dateien mit identischen Namen dienen im Allgemeinen keinem anderen Zweck als der visuellen Anzeige oder Verwaltung der Dateien. Ein beliebter Trick, der zum Beispiel von The Final Cartridge III verwendet wurde, bestand darin, Dateien namens "----------------"type DEL<in das Verzeichnis einzufügen, und die Dateien konnten um diese Zeilen herum neu angeordnet werden, um Gruppen zu bilden. Viele Spieleentwickler, Warez -Gruppenmitglieder und Demoscene - Hacker verwendeten auch einige raffiniertere benutzerdefinierte Verzeichniseinträge.
Dateinamen können ein Offset-Leerzeichen ( $A0) enthalten, und wenn die Verzeichnisliste von BASIC aus angezeigt $A0wird, scheint der Teil des Dateinamens nach dem Zeichen durch ein Anführungszeichen vom ersten Teil des Dateinamens getrennt worden zu sein, was dazu führt, dass BASIC dies nicht tut Betrachten Sie es als Teil des vollständigen Dateinamens. Mit dieser Funktion können Verzeichniseinträge wie SAVE "PROGRAM ⇧ Shift + space Commodore + D U D E ",8,1 erstellt werden, die dann in der Verzeichnisliste beispielsweise als erscheinen 32 "PROGRAMA",8,1 PRG. [ 1 ] Wenn der Benutzer den Cursor an den Anfang der Zeile bewegt, das Wort LOADüber die Dateigröße eingibt und RETURN drückt , interpretiert BASIC dies als , wodurch das Programm in den Speicher geladen wird. Alles nach dem Doppelpunkt oder der sekundären Adresse wird nicht ausgeführt, da der Computer alle Befehle nach einem LOAD ignoriert. [ 2 ] Alternativ kann der Benutzer ⇧ Shift + RUN/STOP für y drücken , d. h. das Programm automatisch laden und ausführen. [ 3 ]
LOAD "PROGRAMA",8,1...LOADRUN
Ein in einen Dateinamen eingebettetes Nullbyte unterbricht die Auflistung, nachdem sie von BASIC geladen wurde. Wenn drei Null-Bytes vorhanden sind, wird die Auflistung mit BASIC schwierig. Viele Maschinensprachenprogrammierer experimentierten mit Nullbytes, um es BASIC-Programmierern zu erschweren, auf ihren Code zuzugreifen und ihn zu manipulieren.
In BASIC kann auf das Verzeichnis als nicht ausführbares Pseudo-BASIC-Programm mit (oder im Fall eines Doppellaufwerks) gefolgt von zugegriffen werden . Die erste Zeile hat eine Zeilennummer von 0 oder 1 (die die Laufwerksnummer angibt), zeigt in umgekehrter Darstellung den Namen und die ID der Festplatte und einen Kurzcode für die DOS-Version, mit der sie erstellt wurde (Codes variieren nur in dem Maße, dass DOS-Versionen verwenden inkompatible Plattenformate: „2A“ wird von den meisten 5,25-Zoll-Versionen von DOS verwendet, „3D“ von 3,5-Zoll-1581). Nachfolgende Zeilen haben die Größe einer Datei (in Plattenblöcken) als Pseudo-"Zeilennummer", gefolgt vom Dateinamen in Anführungszeichen und dem dreistelligen Typcode. Die letzte Zeile zeigt die Anzahl der nicht zugeordneten Blöcke auf der Festplatte (wiederum als Pseudo-"Zeilennummer"), gefolgt von den Worten "BLOCKS FREE".
LOAD "$0",8LOAD "$1",8LIST
Auf dem Commodore 64 überschwemmt die Eingabe den Bildschirm mit Müll, anstatt das Verzeichnis in den BASIC RAM zu laden. Dies liegt daran, dass das Laufwerk dem Verzeichnis eine Ladeadresse von $ 0401 (1025) zuweist, was dem Beginn von BASIC für den Commodore PET entspricht, aber dem Standardanzeigespeicher auf dem C64 entspricht (beginnend mit dem zweiten Zeichen auf dem ersten Zeile des Bildschirms).
LOAD "$",8,1
Das Anzeigen des Verzeichnisses mit einem Befehl überschreibt das BASIC-Programm im Speicher. Das DOS Wedge und verschiedene Cartridges und Extender von Drittanbietern wie Epyx Fast Load , Action Replay und The Final Cartridge III ermöglichen das Anzeigen des Festplattenverzeichnisses mit speziellen Befehlen, die das Verzeichnis in den Anzeigespeicher laden, ohne das aktuelle BASIC-Programm zu zerstören. Einige Versionen von Commodore BASIC enthalten einen oder -Befehl , der die gleiche Funktion ausführt.
LOAD "$",8DIRECTORIOCATALOG
Die folgenden Dateitypen werden unterstützt:
SEQ- Eine sequentielle Datei ist eine Datendatei, die von Anfang bis Ende linear gelesen werden kann. Dateien
SEQwerden üblicherweise zum Speichern von Dokumenten oder Textdateien verwendet, die von einem Textverarbeitungsprogramm oder einem anderen ähnlichen Editor erstellt wurden. Eine sequentielle Datei ist analog zu einer flachen Datei unter Linux oder UNIX , da sie keine spezialisierte interne Struktur hat. Es ist nicht möglich, eine beliebige Position in einer sequentiellen Datei zu platzieren, da es kein Analogon zum Kernel-Aufruf gibt , der auf UNIX-ähnlichenlseekBetriebssystemen zu finden ist . PRG- Die Dateien
PRGenthalten typischerweise ausführbaren Programmcode, obwohl sie auch für Datendateien verwendet werden können. Die ersten beiden Bytes von werden von der Kernel -Routine "Load File"PRGgelesen und zur Bestimmung der Ladeadresse verwendet (sie werden im Little-Endian -Format gespeichert ). REL- Eine relative Datei ist eine Variante des sequentiellen Dateityps, bei der ein Indizierungsmechanismus namens Seitensektoren vorhanden ist, um einen datensatzorientierten Zugriff zu ermöglichen. Datensätze können bis zu 254 Byte groß sein und werden mit einer auf Eins basierenden Kardinalzahl adressiert, was echten wahlfreien Zugriff auf jeden Teil der Datei ermöglicht.
USR- Eine benutzerdefinierte Datei hat eine interne Struktur, die mit der einer sequentiellen Datei identisch ist. Der ursprüngliche Zweck von Commodore für diesen Dateityp war die Erleichterung der DOS-Entwicklung, da der Inhalt der Datei zur Ausführung durch den Mikroprozessor des Laufwerks in einen Laufwerkspuffer kopiert werden konnte. Sehr wenige Programme haben diesen Dateityp verwendet. Einige Anwendungen, die nicht standardmäßige Festplattenstrukturen auf niedriger Ebene verwenden, speichern Daten im USR-Format, das als eine Art "Lass mich in Ruhe, versuche nicht zu kopieren oder zu löschen"-Anzeige für den Benutzer angesehen wurde. Insbesondere GEOS "VLIR"-Dateien werden als
USR. DEL- Ein intern verwendeter undokumentierter Dateityp, der in seiner Struktur einer sequentiellen Datei ähnelt. Die Erstellung dieses Dateityps muss durch direkte Bearbeitung des Plattenverzeichnisses erfolgen.
Das Vorhandensein eines Sternchens ( *) vor dem Dateityp in einer Verzeichnisliste (z. B. *SEQ) weist darauf hin, dass die Datei nach dem Schreiben nicht ordnungsgemäß geschlossen wurde. Wenn das Laufwerk angewiesen wird, eine Datei zu schließen, die zum Schreiben geöffnet wurde, wird der zugehörige Puffer auf die Festplatte geleert und die Blockverfügbarkeitskarte (BAM) wird aktualisiert, um genau wiederzugeben, welche Blöcke verwendet wurden. Wenn ein Programm abstürzt oder ein anderes Problem (z. B. wenn der Benutzer die Festplatte entfernt, während eine Datei geöffnet ist) zu einer „verwaisten Datei“ führt, die auch als „giftige“ oder „Splat“-Datei bezeichnet wird, werden die Puffer nicht geleert und die BAM Es wird die Festplattennutzung nicht genau widerspiegeln, wodurch die Festplatte dem Risiko einer Beschädigung ausgesetzt ist. Auf eine vergiftete Datei kann normalerweise nicht zugegriffen werden (sie kann jedoch im Modus „Ändern“ geöffnet werden), und ein Versuch, die Datei mit dem DOS-Befehl scratchzu löschen, kann zu einer Beschädigung des Dateisystems führen, z . Die einzige praktische Methode, um eine dieser Dateien zu entfernen, besteht darin, die Datei im Modus "Ändern" zu öffnen (und zu reparieren) oder die Festplatte zu validieren (siehe DOS-Befehl validateunten). Letzteres baut die BAM neu auf und entfernt Verweise auf schädliche Dateien von das Verzeichnis. Der berüchtigte Save-with-Replace-Bug könnte zur Erstellung von Splat-Dateien führen.
*DEList ein spezieller Typ, der in den Verzeichniseintrag von Dateien geschrieben wird, die gelöscht wurden. Solche Dateien werden in einer normalen Verzeichnisliste nicht angezeigt und ihre Datenblöcke und Verzeichniseinträge werden von später erstellten Dateien wiederverwendet. Einige Dienstprogramme erlauben die "Wiederherstellung" solcher Dateien, wenn ihre Datenblöcke und Verzeichniseinträge noch nicht von anderen Dateien überschrieben wurden. Sie archivos DELwerden häufig verwendet, um Anzeigen oder Kommentarabschnitte in eine Verzeichnisliste einzufügen.
Dateitypen mit <nachgestellten (z. B. PRG<) sind „gesperrt“ und können nicht gelöscht werden; Sie können jedoch zum Lesen geöffnet werden. Es gibt keinen Commodore-DOS-Befehl, der diesen Status explizit setzen oder löschen kann, aber viele Dienstprogramme von Drittanbietern wurden geschrieben, um dies zu ermöglichen. Diese Dienstprogramme lesen das Verzeichnis normalerweise mit Shortcut-Befehlen, nehmen alle erforderlichen Änderungen an den Rohdaten vor und schreiben die Änderungen dann auf die Festplatte.
Dateizugriff
Der Dateizugriff ist in erster Linie ein Problem für den Host-Computer. Das Kernel-ROM auf dem Computer enthält die primitiven Routinen, die für den Zugriff auf Dateien erforderlich sind, und das BASIC-ROM enthält eine Abstraktion auf höherer Ebene für den Dateizugriff unter Verwendung der BASIC-Syntax. Die Komponenten, mit denen DOS selbst befasst ist, analysieren den Dateinamen und die sekundäre Adresse. Dieser Abschnitt gibt Ihnen der Vollständigkeit halber einen Überblick über die notwendigen BASIC-Befehle.
Das Öffnen einer Datei auf einem Commodore-Laufwerk beinhaltet die Verarbeitung einer Reihe von Parametern, die grob analog zu Dateiöffnungsprozeduren in anderen Umgebungen sind. Da auf dem Laufwerkscontroller DOS läuft, muss die Öffnungssequenz der Datei genügend Informationen an das Laufwerk übergeben, um eine eindeutige Interpretation zu gewährleisten. Eine typische BASIC-Anweisung zum Schreiben in eine sequentielle Datei wäre:
OPEN 3,8,4,"0:DIRECCIONES,S,W"
Die Parameter, die dem Befehl folgen, OPENlauten wie folgt:
- 3
- Dieser Parameter, die Dateinummer , identifiziert logisch die geöffnete Datei im Betriebssystem des Computers und ist analog zu einem Dateideskriptor in UNIX-ähnlichen Betriebssystemen . Es wird nie an das Laufwerk gesendet und ist daher dem Betriebssystem des Laufwerks nicht bekannt oder wird von ihm verwendet. Die Dateinummer kann im Bereich von 1 bis einschließlich 254 liegen, wird vom Programmierer zugewiesen und muss eindeutig sein, wenn mehr als eine Datei gleichzeitig geöffnet ist. Sobald die Datei geöffnet wurde, verwenden alle Ein- und Ausgabevorgänge des Programms die Dateinummer. In Assemblerprogrammen wird dieser Wert oft als LA (logische Adresse) bezeichnet, wobei die aus dem Mnemonik stammende Abkürzung auf den Speicherort verweist, an dem die Dateinummer gespeichert ist. Dateinummern größer als 127 führen dazu, dass das System nach jedem Wagenrücklauf einen zusätzlichen Zeilenumbruch schreibt (nützlich zum Beispiel für doppelte Zeilenumbrüche in einem Dokument).
- 8
- Dieser Parameter, die Gerätenummer , identifiziert ein bestimmtes Peripheriegerät , das an den Computer angeschlossen ist. Die Geräte 0 bis 3 adressieren die Tastatur, die Bandkassette, die RS-232- Schnittstelle bzw. die Videoanzeige, die alle direkt vom Kernel-ROM gesteuert werden. Die Gerätenummern 4 und höher adressieren Geräte, die mit dem Peripheriebus verbunden sind, wie z. B. Drucker oder Plattenlaufwerke. Im Fall eines Plattenlaufwerks bezieht sich die Gerätenummer auf den Laufwerkscontroller, nicht auf die Laufwerksmechanismen innerhalb des Laufwerks. Per Konvention hat das erste Plattenlaufwerk in einem System die Gerätenummer 8, das zweite Laufwerk, falls vorhanden, die Gerätenummer 9 usw. bis zu einer maximalen Anzahl von 15 (wenn acht Laufwerke angeschlossen sind). Das Gerätenummernschema wurde vom IEEE-488-Bus (oder GPIB General Purpose Interface ) abgeleitet, der mit den Commodore PET/CBM-Modellen verwendet wurde. In Assemblerprogrammen wird dieser Wert oft als FA oder PA (physical address) bezeichnet, wiederum von der Abkürzung für den Speicherplatz, an dem die Gerätenummer gespeichert ist.
- 4
- Dieser Parameter, die Sekundäradresse , die von 0 bis einschließlich 15 reichen kann, bezieht sich auf einen bestimmten Kommunikationskanal, der mit dem Gerätetreiber eingerichtet wurde, und wird an das Gerät weitergegeben, wenn es den Befehl erhält, auf dem Kommunikationsbus zu „sprechen“ oder zu „hören“. Peripheriegeräte. Wie die Dateinummer wird die sekundäre Adresse vom Programmierer bestimmt und muss für das betreffende Gerät eindeutig sein. Der Bereich 0 bis einschließlich 14 wird verwendet, um Daten zum oder vom Gerät zu übertragen, während 15, der als "Befehlskanal" bezeichnet wird, verwendet wird, um Befehle an den Gerätetreiber auszugeben (z. B. das Umbenennen einer Festplattendatei). in der Lage, eine solche Operation zu unterstützen. In Plattenlaufwerken werden die Sekundäradressen 0 bis einschließlich 14 Puffern innerhalb des Controllers zugewiesen, wodurch eine Kommunikation mit einer bestimmten Datei auf einer bestimmten Platte hergestellt wird; Da das Laufwerk, wie oben erwähnt, die Dateinummer nicht kennt , kann es nur die sekundäre Adresse verwenden , um den Unterschied zwischen mehreren gleichzeitig geöffneten Dateien zu erkennen. Andererseits ist das Betriebssystem des Hosts unabhängig von der sekundären Adresse; es wird bei jedem Dateizugriff an das Laufwerk übertragen, aber vom Host nicht anderweitig verwendet. In Assemblerprogrammen wird dieser Wert oft als SA (sekundäre Adresse) bezeichnet.
- BEFEHLSKETTE
- Der Parameter
"0:DIRECCIONES,S, W"ist in der Commodore-Dokumentation offiziell als "Befehlszeichenfolge" bekannt und wird vom Treiber des Geräts interpretiert, auf das zugegriffen wird. Im Fall eines Plattenlaufwerks besteht die formale Befehlszeichenfolgenstruktur aus der Laufwerksnummer (0:, nicht zu verwechseln mit der Gerätenummer), dem Dateinamen (DIRECCIONES), dem Dateityp (S, in diesem Beispiel sequentiell) und dem Zugriffsmodus (W, offen zum Schreiben in diesem Beispiel). In der Praxis können einige dieser Parameter weggelassen werden. Der Dateiname wird zumindest nur dann benötigt, wenn die Datei zum Lesen geöffnet werden soll.
- Die Laufwerksnummer identifiziert einen einzelnen Mechanismus, der an einen Controller für zwei Festplattenlaufwerke angeschlossen ist, und entspricht einer logischen Einheitennummer auf einem SCSI - Controller , der mehrere Mechanismen steuern kann (z. B. die SASI OMTI- Controller , die für die Arbeit mit ST -412 / ST-506 Festplatten in den 1980er Jahren). Bei Diskettenlaufwerken ist der erste Mechanismus Laufwerk 0: und der zweite 1:. Es ist durchaus üblich, die Laufwerksnummer bei der Kommunikation mit einem einzelnen Diskettenlaufwerk wegzulassen, da 0: der Standardwert für solche Laufwerke ist, aber da das Weglassen der Nummer einige obskure Fehler in DOS auslösen kann, wird dies nicht empfohlen (Doppelpunkt allein gleich 0: und reicht aus, um diese Fehler zu vermeiden). Eine Ausnahme von dieser Konvention bildet das Lt. Kernal -Festplattensubsystem , bei dem sich die Laufwerksnummer auf „logische Laufwerke“ bezieht ( virtuelle Laufwerke , die auf einem einzelnen physischen Laufwerk erstellt wurden), wodurch eine Syntax wie 4: oder 10: erforderlich wurde, wenn die Datei zu öffnende Laufwerk befand sich nicht auf dem logischen Laufwerk Null (entspricht dem Laufwerk-Null-Mechanismus in einem doppelten Diskettenlaufwerk).
Dateien können auch mit den Befehlen LOADund geladen und gespeichert werden SAVE. Hier können auch Dateinamenbezeichner verwendet werden, zum Beispiel BASIC-Programm in einer Datei (Programm) speichern und BASIC-Programm in einer sequentiellen Datei speichern. Wird die Sekundäradresse nicht oder mit 0 angegeben (z. B. ), wird die Datei aus dem BASIC-Speicherbereich (der beim C64 standardmäßig ab $ 0801 beginnt) gespeichert/geladen. Wenn die sekundäre Adresse als ein Wert ungleich Null angegeben ist (z. B. ), wird das Programm ab der Adresse geladen, die von der Datei selbst angegeben wird (dem PRG-Header, der die ersten zwei Bytes der Datei sind); Diese Befehlsform wird am häufigsten beim Laden von Maschinencodeprogrammen verwendet.
SAVE "ARCHIVO", 8PRGSAVE "0:ARCHIVO,SEQ,WRITE",8,1LOAD "ARCHIVO", 8LOAD "ARCHIVO",8,1
Die Lastverschiebung wurde erstmals auf dem VIC-20 eingeführt, da diese Maschine BASIC RAM an mehreren verschiedenen Orten starten konnte, je nachdem, welche Speichererweiterung sie installiert hatte. Die vorherige Commodore-PET -Serie unterstützte keine Verschiebung, also hätte y den gleichen Effekt: Die Datei würde in denselben Speicherbereich geladen, aus dem sie gespeichert wurde. Die Lastverlagerung findet auf dem Host-Rechner statt, mit Ausnahme dessen, was oben über die sekundäre Adresse gesagt wurde, die nur intern auf dem Gerät verwendet wird. Da das PET keine Dateien verschieben kann, müssen BASIC-Programme, die auf späteren Commodore-Maschinen geschrieben wurden, mit einem Sektor-Editor modifiziert werden, um die Header-Bytes zu ändern. Es ist auch möglich, den eingebauten Maschinensprachenmonitor des PET zu verwenden, um die Verbindungsadresse des BASIC-Programms zu ändern, nachdem es geladen wurde.
LOAD "ARCHIVO",8LOAD "ARCHIVO",8,1
Der Befehl lädt das erste Programm auf die Festplatte, beginnend mit dem Speicherort, der durch die Datei angegeben ist. Dies ist einer der beliebtesten Ladebefehle der Plattformen, zum Beispiel die Methode zum Starten der meisten kommerziellen Software. Bemerkenswert ist die Tatsache, dass die Platzhaltererweiterung nur den ersten Verzeichnisnamen auswählt, wenn zuvor auf keine andere Datei auf dieser Platte zugegriffen wurde; Der Name der zuletzt verwendeten Datei wird im Speicher gehalten, und nachfolgende Befehle laden diese Datei anstelle der ersten ( oder laden jedoch immer die erste Datei auf der Festplatte).
LOAD "*",8,1LOAD "*",8,1LOAD "0:*",8,1LOAD ":*", 8,1
Auf Datenträgerverzeichnisse auf Doppellaufwerken wird als und zugegriffen . und sie greifen nicht auf das Verzeichnis zu, sondern auf die eigentlichen Dateien auf dem einen oder anderen Laufwerk, die einfach . Teilverzeichnisse können durch Hinzufügen eines Doppelpunkts und einer Vorlage geladen werden: Sie würden beispielsweise ein Teilverzeichnis laden, das nur Dateien anzeigt, deren Namen mit dem Buchstaben K beginnen und vom Typ PRG sind; Alle diese Teilverzeichnisse enthalten noch die Startzeile mit dem Namen der Festplatte und die Endzeile "BLOCKS FREE".
LOAD "$0", 8LOAD "$1",8"0:$""1:$""$"LOAD "$0:K*=P", 8
Der Save-and-Replace-Bug
Commodore DOS bietet auch einen "Speichern und Ersetzen"-Befehl, der es Ihnen ermöglicht, eine Datei über eine vorhandene Datei zu speichern, ohne die SCRATCHvorhandene Datei zuerst speichern zu müssen. Dies geschieht, indem @dem Dateinamen während der Operation OPENor ein Symbol vorangestellt wird SAVE, z. B. . Seit Jahren, beginnend mit Einheit 4040, verbreiteten sich Gerüchte über einen Fehler in der Implementierung des Befehls. Einige Kommentatoren bestritten dies zunächst. Preise wurden ausgesetzt, um die Existenz des Fehlers zu beweisen. [ 4 ] Anfang 1985 veröffentlichte die Zeitschrift Compute! Er riet den Lesern, den Befehl nicht zu verwenden. [ 5 ] In diesem Jahr veröffentlichten mehrere Autoren unabhängig voneinander Artikel [ 4 ] [ 6 ] [ 7 ] [ 8 ] , die zeigten, dass der Fehler „Speichern und Ersetzen“ echt war und Methoden enthielt, mit denen er ausgelöst werden konnte.
SAVE "@MI PROGRAMA", 8
Zu den betroffenen Geräten gehörten das Single-Drive 1541 und das Dual-Drive 4040; die 8050 und 8250 zeigten das Problem nicht. [ 4 ] Einige Kommentatoren schlugen vor, dass der Fehler vermieden werden könnte, indem 0:beim Speichern immer explizit die Laufwerksnummer angegeben wird, [ 6 ] obwohl später gezeigt wurde, dass jede Festplattenoperation ohne Laufwerksnummer ausreichte, um den Fehler zu verursachen. [ 9 ] Der Fehler war auf die Tatsache zurückzuführen, dass die betroffenen DOS-Implementierungen modifizierte Versionen von DOS waren, die in früheren Commodore-PET-Doppellaufwerken wie dem 8050 enthalten 1:waren Pufferzuweisung unter bestimmten Bedingungen. Da der Write-and-Replace-Befehl alle fünf Laufwerkspuffer verwendete und die Methode, mit der der „Phantom“-Puffer zugewiesen wurde, außerhalb der Spezifikation lag, führte dies dazu, dass auf einigen Laufwerken beschädigte Daten auf die Festplatte geschrieben wurden.
Im September 1986 veröffentlichte Philip A. Slaymaker einen Artikel [ 10 ] , der die Fehlerursache sehr detailliert beschreibt und Patches für die 1541-Laufwerks-ROMs bereitstellt; Lesegeräte mit einem EPROM -Schreiber könnten ihre eigenen gepatchten ROMs erstellen, die das im Laufwerk ersetzen könnten. Commodore erfuhr von Slaymakers Erkenntnissen, und obwohl sie nie ein offizielles Update für die ursprünglichen 1541-ROMs veröffentlichten, behoben sie den Fehler in Revision 5 der 1571-ROMs und auch in den 1541c- und 1541-II-Laufwerk-ROMs. Obwohl von Commodore nicht unterstützt, ist bekannt, dass die 1541-II-Firmware (aber nicht die 1541c) auch auf einem originalen 1541-Laufwerk über EPROM verwendet werden kann, wodurch dieses Laufwerk ebenfalls repariert wird.
Befehlskanal
Wie oben erwähnt, wird auf Commodore DOS über den "Befehlskanal" zugegriffen, wobei eine Syntax verwendet wird, wie sie für den Zugriff auf Dateien verwendet wird. Das Ausgeben von Befehlen an DOS und das Abrufen von Fehler- und Statusmeldungen, die als Reaktion auf die Befehle generiert werden, erfolgt durch Öffnen einer Datei auf dem Gerät mit 15 als Sekundäradresse, zum Beispiel:
OPEN 1,8,15
Um den Gerätestatus abzurufen und anzuzeigen, können Sie Folgendes codieren:
OPEN 1,8,15:INPUT#1,E,E$,T,S:PRINT E,E$,T,S:CLOSE 1
Im obigen Beispiel Eenthält es die Fehlernummer (falls vorhanden, ist es Null, wenn kein Fehler vorliegt), es E$wird ein Text mit der kurzen Beschreibung des Fehlers sein, es wird Tdie Datenträgerspur darstellen, auf der der Fehler aufgetreten ist , und es Swird der Sektor sein, in dem der Fehler aufgetreten ist, Spur T, auf die sich der Fehler bezieht. Wenn kein Fehler vorliegt, wird das Äquivalent von 00,OK,00,00in allen vier Variablen zurückgegeben. Beachten Sie, dass dies INPUT#nur ein Run-Modus-Befehl ist. Außerdem ist es in Programmen, die viele Festplattenbefehle ausgeben, üblich, eine Datei auf dem Befehlskanal des Geräts beim Start des Programms zu öffnen und sie nicht zu schließen, bis das Programm beendet ist.
Versionen 4.0 und höher von Commodore BASIC bieten eine benannte Pseudovariable DS$, die verwendet werden kann, um den Zustand des Laufwerks anstelle des obigen Codes abzurufen. Diese reservierte Variable ist in früheren BASIC-Versionen nicht verfügbar, in denen der Befehlskanal wie oben gezeigt manuell gelesen werden muss. Beachten Sie, dass unmittelbar nach dem Einschalten oder Neustart die DOS-Revision zurückgegeben wird. Beispielsweise gibt eine 1541 zurück 73,CBM DOS V2.6 1541,00,00. Fehlercode 73 ist bei allen Laufwerksmodellen gleich und kann verwendet werden, um festzustellen, ob das Laufwerk in seinen eingeschalteten Zustand zurückgesetzt wurde.
| Befehl | Beschreibung | BASIC 1.x- und 2.x-Implementierung | DOS-Wedge- Implementierung | BASIC 3.0+-Implementierung |
|---|---|---|---|---|
| Neu | Formatiert ein Laufwerk, bereitet es für die Verwendung vor und löscht alle Daten darauf. Wenn Sie den zweistelligen Kennungsparameter weglassen, werden alle Dateien auf einer bereits formatierten Festplatte schnell gelöscht. | OPEN 15,8,15,"N0:nombre del disco,identificador":CLOSE 15
|
@N0:nombre de disco,identificador
|
HEADER"nombre de disco",identificador
|
| Kratzen | Löschen Sie eine Datei von der Festplatte (oder mehrere Dateien mit Wildcard-Abgleich) | OPEN 15,8,15,"S0:nombre de archivo":CLOSE 15
|
@S0:nombre de archivo
|
SCRATCH "nombre de archivo"
|
| umbenennen | Benennen Sie eine Datei auf der Festplatte um. Beachten Sie, dass der neue Name zuerst kommt (außer in BASIC 3.0+ Code). | OPEN 15,8,15,"R0:nuevo nombre=nombre antiguo":CLOSE 15
|
@R0:nuevo nombre=nombre antiguo
|
RENAME"nombre antiguo"TO"nuevo nombre"
|
| Initialisieren | Starten Sie das Gerät neu und lesen Sie die BAM von der Diskette in den internen Speicher. Dies ist selten erforderlich, da das Laufwerk dies normalerweise selbst tut, außer wenn ein Laufwerk gegen ein anderes mit derselben ID ausgetauscht wird. | OPEN 15,8,15,"I0:":CLOSE 15
|
@I0:
|
DCLEAR(nur BASIC 7.0+)
|
| Bestätigen | Korrigiert die BAM mit dem Verzeichnis auf der Festplatte, weist alle verwendeten Blöcke zu und gibt alle Blöcke frei, die nicht von Dateien verwendet werden, und entfernt alle nicht geschlossenen Dateien aus dem Verzeichnis. Vergleichbar mit den CHKDSK / ScanDisk Tools von Microsoft Betriebssystemen. | OPEN 15,8,15,"V0:": CLOSE 15
|
@V0:
|
COLLECT
|
| Kopieren | Dupliziert eine Datei auf derselben Festplatte (oder einer anderen Festplatte auf demselben Laufwerk von zwei Diskettenlaufwerken) mit einem anderen Dateinamen. Beachten Sie, dass der neue Name zuerst kommt (außer in BASIC 3.0+ Code). Das Kopieren auf eine andere Diskette ohne duales Diskettenlaufwerk erfordert die Verwendung eines Dienstprogramms. | OPEN 15,8,15,"C0:nuevo nombre=0:nombre existente":CLOSE 15
|
@C0:nuevo nombre=0:nombre existente
|
COPY "nombre existente"TO"nuevo nombre"
|
| Duplikat | Dupliziert eine ganze Festplatte. Nur verfügbar in Einheiten mit zwei Diskettenlaufwerken; Andernfalls müssen Sie stattdessen ein Dienstprogramm verwenden. Die Nummer des Ziellaufwerks (!) wird zuerst gesetzt, dann die Nummer des Quelllaufwerks (außer im Code BASIC 3.0+). | OPEN 15,8,15,"D1=0":CLOSE 15
|
@D1=0
|
BACKUP D0 TO D1
|
Referenzen
- ↑ Sturdivant, Jerry A. (Februar–März 1985). «Schnellladen» . Commodore Power/Play 4 (1): 54 . Abgerufen am 7. Oktober 2018 .
- ↑ Brannon, Charles (Dezember 1983). "Horizonte: 64" . COMPUTE!'s Gazette (6): 178 . Abgerufen am 7. Oktober 2018 .
- ^ Anmut, Paul (1986). "Ein bizarrer Typ" . RUN Sonderausgabe 1987 (Peterborough, New Hampshire: CW Communications/Peterborough, Inc.) . Abgerufen am 7. Oktober 2018 .
- ^ abc Whittern , Charles H. ( Juli 1985). „SPEICHERN mit Exposed ersetzen!!“ . Der Transaktor 6 (1): 20.
- ↑ „Die große Commodore Save/Replace-Debatte“ . Berechnen! . Februar 1985. p. 10 . Abgerufen am 6. Oktober 2013 .
- ^ a b Slaymaker, PA (Oktober 1985). "Speichern mit Ersetzen: Endlich debuggt / Teil 1" . Berechnen! . p. 79 . Abgerufen am 16. Oktober 2013 .
- ^ Slaymaker, PA (November 1985). "Speichern-mit-Ersetzen: Endlich debuggt / Teil 2" . Berechnen! . p. 111 . Abgerufen am 30. Oktober 2013 .
- ↑ Verlage. "Save@: Gerry Neufields Theorie über einen alten Käfer." Info Nr. 9, Dezember 1985/Januar 1986.
- ↑ Auszug aus einer E-Mail von Philip A. Slaymaker , ebenfalls archiviert bei Groups.Google
- ↑ Philip A. Slaymaker. "Beseitigung von SAVE@ und anderen 1541-Fehlern." The Transactor Vol. 7 № O2, September 1986, p. 33–35.
- Noten
- Immers, Richard; Neufeld, Gerald G. (1984). Innerhalb von Commodore DOS. Das vollständige Handbuch zum 1541-Festplattenbetriebssystem. DATAMOST, Inc & Reston Publishing Company, Inc. (Prentice-Hall). ISBN 0-8359-3091-2 .
- Englisch, Lothar; Szczepanowski, Norbert (1984). Die Anatomie des 1541-Diskettenlaufwerks. Grand Rapids, MI: Abacus Software (übersetzt aus der deutschen Originalausgabe von 1983, Düsseldorf: Data Becker GmbH). ISBN 0-916439-01-1 .
- Lundahl, Reijo (1986). 1541-Levyasema . Amersoft. ISBN 951-35-3206-2 (auf Finnisch).
Externe Links
- Dieses Werk enthält eine vollständige Übersetzung von „ Commodore DOS “ aus der englischen Wikipedia, veröffentlicht von seinen Herausgebern unter der GNU-Lizenz für freie Dokumentation und der Creative Commons Attribution-ShareAlike 3.0 Unported License .