From e7586f635ee71080b990b0b5b63e5fde66414fab Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Wed, 6 Mar 2019 09:05:24 +0100 Subject: [PATCH] Revert "LONG MODE MULTIBOOT WORKS gsp!" This reverts commit 641bfe6db892f94711354fc2b60f6c037e9c37f3. --- boot/loader/loader.asm | 59 +++++++++++++++++---------------- boot/loader/mem/management.inc | 28 ---------------- build/obj/boot/loader.bin | Bin 12649 -> 12644 bytes 3 files changed, 31 insertions(+), 56 deletions(-) diff --git a/boot/loader/loader.asm b/boot/loader/loader.asm index 09b565b..586d18e 100644 --- a/boot/loader/loader.asm +++ b/boot/loader/loader.asm @@ -38,7 +38,7 @@ _start: mov es, ax ; And es because it is jealous ;mov [Bootdrv], dl xor dl, dl - jmp 0x0000:_loader ; pas sûr + jmp 0x0000:main ; pas sûr ;; Magnificent multiboot header for GRUB ------------------------------------ ;; MB_header: @@ -60,7 +60,7 @@ MB_start: push eax ; 2nd argument is magic number push ebx ; 1st argument multiboot info pointer mov ecx, eax - call _loader + call main add esp, 8 ; Cleanup arguments "A la MIPS" jmp Die ; Aufwiedersehen @@ -79,39 +79,42 @@ Die: jmp $ ;; THE CODE ----------------------------------------------------------------- ;; - -; ---------------------------------------------------------------------------- ; -; _loader ; -; ; -; This is the function that initiates the launch of OS/K. It verifies that ; -; Grub has properly loaded this loader and makes the appropriate setup so ; -; that the kernel will work properly ; -; ; -; Why this original design ? Because it works well and prevent us to cause ; -; triple faults by aligment error or too long jumps (yup, it can be a problem); -; ; -; ---------------------------------------------------------------------------- ; -_loader: - jmp lbegin - -%include "boot/loader/multiboot/check.inc" -lbegin: +main: call MB_check - jmp lnext -%include "boot/loader/cpu/cpuid.inc" -lnext: call Check_cpuid call Is64Bits - jmp lnext2 -%include "boot/loader/mem/structures.inc" -lnext2: call Setup_paging - jmp lnext3 -%include "boot/loader/mem/management.inc" -lnext3: + ;; Registering paging + mov eax, PML4_table + mov cr3, eax ; Load PML4 to cr3 + + mov eax, cr4 + or eax, 1 << 5 + mov cr4, eax ; Enable PAE + + ;; Activate long mode + mov ecx, 0xC0000080 ; address of MSR + rdmsr ; read MSR + or eax, 1 << 8 ; LME = 1. (Long Mode Enable) + wrmsr ; write MSR + + ;; Enable paging + mov eax, cr0 + or eax, 1 << 31 ; make MSR bit 31 (PG = Paging) to 1 : + ; |1|000000000000000000000000000000 + ; | + ; `------ Paging bit + mov cr0, eax + mov dword [0xb8000], 0x2f4b2f4f ret +;; INCLUDES ----------------------------------------------------------------- ;; +%include "boot/loader/cpu/cpuid.inc" +%include "boot/loader/multiboot/check.inc" +%include "boot/loader/mem/structures.inc" +%include "boot/loader/mem/management.inc" + diff --git a/boot/loader/mem/management.inc b/boot/loader/mem/management.inc index 3634666..3790a9d 100644 --- a/boot/loader/mem/management.inc +++ b/boot/loader/mem/management.inc @@ -52,31 +52,3 @@ Setup_paging: jne .map_p2_table ; else map the next entry ret - -; ---------------------------------------------------------------------------- ; -; Enable long mode and paging ; -; ---------------------------------------------------------------------------- ; -Go64: - ;; Registering paging - mov eax, PML4_table - mov cr3, eax ; Load PML4 to cr3 - - mov eax, cr4 - or eax, 1 << 5 - mov cr4, eax ; Enable PAE - - ;; Activate long mode - mov ecx, 0xC0000080 ; address of MSR - rdmsr ; read MSR - or eax, 1 << 8 ; LME = 1. (Long Mode Enable) - wrmsr ; write MSR - - ;; Enable paging - mov eax, cr0 - or eax, 1 << 31 ; make MSR bit 31 (PG = Paging) to 1 : - ; |1|000000000000000000000000000000 - ; | - ; `------ Paging bit - mov cr0, eax - - ret diff --git a/build/obj/boot/loader.bin b/build/obj/boot/loader.bin index faf31098a145ef011cb83636a3ffd826bcb67367..182a3e209f7fadaa2e907c05e87f344e1c0f846e 100644 GIT binary patch delta 150 zcmaEv^dxCQzW9q41_p)~DImfML@YI6VA!F-IN8ilo%=W|LjyO1zrMHr;fbvZCNDGp z|NlQHqVu3B1A_uXz}z_zfpaZSlrSFNVEEDxDAo9rX~SCWQXt>pr5%v3!N|e5@rsOr p#10KX0fy!i%!@S`1%QStLOFty`3=SRKwQVhpA1Y445d#F0|5RJH?jZ# delta 155 zcmaEo^fGBezSwKt#-B_Z)@qkB9^PQ^`oxQO|NsAgZ8dR+g8u9Ib0RtqnldmbFa*q< z6A?Jq@Tt17mtC8UhDx9FO>`!7$!{kz;J`Jj*!YtHsI>IS;T<0sCbp^b96rv<(7?^$ukWpY7yy`? BMb7{L