Eine typische Definition eines Diskettenformats: BEGIN SUP3 Superbrain QD -- DSDD 48 tpi 5.25" DENSITY MFM,LOW COMPLEMENT CYLINDERS 35 SIDES 2 SECTORS 10,512 SIDE1 0 1,3,5,7,9,2,4,6,8,10 SIDE2 1 1,3,5,7,9,2,4,6,8,10 ORDER CYLINDERS BSH 4 BLM 15 EXM 1 DSM 169 DRM 63 AL0 080H AL1 00H OFS 2 END Die Definitionen sind schlüsselwortgesteuert, was bedeutet, dass einige Worte einen spezielle Bedeutung für die auswertenden Routinen haben. Jedes Schlüsselwort identifiziert den unmittelbar folgenden Wert. Folgenden Regeln gelten für den Aufbau einer Definition: (1) In den Definitionen ist Groß- bzw. Kleinschreibung egal. Ausdrücke und Schlsselworte können groß, klein oder gemischt geschrieben werden. (2) Leerzeichen, Tabulatoren und Zeilenende sind Trennzeichen, wobei manchmal ergänzend ein Komma benötigt wird. (3) Ein Ausdruck muss vollständig auf einer Zeile enthalten sein. Andrereseits werden Zeilenenden komplett ignoriert. Die einzige Ausnahme ist das Schlüsselwort NOTE, das veranlasst den Rest der Zeile zu ignorieren, und das Schlüsselwort BEGIN, bei dem der nach dem Diskettentyp bzw. "tag" folgenden Rest der Zeile als Beschreibung betrachtet wird. (4) Zahlen können dezimal, hexadezimal oder binär angegeben werden. Standardmäßig werden Dezimalzahlen verwendet und bestehen aus den Ziffern 0 bis 9. Hexadezimalzahlen beinhalten auch die Buchstaben A bis F, müssen aber mit einer Ziffer beginnen und mit "H" abgeschlossen werden. Binärzahlen, bestehend aus 0 und 1, werden mit einem angehängten "B" gekennzeichnet. Diese Konventionen decken sich mit denen in Assemblerquelltexten unter CP/M. (5) Leerzeilen können zur besseren lesbarkeit eingeschoben werden. BEGIN kennzeichnet den Anfang der Definition. Der erste Ausdruck nach dem Schlüsselwort ist der Name des Formates, bestehend aus ein bis vier Zeichen, über den diese Definition angesprochen werden kann. Das erste Zeichen muss ein Buchstabe sein, alle weiteren Buchstaben oder Zahlen. Der Rest der Zeile ist wie oben beschrieben als Kommentar gespeichert. DENSITY enthält zwei durch Komma getrennte Ausdrücke. Der erste ist ent- weder MFM für eine double-density (DD) Diskette oder FM für single density (SD). Der Diskettenkontroller muss FM unterstützen können, wenn wenn die FM-Option angegeben wird. Der zweite Ausdruck wird zur Wahl der Datenübertragungsrate auf PCs der AT-Klasse verwendet. LOW steht für 250 Kbps (DD) und HIGH für 500 Kbps (HD density). Wenn am PC-AT 1.2M 5.25" Disketten verwendet werden, bedeutet LOW 300 Kbps statt 250 Kbps. CYLINDERS gibt die Anzahl der Zylinder an. Ist die Angabe kleiner als 50, so werden quad-density (80 track)-Laufwerke mit double-step gefahren. SKEW gibt optional den Interleavingfaktor für die Sektoren an. Wird die Angabe weggelassen, so werden die sektoren 1 zu 1 gelesen. SIDES gibt die Anzahl der Spuren oder Oberflächen pro Zylinder an und kann entweder 1 (SS) oder 2 (DS) sein, für single- bzw. double-sided. SECTORS gibt die sowohl die Anzahl Sektoren pro Spur als auch die Sektor- größe an, beide durch Komma getrennt. Die Angabe muss in einer Definition der Angabe SIDE1 oder SIDE2 vorangehen. COMPLEMENT kennzeichnet bestimmte Formate, die Daten in negierter Form aufzeichnen. Das Superbrain-Format ist das erste mit dieser Angabe. 22DISK wird damit angewiesen, die Daten vor dem Schreiben auf einen CP/M- Diskette ins Komplement zu übertragen. Wird die Angabe weggelassen, so wird im normalen Format geschrieben. ORDER weist 22DISK an, wie die Spuren in double-sided-Diskette zu be- handeln sind. In den meisten Formaten wird erst die eine und dann die zweite Seite beschrieben, bevor ein Spurwechsel erfolgt. Dennoch gibt es einige Diskettenformate, wie auch das CP/M-86 auf dem IBM PC, in denen erst alle Spuren einer Seite aufwärts und dann alle Spuren der anderen Seite abwärts beschrieben werden. Um anzugeben, dass zuerst der Zylinder erhöht wird und dann erts die Seite, gibt man CYLINDERS nach dem Schlüsselwort ORDER an, sonst SIDES. Standardmäßig wird ohne Angabe wie bei SIDES verfahren. Bei single-sided Medien hat die Angabe keine Auswirkung. SIDE1, das der Angabe von SECTORS folgen muss, spezifiert die Abfolge der Sektoren auf der ersten Seite, die seit CP/M 2.2 durch Software- Interleave nicht zwingend der Reihe nach kommen müssen. Der erste Aus- druck nach dem Schlüsselwort SIDE1 ist die logische Seitenkennung, die in jeder ID-Addressmarkierung dieser Diskette enthalten ist. Normaler- weise ist diese Zahl 0 für die erste Seite und 1 für die zweite. Einige Computer weichen jedoch davon ab, wie z.B. der Kaypro im obigen Beispiel, der auch auf der zweiten Seite 0 schreibt. Nach der Seiten- kennung folgt eine Liste mit Sektornummern in CP/M-Folge. Jede Zahl gibt den nächsten logisch zu adressierenden Sektor an. Die Sektornummern müssen durch Komma voneinander getrennt werden und die Anzahl muss mit der in SECTORS angegebenen übereinstimmen. SIDE2 wird nur für zweiseitige Disketten angegeben und ist vom Aufbau her gleich wie SIDE1, nur halt für die zweite Seite. LABEL wird nur zum Formatieren von Disketten angegeben. Der nachfolgende Ausdruck wird als Dateiname, erweitert mit ".LBL", verstanden. Nach dem Formatieren einer Diskette wird diese mit dem Inhalt der so bezeichneten Datei beschrieben, beginnend mit dem ersten Sektor. Wenn die Datenlänge der Datei kein ganzzahliges Vielfache der Sektorlänge ist, wird der letzte Sektor mit dem letzten byte der Datei gefüllt. Mit der Angabe von LABEL kann man also auch CP/M Systemdisketten erzeugen. Die übrigen Schlüsselwörter in der Definition entstammen dem CP/M Disk Parameter Block für diesen Diskettentype. Das "CP/M System Alteration Guide" enthält Details über die Bedeutung jeden einzelnen Feldes. Eine kurze Beschreibung wird hier wiedergegeben: BSH bezieht sich auf den "block shift" oder die Anzahl von "left shifts", die benötigt werden um eine "allocation block number" einer relativen Sektoraddresse zuzuordnen. BLM bezieht sich auf die Blockmaske oder Bitmaske, bestehend aus soviel Einsen, wie durch BSH angegeben wird. Zum Beispiel gehört zu BSH = 3 ein BLM von 7 (=0111H, 3 bits). EXM bezieht sich auf die erweiterterte Maske (extent mask), eine Bitmaske aus Einsen, die in delimiting extents, Gruppen von 128 128-byte Records verwendet wird (???). DSM bezieht sich auf die Gesamtzahl von Sektoren auf einer Diskette. Diese Größe wird, wie alle CP/M Systemvariablen in 128-byte- Sektoren angegeben. DRM bezieht sich auf die Gesamtzahl von Inhaltsverzeichniseinträgen, die auf der Diskette verfügbar ist und steht im Zusammenhang mit den Feldern AL0 und AL1. AL0 and AL1 bilden eine Bitmaske, beginnend mit dem höchstwertigen Bit im Byte AL0 und endend mit dem niederwertigsten Bit in AL1. Diese zwei Bytes bilden die ersten 16 Zuordnungsblöcke der Dis- kette ab. Ein Bit "1" zeigt einen reservierten Block in dieser Position an, normalerweise für das Inhaltsverzeichnis (s.o. DRM). OFS gibt die Anzahl der Systemspuren für CP/M und BIOS am Anfang an. SOFS gibt die Anzahl der Sektoren an, wenn für CP/M und keine voll- ständigen Spuren reserviert werden, wie z.B. beim Coleco Adam.