+;
+; Acess2 x86_64 port
+;
+
+%include "arch/x86_64/include/common.inc.asm"
[BITS 32]
mov eax, gInitialPML4 - KERNEL_BASE
mov cr3, eax
- ; Enable long/compatability mode
+ ; Enable IA-32e mode
+ ; (Also enables SYSCALL and NX)
mov ecx, 0xC0000080
rdmsr
- or ax, 0x100
+ or eax, (1 << 11)|(1 << 8)|(1 << 0) ; NXE, LME, SCE
wrmsr
; Enable paging
mov eax, cr0
- or eax, 0x80000000
+ or eax, 0x80010000 ; PG & WP
mov cr0, eax
; Load GDT
jmp .loop
.hlt:
+ cli
+ hlt
jmp .hlt
[section .data]
; Initial stack - 64KiB
dq 0
%assign i 0
- %rep 16-1
+ %rep INITIAL_KSTACK_SIZE-1
dd gInitialKernelStack - KERNEL_BASE + i*0x1000 + 0x103, 0
%assign i i+1
%endrep
- times 512-16 dq 0
+ times 512-INITIAL_KSTACK_SIZE dq 0
gInitialPT1: ; 2 MiB
%assign i 0
%rep 512
[section .padata]
[global gInitialKernelStack]
gInitialKernelStack:
- times 0x1000*(16-1) db 0 ; 16 Pages
+ times 0x1000*(INITIAL_KSTACK_SIZE-1) db 0 ; 8 Pages
[section .rodata]
csNot64BitCapable:
db "Not 64-bit Capable",0
+
+; vim: ft=nasm