From 7bd211cbe8c49220ab7aa326a2fa8fde48aae4b3 Mon Sep 17 00:00:00 2001 From: Bensong Liu <bensl@microsoft.com> Date: Mon, 30 Nov 2020 01:02:44 +0800 Subject: [PATCH] 64bit kernel working --- bootloader-legacy/boot.asm | 15 ++++++--------- kernel/Makefile | 4 ++-- kernel/image_head.asm | 2 +- kernel/image_head_64.asm | 4 ---- kernel/include/vga.hpp | 1 - kernel/kernel.cc | 2 +- 6 files changed, 10 insertions(+), 18 deletions(-) delete mode 100644 kernel/image_head_64.asm diff --git a/bootloader-legacy/boot.asm b/bootloader-legacy/boot.asm index 3610c40..58d5801 100644 --- a/bootloader-legacy/boot.asm +++ b/bootloader-legacy/boot.asm @@ -70,7 +70,7 @@ _load_kern: disk_io_error: mov bx, _motd_disk_error call println_bios - jmp _stall + jmp $ @@ -121,7 +121,7 @@ _call_kern_32: ; Kernel returns. mov ebx, _motd_endk call println_vga - jmp _stall + jmp $ [bits 64] _call_kern_64: @@ -129,15 +129,12 @@ _call_kern_64: call KERN_ADDR ; Kernel returns. - mov ebx, _motd_endk - call println_vga - jmp _stall - - -[bits 32] -_stall: + ;mov ebx, _motd_endk + ;call println_vga + ; TODO: add 64bit println_vga and error msg jmp $ + _motd_disk_error: db 'MED', 0x0 _motd_32: diff --git a/kernel/Makefile b/kernel/Makefile index a1f522b..91ca424 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -16,11 +16,11 @@ assemble: kernel head truncate --size=65024 kernel.img head: - nasm -f elf -DBITS=$(BITS) image_head.asm -o image_head.o + nasm -f elf$(BITS) -DTARGET_BITS=$(BITS) image_head.asm -o image_head.o kernel: g++ -ffreestanding -fno-pie -c kernel.cc -o kernel.o -m$(BITS) -std=c++17 clean: - rm *.o *.img + rm -f *.o *.img diff --git a/kernel/image_head.asm b/kernel/image_head.asm index f6d9c3b..92c3af2 100644 --- a/kernel/image_head.asm +++ b/kernel/image_head.asm @@ -1,4 +1,4 @@ -[bits 32] +[bits TARGET_BITS] [extern main] call main ret diff --git a/kernel/image_head_64.asm b/kernel/image_head_64.asm deleted file mode 100644 index b2f3d2e..0000000 --- a/kernel/image_head_64.asm +++ /dev/null @@ -1,4 +0,0 @@ -[bits 64] -[extern main] -call main -ret diff --git a/kernel/include/vga.hpp b/kernel/include/vga.hpp index ffebbc3..6eab679 100644 --- a/kernel/include/vga.hpp +++ b/kernel/include/vga.hpp @@ -12,7 +12,6 @@ constexpr uint16_t VGA_MAKE_CHAR(char c, uint8_t color) { } constexpr uint8_t default_color = 0x0f; - inline void trigger_scroll(uint16_t *pos) { for(uint16_t row = 1; row < VGA_HEIGHT; ++row) { memcpy(VGA_BEGIN_ADDR + (row-1)*VGA_WIDTH, VGA_BEGIN_ADDR + row*VGA_WIDTH, VGA_WIDTH); diff --git a/kernel/kernel.cc b/kernel/kernel.cc index 576ca5a..c1639a8 100644 --- a/kernel/kernel.cc +++ b/kernel/kernel.cc @@ -14,7 +14,7 @@ void main() { for(auto x = 0; x < 80; ++x) { char c = x%10 + '0'; char color = x + y*80; - set_char(x, y, ' ', 0x0f); + set_char(x, y, 'F', 0x0f); } } print("Hello world!\n"); -- GitLab