From aa814a9c8a58208be5e0de0612165c96fdac6419 Mon Sep 17 00:00:00 2001 From: Recolic Keghart <root@recolic.net> Date: Tue, 9 Jun 2020 16:26:52 +0800 Subject: [PATCH] add kern loader, debugging --- Makefile | 4 ++++ bootloader/boot.asm | 38 +++++++++++++++++++++++++++++++++++--- kernel/Makefile | 4 +++- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 303a82f..b5bd258 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,14 @@ +default: assemble + bootloader: $(MAKE) -C bootloader kernel: $(MAKE) -C kernel +.PHONY: bootloader kernel + build: bootloader kernel assemble: build diff --git a/bootloader/boot.asm b/bootloader/boot.asm index 43313ea..389dee9 100644 --- a/bootloader/boot.asm +++ b/bootloader/boot.asm @@ -1,6 +1,7 @@ [bits 16] [org 0x7c00] +mov [_boot_drive_id], dl jmp _init_prot_mode gdt_begin: @@ -61,14 +62,45 @@ _prot_begin: mov ebx, _motd_32 call println_vga - KERN_ADDR equ 0x1000 + ; Load the kernel image from boot disk, disk offset 512B to 64KB. + KERN_ADDR equ 0x7e00 + mov ah, 0x02 + mov ch, 0 + mov dh, 0 + mov cl, 2 ; from the second one, + mov al, 127 ; read 127 sectors in total. + mov bx, KERN_ADDR + int 0x13 ; Set carry on error, and set AL to sectors that actual read. + jmp _stall + + jc disk_io_error + mov dl, 0x7f + cmp dl, al + jne disk_io_error + ; kernel successfully loaded now! + mov ebx, _motd_kern_ok + call println_vga + + +_stall: jmp $ +disk_io_error: + mov ebx, _motd_disk_error + call println_vga + jmp _stall + +_motd_disk_error: + db 'DISK_IO_ERROR', 0x0 _motd_32: - db '[ENTER X86 MODE SUCC] [LOADING KERN..]', 0x0 + db '[ENTER X86 MODE SUCC]', 0x0 +_motd_kern_ok: + db '[ENTER X86 MODE SUCC] [LOAD KERN SUCC]', 0x0 _motd_endk: - db '[ENTER X86 MODE SUCC] [LOADING KERN..] [KERN EXITED]', 0x0 + db '[ENTER X86 MODE SUCC] [LOAD KERN SUCC] [KERN EXITED]', 0x0 +_boot_drive_id: + db 0x0 %include "./mbr_end.inc" diff --git a/kernel/Makefile b/kernel/Makefile index b712a80..6d07b25 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -1,7 +1,9 @@ kernel: gcc -ffreestanding -c kernel.c -o kernel.o # -m32 - ld -o kernel.img -Ttext 0x1000 --oformat binary kernel.o # -m elf_i386 + ld -o kernel.img -Ttext 0x7e00 --oformat binary kernel.o # -m elf_i386 + # Sector 1 = bootloader, Sector 2 - (512B TO 64K) = kernel + truncate --size=65024 kernel.img clean: rm *.o *.img -- GitLab