Eigener Bootloader — Änderungen 7460 → 7461

Zeile 29: Zeile 29:
  
 
Manch einer würde hier jetzt die Frage stellen, ob es wirklich sinnvoll ist, auch den MBR zu entwickeln. Wie schon anfangs erwähnt, wollen wir den Bootloader im Detail verstehen können, also machen wir keine halben Sachen. Dennoch, ganz so verkehrt ist die Frage allerdings nicht, denn meine Disketten haben für gewöhnlich keinen MBR.
 
Manch einer würde hier jetzt die Frage stellen, ob es wirklich sinnvoll ist, auch den MBR zu entwickeln. Wie schon anfangs erwähnt, wollen wir den Bootloader im Detail verstehen können, also machen wir keine halben Sachen. Dennoch, ganz so verkehrt ist die Frage allerdings nicht, denn meine Disketten haben für gewöhnlich keinen MBR.
 +
 +
===Stage 0: Master-Boot-Record===
 +
Fangen wir mal klein an, oder besser gesagt bei Null, denn der MBR ist wirklich der kleinste Teil des Ganzen. Der Code des MBR macht nichts weiter als in der Partitionstabelle nach einer aktiven Partition zu suchen, dessen Bootsektor zu laden und die Kontrolle an diesen abzugeben.
 +
 +
Doch zuerst das wichtigste, was man über den MBR wissen sollte. Richtig, die Position und Struktur der Partitionstabelle. Aber die können wir hier im Lowlevel-Wiki nachschlagen.
 +
 +
Doch hier erst einmal etwas Starthilfe, ein MBR-Rohling.
 +
 +
<asm>
 +
;; !! Intel-Syntax (MASN) !!
 +
 +
;; Master-Boot-Record
 +
;; ==================
 +
 +
; Struktur der eines Partitionseintrages
 +
MBR_PART_ENTRY struct
 +
    Bootflag                db      ?
 +
 +
    BeginHead              db      ?
 +
    BeginCylinderHigh      db      ?
 +
    BeginCylinderLow        db      ?
 +
 +
    EndHead                db      ?
 +
    EndCylinderHigh        db      ?
 +
    EndCylinderLow          db      ?
 +
 +
    BeginLBA                dd      ?
 +
    SizeLBA                dd      ?
 +
MBR_PART_ENTRY ends
 +
 +
; Struktur der Partitionstabelle
 +
MBR_PART_TABLE struct
 +
    Partition1              MBR_PART_ENTRY <>
 +
    Partition2              MBR_PART_ENTRY <>
 +
    Partition3              MBR_PART_ENTRY <>
 +
    Partition4              MBR_PART_ENTRY <>
 +
MBR_PART_TABLE ends
 +
 +
 +
; MBR - Boot-Code
 +
.org 0                  ; Offset 0x0
 +
 +
;; << Hier kommt der Boot-Code rein >>
 +
 +
 +
; Partitionstabelle
 +
.org 01BEh              ; Offset 0x01BE
 +
PartitionTable          MBR_PART_TABLE <>
 +
 +
 +
; Boot-Signatur
 +
Sig                    dw      0AA55h      ; 0xAA55
 +
</asm>