summaryrefslogtreecommitdiff
path: root/kernel/boot.S
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksav013@gmail.com>2022-08-02 18:59:51 +0200
committerAleksa Vuckovic <aleksav013@gmail.com>2022-08-02 19:39:10 +0200
commitc0a8113ba0b7cd6984cc685ec63f79bef3bc9899 (patch)
tree8fc1095310e3624c9db85254396ebdbf62e7b79e /kernel/boot.S
parent132510156e1b907498dd83724f12ca101ae32f88 (diff)
framebuffer multiboot2
Diffstat (limited to 'kernel/boot.S')
-rw-r--r--kernel/boot.S25
1 files changed, 20 insertions, 5 deletions
diff --git a/kernel/boot.S b/kernel/boot.S
index 4276c98..e870c37 100644
--- a/kernel/boot.S
+++ b/kernel/boot.S
@@ -6,6 +6,10 @@
_start:
mov $stack_top, %esp
+ pushl $0
+ pushl %eax
+ pushl $0
+ pushl %ebx
call check_multiboot
call check_cpuid
@@ -62,6 +66,19 @@ setup_page_tables:
or $0x3, %eax
mov %eax, page_table_lvl3
+ mov $page_table_lvl2 + 4096, %eax
+ or $0x3, %eax
+ mov %eax, page_table_lvl3+8
+
+ mov $page_table_lvl2 + 8192, %eax
+ or $0x3, %eax
+ mov %eax, page_table_lvl3+16
+
+ mov $page_table_lvl2 + 12288, %eax
+ or $0x3, %eax
+ mov %eax, page_table_lvl3+24
+
+
movl $0, %ecx
1:
movl $0x200000, %eax
@@ -71,7 +88,7 @@ setup_page_tables:
leal (%edx, %ecx, 8), %edx
movl %eax, (%edx)
inc %ecx
- cmp $512, %ecx
+ cmp $512*4, %ecx
jne 1b
ret
@@ -100,15 +117,12 @@ enable_paging:
ret
no_multiboot:
- movl $0x4f4d, 0xb8000
hlt
no_cpuid:
- movl $0x4f43, 0xb8000
hlt
no_long_mode:
- movl $0x4f4c, 0xb8000
hlt
@@ -125,8 +139,9 @@ page_table_lvl4:
.skip 4096
page_table_lvl3:
.skip 4096
+// map first 4GB
page_table_lvl2:
- .skip 4096
+ .skip 4096*4
.section .rodata
gdt64: