Autor Thema: Bootloader teilen  (Gelesen 6142 mal)

TPSeverino

  • Beiträge: 33
    • Profil anzeigen
Gespeichert
« am: 01. March 2005, 20:52 »
Da mir die 512 Bytes für den Bootloader nicht ausreichen bevor ich in den PMode schalte, will ich meinen Bootloader teilen. Der erste Teil lädt (unter anderem :-) ) den Code des zweiten Teils des Bootloaders in den Speicher und führt in aus. Im zweiten Teil soll der PMode aktiviert werden. Nun funktioniert der Code, welcher vor dem Teilen funktioniert hat, nicht mehr.
Ich denke es liegt daran dass die Adresse der GDT nicht mehr stimmt...
Hier der Code des zweiten Teils meines Bootloaders, welcher in den PMode schalten soll. Er liegt an 1000h:0000h im Speicher.


cli                      
call _enable_a20

xor ax ,ax
mov ax, ds

gdt [gdt_descriptor]

mov eax, cr0
or eax, 1
mov cr0, eax

jmp gdt_code:_init

[bits 32]

_init:

mov ax, 10h
mov ds, ax
mov es, ax
mov ss, ax
mov esp, 090000h

jmp $

; Es folgen Funktionen und Variablen


THX

Ironfoot

  • Beiträge: 6
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 01. March 2005, 21:00 »
wenn du den Code mit nasm compilierst, solltest du


[ORG 0x10000]


davor schreiben. Sollte dann auch die Richtige Adresse für die GDT haben.

TPSeverino

  • Beiträge: 33
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 01. March 2005, 21:19 »
Hab beide geändert. Sobald der Far-Jump gemacht wird, bricht BOCHS mit dem Fehler "3rd (13) exception without resolution" ab ....

Ironfoot

  • Beiträge: 6
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 01. March 2005, 21:22 »
@blueXseven:
Warum sollte er den Wert des Datensegments nach AX speichern, und diesen dann in ES und SS ablegen?

TPSeverino

  • Beiträge: 33
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 01. March 2005, 21:48 »
so hab ich das auch verstanden... ne ahnung woran es noch liegen könnte??

TPSeverino

  • Beiträge: 33
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 02. March 2005, 15:02 »
also für alle, die es interessiert... der Far-Jump ging an die falsche Stelle, deswegen ist er abgeschmiert.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #6 am: 02. March 2005, 16:35 »
ein tipp an alle: baut eure GDT-Pointer in den 0-Deskriptor ein, funktioniert bei mir hervorragend und is schön leicht zu handhaben! und spart noch 3 bytes  8)
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

 

Einloggen