Ausgabe 1 — Änderungen 1814 → 1847

Zeile 60: Zeile 60:
 
Zuerst einmal sucht das BIOS auf dem ersten Sektor von Diskette und Festplatte nach einer Binärdatei, die genau 512 Bytes (1 Sector) lang ist und am Ende das Wort 0x0AA55 enthält. Jetzt lädt das BIOS unseren Bootloader, wenn es ihn denn gefunden hat, an die Adresse 0x7C00. Damit alles so läuft, wie wir es uns gedacht haben, enthält die erste Zeile unseres Assemblercodes also den Code:
 
Zuerst einmal sucht das BIOS auf dem ersten Sektor von Diskette und Festplatte nach einer Binärdatei, die genau 512 Bytes (1 Sector) lang ist und am Ende das Wort 0x0AA55 enthält. Jetzt lädt das BIOS unseren Bootloader, wenn es ihn denn gefunden hat, an die Adresse 0x7C00. Damit alles so läuft, wie wir es uns gedacht haben, enthält die erste Zeile unseres Assemblercodes also den Code:
  
 +
<asm>
 
     ORG 0x7C00
 
     ORG 0x7C00
 +
</asm>
  
 
Diese Zeile regelt, dass all unsere Adressierungen richtig sind usw. Jetzt basteln wir einen Stack. Er sitzt an Adresse 0x9000. Den Stackpointer setzen wir auf null. Während wir das alles tun, sind übrigens keine Interrupts zugelassen. Nun schreiben wir die Information über das Bootlaufwerk aus DL in eine Variable, rufen die Funktion "load" auf und springen zum geladenen Programm, unserem Kernel rüber (das seht ihr im vollst&auml;ndigen Code weiter unten).
 
Diese Zeile regelt, dass all unsere Adressierungen richtig sind usw. Jetzt basteln wir einen Stack. Er sitzt an Adresse 0x9000. Den Stackpointer setzen wir auf null. Während wir das alles tun, sind übrigens keine Interrupts zugelassen. Nun schreiben wir die Information über das Bootlaufwerk aus DL in eine Variable, rufen die Funktion "load" auf und springen zum geladenen Programm, unserem Kernel rüber (das seht ihr im vollst&auml;ndigen Code weiter unten).
Zeile 66: Zeile 68:
 
Zum Schluss des Codes seht ihr noch folgende Zeilen:
 
Zum Schluss des Codes seht ihr noch folgende Zeilen:
  
 +
<asm>
 
     times 512-($-$$)-2 db 0
 
     times 512-($-$$)-2 db 0
 
     dw 0x0AA55
 
     dw 0x0AA55
 +
</asm>
  
 
Sie sind für die Länge von 512 Bytes und das Wort 0x0AA55 am Ende zuständig.
 
Sie sind für die Länge von 512 Bytes und das Wort 0x0AA55 am Ende zuständig.
Zeile 75: Zeile 79:
 
Der Code am Stück
 
Der Code am Stück
  
 +
<asm>
 
     org 0x7C00 ; Unsere Startadresse
 
     org 0x7C00 ; Unsere Startadresse
 
      
 
      
Zeile 155: Zeile 160:
 
     times 512-($-$$)-2 db 0  ; Dateilänge: 512 Bytes
 
     times 512-($-$$)-2 db 0  ; Dateilänge: 512 Bytes
 
     dw 0AA55h                ; Bootsignatur
 
     dw 0AA55h                ; Bootsignatur
 +
</asm>
  
 
Ein kleiner Kernel zum Testen...<br>
 
Ein kleiner Kernel zum Testen...<br>
 
Nun kneten wir uns einen kleinen Kernel, damit unser Bootloader auch was zu laden hat.
 
Nun kneten wir uns einen kleinen Kernel, damit unser Bootloader auch was zu laden hat.
  
 +
<asm>
 
     ; ---------------------------------------------------
 
     ; ---------------------------------------------------
 
     ; Unser Kernel
 
     ; Unser Kernel
Zeile 207: Zeile 214:
 
     dw 0000h
 
     dw 0000h
 
     dw 0FFFFh
 
     dw 0FFFFh
 +
</asm>
  
 
Kompilieren und Testen<br>
 
Kompilieren und Testen<br>
Zeile 498: Zeile 506:
 
=== CPU >= 386 ===
 
=== CPU >= 386 ===
  
 +
<asm>
 
     ; determine CPU type. Code from Freedows 98 ldr_asm.asm
 
     ; determine CPU type. Code from Freedows 98 ldr_asm.asm
 
     ; Copyright (C) 1997 Joachim Breitsprecher  
 
     ; Copyright (C) 1997 Joachim Breitsprecher  
Zeile 524: Zeile 533:
 
          
 
          
 
         not_386:
 
         not_386:
 +
</asm>
  
 
== OS-Showcase: MenuetOS ==
 
== OS-Showcase: MenuetOS ==