Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Darkmonkey am 08. March 2008, 20:39
-
Hallo,
Ich möchte meinen Kernel vom Sektor 37 einlesen ich benutze diesen Code:
LoadKern:
mov ah, 0x02
mov al, 0x01
mov ch, 0x00
mov cl, 0x37
mov dh, 0x00
mov dl, 0x00
mov bx, 0x3025
mov es, bx
mov bx, 0x0000
r:
int 0x13
jc r
Wenn mein Kernel sich im Sektor 4 befindet funktionierts!
Hab ich beim Interrupt aufruf einen Fehler vieleicht mit der Spur?
2. Wenn das A20 Gate aktiviert ist welche Zahlen brauch ich für Segment:Offset um gleich hinter dem 1 Mb zu sein? (oxfffff:0x00000)
Danke
Darkmonkey
-
Hab ich beim Interrupt aufruf einen Fehler vieleicht mit der Spur?
Sektor 37 ist bei einer 1.44MB Diskette Spur 2, Kopf 0, Sektor 1 sowie ich das sehe. Insofern sollte
ch = 0x02
cl = 0x01
dh = 0x00
richtig sein. btw. 0x37 ist nicht 37 :wink:
2. Wenn das A20 Gate aktiviert ist welche Zahlen brauch ich für Segment:Offset um gleich hinter dem 1 Mb zu sein? (oxfffff:0x00000)
Naja, 0xFFFF als Segment und als Offset halt alles >= 0x10. Damit kannst du aber nur die ersten 64kB überhalt der 1MB Marke ansprechen, danach ist im real-mode Schluss.
edit: Im wiki ist übrigens ein Artikel (http://lowlevel.brainsware.org/wiki/index.php/CHS) der die Umwandlung von CHS in LBA beschreibt. Ich hab da jetzt nicht nachgeschaut in das mal so aus dem Kopf gemacht, deswegen schau dir lieber den Artikel an und rechne selbst nach. :mrgreen:
edit2: Ich stellt gerade fest, dass 1. die Rechnung die du suchst unter diesem Artikel (http://lowlevel.brainsware.org/wiki/index.php/Logical_Block_Addressing) stattdessen zu finden ist und 2. ich richtig gerechnet habe.
-
Danke
Gregor