Autor Thema: Sektor lesen funktioniert nicht!  (Gelesen 5294 mal)

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« am: 27. September 2007, 23:18 »
Hi,

ich habe eine Funktion geschrieben, die den ersten Sektor einer Festplatte lesen soll, die an ide0,0 hängt. Unter bochs und qemu funktioniert es. Aber unter Vmware, virtual PC und auf meinem PC net (ja da ist die Festplatte auch an ide0,0). Und ich weiß auch das es eine ATA (PATA) Festplatte ist. Muss ich eigentlich etwas mit dem IRQ14 machen? Hier der Code (was ist falsch):

mov dx,1F7h

.5:
in al,dx

test al,80h ;warten bis BSY gelöscht ist
jnz .5

;

;Anzahl der Sektore
mov dx,1F2h

;(7:0)
mov al,1
out dx,al

;Startsektor
mov dx,1F3h

;(7:0)
mov al,0
out dx,al

;(15:8)
mov dx,1F4h

mov al,0
out dx,al

;(23:16)
mov dx,1F5h

mov al,0
out dx,al

;


;Laufwerk
mov dx,1F6h

mov al,11100000b ;Bit7 und Bit5 müssen 1 sein und Bit4 = DRV
out dx,al ;DRV = 0 = master, Bit3-Bit0 = (LBA 27:24)


;Command
mov dx,1F7h

mov al,20h ;read sector(s)
out dx,al

mov ax,1000h ;daten nach 1000h:0000h
mov es,ax
xor di,di

;warten, bis BSY im Statusregister gelöscht und DRQ gesetzt ist
mov dx,1F7h

.4:
in al,dx

test al,80h
jnz .4

test al,08h
jz .4

;Daten übertragen
mov dx,1F0h

mov cx,256 ;und los geht's
rep insw

vielen dank schon mal

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

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 28. September 2007, 00:11 »
Aber unter Vmware, virtual PC und auf meinem PC net (ja da ist die Festplatte auch an ide0,0).
"Geht nicht" ist keine ausreichende Problembeschreibung.
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 #2 am: 28. September 2007, 12:40 »
Aber unter Vmware, virtual PC und auf meinem PC net (ja da ist die Festplatte auch an ide0,0).
"Geht nicht" ist keine ausreichende Problembeschreibung.
OK ok ok. Also ich lade ja wie der Code schon zeigt einen Sektor an Adresse es:di. Dann gebe ich diese 512 Bytes auf dem Bildschirm aus (habe ich nicht gepostet, aber an dem Teil liegt es ja nicht). Unter Bochs, Qemu und innotek VirtualBox stimmen die Daten mit dem Sektor auf der Festplatte überein (dank Hex Editor kann ich das sehen). Aber VMware, Virtual PC und mein Real PC kommen nur bis hier hin:

...

;warten, bis BSY im Statusregister gelöscht und DRQ gesetzt ist
mov dx,1F7h

.4:
in al,dx

test al,80h
jnz .4

test al,08h
jz .4      ;<- das Bit ist unter VMware, Virtual PC und auf meinem Real-PC immer gelöscht und somit kein Datenzugriff möglich

;Daten übertragen
mov dx,1F0h

mov cx,256 ;und los geht's
rep insw

...

So, die Fragen sind: Warum? Was mache ich falsch?

danke!!!

bitmaster

EDIT: Ach ja, wenn ich die Zeilen "test al,08h und jz .4" weg lasse, dann gibt virtual PC nur Nullen aus und VMware nur 0FFh (oder umgekehrt, weiß ich niet mehr so genau) und mein Real PC auch eins von beiden.
« Letzte Änderung: 28. September 2007, 12:42 von bitmaster »
In the Future everyone will need OS-64!!!

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 29. September 2007, 13:31 »
Hi

stellt VM - Ware die platte überhaupt als ata zur verfügung? ich hab mal versucht das einzustellen und hab gesehen, das er die als SCSI einbindet.

könnte der grund sein wieso es nicht tut.

gruss

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #4 am: 29. September 2007, 15:40 »
stellt VM - Ware die platte überhaupt als ata zur verfügung? ich hab mal versucht das einzustellen und hab gesehen, das er die als SCSI einbindet.
Man kann für Festplatten & für CD/DVD-Laufwerke sowohl ATA/ATAPI als auch SCSI auswählen.
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

 

Einloggen