Kernel/x86_64 - Bugfixing
[tpg/acess2.git] / Kernel / arch / x86_64 / start64.asm
index 7617d6a..5027a1e 100644 (file)
@@ -25,6 +25,9 @@ start64:
        jmp rax
 .himem:
        
+       xor rax, rax
+       mov dr0, rax    ; Set CPU0
+       
        ; Clear the screen
        mov rax, 0x1F201F201F201F20     ; Set the screen to White on blue, space (4 characters)
        mov edi, 0xB8000
@@ -32,7 +35,7 @@ start64:
        rep stosq
        
        ; Set kernel stack
-       mov rsp, gInitialKernelStack
+       mov rsp, 0xFFFFA00000000000 + 0x10000
        
        ; Call main
        mov edi, [gMultibootMagic - KERNEL_BASE]
@@ -44,11 +47,6 @@ start64:
        hlt
        jmp .hlt
 
-[global GetRIP]
-GetRIP:
-       mov rax, [rsp]
-       ret
-
 [global GetCPUNum]
 GetCPUNum:
        xor rax, rax
@@ -103,16 +101,53 @@ Proc_ReturnToUser:
 CallWithArgArray:
        push rbp
        mov rbp, rsp
-       mov rcx, [rbp+3*8]      ; Get NArgs
-       mov rdx, [rbp+4*8]
-
-.top:
-       mov rax, [rdx+rcx*8-8]
-       push rax
-       loop .top
+       push r10
+       push r11
+       
+       mov [rbp+2*8], rdi      ; Save Ptr to stack
        
-       mov rax, [rbp+2*8]
+       mov r11, rsi    ; NArgs
+       mov r10, rdx    ; Args
+
+       ; Arg 1: RDI
+       mov rdi, [r10]
+       add r10, 8
+       dec r11
+       jz .call
+       ; Arg 2: RSI
+       mov rsi, [r10]
+       add r10, 8
+       dec r11
+       jz .call
+       ; Arg 3: RDX
+       mov rdx, [r10]
+       add r10, 8
+       dec r11
+       jz .call
+       ; Arg 4: RCX
+       mov rcx, [r10]
+       add r10, 8
+       dec r11
+       jz .call
+       ; Arg 5: R8
+       mov r8, [r10]
+       add r10, 8
+       dec r11
+       jz .call
+       ; Arg 6: R9
+       mov r9, [r10]
+       add r10, 8
+       dec r11
+       jz .call
+       ; No support for more
+
+.call:
+       mov rax, [rbp+2*8]      ; Ptr
        call rax
+       
+       pop r11
+       pop r10
+       
        lea rsp, [rbp]
        pop rbp
        ret
@@ -126,8 +161,3 @@ User_Syscall_Exit:
        ; RDI: Return Value
        int 0xAC
 
-[section .bss]
-[global gInitialKernelStack]
-       resd    1024*4  ; 4 Pages
-gInitialKernelStack:
-

UCC git Repository :: git.ucc.asn.au