summaryrefslogtreecommitdiff
path: root/src/bootloader/enter_kernel.asm
diff options
context:
space:
mode:
authorBrett Weiland <brett_weiland@bpcspace.com>2021-03-24 15:36:54 -0500
committerBrett Weiland <brett_weiland@bpcspace.com>2021-03-24 15:38:09 -0500
commit14b109ea24dc5cb1db948de57a2a44c80ef4622e (patch)
treee397997d9c8d9c1b50a5a5235d38c6b0e8f24b5b /src/bootloader/enter_kernel.asm
parent13000d6f44d66da795e92e4b2ddc37ce879bf275 (diff)
modified: README.md
modified: compiler/create_crosscompiler.sh deleted: notes modified: src/.gdb_history deleted: src/amd64_vol2.pdf modified: src/bootloader/bios_functions/bios_disk.asm modified: src/bootloader/bios_functions/print.asm modified: src/bootloader/bootloader.asm modified: src/bootloader/cpu_check.asm modified: src/bootloader/enter_kernel.asm deleted: src/bootloader/enter_kernel_backup modified: src/bootloader/gdt.asm deleted: src/bootloader/multicore.asm deleted: src/bootloader/notes new file: src/debug/gdbinit.gdb deleted: src/indigo_os modified: src/kernel/include/libc.h modified: src/kernel/include/paging.h modified: src/kernel/include/video.h modified: src/kernel/kernel.c modified: src/kernel/libs/acpi.c modified: src/kernel/libs/drivers/serial.c modified: src/kernel/libs/drivers/video.c modified: src/kernel/libs/libc.c modified: src/kernel/libs/page.c modified: src/link.ld modified: src/makefile new file: tools/README.md modified: tools/page/page.py
Diffstat (limited to 'src/bootloader/enter_kernel.asm')
-rw-r--r--src/bootloader/enter_kernel.asm13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/bootloader/enter_kernel.asm b/src/bootloader/enter_kernel.asm
index c9991e3..d3933cf 100644
--- a/src/bootloader/enter_kernel.asm
+++ b/src/bootloader/enter_kernel.asm
@@ -1,5 +1,6 @@
[extern main]
[extern _kernel_stack_loc]
+[extern _stage1_pagetable]
enter_longmode:
cli
@@ -29,7 +30,7 @@ mov es, ax
mov fs, ax
mov gs, ax
-mov edi, 0x4000 ; 0x3000
+mov edi, _stage1_pagetable ; 0x3000
mov cr3, edi
mov eax, 0
mov ecx, 0xc00 ; 0x1000
@@ -37,14 +38,14 @@ rep stosd
mov edi, cr3
-mov DWORD [edi], 0x5003 ; pml4e[0] = pdpe
+mov DWORD [edi], _stage1_pagetable + 0x1003 ; pml4e[0] = pdpe
add edi, 0x1000
-mov DWORD [edi], 0x6003 ; pdpe[0] = pde
+mov DWORD [edi], _stage1_pagetable + 0x2003 ; pdpe[0] = pde
add edi, 0x1000
mov DWORD [edi], 0x83 ; pde[0] = pte
mov eax, cr4
-or eax, 1 << 5
+or eax, 0x620
mov cr4, eax
;end of setting up pages
@@ -65,9 +66,11 @@ or eax, 1 << 8
wrmsr
mov eax, cr0
-or eax, 1 << 31
+and ax, 0xfffb
+or eax, 0x80000002
mov cr0, eax
+
lgdt [long_gdt.descriptor]
jmp LONG_CODE_SEGMENT:enter_kernel