356,7 → 356,7 |
|
mov eax, [app_size] |
add eax, 4095 |
and eax, NOT(4095) |
and eax, not 4095 |
mov [app_size], eax |
mov ebx, eax |
shr eax, 12 |
363,39 → 363,49 |
mov [app_pages], eax |
|
add ebx, 0x3FFFFF |
and ebx, NOT(0x3FFFFF) |
and ebx, not 0x3FFFFF |
shr ebx, 22 |
mov [app_tabs], ebx |
|
mov ecx, [img_size] |
add ecx, 4095 |
and ecx, NOT(4095) |
and ecx, not 4095 |
|
mov [img_size], ecx |
shr ecx, 12 |
mov [img_pages], ecx |
|
if GREEDY_KERNEL |
lea eax, [ecx+ebx+2] ;only image size |
else |
lea eax, [eax+ebx+2] ;all requested memory |
end if |
; if GREEDY_KERNEL |
; lea eax, [ecx+ebx+2] ;only image size |
; else |
; lea eax, [eax+ebx+2] ;all requested memory |
; end if |
; cmp eax, [pg_data.pages_free] |
; ja .fail |
|
call _alloc_page |
test eax, eax |
mov [dir_addr], eax |
jz .fail |
mov [dir_addr], eax |
|
;lea edi, [eax + OS_BASE] |
;mov ecx, (OS_BASE shr 20)/4 |
;xor eax, eax |
;cld |
;rep stosd |
|
;mov ecx, 1024-(OS_BASE shr 20)/4 |
;mov esi, _sys_pdbr+(OS_BASE shr 20) |
;rep movsd |
|
lea edi, [eax + OS_BASE] |
mov ecx, (OS_BASE shr 20)/4 |
mov ecx, 512 |
xor eax, eax |
cld |
rep stosd |
|
mov ecx, 1024-(OS_BASE shr 20)/4 |
mov esi, _sys_pdbr+(OS_BASE shr 20) |
mov ecx, 512 |
mov esi, _sys_pdbr+(HEAP_BASE shr 20) |
rep movsd |
|
mov edi, [dir_addr] |
402,18 → 412,19 |
lea eax, [edi+PG_SW] |
mov [edi+OS_BASE+(page_tabs shr 20)], eax |
|
and eax, -4096 |
mov eax, edi |
call set_cr3 |
|
|
mov edx, [app_tabs] |
xor edi, edi |
mov edi, master_tab |
@@: |
call _alloc_page |
test eax, eax |
jz .fail |
|
stdcall map_page_table, edi, eax |
add edi, 0x00400000 |
or eax, PG_UW |
stosd |
dec edx |
jnz @B |
|