61 lines
666 B
Plaintext
61 lines
666 B
Plaintext
#
|
|
#include <em_abs.h>
|
|
|
|
mes 2,EM_WSIZE,EM_PSIZE
|
|
|
|
.1
|
|
bss EM_PSIZE,0,0
|
|
.2
|
|
bss EM_WSIZE,0,0
|
|
|
|
pro $ctch,0
|
|
lol 0
|
|
loc EHEAP
|
|
beq *1
|
|
lae .1
|
|
loi EM_PSIZE
|
|
sig
|
|
asp EM_PSIZE
|
|
lol 0
|
|
trp
|
|
rtt
|
|
1
|
|
loc 1
|
|
ste .2
|
|
rtt
|
|
end
|
|
|
|
|
|
exp $_sbrk
|
|
pro $_sbrk,0
|
|
lor 2
|
|
lor 2
|
|
lpi $ctch
|
|
sig
|
|
lae .1
|
|
sti EM_PSIZE
|
|
loc 0
|
|
ste .2
|
|
lol 0
|
|
ads EM_WSIZE ; this is the new heap pointer, but watch out for overflow!
|
|
dup EM_PSIZE
|
|
lor 2
|
|
cmp ; compare with old heap pointer
|
|
zlt *1
|
|
str 2 ; The - possibly - occurring trap is caught
|
|
lae .1
|
|
loi EM_PSIZE
|
|
sig
|
|
asp EM_PSIZE
|
|
loe .2
|
|
zgt *1
|
|
ret EM_PSIZE
|
|
1
|
|
asp EM_PSIZE
|
|
loc -1
|
|
loc EM_WSIZE
|
|
loc EM_PSIZE
|
|
cii
|
|
ret EM_PSIZE
|
|
end
|