Ich versuche, meinen eigenen Bootloader zu bauen, lädt dann wechselt vom Real-Modus in den geschützten Modus, lädt den GDT-Deskriptor und ruft dann einige Phase 2-Code. Da ich keine gute Möglichkeit finde, meine Programme zu debuggen, war es ein harter Kampf, die Dinge zum Laufen zu bringen. Aus irgendeinem seltsamen Grund schlägt mein Code fehl, den zweiten Sektor meines Bootloaders in Speicher unter 0x1000
Adresse zu lesen. Ich habe versucht, die int 0x13
mit al = 0x01
, die eine Get Status of Last Drive Operation
Interrupt ist. Es gibt 0x01
zurück, was Invalid Command
bedeutet, was mich weiter verwirrt.Laden Sektor von Boot-Image schlägt in Bootloader
mov ah, 0 ;reset drive
int 0x13
or ah, ah ;check for error
jnz err ;error handling function (prints ASCII A)
mov ax, 0
mov es, ax
mov bx, 0x1000 ;read sector into 0000:0x1000
mov ah, 0x02 ;read sector
mov al, 1 ;# of sectors to read = 1
mov ch, 0 ;Cylinder = 0
mov cl, 0x02 ;Sector to read = 2 (second as first sector is this code)
mov dh, 0 ;head = 0
;dl should equal the drive number as BIOS automatically detects it
int 0x13
or ah, ah
jnz err ;check for error again (this is where the error occurs)
Wenn der Computer gestartet wird, wie ich höre, dass das BIOS den Laufwerksbuchstaben in das dl
Register platziert, so dass alle meine Interrupts sollte auf dem richtigen Laufwerk durchgeführt werden. Ich habe sogar versucht, dl
auf 0x00
zu setzen, was gleich dem Diskettenlaufwerk A:
wäre, und in BOCHS (CPU-Emulator) setze ich das Diskettenlaufwerk A:
auf mein Boot-Image und es würde immer noch nicht booten. Gibt es einen Grund, warum QEMU und BOCHS den Code nicht korrekt emulieren? Ich muss noch versuchen, dies auf einen USB zu brennen und es von einem Live-BIOS zu booten. Ich werde meinen vollständigen Code here veröffentlichen, damit Sie es bei Bedarf überprüfen können. Ich entschuldige mich, wenn ich nicht klar genug bin, bin ich Anfänger bei OS-Entwicklung. Danke vielmals!
Bearbeiten: Betriebssystem: Windows 7 x64 (Entwicklung von x32 OS) Emulation: BOCHS mit boot.img von NASM-Compiler erstellt.
Habe ich Ihre Frage beantwortet? – Stewart
@Stewart Ich schreibe meinen Bootloader um, damit ich ihn testen kann. Ich werde zurückkommen und akzeptieren, sobald ich deinen neuen Code darin einfüge. Mach dir keine Sorgen :) – user99545