Diese Datei enthält den Treiber für den Floppy-Disk-Controller (FDC)
Mehr ...
#include <cmos.h>
#include <stdint.h>
#include <fdc.h>
#include <stdio.h>
#include <io.h>
#include <dma.h>
gehe zum Quellcode dieser Datei
Funktionen |
void | set_drive (uint8_t drive) |
| Diese Funktion setzt das aktuelle Floppy-Laufwerk.
|
void | fdc_start_motor (uint8_t drive) |
| Diese Funktion setzt sowohl das Laufwerk und starte direkt den Motor des Laufwerks.
|
void | fdc_stop_motor (uint8_t drive) |
| Diese Funktion stoppt den Motor des angegebenen Laufwerks.
|
void | fdc_send_command (uint8_t cmd) |
| Diese Funktion ist zum Senden von Kommandos an den FDC da.
|
uint32_t | fdc_send_data (uint8_t data) |
| Diese Funktion sendet Daten an den FDC. Dabei müssen diese aus Toleranzgründen mehrmals verschickt werden.
|
uint32_t | fdc_read_data () |
| Die Funktion liest Daten von dem FDC aus. Auch hier muss aus Toleranz-Gründen die Anweisung zum Lesen der Daten mehrfach verschickt werden.
|
uint8_t | copy_sector (uint8_t drive, uint8_t head, uint8_t cylinder, uint8_t sector, void *buffer, bool write) |
| Diese Funktion kopiert einen ganzen Sektor von RAM zu Floppy und umgekehrt.
|
void | fdc_seek (uint8_t cylinder, uint8_t head, uint8_t drive) |
| Diese Funktion positioniert den Lese/Schreibkopf des Floppy-Laufwerks über dem richtigen Cylinder.
|
uint8_t | check_fdc_itr () |
| Diese Funktion überprüft den Interrupt-Status, nachdem der Interrupt 6 wieder aufgetreten ist.
|
void | show_floppys () |
| Diese Funktion zeigt die angeschlossenen Floppy-Laufwerke an.
|
Variablen |
uint16_t | curr_cylinder |
| Diese Variable enthält die Nummer des aktuellen Cylinders, damit nicht unnötigerweise gewechselt werden muss.
|
Ausführliche Beschreibung
Diese Datei enthält den Treiber für den Floppy-Disk-Controller (FDC)
Definiert in Datei fdc.c.
Dokumentation der Funktionen
Diese Funktion überprüft den Interrupt-Status, nachdem der Interrupt 6 wieder aufgetreten ist.
- Rückgabe:
- Der Rückgabewert ist dabei das Status-Register 0
Definiert in Zeile 168 der Datei fdc.c.
Diese Funktion kopiert einen ganzen Sektor von RAM zu Floppy und umgekehrt.
Dabei wird zunächst der Motor des zu benutzenden Laufwerks gestartet. Danach muss noch der Lesekopf über den zu lesenden Cylinder positioniert werden. Nun muss beim DMA eine Datenübertragung mit Channel 2 (Floppy) und einer Größe von 512 Byte (ein Sektor) angemeldet und vorbereitet werden. Ist dies geschehen, wird der Befehl zum schreiben oder lesen von der Floppy an den FDC gesendet. Ist dieser erfolgreich angekommen, werden nach und nach die Informationen zum FDC gesendet: Laufwerk, Head, Cylinder, Head, Sektor, Sektorgröße, Letzter Sektor des Cylinders, GAP3 Länge, Datenlänge. Nun wird auf den Interrupt 6 gewartet, denn sobald dieser ausgelöst wurde, ist der Kopiervorgang vom FDC abgeschlossen und es werden die Ergebnisse empfangen: ST0 (Status*), ST1, ST2, Cylinder Head, Sektor, Sektorgröße. Nun kann der Motor wieder gestoppt werden.
- Parameter:
-
drive | Dieser Parameter enthält die Laufwerks-Nummer, von dem kopiert werden soll |
head | Dieser Parameter enthält die Head-Nummer, von dem kopiert werden soll |
cylinder | Dieser Parameter enthält die Cylinder-Nummer, von dem kopiert werden soll |
sector | Dieser Parameter enthält den Sektor, welcher kopiert werden soll |
buffer | Dieser Parameter enthält eine Adresse auf den Datenpuffer, welcher kopiert werden soll |
write | Dieser Parameter gibt an, ob von RAM zu Floppy oder umgekehrt geschrieben werden soll |
- Rückgabe:
- Als Rückgabewert erhält man 0, wenn es funktionierte, 1 wenn ein Fehler auftrat
Definiert in Zeile 114 der Datei fdc.c.
Die Funktion liest Daten von dem FDC aus. Auch hier muss aus Toleranz-Gründen die Anweisung zum Lesen der Daten mehrfach verschickt werden.
Gelesen werden darf erst, sobald das Input/Output-Bit im Status-Register des FDC gesetzt ist, ebenfalls muss das DataRegister-Bit gesetzt sein
- Rückgabe:
- Der Rückgabewert enthält den Wert, welcher der FDC auf seinem Stapel (kein LIFO!) oben aufliegen hat
Definiert in Zeile 83 der Datei fdc.c.
Diese Funktion positioniert den Lese/Schreibkopf des Floppy-Laufwerks über dem richtigen Cylinder.
- Parameter:
-
cylinder | Dieser Parameter enthält den Cylinder, über den der Lese/Schreibekopf positioniert werden soll |
head | Dieser Parameter enthält die Head-Nummer |
drive | Dieser Parameter enthält die Laufwerks-Nummer des FDC |
Definiert in Zeile 152 der Datei fdc.c.
void fdc_send_command |
( |
uint8_t |
cmd | ) |
|
Diese Funktion ist zum Senden von Kommandos an den FDC da.
- Parameter:
-
cmd | Dieser Parameter enthält ein Kommando an den FDC, welches gleich mit fdc_send_data weitergesendet wird |
Definiert in Zeile 50 der Datei fdc.c.
Diese Funktion sendet Daten an den FDC. Dabei müssen diese aus Toleranzgründen mehrmals verschickt werden.
Gesendet werden darf erst, sobald das Input/Output-Bit im Status-Register des FDC gelöscht ist und das DataRegister-Bit gesetzt ist.
- Parameter:
-
data | Dieser Parameter enthält die Daten, welche zum FDC gesendet werden |
- Rückgabe:
- Als Rückgabewert wird 0 geliefert, wenn alles funktioniert hat. Wenn es nicht funktioniert hat, wird 1 zurückgegeben
Definiert in Zeile 62 der Datei fdc.c.
void fdc_start_motor |
( |
uint8_t |
drive | ) |
|
Diese Funktion setzt sowohl das Laufwerk und starte direkt den Motor des Laufwerks.
- Parameter:
-
drive | Dieser Parameter enthält die Nummer des zu startenden Floppy-Laufwerks |
305 Milisekunden als Toleranzzeit zum Starten des Motors
Definiert in Zeile 29 der Datei fdc.c.
void fdc_stop_motor |
( |
uint8_t |
drive | ) |
|
Diese Funktion stoppt den Motor des angegebenen Laufwerks.
- Parameter:
-
drive | Dieser Parameter enthält die Laufwerks-Nummer des zu stoppenden Laufwerks |
Definiert in Zeile 41 der Datei fdc.c.
Diese Funktion setzt das aktuelle Floppy-Laufwerk.
- Parameter:
-
drive | Dieser Parameter enthählt die Laufwerk-Nummer, welche gesetzt werden soll |
Definiert in Zeile 22 der Datei fdc.c.
Diese Funktion zeigt die angeschlossenen Floppy-Laufwerke an.
Dabei wird über den CMOS überprüft, ob überhaupt ein Floppy-Laufwerk angeschlossen ist und wenn dem so ist, wie viele von welchem Typ die angeschlossenen Floppy-Laufwerke sind.
Definiert in Zeile 181 der Datei fdc.c.
Variablen-Dokumentation
Diese Variable enthält die Nummer des aktuellen Cylinders, damit nicht unnötigerweise gewechselt werden muss.
Definiert in Zeile 15 der Datei fdc.c.