COBE 0.1 ALPHA

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

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

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.

void fdc_send_command ( uint8_t  cmd)

Diese Funktion ist zum Senden von Kommandos an den FDC da.

Parameter:
cmdDieser Parameter enthält ein Kommando an den FDC, welches gleich mit fdc_send_data weitergesendet wird

Definiert in Zeile 50 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 Nummer des aktuellen Cylinders, damit nicht unnötigerweise gewechselt werden muss.

Definiert in Zeile 15 der Datei fdc.c.

 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Makrodefinitionen