Das Schneider CPC Systembuch

Das Innenleben der CPC-Rechner

Der FDC 765

Organisation einer Spur durch den FDC 765

Der Unterschied zwischen einer nagelneuen und einer formatierten Diskette ist ganz beträchtlich: Schmuecken sich einige Hersteller mit der Bezeichnung '250 kByte Datenkapazität pro Das Identifikationsfeld in jedem Sektor: 2. DiskettenseiteDiskettenseite' so bleiben nach dem Formatieren davon nur noch genau 184320 Datentypen: Bytes
Datenbreite: Bytes
Bytes
übrig (wovon dann noch Inhaltsverzeichnis und Systemspuren abgehen). Immerhin ein glattes Viertel ist verschwunden.

Tatsächlich lassen sich bei den 3-Zoll-Laufwerken auf eine Das Identifikationsfeld in jedem Sektor: 2. DiskettenseiteDiskettenseite maximal 250000 Datentypen: Bytes
Datenbreite: Bytes
Bytes
unterbringen. Die sind aber nicht alle für Daten verfügbar. Die Formatierung selbst beansprucht eben auch Platz. Und, wie in den folgenden Tabellen zu sehen ist, ist der Verwaltungs-Overhead ganz beachtlich.

Eine Spur auf der Diskette
1. Index-Impuls markiert Spur-'Anfang'
2. Gap 4A - Preamble - 80 Bytes mit dem Wert &4E

Diese Lücke (Gap) soll den Unterschied zwischen verschieden justierten Lichtschranken bei anderen Laufwerken ausgleichen.

3. Spur-Header:
  1. Synchronisation - 12 Datentypen: Bytes
    Datenbreite: Bytes
    Bytes
    mit dem Wert &00
  2. Erklärungen zu den Anschlussbezeichnungen: INDEXIndex Address Mark - IAM - 3 Datentypen: Bytes
    Datenbreite: Bytes
    Bytes
  3. 1 Datentypen: Bytes
    Datenbreite: Bytes
    Byte
    &FC
4. Gap 1 - Spacing - 50 Bytes mit dem Wert &4E

Diese Lücke soll dem Floppy-Controller Zeit genug lassen, die IAM zu verarbeiten.

5. ---> Es folgen die SEKTOREN. <---
6. Gap 4B - Postamble - Bytes &4E bis zum Spur-Ende

Dieser Nachspann dient dazu, unterschiedliche Umdrehungsgeschwindigkeiten verschiedener Laufwerke auszugleichen. Die ICs im Überblick: Der FDC 765
Das Innenleben der CPC-Rechner: Der FDC 765
Der FDC
schreibt nach dem Formatieren des letzten Sektors so lange Datentypen: Bytes
Datenbreite: Bytes
Bytes
mit dem Wert &4LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
, bis ein neuer Impuls von der Indexloch-Lichtschranke eintrifft.

Ein Sekor in einer Spur
1. Identifikation - Sektor-ID
  1. Synchronisation - 12 Datentypen: Bytes
    Datenbreite: Bytes
    Bytes
    &00
  2. Identification Address Mark - IDAM - 3 Datentypen: Bytes
    Datenbreite: Bytes
    Bytes
  3. 1 Datentypen: Bytes
    Datenbreite: Bytes
    Byte
    &FE
  4. ---> Identification Field - Sector ID <---
  5. CRC Checksumme - 2 Datentypen: Bytes
    Datenbreite: Bytes
    Bytes
2. Gap 2 - 22 Bytes &4E

Diese Lücke lässt Die ICs im Überblick: Der FDC 765
Das Innenleben der CPC-Rechner: Der FDC 765
dem FDC
Zeit, die Sektor-ID zu bearbeiten.

3. Datenteil (endlich!)
  1. Synchronisation - 12 Datentypen: Bytes
    Datenbreite: Bytes
    Bytes
    &00
  2. Data Address Mark - DAM - 3 Datentypen: Bytes
    Datenbreite: Bytes
    Bytes
  3. 1 Datentypen: Bytes
    Datenbreite: Bytes
    Byte
    &FB
  4. Datenfeld:
    Es folgen soviele Datentypen: Bytes
    Datenbreite: Bytes
    Bytes
    , wie beim Formatieren der Spur für jeden Sektor
    festgelegt wurden.
  5. CRC Prüfsumme - 2 Datentypen: Bytes
    Datenbreite: Bytes
    Bytes
4. Gap 3 - 54 Bytes &4E

Diese Lücke muss die Toleranzen in der Rotationsgeschwindigkeit zwischen verschiedenen Laufwerken ausgleichen. Da der Datenteil eines Sektors (und nur dieser) beim Sektor-Schreiben neu beschrieben wird, können schneller drehende Drives einen längeren Kreisausschnitt beschreiben, als vorher formatiert wurde. Dann steht das neue Datenfeld hinten über. Wäre Gap 3 nicht, so würde die Synchronisation für den nächsten Sektor überschrieben.

Das Identifikationsfeld in jedem Sektor

Diese sogenannte Sektor-ID ist Bestandteil jedes Sektors und muss bei allen FDC-Befehlen, die mit Sektoren arbeiten, angegeben werden. Sie ist sowohl Bestandteil des Standard-Datenblocks der &X0ms00010 - ganze Spur lesen (READ TRACK): Befehlsphase:
&X00000011 - Laufwerksdaten festlegen (SPECIFY): Befehlsphase:
&X00000100 - Statusregister 3 abfragen (SENSE DRIVE STATE): Befehlsphase:
&Xtm000101 - Sektor(en) schreiben (WRITE SECTOR): Befehlsphase:
&Xtms00110 - Sektor(en) lesen (READ SECTOR): Befehlsphase:
&X00000111 - Spur 0 suchen (RECALIBRATE): Befehlsphase:
&X00001000 - Statusregister 0 abfragen (SENSE INTERRUPT STATE): Befehlsphase:
&Xtm001001 - gelöschte Sektoren schreiben (WRITE DELETED SECTOR): Befehlsphase:
&X0m001010 - Sektor-ID lesen (READ SECTOR ID): Befehlsphase:
&Xtms01100 - gelöschte Sektoren lesen (READ DELETED SECTOR): Befehlsphase:
&X0m001101 - eine Spur formatieren (FORMAT TRACK): Befehlsphase:
&X00001111 - Spur suchen (SEEK): Befehlsphase:
&Xtms10001 - Sektor(en) testen (SCAN EQUAL): Befehlsphase:
&Xtms11001 - Sektor(en) testen (SCAN LOW OR EQUAL): Befehlsphase:
&Xtms11101 - Sektor(en) testen (SCAN HIGH OR EQUAL): Befehlsphase:
Befehlsphase
als auch der Programmierung des FDC 765: 3. Ergebnisphase:
&X0ms00010 - ganze Spur lesen (READ TRACK): Ergebnisphase:
&X00000100 - Statusregister 3 abfragen (SENSE DRIVE STATE): Ergebnisphase:
&Xtm000101 - Sektor(en) schreiben (WRITE SECTOR): Ergebnisphase:
&Xtms00110 - Sektor(en) lesen (READ SECTOR): Ergebnisphase:
&X00001000 - Statusregister 0 abfragen (SENSE INTERRUPT STATE): Ergebnisphase:
&Xtm001001 - gelöschte Sektoren schreiben (WRITE DELETED SECTOR): Ergebnisphase:
&X0m001010 - Sektor-ID lesen (READ SECTOR ID): Ergebnisphase
&Xtms01100 - gelöschte Sektoren lesen (READ DELETED SECTOR): Ergebnisphase:
&X0m001101 - eine Spur formatieren (FORMAT TRACK): Ergebnisphase:
&Xtms10001 - Sektor(en) testen (SCAN EQUAL): Ergebnisphase:
&Xtms11001 - Sektor(en) testen (SCAN LOW OR EQUAL): Ergebnisphase:
&Xtms11101 - Sektor(en) testen (SCAN HIGH OR EQUAL): Ergebnisphase:
Ergebnisphase
.

Beim Formatieren einer Spur kann zu jedem Sektor das ID-Feld neu bestimmt werden. Da zum Lesen eines Sektors wieder die genaue Kenntnis des gesamten ID-Feldes nötig ist, kann man das mitunter benutzen, Geheim-Sektoren in einer Spur unterzubringen, um eine Diskette vor Raubkopierern zu schützen. Sehr wirkungsvoll ist das leider auch nicht, da man mit dem Befehl 'SECTOR ID LESEN' ziemlich sicher alle Sektoren auf einer Spur finden kann.

Das ID-Feld ist genau vier Datentypen: Bytes
Datenbreite: Bytes
Bytes
lang. Diese Datentypen: Bytes
Datenbreite: Bytes
Bytes
enthalten folgende Angaben:

1. Track - Cylinder - Spurnummer

Jede Spur kann unabhängig von ihrer tatsächlichen, physikalischen Lage eine 'logische' Spurnummer erhalten. So ist es beispielsweise möglich, die Datenspuren einer Diskette erst aber der physikalischen Spur 2 mit 0 beginnend durchzunummerieren, weil die äußeren beiden Systemspuren sind. Doppelseitige Disketten können eventuell so formatiert werden, dass auf der Vorderseite nur gerade und auf der Rückseite nur ungerade Spurnummern sind. In jedem Fall hängt es ausschließlich vom DOS (Disketten-Verwaltungsprogramm) ab, wie das es gerne haben will. Die Abteilungen des Betriebssystems: AmsdosAmsdos nummeriert die logischen Spurnummern in allen Diskettenformaten entsprechend ihrer physikalischen Lage ab 0 durch.

2. Diskettenseite

Wieder unabhängig von der tatsächlichen Das Identifikationsfeld in jedem Sektor: 2. DiskettenseiteDiskettenseite kann man hier eine logische Seitennummer eintragen. Meist wird man sich aber an das Head-Select-Bit in den FDC-Befehlen Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: Halthalten: Seite 1 erhält die Seitennummer 0, Seite 2 die Seitennummer 1. Unter Die Abteilungen des Betriebssystems: AmsdosAmsdos werden alle Sektoren mit der Seitennummer 0 formatiert.

3. Sektornummer

Oft ist es sehr nützlich, die Sektoren unabhängig von ihrer tatsächlichen Reihenfolge in der Spur durchnummerieren zu können. Mitunter kann man den Diskettenzugriff eines Programmes erheblich beschleunigen, indem man die Sektoren nicht nacheinander, sondern mit einem bestimmten Versatz aufbringt:

1-3-5-7-9-2-4-6-8 oder ähnlich.

Unter Die Abteilungen des Betriebssystems: AmsdosAmsdos werden die verschiedenen Amsdos: FormateFormate durch unterschiedliche Sektor-Nummern-Offsets markiert:

  • IBM-Sektoren gehen von 1 bis 8,
  • CP/M-Sektoren von &41 bis &49 und
  • Daten-Sektoren von &C1 bis &C9.

4. Sektor-Größe

Im Allgemeinen muss hier die Datentypen: Realreale Sektorgröße in der codierten Form angegeben werden, wie sie auch beim Formatieren benutzt wird. Gibt man jedoch eine Real: NullNull an, so wird die Größe durch das letzte Datentypen: Bytes
Datenbreite: Bytes
Byte
des Standard-Datenblocks der &X0ms00010 - ganze Spur lesen (READ TRACK): Befehlsphase:
&X00000011 - Laufwerksdaten festlegen (SPECIFY): Befehlsphase:
&X00000100 - Statusregister 3 abfragen (SENSE DRIVE STATE): Befehlsphase:
&Xtm000101 - Sektor(en) schreiben (WRITE SECTOR): Befehlsphase:
&Xtms00110 - Sektor(en) lesen (READ SECTOR): Befehlsphase:
&X00000111 - Spur 0 suchen (RECALIBRATE): Befehlsphase:
&X00001000 - Statusregister 0 abfragen (SENSE INTERRUPT STATE): Befehlsphase:
&Xtm001001 - gelöschte Sektoren schreiben (WRITE DELETED SECTOR): Befehlsphase:
&X0m001010 - Sektor-ID lesen (READ SECTOR ID): Befehlsphase:
&Xtms01100 - gelöschte Sektoren lesen (READ DELETED SECTOR): Befehlsphase:
&X0m001101 - eine Spur formatieren (FORMAT TRACK): Befehlsphase:
&X00001111 - Spur suchen (SEEK): Befehlsphase:
&Xtms10001 - Sektor(en) testen (SCAN EQUAL): Befehlsphase:
&Xtms11001 - Sektor(en) testen (SCAN LOW OR EQUAL): Befehlsphase:
&Xtms11101 - Sektor(en) testen (SCAN HIGH OR EQUAL): Befehlsphase:
Befehlsphase
bestimmt.

Valid HTML   Valid CSS