Autor Thema: ATA-Festplattenzugriff  (Gelesen 4820 mal)

Lion

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« am: 04. February 2012, 20:20 »
Hallo zusammen,

ich arbeite seit ein paar Monaten immer wieder an meinen OS...

Ich würde gerne irgentetwas auf der Festplatte lesen können....

ich habe mir einiges durchgelesen und bin total verwirrt... :?

Meine Frage: Womit fange ich an?

Als erstes muss ich doch einen Treiber zum einfachen Lesen von Bytes von der Festplatte hinbekommen oder?
...und ich bin jetzt mit der spärlichen Info:


Zitat
Kommandos

    LBA 28 Lesen: 0x20
    LBA 28 Schreiben: 0x30
    LBA 48 Lesen: 0x24
    LBA 48 Schreiben: 0x3

nicht wirklich zurechtgekommen...

Kann mir jemand vielleicht einen Tipp geben?

Bitte berücksichtigen, dass ich noch ziemlicher Anfänger bin und auch ganz sicher nicht nach Code bettele....  :-)

Vielen Dank im voraus...

Lion

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 04. February 2012, 20:59 »
Willkommen erstmal im Forum. :)

Wenn du nach dem Lesen fragst, nehme ich an, dass das mit der Erkennung schon soweit funktioniert? Die Informationen im ATA-Artikel im Wiki sind wirklich ein bisschen spärlich. Wenn ich mich nicht täusche, musst du erstmal ein paar Register setzen (LBA, Sektoranzahl und das richtige Gerät), anschließend schreibst du den READ-Befehl ins Command Register. Danach müsste das Laufwerk das Bit DRQ im Statusregister setzen, darauf musst du warten. Wenn es gesetzt ist, kannst du aus dem Datenregister die Daten lesen, und zwar wordweise (also 16-Bit-Portzugriffe).

Das alles wie gesagt rein aus dem Kopf, Details müsste ich nachschlagen. Auf Code verzichte im Moment mal, weil du das so wolltest. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Lion

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 04. February 2012, 22:29 »
Zitat
Wenn du nach dem Lesen fragst, nehme ich an, dass das mit der Erkennung schon soweit funktioniert?

Ehrlich gesagt: Nein... :)

Ich glaube mein größtes Problem ist einfach die Terminologie. Nur ein paar (dumme) Vcerständnisfragen:

- Das Datenregister über Kanal 1 ereiche ich über PORT 0x1F0, also inw(u16int) und outw(u16int) ?
- Wir reden bei alldem hier über den ProtectedMode, oder?
- Woher weiß ich, dass das Gerät, das ich erkannt habe z. B. meine Festplatte 1 und nicht Festplatte 2 oder die CD ist?
- Das Gerät das ich bei der Erkennung gefunden habe, schreibe ich vor dem Lesen in das Geräteauswahlregister, oder ?

Zitat
Danach müsste das Laufwerk das Bit DRQ im Statusregister setzen, darauf musst du warten.
-Mache ich am besten über Polling, oder?

Für Antworten wäre ich sehr dankbar.

Mfg

PS: Links wären gut. Google ist nicht immer mein Freund, wenn ich LL-Sachen suche...
« Letzte Änderung: 04. February 2012, 22:34 von Lion »

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 05. February 2012, 00:21 »
Hallo,

- Das Datenregister über Kanal 1 ereiche ich über PORT 0x1F0, also inw(u16int) und outw(u16int) ?
Ja.

- Wir reden bei alldem hier über den ProtectedMode, oder?
Spielt keine Rolle, weil es im Real- und Protected Mode gleich funktioniert. Allerdings kann man im Real-Mode auch den BIOS-Treiber benutzen.

- Woher weiß ich, dass das Gerät, das ich erkannt habe z. B. meine Festplatte 1 und nicht Festplatte 2 oder die CD ist?
Du wählst das primäre/sekundäre Gerät aus und schickst dann das IDENTIFY-Command an dahin. Dann weißt du, ob da was hängt (oder eben auch nicht).

- Das Gerät das ich bei der Erkennung gefunden habe, schreibe ich vor dem Lesen in das Geräteauswahlregister, oder ?
Auch schon zur Erkennung sendest du da vorher ein spezielles Byte hin.

Zitat
Danach müsste das Laufwerk das Bit DRQ im Statusregister setzen, darauf musst du warten.
-Mache ich am besten über Polling, oder?
Ja.

PS: Links wären gut. Google ist nicht immer mein Freund, wenn ich LL-Sachen suche...
Im Wiki-Artikel klickst du links auf "English" und landest im OSDev-Wiki. Da steht einiges mehr.

Gruß,
Svenska

 

Einloggen