1
Lowlevel-Coding / Bootloader
« 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:
MfG
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