diff options
Diffstat (limited to 'src/loader/jumper.asm')
-rw-r--r-- | src/loader/jumper.asm | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/loader/jumper.asm b/src/loader/jumper.asm new file mode 100644 index 0000000..f591dda --- /dev/null +++ b/src/loader/jumper.asm @@ -0,0 +1,28 @@ +; MIT License, Copyright (c) 2021 Marvin Borner +; Exit the bootloader and clear registers + +bits 32 + +; Empty (invalid) idt +idt: + dd 0, 0 + +global jmp_kernel +jmp_kernel: + cli ; Disable interrupts because of invalid idt + lidt [idt] ; Load empty (invalid) idt + + xor eax, eax + lldt ax ; Clear LDT by pointing to nothing + + add esp, 4 + pop edi + add esp, 4 + + mov eax, 0x00000001 + mov cr0, eax ; Clear cr0 except protected mode + + xor eax, eax + mov cr4, eax ; Clear cr4 completely + + call edi ; Call custom (specified) jumper |