Floppy Disk Controller — Änderungen 7741 → 7752

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 ===
−
int 13, ah=8 oder CMOS
+
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 ===