Pristine Ack-5.5
[Ack-5.5.git] / mach / xenix3 / libsys / head_em.s
1 .sect .text; .sect .rom; .sect .data; .sect .bss
2
3 .define begtext,begdata,begbss,syscal
4 .define hol0,.reghp,.limhp,.trppc,.ignmask
5 .define ERANGE,ESET,EHEAP,ECASE,EILLINS,EIDIVZ,EODDZ
6 .define EXIT,BRK
7 .extern endbss
8
9 ERANGE          = 1
10 ESET            = 2
11 EIDIVZ          = 6
12 EHEAP           = 17
13 EILLINS         = 18
14 EODDZ           = 19
15 ECASE           = 20
16
17 .sect .text
18         .data1  0353
19         .data1  0176    ! jmp to begtext in 2 bytes. Assembler generates 3
20                         ! bytes.
21 syscal: jmp 1f
22 grow:   jmp 2f
23         jmp 2f
24         .data2 -277, -277, -277, -277, -277, -277
25 2:
26         mov ax,2088
27 1:
28         int 5
29         jmp 1f
30         .space 100
31 1:
32         ret
33
34 begtext:
35         mov bx,sp
36         mov cx,(bx)
37         add bx,2
38         mov ax,cx
39         inc ax
40         shl ax,1
41         add ax,bx
42         push ax
43         push bx
44         push cx
45         xor bp,bp
46         mov bx,endbss
47         mov cx,9
48         add bx,1024
49         shr bx,cl
50         shl bx,cl
51         call grow
52         xor     cx,cx
53         push    cx
54         call    __sbrk
55         mov     (.limhp),ax
56         mov     (.reghp),ax     ! on Xenix, heap begins above stack!
57         pop     ax
58         call    __m_a_i_n
59 EXIT:
60         push    ax
61         call    __exit
62
63 BRK:
64         jmp     __brk
65
66 .sect   .data
67 begdata:
68 hol0:
69         .data2   0,0
70         .data2   0,0
71 argv:
72         .data2   3f
73 envp:
74         .data2  0
75 3:
76         .asciz "PROGRAM"
77 .reghp:
78         .data2   endbss
79 .limhp:
80         .data2   endbss
81 .ignmask:
82         .data2   0
83 .trppc:
84         .data2   0
85
86         .sect .bss
87 begbss: