COBE 0.1 ALPHA
|
Diese Datei enthält die Prototypen zu dem FDC-Treiber. Mehr ...
#include <stdint.h>
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
#define | SRA 0x3F0 |
Status-Register A (read) | |
#define | SRB 0x3F1 |
Status-Register B (read) | |
#define | DOR 0x3F2 |
Digital-Output-Register (write) | |
#define | TDR 0x3F3 |
Tape-Drive-Register (read/write) | |
#define | MSR 0x3F4 |
Main-Status-Register (read) | |
#define | DRSR 0x3F4 |
Data-Rate-Select-Register (write) | |
#define | DR 0x3F5 |
Data-Register (read/write) | |
#define | DIR 0x3F7 |
Digital-Input-Register (read) | |
#define | CCR 0x3F7 |
Configuration-Control-Register (write) | |
#define | DOR_DMA_ON 0x8 |
DMA-Bit. | |
#define | DOR_NO_RESET 0x4 |
Kein Reset-Bit. | |
#define | MSR_IO_WRITE 0x40 |
Input/Output-Bit. | |
#define | MSR_DR_READY 0x80 |
DataRegister-Bit. | |
Funktionen | |
void | show_floppys () |
Diese Funktion zeigt die angeschlossenen Floppy-Laufwerke an. | |
void | fdc_start_motor (uint8_t) |
Diese Funktion setzt sowohl das Laufwerk und starte direkt den Motor des Laufwerks. | |
void | fdc_stop_motor (uint8_t) |
Diese Funktion stoppt den Motor des angegebenen Laufwerks. | |
uint32_t | fdc_send_data (uint8_t) |
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. | |
void | set_drive (uint8_t) |
Diese Funktion setzt das aktuelle Floppy-Laufwerk. | |
void | fdc_seek (uint8_t, uint8_t, uint8_t) |
Diese Funktion positioniert den Lese/Schreibkopf des Floppy-Laufwerks über dem richtigen Cylinder. | |
uint8_t | copy_sector (uint8_t, uint8_t, uint8_t, uint8_t, void *, bool) |
Diese Funktion kopiert einen ganzen Sektor von RAM zu Floppy und umgekehrt. | |
uint8_t | check_fdc_itr () |
Diese Funktion überprüft den Interrupt-Status, nachdem der Interrupt 6 wieder aufgetreten ist. | |
Variablen | |
uint8_t | irq6_fdc |
Diese Variable enthält die Statusinformationen, ob der Interrupt 6 ausgelöst wurde, oder nicht. |
Diese Datei enthält die Prototypen zu dem FDC-Treiber.
Definiert in Datei fdc.h.
uint8_t check_fdc_itr | ( | ) |
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.
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.
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 |
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.
Gelesen werden darf erst, sobald das Input/Output-Bit im Status-Register des FDC gesetzt ist, ebenfalls muss das DataRegister-Bit gesetzt sein
Diese Funktion positioniert den Lese/Schreibkopf des Floppy-Laufwerks über dem richtigen Cylinder.
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 |
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.
data | Dieser Parameter enthält die Daten, welche zum FDC gesendet werden |
void fdc_start_motor | ( | uint8_t | drive | ) |
void fdc_stop_motor | ( | uint8_t | drive | ) |
void set_drive | ( | uint8_t | drive | ) |
void show_floppys | ( | ) |