Autor Thema: Bootloader  (Gelesen 4397 mal)

anhadikal

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« am: 11. September 2007, 19:36 »
Hallo,

ich habe hier meinen alten Bootloader gefunden ... wie findet ihr ihn, und ist er richtig? also er funktioniert schonmal:

Zitat
;==================================================;
;------------------- BootLoader -------------------;
;===    Ladet OS-Loader, und springt zu ihm.   ===;
;==================================================;

org 0x7C00            ; Startadresse
jmp start            ; springe!

;-----------------------------------------------

;===== dOkS-FS =====;
FS_ID          db 0xDA
FS_VERSION       db 0x00, 0x01
FS_FT_START_AT       db 2
FS_SEC_PER_CLS      db 8
FS_END_ID      db 0xDE

;-----------------------------------------------

;====== print Funktion =======;
;--- SI, Offset vom String ---;
;=============================;
print:
   .1:
   lodsb               ; nächstes Byte von SI
   or al, al            ; wenn 0, dann Schluss
   jz .2               ; ...
   mov ah, 0x0E            ; Die Funktion 0x0E
   int 0x10            ; Interrupt 0x10
   jmp .1
   .2:
   retn   

;-----------------------------------------------

;===== Start =====;
start:
   mov [bootdrv], dl         ; Bootlaufwerk sichern
   
   mov si, start_msg         ; Offset von start_msg nach si
   call print            ; Text ausgeben
   
   .1:
   ;=== Floppy resetten ===;
   mov si, flp_reset         ; Offset von der Nachricht
   call print            ; Text ausgeben
   mov ah, 0x00            ; Funktion 0x00
   mov dl, [bootdrv]         ; Bootlaufwerk (sollte aber 0 sein)
   int 0x13            ; Interrupt 0x13
   jc .1
   
   .2:
   ;=== Sectoren lesen ===;
   mov si, read_sec         ; Offset von der Nachricht
   call print            ; Text ausgeben
   mov ax, 0x800            ; Segmentadresse nach ax
   mov es, ax            ; ax nach es
   mov bx, 0            ; dx auf null
   
   mov ah, 0x02            ; Funktion 0x02
   mov al, [sec_to_read]         ; Anzahl der Sektoren zum Lesen
   mov ch, 0            ; Spur/Track 0
   mov cl, 2            ; Beginne bei Sektor 2
   mov dh, 0            ; Kopf/Head 0
   mov dl, [bootdrv]         ; Bootlaufwerk (sollte aber 0 sein)
   int 0x13   
   jc .2
   
   ;=== Springe zum OsLoader ===;
   mov si, jmp_to_osl         ; Offset von der Nachricht
   call print            ; Text ausgeben
   mov ax, 0x800            ; Adresse zum OS-Loader
   mov es, ax            ; Adresse nach es
   mov ds, ax            ; Adresse nach ds
   mov dl, [bootdrv]
   
   jmp 0x800:0x00            ; Far-Jump zum OS-Loader

jmp $                  ; Unendliche-Schleife

;-----------------------------------------------

;===== VARIBALEN =====;
bootdrv         db 0
sec_to_read      db 3
start_msg      db "Starte den dOkS-Bootloader ...",10,13,0
flp_reset      db "Setze Diskettenlaufwerk zurueck...",10,13,0
read_sec      db "Lese 4 Sektoren ...",10,13,0
jmp_to_osl      db "Lade den OS-Loader ...",10,13,0

;=== die Bootsignatur & 512 bytes ===;
times 512-($-$$)-2    db 0
dw 0xAA55

MfG
We change the future and the future changes us!

 

Einloggen