; Acess2 x86_64 Port
;
[bits 64]
+;KERNEL_BASE equ 0xFFFF800000000000
+KERNEL_BASE equ 0xFFFFFFFF80000000
+
+[extern kmain]
+
+[extern gMultibootPtr]
+[extern gMultibootMagic]
[section .text]
[global start64]
mov rsp, gInitialKernelStack
; Call main
+ mov edi, [gMultibootMagic - KERNEL_BASE]
+ mov esi, [gMultibootPtr - KERNEL_BASE]
+ call kmain
+
cli
.hlt:
hlt
[global GetCPUNum]
GetCPUNum:
- str ax
- mov gs, ax
xor rax, rax
- mov al, [gs:104] ; End of TSS
+ str ax
+ sub ax, 0x38 ; TSS Base
+ shr ax, 4 ; One 16-byte TSS per CPU
ret
KSTACK_USERSTATE_SIZE equ (16+1+5)*8 ; GPRegs, CPU, IRET
[section .bss]
[global gInitialKernelStack]
- resd 1024*1 ; 1 Page
+ resd 1024*4 ; 4 Pages
gInitialKernelStack: