Andreas Grögel <jul06@ag1.de> writes:
> Ist nicht blöde
- woher sollte ein externer DMA-Baustein denn
> überhaupt was von den Segmentregistern der CPU wissen? DMA arbeitet
> immer mit physikalischen, unsegmentierten Adressen,
Genau deswegen hätte ich ja erwartet, daß ich nicht auf die von der
CPU herrührende Segmentierung beschränkt bin. Ich habe angenommen,
daß der DMA controller mit 20 bit breiten physikalischen Adressen
arbeitet und daß ich problemlos über eine Adresse hinweg
lesen/schreiben kann, die ein Vielfaches von 64K ist.
> und ist im Falle dieses "antiken" ISA-DMA auf 64k-Alignment
> beschränkt.
Heißt das, man kann nicht einen track (18 Sektoren) von der floppy mit
einem BIOS-Aufruf beispielsweise an die Adresse 0x1FE00 lesen? Ich
muß also entweder mit einem BIOS-Aufruf von 0x1FE00 bis 0x1FFFF und
mit einem zweiten von 0x20000 bis 0x22200 lesen oder erst in einen
anderen Buffer lesen und dann an die Zieladresse verschieben?
Und wenn die Zieladresse z.B. 0x1FF00 sein soll, habe ich nur noch die
zweite Möglichkeit, weil ich schon einen Sektor nicht in den
Adreßbereich 0x1FF00 bis 0x200FF lesen kann?
Oh mann, ich staune immer wieder, wie krank diese ganze PC-Architektur
ist.
> Und erfahrungsgemäß überlassen es tatsächlich viele BIOSe dem
> Aufrufer, die Floppy-Zugriffe entsprechend auszurichten.
Ich habe erwartet, daß das BIOS die segmentierte Adresse in eine
20-Bit-Adresse umrechnet und dem Controller übergibt.
urs