Bug entre le bootloader et mon kernel ?
Bonjour,
voilà j'ai essayer de suivre le tut de inferno sur les OS
et donc le boot sur la disquette est ok !
mais dès que je veux mettre un kernel il ne le lit pas et en plus il me met l'affichage du message de boot.asm en boucle infini !!!
je comprends pas trop pourquoi !
j'ai fais tout ce qu'il est expliqué pourtant !
voici les sources :
Boot.asm :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| %define BASE 0x100
%define KSIZE 1 ; nombre de secteurs de 512 octets a charger
[BITS 16]
[ORG 0x0]
jmp start
%include "UTIL.INC"
start:
mov [bootdrv],dl ; recuparation de l'unite de boot
; initialisation des segments en 0x07C0
mov ax,0x07C0
mov ds,ax
mov es,ax
mov ax,0x8000 ; stack en 0xFFFF
mov ss,ax
mov sp, 0xf000
; affiche un msg
mov si,msgDebut
call afficher
; charger le noyau
xor ax,ax
int 0x13
push es
mov ax,BASE
mov es,ax
mov bx,0
mov ah,2
mov al,KSIZE
mov ch,0
mov cl,2
mov dh,0
mov dl,[bootdrv]
int 0x13
pop es
; saut vers le kernel
jmp dword BASE:0
msgDebut db "Chargement du kernel",13,10,0
bootdrv: db 0
;; NOP jusqu'a 510
times 510-($-$$) db 144
dw 0xAA55 |
et enfin le kernel
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| [BITS 16]
[ORG 0x0]
jmp start
%include "UTIL.INC"
start:
; initialisation des segments en 0x100
mov ax,0x100
mov ds,ax
mov es,ax
mov ax,0x8000 ; stack en 0xFFFF
mov ss,ax
mov sp, 0xf000
; affiche un msg
mov si,msg00
call afficher
end:
jmp end
msg00: db 'Kernel is speaking !',10,0 |
puis le fichier util.inc
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| ;---------------------------------------------------------
; Synopsis: Affiche une chaine de caracteres se terminant par 0x0
; Entree: DS:SI -> pointe sur la chaine a afficher
;---------------------------------------------------------
afficher:
push ax
push bx
.debut:
lodsb ; ds:si -> al
cmp al,0 ; fin chaine ?
jz .fin
mov ah,0x0E ; appel au service 0x0e, int 0x10 du bios
mov bx,0x07 ; bx -> attribut, al -> caractere ascii
int 0x10
jmp .debut
.fin:
pop bx
pop ax
ret |
voilà seulement je suis sous win98 + nasm
et je complie bien les 2
nasm -f bin -o boot boot.asm
nasm -f bin -o kernel kernel.asm
puis je fais :
debug boot
-w cs:100 0 0 1
-q
puis copy kernel a:
et enfin copy util.inc a:
sous dos je n'arrive pas à faire ce signe "\"...
si quelqu'un vois le problème...merci de m'aider ce serait sympa !
bye