diff --git a/boot/loader/loader.asm b/boot/loader/loader.asm index 09b565b..2040668 100644 --- a/boot/loader/loader.asm +++ b/boot/loader/loader.asm @@ -108,6 +108,7 @@ lnext: %include "boot/loader/mem/structures.inc" lnext2: call Setup_paging + call Go64 jmp lnext3 %include "boot/loader/mem/management.inc" diff --git a/boot/loader/mem/management.inc b/boot/loader/mem/management.inc index 3634666..48ff4cc 100644 --- a/boot/loader/mem/management.inc +++ b/boot/loader/mem/management.inc @@ -57,6 +57,8 @@ Setup_paging: ; Enable long mode and paging ; ; ---------------------------------------------------------------------------- ; Go64: + pusha + ;; Registering paging mov eax, PML4_table mov cr3, eax ; Load PML4 to cr3 @@ -78,5 +80,10 @@ Go64: ; | ; `------ Paging bit mov cr0, eax + jmp .end + nop + nop +.end: + popa ret diff --git a/boot/loader/mem/structures.inc b/boot/loader/mem/structures.inc index 31e98b4..4947b9d 100644 --- a/boot/loader/mem/structures.inc +++ b/boot/loader/mem/structures.inc @@ -26,7 +26,7 @@ [BITS 32] ;; GDT WITH DOC -ALIGN 4 +ALIGN 4096 GDT64: NULL_SELECTOR: ;; null selector within 64 bits dw GDT_LENGTH ; limit of GDT @@ -104,7 +104,7 @@ GDT64: GDT_LENGTH: ;; EMPTY PAGE TABLES (identity of the first 1GiB) -ALIGN 4 +ALIGN 4096 PML4_table: resb 4096 PDP_table: diff --git a/build/obj/boot/loader.bin b/build/obj/boot/loader.bin index faf3109..1b1f118 100644 Binary files a/build/obj/boot/loader.bin and b/build/obj/boot/loader.bin differ