Pristine Ack-5.5
[Ack-5.5.git] / mach / pdp / int / eminform.s
1
2 /  (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
3
4 /           This product is part of the Amsterdam Compiler Kit.
5
6 /  Permission to use, sell, duplicate or disclose this software must be
7 /  obtained in writing. Requests for such permissions may be sent to
8
9 /       Dr. Andrew S. Tanenbaum
10 /       Wiskundig Seminarium
11 /       Vrije Universiteit
12 /       Postbox 7161
13 /       1007 MC Amsterdam
14 /       The Netherlands
15
16 /  
17 /------------------------------------------------------------------------------
18 /\f
19         indir   = 0
20         exit    = 1
21         fork    = 2
22         read    = 3
23         write   = 4
24         open    = 5
25         close   = 6
26         creat   = 8.
27         unlink  = 10.
28         break   = 17.
29         alarm   = 27.
30         pause   = 29.
31         sleep   = 35.
32         signal  = 48.
33
34         iot     =       4
35 /------------------------------------------------------------------------------
36 /       External references
37 /------------------------------------------------------------------------------
38
39         .globl  _end
40
41 /\f
42 /------------------------------------------------------------------------------
43 /       Now the real program starts
44 /------------------------------------------------------------------------------
45
46 startoff:
47         mov     sp,memlim
48         mov     $ldfail,r5
49         mov     $emfile,forward+2
50         sys     indir;forward
51         jes     badruninf;
52         mov     r0,saver0;
53         mov     $rhfail,r5;
54         sys     read;header;34.
55         jes     badruninf;
56         cmp     $34.,r0
57         jne     badruninf
58         mov     $rtfail,r5
59         mov     $_end,loadstart
60         mov     option,r1
61         bit     $17774,r1
62         bne     1f
63         mov     tblmax,globmax
64 1:
65         bit     $1,r1
66         beq     1f
67         mov     saver0,r0
68         sys     read;lasttab;98.
69         jes     badruninf;
70
71 1:      bit     $2,r1
72         beq     1f
73         mov     saver0,r0
74         sys     read;opfrb;512.
75         jes     badruninf
76         mov     saver0,r0
77         sys     read;opfra;512.
78         jes     badruninf
79         mov     saver0,r0
80         sys     read;opfrc;640.
81         jes     badruninf
82 1:      bit     $4,r1
83         beq     1f
84         mov     saver0,r0
85         sys     read;lcount;4
86         jes     badruninf
87 1:      bit     $8.,r1
88         beq     1f
89         mov     saver0,r0
90         sys     read;lflow;4
91         jes     badruninf
92 1:      bit     $16.,r1
93         beq     1f
94         mov     saver0,r0
95         sys     read;ltime;4
96         jes     badruninf
97 1:
98         mov     tblmax,r3
99         sub     pd,r3
100         sub     ml,r3
101         mov     $_end,sybreak+2
102         add     r3,sybreak+2;
103         sys     indir;sybreak
104         mov     r3,lblread+4
105         mov     $_end,lblread+2;
106         mov     saver0,r0
107         sys     indir;lblread;
108         jes     badruninf
109         mov     saver0,r0
110         sys     close
111         sys     unlink;emfile
112 lbladj:
113         add     $header,linused
114         sub     header,linused
115
116         mov     pd,filext
117         sub     loadstart,filext
118         mov     filext,filarg
119         add     ml,filarg
120         sub     tblmax,filarg
121 lbllast:
122         bit     $1,option       /test for last
123         beq     2f              / no last table jump
124         sys     creat;emlast;666
125         bcs     2f
126         cmp     linused,$lasttab
127         bhis    3f
128         mov     $yetmsg,lblwri+2
129         mov     $40.,lblwri+4
130         sys     indir;lblwri
131         br      2f
132 3:      mov     r0,saver0
133         cmp     linused-2,$-1
134         bne     6f
135         mov     $linused-2,linused
136         clr     linused-2
137 6:      jsr     pc,slilast
138         inc     r2
139         jsr     pc,nexttab
140         tst     (r5)
141         beq     3f
142         sub     $2,linused
143         cmp     eb,(r5)
144         blo     3f
145 7:      cmp     r2,$lnend
146         blt     1f
147         jsr     pc,slnlast
148 1:      jsr     pc,lnrnxt
149         bne     7b
150 3:      jsr     pc,sfllast
151         bne     6b
152         mov     saver0,r0
153         sys     close
154 2:
155
156 lblopfreq:
157         bit     $2,option
158         beq     9f
159         sys     creat;emopf;666
160         bcs     9f
161         mov     r0,saver0
162         mov     $opcode,r3
163         mov     $104.,r4
164         mov     $counttab,r5
165 0:      mov     $lnlast,r2
166         mov     $8.,r0
167 2:      movb    (r3)+,(r2)+
168         sob     r0,2b
169         add     $8,r2
170         mov     r2,-(sp)
171         jsr     pc,ltoa
172         mov     (sp)+,r2
173         add     $5,r2
174         mov     $8.,r0
175 2:      movb    (r3)+,(r2)+
176         sob     r0,2b
177         add     $8,r2
178         mov     r2,-(sp)
179         jsr     pc,ltoa
180         mov     (sp)+,r2
181         add     $5,r2
182         mov     $8.,r0
183 2:      movb    (r3)+,(r2)+
184         sob     r0,2b
185         add     $8,r2
186         mov     r2,-(sp)
187         jsr     pc,ltoa
188         mov     (sp)+,r2
189         add     $5,r2
190         mov     $8.,r0
191 2:      movb    (r3)+,(r2)+
192         sob     r0,2b
193         add     $8,r2
194         mov     r2,-(sp)
195         jsr     pc,ltoa
196         mov     (sp)+,r2
197         mov     r3,-(sp)
198         jsr     pc,slnlast
199         mov     (sp)+,r3
200         sob     r4,0b
201         mov     saver0,r0
202         sys     close
203 9:
204 lblcount:
205         clr     filb
206         bit     $4,option
207         beq     9f
208         sys     creat;emcount;666
209         bcs     9f
210         mov     r0,saver0
211         mov     lcount,r5
212         add     $4,r5
213         sub     filext,r5
214         jsr     pc,procrun
215         mov     saver0,r0
216         sys     close
217 9:
218 lblprof:
219         bit     $16.,option
220         beq     9f
221         sys     creat;emprof;666
222         bcs     9f
223         mov     r0,saver0
224         mov     ltime,r5
225         sub     filext,r5
226         mov     $profmsg,lblwri+2
227         mov     $29,lblwri+4
228         mov     $profmsg+27,r2
229         jsr     pc,ltoa
230         mov     saver0,r0
231         sys     indir;lblwri
232         jsr     pc,procrun
233         mov     saver0,r0
234         sys     close
235 9:
236 lblflow:
237         mov     $1,filb
238         bit     $8.,option
239         beq     9f
240         sys     creat;emflow;666
241         bcs     9f
242         mov     lflow,r5
243         mov     $-1,flowsiz
244         sub     filext,r5
245         jsr     pc,procrun
246         mov     saver0,r0
247         sys     close
248 9:
249         clr     r0
250         sys     exit
251
252 badruninf:
253         mov     $0f,lblwri+2
254         mov     $21.,lblwri+4
255         mov     $2,r0
256         sys     indir;lblwri
257         mov     r5,lblwri+2
258         mov     $23.,lblwri+4
259         mov     $2,r0
260         sys     indir;lblwri
261         iot                     /force core dump
262 .data
263 lblwri:
264         sys     write;0;0
265 forward:
266         sys     open;0;0
267 sybreak:
268         sys     break;0;
269 lblread:
270         sys     read;0;0
271 0:      <em_runinf load error,\0>
272 ldfail: < open runinf failed   \n\0>
273 rhfail: < read header failed   \n\0>
274 rtfail: < read tables failed   \n\0>
275 msgto:  <to>
276 emlast: <em_last\0>
277 emcount:<em_count\0>
278 emfile: <em_runinf\0>
279 emopf:  <em_opfreq\0>
280 emprof: <em_profile\0>
281 emflow: <em_flow\0>
282 yetmsg: <no line or file message processed yet \n\n\0>
283 unknown:<with unknown filename\0>
284 lilast: <\nlines               \0>
285 lnlast: <                              >
286         <                              >
287 lnend:  <                                  \0>
288 fllast: <    of file                       >
289         <                                  \0>
290 profmsg:<\ninitialization             \n\0>
291 sep:    <\n\0>
292 /----------------------------------------------------------------------------
293 opcode:
294 <loc.0   loc.1   loc.2   loc.3   loc.4   loc.5   loc.6   loc.7   >
295 <loc.8   loc.9   loc.10  loc.11  loc.12  loc.13  loc.14  loc.15  >
296 <loc.16  loc.17  loc.18  loc.19  loc.20  loc.21  loc.22  loc.23  >
297 <loc.24  loc.25  loc.26  loc.27  loc.28  loc.29  loc.30  loc.31  >
298 <loc.32  loc.33  aar.1W  adf.s0  adi.1W  adi.2W  adp.l   adp.1   >
299 <adp.2   adp.s0  adp.s_1 ads.1W  and.1W  asp.1W  asp.2W  asp.3W  >
300 <asp.4W  asp.5W  asp.w0  beq.l   beq.s0  bge.s0  bgt.s0  ble.s0  >
301 <blm.s0  blt.s0  bne.s0  bra.l   bra.s_1 bra.s_2 bra.s0  bra.s1  >
302 <cal.1   cal.2   cal.3   cal.4   cal.5   cal.6   cal.7   cal.8   >
303 <cal.9   cal.10  cal.11  cal.12  cal.13  cal.14  cal.15  cal.16  >
304 <cal.17  cal.18  cal.19  cal.20  cal.21  cal.22  cal.23  cal.24  >
305 <cal.25  cal.26  cal.27  cal.28  cal.s0  cff.z   cif.z   cii.z   >
306 <cmf.s0  cmi.1W  cmi.2W  cmp.z   cms.s0  csa.1W  csb.1W  dec.z   >
307 <dee.w0  del.w_1 dup.1W  dvf.s0  dvi.1W  fil.l   inc.z   ine.lw  >
308 <ine.w0  inl._1W inl._2W inl._3W inl.w_1 inn.s0  ior.1W  ior.s0  >
309 <lae.l   lae.w0  lae.w1  lae.w2  lae.w3  lae.w4  lae.w5  lae.w6  >
310
311 <lal.p   lal.n   lal.0   lal._1  lal.w0  lal.w_1 lal.w_2 lar.1W  >
312 <ldc.0   lde.lw  lde.w0  ldl.0   ldl.w_1 lfr.1W  lfr.2W  lfr.s0  >
313 <lil.w_1 lil.w0  lil.0   lil.1W  lin.l   lin.s0  lni.z   loc.l   >
314 <loc._1  loc.s0  loc.s_1 loe.lw  loe.w0  loe.w1  loe.w2  loe.w3  >
315 <loe.w4  lof.l   lof.1W  lof.2W  lof.3W  lof.4W  lof.s0  loi.l   >
316 <loi.1   loi.1W  loi.2W  loi.3W  loi.4W  loi.s0  lol.pw  lol.nw  >
317 <lol.0   lol.1W  lol.2W  lol.3W  lol._1W lol._2W lol._3W lol._4W >
318 <lol._5W lol._6W lol._7W lol._8W lol.w0  lol.w_1 lxa.1   lxl.1   >
319 <lxl.2   mlf.s0  mli.1W  mli.2W  rck.1W  ret.0   ret.1W  ret.s0  >
320 <rmi.1W  sar.1W  sbf.s0  sbi.1W  sbi.2W  sdl.w_1 set.s0  sil.w_1 >
321 <sil.w0  sli.1W  ste.lw  ste.w0  ste.w1  ste.w2  stf.l   stf.1W  >
322 <stf.2W  stf.s0  sti.1   sti.1W  sti.2W  sti.3W  sti.4W  sti.s0  >
323 <stl.pw  stl.nw  stl.0   stl.1W  stl._1W stl._2W stl._3W stl._4W >
324 <stl._5W stl.w_1 teq.z   tgt.z   tlt.z   tne.z   zeq.l   zeq.s0  >
325 <zeq.s1  zer.s0  zge.s0  zgt.s0  zle.s0  zlt.s0  zne.s0  zne.s_1 >
326 <zre.lw  zre.w0  zrl._1W zrl._2W zrl.w_1 zrl.nw  escape1 escape2 >
327
328 <aar.l   aar.z   adf.l   adf.z   adi.l   adi.z   ads.l   ads.z   >
329 <adu.l   adu.z   and.l   and.z   asp.lw  ass.l   ass.z   bge.l   >
330 <bgt.l   ble.l   blm.l   bls.l   bls.z   blt.l   bne.l   cai.z   >
331 <cal.l   cfi.z   cfu.z   ciu.z   cmf.l   cmf.z   cmi.l   cmi.z   >
332 <cms.l   cms.z   cmu.l   cmu.z   com.l   com.z   csa.l   csa.z   >
333 <csb.l   csb.z   cuf.z   cui.z   cuu.z   dee.lw  del.pw  del.nw  >
334 <dup.l   dus.l   dus.z   dvf.l   dvf.z   dvi.l   dvi.z   dvu.l   >
335 <dvu.z   fef.l   fef.z   fif.l   fif.z   inl.pw  inl.nw  inn.l   >
336 <inn.z   ior.l   ior.z   lar.l   lar.z   ldc.l   ldf.l   ldl.pw  >
337 <ldl.nw  lfr.l   lil.pw  lil.nw  lim.z   los.l   los.z   lor.s0  >
338 <lpi.l   lxa.l   lxl.l   mlf.l   mlf.z   mli.l   mli.z   mlu.l   >
339 <mlu.z   mon.z   ngf.l   ngf.z   ngi.l   ngi.z   nop.z   rck.l   >
340 <rck.z   ret.l   rmi.l   rmi.z   rmu.l   rmu.z   rol.l   rol.z   >
341 <ror.l   ror.z   rtt.z   sar.l   sar.z   sbf.l   sbf.z   sbi.l   >
342 <sbi.z   sbs.l   sbs.z   sbu.l   sbu.z   sde.l   sdf.l   sdl.pw  >
343 <sdl.nw  set.l   set.z   sig.z   sil.pw  sil.nw  sim.z   sli.l   >
344
345 <sli.z   slu.l   slu.z   sri.l   sri.z   sru.l   sru.z   sti.l   >
346 <sts.l   sts.z   str.s0  tge.z   tle.z   trp.z   xor.l   xor.z   >
347 <zer.l   zer.z   zge.l   zgt.l   zle.l   zlt.l   zne.l   zrf.l   >
348 <zrf.z   zrl.pw  dch.z   exg.s0  exg.l   exg.z   lpb.z   gto.l   \0\0>
349         .even
350         .text
351 /------------------------------------------------------------------------------
352 /       General subroutines
353 /------------------------------------------------------------------------------
354
355 wrdoff: movb    (r3)+,r0       /get first byte
356         swab    r0              /put it in high byte
357         clrb    r0              /clear low byte of r0
358         bisb    (r3)+,r0       /"or" second byte in
359         rts     pc              /done
360
361 /------------------------------------------------------------------------------
362
363
364 nexttab: mov    linused,r5;
365         add     $2,r5           / increment lasttab
366         cmp     r5,$linused     / top of table reached?
367         blo     1f
368         sub     $96.,r5
369 1:      mov     r5,linused
370         rts     pc
371
372 slilast: mov    $lnlast,r2
373         mov     $6,r0
374         mov     $lilast,r3
375 2:      movb    (r3)+,(r2)+
376         sob     r0,2b
377         rts     pc
378
379 slnlast: mov    $lnlast,lblwri+2
380         mov     r2,r3
381         sub     $lnlast,r3
382         beq     3f
383         inc     r3
384         movb    sep,(r2)
385 1:      mov     r3,lblwri+4
386         mov     saver0,r0
387         sys     indir; lblwri
388         mov     $lnlast,r2
389 2:      movb    $' ,(r2)+
390         sob     r3,2b
391 3:      mov     $lnlast,r2
392         rts     pc
393
394 lnrnxt: jsr     pc,nexttab
395         tst     (r5)
396         ble     0f
397         mov     (r5),r1
398         clr     (r5)
399         add     $6,r2
400         mov     r2,r0
401         jsr     pc,itoa
402 0:      rts     pc
403
404 sfllast:jsr     pc,nexttab
405         tst     (r5)
406         bne     0f
407         clr     linused
408         mov     eb,-(sp)
409         sub     filext,(sp)
410         add     $4,(sp)
411         mov     *(sp),(sp)
412         mov     (sp)+,(r5)
413 0:      jsr     pc,slnlast
414         jsr     pc,filadj
415         mov     $14.,r3
416         mov     $fllast+14.,r2
417         mov     (r5),r0
418 3:      inc     r3
419         movb    (r0)+,(r2)+
420         bne     3b
421         movb    sep,-(r2)
422         mov     $fllast,lblwri+2
423         mov     r3,lblwri+4
424         mov     saver0,r0
425         sys     indir;lblwri
426         mov     $fllast+14.,r2
427         sub     $10.,r3
428 2:      movb    $' ,(r2)+
429         sob     r3,2b
430         clr     (r5)
431         tst     linused
432         beq     2f
433         jsr     pc,slilast
434 2:      rts     pc
435
436 filadj:
437         cmp     ml,(r5)
438         bhi     8f
439         sub     filarg,(r5)
440         br      7f
441 8:      cmp     eb,(r5)
442         bhi     7f
443         sub     filext,(r5)
444 7:      rts     pc
445
446 procrun:
447         mov     firstp,r4
448         sub     filext,r4
449 0:
450         tst     4(r4)
451         beq     8f
452         jsr     pc,msgfile
453         mov     r4,-(sp)
454         mov     countsiz,r4
455 7:      cmp     r2,$lnend+10
456         blo     6f
457         jsr     pc,slnlast
458         mov     $lnlast,r2
459 6:      tst     filb
460         bne     3f
461         add     $11.,r2
462         mov     r2,-(sp)
463         jsr     pc,ltoa
464         mov     (sp)+,r2
465         br      4f
466 3:
467         jsr     pc,bittoa
468         add     $4,r2
469 4:      sob     r4,7b
470         jsr     pc,slnlast
471         mov     (sp)+,r4
472 8:      mov     8.(r4),r4
473         beq     8f
474         sub     filext,r4
475         br      0b
476         mov     r0,saver0
477         sys     write;sep;1
478 8:      rts     pc
479
480
481 msgfile:
482         jsr     pc,slilast
483         add     $6,r2
484         mov     6(r4),r1
485         mov     r2,r0
486         jsr     pc,itoa
487         add     $4,r2
488         movb     msgto,(r2)+
489         movb    msgto+1,(r2)+
490         add     $6,r2
491         mov     8.(r4),r1
492 3:      bne     1f
493         mov     maxcount,r1
494         br      2f
495 1:      sub     filext,r1
496         tst     4(r1)
497         beq     1f
498         mov     4(r1),r1
499         br      2f
500 1:      mov     8.(r1),r1
501         br      3b
502 2:      sub     4(r4),r1
503         mov     r1,countsiz
504         dec     r1              / is this a bug?
505         add     6(r4),r1
506         mov     r2,r0
507         jsr     pc,itoa
508         mov     $fllast,r3
509         mov     $14,r1
510 2:      movb    (r3)+,(r2)+
511         sob     r1,2b
512         mov     10.(r4),r3
513         bne     6f
514         mov     $unknown,r3
515         br      5f
516 6:      cmp     ml,r3
517         bhi     4f
518         sub     filarg,r3
519         br      5f
520 4:      cmp     eb,r3
521         bhi     5f
522         sub     filext,r3
523 5:
524 lblmsgf:
525 2:      movb    (r3)+,(r2)+
526         bne     2b
527         jsr     pc,slnlast
528         rts     pc
529
530 itoa:
531
532         mov     r5,-(sp)
533         mov     r0,r5
534 1:      clr     r0
535         div     $10.,r0
536         add     $'0,r1
537         movb    r1,-(r5)
538         mov     r0,r1
539         bne     1b
540         mov     r5,r0
541         mov     (sp)+,r5
542         rts     pc
543
544         rts     pc
545 ltoa:
546 0:      mov     (r5),r1
547         clr     r0
548         div     $10.,r0
549         mov     r0,(r5)
550         swab    r1
551         clr     r0
552         bisb    3(r5),r1
553         div     $10.,r0
554         movb    r0,3(r5)
555         clr     r0
556         swab    r1
557         bisb    2(r5),r1
558         div     $10.,r0
559         add     $'0,r1
560         movb    r1,-(r2)
561         movb    r0,2(r5)
562         bne     0b
563         tst     (r5)
564         bne     0b
565         add     $4,r5
566         rts     pc
567
568 bittoa:
569         mov     (r5),r1
570         mov     flowsiz,r0
571         ash     r0,r1
572         bit     $1,r1
573         beq     0f
574         movb    $'1,(r2)
575         br      1f
576 0:      movb    $'0,(r2)
577 1:      dec     r0
578         cmp     $-16.,r0
579         beq     2f
580         mov     r0,flowsiz
581         br      3f
582 2:      clr     flowsiz
583         add     $2,r5
584 3:      rts     pc
585
586 /------------------------------------------------------------------------------
587 /       Leftover data
588 /------------------------------------------------------------------------------
589
590
591
592
593         .bss
594 filb:   .=.+2
595 loadstart:      .=.+2
596 saver0:         .=.+2
597 filarg:         .=.+2
598 filext:         .=.+2
599 memlim:         .=.+2
600 header:
601 bstrt:  txtsiz: .=.+2
602 bend:   ndatad: .=.+2
603         nprocs: .=.+2
604 option: entry.: .=.+2
605         nlines: .=.+2
606         szdata: .=.+2
607         firstp: .=.+2
608         maxcount: .=.+2
609 argc:   .=.+2
610 argv:   .=.+2
611 environ:
612         .=.+2
613 pb:     .=.+2
614 pd:     .=.+2
615 eb:     .=.+2
616 globmax: .=.+2
617 tblmax: .=.+2
618 ml:     .=.+2
619 lasttab:.=.+96.        / 16 descriptors of integers + index at the end
620 linused:.=.+2
621
622 counttab:
623 opfra:  .=.+512.
624 opfrb:  .=.+512.
625 opfrc:  .=.+640.
626
627 lcount: .=.+2
628 countsiz:.=.+2
629
630 lflow:  .=.+2
631 flowsiz:.=.+2
632
633 ltime:  .=.+2
634 profsiz:.=.+2