/kernel/trunk/const.inc |
---|
495,6 → 495,17 |
count dd ? |
ends |
struct FUTEX |
list LHEAD |
magic dd ? |
handle dd ? |
destroy dd ? |
wait_list LHEAD |
pointer dd ? |
flags dd ? |
ends |
struct display_t |
x dd ? |
y dd ? |
/kernel/trunk/core/dll.inc |
---|
1426,3 → 1426,52 |
call free ;release object memory |
ret |
; param |
; ecx= size |
align 4 |
create_object: |
push esi |
push edi |
pushfd |
cli |
mov esi, [current_process] |
mov eax, [esi+PROC.ht_free] |
mov edi, [esi+PROC.ht_next] |
dec eax |
js .err0 |
mov [esi+PROC.ht_free], eax |
mov eax, [esi+PROC.htab+edi*4] |
mov [esi+PROC.ht_next], eax |
popfd |
mov eax, ecx |
call malloc |
test eax, eax |
jz .err1 |
mov [eax+FUTEX.handle], edi |
mov [esi+PROC.htab+edi*4], eax |
pop edi |
pop esi |
ret |
.err1: |
pushfd |
cli |
mov eax, [esi+PROC.ht_next] |
mov [esi+PROC.htab+edi*4], eax |
mov [esi+PROC.ht_next], edi |
inc [esi+PROC.ht_free] |
.err0: |
popfd |
pop edi |
pop esi |
xor eax, eax |
ret |
/kernel/trunk/core/taskman.inc |
---|
472,7 → 472,7 |
mov [process], eax |
lea edi, [eax+PROC.heap_lock] |
mov ecx, (PROC.ht_next-PROC.heap_lock)/4 |
mov ecx, (PROC.ht_free-PROC.heap_lock)/4 |
list_init eax |
add eax, PROC.thr_list |
482,7 → 482,11 |
cld |
rep stosd |
mov [edi], dword (PROC.pdt_0 - PROC.htab)/4 - 3 |
mov [edi+4], dword 3 ;reserve handles for stdin stdout and stderr |
mov ecx, (PROC.pdt_0 - PROC.htab)/4 |
add edi, 8 |
inc eax |
@@: |
stosd |
inc eax |
489,7 → 493,6 |
cmp eax, ecx |
jbe @B |
mov [edi-4096+PROC.ht_next], 3 ;reserve handles for stdin stdout and stderr |
mov eax, edi |
call get_pg_addr |
mov [edi-4096+PROC.pdt_0_phys], eax |
/kernel/trunk/kernel.asm |
---|
702,12 → 702,31 |
mov esi, boot_setostask |
call boot_log |
mov edi, sys_proc |
list_init edi |
lea ecx, [edi+PROC.thr_list] |
list_init ecx |
mov [edi+PROC.pdt_0_phys], sys_proc-OS_BASE+PROC.pdt_0 |
mov eax, sys_proc |
lea edi, [eax+PROC.heap_lock] |
mov ecx, (PROC.ht_free-PROC.heap_lock)/4 |
list_init eax |
add eax, PROC.thr_list |
list_init eax |
xor eax, eax |
cld |
rep stosd |
mov [edi], dword (PROC.pdt_0 - PROC.htab)/4 - 3 |
mov [edi+4], dword 3 ;reserve handles for stdin stdout and stderr |
mov ecx, (PROC.pdt_0 - PROC.htab)/4 |
add edi, 8 |
inc eax |
@@: |
stosd |
inc eax |
cmp eax, ecx |
jbe @B |
mov [sys_proc+PROC.pdt_0_phys], sys_proc-OS_BASE+PROC.pdt_0 |
mov eax, -1 |
mov edi, thr_slot_map+4 |
mov [edi-4], dword 0xFFFFFFF8 |
807,7 → 826,6 |
call free_page |
.no_wake_cpus: |
; REDIRECT ALL IRQ'S TO INT'S 0x20-0x2f |
mov esi, boot_initirq |
call boot_log |
/kernel/trunk/kernel32.inc |
---|
111,7 → 111,8 |
io_map_0 rd 1 |
io_map_1 rd 1 |
ht_lock rd 1 ;htab[0] stdin |
ht_lock rd 1 |
ht_free rd 1 ;htab[0] stdin |
ht_next rd 1 ;htab[1] stdout |
htab rd (4096-$)/4 ;htab[2] stderr |
pdt_0 rd 1024 |