Subversion Repositories Kolibri OS

Rev

Rev 8170 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
8129 IgorA 1
;/***
2
 
3
MenuetHeapInit = @@Kolibri@_HeapInit$qpvt1t1
4
 
5
MenuetHeapAlloc = @@Kolibri@Alloc$qui
6
 
7
MenuetHeapReAlloc = @@Kolibri@ReAlloc$qpvui
8
 
9
MenuetHeapFree = @@Kolibri@Free$qpv
10
 
11
MenuetHeapFreeAndThreadFinish = @Kolibri@_FreeAndThreadFinish$qpvpi
12
 
13
proc @Kolibri@_SetUseMemory$qui
14
  push ebx
15
  mov  eax,64
16
  mov  ebx,1
17
  mov  ecx,[esp+8]
18
  int  0x40
19
  pop  ebx
20
  test eax,eax
21
  jnz  .set_use_memory_nomem
22
  push ecx
23
  push dword [@Kolibri@_MenuetMemBlock]
24
  call @@MemoryHeap@ResizeBlock$q20MemoryHeap@TMemBlockpv
25
  add  esp,8
26
  mov  al,1
27
  ret
28
.set_use_memory_nomem:
29
  xor  al,al
30
  ret
31
endp
32
 
33
proc @Kolibri@_RecalculateUseMemory$qui
34
  mov  eax,dword [esp+4]
35
  mov  ecx,(U_END + 3) and not 3
36
  cmp  eax,ecx
37
  jna  .recalculate_use_memory_min
38
  push ebx
39
  sub  eax,ecx
40
  mov  ebx,6
41
  mul  ebx
42
  dec  ebx
43
  div  ebx
44
  add  eax,((U_END + 3) and not 3) + 3
45
  and  eax,not 3
46
  pop  ebx
47
  ret
48
.recalculate_use_memory_min:
49
  mov  eax,ecx
50
  ret
51
endp
52
 
53
proc @Kolibri@_FreeAndThreadFinish$qpvpi
54
  mov  ebx,1
55
  mov  ecx,[esp+8]
56
  jmp  .heap_free_tf_wait
57
.heap_free_tf_wait_loop:
58
  mov  eax,5
59
  int  0x40
60
  shl  ebx,1
61
  cmp  ebx,MENUET_MUTEX_MAX_TIME_WAIT
62
  jna  .heap_free_tf_wait
63
  mov  ebx,MENUET_MUTEX_MAX_TIME_WAIT
64
.heap_free_tf_wait:
65
  cmp  dword [ecx],0
66
  jnz  @Kolibri@ExitProcess$qv
67
  lock bts dword [@Kolibri@_MemHeapMutex],0
68
  jc   .heap_free_tf_wait_loop
69
  push dword [esp+4]
70
  push @Kolibri@_MenuetFreeSpace
71
  call @@MemoryHeap@Free$qr21MemoryHeap@TFreeSpacepv
72
  add  esp,8
73
  mov  byte [@Kolibri@_MemHeapMutex],0x40
74
  or   eax,-1
75
  int  0x40
76
endp
77
 
78
macro call func
79
{
80
  if func eq @MemoryHeap@_FirstNotZeroBit$qui
81
    bsf  eax,[esp]
82
  else if func eq @MemoryHeap@_CopyMemItemArray$quiuiui
83
    xchg edi,[esp]
84
    xchg esi,[esp+4]
85
    mov  ecx,[esp+8]
86
    cld
87
    sub  ecx,esi
88
    shr  ecx,2
89
    rep movs dword [edi],[esi]
90
    xchg edi,[esp]
91
    xchg esi,[esp+4]
92
  else
93
    call func
94
  end if
95
}
96
 
97
;/**/