| Zeile 1: | Zeile 1: | ||
| − | + | {{stub}} | |
| − | == Eigenschaften == | + | Der Floppy Disk Controller (FDC) ist ein Chip, der ein bis vier Disketten-Laufwerke ansteuern kann. |
| − | * DMA | + | |
| − | * | + | == Eigenschaften und Besonderheiten == |
| + | * Der FDC sendet [[IRQ]] 6, wenn z.B. eine Lese- oder Schreiboperation beendet ist | ||
| + | * Der FDC kann über [[DMA]] Daten direkt aus dem Speicher auf Diskette schreiben und anders herum. Dafür wird DMA Channel 2 verwendet | ||
| + | * Der FDC ist recht schlecht standardisiert, da verschiedene Hersteller unterschiedliche Funktionalitäten hinzugefügt haben. | ||
| + | * Bei allen Operationen, für die der Schreib-/Lesekopf bewegt werden muss, sollte eine Wartezeit eingehalten werden, bis die nächste Operation folgt, da insbesondere Disketten sehr langsame Zugriffszeiten besitzen. Bei Fehlen dieser Wartezeiten funktioniert der Treiber oft nur in Emulatoren, versagt aber auf echter Hardware! | ||
| + | * Der FDC kann nur Sektorangaben in [[CHS]] verarbeiten | ||
== Register == | == Register == | ||
| Zeile 204: | Zeile 209: | ||
: 11: D | : 11: D | ||
| − | ==Befehle== | + | CCR |
| + | Im CCR sind nur die Funktionen der ersten zwei Bits definiert (Bit 0 und Bit 1): | ||
| + | * 00 500 Kbps | ||
| + | * 10 250 Kbps | ||
| + | * 01 300 Kbps | ||
| + | * 11 1 Mbps | ||
| + | |||
| + | == Befehle == | ||
| + | === Senden von Befehlen === | ||
| + | Das Senden von Befehlen erfolgt in drei Phasen: | ||
| + | * Command-Phase: Der Befehl wird von der CPU an den FDC gesendet. Dafür werden die Daten wie weiter unten beschrieben in das Datenregister geschrieben. Vorher sollte getestet werden, ob dieses wirklich leer ist. | ||
| + | * Execution-Phase: Der Befehl wird vom FDC ausgeführt. Dabei sollte im Treiber eine Wartezeit eingehalten werden, da Diskettenlaufwerke sehr langsam sind. Bei einigen Befehlen wird die Execution-Phase zusätzlich durch das Senden eines IRQs beendet. | ||
| + | * Result-Phase: Bei einigen Befehlen liefert der FDC Daten zurück, z.B. ob der Befehl erfolgreich ausgeführt wurde. Diese müssen gelesen werden, damit erneut Befehle gesendet werden können. | ||
| + | |||
| + | === Allgemeine Parameter === | ||
| + | {| {{prettytable}} | ||
| + | ! Abkürzung | ||
| + | ! Beschreibung | ||
| + | ! Empfohlener Wert für 3,5" | ||
| + | |- | ||
| + | | MT | ||
| + | |Multitrack, Befehl wird auf beiden Seiten der Diskette ausgeführt | ||
| + | | | ||
| + | |- | ||
| + | | DTL | ||
| + | | Datenlänge | ||
| + | | 0xFF | ||
| + | |- | ||
| + | | N | ||
| + | | Sekorengröße, wobei 0=128Byte, 1=256Byte, 2=512Byte, ... | ||
| + | | 2 | ||
| + | |- | ||
| + | | Gap3 | ||
| + | | Abstand zwischen Sektoren (?) | ||
| + | | 27 | ||
| + | |- | ||
| + | | MFM | ||
| + | | High Density (HD) Mode | ||
| + | | 1 | ||
| + | |- | ||
| + | |SK | ||
| + | |Skip Mode, als gelöscht markierte Daten werden automatisch übersprungen | ||
| + | | ??? | ||
| + | |} | ||
| + | |||
| + | === Liste von Befehlen === | ||
| + | ''ich arbeite daran...'' | ||
| − | == | + | == Beispielcode == |
| − | == | + | === Erkennen von Diskettenlaufwerken === |
| + | int 13, ah=8 oder CMOS | ||
| + | === Daten/Befehle schreiben === | ||
| + | === Daten lesen === | ||
| + | === Initialisierung === | ||
| + | === Auf Diskette schreiben === | ||
| + | === Von Diskette lesen === | ||
== Siehe auch == | == Siehe auch == | ||