forked from KolibriOS/kolibrios
New sysfunction 68.20: reallocate memory block
git-svn-id: svn://kolibrios.org@448 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
92829c00bb
commit
1408306a87
@ -752,6 +752,9 @@ proc user_free stdcall, base:dword
|
|||||||
test eax, 1
|
test eax, 1
|
||||||
jz @F
|
jz @F
|
||||||
call free_page
|
call free_page
|
||||||
|
mov eax, esi
|
||||||
|
shl eax, 12
|
||||||
|
invlpg [eax]
|
||||||
@@:
|
@@:
|
||||||
inc esi
|
inc esi
|
||||||
dec ecx
|
dec ecx
|
||||||
@ -764,6 +767,18 @@ proc user_free stdcall, base:dword
|
|||||||
sub ebx, [edx+SLOT_BASE+APPDATA.mem_size]
|
sub ebx, [edx+SLOT_BASE+APPDATA.mem_size]
|
||||||
neg ebx
|
neg ebx
|
||||||
call update_mem_size
|
call update_mem_size
|
||||||
|
call user_normalize
|
||||||
|
ret
|
||||||
|
.exit:
|
||||||
|
xor eax, eax
|
||||||
|
inc eax
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
user_normalize:
|
||||||
|
; in: esi=heap_base, edi=heap_top
|
||||||
|
; out: eax=0 <=> OK
|
||||||
|
; destroys: ebx,edx,esi,edi
|
||||||
add esi, new_app_base
|
add esi, new_app_base
|
||||||
add edi, new_app_base
|
add edi, new_app_base
|
||||||
shr esi, 12
|
shr esi, 12
|
||||||
@ -808,7 +823,239 @@ proc user_free stdcall, base:dword
|
|||||||
.err:
|
.err:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
endp
|
|
||||||
|
user_realloc:
|
||||||
|
; in: eax = pointer, ebx = new size
|
||||||
|
; out: eax = new pointer or NULL
|
||||||
|
test eax, eax
|
||||||
|
jnz @f
|
||||||
|
; realloc(NULL,sz) - same as malloc(sz)
|
||||||
|
push ebx
|
||||||
|
call user_alloc
|
||||||
|
ret
|
||||||
|
@@:
|
||||||
|
push ecx edx
|
||||||
|
lea ecx, [eax + new_app_base - 0x1000]
|
||||||
|
shr ecx, 12
|
||||||
|
mov edx, [page_tabs+ecx*4]
|
||||||
|
test edx, USED_BLOCK
|
||||||
|
jnz @f
|
||||||
|
; attempt to realloc invalid pointer
|
||||||
|
.ret0:
|
||||||
|
pop edx ecx
|
||||||
|
xor eax, eax
|
||||||
|
ret
|
||||||
|
@@:
|
||||||
|
add ebx, 0x1FFF
|
||||||
|
shr edx, 12
|
||||||
|
shr ebx, 12
|
||||||
|
; edx = allocated size, ebx = new size
|
||||||
|
add edx, ecx
|
||||||
|
add ebx, ecx
|
||||||
|
cmp edx, ebx
|
||||||
|
jb .realloc_add
|
||||||
|
; release part of allocated memory
|
||||||
|
.loop:
|
||||||
|
cmp edx, ebx
|
||||||
|
jz .release_done
|
||||||
|
dec edx
|
||||||
|
xor eax, eax
|
||||||
|
xchg eax, [page_tabs+edx*4]
|
||||||
|
test al, 1
|
||||||
|
jz .loop
|
||||||
|
call free_page
|
||||||
|
mov eax, edx
|
||||||
|
shl eax, 12
|
||||||
|
invlpg [eax]
|
||||||
|
jmp .loop
|
||||||
|
.release_done:
|
||||||
|
sub ebx, ecx
|
||||||
|
cmp ebx, 1
|
||||||
|
jnz .nofreeall
|
||||||
|
mov eax, [page_tabs+ecx*4]
|
||||||
|
and eax, not 0xFFF
|
||||||
|
mov edx, [CURRENT_TASK]
|
||||||
|
shl edx, 8
|
||||||
|
mov ebx, [SLOT_BASE+APPDATA.mem_size+edx]
|
||||||
|
sub ebx, eax
|
||||||
|
add ebx, 0x1000
|
||||||
|
or al, FREE_BLOCK
|
||||||
|
mov [page_tabs+ecx*4], eax
|
||||||
|
push esi edi
|
||||||
|
mov esi, [SLOT_BASE+APPDATA.heap_base+edx]
|
||||||
|
mov edi, [SLOT_BASE+APPDATA.heap_top+edx]
|
||||||
|
call update_mem_size
|
||||||
|
call user_normalize
|
||||||
|
pop edi esi
|
||||||
|
jmp .ret0 ; all freed
|
||||||
|
.nofreeall:
|
||||||
|
sub edx, ecx
|
||||||
|
shl ebx, 12
|
||||||
|
or ebx, USED_BLOCK
|
||||||
|
xchg [page_tabs+ecx*4], ebx
|
||||||
|
shr ebx, 12
|
||||||
|
sub ebx, edx
|
||||||
|
push ebx ecx edx
|
||||||
|
mov edx, [CURRENT_TASK]
|
||||||
|
shl edx, 8
|
||||||
|
shl ebx, 12
|
||||||
|
sub ebx, [SLOT_BASE+APPDATA.mem_size+edx]
|
||||||
|
neg ebx
|
||||||
|
call update_mem_size
|
||||||
|
pop edx ecx ebx
|
||||||
|
lea eax, [ecx+1-(new_app_base shr 12)]
|
||||||
|
shl eax, 12
|
||||||
|
push eax
|
||||||
|
add ecx, ebx
|
||||||
|
add edx, ecx
|
||||||
|
shl ebx, 12
|
||||||
|
jz .ret
|
||||||
|
push esi
|
||||||
|
mov esi, [CURRENT_TASK]
|
||||||
|
shl esi, 8
|
||||||
|
mov esi, [SLOT_BASE+APPDATA.heap_top+esi]
|
||||||
|
shr esi, 12
|
||||||
|
@@:
|
||||||
|
cmp edx, esi
|
||||||
|
jae .merge_done
|
||||||
|
mov eax, [page_tabs+edx*4]
|
||||||
|
test al, USED_BLOCK
|
||||||
|
jz .merge_done
|
||||||
|
and dword [page_tabs+edx*4], 0
|
||||||
|
and eax, not 0xFFF
|
||||||
|
add ebx, eax
|
||||||
|
add edx, eax
|
||||||
|
jmp @b
|
||||||
|
.merge_done:
|
||||||
|
pop esi
|
||||||
|
or ebx, FREE_BLOCK
|
||||||
|
mov [page_tabs+ecx*4], ebx
|
||||||
|
.ret:
|
||||||
|
pop eax edx ecx
|
||||||
|
ret
|
||||||
|
.realloc_add:
|
||||||
|
; get some additional memory
|
||||||
|
mov eax, [CURRENT_TASK]
|
||||||
|
shl eax, 8
|
||||||
|
mov eax, [SLOT_BASE+APPDATA.heap_top+eax]
|
||||||
|
add eax, new_app_base
|
||||||
|
shr eax, 12
|
||||||
|
cmp edx, eax
|
||||||
|
jae .cant_inplace
|
||||||
|
mov eax, [page_tabs+edx*4]
|
||||||
|
shr eax, 12
|
||||||
|
add eax, edx
|
||||||
|
cmp eax, ebx
|
||||||
|
jb .cant_inplace
|
||||||
|
sub eax, ebx
|
||||||
|
jz @f
|
||||||
|
shl eax, 12
|
||||||
|
or al, FREE_BLOCK
|
||||||
|
mov [page_tabs+ebx*4], eax
|
||||||
|
@@:
|
||||||
|
mov eax, ebx
|
||||||
|
sub eax, ecx
|
||||||
|
shl eax, 12
|
||||||
|
or al, USED_BLOCK
|
||||||
|
mov [page_tabs+ecx*4], eax
|
||||||
|
lea eax, [ecx+1-(new_app_base shr 12)]
|
||||||
|
shl eax, 12
|
||||||
|
push eax
|
||||||
|
push edi
|
||||||
|
lea edi, [page_tabs+edx*4]
|
||||||
|
mov eax, 2
|
||||||
|
sub ebx, edx
|
||||||
|
mov ecx, ebx
|
||||||
|
cld
|
||||||
|
rep stosd
|
||||||
|
pop edi
|
||||||
|
mov edx, [CURRENT_TASK]
|
||||||
|
shl edx, 8
|
||||||
|
shl ebx, 12
|
||||||
|
add ebx, [SLOT_BASE+APPDATA.mem_size+edx]
|
||||||
|
call update_mem_size
|
||||||
|
pop eax edx ecx
|
||||||
|
ret
|
||||||
|
.cant_inplace:
|
||||||
|
push esi edi
|
||||||
|
mov eax, [CURRENT_TASK]
|
||||||
|
shl eax, 8
|
||||||
|
mov esi, [SLOT_BASE+APPDATA.heap_base+eax]
|
||||||
|
mov edi, [SLOT_BASE+APPDATA.heap_top+eax]
|
||||||
|
add esi, new_app_base
|
||||||
|
add edi, new_app_base
|
||||||
|
shr esi, 12
|
||||||
|
shr edi, 12
|
||||||
|
sub ebx, ecx
|
||||||
|
.find_place:
|
||||||
|
cmp esi, edi
|
||||||
|
jae .place_not_found
|
||||||
|
mov eax, [page_tabs+esi*4]
|
||||||
|
test al, FREE_BLOCK
|
||||||
|
jz .next_place
|
||||||
|
shr eax, 12
|
||||||
|
cmp eax, ebx
|
||||||
|
jae .place_found
|
||||||
|
add esi, eax
|
||||||
|
jmp .find_place
|
||||||
|
.next_place:
|
||||||
|
shr eax, 12
|
||||||
|
add esi, eax
|
||||||
|
jmp .find_place
|
||||||
|
.place_not_found:
|
||||||
|
pop edi esi
|
||||||
|
jmp .ret0
|
||||||
|
.place_found:
|
||||||
|
sub eax, ebx
|
||||||
|
jz @f
|
||||||
|
push esi
|
||||||
|
add esi, eax
|
||||||
|
shl eax, 12
|
||||||
|
or al, FREE_BLOCK
|
||||||
|
mov [page_tabs+esi*4], eax
|
||||||
|
pop esi
|
||||||
|
@@:
|
||||||
|
mov eax, ebx
|
||||||
|
shl eax, 12
|
||||||
|
or al, USED_BLOCK
|
||||||
|
mov [page_tabs+esi*4], eax
|
||||||
|
inc esi
|
||||||
|
mov eax, esi
|
||||||
|
shl eax, 12
|
||||||
|
sub eax, new_app_base
|
||||||
|
push eax
|
||||||
|
mov eax, [page_tabs+ecx*4]
|
||||||
|
and eax, not 0xFFF
|
||||||
|
or al, FREE_BLOCK
|
||||||
|
sub edx, ecx
|
||||||
|
mov [page_tabs+ecx*4], eax
|
||||||
|
inc ecx
|
||||||
|
@@:
|
||||||
|
xor eax, eax
|
||||||
|
xchg eax, [page_tabs+ecx*4]
|
||||||
|
mov [page_tabs+esi*4], eax
|
||||||
|
mov eax, ecx
|
||||||
|
shl eax, 12
|
||||||
|
invlpg [eax]
|
||||||
|
inc ecx
|
||||||
|
inc esi
|
||||||
|
dec ebx
|
||||||
|
dec edx
|
||||||
|
jnz @b
|
||||||
|
push ebx
|
||||||
|
mov edx, [CURRENT_TASK]
|
||||||
|
shl edx, 8
|
||||||
|
shl ebx, 12
|
||||||
|
add ebx, [SLOT_BASE+APPDATA.mem_size+edx]
|
||||||
|
call update_mem_size
|
||||||
|
pop ebx
|
||||||
|
@@:
|
||||||
|
mov dword [page_tabs+esi*4], 2
|
||||||
|
inc esi
|
||||||
|
dec ebx
|
||||||
|
jnz @b
|
||||||
|
pop eax edi esi edx ecx
|
||||||
|
ret
|
||||||
|
|
||||||
if 0
|
if 0
|
||||||
align 4
|
align 4
|
||||||
|
@ -267,13 +267,12 @@ proc free_page
|
|||||||
pushfd
|
pushfd
|
||||||
cli
|
cli
|
||||||
shr eax, 12 ;page index
|
shr eax, 12 ;page index
|
||||||
mov ebx, sys_pgmap
|
bts dword [sys_pgmap], eax ;that's all!
|
||||||
bts [ebx], eax ;that's all!
|
|
||||||
cmc
|
cmc
|
||||||
adc [pg_data.pages_free], 0
|
adc [pg_data.pages_free], 0
|
||||||
shr eax, 3
|
shr eax, 3
|
||||||
and eax, not 3 ;dword offset from page_map
|
and eax, not 3 ;dword offset from page_map
|
||||||
add eax, ebx
|
add eax, sys_pgmap
|
||||||
cmp [page_start], eax
|
cmp [page_start], eax
|
||||||
ja @f
|
ja @f
|
||||||
popfd
|
popfd
|
||||||
@ -1082,7 +1081,7 @@ new_services:
|
|||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
cmp eax, 19
|
cmp eax, 19
|
||||||
ja .fail
|
ja @f
|
||||||
add ebx, new_app_base
|
add ebx, new_app_base
|
||||||
cmp ebx, new_app_base
|
cmp ebx, new_app_base
|
||||||
jb .fail
|
jb .fail
|
||||||
@ -1090,6 +1089,14 @@ new_services:
|
|||||||
mov [esp+36], eax
|
mov [esp+36], eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
@@:
|
||||||
|
cmp eax, 20
|
||||||
|
ja .fail
|
||||||
|
mov eax, ecx
|
||||||
|
call user_realloc
|
||||||
|
mov [esp+36], eax
|
||||||
|
ret
|
||||||
|
|
||||||
.fail:
|
.fail:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
mov [esp+36], eax
|
mov [esp+36], eax
|
||||||
|
@ -3316,7 +3316,7 @@ IPC
|
|||||||
======================================================================
|
======================================================================
|
||||||
================ ”γ<CEB3>ζ¨ο 63 - ΰ ΅®β α ¤®α<C2AE>®© ®β« ¤<C2A0>¨. ===============
|
================ ”γ<CEB3>ζ¨ο 63 - ΰ ΅®β α ¤®α<C2AE>®© ®β« ¤<C2A0>¨. ===============
|
||||||
======================================================================
|
======================================================================
|
||||||
„®áª ®â« ¤ª¨ ¯à¥¤áâ ¢«ï¥â ᮡ®© á¨áâ¥¬ë© ¡ãä¥à ( 512 ¡ ©â),
|
„®áª ®â« ¤ª¨ ¯à¥¤áâ ¢«ï¥â ᮡ®© á¨áâ¥¬ë© ¡ãä¥à ( 4096 ¡ ©â),
|
||||||
Ά <20>®β®ΰλ© «ξ΅ ο ―ΰ®£ΰ ¬¬ ¬®¦¥β § ―¨α βμ (Ά®®΅ι¥ £®Ά®ΰο, ―ந§Ά®«μλ¥)
|
Ά <20>®β®ΰλ© «ξ΅ ο ―ΰ®£ΰ ¬¬ ¬®¦¥β § ―¨α βμ (Ά®®΅ι¥ £®Ά®ΰο, ―ந§Ά®«μλ¥)
|
||||||
¤ λ¥ ¨ ¨§ <20>®β®ΰ®£® ¤ΰγ£ ο ―ΰ®£ΰ ¬¬ ¬®¦¥β νβ¨ ¤ λ¥ ―ΰ®η¨β βμ.
|
¤ λ¥ ¨ ¨§ <20>®β®ΰ®£® ¤ΰγ£ ο ―ΰ®£ΰ ¬¬ ¬®¦¥β νβ¨ ¤ λ¥ ―ΰ®η¨β βμ.
|
||||||
…αβμ ᮣ« 襨¥, Ά α®®βΆ¥βαβΆ¨¨ α <20>®β®ΰλ¬ § ―¨αλΆ ¥¬λ¥ ¤ λ¥ -
|
…αβμ ᮣ« 襨¥, Ά α®®βΆ¥βαβΆ¨¨ α <20>®β®ΰλ¬ § ―¨αλΆ ¥¬λ¥ ¤ λ¥ -
|
||||||
@ -3644,7 +3644,8 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* eax = 1 - γα―¥θ®
|
* eax = 1 - γα―¥θ®
|
||||||
* eax = 0 - ¥γ¤ η
|
* eax = 0 - ¥γ¤ η
|
||||||
‡ ¬¥η ¨ο:
|
‡ ¬¥η ¨ο:
|
||||||
* <20>«®ª ¯ ¬ï⨠¤®«¦¥ ¡ëâì à ¥¥ ¢ë¤¥«¥ ¯®¤äãªæ¨¥© 12.
|
* <20>«®ª ¯ ¬ï⨠¤®«¦¥ ¡ëâì à ¥¥ ¢ë¤¥«¥ ¯®¤äãªæ¨¥© 12
|
||||||
|
¨«¨ ¯®¤äãªæ¨¥© 20.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
===== ”γ<CEB3>ζ¨ο 68, ―®¤δγ<CEB3>ζ¨ο 14 - ®¦¨¤ βμ ¨§Ά¥ι¥¨ο ®β ¤ΰ ©Ά¥ΰ . =====
|
===== ”γ<CEB3>ζ¨ο 68, ―®¤δγ<CEB3>ζ¨ο 14 - ®¦¨¤ βμ ¨§Ά¥ι¥¨ο ®β ¤ΰ ©Ά¥ΰ . =====
|
||||||
@ -3736,6 +3737,30 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
§ <C2A7> η¨Ά ξ騩αο γ«ρ¬. <20>¥ΰΆλ© dword Ά αβΰγ<CEB0>βγΰ¥ οΆ«ο¥βαο
|
§ <C2A7> η¨Ά ξ騩αο γ«ρ¬. <20>¥ΰΆλ© dword Ά αβΰγ<CEB0>βγΰ¥ οΆ«ο¥βαο
|
||||||
γ<> § ⥫¥¬ ¨¬ο δγ<CEB3>樨, Άβ®ΰ®© ᮤ¥ΰ¦¨β ¤ΰ¥α δγ<CEB3>樨.
|
γ<> § ⥫¥¬ ¨¬ο δγ<CEB3>樨, Άβ®ΰ®© ᮤ¥ΰ¦¨β ¤ΰ¥α δγ<CEB3>樨.
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
====== ”ãªæ¨ï 68, ¯®¤äãªæ¨ï 20 - ¯¥à¥à á¯à¥¤¥«¨âì ¡«®ª ¯ ¬ïâ¨. =====
|
||||||
|
======================================================================
|
||||||
|
<EFBFBD> à ¬¥âàë:
|
||||||
|
* eax = 68 - ®¬¥à äãªæ¨¨
|
||||||
|
* ebx = 20 - ®¬¥à ¯®¤äãªæ¨¨
|
||||||
|
* ecx = ®¢ë© à §¬¥à ¢ ¡ ©â å
|
||||||
|
* edx = 㪠§ ⥫ì 㦥 ¢ë¤¥«¥ë© ¡«®ª ¯ ¬ïâ¨
|
||||||
|
‚®§¢à é ¥¬®¥ § 票¥:
|
||||||
|
* eax = 㪠§ â¥«ì ¯¥à¥à á¯à¥¤¥«ñë© ¡«®ª, 0 ¯à¨ ®è¨¡ª¥
|
||||||
|
‡ ¬¥ç ¨ï:
|
||||||
|
* <20>।¢ à¨â¥«ì® á«¥¤ã¥â ¨¨æ¨ «¨§¨à®¢ âì ªãçã ¯à®æ¥áá ¢ë§®¢®¬
|
||||||
|
¯®¤äãªæ¨¨ 11.
|
||||||
|
* ”ãªæ¨ï ¢ë¤¥«ï¥â 楫®¥ ç¨á«® áâà ¨æ (4 Š¡) â ª, çâ® ä ªâ¨ç¥áª¨©
|
||||||
|
à §¬¥à ¢ë¤¥«¥®£® ¡«®ª ¡®«ìè¥ ¨«¨ à ¢¥ § ¯à®è¥®¬ã.
|
||||||
|
* …᫨ edx=0, â® ¢ë§®¢ äãªæ¨¨ íª¢¨¢ «¥â¥ ¢ë¤¥«¥¨î ¯ ¬ïâ¨
|
||||||
|
¯®¤äãªæ¨¥© 12. ‚ ¯à®â¨¢®¬ á«ãç ¥ ¡«®ª ¯ ¬ï⨠¯® ¤à¥áã edx
|
||||||
|
¤®«¦¥ ¡ëâì à ¥¥ ¢ë¤¥«¥ ¯®¤äãªæ¨¥© 12 ¨«¨
|
||||||
|
®¯¨áë¢ ¥¬®© ¯®¤äãªæ¨¥©.
|
||||||
|
* …᫨ ecx=0, â® äãªæ¨ï ®á¢®¡®¦¤ ¥â ¡«®ª ¯ ¬ï⨠¯® ¤à¥áã edx ¨
|
||||||
|
¢®§¢à é ¥â 0.
|
||||||
|
* ‘®¤¥à¦¨¬®¥ ¯ ¬ï⨠¢¯«®âì ¤® ¨¬¥ì襣® ¨§ áâ ண® ¨ ®¢®£®
|
||||||
|
à §¬¥à®¢ á®åà ï¥âáï.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
======================== ”γ<CEB3>ζ¨ο 69 - ®β« ¤<C2A0> . =======================
|
======================== ”γ<CEB3>ζ¨ο 69 - ®β« ¤<C2A0> . =======================
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -4480,9 +4505,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
7, 8 δγ<CEB3>樨 21)
|
7, 8 δγ<CEB3>樨 21)
|
||||||
* 2 = δγ<CEB3>ζ¨ο ¥ ―®¤¤¥ΰ¦¨Ά ¥βαο ¤«ο ¤ ®© δ ©«®Ά®© α¨α⥬λ
|
* 2 = δγ<CEB3>ζ¨ο ¥ ―®¤¤¥ΰ¦¨Ά ¥βαο ¤«ο ¤ ®© δ ©«®Ά®© α¨α⥬λ
|
||||||
* 3 = ¥¨§Ά¥αβ ο δ ©«®Ά ο α¨α⥬
|
* 3 = ¥¨§Ά¥αβ ο δ ©«®Ά ο α¨α⥬
|
||||||
* 4 = ¢®§¢à é ¥âáï ⮫쪮 äãªæ¨¥© rename ¯à¨ ¯¥à¥¤ ç¥ á¨«ì®
|
* 4 = § १¥à¢¨à®¢ ®, ¨ª®£¤ ¥ ¢®§¢à é ¥âáï ¢ ⥪ã饩 ॠ«¨§ 樨
|
||||||
¥¢¥à®£® ¯ à ¬¥âà ¨ ¨ª ª ¥ ᮮ⢥âáâ¢ã¥â ®¯¨á ¨î
|
|
||||||
¢ ¨á室¨ª å ï¤à "partition not defined at hd"
|
|
||||||
* 5 = δ ©« ¥ ©¤¥
|
* 5 = δ ©« ¥ ©¤¥
|
||||||
* 6 = δ ©« § <C2A7>®η¨«αο
|
* 6 = δ ©« § <C2A7>®η¨«αο
|
||||||
* 7 = γ<> § β¥«μ Ά¥ ― ¬οβ¨ ―ਫ®¦¥¨ο
|
* 7 = γ<> § β¥«μ Ά¥ ― ¬οβ¨ ―ਫ®¦¥¨ο
|
||||||
|
@ -3285,7 +3285,7 @@ Remarks:
|
|||||||
============== Function 63 - work with the debug board. ==============
|
============== Function 63 - work with the debug board. ==============
|
||||||
======================================================================
|
======================================================================
|
||||||
The debug board is the global system buffer (with the size
|
The debug board is the global system buffer (with the size
|
||||||
512 bytes), to which any program can write (generally speaking,
|
4096 bytes), to which any program can write (generally speaking,
|
||||||
arbitrary) data and from which other program can read these data.
|
arbitrary) data and from which other program can read these data.
|
||||||
By the agreement written data are text strings interpreted as
|
By the agreement written data are text strings interpreted as
|
||||||
debug messages on a course of program execution. The kernel in
|
debug messages on a course of program execution. The kernel in
|
||||||
@ -3615,7 +3615,8 @@ Returned value:
|
|||||||
* eax = 1 - success
|
* eax = 1 - success
|
||||||
* eax = 0 - failed
|
* eax = 0 - failed
|
||||||
Remarks:
|
Remarks:
|
||||||
* The memory block must have been allocated by subfunction 12.
|
* The memory block must have been allocated by subfunction 12
|
||||||
|
or subfunction 20.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
======== Function 68, subfunction 14 - wait for driver notify. =======
|
======== Function 68, subfunction 14 - wait for driver notify. =======
|
||||||
@ -3705,6 +3706,29 @@ Remarks:
|
|||||||
by zero. The first dword in structure points to function name,
|
by zero. The first dword in structure points to function name,
|
||||||
the second dword contains address of function.
|
the second dword contains address of function.
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
======= Function 68, subfunction 20 - reallocate memory block. =======
|
||||||
|
======================================================================
|
||||||
|
Parameters:
|
||||||
|
* eax = 68 - function number
|
||||||
|
* ebx = 20 - subfunction number
|
||||||
|
* ecx = new size in bytes
|
||||||
|
* edx = pointer to already allocated block
|
||||||
|
Returned value:
|
||||||
|
* eax = pointer to the reallocated block, 0 = error
|
||||||
|
Remarks:
|
||||||
|
* Before this call one must initialize process heap by call to
|
||||||
|
subfunction 11.
|
||||||
|
* The function allocates an integer number of pages (4 Kb) in such
|
||||||
|
way that the real size of allocated block is more than or equal to
|
||||||
|
requested size.
|
||||||
|
* If edx=0, the function call is equivalent to memory allocation
|
||||||
|
with subfunction 12. Otherwise the block at edx
|
||||||
|
must be allocated earlier with subfunction 12 or this subfunction.
|
||||||
|
* If ecx=0, the function frees memory block at edx and returns 0.
|
||||||
|
* The contents of the block are unchanged up to the shorter of
|
||||||
|
the new and old sizes.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
====================== Fucntion 69 - debugging. ======================
|
====================== Fucntion 69 - debugging. ======================
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -4435,10 +4459,7 @@ Codes of events:
|
|||||||
(by subfunctions 7, 8 of function 21)
|
(by subfunctions 7, 8 of function 21)
|
||||||
* 2 = function is not supported for the given file system
|
* 2 = function is not supported for the given file system
|
||||||
* 3 = unknown file system
|
* 3 = unknown file system
|
||||||
* 4 = is returned only from function 'rename' by transmission of
|
* 4 = reserved, is never returned in the current implementation
|
||||||
the strongly incorrect parameter and in any way does not
|
|
||||||
correspond to the description in the kernel sources
|
|
||||||
"partition not defined at hd"
|
|
||||||
* 5 = file not found
|
* 5 = file not found
|
||||||
* 6 = end of file, EOF
|
* 6 = end of file, EOF
|
||||||
* 7 = pointer lies outside of application memory
|
* 7 = pointer lies outside of application memory
|
||||||
|
Loading…
Reference in New Issue
Block a user