| Zeile 213: | Zeile 213: | ||
: 11: D | : 11: D | ||
| − | === CCR === | + | ==== CCR ==== |
Im CCR sind nur die Funktionen der ersten zwei Bits definiert (Bit 0 und Bit 1): | Im CCR sind nur die Funktionen der ersten zwei Bits definiert (Bit 0 und Bit 1): | ||
: 00 500 Kbps | : 00 500 Kbps | ||
| Zeile 255: | Zeile 255: | ||
|SK | |SK | ||
|Skip Mode, als gelöscht markierte Daten werden automatisch übersprungen | |Skip Mode, als gelöscht markierte Daten werden automatisch übersprungen | ||
| − | | | + | | 1 |
|- | |- | ||
|Drive, Cylinder, Head, Sektor | |Drive, Cylinder, Head, Sektor | ||
| Zeile 508: | Zeile 508: | ||
== Beispielcode == | == Beispielcode == | ||
=== Erkennen von Diskettenlaufwerken === | === Erkennen von Diskettenlaufwerken === | ||
| − | + | Zum Erkennen von den an den Computer angeschlossenen Diskettenlaufwerken gibt es zwei Möglichkeiten: | |
| + | * Im Real Mode das BIOS fragen (in 0x13, ah=8), siehe dazu [[Interrupt 13h]] | ||
| + | * Im [[CMOS]] nachschauen (Offset 0x10), hier sind allerdings keine technischen Daten abfragbar, sondern nur der Typ des Laufwerks | ||
| + | |||
=== Daten/Befehle schreiben === | === Daten/Befehle schreiben === | ||
| + | Bevor man Daten bzw. Befehle ins Datenregister schreiben darf, muss man im MSR testen, ob das DIO-Bit gelöscht und das MRQ-Bit gesetzt ist. Erst dann ist das Datenregister leer und bereit Daten zu empfangen. | ||
| + | <c> | ||
| + | VOID send_command(BYTE cmd) | ||
| + | { | ||
| + | send_data(cmd); | ||
| + | } | ||
| + | |||
| + | VOID send_data(BYTE data) | ||
| + | { | ||
| + | BYTE status=0; | ||
| + | while ((status & MSR_MASK_MRQ) && !(status & MSR_MASK_DIO)) status=inb(MSR); | ||
| + | outb(DATAREG, data); | ||
| + | } | ||
| + | </c> | ||
| + | |||
=== Daten lesen === | === Daten lesen === | ||
| + | Ähnlich wie beim Senden von Daten muss beim Lesen das MRQ-Bit gesetzt und das DIO-Bit ebenfalls gesetzt sein. | ||
| + | |||
| + | <c> | ||
| + | BYTE read_data() | ||
| + | { | ||
| + | BYTE status=0; | ||
| + | while ((status & MSR_MASK_MRQ) && !(status & MSR_MASK_DIO)) status=inb(MSR); | ||
| + | return inb(DATAREG); | ||
| + | } | ||
| + | </c> | ||
| + | |||
=== Initialisierung === | === Initialisierung === | ||
=== Auf Diskette schreiben === | === Auf Diskette schreiben === | ||