12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #
- ! $Source$
- ! $State$
- ! $Revision$
- ! Declare segments (the order is important).
- .sect .text
- .sect .rom
- .sect .data
- .sect .bss
- ! This file contains the code necessary to extend the ACK heap. This is called
- ! by a i86/libem helper function called .strhp, which takes care of updating
- ! some magic global variables --- defined here.
- ! Pointer to the current top of the heap.
- .sect .data
- .define .reghp
- .reghp:
- .data2 endbss
-
- ! Pointer to the current top of memory.
- .sect .data
- .define .limhp
- .limhp:
- .data2 endbss
-
- ! Claims more memory from the system, but does not actually change those
- ! global variables (.strhp does that). This does not use the C calling
- ! convention!
- !
- ! Stack: ( desired_limhp : actual_limhp )
- ! Also returns: ax = -1 on failure
- .sect .text
- .define BRK
- BRK:
- pop bx ! holds return address
- pop ax ! holds desired limhp
- cmp ax, sp ! compare sp with si
- jae fail ! si too big? (Overlaps stack?)
- cmp ax, endbss ! compare with bottom of heap
- jb fail ! si too small? (Overlaps bss?)
-
- return:
- push ax ! success
- jmp bx
-
- fail:
- mov ax, -1
- jmp return
|