Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: AndiDog 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?
-
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 (http://www.t13.org/).
-
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 ?
-
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.
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 (http://www.ata-atapi.com/). Da gibts nen public domain dos treiber.
Und welche Methode ist gut bei sehr großen Festplatten ?
Die direkt über ATA. Das was im CMOS steht geht da schonmal überhaupt nicht.
-
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
-
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
-
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 .
-
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
-
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"
-
Eine CDROM verwendet ATAPI, da kann man mit den normalen ATA Kommandos nichts lesen :wink:
-
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?
-
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!