├── README.md ├── source ├── as │ ├── as11.s │ ├── as12.s │ ├── as13.s │ ├── as14.s │ ├── as15.s │ ├── as16.s │ ├── as17.s │ ├── as18.s │ ├── as19.s │ ├── as21.s │ ├── as22.s │ ├── as23.s │ ├── as24.s │ ├── as25.s │ ├── as26.s │ ├── as27.s │ ├── as28.s │ ├── as29.s │ └── run ├── c │ ├── c00.c │ ├── c01.c │ ├── c02.c │ ├── c03.c │ ├── c04.c │ ├── c05.c │ ├── c0h.c │ ├── c0t.s │ ├── c10.c │ ├── c11.c │ ├── c12.c │ ├── c13.c │ ├── c1h.c │ ├── c1t.s │ ├── c20.c │ ├── c21.c │ ├── c2h.c │ ├── cvopt.c │ ├── run │ └── table.s ├── cref │ ├── ccmn.h │ ├── index │ │ ├── ecmn.h │ │ ├── econs.h │ │ ├── ind0.c │ │ ├── ind1.c │ │ └── ind2.c │ ├── mcons.h │ ├── run │ ├── src │ │ ├── acts.c │ │ ├── crpost.c │ │ ├── dr.c │ │ ├── put.c │ │ └── upost.c │ └── tab │ │ ├── atable │ │ ├── ctable │ │ ├── etable │ │ └── mtab.c ├── fort │ ├── f1 │ │ ├── f11.s │ │ ├── f12.s │ │ ├── f13.s │ │ ├── f14.s │ │ ├── f15.s │ │ ├── f16.s │ │ └── f17.s │ ├── f2 │ │ ├── f21.s │ │ ├── f22.s │ │ ├── f23.s │ │ └── f24.s │ ├── f3 │ │ ├── f31.s │ │ ├── f32.s │ │ ├── f33.s │ │ ├── f34.s │ │ ├── f35.s │ │ ├── f36.s │ │ ├── f37.s │ │ ├── f38.s │ │ └── f39.s │ ├── f4 │ │ ├── f41.s │ │ ├── f42.s │ │ ├── f43.s │ │ ├── f44.s │ │ ├── f45.s │ │ ├── f46.s │ │ └── f47.s │ ├── fx │ │ ├── fhd.s │ │ ├── fx1.s │ │ ├── fx2.s │ │ ├── fx3.s │ │ ├── fx4.s │ │ ├── fx5.s │ │ ├── fx6.s │ │ ├── fx7.s │ │ ├── fx8.s │ │ ├── fx9.s │ │ ├── fxa.s │ │ ├── fxb.s │ │ ├── fxc.s │ │ ├── fxd.s │ │ ├── fxe.s │ │ ├── fxf.s │ │ ├── fxg.s │ │ ├── fxh.s │ │ ├── fxi.s │ │ └── fxx.s │ ├── io │ │ ├── io1.s │ │ ├── io2.s │ │ ├── io3.s │ │ ├── io4.s │ │ ├── io5.s │ │ ├── io6.s │ │ ├── io7.s │ │ └── iox.s │ ├── rt │ │ ├── r0.s │ │ ├── r1.s │ │ ├── r2.s │ │ ├── r3.s │ │ ├── r4.s │ │ ├── r5.s │ │ ├── r6.s │ │ ├── r7.s │ │ ├── r8.s │ │ ├── r9.s │ │ ├── ra.s │ │ ├── rb.s │ │ ├── rc.s │ │ ├── rd.s │ │ ├── re.s │ │ ├── rf.s │ │ ├── rg.s │ │ ├── rh.s │ │ └── rx.s │ ├── rt1 │ │ ├── abs.s │ │ ├── aimag.s │ │ ├── aint.s │ │ ├── alog.s │ │ ├── alog10.s │ │ ├── amax0.s │ │ ├── amax1.s │ │ ├── amin0.s │ │ ├── amin1.s │ │ ├── amod.s │ │ ├── atan.s │ │ ├── atan2.s │ │ ├── cabs.s │ │ ├── ccos.f │ │ ├── cexp.s │ │ ├── clog.f │ │ ├── cmplx.s │ │ ├── conjg.s │ │ ├── cos.s │ │ ├── csin.f │ │ ├── csqrt.f │ │ ├── dble.s │ │ ├── dccos.f │ │ ├── dclog.f │ │ ├── dcsin.f │ │ ├── dcsqrt.f │ │ ├── dim.s │ │ ├── dimag.s │ │ ├── exp.s │ │ ├── float.s │ │ ├── iabs.s │ │ ├── idim.s │ │ ├── idint.s │ │ ├── ierr.s │ │ ├── ifix.s │ │ ├── isign.s │ │ ├── mod.s │ │ ├── real.s │ │ ├── sign.s │ │ ├── sin.s │ │ ├── sngl.s │ │ ├── sqrt.s │ │ └── tanh.f │ ├── rt2 │ │ ├── ctime.s │ │ ├── getarg.s │ │ ├── nice.s │ │ ├── openrw.s │ │ ├── plot.s │ │ ├── rand.s │ │ ├── rio.s │ │ ├── setfil.s │ │ └── uio.s │ ├── run │ └── sum.s ├── iolib │ ├── alloc.c │ ├── calloc.c │ ├── cclose.c │ ├── ceof.c │ ├── cerror.c │ ├── cexit.c │ ├── cflush.c │ ├── cfree.c │ ├── cgetc.c │ ├── ciodec.c │ ├── clenf.c │ ├── copen.c │ ├── cputc.c │ ├── cwrd.c │ ├── dummy.s │ ├── ftoa.c │ ├── getch.c │ ├── gets.c │ ├── getvec.c │ ├── iehzap.c │ ├── makbuf.c │ ├── maktab.c │ ├── nexch.c │ ├── nodig.c │ ├── printf.c │ ├── putch.c │ ├── puts.c │ ├── relvec.c │ ├── revput.c │ ├── run │ ├── scan1.c │ ├── scan2.c │ ├── scan3.c │ ├── system.c │ ├── tmpnam.c │ ├── unget.c │ ├── unprnt.s │ └── wdleng.c ├── m6 │ ├── m6.h │ ├── m61.c │ ├── m62.c │ ├── m63.c │ ├── m64.c │ ├── m65.c │ ├── m66.c │ ├── m67.c │ └── run ├── mdec │ ├── dldr.s │ ├── dtf.s │ ├── fsboot.s │ ├── hp.s │ ├── ht.s │ ├── mboot.s │ ├── mcopy.s │ ├── reset.s │ ├── rhp.s │ ├── rk.s │ ├── rkf.s │ ├── rp.s │ ├── rrk.s │ ├── rrp.s │ ├── run │ ├── tboot.s │ ├── tc.s │ ├── tcf.s │ ├── tm.s │ ├── tpboot.s │ ├── tty.s │ ├── uboot.s │ ├── whp.s │ ├── wrk.s │ └── wrp.s ├── rat │ ├── lex.c │ ├── r.g │ ├── r.h │ ├── r1.c │ ├── r2.c │ └── run ├── run ├── s1 │ ├── ac.c │ ├── ar.s │ ├── banner.c │ ├── bas.s │ ├── bc.y │ ├── bcd.c │ ├── cal.c │ ├── cat.s │ ├── cc.c │ ├── cdb1.c │ ├── cdb2.c │ ├── chgrp.s │ ├── chmod.c │ ├── chown.s │ ├── clri.s │ ├── cmp.c │ ├── col.c │ ├── comm.c │ ├── cp.c │ ├── cpall.c │ ├── cron.c │ ├── crypt.c │ ├── date.c │ ├── db1.s │ ├── db2.s │ ├── db3.s │ ├── db4.s │ ├── dc1.s │ ├── dc2.s │ ├── dc3.s │ ├── dc4.s │ ├── dc5.s │ ├── dcheck.c │ ├── dd.c │ ├── df.c │ ├── diff1.c │ ├── diff2.s │ ├── dsw.s │ ├── du.s │ ├── dump.c │ ├── echo.c │ ├── ed.c │ ├── exit.c │ ├── fc.c │ ├── fed1.s │ ├── fed2.s │ ├── fed3.s │ ├── file.c │ ├── find.c │ ├── form1.s │ ├── form2.s │ ├── form3.s │ ├── form4.s │ ├── form5.s │ ├── form6.s │ ├── getty.c │ ├── glob.c │ ├── goto.c │ ├── grep.c │ ├── gsi.c │ ├── icheck.c │ ├── if.c │ ├── init.c │ ├── kill.s │ ├── ld.c │ ├── ln.c │ ├── login.c │ ├── lpd.s │ ├── lpr.c │ ├── ls.c │ └── run ├── s2 │ ├── mail.c │ ├── mesg.c │ ├── mkdir.s │ ├── mkfs.c │ ├── mknod.c │ ├── mount.c │ ├── mv.c │ ├── ncheck.c │ ├── newgrp.c │ ├── nice.c │ ├── nm.c │ ├── nohup.c │ ├── od.c │ ├── opr.c │ ├── passwd.c │ ├── pfe.s │ ├── pr.c │ ├── prof.c │ ├── ps.c │ ├── ptx.c │ ├── pwd.c │ ├── quiz.c │ ├── rc.c │ ├── restor.c │ ├── rew.s │ ├── rm.c │ ├── rmdir.s │ ├── run │ ├── sa.c │ ├── sh.c │ ├── size.c │ ├── sleep.c │ ├── sort.c │ ├── split.c │ ├── strip.s │ ├── stty.c │ ├── su.c │ ├── sum.s │ ├── sync.c │ ├── tbl.c │ ├── tee.c │ ├── time.s │ ├── tp1.s │ ├── tp2.s │ ├── tp3.s │ ├── tp4.s │ ├── tr.c │ ├── tty.s │ ├── typo.c │ ├── umount.c │ ├── uniq.c │ ├── units.c │ ├── update.s │ ├── usort.c │ ├── wall.c │ ├── wc.c │ ├── who.c │ └── write.s ├── s3 │ ├── atan.s │ ├── crypt.s │ ├── dpadd.s │ ├── ecvt.s │ ├── exp.s │ ├── fakfp.s │ ├── floor.s │ ├── fmod.s │ ├── fp1.s │ ├── fp2.s │ ├── fp3.s │ ├── fpx.s │ ├── gamma.s │ ├── get.s │ ├── ldiv.s │ ├── log.s │ ├── mesg.s │ ├── pow.s │ ├── put.s │ ├── rand.s │ ├── run │ ├── savr5.s │ ├── sin.s │ ├── sqrt.s │ ├── switch.s │ └── ttyn.s ├── s4 │ ├── abort.s │ ├── abs.s │ ├── alloc.s │ ├── atof.s │ ├── atoi.c │ ├── cerror.s │ ├── chdir.s │ ├── chmod.s │ ├── chown.s │ ├── close.s │ ├── creat.s │ ├── crt0.s │ ├── csv.s │ ├── ctime.c │ ├── dup.s │ ├── errlst.c │ ├── execl.s │ ├── execv.s │ ├── exit.s │ ├── fcrt0.s │ ├── ffltpr.s │ ├── fltpr.s │ ├── fork.s │ ├── fstat.s │ ├── getc.s │ ├── getchr.s │ ├── getcsw.s │ ├── getgid.s │ ├── getpid.s │ ├── getpw.c │ ├── getuid.s │ ├── gtty.s │ ├── hmul.s │ ├── kill.s │ ├── ladd.s │ ├── ldfps.s │ ├── link.s │ ├── locv.s │ ├── ltod.s │ └── run ├── s5 │ ├── makdir.s │ ├── mcount.s │ ├── mcrt0.s │ ├── mdate.s │ ├── mknod.s │ ├── mon.c │ ├── mount.s │ ├── nargs.s │ ├── nice.s │ ├── nlist.s │ ├── open.s │ ├── perror.c │ ├── pipe.s │ ├── printf.s │ ├── prof.s │ ├── ptrace.s │ ├── putc.s │ ├── putchr.s │ ├── qsort.c │ ├── read.s │ ├── reset.s │ ├── rin.c │ ├── run │ ├── sbrk.s │ ├── seek.s │ ├── setgid.s │ ├── setuid.s │ ├── signal.s │ ├── sleep.s │ ├── stat.s │ ├── stime.s │ ├── stty.s │ ├── sync.s │ ├── time.s │ ├── times.s │ ├── umount.s │ ├── unlink.s │ ├── wait.s │ └── write.s ├── s7 │ ├── ne.g │ ├── ne.h │ ├── ne1.c │ ├── ne2.c │ ├── ne3.c │ ├── ne4.c │ ├── ne5.c │ ├── ne6.c │ ├── nelex.c │ ├── nroff1.s │ ├── nroff2.s │ ├── nroff3.s │ ├── nroff4.s │ ├── nroff5.s │ ├── nroff8.s │ ├── roff1.s │ ├── roff2.s │ ├── roff3.s │ ├── roff4.s │ ├── roff5.s │ ├── roff7.s │ ├── roff8.s │ ├── run │ └── suftab.s ├── salloc │ ├── alloc1.s │ ├── alloc2.s │ ├── alloc3.s │ ├── altch.s │ ├── bsp.s │ ├── bword.s │ ├── getch.s │ ├── getwd.s │ ├── length.s │ ├── rewind.s │ ├── run │ └── zero.s ├── sno │ ├── run │ ├── sno.h │ ├── sno1.c │ ├── sno2.c │ ├── sno3.c │ └── sno4.c ├── tmg │ ├── run │ ├── tmga.s │ ├── tmgb │ │ ├── any.s │ │ ├── append.s │ │ ├── arith.s │ │ ├── bundle.s │ │ ├── char.s │ │ ├── copy.s │ │ ├── cstr.s │ │ ├── ctest.s │ │ ├── decmal.s │ │ ├── discd.s │ │ ├── emit.s │ │ ├── end.s │ │ ├── f.s │ │ ├── find.s │ │ ├── getnam.s │ │ ├── ignore.s │ │ ├── inc.s │ │ ├── infix.s │ │ ├── jget.s │ │ ├── lvrv.s │ │ ├── mult.s │ │ ├── octal.s │ │ ├── params.s │ │ ├── push.s │ │ ├── putcal.s │ │ ├── putdec.s │ │ ├── putoct.s │ │ ├── px.s │ │ ├── reln.s │ │ ├── shift.s │ │ ├── stack.s │ │ ├── string.s │ │ ├── table.s │ │ ├── tq.s │ │ ├── trace.s │ │ ├── trans.s │ │ ├── tx.s │ │ └── unary.s │ ├── tmgc.s │ ├── tmgl.s │ └── tmgl.t └── yacc │ ├── lib │ ├── main.c │ ├── parser.c │ ├── zacc.c │ ├── zerr.c │ └── zinit.c │ ├── run │ └── source │ ├── dextern │ ├── y0.c │ ├── y1.c │ ├── y2.c │ ├── y3.c │ ├── y4.c │ └── y5.c └── sys ├── buf.h ├── conf.h ├── conf ├── data.s ├── m40.s ├── m45.s ├── mkconf.c ├── sysfix └── sysfix.c ├── dmr ├── bio.c ├── cat.c ├── dc.c ├── dh.c ├── dhdm.c ├── dhfdm.c ├── dn.c ├── dp.c ├── hp.c ├── hs.c ├── ht.c ├── kl.c ├── lp.c ├── mem.c ├── partab.c ├── pc.c ├── rf.c ├── rk.c ├── rp.c ├── sys.c ├── tc.c ├── tm.c ├── tty.c ├── vs.c └── vt.c ├── file.h ├── filsys.h ├── ino.h ├── inode.h ├── ken ├── alloc.c ├── clock.c ├── fio.c ├── iget.c ├── main.c ├── malloc.c ├── nami.c ├── pipe.c ├── prf.c ├── rdwri.c ├── sig.c ├── slp.c ├── subr.c ├── sys1.c ├── sys2.c ├── sys3.c ├── sys4.c ├── sysent.c ├── text.c └── trap.c ├── lib1 ├── lib2 ├── param.h ├── proc.h ├── reg.h ├── run ├── seg.h ├── systm.h ├── text.h ├── tty.h └── user.h /README.md: -------------------------------------------------------------------------------- 1 | # UNIX 6th Edition Kernel Source Code 2 | 3 | from [www.tom-yam.or.jp/2238/src](http://www.tom-yam.or.jp/2238/src). 4 | 5 | # Documents 6 | - [Commentary on the Sixth Edition UNIX Operating System](http://www.lemis.com/grog/Documentation/Lions/) 7 | - [The Unix Tree (Minnie's Home Page)](http://minnie.tuhs.org/cgi-bin/utree.pl) 8 | 9 | -------------------------------------------------------------------------------- /source/as/as12.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / a2 -- pdp-11 assembler pass 1 5 | 6 | error: 7 | incb errflg 8 | mov r0,-(sp) 9 | mov r1,-(sp) 10 | mov (r5)+,r0 11 | tst *curarg 12 | beq 1f 13 | mov r0,-(sp) 14 | mov *curarg,r0 15 | clr *curarg 16 | jsr r5,filerr; '\n 17 | mov (sp)+,r0 18 | 1: 19 | mov r2,-(sp) 20 | mov r3,-(sp) 21 | mov line,r3 22 | movb r0,1f 23 | mov $1f+6,r0 24 | mov $4,r1 25 | 2: 26 | clr r2 27 | dvd $10.,r2 28 | add $'0,r3 29 | movb r3,-(r0) 30 | mov r2,r3 31 | sob r1,2b 32 | mov $1,r0 33 | sys write; 1f; 7 34 | mov (sp)+,r3 35 | mov (sp)+,r2 36 | mov (sp)+,r1 37 | mov (sp)+,r0 38 | rts r5 39 | 40 | .data 41 | 1: 42 | .even 43 | .text 44 | 45 | betwen: 46 | cmp r0,(r5)+ 47 | blt 1f 48 | cmp (r5)+,r0 49 | blt 2f 50 | 1: 51 | tst (r5)+ 52 | 2: 53 | rts r5 54 | 55 | putw: 56 | tst ifflg 57 | beq 1f 58 | cmp r4,$'\n 59 | bne 2f 60 | 1: 61 | mov r4,*obufp 62 | add $2,obufp 63 | cmp obufp,$outbuf+512. 64 | blo 2f 65 | mov $outbuf,obufp 66 | movb pof,r0 67 | sys write; outbuf; 512. 68 | 2: 69 | rts pc 70 | 71 | -------------------------------------------------------------------------------- /source/as/as25.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / as25 is empty 5 | -------------------------------------------------------------------------------- /source/as/as28.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / as8 -- PDP-11 assembler pass 2 5 | 6 | qnl: 7 | a.out: 8 | 9 | .even 10 | a.outp: a.out 11 | 12 | .data 13 | a.tmp1: 0 14 | a.tmp2: 0 15 | a.tmp3: 0 16 | 17 | tseekp: txtseek 18 | rseekp: trelseek 19 | 20 | txtmagic: 21 | br .+20 22 | txtsiz: .=.+2 23 | datsiz: .=.+2 24 | bsssiz: .=.+2 25 | symsiz: .=.+2 26 | stksiz: .=.+2 27 | exorig: .=.+2 28 | .=.+2 29 | 30 | txtseek: 20 31 | datseek:.=.+2 32 | .=.+2 33 | trelseek:.=.+2 34 | drelseek:.=.+2 35 | .=.+2 36 | symseek:.=.+2 37 | 38 | .bss 39 | 40 | brlen = 1024. 41 | brtab: .=.+[brlen\/8.] 42 | brtabp: .=.+2 43 | brdelt: .=.+2 44 | fbbufp: .=.+2 45 | defund: .=.+2 46 | savdot: .=.+6 47 | datbase:.=.+2 48 | bssbase:.=.+2 49 | fbfil: .=.+2 50 | fin: .=.+2 51 | ibufc: .=.+2 52 | txtfil: .=.+2 53 | symf: .=.+2 54 | adrbuf: .=.+12. 55 | xsymbol:.=.+2 56 | fout: .=.+2 57 | ch: .=.+2 58 | wordf: .=.+2 59 | argb: .=.+22. 60 | line: .=.+2 61 | savop: .=.+2 62 | curfb: .=.+20. 63 | nxtfb: .=.+20. 64 | numval: .=.+2 65 | maxtyp: .=.+2 66 | relfil: .=.+2 67 | ibufp: .=.+2 68 | txtp: .=.+6+512. 69 | relp: .=.+6+512. 70 | swapf: .=.+2 71 | rlimit: .=.+2 72 | passno: .=.+2 73 | endtable:.=.+2 74 | usymtab:.=.+20. 75 | end: 76 | 77 | .text 78 | -------------------------------------------------------------------------------- /source/as/run: -------------------------------------------------------------------------------- 1 | as as1?.s 2 | ld -s -n a.out 3 | cmp a.out /bin/as 4 | cp a.out /bin/as 5 | as as2?.s 6 | ld -s -n a.out 7 | cmp a.out /lib/as2 8 | cp a.out /lib/as2 9 | rm a.out 10 | -------------------------------------------------------------------------------- /source/c/run: -------------------------------------------------------------------------------- 1 | cc -c -O c0[012345].c 2 | cc -c -O c1[0123].c 3 | as c1t.s; mv a.out c1t.o 4 | cc cvopt.c 5 | a.out table.s table.i 6 | as table.i; mv a.out table.o 7 | cc -c -O c2[01].c 8 | 9 | ed c0t.s 10 | g/fpp =/s/1/0/ 11 | w 12 | q 13 | as c0t.s; mv a.out c0t.o 14 | cc -s -n c0?.o 15 | cmp a.out /lib/c0 16 | cp a.out /lib/c0 17 | 18 | ed c0t.s 19 | g/fpp =/s/0/1/ 20 | w 21 | q 22 | as c0t.s; mv a.out c0t.o 23 | cc -f -s -n c0?.o 24 | cmp a.out /lib/fc0 25 | cp a.out /lib/fc0 26 | 27 | cc -s -n c1?.o table.o 28 | cmp a.out /lib/c1 29 | cp a.out /lib/c1 30 | 31 | cc -f -s -n c1?.o table.o 32 | cmp a.out /lib/fc1 33 | cp a.out /lib/fc1 34 | 35 | cc -s -n c2?.o 36 | cmp a.out /lib/c2 37 | cp a.out /lib/c2 38 | 39 | rm *.o table.i a.out 40 | -------------------------------------------------------------------------------- /source/cref/ccmn.h: -------------------------------------------------------------------------------- 1 | struct tempent { 2 | char *beg; 3 | int ct; 4 | char term; 5 | } temp[30]; 6 | 7 | char lbuf[5]; 8 | int cflag; 9 | int t1; 10 | 11 | int level; 12 | int hlevel; 13 | int dlevel; 14 | int xtrn; 15 | 16 | int tp[5]; 17 | 18 | struct { 19 | int cl[NUMC]; 20 | } tab[NUMS]; 21 | 22 | int coll(); 23 | int save(); 24 | int out(); 25 | int asym(); 26 | int asw(); 27 | int csym(); 28 | int csw(); 29 | int incl(); 30 | int decl(); 31 | int sk2(); 32 | int sk(); 33 | int tabs(); 34 | int semi(); 35 | 36 | char line[132]; 37 | int l; 38 | int lno; 39 | char c; 40 | int cursl; 41 | char curs[9]; 42 | int curfl; 43 | char curf[10]; 44 | 45 | int usw; 46 | int xsw; 47 | int only; 48 | int cross; 49 | int file; 50 | int cs; 51 | int (*flag[8])(); 52 | int fl; 53 | char gch[8]; 54 | 55 | struct htab { 56 | int hsiz; 57 | int ssiz; 58 | int nsym; 59 | int curb; 60 | int *hptr; 61 | char *symt; 62 | }; 63 | 64 | struct htab itab; 65 | struct htab xtab; 66 | 67 | int ipsp[PTRI]; 68 | char issp[CHARI]; 69 | int xpsp[PTRX]; 70 | char xssp[CHARX]; 71 | 72 | int ib1[259]; 73 | int ib2[259]; 74 | 75 | char *ibuf; 76 | char *ibuf1; 77 | char *ibuf2; 78 | 79 | char mone; 80 | int order; 81 | int ssw; 82 | int type; 83 | char *utmp; 84 | -------------------------------------------------------------------------------- /source/cref/index/ecmn.h: -------------------------------------------------------------------------------- 1 | int count; 2 | int page; 3 | struct { 4 | char *beg; 5 | int ct; 6 | char term; 7 | } temp[30]; 8 | 9 | int pn; 10 | int word; 11 | int hsw; 12 | int t1; 13 | 14 | int level; 15 | int hlevel; 16 | int dlevel; 17 | int xtrn; 18 | 19 | int tp[2]; 20 | 21 | struct { 22 | int cl[NUMC]; 23 | } tab[NUMS]; 24 | 25 | int coll(); 26 | int save(); 27 | int out(); 28 | int hyphen(); 29 | int hyp1(); 30 | int hyp2(); 31 | int pno(); 32 | int error(); 33 | 34 | char line[300]; 35 | int l; 36 | int lno; 37 | char c; 38 | int cursl; 39 | char curs[9]; 40 | int curfl; 41 | char curf[10]; 42 | 43 | int usw; 44 | int xsw; 45 | int only; 46 | int cross; 47 | int file; 48 | int cs; 49 | int (*flag[8])(); 50 | int fl; 51 | char gch[8]; 52 | 53 | struct htab { 54 | int hsiz; 55 | int ssiz; 56 | int nsym; 57 | int curb; 58 | int *hptr; 59 | char *symt; 60 | }; 61 | 62 | struct htab itab; 63 | 64 | int ipsp[PTRI]; 65 | char issp[CHARI]; 66 | 67 | int ib1[259]; 68 | 69 | char *ibuf; 70 | char *ibuf1; 71 | 72 | char mone; 73 | int order; 74 | int ssw; 75 | int type; 76 | char *utmp; 77 | -------------------------------------------------------------------------------- /source/cref/index/econs.h: -------------------------------------------------------------------------------- 1 | # define NUMA 14 2 | # define NUMC 128 3 | # define NUMS 3 4 | # define SIZA 8 5 | # define SIZC 2 6 | # define SIZS 8 7 | # define PTRI 509 8 | # define CHARI 4000 9 | # define PTRX 5147 10 | # define CHARX 40000 11 | # define CONT 0 12 | # define COLL 1 13 | # define SAVE 2 14 | # define OUT 3 15 | # define EGOBL 4 16 | # define SHARP 5 17 | # define PNO 6 18 | 19 | # define SKIP 0 20 | # define COLLECT 1 21 | # define SKIP2 2 22 | #define CREATC 0644 23 | -------------------------------------------------------------------------------- /source/cref/index/ind2.c: -------------------------------------------------------------------------------- 1 | int optr; 2 | 3 | char obuf[512]; 4 | 5 | int nflush; 6 | 7 | put(string,n) 8 | char *string; 9 | { 10 | extern utmp; 11 | int i; 12 | char *o; 13 | 14 | /*printf("%d %c %d\n",fil,*string,n);/*DEBUG*/ 15 | 16 | string--; 17 | 18 | if((i = optr + n - 512) >= 0) { 19 | n =- i; 20 | o = &obuf[optr] -1; 21 | while(--n >= 0) 22 | *++o = *++string; 23 | optr = 512; 24 | flsh(1); 25 | n = i; 26 | } 27 | 28 | o = &obuf[optr] - 1; 29 | optr =+ n; 30 | 31 | while(--n >= 0) { 32 | *++o = *++string; 33 | } 34 | return(0); 35 | } 36 | 37 | flsh(fil) 38 | { 39 | extern tp[],utmp; 40 | 41 | if(optr <= 0) return(optr); 42 | 43 | nflush++; 44 | if(write(tp[0],obuf,optr) != optr) 45 | return(-1); 46 | optr = 0; 47 | return(0); 48 | } 49 | 50 | -------------------------------------------------------------------------------- /source/cref/mcons.h: -------------------------------------------------------------------------------- 1 | # define NUMA 14 2 | # define NUMC 128 3 | # define NUMS 3 4 | # define SIZA 8 5 | # define SIZC 2 6 | # define SIZS 8 7 | # define PTRI 509 8 | # define CHARI 4000 9 | # define PTRX 509 10 | # define CHARX 4000 11 | # define CONT 1 12 | # define COLL 2 13 | # define SAVE 3 14 | # define OUT 4 15 | # define ASYM 5 16 | # define ASW 6 17 | # define CSYM 7 18 | # define CSW 8 19 | # define INCL 9 20 | # define DECL 10 21 | # define SK2 11 22 | # define SK 12 23 | # define TABS 13 24 | # define SEMI 14 25 | # define SHARP 15 26 | 27 | # define SKIP 0 28 | # define COLLECT 1 29 | # define SKIP2 2 30 | #define CREATC 0644 31 | -------------------------------------------------------------------------------- /source/cref/run: -------------------------------------------------------------------------------- 1 | chdir tab 2 | cc mtab.c 3 | a.out atable atab 4 | a.out ctable ctab 5 | a.out etable etab 6 | cmp atab /usr/lib/atab 7 | cp atab /usr/lib/atab 8 | cmp ctab /usr/lib/ctab 9 | cp ctab /usr/lib/ctab 10 | cmp etab /usr/lib/etab 11 | cp etab /usr/lib/etab 12 | rm a.out atab ctab etab 13 | 14 | chdir ../src 15 | cc -s -O upost.c 16 | cmp a.out /usr/bin/upost 17 | cp a.out /usr/bin/upost 18 | cc -s -O crpost.c 19 | cmp a.out /usr/bin/crpost 20 | cp a.out /usr/bin/crpost 21 | cc -s -O dr.c acts.c put.c 22 | cmp a.out /usr/bin/cref 23 | cp a.out /usr/bin/cref 24 | rm a.out *.o 25 | 26 | chdir ../index 27 | cc -s -O ind?.c 28 | cmp a.out /usr/bin/index 29 | cp a.out /usr/bin/index 30 | rm a.out *.o 31 | -------------------------------------------------------------------------------- /source/cref/src/put.c: -------------------------------------------------------------------------------- 1 | int bct[4]; 2 | int optr[4]; 3 | char bsp[2048]; 4 | 5 | char *obuf[4] {bsp, 6 | bsp + 512, 7 | bsp + 1024, 8 | bsp + 1536 9 | }; 10 | 11 | int nflush; 12 | 13 | put(fil,string,n) 14 | char *string; 15 | { 16 | extern utmp; 17 | int i; 18 | char *o; 19 | 20 | /*printf("%d %c %d\n",fil,*string,n);/*DEBUG*/ 21 | 22 | string--; 23 | 24 | if((i = optr[fil] + n - 512) >= 0) { 25 | n =- i; 26 | o = &obuf[fil][optr[fil]] -1; 27 | while(--n >= 0) 28 | *++o = *++string; 29 | optr[fil] = 512; 30 | flsh(fil); 31 | n = i; 32 | } 33 | 34 | o = &obuf[fil][optr[fil]] - 1; 35 | optr[fil] =+ n; 36 | 37 | while(--n >= 0) { 38 | *++o = *++string; 39 | } 40 | return(0); 41 | } 42 | 43 | flsh(fil) 44 | { 45 | extern tp[],utmp; 46 | 47 | if(optr[fil] <= 0) return(optr[fil]); 48 | 49 | if(bct[fil]++ >= 128 && utmp == 0) { 50 | printf("Wraparound temp file %d\n",fil); 51 | dexit(); 52 | } 53 | nflush++; 54 | if(write(tp[fil],obuf[fil],optr[fil]) != optr[fil]) 55 | return(-1); 56 | optr[fil] = 0; 57 | return(0); 58 | } 59 | 60 | -------------------------------------------------------------------------------- /source/fort/f1/f15.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / f15 -- subroutine/function 5 | 6 | .globl ssubr 7 | .globl sfunc 8 | .globl sbloc 9 | .globl sfunc1 10 | .globl funok 11 | 12 | .globl getsym 13 | .globl error 14 | 15 | ssubr: 16 | mov $2,progt 17 | br 1f 18 | 19 | sfunc: 20 | mov $4,progt 21 | 1: 22 | clr r0 23 | br 2f 24 | 25 | sfunc1: 26 | mov $4,progt 27 | 2: 28 | tst funok 29 | beq 1f 30 | jsr r5,error; 11. 31 | 1: 32 | add $10,r0 / class=simple 33 | mov r0,-(sp) 34 | jsr r5,getsym 35 | mov (sp)+,r2 36 | tst r0 37 | beq 1f 38 | 2: 39 | jsr r5,error; 12. 40 | rts r5 41 | 1: 42 | mov r2,symtab(r3) 43 | jsr r5,getsym 44 | cmp r0,$32. / ( 45 | beq 1f 46 | cmp r0,$40. / eos 47 | bne 2b 48 | rts r5 49 | 1: 50 | clr -(sp) 51 | 1: 52 | add $2,(sp) 53 | jsr r5,getsym 54 | tst r0 55 | beq 3f 56 | tst (sp)+ 57 | br 2b 58 | 3: 59 | bis $200,symtab(r3) / param 60 | mov (sp),symtab+6(r3) / param number 61 | jsr r5,getsym 62 | cmp r0,$36. / , 63 | beq 1b 64 | tst (sp)+ 65 | cmp r0,$34. / ) 66 | bne 2b 67 | jsr r5,getsym 68 | cmp r0,$40. 69 | bne 2b 70 | rts r5 71 | 72 | sbloc: 73 | mov $6,progt 74 | jsr r5,getsym 75 | tst funok 76 | beq 1f 77 | jsr r5,error; 11. 78 | 1: 79 | cmp r0,$40. 80 | beq 1f 81 | jsr r5,error; 13. 82 | 1: 83 | rts r5 84 | 85 | .data 86 | funok: 0 87 | -------------------------------------------------------------------------------- /source/fort/f1/f16.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / f16 -- extrn, equiv, data 5 | 6 | .globl sextr 7 | .globl sequi 8 | 9 | .globl getsym 10 | .globl putc 11 | .globl error 12 | .globl ptemp 13 | 14 | sextr: 15 | jsr r5,getsym 16 | tst r0 17 | bne 1f 18 | bit $70,symtab(r3) 19 | beq 2f 20 | jsr r5,error; 14. 21 | 2: 22 | bis $30,symtab(r3) 23 | jsr r5,getsym 24 | cmp r0,$36. / , 25 | beq sextr 26 | cmp r0,$40. / eos 27 | beq 2f 28 | 1: 29 | jsr r5,error; 15. 30 | 2: 31 | rts r5 32 | 33 | sequi: 34 | jsr r5,ptemp; 'e; efno; line 35 | rts r5 36 | 37 | 38 | -------------------------------------------------------------------------------- /source/fort/f1/f17.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / f17 -- implicit statement 5 | 6 | .globl simpl 7 | 8 | .globl getype 9 | .globl chrtab 10 | .globl error 11 | 12 | simpl: 13 | jsr r5,getype 14 | br 9f 15 | mov r2,r1 16 | mov r0,-(sp) 17 | movb (r1)+,r0 18 | cmp r0,$'( 19 | beq 1f 20 | cmpb r0,$'/ 21 | bne 8f 22 | 1: 23 | movb (r1)+,r0 24 | cmpb chrtab(r0),$2 25 | bne 8f 26 | cmpb r0,$'a 27 | blo 2f 28 | sub $6,r0 / map 'a into 'Z+1 29 | 2: 30 | movb (r1)+,r2 31 | cmpb r2,$'- 32 | bne 2f 33 | movb (r1)+,r2 34 | cmpb chrtab(r2),$2 35 | bne 8f 36 | cmp r2,$'a 37 | blo 3f 38 | sub $6,r2 / map 'a into 'Z+1 39 | br 3f 40 | 2: 41 | mov r0,r2 42 | dec r1 43 | 3: 44 | cmp r0,r2 45 | bhi 8f 46 | asl r0 47 | asl r2 48 | 3: 49 | mov (sp),imptab-[2*'A](r0) 50 | add $2,r0 51 | cmp r0,r2 52 | blos 3b 53 | movb (r1)+,r0 54 | cmp r0,$', 55 | beq 1b 56 | tst (sp)+ 57 | cmp r0,$') 58 | beq 1f 59 | cmp r0,$'/ 60 | bne 9f 61 | 1: 62 | tstb (r1) 63 | bne simpl 64 | rts r5 65 | 8: 66 | tst (sp)+ 67 | 9: 68 | jsr r5,error; 16. / implicit syntax error 69 | rts r5 70 | 71 | -------------------------------------------------------------------------------- /source/fort/f2/f21.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / f21 -- storage allocation 5 | / 6 | 7 | .globl pass2 8 | 9 | .globl signon 10 | .globl signoff 11 | .globl calloc 12 | .globl salloc 13 | .globl equiv 14 | .globl entry 15 | 16 | pass2: 17 | jsr r5,signon; 2 18 | mov $errb,errp 19 | jsr r5,calloc 20 | jsr r5,equiv 21 | jsr r5,salloc 22 | jsr r5,entry 23 | jsr r5,signoff; 2 24 | 25 | -------------------------------------------------------------------------------- /source/fort/f3/f34.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / f34 -- if statement 5 | 6 | .globl sif 7 | 8 | .globl e2 9 | .globl error 10 | .globl rvalue 11 | .globl code 12 | .globl ifstmt 13 | .globl iserror 14 | .globl getsym 15 | .globl geti 16 | .globl genop 17 | .globl getlab 18 | .globl newline 19 | 20 | sif: 21 | jsr r5,e2 / expression 22 | jsr r5,iserror 23 | br 9f 24 | cmp r0,$34. / ) 25 | bne 9f 26 | jsr r5,rvalue 27 | mov $"if,r0 28 | jsr r5,genop 29 | bic $!7,r3 30 | cmp r3,$3 / logical 31 | bne 1f 32 | jsr r5,code 33 | <; 1f\n\0>; .even 34 | jsr r5,ifstmt 35 | jsr r5,code 36 | <1:\n\0>; .even 37 | rts r5 38 | 1: 39 | mov $3,-(sp) 40 | 1: 41 | jsr r5,getlab 42 | br 8f 43 | jsr r5,code 44 | <; .%d\0>; .even 45 | r0 46 | dec (sp) 47 | beq 1f 48 | jsr r5,getsym 49 | cmp r0,$36. 50 | beq 1b 51 | 8: 52 | tst (sp)+ 53 | br 9f 54 | 1: 55 | tst (sp)+ 56 | jsr r5,newline 57 | jsr r5,getsym 58 | cmp r0,$40. 59 | bne 9f 60 | rts r5 61 | 62 | 9: 63 | jsr r5,error; 40. 64 | rts r5 65 | 66 | -------------------------------------------------------------------------------- /source/fort/f4/f41.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / f41 -- everything else 5 | 6 | .globl pass4 7 | 8 | .globl signon 9 | .globl flush 10 | .globl dope 11 | .globl formts 12 | .globl globls 13 | .globl constn 14 | .globl fopen 15 | .globl bsss 16 | .globl tfil2 17 | 18 | pass4: 19 | setd 20 | jsr r5,signon; 4 21 | mov ibuf,r0 22 | sys close 23 | jsr r5,flush; obuf 24 | jsr r5,flush; tbuf 25 | 26 | jsr r5,dope 27 | jsr r5,formts 28 | jsr r5,constn 29 | jsr r5,bsss 30 | jsr r5,globls / uses r4 from bsss 31 | jsr r5,flush; obuf 32 | sys unlink; tfil2 33 | clr r0 34 | tst nerror 35 | beq 1f 36 | sys seek; 0; 2 37 | mov $1,r0 / syntax errors 38 | 1: 39 | sys exit 40 | 41 | -------------------------------------------------------------------------------- /source/fort/f4/f43.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / f43 -- output globals and bdata bss's 5 | 6 | .globl globls 7 | 8 | .globl code 9 | .globl dattab 10 | .globl onedata 11 | .globl error 12 | .globl perror 13 | 14 | globls: 15 | mov progt,r0 16 | jmp *1f(r0) 17 | 1: 18 | 1f 19 | 2f 20 | 3f 21 | 4f 22 | 1: 23 | jsr r5,code 24 | <.globl main\n\0>; .even 25 | rts r5 26 | 2: 27 | 3: 28 | jsr r5,code 29 | <.globl %n.\n\0>; .even 30 | 8 31 | rts r5 32 | 4: 33 | 1: 34 | clr r3 35 | 1: 36 | cmp r3,symtp 37 | blo 2f 38 | rts r5 39 | 2: 40 | mov symtab(r3),r0 41 | bic $!270,r0 42 | cmp r0,$40 / common block 43 | bne 2f 44 | mov symtab+6(r3),r2 45 | beq 2f 46 | mov $dattab,r1 47 | 3: 48 | cmp r1,r4 49 | bhis 3f 50 | cmp (r1),r3 51 | beq 4f 52 | add $8.,r1 53 | br 3b 54 | 3: 55 | jsr r5,code 56 | <.bss\n.globl %n\n%n: .=.+%d.\n.text\n\0>; .even 57 | r3 58 | r3 59 | r2 60 | br 2f 61 | 4: 62 | jsr r5,code 63 | <.data\n.globl %n\n%n:\n\0>; .even 64 | r3 65 | r3 66 | mov r2,-(sp) 67 | mov r3,-(sp) 68 | mov r1,r3 69 | jsr r5,onedata 70 | mov (sp)+,r3 71 | mov (sp)+,r2 72 | sub r1,r2 73 | bge 9f 74 | jsr r5,error; 22. / data overrun 75 | jsr r5,perror 76 | 9: 77 | jsr r5,code 78 | <.=.+%d.\n.text\n\0>; .even 79 | r2 80 | 2: 81 | add $8,r3 82 | br 1b 83 | 84 | -------------------------------------------------------------------------------- /source/fort/fx/fhd.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / fhd -- data segment header 5 | / 6 | 7 | symsize = 1600. 8 | linsize = 800. 9 | namsize = 1200. 10 | smblsize = 399. 11 | 12 | intcon = 4\<8+1 / type of integer constant 13 | realcon = 4\<8+2 14 | logcon = 2\<8+3 / type of logical constant 15 | log1con = 1\<8+3 16 | int1con = 1\<8+1 17 | int2con = 2\<8+1 18 | dblcon = 10\<8+2 19 | dcplxcon = 20\<8+4 20 | cplxcon = 10\<8+4 21 | 22 | .globl data 23 | .globl ibuf 24 | .globl obuf 25 | .globl tbuf 26 | .globl line 27 | .globl eline 28 | .globl ifno 29 | .globl efno 30 | .globl errp 31 | .globl errb 32 | .globl eerrb 33 | .globl symtab 34 | .globl esymtab 35 | .globl esymp 36 | .globl symtp 37 | .globl namebuf 38 | .globl enamebuf 39 | .globl namep 40 | .globl symbuf 41 | .globl esymbuf 42 | .globl ch 43 | .globl ch1 44 | .globl progt 45 | .globl holquo 46 | .globl nxtaloc 47 | .globl imptab 48 | .globl nerror 49 | .globl temp 50 | .globl functm 51 | .globl edata 52 | .globl dsize 53 | 54 | -------------------------------------------------------------------------------- /source/fort/fx/fx1.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / fx1 -- utility 5 | 6 | .globl lookup 7 | / lookup 8 | / lookup string pointed at by r2 9 | / in table pointed at by arg1 10 | / r0 returns symbol number*2 11 | / r2 is advanced by matched string 12 | / registers used: r0,r2 13 | lookup: 14 | mov r1,-(sp) 15 | clr r0 16 | mov r2,-(sp) 17 | mov (r5)+,r1 18 | 1: 19 | mov (sp),r2 20 | tstb (r1) 21 | beq 1f 22 | 2: 23 | cmpb (r2)+,(r1)+ 24 | bne 2f 25 | tstb (r1) 26 | bne 2b 27 | asl r0 28 | cmp (r5)+,(sp)+ 29 | mov (sp)+,r1 30 | rts r5 31 | 2: 32 | tstb (r1)+ 33 | bne 2b 34 | inc r0 35 | br 1b 36 | 1: 37 | mov (sp)+,r2 38 | mov (sp)+,r1 39 | rts r5 40 | 41 | -------------------------------------------------------------------------------- /source/fort/fx/fx3.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / fx3 -- get integer 5 | 6 | .globl geti 7 | .globl ptemp 8 | 9 | .globl putc 10 | .globl putw 11 | 12 | geti: 13 | mov r1,-(sp) 14 | mov r3,-(sp) 15 | clr r3 16 | mov $symbuf,r0 17 | 1: 18 | movb (r0)+,r1 19 | sub $'0,r1 20 | cmp r1,$9 21 | bhi 1f 22 | mpy $10.,r3 23 | add r1,r3 24 | br 1b 25 | 1: 26 | mov r3,r0 27 | mov (sp)+,r3 28 | mov (sp)+,r1 29 | rts r5 30 | 31 | ptemp: 32 | mov r0,-(sp) 33 | mov r1,-(sp) 34 | mov (r5)+,r0 / character 35 | jsr r5,putc; tbuf 36 | mov *(r5)+,r0 / word 37 | jsr r5,putw; tbuf 38 | mov ifno,r0 39 | jsr r5,putw; tbuf 40 | mov (r5)+,r1 / string 41 | 1: 42 | movb (r1),r0 43 | jsr r5,putc; tbuf 44 | tstb (r1)+ 45 | bne 1b 46 | mov (sp)+,r1 47 | mov (sp)+,r0 48 | rts r5 49 | 50 | -------------------------------------------------------------------------------- /source/fort/fx/fx5.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / fx5 -- declare implicit 5 | 6 | .globl declimpl 7 | .globl getname 8 | 9 | declimpl: 10 | bit $7,symtab(r3) 11 | bne 1f / already declared 12 | jsr r5,getname 13 | movb symbuf,r0 14 | cmp r0,$'a 15 | blo 2f 16 | sub $6,r0 / map 'a -> 'Z+1 17 | 2: 18 | asl r0 19 | bis imptab-[2*'A](r0),symtab(r3) 20 | 1: 21 | bit $70,symtab(r3) / class 22 | bne 1f 23 | bis $10,symtab(r3) / simple 24 | 1: 25 | rts r5 26 | 27 | getname: 28 | mov r3,-(sp) 29 | clr r3 30 | mov $namebuf,r0 31 | 1: 32 | cmp r3,(sp) 33 | bhis 1f 34 | 2: 35 | tstb (r0)+ 36 | bne 2b 37 | add $8,r3 38 | br 1b 39 | 1: 40 | mov $symbuf,r3 41 | 2: 42 | movb (r0)+,(r3)+ 43 | bne 2b 44 | mov (sp)+,r3 45 | rts r5 46 | 47 | -------------------------------------------------------------------------------- /source/fort/fx/fx6.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / fx6 -- teletype 5 | 6 | .globl tput 7 | .globl tdecml 8 | 9 | tdecml: 10 | mov r1,-(sp) 11 | jsr r5,td 12 | mov (sp)+,r1 13 | rts r5 14 | 15 | td: 16 | mov r0,r1 17 | clr r0 18 | dvd $10.,r0 19 | mov r1,-(sp) 20 | tst r0 21 | beq 1f 22 | jsr r5,td 23 | 1: 24 | mov (sp)+,r0 25 | add $'0,r0 26 | 27 | tput: 28 | movb r0,ch+1 29 | mov $1,r0 30 | sys write; ch+1; 1 31 | rts r5 32 | -------------------------------------------------------------------------------- /source/fort/fx/fx7.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / fx7 -- passes advancement 5 | 6 | .globl signon 7 | .globl signoff 8 | 9 | 10 | .globl pass2 11 | .globl pass3 12 | .globl pass4 13 | 14 | signon: 15 | tst (r5)+ 16 | rts r5 17 | 18 | signoff: 19 | mov (r5)+,r0 20 | tst (sp)+ 21 | dec r0 22 | asl r0 23 | jmp *passtab(r0) 24 | 25 | passtab: 26 | pass2 27 | pass3 28 | pass4 29 | 30 | .data 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /source/fort/fx/fxa.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / fxa -- genop -- output a typed operator 5 | 6 | .globl genop 7 | .globl newline 8 | 9 | .globl code 10 | .globl typ 11 | 12 | genop: 13 | mov r1,-(sp) 14 | mov r3,-(sp) 15 | bic $!7,r3 16 | movb typ(r3),r1 17 | mov (sp),r3 18 | clrb r3 19 | swab r3 20 | jsr r5,code 21 | < %c%c%d\0>; .even 22 | r1 23 | r0 24 | r3 25 | mov (sp)+,r3 26 | mov (sp)+,r1 27 | rts r5 28 | 29 | newline: 30 | jsr r5,code 31 | <\n\0>; .even 32 | rts r5 33 | 34 | typ: 35 | 36 | 37 | -------------------------------------------------------------------------------- /source/fort/fx/fxb.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / fxb -- get integer constant or label 5 | 6 | .globl geticon 7 | .globl getlab 8 | 9 | .globl getsym 10 | .globl geti 11 | .globl ptemp 12 | 13 | geticon: 14 | jsr r5,getsym 15 | cmp r0,$2 16 | bne 1f 17 | cmp r3,$intcon 18 | bne 1f 19 | jsr r5,geti 20 | tst (r5)+ 21 | 1: 22 | rts r5 23 | 24 | getlab: 25 | jsr r5,geticon 26 | br 1f 27 | mov r0,temp 28 | jsr r5,ptemp; 'r; temp; line 29 | tst (r5)+ 30 | 1: 31 | rts r5 32 | 33 | -------------------------------------------------------------------------------- /source/fort/fx/fxc.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / fxc -- size of array 5 | 6 | .globl size 7 | .globl nelem 8 | 9 | .globl error 10 | 11 | size: 12 | movb symtab+1(r3),r0 13 | jsr r5,nelem 14 | inc r0 15 | bic $1,r0 / round to 0 mod 2 16 | rts r5 17 | 18 | nelem: 19 | mov r1,-(sp) 20 | mov r0,r1 21 | mov symtab(r3),r0 22 | bic $!70,r0 23 | cmp r0,$20 24 | bne 1f 25 | mov symtab+2(r3),r0 26 | mov (r0)+,-(sp) 27 | 2: 28 | mpy (r0)+,r1 29 | dec (sp) 30 | bgt 2b 31 | tst (sp)+ 32 | 1: 33 | mov r1,r0 34 | mov (sp)+,r1 35 | rts r5 36 | 37 | -------------------------------------------------------------------------------- /source/fort/fx/fxd.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / xd -- tmp file 2 handl 5 | 6 | .globl setln 7 | .globl getln 8 | 9 | .globl tfil2 10 | .globl tfildiag 11 | .globl fopen 12 | .globl getc 13 | .globl getw 14 | .globl xbuf 15 | 16 | setln: 17 | mov $tfil2,r0 18 | jsr r5,fopen; xbuf 19 | bcc 1f 20 | jmp tfildiag 21 | 1: 22 | rts r5 23 | 24 | getln: 25 | jsr r5,getc; xbuf 26 | bcs 3f 27 | mov r0,-(sp) 28 | jsr r5,getw; xbuf 29 | mov r0,efno 30 | jsr r5, getw; xbuf 31 | mov r0,ifno 32 | mov $line,r1 33 | 1: 34 | jsr r5,getc; xbuf 35 | bcs 1f 36 | tst r0 37 | beq 1f 38 | bic $200,r0 39 | movb r0,(r1)+ 40 | br 1b 41 | 1: 42 | clrb (r1)+ 43 | mov (sp)+,r0 44 | tst (r5)+ 45 | rts r5 46 | 3: 47 | mov xbuf,r0 48 | sys close 49 | rts r5 50 | 51 | -------------------------------------------------------------------------------- /source/fort/fx/fxe.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / xe -- temp file junk 5 | 6 | .globl tfildiag 7 | .globl tfil1, tfil2 8 | 9 | tfildiag: 10 | mov $1,r0 11 | sys write; mes1; emes1-mes1 12 | clr r0 13 | sys seek; 0; 2 14 | mov $-1,r0 / failure return 15 | sys exit 16 | 17 | mes1: 18 | 19 | emes1: 20 | tfil1: 21 | 22 | tfil2: 23 | 24 | 25 | -------------------------------------------------------------------------------- /source/fort/fx/fxf.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / fxf -- format statements 5 | 6 | .globl sform 7 | .globl sdata 8 | 9 | .globl ptemp 10 | .globl error 11 | 12 | sform: 13 | cmp progt,$6 / block data 14 | bne 1f 15 | jsr r5,error; 50. 16 | 1: 17 | jsr r5,ptemp; 'f; efno; line 18 | rts r5 19 | 20 | sdata: 21 | jsr r5,ptemp; 'd; efno; line 22 | rts r5 23 | 24 | -------------------------------------------------------------------------------- /source/fort/io/io1.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / io1 -- I/O operators 5 | 6 | 7 | .globl rerr 8 | .globl endio 9 | .globl rio4 10 | .globl rio8 11 | .globl iio2 12 | .globl iio4 13 | .globl lio2 14 | .globl lio1 15 | .globl cio8 16 | .globl cio16 17 | .globl ecvt 18 | .globl fcvt 19 | .globl _ndigit 20 | 21 | endio: 22 | mov (sp)+,r5 23 | rts r5 24 | 25 | cio8: 26 | tst slcnt 27 | bne 2f 28 | inc slcnt 29 | tst -(r4) 30 | br rio4 31 | 2: 32 | clr slcnt 33 | mov ilval,-(sp) 34 | add $4,(sp) 35 | br rio4 36 | 37 | cio16: 38 | tst slcnt 39 | bne 2f 40 | inc slcnt 41 | tst -(r4) 42 | br rio8 43 | 2: 44 | clr slcnt 45 | mov ilval,-(sp) 46 | add $8,(sp) 47 | br rio8 48 | 49 | rio8: 50 | mov $8.\<8+'r,r0 51 | br 1f 52 | 53 | rio4: 54 | mov $4\<8+'r,r0 55 | br 1f 56 | 57 | iio4: 58 | mov $4\<8+'i,r0 59 | br 1f 60 | 61 | iio2: 62 | mov $2\<8+'i,r0 63 | br 1f 64 | 65 | lio2: 66 | mov $2\<8+'l,r0 67 | br 1f 68 | 69 | lio1: 70 | mov $1\<8+'l,r0 71 | 72 | 1: 73 | mov r0,itype 74 | mov (sp)+,ilval 75 | mov (sp)+,r5 76 | tst (r5)+ 77 | rts r5 78 | 79 | -------------------------------------------------------------------------------- /source/fort/io/io5.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / io5 -- more conversions 5 | 6 | /.globl hocv 7 | /.globl qocv 8 | /.globl xocv 9 | /.globl aocv 10 | /.globl locv 11 | / 12 | /.globl fmtchr 13 | /.globl fputcc 14 | /.globl rep 15 | /.globl formp 16 | /.globl spaces 17 | /.globl ilen 18 | /.globl width 19 | /.globl ilval 20 | .globl rerr 21 | 22 | hocv: 23 | jsr r5,fmtchr 24 | tst r0 25 | beq 2f 26 | jsr r5,fputcc 27 | dec rep 28 | bgt hocv 29 | rts r5 30 | 2: 31 | jsr r5,rerr; 111. 32 | sys exit 33 | 34 | qocv: 35 | mov formp,-(sp) 36 | 1: 37 | jsr r5,fmtchr 38 | tst r0 39 | beq 2f 40 | cmp r0,$'" 41 | beq 2f 42 | jsr r5,fputcc 43 | br 1b 44 | 2: 45 | dec rep 46 | ble 1f 47 | mov (sp),formp 48 | br 1b 49 | 1: 50 | tst (sp)+ 51 | rts r5 52 | 53 | xocv: 54 | mov $1,r1 55 | jsr r5,spaces 56 | rts r5 57 | 58 | aocv: 59 | movb ilen,r1 60 | sub width,r1 61 | neg r1 62 | bpl 1f 63 | clr r1 64 | 1: 65 | jsr r5,spaces 66 | mov ilval,r2 67 | mov width,r1 68 | cmpb r1,ilen 69 | ble 2f 70 | movb ilen,r1 71 | 2: 72 | movb (r2)+,r0 73 | jsr r5,fputcc 74 | dec r1 75 | bgt 2b 76 | rts r5 77 | 78 | locv: 79 | mov width,r1 80 | dec r1 81 | jsr r5,spaces 82 | mov $'f,r0 83 | movb ilen,r1 84 | mov ilval,r2 85 | 2: 86 | tstb (r2)+ 87 | bne 1f 88 | dec r1 89 | bgt 2b 90 | br 2f 91 | 1: 92 | mov $'t,r0 93 | 2: 94 | jsr r5,fputcc 95 | rts r5 96 | 97 | -------------------------------------------------------------------------------- /source/fort/io/io7.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / Fortran binary I/O 5 | 6 | .globl iowu 7 | .globl ioru 8 | .globl rewi 9 | .globl enfl 10 | 11 | iowu: 12 | tst (sp)+ 13 | mov (sp)+,r1 / unit number 14 | jsr r5,setio; 42 15 | 1: 16 | jsr r5,getitm 17 | br 1f 18 | movb ilen,r1 19 | mov ilval,r2 20 | 2: 21 | movb (r2)+,r0 22 | jsr r5,fputc 23 | sob r1,2b 24 | br 1b 25 | 1: 26 | jsr r5,fflush 27 | jmp *(r4)+ 28 | 29 | ioru: 30 | tst (sp)+ 31 | mov (sp)+,r1 / unit number 32 | jsr r5,setio; 41 33 | clr nlflg 34 | mov pc,binflg 35 | 1: 36 | jsr r5,getitm 37 | br 1f 38 | movb ilen,r1 39 | mov ilval,r2 40 | 2: 41 | jsr r5,fgetc 42 | movb r0,(r2)+ 43 | sob r1,2b 44 | br 1b 45 | 1: 46 | jmp *(r4)+ 47 | 48 | rewi: 49 | enfl: 50 | tst (sp)+ 51 | mov (sp)+,r1 / unit number 52 | jsr r5,chkunit 53 | clrb utable(r1) 54 | asl r1 55 | mov *btable(r1),r0 56 | cmp r0,$1 57 | bhi 1f 58 | sys seek; 0; 0 59 | jmp *(r4)+ 60 | 1: 61 | sys close 62 | jmp *(r4)+ 63 | -------------------------------------------------------------------------------- /source/fort/io/iox.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / iox -- io variables 5 | 6 | .globl _nocr 7 | .globl utable 8 | .globl btable 9 | .globl ftable 10 | 11 | .globl _end 12 | .globl formp 13 | 14 | bufp: _end 15 | filnam: 16 | ; .even 17 | 18 | .bss 19 | 20 | gflg: .=.+2 21 | formp: .=.+2 22 | rdflg: .=.+2 23 | nflg: .=.+2 24 | unit: .=.+2 25 | buffer: .=.+2 26 | slcnt: .=.+2 27 | itype: .=.+1 28 | ilen: .=.+1 29 | ilval: .=.+2 30 | width: .=.+2 31 | twidth: .=.+2 32 | ndig: .=.+2 33 | pbuf: .=.+10 34 | ppar: .=.+2 35 | llp: .=.+2 36 | llpcnt: .=.+2 37 | itmflg: .=.+2 38 | nspace: .=.+2 39 | gcflg: .=.+2 40 | binflg: .=.+2 41 | 42 | utable: .=.+20. 43 | btable: .=.+40. 44 | ftable: .=.+2. 45 | rep: .=.+2 46 | scale: .=.+2 47 | itmfnd: .=.+2 48 | ngflg: .=.+2 49 | nlflg: .=.+2 50 | _nocr: .=.+2 51 | 52 | -------------------------------------------------------------------------------- /source/fort/rt/r0.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | .globl main 5 | .globl temp 6 | .globl rerr 7 | .globl fptrap 8 | 9 | .comm erret,2 10 | .comm argp,2 11 | 12 | ldfps = 170100^tst 13 | 14 | sys signal; 4; fptrap 15 | ldfps $5400 16 | mov sp,argp 17 | mov $main,r4 18 | jmp *(r4)+ 19 | 20 | rerr: 21 | mov (r5)+,r1 22 | tst erret 23 | beq 1f 24 | jsr pc,erret 25 | 1: 26 | mov $temp,r2 27 | jsr r5,1f 28 | movb $'\n,(r2)+ 29 | sub $mesg,r2 30 | mov r2,0f 31 | mov $2,r0 32 | sys write; mesg; 0:.. 33 | sys exit 34 | 1: 35 | clr r0 36 | div $10.,r0 37 | mov r1,-(sp) 38 | mov r0,r1 39 | beq 1f 40 | jsr r5,1b 41 | 1: 42 | mov (sp)+,r0 43 | add $'0,r0 44 | movb r0,(r2)+ 45 | rts r5 46 | 47 | mesg: 48 | 49 | temp: .=.+16. 50 | 51 | -------------------------------------------------------------------------------- /source/fort/rt/r3.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / r3 -- comparisons 5 | 6 | .globl lif2 7 | .globl lif1 8 | .globl rif4 9 | .globl iif2 10 | .globl iif4 11 | .globl rif8 12 | 13 | lif2: 14 | lif1: 15 | tst (sp)+ 16 | bne 1f 17 | mov (r4),r4 18 | jmp *(r4)+ 19 | 1: 20 | tst (r4)+ 21 | jmp *(r4)+ 22 | 23 | rif8: 24 | setd 25 | tstf (sp)+ 26 | cfcc 27 | br 2f 28 | 29 | iif4: 30 | rif4: 31 | mov (sp)+,r0 32 | mov (sp)+,r1 33 | tst r0 34 | bne 2f 35 | tst r1 36 | cln 37 | br 2f 38 | 39 | iif2: 40 | tst (sp)+ 41 | 2: 42 | bmi 1f 43 | beq 2f 44 | tst (r4)+ 45 | 2: 46 | tst (r4)+ 47 | 1: 48 | mov (r4),r4 49 | jmp *(r4)+ 50 | 51 | -------------------------------------------------------------------------------- /source/fort/rt/r4.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / r4 -- short integer arithmetic 5 | 6 | .globl iad2 7 | .globl isb2 8 | .globl imp2 9 | .globl idv2 10 | .globl i2i4 11 | .globl i1i4 12 | .globl i4i2 13 | .globl i4i1 14 | .globl ing2 15 | .globl rval2 16 | .globl rval1 17 | .globl l2l1 18 | 19 | iad2: 20 | add (sp)+,(sp) 21 | jmp *(r4)+ 22 | 23 | isb2: 24 | sub (sp)+,(sp) 25 | jmp *(r4)+ 26 | 27 | imp2: 28 | mov (sp)+,r1 29 | mul (sp)+,r1 30 | mov r1,-(sp) 31 | jmp *(r4)+ 32 | 33 | idv2: 34 | mov 2(sp),r1 35 | sxt r0 36 | div (sp)+,r0 37 | mov r0,(sp) 38 | jmp *(r4)+ 39 | 40 | i4i2: 41 | i4i1: 42 | tst (sp)+ 43 | jmp *(r4)+ 44 | 45 | i2i4: 46 | i1i4: 47 | tst (sp) 48 | sxt -(sp) 49 | jmp *(r4)+ 50 | 51 | ing2: 52 | neg (sp) 53 | jmp *(r4)+ 54 | 55 | rval2: 56 | mov *(r4)+,-(sp) 57 | jmp *(r4)+ 58 | 59 | rval1: 60 | movb *(r4)+,r0 61 | mov r0,-(sp) 62 | 63 | l2l1: 64 | jmp *(r4)+ 65 | 66 | -------------------------------------------------------------------------------- /source/fort/rt/r5.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / r5 -- long integer arithmetic 5 | 6 | .globl iad4 7 | .globl isb4 8 | .globl imp4 9 | .globl idv4 10 | .globl ing4 11 | .globl rerr 12 | 13 | iad4: 14 | jsr pc,load 15 | addf fr0,fr1 16 | br store 17 | 18 | isb4: 19 | jsr pc,load 20 | subf fr0,fr1 21 | br store 22 | 23 | imp4: 24 | jsr pc,load 25 | mulf fr0,fr1 26 | br store 27 | 28 | idv4: 29 | jsr pc,load 30 | divf fr0,fr1 31 | 32 | store: 33 | movfi fr1,-(sp) 34 | jmp *(r4)+ 35 | 36 | load: 37 | mov (sp)+,r0 38 | setd 39 | setl 40 | movif (sp)+,fr0 41 | movif (sp)+,fr1 42 | jmp (r0) 43 | 44 | ing4: 45 | neg (sp) 46 | neg 2(sp) 47 | sbc (sp) 48 | jmp *(r4)+ 49 | 50 | -------------------------------------------------------------------------------- /source/fort/rt/r8.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / r8 - fortran runtime -- powers of integers 5 | 6 | .globl ipi2 7 | 8 | ipi2: 9 | tst (sp)+ 10 | mov (sp)+,r0 11 | bge 1f 12 | clr (sp) 13 | jmp *(r4)+ 14 | 1: 15 | mov (sp)+,r1 16 | mov r3,-(sp) 17 | mov $1,r3 18 | 1: 19 | tst r0 20 | beq 1f 21 | asr r0 22 | bcc 2f 23 | mpy r1,r3 24 | 2: 25 | mpy r1,r1 26 | br 1b 27 | 1: 28 | mov r3,r1 29 | mov (sp)+,r3 30 | mov r1,-(sp) 31 | jmp *(r4)+ 32 | 33 | -------------------------------------------------------------------------------- /source/fort/rt/r9.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | one = 40200 5 | / r9 -- fortran runtime -- real**integer 6 | 7 | .globl ipi4 8 | .globl rpi4 9 | .globl rpi8 10 | 11 | .globl rerr 12 | 13 | ipi4: 14 | setf 15 | setl 16 | movif 4(sp),fr0 17 | movf fr0,4(sp) 18 | jsr r5,1f 19 | movfi fr1,-(sp) 20 | jmp *(r4)+ 21 | 22 | rpi4: 23 | setf 24 | br 2f 25 | 26 | rpi8: 27 | setd 28 | 2: 29 | jsr r5,1f 30 | movf fr1,-(sp) 31 | jmp *(r4)+ 32 | 33 | 1: 34 | cmp (sp)+,(sp)+ / jsr + msp of i4 35 | mov (sp)+,r0 36 | movf $one,fr1 37 | movf (sp)+,fr0 38 | tst r0 39 | bgt 1f 40 | cfcc 41 | beq 9f 42 | tst r0 43 | beq 3f 44 | divf fr0,fr1 45 | movf fr1,fr0 46 | neg r0 47 | movf $one,fr1 48 | 1: 49 | asr r0 50 | bcc 2f 51 | mulf fr0,fr1 52 | 2: 53 | tst r0 54 | beq 3f 55 | mulf fr0,fr0 56 | br 1b 57 | 3: 58 | jmp (r5) 59 | 60 | 9: 61 | jsr r5, rerr; 17. 62 | -------------------------------------------------------------------------------- /source/fort/rt/ra.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / ra -- fortran runtime -- real ** real 5 | 6 | .globl rpr4 7 | .globl rpr8 8 | 9 | .globl log 10 | .globl exp 11 | .globl rerr 12 | 13 | rpr8: 14 | setd 15 | br 1f 16 | 17 | rpr4: 18 | setf 19 | 20 | 1: 21 | seti 22 | movf (sp)+,fr1 23 | movf (sp)+,fr0 24 | cfcc 25 | beq 3f / 0**x 26 | movf fr1,-(sp) 27 | jsr pc,log 28 | bes error 29 | mulf (sp)+,fr0 30 | jsr pc,exp 31 | bes error 32 | 2: 33 | movf fr0,-(sp) 34 | jmp *(r4)+ 35 | 36 | 3: 37 | tstf r1 38 | cfcc 39 | bgt 2b 40 | 41 | error: 42 | jsr r5,rerr; 17. 43 | 44 | -------------------------------------------------------------------------------- /source/fort/rt/rb.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / rb -- funct/subr stuff 5 | 6 | .globl call 7 | .globl callp 8 | .globl retrn 9 | .globl stsp 10 | 11 | callp: 12 | mov (r4)+,r0 13 | add r3,r0 14 | mov (r0),r0 15 | br 1f 16 | 17 | call: 18 | mov (r4)+,r0 19 | 1: 20 | mov r3,-(sp) 21 | mov (r4)+,r3 22 | mov r4,-(sp) 23 | mov r0,r4 24 | mov (r4)+,-(sp) / lv of funct 25 | jmp *(r4)+ 26 | 27 | retrn: 28 | mov r3,r0 29 | mov (sp)+,r1 / lv of funct 30 | mov (sp)+,r4 31 | mov (sp)+,r3 32 | mov (r0),sp 33 | tst (r4)+ / arg count 34 | mov (r4)+,r0 / return byte count 35 | inc r0 36 | bic $1,r0 37 | add r0,r1 38 | 1: 39 | sub $2,r0 40 | blt 1f 41 | mov -(r1),-(sp) 42 | br 1b 43 | 1: 44 | jmp *(r4)+ 45 | 46 | stsp: 47 | mov sp,*(r4)+ 48 | jmp *(r4)+ 49 | 50 | -------------------------------------------------------------------------------- /source/fort/rt/rd.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / rd -- short list I/O do loop 5 | 6 | .globl slist1 7 | .globl slist2 8 | .globl slist3 9 | 10 | .globl temp 11 | 12 | slist1: 13 | mov (r4)+,r0 14 | mov (r0)+,r2 15 | mov $1,r1 16 | 1: 17 | mpy (r0)+,r1 18 | sob r2,1b 19 | mov $temp,r2 20 | mov r1,(r2)+ 21 | clr (r2)+ 22 | mov (r0)+,(r2)+ 23 | jmp *(r4)+ 24 | 25 | slist2: 26 | mov (r4)+,r0 27 | dec temp 28 | ble 1f 29 | mov r0,r4 30 | 1: 31 | jmp *(r4)+ 32 | 33 | slist3: 34 | mov $temp+2,r0 35 | add (r0)+,(sp) 36 | add (r0),-(r0) 37 | jmp *(r4)+ 38 | 39 | -------------------------------------------------------------------------------- /source/fort/rt/re.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / re -- comparison of 8-byte quantities 5 | 6 | .globl rle8 7 | .globl rlt8 8 | .globl req8 9 | .globl rne8 10 | .globl rge8 11 | .globl rgt8 12 | rlt8: 13 | jsr pc,compar 14 | blt one 15 | br zero 16 | 17 | rle8: 18 | jsr pc,compar 19 | ble one 20 | br zero 21 | 22 | req8: 23 | jsr pc,compar 24 | beq one 25 | br zero 26 | 27 | rne8: 28 | jsr pc,compar 29 | bne one 30 | br zero 31 | 32 | rge8: 33 | jsr pc,compar 34 | bge one 35 | br zero 36 | 37 | rgt8: 38 | jsr pc,compar 39 | bgt one 40 | br zero 41 | 42 | one: 43 | mov $1,-(sp) 44 | jmp *(r4)+ 45 | 46 | zero: 47 | clr -(sp) 48 | jmp *(r4)+ 49 | 50 | compar: 51 | setd 52 | mov (sp)+,r0 53 | movf (sp)+,fr0 54 | cmpf (sp)+,fr0 55 | cfcc 56 | jmp (r0) 57 | 58 | -------------------------------------------------------------------------------- /source/fort/rt/rf.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / rf -- real comparisons 5 | 6 | .globl rlt4 7 | .globl rle4 8 | .globl req4 9 | .globl rne4 10 | .globl rge4 11 | .globl rgt4 12 | 13 | rlt4: 14 | jsr pc,compar 15 | blt one 16 | br zero 17 | 18 | rle4: 19 | jsr pc,compar 20 | ble one 21 | br zero 22 | 23 | req4: 24 | jsr pc,compar 25 | beq one 26 | br zero 27 | 28 | rne4: 29 | jsr pc,compar 30 | bne one 31 | br zero 32 | 33 | rge4: 34 | jsr pc,compar 35 | bge one 36 | br zero 37 | 38 | rgt4: 39 | jsr pc,compar 40 | bgt one 41 | br zero 42 | 43 | one: 44 | mov $1,-(sp) 45 | jmp *(r4)+ 46 | 47 | zero: 48 | clr -(sp) 49 | jmp *(r4)+ 50 | 51 | compar: 52 | mov (sp)+,r0 53 | setf 54 | movf (sp)+,r0 55 | cmpf (sp)+,r0 56 | cfcc 57 | jmp (r0) 58 | 59 | -------------------------------------------------------------------------------- /source/fort/rt/rg.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / rg -- assignments 5 | 6 | .globl gmv1 7 | .globl gmv2 8 | .globl gmv4 9 | .globl gmv8 10 | .globl gmv16 11 | .globl stst 12 | 13 | gmv1: 14 | movb (sp)+,*(r4)+ 15 | jmp *(r4)+ 16 | 17 | gmv2: 18 | stst: 19 | mov (sp)+,*(r4)+ 20 | jmp *(r4)+ 21 | 22 | gmv4: 23 | mov (r4)+,r0 24 | mov (sp)+,(r0)+ 25 | mov (sp)+,(r0)+ 26 | jmp *(r4)+ 27 | 28 | gmv8: 29 | setd 30 | movf (sp)+,fr0 31 | movf fr0,*(r4)+ 32 | jmp *(r4)+ 33 | 34 | gmv16: 35 | setd 36 | mov (r4)+,r0 37 | movf (sp)+,fr0 38 | movf fr0,(r0)+ 39 | movf (sp)+,fr0 40 | movf fr0,(r0)+ 41 | jmp *(r4)+ 42 | 43 | .globl gmv1p 44 | .globl gmv2p 45 | .globl gmv4p 46 | .globl gmv8p 47 | .globl gmv16p 48 | 49 | gmv1p: 50 | mov (r4)+,r0 51 | add r3,r0 52 | movb (sp)+,*(r0)+ 53 | jmp *(r4)+ 54 | 55 | gmv2p: 56 | mov (r4)+,r0 57 | add r3,r0 58 | mov (sp)+,*(r0)+ 59 | jmp *(r4)+ 60 | 61 | gmv4p: 62 | mov (r4)+,r0 63 | add r3,r0 64 | mov (r0),r0 65 | mov (sp)+,(r0)+ 66 | mov (sp)+,(r0)+ 67 | jmp *(r4)+ 68 | 69 | gmv8p: 70 | setd 71 | mov (r4)+,r0 72 | add r3,r0 73 | movf (sp)+,fr0 74 | movf fr0,*(r0)+ 75 | jmp *(r4)+ 76 | 77 | gmv16p: 78 | setd 79 | mov (r4)+,r0 80 | add r3,r0 81 | mov (r0),r0 82 | movf (sp)+,fr0 83 | movf fr0,(r0)+ 84 | movf (sp)+,fr0 85 | movf fr0,(r0)+ 86 | jmp *(r4)+ 87 | 88 | -------------------------------------------------------------------------------- /source/fort/rt/rx.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / rtx -- last routine 5 | 6 | .globl ecore 7 | 8 | .bss 9 | 10 | ecore: 11 | -------------------------------------------------------------------------------- /source/fort/rt1/abs.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / abs & dabs fortran functions 5 | 6 | .globl abs. 7 | .globl dabs. 8 | 9 | .globl retrn 10 | .globl temp 11 | 12 | dabs.: temp 13 | .+2 14 | setd 15 | br 1f 16 | 17 | abs.: temp 18 | .+2 19 | setf 20 | 1: 21 | movf *2(r3),r0 22 | absf r0 23 | movf r0,temp 24 | jmp retrn 25 | -------------------------------------------------------------------------------- /source/fort/rt1/aimag.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / aimag fortran function 5 | 6 | .globl aimag. 7 | 8 | .globl rval8p 9 | .globl retrn 10 | .globl temp 11 | 12 | aimag.: temp 13 | rval8p; 2 14 | .+2 15 | setf 16 | tstf (sp)+ 17 | movf (sp)+,r0 18 | movf r0,temp 19 | jmp retrn 20 | -------------------------------------------------------------------------------- /source/fort/rt1/aint.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / aint fortran function 5 | 6 | .globl aint. 7 | .globl temp 8 | 9 | one = 40200 10 | 11 | .globl retrn 12 | 13 | aint.: temp 14 | .+2 15 | setf 16 | movf *2(r3),r0 17 | modf $one,r0 18 | movf r1,temp 19 | jmp retrn 20 | -------------------------------------------------------------------------------- /source/fort/rt1/alog.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / alog & log fortran functions 5 | 6 | .globl alog. 7 | .globl dlog. 8 | 9 | .globl log 10 | .globl retrn 11 | .globl rerr 12 | .globl temp 13 | 14 | dlog.: temp 15 | .+2 16 | setd 17 | br 1f 18 | 19 | alog.: temp 20 | .+2 21 | setf 22 | 1: 23 | seti 24 | movf *2(r3),r0 25 | jsr pc,log 26 | bes 1f 27 | movf r0,temp 28 | jmp retrn 29 | 30 | 1: 31 | jsr r5,rerr; 1 32 | -------------------------------------------------------------------------------- /source/fort/rt1/alog10.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / alog10 & dlog10 fortran functions 5 | 6 | .globl dlog10. 7 | .globl alog10. 8 | 9 | .globl log 10 | .globl retrn 11 | .globl rerr 12 | .globl temp 13 | 14 | dlog10.:temp 15 | .+2 16 | setd 17 | br 1f 18 | 19 | alog10.:temp 20 | .+2 21 | setf 22 | 1: 23 | movf *2(r3),r0 24 | jsr pc,log 25 | bes 1f 26 | mulf const,r0 27 | movf r0,temp 28 | jmp retrn 29 | 30 | 1: 31 | jsr r5,rerr; 1 32 | 33 | const: 37736;55730;124467;24146 34 | -------------------------------------------------------------------------------- /source/fort/rt1/amax0.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / max0 & amax0 fortran functions 5 | 6 | .globl amax0. 7 | .globl max0. 8 | 9 | .globl retrn 10 | .globl temp 11 | 12 | max0.: temp 13 | .+2 14 | mov pc,r2 15 | br 1f 16 | 17 | amax0.: temp 18 | .+2 19 | clr r2 20 | 1: 21 | setf 22 | setl 23 | mov *2(sp),r0 / arg count 24 | mov r3,r1 25 | tst (r1)+ / argpp 26 | movif *(r1)+,r1 27 | br 2f 28 | 1: 29 | movif *(r1)+,r0 30 | cmpf r0,r1 31 | cfcc 32 | ble 2f 33 | movf r0,r1 34 | 2: 35 | dec r0 36 | bgt 1b 37 | tst r2 38 | bne 1f 39 | movf r1,temp 40 | br 2f 41 | 1: 42 | movfi r1,temp 43 | 2: 44 | jmp retrn 45 | -------------------------------------------------------------------------------- /source/fort/rt1/amax1.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / max1, amax1 & dmax1 fortran functions 5 | 6 | .globl amax1. 7 | .globl dmax1. 8 | .globl max1. 9 | 10 | .globl retrn 11 | .globl temp 12 | 13 | max1.: temp 14 | .+2 15 | setl 16 | setf 17 | mov pc,r2 / integer flag 18 | br 2f 19 | 20 | dmax1.: temp 21 | .+2 22 | setd 23 | br 1f 24 | 25 | amax1.: temp 26 | .+2 27 | setf 28 | 1: 29 | clr r2 / integer flag 30 | 2: 31 | mov *2(sp),r0 / arg count 32 | mov r3,r1 33 | tst (r1)+ / argpp 34 | movf *(r1)+,r1 35 | br 2f 36 | 1: 37 | movf *(r1)+,r0 38 | cmpf r0,r1 39 | cfcc 40 | ble 2f 41 | movf r0,r1 42 | 2: 43 | dec r0 44 | bgt 1b 45 | tst r2 46 | bne 1f 47 | movf r1,temp 48 | br 2f 49 | 1: 50 | movfi r1,temp 51 | 2: 52 | jmp retrn 53 | -------------------------------------------------------------------------------- /source/fort/rt1/amin0.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / min0 & amin0 fortran functions 5 | 6 | .globl amin0. 7 | .globl min0. 8 | 9 | .globl retrn 10 | .globl temp 11 | 12 | min0.: temp 13 | .+2 14 | mov pc,r2 15 | br 1f 16 | 17 | amin0.: temp 18 | .+2 19 | clr r2 20 | 1: 21 | setf 22 | setl 23 | mov *2(sp),r0 / arg count 24 | mov r3,r1 25 | tst (r1)+ / argpp 26 | movif *(r1)+,r1 27 | br 2f 28 | 1: 29 | movif *(r1)+,r0 30 | cmpf r0,r1 31 | cfcc 32 | bge 2f 33 | movf r0,r1 34 | 2: 35 | dec r0 36 | bgt 1b 37 | tst r2 38 | bne 1f 39 | movf r1,temp 40 | br 2f 41 | 1: 42 | movfi r1,temp 43 | 2: 44 | jmp retrn 45 | -------------------------------------------------------------------------------- /source/fort/rt1/amin1.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / min1, amin1 & dmin1 fortran functions 5 | 6 | .globl amin1. 7 | .globl dmin1. 8 | .globl min1. 9 | 10 | .globl retrn 11 | .globl temp 12 | 13 | min1.: temp 14 | .+2 15 | setl 16 | setf 17 | mov pc,r2 18 | br 2f 19 | 20 | dmin1.: temp 21 | .+2 22 | setd 23 | br 1f 24 | 25 | amin1.: temp 26 | .+2 27 | setf 28 | 1: 29 | clr r2 30 | 2: 31 | mov *2(sp),r0 / arg count 32 | mov r3,r1 33 | tst (r1)+ / argpp 34 | movf *(r1)+,r1 35 | br 2f 36 | 1: 37 | movf *(r1)+,r0 38 | cmpf r0,r1 39 | cfcc 40 | bge 2f 41 | movf r0,r1 42 | 2: 43 | dec r0 44 | bgt 1b 45 | tst r2 46 | bne 1f 47 | movf r1,temp 48 | br 2f 49 | 1: 50 | movfi r1,temp 51 | 2: 52 | jmp retrn 53 | -------------------------------------------------------------------------------- /source/fort/rt1/amod.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / amod & dmod fortran functions 5 | 6 | .globl amod. 7 | .globl dmod. 8 | 9 | .globl retrn 10 | one = 40200 11 | .globl temp 12 | .globl rerr 13 | 14 | dmod.: temp 15 | .+2 16 | setd 17 | br 1f 18 | 19 | amod.: temp 20 | .+2 21 | setf 22 | 1: 23 | cmp *2(sp),$2 24 | bne 1f 25 | movf *2(r3),r0 26 | movf r0,r2 27 | movf *4(r3),r1 28 | divf r1,r2 29 | modf $one,r2 30 | mulf r1,r3 31 | subf r3,r0 32 | movf r0,temp 33 | jmp retrn 34 | 35 | 1: 36 | jsr r5,rerr; 2 37 | -------------------------------------------------------------------------------- /source/fort/rt1/atan.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / atan & datan fortran functions 5 | 6 | .globl atan. 7 | .globl datan. 8 | 9 | .globl atan 10 | .globl retrn 11 | .globl temp 12 | 13 | datan.: temp 14 | .+2 15 | setd 16 | br 1f 17 | 18 | atan.: temp 19 | .+2 20 | setf 21 | 1: 22 | movf *2(r3),r0 23 | jsr pc,atan 24 | movf r0,temp 25 | jmp retrn 26 | -------------------------------------------------------------------------------- /source/fort/rt1/atan2.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / atan2 & datan2 fortran functions 5 | 6 | .globl atan2. 7 | .globl datan2. 8 | 9 | .globl retrn 10 | .globl rerr 11 | .globl temp 12 | .globl atan2 13 | 14 | datan2.: temp 15 | .+2 16 | setd 17 | br 1f 18 | 19 | atan2.: temp 20 | .+2 21 | setf 22 | 1: 23 | cmp *2(sp),$2 24 | bne 1f 25 | movf *2(r3),r0 26 | movf *4(r3),r1 27 | jsr pc,atan2 28 | movf r0,temp 29 | jmp retrn 30 | 1: 31 | jsr r5,rerr; 3 32 | -------------------------------------------------------------------------------- /source/fort/rt1/cabs.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / cabs fortran function 5 | 6 | .globl cabs. 7 | .globl dcabs. 8 | 9 | .globl sqrt 10 | .globl retrn 11 | .globl rerr 12 | .globl temp 13 | 14 | dcabs.: temp 15 | .+2 16 | setd 17 | br 1f 18 | 19 | cabs.: temp 20 | .+2 21 | setf 22 | 1: 23 | mov 2(r3),r1 24 | movf (r1)+,r0 25 | movf (r1)+,r1 26 | jsr pc,hypot 27 | bes 1f 28 | movf r0,temp 29 | jmp retrn 30 | 1: 31 | jsr r5,rerr; 4 32 | hypot: 33 | movf fr1,-(sp) 34 | absf fr0 35 | absf fr1 36 | cmpf fr0,fr1 37 | cfcc 38 | bne 1f 39 | movf $one,fr0 40 | br 3f 41 | 1: 42 | blt 2f 43 | movf fr0,-(sp) 44 | movf fr1,fr0 45 | movf (sp)+,fr1 46 | 2: 47 | divf fr1,fr0 48 | mulf fr0,fr0 49 | 3: 50 | addf $one,fr0 51 | jsr pc,sqrt 52 | mulf fr1,fr0 53 | cfcc 54 | movf (sp)+,fr1 55 | rts pc 56 | 57 | one = 40200 58 | -------------------------------------------------------------------------------- /source/fort/rt1/ccos.f: -------------------------------------------------------------------------------- 1 | function ccos(z1) 2 | complex ccos, z1, z2 3 | dimension dummy(2) 4 | equivalence (a,z2,dummy(1)), (b,dummy(2)) 5 | 6 | z2 = z1 7 | c = exp(b) 8 | d = 1.0/c 9 | b = sin(a)*(d-c)/2.0 10 | a = cos(a)*(c+d)/2.0 11 | ccos = z2 12 | return 13 | end 14 | -------------------------------------------------------------------------------- /source/fort/rt1/cexp.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / cexp fortran function 5 | 6 | .globl cexp. 7 | 8 | .globl rval8p 9 | .globl retrn 10 | .globl temp 11 | .globl rerr 12 | .globl exp 13 | .globl sin 14 | .globl cos 15 | 16 | cexp.: temp 17 | rval8p; 2 18 | .+2 19 | setf 20 | movf (sp)+,r0 21 | jsr pc,exp 22 | bes 1f 23 | movf r0,temp 24 | movf (sp),r0 25 | jsr pc,sin 26 | mulf temp,r0 27 | movf r0,temp+4 28 | movf (sp)+,r0 29 | jsr pc,cos 30 | mulf temp,r0 31 | movf r0,temp 32 | jmp retrn 33 | 34 | 1: 35 | jsr r5,rerr; 5. 36 | -------------------------------------------------------------------------------- /source/fort/rt1/clog.f: -------------------------------------------------------------------------------- 1 | function clog(z1) 2 | complex clog, z1, z2 3 | dimension dummy(2) 4 | equivalence (a,z2,dummy(1)), (b,dummy(2)) 5 | 6 | z2 = z1 7 | c = cabs(z2) 8 | b = atan2(b, a) 9 | a = alog(c) 10 | clog = z2 11 | return 12 | end 13 | -------------------------------------------------------------------------------- /source/fort/rt1/cmplx.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / cmplx fortran function 5 | 6 | .globl cmplx. 7 | .globl dcmplx. 8 | 9 | .globl retrn 10 | .globl temp 11 | .globl rerr 12 | 13 | dcmplx.:temp 14 | .+2 15 | setd 16 | br 1f 17 | 18 | cmplx.: temp 19 | .+2 20 | setf 21 | 1: 22 | cmp *2(sp),$2 23 | bne 1f 24 | mov r3,r1 25 | tst (r1)+ 26 | movf *(r1)+,r0 27 | movf *(r1)+,r1 28 | mov $temp,r1 29 | movf r0,(r1)+ 30 | movf r1,(r1)+ 31 | jmp retrn 32 | 33 | 1: 34 | jsr r5,rerr; 6. 35 | -------------------------------------------------------------------------------- /source/fort/rt1/conjg.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / conjg fortran function 5 | 6 | .globl conjg. 7 | 8 | .globl rval8p 9 | .globl retrn 10 | .globl temp 11 | 12 | conjg.: temp 13 | rval8p; 2 14 | .+2 15 | setf 16 | movf (sp)+,r0 17 | movf r0,temp 18 | movf (sp)+,r0 19 | negf r0 20 | movf r0,temp+4 21 | jmp retrn 22 | -------------------------------------------------------------------------------- /source/fort/rt1/cos.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / cos & dcos fortran functions 5 | 6 | .globl cos. 7 | .globl dcos. 8 | 9 | .globl cos 10 | .globl retrn 11 | .globl temp 12 | 13 | dcos.: temp 14 | .+2 15 | setd 16 | br 1f 17 | 18 | cos.: temp 19 | .+2 20 | setf 21 | 1: 22 | movf *2(r3),r0 23 | jsr pc,cos 24 | movf r0,temp 25 | jmp retrn 26 | -------------------------------------------------------------------------------- /source/fort/rt1/csin.f: -------------------------------------------------------------------------------- 1 | function csin(z1) 2 | complex csin, z1, z2 3 | dimension dummy(2) 4 | equivalence (a,z2,dummy(1)), (b,dummy(2)) 5 | 6 | z2 = z1 7 | c = exp(b) 8 | d = 1.0/c 9 | b = cos(a)*(c-d)/2.0 10 | a = sin(a)*(c+d)/2.0 11 | csin = z2 12 | return 13 | end 14 | -------------------------------------------------------------------------------- /source/fort/rt1/csqrt.f: -------------------------------------------------------------------------------- 1 | function csqrt(z1) 2 | complex csqrt, z1, z2 3 | dimension dummy(2) 4 | equivalence (a,z2,dummy(1)), (b,dummy(2)) 5 | 6 | z2 = z1 7 | c = cabs(z2) 8 | c = sqrt(c) 9 | b = atan2(b, a)/2.0 10 | a = c*cos(b) 11 | b = c*sin(b) 12 | csqrt = z2 13 | return 14 | end 15 | -------------------------------------------------------------------------------- /source/fort/rt1/dble.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / dble fortran function 5 | 6 | .globl dble. 7 | 8 | .globl rval4p 9 | .globl lval 10 | .globl r4r8 11 | .globl gas8 12 | .globl retrn 13 | .globl temp 14 | 15 | dble.: temp 16 | lval; temp 17 | rval4p; 2 18 | r4r8 19 | gas8 20 | retrn 21 | -------------------------------------------------------------------------------- /source/fort/rt1/dccos.f: -------------------------------------------------------------------------------- 1 | function dccos(z1) 2 | double complex dccos, z1, z2 3 | double precision dummy(2), a, b, c, d 4 | equivalence (a,z2,dummy(1)), (b,dummy(2)) 5 | 6 | z2 = z1 7 | c = dexp(b) 8 | d = 1.0d0/c 9 | b = dsin(a)*(d-c)/2.0d0 10 | a = dcos(a)*(c+d)/2.0d0 11 | dccos = z2 12 | return 13 | end 14 | -------------------------------------------------------------------------------- /source/fort/rt1/dclog.f: -------------------------------------------------------------------------------- 1 | function dclog(z1) 2 | double complex z1, z2, dclog 3 | double precision a,b,c 4 | double precision dummy(2) 5 | equivalence (a,z2,dummy(1)), (b,dummy(2)) 6 | 7 | z2=z1 8 | c=dcabs(z2) 9 | b=datan2(b,a) 10 | a=dlog(c) 11 | dclog=z2 12 | return 13 | end 14 | -------------------------------------------------------------------------------- /source/fort/rt1/dcsin.f: -------------------------------------------------------------------------------- 1 | function dcsin(z1) 2 | double complex dcsin, z1, z2 3 | double precision dummy(2), a, b, c, d 4 | equivalence (a,z2,dummy(1)), (b,dummy(2)) 5 | 6 | z2 = z1 7 | c = dexp(b) 8 | d = 1.0d0/c 9 | b = dcos(a)*(c-d)/2.0d0 10 | a = dsin(a)*(c+d)/2.0d0 11 | dcsin = z2 12 | return 13 | end 14 | -------------------------------------------------------------------------------- /source/fort/rt1/dcsqrt.f: -------------------------------------------------------------------------------- 1 | function dcsqrt(z1) 2 | double complex dcsqrt, z1, z2 3 | double precision dummy(2), a, b, c 4 | equivalence (a,z2,dummy(1)), (b,dummy(2)) 5 | 6 | z2 = z1 7 | c = dcabs(z2) 8 | c = dsqrt(c) 9 | b = datan2(b, a)/2.0d0 10 | a = c*dcos(b) 11 | b = c*dsin(b) 12 | dcsqrt = z2 13 | return 14 | end 15 | -------------------------------------------------------------------------------- /source/fort/rt1/dim.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / dim fortran function 5 | 6 | .globl dim. 7 | 8 | .globl retrn 9 | .globl temp 10 | .globl rerr 11 | / 12 | dim.: temp 13 | .+2 14 | setf 15 | cmp *2(sp),$2 16 | bne 2f 17 | movf *2(r3),r0 18 | subf *4(r3),r0 19 | cfcc 20 | bge 1f 21 | clrf r0 22 | 1: 23 | movf r0,temp 24 | jmp retrn 25 | 26 | 2: 27 | jsr r5,rerr; 7. 28 | -------------------------------------------------------------------------------- /source/fort/rt1/dimag.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / dimag fortran function 5 | 6 | .globl dimag. 7 | 8 | .globl rval16p 9 | .globl retrn 10 | .globl temp 11 | 12 | dimag.: temp 13 | rval16p; 2 14 | .+2 15 | setd 16 | tstf (sp)+ 17 | movf (sp)+,r0 18 | movf r0,temp 19 | jmp retrn 20 | -------------------------------------------------------------------------------- /source/fort/rt1/exp.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / exp & dexp fortran functions 5 | 6 | .globl exp. 7 | .globl dexp. 8 | 9 | .globl exp 10 | .globl retrn 11 | .globl rerr 12 | .globl temp 13 | 14 | dexp.: temp 15 | .+2 16 | setd 17 | br 1f 18 | 19 | exp.: temp 20 | .+2 21 | setf 22 | 1: 23 | seti 24 | movf *2(r3),r0 25 | jsr pc,exp 26 | bes 1f 27 | movf r0,temp 28 | jmp retrn 29 | 30 | 1: 31 | jsr r5,rerr; 8. 32 | -------------------------------------------------------------------------------- /source/fort/rt1/float.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / float fortran function 5 | 6 | .globl float. 7 | 8 | .globl rval4p 9 | .globl lval 10 | .globl gas4 11 | .globl i4r4 12 | .globl retrn 13 | .globl temp 14 | 15 | float.: temp 16 | lval; temp 17 | rval4p; 2 18 | i4r4 19 | gas4 20 | retrn 21 | -------------------------------------------------------------------------------- /source/fort/rt1/iabs.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / iabs fortran function 5 | 6 | .globl iabs. 7 | 8 | .globl retrn 9 | .globl temp 10 | 11 | iabs.: temp 12 | .+2 13 | setl 14 | setd 15 | movif *2(r3),r0 16 | absf r0 17 | movfi r0,temp 18 | jmp retrn 19 | -------------------------------------------------------------------------------- /source/fort/rt1/idim.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / idim fortran function 5 | 6 | .globl idim. 7 | 8 | .globl retrn 9 | .globl rerr 10 | .globl temp 11 | 12 | idim.: temp 13 | .+2 14 | setd 15 | setl 16 | cmp *2(sp),$2 17 | bne 2f 18 | movif *2(r3),r0 19 | movif *4(r3),r1 20 | subf r1,r0 21 | cfcc 22 | bge 1f 23 | clrf r0 24 | 1: 25 | movfi r0,temp 26 | jmp retrn 27 | 28 | 2: 29 | jsr r5,rerr; 9. 30 | -------------------------------------------------------------------------------- /source/fort/rt1/idint.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / idint fortran function 5 | 6 | .globl idint. 7 | 8 | .globl retrn 9 | .globl temp 10 | 11 | idint.: temp 12 | .+2 13 | setd 14 | setl 15 | movf *2(r3),r0 16 | movfi r0,temp 17 | jmp retrn 18 | -------------------------------------------------------------------------------- /source/fort/rt1/ierr.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / catch runtime errors: 5 | / if (ierror(errno)) goto place 6 | / on call, returns 0 7 | / on occurrence of error, returns non-zero 8 | 9 | .globl ierror. 10 | .globl erret 11 | 12 | .globl rerr 13 | .globl retrn 14 | 15 | ierror.:zero 16 | .+2 17 | mov 2(r3),r0 18 | mov 2(r0),r1 19 | mov $errbuf,r0 20 | 1: 21 | cmp r0,cerrp 22 | blo 2f 23 | cmp cerrp,$eerbuf 24 | blo 3f 25 | jsr r5,rerr; 120. 26 | 3: 27 | add $8,cerrp 28 | br 1f 29 | 2: 30 | cmp r1,(r0) 31 | beq 1f 32 | add $8,r0 33 | br 1b 34 | 1: 35 | mov r1,(r0)+ 36 | mov r3,(r0)+ 37 | mov 2(sp),(r0)+ 38 | mov 4(sp),(r0)+ 39 | jmp retrn 40 | 41 | .data 42 | erret: 43 | jmp 9f 44 | .text 45 | 9: 46 | mov $errbuf,r0 47 | cmp (r0),r1 48 | beq 1f 49 | add $8,r0 50 | cmp r0,cerrp 51 | blo 1b 52 | rts pc 53 | 1: 54 | add $8,r0 55 | mov -(r0),-(sp) 56 | mov -(r0),-(sp) 57 | mov $one,-(sp) 58 | mov -(r0),r3 59 | jmp retrn 60 | 61 | .data 62 | one: 77777; 177777 63 | zero: 0; 0 64 | 65 | cerrp: errbuf 66 | 67 | .bss 68 | errbuf: .=.+50 69 | eerbuf: 70 | -------------------------------------------------------------------------------- /source/fort/rt1/ifix.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / ifix & int fortran functions 5 | 6 | .globl ifix. 7 | .globl int. 8 | 9 | .globl lval 10 | .globl r4i4 11 | .globl gas4 12 | .globl rval4p 13 | .globl retrn 14 | .globl temp 15 | 16 | int.: 17 | ifix.: temp 18 | lval; temp 19 | rval4p; 2 20 | r4i4 21 | gas4 22 | retrn 23 | -------------------------------------------------------------------------------- /source/fort/rt1/isign.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / isign fortran function 5 | 6 | .globl isign. 7 | 8 | .globl retrn 9 | .globl rerr 10 | .globl temp 11 | 12 | isign.: temp 13 | .+2 14 | setd 15 | setl 16 | cmp *2(sp),$2 17 | bne 2f 18 | movif *2(r3),r0 19 | absf r0 20 | movif *4(r3),r1 21 | cfcc 22 | bge 1f 23 | negf r0 24 | 1: 25 | movfi r0,temp 26 | jmp retrn 27 | 28 | 2: 29 | jsr r5,rerr; 10. 30 | -------------------------------------------------------------------------------- /source/fort/rt1/mod.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / mod fortran function 5 | 6 | .globl mod. 7 | 8 | .globl retrn 9 | .globl temp 10 | one = 40200 11 | .globl rerr 12 | 13 | mod.: temp 14 | .+2 15 | setd 16 | setl 17 | cmp *2(sp),$2 18 | bne 1f 19 | movif *2(r3),r0 20 | movf r0,r2 21 | movif *4(r3),r1 22 | divf r1,r2 23 | modf $one,r2 24 | mulf r1,r3 25 | subf r3,r0 26 | movfi r0,temp 27 | jmp retrn 28 | 29 | 1: 30 | jsr r5,rerr; 11. 31 | -------------------------------------------------------------------------------- /source/fort/rt1/real.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / real & dreal fortran function 5 | 6 | .globl real. 7 | .globl dreal. 8 | 9 | .globl retrn 10 | .globl temp 11 | 12 | dreal.: temp 13 | .+2 14 | setd 15 | br 1f 16 | 17 | real.: temp 18 | .+2 19 | setf 20 | 1: 21 | movf *2(r3),r0 22 | movf r0,temp 23 | jmp retrn 24 | -------------------------------------------------------------------------------- /source/fort/rt1/sign.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / sign & dsign fortran functions 5 | 6 | .globl sign. 7 | .globl dsign. 8 | 9 | .globl retrn 10 | .globl temp 11 | .globl rerr 12 | 13 | dsign.: temp 14 | .+2 15 | setd 16 | br 1f 17 | 18 | sign.: temp 19 | .+2 20 | setf 21 | 1: 22 | cmp *2(sp),$2 23 | bne 2f 24 | movf *2(r3),r0 25 | absf r0 26 | tstf *4(r3) 27 | cfcc 28 | bge 1f 29 | negf r0 30 | 1: 31 | movf r0,temp 32 | jmp retrn 33 | 34 | 2: 35 | jsr r5,rerr; 12. 36 | -------------------------------------------------------------------------------- /source/fort/rt1/sin.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / sin & dsin fortran functions 5 | 6 | .globl sin. 7 | .globl dsin. 8 | 9 | .globl sin 10 | .globl retrn 11 | .globl temp 12 | 13 | dsin.: temp 14 | .+2 15 | setd 16 | br 1f 17 | 18 | sin.: temp 19 | .+2 20 | setf 21 | 1: 22 | movf *2(r3),r0 23 | jsr pc,sin 24 | movf r0,temp 25 | jmp retrn 26 | -------------------------------------------------------------------------------- /source/fort/rt1/sngl.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / sngl fortran function 5 | 6 | .globl sngl. 7 | 8 | .globl rval8p 9 | .globl lval 10 | .globl r8r4 11 | .globl gas4 12 | .globl retrn 13 | .globl temp 14 | 15 | sngl.: temp 16 | lval; temp 17 | rval8p; 2 18 | r8r4 19 | gas4 20 | retrn 21 | -------------------------------------------------------------------------------- /source/fort/rt1/sqrt.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / sqrt & dsqrt fortran functions 5 | 6 | .globl sqrt. 7 | .globl dsqrt. 8 | 9 | .globl sqrt 10 | .globl retrn 11 | .globl rerr 12 | .globl temp 13 | 14 | dsqrt.: temp 15 | .+2 16 | setd 17 | br 1f 18 | 19 | sqrt.: temp 20 | .+2 21 | setf 22 | 1: 23 | movf *2(r3),r0 24 | jsr pc,sqrt 25 | bes 1f 26 | movf r0,temp 27 | jmp retrn 28 | 1: 29 | jsr r5,rerr; 13. 30 | -------------------------------------------------------------------------------- /source/fort/rt1/tanh.f: -------------------------------------------------------------------------------- 1 | function tanh(a) 2 | 3 | b = exp(a) 4 | c = 1.0/b 5 | tanh = (b-c)/(b+c) 6 | return 7 | end 8 | -------------------------------------------------------------------------------- /source/fort/rt2/ctime.s: -------------------------------------------------------------------------------- 1 | .globl ctime., retrn, temp 2 | ctime.: temp 3 | .+2 4 | sys time 5 | clr temp 6 | mov r0,temp+2 7 | setd 8 | setl 9 | movif temp,fr0 10 | mulf $44200,fr0 11 | mov r1,temp+2 12 | movif temp,fr1 13 | addf fr1,fr0 14 | movf fr0,temp 15 | jmp retrn 16 | -------------------------------------------------------------------------------- /source/fort/rt2/getarg.s: -------------------------------------------------------------------------------- 1 | / call getarg(n, array [, nword] ) 2 | / 3 | / fill in the array with the n-th argument to the routine. 4 | / array is integer. 5 | / n counts from 1 for the file name (first) arg 6 | / if nword is specifies it gives the max number 7 | / of words to fill in 8 | / If no nword is given the array ends with at least one blank. 9 | / if nword is given the array is blank-padded to that length. 10 | 11 | / iargc(dummy) returns the number of arguments 12 | / (1-origin) 13 | 14 | .globl getarg., iargc. 15 | .globl retrn, temp 16 | .comm argp,2 17 | 18 | getarg.: 19 | temp 20 | .+2 21 | mov $512.,r2 22 | cmp *2(sp),$3 23 | blt 1f 24 | mov 6(r3),r2 25 | mov 2(r2),r2 26 | asl r2 27 | asl r2 28 | 1: 29 | mov 4(r3),r4 30 | mov 2(r3),r1 31 | mov 2(r1),r1 32 | mov argp,r0 33 | cmp r1,(r0) 34 | bgt 1f 35 | asl r1 36 | add r0,r1 37 | mov (r1),r1 38 | 2: 39 | tst r2 40 | ble 1f 41 | movb (r1)+,(r4)+ 42 | beq 2f 43 | dec r2 44 | br 2b 45 | 2: 46 | dec r4 47 | 1: 48 | movb $' ,(r4)+ 49 | dec r2 50 | bit $3,r2 51 | bne 1b 52 | cmp r2,$256. 53 | bge 1f 54 | tst r2 55 | bgt 1b 56 | 1: 57 | jmp retrn 58 | 59 | iargc.: 60 | temp 61 | .+2 62 | clr temp 63 | mov *argp,temp+2 64 | jmp retrn 65 | -------------------------------------------------------------------------------- /source/fort/rt2/nice.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / fortran nice subroutine 5 | 6 | .globl nice. 7 | .globl retrn, temp 8 | 9 | nice.: 10 | temp 11 | .+2 12 | mov $16.,r0 13 | tst *2(sp) 14 | beq 1f 15 | mov 2(r3),r0 16 | mov 2(r0),r0 17 | 1: 18 | sys nice 19 | jmp retrn 20 | 21 | -------------------------------------------------------------------------------- /source/fort/rt2/openrw.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / openr, openw-- 5 | / 6 | / call open(r|w) (string, iunit) 7 | / or, 8 | / call open(r|w) (argno, iunit) 9 | / where argno is an argument number (0 is command name) 10 | 11 | .globl openr. 12 | .globl openw. 13 | 14 | .globl utable 15 | .globl btable 16 | .globl ftable 17 | .globl getbuf 18 | .globl fopen 19 | .globl fcreat 20 | 21 | openr.: temp 22 | .+2 23 | mov pc,-(sp) 24 | br 1f 25 | 26 | openw.: temp 27 | .+2 28 | clr -(sp) 29 | 1: 30 | mov 4(r3),r1 31 | mov 2(r1),r1 32 | jsr r5,chkunit 33 | tstb utable(r1) 34 | beq 1f 35 | jsr r5,rerr; 101. 36 | sys exit 37 | 1: 38 | jsr r5,getbuf 39 | mov 2(r3),r0 40 | mov 2(r0),r0 41 | cmp r0,$32. 42 | bhi 1f 43 | cmp r0,*argp 44 | bhi err 45 | asl r0 46 | add argp,r0 47 | br 2f 48 | 1: 49 | tst (sp)+ 50 | beq 1f 51 | movb $1,utable(r1) 52 | -------------------------------------------------------------------------------- /source/fort/rt2/rand.s: -------------------------------------------------------------------------------- 1 | / fortran random number generator. 2 | / either single or double prec. 3 | 4 | .globl rand., srand. 5 | .globl retrn 6 | 7 | srand.: 8 | value 9 | .+2 10 | mov *2(r3),seed1 11 | inc first 12 | jmp retrn 13 | 14 | rand.: 15 | value 16 | .+2 17 | tst first 18 | bne 1f 19 | sys time 20 | mov r1,seed1 21 | inc first 22 | 1: 23 | mov seed1,r1 24 | jsr pc,ran 25 | mov r1,seed1 26 | seti 27 | setd 28 | movif r0,fr0 29 | divf $44000,fr0 30 | movf fr0,value 31 | jmp retrn 32 | 33 | ran: 34 | mpy $13077.,r1 35 | add $6925.,r1 36 | mov r1,r0 37 | bic $100000,r0 38 | rts pc 39 | 40 | .bss 41 | first: .=.+2 42 | seed1: .=.+2 43 | value: .=.+8 44 | -------------------------------------------------------------------------------- /source/fort/rt2/rio.s: -------------------------------------------------------------------------------- 1 | / 2 | / 3 | 4 | / fortran random I/O 5 | 6 | .globl rread. 7 | .globl rwrite. 8 | 9 | .globl temp 10 | .globl retrn 11 | .globl rerr 12 | 13 | rread.: temp 14 | .+2 15 | mov 2(r3),r0 16 | mov 2(r0),0f 17 | mov rfin,r0 18 | bne 1f 19 | sys open; rf; 0 20 | bes 9f 21 | mov r0,rfin 22 | 1: 23 | sys seek; 0:..; 0 24 | mov 4(r3),0f 25 | mov 6(r3),r0 26 | mov 2(r0),0f+2 27 | mov rfin,r0 28 | sys read; 0:..; 0 29 | jmp retrn 30 | 31 | rwrite.:temp 32 | .+2 33 | mov 2(r3),r0 34 | mov 2(r0),0f 35 | mov rfout,r0 36 | bne 1f 37 | sys creat; rf; 17 38 | bes 9f 39 | mov r0,rfout 40 | 1: 41 | sys seek; 0:..; 0 42 | mov 4(r3),0f 43 | mov 6(r3),r0 44 | mov 2(r0),0f+2 45 | mov rfout,r0 46 | sys write; 0:..; .. 47 | jmp retrn 48 | 49 | 9: 50 | jsr r5,rerr; 456. 51 | sys exit 52 | 53 | rf: 54 | 55 | .even 56 | rfin: .=.+2 57 | rfout: .=.+2 58 | 59 | -------------------------------------------------------------------------------- /source/fort/rt2/setfil.s: -------------------------------------------------------------------------------- 1 | / Fortran library-- setfil 2 | 3 | / call setfil(unit, 5hname ) 4 | 5 | .globl setfil. 6 | 7 | .globl getbuf 8 | .globl chkunit 9 | .globl retrn 10 | .globl utable 11 | .globl temp 12 | .globl rerr 13 | 14 | setfil.: 15 | temp 16 | .+2 17 | mov 2(r3),r1 18 | mov 2(r1),r1 19 | jsr r5,chkunit 20 | tstb utable(r1) 21 | beq 1f 22 | jsr r5,rerr; 112. 23 | 1: 24 | jsr r5,getbuf 25 | movb $-1,utable(r1) 26 | mov 4(r3),r0 27 | mov r2,r1 28 | 1: 29 | movb (r0)+,(r1) 30 | beq 1f 31 | cmpb $' ,(r1)+ 32 | bne 1b 33 | clrb -(r1) 34 | 1: 35 | jmp retrn 36 | -------------------------------------------------------------------------------- /source/fort/sum.s: -------------------------------------------------------------------------------- 1 | / example of UNIX fortran 2 | / calling interface to machine code 3 | / this example is a function that 4 | / returns the single precision 5 | / sum of all of its single precision arguments. 6 | / for example: 7 | / f = sum(1.,2.,3.) 8 | / sets f to 6. 9 | 10 | .globl sum. / defination of entry 11 | .globl retrn / reference of return 12 | 13 | sum.: / entry point 14 | value / location of return value 15 | .+2 / pointer to execution code 16 | setf / no d/f i/l modes guaranteed 17 | mov *2(sp),r0 / arg count 18 | mov r3,r1 / r3 points to arg list 19 | tst (r1)+ / zeroth arg is old r3 20 | 21 | clrf fr0 / start of actual function 22 | 1: 23 | addf *(r1)+,fr0 / add in each argument 24 | sob r0,1b / for each argument 25 | 26 | movf fr0,value / make returned value available 27 | jmp retrn / actual return 28 | 29 | .bss 30 | value: .=.+4 / space for return value 31 | 32 | / synopsis: 33 | / 1. save registers r3, sp 34 | / 2. arg list (pointers to values) 35 | / begins at 2(r3) 36 | / 3. entry name is name of function 37 | / followed by "." 38 | / 4. first word after entry point is 39 | / location of return value. this is 40 | / true for both functions and subroutines 41 | / 5. second word after entry point is 42 | / pointer to pdp-11 code body 43 | / 6. return is expedited by a jump to 44 | / the globl routine "retrn" 45 | -------------------------------------------------------------------------------- /source/iolib/calloc.c: -------------------------------------------------------------------------------- 1 | calloc(n, s) 2 | { 3 | return(alloc(n*s)); 4 | } 5 | -------------------------------------------------------------------------------- /source/iolib/cclose.c: -------------------------------------------------------------------------------- 1 | # include "ciodec.c" 2 | cclose (fn) 3 | int fn; 4 | { 5 | struct fileps *fp; 6 | extern char *IEH3olbf[10]; 7 | if (fn < 0 || fn > 20) return; 8 | fp = &IEH3fpts[fn]; 9 | if (fp->nchars > 0 || fp->wrflag == 3) 10 | switch (fp->wrflag) 11 | { 12 | case 3: seek(fn,0,2); 13 | case 2: write (fn, fp->buff, fp->nchars); 14 | break; 15 | case 1: seek(fn, -(fp->nchars), 1); 16 | } 17 | fp -> nchars = fp->eoferr = 0; 18 | fp -> wrflag = 0; 19 | if ( IEH3olbf[fn] != 0 && fp->bsize >4) 20 | free(IEH3olbf[fn]); 21 | IEH3olbf[fn] = 0; 22 | close (fn); 23 | } 24 | char *IEH3olbf[10] {0,0,0,0,0,0,0,0,0,0}; 25 | -------------------------------------------------------------------------------- /source/iolib/ceof.c: -------------------------------------------------------------------------------- 1 | # include "ciodec.c" 2 | ceof (fn) 3 | int fn; 4 | { 5 | struct fileps *fp; 6 | fp = &IEH3fpts[fn]; 7 | if (fp->wrflag > 0 && fp->eoferr == 2) 8 | return(1); 9 | else return(0); 10 | } 11 | cerr (fn) 12 | int fn; 13 | { 14 | struct fileps *fp; 15 | fp = &IEH3fpts[fn]; 16 | if (fp->eoferr == 0) fp->eoferr = 1; 17 | if (fp->wrflag > 0 && fp->eoferr == 3) 18 | return(1); 19 | else return(0); 20 | } 21 | -------------------------------------------------------------------------------- /source/iolib/cerror.c: -------------------------------------------------------------------------------- 1 | IEH3err (message, a, b, c, d, e) 2 | char message[]; 3 | { 4 | extern int cgoof; 5 | printf("ERROR "); 6 | printf(message, a, b, c, d, e); 7 | cputc('\n'); 8 | cexit(cgoof); 9 | } 10 | cgoof 127; 11 | -------------------------------------------------------------------------------- /source/iolib/cexit.c: -------------------------------------------------------------------------------- 1 | cexit (rcode) 2 | { 3 | /* closes all files and exits */ 4 | int i; 5 | for (i = 0; i < 10; i++) 6 | cclose(i); 7 | exit(rcode); /* rcode courtesy of sny */ 8 | } 9 | -------------------------------------------------------------------------------- /source/iolib/cflush.c: -------------------------------------------------------------------------------- 1 | # include "ciodec.c" 2 | cflush (fn) 3 | int fn; 4 | { 5 | struct fileps *fp; 6 | if (nargs() != 1) 7 | IEHzap("cflush"); 8 | if (fn < 0 || fn >15) return; 9 | fp = &IEH3fpts[fn]; 10 | if (fp->nchars > 0 && fp->wrflag >= 2) 11 | { 12 | write (fn, fp->buff,fp->nchars); 13 | fp->bptr = fp->buff; 14 | fp -> nchars = fp->eoferr = 0; 15 | } 16 | if (fp->wrflag == 1) 17 | seek(fn, -(fp->nchars),1); 18 | return; 19 | } 20 | -------------------------------------------------------------------------------- /source/iolib/cfree.c: -------------------------------------------------------------------------------- 1 | cfree (ptr) 2 | { 3 | free(ptr); 4 | } 5 | -------------------------------------------------------------------------------- /source/iolib/cgetc.c: -------------------------------------------------------------------------------- 1 | # include "ciodec.c" 2 | char cgetc(fn) 3 | { 4 | struct fileps *fp; 5 | if (nargs() != 1) 6 | IEHzap("cgetc "); 7 | if (fn <0 || fn >15) 8 | IEH3err("cgetc: %d illegal file number",fn); 9 | fp = &IEH3fpts[fn]; 10 | if (fp == 0 || fp->wrflag > 1) 11 | IEH3err("cgetc: %d not open to read",fn); 12 | if (fp->wrflag == 0) 13 | /* file not opened with fopen: try making a buffer */ 14 | IEH3mbuf (fn, 0); 15 | if (fp->eoferr > 1) 16 | return ('\0'); 17 | if (fp->nchars == 0) 18 | switch (fp->nchars = read(fn, fp->bptr=fp->buff, fp->bsize)) 19 | { 20 | case -1: /* error */ 21 | if (fp->eoferr == 0) 22 | IEH3err("cgetc: error on %d",fn); 23 | fp->eoferr = 3; 24 | return ('\0'); 25 | case 0: fp->eoferr = 2; 26 | return ('\0'); 27 | } 28 | fp->nchars--; 29 | return (*(fp->bptr++)); 30 | } 31 | cin 0; 32 | -------------------------------------------------------------------------------- /source/iolib/ciodec.c: -------------------------------------------------------------------------------- 1 | struct fileps 2 | { 3 | char *buff, *bptr; 4 | int nchars, bsize; 5 | char eoferr, wrflag; 6 | }; 7 | extern struct fileps IEH3fpts[10]; 8 | -------------------------------------------------------------------------------- /source/iolib/clenf.c: -------------------------------------------------------------------------------- 1 | _clenf (s) /* counts length of string */ 2 | char *s; 3 | { 4 | int n; 5 | for (n=0; *s++ != '\0'; n++); 6 | return (n);} 7 | -------------------------------------------------------------------------------- /source/iolib/copen.c: -------------------------------------------------------------------------------- 1 | copen (filename, type) 2 | char *filename; 3 | int type; 4 | { 5 | int fn; 6 | switch (type) 7 | { 8 | case 'r': type = 0; 9 | case 0: fn = open(filename,0); 10 | break; 11 | case 'a': type = 2; 12 | case 2: if ((fn=open(filename,1))>=0) 13 | break; /* courtesy of sny */ 14 | /* append defaults to write if file missing */ 15 | case 'w': type = 1; 16 | case 1: fn = creat(filename,0666); 17 | break; 18 | default: IEH3err("copen: bad file %s",filename); 19 | } 20 | if (fn >= 0) 21 | IEH3mbuf(fn,type); 22 | return(fn); 23 | } 24 | -------------------------------------------------------------------------------- /source/iolib/cputc.c: -------------------------------------------------------------------------------- 1 | # include "ciodec.c" 2 | char cputc(ch, fn) 3 | { 4 | struct fileps *fp; 5 | if (nargs() != 2) 6 | IEHzap("cputc "); 7 | if (fn<0 || fn>20) return(ch); 8 | fp = &IEH3fpts[fn]; 9 | if (fp->wrflag == 1) 10 | IEH3err("cputc: %d not open",fn); 11 | if (fp->wrflag == 0) 12 | IEH3mbuf(fn,1); 13 | *(fp->bptr++) = ch; 14 | if (++(fp->nchars) < fp->bsize) 15 | return(ch); 16 | if (fp->wrflag == 3) /* append, seek to end */ 17 | { 18 | seek(fn, 0, 2); 19 | fp->wrflag = 2; /* now just write from here on */ 20 | } 21 | if ( write(fn, fp->bptr=fp->buff, fp->nchars) < 0) 22 | { 23 | if (fp->eoferr == 0) 24 | IEH3err("cputc: writing %d",fn); 25 | fp->eoferr = 3; 26 | } 27 | fp->nchars = 0; 28 | return (ch); 29 | } 30 | cout 1; 31 | -------------------------------------------------------------------------------- /source/iolib/cwrd.c: -------------------------------------------------------------------------------- 1 | cwrite (buff, buffp1, len, fn) 2 | char *buff, *buffp1; int len, fn; 3 | { 4 | int unit, nwr; 5 | unit = buffp1-buff; 6 | len =* unit; 7 | nwr = write (fn, buff, len); 8 | return (nwr < 0 ? -1 : nwr/unit); 9 | } 10 | cread (buff, buffp1, len, fn) 11 | char *buff, *buffp1; int len, fn; 12 | { 13 | int unit, nrd; 14 | unit = buffp1 - buff; 15 | len =* unit; 16 | nrd = read(fn, buff, len); 17 | return (nrd < 0 ? -1 : nrd/unit); 18 | } 19 | -------------------------------------------------------------------------------- /source/iolib/dummy.s: -------------------------------------------------------------------------------- 1 | .globl ndigit 2 | .globl _ieh305i 3 | ndigit: .=.+2 4 | _ieh305i: .=.+2 5 | -------------------------------------------------------------------------------- /source/iolib/getch.c: -------------------------------------------------------------------------------- 1 | getchar() 2 | { 3 | extern cin; 4 | return (cgetc(cin)); 5 | } 6 | -------------------------------------------------------------------------------- /source/iolib/gets.c: -------------------------------------------------------------------------------- 1 | gets (s) 2 | char *s; 3 | { /* gets (s) - read a string with cgetc and store in s */ 4 | char *p; 5 | extern int cin; 6 | if (nargs () == 2) 7 | IEHzap("gets "); 8 | p=s; 9 | while ((*s = cgetc(cin)) != '\n' && *s != '\0') s++; 10 | if (*p == '\0') return (0); 11 | *s = '\0'; 12 | return (p); 13 | } 14 | -------------------------------------------------------------------------------- /source/iolib/getvec.c: -------------------------------------------------------------------------------- 1 | getvec (n) 2 | { 3 | return (alloc(n)); 4 | } 5 | -------------------------------------------------------------------------------- /source/iolib/iehzap.c: -------------------------------------------------------------------------------- 1 | IEHzap(s) 2 | { 3 | write(2,s,6); 4 | write(2,": argument count wrong\n",23); 5 | write(2,"That's all, folks\n",18); 6 | exit(); 7 | } 8 | -------------------------------------------------------------------------------- /source/iolib/makbuf.c: -------------------------------------------------------------------------------- 1 | # include "ciodec.c" 2 | IEH3bsz 512; 3 | IEH3mbuf (fn, type) 4 | int fn, type; 5 | { 6 | struct fileps *fp; 7 | extern char *IEH3olbf[], *alloc(); 8 | extern int IEHfbak[10]; 9 | int bx[19], size, bloc; 10 | fp = &IEH3fpts[fn]; 11 | fp->eoferr = fp->nchars = 0; 12 | fp->wrflag = type+1; 13 | /* decide whether to buffer or not */ 14 | if (ttyn(fn) != 'x') 15 | size = 1; 16 | else 17 | if (fstat(fn,bx) > 0 && bx[0] == 40 && type == 0) 18 | size = 1; 19 | else 20 | size = IEH3bsz; 21 | for (fp->buff = 0; size >10 && fp->buff == 0; size =/ 4) 22 | if ((bloc = alloc(size+100)) != -1) 23 | { 24 | IEH3olbf[fn] = bloc; 25 | fp->buff = fp->bptr =bloc + 100; 26 | fp->bsize = size; 27 | break; 28 | } 29 | if (fp->buff == 0) 30 | { 31 | fp->buff = fp->bptr = &IEHfbak[fn]; 32 | fp->bsize = size>1 ? 2 : 1; 33 | } 34 | } 35 | struct fileps IEH3fpts [10]; 36 | int IEHfbak[10]; 37 | -------------------------------------------------------------------------------- /source/iolib/maktab.c: -------------------------------------------------------------------------------- 1 | char IEH3endm[128] {0}; 2 | IEH3mtab (formatp) 3 | char **formatp; 4 | { 5 | /* make up special table of string ending characters */ 6 | int i, normal; 7 | char ch; 8 | /* normally all characters end string except those listed */ 9 | normal = 1; 10 | if (**formatp == '^') 11 | {normal = 0; (*formatp)++;} 12 | for (i= 0; i < 128; i++) 13 | IEH3endm[i] = normal; 14 | while ((ch = *((*formatp)++)) != ']') 15 | IEH3endm[ch] = !IEH3endm[ch]; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /source/iolib/nexch.c: -------------------------------------------------------------------------------- 1 | IEH3nxch () 2 | /* returns next character which is not IEH3spce */ 3 | { 4 | char ch, cgetc(); 5 | extern int IEH3sfil; 6 | while ((ch = cgetc(IEH3sfil)) > 0 && IEH3spce(ch)); 7 | if (ch > 0) 8 | return (ch); 9 | return (-1); 10 | } 11 | -------------------------------------------------------------------------------- /source/iolib/nodig.c: -------------------------------------------------------------------------------- 1 | IEH3nodg (ch) 2 | char ch; 3 | { 4 | if (IEH3digt(ch)) return (0); 5 | switch (ch) 6 | { 7 | case 'E': 8 | case 'e': 9 | case '.': case '+': case '-': 10 | return (0); 11 | } 12 | return (1); 13 | } 14 | -------------------------------------------------------------------------------- /source/iolib/putch.c: -------------------------------------------------------------------------------- 1 | putchar (c) 2 | char c; 3 | { 4 | extern cout; 5 | cputc(c,cout); 6 | } 7 | -------------------------------------------------------------------------------- /source/iolib/puts.c: -------------------------------------------------------------------------------- 1 | puts(str) 2 | char *str; 3 | { 4 | auto char *p,c; 5 | auto int f; 6 | extern int cout; 7 | if (nargs() != 1) 8 | IEHzap("puts "); 9 | p = str; 10 | while( (c = *p++)!= '\0') cputc(c,cout); 11 | cputc('\n',cout); 12 | return(str); 13 | } 14 | -------------------------------------------------------------------------------- /source/iolib/relvec.c: -------------------------------------------------------------------------------- 1 | relvec (ptr) 2 | { 3 | free(ptr); 4 | } 5 | -------------------------------------------------------------------------------- /source/iolib/revput.c: -------------------------------------------------------------------------------- 1 | # define bufflen 100 2 | IEH3revp (c) 3 | char c; 4 | { 5 | /* reversed line IEH3outputter */ 6 | extern char *IEH3outp, *IEH3outlim; 7 | *IEH3outp++ = c; 8 | if (IEH3outp > IEH3outlim+100) 9 | IEH3err("unprint producing too many chars"); 10 | } 11 | -------------------------------------------------------------------------------- /source/iolib/run: -------------------------------------------------------------------------------- 1 | cc -c -O alloc.c 2 | cc -c -O calloc.c 3 | cc -c -O cclose.c 4 | cc -c -O ceof.c 5 | cc -c -O cerror.c 6 | cc -c -O cexit.c 7 | cc -c -O cflush.c 8 | cc -c -O cfree.c 9 | cc -c -O cgetc.c 10 | cc -c -O ciodec.c 11 | cc -c -O clenf.c 12 | cc -c -O copen.c 13 | cc -c -O cputc.c 14 | cc -c -O cwrd.c 15 | as dummy.s; mv a.out dummy.o 16 | cc -c -f -O ftoa.c 17 | cc -c -O getch.c 18 | cc -c -O gets.c 19 | cc -c -O getvec.c 20 | cc -c -O iehzap.c 21 | cc -c -O makbuf.c 22 | cc -c -O maktab.c 23 | cc -c -O nexch.c 24 | cc -c -O nodig.c 25 | cc -c -O printf.c 26 | cc -c -O putch.c 27 | cc -c -O puts.c 28 | cc -c -O relvec.c 29 | cc -c -O revput.c 30 | cc -c -O scan1.c 31 | cc -c -O scan2.c 32 | cc -c -O scan3.c 33 | cc -c -O system.c 34 | cc -c -O tmpnam.c 35 | cc -c -O unget.c 36 | as unprnt.s; mv a.out unprnt.o 37 | cc -c -O wdleng.c 38 | ar r /lib/libp.a *.o 39 | rm *.o 40 | -------------------------------------------------------------------------------- /source/iolib/scan3.c: -------------------------------------------------------------------------------- 1 | _Ierr (message, a, b, c, d, e) 2 | char message[]; 3 | { 4 | extern int cgoof; 5 | printf("ERROR "); 6 | printf(message, a, b, c, d, e); 7 | cputc('\n'); 8 | cexit(cgoof); 9 | } 10 | char _Iendm[128] {0}; 11 | _Imtab (formatp) 12 | char **formatp; 13 | { 14 | /* make up special table of string ending characters */ 15 | int i, normal; 16 | char ch; 17 | /* normally all characters end string except those listed */ 18 | normal = 1; 19 | if (**formatp == '^') 20 | {normal = 0; (*formatp)++;} 21 | for (i= 0; i < 128; i++) 22 | _Iendm[i] = normal; 23 | while ((ch = *((*formatp)++)) != ']') 24 | _Iendm[ch] = !_Iendm[ch]; 25 | 26 | } 27 | 28 | _Inxch () 29 | /* returns next character which is not _Ispce */ 30 | { 31 | extern int _Isfil, (*_Igetc)(); 32 | int ch; 33 | while ((ch = (*_Igetc)(_Isfil)) > 0 && _Ispce(ch)); 34 | if (ch > 0) 35 | return (ch); 36 | return (-1); 37 | } 38 | 39 | _Ispce (c) 40 | char c; 41 | { 42 | switch (c) 43 | { 44 | case ' ': 45 | case '\n': 46 | case '\t': return(1); 47 | } 48 | return(0); 49 | } 50 | 51 | _Ispnd (ch) 52 | char ch; 53 | { 54 | return (_Iendm[ch] > 0); 55 | } 56 | 57 | char *_Iinpt; 58 | int (*_Igetc)(), (*_Iungc)(); 59 | _Igstr () 60 | { 61 | extern char *_Iinpt; 62 | return (*_Iinpt++); 63 | } 64 | 65 | _Iungs(ch) 66 | { 67 | extern char *_Iinpt; 68 | *--_Iinpt = ch; 69 | } 70 | -------------------------------------------------------------------------------- /source/iolib/system.c: -------------------------------------------------------------------------------- 1 | system(str) 2 | char *str; 3 | { 4 | int status; 5 | if(fork() == 0) 6 | execl("/bin/sh", "sh", "-c", str, 0); 7 | wait(&status); 8 | } 9 | -------------------------------------------------------------------------------- /source/iolib/tmpnam.c: -------------------------------------------------------------------------------- 1 | int IEH0958g 0; 2 | tmpnam(s) 3 | char *s; 4 | { 5 | printf(-1,s,"pl%d%c",getpid(),'a'+IEH0958g++); 6 | return(s); 7 | } 8 | -------------------------------------------------------------------------------- /source/iolib/unget.c: -------------------------------------------------------------------------------- 1 | # include "ciodec.c" 2 | ungetc (c, fn) 3 | { 4 | struct fileps *fp; 5 | if (nargs() != 2) 6 | IEHzap("ungetc"); 7 | /* push back onto input */ 8 | fp = &IEH3fpts[fn]; 9 | if (fp->wrflag == 0) 10 | IEH3mbuf(fn,0); 11 | if (fp->bptr <= fp->buff - 100) 12 | IEH3err("ungetc/unprintf: buffer full file %d",fn); 13 | *--fp->bptr = c; 14 | fp->nchars++; 15 | } 16 | -------------------------------------------------------------------------------- /source/iolib/wdleng.c: -------------------------------------------------------------------------------- 1 | wdleng () 2 | /* returns number of bits in a machine integer */ 3 | /* written so kernighan can tell where he is running */ 4 | { 5 | int k, leng; 6 | k = leng = 1; 7 | while (k =<< 1) 8 | leng++; 9 | return (leng); 10 | } 11 | -------------------------------------------------------------------------------- /source/m6/m61.c: -------------------------------------------------------------------------------- 1 | # 2 | 3 | #include "m6.h" 4 | 5 | main(argc,argv) 6 | char **argv; 7 | { 8 | extern fin; 9 | int t; 10 | gf = ge = g0; 11 | pf = pe = p0; 12 | t = g0; 13 | gmax =+ t-10; 14 | t = d0; 15 | dmax =+ t-10; 16 | t = p0; 17 | pmax =+ t-10; 18 | revptr(d0,d0+2,&df,&de); 19 | if(argc>1) { 20 | fin = open(argv[1],0); 21 | control(); 22 | close(fin); 23 | } 24 | fin = dup(0); 25 | control(); 26 | } 27 | 28 | 29 | diag(m) { 30 | printf("%s\n",m); 31 | iot(); 32 | } /* abort */ 33 | 34 | int iot 4; 35 | 36 | -------------------------------------------------------------------------------- /source/m6/run: -------------------------------------------------------------------------------- 1 | cc -s -O m6?.c 2 | cmp a.out /usr/bin/m6 3 | cp a.out /usr/bin/m6 4 | rm a.out *.o 5 | -------------------------------------------------------------------------------- /source/mdec/dldr.s: -------------------------------------------------------------------------------- 1 | / copy and execute DEC loaders 2 | 3 | core = 24. 4 | prs = 177550 5 | 6 | mov $dldr,r0 7 | mov $[core*2048.]-300,r1 8 | mov r1,r2 9 | 1: 10 | mov (r0)+,(r1)+ 11 | cmp r0,$end 12 | blo 1b 13 | jmp (r2) 14 | 15 | dldr: 16 | 10706 17 | 24646 18 | 10705 19 | 62705 20 | 114 21 | 5001 22 | 13716 23 | 177570 24 | 6016 25 | 103402 26 | 5016 27 | 404 28 | 241 29 | 6116 30 | 1001 31 | 10116 32 | 5000 33 | 4715 34 | 105303 35 | 1374 36 | 4715 37 | 4767 38 | 74 39 | 10402 40 | 162702 41 | 4 42 | 22702 43 | 2 44 | 1441 45 | 4767 46 | 54 47 | 61604 48 | 10401 49 | 4715 50 | 2004 51 | 105700 52 | 1753 53 | 0 54 | 751 55 | 110321 56 | 770 57 | 16703 58 | 150 59 | 105213 60 | 105713 61 | 100376 62 | 116303 63 | 2 64 | 60300 65 | 42703 66 | 177400 67 | 5302 68 | 207 69 | 12667 70 | 44 71 | 4715 72 | 10304 73 | 4715 74 | 303 75 | 50304 76 | 16707 77 | 26 78 | 4767 79 | 177752 80 | 4715 81 | 105700 82 | 1342 83 | 6204 84 | 103002 85 | 0 86 | 677 87 | 6304 88 | 114 89 | 0 90 | 91 | . = dldr-500+744 92 | 16701 93 | 26 94 | 12702 95 | 352 96 | 5211 97 | 105711 98 | 100376 99 | 116162 100 | 2 101 | [core*2048.]-400 102 | 5267 103 | 177756 104 | 765 105 | prs 106 | end: 107 | -------------------------------------------------------------------------------- /source/mdec/hp.s: -------------------------------------------------------------------------------- 1 | / rp04 disk driver 2 | 3 | hpcs1 = 176700 4 | hpda = 176706 5 | hpcs2 = 176710 6 | hpof = 176732 7 | hpca = 176734 8 | 9 | fmt22 = 010000 10 | preset = 021 11 | clear = 040 12 | 13 | first = .+2 / dirty, but i need the space 14 | tst $0 15 | bne 1f 16 | mov $clear,*$hpcs2 17 | mov $preset,*$hpcs1 18 | mov $fmt22,*$hpof 19 | inc first 20 | 1: 21 | mov dska,r1 22 | clr r0 23 | div $22.,r0 24 | mov r1,-(sp) 25 | mov r0,r1 26 | clr r0 27 | div $19.,r0 28 | bisb r1,1(sp) 29 | mov r0,*$hpca 30 | mov $hpda,r1 31 | mov (sp)+,(r1) 32 | mov ba,-(r1) 33 | mov wc,-(r1) 34 | mov $iocom,-(r1) 35 | 1: 36 | tstb (r1) 37 | bpl 1b 38 | rts pc 39 | -------------------------------------------------------------------------------- /source/mdec/ht.s: -------------------------------------------------------------------------------- 1 | htcs1 = 172440 2 | htba = 172444 3 | htfc = 172446 4 | htcs2 = 172450 5 | htds = 172452 6 | httc = 172472 7 | 8 | P800 = 1300 9 | P1600 = 2300 10 | PIP = 20000 11 | MOL = 10000 12 | ERR = 40000 13 | REV = 33 14 | READ = 71 15 | REW = 7 16 | 17 | tread: 18 | 1: 19 | mov ba,mtma 20 | cmp mtapa,tapa 21 | beq 1f 22 | bhi 2f 23 | jsr pc,rrec 24 | br 1b 25 | 2: 26 | jsr pc,rew 27 | br 1b 28 | 1: 29 | mov wc,r1 30 | 1: 31 | jsr pc,rrec 32 | add $256.,r1 33 | bmi 1b 34 | rts pc 35 | 36 | rrec: 37 | mov $htds,r0 38 | tstb (r0) 39 | bpl rrec 40 | bit $PIP,(r0) 41 | bne rrec 42 | bit $MOL,(r0) 43 | beq rrec 44 | mov $htfc,r0 45 | mov $-512.,(r0) 46 | mov mtma,-(r0) 47 | mov $-256.,-(r0) 48 | mov $READ,-(r0) 49 | 1: 50 | tstb (r0) 51 | bpl 1b 52 | bit $ERR,*$htds 53 | bpl 1f 54 | mov $-1,*$htfc 55 | mov $REV,(r0) 56 | br rrec 57 | 1: 58 | add $512.,mtma 59 | inc mtapa 60 | rts pc 61 | 62 | rew: 63 | clr *$htcs2 64 | mov $P800,*$httc 65 | mov $REW,*$htcs1 66 | clr mtapa 67 | rts pc 68 | 69 | mtapa: 0 70 | mtma: 0 71 | -------------------------------------------------------------------------------- /source/mdec/mcopy.s: -------------------------------------------------------------------------------- 1 | / copy mag tape to disk 2 | / load with proper tape and disk drivers 3 | 4 | jsr pc,rew 5 | 2: 6 | jsr pc,4(r5) 7 | 8 | .even 9 | jsr pc,numb 10 | mov r0,dska 11 | jsr pc,4(r5) 12 | 13 | .even 14 | jsr pc,numb 15 | mov r0,tapa 16 | jsr pc,4(r5) 17 | 18 | .even 19 | jsr pc,numb 20 | mov r0,r2 21 | 1: 22 | jsr pc,tread 23 | jsr pc,wblk 24 | inc tapa 25 | inc dska 26 | dec r2 27 | bne 1b 28 | jsr pc,rew 29 | rts pc 30 | 31 | numb: 32 | clr r1 33 | 1: 34 | jsr pc,2(r5) 35 | cmp r0,$'\n 36 | beq 1f 37 | sub $'0,r0 38 | cmp r0,$9 39 | bhi 2f 40 | mul $10.,r1 41 | add r0,r1 42 | br 1b 43 | 1: 44 | mov r1,r0 45 | rts pc 46 | 2: 47 | jsr pc,4(r5) 48 | 49 | .even 50 | tst (sp)+ 51 | rts pc 52 | 53 | ba: buf 54 | wc: -256. 55 | .bss 56 | buf: .=.+512. 57 | dska: .=.+2 58 | tapa: .=.+2 59 | .text 60 | -------------------------------------------------------------------------------- /source/mdec/reset.s: -------------------------------------------------------------------------------- 1 | / reset 2 | 5 3 | rts pc 4 | -------------------------------------------------------------------------------- /source/mdec/rhp.s: -------------------------------------------------------------------------------- 1 | / hpread 2 | 3 | rblk: 4 | 5 | iocom = 71 6 | -------------------------------------------------------------------------------- /source/mdec/rk.s: -------------------------------------------------------------------------------- 1 | / rk05 disk driver 2 | 3 | rkda = 177412 4 | mov dska,r1 5 | clr r0 6 | div $12.,r0 7 | ash $4.,r0 8 | bis r1,r0 9 | mov $rkda,r1 10 | mov r0,(r1) 11 | mov ba,-(r1) 12 | mov wc,-(r1) 13 | mov $iocom,-(r1) 14 | 1: 15 | tstb (r1) 16 | bpl 1b 17 | rts pc 18 | -------------------------------------------------------------------------------- /source/mdec/rkf.s: -------------------------------------------------------------------------------- 1 | / format RK03/05 disk packs 2 | 3 | rkda = 177412 4 | 5 | jsr pc,4(r5) 6 | ; .even 7 | jsr pc,2(r5) 8 | mov r0,-(sp) 9 | mov $'\n,r0 10 | jsr pc,(r5) 11 | cmp (sp)+,$'y 12 | beq 1f 13 | rts pc 14 | 1: 15 | mov $203.*2,r4 16 | clr r3 17 | 1: 18 | mov $rkda+2,r0 19 | mov r3,-(r0) 20 | mov $buf,-(r0) 21 | mov $-12.*256.,-(r0) 22 | mov $6003,-(r0) 23 | 2: 24 | tstb (r0) 25 | bge 2b 26 | tst (r0) 27 | blt 1f 28 | add $20,r3 29 | dec r4 30 | bne 1b 31 | rts pc 32 | 1: 33 | jsr pc,4(r5) 34 | ; .even 35 | rts pc 36 | 37 | buf: .=.+2 38 | -------------------------------------------------------------------------------- /source/mdec/rp.s: -------------------------------------------------------------------------------- 1 | / rp03 disk driver 2 | 3 | rpda = 176724 4 | mov dska,r1 5 | clr r0 6 | div $10.,r0 7 | mov r1,-(sp) 8 | mov r0,r1 9 | clr r0 10 | div $20.,r0 11 | bisb r1,1(sp) 12 | mov $rpda,r1 13 | mov (sp)+,(r1) 14 | mov r0,-(r1) 15 | mov ba,-(r1) 16 | mov wc,-(r1) 17 | mov $iocom,-(r1) 18 | 1: 19 | tstb (r1) 20 | bpl 1b 21 | rts pc 22 | -------------------------------------------------------------------------------- /source/mdec/rrk.s: -------------------------------------------------------------------------------- 1 | / read rk 2 | 3 | rblk: 4 | iocom = 5 5 | -------------------------------------------------------------------------------- /source/mdec/rrp.s: -------------------------------------------------------------------------------- 1 | / read rp 2 | 3 | rblk: 4 | iocom = 5 5 | -------------------------------------------------------------------------------- /source/mdec/run: -------------------------------------------------------------------------------- 1 | as fsboot.s tty.s rrk.s rk.s 2 | strip a.out 3 | ls -l a.out 4 | cp a.out /usr/mdec/rkuboot 5 | 6 | as fsboot.s tty.s rrp.s rp.s 7 | strip a.out 8 | ls -l a.out 9 | cp a.out /usr/mdec/rpuboot 10 | 11 | as fsboot.s tty.s rhp.s hp.s 12 | strip a.out 13 | ls -l a.out 14 | cp a.out /usr/mdec/hpuboot 15 | 16 | as tpboot.s tty.s tc.s 17 | strip a.out 18 | ls -l a.out 19 | cp a.out /usr/mdec/tboot 20 | 21 | as tpboot.s tty.s tm.s 22 | strip a.out 23 | ls -l a.out 24 | cp a.out /usr/mdec/mboot 25 | 26 | as tpboot.s tty.s ht.s 27 | strip a.out 28 | ls -l a.out 29 | cp a.out /usr/mdec/hboot 30 | 31 | as tcf.s 32 | strip a.out 33 | cp a.out /usr/mdec/tcf 34 | 35 | as rkf.s 36 | strip a.out 37 | cp a.out /usr/mdec/rkf 38 | 39 | as reset.s 40 | strip a.out 41 | cp a.out /usr/mdec/reset 42 | 43 | as dldr.s 44 | strip a.out 45 | cp a.out /usr/mdec/dldr 46 | 47 | as mcopy.s tm.s wrk.s rk.s 48 | strip a.out 49 | cp a.out /usr/mdec/tmrk 50 | 51 | as mcopy.s tm.s wrp.s rp.s 52 | strip a.out 53 | cp a.out /usr/mdec/tmrp 54 | 55 | as mcopy.s tm.s whp.s hp.s 56 | strip a.out 57 | cp a.out /usr/mdec/tmhp 58 | 59 | as mcopy.s ht.s wrk.s rk.s 60 | strip a.out 61 | cp a.out /usr/mdec/htrk 62 | 63 | as mcopy.s ht.s wrp.s rp.s 64 | strip a.out 65 | cp a.out /usr/mdec/htrp 66 | 67 | as mcopy.s ht.s whp.s hp.s 68 | strip a.out 69 | cp a.out /usr/mdec/hthp 70 | 71 | rm a.out 72 | -------------------------------------------------------------------------------- /source/mdec/tc.s: -------------------------------------------------------------------------------- 1 | tcdt = 177350 2 | tccm = 177342 3 | tread: 4 | mov $tcdt,r0 5 | mov $tccm,r1 6 | for: 7 | mov $3,(r1) / rbn for 8 | 1: 9 | tstb (r1) 10 | bge 1b 11 | tst (r1) 12 | blt rev 13 | cmp tapa,(r0) 14 | beq rd 15 | bgt for 16 | 17 | rev: 18 | mov $4003,(r1) / rbn bac 19 | 1: 20 | tstb (r1) 21 | bge 1b 22 | tst (r1) 23 | blt for 24 | mov (r0),r2 25 | add $5,r2 26 | cmp tapa,r2 27 | blt rev 28 | br for 29 | 30 | rd: 31 | mov ba,-(r0) / bus addr 32 | mov wc,-(r0) / wc 33 | mov $5,-(r0) / read 34 | 1: 35 | tstb (r1) 36 | bge 1b 37 | tst (r1) 38 | blt tread 39 | rts pc 40 | 41 | rew: 42 | mov $4003,tccm 43 | rts pc 44 | -------------------------------------------------------------------------------- /source/mdec/tm.s: -------------------------------------------------------------------------------- 1 | mts = 172520 2 | mtc = 172522 3 | mtbrc = 172524 4 | mtcma = 172526 5 | 6 | tread: 7 | 1: 8 | mov ba,mtma 9 | cmp mtapa,tapa 10 | beq 1f 11 | bhi 2f 12 | jsr pc,rrec 13 | br 1b 14 | 2: 15 | jsr pc,rew 16 | br 1b 17 | 1: 18 | mov wc,r1 19 | 1: 20 | jsr pc,rrec 21 | add $256.,r1 22 | bmi 1b 23 | rts pc 24 | 25 | rrec: 26 | mov $mts,r0 27 | bit $2,(r0)+ / rewind status 28 | bne rrec 29 | tstb (r0)+ / cu ready 30 | bpl rrec 31 | inc r0 32 | mov $-512.,(r0)+ / byte count 33 | mov mtma,(r0) / bus address 34 | mov $mtc,r0 35 | mov $60003,(r0) / read 800bpi 36 | 1: 37 | tstb (r0) 38 | bpl 1b 39 | tst (r0)+ 40 | bpl 1f 41 | mov $-1,(r0) 42 | mov $60013,-(r0) / backspace 43 | br rrec 44 | 1: 45 | add $512.,mtma 46 | inc mtapa 47 | rts pc 48 | 49 | rew: 50 | mov $60017,*$mtc 51 | clr mtapa 52 | rts pc 53 | 54 | mtapa: 0 55 | mtma: 0 56 | -------------------------------------------------------------------------------- /source/mdec/tty.s: -------------------------------------------------------------------------------- 1 | / read and echo character from tty. 2 | / perform normal cr/lf uc/lc mapping. 3 | tks = 177560 4 | tkb = 177562 5 | getc: 6 | tstb *$tks 7 | bge getc 8 | mov tkb,r0 9 | bic $!177,r0 10 | cmp r0,$'A 11 | blo 1f 12 | cmp r0,$'Z 13 | bhi 1f 14 | add $'a-'A,r0 15 | 1: 16 | cmp r0,$'\r 17 | bne putc 18 | mov $'\n,r0 19 | 20 | / put a character on the tty. 21 | / also performs delay. 22 | tps = 177564 23 | tpb = 177566 24 | putc: 25 | cmp r0,$'\n 26 | bne 1f 27 | mov $'\r,r0 28 | jsr pc,(r5) 29 | mov $'\n,r0 30 | 1: 31 | tstb tps 32 | bpl 1b 33 | mov r0,tpb 34 | rts pc 35 | 36 | / write a string to tty 37 | / jsr pc, mesg; ; .even 38 | mesg: 39 | movb *(sp),r0 40 | beq 1f 41 | jsr pc,(r5) 42 | inc (sp) 43 | br mesg 44 | 1: 45 | add $2,(sp) 46 | bic $1,(sp) 47 | rts pc 48 | 49 | callout: 50 | clr r0 51 | cmp (r0),$407 52 | bne 2f 53 | 1: 54 | mov 20(r0),(r0)+ 55 | cmp r0,sp 56 | blo 1b 57 | 2: 58 | mov $start,-(sp) 59 | clr pc 60 | 61 | trvect: 62 | br putc 63 | br getc 64 | br mesg 65 | -------------------------------------------------------------------------------- /source/mdec/whp.s: -------------------------------------------------------------------------------- 1 | / hpwrite 2 | 3 | wblk: 4 | 5 | iocom = 61 6 | -------------------------------------------------------------------------------- /source/mdec/wrk.s: -------------------------------------------------------------------------------- 1 | / write rk 2 | 3 | wblk: 4 | iocom = 3 5 | -------------------------------------------------------------------------------- /source/mdec/wrp.s: -------------------------------------------------------------------------------- 1 | / write rp 2 | 3 | wblk: 4 | iocom = 3 5 | -------------------------------------------------------------------------------- /source/rat/r.g: -------------------------------------------------------------------------------- 1 | %term LCURL RCURL LPAR RPAR SCOL DIGITS 2 | %term XIF XELSE XFOR XWHILE XBREAK NEXT 3 | %term OLDDO NEWDO 4 | %term XGOK XDEFINE XINCLUDE 5 | %term REPEAT UNTIL 6 | %% 7 | 8 | statl : statl stat 9 | | 10 | ; 11 | stat : if stat ={ outcont($1); } 12 | | ifelse stat ={ outcont($1+1); } 13 | | while stat ={ whilestat($1); } 14 | | for stat ={ forstat($1); } 15 | | repeat stat UNTIL ={ untils($1); } 16 | | XBREAK ={ breakcode($1); } 17 | | NEXT ={ nextcode($1); } 18 | | newdo stat ={ dostat($1); } 19 | | OLDDO ={ docode(0,$1); } 20 | | XGOK ={ gokcode($1); } 21 | | SCOL 22 | | LCURL statl RCURL 23 | | label stat 24 | | error ={ errcode($1); yyclearin; } 25 | ; 26 | label : DIGITS ={ outcode($1); outcode("\t"); } 27 | ; 28 | if : XIF ={ ifcode($1); } 29 | ; 30 | ifelse : if stat XELSE ={ outgoto($1+1); outcont($1); } 31 | ; 32 | while : XWHILE ={ whilecode($1); } 33 | ; 34 | for : XFOR ={ forcode($1); } 35 | ; 36 | repeat : REPEAT ={ repcode($1); } 37 | ; 38 | newdo : NEWDO ={ docode(1,$1); } 39 | ; 40 | %% 41 | -------------------------------------------------------------------------------- /source/rat/r.h: -------------------------------------------------------------------------------- 1 | # 2 | extern int contfld; 3 | extern int dbg; 4 | extern int yyval; 5 | extern int *yypv; 6 | extern int yylval; 7 | extern int peek; 8 | extern int errorflag; 9 | -------------------------------------------------------------------------------- /source/rat/run: -------------------------------------------------------------------------------- 1 | yacc r.g 2 | cc -s -O r1.c r2.c lex.c -ly -lp 3 | cmp a.out /usr/lib/ratfor 4 | cp a.out /usr/lib/ratfor 5 | rm *.o a.out y.tab.c 6 | -------------------------------------------------------------------------------- /source/run: -------------------------------------------------------------------------------- 1 | chdir /usr/sys; pwd; time sh run 2 | 3 | chdir /usr/source/as; pwd; time sh run 4 | chdir /usr/source/c; pwd; time sh run 5 | chdir /usr/source/cref; pwd; time sh run 6 | chdir /usr/source/fort; pwd; time sh run 7 | chdir /usr/source/iolib; pwd; time sh run 8 | chdir /usr/source/m6; pwd; time sh run 9 | chdir /usr/source/mdec; pwd; time sh run 10 | chdir /usr/source/rat; pwd; time sh run 11 | chdir /usr/source/s1; pwd; time sh run 12 | chdir /usr/source/s2; pwd; time sh run 13 | chdir /usr/source/s3; pwd; time sh run 14 | chdir /usr/source/s4; pwd; time sh run 15 | chdir /usr/source/s5; pwd; time sh run 16 | chdir /usr/source/s7; pwd; time sh run 17 | chdir /usr/source/salloc; pwd; time sh run 18 | chdir /usr/source/sno; pwd; time sh run 19 | chdir /usr/source/tmg; pwd; time sh run 20 | chdir /usr/source/yacc; pwd; time sh run 21 | -------------------------------------------------------------------------------- /source/s1/cat.s: -------------------------------------------------------------------------------- 1 | / cat -- concatinate files 2 | 3 | mov (sp)+,r5 4 | tst (sp)+ 5 | mov $obuf,r2 6 | cmp r5,$1 7 | beq 3f 8 | 9 | loop: 10 | dec r5 11 | ble done 12 | mov (sp)+,r0 13 | cmpb (r0),$'- 14 | bne 2f 15 | clr fin 16 | br 3f 17 | 2: 18 | mov r0,0f 19 | sys open; 0:..; 0 20 | bes loop 21 | mov r0,fin 22 | 3: 23 | mov fin,r0 24 | sys read; ibuf; 512. 25 | bes 3f 26 | mov r0,r4 27 | beq 3f 28 | mov $ibuf,r3 29 | 4: 30 | movb (r3)+,r0 31 | jsr pc,putc 32 | dec r4 33 | bne 4b 34 | br 3b 35 | 3: 36 | mov fin,r0 37 | beq loop 38 | sys close 39 | br loop 40 | 41 | done: 42 | sub $obuf,r2 43 | beq 1f 44 | mov r2,0f 45 | mov $1,r0 46 | sys write; obuf; 0:.. 47 | 1: 48 | sys exit 49 | 50 | putc: 51 | movb r0,(r2)+ 52 | cmp r2,$obuf+512. 53 | blo 1f 54 | mov $1,r0 55 | sys write; obuf; 512. 56 | mov $obuf,r2 57 | 1: 58 | rts pc 59 | 60 | .bss 61 | ibuf: .=.+512. 62 | obuf: .=.+512. 63 | fin: .=.+2 64 | .text 65 | 66 | -------------------------------------------------------------------------------- /source/s1/chmod.c: -------------------------------------------------------------------------------- 1 | main(argc, argv) 2 | char **argv; 3 | { 4 | register i, m; 5 | register char *c; 6 | int count; 7 | 8 | if(argc < 3) { 9 | printf("arg count\n"); 10 | exit(1); 11 | } 12 | c = argv[1]; 13 | m = 0; 14 | for(m=0; *c; c++) { 15 | if(*c < '0' || *c > '7') { 16 | printf("bad mode\n"); 17 | exit(1); 18 | } 19 | m = (m<<3) | *c - '0'; 20 | } 21 | for(i=2; i 58 | 2: 59 | 60 | filsys: 61 | .even 62 | .bss 63 | buf: .=.+512. 64 | -------------------------------------------------------------------------------- /source/s1/cp.c: -------------------------------------------------------------------------------- 1 | /* 2 | * cp oldfile newfile 3 | */ 4 | 5 | main(argc,argv) 6 | char **argv; 7 | { 8 | static int buf[256]; 9 | int fold, fnew, n; 10 | register char *p1, *p2, *bp; 11 | int mode; 12 | 13 | if(argc != 3) { 14 | write(1, "Usage: cp oldfile newfile\n", 26); 15 | exit(1); 16 | } 17 | if((fold = open(argv[1], 0)) < 0) { 18 | write(1, "Cannot open old file.\n", 22); 19 | exit(1); 20 | } 21 | fstat(fold, buf); 22 | mode = buf[2]; 23 | /* is target a directory? */ 24 | if (stat(argv[2], buf+50)>=0 && (buf[52]&060000)==040000) { 25 | p1 = argv[1]; 26 | p2 = argv[2]; 27 | bp = buf+100; 28 | while(*bp++ = *p2++); 29 | bp[-1] = '/'; 30 | p2 = bp; 31 | while(*bp = *p1++) 32 | if(*bp++ == '/') 33 | bp = p2; 34 | argv[2] = buf+100; 35 | } 36 | if (stat(argv[2], buf+50) >= 0) { 37 | if (buf[0]==buf[50] && buf[1]==buf[51]) { 38 | write(1, "Copying file to itself.\n", 24); 39 | exit(1); 40 | } 41 | } 42 | if ((fnew = creat(argv[2], mode)) < 0) { 43 | write(1, "Can't create new file.\n", 23); 44 | exit(1); 45 | } 46 | while(n = read(fold, buf, 512)) { 47 | if(n < 0) { 48 | write(1, "Read error\n", 11); 49 | exit(1); 50 | } else 51 | if(write(fnew, buf, n) != n){ 52 | write(1, "Write error.\n", 13); 53 | exit(1); 54 | } 55 | } 56 | exit(0); 57 | } 58 | -------------------------------------------------------------------------------- /source/s1/cpall.c: -------------------------------------------------------------------------------- 1 | char buf[100]; 2 | 3 | main(argc, argv) 4 | char **argv; 5 | { 6 | register i; 7 | register char *c1, *c2; 8 | 9 | if(argc < 3) { 10 | write(2, "arg count\n", 10); 11 | exit(); 12 | } 13 | argc--; 14 | c1 = buf; 15 | c2 = argv[argc]; 16 | while(*c1++ = *c2++); 17 | c1[-1] = '/'; 18 | *c1++ = '.'; 19 | *c1 = '\0'; 20 | for(i=1; i 6 | a.out: 7 | 8 | .even 9 | zero: 0 10 | .bss 11 | regbuf: 12 | .=.+1024. 13 | sigp = regbuf+310 14 | txtsiz = regbuf+322 15 | datsiz = regbuf+324 16 | stksiz = regbuf+326 17 | rtxtsiz: .=.+2 18 | .data 19 | objmagic: 407 20 | nobjmagic: 410 21 | namsiz: nambuf 22 | incdot: 2 23 | nlcom: '/ 24 | 25 | .bss 26 | 27 | starmod:.=.+2 28 | symbol: .=.+10. 29 | getoff: .=.+2 30 | namstrt: .=.+2 31 | bytemod: .=.+2 32 | savsp: .=.+2 33 | error: .=.+2 34 | ttyfin: .=.+2 35 | dbfin: .=.+2 36 | symfin: .=.+2 37 | curfin: .=.+2 38 | dbfout: .=.+2 39 | ch: .=.+2 40 | lastop: .=.+2 41 | addres: .=.+2 42 | taddr: .=.+2 43 | adrflg: .=.+2 44 | fpsr: .=.+2 45 | och: .=.+2 46 | dot: .=.+2 47 | count: .=.+2 48 | syscnt: .=.+2 49 | temp: .=.+2 50 | temp1: .=.+2 51 | obuf: .=.+8. 52 | inbuf: .=.+128. 53 | nambuf: .=.+20 54 | 55 | -------------------------------------------------------------------------------- /source/s1/diff2.s: -------------------------------------------------------------------------------- 1 | / hash routine for diff 2 | / effectively spreads the string out into 7-bit 3 | / bytes, then sums the result 1's-complement 4 | / by 16-bit bytes and adds 1 to avoid zero answer 5 | 6 | / r4 hash accumulator 7 | / r3 current offset 8 | / r2 first time flag 9 | .globl _readhash 10 | .globl getc 11 | 12 | .data 13 | _readhash: 14 | mov 2(sp),0f 15 | mov r5,-(sp) 16 | mov r4,-(sp) 17 | mov r3,-(sp) 18 | mov r2,-(sp) 19 | mov $1,r4 20 | mov r4,r2 21 | clr r3 22 | 1: 23 | jsr r5,getc; 0: 0 24 | bes 2f 25 | clr r2 26 | cmp r0,$'\n 27 | beq 1f 28 | ashc $-16.,r0 29 | ashc r3,r0 30 | add r0,r4 31 | adc r4 32 | add r1,r4 33 | adc r4 34 | add $7,r3 35 | cmp r3,$16. 36 | blt 1b 37 | sub $16.,r3 38 | br 1b 39 | 2: 40 | tst r2 41 | bne 2f 42 | mov $2,r0 43 | sys write; 3f; 4f-3f 44 | 2: 45 | clr r4 46 | 1: 47 | mov r4,r0 48 | mov (sp)+,r2 49 | mov (sp)+,r3 50 | mov (sp)+,r4 51 | mov (sp)+,r5 52 | rts pc 53 | 3: 54 | 55 | 4: 56 | .even 57 | -------------------------------------------------------------------------------- /source/s1/echo.c: -------------------------------------------------------------------------------- 1 | main(argc, argv) 2 | int argc; 3 | char *argv[]; 4 | { 5 | int i; 6 | 7 | argc--; 8 | for(i=1; i<=argc; i++) 9 | printf("%s%c", argv[i], i==argc? '\n': ' '); 10 | } 11 | -------------------------------------------------------------------------------- /source/s1/exit.c: -------------------------------------------------------------------------------- 1 | /* exit -- end runcom */ 2 | 3 | main() { 4 | seek(0, 0, 2); 5 | } 6 | -------------------------------------------------------------------------------- /source/s1/goto.c: -------------------------------------------------------------------------------- 1 | int offset 0; 2 | 3 | main(argc, argv) 4 | char *argv[]; 5 | { 6 | extern fin; 7 | char line[64]; 8 | 9 | if (argc<2 || ttyn(0)!='x') { 10 | write(1, "goto error\n", 11); 11 | seek(0, 0, 2); 12 | return; 13 | } 14 | seek(0, 0, 0); 15 | fin = dup(0); 16 | 17 | loop: 18 | if (getlin(line)) { 19 | write(1, "label not found\n", 16); 20 | return; 21 | } 22 | if (compar(line, argv[1])) goto loop; 23 | seek(0, offset, 0); 24 | } 25 | 26 | getlin(s) 27 | char s[]; 28 | { 29 | int ch, i; 30 | 31 | i = 0; 32 | l: 33 | if ((ch=getc())=='\0') return(1); 34 | if (ch!=':') { 35 | while(ch!='\n' && ch!='\0') 36 | ch = getc(); 37 | goto l; 38 | } 39 | while ((ch=getc())==' '); 40 | while (ch!=' ' && ch!='\n' && ch!='\0') { 41 | s[i++] = ch; 42 | ch = getc(); 43 | } 44 | while(ch != '\n') 45 | ch = getc(); 46 | s[i] = '\0'; 47 | return(0); 48 | } 49 | 50 | compar(s1, s2) 51 | char s1[], s2[]; 52 | { 53 | int c, i; 54 | 55 | i = 0; 56 | l: 57 | if(s1[i] != s2[i]) return(1); 58 | if (s1[i++] == '\0') return(0); 59 | goto l; 60 | } 61 | 62 | getc() 63 | { 64 | 65 | offset++; 66 | return(getchar()); 67 | } 68 | -------------------------------------------------------------------------------- /source/s1/kill.s: -------------------------------------------------------------------------------- 1 | / kill process 2 | 3 | mov (sp)+,r4 4 | tst (sp)+ 5 | 6 | loop: 7 | dec r4 8 | ble done 9 | mov (sp)+,r5 10 | clr r3 11 | cmpb (r5),$'- 12 | bne 1f 13 | inc r5 14 | clr signo 15 | 1: 16 | movb (r5)+,r0 17 | beq 1f 18 | sub $'0,r0 19 | cmp r0,$9 20 | bhi error 21 | mul $10.,r3 22 | add r0,r3 23 | br 1b 24 | 1: 25 | tst signo 26 | bne 1f 27 | tst r3 28 | ble error 29 | cmp r3,$12. 30 | bgt error 31 | mov r3,signo 32 | br loop 33 | 1: 34 | mov r3,r0 35 | sys 37.; signo: 9. / kill 36 | bec loop 37 | mov r3,r0 38 | jsr pc,decml 39 | mov $1,r0 40 | sys write; m1; em1-m1 41 | br loop 42 | 43 | error: 44 | mov $1,r0 45 | sys write; m2; em2-m2 46 | br loop 47 | 48 | done: 49 | sys exit 50 | 51 | decml: 52 | mov r0,r1 53 | clr r0 54 | div $10.,r0 55 | mov r1,-(sp) 56 | tst r0 57 | beq 1f 58 | jsr pc,decml 59 | 1: 60 | mov (sp)+,r0 61 | add $'0,r0 62 | mov r0,ch 63 | mov $1,r0 64 | sys write; ch; 1 65 | rts pc 66 | 67 | m1: 68 | <: not found\n> 69 | em1: 70 | m2: 71 | 72 | em2: 73 | .bss 74 | ch: .=.+2 75 | -------------------------------------------------------------------------------- /source/s1/ln.c: -------------------------------------------------------------------------------- 1 | # 2 | /* 3 | * ln target [ new name ] 4 | */ 5 | 6 | struct ibuf { 7 | int inum; 8 | int iflags; 9 | char inl; 10 | char iuid; 11 | int isize; 12 | int iaddr[8]; 13 | char *ictime[2]; 14 | char *imtime[2]; 15 | int fill; 16 | }; 17 | 18 | #define DIR 040000 19 | #define FMT 060000 20 | 21 | main(argc, argv) 22 | char **argv; 23 | { 24 | static struct ibuf statb; 25 | register char *np; 26 | 27 | if (argc<2) { 28 | write(1, "Usage: ln target [ newname ]\n", 29); 29 | exit(1); 30 | } 31 | if (argc==2) { 32 | np = argv[1]; 33 | while(*np++); 34 | while (*--np!='/' && np>argv[1]); 35 | np++; 36 | argv[2] = np; 37 | } 38 | stat(argv[1], &statb); 39 | if ((statb.iflags&FMT) == DIR) { 40 | write(1, "No directory link\n", 18); 41 | exit(1); 42 | } 43 | if (link(argv[1], argv[2])<0) { 44 | write(1, "Can't link\n", 11); 45 | exit(1); 46 | } 47 | exit(0); 48 | } 49 | -------------------------------------------------------------------------------- /source/s2/mesg.c: -------------------------------------------------------------------------------- 1 | /* 2 | * mesg -- set current tty to accept or 3 | * forbid write permission. 4 | * 5 | * mesg [y] [n] 6 | * y allow messages 7 | * n forbid messages 8 | */ 9 | 10 | int sbuf[40]; 11 | 12 | main(argc, argv) 13 | char *argv[]; 14 | { 15 | register char *tty; 16 | 17 | tty = "/dev/ttyx"; 18 | tty[8] = ttyn(1); 19 | if(stat(tty, sbuf) < 0) { 20 | write(2, "cannot stat\n", 12); 21 | exit(1); 22 | } 23 | if(argc < 2) { 24 | if(sbuf[2] & 02) 25 | goto no; 26 | goto yes; 27 | } 28 | if(*argv[1] == 'y') 29 | goto yes; 30 | 31 | no: 32 | if(chmod(tty, 0600) < 0) 33 | goto bad; 34 | goto was; 35 | 36 | yes: 37 | if(chmod(tty, 0622) < 0) 38 | goto bad; 39 | 40 | was: 41 | if(sbuf[2] & 02) 42 | write(2, "was y\n", 6); else 43 | write(2, "was n\n", 6); 44 | exit(0); 45 | 46 | bad: 47 | write(2, "cannot change mode\n", 19); 48 | exit(1); 49 | } 50 | -------------------------------------------------------------------------------- /source/s2/mknod.c: -------------------------------------------------------------------------------- 1 | main(argc, argv) 2 | int argc; 3 | char **argv; 4 | { 5 | int m, a, b; 6 | 7 | if(argc != 5) { 8 | printf("arg count\n"); 9 | goto usage; 10 | } 11 | if(*argv[2] == 'b') 12 | m = 0160666; else 13 | if(*argv[2] == 'c') 14 | m = 0120666; else 15 | goto usage; 16 | a = number(argv[3]); 17 | if(a < 0) 18 | goto usage; 19 | b = number(argv[4]); 20 | if(b < 0) 21 | goto usage; 22 | if(mknod(argv[1], m, (a<<8)|b) < 0) 23 | perror("mknod"); 24 | exit(); 25 | 26 | usage: 27 | printf("usage: mknod name b/c major minor\n"); 28 | } 29 | 30 | number(s) 31 | char *s; 32 | { 33 | int n, c; 34 | 35 | n = 0; 36 | while(c = *s++) { 37 | if(c<'0' || c>'9') 38 | return(-1); 39 | n = n*10 + c-'0'; 40 | } 41 | return(n); 42 | } 43 | -------------------------------------------------------------------------------- /source/s2/nice.c: -------------------------------------------------------------------------------- 1 | /* nice */ 2 | int nicarg 4; 3 | char *args[100]; 4 | char string[10000]; 5 | 6 | main(argc, argv) 7 | int argc; 8 | char *argv[]; 9 | { 10 | int i; 11 | register char **argp, *strp, *p; 12 | 13 | if(argc > 1 && argv[1][0] == '-') { 14 | nicarg = atoi(&argv[1][1]); 15 | argc--; 16 | argv++; 17 | } 18 | if(argc < 2) { 19 | printf("usage: nice [ -n ] command\n"); 20 | exit(1); 21 | } 22 | argc--; 23 | argv++; 24 | argp = args; 25 | strp = string; 26 | for (i=0; i<9; i++) 27 | *strp++ = "/usr/bin/"[i]; 28 | for(i=0; i 1) 22 | for(j=0; code[i][j]==argv[1][j]; j++) 23 | if(code[i][j] == 0) 24 | execv(code[i+1], &argv[1]); 25 | execv(code[i-1], argv); 26 | write(2, "can't start daemon\n", 19); 27 | } 28 | -------------------------------------------------------------------------------- /source/s2/pfe.s: -------------------------------------------------------------------------------- 1 | / print last floating error 2 | 3 | stst = 170300^tst 4 | 5 | stst r1 6 | cmp r1,$14 7 | blos 1f 8 | clr r1 9 | 1: 10 | bic $1,r1 11 | mov mesg(r1),r1 12 | 1: 13 | movb (r1)+,ch 14 | beq 1f 15 | mov $1,r0 16 | sys write; ch; 1 17 | br 1b 18 | 1: 19 | sys exit 20 | 21 | mesg: 22 | 1f 23 | 2f 24 | 3f 25 | 4f 26 | 5f 27 | 6f 28 | 7f 29 | 8f 30 | 31 | 1: 32 | 2: 33 | 3: 34 | 4: 35 | 5: 36 | 6: 37 | 7: 38 | 8: 39 | 40 | .even 41 | 42 | .bss 43 | ch: .=.+2 44 | 45 | -------------------------------------------------------------------------------- /source/s2/rew.s: -------------------------------------------------------------------------------- 1 | / rew -- rewind dec/mag tape 2 | 3 | cmp (sp)+,$2 4 | blt 1f 5 | tst (sp)+ 6 | mov (sp)+,r0 7 | movb (r0)+,r1 8 | cmp r1,$'m 9 | beq rewm 10 | movb r1,tapx+8 11 | tstb (r0) 12 | bne error 13 | 1: 14 | sys open; tapx; 0 15 | br rew 16 | 17 | rewm: 18 | movb (r0)+,r1 19 | beq 1f 20 | movb r1,mtx+7 21 | tstb (r0) 22 | bne error 23 | 1: 24 | sys open; mtx; 0 25 | 26 | rew: 27 | bes error 28 | sys read; word; 2 29 | bes error 30 | sys exit 31 | 32 | error: 33 | mov $1,r0 34 | sys write; 0f; 2 35 | sys exit 36 | 0: 37 | 38 | 39 | tapx: 40 | 41 | mtx: 42 | 43 | .even 44 | 45 | .bss 46 | word: .=.+2 47 | 48 | -------------------------------------------------------------------------------- /source/s2/size.c: -------------------------------------------------------------------------------- 1 | /* 2 | size -- determine object size 3 | 4 | */ 5 | 6 | main(argc, argv) 7 | char **argv; 8 | { 9 | int buf[010], f, ac, sum; 10 | 11 | ac = argc; 12 | if (ac==1) { 13 | *argv = "a.out"; 14 | ac++; 15 | --argv; 16 | } 17 | while(--ac) { 18 | ++argv; 19 | if((f=open(*argv, 0))<0) { 20 | printf("%s not found\n", *argv); 21 | continue; 22 | } 23 | read(f, buf, 0020); 24 | if(buf[0]!=0411 && buf[0]!=0410 && buf[0]!=0407) { 25 | printf("Bad format: %s\n", *argv); 26 | close(f); 27 | continue; 28 | } 29 | if (argc>2) 30 | printf("%s: ", *argv); 31 | printf("%l+%l+%l=", buf[1],buf[2],buf[3]); 32 | sum = buf[1]+buf[2]+buf[3]; 33 | printf("%l (%o)\n", sum, sum); 34 | close(f); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /source/s2/sleep.c: -------------------------------------------------------------------------------- 1 | main(argc, argv) 2 | char **argv; 3 | { 4 | int c, n; 5 | char *s; 6 | 7 | n = 0; 8 | if(argc < 2) { 9 | printf("arg count\n"); 10 | exit(); 11 | } 12 | s = argv[1]; 13 | while(c = *s++) { 14 | if(c<'0' || c>'9') { 15 | printf("bad character\n"); 16 | exit(); 17 | } 18 | n = n*10 + c - '0'; 19 | } 20 | sleep(n); 21 | } 22 | -------------------------------------------------------------------------------- /source/s2/su.c: -------------------------------------------------------------------------------- 1 | /* su -- become super-user */ 2 | 3 | char password[100]; 4 | char pwbuf[100]; 5 | int ttybuf[3]; 6 | main() 7 | { 8 | register char *p, *q; 9 | extern fin; 10 | 11 | if(getpw(0, pwbuf)) 12 | goto badpw; 13 | (&fin)[1] = 0; 14 | p = pwbuf; 15 | while(*p != ':') 16 | if(*p++ == '\0') 17 | goto badpw; 18 | if(*++p == ':') 19 | goto ok; 20 | gtty(0, ttybuf); 21 | ttybuf[2] =& ~010; 22 | stty(0, ttybuf); 23 | printf("password: "); 24 | q = password; 25 | while((*q = getchar()) != '\n') 26 | if(*q++ == '\0') 27 | return; 28 | *q = '\0'; 29 | ttybuf[2] =| 010; 30 | stty(0, ttybuf); 31 | printf("\n"); 32 | q = crypt(password); 33 | while(*q++ == *p++); 34 | if(*--q == '\0' && *--p == ':') 35 | goto ok; 36 | goto error; 37 | 38 | badpw: 39 | printf("bad password file\n"); 40 | ok: 41 | setuid(0); 42 | execl("/bin/sh", "-", 0); 43 | printf("cannot execute shell\n"); 44 | error: 45 | printf("sorry\n"); 46 | } 47 | -------------------------------------------------------------------------------- /source/s2/sum.s: -------------------------------------------------------------------------------- 1 | / sum -- check sum file 2 | 3 | mov (sp)+,r3 4 | tst (sp)+ 5 | loop: dec r3 6 | bgt 1f 7 | sys exit 8 | 1: 9 | clr bcnt 10 | mov (sp)+,0f 11 | sys open; 0:..; 0 12 | bec 3f 13 | mov $1,r0 14 | sys write; 1f; 2f-1f 15 | br loop 16 | 1: 17 | 2: .even 18 | 3: mov r0,r1 19 | clr r5 20 | 1: 21 | mov r1,r0 22 | sys read; buf; 512. 23 | bes err 24 | tst r0 25 | beq print 26 | inc bcnt 27 | mov $buf,r2 28 | 2: 29 | movb (r2)+,r4 30 | add r4,r5 31 | adc r5 32 | sob r0,2b 33 | br 1b 34 | 35 | err: 36 | mov $1,r0 37 | sys write; 1f; 2 38 | 39 | print: 40 | jsr pc,decml 41 | mov $1,r0 42 | sys write; bl; 1 43 | mov bcnt,r5 44 | jsr pc,decml 45 | mov $1,r0 46 | sys write; nl; 1 47 | mov r1,r0 48 | sys close 49 | br loop 50 | 1: 51 | nl: <\n> 52 | bl: < > 53 | .even 54 | 55 | decml: 56 | mov r0,-(sp) 57 | mov r1,-(sp) 58 | mov r5,r1 59 | jsr pc,1f 60 | mov (sp)+,r1 61 | mov (sp)+,r0 62 | rts pc 63 | 64 | 1: 65 | clr r0 66 | dvd $10.,r0 67 | mov r1,-(sp) 68 | mov r0,r1 69 | beq 1f 70 | jsr pc,1b 71 | 1: 72 | mov (sp)+,ch 73 | add $'0,ch 74 | mov $1,r0 75 | sys write; ch; 1 76 | rts pc 77 | 78 | .bss 79 | ch: .=.+2 80 | bcnt: .=.+2 81 | buf: .=.+512. 82 | -------------------------------------------------------------------------------- /source/s2/sync.c: -------------------------------------------------------------------------------- 1 | main() 2 | { 3 | 4 | sync(); 5 | } 6 | -------------------------------------------------------------------------------- /source/s2/tee.c: -------------------------------------------------------------------------------- 1 | int open[9] { 1 }; 2 | int n 1; 3 | int t 0; 4 | 5 | char in[512]; 6 | 7 | char out[512]; 8 | 9 | main(argc,argv) 10 | char **argv; 11 | { 12 | int register r,w,p; 13 | struct { int x1[2], type, x2[15]; } buf; 14 | fstat(1,&buf); 15 | t = (buf.type&060000)==020000; 16 | while(argc-->1) { 17 | open[n++] = creat(argv[1],0666); 18 | if(stat(argv[1],&buf)>=0) 19 | if((buf.type&060000)==020000) 20 | t++; 21 | argv++; 22 | } 23 | r = w = 0; 24 | for(;;) { 25 | for(p=0;p<512;) { 26 | if(r>=w) { 27 | if(t>0&&p>0) break; 28 | w = read(0,in,512); 29 | r = 0; 30 | if(w<=0) { 31 | stash(p); 32 | return; 33 | } 34 | } 35 | out[p++] = in[r++]; 36 | } 37 | stash(p); 38 | } 39 | } 40 | 41 | stash(p) 42 | { 43 | int k; 44 | int i; 45 | int d; 46 | d = t ? 10 : p; 47 | for(i=0; i 5 | tcx: 6 | mt: 7 | mtx: <0\0> 8 | tboot: 9 | mboot: 10 | .even 11 | .bss 12 | dir: . = .+[mdirent*dirsiz] 13 | tapeb: 14 | map: .=.+4096. 15 | emap: 16 | ch: .=.+1 17 | flc: .=.+1 18 | flf: .=.+1 19 | fli: .=.+1 20 | flm: .=.+1 21 | flu: .=.+1 22 | flv: .=.+1 23 | flw: .=.+1 24 | .even 25 | 26 | command:.=.+2 27 | sum: .=.+2 28 | size: .=.+2 29 | nentr: .=.+2 30 | nused: .=.+2 31 | nfree: .=.+2 32 | lused: .=.+2 33 | catlb: .=.+20. 34 | narg: .=.+2 35 | rnarg: .=.+2 36 | parg: .=.+2 37 | fio: .=.+2 38 | mss: .=.+2 39 | ndirent:.=.+2 40 | ndentd8:.=.+2 41 | edir: .=.+2 42 | rseeka: .=.+2 43 | wseeka: .=.+2 44 | tapsiz: .=.+2 45 | name: .=.+32. 46 | name1: .=.+32. 47 | statb: .=.+40. 48 | 49 | smdate = 30. 50 | -------------------------------------------------------------------------------- /source/s2/tty.s: -------------------------------------------------------------------------------- 1 | / tty -- get tty number 2 | 3 | .globl ttyn 4 | 5 | clr r0 6 | jsr pc,ttyn 7 | movb r0,nam 8 | mov $1,r0 9 | sys write; name; 5 10 | sys exit 11 | 12 | .data 13 | name: 14 | 15 | nam: 16 | 17 | .even 18 | -------------------------------------------------------------------------------- /source/s2/umount.c: -------------------------------------------------------------------------------- 1 | #define NMOUNT 16 2 | #define NAMSIZ 32 3 | 4 | struct mtab { 5 | char file[NAMSIZ]; 6 | char spec[NAMSIZ]; 7 | } mtab[NMOUNT]; 8 | 9 | main(argc, argv) 10 | char **argv; 11 | { 12 | register struct mtab *mp; 13 | register char *p1, *p2; 14 | int mf; 15 | 16 | sync(); 17 | mf = open("/etc/mtab", 0); 18 | read(mf, mtab, NMOUNT*2*NAMSIZ); 19 | if(argc != 2) { 20 | printf("arg count\n"); 21 | return; 22 | } 23 | if (umount(argv[1]) < 0) { 24 | perror("umount"); 25 | return; 26 | } 27 | p1 = argv[1]; 28 | while(*p1++) 29 | ; 30 | p1--; 31 | while(*--p1 == '/') 32 | *p1 = '\0'; 33 | while(p1 > argv[1] && *--p1 != '/') 34 | ; 35 | if(*p1 == '/') 36 | p1++; 37 | argv[1] = p1; 38 | for (mp = mtab; mp < &mtab[NMOUNT]; mp++) { 39 | p1 = argv[1]; 40 | p2 = &mp->spec[0]; 41 | while (*p1++ == *p2) 42 | if (*p2++ == 0) { 43 | for (p1 = mp->file; p1 < &mp->file[NAMSIZ*2];) 44 | *p1++ = 0; 45 | mp = &mtab[NMOUNT]; 46 | while ((--mp)->file[0] == 0); 47 | mf = creat("/etc/mtab", 0644); 48 | write(mf, mtab, (mp-mtab+1)*2*NAMSIZ); 49 | return; 50 | } 51 | } 52 | printf("%s not in mount table\n", argv[1]); 53 | } 54 | -------------------------------------------------------------------------------- /source/s2/update.s: -------------------------------------------------------------------------------- 1 | sys fork 2 | br 1f 3 | sys exit 4 | 1: 5 | clr r0 6 | sys close 7 | mov $1,r0 8 | sys close 9 | mov $2,r0 10 | sys close 11 | 1: 12 | sys sync 13 | mov $30.,r0 14 | sys sleep 15 | br 1b 16 | sleep = 35. 17 | sync = 36. 18 | -------------------------------------------------------------------------------- /source/s2/wall.c: -------------------------------------------------------------------------------- 1 | char mesg[3000]; 2 | int msize; 3 | struct 4 | { 5 | char name[8]; 6 | char tty[2]; 7 | int time[2]; 8 | int junk; 9 | } utmp[50]; 10 | 11 | main(argc, argv) 12 | char *argv[]; 13 | { 14 | register i, *p; 15 | int f; 16 | 17 | f = open("/etc/utmp", 0); 18 | if(f < 0) { 19 | printf("utmp?\n"); 20 | exit(); 21 | } 22 | read(f, utmp, sizeof utmp); 23 | close(f); 24 | f = 0; 25 | if(argc >= 2) { 26 | f = open(argv[1], 0); 27 | if(f < 0) { 28 | printf("%s?\n", argv[1]); 29 | exit(); 30 | } 31 | } 32 | while((i = read(f, &mesg[msize], sizeof mesg - msize)) > 0) 33 | msize =+ i; 34 | close(f); 35 | for(i=0; itty[0] == 0) 38 | continue; 39 | sleep(1); 40 | sendmes(p->tty[0]); 41 | } 42 | } 43 | 44 | sendmes(tty) 45 | { 46 | register i; 47 | register char *s; 48 | 49 | i = fork(); 50 | if(i == -1) { 51 | printf("try again\n"); 52 | return; 53 | } 54 | if(i) 55 | return; 56 | s = "/dev/ttyx"; 57 | s[8] = tty; 58 | i = open(s, 1); 59 | if(i < 0) { 60 | printf("cannot open tty%c\n", tty); 61 | exit(); 62 | } 63 | close(1); 64 | dup(i); 65 | printf("Broadcast Message ...\n\n"); 66 | write(1, mesg, msize); 67 | exit(); 68 | } 69 | -------------------------------------------------------------------------------- /source/s2/who.c: -------------------------------------------------------------------------------- 1 | /* 2 | * who 3 | */ 4 | 5 | int fout; 6 | int buf[256]; 7 | 8 | main(argc, argv) 9 | char **argv; 10 | { 11 | char *s, *cbuf; 12 | int n, fi, i; 13 | int tty; 14 | struct { 15 | char name[8]; 16 | char tty; 17 | char pad1; 18 | int time[2]; 19 | char pad2[2]; 20 | } *p; 21 | 22 | s = "/etc/utmp"; 23 | if(argc == 2) 24 | s = argv[1]; 25 | fi = open(s, 0); 26 | if(fi < 0) { 27 | write("cannot open wtmp\n", 17); 28 | exit(); 29 | } 30 | fout = dup(1); 31 | close(1); 32 | if (argc==3) 33 | tty = ttyn(0); 34 | 35 | loop: 36 | n = read(fi, buf, 512); 37 | if(n == 0) { 38 | flush(); 39 | if (argc==3) 40 | write(fout, "Nobody.\n", 8); 41 | exit(); 42 | } 43 | 44 | p = &buf; 45 | for(p = &buf; (n =- 16)>=0; p++) { 46 | if (argc==3 && tty!=p->tty) 47 | continue; 48 | if(p->name[0] == '\0' && argc==1) 49 | continue; 50 | for(i=0; i<8; i++) { 51 | if(p->name[i] == '\0') 52 | p->name[i] = ' '; 53 | putchar(p->name[i]); 54 | } 55 | for(i=0; i<3; i++) 56 | putchar("tty"[i]); 57 | putchar(p->tty); 58 | cbuf = ctime(p->time); 59 | for(i=3; i<16; i++) 60 | putchar(cbuf[i]); 61 | putchar('\n'); 62 | if (argc==3) { 63 | flush(); 64 | exit(); 65 | } 66 | } 67 | goto loop; 68 | } 69 | -------------------------------------------------------------------------------- /source/s3/dpadd.s: -------------------------------------------------------------------------------- 1 | / C library -- signed dp add 2 | 3 | / dpadd(l, i) 4 | / int l[2]; 5 | / l =+ i; 6 | 7 | .globl _dpadd 8 | 9 | _dpadd: 10 | mov r5,-(sp) 11 | mov sp,r5 12 | mov 4(r5),r0 13 | tst 6(r5) 14 | sxt r1 15 | add r1,(r0)+ 16 | add 6(r5),(r0) 17 | adc -(r0) 18 | mov (sp)+,r5 19 | rts pc 20 | -------------------------------------------------------------------------------- /source/s3/fakfp.s: -------------------------------------------------------------------------------- 1 | / fakefp -- fake floating point simulator 2 | 3 | .globl fptrap 4 | 5 | fptrap: 6 | sub $2,(sp) 7 | mov r0,-(sp) 8 | sys signal; 4; 0 9 | mov (sp)+,r0 10 | 2 / rti 11 | -------------------------------------------------------------------------------- /source/s3/floor.s: -------------------------------------------------------------------------------- 1 | .globl _floor, _ceil 2 | .globl floor, ceil 3 | one = 40200 4 | 5 | _floor: 6 | mov r5,-(sp) 7 | mov sp,r5 8 | movf 4(r5),fr0 9 | jsr pc,floor 10 | br 1f 11 | 12 | _ceil: 13 | mov r5,-(sp) 14 | mov sp,r5 15 | movf 4(r5),fr0 16 | jsr pc,ceil 17 | 1: 18 | mov (sp)+,r5 19 | rts pc 20 | 21 | floor: 22 | tstf fr0 23 | cfcc 24 | bge 1f 25 | modf $one,fr0 26 | cfcc 27 | beq 2f 28 | subf $one,fr1 29 | br 2f 30 | 1: 31 | modf $one,fr0 32 | 2: 33 | movf fr1,fr0 34 | rts pc 35 | 36 | ceil: 37 | negf fr0 38 | jsr pc,floor 39 | negf fr0 40 | rts pc 41 | -------------------------------------------------------------------------------- /source/s3/fmod.s: -------------------------------------------------------------------------------- 1 | / C floating mod 2 | / fmod(a,b) returns a number n such that 3 | / i*b + n is a and 0 <= n < b 4 | 5 | .globl _fmod 6 | _fmod: 7 | mov r5,-(sp) 8 | mov sp,r5 9 | movf 4(r5),fr0 10 | divf 12.(r5),fr0 11 | modf $one,fr0 12 | mulf 12.(r5),fr1 13 | movf 4(r5),fr0 14 | subf fr1,fr0 15 | mov (sp)+,r5 16 | rts pc 17 | one = 40200 18 | -------------------------------------------------------------------------------- /source/s3/fpx.s: -------------------------------------------------------------------------------- 1 | / fpx -- floating point simulation 2 | 3 | .data 4 | reenter: 1 5 | 6 | .bss 7 | asign: .=.+2 8 | areg: .=.+8 9 | aexp: .=.+2 10 | bsign: .=.+2 11 | breg: .=.+8 12 | bexp: .=.+2 13 | 14 | fpsr: .=.+2 15 | trapins: .=.+2 16 | 17 | ac0: .=.+8. 18 | ac1: .=.+8. 19 | ac2: .=.+8. 20 | ac3: .=.+8. 21 | ac4: .=.+8. 22 | ac5: .=.+8. 23 | 24 | sr0: .=.+2 25 | sr1: .=.+2 26 | .=.+2 27 | .=.+2 28 | .=.+2 29 | .=.+2 30 | ssp: .=.+2 31 | spc: .=.+2 32 | sps: .=.+2 33 | pctmp: .=.+8 34 | 35 | -------------------------------------------------------------------------------- /source/s3/ldiv.s: -------------------------------------------------------------------------------- 1 | / C library-- long divide/remainder 2 | 3 | .globl _ldiv, _ldivr 4 | .globl _lrem 5 | 6 | _ldiv: 7 | mov 2(sp),r0 8 | mov 4(sp),r1 9 | div 6(sp),r0 10 | mov r1,_ldivr 11 | rts pc 12 | 13 | _lrem: 14 | mov 2(sp),r0 15 | mov 4(sp),r1 16 | div 6(sp),r0 17 | mov r1,r0 18 | rts pc 19 | 20 | .bss 21 | _ldivr: .=.+2 22 | -------------------------------------------------------------------------------- /source/s3/mesg.s: -------------------------------------------------------------------------------- 1 | .globl mesg 2 | 3 | / usage: 4 | / jsr r5,mesg 5 | / 6 | / .even 7 | / ... 8 | / 9 | / string is output onto $1 10 | / 11 | 12 | mesg: 13 | mov r0,-(sp) 14 | mov r5,r0 15 | mov r5,0f 16 | 1: 17 | tstb (r5)+ 18 | bne 1b 19 | sub r5,r0 20 | com r0 21 | mov r0,0f+2 22 | mov $1,r0 23 | sys 0; 9f 24 | .data 25 | 9: 26 | sys write; 0:..; .. 27 | .text 28 | inc r5 29 | bic $1,r5 30 | mov (sp)+,r0 31 | rts r5 32 | 33 | -------------------------------------------------------------------------------- /source/s3/pow.s: -------------------------------------------------------------------------------- 1 | .globl pow, _pow 2 | .globl log, exp 3 | 4 | _pow: 5 | mov r5,-(sp) 6 | mov sp,r5 7 | movf 4(r5),fr0 8 | movf 12.(r5),fr1 9 | jsr pc,pow 10 | mov (sp)+,r5 11 | rts pc 12 | 13 | pow: 14 | 15 | / 0^0~ is 0 16 | 17 | tstf fr0 18 | cfcc 19 | bne 1f 20 | tstf fr1 21 | cfcc 22 | beq bad 23 | rts pc 24 | 1: 25 | 26 | / -^i is +^i fixed sign 27 | 28 | bpl 1f 29 | movf fr1,-(sp) 30 | modf $one,fr1 31 | cfcc 32 | bne bad1 33 | movf (sp)+,fr1 34 | absf fr0 35 | jsr pc,1f 36 | bes bad 37 | movf fr1,-(sp) 38 | modf $half,fr1 39 | cfcc 40 | beq 2f 41 | negf fr0 42 | 2: 43 | movf (sp)+,fr1 44 | rts pc 45 | 1: 46 | jsr pc,log 47 | bes 1f 48 | mulf fr1,fr0 49 | jsr pc,exp 50 | 1: 51 | rts pc 52 | 53 | bad1: 54 | movf (sp)+,fr1 55 | bad: 56 | sec 57 | rts pc 58 | 59 | one = 40200 60 | half = 40000 61 | -------------------------------------------------------------------------------- /source/s3/rand.s: -------------------------------------------------------------------------------- 1 | / random fixed point number generator 2 | 3 | .globl rand, srand 4 | .globl _rand, _srand 5 | 6 | _srand: 7 | mov 2(sp),ranx 8 | rts pc 9 | 10 | srand: 11 | mov r0,ranx 12 | rts pc 13 | 14 | _rand: 15 | rand: 16 | mov r1,-(sp) 17 | mov ranx,r1 18 | mpy $13077.,r1 19 | add $6925.,r1 20 | mov r1,r0 21 | mov r0,ranx 22 | bic $100000,r0 23 | mov (sp)+,r1 24 | rts pc 25 | 26 | .data 27 | ranx: 1 28 | -------------------------------------------------------------------------------- /source/s3/run: -------------------------------------------------------------------------------- 1 | as atan.s; mv a.out atan.o 2 | as crypt.s; mv a.out crypt.o 3 | as dpadd.s; mv a.out dpadd.o 4 | as ecvt.s; mv a.out ecvt.o 5 | as exp.s; mv a.out exp.o 6 | as floor.s; mv a.out floor.o 7 | as fmod.s; mv a.out fmod.o 8 | as fp?.s; mv a.out fp.o 9 | : as fakfp.s: mv a.out fp.o 10 | as gamma.s; mv a.out gamma.o 11 | as get.s; mv a.out get.o 12 | as ldiv.s; mv a.out ldiv.o 13 | as log.s; mv a.out log.o 14 | as mesg.s; mv a.out mesg.o 15 | as pow.s; mv a.out pow.o 16 | as put.s; mv a.out put.o 17 | as rand.s; mv a.out rand.o 18 | as savr5.s; mv a.out savr5.o 19 | as sin.s; mv a.out sin.o 20 | as sqrt.s; mv a.out sqrt.o 21 | as switch.s; mv a.out switch.o 22 | as ttyn.s; mv a.out ttyn.o 23 | ar r /lib/liba.a 24 | rm *.o 25 | -------------------------------------------------------------------------------- /source/s3/savr5.s: -------------------------------------------------------------------------------- 1 | / savr5 - for as progs that call c-callable entries 2 | 3 | .globl savr5 4 | .bss 5 | savr5: .=.+2 6 | -------------------------------------------------------------------------------- /source/s3/sqrt.s: -------------------------------------------------------------------------------- 1 | ldfps = 170100^tst 2 | stfps = 170200^tst 3 | / 4 | / sqrt replaces the f.p. number in fr0 by its 5 | / square root. newton's method 6 | / 7 | .globl sqrt, _sqrt 8 | / 9 | / 10 | _sqrt: 11 | mov r5,-(sp) 12 | mov sp,r5 13 | movf 4(r5),fr0 14 | jsr pc,sqrt 15 | mov (sp)+,r5 16 | rts pc 17 | 18 | sqrt: 19 | tstf fr0 20 | cfcc 21 | bne 1f 22 | clc 23 | rts pc /sqrt(0) 24 | 1: 25 | bgt 1f 26 | clrf fr0 27 | sec 28 | rts pc / sqrt(-a) 29 | 1: 30 | mov r0,-(sp) 31 | stfps -(sp) 32 | mov (sp),r0 33 | bic $!200,r0 / retain mode 34 | ldfps r0 35 | movf fr1,-(sp) 36 | movf fr2,-(sp) 37 | / 38 | movf fr0,fr1 39 | movf fr0,-(sp) 40 | asr (sp) 41 | add $20100,(sp) 42 | movf (sp)+,fr0 /initial guess 43 | mov $4,r0 44 | 1: 45 | movf fr1,fr2 46 | divf fr0,fr2 47 | addf fr2,fr0 48 | mulf $half,fr0 / x = (x+a/x)/2 49 | sob r0,1b 50 | 2: 51 | movf (sp)+,fr2 52 | movf (sp)+,fr1 53 | ldfps (sp)+ 54 | mov (sp)+,r0 55 | clc 56 | rts pc 57 | / 58 | half = 40000 59 | -------------------------------------------------------------------------------- /source/s3/switch.s: -------------------------------------------------------------------------------- 1 | / switch -- switch on contents of r0 2 | / 3 | / 4 | / calling sequence -- 5 | / 6 | / jsr r5,switch; swtab 7 | / 8 | / r0 is looked up in swtab and if found 9 | / control is returned to the corresponding place 10 | / if r0 is not found, the next inline instruction is 11 | / executed 12 | / 13 | / swtab format -- 14 | / 15 | / swtab: 16 | / val1; ret1 17 | / val2; ret2 18 | / ... 19 | / valn; retn 20 | / ..; 0 21 | / 22 | 23 | .globl switch 24 | switch: 25 | mov r1,-(sp) 26 | mov (r5)+,r1 27 | 1: 28 | cmp r0,(r1)+ 29 | beq 1f 30 | tst (r1)+ 31 | bne 1b 32 | 2: 33 | mov (sp)+,r1 34 | rts r5 35 | 1: 36 | mov (r1)+,r1 37 | beq 2b 38 | mov r1,r5 39 | br 2b 40 | 41 | -------------------------------------------------------------------------------- /source/s3/ttyn.s: -------------------------------------------------------------------------------- 1 | / return name of current tty 2 | 3 | .globl ttyn, _ttyn 4 | 5 | _ttyn: 6 | mov r5,-(sp) 7 | mov sp,r5 8 | mov 4(r5),r0 9 | jsr pc,1f 10 | mov (sp)+,r5 11 | rts pc 12 | 13 | ttyn: 14 | clr r0 15 | 1: 16 | mov $'x,name 17 | tst -(sp) 18 | sys fstat; buf 19 | bes er1 20 | mov buf+2,(sp) 21 | sys open; dev; 0 22 | bes er1 23 | mov r0,r1 24 | 1: 25 | mov r1,r0 26 | sys read; buf; 16. 27 | bes er 28 | cmp r0,$16. 29 | bne er 30 | mov $buf,r0 31 | cmp (r0)+,(sp) 32 | bne 1b 33 | cmp (r0)+,$"tt 34 | bne 1b 35 | cmpb (r0)+,$'y 36 | bne 1b 37 | tstb (r0)+ 38 | beq 1b 39 | cmpb (r0),$'\0 40 | bne 1b 41 | movb -(r0),name 42 | 43 | er: 44 | mov r1,r0 45 | sys close 46 | 47 | er1: 48 | tst (sp)+ 49 | movb name,r0 50 | rts pc 51 | 52 | .data 53 | dev: 54 | .even 55 | .bss 56 | buf: .=.+40. 57 | name: .=.+2 58 | -------------------------------------------------------------------------------- /source/s4/abort.s: -------------------------------------------------------------------------------- 1 | / C library -- abort 2 | 3 | .globl _abort 4 | iot = 4 5 | 6 | _abort: 7 | mov r5,-(sp) 8 | mov sp,r5 9 | iot 10 | mov (sp)+,r5 11 | rts pc 12 | -------------------------------------------------------------------------------- /source/s4/abs.s: -------------------------------------------------------------------------------- 1 | / abs - int absolute value. 2 | / fabs - floating abs 3 | 4 | .globl _abs 5 | _abs: 6 | mov 2(sp),r0 7 | bge 1f 8 | neg r0 9 | 1: 10 | rts pc 11 | 12 | .globl _fabs 13 | _fabs: 14 | movf 2(sp),fr0 15 | absf fr0 16 | rts pc 17 | -------------------------------------------------------------------------------- /source/s4/atoi.c: -------------------------------------------------------------------------------- 1 | atoi(ap) 2 | char *ap; 3 | { 4 | register n, c; 5 | register char *p; 6 | int f; 7 | 8 | p = ap; 9 | n = 0; 10 | f = 0; 11 | loop: 12 | while(*p == ' ' || *p == ' ') 13 | p++; 14 | if(*p == '-') { 15 | f++; 16 | p++; 17 | goto loop; 18 | } 19 | while(*p >= '0' && *p <= '9') 20 | n = n*10 + *p++ - '0'; 21 | if(f) 22 | n = -n; 23 | return(n); 24 | } 25 | -------------------------------------------------------------------------------- /source/s4/cerror.s: -------------------------------------------------------------------------------- 1 | / C return sequence which 2 | / sets errno, returns -1. 3 | 4 | .globl cerror 5 | .comm _errno,2 6 | 7 | cerror: 8 | mov r0,_errno 9 | mov $-1,r0 10 | mov r5,sp 11 | mov (sp)+,r5 12 | rts pc 13 | -------------------------------------------------------------------------------- /source/s4/chdir.s: -------------------------------------------------------------------------------- 1 | / C library -- chdir 2 | 3 | / error = chdir(string); 4 | 5 | .globl _chdir, cerror 6 | 7 | _chdir: 8 | mov r5,-(sp) 9 | mov sp,r5 10 | mov 4(r5),0f 11 | sys 0; 9f 12 | bec 1f 13 | jmp cerror 14 | 1: 15 | clr r0 16 | mov (sp)+,r5 17 | rts pc 18 | .data 19 | 9: 20 | sys chdir; 0:.. 21 | -------------------------------------------------------------------------------- /source/s4/chmod.s: -------------------------------------------------------------------------------- 1 | / C library -- chmod 2 | 3 | / error = chmod(string, mode); 4 | 5 | .globl _chmod, cerror 6 | 7 | _chmod: 8 | mov r5,-(sp) 9 | mov sp,r5 10 | mov 4(r5),0f 11 | mov 6(r5),0f+2 12 | sys 0; 9f 13 | bec 1f 14 | jmp cerror 15 | 1: 16 | clr r0 17 | mov (sp)+,r5 18 | rts pc 19 | .data 20 | 9: 21 | sys chmod; 0:..; .. 22 | -------------------------------------------------------------------------------- /source/s4/chown.s: -------------------------------------------------------------------------------- 1 | / C library -- chown 2 | 3 | / error = chown(string, owner); 4 | 5 | .globl _chown, cerror 6 | 7 | _chown: 8 | mov r5,-(sp) 9 | mov sp,r5 10 | mov 4(r5),0f 11 | mov 6(r5),0f+2 12 | sys 0; 9f 13 | bec 1f 14 | jmp cerror 15 | 1: 16 | clr r0 17 | mov (sp)+,r5 18 | rts pc 19 | .data 20 | 9: 21 | sys chown; 0:..; .. 22 | -------------------------------------------------------------------------------- /source/s4/close.s: -------------------------------------------------------------------------------- 1 | / C library -- close 2 | 3 | / error = close(file); 4 | 5 | .globl _close, cerror 6 | 7 | _close: 8 | mov r5,-(sp) 9 | mov sp,r5 10 | mov 4(r5),r0 11 | sys close 12 | bec 1f 13 | jmp cerror 14 | 1: 15 | clr r0 16 | mov (sp)+,r5 17 | rts pc 18 | -------------------------------------------------------------------------------- /source/s4/creat.s: -------------------------------------------------------------------------------- 1 | / C library -- creat 2 | 3 | / file = creat(string, mode); 4 | / 5 | / file == -1 if error 6 | 7 | .globl _creat, cerror 8 | 9 | _creat: 10 | mov r5,-(sp) 11 | mov sp,r5 12 | mov 4(r5),0f 13 | mov 6(r5),0f+2 14 | sys 0; 9f 15 | bec 1f 16 | jmp cerror 17 | 1: 18 | mov (sp)+,r5 19 | rts pc 20 | .data 21 | 9: 22 | sys creat; 0:..; .. 23 | -------------------------------------------------------------------------------- /source/s4/crt0.s: -------------------------------------------------------------------------------- 1 | / C runtime startoff 2 | 3 | .globl savr5 4 | .globl _exit 5 | 6 | .globl _main 7 | 8 | start: 9 | setd 10 | mov sp,r0 11 | mov (r0),-(sp) 12 | tst (r0)+ 13 | mov r0,2(sp) 14 | jsr pc,_main 15 | mov r0,(sp) 16 | jsr pc,*$_exit 17 | sys exit 18 | 19 | .bss 20 | savr5: .=.+2 21 | -------------------------------------------------------------------------------- /source/s4/csv.s: -------------------------------------------------------------------------------- 1 | / C register save and restore -- version 12/74 2 | 3 | .globl csv 4 | .globl cret 5 | 6 | csv: 7 | mov r5,r0 8 | mov sp,r5 9 | mov r4,-(sp) 10 | mov r3,-(sp) 11 | mov r2,-(sp) 12 | tst -(sp) 13 | jmp (r0) 14 | 15 | cret: 16 | mov r5,r1 17 | mov -(r1),r4 18 | mov -(r1),r3 19 | mov -(r1),r2 20 | mov r5,sp 21 | mov (sp)+,r5 22 | rts pc 23 | -------------------------------------------------------------------------------- /source/s4/dup.s: -------------------------------------------------------------------------------- 1 | / C library -- dup 2 | 3 | / f = dup(of) 4 | / f == -1 for error 5 | 6 | dup = 41. 7 | 8 | .globl _dup, cerror 9 | 10 | _dup: 11 | mov r5,-(sp) 12 | mov sp,r5 13 | mov 4(r5),r0 14 | sys dup 15 | bec 1f 16 | jmp cerror 17 | 1: 18 | mov (sp)+,r5 19 | rts pc 20 | -------------------------------------------------------------------------------- /source/s4/errlst.c: -------------------------------------------------------------------------------- 1 | char *sys_errlist[] { 2 | "Error 0", 3 | "Not super-user", 4 | "No such file or directory", 5 | "No such process", 6 | "Interrupted system call", 7 | "I/O error", 8 | "No such device or address", 9 | "Arg list too long", 10 | "Exec format error", 11 | "Bad file number", 12 | "No children", 13 | "No more processes", 14 | "Not enough core", 15 | "Permission denied", 16 | "Error 14", 17 | "Block device required", 18 | "Mount device busy", 19 | "File exists", 20 | "Cross-device link", 21 | "No such device", 22 | "Not a directory", 23 | "Is a directory", 24 | "Invalid argument", 25 | "File table overflow", 26 | "Too many open files", 27 | "Not a typewriter", 28 | "Text file busy", 29 | "File too large", 30 | "No space left on device", 31 | "Illegal seek", 32 | "Read-only file system", 33 | "Too many links", 34 | "Broken Pipe", 35 | }; 36 | int sys_nerr { sizeof sys_errlist/sizeof sys_errlist[0] }; 37 | -------------------------------------------------------------------------------- /source/s4/execl.s: -------------------------------------------------------------------------------- 1 | / C library -- execl 2 | 3 | / execl(file, arg1, arg2, ... , 0); 4 | / 5 | 6 | .globl _execl, cerror 7 | 8 | _execl: 9 | mov r5,-(sp) 10 | mov sp,r5 11 | mov 4(r5),0f 12 | mov r5,r0 13 | add $6,r0 14 | mov r0,0f+2 15 | sys 0; 9f 16 | jmp cerror 17 | .data 18 | 9: 19 | sys exec; 0:..; .. 20 | -------------------------------------------------------------------------------- /source/s4/execv.s: -------------------------------------------------------------------------------- 1 | / C library -- execv 2 | 3 | / execv(file, argv); 4 | / 5 | / where argv is a vector argv[0] ... argv[x], 0 6 | / last vector element must be 0 7 | / 8 | / The _exectrap flags is used by the debugger and causes 9 | / a trace trap on the first instruction of the executed instruction 10 | / to give a chance to set breakpoints. 11 | 12 | .globl _execv, cerror 13 | .comm __exectrap,2 14 | rtt = 6 15 | 16 | _execv: 17 | mov r5,-(sp) 18 | mov sp,r5 19 | mov 4(r5),0f 20 | mov 6(r5),0f+2 21 | tst __exectrap 22 | beq 1f 23 | mov $170020,-(sp) / t-bit 24 | mov $1f,-(sp) 25 | rtt 26 | 1: 27 | sys 0; 9f 28 | jmp cerror 29 | .data 30 | 9: 31 | sys exec; 0:..; .. 32 | -------------------------------------------------------------------------------- /source/s4/exit.s: -------------------------------------------------------------------------------- 1 | / C library -- exit 2 | 3 | / exit(code) 4 | / code is return in r0 to system 5 | 6 | .globl _exit 7 | 8 | _exit: 9 | mov r5,-(sp) 10 | mov sp,r5 11 | mov 4(r5),r0 12 | sys exit 13 | 14 | -------------------------------------------------------------------------------- /source/s4/fcrt0.s: -------------------------------------------------------------------------------- 1 | / C runtime startoff 2 | / with floating point interpreter 3 | 4 | .globl savr5 5 | .globl fptrap 6 | .globl _exit 7 | 8 | .globl _main 9 | 10 | start: 11 | sys signal; 4; fptrap 12 | setd 13 | mov sp,r0 14 | mov (r0),-(sp) 15 | tst (r0)+ 16 | mov r0,2(sp) 17 | jsr pc,_main 18 | mov r0,(sp) 19 | jsr pc,*$_exit 20 | sys exit 21 | 22 | .bss 23 | savr5: .=.+2 24 | -------------------------------------------------------------------------------- /source/s4/ffltpr.s: -------------------------------------------------------------------------------- 1 | / C library-- fake floating output 2 | 3 | .globl pfloat 4 | .globl pscien 5 | 6 | pfloat: 7 | pscien: 8 | add $8,r4 9 | movb $'?,(r3)+ 10 | rts pc 11 | -------------------------------------------------------------------------------- /source/s4/fltpr.s: -------------------------------------------------------------------------------- 1 | / C library-- floating output 2 | 3 | .globl pfloat 4 | .globl pscien 5 | .globl fltused 6 | 7 | .globl _ndigit 8 | .globl ecvt 9 | .globl fcvt 10 | 11 | fltused: / force loading 12 | pfloat: 13 | mov r0,_ndigit 14 | tst r2 15 | bne 1f 16 | mov $6,_ndigit 17 | 1: 18 | movf (r4)+,fr0 19 | jsr pc,fcvt 20 | tst r1 21 | beq 1f 22 | movb $'-,(r3)+ 23 | 1: 24 | tst r2 25 | bgt 1f 26 | movb $'0,(r3)+ 27 | 1: 28 | mov r2,r1 29 | ble 1f 30 | 2: 31 | movb (r0)+,(r3)+ 32 | sob r1,2b 33 | 1: 34 | mov _ndigit,r1 35 | beq 1f 36 | movb $'.,(r3)+ 37 | 1: 38 | neg r2 39 | ble 1f 40 | 2: 41 | dec r1 42 | blt 1f 43 | movb $'0,(r3)+ 44 | sob r2,2b 45 | 1: 46 | tst r1 47 | ble 2f 48 | 1: 49 | movb (r0)+,(r3)+ 50 | sob r1,1b 51 | 2: 52 | rts pc 53 | 54 | pscien: 55 | mov r0,_ndigit 56 | tst r2 57 | bne 1f 58 | mov $6,_ndigit 59 | 1: 60 | movf (r4)+,fr0 61 | jsr pc,ecvt 62 | tst r1 63 | beq 1f 64 | movb $'-,(r3)+ 65 | 1: 66 | movb (r0)+,(r3)+ 67 | movb $'.,(r3)+ 68 | mov _ndigit,r1 69 | dec r1 70 | ble 1f 71 | 2: 72 | movb (r0)+,(r3)+ 73 | sob r1,2b 74 | 1: 75 | movb $'e,(r3)+ 76 | dec r2 77 | mov r2,r1 78 | bge 1f 79 | movb $'-,(r3)+ 80 | neg r1 81 | br 2f 82 | 1: 83 | movb $'+,(r3)+ 84 | 2: 85 | clr r0 86 | div $10.,r0 87 | add $'0,r0 88 | movb r0,(r3)+ 89 | add $'0,r1 90 | movb r1,(r3)+ 91 | rts pc 92 | -------------------------------------------------------------------------------- /source/s4/fork.s: -------------------------------------------------------------------------------- 1 | / C library -- fork 2 | 3 | / pid = fork(); 4 | / 5 | / pid == 0 in child process; pid == -1 means error return 6 | / in child, parents id is in par_uid if needed 7 | 8 | .globl _fork, cerror, _par_uid 9 | 10 | _fork: 11 | mov r5,-(sp) 12 | mov sp,r5 13 | sys fork 14 | br 1f 15 | bec 2f 16 | jmp cerror 17 | 1: 18 | mov r0,_par_uid 19 | clr r0 20 | 2: 21 | mov (sp)+,r5 22 | rts pc 23 | .bss 24 | _par_uid: .=.+2 25 | -------------------------------------------------------------------------------- /source/s4/fstat.s: -------------------------------------------------------------------------------- 1 | / C library -- fstat 2 | 3 | / error = fstat(file, statbuf); 4 | 5 | / int statbuf[17] or 6 | / char statbuf[34] 7 | / as appropriate 8 | 9 | .globl _fstat, cerror 10 | 11 | _fstat: 12 | mov r5,-(sp) 13 | mov sp,r5 14 | mov 4(r5),r0 15 | mov 6(r5),0f 16 | sys 0; 9f 17 | bec 1f 18 | jmp cerror 19 | 1: 20 | clr r0 21 | mov (sp)+,r5 22 | rts pc 23 | .data 24 | 9: 25 | sys fstat; 0:.. 26 | -------------------------------------------------------------------------------- /source/s4/getc.s: -------------------------------------------------------------------------------- 1 | / getw/getc -- get words/characters from input file 2 | / fopen -- open a file for use by get(c|w) 3 | 4 | indir = 0 5 | 6 | .globl _getc, _getw, _fopen 7 | .globl cerror 8 | .comm _errno,2 9 | 10 | _fopen: 11 | mov r5,-(sp) 12 | mov sp,r5 13 | mov 4(r5),0f 14 | sys 0; 9f 15 | .data 16 | 9: sys open; 0:..; 0 17 | .text 18 | bes badret 19 | mov 6(r5),r1 20 | mov r0,(r1)+ 21 | clr (r1)+ 22 | clr r0 23 | mov (sp)+,r5 24 | rts pc 25 | 26 | _getw: 27 | clr _errno 28 | mov r5,-(sp) 29 | mov sp,r5 30 | mov 4(r5),r1 31 | sub $2,2(r1) 32 | bge 1f 33 | cmp 2(r1),$-1 34 | blt 2f 35 | movb *4(r1),-(sp) 36 | jsr pc,fill 37 | mov 4(r1),r0 38 | br 3f 39 | 2: 40 | jsr pc,fill 41 | dec 2(r1) 42 | 1: 43 | mov 4(r1),r0 44 | movb (r0)+,-(sp) 45 | 3: 46 | movb (r0)+,1(sp) 47 | mov r0,4(r1) 48 | mov (sp)+,r0 49 | mov (sp)+,r5 50 | rts pc 51 | 52 | _getc: 53 | mov r5,-(sp) 54 | mov sp,r5 55 | mov 4(r5),r1 56 | dec 2(r1) 57 | bge 1f 58 | jsr pc,fill 59 | 1: 60 | clr r0 61 | bisb *4(r1),r0 62 | inc 4(r1) 63 | mov (sp)+,r5 64 | rts pc 65 | 66 | fill: 67 | mov r1,r0 68 | add $6,r0 69 | mov r0,0f 70 | mov r0,4(r1) 71 | mov (r1),r0 72 | sys 0; 9f 73 | .data 74 | 9: sys read; 0:..; 512. 75 | .text 76 | bes badret 77 | dec r0 78 | bmi badret 79 | mov r0,2(r1) 80 | rts pc 81 | 82 | badret: 83 | jmp cerror 84 | -------------------------------------------------------------------------------- /source/s4/getchr.s: -------------------------------------------------------------------------------- 1 | / getchar() -- get a character from input file fin 2 | 3 | .globl _getchar 4 | .comm _errno,2 5 | .comm _fin,518. 6 | 7 | _getchar: 8 | mov r5,-(sp) 9 | mov sp,r5 10 | dec _fin+2 11 | bge 1f 12 | mov $_fin+6,_fin+4 13 | mov _fin,r0 14 | sys read; _fin+6; 512. 15 | bes badret 16 | tst r0 17 | beq badret 18 | dec r0 19 | mov r0,_fin+2 20 | 1: 21 | clr r0 22 | bisb *_fin+4,r0 23 | inc _fin+4 24 | mov (sp)+,r5 25 | rts pc 26 | 27 | badret: 28 | mov r0,_errno 29 | clr r0 30 | clr _fin+2 31 | mov (sp)+,r5 32 | rts pc 33 | -------------------------------------------------------------------------------- /source/s4/getcsw.s: -------------------------------------------------------------------------------- 1 | / C library - getcsw 2 | 3 | / csw = getcsw(); 4 | 5 | .globl _getcsw 6 | 7 | _getcsw: 8 | mov r5,-(sp) 9 | mov sp,r5 10 | sys 38. 11 | mov (sp)+,r5 12 | rts pc 13 | -------------------------------------------------------------------------------- /source/s4/getgid.s: -------------------------------------------------------------------------------- 1 | / C library -- getgid 2 | 3 | / gid = getgid(); 4 | / 5 | 6 | getgid = 47. 7 | .globl _getgid 8 | 9 | _getgid: 10 | mov r5,-(sp) 11 | mov sp,r5 12 | sys getgid 13 | mov (sp)+,r5 14 | rts pc 15 | -------------------------------------------------------------------------------- /source/s4/getpid.s: -------------------------------------------------------------------------------- 1 | / getpid -- get process ID 2 | 3 | getpid = 20. 4 | 5 | .globl _getpid 6 | 7 | _getpid: 8 | mov r5,-(sp) 9 | mov sp,r5 10 | sys getpid 11 | mov (sp)+,r5 12 | rts pc 13 | 14 | -------------------------------------------------------------------------------- /source/s4/getpw.c: -------------------------------------------------------------------------------- 1 | getpw(uid, buf) 2 | int uid; 3 | char buf[]; 4 | { 5 | auto pbuf[259]; 6 | static pwf; 7 | register n, c; 8 | register char *bp; 9 | 10 | if(pwf == 0) 11 | pwf = open("/etc/passwd", 0); 12 | if(pwf < 0) 13 | return(1); 14 | seek(pwf, 0, 0); 15 | pbuf[0] = pwf; 16 | pbuf[1] = 0; 17 | pbuf[2] = 0; 18 | uid =& 0377; 19 | 20 | for (;;) { 21 | bp = buf; 22 | while((c=getc(pbuf)) != '\n') { 23 | if(c <= 0) 24 | return(1); 25 | *bp++ = c; 26 | } 27 | *bp++ = '\0'; 28 | bp = buf; 29 | n = 3; 30 | while(--n) 31 | while((c = *bp++) != ':') 32 | if(c == '\n') 33 | return(1); 34 | while((c = *bp++) != ':') { 35 | if(c<'0' || c>'9') 36 | continue; 37 | n = n*10+c-'0'; 38 | } 39 | if(n == uid) 40 | return(0); 41 | } 42 | return(1); 43 | } 44 | -------------------------------------------------------------------------------- /source/s4/getuid.s: -------------------------------------------------------------------------------- 1 | / C library -- getuid 2 | 3 | / uid = getuid(); 4 | / 5 | 6 | .globl _getuid 7 | 8 | _getuid: 9 | mov r5,-(sp) 10 | mov sp,r5 11 | sys getuid 12 | mov (sp)+,r5 13 | rts pc 14 | -------------------------------------------------------------------------------- /source/s4/gtty.s: -------------------------------------------------------------------------------- 1 | / C library -- gtty 2 | 3 | / error = gtty(filep, ttyvec); 4 | 5 | / filep is descriptor of open tty 6 | / ttyvec[0, 1, 2] correspond to args of gtty 7 | 8 | .globl _gtty, cerror 9 | 10 | _gtty: 11 | mov r5,-(sp) 12 | mov sp,r5 13 | mov 4(r5),r0 14 | mov 6(r5),0f 15 | sys 0; 9f 16 | bec 1f 17 | jmp cerror 18 | 1: 19 | clr r0 20 | mov (sp)+,r5 21 | rts pc 22 | .data 23 | 9: 24 | sys gtty; 0:.. 25 | -------------------------------------------------------------------------------- /source/s4/hmul.s: -------------------------------------------------------------------------------- 1 | .globl _hmul 2 | 3 | _hmul: 4 | mov 2(sp),r0 5 | mul 4(sp),r0 6 | rts pc 7 | -------------------------------------------------------------------------------- /source/s4/kill.s: -------------------------------------------------------------------------------- 1 | / C library -- kill 2 | 3 | .globl _kill, cerror 4 | kill = 37. 5 | indir = 0 6 | 7 | _kill: 8 | mov r5,-(sp) 9 | mov sp,r5 10 | mov 4(sp),r0 11 | mov 6(sp),8f 12 | sys indir; 9f 13 | bec 1f 14 | jmp cerror 15 | 1: 16 | clr r0 17 | mov (sp)+,r5 18 | rts pc 19 | 20 | .data 21 | 9: 22 | sys kill; 8:.. 23 | -------------------------------------------------------------------------------- /source/s4/ladd.s: -------------------------------------------------------------------------------- 1 | / C routine-- long integer subtract and add 2 | 3 | / ladd/lsub (a, b, c); 4 | / int a[2], b[2], c[2]; 5 | / a = b +- c; 6 | 7 | .globl _lsub 8 | .globl _ladd 9 | .globl csv 10 | .globl cret 11 | 12 | _lsub: 13 | jsr r5,csv 14 | mov 6(r5),r2 15 | mov (r2)+,r0 16 | mov (r2),r1 17 | mov 10(r5),r2 18 | sub (r2)+,r0 19 | sub (r2),r1 20 | sbc r0 21 | mov 4(r5),r2 22 | mov r0,(r2)+ 23 | mov r1,(r2) 24 | jmp cret 25 | 26 | _ladd: 27 | jsr r5,csv 28 | mov 6(r5),r2 29 | mov (r2)+,r0 30 | mov (r2),r1 31 | mov 10(r5),r2 32 | add (r2)+,r0 33 | add (r2),r1 34 | adc r0 35 | mov 4(r5),r2 36 | mov r0,(r2)+ 37 | mov r1,(r2) 38 | jmp cret 39 | -------------------------------------------------------------------------------- /source/s4/ldfps.s: -------------------------------------------------------------------------------- 1 | ldfps = 170100^tst 2 | / 3 | / ldfps(number); 4 | 5 | .globl _ldfps 6 | _ldfps: 7 | mov r5,-(sp) 8 | mov sp,r5 9 | ldfps 4(r5) 10 | mov (sp)+,r5 11 | rts pc 12 | -------------------------------------------------------------------------------- /source/s4/link.s: -------------------------------------------------------------------------------- 1 | / C library -- link 2 | 3 | / error = link(old-file, new-file); 4 | / 5 | 6 | .globl _link, cerror 7 | 8 | _link: 9 | mov r5,-(sp) 10 | mov sp,r5 11 | mov 4(r5),0f 12 | mov 6(r5),0f+2 13 | sys 0; 9f 14 | bec 1f 15 | jmp cerror 16 | 1: 17 | clr r0 18 | mov (sp)+,r5 19 | rts pc 20 | .data 21 | 9: 22 | sys link; 0:..; .. 23 | -------------------------------------------------------------------------------- /source/s4/locv.s: -------------------------------------------------------------------------------- 1 | / C library -- long output conversion 2 | 3 | .globl _locv 4 | 5 | _locv: 6 | mov r5,-(sp) 7 | mov sp,r5 8 | mov r4,-(sp) 9 | mov r3,-(sp) 10 | mov r2,-(sp) 11 | mov $buf,r4 12 | mov 6(r5),r3 13 | mov 4(r5),r2 14 | bpl 1f 15 | neg r2 16 | neg r3 17 | sbc r2 18 | movb $'-,(r4)+ 19 | 1: 20 | jsr pc,1f 21 | clrb (r4)+ 22 | mov $buf,r0 23 | mov (sp)+,r2 24 | mov (sp)+,r3 25 | mov (sp)+,r4 26 | mov (sp)+,r5 27 | rts pc 28 | 29 | 1: 30 | jsr pc,divid 31 | add $'0,r1 32 | mov r1,-(sp) 33 | ashc $0,r2 34 | beq 1f 35 | jsr pc,1b 36 | 1: 37 | movb (sp)+,(r4)+ 38 | rts pc 39 | 40 | divid: 41 | clr r1 42 | mov $32.,r0 43 | 1: 44 | ashc $1,r2 45 | rol r1 46 | cmp r1,$10. 47 | blo 2f 48 | sub $10.,r1 49 | inc r3 50 | 2: 51 | sob r0,1b 52 | rts pc 53 | 54 | 55 | .bss 56 | buf: .=.+12. 57 | -------------------------------------------------------------------------------- /source/s4/ltod.s: -------------------------------------------------------------------------------- 1 | / C library 2 | / return floating-point from long integer 3 | / d = ltod(l) 4 | 5 | .globl _ltod 6 | _ltod: 7 | mov r5,-(sp) 8 | mov sp,r5 9 | setl 10 | movif *4(r5),fr0 11 | seti 12 | mov (sp)+,r5 13 | rts pc 14 | 15 | / return long integer from floating 16 | / dtol(d, l) 17 | 18 | .globl _dtol 19 | _dtol: 20 | mov r5,-(sp) 21 | mov sp,r5 22 | setl 23 | movf 4(r5),fr0 24 | movfi fr0,*12.(r5) 25 | seti 26 | mov (sp)+,r5 27 | rts pc 28 | -------------------------------------------------------------------------------- /source/s4/run: -------------------------------------------------------------------------------- 1 | as crt0.s 2 | cmp a.out /lib/crt0.o 3 | cp a.out /lib/crt0.o 4 | as fcrt0.s 5 | cmp a.out /lib/fcrt0.o 6 | cp a.out /lib/fcrt0.o 7 | as abort.s; mv a.out abort.o 8 | as abs.s; mv a.out abs.o 9 | as alloc.s; mv a.out alloc.o 10 | as atof.s; mv a.out atof.o 11 | as cerror.s; mv a.out cerror.o 12 | as chdir.s; mv a.out chdir.o 13 | as chmod.s; mv a.out chmod.o 14 | as chown.s; mv a.out chown.o 15 | as close.s; mv a.out close.o 16 | as creat.s; mv a.out creat.o 17 | as csv.s; mv a.out csv.o 18 | as dup.s; mv a.out dup.o 19 | as execl.s; mv a.out execl.o 20 | as execv.s; mv a.out execv.o 21 | as exit.s; mv a.out exit.o 22 | as ffltpr.s; mv a.out ffltpr.o 23 | as fltpr.s; mv a.out fltpr.o 24 | as fork.s; mv a.out fork.o 25 | as fstat.s; mv a.out fstat.o 26 | as getc.s; mv a.out getc.o 27 | as getchr.s; mv a.out getchr.o 28 | as getcsw.s; mv a.out getcsw.o 29 | as getgid.s; mv a.out getgid.o 30 | as getpid.s; mv a.out getpid.o 31 | as getuid.s; mv a.out getuid.o 32 | as gtty.s; mv a.out gtty.o 33 | as hmul.s; mv a.out hmul.o 34 | as kill.s; mv a.out kill.o 35 | as ladd.s; mv a.out ladd.o 36 | as ldfps.s; mv a.out ldfps.o 37 | as link.s; mv a.out link.o 38 | as locv.s; mv a.out locv.o 39 | as ltod.s; mv a.out ltod.o 40 | cc -c -O *.c 41 | ar r /lib/libc.a 42 | rm *.o 43 | -------------------------------------------------------------------------------- /source/s5/makdir.s: -------------------------------------------------------------------------------- 1 | / C library -- makdir 2 | 3 | / error = makdir(string); 4 | 5 | .globl _makdir, cerror 6 | 7 | _makdir: 8 | mov r5,-(sp) 9 | mov sp,r5 10 | mov 4(r5),0f 11 | sys 0; 9f 12 | bec 1f 13 | jmp cerror 14 | 1: 15 | clr r0 16 | mov (sp)+,r5 17 | rts pc 18 | .data 19 | 9: 20 | sys makdir; 0:.. 21 | -------------------------------------------------------------------------------- /source/s5/mcount.s: -------------------------------------------------------------------------------- 1 | / count subroutine calls during profiling 2 | 3 | .globl mcount 4 | .comm countbase,2 5 | 6 | mcount: 7 | mov (r0),r1 8 | bne 1f 9 | mov countbase,r1 10 | beq 2f 11 | add $6,countbase 12 | mov (sp),(r1)+ 13 | mov r1,(r0) 14 | 1: 15 | inc 2(r1) 16 | bne 2f 17 | inc (r1) 18 | 2: 19 | rts pc 20 | 21 | -------------------------------------------------------------------------------- /source/s5/mcrt0.s: -------------------------------------------------------------------------------- 1 | / C runtime startoff including monitoring 2 | 3 | cbufs = 150. 4 | 5 | .globl _monitor 6 | .globl _sbrk 7 | .globl _main 8 | .globl _exit 9 | .globl _etext 10 | .comm countbase,2 11 | 12 | .comm savr5,2 13 | 14 | start: 15 | setd 16 | mov sp,r0 17 | mov (r0),-(sp) 18 | tst (r0)+ 19 | mov r0,2(sp) 20 | 21 | mov $_etext,r1 22 | sub $eprol,r1 23 | add $7,r1 24 | ash $-3,r1 25 | bic $!17777,r1 26 | mov $cbufs,-(sp) 27 | add $3*[cbufs+1],r1 28 | mov r1,-(sp) 29 | asl r1 30 | mov r1,-(sp) 31 | jsr pc,_sbrk 32 | tst (sp)+ 33 | cmp r0,$-1 34 | beq 9f 35 | mov r0,-(sp) 36 | add $6,r0 37 | mov r0,countbase 38 | mov $_etext,-(sp) 39 | mov $eprol,-(sp) 40 | jsr pc,_monitor 41 | add $10.,sp 42 | jsr pc,_main 43 | cmp (sp)+,(sp)+ 44 | jsr pc,_exit 45 | 46 | 9: 47 | mov $2,r0 48 | sys write; 8f; 9f-8f 49 | 50 | .data; 8: ; 9:.even; .text 51 | 52 | _exit: 53 | mov r5,-(sp) 54 | mov sp,r5 55 | clr -(sp) 56 | jsr pc,_monitor 57 | tst (sp)+ 58 | mov 4(r5),r0 59 | sys exit 60 | eprol: 61 | -------------------------------------------------------------------------------- /source/s5/mdate.s: -------------------------------------------------------------------------------- 1 | / C library-- mdate 2 | 3 | .globl _mdate, cerror 4 | 5 | _mdate: 6 | mov r5,-(sp) 7 | mov sp,r5 8 | mov 4(r5),0f 9 | mov 6(r5),r1 10 | mov (r1)+,r0 11 | mov (r1),r1 12 | sys 0; 9f 13 | bec 1f 14 | jmp cerror 15 | 1: 16 | clr r0 17 | mov (sp)+,r5 18 | rts pc 19 | .data 20 | 9: 21 | sys mdate; 0:.. 22 | -------------------------------------------------------------------------------- /source/s5/mknod.s: -------------------------------------------------------------------------------- 1 | / C library -- mknod 2 | 3 | / error = mknod(string, mode, major.minor); 4 | 5 | .globl _mknod, cerror 6 | 7 | mknod = 14. 8 | _mknod: 9 | mov r5,-(sp) 10 | mov sp,r5 11 | mov 4(r5),0f 12 | mov 6(r5),0f+2 13 | mov 8(r5),0f+4 14 | sys 0; 9f 15 | bec 1f 16 | jmp cerror 17 | 1: 18 | clr r0 19 | mov (sp)+,r5 20 | rts pc 21 | .data 22 | 9: 23 | sys mknod; 0:..; ..; .. 24 | -------------------------------------------------------------------------------- /source/s5/mon.c: -------------------------------------------------------------------------------- 1 | monitor(lowpc, highpc, buf, bufsiz, cntsiz) 2 | char *lowpc, *highpc; 3 | int *buf, bufsiz; 4 | { 5 | register char *o; 6 | static *sbuf, ssiz; 7 | 8 | if (lowpc == 0) { 9 | profil(0, 0, 0, 0); 10 | o = creat("mon.out", 0666); 11 | write(o, sbuf, ssiz<<1); 12 | close(o); 13 | return; 14 | } 15 | if (nargs() <= 4) 16 | cntsiz = 0; 17 | ssiz = bufsiz; 18 | buf[0] = lowpc; 19 | buf[1] = highpc; 20 | buf[2] = cntsiz; 21 | sbuf = buf; 22 | buf =+ 3*(cntsiz+1); 23 | bufsiz =- 3*(cntsiz+1); 24 | if (bufsiz<=0) 25 | return; 26 | o = ((highpc - lowpc)>>1) & 077777; 27 | if(bufsiz < o) 28 | o = ldiv(bufsiz, 0, o<<1); else 29 | o = 077777; 30 | profil(buf, bufsiz<<1, lowpc, o<<1); 31 | } 32 | -------------------------------------------------------------------------------- /source/s5/mount.s: -------------------------------------------------------------------------------- 1 | / C library -- mount 2 | 3 | / error = mount(dev, file, flag) 4 | 5 | .globl _mount, cerror 6 | 7 | _mount: 8 | mov r5,-(sp) 9 | mov sp,r5 10 | mov 4(sp),0f 11 | mov 6(sp),0f+2 12 | mov 8(sp),0f+4 13 | sys 0; 9f 14 | bec 1f 15 | jmp cerror 16 | 1: 17 | clr r0 18 | mov (sp)+,r5 19 | rts pc 20 | .data 21 | 9: 22 | sys mount; 0:..; ..; .. 23 | -------------------------------------------------------------------------------- /source/s5/nargs.s: -------------------------------------------------------------------------------- 1 | / C library -- nargs 2 | 3 | / WARNING: this routine does not work 4 | / with user I&D space separate. 5 | / Moreover, due to a design botch in 6 | / the 11/45, it cannot be made to work 7 | / by adding mfpi instructions. 8 | 9 | .globl _nargs 10 | 11 | _nargs: 12 | mov r5,-(sp) 13 | mov 2(r5),r1 / pc of caller of caller 14 | mov sp,r5 15 | clr r0 16 | cmp -4(r1),jsrsd 17 | bne 8f 18 | mov $2,r0 19 | 8: 20 | cmp (r1),tsti 21 | bne 1f 22 | add $2,r0 23 | br 2f 24 | 1: 25 | cmp (r1),cmpi 26 | bne 1f 27 | add $4,r0 28 | br 2f 29 | 1: 30 | cmp (r1),addi 31 | bne 1f 32 | add 2(r1),r0 33 | br 2f 34 | 1: 35 | cmp (r1),jmpi 36 | bne 1f 37 | add 2(r1),r1 38 | add $4,r1 39 | br 8b 40 | 1: 41 | cmpb 1(r1),bri+1 42 | bne 2f 43 | mov r0,-(sp) 44 | mov (r1),r0 45 | swab r0 46 | ash $-7,r0 47 | add r0,r1 48 | add $2,r1 49 | mov (sp)+,r0 50 | br 8b 51 | 2: 52 | asr r0 53 | mov (sp)+,r5 54 | rts pc 55 | 56 | .data 57 | jsrsd: jsr pc,*$0 58 | tsti: tst (sp)+ 59 | cmpi: cmp (sp)+,(sp)+ 60 | addi: add $0,sp 61 | jmpi: jmp 0 62 | bri: br . 63 | -------------------------------------------------------------------------------- /source/s5/nice.s: -------------------------------------------------------------------------------- 1 | / C library-- nice 2 | 3 | / error = nice(hownice) 4 | 5 | .globl _nice, cerror 6 | 7 | _nice: 8 | mov r5,-(sp) 9 | mov sp,r5 10 | mov 4(sp),r0 11 | sys nice 12 | bec 1f 13 | jmp cerror 14 | 1: 15 | clr r0 16 | mov (sp)+,r5 17 | rts pc 18 | -------------------------------------------------------------------------------- /source/s5/open.s: -------------------------------------------------------------------------------- 1 | / C library -- open 2 | 3 | / file = open(string, mode) 4 | / 5 | / file == -1 means error 6 | 7 | .globl _open, cerror 8 | 9 | _open: 10 | mov r5,-(sp) 11 | mov sp,r5 12 | mov 4(r5),0f 13 | mov 6(r5),0f+2 14 | sys 0; 9f 15 | bec 1f 16 | jmp cerror 17 | 1: 18 | mov (sp)+,r5 19 | rts pc 20 | .data 21 | 9: 22 | sys open; 0:..; .. 23 | -------------------------------------------------------------------------------- /source/s5/perror.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Print the error indicated 3 | * in the cerror cell. 4 | */ 5 | 6 | int errno; 7 | int sys_nerr; 8 | char *sys_errlist[]; 9 | perror(s) 10 | char *s; 11 | { 12 | register char *c; 13 | register n; 14 | 15 | c = "Unknown error"; 16 | if(errno < sys_nerr) 17 | c = sys_errlist[errno]; 18 | n = strlen(s); 19 | if(n) { 20 | write(2, s, n); 21 | write(2, ": ", 2); 22 | } 23 | write(2, c, strlen(c)); 24 | write(2, "\n", 1); 25 | } 26 | 27 | /* 28 | * Return the number of bytes in a string 29 | */ 30 | 31 | strlen(str) 32 | char *str; 33 | { 34 | register char *s; 35 | 36 | s = str; 37 | while(*s++) 38 | ; 39 | return(s-str-1); 40 | } 41 | -------------------------------------------------------------------------------- /source/s5/pipe.s: -------------------------------------------------------------------------------- 1 | / pipe -- C library 2 | 3 | / pipe(f) 4 | / int f[2]; 5 | 6 | .globl _pipe, cerror 7 | 8 | pipe = 42. 9 | 10 | _pipe: 11 | mov r5,-(sp) 12 | mov sp,r5 13 | sys pipe 14 | bec 1f 15 | jmp cerror 16 | 1: 17 | mov 4(r5),r2 18 | mov r0,(r2)+ 19 | mov r1,(r2) 20 | clr r0 21 | mov (sp)+,r5 22 | rts pc 23 | -------------------------------------------------------------------------------- /source/s5/prof.s: -------------------------------------------------------------------------------- 1 | / profil 2 | 3 | .globl _profil 4 | _profil: 5 | mov r5,-(sp) 6 | mov sp,r5 7 | mov 4(r5),0f 8 | mov 6(r5),0f+2 9 | mov 10(r5),0f+4 10 | mov 12(r5),0f+6 11 | sys 0; 9f 12 | mov (sp)+,r5 13 | rts pc 14 | .data 15 | 9: 16 | sys 44.; 0:..; ..; ..; .. 17 | -------------------------------------------------------------------------------- /source/s5/ptrace.s: -------------------------------------------------------------------------------- 1 | / ptrace -- C library 2 | 3 | / result = ptrace(req, pid, addr, data); 4 | 5 | ptrace = 26. 6 | indir = 0 7 | 8 | .globl _ptrace 9 | .globl cerror, _errno 10 | 11 | _ptrace: 12 | mov r5,-(sp) 13 | mov sp,r5 14 | mov 4.(r5),0f+4 15 | mov 6.(r5),0f+0 16 | mov 8.(r5),0f+2 17 | mov 10.(r5),r0 18 | clr _errno 19 | sys indir; 9f 20 | bec 1f 21 | jmp cerror 22 | 1: 23 | mov (sp)+,r5 24 | rts pc 25 | 26 | .data 27 | 9: 28 | sys ptrace; 0: .=.+6 29 | -------------------------------------------------------------------------------- /source/s5/putchr.s: -------------------------------------------------------------------------------- 1 | / C library -- putchar 2 | 3 | .globl _putchar,_flush 4 | .globl _fout 5 | 6 | _putchar: 7 | mov r5,-(sp) 8 | mov sp,r5 9 | mov _fout+4,r0 10 | bne 1f 11 | jsr pc,fl 12 | mov _fout+4,r0 13 | 1: 14 | movb 4(r5),(r0)+ 15 | beq 1f 16 | inc _fout+4 17 | dec _fout+2 18 | bgt 1f 19 | jsr pc,fl 20 | 1: 21 | mov 4(r5),r0 22 | mov (sp)+,r5 23 | rts pc 24 | 25 | _flush: 26 | mov r5,-(sp) 27 | mov sp,r5 28 | jsr pc,fl 29 | mov (sp)+,r5 30 | rts pc 31 | 32 | fl: 33 | mov _fout+4,r0 34 | beq 1f 35 | sub $_fout+6,r0 36 | mov r0,0f 37 | mov _fout,r0 38 | bne 2f 39 | inc r0 40 | 2: 41 | sys 0; 9f 42 | .data 43 | 9: sys write; _fout+6; 0:.. 44 | .text 45 | 1: 46 | mov $_fout+6,_fout+4 47 | mov $512.,_fout+2 48 | cmp _fout,$2 49 | bhi 1f 50 | mov $1,_fout+2 51 | 1: 52 | rts pc 53 | 54 | .bss 55 | _fout: .=.+518. 56 | -------------------------------------------------------------------------------- /source/s5/read.s: -------------------------------------------------------------------------------- 1 | / C library -- read 2 | 3 | / nread = read(file, buffer, count); 4 | / 5 | / nread ==0 means eof; nread == -1 means error 6 | 7 | .globl _read, cerror 8 | 9 | _read: 10 | mov r5,-(sp) 11 | mov sp,r5 12 | mov 4(r5),r0 13 | mov 6(r5),0f 14 | mov 8(r5),0f+2 15 | sys 0; 9f 16 | bec 1f 17 | jmp cerror 18 | 1: 19 | mov (sp)+,r5 20 | rts pc 21 | .data 22 | 9: 23 | sys read; 0:..; .. 24 | -------------------------------------------------------------------------------- /source/s5/reset.s: -------------------------------------------------------------------------------- 1 | / C library -- reset, setexit 2 | 3 | / reset() 4 | / will generate a "return" from 5 | / the last call to 6 | / setexit() 7 | / by restoring sp, r5 8 | / and doing a return. 9 | / 10 | / useful for going back to the main loop 11 | / after a horrible error in a lowlevel 12 | / routine. 13 | 14 | .globl _setexit 15 | .globl _reset 16 | .globl csv, cret 17 | 18 | _setexit: 19 | jsr r5,csv 20 | mov r5,sr5 21 | mov 2(r5),spc 22 | jmp cret 23 | 24 | _reset: 25 | mov sr5,r5 26 | mov spc,2(r5) 27 | jmp cret 28 | 29 | .bss 30 | sr5: .=.+2 31 | spc: .=.+2 32 | -------------------------------------------------------------------------------- /source/s5/rin.c: -------------------------------------------------------------------------------- 1 | rin() 2 | { 3 | double d; 4 | register n, c, f; 5 | 6 | d = 0.; 7 | f = 0; 8 | n = 0; 9 | loop: 10 | c = getchar(); 11 | if(c == '\0') 12 | exit(); 13 | if(c == '-') { 14 | f++; 15 | goto loop; 16 | } 17 | if(c == '.') { 18 | n++; 19 | goto loop; 20 | } 21 | if(c>='0' && c<='9') { 22 | if(n) 23 | n++; 24 | d = d*10.+c-'0'; 25 | goto loop; 26 | } 27 | if(f) 28 | d = -d; 29 | for(f=1; f;.even 27 | 1: 28 | clrb ktab(r2) 29 | bic $1,r2 30 | neg r2 31 | mov r2,k(f) 32 | jmp succ 33 | 2: 34 | mov i,r0 35 | jsr pc,obuild 36 | jmp generate 37 | -------------------------------------------------------------------------------- /source/tmg/tmgb/ctest.s: -------------------------------------------------------------------------------- 1 | f = r5 2 | .globl j 3 | .globl classtab,jget 4 | .globl ctest 5 | .globl putcstr 6 | .globl succ 7 | 8 | ctest: 9 | inc ctestc 10 | mov r0,-(sp) 11 | jsr pc,jget 12 | asl r0 13 | bit *(sp)+,classtab(r0) 14 | clc 15 | beq 1f 16 | asr r0 17 | jsr pc,putcstr 18 | inc j(f) 19 | sec 20 | 1: 21 | rts pc 22 | 23 | .data 24 | ctestc: 0 25 | -------------------------------------------------------------------------------- /source/tmg/tmgb/decmal.s: -------------------------------------------------------------------------------- 1 | i = r3 2 | .globl putcall,iget,kput,putdec 3 | .globl generate,succ 4 | .globl decimal 5 | 6 | decimal: 7 | mov $1f+1,r0 8 | jsr pc,putcall 9 | jsr pc,iget 10 | mov (r0),r0 11 | jsr pc,kput 12 | jmp succ 13 | 1: 14 | mov (i),r0 15 | jsr pc,putdec 16 | jmp generate 17 | -------------------------------------------------------------------------------- /source/tmg/tmgb/discd.s: -------------------------------------------------------------------------------- 1 | .globl release 2 | .globl discard 3 | .globl iget,succ 4 | 5 | discard: 6 | jsr pc,iget 7 | mov (r0),r1 8 | jsr pc,release 9 | jmp succ 10 | -------------------------------------------------------------------------------- /source/tmg/tmgb/emit.s: -------------------------------------------------------------------------------- 1 | f=r5 2 | g=r4 3 | .globl ofile 4 | .globl dogen 5 | .globl succ 6 | .globl g1,k 7 | .globl emit 8 | 9 | emit: 10 | mov f,-(sp) 11 | add $g1,(sp) 12 | mov g,r1 13 | 1: /look for a translation 14 | cmp (sp),r1 15 | bge 3f /none at all 16 | bit -(r1),$100001 17 | beq 1b 18 | /move it to end of stak 19 | mov (r1)+,r0 20 | 1: 21 | cmp g,r1 22 | ble 1f 23 | mov (r1),-2(r1) 24 | mov r0,(r1)+ 25 | br 1b 26 | 1: 27 | mov ofile,r0 28 | jsr pc,dogen 29 | mov g,r1 30 | 1: 31 | cmp (sp),r1 /try to find prev value of k 32 | bge 1f /nothing more in this stack frame 33 | tst -(r1) 34 | bge 1b /this isnt a k pointer (negative) 35 | mov (r1),k(f) 36 | br 3f 37 | 1: 38 | mov f,r0 /go back to prev stack frame 39 | mov k(r0),k(f) 40 | 3: 41 | tst (sp)+ 42 | jmp succ 43 | -------------------------------------------------------------------------------- /source/tmg/tmgb/end.s: -------------------------------------------------------------------------------- 1 | .globl end 2 | / the driving tables ended just before here 3 | end: 4 | -------------------------------------------------------------------------------- /source/tmg/tmgb/f.s: -------------------------------------------------------------------------------- 1 | .globl .f 2 | .globl succ 3 | .globl seekchar,getword 4 | 5 | .f: 6 | mov (sp),r0 7 | mov r0,6(sp) 8 | mov 4(sp),r1 9 | jsr pc,seekchar 10 | jsr pc,getword 11 | mov r0,(sp) 12 | mov $-1,2(sp) 13 | jmp succ 14 | -------------------------------------------------------------------------------- /source/tmg/tmgb/getnam.s: -------------------------------------------------------------------------------- 1 | i = r3 2 | .globl putcall,kput,obuild 3 | .globl seekchar 4 | .globl getchar 5 | .globl outb, outw, outt 6 | .globl cfile, lfile, flush 7 | .globl iget 8 | .globl sptr 9 | .globl generate,succ 10 | .globl getnam 11 | 12 | getnam: 13 | mov $1f+1,r0 14 | jsr pc,putcall 15 | jsr pc,iget 16 | mov (r0),r0 17 | jsr pc,kput 18 | jsr pc,iget 19 | mov (r0),r0 20 | jsr pc,kput 21 | jmp succ 22 | 1: 23 | cmp cfile,lfile 24 | beq 1f 25 | jsr pc,flush 26 | mov cfile,lfile 27 | 1: 28 | mov (i)+,r1 29 | mov r1,-(sp) 30 | mov (i)+,r0 31 | add $sptr,r0 32 | jsr pc,seekchar 33 | 2: 34 | mov (sp),r1 35 | mov outw,r2 36 | 1: 37 | jsr pc,getchar 38 | tst r0 39 | beq 1f 40 | movb r0,outb(r2) 41 | inc r2 42 | mov r2,outw 43 | cmp r2,$outt 44 | blt 1b 45 | / 46 | jsr pc,flush 47 | br 2b 48 | 1: 49 | tst (sp)+ 50 | jmp generate 51 | -------------------------------------------------------------------------------- /source/tmg/tmgb/ignore.s: -------------------------------------------------------------------------------- 1 | f = r5 2 | .globl n 3 | .globl succ,iget 4 | .globl ignore 5 | 6 | ignore: 7 | jsr pc,iget 8 | mov (r0),n(f) 9 | jmp succ 10 | -------------------------------------------------------------------------------- /source/tmg/tmgb/inc.s: -------------------------------------------------------------------------------- 1 | .globl succ,.u,update 2 | .globl .ia,.ib,.da,.db 3 | 4 | /prefix ++ 5 | .ib: 6 | inc (sp) 7 | jmp .u 8 | /prefix -- 9 | .db: 10 | dec (sp) 11 | jmp .u 12 | /postfix++ 13 | .ia: 14 | inc (sp) 15 | jsr pc,update 16 | dec (sp) 17 | jmp succ 18 | /potsfix -- 19 | .da: 20 | dec (sp) 21 | jsr pc,update 22 | inc (sp) 23 | jmp succ 24 | 25 | -------------------------------------------------------------------------------- /source/tmg/tmgb/infix.s: -------------------------------------------------------------------------------- 1 | .globl .p,sprv 2 | .globl .a,.s,.o,.n,.x 3 | 4 | / + 5 | .a: 6 | jsr pc,sprv 7 | add (sp),4(sp) 8 | br 9f 9 | 10 | / - 11 | .s: 12 | jsr pc,sprv 13 | sub (sp),4(sp) 14 | br 9f 15 | 16 | / | 17 | .o: 18 | jsr pc,sprv 19 | bis (sp),4(sp) 20 | br 9f 21 | 22 | / & 23 | .n: 24 | jsr pc,sprv 25 | com (sp) 26 | bic (sp),4(sp) 27 | br 9f 28 | 29 | / ^ exclusive or 30 | .x: 31 | jsr pc,sprv 32 | mov (sp),r0 33 | xor r0,4(sp) 34 | 9: 35 | jmp .p 36 | -------------------------------------------------------------------------------- /source/tmg/tmgb/jget.s: -------------------------------------------------------------------------------- 1 | f = r5 2 | .globl j,n 3 | .globl input 4 | .globl classtab 5 | .globl jget 6 | 7 | jget: 8 | inc jgetc 9 | 3: 10 | mov j(f),r1 11 | mov r1,r0 12 | bic $inpt-1,r0 13 | bic r0,r1 14 | cmp r0,inpr 15 | beq 1f 16 | inc readc 17 | mov r0,inpr 18 | mov input,r0 19 | sys seek 20 | inpr: 1;0 21 | sys read;inpb;inpt 22 | 2: 23 | cmp r0,$inpt 24 | bge 1f 25 | clrb inpb(r0) 26 | inc r0 27 | br 2b 28 | 1: 29 | movb inpb(r1),r0 30 | asl r0 31 | bit n(f),classtab(r0) 32 | beq 1f 33 | inc j(f) 34 | inc r1 35 | cmp r1,$inpt 36 | blt 1b 37 | br 3b 38 | 1: 39 | asr r0 40 | rts pc 41 | inpt = 128. 42 | .bss 43 | inpb: . = .+inpt 44 | .data 45 | jgetc: 0 46 | readc: 0 47 | -------------------------------------------------------------------------------- /source/tmg/tmgb/lvrv.s: -------------------------------------------------------------------------------- 1 | .globl .lv,.rv 2 | .globl succ 3 | 4 | / unary & 5 | 6 | .lv: 7 | mov 2(sp),(sp) 8 | jmp succ 9 | 10 | / * 11 | 12 | .rv: 13 | mov (sp),2(sp) 14 | mov *2(sp),(sp) 15 | jmp succ 16 | -------------------------------------------------------------------------------- /source/tmg/tmgb/mult.s: -------------------------------------------------------------------------------- 1 | .globl .m,.q,.r 2 | .globl .p,sprv 3 | 4 | .m: 5 | jsr pc,sprv 6 | mov (sp),r0 7 | mpy 4(sp),r0 8 | mov r1,4(sp) 9 | br 1f 10 | 11 | .q: 12 | jsr pc,sprv 13 | mov 4(sp),r1 14 | sxt r0 15 | dvd (sp),r0 16 | mov r0,4(sp) 17 | br 1f 18 | 19 | .r: 20 | jsr pc,sprv 21 | mov 4(sp),r1 22 | sxt r0 23 | dvd (sp),r0 24 | mov r1,4(sp) 25 | 1: 26 | jmp .p 27 | -------------------------------------------------------------------------------- /source/tmg/tmgb/octal.s: -------------------------------------------------------------------------------- 1 | i = r3 2 | .globl putcall,iget,kput,putoct 3 | .globl generate,succ 4 | .globl octal 5 | 6 | octal: 7 | mov $1f+1,r0 8 | jsr pc,putcall 9 | jsr pc,iget 10 | mov (r0),r0 11 | jsr pc,kput 12 | jmp succ 13 | 1: 14 | mov (i),r0 15 | jsr pc,putoct 16 | jmp generate 17 | -------------------------------------------------------------------------------- /source/tmg/tmgb/params.s: -------------------------------------------------------------------------------- 1 | f = r5 2 | .globl iget 3 | .globl env,si 4 | .globl succ 5 | .globl params 6 | 7 | params: 8 | jsr pc,iget 9 | mov (r0),r0 10 | asl r0 11 | mov env(f),r1 12 | add r0,si(r1) 13 | jmp succ 14 | -------------------------------------------------------------------------------- /source/tmg/tmgb/push.s: -------------------------------------------------------------------------------- 1 | .globl succ 2 | .globl iget 3 | .globl push 4 | 5 | push: 6 | jsr pc,iget 7 | mov (r0),r2 8 | mov r2,r1 9 | 1: 10 | mov r1,-(sp) 11 | jsr pc,iget 12 | mov (sp)+,r1 13 | mov r0,-(sp) 14 | mov (r0),-(sp) 15 | dec r2 16 | bgt 1b 17 | mov r1,-(sp) 18 | jsr pc,succ 19 | / preserve c bit from here on 20 | mov (sp)+,r2 21 | 1: 22 | mov (sp)+,*(sp)+ 23 | dec r2 24 | bgt 1b 25 | rts pc /pass sret or fret back to invoking rule 26 | -------------------------------------------------------------------------------- /source/tmg/tmgb/putcal.s: -------------------------------------------------------------------------------- 1 | f = r5 2 | g = r4 3 | .globl k 4 | .globl errcom 5 | .globl ktab,ktat 6 | .globl putcall,kput 7 | 8 | putcall: 9 | jsr pc,kput 10 | mov k(f),(g)+ 11 | rts pc 12 | 13 | kput: 14 | sub $2,k(f) 15 | mov k(f),r1 16 | neg r1 17 | mov r0,ktab(r1) 18 | cmp r1,$ktat 19 | bhis 1f 20 | rts pc 21 | 1: 22 | jsr r0,errcom 23 | ;.even 24 | -------------------------------------------------------------------------------- /source/tmg/tmgb/putdec.s: -------------------------------------------------------------------------------- 1 | .globl putch,obuild 2 | .globl putdec 3 | 4 | putdec: 5 | tst r0 6 | bge 1f 7 | cmp r0,$100000 8 | beq 2f 9 | mov r0,-(sp) 10 | mov $'-,r0 11 | jsr pc,putch 12 | mov (sp)+,r0 13 | neg r0 14 | 1: 15 | alsc $-16.,r0 16 | dvd $10.,r0 17 | beq 1f 18 | mov r1,-(sp) 19 | jsr pc,1b 20 | mov (sp)+,r1 21 | 1: 22 | mov r1,r0 23 | add $'0,r0 24 | jmp putch 25 | 2: 26 | mov $1f,r0 27 | jmp obuild 28 | 1: 29 | <-32768\0>;.even 30 | -------------------------------------------------------------------------------- /source/tmg/tmgb/putoct.s: -------------------------------------------------------------------------------- 1 | .globl putch,obuild 2 | .globl putoct 3 | 4 | 5 | putoct: mov r0,-(sp) 6 | bic $7,r0 7 | bic r0,(sp) 8 | clc 9 | ror r0 10 | ror r0 11 | ror r0 12 | beq 1f 13 | jsr pc,putoct 14 | 1: 15 | mov (sp)+,r0 16 | add $'0,r0 17 | jsr pc,putch 18 | rts pc 19 | -------------------------------------------------------------------------------- /source/tmg/tmgb/px.s: -------------------------------------------------------------------------------- 1 | f = r5 2 | i = r3 3 | .globl j,n 4 | .globl iget,jget 5 | .globl succ,fail 6 | .globl .px,.pxs 7 | 8 | .pxs: 9 | mov i,r0 10 | tst (i)+ 11 | br 1f 12 | .px: 13 | jsr pc,iget 14 | 1: 15 | inc litc 16 | mov n(f),-(sp) 17 | mov j(f),-(sp) 18 | mov r0,-(sp) 19 | 2: 20 | tstb *(sp) 21 | beq 2f 22 | jsr pc,jget 23 | cmpb r0,*(sp) 24 | beq 1f 25 | tst (sp)+ 26 | mov (sp)+,j(f) 27 | mov (sp)+,n(f) 28 | jmp fail 29 | 1: 30 | clr n(f) 31 | inc (sp) 32 | inc j(f) 33 | br 2b 34 | 2: 35 | cmp (sp)+,(sp)+ 36 | mov (sp)+,n(f) 37 | jmp succ 38 | litc: 0 39 | -------------------------------------------------------------------------------- /source/tmg/tmgb/reln.s: -------------------------------------------------------------------------------- 1 | .globl .p,sprv 2 | .globl .eq,.ne,.lt,.le,.gt,.ge 3 | 4 | .eq: 5 | jsr pc,sprv 6 | cmp 4(sp),(sp) 7 | beq true 8 | br false 9 | 10 | .ne: 11 | jsr pc,sprv 12 | cmp 4(sp),(sp) 13 | bne true 14 | br false 15 | .lt: 16 | jsr pc,sprv 17 | cmp 4(sp),(sp) 18 | blt true 19 | br false 20 | 21 | .le: 22 | jsr pc,sprv 23 | cmp 4(sp),(sp) 24 | ble true 25 | br false 26 | 27 | .gt: 28 | jsr pc,sprv 29 | cmp 4(sp),(sp) 30 | bgt true 31 | br false 32 | 33 | .ge: 34 | jsr pc,sprv 35 | cmp 4(sp),(sp) 36 | bge true 37 | br false 38 | 39 | true: 40 | mov $1,4(sp) 41 | jmp .p 42 | 43 | false: 44 | clr 4(sp) 45 | jmp .p 46 | -------------------------------------------------------------------------------- /source/tmg/tmgb/shift.s: -------------------------------------------------------------------------------- 1 | .globl .p,sprv 2 | .globl .sr,.sl 3 | 4 | / >> 5 | .sr: 6 | neg (sp) 7 | 8 | / << 9 | .sl: 10 | mov 4(sp),r1 11 | clr r0 12 | alsc (sp),r0 13 | mov r1,4(sp) 14 | jmp .p 15 | -------------------------------------------------------------------------------- /source/tmg/tmgb/string.s: -------------------------------------------------------------------------------- 1 | f = r5 2 | i = r3 3 | .globl j 4 | .globl succ 5 | .globl ctest,iget 6 | .globl string 7 | 8 | string: 9 | tst -(sp) 10 | jsr pc,iget 11 | 1: 12 | mov j(f),(sp) 13 | mov r0,-(sp) 14 | jsr pc,ctest 15 | mov (sp)+,r0 16 | bcs 1b 17 | mov (sp)+,j(f) 18 | jmp succ 19 | -------------------------------------------------------------------------------- /source/tmg/tmgb/table.s: -------------------------------------------------------------------------------- 1 | .globl allocate,putword,putchar 2 | .globl iget 3 | .globl succ 4 | .globl table 5 | 6 | table: 7 | mov $10,r0 8 | jsr pc,allocate 9 | mov r1,-(sp) 10 | clr r0 11 | jsr pc,putword 12 | jsr pc,putword 13 | jsr pc,putword 14 | jsr pc,putchar 15 | jsr pc,iget 16 | mov (sp)+,(r0) 17 | jmp succ 18 | -------------------------------------------------------------------------------- /source/tmg/tmgb/tq.s: -------------------------------------------------------------------------------- 1 | f = r5 2 | i = r3 3 | .globl ek,ep,ek.fs,ep.fs,si,x,fs 4 | .globl generate 5 | .globl .tq,gpar 6 | 7 | .tq: 8 | mov (i)+,r0 9 | mov i,si(f) 10 | mov ep(f),r1 11 | mov ep(r1),ep.fs(f) 12 | mov ek(r1),ek.fs(f) 13 | mov si(r1),r1 14 | asl r0 15 | sub r0,r1 16 | mov (r1),i 17 | add $fs,f 18 | clr x(f) 19 | jsr pc,generate 20 | jmp generate 21 | 22 | gpar: 23 | mov (i)+,r0 24 | mov ep(f),r1 25 | asl r0 26 | add r0,si(r1) 27 | jmp generate 28 | .globl gq;gq=.tq 29 | -------------------------------------------------------------------------------- /source/tmg/tmgb/trace.s: -------------------------------------------------------------------------------- 1 | i = r3 2 | .globl putch,putoct 3 | .globl trswitch 4 | .globl trace 5 | 6 | trace: 7 | jsr pc,putch 8 | mov i,r0 9 | jsr pc,putoct 10 | mov $'\n,r0 11 | jsr pc,putch 12 | rts pc 13 | .data 14 | trswitch: 0 15 | -------------------------------------------------------------------------------- /source/tmg/tmgb/trans.s: -------------------------------------------------------------------------------- 1 | g = r4 2 | .globl succ,iget 3 | .globl trans 4 | 5 | trans: 6 | jsr pc,iget 7 | mov r0,(g)+ 8 | jmp succ 9 | -------------------------------------------------------------------------------- /source/tmg/tmgb/tx.s: -------------------------------------------------------------------------------- 1 | i = r3 2 | .globl generate 3 | .globl obuild 4 | .globl .tx,.txs 5 | 6 | .txs: 7 | mov i,r0 8 | tst (i)+ 9 | br 1f 10 | .tx: 11 | mov (i)+,r0 12 | 1: 13 | jsr pc,obuild 14 | jmp generate 15 | -------------------------------------------------------------------------------- /source/tmg/tmgb/unary.s: -------------------------------------------------------------------------------- 1 | .globl succ 2 | .globl .ng,.nt,.cm 3 | 4 | / ! 5 | 6 | .nt: 7 | tst (sp) 8 | beq 1f 9 | clr (sp) 10 | br 9f 11 | 1: 12 | mov $1,(sp) 13 | br 9f 14 | 15 | /unary - 16 | 17 | .ng: 18 | neg (sp) 19 | br 9f 20 | 21 | / ~ 22 | 23 | .cm: 24 | com (sp) 25 | 26 | 9: 27 | jmp succ 28 | -------------------------------------------------------------------------------- /source/yacc/lib/main.c: -------------------------------------------------------------------------------- 1 | main( argc, argv ) int argc; char *argv[]; { 2 | yyinit( argc, argv ); 3 | if( yyparse() ) return; 4 | yyaccpt(); 5 | } 6 | -------------------------------------------------------------------------------- /source/yacc/lib/zacc.c: -------------------------------------------------------------------------------- 1 | yyaccpt(){} 2 | -------------------------------------------------------------------------------- /source/yacc/lib/zerr.c: -------------------------------------------------------------------------------- 1 | extern int yyline; /* input line number */ 2 | 3 | yyerror(s) char *s; { 4 | extern int yychar; 5 | extern char *yysterm[]; 6 | printf("\n%s", s ); 7 | if( yyline ) printf(", line %d,", yyline ); 8 | printf(" on input: "); 9 | if( yychar >= 0400 ) printf("%s\n", yysterm[yychar-0400] ); 10 | else switch ( yychar ) { 11 | case '\t': printf( "\\t\n" ); return; 12 | case '\n': printf( "\\n\n" ); return; 13 | case '\0': printf( "$end\n" ); return; 14 | default: printf( "%c\n" , yychar ); return; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /source/yacc/lib/zinit.c: -------------------------------------------------------------------------------- 1 | yyinit(){} 2 | -------------------------------------------------------------------------------- /source/yacc/run: -------------------------------------------------------------------------------- 1 | chdir lib 2 | cc -c -O *.c 3 | ar r /lib/liby.a *.o 4 | rm *.o 5 | chdir ../source 6 | cc -s -O y?.c 7 | cmp a.out /usr/bin/yacc 8 | cp a.out /usr/bin/yacc 9 | rm a.out *.o 10 | -------------------------------------------------------------------------------- /source/yacc/source/y5.c: -------------------------------------------------------------------------------- 1 | /* fake portable I/O routines, for those 2 | sites so backward as to not have the 3 | port. library */ 4 | 5 | int cin, cout; 6 | extern int fin, fout; 7 | 8 | copen( s, c ) char *s; { 9 | int f; 10 | 11 | if( c == 'r' ){ 12 | fin = f = open( s, 0 ); 13 | } 14 | 15 | else if( c == 'a' ){ 16 | f = open( s, 1 ); 17 | seek( f, 0, 2 ); 18 | } 19 | 20 | else { /* c == w */ 21 | f = creat( s, 0666 ); 22 | } 23 | 24 | return( f ); 25 | } 26 | 27 | cflush(x){ /* fake! sets file to x */ 28 | flush(); 29 | fout = x; 30 | } 31 | 32 | system(){ 33 | error( "The function \"system\" is called" ); 34 | } 35 | 36 | cclose(i){ 37 | close(i); 38 | } 39 | 40 | cexit(i){ 41 | flush(); 42 | exit(); 43 | } 44 | -------------------------------------------------------------------------------- /sys/conf.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Used to dissect integer device code 3 | * into major (driver designation) and 4 | * minor (driver parameter) parts. 5 | */ 6 | struct 7 | { 8 | char d_minor; 9 | char d_major; 10 | }; 11 | 12 | /* 13 | * Declaration of block device 14 | * switch. Each entry (row) is 15 | * the only link between the 16 | * main unix code and the driver. 17 | * The initialization of the 18 | * device switches is in the 19 | * file conf.c. 20 | */ 21 | struct bdevsw 22 | { 23 | int (*d_open)(); 24 | int (*d_close)(); 25 | int (*d_strategy)(); 26 | int *d_tab; 27 | } bdevsw[]; 28 | 29 | /* 30 | * Nblkdev is the number of entries 31 | * (rows) in the block switch. It is 32 | * set in binit/bio.c by making 33 | * a pass over the switch. 34 | * Used in bounds checking on major 35 | * device numbers. 36 | */ 37 | int nblkdev; 38 | 39 | /* 40 | * Character device switch. 41 | */ 42 | struct cdevsw 43 | { 44 | int (*d_open)(); 45 | int (*d_close)(); 46 | int (*d_read)(); 47 | int (*d_write)(); 48 | int (*d_sgtty)(); 49 | } cdevsw[]; 50 | 51 | /* 52 | * Number of character switch entries. 53 | * Set by cinit/tty.c 54 | */ 55 | int nchrdev; 56 | -------------------------------------------------------------------------------- /sys/conf/data.s: -------------------------------------------------------------------------------- 1 | / l45.o needs to be in data space 2 | / to get l45.o; as data.s l.s 3 | .data 4 | -------------------------------------------------------------------------------- /sys/conf/sysfix: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lsahn-org/unix-v6/2c7099ee501923775c4c96079a6fe94da109b552/sys/conf/sysfix -------------------------------------------------------------------------------- /sys/dmr/cat.c: -------------------------------------------------------------------------------- 1 | # 2 | /* 3 | */ 4 | 5 | /* 6 | * GP DR11C driver used for C/A/T 7 | */ 8 | 9 | #include "../param.h" 10 | #include "../user.h" 11 | #include "../tty.h" 12 | 13 | #define CATADDR 0167750 14 | #define PCAT 9 15 | #define CATHIWAT 60 16 | #define CATLOWAT 15 17 | 18 | struct { 19 | int catlock; 20 | struct clist oq; 21 | } cat; 22 | 23 | struct { 24 | int catcsr; 25 | int catbuf; 26 | }; 27 | 28 | ctopen(dev) 29 | { 30 | if (cat.catlock==0) { 31 | cat.catlock++; 32 | CATADDR->catcsr =| IENABLE; 33 | } else 34 | u.u_error = ENXIO; 35 | } 36 | 37 | ctclose() 38 | { 39 | cat.catlock = 0; 40 | } 41 | 42 | ctwrite(dev) 43 | { 44 | register c; 45 | extern lbolt; 46 | 47 | while ((c=cpass()) >= 0) { 48 | spl5(); 49 | while (cat.oq.c_cc > CATHIWAT) 50 | sleep(&cat.oq, PCAT); 51 | while (putc(c, &cat.oq) < 0) 52 | sleep(&lbolt, PCAT); 53 | catintr(); 54 | spl0(); 55 | } 56 | } 57 | 58 | catintr() 59 | { 60 | register int c; 61 | 62 | if (CATADDR->catcsr&DONE && (c=getc(&cat.oq))>=0) { 63 | CATADDR->catbuf = c; 64 | if (cat.oq.c_cc==0 || cat.oq.c_cc==CATLOWAT) 65 | wakeup(&cat.oq); 66 | } else { 67 | if (cat.catlock==0) 68 | CATADDR->catcsr = 0; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /sys/dmr/dhfdm.c: -------------------------------------------------------------------------------- 1 | # 2 | /* 3 | */ 4 | 5 | /* 6 | * DM-BB fake driver 7 | */ 8 | #include "../tty.h" 9 | #include "../conf.h" 10 | 11 | struct tty dh11[]; 12 | 13 | dmopen(dev) 14 | { 15 | register struct tty *tp; 16 | 17 | tp = &dh11[dev.d_minor]; 18 | tp->t_state =| CARR_ON; 19 | } 20 | 21 | dmclose(dev) 22 | { 23 | } 24 | -------------------------------------------------------------------------------- /sys/dmr/partab.c: -------------------------------------------------------------------------------- 1 | /* 2 | */ 3 | 4 | char partab[] { 5 | 0001,0201,0201,0001,0201,0001,0001,0201, 6 | 0202,0004,0003,0205,0005,0206,0201,0001, 7 | 0201,0001,0001,0201,0001,0201,0201,0001, 8 | 0001,0201,0201,0001,0201,0001,0001,0201, 9 | 0200,0000,0000,0200,0000,0200,0200,0000, 10 | 0000,0200,0200,0000,0200,0000,0000,0200, 11 | 0000,0200,0200,0000,0200,0000,0000,0200, 12 | 0200,0000,0000,0200,0000,0200,0200,0000, 13 | 0200,0000,0000,0200,0000,0200,0200,0000, 14 | 0000,0200,0200,0000,0200,0000,0000,0200, 15 | 0000,0200,0200,0000,0200,0000,0000,0200, 16 | 0200,0000,0000,0200,0000,0200,0200,0000, 17 | 0000,0200,0200,0000,0200,0000,0000,0200, 18 | 0200,0000,0000,0200,0000,0200,0200,0000, 19 | 0200,0000,0000,0200,0000,0200,0200,0000, 20 | 0000,0200,0200,0000,0200,0000,0000,0201 21 | }; 22 | -------------------------------------------------------------------------------- /sys/dmr/sys.c: -------------------------------------------------------------------------------- 1 | # 2 | /* 3 | */ 4 | 5 | /* 6 | * indirect driver for controlling tty. 7 | */ 8 | #include "../param.h" 9 | #include "../conf.h" 10 | #include "../user.h" 11 | #include "../tty.h" 12 | #include "../proc.h" 13 | 14 | syopen(dev, flag) 15 | { 16 | register *tp; 17 | 18 | if(tp = syttyp()) 19 | (*cdevsw[tp->t_dev.d_major].d_open)(tp->t_dev, flag); 20 | } 21 | 22 | syread(dev) 23 | { 24 | register *tp; 25 | 26 | if(tp = syttyp()) 27 | (*cdevsw[tp->t_dev.d_major].d_read)(tp->t_dev); 28 | } 29 | 30 | sywrite(dev) 31 | { 32 | register *tp; 33 | 34 | if(tp = syttyp()) 35 | (*cdevsw[tp->t_dev.d_major].d_write)(tp->t_dev); 36 | } 37 | 38 | sysgtty(dev, flag) 39 | { 40 | register *tp; 41 | 42 | if(tp = syttyp()) 43 | (*cdevsw[tp->t_dev.d_major].d_sgtty)(tp->t_dev, flag); 44 | } 45 | 46 | syttyp() 47 | { 48 | register tp; 49 | 50 | tp = u.u_procp->p_ttyp; 51 | if(tp == NULL) 52 | u.u_error = ENXIO; 53 | return(tp); 54 | } 55 | -------------------------------------------------------------------------------- /sys/dmr/vt.c: -------------------------------------------------------------------------------- 1 | # 2 | /* 3 | */ 4 | 5 | /* 6 | * VT01 driver via DR11C to 11/20 7 | */ 8 | 9 | #include "../param.h" 10 | #include "../user.h" 11 | 12 | int vtflag; 13 | 14 | struct vtreg { 15 | int csr; 16 | int buf; 17 | }; 18 | 19 | #define VTADDR 0167770 20 | #define RQINT 01 21 | #define BIENABL 040 22 | #define SEOF 0100000 23 | #define VTPRI 8 24 | 25 | vtopen(dev, flag) 26 | { 27 | if (!flag) 28 | u.u_error = ENXIO; 29 | else 30 | VTADDR->csr = BIENABL; 31 | } 32 | 33 | vtclose() 34 | { 35 | VTADDR->buf = SEOF; 36 | VTADDR->csr =| RQINT; 37 | } 38 | 39 | vtwrite() 40 | { 41 | register int c; 42 | int register count; 43 | 44 | while ((c=cpass()) >= 0) { 45 | retry: 46 | for (count=0; count<10; count++) 47 | if ((VTADDR->csr&RQINT)==0) { 48 | VTADDR->buf = c&0377; 49 | VTADDR->csr =| RQINT; 50 | goto contin; 51 | } 52 | spl5(); 53 | if (VTADDR->csr&RQINT) { 54 | vtflag++; 55 | sleep(VTADDR, VTPRI); 56 | } 57 | spl0(); 58 | goto retry; 59 | contin:; 60 | } 61 | } 62 | 63 | vtintr() 64 | { 65 | VTADDR->csr =& ~RQINT; 66 | if (vtflag) { 67 | vtflag = 0; 68 | wakeup(VTADDR); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /sys/file.h: -------------------------------------------------------------------------------- 1 | /* 2 | * One file structure is allocated 3 | * for each open/creat/pipe call. 4 | * Main use is to hold the read/write 5 | * pointer associated with each open 6 | * file. 7 | */ 8 | struct file 9 | { 10 | char f_flag; 11 | char f_count; /* reference count */ 12 | int f_inode; /* pointer to inode structure */ 13 | char *f_offset[2]; /* read/write character pointer */ 14 | } file[NFILE]; 15 | 16 | /* flags */ 17 | #define FREAD 01 18 | #define FWRITE 02 19 | #define FPIPE 04 20 | -------------------------------------------------------------------------------- /sys/filsys.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Definition of the unix super block. 3 | * The root super block is allocated and 4 | * read in iinit/alloc.c. Subsequently 5 | * a super block is allocated and read 6 | * with each mount (smount/sys3.c) and 7 | * released with unmount (sumount/sys3.c). 8 | * A disk block is ripped off for storage. 9 | * See alloc.c for general alloc/free 10 | * routines for free list and I list. 11 | */ 12 | struct filsys 13 | { 14 | int s_isize; /* size in blocks of I list */ 15 | int s_fsize; /* size in blocks of entire volume */ 16 | int s_nfree; /* number of in core free blocks (0-100) */ 17 | int s_free[100]; /* in core free blocks */ 18 | int s_ninode; /* number of in core I nodes (0-100) */ 19 | int s_inode[100]; /* in core free I nodes */ 20 | char s_flock; /* lock during free list manipulation */ 21 | char s_ilock; /* lock during I list manipulation */ 22 | char s_fmod; /* super block modified flag */ 23 | char s_ronly; /* mounted read-only flag */ 24 | int s_time[2]; /* current date of last update */ 25 | int pad[50]; 26 | }; 27 | -------------------------------------------------------------------------------- /sys/ino.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Inode structure as it appears on 3 | * the disk. Not used by the system, 4 | * but by things like check, df, dump. 5 | */ 6 | struct inode 7 | { 8 | int i_mode; 9 | char i_nlink; 10 | char i_uid; 11 | char i_gid; 12 | char i_size0; 13 | char *i_size1; 14 | int i_addr[8]; 15 | int i_atime[2]; 16 | int i_mtime[2]; 17 | }; 18 | 19 | /* modes */ 20 | #define IALLOC 0100000 21 | #define IFMT 060000 22 | #define IFDIR 040000 23 | #define IFCHR 020000 24 | #define IFBLK 060000 25 | #define ILARG 010000 26 | #define ISUID 04000 27 | #define ISGID 02000 28 | #define ISVTX 01000 29 | #define IREAD 0400 30 | #define IWRITE 0200 31 | #define IEXEC 0100 32 | -------------------------------------------------------------------------------- /sys/lib1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lsahn-org/unix-v6/2c7099ee501923775c4c96079a6fe94da109b552/sys/lib1 -------------------------------------------------------------------------------- /sys/lib2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lsahn-org/unix-v6/2c7099ee501923775c4c96079a6fe94da109b552/sys/lib2 -------------------------------------------------------------------------------- /sys/reg.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Location of the users' stored 3 | * registers relative to R0. 4 | * Usage is u.u_ar0[XX]. 5 | */ 6 | #define R0 (0) 7 | #define R1 (-2) 8 | #define R2 (-9) 9 | #define R3 (-8) 10 | #define R4 (-7) 11 | #define R5 (-6) 12 | #define R6 (-3) 13 | #define R7 (1) 14 | #define RPS (2) 15 | 16 | #define TBIT 020 /* PS trace bit */ 17 | -------------------------------------------------------------------------------- /sys/run: -------------------------------------------------------------------------------- 1 | chdir ken 2 | cc -c -O *.c 3 | ar r ../lib1 4 | rm *.o 5 | 6 | chdir ../dmr 7 | cc -c -O *.c 8 | ar r ../lib2 9 | rm *.o 10 | 11 | chdir ../conf 12 | as m40.s 13 | mv a.out m40.o 14 | : as m45.s 15 | : mv a.out m45.o 16 | : cc sysfix.c 17 | : mv a.out sysfix 18 | cc mkconf.c 19 | mv a.out mkconf 20 | 21 | mkconf 22 | rk 23 | tm 24 | tc 25 | done 26 | 27 | cc -c c.c 28 | as l.s 29 | ld -x a.out m40.o c.o ../lib1 ../lib2 30 | : as data.s l.s 31 | : ld -x -r -d a.out m45.o c.o ../lib1 ../lib2 32 | : nm -ug 33 | : sysfix a.out x 34 | : mv x a.out 35 | cmp a.out /rkunix 36 | cp a.out /rkunix 37 | 38 | mkconf 39 | rp 40 | tm 41 | tc 42 | done 43 | 44 | cc -c c.c 45 | as l.s 46 | ld -x a.out m40.o c.o ../lib1 ../lib2 47 | : as data.s l.s 48 | : ld -x -r -d a.out m45.o c.o ../lib1 ../lib2 49 | : nm -ug 50 | : sysfix a.out x 51 | : mv x a.out 52 | cmp a.out /rpunix 53 | cp a.out /rpunix 54 | 55 | mkconf 56 | hp 57 | tm 58 | tc 59 | done 60 | 61 | cc -c c.c 62 | as l.s 63 | ld -x a.out m40.o c.o ../lib1 ../lib2 64 | : as data.s l.s 65 | : ld -x -r -d a.out m45.o c.o ../lib1 ../lib2 66 | : nm -ug 67 | : sysfix a.out x 68 | : mv x a.out 69 | cmp a.out /hpunix 70 | cp a.out /hpunix 71 | 72 | rm mkconf c.c l.s a.out *.o 73 | : rm sysfix 74 | -------------------------------------------------------------------------------- /sys/seg.h: -------------------------------------------------------------------------------- 1 | /* 2 | * KT-11 addresses and bits. 3 | */ 4 | 5 | #define UISD 0177600 /* first user I-space descriptor register */ 6 | #define UISA 0177640 /* first user I-space address register */ 7 | #define UDSA 0177660 /* first user D-space address register */ 8 | #define RO 02 /* access abilities */ 9 | #define WO 04 10 | #define RW 06 11 | #define ED 010 /* extend direction */ 12 | 13 | /* 14 | * structure used to address 15 | * a sequence of integers. 16 | */ 17 | struct 18 | { 19 | int r[]; 20 | }; 21 | int *ka6; /* 11/40 KISA6; 11/45 KDSA6 */ 22 | 23 | /* 24 | * address to access 11/70 UNIBUS map 25 | */ 26 | #define UBMAP 0170200 27 | -------------------------------------------------------------------------------- /sys/text.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Text structure. 3 | * One allocated per pure 4 | * procedure on swap device. 5 | * Manipulated by text.c 6 | */ 7 | struct text 8 | { 9 | int x_daddr; /* disk address of segment */ 10 | int x_caddr; /* core address, if loaded */ 11 | int x_size; /* size (*64) */ 12 | int *x_iptr; /* inode of prototype */ 13 | char x_count; /* reference count */ 14 | char x_ccount; /* number of loaded references */ 15 | } text[NTEXT]; 16 | --------------------------------------------------------------------------------