Discussion:
Zugriff auf PCI-Karte (S-ATA) im Real Mode
(zu alt für eine Antwort)
Thomas Schachtner
2006-02-14 10:47:44 UTC
Permalink
Hallo Leute,

wahrscheinlich stelle ich hier eine ganz doofe Frage, aber ich weiss
leider nicht, wem/wo ich sie sonst stellen soll... Ich moechte ein
Programm schreiben, dass unter DOS Daten auf einen S-ATA-Controller
schreibt bzw. von diesem liest. Es handelt sich dabei (ich glaub, sogar
notwendigerweise...) um ein PCI-Geraet.

Ich habe eine BIOS-Funktion gefunden (INT 1Ah), mit der ich feststellen
kann, ob ein PCI-BIOS vorhanden ist und womit ich auch bestimmte Geraete
auswaehlen kann...
Wie kann ich aber, nachdem ich ein PCI-Geraet ausgewaehlt habe, diesem
Befehle uebermitteln? Muss ich dazu Zugriff auf 32-bit-Adressen haben,
oder kann ich da auch im Real-Mode vernuenftig arbeiten? (Mit Protected
Mode kenn ich mich naemlich nicht aus, wenn man da irgendwelche
Deskriptor-Tabellen festlegen muss usw... Und: Warum soll ich mir zwei
Probleme aufhalsen? Mir reicht schon das mit S-ATA ;-)

(Bei den "alten" IDE-Controllern war es ganz einfach: ein Satz an INs
und OUTs, die man an die IO-Adresse des Controllers geschrieben hat,
aber seit S-ATA ist das wohl nicht mehr so einfach, oder?) Ich hab auch
festgestellt, dass es wohl Karten gibt, die noch einen IO-Port
"emulieren"(?) und da kann man weiterhin mit INs und OUTs arbeiten.
Aber das funktioniert irgendwie nicht bei allen Karten. (Ich hab
gehoert, das seien Karten, die nur "AHCI" unterstuetzen...)

Kann mir da wer helfen?

Thomas
Ralf Bartzke
2006-03-27 20:14:12 UTC
Permalink
Post by Thomas Schachtner
Hallo Leute,
wahrscheinlich stelle ich hier eine ganz doofe Frage, aber ich weiss
leider nicht, wem/wo ich sie sonst stellen soll... Ich moechte ein
Programm schreiben, dass unter DOS Daten auf einen S-ATA-Controller
schreibt bzw. von diesem liest. Es handelt sich dabei (ich glaub, sogar
notwendigerweise...) um ein PCI-Geraet.
Ich habe eine BIOS-Funktion gefunden (INT 1Ah), mit der ich feststellen
kann, ob ein PCI-BIOS vorhanden ist und womit ich auch bestimmte Geraete
auswaehlen kann...
Wie kann ich aber, nachdem ich ein PCI-Geraet ausgewaehlt habe, diesem
Befehle uebermitteln? Muss ich dazu Zugriff auf 32-bit-Adressen haben,
Höchstwahrscheinlich. Die Hardwareadressen der PCI-Geräte liegen meines
Wissens normalerweise oberhalb des Arbeitsspeichers, oberhalb 2 GByte.
Post by Thomas Schachtner
oder kann ich da auch im Real-Mode vernuenftig arbeiten?
Wenn dies das BIOS (des PCI-Geräts) nicht für dich löst, vermutlich nicht.

(Mit Protected
Post by Thomas Schachtner
Mode kenn ich mich naemlich nicht aus, wenn man da irgendwelche
Deskriptor-Tabellen festlegen muss usw...
Man muss wohl, kann allerdings jene Deskriptor-Tabelle(n) einfach mit
NULL(en) initialisieren, falls man ein einfaches, flaches Speichermodell
als ausreichend empfindet.
Übrigens ist(war) es ein interessantes Problem, wie man die CPUs vom
Protected Mode wieder in den Real-Mode zurückschaltet, um zum DOS
zurückzukommen. Die i386-CPU hatte offiziell keinen Befehl dafür.

Und: Warum soll ich mir zwei
Post by Thomas Schachtner
Probleme aufhalsen? Mir reicht schon das mit S-ATA ;-)
(Bei den "alten" IDE-Controllern war es ganz einfach: ein Satz an INs
und OUTs, die man an die IO-Adresse des Controllers geschrieben hat,
aber seit S-ATA ist das wohl nicht mehr so einfach, oder?)
Die IN und OUT-Befehle der CPU's werden meines Wissens aus
Kompatibilitätsgründen künstlich gebremst und sind für moderne Hardware
zu langsam.

Ralf
Jan Bruns
2006-03-27 21:04:01 UTC
Permalink
Post by Ralf Bartzke
Übrigens ist(war) es ein interessantes Problem, wie man die CPUs vom
Protected Mode wieder in den Real-Mode zurückschaltet, um zum DOS
zurückzukommen. Die i386-CPU hatte offiziell keinen Befehl dafür.
Echt?
Ich glaube, das stimmt nicht.

Einfach das entsprechende Bit im Control-regiser wieder löschen,
dann Segmentregister neu laden, oder nicht?

Doch, ich gleube, so war das.

Gruss

Jan Bruns
Martin Wodrich
2006-03-28 07:53:01 UTC
Permalink
Post by Jan Bruns
Post by Ralf Bartzke
Übrigens ist(war) es ein interessantes Problem, wie man die CPUs vom
Protected Mode wieder in den Real-Mode zurückschaltet, um zum DOS
zurückzukommen. Die i386-CPU hatte offiziell keinen Befehl dafür.
Echt?
Ich glaube, das stimmt nicht.
Beim 286er war das allerdings schon so. Der einzige Weg zurück in den
Realmode war ein Reset. Man merkte aber schnell das man da etwas
vergessen hatte.
--
Mit freundlichen Grüßen,
Martin Wodrich
Dirk Wolfgang Glomp
2006-03-31 07:39:17 UTC
Permalink
Post by Martin Wodrich
Post by Jan Bruns
Post by Ralf Bartzke
Übrigens ist(war) es ein interessantes Problem, wie man die CPUs vom
Protected Mode wieder in den Real-Mode zurückschaltet, um zum DOS
zurückzukommen. Die i386-CPU hatte offiziell keinen Befehl dafür.
Echt?
Ich glaube, das stimmt nicht.
Beim 286er war das allerdings schon so. Der einzige Weg zurück in den
Realmode war ein Reset. Man merkte aber schnell das man da etwas
vergessen hatte.
Für beide(286/386) gab es doch einen inofiziellen Weg vom PM
nach RM, irgendwo habe ich diese Beispiele.
Dafür müßte ich allerdings kramen(ist schon so lange her).

Dirk

Dirk Wolfgang Glomp
2006-03-31 07:40:35 UTC
Permalink
Post by Ralf Bartzke
Höchstwahrscheinlich. Die Hardwareadressen der PCI-Geräte liegen meines
Wissens normalerweise oberhalb des Arbeitsspeichers, oberhalb 2 GByte.
Ich dachte eher oberhalb 3.5 GB.

Dirk
Loading...