identity map 1gb
This commit is contained in:
30
src/boot.asm
30
src/boot.asm
@@ -1,4 +1,5 @@
|
|||||||
global _start
|
global _start
|
||||||
|
extern kernel_main
|
||||||
|
|
||||||
%define FLAGS 0b10
|
%define FLAGS 0b10
|
||||||
%define MAGIC 0x1BADB002
|
%define MAGIC 0x1BADB002
|
||||||
@@ -83,7 +84,23 @@ section .text
|
|||||||
or eax, 1 << 5
|
or eax, 1 << 5
|
||||||
mov cr4, eax
|
mov cr4, eax
|
||||||
|
|
||||||
; todo(nub31): Set up page tables
|
; pml4[0] -> pdpt
|
||||||
|
mov eax, pdpt
|
||||||
|
or eax, 0x03
|
||||||
|
mov [pml4], eax
|
||||||
|
; pdpt[0] -> pd
|
||||||
|
mov eax, pd
|
||||||
|
or eax, 0x03
|
||||||
|
mov [pdpt], eax
|
||||||
|
; Fill pd with 2MB entries
|
||||||
|
mov edi, pd
|
||||||
|
mov eax, 0x83
|
||||||
|
mov ecx, 512
|
||||||
|
.setup_pd:
|
||||||
|
mov [edi], eax
|
||||||
|
add eax, 0x200000
|
||||||
|
add edi, 8
|
||||||
|
loop .setup_pd
|
||||||
|
|
||||||
; Load cr3 with the address of pml4
|
; Load cr3 with the address of pml4
|
||||||
mov eax, pml4
|
mov eax, pml4
|
||||||
@@ -97,7 +114,7 @@ section .text
|
|||||||
or eax, 1 << 8
|
or eax, 1 << 8
|
||||||
wrmsr
|
wrmsr
|
||||||
|
|
||||||
; Enable paging bt setting bit 31 in cr0 to 1
|
; Enable paging by setting bit 31 in cr0 to 1
|
||||||
mov eax, cr0
|
mov eax, cr0
|
||||||
or eax, 1 << 31
|
or eax, 1 << 31
|
||||||
mov cr0, eax
|
mov cr0, eax
|
||||||
@@ -116,7 +133,14 @@ section .text
|
|||||||
section .text
|
section .text
|
||||||
bits 64
|
bits 64
|
||||||
long_mode:
|
long_mode:
|
||||||
cli
|
; Clear segment registers in long mode
|
||||||
|
xor ax, ax
|
||||||
|
mov ds, ax
|
||||||
|
mov es, ax
|
||||||
|
mov fs, ax
|
||||||
|
mov gs, ax
|
||||||
|
mov ss, ax
|
||||||
|
call kernel_main
|
||||||
.hang:
|
.hang:
|
||||||
hlt
|
hlt
|
||||||
jmp .hang
|
jmp .hang
|
||||||
Reference in New Issue
Block a user