Add malloc

This commit is contained in:
Nero 2019-08-30 17:40:47 +00:00
parent 6b424844e9
commit 385bf15414
2 changed files with 59 additions and 1 deletions

View File

@ -98,4 +98,8 @@ start:
%include "intr.asm"
%include "debug.asm"
align 512
%include "malloc.asm"
times 512 nop
align 512

54
kernel/malloc.asm Normal file
View File

@ -0,0 +1,54 @@
; All these functions assume DS=0
malloc_reset:
xor ax, ax
mov es, ax
call malloc_get_table
mov cx, 0x100 ; 256 words
rep stosw
ret
; Input:
; 0:BX - ptr to mem paragraph
; Output:
; AL - bitmask for byte in table
; BX - offset in table
malloc_calc_offsets:
; ch is bit offset
; cl is operand for bit shifts
push cx
; strip last 4 bits (offset within paragraph)
mov cl, 4
shr bx, cl
; backup the next 3 bits of bx (wll be bit offset)
mov ch, bl
and ch, 0x07
; calculate byte offset by shifting off 3 bits
mov cl, 3
shr bx, cl
; setup bit mask in al, shifted by bit offset
mov al, 0x01
mov cl, ch
shl al, cl
pop cx
; fallthrough to setup DI
malloc_get_table:
mov di, 0x0600
ret
malloc_mark_allocated:
call malloc_calc_offsets
or byte [bx+di], al
ret
malloc_mark_free:
call malloc_calc_offsets
not al
and byte [bx+di], al
ret