Bootloader - Ladeproblem
-
Hallo, hoffe es ist okay, dass ich hier eine Frage stelle, obwohl das nichts mit eurem PrettyOS zu tun hat?
Falls nicht, bitte einfach löschen...Also, ich habe mir auch mal vorgenommen, etwas OS ähnliches zu basteln. Ich möchte von fast Null anfangen, deswegen tüftel ich gerade an einem Bootloader, welcher in den MBR der Festplatte kommt und der dann meine FAT32-Partition mit dem nächsten Bootloader läd...
Zunächst einmal ein paar Infos: Ich benutze einen USB-Stick, welcher eine FAT32-Partition besitzt, welche als "bootable" markiert ist...
Zum kompilieren verwende ich momentan NASM.
Als Emulator verwende ich QEMU (bin unter Ubuntu unterwegs), als "echten" PC meinen Laptop.So, nun zum Problem. Mein Bootloader kopiert sich selbst zunächst einmal aus dem Weg. Dann liest er den 1. Sektor der Festplatte ein und sucht den CHS-Eintrag der Partitionstabelle für die FAT-32 Partition.
Anschließend wird der 1. Sektor der Partition nach 0x7C00 geladen... und dann beginnt das Problem. Zum Testen versuche ich anschließend, den OEM-Namen auszugeben, welcher theoretisch jetzt bei 0x7c00 + 3 liegen sollte. Im Emulator funktioniert das auch, versuche ich das am echten PC, kommt im besten Fall Müll heraus.
Hier der relevante Code:[ORG 0x8000] ; Bootloader nach 0x8000 verschieben... ; ... ; ... ; Partitionstabelle parsen und nach dem bootable Flag (0x80) suchen. ; DI zeigt nun genau auf den CHS-Eintag für den ersten Sektor der Partition mov AH, [DI] ; head mov BL, [DI+1] ; sector mov BH, [DI+2] ; cylinder / track mov AL, 1 mov CH, BH mov CL, BL mov DH, AH mov BX, 0x7C00 mov AH, 2 mov DL, [g_BootDrive] int 0x13 jnc .finish ; ... .finish: mov SI, 0x7C00 add SI, 3 call rmPrintString16 ; Emulator sagt "mkdosfs", PC sagt null...
Mit freundlichen Grüßen!
-
Hallo,
ich habe leider keine Lösung für den Threadstarter, aber eine weitere Frage:
Mit welchem/welchen Bios-Interrupt(s) kann ich Bytes von der Festplatte/sonstigem Medium laden?
-
sorry-hab auch ne frage schrieb:
Mit welchem/welchen Bios-Interrupt(s) kann ich Bytes von der Festplatte/sonstigem Medium laden?
Hi, das siehst du sogar in meinem Code
int 0x13 wäre das
Kleiner Tipp, schau mal http://www.ctyme.com/intr/cat.htm
-
Hallo, hoffe es ist okay, dass ich hier eine Frage stelle, obwohl das nichts mit eurem PrettyOS zu tun hat?
Ja klar.
mov AH, [DI] ; head mov BL, [DI+1] ; sector mov BH, [DI+2] ; cylinder / track
Warum kopierst Du die werte nicht gleich an Ort und Stelle?
Ist das Register ES gesetzt? Die 0x13-funktion schreibt ja nach ES:BX...
-
Hi, hab das nur zur besseren Übersicht (für mich) in die Register geschoben, hatte keine tieferen Gründe.
ES ist 0.Gruß