1.new drivers loader

2.changes in 68.11 init_heap

git-svn-id: svn://kolibrios.org@188 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge)
2006-10-20 14:02:26 +00:00
parent 7d1826758e
commit ad55c9aee2
12 changed files with 876 additions and 854 deletions

View File

@@ -101,7 +101,6 @@ proc init_kernel_heap
mov ecx, 32
mov edx, eax
mov edi, HEAP_BASE
.l1:
stdcall map_page,edi,edx,PG_SW
add edi, 0x1000
@@ -626,11 +625,10 @@ restore block_flags
;;;;;;;;;;;;;; USER ;;;;;;;;;;;;;;;;;
HEAP_TOP equ 0x5FC00000
align 4
proc init_heap stdcall, heap_size:dword
locals
tab_count dd ?
endl
proc init_heap
mov ebx,[CURRENT_TASK]
shl ebx,8
@@ -641,60 +639,20 @@ proc init_heap stdcall, heap_size:dword
sub eax, 4096
ret
@@:
mov edx, [heap_size]
and edx, edx
jz .exit
add edx, (4095+4096)
and edx, not 4095
mov [heap_size], edx
add edx, 0x003FFFFF
and edx, not 0x003FFFFF
shr edx, 22
mov [tab_count], edx
mov esi, [PROC_BASE+APPDATA.mem_size+ebx]
add esi, 0x003FFFFF
and esi, not 0x003FFFFF
mov edi, esi
add esi, 4095
and esi, not 4095
mov eax, HEAP_TOP
mov [PROC_BASE+APPDATA.heap_base+ebx], esi
add esi, [heap_size]
mov [PROC_BASE+APPDATA.heap_top+ebx], esi
mov [PROC_BASE+APPDATA.heap_top+ebx], eax
mov eax, cr3
and eax, not 0xFFF
stdcall map_page,[current_pdir],eax,dword PG_SW
add edi, new_app_base
@@:
call alloc_page
test eax, eax
jz .exit
stdcall map_page_table, [current_pdir], edi, eax
add edi, 0x00400000
dec edx
jnz @B
mov ecx, [tab_count]
shl ecx, 12-2
mov ebx,[CURRENT_TASK]
shl ebx,8
mov edi, [PROC_BASE+APPDATA.heap_base+ebx]
add edi, new_app_base
shr edi, 10
mov esi, edi
add edi, pages_tab
xor eax, eax
cld
rep stosd
stdcall map_page,[current_pdir],dword PG_UNMAP
mov ebx, [heap_size]
mov eax, ebx
sub eax, esi
add esi, new_app_base
shr esi, 10
mov ecx, eax
sub eax, 4096
or ebx, FREE_BLOCK
mov [pages_tab+esi], ebx
or ecx, FREE_BLOCK
mov [pages_tab+esi], ecx
ret
.exit:
xor eax, eax
@@ -776,7 +734,7 @@ proc user_free stdcall, base:dword
shr esi, 12
mov eax, [pages_tab+esi*4]
test eax, USED_BLOCK
jz @f
jz .not_used
and eax, not 4095
mov ecx, eax
@@ -786,12 +744,16 @@ proc user_free stdcall, base:dword
sub ecx, 4096
shr ecx, 12
.release:
mov eax, [pages_tab+esi*4]
xor eax, eax
xchg eax, [pages_tab+esi*4]
test eax, 1
jz @F
call free_page
@@:
inc esi
dec ecx
jnz .release
@@:
.not_used:
mov ebx, [CURRENT_TASK]
shl ebx, 8
mov esi, dword [ebx+PROC_BASE+APPDATA.heap_base]; heap_base