123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #
- #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
|