Loading Kernel With Int 0x13
Posted: Wed Jun 10, 2009 2:48 pm
Here's my nasm floppy .img:
The output is:
I don't know why that last JMP of my bootloader didn't work to jump to the loaded kernel. Either my JMP didn't work, or int 0x13 didn't work (more likely wasn't used correctly). But these are just suspicions and I can't find a solid error anywhere, despite the fact my kernel is never executed...
All help is appreciated,
Brodeur235
Code: Select all
[ORG 0x7C00]
main:
mov ax,0x0000
mov ds,ax
mov si,waitmsg
call print_string
call load_kernel
mov si,procexited
call print_string
jmp 0x7E00
;procedures
print_string:
mov ah,0x0E
mov bh,0x00
mov bl,0x07
.next_char
lodsb ;(1)[si] loaded into al (2)si incremented by 1
cmp al,0
jz .done
int 0x10
jmp .next_char
.done
ret
load_kernel:
mov si,prochit
call print_string
xor ax,ax
mov es,ax
mov bx,0x7E00
mov dh,0x00
mov dl,0x01
mov ch,0x01
mov cl,0x02
mov bx,0x0000
mov ah,0x02
mov al,0x01
int 0x13
ret
;data
waitmsg db "Loading Kernel. Please Wait . . .",0xD,0xA,0
prochit db "Now In Kernel Loading Procedure . . .",0xD,0xA,0
procexited db "Now Returned From Kernel Loading Procedure . . .",0xD,0xA,0
;pad
times 510-($-$$) db 0
;make drive bootable
dw 0xAA55
;No longer in bootloader
;Now in sector 2
;begin kernel code
kernel:
mov ax,0x0000
mov ds,ax
mov si,loaded
call print_string
jmp $
;data
loaded db "The kernel is loaded and executing.",0xD,0xA,0
;pad
times 512-($-kernel) db 0
Code: Select all
Loading Kernel. Please Wait . . .
Now In Kernel Loading Procedure . . .
Now Returned From Kernel Loading Procedure . . .
All help is appreciated,
Brodeur235