mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-18 09:04:49 -04:00
Working version of reading the kernel from the floppy
This commit is contained in:
parent
af31af2d46
commit
93a44ef339
17
Makefile
17
Makefile
@ -1,14 +1,19 @@
|
|||||||
default: bootloader.flp
|
default: thor.flp
|
||||||
|
|
||||||
bootloader.bin: src/bootloader/bootloader.asm
|
bootloader.bin: src/bootloader/bootloader.asm
|
||||||
nasm -f bin -o bootloader.bin src/bootloader/bootloader.asm
|
nasm -f bin -o bootloader.bin src/bootloader/bootloader.asm
|
||||||
|
|
||||||
bootloader.flp: bootloader.bin
|
kernel.bin: src/kernel.asm
|
||||||
dd status=noxfer conv=notrunc if=bootloader.bin of=bootloader.flp
|
nasm -f bin -o kernel.bin src/kernel.asm
|
||||||
|
|
||||||
start: bootloader.flp
|
thor.flp: bootloader.bin kernel.bin
|
||||||
qemu-kvm -fda bootloader.flp
|
cat bootloader.bin > thor.bin
|
||||||
|
cat kernel.bin >> thor.bin
|
||||||
|
dd status=noxfer conv=notrunc if=thor.bin of=thor.flp
|
||||||
|
|
||||||
|
start: thor.flp
|
||||||
|
qemu-kvm -fda thor.flp
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f bootloader.bin
|
rm -f bootloader.bin
|
||||||
rm -f bootloader.flp
|
rm -f thor.flp
|
@ -6,13 +6,13 @@ rm_start:
|
|||||||
; 1. Set stable environment
|
; 1. Set stable environment
|
||||||
|
|
||||||
; Set stack space (4K) and stack segment
|
; Set stack space (4K) and stack segment
|
||||||
mov ax, 07C0h
|
mov ax, 0x7C0
|
||||||
add ax, 288
|
add ax, 288
|
||||||
mov ss, ax
|
mov ss, ax
|
||||||
mov sp, 4096
|
mov sp, 4096
|
||||||
|
|
||||||
; Set data segment
|
; Set data segment
|
||||||
mov ax, 07C0h
|
mov ax, 0x7C0
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
|
|
||||||
; 2. Welcome the user to the bootloader
|
; 2. Welcome the user to the bootloader
|
||||||
@ -36,7 +36,6 @@ rm_start:
|
|||||||
call new_line
|
call new_line
|
||||||
|
|
||||||
; Enable A20 gate
|
; Enable A20 gate
|
||||||
|
|
||||||
in al, 0x92
|
in al, 0x92
|
||||||
or al, 2
|
or al, 2
|
||||||
out 0x92, al
|
out 0x92, al
|
||||||
@ -47,11 +46,47 @@ rm_start:
|
|||||||
mov si, load_kernel
|
mov si, load_kernel
|
||||||
call print_line
|
call print_line
|
||||||
|
|
||||||
; 3. Get ready for protected mode
|
BASE equ 0x100 ; 0x0100:0x0 = 0x1000
|
||||||
|
sectors equ 0x20 ; sectors to read
|
||||||
|
|
||||||
; TODO
|
; Reset disk drive
|
||||||
|
xor ax, ax
|
||||||
|
xor ah, ah
|
||||||
|
mov dl, 0
|
||||||
|
int 0x13
|
||||||
|
|
||||||
|
jc reset_failed
|
||||||
|
|
||||||
|
mov ax, BASE
|
||||||
|
mov es, ax
|
||||||
|
xor bx, bx
|
||||||
|
|
||||||
|
mov ah, 0x2 ; Read sectors from memory
|
||||||
|
mov al, sectors ; Number of sectors to read
|
||||||
|
xor ch, ch ; Cylinder 0
|
||||||
|
mov cl, 2 ; Sector 2
|
||||||
|
xor dh, dh ; Head 0
|
||||||
|
mov dl, [bootdev] ; Drive
|
||||||
|
int 0x13
|
||||||
|
|
||||||
|
jc read_failed
|
||||||
|
|
||||||
|
jmp dword BASE:0x0
|
||||||
|
|
||||||
|
reset_failed:
|
||||||
|
mov si, reset_failed_msg
|
||||||
|
call print_line
|
||||||
|
|
||||||
|
jmp error_end
|
||||||
|
|
||||||
|
read_failed:
|
||||||
|
mov si, read_failed_msg
|
||||||
|
call print_line
|
||||||
|
|
||||||
|
error_end:
|
||||||
|
mov si, load_failed
|
||||||
|
call print_line
|
||||||
|
|
||||||
; Infinite loop to not exit directly the system
|
|
||||||
jmp $
|
jmp $
|
||||||
|
|
||||||
; Functions
|
; Functions
|
||||||
@ -107,6 +142,12 @@ key_wait:
|
|||||||
press_key_msg db 'Press any key to load the kernel...', 0
|
press_key_msg db 'Press any key to load the kernel...', 0
|
||||||
load_kernel db 'Attempt to load the kernel...', 0
|
load_kernel db 'Attempt to load the kernel...', 0
|
||||||
|
|
||||||
|
reset_failed_msg db 'Reset disk failed', 0
|
||||||
|
read_failed_msg db 'Read disk failed', 0
|
||||||
|
load_failed db 'Kernel loading failed', 0
|
||||||
|
|
||||||
|
bootdev db 0
|
||||||
|
|
||||||
; Make a real bootsector
|
; Make a real bootsector
|
||||||
times 510-($-$$) db 0
|
times 510-($-$$) db 0
|
||||||
dw 0xAA55
|
dw 0xAA55
|
82
src/kernel.asm
Normal file
82
src/kernel.asm
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
jmp _start
|
||||||
|
|
||||||
|
[BITS 16]
|
||||||
|
|
||||||
|
_start:
|
||||||
|
; Set stack space
|
||||||
|
mov ax, 0x9000
|
||||||
|
mov ss, ax
|
||||||
|
mov sp, 0xffff
|
||||||
|
|
||||||
|
; Set data segment
|
||||||
|
mov ax, 0x100
|
||||||
|
mov ds, ax
|
||||||
|
|
||||||
|
call new_line
|
||||||
|
|
||||||
|
mov si, kernel_header_0
|
||||||
|
call print_line
|
||||||
|
|
||||||
|
mov si, kernel_header_1
|
||||||
|
call print_line
|
||||||
|
|
||||||
|
mov si, kernel_header_2
|
||||||
|
call print_line
|
||||||
|
|
||||||
|
call new_line
|
||||||
|
|
||||||
|
jmp $
|
||||||
|
|
||||||
|
|
||||||
|
; Functions
|
||||||
|
|
||||||
|
new_line:
|
||||||
|
mov ah, 0Eh
|
||||||
|
|
||||||
|
mov al, 0Ah
|
||||||
|
int 10h
|
||||||
|
|
||||||
|
mov al, 0Dh
|
||||||
|
int 10h
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
print_line:
|
||||||
|
mov ah, 0Eh
|
||||||
|
|
||||||
|
.repeat:
|
||||||
|
lodsb
|
||||||
|
cmp al, 0
|
||||||
|
je .done
|
||||||
|
int 10h
|
||||||
|
jmp .repeat
|
||||||
|
|
||||||
|
.done:
|
||||||
|
call new_line
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
key_wait:
|
||||||
|
mov al, 0xD2
|
||||||
|
out 64h, al
|
||||||
|
|
||||||
|
mov al, 0x80
|
||||||
|
out 60h, al
|
||||||
|
|
||||||
|
keyup:
|
||||||
|
in al, 0x60
|
||||||
|
and al, 10000000b
|
||||||
|
jnz keyup
|
||||||
|
Keydown:
|
||||||
|
in al, 0x60
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
; Datas
|
||||||
|
|
||||||
|
kernel_header_0 db '******************************', 0
|
||||||
|
kernel_header_1 db 'Welcome to Thor OS!', 0
|
||||||
|
kernel_header_2 db '******************************', 0
|
||||||
|
|
||||||
|
; Fill the sector
|
||||||
|
times 512-($-$$) db 0
|
Loading…
x
Reference in New Issue
Block a user