123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634 |
- /
- / (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
- /
- / This product is part of the Amsterdam Compiler Kit.
- /
- / Permission to use, sell, duplicate or disclose this software must be
- / obtained in writing. Requests for such permissions may be sent to
- /
- / Dr. Andrew S. Tanenbaum
- / Wiskundig Seminarium
- / Vrije Universiteit
- / Postbox 7161
- / 1007 MC Amsterdam
- / The Netherlands
- /
- /
- /------------------------------------------------------------------------------
- /
- indir = 0
- exit = 1
- fork = 2
- read = 3
- write = 4
- open = 5
- close = 6
- creat = 8.
- unlink = 10.
- break = 17.
- alarm = 27.
- pause = 29.
- sleep = 35.
- signal = 48.
- iot = 4
- /------------------------------------------------------------------------------
- / External references
- /------------------------------------------------------------------------------
- .globl _end
- /
- /------------------------------------------------------------------------------
- / Now the real program starts
- /------------------------------------------------------------------------------
- startoff:
- mov sp,memlim
- mov $ldfail,r5
- mov $emfile,forward+2
- sys indir;forward
- jes badruninf;
- mov r0,saver0;
- mov $rhfail,r5;
- sys read;header;34.
- jes badruninf;
- cmp $34.,r0
- jne badruninf
- mov $rtfail,r5
- mov $_end,loadstart
- mov option,r1
- bit $17774,r1
- bne 1f
- mov tblmax,globmax
- 1:
- bit $1,r1
- beq 1f
- mov saver0,r0
- sys read;lasttab;98.
- jes badruninf;
- 1: bit $2,r1
- beq 1f
- mov saver0,r0
- sys read;opfrb;512.
- jes badruninf
- mov saver0,r0
- sys read;opfra;512.
- jes badruninf
- mov saver0,r0
- sys read;opfrc;640.
- jes badruninf
- 1: bit $4,r1
- beq 1f
- mov saver0,r0
- sys read;lcount;4
- jes badruninf
- 1: bit $8.,r1
- beq 1f
- mov saver0,r0
- sys read;lflow;4
- jes badruninf
- 1: bit $16.,r1
- beq 1f
- mov saver0,r0
- sys read;ltime;4
- jes badruninf
- 1:
- mov tblmax,r3
- sub pd,r3
- sub ml,r3
- mov $_end,sybreak+2
- add r3,sybreak+2;
- sys indir;sybreak
- mov r3,lblread+4
- mov $_end,lblread+2;
- mov saver0,r0
- sys indir;lblread;
- jes badruninf
- mov saver0,r0
- sys close
- sys unlink;emfile
- lbladj:
- add $header,linused
- sub header,linused
- mov pd,filext
- sub loadstart,filext
- mov filext,filarg
- add ml,filarg
- sub tblmax,filarg
- lbllast:
- bit $1,option /test for last
- beq 2f / no last table jump
- sys creat;emlast;666
- bcs 2f
- cmp linused,$lasttab
- bhis 3f
- mov $yetmsg,lblwri+2
- mov $40.,lblwri+4
- sys indir;lblwri
- br 2f
- 3: mov r0,saver0
- cmp linused-2,$-1
- bne 6f
- mov $linused-2,linused
- clr linused-2
- 6: jsr pc,slilast
- inc r2
- jsr pc,nexttab
- tst (r5)
- beq 3f
- sub $2,linused
- cmp eb,(r5)
- blo 3f
- 7: cmp r2,$lnend
- blt 1f
- jsr pc,slnlast
- 1: jsr pc,lnrnxt
- bne 7b
- 3: jsr pc,sfllast
- bne 6b
- mov saver0,r0
- sys close
- 2:
- lblopfreq:
- bit $2,option
- beq 9f
- sys creat;emopf;666
- bcs 9f
- mov r0,saver0
- mov $opcode,r3
- mov $104.,r4
- mov $counttab,r5
- 0: mov $lnlast,r2
- mov $8.,r0
- 2: movb (r3)+,(r2)+
- sob r0,2b
- add $8,r2
- mov r2,-(sp)
- jsr pc,ltoa
- mov (sp)+,r2
- add $5,r2
- mov $8.,r0
- 2: movb (r3)+,(r2)+
- sob r0,2b
- add $8,r2
- mov r2,-(sp)
- jsr pc,ltoa
- mov (sp)+,r2
- add $5,r2
- mov $8.,r0
- 2: movb (r3)+,(r2)+
- sob r0,2b
- add $8,r2
- mov r2,-(sp)
- jsr pc,ltoa
- mov (sp)+,r2
- add $5,r2
- mov $8.,r0
- 2: movb (r3)+,(r2)+
- sob r0,2b
- add $8,r2
- mov r2,-(sp)
- jsr pc,ltoa
- mov (sp)+,r2
- mov r3,-(sp)
- jsr pc,slnlast
- mov (sp)+,r3
- sob r4,0b
- mov saver0,r0
- sys close
- 9:
- lblcount:
- clr filb
- bit $4,option
- beq 9f
- sys creat;emcount;666
- bcs 9f
- mov r0,saver0
- mov lcount,r5
- add $4,r5
- sub filext,r5
- jsr pc,procrun
- mov saver0,r0
- sys close
- 9:
- lblprof:
- bit $16.,option
- beq 9f
- sys creat;emprof;666
- bcs 9f
- mov r0,saver0
- mov ltime,r5
- sub filext,r5
- mov $profmsg,lblwri+2
- mov $29,lblwri+4
- mov $profmsg+27,r2
- jsr pc,ltoa
- mov saver0,r0
- sys indir;lblwri
- jsr pc,procrun
- mov saver0,r0
- sys close
- 9:
- lblflow:
- mov $1,filb
- bit $8.,option
- beq 9f
- sys creat;emflow;666
- bcs 9f
- mov lflow,r5
- mov $-1,flowsiz
- sub filext,r5
- jsr pc,procrun
- mov saver0,r0
- sys close
- 9:
- clr r0
- sys exit
- badruninf:
- mov $0f,lblwri+2
- mov $21.,lblwri+4
- mov $2,r0
- sys indir;lblwri
- mov r5,lblwri+2
- mov $23.,lblwri+4
- mov $2,r0
- sys indir;lblwri
- iot /force core dump
- .data
- lblwri:
- sys write;0;0
- forward:
- sys open;0;0
- sybreak:
- sys break;0;
- lblread:
- sys read;0;0
- 0: <em_runinf load error,\0>
- ldfail: < open runinf failed \n\0>
- rhfail: < read header failed \n\0>
- rtfail: < read tables failed \n\0>
- msgto: <to>
- emlast: <em_last\0>
- emcount:<em_count\0>
- emfile: <em_runinf\0>
- emopf: <em_opfreq\0>
- emprof: <em_profile\0>
- emflow: <em_flow\0>
- yetmsg: <no line or file message processed yet \n\n\0>
- unknown:<with unknown filename\0>
- lilast: <\nlines \0>
- lnlast: < >
- < >
- lnend: < \0>
- fllast: < of file >
- < \0>
- profmsg:<\ninitialization \n\0>
- sep: <\n\0>
- /----------------------------------------------------------------------------
- opcode:
- <loc.0 loc.1 loc.2 loc.3 loc.4 loc.5 loc.6 loc.7 >
- <loc.8 loc.9 loc.10 loc.11 loc.12 loc.13 loc.14 loc.15 >
- <loc.16 loc.17 loc.18 loc.19 loc.20 loc.21 loc.22 loc.23 >
- <loc.24 loc.25 loc.26 loc.27 loc.28 loc.29 loc.30 loc.31 >
- <loc.32 loc.33 aar.1W adf.s0 adi.1W adi.2W adp.l adp.1 >
- <adp.2 adp.s0 adp.s_1 ads.1W and.1W asp.1W asp.2W asp.3W >
- <asp.4W asp.5W asp.w0 beq.l beq.s0 bge.s0 bgt.s0 ble.s0 >
- <blm.s0 blt.s0 bne.s0 bra.l bra.s_1 bra.s_2 bra.s0 bra.s1 >
- <cal.1 cal.2 cal.3 cal.4 cal.5 cal.6 cal.7 cal.8 >
- <cal.9 cal.10 cal.11 cal.12 cal.13 cal.14 cal.15 cal.16 >
- <cal.17 cal.18 cal.19 cal.20 cal.21 cal.22 cal.23 cal.24 >
- <cal.25 cal.26 cal.27 cal.28 cal.s0 cff.z cif.z cii.z >
- <cmf.s0 cmi.1W cmi.2W cmp.z cms.s0 csa.1W csb.1W dec.z >
- <dee.w0 del.w_1 dup.1W dvf.s0 dvi.1W fil.l inc.z ine.lw >
- <ine.w0 inl._1W inl._2W inl._3W inl.w_1 inn.s0 ior.1W ior.s0 >
- <lae.l lae.w0 lae.w1 lae.w2 lae.w3 lae.w4 lae.w5 lae.w6 >
- <lal.p lal.n lal.0 lal._1 lal.w0 lal.w_1 lal.w_2 lar.1W >
- <ldc.0 lde.lw lde.w0 ldl.0 ldl.w_1 lfr.1W lfr.2W lfr.s0 >
- <lil.w_1 lil.w0 lil.0 lil.1W lin.l lin.s0 lni.z loc.l >
- <loc._1 loc.s0 loc.s_1 loe.lw loe.w0 loe.w1 loe.w2 loe.w3 >
- <loe.w4 lof.l lof.1W lof.2W lof.3W lof.4W lof.s0 loi.l >
- <loi.1 loi.1W loi.2W loi.3W loi.4W loi.s0 lol.pw lol.nw >
- <lol.0 lol.1W lol.2W lol.3W lol._1W lol._2W lol._3W lol._4W >
- <lol._5W lol._6W lol._7W lol._8W lol.w0 lol.w_1 lxa.1 lxl.1 >
- <lxl.2 mlf.s0 mli.1W mli.2W rck.1W ret.0 ret.1W ret.s0 >
- <rmi.1W sar.1W sbf.s0 sbi.1W sbi.2W sdl.w_1 set.s0 sil.w_1 >
- <sil.w0 sli.1W ste.lw ste.w0 ste.w1 ste.w2 stf.l stf.1W >
- <stf.2W stf.s0 sti.1 sti.1W sti.2W sti.3W sti.4W sti.s0 >
- <stl.pw stl.nw stl.0 stl.1W stl._1W stl._2W stl._3W stl._4W >
- <stl._5W stl.w_1 teq.z tgt.z tlt.z tne.z zeq.l zeq.s0 >
- <zeq.s1 zer.s0 zge.s0 zgt.s0 zle.s0 zlt.s0 zne.s0 zne.s_1 >
- <zre.lw zre.w0 zrl._1W zrl._2W zrl.w_1 zrl.nw escape1 escape2 >
- <aar.l aar.z adf.l adf.z adi.l adi.z ads.l ads.z >
- <adu.l adu.z and.l and.z asp.lw ass.l ass.z bge.l >
- <bgt.l ble.l blm.l bls.l bls.z blt.l bne.l cai.z >
- <cal.l cfi.z cfu.z ciu.z cmf.l cmf.z cmi.l cmi.z >
- <cms.l cms.z cmu.l cmu.z com.l com.z csa.l csa.z >
- <csb.l csb.z cuf.z cui.z cuu.z dee.lw del.pw del.nw >
- <dup.l dus.l dus.z dvf.l dvf.z dvi.l dvi.z dvu.l >
- <dvu.z fef.l fef.z fif.l fif.z inl.pw inl.nw inn.l >
- <inn.z ior.l ior.z lar.l lar.z ldc.l ldf.l ldl.pw >
- <ldl.nw lfr.l lil.pw lil.nw lim.z los.l los.z lor.s0 >
- <lpi.l lxa.l lxl.l mlf.l mlf.z mli.l mli.z mlu.l >
- <mlu.z mon.z ngf.l ngf.z ngi.l ngi.z nop.z rck.l >
- <rck.z ret.l rmi.l rmi.z rmu.l rmu.z rol.l rol.z >
- <ror.l ror.z rtt.z sar.l sar.z sbf.l sbf.z sbi.l >
- <sbi.z sbs.l sbs.z sbu.l sbu.z sde.l sdf.l sdl.pw >
- <sdl.nw set.l set.z sig.z sil.pw sil.nw sim.z sli.l >
- <sli.z slu.l slu.z sri.l sri.z sru.l sru.z sti.l >
- <sts.l sts.z str.s0 tge.z tle.z trp.z xor.l xor.z >
- <zer.l zer.z zge.l zgt.l zle.l zlt.l zne.l zrf.l >
- <zrf.z zrl.pw dch.z exg.s0 exg.l exg.z lpb.z gto.l \0\0>
- .even
- .text
- /------------------------------------------------------------------------------
- / General subroutines
- /------------------------------------------------------------------------------
- wrdoff: movb (r3)+,r0 /get first byte
- swab r0 /put it in high byte
- clrb r0 /clear low byte of r0
- bisb (r3)+,r0 /"or" second byte in
- rts pc /done
- /------------------------------------------------------------------------------
- nexttab: mov linused,r5;
- add $2,r5 / increment lasttab
- cmp r5,$linused / top of table reached?
- blo 1f
- sub $96.,r5
- 1: mov r5,linused
- rts pc
- slilast: mov $lnlast,r2
- mov $6,r0
- mov $lilast,r3
- 2: movb (r3)+,(r2)+
- sob r0,2b
- rts pc
- slnlast: mov $lnlast,lblwri+2
- mov r2,r3
- sub $lnlast,r3
- beq 3f
- inc r3
- movb sep,(r2)
- 1: mov r3,lblwri+4
- mov saver0,r0
- sys indir; lblwri
- mov $lnlast,r2
- 2: movb $' ,(r2)+
- sob r3,2b
- 3: mov $lnlast,r2
- rts pc
- lnrnxt: jsr pc,nexttab
- tst (r5)
- ble 0f
- mov (r5),r1
- clr (r5)
- add $6,r2
- mov r2,r0
- jsr pc,itoa
- 0: rts pc
- sfllast:jsr pc,nexttab
- tst (r5)
- bne 0f
- clr linused
- mov eb,-(sp)
- sub filext,(sp)
- add $4,(sp)
- mov *(sp),(sp)
- mov (sp)+,(r5)
- 0: jsr pc,slnlast
- jsr pc,filadj
- mov $14.,r3
- mov $fllast+14.,r2
- mov (r5),r0
- 3: inc r3
- movb (r0)+,(r2)+
- bne 3b
- movb sep,-(r2)
- mov $fllast,lblwri+2
- mov r3,lblwri+4
- mov saver0,r0
- sys indir;lblwri
- mov $fllast+14.,r2
- sub $10.,r3
- 2: movb $' ,(r2)+
- sob r3,2b
- clr (r5)
- tst linused
- beq 2f
- jsr pc,slilast
- 2: rts pc
- filadj:
- cmp ml,(r5)
- bhi 8f
- sub filarg,(r5)
- br 7f
- 8: cmp eb,(r5)
- bhi 7f
- sub filext,(r5)
- 7: rts pc
- procrun:
- mov firstp,r4
- sub filext,r4
- 0:
- tst 4(r4)
- beq 8f
- jsr pc,msgfile
- mov r4,-(sp)
- mov countsiz,r4
- 7: cmp r2,$lnend+10
- blo 6f
- jsr pc,slnlast
- mov $lnlast,r2
- 6: tst filb
- bne 3f
- add $11.,r2
- mov r2,-(sp)
- jsr pc,ltoa
- mov (sp)+,r2
- br 4f
- 3:
- jsr pc,bittoa
- add $4,r2
- 4: sob r4,7b
- jsr pc,slnlast
- mov (sp)+,r4
- 8: mov 8.(r4),r4
- beq 8f
- sub filext,r4
- br 0b
- mov r0,saver0
- sys write;sep;1
- 8: rts pc
- msgfile:
- jsr pc,slilast
- add $6,r2
- mov 6(r4),r1
- mov r2,r0
- jsr pc,itoa
- add $4,r2
- movb msgto,(r2)+
- movb msgto+1,(r2)+
- add $6,r2
- mov 8.(r4),r1
- 3: bne 1f
- mov maxcount,r1
- br 2f
- 1: sub filext,r1
- tst 4(r1)
- beq 1f
- mov 4(r1),r1
- br 2f
- 1: mov 8.(r1),r1
- br 3b
- 2: sub 4(r4),r1
- mov r1,countsiz
- dec r1 / is this a bug?
- add 6(r4),r1
- mov r2,r0
- jsr pc,itoa
- mov $fllast,r3
- mov $14,r1
- 2: movb (r3)+,(r2)+
- sob r1,2b
- mov 10.(r4),r3
- bne 6f
- mov $unknown,r3
- br 5f
- 6: cmp ml,r3
- bhi 4f
- sub filarg,r3
- br 5f
- 4: cmp eb,r3
- bhi 5f
- sub filext,r3
- 5:
- lblmsgf:
- 2: movb (r3)+,(r2)+
- bne 2b
- jsr pc,slnlast
- rts pc
- itoa:
- mov r5,-(sp)
- mov r0,r5
- 1: clr r0
- div $10.,r0
- add $'0,r1
- movb r1,-(r5)
- mov r0,r1
- bne 1b
- mov r5,r0
- mov (sp)+,r5
- rts pc
- rts pc
- ltoa:
- 0: mov (r5),r1
- clr r0
- div $10.,r0
- mov r0,(r5)
- swab r1
- clr r0
- bisb 3(r5),r1
- div $10.,r0
- movb r0,3(r5)
- clr r0
- swab r1
- bisb 2(r5),r1
- div $10.,r0
- add $'0,r1
- movb r1,-(r2)
- movb r0,2(r5)
- bne 0b
- tst (r5)
- bne 0b
- add $4,r5
- rts pc
- bittoa:
- mov (r5),r1
- mov flowsiz,r0
- ash r0,r1
- bit $1,r1
- beq 0f
- movb $'1,(r2)
- br 1f
- 0: movb $'0,(r2)
- 1: dec r0
- cmp $-16.,r0
- beq 2f
- mov r0,flowsiz
- br 3f
- 2: clr flowsiz
- add $2,r5
- 3: rts pc
- /------------------------------------------------------------------------------
- / Leftover data
- /------------------------------------------------------------------------------
- .bss
- filb: .=.+2
- loadstart: .=.+2
- saver0: .=.+2
- filarg: .=.+2
- filext: .=.+2
- memlim: .=.+2
- header:
- bstrt: txtsiz: .=.+2
- bend: ndatad: .=.+2
- nprocs: .=.+2
- option: entry.: .=.+2
- nlines: .=.+2
- szdata: .=.+2
- firstp: .=.+2
- maxcount: .=.+2
- argc: .=.+2
- argv: .=.+2
- environ:
- .=.+2
- pb: .=.+2
- pd: .=.+2
- eb: .=.+2
- globmax: .=.+2
- tblmax: .=.+2
- ml: .=.+2
- lasttab:.=.+96. / 16 descriptors of integers + index at the end
- linused:.=.+2
- counttab:
- opfra: .=.+512.
- opfrb: .=.+512.
- opfrc: .=.+640.
- lcount: .=.+2
- countsiz:.=.+2
- lflow: .=.+2
- flowsiz:.=.+2
- ltime: .=.+2
- profsiz:.=.+2
|