diff --git a/kernel/branches/kolibri-process/core/memory.inc b/kernel/branches/kolibri-process/core/memory.inc index 47927625c..1166308d9 100644 --- a/kernel/branches/kolibri-process/core/memory.inc +++ b/kernel/branches/kolibri-process/core/memory.inc @@ -833,7 +833,7 @@ proc map_mem_ipc stdcall, lin_addr:dword,slot:dword,\ .map: stdcall safe_map_page, [slot], [req_access], [ofs] jnc .exit - add dword [ebp-4], PAGE_SIZE + add [count], PAGE_SIZE add [ofs], PAGE_SIZE dec ecx jz .exit @@ -852,60 +852,71 @@ proc map_mem_ipc stdcall, lin_addr:dword,slot:dword,\ stdcall map_page, esi, eax, PG_SW xor edx, edx jmp .map - .exit: - pop eax + mov eax, [count] ret endp proc map_memEx stdcall, lin_addr:dword,slot:dword,\ ofs:dword,buf_size:dword,req_access:dword - push 0 ; initialize number of mapped bytes + locals + count dd ? + process dd ? + endl + mov [count], 0 cmp [buf_size], 0 jz .exit mov eax, [slot] shl eax, 8 mov eax, [SLOT_BASE+eax+APPDATA.process] - mov eax, [eax+PROC.pdt_0_phys] - and eax, 0xFFFFF000 - - stdcall map_page, [proc_mem_pdir], eax, PG_UW - mov ebx, [ofs] - shr ebx, 22 - mov esi, [proc_mem_pdir] - mov edi, [proc_mem_tab] - mov eax, [esi+ebx*4] - and eax, 0xFFFFF000 test eax, eax jz .exit - stdcall map_page, edi, eax, PG_UW + mov [process], eax + mov ebx, [ofs] + shr ebx, 22 + mov eax, [eax+PROC.pdt_0+ebx*4] ;get page table + mov esi, [proc_mem_tab] + and eax, 0xFFFFF000 + jz .exit + stdcall map_page, esi, eax, PG_SW @@: mov edi, [lin_addr] and edi, 0xFFFFF000 mov ecx, [buf_size] add ecx, 4095 shr ecx, 12 - inc ecx + inc ecx ; ??????????? mov edx, [ofs] shr edx, 12 and edx, 0x3FF - mov esi, [proc_mem_tab] - .map: stdcall safe_map_page, [slot], [req_access], [ofs] jnc .exit - add dword [ebp-4], 0x1000 - add edi, 0x1000 - add [ofs], 0x1000 - inc edx + add [count], PAGE_SIZE + add [ofs], PAGE_SIZE dec ecx + jz .exit + + add edi, PAGE_SIZE + inc edx + cmp edx, 1024 jnz .map + + inc ebx + mov eax, [process] + mov eax, [eax+PROC.pdt_0+ebx*4] + and eax, 0xFFFFF000 + jz .exit + + stdcall map_page, esi, eax, PG_SW + xor edx, edx + jmp .map .exit: - pop eax + mov eax, [count] ret endp diff --git a/kernel/branches/kolibri-process/core/taskman.inc b/kernel/branches/kolibri-process/core/taskman.inc index cea39f213..577a41169 100644 --- a/kernel/branches/kolibri-process/core/taskman.inc +++ b/kernel/branches/kolibri-process/core/taskman.inc @@ -701,6 +701,10 @@ check_region: ;result: ; eax = 1 region lays in app memory ; eax = 0 region don't lays in app memory + + mov eax, 1 + ret +if 0 mov eax, [CURRENT_TASK] ; jmp check_process_region ;----------------------------------------------------------------------------- @@ -725,57 +729,13 @@ check_region: mov eax, 1 ret - - -; call MEM_Get_Linear_Address -; push ebx -; push ecx -; push edx -; mov edx,ebx -; and edx,not (4096-1) -; sub ebx,edx -; add ecx,ebx -; mov ebx,edx -; add ecx,(4096-1) -; and ecx,not (4096-1) -;.loop: -;;eax - linear address of page directory -;;ebx - current page -;;ecx - current size -; mov edx,ebx -; shr edx,22 -; mov edx,[eax+4*edx] -; and edx,not (4096-1) -; test edx,edx -; jz .failed1 -; push eax -; mov eax,edx -; call MEM_Get_Linear_Address -; mov edx,ebx -; shr edx,12 -; and edx,(1024-1) -; mov eax,[eax+4*edx] -; and eax,not (4096-1) -; test eax,eax -; pop eax -; jz .failed1 -; add ebx,4096 -; sub ecx,4096 -; jg .loop -; pop edx -; pop ecx -; pop ebx .ok: mov eax, 1 ret -; -;.failed1: -; pop edx -; pop ecx -; pop ebx .failed: xor eax, eax ret +end if align 4 proc read_process_memory