mirror of
https://github.com/ondra-novak/gates_of_skeldal.git
synced 2025-07-05 14:10:27 -04:00
90 lines
2.2 KiB
NASM
90 lines
2.2 KiB
NASM
.model small
|
|
.386
|
|
|
|
DGROUP group _DATA
|
|
|
|
|
|
extrn _tasklist_sp:dword[]
|
|
extrn _tasklist_low:dword[]
|
|
extrn _tasklist_top:dword[]
|
|
extrn _task_info:dword[]
|
|
extrn _curtask:dword
|
|
extrn _nexttask:dword
|
|
extrn _taskcount:dword
|
|
extrn __STACKLOW:dword
|
|
extrn __STACKTOP:dword
|
|
extrn _taskparam:dword
|
|
extrn free_:proc
|
|
|
|
_TEXT segment byte public 'CODE' use32
|
|
assume CS:_TEXT
|
|
assume DS:DGROUP
|
|
|
|
|
|
|
|
public task_sleep_
|
|
task_sleep_:
|
|
mov _taskparam,eax
|
|
pushfd
|
|
pushad
|
|
mov eax,_curtask
|
|
mov esi,[_tasklist_sp]
|
|
mov edi,[_tasklist_low]
|
|
mov edx,[_tasklist_top]
|
|
mov ecx,[_task_info]
|
|
mov [esi+eax*4],esp
|
|
mov ebx,_nexttask
|
|
term_1: cmp eax,ebx
|
|
mov eax,ebx
|
|
jnz twake
|
|
xor eax,eax
|
|
taskloop:
|
|
inc ebx
|
|
cmp ebx,_taskcount
|
|
jc tasktest
|
|
xor ebx,ebx
|
|
tasktest:
|
|
cmp dword ptr [esi+ebx*4],0
|
|
jz taskloop
|
|
test byte ptr [ecx+ebx],2 ;test zda je task waiting
|
|
jnz taskloop ;ano - pak ho preskoc (task 0 nesmi byt waiting)
|
|
twake: mov _curtask,eax
|
|
mov _nexttask,ebx
|
|
mov esp,[esi+eax*4]
|
|
mov ebx,[edi+eax*4]
|
|
mov __STACKLOW,ebx
|
|
mov ebx,[edx+eax*4]
|
|
mov __STACKTOP,ebx
|
|
popad
|
|
popfd
|
|
mov eax,_taskparam
|
|
ret
|
|
|
|
public task_terminating_
|
|
task_terminating_:
|
|
;tato funkce je volana po kazdem ukonceni ulohy
|
|
mov eax,[_tasklist_sp]
|
|
mov esp,[eax]
|
|
mov ebx,[_tasklist_low]
|
|
mov ebx,[ebx]
|
|
mov __STACKLOW,ebx
|
|
mov ebx,[_tasklist_top]
|
|
mov ebx,[ebx]
|
|
mov __STACKTOP,ebx
|
|
mov eax,_curtask
|
|
mov esi,[_tasklist_low]
|
|
mov eax,[esi+4*eax]
|
|
call free_
|
|
mov eax,_curtask
|
|
xor ebx,ebx
|
|
mov esi,[_tasklist_sp]
|
|
mov [esi+4*eax],ebx
|
|
mov esi,[_tasklist_sp]
|
|
mov edi,[_tasklist_low]
|
|
mov edx,[_tasklist_top]
|
|
mov eax,_curtask
|
|
mov ebx,_nexttask
|
|
jmp term_1
|
|
|
|
_TEXT ends
|
|
end
|