.sect .text; .sect .rom; .sect .data; .sect .bss

.define begtext,begdata,begbss,syscal
.define hol0,.reghp,.limhp,.trppc,.ignmask
.define ERANGE,ESET,EHEAP,ECASE,EILLINS,EIDIVZ,EODDZ
.extern _end

ERANGE          = 1
ESET            = 2
EIDIVZ          = 6
EHEAP           = 17
EILLINS         = 18
EODDZ           = 19
ECASE           = 20

.sect .text
	.data1	0353
	.data1	0176	! jmp to begtext in 2 bytes. Assembler generates 3
			! bytes.
syscal: jmp 1f
grow:	jmp 2f
	jmp 2f
	.data2 -277, -277, -277, -277, -277, -277
2:
	mov ax,2088
1:
	int 5
	jmp 1f
	.space 100
1:
	ret

begtext:
	mov bx,sp
	mov cx,(bx)
	add bx,2
	mov ax,cx
	inc ax
	shl ax,1
	add ax,bx
	push ax
	push bx
	push cx
	xor bp,bp
	mov bx,_end
	mov cx,9
	add bx,1024
	shr bx,cl
	shl bx,cl
	call grow
	xor	cx,cx
	push	cx
	call	_sbrk
	mov	(.limhp),ax
	mov	(.reghp),ax	! on Xenix, heap begins above stack!
	pop	ax
	call    _m_a_i_n
	push	ax
	call	__exit
.sect	.data
begdata:
hol0:
	.data2   0,0
	.data2   0,0
argv:
	.data2   3f
envp:
	.data2	0
3:
	.asciz "PROGRAM"
.reghp:
	.data2   endbss
.limhp:
	.data2   endbss
.ignmask:
	.data2   0
.trppc:
	.data2   0

	.sect .bss
begbss:
