ack/lang/cem/libcc/mon/_sbrk.e
1990-01-22 11:48:01 +00:00

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