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
|