Rev 164 | Rev 172 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 164 | Rev 170 | ||
---|---|---|---|
Line 125... | Line 125... | ||
125 | mov [ebx+list_next], eax |
125 | mov [ebx+list_next], eax |
126 | mov [ebx+block_base], HEAP_BASE+4096*MEM_BLOCK_SIZE |
126 | mov [ebx+block_base], HEAP_BASE+4096*MEM_BLOCK_SIZE |
127 | 127 | ||
Line 128... | Line 128... | ||
128 | mov ecx, [MEM_AMOUNT] |
128 | mov ecx, [MEM_AMOUNT] |
129 | sub ecx, 0x00C00000 + 4096*MEM_BLOCK_SIZE |
129 | sub ecx, 0x01000000 + 4096*MEM_BLOCK_SIZE |
- | 130 | mov [heap_size], ecx |
|
- | 131 | mov [heap_free], ecx |
|
130 | mov [ebx+block_size], ecx |
132 | mov [ebx+block_size], ecx |
131 | mov [ebx+block_flags], FREE_BLOCK |
133 | mov [ebx+block_flags], FREE_BLOCK |
Line 132... | Line 134... | ||
132 | 134 | ||
133 | mov [mem_block_mask], eax |
135 | mov [mem_block_mask], eax |
Line 134... | Line 136... | ||
134 | mov [mem_block_mask+4],0x80000000 |
136 | mov [mem_block_mask+4],0x80000000 |
135 | 137 | ||
136 | mov [mem_used_list], eax |
138 | mov [mem_used_list], eax |
- | 139 | mov [mem_block_list+63*4], ebx |
|
- | 140 | mov byte [mem_block_map], 0xFC |
|
137 | mov [mem_block_list+63*4], ebx |
141 | mov [heap_blocks], 4095 |
138 | mov byte [mem_block_map], 0xFC |
142 | mov [free_blocks], 4095 |
Line 139... | Line 143... | ||
139 | ret |
143 | ret |
140 | endp |
144 | endp |
Line 188... | Line 192... | ||
188 | xor eax, eax |
192 | xor eax, eax |
189 | ret |
193 | ret |
190 | endp |
194 | endp |
191 | 195 | ||
Line 192... | Line -... | ||
192 | - | ||
193 | align 4 |
196 | align 4 |
194 | proc alloc_mem_block |
197 | proc alloc_mem_block |
Line 195... | Line 198... | ||
195 | 198 | ||
196 | pushfd |
199 | pushfd |
Line 214... | Line 217... | ||
214 | shl ebx, 3 |
217 | shl ebx, 3 |
215 | add eax,ebx |
218 | add eax,ebx |
216 | shl eax, 5 |
219 | shl eax, 5 |
217 | add eax, [mem_block_arr] |
220 | add eax, [mem_block_arr] |
218 | popfd |
221 | dec [free_blocks] |
- | 222 | popfd |
|
219 | ret |
223 | ret |
220 | endp |
224 | endp |
221 | 225 | ||
Line 222... | Line 226... | ||
222 | proc free_mem_block |
226 | proc free_mem_block |
Line 226... | Line 230... | ||
226 | shr eax, 5 |
230 | shr eax, 5 |
227 | 231 | ||
Line 228... | Line 232... | ||
228 | mov ebx, mem_block_map |
232 | mov ebx, mem_block_map |
229 | bts [ebx], eax |
233 | bts [ebx], eax |
- | 234 | inc [free_blocks] |
|
230 | shr eax, 3 |
235 | shr eax, 3 |
231 | and eax, not 3 |
236 | and eax, not 3 |
232 | add eax, ebx |
237 | add eax, ebx |
233 | cmp [mem_block_start], eax |
238 | cmp [mem_block_start], eax |
234 | ja @f |
239 | ja @f |
Line 254... | Line 259... | ||
254 | mov eax, [size] |
259 | mov eax, [size] |
255 | add eax, 0xFFF |
260 | add eax, 0xFFF |
256 | and eax, 0xFFFFF000; |
261 | and eax, 0xFFFFF000; |
257 | mov [size], eax |
262 | mov [size], eax |
- | 263 | cmp eax, [heap_free] |
|
- | 264 | ja .error |
|
Line 258... | Line 265... | ||
258 | 265 | ||
259 | shr eax, 12 |
266 | shr eax, 12 |
Line 260... | Line 267... | ||
260 | sub eax, 1 |
267 | sub eax, 1 |
Line 339... | Line 346... | ||
339 | @@: |
346 | @@: |
340 | mov [esi+block_flags], USED_BLOCK |
347 | mov [esi+block_flags], USED_BLOCK |
341 | mov [mem_used_list], esi |
348 | mov [mem_used_list], esi |
342 | mov eax, [esi+block_base] |
349 | mov eax, [esi+block_base] |
343 | popfd |
350 | mov ebx, [size] |
- | 351 | sub [heap_free], ebx |
|
- | 352 | popfd |
|
344 | ret |
353 | ret |
345 | 354 | ||
Line 346... | Line 355... | ||
346 | .m_eq_size: |
355 | .m_eq_size: |
347 | remove_from_list edi |
356 | remove_from_list edi |
Line 359... | Line 368... | ||
359 | @@: |
368 | @@: |
360 | mov [mem_used_list], edi |
369 | mov [mem_used_list], edi |
361 | mov [edi+block_flags], USED_BLOCK |
370 | mov [edi+block_flags], USED_BLOCK |
362 | mov eax, [edi+block_base] |
371 | mov eax, [edi+block_base] |
363 | popfd |
372 | mov ebx, [size] |
- | 373 | sub [heap_free], ebx |
|
- | 374 | popfd |
|
364 | ret |
375 | ret |
365 | .error: |
376 | .error: |
366 | xor eax, eax |
377 | xor eax, eax |
367 | popfd |
378 | popfd |
368 | ret |
379 | ret |
Line 384... | Line 395... | ||
384 | .found: |
395 | .found: |
385 | cmp [esi+block_flags], USED_BLOCK |
396 | cmp [esi+block_flags], USED_BLOCK |
386 | jne .fail |
397 | jne .fail |
387 | 398 | ||
Line -... | Line 399... | ||
- | 399 | mov eax, [esi+block_size] |
|
- | 400 | add [heap_free], eax |
|
- | 401 | ||
388 | mov edi, [esi+block_next] |
402 | mov edi, [esi+block_next] |
389 | test edi, edi |
403 | test edi, edi |
390 | jz .prev |
404 | jz .prev |
Line 391... | Line 405... | ||
391 | 405 |