Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: thetrue am 12. August 2006, 15:32

Titel: DMA und FDC
Beitrag von: thetrue 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 ???
Titel: Re: DMA und FDC
Beitrag von: bluecode 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.
Titel: DMA und FDC
Beitrag von: thetrue am 12. August 2006, 15:42
ahh, danke :)