Kernel - Slight reworks to timer code
[tpg/acess2.git] / Kernel / arch / x86 / proc.asm
index 4e7d160..8da7971 100644 (file)
@@ -31,7 +31,9 @@ Proc_CloneInt:
        ; Save RSP
        mov eax, [esp+0x20+4]
        mov [eax], esp
+       push DWORD [esp+0x20+12]
        call MM_Clone
+       add esp, 4
        ; Save CR3
        mov esi, [esp+0x20+8]
        mov [esi], eax
@@ -55,11 +57,14 @@ SwitchTasks:
        
        ; Old IP
        mov eax, [esp+0x20+16]
+       test eax, eax
+       jz .nosave
        mov DWORD [eax], .restore
        ; Old SP
        mov eax, [esp+0x20+8]
        mov [eax], esp
 
+.nosave:
        mov ecx, [esp+0x20+12]  ; New IP
        mov eax, [esp+0x20+20]  ; New CR3
        mov esp, [esp+0x20+ 4]  ; New SP
@@ -73,7 +78,6 @@ SwitchTasks:
        jmp ecx
 
 .restore:
-
        popa
        xor eax, eax
        ret
@@ -162,8 +166,7 @@ SetAPICTimerCount:
        pop es
        pop ds
        popa
-       add esp, 4      ; CPU ID
-       ; No Error code / int num
+       add esp, 8      ; CPU ID / Error Code
        iret
 %endif
 ; --------------
@@ -261,7 +264,7 @@ SpawnTask:
 .parent:
        ret
 
-; void Proc_ReturnToUser(void *Method, Uint Parameter)
+; void Proc_ReturnToUser(void *Method, Uint Parameter, tVAddr KernelStack)
 ; Calls a user fault handler
 ;
 [global Proc_ReturnToUser]
@@ -273,12 +276,8 @@ Proc_ReturnToUser:
        ; [EBP+12]: parameter
        ; [EBP+16]: kernel stack top
        
-       ;call Proc_GetCurThread
-       
-       ; EAX is the current thread
-       ;mov ebx, eax
-       ;mov eax, [ebx+12*4]    ; Get Kernel Stack
-       mov eax, [ebp+16]       ; Get Kernel Stack
+       ; Get kernel stack      
+       mov eax, [ebp+16]
        sub eax, KSTACK_USERSTATE_SIZE
        
        ;
@@ -344,10 +343,6 @@ Proc_ReturnToUser:
 
 [global GetCPUNum]
 GetCPUNum:     ; TODO: Store in debug registers
-;      xor eax, eax
-;      str ax
-;      sub ax, 0x30
-;      shr ax, 3       ; ax /= 8
        mov eax, dr1
        ret
 
@@ -376,3 +371,5 @@ User_Syscall_Exit:
        xor eax, eax
        mov ebx, [esp+4]
        int 0xAC
+
+; vim: ft=nasm ts=8

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