Subversion Repositories Kolibri OS

Rev

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