DSK

Aus Deutsches CPCWiki
Wechseln zu: Navigation, Suche

Dateien mit der Endung DSK sind sogenannte Disketten-Images, also digitale Abbildungen von den Daten einer realen Diskette. Sie werden von CPC Emulatoren verwendet, aber es gibt sie auch auf Massen-Speicher-Medien. Und so können sie auch am CPC wieder auf physikalische Disketten zurückgeschrieben werden.

Erweiterte DSK-Image-Definition

Das erweiterte DSK-Image ist eine Datei zur Beschreibung kopiergeschützter Disketten-Software. Die Definition wurde von Marco Vieth, Ulrich Doewich und Kevin Thacker definiert.

Dieses Format ist weit verbreitet und eines der am häufigsten verwendeten Dateiformate für Disketten-Images. Das andere wichtige Format ist das Standard-Disk-Image Format mit der Kennung „MV – CPC“.

Das erweiterte Disk-Image-Format sollte für kopiergeschützte Disk-Software oder anstelle eines Standard-Disk-Images verwendet werden, wenn das resultierende Image kleiner als in der Standard-Disk-Image-Form ist. Es hat sich heute (2024) als Standard etabliert.

Erweitertes DiSK-Format (Revision 6)

Das Disc-Image hat das folgende Format:

Disk-Informations-Block (256 Bytes)
Track-Informations-Block * Anzahl der Tracks * Seitenanzahl

Die Speicher-Abschnitte der Tracks (Spuren) sind in aufsteigender Reihenfolge angeordnet. Der erste Track ist also Track #0, usw. bis zum Track der der Anzahl der Spuren entspricht. Wenn das Disc-Image eine doppelseitige Disc enthält, so sind die Daten der Disk-Seiten abwechselnd enthalten. Wenn das Disk-Image beispielsweise eine doppelseitige Disk darstellt, ist die Reihenfolge der Spuren: Spur 0, Seite 0 --> Spur 0, Seite 1 --> Spur 1, Seite 0 --> Spur 1, Seite 1 ... --> Letzte Spur (= Anzahl der Spuren-1), Seite 0 --> Letzte Spur (Anzahl der Spuren-1), Seite 1.

Die Tracks werden immer auf diese Weise sortiert, unabhängig vom Disc-Format, das im Disc-Image beschrieben wird.

Die Position des Track-Informations-Blocks wird mithilfe der Track-Größen-Tabelle ermittelt.

Disk-Informations-Block

Der Disk-Informations-Block befindet sich immer am Offset 0 in der Disk-Image-Datei und hat die folgende Struktur:

Offset Beschreibung Anzahl Bytes
&00 - &21 "EXTENDED CPC DSK File\r\nDisk-Info\r\n" 34
&22 - &2F Name des Erstellers (Programm/Emulator) 14
&30 Anzahl der Tracks 1
&31 Anzahl der Seiten 1
&32 - &33 Unbenutzt (Trackgröße bei normalem DSK) 2
&34 - &xx Track-Größen-Tabelle Anzahl der Tracks * Seitenzahl

Anmerkungen:

  • Ein erweitertes DSK-Image wird durch das Tag „EXTENDED“ identifiziert. Die Spurgröße bei Offset &32 und &33, die vom Standard-Disk-Image verwendet wird, wird für DSK-Images im erweiterten Format ignoriert.
  • Wenn Trackdaten vorhanden sind, beginnen sie bei Offset &0100.
  • Der „EXTENDED“-Tag ist vorhanden, um zu verhindern, dass vorhandene Emulatoren, die das Standard-DSK-Image unterstützen, die Daten falsch interpretieren und möglicherweise abstürzen.
  • „\r“ ist das Äquivalent der Programmiersprache C zum ASCII-Zeichen 13.
  • „\n“ ist das Äquivalent der Programmiersprache C zum ASCII-Zeichen 10.

Track-Größen-Tabelle

Offset Beschreibung Bytes
01 High-Byte der Länge von Spur 0 (entspricht Spurlänge/256) 1
... ... ...

Anmerkungen:

  • Abhängig von den Informationen im Disk-Informations-Block enthält die Tabelle
    • Spurlängen für eine einseitige Diskette
    • Spurlängen für eine doppelseitige Diskette
  • Spurlängen werden in der gleichen Reihenfolge wie die Spuren im Image gespeichert, z. B. im Fall einer doppelseitigen Festplatte: Spur 0, Seite 0  Spur 0, Seite 1  Spur 1, Seite 0 usw.
  • Eine Größe von „0“ weist auf eine unformatierte Spur hin. In diesem Fall gibt es keine Daten und keinen Track-Informations-Block für diesen Track des Image!
  • Tatsächliche Länge der Track-Daten = (High-Byte der Track-Länge) * 256
  • Die Track-Länge enthält die Größe des Track-Informations-Blocks (256 Byte).
  • Die Position eines Track-Informations-Blocks für einen ausgewählten Track wird ermittelt, indem die Größen aller Tracks bis zum ausgewählten Track plus die Größe des Disc-Informations-Blocks (&0100 Bytes) summiert werden. Der erste Track befindet sich im Disc-Image am Offset &0100.

Track-Informations-Block

Offset Beschreibung Bytes
&00 - &0B "Track-Info\r\n" 12
&0C - &0F ungenutzt 4
&10 Track-Nummer 1
&11 Seiten-Nummer 1
&12 - &13 ungenutzt 2
&14 Sektorgröße 1
&15 Anzahl der Sektoren 1
&16 GAP#3 Länge 1
&17 Füll-Byte 1
&18 - &xx Sektor-Informations-Tabelle xx

Anmerkungen:

  • Identisch mit der ursprünglichen DSK-Formatdefinition.

Sektor-Informations-Tabelle

Offset Beschreibung Bytes
&00 Track (entspricht dem C-Parameter in NEC765-Befehlen) 1
&01 Seite (entspricht dem H-Parameter in NEC765-Befehlen) 1
&02 Sektor-ID (entspricht dem R-Parameter in NEC765-Befehlen) 1
&03 Sektorgröße (entspricht N-Parameter in NEC765-Befehlen) 1
&04 FDC-Statusregister 1 (entspricht NEC765 ST1-Statusregister) 1
&05 FDC-Statusregister 2 (entspricht NEC765 ST2-Statusregister) 1
&06 - &07 Tatsächliche Sektor-Datenlänge in Bytes 2

Anmerkungen:

  • Identisch mit der ursprünglichen Definition, mit Ausnahme der angefügten Sektor-Datenlänge. Dieser Wert wird in Bytes angegeben und in Little-Endian-Notation gespeichert. (Low-Byte gefolgt von High-Byte)
  • Die Speicherposition der Daten eines jeden Sektors wird ermittelt, indem die Größe der vorherigen Sektoren plus die Größe des 256-Byte-Headers addiert wird.
  • Für 8 KB Sektoren (N="6") werden nur &1800 Bytes gespeichert. Bitte beachten Sie die Erweiterungen weiter unten!!!

Erweiterungen zur obigen Spezifikation

Erweiterung zum Track-Informations-Block:

Diese Erweiterung wurde von John Elliott vorgeschlagen.

Offset Beschreibung Bytes
&12 Datenrate (siehe folgende Anmerkungen) 1
&13 Aufnahmemodus (siehe folgende Anmerkungen) 1

Anmerkungen:

1. Die Datenrate definiert die Rate, mit der Daten auf die Spur geschrieben wurden. Dieser Wert gilt für die gesamte Spur.

Datenrate Beschreibung
0 Unbekannt
1 Einfache oder doppelte Dichte
2 Hohe Dichte
3 Erweiterte Dichte

Vorhandene Dateien sollten in diesen Bytes Nullen enthalten; daher die Verwendung von 0 für unbekannt.

2. Mit dem Aufzeichnungsmodus wird festgelegt, wie die Daten geschrieben wurden. Es definiert die Kodierung, die zum Schreiben der Daten auf die Disc verwendet wird, und die Struktur der Daten auf der Disc, einschließlich der Anordnung der Sektoren. Dieser Wert gilt für die gesamte Spur.

Datenrate Beschreibung
0 Unbekannt
1 FM
2 MFM

Vorhandene Dateien sollten in diesen Bytes Nullen enthalten; daher die Verwendung von 0 für unbekannt.

3. So ermitteln Sie die tatsächliche Datenrate. Der NEC765-Diskettencontroller wird mit einem einzigen Taktgenerator betrieben. Beim Lesen und Beschreiben einer Disc mit dem NEC765 können Sie zwischen den Aufnahmemodi FM und MFM wählen. Die Verwendung dieser Modi und der Takt im NEC765 bestimmen die endgültige Rate, mit der die Daten auf die Disc geschrieben werden. Wenn der MFM-Aufzeichnungsmodus verwendet wird, werden Daten mit einer Rate gelesen oder geschrieben, die doppelt so hoch ist wie bei der Verwendung von FM. Die Zeit für jedes Bit beträgt das Doppelte der Zeit für FM.

Beispiele:

NEC765 Takt FM/MFM Tatsächliche Rate
4 Mhz FM 4 us pro Bit
4 Mhz MFM 2 us pro Bit

8 KB Sektoren

Diese Erweiterung wurde von Simon Owen vorgeschlagen.

1. Es wurde festgestellt, dass viele Schutzmaßnahmen, die 8 KB-Sektoren (N="6") verwenden, mehr als &1800 Bytes nutzbarer Daten speichern. Man ging davon aus, dass &1800 die maximal nutzbare Grenze sei, aber das hat sich als falsch erwiesen. Daher sollten Sie 8 KB Daten unterstützen, um sicherzustellen, dass diese Daten korrekt gelesen werden. Die Größe des Sektors wird wie oben beschrieben in der SEKTOR-INFORMATION-TABELLE angegeben.

Für die Sektorgröße N="7" werden die vollen 16 KB gespeichert. Es wird davon ausgegangen, dass die Sektorgröße nur als 3 Bit definiert ist, sodass eine Sektorgröße von N="8" der von N="0" entspricht.

2. Speichern mehrerer Versionen schwacher/zufälliger Sektoren. Einige Kopierschutzprogramme enthalten sogenannte „schwache/zufällige“ Daten. Jedes Mal, wenn der Sektor gelesen wird, ändern sich ein oder mehrere Bytes. Der Wert kann zwischen aufeinanderfolgenden Lesevorgängen desselben Sektors zufällig sein.

Um diese Formate zu unterstützen, wurde die folgende Erweiterung vorgeschlagen. Wenn ein Sektor schwache/zufällige Daten enthält, werden mehrere Kopien gespeichert. Das Feld „tatsächliche Sektorgröße“ in der SEKTOR-INFORMATIONS-TABELLE beschreibt die Größe aller Kopien. Um festzustellen, ob ein Sektor über mehrere Kopien verfügt, vergleichen Sie das Feld für die tatsächliche Sektorgröße mit der durch den N-Parameter definierten Größe. Bei mehreren Kopien hat das Feld für die tatsächliche Sektorgröße einen Wert, der ein Vielfaches der durch den N-Parameter definierten Größe ist. Der Emulator sollte dann auswählen, welche Kopie des Sektors er bei jedem Lesevorgang zurückgeben soll.