Autor Thema: Festplattengeometrie im Protected Modus rausfinden  (Gelesen 11523 mal)

AndiDog

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« am: 30. September 2006, 15:20 »
Im Protected Modus kann ich ja int13/al=8 nicht verwenden.

Für Lesen und Schreiben von Sektoren habe ich schon ein Tutorial gefunden, aber wie kann ich die Festplattengeometrie (Größe, Sektoren pro Track....) rausfinden, indem ich Ports benutze?

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 30. September 2006, 15:57 »
Die BIOS interrupt informationen können auch aus dem CMOS ausgelesen werden. Ansonsten Hilft das ATA identify command (Opcode 0xEC). Da schaust du am besten in den ATA Specs.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

AndiDog

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 30. September 2006, 17:12 »
Ok danke. Über die CMOS-Register geht's eigentlich ganz einfach (wenn's jemanden interessiert: http://www.codepedia.com/1/CMOS_C).

Und wegen ATA: Ich hasse Seiten mit Tausenden von Whitepapers - wie soll ich denn da was finden?

Gibt's keine besseren Seiten dazu? Und welche Methode ist gut bei sehr großen Festplatten ?

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 am: 30. September 2006, 22:26 »
Und wegen ATA: Ich hasse Seiten mit Tausenden von Whitepapers - wie soll ich denn da was finden?

die ATA/ATPI 4 specs haben "nur" 274 Seiten. Also immer locker bleiben und ich hab dir eigentlich schon gesagt wonach du suchen musst ;)
Ansonsten schau mal unter
7.2 I/O Register Descriptions (Die genauen I/O Adressen musst dir dann woanders besorgen)
8.6 Identify Device
9.6 PIO data in commands
Damit sollte man hinkommen.

Zitat
Gibt's keine besseren Seiten dazu?
Für sowas google ;) Aber ich finds besser meinen ATA Treiber schritt für schritt selber zu bauen...
ansonsten vllt. ATA-ATAPI.com. Da gibts nen public domain dos treiber.

Zitat
Und welche Methode ist gut bei sehr großen Festplatten ?
Die direkt über ATA. Das was im CMOS steht geht da schonmal überhaupt nicht.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #4 am: 03. October 2006, 17:30 »
Zitat von: T0ast3r
Bei 48 Bit LBA ist eine Sektorangabe 48 Bit groß.
Man kann damit 512 TB adressieren.

Echt? Aber das wären 40 Bit, denn 48 Bit wären ja dann "128" PByte. Oder fallen da etwa Bits weg?

bitmaster
In the Future everyone will need OS-64!!!

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 04. October 2006, 12:56 »
Kleiner denkfehler die 512 byte je sektor sollte man nicht unterschlagen

Es sind somit 248 Sektoren = 256 * 240 = 256T Sektoren

Datengrösse selber liegt dann bei

248 * 512 = 248 * 2 9 = 248+9 = 257 = 27 + 250 = 128 * 250 = 128 PByte

Annahme bei 512 Byte je Wektor. Wobei sich das in zukunft ändern wird.

k = 210
M = 220
G = 230
T = 240
P = 250

Das die addresierung selber nur sektorgenau erfolgen kann sollte aber klar sein oder?

gruss

AndiDog

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 04. October 2006, 19:45 »
Danke für das Tutorial, werd es aber erst später ausprobieren können weil mein OS doch nicht so weit ist, wie ich dachte  :-D .

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 05. October 2006, 09:17 »
ich will ja nicht kleinlich sein ist aber wieder ein kleiner denkfehler drin

[256 TB * 512 B / 1024 = 128 PB]

es sind 256 T Sektoren nicht 256TB für mich steht das B für Byte und ist eine art Einheit.

gruss

AndiDog

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 08. October 2006, 20:42 »
Wo wir hier schonmal über Toaster's Tutorial diskutieren... ich hab entsprechend eine Funktion geschrieben, um den ersten Sektor eines IDE-Laufwerkes zu lesen.

Sie funktioniert auch perfekt. Wenn ich aber z.B. von Secondary Master lesen will, geht das (in Bochs!) nur von einer Festplatte (Imagedatei), nicht aber von einem CD-Laufwerk (ISO-Image).

Ich überprüfe dabei bei einem Fehler das Error-Register und es ist null !?


Ausschnitt Bochsscript:

ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata1-master: type=cdrom, path="img_cd0.iso", status=inserted, biosdetect=auto, model="Generic 1234"

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #9 am: 08. October 2006, 20:48 »
Eine CDROM verwendet ATAPI, da kann man mit den normalen ATA Kommandos nichts lesen :wink:
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

AndiDog

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 08. October 2006, 20:51 »
Zitat
Man verwendet das Packet Interface um removeable media devices (CD, DVD Laufwerke) besser ansprechen zu können.
Theoretisch ist es nämlich möglich den normalen Read Sector Befehl zu verwenden, allerdings gibt es da eine Menge zu beachten, und es wäre nicht die korrekte Methode.

Also mit PI-Befehlen (Packet Interface)... wie lautet dann der "Packet Command"-befehl den man senden muss?
« Letzte Änderung: 08. October 2006, 21:01 von AndiDog »

frizzz

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 19. October 2006, 01:03 »
Lade von meiner homepage:
www.rcfriz.de
mein FDOS runter und bringe es zum Laufen. Es bootet von FD und zeigt zur Begrüssung die IDE-drive-information als dump (kann auch hexadezimal gelesen werden mittels datei-dump - "FDOSdoc" lesen!)
Im sourcecode findest Du einen ausführlich kommentierten und vom Datenblatt ausgehend neu geschriebenen IDE-ATA-Treiber. In der beigepackten Datei "MEDIA" findest Du alles über den Umgang mit FD und HD (auf deutsch). Alles in der realen Umgebung ausgetestet!

 

Einloggen