Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: scales of justice am 16. June 2006, 15:32
-
Ich hab mit Tee-Jays Tutorial probiert in den Pmode zu springen,
aber irgendwie funzts nich:
www.zeit-fuers-ich.de/pmode.txt
er kommt zwar in den Pmode, aber der Jump
db 0xea
dw pmode
dw 0x0008
springt daneben, deswegen kommt dann lock prefix unallowed
Bochs zeigt allerdings an, ich bin an 0x0008:0x00000067 (das ist die richtige Adresse)
das heißt eigentlich es muss etwas in der GDT falsch eingetragen sein,ich find den Fehler aber nicht
-
An welche Adresse wurde der Code geladen? Bist du sicher, dass cs = 0x1000?
-
ja sollte, hat auch mit dem anderen Kernel im Rmode immer geklappt
hier mal der Bootloader code:
www.zeit-fuers-ich.de/boot.txt
aber der müsste eigentlich stimmen
-
Der Jump springt nicht daneben. Das Rumgefrickel in der GDT geht allerdings daneben. Warum weiss ich nicht. Such dir ein anderes Tutorial, irgendwie sind TeeJays Tutorials unausgereift.
-
ich hab as ganze jetzt nochmal anhand eines anderen Tutorials gemacht
das ergebnis ist aber genau das Gleiche
hab das Ganze jetzt direkt als Bootloader gemacht:
www.zeit-fuers-ich.de/bootloader.txt
diesmal berechne ich das Zeug für die GDT auch nicht zur Laufzeit
EDIT:
hmm, darf vielleicht das org 0x7c00 nicht da oben hin, weil das dann auch für den 32 Bit code unten gelten würde?
wenn ja, wie bau ich den 16 Bit Teil dann so um, dass er auch ohne funktioniert?
-
es muss:
lgdt [gdt_desc]
heissen.
außerdem empfehle ich xor ax, ax statt mov ax, cs.
edit: das org 0x7c00 muss da hin und gerade, dass es für den pmode teil auch gilt, sorgt dafür, dass es funktioniert.
-
ja stimmt das iwar falsch, das Ergebnis ist aber immernoch exakt das Gleiche
hab den neuen Code hochgeladen
ich installier mal die neue Version von Bochs, irgendwas stimmt da nicht...
-
lol, an bochs liegts nicht. du musst die interrupts im protected mode deaktivieren.