Pristine Ack-5.5
[Ack-5.5.git] / mach / mantra / int / mloop0
1         .define filb
2         .define __m_a_i_n
3         .define curproc
4         .define pd
5         .define nproc
6         .define retarea
7         .define retsize
8         .define hp
9         .define maxcount
10         .define firstp
11         .define globmax
12         .define tblmax
13         .define ml
14         .define argc
15         .define topstack
16 #ifndef FPTRAP
17         .define __fptrp
18 #endif
19 .sect .text
20 .sect .rom
21 .sect .data
22 .sect .bss
23 .sect .text
24 !---------------------------------------------------------------------------
25 !               START OF THE PROGRAM
26 !---------------------------------------------------------------------------
27
28 __m_a_i_n:
29 #ifdef __BSD4_2
30                 jsr     getmask
31 #endif
32                 move.l  sp,d0
33                 add.l   #0x10000,d0             ! rough guess. What is the
34                                                 ! real top ???
35                 move.l  d0,topstack
36                 tst.l   (sp)+
37                 lea     retarea,a5              !a5 POINTS AT RETURN AREA
38                 move.l  nd,-(sp)                !nd contains endbss
39                 bsr     _Xbreak
40                 add.l   wrd,sp
41 #if     last
42                 move.l  #126,d0                 !initialise lasttable
43                 lea     lasttable,a1
44 0:              clr.l   (a1)+
45                 dbra    d0,0b
46                 move.l  #-1,(a1)
47                 move.l  #linused-8,linused
48 #endif
49                 move.l  4(sp),a2
50                 move.l  (a2),filb       !interpreter name in filb
51                 sub.l   #1,(sp)
52                 bgt     0f
53         .sect .data
54 emfile: .asciz  "e.out"
55         .align 2
56         .sect .text
57                 move.l  4(sp),a0        !4(sp) is argv
58                 move.l  #emfile,(a0)    !pointer to e.out in argp1
59                 add.l   #1,(sp)         !only 1 argument in this case
60                 bra     1f
61 0:              add.l   #4,4(sp)        !skip name of interpreter
62 1:              add.l   #4-word,sp
63                 move.l  sp,ml
64                 move.l  word(sp),a2
65                 cl      -(sp)
66                 move.l  (a2),-(sp)
67                 lea     eb,a6
68                 bsr     _Xopen
69                 testen  (sp)+
70                 bne     nofile
71                 mov     (sp)+,savefd
72                 move.l  (a2),filb       !load file name in filb
73                                         !information about file for error mess.
74                 move.l  #16,-(sp) ;     pea     header
75                 mov     savefd,-(sp)                    !skip first header
76                 bsr     _Xread  ;       testen  (sp)+
77                 bne     badarg1
78                 move.l  #32,(sp)
79                 pea     header
80                 mov     savefd,-(sp)
81                 bsr     _Xread  
82                 testen  (sp)+
83                 bne     badarg1
84                 cmp.l   #32,(sp)+
85                 bne     badarg1
86                 lea     header,a0
87                 move.l  #5,d0                   !convert em integer to integer
88 0:              add.l   #4,a5
89                 move.b  (a0)+,-(a5) ;   move.b  (a0)+,-(a5)
90                 move.b  (a0)+,-(a5) ;   move.b  (a0)+,-(a5)
91                 move.l  (a5),-4(a0) ;   dbra    d0,0b
92                 move.l  nd,a0   ;       move.l  a0,pb   !Bottom emtext
93                 add.l   ntext,a0 ;      move.l  a0,pd   !proc. descr. base
94                 move.l  nproc,d1 ;      asl.l   #3,d1   !2 pointers
95 #if     count + prof + flow
96                 mulu    #3,d1                           !or 6 pointers
97 #endif
98                 add.l   d1,a0   ;       move.l  a0,eb   !external base
99                 add.l   szdata,a0 ;     move.l  a0,tblmax
100                 move.l  a0,globmax ;    move.l  a0,hp
101                 add.l   #2000,a0 ;      move.l  a0,-(sp)
102                 bsr     _Xbreak                         !ask for core
103                 testen  (sp)+   ;       bne     toolarge
104                 move.l  eb,a6   ;       move.l  filb,4(a6)
105                 move.l  ntext,-(sp) 
106                 move.l  pb,-(sp)
107                 mov     savefd,-(sp)
108                 bsr     _Xread
109                 testen  (sp)+   ;       bne     badarg
110                 add.l   #4,sp
111 #if     float
112 ! PM
113 #endif
114
115 lblbuf:         sub.l   #2048,sp
116                 claimstack
117                 move.l  sp,a4                           !transport  ptr a4
118                 move.l  sp,a1
119                 move.l  a1,-(sp)
120                 move.l  #2048,-(sp) ;   move.l  a4,-(sp)
121                 mov     savefd,-(sp) ;  bsr     _Xread
122                 testen  (sp)+   ;       bne     badarg
123                 move.l  (sp)+,d0
124                 move.l  (sp)+,a1
125                 cmp.l   #2048,d0 ;      bcs     0f
126                 add.l   #1024,a1 ;      bra     1f      !a1 =buffer middle
127 0:              add.l   d0,a1                           !a1 = buffer end
128 1:              move.l  eb,a3           !At a3 filling has to start
129                 clr.l   d1      ;       clr.l   d2
130                 move.l  #datswi,a6
131
132 datloop:        cmp.l   a4,a1   ;       bhi     9f      !Go on filling data
133                 bsr     blshift         !shift block down , read next block
134 9:              sub.l   #1,ndata ;      blt     finito
135                 clr.l   d1
136                 move.b  (a4)+,d1 ;      beq     dat0    !type byte in d1
137                 move.l  a3,a2   ;       move.b  (a4)+,d2  !count byte in d2
138                 asl.l   #2,d1   ;       move.l  -4(a6,d1),a0
139                 jmp     (a0)
140
141         .sect .data
142 datswi: .data4  dat1;   .data4  dat2;   .data4  dat3;   .data4  dat4
143         .data4  dat5;   .data4  dat6;   .data4  dat6;   .data4  dofloat
144         .sect .text
145
146 dat0:           add.l   #4,a5
147                 move.b  (a4)+,-(a5) ;   move.b  (a4)+,-(a5)
148                 move.b  (a4)+,-(a5) ;   move.b  (a4)+,-(a5)
149                 move.l  (a5),d0 ;       move.l  a3,d4   !d0 =count
150                 sub.l   a2,d4   !reconstruct byte count of previous describtor
151                 sub.l   #1,d0   ;       sub.l   #1,d4
152 1:              move.l  d4,d3
153 2:              move.b  (a2)+,(a3)+ ;   dbra    d3,2b
154                 dbra    d0,1b   ;       bra     datloop
155
156 dat1:           mov     und,(a3)+ ;     sub.b   #1,d2
157                 bne     dat1    ;       bra     datloop
158
159 dat2:           move.b  (a4)+,(a3)+ ;   sub.b   #1,d2
160                 bne     dat2    ;       bra     datloop
161
162 dat3:           move.w  wrd,d1  ;       add.l   d1,a3           !wrd = 2 or 4
163 3:              move.b  (a4)+,-(a3) ;   sub.b   #1,d1   ;       bgt 3b
164                 add.l   wrd,a3  ;       sub.b   #1,d2
165                 bne     dat3    ;       bra     datloop
166
167 dat4:           move.l  eb,d4   ;       bra     4f
168 dat5:           move.l  pb,d4
169 4:              add.l   #4,a3
170                 move.b  (a4)+,-(a3) ;   move.b  (a4)+,-(a3)
171                 move.b  (a4)+,-(a3) ;   move.b  (a4)+,-(a3)
172                 add.l   d4,(a3)+ ;      sub.b   #1,d2
173                 bne     4b      ;       bra     datloop
174
175 dat6:           add.l   d2,a3   ;       move.l  d2,d3
176 6:              move.b  (a4)+,-(a3) ;   sub.b   #1,d2
177                 bne     6b      ;       add.l   d3,a3
178                 bra     datloop
179
180 .sect .data
181 flt_label:      .data4 0
182 .sect .text
183 dofloat:
184                 move.l  d2,d0
185                 checkfsize
186 4:
187 8:
188                 movem.l a0/a1/d0-d2,-(sp)
189                 move.l  a3,-(sp)
190                 add.l   d0,a3
191                 move.l  d0,-(sp)
192                 move.l  a4,-(sp)
193                 move.l  a4,flt_label
194                 bsr     _con_float
195                 lea     12(sp),sp
196                 clr.l   flt_label
197                 movem.l (sp)+,a0/a1/d0-d2
198 1:
199                 tst.b   (a4)+ ;         bne     1b
200                 bra     datloop
201
202 #ifdef FLTRAP
203 !DUMMY ASCII TO FLOAT ROUTINE
204 _con_float:
205                 rts
206 #else
207 __fptrp:
208                 tst.l   flt_label
209                 beq     1f
210                 rts
211 1:
212                 move.l  4(sp),d0
213                 mov     d0,-(sp)
214                 bra     error
215 #endif
216 blshift:        move.l  a1,a0   ;       move.l  #1024,d0
217                 move.l  d1,-(sp)
218                 tst.l   -(sp)
219                 sub.l   d0,a0   ;       move.l  d0,-(sp)
220                 sub.l   d0,a4                   !update pointer
221                 asr.l   #2,d0
222 0:              move.l  (a1)+,(a0)+ ;   sub.w   #1,d0
223                 bgt     0b      ;       move.l  a0,a1
224                 move.l  a1,4(sp)
225                 move.l  a1,-(sp) ;      mov     savefd,-(sp)
226                 bsr     _Xread
227                 testen  (sp)+   ;       bne     badarg
228                 move.l  (sp)+,d0
229                 move.l  (sp)+,a1
230                 move.l  (sp)+,d1
231                 cmp.l   #1024,d0 ;      beq     1f
232                 add.l   d0,a1
233 1:              rts
234
235 finito:         cmp.l   hp,a3   ;       bne     badarg  !load file error
236                 move.l  eb,a6                           !eb IN a6 NOW
237                 lea     4(a6),a0                        !filb CONTAINS eb+4
238                 move.l  a0,filb
239
240 !WE START TO READ THE PROCEDURE DESCRIPTORS
241
242                 move.l  nproc,d1 ;      move.l  pd,a3
243                 asl.l   #3,d1                   !proc. descr. is 8 bytes
244 4:              move.l  a1,d2   ;       sub.l   a4,d2   !What is available?
245                 add.l   #7,d2   ;       and.w   #-0x8,d2  !multiple of 8!
246                 sub.l   d2,d1                           !subtract what can 
247                 asr.l   #3,d2                           !be read. divide by 8
248                 sub.l   #1,d2
249 2:              add.l   #4,a3
250                 move.b  (a4)+,-(a3) ;   move.b  (a4)+,-(a3)
251                 move.b  (a4)+,-(a3) ;   move.b  (a4)+,-(a3)
252                 add.l   #8,a3
253                 move.b  (a4)+,-(a3) ;   move.b  (a4)+,-(a3)
254                 move.b  (a4)+,-(a3) ;   move.b  (a4)+,-(a3)
255                 move.l  pb,d0 ; add.l   d0,(a3)+  !em address to machine address
256
257 #if     count+prof+flow
258                 clr.l   (a3)+
259                 clr.l   (a3)+
260                 clr.l   (a3)+
261                 clr.l   (a3)+
262 #endif
263                 dbra    d2,2b   ;       tst.l   d1
264                 ble     3f      ;       bsr     blshift         !more or ready
265                 bra     4b
266 3:              cmp.l   eb,a3   ;       bne     badarg
267                 move.l  savefd,-(sp) ;  bsr     _Xclose
268                 move.l  ml,sp                           !refresh stack
269
270 #if     count+prof+flow
271 !                                               |=======================|
272 ! Here we fill the fields in the procedure      |   current file name   |
273 ! descriptor with table information. The        |-----------------------|
274 ! procedure descriptor has six fields,          |   link to next proc   |
275 ! like described in this picture. We            |-----------------------|
276 ! construct a linked list of the procedure      |   first line number   |
277 ! descriptors, such that the defined            |-----------------------|
278 ! order of procedures is compatible             |    count pointer      |
279 ! with the text order. Thereafter we            |-----------------------|
280 ! scan the text for line information to         |    start address      |
281 ! fill the count pointer and startline          |-----------------------|
282 ! field. The link to the first procedure        |  bytes for locals     |
283 ! is in firstp , links are descriptor           |=======================|
284 ! start addresses. The last procedure
285 ! links to the external base. All lines in the text get a count
286 ! number, lines of a procedure get consecutive count numbers,
287 ! the procedure count pointer gives the number of the first line.
288 ! Count pointer zero is reserved for the case that no line number
289 ! is yet defined.
290
291 ! Register use: a6 is external base ("eb"), a5 points at return area, other
292 ! registers are free
293
294 makelink:       move.l  pd,a0
295                 move.l  #0,a2
296                 move.l  a0,a3           !a3 will point at the first proc.
297                 move.l  a0,a4           !a4 will point at proc descr base
298 0:              move.l  a0,a1           !keep former descr pointer in a1
299                 add.l   #24,a0          !a0 points at next one
300                 cmp.l   a0,a6           !top of descriptor space
301                 bls     4f              !yes? ready!
302 1:              move.l  4(a0),d0        !start address of current proc in d0
303                 cmp.l   4(a1),d0        !compair start address with previous
304                 bcc     2f              !d0 large? follow link!
305                 sub.l   #24,a1          !d0 small? compair with previous
306                 cmp.l   a1,a4           !is a1 smaller than pd
307                 bls     1b              !no? try again
308                 move.l  a3,16(a0)       !yes? then smallest text add up to now
309                 move.l  a0,a3           !remind a3 is to point at first proc
310                 bra     0b              !next descriptor
311 2:              move.l  16(a1),d1       !follow the link to find place
312                 beq     3f              !if 0 then no link defined
313                 move.l  d1,a2
314                 cmp.l   4(a2),d0        !compair start address
315                 bcs     3f              !start addr between those of a1 and a2
316                 move.l  a2,a1           !d0 above start address of a1
317                 bra     2b              !go on looking
318 3:              move.l  a0,16(a1)       !a0 follows a1
319                 move.l  d1,16(a0)       !a2 follows a0
320                 bra     0b
321 4:              move.l  a3,firstp       !firstp links to first procedure
322
323 ! Register use: a3 points at first procedure , d0 opcode byte , a1 base of
324 ! table , d1 keeps min line nr , d2 keeps max line nr , d3 current line nr ,
325 ! maxcount in d4
326
327 procinf:        move.l  #1,maxcount     !count pointer for first procedure
328                 move.l  #1,d4
329                 move.l  #0,d3
330                 move.l  #0,d0
331 0:              move.l  a3,-(sp)        !stack current procedure
332                 move.l  #-1,d1          !minimal line number on 0xFFFFFFFF
333                 move.l  #0,d2           !maximal line number on 0
334                 tst.l   16(a3)          !bottom address next procedure
335                 beq     6f              !if 0 last procedure
336                 move.l  16(a3),a4
337                 move.l  4(a4),a4        !a4 points at top of current proc
338                 bra     2f
339 6:              move.l  pd,a4
340 2:              move.l  4(a3),a3        !start address of current procedure
341 8:              move.b  (a3)+,d0        !start scanning
342                 cmp.b   #-2,d0  
343                 beq     1f              !case escape1
344                 cmp.b   #-1,d0  
345                 beq     6f              !case escape2
346                 cmp.b   #-106,d0
347                 bhi     7f              !ordinary skip at 7
348                 beq     2f              !case lni at 2
349                 cmp.b   #-108,d0                !lin_l ?
350                 bcs     7f              !ordinary skip at 7
351                 beq     3f              !lin_l at 3
352                 move.l  #0,d3
353                 move.b  (a3)+,d3        !lin_s0 here
354                 bra     4f              !compare at 4
355 2:              add.l   #1,d3
356                 bra     4f
357 3:              adroff
358                 move.l  #0,d3
359                 move.w  (a5),d3
360                 bra     4f
361 6:              move.b  (a3)+,d0
362                 cmp.b   #35,d0          !lin_q ?
363                 bne     6f              !skip for escape2 at 6f
364                 move.b  (a3)+,(a5)+
365                 move.b  (a3)+,(a5)+
366                 move.b  (a3)+,(a5)+
367                 move.b  (a3)+,(a5)
368                 sub.l   #3,a5
369                 move.l  (a5),d3
370 4:              cmp.l   d1,d3           !d3 less than minimum ?
371                 bcc     5f
372                 move.l  d3,d1
373 5:              cmp.l   d3,d2           !d3 more than maximum ?
374                 bcc     9f
375                 move.l  d3,d2
376                 bra     9f
377 6:              add.l   #4,a3
378                 bra     9f
379 1:              move.b  (a3)+,d0
380                 move.l  d0,a2           !escape1 opcodes treated here
381                 add.l   #256,a2         !second table
382                 bra     1f
383 7:              move.l  d0,a2
384 1:              move.b  skipdisp(a2),d0 !look for argument size
385                 add.l   d0,a3
386 9:              cmp.l   a3,a4           !still more text
387                 bhi     8b
388                 move.l  (sp)+,a3        !bottom back
389                 sub.l   d1,d2           !compute number of lines
390                 bcs     9f              !no line so no information
391                 move.l  d4,8(a3)
392                 move.l  d1,12(a3)
393                 add.l   #1,d2
394                 add.l   d2,d4           !this is the new maxcount
395                 move.l  d4,maxcount
396 9:              tst.l   16(a3)          !follow link to next procedure
397                 beq     1f
398                 move.l  16(a3),a3
399                 bra     0b
400 1:
401 countlabel:
402
403         .sect .data
404 skipdisp:
405 .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0;
406 .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0;
407 .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0;
408 .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0;
409 .data1 0; .data1 0; .data1 0; .data1 1; .data1 0; .data1 0; .data1 2; .data1 0;
410 .data1 0; .data1 1; .data1 1; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0;
411 .data1 0; .data1 0; .data1 1; .data1 2; .data1 1; .data1 1; .data1 1; .data1 1;
412 .data1 1; .data1 1; .data1 1; .data1 2; .data1 1; .data1 1; .data1 1; .data1 1;
413
414 .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0;
415 .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0;
416 .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0;
417 .data1 0; .data1 0; .data1 0; .data1 0; .data1 1; .data1 0; .data1 0; .data1 0;
418 .data1 1; .data1 0; .data1 0; .data1 0; .data1 1; .data1 0; .data1 0; .data1 0;
419 .data1 1; .data1 1; .data1 0; .data1 1; .data1 0; .data1 2; .data1 0; .data1 2;
420 .data1 1; .data1 0; .data1 0; .data1 0; .data1 1; .data1 1; .data1 0; .data1 1;
421 .data1 2; .data1 1; .data1 1; .data1 1; .data1 1; .data1 1; .data1 1; .data1 1;
422
423 .data1 2; .data1 2; .data1 0; .data1 0; .data1 1; .data1 1; .data1 1; .data1 0;
424 .data1 0; .data1 2; .data1 1; .data1 0; .data1 1; .data1 0; .data1 0; .data1 1;
425 .data1 1; .data1 1; .data1 0; .data1 0; .data1 2; .data1 1; .data1 0; .data1 2;
426 .data1 0; .data1 1; .data1 1; .data1 2; .data1 1; .data1 1; .data1 1; .data1 1;
427 .data1 1; .data1 2; .data1 0; .data1 0; .data1 0; .data1 0; .data1 1; .data1 2;
428 .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 1; .data1 2; .data1 2;
429 .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0;
430 .data1 0; .data1 0; .data1 0; .data1 0; .data1 1; .data1 1; .data1 0; .data1 0;
431
432 .data1 0; .data1 1; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 1;
433 .data1 0; .data1 0; .data1 1; .data1 0; .data1 0; .data1 1; .data1 1; .data1 1;
434 .data1 1; .data1 0; .data1 2; .data1 1; .data1 1; .data1 1; .data1 2; .data1 0;
435 .data1 0; .data1 1; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 1;
436 .data1 2; .data1 2; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0; .data1 0;
437 .data1 0; .data1 1; .data1 0; .data1 0; .data1 0; .data1 0; .data1 2; .data1 1;
438 .data1 1; .data1 1; .data1 1; .data1 1; .data1 1; .data1 1; .data1 1; .data1 1;
439 .data1 2; .data1 1; .data1 0; .data1 0; .data1 1; .data1 2; .data1 7; .data1 5;
440
441 !escaped opcodes
442
443 .data1 2; .data1 0; .data1 2; .data1 0; .data1 2; .data1 0; .data1 2; .data1 0;
444 .data1 2; .data1 0; .data1 2; .data1 0; .data1 2; .data1 2; .data1 0; .data1 2;
445 .data1 2; .data1 2; .data1 2; .data1 2; .data1 0; .data1 2; .data1 2; .data1 0;
446 .data1 2; .data1 0; .data1 0; .data1 0; .data1 2; .data1 0; .data1 2; .data1 0;
447 .data1 2; .data1 0; .data1 2; .data1 0; .data1 2; .data1 0; .data1 2; .data1 0;
448 .data1 2; .data1 0; .data1 0; .data1 0; .data1 0; .data1 2; .data1 2; .data1 2;
449 .data1 2; .data1 2; .data1 0; .data1 2; .data1 0; .data1 2; .data1 0; .data1 2;
450 .data1 0; .data1 2; .data1 0; .data1 2; .data1 0; .data1 2; .data1 2; .data1 2;
451
452 .data1 0; .data1 2; .data1 0; .data1 2; .data1 0; .data1 2; .data1 2; .data1 2;
453 .data1 2; .data1 2; .data1 2; .data1 2; .data1 0; .data1 2; .data1 0; .data1 1;
454 .data1 2; .data1 2; .data1 2; .data1 2; .data1 0; .data1 2; .data1 0; .data1 2;
455 .data1 0; .data1 0; .data1 2; .data1 0; .data1 2; .data1 0; .data1 0; .data1 2;
456 .data1 0; .data1 2; .data1 2; .data1 0; .data1 2; .data1 0; .data1 2; .data1 0;
457 .data1 2; .data1 0; .data1 0; .data1 2; .data1 0; .data1 2; .data1 0; .data1 2;
458 .data1 0; .data1 2; .data1 0; .data1 2; .data1 0; .data1 2; .data1 2; .data1 2;
459 .data1 2; .data1 2; .data1 0; .data1 0; .data1 2; .data1 2; .data1 0; .data1 2;
460
461 .data1 0; .data1 2; .data1 0; .data1 2; .data1 0; .data1 2; .data1 0; .data1 2;
462 .data1 2; .data1 0; .data1 1; .data1 0; .data1 0; .data1 0; .data1 2; .data1 0;
463 .data1 2; .data1 0; .data1 2; .data1 2; .data1 2; .data1 2; .data1 2; .data1 2;
464 .data1 0; .data1 2; .data1 0; .data1 1; .data1 2; .data1 0; .data1 0; .data1 2;
465
466         .sect .text
467                 move.l  globmax,d1
468                 move.l  d1,a3
469 #if prof
470                 move.l  d1,ltime
471                 move.l  d1,profile      !PROFILE POINTER FOR CURRENT PROC
472                 move.l  maxcount,d0
473                 add.l   #1,d0
474                 asl.l   #2,d0           !4 BYTES FOR EACH LINE
475                 add.l   d0,d1
476                 move.l  d0,profsiz      !profsiz CONTAINS NEEDED MEM SIZE
477 #endif
478 #if flow
479                 move.l  d1,lflow
480                 move.l  maxcount,d0
481                 asr.l   #3,d0           !divide by 8
482                 add.l   #2,d0
483                 bclr    #0,d0           !make integer number of words (2 byte!)
484                 add.l   d0,d1
485                 move.l  d0,flowsiz
486 #endif
487 #if count
488                 move.l  d1,lcount
489                 move.l  maxcount,d0
490                 add.l   #1,d0
491                 asl.l   #2,d0
492                 add.l   d0,d1
493                 move.l  d0,countsiz
494 #endif
495                 move.l  d1,tblmax
496                 add.l   #1024,d1
497                 cmp.l   nd,d1
498                 bcs     2f
499                 move.l  d1,-(sp)
500                 bsr     _Xbreak
501                 testen  (sp)+
502                 bne     toolarge
503 2:              sub.l   a3,d1
504                 asr.l   wmu,d1
505 3:              cl      (a3)+
506                 dbra    d1,3b
507                 sub.l   #1024,a3
508                 move.l  a3,hp
509 cfp:            move.l  ml,sp           !LABEL FOR DEBUGGING
510
511 #endif
512
513 !----------------------------------------------------------------------------
514 !               START CALLING SEQUENCE HERE
515 !-----------------------------------------------------------------------------
516
517                 lea     loop,a4
518                 move.l  pb,a3
519                 move.l  #0,a2
520                 move.l  wmu-1,d7
521                 clr.l   d6
522 lblsp:          move.l  entry,-(sp)             !start procedure to call
523                 bra     cai_z
524
525
526 nofile:         mov     #0xD,d0 ;       bra     notrap1
527 badarg:         move.l  eb,a6
528 badarg1:        mov     #0xE,d0 ;       bra     notrap1
529 toolarge:       mov     #0xF,d0 ;       bra     notrap1
530         .sect .data
531 retsize: .space 2
532 retarea: .space 32
533
534
535         .sect .bss
536 argc:   .space  4
537 argv:   .space  4
538 envp:   .space  4
539 savefd: .space  4
540 header:
541 ntext:  .space  4
542 ndata:  .space  4
543 nproc:  .space  4
544 entry:  .space  4
545 nline:  .space  4
546 szdata: .space  4
547 firstp: .space  4
548 maxcount:  .space 4
549
550 tblmax: .space  4
551 globmax: .space 4
552 topstack: .space 4
553 ml:     .space  4
554 eb:     .space  4               !EXPLICITELY REQUIRED eb, filb, curproc IN
555 filb:   .space  4               !THIS ORDER
556 curproc: .space 4
557 pb:     .space  4
558 pd:     .space  4
559 hp:     .space  4
560
561
562         .sect .text