101 lines
1.2 KiB
Plaintext
101 lines
1.2 KiB
Plaintext
dw heap_start: 196608
|
|
dw heap_end: 262144
|
|
dw heap_current: 196608
|
|
|
|
new:
|
|
push bpr
|
|
mov spr, bpr
|
|
|
|
ldw bpr, rg0, 8
|
|
lli 12, rg1
|
|
add rg0, rg1, rg2
|
|
ldw heap_current, rg1
|
|
add rg1, rg2, rg3
|
|
ldw heap_end, rg4
|
|
cmp rg3, rg4
|
|
lli 0, rg5
|
|
jle _cmp_end_2
|
|
lli 1, rg5
|
|
_cmp_end_2:
|
|
cmp rg5, zero
|
|
jeq _else_4
|
|
_then_3:
|
|
lli 0, rg4
|
|
stw rg4, bpr, 8
|
|
jmp _ret
|
|
jmp _end_5
|
|
_else_4:
|
|
nop
|
|
_end_5:
|
|
lli 12, rg4
|
|
add rg1, rg4, rg5
|
|
add rg1, rg2, rg4
|
|
stw rg5, rg1
|
|
lli 4, rg6
|
|
add rg1, rg6, rg7
|
|
stw rg5, rg7
|
|
lli 8, rg6
|
|
add rg1, rg6, rg7
|
|
stw rg4, rg7
|
|
stw rg3, heap_current
|
|
stw rg1, bpr, 8
|
|
jmp _ret
|
|
|
|
alloc:
|
|
push bpr
|
|
mov spr, bpr
|
|
|
|
ldw bpr, rg0, 8
|
|
ldw bpr, rg1, 12
|
|
lli 4, rg2
|
|
add rg0, rg2, rg3
|
|
ldw rg3, rg2
|
|
lli 8, rg3
|
|
add rg0, rg3, rg4
|
|
ldw rg4, rg3
|
|
add rg2, rg1, rg4
|
|
cmp rg4, rg3
|
|
lli 0, rg5
|
|
jle _cmp_end_6
|
|
lli 1, rg5
|
|
_cmp_end_6:
|
|
cmp rg5, zero
|
|
jeq _else_8
|
|
_then_7:
|
|
lli 0, rg5
|
|
stw rg5, bpr, 8
|
|
jmp _ret
|
|
jmp _end_9
|
|
_else_8:
|
|
nop
|
|
_end_9:
|
|
lli 4, rg5
|
|
add rg0, rg5, rg6
|
|
stw rg4, rg6
|
|
stw rg2, bpr, 8
|
|
jmp _ret
|
|
|
|
destroy:
|
|
push bpr
|
|
mov spr, bpr
|
|
|
|
ldw bpr, rg0, 8
|
|
lli 0, rg1
|
|
stw rg1, bpr, 8
|
|
jmp _ret
|
|
|
|
reset_all:
|
|
push bpr
|
|
mov spr, bpr
|
|
|
|
ldw heap_start, rg0
|
|
stw rg0, heap_current
|
|
lli 0, rg0
|
|
stw rg0, bpr, 8
|
|
jmp _ret
|
|
|
|
_ret:
|
|
mov bpr, spr
|
|
pop bpr
|
|
return
|