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;
}
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.