; 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