COBE 0.1 ALPHA

D:/COBE-Packet/cobe/system/fdc.h-Dateireferenz

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.

Ausführliche Beschreibung

Diese Datei enthält die Prototypen zu dem FDC-Treiber.

Definiert in Datei fdc.h.


Makro-Dokumentation

#define CCR   0x3F7

Configuration-Control-Register (write)

Definiert in Zeile 23 der Datei fdc.h.

#define DIR   0x3F7

Digital-Input-Register (read)

Definiert in Zeile 21 der Datei fdc.h.

#define DOR   0x3F2

Digital-Output-Register (write)

Definiert in Zeile 11 der Datei fdc.h.

#define DOR_DMA_ON   0x8

DMA-Bit.

Definiert in Zeile 25 der Datei fdc.h.

#define DOR_NO_RESET   0x4

Kein Reset-Bit.

Definiert in Zeile 27 der Datei fdc.h.

#define DR   0x3F5

Data-Register (read/write)

Definiert in Zeile 19 der Datei fdc.h.

#define DRSR   0x3F4

Data-Rate-Select-Register (write)

Definiert in Zeile 17 der Datei fdc.h.

#define MSR   0x3F4

Main-Status-Register (read)

Definiert in Zeile 15 der Datei fdc.h.

#define MSR_DR_READY   0x80

DataRegister-Bit.

Definiert in Zeile 31 der Datei fdc.h.

#define MSR_IO_WRITE   0x40

Input/Output-Bit.

Definiert in Zeile 29 der Datei fdc.h.

#define SRA   0x3F0

Status-Register A (read)

Definiert in Zeile 7 der Datei fdc.h.

#define SRB   0x3F1

Status-Register B (read)

Definiert in Zeile 9 der Datei fdc.h.

#define TDR   0x3F3

Tape-Drive-Register (read/write)

Definiert in Zeile 13 der Datei fdc.h.


Dokumentation der Funktionen

uint8_t check_fdc_itr ( )

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.

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.

Parameter:
driveDieser Parameter enthält die Laufwerks-Nummer, von dem kopiert werden soll
headDieser Parameter enthält die Head-Nummer, von dem kopiert werden soll
cylinderDieser Parameter enthält die Cylinder-Nummer, von dem kopiert werden soll
sectorDieser Parameter enthält den Sektor, welcher kopiert werden soll
bufferDieser Parameter enthält eine Adresse auf den Datenpuffer, welcher kopiert werden soll
writeDieser 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.

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

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.

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.

Parameter:
cylinderDieser Parameter enthält den Cylinder, über den der Lese/Schreibekopf positioniert werden soll
headDieser Parameter enthält die Head-Nummer
driveDieser Parameter enthält die Laufwerks-Nummer des FDC

Definiert in Zeile 152 der Datei fdc.c.

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.

Gesendet werden darf erst, sobald das Input/Output-Bit im Status-Register des FDC gelöscht ist und das DataRegister-Bit gesetzt ist.

Parameter:
dataDieser 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:
driveDieser 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:
driveDieser Parameter enthält die Laufwerks-Nummer des zu stoppenden Laufwerks

Definiert in Zeile 41 der Datei fdc.c.

void set_drive ( uint8_t  drive)

Diese Funktion setzt das aktuelle Floppy-Laufwerk.

Parameter:
driveDieser Parameter enthählt die Laufwerk-Nummer, welche gesetzt werden soll

Definiert in Zeile 22 der Datei fdc.c.

void show_floppys ( )

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 Statusinformationen, ob der Interrupt 6 ausgelöst wurde, oder nicht.

Definiert in Zeile 38 der Datei fdc.h.

 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Makrodefinitionen