Autor Thema: DMA und FDC  (Gelesen 4727 mal)

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« am: 12. August 2006, 15:32 »
tach,

ich habe mal wieder ne Frage.

wie Functioniert das ???

wenn ich nun die Bytes für die Read function sende 66h an 3F5h sende, dann muss ich doch die restlichen bytes, also Cylinder, Head, Sector etc senden. so. Aber was hat nun DMA damit zu tun? bzw woher soll DMA wissen das ich in diesem moment floppy lesen will ???
thetrue way is my way

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 12. August 2006, 15:41 »
Zitat von: thetrue
wenn ich nun die Bytes für die Read function sende 66h an 3F5h sende, dann muss ich doch die restlichen bytes, also Cylinder, Head, Sector etc senden. so.


Die restlichen Bytes werden der Reihenfolge nach in 0x3F5 geschrieben, wobei zu beachten ist, dass der floppy disk controller vor jedem Byte bereit ist. Das ist der Fall wenn im main status register das 7te bit gesetzt ist und das 6te Bit gelöscht ist. Ich würd mir am besten eine sendCmdByte() routine schreiben, die das übernimmt. Meine sieht so aus:

bool floppy::send(unsigned char byte)
{
for (unsigned int i=0;i < 10000;i++)
{
if ((in8(0x3F4) & 0xC0) == 0x80)
{
out8(0x3F5, byte);
return true;
}
}
return false;
}


Zitat
Aber was hat nun DMA damit zu tun? bzw woher soll DMA wissen das ich in diesem moment floppy lesen will ???

Du musst bevor du dem floppy disk controller die command bytes übergibst, den DMA channel 2 initialisieren. Der FDC sendet dann wenn er alle command bytes hat die Daten an den DMA Controller und der schreibt dann alles in den RAM.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #2 am: 12. August 2006, 15:42 »
ahh, danke :)
thetrue way is my way

 

Einloggen