Simplest possible long-mode entry
This commit is contained in:
parent
eb637d0bbb
commit
dd7636e906
@ -53,4 +53,33 @@ mov esp, offset BootStack
|
|||||||
call check_cpuid
|
call check_cpuid
|
||||||
call check_longmode
|
call check_longmode
|
||||||
|
|
||||||
|
mov eax, cr4
|
||||||
|
or eax, 1<<5
|
||||||
|
mov cr4, eax
|
||||||
|
|
||||||
|
mov eax, offset BootP4
|
||||||
|
mov cr3, eax
|
||||||
|
|
||||||
|
mov ecx, 0x0C0000080
|
||||||
|
rdmsr
|
||||||
|
or eax, 1<<8
|
||||||
|
wrmsr
|
||||||
|
|
||||||
|
mov eax, cr0
|
||||||
|
or eax, 1<<31
|
||||||
|
mov cr0, eax
|
||||||
|
|
||||||
|
lgdt [BootGDTp]
|
||||||
|
|
||||||
|
mov eax, 0x10
|
||||||
|
mov ss, eax
|
||||||
|
mov ds, eax
|
||||||
|
mov es, eax
|
||||||
|
|
||||||
|
.extern long_mode_start
|
||||||
|
jmp 0x8:long_mode_start
|
||||||
|
|
||||||
|
.code64
|
||||||
|
long_mode_start:
|
||||||
|
|
||||||
jmp $
|
jmp $
|
||||||
|
33
src/kernel/boot/boot_pagedir.S
Normal file
33
src/kernel/boot/boot_pagedir.S
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
.intel_syntax noprefix
|
||||||
|
|
||||||
|
.section .data
|
||||||
|
.align 0x1000
|
||||||
|
.global BootP4
|
||||||
|
BootP4:
|
||||||
|
.quad offset BootP3 + 0x3
|
||||||
|
.rept 511
|
||||||
|
.quad 0x0
|
||||||
|
.endr
|
||||||
|
BootP3:
|
||||||
|
.quad offset BootP2 + 0x3
|
||||||
|
.rept 511
|
||||||
|
.quad 0x0
|
||||||
|
.endr
|
||||||
|
BootP2:
|
||||||
|
.set i, 0
|
||||||
|
.rept 512
|
||||||
|
.quad (i << 21 ) + 0x83
|
||||||
|
.set i, (i+1)
|
||||||
|
.endr
|
||||||
|
|
||||||
|
.section .rodata
|
||||||
|
.align 0x1000
|
||||||
|
.global BootGDT
|
||||||
|
.global BootGDTp
|
||||||
|
BootGDT:
|
||||||
|
.quad 0
|
||||||
|
.quad ((1<<47) + (1<<44) + (1<<41) + (1<<43) + (1<<53))
|
||||||
|
.quad ((1<<47) + (1<<44) + (1<<41))
|
||||||
|
BootGDTp:
|
||||||
|
.short 3*8-1
|
||||||
|
.quad offset BootGDT
|
Loading…
x
Reference in New Issue
Block a user