.TITLE CHDR ; ; Enter and leave from C .ASECT .=44 .WORD 42100 ; Make a virtual job with lower case .PSECT C$TEXT .ENABL GBL,LC c$stack:: emt 340 ; do a dummy .ttinr clrb @#44 .mcall .settop .settop #-2 ; claim as much VM as possible mov r0,c$maxhi ; use return as new high limit jsr pc,.main ; call the .main program mov r0,-(sp) ; save return from main. jsr pc,exit ; do exit code ARG1 = 4 sbreak:: mov r5,-(sp) ; save r5 on stack mov sp,r5 ; use r5 as frame reference mov ARG1(r5),r1 ; pick up first argument inc r1 ; increment in case odd bic #1,r1 ; clear low bit beq 1$ ; if now == 0 return error mov c$limit,r0 ; get previous high limit add r0,r1 ; add it to argument bcs 1$ ; return error if overflow cmp c$maxhi,r1 ; is value ove virtual high limit blo 1$ ; return error if so mov r1,c$limit ; else update high limit br 2$ ; and return pointer to allocated space 1$: clr r0 ; error return - clear r0 2$: jmp c$rets ; return .psect c$data c$limit == .+2 ; heap's current high limit .limit c$maxhi:: ; program's virtual high .blkw 1 .ascii /copyright (c) 1978 by Whitesmiths, Ltd./ .end c$stack