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