Das Schneider CPC Systembuch

Anhang

Die Floppy

Portadressen zum Floppy-Controller

+------------------------------------+
| Ansteuerung der Laufwerks-Motoren: |
+------------------------------------+
| OUT &F8FF,0 -> Stoppe Motor        |
| OUT &F8FF,1 -> Starte Motor        |
+------------------------------------+
| Speicher und Peripherie: Reservierte und frei verfügbare I/O-AdressenI/O-Adressen Die ICs im Überblick: Der FDC 765
Das Innenleben der CPC-Rechner: Der FDC 765
des FDC
: | +------------------------------------+ | &Die Register des FDC: Das Haupt-Statusregister - INP(&FB7E)FB7E -> Haupt-Statusregister | | &FB7F -> Datenregister | +------------------------------------+

Die Register des FDC

Das Haupt-Statusregister - INP(&FB7E)
Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
7 - RQM - Request for Master Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
6 - DIO - Data Input/Output Das Haupt-Statusregister - INP(&FB7E): Bit 5 - EXM - Execution ModeBit 5 - EXM - Execution Mode Das Haupt-Statusregister - INP(&FB7E): Bit 4 - FCB - Floppy Controller BusyBit 4 - FCB - Floppy Controller Busy Das Haupt-Statusregister - INP(&FB7E): Bits 0-3 - FDB - Floppy Drive BusyBits 0-3 - FDB - Floppy Drive Busy
Das Statusregister 0
Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bits
7,6 - Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt Code 00 -> Kommando erfolgreich beendet 01 -> Kommando abgebrochen wegen Der Linien-Algorithmus: Fehler 3Fehler 10 -> ungültiges Kommando 11 -> Kommando abgebrochen weil Drive 'not Erklärung zu den Bezeichnungen: READY
Erklärungen zu den Anschlussbezeichnungen: READY
ready
' wurde Das Statusregister 0: Bit 5 = 1 -> Seek End auf einem DriveBit 5 = 1 -> Seek End auf einem Drive Das Statusregister 0: Bit 4 = 1 -> Fehler in der FloppyBit 4 = 1 -> Fehler in der Floppy Das Statusregister 0: Bit 3 = 1 -> Laufwerk ist nicht bereitBit 3 = 1 -> Laufwerk ist nicht bereit Das Statusregister 0: Bit 2 - HeadBit 2 - Head Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
1,0 - Unit Select
Das Statusregister 1
Das Statusregister 1: Bit 7 = 1 -> End of track errorBit 7 = 1 -> End of track error
Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
6 = 0 nicht benutzt Das Statusregister 1: Bit 5 = 1 -> CRC-Fehler im Daten- oder ID-FeldBit 5 = 1 -> CRC-Fehler im Daten- oder ID-Feld Das Statusregister 1: Bit 4 = 1 -> Puffer-ÜberlaufBit 4 = 1 -> Puffer-Überlauf Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
3 = 0 nicht benutzt Das Statusregister 1: Bit 2 = 1 -> Sektor nicht auffindbarBit 2 = 1 -> Sektor nicht auffindbar Das Statusregister 1: Bit 1 = 1 -> Diskette ist geschreibgeschützt.Bit 1 = 1 -> Diskette ist geschreibgeschützt. Das Statusregister 1: Bit 0 = 1 -> ID- oder Data Address Mark fehltBit 0 = 1 -> ID- oder Data Address Mark fehlt
Das Statusregister 2
Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
7 = 0 nicht benutzt Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
6 = 1 -> 'gelöschter' Sektor gefunden Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
5 = 1 -> Checksummenfehler im Datenteil eines Sektors Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
4 = 1 -> die logische Spurnummer aus der Sektor-ID stimmt nicht Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
3 = 1 -> Vergleich von Sektor- und Prozessor-Daten lieferte Gleichheit Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
2 = 1 -> Testbedingung im Scan-Kommando nicht erfüllt Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
1 = 1 -> Track enthält fehlerhafte Stellen. Nicht beschreiben! Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
0 = 1 -> Die Markierung für den Datenbereich war nicht auffindbar
Das Statusregister 3
Das Statusregister 3: Bit 7 = 1 -> Fehler-Flip-Flop gesetztBit 7 = 1 -> Fehler-Flip-Flop gesetzt
Das Statusregister 3: Bit 6 = 1 -> eingelegte Diskette ist schreibgeschütztBit 6 = 1 -> eingelegte Diskette ist schreibgeschützt
Das Statusregister 3: Bit 5 = 1 -> Laufwerk meldet 'ready'Bit 5 = 1 -> Laufwerk meldet 'ready'
Das Statusregister 3: Bit 4 = 1 -> Schreib-Lesekopf steht auf Spur Null (Track 0)Bit 4 = 1 -> Schreib-Lesekopf steht auf Spur Real: NullNull (Track 0)
Das Statusregister 3: Bit 3 = 1 -> Doppelkopf-LaufwerkBit 3 = 1 -> Doppelkopf-Laufwerk
Das Statusregister 0: Bit 2 - HeadBit 2 =      Head
Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
1 = Die Besonderheiten des FDC 765 im Schneider CPC: US1US1 Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
0 = US0

Programmierung des FDC

OUT Standard-Datenblock:
OUT &FB7F,Spurnummer         ; Sektor-ID-Information
OUT &FB7F,Kopfnummer         ; dito
OUT &FB7F,Sektornummere      ; dito
OUT &FB7F,Sektorgröße        ; dito
OUT &FB7F,logische letzte Das Identifikationsfeld in jedem Sektor: 3. SektornummerSektornummer der Spur
OUT &FB7F,Lücke zwischen Sektor-ID und Daten
OUT &FB7F,Sektorlänge wenn Sektorgröße = 0
INP Standard-Datenblock:
INP &FB7F,Statusregister 0
INP &FB7F,Statusregister 1
INP &FB7F,Statusregister 2
INP &FB7F,Spurnummer         ; Sektor-ID-Informationen
INP &FB7F,Kopfnummer         ; dito
INP &FB7F,Das Identifikationsfeld in jedem Sektor: 3. SektornummerSektornummer       ; dito
INP &FB7F,Sektorgröße        ; dito
Die Befehle des FDC:
&Die Befehle des FDC 765: &X0ms00010 - ganze Spur lesen (READ TRACK)X0ms00010 - ganze Spur lesen (READ TRACK)
&Die Befehle des FDC 765: &X00000011 - Laufwerksdaten festlegen (SPECIFY)X00000011 - Laufwerksdaten festlegen (SPECIFY)
&Die Befehle des FDC 765: &X00000100 - Statusregister 3 abfragen (SENSE DRIVE STATE)X00000100 - Statusregister 3 abfragen (SENSE DRIVE STATE)
&Die Befehle des FDC 765: &Xtm000101 - Sektor(en) schreiben (WRITE SECTOR)Xtm000101 - Sektor(en) schreiben (WRITE SECTOR)
&Die Befehle des FDC 765: &Xtms00110 - Sektor(en) lesen (READ SECTOR)Xtms00110 - Sektor(en) lesen (READ SECTOR)
&Die Befehle des FDC 765: &X00000111 - Spur 0 suchen (RECALIBRATE)X00000111 - Spur 0 suchen (RECALIBRATE)
&Die Befehle des FDC 765: &X00001000 - Statusregister 0 abfragen (SENSE INTERRUPT STATE)X00001000 - Statusregister 0 abfragen (SENSE INTERRUPT STATE)
&Die Befehle des FDC 765: &Xtm001001 - gelöschte Sektoren schreiben (WRITE DELETED SECTOR)Xtm001001 - gelöschte Sektoren schreiben (WRITE DELETED SECTOR)
&Die Befehle des FDC 765: &X0m001010 - Sektor-ID lesen (READ SECTOR ID)X0m001010 - Sektor-ID lesen (READ SECTOR ID)
&Die Befehle des FDC 765: &Xtms01100 - gelöschte Sektoren lesen (READ DELETED SECTOR)Xtms01100 - gelöschte Sektoren lesen (READ DELETED SECTOR)
&Die Befehle des FDC 765: &X0m001101 - eine Spur formatieren (FORMAT TRACK)X0m001101 - eine Spur formatieren (FORMAT TRACK)
&Die Befehle des FDC 765: &X00001111 - Spur suchen (SEEK)X00001111 - Spur suchen (SEEK)
&Die Befehle des FDC 765: &Xtms10001 - Sektor(en) testen (SCAN EQUAL)Xtms10001 - Sektor(en) testen (SCAN EQUAL)
&Die Befehle des FDC 765: &Xtms11001 - Sektor(en) testen (SCAN LOW OR EQUAL)Xtms11001 - Sektor(en) testen (SCAN LOW OR EQUAL)
&Die Befehle des FDC 765: &Xtms11101 - Sektor(en) testen (SCAN HIGH OR EQUAL)Xtms11101 - Sektor(en) testen (SCAN HIGH OR EQUAL)

Valid HTML   Valid CSS