old_fs/0000755000175000017500000000000014735415531010554 5ustar0000000000000000old_fs/_fs_blkmap/0000755000175000017500000000000014735415531012651 5ustar0000000000000000old_fs/_fs_blkmap/m010000644000175000017500000000100014735414536013164 0ustar0000000000000000UVWZfk|}~old_fs/_fs_blkmap/m020000644000175000017500000000100014735414536013165 0ustar0000000000000000^_`abghps{old_fs/_fs_blkmap/m030000644000175000017500000000100014735414536013166 0ustar0000000000000000old_fs/_fs_blkmap/m040000644000175000017500000000100014735414536013167 0ustar0000000000000000=old_fs/_fs_blkmap/m050000644000175000017500000000100014735414536013170 0ustar0000000000000000MPQprt !#$old_fs/_fs_blkmap/m060000644000175000017500000000100014735414536013171 0ustar0000000000000000  !"$%)*+,-0145789<EIold_fs/_fs_blkmap/m070000644000175000017500000000100014735414536013172 0ustar0000000000000000moq(DNPQ hold_fs/_fs_dir/0000755000175000017500000000000014735415531012161 5ustar0000000000000000old_fs/_fs_dir/d01_fragment0000644000175000017500000000200014735414536014347 0ustar000000000000000012.0AuA)dec-att17\as-att1%dmr2.2p)dmr2.1k)dmr2.0 )rh1.2am(rh1.1amD(dmr2.3nR)rh1.0amъ(cnsw9.3')cnsw9.2W)cnsw9.1fp)cnsw9.0$)rv25.1; rv25.0M secwh1.15$gsecwh1.05\1rv25.4z rv25.3[y cfy3.0amũrv25.2/ mps5.4O\%bgv9.1'\A*bgv9.3bVN*bgv9.2)?*bgv9.0l'*bgv9.4*aej62.4 I)aej62.6/3)aej62.50l)a1.0aff*Lcl13.1@}F*cl13.2A*cl13.0u*decdesf4:*sv12.3*sv12.2/*cl13.3B*sv12.1B1*sv12.0o8*fws3.25*fws3.1చ*fws3.0}*fws3.4ќ*fws3.32 *mft3.1&g*mft3.0&*coreβVohrb19.3bβU*hrb19.2b̲0*hrb19.1b˲*cip-dec2Ȳ*hrb19.0b˲֔*old_fs/_fs_dir/d02_fragment0000644000175000017500000000400014735414536014352 0ustar0000000000000000fnw10.0olv7.0ƪ+lo6.3R]lo6.2RVHlo6.1hefjk3.2^trc3хlo6.0fjk3.1:fjk3.0 jhm1.2 Xblankއjob1hm1.4+dhm1.1thm1.0hm1.3ndcg7.2Сrout4 fnw10.2xl^rout3rout2js4.2蟺Vfjk3.3ҥsamplemanual~wlm3.1! bc1.1,=pm1.1 bc1.0gjs4.1jsecmh1.1іsecmh1.0pm1.0 rout1L+bs79.1~{cgn3.3o=cgn3.2qabw8.3Ħjhc5.2 bs79.0~/jhc5.1bw8.2bw8.1Rbw8.0Njhc5.0lbmw9.1nbmw9.2n<wlm3.4nB bmw9.0^bmw9.3Ħgpm1.3 v instecgn3.1sn#bom1.0ePbom1.1dev.2ʆdev.1Q4sjs4.0O:wlm3.3 sva2.15J7 sva2.0t dev.0 eh3-1.1L_{ks1.2>cgn3.0qks1.1ks1.0kwlm3.2n crs.3ni crs.2@ eh3-1.0K_crs.1n4 tdo1.2#r tdo1.1v res.1Rȇres.0tu1.3={lv7.2+atu1.2Qtu1.1tu1.0pdn11.4gsw5.2?><sva2.2 pdn11.3Mpdn11.2ttdo1.0  pdn11.1'>pdn11.0pm1.2 bd10.3bd10.1$bd10.0JN dcg7.1$(dcg7.0 rel1.2lNrel1.1bd10.2rel1.0Asw5.1>Fsw5.0=rout5#0wlm3.0h bc1.2Afnw10.3,glv7.1Ǫ'fnw10.1x$ihs1.15Nlhs1.0Nhs1.25Gsva2.3 bwh9.2*weeklyvYbwh9.1bwh9.0bw8.4æbmw9.4Ŧ:chs7.3=%chs7.2=bwh9.3~chs7.1?pchs7.0ꧢ/eh3.0Wlo6.4Olv7.3Գres-dev1ɑrout6#eh3.1Jjm7.3%jm7.1(Mjm7.2꨽jm7.old_fs/_fs_dir/d03_fragment0000644000175000017500000000700014735414536014356 0ustar0000000000000000rc3хvr1.1վvr1.0׬blankއjob1rout4Zrout3drout2U6|samplemanual~add1v;secmh1.1jIsecmh1.0iO[rout1Mubs79.1~{tgl4.1P8bs79.0tgl4.0Ѽinsteres-dev1dev.1Nrout6]agl1.4&[dev.0Uagl1.3dijy3.1jy3.3jy3.2jy3.0|x) agl1.2@agl1.1ͧtype.1 nw3.2cp4.3fBcp4.2pxres.1XSlres.0Unw3.1Nnw3.0tagl1.0ԃ|jy2deccp4.18jcp4.0ch jk1.4~ؖ,pdn11.4type.03jk1.3|Qopdn11.3[:epdn11.2[10jk1.2Y߼pdn11.1Qpdn11.0[މplp1.2?ƪfjk1.1Yڷjk1.0zتtjp4.9cܸ[weekly)tjp4.9bܖtjp4.9aܷzplp1.1Bbs19.1f!bs19.0fղltjp4.9[tjp4.8L2tjp4.7#rout5F=tjp4.6plp1.0@ˇmvm8.2{ds1.4ZRds1.3ds1.2Ӡtjp4.5qbtjp4.4Ftjp4.3?"monthlyx}tjp4.2Yrlc43.7jٺrlc43.6U7kptg1.Oodkmmstw.0>zrlc43.5UڇUrout7grlc43.4U%rlc43.3U mvm8.1 rlc43.2TWrlc43.1ڊrlc43.00ds1.1$mvm8.0sajk1.50>i ds1.0pajk1.4wO dgm2.69vr1.2[mvm8.3ԁajk1.3w ajk1.2uȱ ajk1.1uϓ ajk1.0t tjp4.1܀tgl4.2Ѽ?ms4.2Wtjp4.0܃ms4.1+Wms4.0Jinsertm2^llw10.3illw10.2iլqllw10.1h<llw10.0wgn1.09bas-att?~dec3nvhls1.4bs19.2hls1.3khls1.22Whls1.12@hls1.0Vղks60.2 Gks60.0q9ks60.1հyllw10.4/{wgn1.12Dwgn1.23wgn1.44 Hwgn1.33תLdev.2wlm3.16y{wlm3.05wgn1.3a:Wajm2.3ajm2.2ݔajm2.1ݗ4ajm2.0݄hjb9.2bmihjb9.2amas-8nـdec8{=hjb9.2o@hjb9.3,hjb9.1vhjb9.0hhjb10.3auhjb10.4yKthjb10.2n1hjb10.1ndhjb10.3thjb10.0kdev.3}dec-cip3nْau2.5JYau2.3au2.1K1au2.0ڇau2.2ڨChs89.1@hs89.0tgd1.4ܻmtgd1.3E'tgd1.2tgd1.1˛tgd1.0~au2.4hs89.4ܦhs89.3v5hs89.2݉Ekp22.1",kp22.0۹9bbl3.4rqbbl3.3rܖbbl3.2qbbl3.1p}dbbl3.0Mres1.0+res1.2res1.1nwfc10.6N޳kp22.2";wfc10.5N kwfc10.4Nޛ wfc10.3jwfc10.2RHwfc10.1[wfc10.0tjp4.9djkp1.5jkp1.4܏jkp1.3jkp1.1qjkp1.2ܝyjkp1.0pMtjp4.9ekajm1.2ܘajm1.1ajm1.0Rajm3.2vbajm3.3ajm3.1ajm3.0)rlc44.4 )rlc44.3H rlc44.2cgn1.3{ww5.10ww5.0ɮxsem63.2D%ww5.2\$bmmm3.0ϲ!rout7Φ=jhc7.1ҥkmmstw.0>zbmmm3.2ϲbmmm3.1ϲrjc1.5BSrjc1.4mo rjc1.3mrjc1.2hrjc1.1B'Erjc1.0Nlypjbc2.1jbc2.0type.1 type.03dst4.1/beng2.1aYJdst4.cK0dst4.0G(dvw18.1[dvw18.0N`dev.3ʲold_fs/_fs_dir/d05_fragment0000644000175000017500000000100014735414536014352 0ustar0000000000000000res1.3Wck3.3-or1.3]+or1.4frout8bs102.3Sbs102.2'bs102.1bs102.0栮I98008.2wBI98008.1l2I98008.0l:hrb24.1@ hrb24.0 hrb24.2Et pa8619.0Df hrb24.4i hrb24.3 bs4.4 bs4.3 bs4.1 bs4.0h bs4.2d pw5.26f pw5.1E pw5.0Io cr3.2 cr3.1h> cr3.0" tas6.1J tas6.2 tas6.0) cr3.3. cr3.4old_fs/_fs_dir/d06_fragment0000644000175000017500000000100014735414536014353 0ustar0000000000000000dvw18.2Qv crt1.0Ecrt1.17tc2.am2 >xӶbgv8.1bgv8.0B$ptg1.Oodpvw13.1 pvw13.0عHbgv8.4D bgv8.3C/gp1.2}Ƙ,bgv8.2gp1.1Qgp1.0as-agbmwvg5as&agfjkias&ag3t as&ag2.1^9 as&ag2} pvw13.2=old_fs/asm/0000755000175000017500000000000014735415530011333 5ustar0000000000000000old_fs/asm/f03_fragment.s0000644000175000017500000001434714735414536014010 0ustar0000000000000000.index" br 3f 2: movb j.index+8.,f.recs+6 bisb $60,f.recs+6 3: jsr r5,putindex /to ensure that current index /is written with job record sys open; f.recs; 1 mov r0,wr mov j.index+10.,0f sys seek; 0:..; 0 mov $60.,0f sys write; j.record; 0:.. /write control info & /fixed-length fields clr r1 /r1 used to count non-null cases mov flengths,0f beq 1f mov wr,r0 sys write; j.title; 0:.. 1: mov wr,r0 sys write; orchar; 1 mov flengths+2,0f beq 1f mov wr,r0 sys write; j.case1; 0:.. inc r1 mov wr,r0 sys write; slchar; 1 1: mov flengths+4,0f beq 1f mov wr,r0 sys write; j.case2; 0:.. br 0f 1: tst r1 beq 0f mov wr,r0 sys seek; -1; 1 0: mov wr,r0 sys write; orchar; 1 clr r1 /reinitialize r1 to count /non-null authors mov flengths+6,0f beq 1f mov wr,r0 sys write; j.auth1; 0:.. inc r1 mov wr,r0 sys write; slchar; 1 1: mov flengths+8.,0f beq 1f mov wr,r0 sys write; j.auth2; 0:.. inc r1 mov wr,r0 sys write; slchar; 1 1: mov flengths+10.,0f beq 1f mov wr,r0 sys write; j.auth3; 0:.. inc r1 mov wr,r0 sys write; slchar; 1 1: mov flengths+12.,0f beq 1f mov wr,r0 sys write; j.auth4; 0:.. br 0f 1: tst r1 beq 0f mov wr,r0 sys seek; -1; 1 0: mov wr,r0 sys write; orchar; 2 /write 1 "|" to delimit authors /another to delimit spare v field mov $"nu,bline movb $'\n,bline+2 movb $1,lflag clrb eflag jsr r5,interpreter /write "saved" message jsr r5,mesg < saved\n\0> .even mov wr,r0 sys close clrb cflag /reset core changed flag bic $100000,j.number /reset lock bit jsr r5,putindex /write updated index br 9f 8: movb $1,eflag /set error indicator 9: mov (sp)+,r1 /restore r1 rts r5 /return .even /"allocate" allocates space in job records files /inputs: / address of job record length passed as argument after call /outputs: / (1) r0 = 0 if out of space / r0 = ptr to free space if space available / (2) "f.recs" contains file name where space exists / (3) first word of records file where space exists is / incremented over space allocated. allocate: mov r1,-(sp) /save regs mov r2,-(sp) mov *(r5)+,r2 /retrieve argument clr r1 /r1 keeps track of record file no 0: inc r1 cmp r1,$4 ble 1f jsr r5,ioerror <22> /record files are full br 8f 1: movb r1,f.recs+6 bisb $60,f.recs+6 /change to ASCII digit sys open; f.recs; 1 /open a job record file for wr mov r0,wr sys open; f.recs; 0 /open a job record file for read mov r0,rr sys read; temp; 2 mov temp,temp+2 /"temp+2" contains allocation ptr add r2,temp bcc 1f /branch if not over file edge mov rr,r0 sys close mov wr,r0 sys close br 0b 1: mov wr,r0 sys seek; 0; 0 sys write; temp; 2 /update next available slot ptr mov rr,r0 sys close mov wr,r0 sys close mov temp+2,r0 br 9f 8: /error leg clr r0 /return r0=0 movb $1,eflag /set error indicator 9: mov (sp)+,r2 /restore regs mov (sp)+,r1 rts r5 /return /"fndlengths" computes length of variable length fields fndlengths: mov r1,-(sp) /save r1 mov $j.title,r0 mov $j.title+128.,r1 0: tstb (r0)+ /compute length of title beq 1f cmp r0,r1 blo 0b inc r0 1: sub $j.title,r0 dec r0 mov r0,flengths mov $j.case1,r0 mov $j.case1+10.,r1 0: /compute length of 1st case tstb (r0)+ beq 1f cmp r0,r1 blo 0b inc r0 1: sub $j.case1,r0 dec r0 mov r0,flengths+2 mov $j.case2,r0 mov $j.case2+10.,r1 0: /compute length of 2nd case tstb (r0)+ beq 1f cmp r0,r1 blo 0b inc r0 1: sub $j.case2,r0 dec r0 mov r0,flengths+4 mov $j.auth1,r0 mov $j.auth1+30.,r1 0: tstb (r0)+ /compute length of 1st author beq 1f cmp r0,r1 blo 0b inc r0 1: sub $j.auth1,r0 dec r0 mov r0,flengths+6 mov $j.auth2,r0 mov $j.auth2+30.,r1 0: tstb (r0)+ /compute length of 2nd author beq 1f cmp r0,r1 blo 0b inc r0 1: sub $j.auth2,r0 dec r0 mov r0,flengths+8. mov $j.auth3,r0 mov $j.auth3+30.,r1 0: tstb (r0)+ /compute length of 3rd author beq 1f cmp r0,r1 blo 0b inc r0 1: sub $j.auth3,r0 dec r0 mov r0,flengths+10. mov $j.auth4,r0 mov $j.auth4+30.,r1 0: tstb (r0)+ /compute length of 4th author beq 1f cmp r0,r1 blo 0b inc r0 1: sub $j.auth4,r0 dec r0 mov r0,flengths+12. mov (sp)+,r1 /restore r1 rts r5 /return .=b.overlay+1100. e.overlay: /end overlay area sys open; jobsub; 0 mov r0,rj sys open; savesub; 0 mov r0,rs sys intr; 0 /disable DEL's sys open; f.index; 0 /open "jobindex" for reading mov r0,ri sys open; f.index; 1 /open "jobindex" for writing mov r0,wi mov sp,savesp /save stack pointer at command /level sys intr; level0 /intercept DEL's mov $"jo,bline /set up to read dummy record mov $"b/,bline+2 mov $"0-,bline+4 mov $"S\n,bline+6 clrb cflag clrb eflag movb $1,lflag jsr r5,interpreter level0: mov savesp,sp /pop stack to command level clrb intflag /reset flag that indicates /DEL interrupt occurred sys intr; 0 /disable DEL's 1: clrb eflag /reset error indicator mov $1,r0 sys write; prompt; 3 /write prompt char jsr r5,interpreter /call interpreter br 1b done: /exit tstb cflag /current record changed? beq 1f /branch if no jsr r5,mesg <3RESPOND "SAVE" OR "NOSAVE"4\n\0> .even br level0 1: mov ri,r0 sys close mov wi,r0 sys close sys exit savesp: .=.+2 token2: .=.+2 token3: .=.+2 token4: .=.+2 j.record: j.index: j.length: .=.+4 j.number: .=.+8. j.loc: .=.+2 j.odate: .=.+2 j.ddate: .=.+2 j.dcode: .=.+4 j.cdate: .=.+2 j.attny: .=.+6 j.super: .=.+6 j.dir: .=.+6 j.orig1: .=.+2 j.orig2: .=.+2 j.orig3: .=.+2 j.orig4: .=.+2 .=.+10. /reserved for future use j.title: .=.+128. j.case1: .=.+10. j.case2: .=.+10. j.auth1: .=.+30. j.auth2: .=.+30. j.auth3: .=.+30. j.auth4: .=.+30. .=.+8. /This is buffer area in case /all variable fields are max .even ri: .=.+2 wi: .=.+2 rj: .=.+2 /read id for "jobsub" rs: .=.+2 /read id for "savesub" rr: .=.+2 wr: .=.+2 whatsin: /"whatsin" = "1" if "job" in over 1 /lay; = "2" if "save" in overlay temp: .=.+54. bline: .=.+221. eline: .=.+1 blanks: < > prompt: <\n! > cflag: .=.+1 /"core record changed" flag eflag: .=.+1 /"error indicator" lflag: .=.+1 /"in line buffer" flag f.index: f.recs: f.cases: f.attnys: jobsub: savesub: nl: <\n> old_fs/asm/f06.s0000644000175000017500000000175614735414536012130 0ustar0000000000000000 .even title: mov r1,-(sp) /save r1 tst token2 /"/" present? bne 1f mov $1,r0 sys write; j.title; 128. /write title br 9f 1: mov $j.title,r0 mov $j.title+128.,r1 movb $1,cflag /set core record changed 1: clrb (r0)+ /null-out title cmp r0,r1 blo 1b tst token3 /"*" present? bne 9f /branch if yes mov token2,r0 inc r0 mov $j.title,r1 cmp r0,lastchar /"/"? beq 9f /branch if yes 2: movb (r0)+,(r1)+ /change title cmp r0,lastchar bhis 9f cmp r1,$j.title+128. blo 2b cmpb (r0),$'\n /129th char ? beq 9f jsr r5,mesg .even 9: mov (sp)+,r1 /restore r1 rts r5 number: tst token2 /"/" present? beq 1f /branch if not jsr r5,mesg <3ILLEGAL IN-CORE JOB NO. CHANGE ATTEMPTED4\n\0> .even rts r5 1: mov j.number,temp /delete various flag bits bic $177776,temp mov j.number+2,temp+2 jsr r5,itoa /write job no. temp bitb $2,j.number /"S" number? beq 1f /branch if not jsr r5,mesg <-S\0> .even 1: rts r5 ������������������old_fs/asm/f07.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000002445�14735414536�012125� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even /double precision ASCII to integer subroutine /inputs: / "digitptr" pts to beginning of ASCII string /outputs: / high order result returned to (r5) / low order result returned to 2(r5) atoi: clr -(sp) /keeps track of no. digits mov r2,-(sp) /save regs mov r3,-(sp) clr r3 1: jsr r5,getdigit sub $'0,r0 cmp r0,$9. bhi 1f inc 4(sp) /inc no. of digits cmp 4(sp),$5 /only 5 digits accepted bgt 1f mov r3,mq mov $10.,mul mov ac,r2 mov mq,r3 add r0,r3 adc r2 br 1b 1: add $'0,r0 /add to preserve 1st non-digit mov r2,(r5)+ mov r3,(r5)+ mov (sp)+,r3 /restore regs mov (sp)+,r2 tst (sp)+ rts r5 /double precision integer to ASCII subroutine /inputs: / (r5) pts to address of double precision binary integer /outputs: / ASCII number to print file itoa: mov (r5)+,r0 tst (r0)+ /add 2 to r0 mov (r0),mq /get low order 16 bits mov -(r0),ac /get high order 16 bits jsr pc,itoa1 rts r5 itoa1: mov $10.,div /divide by 10. mov ac,-(sp) /move remainder onto stack tst mq beq 1f /branch if 0 quotient clr ac /clear ac for next divide jsr pc,itoa1 1: add $'0,(sp) movb (sp)+,digit mov $1,r0 sys write; digit; 1 /write single digit rts pc getdigit: movb *digitptr,r0 /char rt-adjusted inc digitptr rts r5 digitptr: 0 digit: .=.+1 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f08.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000004506�14735414536�012126� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even search: cmp bline,$"cr /"create"? beq 1f cmp bline,$"jo /"job"? beq 2f cmp bline,$"nu /"number"? beq 3f cmp bline,$"od /"opening date"? beq 4f cmp bline,$"st /"status"? beq 5f cmp bline,$"ti /"title"? beq 6f cmp bline,$"sa /"save"? beq 7f cmp bline,$"no /"nosave"? beq 8f cmp bline,$"lo /"location"? beq 9f br 0f 1: jsr r5,create rts r5 2: cmp $1,whatsin beq 1f mov rj,r0 sys seek; 0; 0 sys read; b.overlay; 1100. mov $1,whatsin 1: jsr r5,job rts r5 3: jsr r5,number rts r5 4: jsr r5,odate rts r5 5: jsr r5,status rts r5 6: jsr r5,title rts r5 7: cmp $2,whatsin beq 1f mov rs,r0 sys seek; 0; 0 sys read; b.overlay; 1100. mov $2,whatsin 1: jsr r5,save rts r5 8: jsr r5,nosave rts r5 9: jsr r5,loc rts r5 0: cmp bline,$"dd /"deadline date"? beq 1f cmp bline,$"dc /"deadline code"? beq 2f cmp bline,$"cd /"closing date"? beq 3f cmp bline,$"at /"attorney"? beq 4f cmp bline,$"su /"supervisor"? beq 5f cmp bline,$"di /"director"? beq 6f br 0f 1: jsr r5,ddate rts r5 2: jsr r5,dcode rts r5 3: jsr r5,cdate rts r5 4: jsr r5,attny rts r5 5: jsr r5,super rts r5 6: jsr r5,dir rts r5 0: tst token2 beq 7f mov token2,r0 dec r0 br 8f 7: mov token4,r0 dec r0 8: cmpb bline,$'a bne 4f cmpb (r0),$'1 /author1? beq 9f cmpb (r0),$'2 /author2? beq 0f cmpb (r0),$'3 /author3? beq 1f cmpb (r0),$'4 /author4? beq 2f cmpb (r0),$'s /authors? beq 3f br badsearch 9: jsr r5,author j.auth1 rts r5 0: jsr r5,author j.auth2 rts r5 1: jsr r5,author j.auth3 rts r5 2: jsr r5,author j.auth4 rts r5 3: jsr r5,author 0 rts r5 4: cmpb bline,$'o bne 0f cmpb (r0),$'1 /origin1? beq 5f cmpb (r0),$'2 /origin2? beq 6f cmpb (r0),$'3 /origin3? beq 7f cmpb (r0),$'4 /origin4? beq 8f cmpb (r0),$'s /origins? beq 9f br badsearch 5: jsr r5,orig j.orig1 rts r5 6: jsr r5,orig j.orig2 rts r5 7: jsr r5,orig j.orig3 rts r5 8: jsr r5,orig j.orig4 rts r5 9: jsr r5,orig 0 rts r5 0: cmpb bline,$'c bne 4f cmpb (r0),$'1 /case1? beq 1f cmpb (r0),$'2 /case2? beq 2f cmpb (r0),$'s /cases? beq 3f badsearch: jsr r5,mesg <3ILLEGAL COMMAND4\n\0> .even rts r5 1: jsr r5,case j.case1 rts r5 2: jsr r5,case j.case2 rts r5 3: jsr r5,case 0 rts r5 4: cmp bline,$"pr bne 5f jsr r5,print rts r5 5: cmp bline,$"qu bne badsearch jmp done ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f10_fragment.s���������������������������������������������������������������������������0000644�0001750�0001750�00000000523�14735414536�013775� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ <xxx2\0> fil3: <xxx3\0> .even fnp: fil1 fil2 fil3 bufp: buf1 buf2 buf3 nc: 2 nc2: 2*2 cc: 0 lcc: 0 endf: 002 /stx ll: 20. nl: 0 nn: .=.+2 argc: .=.+2 pl: 66. pn: 1 pfrom: 0 tm: 6 bm: 6 ejf: 0 ejs: 0 bl: 0 space: 040 nsp: .=.+2 char: .=.+2 tab: 22. 44. 0 buf1: .=.+134. buf2: .=.+134. buf3: .=.+134. ce: .=.+6 fe: .=.+6 db: .=.+100 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f12.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000000602�14735414536�012112� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������breakout: clr token2 /initialize tokens clr token3 clr token4 mov $bline,r0 0: cmpb (r0),$'\n beq 5f cmpb (r0),$'/ beq 2f 1: /inc to next char inc r0 br 0b 2: /control here if "/" mov r0,token2 inc r0 cmpb (r0),$'* /"*" after "/"? bne 4f mov r0,token3 inc r0 4: cmpb (r0),$'\n beq 5f inc r0 br 4b 5: /control here when <nl> mov r0,token4 rts r5 /return ������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f14.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000003771�14735414536�012126� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even rti=2 status: jsr r5,mesg <\n\nSTATUS FOR JOB \0> .even sys intr; setiflag mov $"nu,bline jsr r5,sstatus /print job no. jsr r5,mesg <\nTITLE: \0> .even mov $"ti,bline jsr r5,sstatus /print title jsr r5,mesg <\nLOCATION: \0> .even mov $"lo,bline jsr r5,sstatus /print location jsr r5,mesg <\nCASE1: \0> .even mov $"c1,bline jsr r5,sstatus /print 1st case jsr r5,mesg < CASE2: \0> .even mov $"c2,bline jsr r5,sstatus /print 2nd case jsr r5,mesg <\nOPENED: \0> .even mov $"od,bline jsr r5,sstatus /print opening date jsr r5,mesg < DEADLINE: \0> .even mov $"dd,bline jsr r5,sstatus /print deadline date jsr r5,mesg < DCODE: \0> .even mov $"dc,bline jsr r5,sstatus /print deadline code jsr r5,mesg < CLOSED: \0> .even mov $"cd,bline jsr r5,sstatus /print closing date jsr r5,mesg <\n ATTNY: \0> .even mov $"at,bline jsr r5,sstatus /print attorney jsr r5,mesg < SUPERVISOR: \0> .even mov $"su,bline jsr r5,sstatus /print supervisor jsr r5,mesg < DIRECTOR: \0> .even mov $"di,bline jsr r5,sstatus /print director jsr r5,mesg <\nORIGIN1: \0> .even mov $"o1,bline jsr r5,sstatus /print 1st origin jsr r5,mesg < ORIGIN2: \0> .even mov $"o2,bline jsr r5,sstatus /print 2nd origin jsr r5,mesg < ORIGIN3: \0> .even mov $"o3,bline jsr r5,sstatus /print 3rd origin jsr r5,mesg < ORIGIN4: \0> .even mov $"o4,bline jsr r5,sstatus /print 4th origin jsr r5,mesg <\nAUTHOR1: \0> .even mov $"a1,bline jsr r5,sstatus /print author1 jsr r5,mesg < AUTHOR2: \0> .even mov $"a2,bline jsr r5,sstatus /print author2 jsr r5,mesg <\nAUTHOR3: \0> .even mov $"a3,bline jsr r5,sstatus /print author3 jsr r5,mesg < AUTHOR4: \0> .even mov $"a4,bline jsr r5,sstatus /print author4 jsr r5,mesg <\nEND STATUS\n\n\0> .even sys intr; 0 /disable DEL's again rts r5 sstatus: movb $'\n,bline+2 movb $1,lflag jsr r5,interpreter tstb intflag beq 0f jmp level0 0: rts r5 setiflag: movb $1,intflag rti intflag: .=.+1 �������old_fs/asm/f16.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000006255�14735414536�012130� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even create: jsr r5,fndindex /record existent? j.number 0f /if yes,error 3f /if no, allow creation 0: jsr r5,mesg <3ERROR; RECORD ALREADY EXISTENT4\n\0> .even jmp 9f 3: jsr r5,mesg /print title prompt <TITLE?\n\0> .even mov $"ti,bline jsr r5,screate tst r0 beq 3b 3: jsr r5,mesg /print location prompt <LOC?\n\0> .even mov $"lo,bline jsr r5,screate tst r0 beq 3b 3: jsr r5,mesg /print case1 prompt <CASE1?\n\0> .even mov $"c1,bline jsr r5,screate tst r0 beq 3b /branch if error bgt 4f /branch if case1 not supplied 3: jsr r5,mesg /print case2 prompt <CASE2?\n\0> .even mov $"c2,bline jsr r5,screate tst r0 beq 3b /branch if error 4: jsr r5,mesg /print opening date prompt <OPENED?\n\0> .even mov $"od,bline jsr r5,screate tst r0 beq 4b 3: jsr r5,mesg /print deadline prompt <DEADLINE?\n\0> .even mov $"dd,bline jsr r5,screate tst r0 beq 3b /branch if error bgt 4f /branch if deadline not supplied 3: jsr r5,mesg /print deadline code prompt <DEADLINE CODE?\n\0> .even mov $"dc,bline jsr r5,screate tst r0 beq 3b 4: jsr r5,mesg /print attorney prompt <ATTNY?\n\0> .even mov $"at,bline jsr r5,screate tst r0 beq 4b 3: jsr r5,mesg /print supervisor prompt <SUPERVISOR?\n\0> .even mov $"su,bline jsr r5,screate tst r0 beq 3b 3: jsr r5,mesg /print director prompt <DIRECTOR?\n\0> .even mov $"di,bline jsr r5,screate tst r0 beq 3b 3: jsr r5,mesg /print origin1 prompt <ORIGIN1?\n\0> .even mov $"o1,bline jsr r5,screate tst r0 beq 3b /branch if error bgt 4f /branch if origin1 not supplied 3: jsr r5,mesg /print origin2 prompt <ORIGIN2?\n\0> .even mov $"o2,bline jsr r5,screate tst r0 beq 3b /branch if error bgt 4f /branch if origin2 not supplied 3: jsr r5,mesg /print origin3 prompt <ORIGIN3?\n\0> .even mov $"o3,bline jsr r5,screate tst r0 beq 3b /branch if error bgt 4f /branch if origin3 not supplied 3: jsr r5,mesg /print origin4 prompt <ORIGIN4?\n\0> .even mov $"o4,bline jsr r5,screate tst r0 beq 3b /branch if error 4: jsr r5,mesg /print author1 prompt <AUTHOR1?\n\0> .even mov $"a1,bline jsr r5,screate tst r0 beq 4b /branch if error bgt 4f /branch if author1 not supplied 3: jsr r5,mesg /print author2 prompt <AUTHOR2?\n\0> .even mov $"a2,bline jsr r5,screate tst r0 beq 3b /branch if error bgt 4f /branch if author2 not supplied 3: jsr r5,mesg /print author3 prompt <AUTHOR3?\n\0> .even mov $"a3,bline jsr r5,screate tst r0 beq 3b /branch if error bgt 4f /branch if author3 not supplied 3: jsr r5,mesg /print author4 prompt <AUTHOR4?\n\0> .even mov $"a4,bline jsr r5,screate tst r0 beq 3b /branch if error 4: jsr r5,mesg <\nCREATION COMPLETED\n\0> .even 9: rts r5 /return .even /"screate" subroutine does repetitive things required during /creation of each job record field / screate: clrb eflag movb $'/,bline+2 mov $bline+3,r0 jsr r5,readline cmp no.chars,$1 bne 0f mov $1,r0 br 9f 0: movb $1,lflag jsr r5,interpreter tstb eflag bne 0f movb $1,cflag /record has changed mov $-1,r0 br 9f 0: clr r0 /r0 = 0 indicates error jsr r5,mesg <3INPUT ERROR4\n\0> .even 9: rts r5 /return ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f17.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000000411�14735414536�012115� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������interpreter: tstb lflag /is line in buffer? beq 1f /branch if not clrb lflag /reset flag br 2f 1: mov $bline,r0 jsr r5,readline /read line at terminal 2: jsr r5,breakout /break-out tokens jsr r5,search /call sub to handle command rts r5 /return �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f18.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000002640�14735414536�012124� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/"readline" is general subroutine to read user input at terminal /inputs: / r0 pts to place reading is to be done /outputs: / no.chars = number of chars read including last <nl> / lastchar = address of last char before last <nl> readline: mov r0,-(sp) /save regs mov r1,-(sp) mov r2,-(sp) cmp r0,$bline /check pointer range to ensure bhis 1f /its being in line buffer 0: jsr r5,ioerror <50> /BAD LINE POINTER 1: cmp r0,$eline bhi 0b mov r0,r1 /r1=current byte cursor mov r0,r2 /r2=cursor to beginning of /current physical line 0: mov r1,1f clr r0 /file='terminal' sys read; 1:..; 1 /read 1 char tst r0 /EOF? bne 1f sys exit /quit if yes 1: cmpb (r1),$'\n bne 3f cmpb -1(r1),$'^ /physical line to be deleted? bne 2f mov r2,r1 /erase to beginning of physical br 0b /line 2: cmpb -1(r1),$'+ /continuation? bne 4f movb $'\n,-1(r1) /overwrite "+" with "\n" mov r1,r2 /r2 points to beginning of next br 0b /line 3: inc r1 cmp r1,$eline /end line buffer? blos 0b /branch if not jsr r5,mesg <3LINE TOO LONG. > <BEGINNING LOST.4\n\0> .even mov 4(sp),r1 /start reading again mov r1,r2 br 0b 4: mov r1,no.chars /numb chars read includes last sub 4(sp),no.chars /last <nl> inc no.chars mov r1,lastchar /lastchar=addr of last <nl> char mov (sp)+,r2 /restore regs mov (sp)+,r3 tst (sp)+ /pop r0 saved off stack rts r5 /return no.chars: .=.+2 lastchar: .=.+2 ������������������������������������������������������������������������������������������������old_fs/asm/f19.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000006442�14735414536�012131� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even /"read ASCII date and return binary" subroutine / input / 2(sp) -> address of beginning of ASCII date / (sp) -> old r5 / / output / r0 = year(bit 15-9)/day(bits 8-0) / r0 = 0 if illegal date / rdate: mov r1,-(sp) /save regs mov r2,-(sp) mov r3,-(sp) clr dfields /initialize subfields clr dfields+2 clr dfields+4 clr r1 /initialize 1st subfield looked at clr r2 /initialize 1st digit being looked at 0: cmpb *8(sp),$'\n /is it <newline> char? beq 1f /branch if yes cmpb *8(sp),$'/ /is it "/"? beq 2f /branch if yes cmpb *8(sp),$60 blo 9f /branch if not dec digit cmpb *8(sp),$71 bhi 9f /branch if not dec digit cmp r2,$1 /how many digits preceded this? bhi 9f /error branch if 2 inc r2 /inc. no. digits in this subfield cmp r2,$1 /is it 1st digit? bne 3f /branch if no movb *8(sp),dfields(r1) /move to subfield sub $60,dfields(r1) /change to binary inc 8(sp) /increment to next char br 0b /go to top loop 3: mov dfields(r1),mq mov $10.,mul /mult. subfield by 10. and store mov mq,dfields(r1) movb *8(sp),r3 sub $60,r3 add r3,dfields(r1) /add 2nd digit to subfield inc 8(sp) /inc to next char br 0b /go to top loop /it's a <newline> char 1: cmp r1,$4 /are there 3 subfields? bne 9f /error branch if no cmp r2,$2 /are there 2 digits for 3rd subfield bne 9f /error branch if no mov dfields+2,-(sp) /move day onto stack swab dfields+4 bis dfields+4,dfields mov dfields,-(sp) /move yr/mo onto stack jsr r5,idate /jump to sub to crunch into 1 bin word 4: mov (sp)+,r3 /restore regs mov (sp)+,r2 mov (sp)+,r1 mov (sp)+,(sp) /return to caller rts r5 /control here if "/" 2: cmp r1,$2 /is this 3rd "/" encountered bhi 9f /error branch if yes tst r2 /no digit preceded "/"? beq 9f /error branch if yes add $2,r1 /increment by 2 for each new subfield clr r2 /reinitialize looking for 1st digit inc 8(sp) /inc to next char br 0b /go to top loop /error return 9: clr r0 /indicates illegal date to caller br 4b dfields: .=.+2 /storage for mo/day/yr subfields .=.+2 .=.+2 /"convert date to internal binary" subroutine / input / 4(sp) -> day of month / 2(sp) -> year/month / (sp) -> old r5 / output / r0 = year(bits 15-9)/day(bit 8-0) / r0 = 0 if illegal date idate: mov r1,-(sp) /save r1 cmp 6(sp),$31. /is day of month > 31.? bhi 9f /error branch if yes cmpb 5(sp),$99. /check year bhi 9f /error if not in range cmpb 4(sp),$12. /check month bhi 9f /error if not in range decb 4(sp) /allows month to be used as index movb 4(sp),r1 bitb $3,5(sp) /is it leap year? bne 2f /branch if not leap year cmp r1,$1 /is month Feb? bne 0f /branch if not cmp 6(sp),$29. /is Feb day > 29.? bhi 9f /error branch if yes br 3f 0: cmpb 6(sp),months(r1) /too many days in month? bhi 9f /error branch if yes 1: cmp r1,$1 /is month after Feb? blos 2f /branch if not inc 6(sp) /add 1 day for Feb 29. br 3f 2: cmpb 6(sp),months(r1) /is day of month over max for month bhi 9f /error branch if yes 3: dec r1 blt 4f movb months(r1),r0 add r0,6(sp) /add months days to total br 3b 4: bicb $377,4(sp) /clear month field from yr/mo asl 4(sp) /shift year into bits 15-9 bis 4(sp),6(sp) /form binary date / normal return sequence 5: mov 6(sp),r0 6: mov (sp)+,r1 /restore r1 mov (sp),4(sp) / move old r5 up 2 words on stack cmp (sp)+,(sp)+ /pop 2 words off stack rts r5 /error return 9: clr r0 br 6b ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f21.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000003671�14735414536�012123� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even / "convert date from internal to ASCII" subroutine / input in r0 / output in 8 bytes starting at address pointed to by / address after subroutine jump to "edate" / edate: mov r1,-(sp) /save regs mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) mov (r5)+,r4 /inc r5 over address arg. also mov r0,r2 mov r0,r3 tst r0 beq 7f /branch if null date bic $177000,r3 /r3 now contains Julian day asr r2 swab r2 bic $177600,r2 /r2 now contains year cmp $99.,r2 blo 9f /branch if year range error bit $3,r2 /test for leap year bne 1f /branch if not leap year cmp $366.,r3 blo 9f /branch if Julian day too large mov $1,months+12. /set flag to indicate leap year br 2f 1: cmp $365.,r3 blo 9f /branch if Julian day too large clr months+12. /set flag to indicate non-leap yr 2: clr r1 2: movb months(r1),r0 cmp r1,$1 /is month Feb.? bne 4f /branch if not add months+12.,r0 /add 0 or 1 to Feb. day count 4: cmp r0,r3 bge 3f sub r0,r3 inc r1 br 2b 3: /at this pt. /r1 = month - 1 /r2 = year /r3 = day of month inc r1 clr r0 mov r1,mq mov $10.,div mov ac,r1 mov mq,r0 add $60,r0 add $60,r1 swab r1 bis r1,r0 mov r0,(r4)+ /move 2 month digits to output mov r3,r1 clr r0 mov r1,mq mov $10.,div mov ac,r1 mov mq,r0 add $60,r0 add $60,r1 swab r0 bis $"/\0,r0 mov r0,(r4)+ /move "/d" to output /where "d" = 1st month digit bis $"\0/,r1 mov r1,(r4)+ /move "d/" to output /where "d" is 2nd month digit mov r2,r1 clr r0 mov r1,mq mov $10.,div mov ac,r1 mov mq,r0 add $60,r0 add $60,r1 swab r1 bis r1,r0 mov r0,(r4) /move 2 yr digits to output br 8f 7: clr (r4)+ clr (r4)+ clr (r4)+ clr (r4) 8: mov (sp)+,r4 mov (sp)+,r3 /restore regs mov (sp)+,r2 mov (sp)+,r1 rts r5 /return 9: /error leg mov $"BA,(r4)+ mov $"D ,(r4)+ mov $"DA,(r4)+ mov $"TE,(r4) br 8b months: .byte 31.,28.,31.,30.,31.,30.,31.,31.,30.,31.,30.,31. .=.+2 /reserved for leap year flag �����������������������������������������������������������������������old_fs/asm/f23.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000003737�14735414536�012130� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even /"odate" handles printing and substituting of the opening date field odate: mov r1,-(sp) /save r1 tst token2 /"/" present? bne 0f jsr r5,wdate /write date j.odate br 9f 0: tst token3 /"*" present? beq 1f /branch if no clr j.odate /null-out date movb $1,cflag /set core changed br 9f 1: inc token2 mov token2,-(sp) jsr r5,rdate /validate date tst r0 /date legal? bne 2f /branch if yes jsr r5,mesg <3ILL DATE4\n\0> .even movb $1,eflag /set error flag br 9f 2: mov r0,j.odate /substitute new date movb $1,cflag /set core changed 9: mov (sp)+,r1 /restore r1 rts r5 /return .even /"cdate" handles printing and substituting of the closing date field cdate: mov r1,-(sp) /save r1 tst token2 /"/ present? bne 0f jsr r5,wdate /write date j.cdate br 9f 0: tst token3 /"*" present? beq 1f /branch if no clr j.cdate /null-out date movb $1,cflag /set core changed br 9f 1: inc token2 mov token2,-(sp) jsr r5,rdate /validate date tst r0 /date legal? bne 2f /branch if yes jsr r5,mesg <3ILL DATE4\n\0> .even movb $1,eflag /set error flag br 9f 2: mov r0,j.cdate /substitute new date movb $1,cflag /set core changed 9: mov (sp)+,r1 /restore r1 rts r5 /return .even /"ddate" handles printing and substituting of the deadline date field ddate: mov r1,-(sp) /save r1 tst token2 /"/" present? bne 0f jsr r5,wdate /write date j.ddate br 9f 0: tst token3 /"*" present? beq 1f /branch if no clr j.ddate /null-out date movb $1,cflag /set core changed br 9f 1: inc token2 mov token2,-(sp) jsr r5,rdate /validate date tst r0 /date legal? bne 2f /branch if yes jsr r5,mesg <3ILL DATE4\n\0> .even movb $1,eflag /set error flag br 9f 2: mov r0,j.ddate /substitute new date movb $1,cflag /set core changed 9: mov (sp)+,r1 /restore r1 rts r5 /return .even /"wdate" subroutine writes an 8-char date wdate: mov *(r5)+,r0 jsr r5,edate bline mov $1,r0 sys write; bline; 8. rts r5 ���������������������������������old_fs/asm/f26.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000007702�14735414536�012127� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even attny: mov r1,-(sp) /save r1 tst token2 /"/" present? bne 0f jsr r5,wattny /write attorney's initials j.attny br 9f 0: tst token3 /"*" present? beq 1f /branch if no clr j.attny /null-out attny initials clr j.attny+2 /and no. field clr j.attny+4 movb $1,cflag /set core changed br 9f 1: inc token2 mov token2,1f jsr r5,rattny /validate attorney 1: 0 j.attny tstb eflag /attorney name legal? bne 2f /branch if no movb $1,cflag /set core changed br 9f 2: jsr r5,mesg <3ILL ATTNY4\n\0> .even 9: mov (sp)+,r1 /restore r1 rts r5 .even dir: mov r1,-(sp) /save r1 tst token2 /"/" present? bne 0f jsr r5,wattny /write attorney's initials j.dir br 9f 0: tst token3 /"*" present? beq 1f /branch if no clr j.dir /null-out attny initials clr j.dir+2 /and no. field clr j.dir+4 movb $1,cflag /set core changed br 9f 1: inc token2 mov token2,1f jsr r5,rattny /validate attorney 1: 0 j.dir tstb eflag /attorney name legal? bne 2f /branch if no movb $1,cflag /set core changed br 9f 2: jsr r5,mesg <3ILL ATTNY4\n\0> .even 9: mov (sp)+,r1 /restore r1 rts r5 .even super: mov r1,-(sp) /save r1 tst token2 /"/" present? bne 0f jsr r5,wattny /write attorney's initials j.super br 9f 0: tst token3 /"*" present? beq 1f /branch if no clr j.super /null-out attny initials clr j.super+2 /and no. field clr j.super+4 movb $1,cflag /set core changed br 9f 1: inc token2 mov token2,1f jsr r5,rattny /validate attorney 1: 0 j.super tstb eflag /attorney name legal? bne 2f /branch if no movb $1,cflag /set core changed br 9f 2: jsr r5,mesg <3ILL ATTNY4\n\0> .even 9: mov (sp)+,r1 /restore r1 rts r5 .even /"wattny" is a subroutine to write an attorney's initials /input: / r5 pts to address of 6 chars to be written / wattny: mov (r5)+,0f /retrieve address arg mov $1,r0 sys write; 0:..; 6 /write attny field rts r5 /"rattny" reads and validates attorney initials /inputs: / r5 pts to address to begin reading from / r5+2 pts to place to store initials if valid /outputs: / eflag = 1 if error; cleared otherwise / attorney initials stored at address pointed to by / r5+2 if legal initials / rattny: mov r1,-(sp) /save regs mov r2,-(sp) mov (r5)+,r1 /retrieve 1st arg mov (r5)+,r2 /retrieve 2nd arg clr temp+2 /reserved for initials clr temp+4 /stripped from input line clr temp+6 mov $temp+2,r0 0: cmpb (r1),$'\n beq 0f movb (r1)+,(r0)+ /move input char cmp r0,$temp+8. blo 0b cmpb (r1),$'\n beq 0f jsr r5,mesg <3ATTNY INITIALS TRUNCATED TO & CHARS4\n\0> .even 0: sys open; f.attnys; 0 mov r0,temp /save "f.attnys" id 0: clr temp+8. /clear field in preparation clr temp+10. /for reading attorney initials clr temp+12. /from attny file mov $temp+8.,r1 1: mov r1,2f mov temp,r0 /id "f.attnys" -> r0 sys read; 2:..; 1 /read 1 attny initials char tst r0 beq 8f /branch if at end file cmpb (r1),$', /at end initials? beq 3f cmpb (r1),$'\n /at end initials? beq 3f inc r1 cmp r1,$temp+14. /attnys initials over 6 chars? blos 1b 2: jsr r5,mesg <3ATTNY FILE BAD AROUND "\0> .even mov $1,r0 sys write; temp+8.; 6 jsr r5,mesg <"4\n\0> .even jsr r5,ioerror <53> /BAD ATTNY FILE ENTRY 3: clrb (r1) /clear "," or "\n" from field mov $temp+2,r0 mov $temp+8.,r1 3: cmpb (r0)+,(r1)+ bne 4f cmp r1,$temp+14. blo 3b br 7f /successful match 4: mov temp,r0 sys read; temp+8.; 1 /read 1 attny name char tst r0 beq 8f /at end file and no match cmpb temp+8.,$', /at end attny name? beq 0b cmpb temp+8.,$'\n /at end attny name? bne 4b br 0b /start compare at next initials 7: /transfer here if match clrb eflag /reset error indicator mov $temp+2,r1 7: movb (r1)+,(r2)+ /move valid initials to cmp r1,$temp+8. /specified place blo 7b br 9f 8: movb $1,eflag /set error indicator 9: mov temp,r0 /"f.attnys" id -> r0 sys close mov (sp)+,r2 /restore regs mov (sp)+,r1 /restore regs rts r5 /return ��������������������������������������������������������������old_fs/asm/f27.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000001634�14735414536�012126� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even /"loc" subroutine handles printing and substituting of / job folder location field / loc: mov r1,-(sp) /save regs mov r2,-(sp) tst token2 /"/" present? bne 0f mov $1,r0 sys write; j.loc; 2 /write location br 9f 0: tst token3 /"*" present? beq 1f /branch if no clr j.loc /null-out location field movb $1,cflag /set core changed br 9f 1: mov token2,r0 add $3,r0 cmp r0,lastchar bne 8f /branch if supplied loc field /not exactly 2 chars long movb -(r0),r1 movb -(r0),r2 swab r1 bis r1,r2 1: cmp r2,$"MH /Murray Hill? beq 2f cmp r2,$"HO /Holmdel? beq 2f cmp r2,$"IH /Indian Hill? beq 2f cmp r2,$"DR /Denver? beq 2f cmp r2,$"DS /destroyed? beq 2f 8: jsr r5,mesg <3ILL LOC4\n\0> .even movb $1,eflag /set error flag br 9f 2: mov r2,j.loc /change loc field movb $1,cflag /set core changed 9: mov (sp)+,r2 /restore regs mov (sp)+,r1 rts r5 /return ����������������������������������������������������������������������������������������������������old_fs/asm/f28.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000001540�14735414536�012123� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even /"dcode" handles printing and substituting of the deadline date / code which may be up to 4 chars in length / dcode: mov r1,-(sp) /save r1 tst token2 /"/" present? bne 0f mov $1,r0 sys write; j.dcode; 4 /write deadline code br 9f 0: tst token3 /"*" present? beq 1f /branch if no clr j.dcode /null-out deadline code clr j.dcode+2 movb $1,cflag /set core changed br 9f 1: mov token2,r0 add $5,r0 cmp lastchar,r0 blos 1f jsr r5,mesg <3DCODE TRUNCATED TO 4 CHARS4\n\0> .even 1: sub $4,r0 /r0 pts to beginning of DCODE /input clr j.dcode /initialize DCODE field to null clr j.dcode+2 mov $j.dcode,r1 cmp r0,lastchar beq 7f /branch if null str for substitute 1: movb (r0)+,(r1)+ /change deadline code cmp r0,lastchar blo 1b 7: movb $1,cflag /set core changed 9: mov (sp)+,r1 /restore r1 rts r5 /return ����������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f29.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000005104�14735414536�012124� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even /"case" handles printing and substituting of one or both case fields case: mov r1,-(sp) /save regs mov r2,-(sp) mov (r5)+,r2 bne 1f /branch if only 1 case tst token2 /"/" present? beq 0f jsr r5,mesg <3ILLEGAL USE OF "CS"4\n\0> .even br 8f 0: jsr r5,wcase j.case1 mov $1,r0 sys write; nl; 1 jsr r5,wcase j.case2 br 9f 1: /only 1 case involved tst token2 /"/" present? bne 1f /branch if yes mov r2,0f jsr r5,wcase 0: .. br 9f 1: /modification being done tst token3 /"*" present? beq 1f /branch if no mov r2,r0 add $10.,r0 0: clr (r2)+ /clear appropriate case field cmp r2,r0 blo 0b movb $1,cflag /indicate core changed br 9f 1: mov token2,r0 inc r0 add $10.,r0 cmp lastchar,r0 blos 0f jsr r5,mesg <3BAD CASE4\n\0> .even br 8f 0: mov token4,r1 0: clrb (r1)+ /null-out rest of 10 chars cmp r1,r0 blo 0b inc token2 mov token2,0f /set ptr to new case jsr r5,rcase 0: .. tstb eflag beq 7f jsr r5,mesg <3BAD CASE4\n\0> .even 8: movb $1,eflag br 9f 7: mov token2,r0 mov r0,r1 add $10.,r1 7: movb (r0)+,(r2)+ /change case field cmp r0,r1 blo 7b movb $1,cflag /indicate core changed 9: mov (sp)+,r2 /restore regs mov (sp)+,r1 rts r5 /return /"rcase" reads case table to validate a case / a case may be 10 chars in length /inputs: / (r5) -> addr of chars to be matched /outputs: / eflag set if error / rcase: mov r1,-(sp) /save regs mov r2,-(sp) mov r3,-(sp) mov (r5)+,r3 /retrieve argument clrb eflag sys open; f.cases; 0 mov r0,temp 0: mov $temp+2,r0 mov r0,r2 1: clr (r0)+ /clear field first cmp r0,$temp+12. blo 1b 1: mov r2,2f mov temp,r0 sys read; 2:..; 1 /read one case char tst r0 /EOF? beq 7f cmpb (r2),$', /at end particular case? beq 2f cmpb (r2),$'\n beq 2f inc r2 cmp r2,$temp+12. /case over 10 chars? blo 1b jsr r5,mesg <3CASE FILE BAD AROUND "\0> .even mov $1,r0 sys write; temp+2; 10. jsr r5,mesg <"4\n\0> .even jsr r5,ioerror <51> /BAD CASE FILE ENTRY 2: clrb (r2) /clear "," or "\n" from field mov $temp+2,r0 mov r3,r1 2: cmpb (r0)+,(r1)+ bne 0b cmp r0,$temp+12. blo 2b br 9f /successful match 7: mov $temp+2,r0 mov r3,r1 7: cmpb (r0)+,(r1)+ bne 7f cmp r0,$temp+12. blo 7b br 9f /successful match 7: movb $1,eflag /set error indicator 9: mov temp,r0 sys close /close "f.cases" file mov (sp)+,r3 /restore regs mov (sp)+,r2 mov (sp)+,r1 rts r5 /return /"wcase" writes a case /input: / (r5) -> addr of case to be written / wcase: mov (r5)+,0f /retrieve arg mov $1,r0 sys write; 0:..; 10. /write up to 10 chars of case rts r5 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f30.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000002571�14735414536�012121� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even /"author" prints and substitutes for one or several authors author: mov r1,-(sp) /save regs mov r2,-(sp) mov (r5)+,r2 tst r2 bne 1f /branch if only 1 author tst token2 /"/" present? beq 0f jsr r5,mesg <3ILLEGAL USE OF "AS"4\n\0> .even br 9f 0: mov $j.auth1,0f mov $1,r0 sys write; 0:..; 30. /write author1 mov $1,r0 sys write; nl; 1 mov $j.auth2,0f mov $1,r0 sys write; 0:..; 30. /write author2 mov $1,r0 sys write; nl; 1 mov $j.auth3,0f mov $1,r0 sys write; 0:..; 30. /write author3 mov $1,r0 sys write; nl; 1 mov $j.auth4,0f mov $1,r0 sys write; 0:..; 30. /write author4 br 9f 1: /only one author involved tst token2 /"/" present? bne 1f /branch if yes mov r2,0f mov $1,r0 sys write; 0:..; 30. /write author1,2,3,or 4 br 9f 1: mov r2,r0 mov r2,r1 add $30.,r1 movb $1,cflag /set core record changed 1: clrb (r0)+ /null out author1,2,3,or 4 cmp r0,r1 blo 1b tst token3 /"*" present? bne 9f /branch if yes mov token2,r0 inc r0 mov r2,r1 add $30.,r2 cmp r0,lastchar /"/<nl>"? beq 9f /branch if yes 2: movb (r0)+,(r1)+ /change author1,2,3,or 4 cmp r0,lastchar /reached <nl>? bhis 9f /branch if yes cmp r1,r2 /over 30 chars? blo 2b /branch if yes cmpb (r0),$'\n /31st char <nl>? beq 9f jsr r5,mesg <AUTHOR TRUNCATED TO 30 CHARS\n\0> .even 9: mov (sp)+,r2 /restore regs mov (sp)+,r1 rts r5 /return ���������������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f31.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000002504�14735414536�012116� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even /"orig" prints or substitutes for one or several originating companies / or BTL areas orig: mov r1,-(sp) /save regs mov r2,-(sp) mov (r5)+,r2 tst r2 bne 1f /branch if only 1 originating co tst token2 /"/" present? beq 0f jsr r5,mesg <3ILLEGAL USE OF "OS"4\n\0> .even br 9f 0: jsr r5,sorig j.orig1 mov $1,r0 sys write; nl; 1 jsr r5,sorig j.orig2 mov $1,r0 sys write; nl; 1 jsr r5,sorig j.orig3 mov $1,r0 sys write; nl; 1 jsr r5,sorig j.orig4 mov $1,r0 sys write; nl; 1 br 9f 1: /only one originating co. tst token2 /"/" present? bne 1f mov r2,0f jsr r5,sorig /write originating co1,2,3,or 4 0: 0 br 9f 1: tst token3 /"*" present? beq 1f /branch if no clr (r2) /clear originating co1,2,3,or 4 br 9f 1: mov token2,r0 inc r0 cmpb (r0),$'A bne 0f mov $1,(r2) br 9f 0: cmpb (r0),$'W bne 0f mov $2,(r2) br 9f 0: mov r0,digitptr jsr r5,atoi 0: .=.+4 tst 0b+2 bne 1f jsr r5,mesg <3ILLEGAL ORIGIN4\n\0> .even movb $1,eflag br 9f 1: mov 0b+2,(r2) 9: mov (sp)+,r2 /restore regs mov (sp)+,r1 rts r5 /return /"sorig" writes an originating company sorig: mov (r5)+,r0 cmp (r0),$1 bne 0f jsr r5,mesg <AT&T\0> .even br 9f 0: cmp (r0),$2 bne 0f jsr r5,mesg <WECo\0> .even br 9f 0: tst (r0) beq 9f clr temp mov (r0),temp+2 jsr r5,itoa temp 9: rts r5 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f32.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000003230�14735414536�012114� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even print: sys intr; setiflag /intercept DEL's jsr r5,mesg <\n\n3\0> .even mov $"dd,bline jsr r5,sstatus jsr r5,tab 30. jsr r5,mesg <4JOB \0> .even mov $"nu,bline jsr r5,sstatus jsr r5,tab 64. mov $"c1,bline jsr r5,sstatus jsr r5,mesg <\n\n\0> .even mov $"ti,bline jsr r5,sstatus jsr r5,mesg <\n\nAuthor(s): \0> .even mov $"a1,bline jsr r5,sstatus jsr r5,tab 58. jsr r5,mesg <Origin(s): \0> .even mov $"o1,bline jsr r5,sstatus jsr r5,mesg <\n\0> .even jsr r5,tab 11. mov $"a2,bline jsr r5,sstatus jsr r5,tab 69. mov $"o2,bline jsr r5,sstatus jsr r5,mesg <\n\0> .even jsr r5,tab 11. mov $"a3,bline jsr r5,sstatus jsr r5,tab 69. mov $"o3,bline jsr r5,sstatus jsr r5,mesg <\n\0> .even jsr r5,tab 11. mov $"a4,bline jsr r5,sstatus jsr r5,tab 69. mov $"o4,bline jsr r5,sstatus jsr r5,mesg <\n\nAttorney : \0> .even mov $"at,bline jsr r5,sstatus jsr r5,tab 57. jsr r5,mesg <Opened: \0> .even mov $"od,bline jsr r5,sstatus jsr r5,mesg <\nSupervisor: \0> .even mov $"su,bline jsr r5,sstatus jsr r5,tab 30. jsr r5,mesg <Location: \0> .even mov $"lo,bline jsr r5,sstatus jsr r5,tab 57. jsr r5,mesg <Closed: \0> .even mov $"cd,bline jsr r5,sstatus jsr r5,mesg <\nDirector : \0> .even mov $"di,bline jsr r5,sstatus jsr r5,tab 57. jsr r5,mesg <DCODE : \0> .even mov $"dc,bline jsr r5,sstatus jsr r5,mesg <\n\n\0> .even sys intr; 0 /disable DEL's rts r5 tab: mov (r5)+,mq mov $8.,div mov mq,0f mov ac,1f mov r1,1f mov $1,r0 sys write; 2f; 1 mov $1,r0 sys write; tabs; 0: 0 mov $1,r0 sys write; blanks; 1: 0 rts r5 2: .byte 15 /return char tabs: < > ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f33.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000003157�14735414536�012125� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .even /"fndindex" looks for a job no. index in index file /inputs: / r5 pts to address of no. being looked for /outputs: / temp, ... , temp+12 contain index if found / r0 = byte offset if found; empty slot offset if not found /calling sequence: / jsr r5,fndindex / number / success_address / failure_address /"sys tell" not used because it doesn't work properly fndindex: mov r1,-(sp) /save regs mov r2,-(sp) clr r1 clr r2 mov (r5)+,r0 mov r0,4f add $2,r0 mov r0,4f+2 mov ri,r0 sys seek; 0; 0 /position at beginning "f.index" 0: inc r1 mov ri,r0 sys read; temp; 12. /read an index entry tst r0 /end file? bne 1f /branch if not tst (r5)+ /inc over success_address tst r2 /empty slot encountered? beq 3f /branch if not mov r2,r1 br 3f 1: cmp temp+6,*4f+2 bne 2f cmpb temp+4,*4f beq 3f 2: tst temp+6 bne 0b tstb temp+4 bne 0b mov r1,r2 /store index of free slot br 0b 3: dec r1 mov r1,mq mov $12.,mul mov mq,r0 mov (sp)+,r2 /restore regs mov (sp)+,r1 mov (r5),r5 rts r5 /return 4: .=.+2 /storage for address of no. .=.+2 ioerror: movb (r5)+,1f+11. movb (r5)+,1f+12. jsr r5,mesg 1: <3IO ERROR 4\n\0> .even 4 .even /"putindex" writes current "j.index" entry to index file putindex: jsr r5,fndindex /find slot j.number 0f 0f 0: mov r0,j.index+2. /move index slot ptr. /to job index entry mov r0,0f /move index slot ptr. mov wi,r0 sys seek; 0:..; 0 /seek index slot sys write; j.index; 12. /write index entry to slot rts r5 /return .even nosave: clrb cflag /reset changed core flag rts r5 /return flengths: .=.+14. slchar: <\\> orchar: <||> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f34.s������������������������������������������������������������������������������������0000644�0001750�0001750�00000000367�14735414536�012126� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ sys open; savesub; 0 mov r0,ri sys creat; xjunk; 17 mov r0,wi mov ri,r0 sys seek; 20; 0 sys read; buffer; 1100. mov wi,r0 sys write; buffer; 1100. sys exit ri: .=.+2 wi: .=.+2 buffer: .=.+1100. savesub: <savesub\0> xjunk: <xjunk\0> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/asm/f35_fragment.s���������������������������������������������������������������������������0000644�0001750�0001750�00000003000�14735414536�013775� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .globl mesg sys open; f.index; 0 mov r0,ri clr r1 /keeps track of used slots clr r2 /keeps track of empty slots clr r3 /keeps track of current slot /offset 0: jsr r5,mesg <\n\n\nINDEX(REAL,EXPECTED)> < JOB NO. FLAGS FILE> < OFFSET LENGTH\0> .even 0: mov ri,r0 sys read; j.index; 12. /read index entry tst r0 bne 1f jmp 9f 1: jsr r5,mesg /skip to next line <\n \0> .even clr temp mov r3,temp+2 mov $5,r0 jsr r5,itoa /print real index offset temp jsr r5,mesg < \0> .even tst j.number+2 bne 1f tst j.number bne 1f inc r2 /inc empty slot count add $12.,r3 jsr r5,mesg <EMPTY\0> .even br 0b 1: clr temp mov j.index+2,temp+2 mov $5,r0 jsr r5,itoa /print expected offset temp jsr r5,mesg < \0> .even mov j.number,temp bic $177776,temp mov j.number+2,temp+2 mov $5,r0 jsr r5,itoa /print job no. temp bitb $2,j.number /"-S" no.? beq 1f jsr r5,mesg <-S \0> .even br 2f 1: jsr r5,mesg < \0> .even 2: mov $"00,flags mov $"00,flags+2 mov $"00,flags+4 mov $"00,flags+6 bitb $200,j.number+1 beq 1f movb $'1,flags 1: bitb $100,j.number+1 beq 1f movb $'1,flags+1 1: bitb $40,j.number+1 beq 1f movb $'1,flags+2 1: bitb $20,j.number+1 beq 1f movb $'1,flags+3 1: bitb $10,j.number+1 beq 1f movb $'1,flags+4 1: bitb $4,j.number+1 beq 1f movb $'1,flags+5 1: bitb $2,j.number+1 beq 1f movb $'1,flags+6 1: bitb $1,j.number+1 beq 1f movb $'1,flags+7 1: mov $1,r0 sys write; flags; 8. /print flags jsr r5,mesg < \0> .eold_fs/asm/roff1.s����������������������������������������������������������������������������������0000644�0001750�0001750�00000013661�14735414536�012550� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/ roff1 -- text formatter / rts = 104000 nop = 000240 ibuf: /init code in ibuf+obuf cmp sp,$end bhi 1f jsr r5,string; emes1 sys exit 1: clr r0 jsr pc,mesg sys intr; place jsr pc,makebf sys open; suffil; 0 bes 1f mov r0,suff sys seek; 14; 0 bes 1f mov suff,r0 sys read; suftab; 2*26. 1: clr r0 mov (sp)+,argc dec argc bne 1f jmp done 1: tst (sp)+ mov (sp),r4 cmpb (r4)+,$'= bne 5f inc stop br 3f 5: tstb -(r4) cmpb (r4)+,$'+ bne 2f jsr r5,pnum; pfrom br 3f 2: cmpb -1(r4),$'- bne 2f jsr r5,pnum; pto 3: dec argc bgt 1b 2: mov $nop,get1a mov $ibuf,ibufp mov $ibuf,eibuf mov sp,argp jsr pc,topbot clr r0 1: movb r0,trtab(r0) inc r0 cmp r0,$128. bne 1b jsr pc,rbreak jmp loop makebf: sys stat; bfn; stbuf bec 2f sys creat; bfn; 10 bec 1f 2: incb bfn+8 cmpb bfn+8,$'z ble makebf jmp place 1: mov r0,ibf sys write; sufbuf;128. sys open; bfn;0 mov r0,ibf1 rts pc string: mov (r5)+,r1 mov r1,r2 mov r1,0f 1: tstb (r1)+ bne 1b sub r2,r1 mov r1,1f mov $1,r0 sys write; 0:..; 1:.. rts r5 emes1: <Too many files.\n\0> xxx: .even obuf=ibuf+128. /.=ibuf+256. loop: clr nlflg jsr pc,getchar cmpb r0,cc beq 2f movb r0,ch jsr pc,text br loop 2: jsr pc,control jsr pc,flushi br loop mesg: tst r0 bne setsame sys fstat; stbuf mov stbuf,-(sp) sys stat; ttyx; stbuf mov (sp)+,r0 sub stbuf,r0 add $'0,r0 movb r0,ttyx+8. sys stat; ttyx; stbuf mov $15,0f bit $1,stbuf+2 bne setno mov $14,0f setno: sys chmod; ttyx; 14 rts pc setsame: sys chmod; ttyx; 0:.. rts pc pnum: mov r4,ibufp mov $37777,eibuf jsr r5,number1; 0 mov r0,*(r5)+ clr ch rts r5 flushi: clr ch tst nlflg bne 1f jsr pc,getchar br flushi 1: rts pc gettchar: tst ul ble getchar tst ulstate beq 3f tst bsc bgt 1f tst ulc bgt 2f clr ulstate br 3f 1: dec bsc mov $010,r0 rts pc 2: dec ulc mov $'_,r0 rts pc 3: jsr pc,getchar cmp r0,$'0 blt 1f cmp r0,$'9 ble 2f cmp r0,$'A blt 1f cmp r0,$'Z ble 2f cmp r0,$'a blt 1f cmp r0,$'z ble 2f 1: tst ulc bgt 3f rts pc 3: mov $1,ulstate mov r0,ch br gettchar 2: inc bsc inc ulc rts pc getchar: mov ch,r0 beq 1f clr ch rts pc 1: tst nlflg beq 1f mov $'\n,r0 rts pc 1: jsr pc,get1 cmp r0,$'\\ bne 2f jsr pc,get1 jsr r5,switch; esctab br 3f 2: cmp r0,$033 /prefix bne 3f jsr pc,get1 jsr r5,switch; pfxtab 3: cmp r0,$'\n bne 3f inc nlflg clr column 3: mov r1,-(sp) jsr pc,width add r1,column mov (sp)+,r1 rts pc esctab: .byte 'd, 032 /hlf (down) .byte 'u, 035 /hlr (up) .byte 'r, 036 /flr (reverse) .byte 'x, 016 /SO (extra chars) .byte 'y, 017 /SI (normal characters) .byte 'l, 0177 /delete .byte 't, 011 /hor tab .byte 'a, 0100 /at sign .byte 'n, 043 /number sign .byte '\\, 134 /backslash .byte 0, 0 pfxtab: .byte '7, 036 /flr .byte '8, 035 /hlr .byte '9, 032 /hlf .byte '4, 030 /brs .byte '3, 031 /rrs .byte '1, 026 /set hor tabs .byte '2, 027 /clr hor tabs .byte 0,0 pfxtab1: switch: mov r1,-(sp) mov (r5)+,r1 1: cmpb (r1)+,r0 beq 1f tstb (r1)+ bne 1b cmp r1,$pfxtab ble 0f cmp r1,$pfxtab1 bgt 0f mov $037,r0 0: mov (sp)+,r1 rts r5 1: movb (r1)+,r0 mov (sp)+,r1 rts r5 get1: tst nspace ble 1f dec nspace mov tabc,r0 rts pc 1: mov r1,-(sp) 4: tst ip beq 5f jsr pc,rbf br 6f 5: tst nx bne 0f mov ibufp,r1 cmp r1,eibuf bne 3f 0: mov ifile,r0 bne 2f 1: jsr pc,nextfile 2: clr nx sys read; ibuf; 128. bes done tst r0 beq 1b mov $ibuf,r1 add r1,r0 mov r0,eibuf 3: movb (r1)+,r0 mov r1,ibufp 1: cmp r0,$011 /tab bne 6f mov (sp)+,r1 mov $tabtab,r0 inc nspace 1: tstb (r0) beq get1 cmpb column,(r0)+ bge 1b movb -(r0),nspace sub column,nspace br get1 6: get1a: br 7f tst r0 beq 4b 7: mov (sp)+,r1 rts pc nextfile: mov ifile,r0 beq 1f sys close 1: tst nx beq 2f mov $nextf,0f br 3f 2: dec argc blt done mov *argp,0f add $2,argp 3: sys open; 0:..; 0 bes done mov r0,ifile rts pc done: jsr pc,rbreak jsr pc,eject jsr pc,flush place: sys intr; 0 mov $1,r0 jsr pc,mesg sys unlink; bfn sys exit putchar: cmp pn,pfrom blt 2f clr pfrom bic $!177,r0 beq 2f movb trtab(r0),r0 cmp r0,$' bne 1f inc nsp 2: rts pc 1: cmp r0,$'\n bne 1f clr nsp br 2f 1: tst nsp beq 2f mov r0,-(sp) mov $' ,r0 jsr pc,2f mov (sp)+,r0 dec nsp br 1b 2: cmp r0,$026 blt 2f cmp r0,$037 beq 3f bgt 2f mov r0,-(sp) jsr r5, switch; unpfx cmp (sp)+,r0 beq 2f mov r0,-(sp) mov $033,r0 /prefix jsr pc,2f mov (sp)+,r0 2: movb r0,*obufp inc obufp cmp obufp,$obuf+128. beq flush 3: rts pc rts pc unpfx: .byte 032, '9 .byte 035, '8 .byte 036, '7 .byte 031, '3 .byte 030, '4 .byte 026, '1 .byte 027, '2 .byte 0,0 flush: mov obufp,r0 sub $obuf,r0 mov r0,0f mov $1,r0 sys write; obuf; 0:0 mov $obuf,obufp rts pc control: jsr pc,getchar mov r0,-(sp) jsr pc,getchar swab r0 bis (sp),r0 mov $contab,r1 1: mov (r1)+,(sp) bic $100000,(sp) cmp r0,(sp) bne 4f mov (r1),(sp) tst -(r1) bpl 3f jsr pc,flushi cmp ilistp,$iliste bgt 5f mov ip,*ilistp add $2,ilistp mov (sp),ip br 5f 3: jmp *(sp)+ 4: cmp (r1)+,$-1 bne 1b 5: tst (sp)+ rts pc contab: <ad>; casead <bp>; casebp <br>; casebr <cc>; casecc <ce>; casece <ds>; caseds <fi>; casefi <in>; casein <ix>; caseix <li>; caseli <ll>; casell <ls>; casels <na>; casena <ne>; casene <nf>; casenf <pa>; casepa <bl>; casebl <pl>; casepl <sk>; casesk <sp>; casesp <ss>; casess <ta>; caseta <ti>; caseti <tr>; casetr <ul>; caseul <un>; caseun <he>; casehe <hx>; casehx <fo>; casefo <eh>; caseeh <oh>; caseoh <ef>; caseef <of>; caseof <m1>; casem1 <m2>; casem2 <m3>; casem3 <m4>; casem4 <hc>; casehc <hy>; casehy <n1>; casen1 <n2>; casen2 <nn>; casenn <ni>; caseni <jo>; casejo <ar>; casear <ro>; casero <nx>; casenx <po>; casepo <de>; casede <ig>; caseig <tc>; casetc <mk>; casemk bnames: .=.+40. -1; -1 �������������������������������������������������������������������������������old_fs/asm/suftab_fragment.s������������������������������������������������������������������������0000644�0001750�0001750�00000005000�14735414536�014666� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/ suftab - suffix table suftab: sufa 0 sufc sufd sufe suff sufg sufh sufi 0 sufk sufl sufm sufn 0 sufp 0 sufr sufs suft 0 0 0 0 sufy 0 sufa: .byte 2,200+'t /-TA .byte 2,200+'s /-SA .byte 3,200+'t,'r /-TRA .byte 3,200+'d,'r /-DRA .byte 3,200+'b,'r /-BRA .byte 2,200+'p /-PA .byte 2,200+'n /-NA .byte 2,200+'m /-MA .byte 3,200+'p,'l /-PLA .byte 2,200+'l /-LA .byte 2,200+'k /-KA .byte 3,200+'t,'h /-THA .byte 3,200+'s,'h /-SHA .byte 2,200+'g /-GA .byte 2,200+'d /-DA .byte 2,200+'c /-CA .byte 2,200+'b /-BA .byte 0 sufc: .byte 4,'e,'t,200+'i /ET-IC .byte 7,'a,'l,200+'i,'s,200+'t,'i /AL-IS-TIC .byte 4,'s,200+'t,'i /S-TIC .byte 4,'p,200+'t,'i /P-TIC .byte 5,200+'l,'y,'t,200+'i /-LYT-IC .byte 4,'o,'t,200+'i /OT-IC .byte 5,'a,'n,200+'t,'i /AN-TIC .byte 4,'n,200+'t,'i /N-TIC .byte 4,'c,200+'t,'i /C-TIC .byte 4,'a,'t,200+'i /AT-IC .byte 4,'h,200+'n,'i /H-NIC .byte 3,'n,200+'i /N-IC .byte 3,'m,200+'i /M-IC .byte 4,'l,200+'l,'i /L-LIC .byte 4,'b,200+'l,'i /B-LIC .byte 3,'l,200+'i /L-IC .byte 3,'h,200+'i /H-IC .byte 3,'f,200+'i /F-IC .byte 3,'d,200+'i /D-IC .byte 3,200+'b,'i /-BIC .byte 3,'a,200+'i /A-IC .byte 3,200+'m,'a /-MAC .byte 3,'i,200+'a /I-AC .byte 0 sufd: .byte 4,200+'w,'o,'r /-WORD .byte 4,200+'l,'o,'r /-LORD .byte 4,200+'f,'o,'r /-FORD .byte 4,200+'y,'a,'r /-YARD .byte 4,200+'w,'a,'r /-WARD .byte 5,200+'g,'u,'a,'r /-GUARD .byte 4,200+'t,'a,'r /-TARD .byte 5,200+'b,'o,'a,'r /-BOARD .byte 4,200+'n,'a,'r /-NARD .byte 5,200+'l,'i,'a,'r /-LIARD .byte 4,200+'i,'a,'r /-IARD .byte 4,200+'g,'a,'r /-GARD .byte 4,200+'b,'a,'r /-BARD .byte 3,200+'r,'o /-ROD .byte 4,200+'w,'o,'o /-WOOD .byte 4,200+'h,'o,'o /-HOOD .byte 4,200+'m,'o,'n /-MOND .byte 4,200+'t,'e,'n /-TEND .byte 5,200+'s,'t,'a,'n /-STAND .byte 4,200+'l,'a,'n /-LAND .byte 4,200+'h,'a,'n /-HAND .byte 4,200+'h,'o,'l /-HOLD .byte 4,200+'f,'o,'l /-FOLD .byte 5,200+'f,'i,'e,'l /-FIELD .byte 3,200+'v,'i /-VID .byte 3,200+'c,'i /-CID .byte 4,200+'s,'a,'i /-SAID .byte 4,200+'m,'a,'i /-MAID .byte 4,'t,200+'t,'e /T-TED .byte 3,'t,200+'e /T-ED .byte 4,200+'d,'r,'e /-DRED .byte 4,200+'c,'r,'e /-CRED .byte 4,200+'b,'r,'e /-BRED .byte 5,'v,200+'e,'l,'e /V-ELED .byte 100+4,'a,'l,200+'e /AL/ED .byte 140+3,200+'e,'e //EED .byte 40+5,'e,'d,200+'d,'e /ED-DED .byte 4,'d,200+'d,'e /D-DED .byte 40+4,'e,'d,200+'e /ED-ED .byte 3,'d,200+'e /D-ED .byte 5,200+'d,'u,'c,'e /-DUCED .byte 300+2,'e /E/D .byte 5,200+'s,'t,'e,'a /-STEAD .byte 4,200+'h,'e,'a /-HEAD .byte 0 sufe: .byte 5,'a,'r,200+'i,'z /AR-IZE .byte 5,'a,'n,200old_fs/paper/���������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14735415531�011663� 5����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/paper/f02_fragment���������������������������������������������������������������������������0000644�0001750�0001750�00000005000�14735414536�014057� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������widdle factors for both DIT and DIF can be found by looking at Fig.|3 .ul backwards and reversing the arrows. Fig.|5 shows an algorithm for avoiding bit-reversal, at the cost of doing a "not-in-place" algorithm. Only the DIT version is shown but DIF can easily be done by placing twiddles after the nodes. .pg Fig.|6 shows how an FFT algorithms can be designed which makes use of a high speed scratch memory. We will discuss the hardware implications of this structure later but for now we point out that nodes can be pained and two butterflies done on 4 input samples so that these samples pass through 2 FFT stages before the next 4 samples are handled. For example, if we enter samples 0 and 8 as a pair into node 0 of stage 0 and 4 and 12 into node 4 of stage 0. After doing these 2 butterflies we proceed to node 0, stage 1 and node 4, stage 1, winding up in the same 4 registers 0, 4, 8 and 12. The paths we have followed are indicated by the crosses. In the same way, we can enter registers 1, 5, 9 and 13 and again proceed through 2 stages. In this way, half as many memory cycles are needed, provided that the arithmetic element can handle 4 samples, rather than the usual 2. In this particular version, but reversal takes place since the algorithm can be though t of as "in-place-2 stages at a time". .pg Fig.|7 shows how bit-reversal can be avoided. In this 16 point algorithm the first 2 stages are done as in Fig.|1, namely, straightforward in-place operation. From then on, we enter 4 samples into air arithmetic element to do two butterflies and permits the results as shown in the last two stages. Notice that we are violating our rate not to assign numbers to registers, the propose being to trace through the indexing. Since our register numbering emerges bit-reversal, it follows that the output samples must be normally ordered ( after all, in a completely in-place algorithm, the register numbering is untouched throughout and the result emerges bit -reversal). .pg Fig.|8 is another "two butterflies at a time algorithm" but for a different purpose than Fig.|7. In Fig.|8 we arrange the memory registers so as to be able to read (or write) 2 complex words at a time. Thus, for example, samples 0 and 8 are entered into the butterfly in parallel, saving a memory cycle. The table in the right hand corner shows the desired matching up of samples as the FFT progresses; in order to achieve this match so that parallelism can be maintained, permutation of 4 output points at a time must be performed. For example, the samples 0,8 and 4, 12old_fs/paper/f05_fragment���������������������������������������������������������������������������0000644�0001750�0001750�00000005000�14735414536�014062� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.br .ul Background of the Invention .ta 5 1. .ul Field of the Invention .ta 10 This invention relates to telephone central office main distribution frames and, in particular, to methods for wiring such frames. .ta 5 2. .ul Description of the Prior Art .ta 10 The main distribution frame has been associated with telephone central offices since before the telephone system began to be mechanized. This eqipment serves as an interface between the switching equipment - the inside plant - and the exchange cable network of subscriber lines - the outside plant. The main function of the main distribution frame is to establish a point of flexibility in the telephone system where any one of the subscriber line cable pairs on the outside plant side is connectible to any of the terminating points on the switching equipment side. To perform this function in an organized way, the main distribution frame must hold all of the cross-connecting wire, called jumpers, in a way that permits operating personnel to find one particular terminal pair out of thousands of terminal pairs and to interconnect or to change the connection of this terminal pair with another terminal pair. One of the basic problems with main distribution frames is that in large switching centers main frames can grow to lengths of over 200|feet. With mian distribution frames of such length, the interconnection of widely spaced apart terminal pairs requires jumper cables of a length comparable to the length of the main frame. Once jumpers of lengths greater than a few tens of feet are installed, it becomes extremely difficult to remove them when wiring changes are made. Quite frequently, the removal of a relatively long jumper from the main distribution frame will result in the abrading and burning of the insulation of neighboring wires. Allowing an abraded jumper to remain on the main frame would cause it to be susceptible to malfunction through short circuits. Consequently, those jumpers no longer in service are generally allowed to remain in place with new jumpers installed over top of the old jumpers. In addition, the wiring of main distribution frame many feet in length requires more than one wireman to make an inter connection or to effect a change in wiring. The result of this process of administering and wiring the main distribution frame leads to increasing degrees of jumper congestion and the ultimate failure of the main frame. Accordingly, it is one object of the present invention to reduce the degree of jumper congestion on a main distribution frame.old_fs/paper/f11_fragment���������������������������������������������������������������������������0000644�0001750�0001750�00000032514�14735414536�014071� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������s in order to enable electrical contact to be made to underlying metallic layers (e.g., tungsten). Preferably, etching should be carried out just to the point at which the dielectric material is completely removed from the surface of the metallic regions. Prior to that point, incomplete etching leads to poor contact to the underlying metallic layer. Subsequent to that point, undesirable undercutting of the dielectric layer occurs. The present use of calibration curves of etch rate as a function of temperature to achieve the desired end point does not always lead to consistent results. .br .ul Summary of the Invention In accordance with the invention, a method is disclosed for monitoring the progress of chemical etching, which is used to open up contact windows in a dielectric layer. .ta 10 The method, which is electrochemical in nature, requires both an electrode under the dielectric layer to which electrical connection may be easily made and sufficient current to be easily measured. To determine when etching is complete, a metallic region beneath the dielectric layer serves as one monitoring electrode. Prior to the completion of chemical etching, this electrode is biased at a instant potential relative to a second electrode, which is also immersed in the chemical etchant. A measurement is made of current, which is proportional to the area of metal exposed through the dielectric as the chemical etching proceeds. The chemical etching is considered complete when the current rises to and attains a substantially constant value. A preferred embodiment is directed to the processing of integrated circuit devices on semiconductor slices, in which windows or apertures must be etched through a dielectric layer of silicon nitride to an underlying patterned tungsten layer in order to prepare the devices for connection to external circuitry. In the practice of the invention, a separate tungsten test region may be formed along the perimeter of the slice at the same time that the patterned tungsten layer is formed. The test region may be of known dimensions, and the dielectric layer above it may be completely etched. Alternatively, apertures or windows of known area in the dielectric layer may be etched. Where the substrate is a semiconductor having a doping level sufficiently high to support conduction and where portions of the patterned metallic layer make electrical contact with portions of the semiconductor, then the metallic layer itself may serve as the test region. In such a case, monitoring may be done by contacting the backside of the semiconductor slice. .br .ul Brief Description of the Drawing The Figure is a section view, partly schematic, of apparatus used in the practice of the invention. .br .ul Detailed Description of the Invention .ta 10 The Drawing is discussed in terms of the preferred embodiment, which is the monitoring of chemical etching of portions of a protective dielectric layer overlying integrated circuit devices. The chemical etching procedure is performed just prior to a final metallization step for interconnecting the devices to external circuitry. As is shown in the Figure, a substrate|13, consisting of a semiconductor material such as silicon and the like, has already been processed by methods well-known in the art of fabricating integrated circuit devices. A protective film|14 of silicon dioxide, for example, formed by well-known methods, covers the surface of the substrate. Apertures 14a in the protective film enable regions of a metallic layer|16, consisting of tungsten, for example, to make electrical contact to selected portions of substrate|13. The apertures may be produced by well-known photoresist and etching techniques. An insulating film|17, consisting of silicon nitride, for example, portions of which are to be etched, is shown deposited on both metallic layer|16 and protective film|14. As described in Vol.|114, .ul Journal of Electrochemical Society, pp.|869-872 (1967), a second protective film|18 is shown deposited on the silicon nitride film|17. The second film, which may be any mask material including silicon dioxide, is shown with windows|18a already having been etched using well-known photoresist techniques. It is desired to etch the portions of the silicon nitride layer|17 thus exposed by the windows|18a in layer|18. As shown in the Figure, this is accomplished by partly immersing the substrate in a chemical etchant|12, contained in container|11. Typically, hot (160|degrees C to 180|degrees C) phosphoric acid (85|percent H938P0948 in water) is used to chemically etch silicon nitride, as is well-known in the art. Following the desired etching of the silicon nitride layer, a patterned metallic layer is formed on the surface of layer|18 in order to enable electrical connection from the exposed tungsten regions|16 to be made to external circuitry. In order to determine when etching is complete through the insulating film|17 to the underlying metallic layer|16, and in accordance with the invention, a method of monitoring is now described. A three-electrode system in conjunction with a commercially available potentiostat is employed to monitor the progress of etching. Such potentiostats may be used to control potentials in three-electrode arrangements consisting of a working electrode, a counter electrode, and a reference electrode, all immersed in the electrolyte. The potential of the working electrode, here a continuous metallic surface, is constantly regulated with respect to the reference electrode. The potentiostat adjusts the applied potential differences between the working electrode and the counter electrode to maintain the potential of the working electrode at a constant value with respect to the reference electrode. In order to measure the area exposed on the working electrode, it is necessary that the potential at that electrode be held constant. If the potential is not held constant, then the end point of chemical etching is not readily determinable, and undercutting of the dielectric may occur as chemical etching proceeds beyond the end point. Accordingly, it is not desirable to use two electrode systems, since variable current passes through these electrodes during the chemical etching of the dielectric film. Consequently, the potential of the working electrode varies, and only the potential difference between the two electrodes remains constant. On the other hand, a three electrode arrangement combined with a potentiostat, enables the potential at the working electrode to be maintained at a constant value, as discussed above, and hence is preferred. To employ the monitoring technique, contact is made to a previously bared portion of the metallic layer|16 by electrode|21, which is connected to one input of a potentiostat 20. However, it will be appreciated that the individual integrated circuit devices are each of exceedingly small surface area. In order to facilitate making electrical connection to the metallic layer|16 and in order to ensure that there is sufficient area of the metallic layer|16 to be exposed to the etchant solution such that the current resulting from the applied potential is easily measured, one of two techniques are conveniently employed. In the first technique, electrical connection is made to a continuous metallic test region|16a, which has previously been fabricated simultaneously with the patterned metallic regions comprising layer|16. In the second technique, contact is made to the backside of the substrate in cases where the resistivity of the substrate is sufficiently low. For silicon, a maximum resistivity of about 10839|ohm-centimeters is permitted. In either event, immersion in solution is made to the extent that electrode|21 does not make contact with the solution. The test region|16a may conveniently be a ring around the circumference of the slice. Such a design, which is incorporated in the mask used to define the metallic layer|16, will ordinarily not interfere with the desired contact patterns on the mask. For example, the test region may be fabricated by masking a ring around the rim of the slices with photoresist during the tungsten patterning step. Thus, following the patterning step, the normal conductor pattern is generated on the active device region of each slice, but the outer ring is continuous tungsten. Alternative designs may also be envisioned which will accomplish the same purpose. In order to expose at least portions of the test region to the electrolyte, a series of windows of known dimension, shown as 18b in the Figure, are formed over such portions simultaneously when windows|18a are formed in the second dielectric film|18. Alternatively, the test region may be of known dimensions, and the portion of the dielectric film|17 above the test region completely etched. A second input of the potentiostat|20 is connected to a reference electrode 22. Examples of reference electrodes include the calomel electrode (mercurous chloride in contact with mercury, both immersed in an aqueous potassium chloride solution of known concentration) and the silver-silver chloride electrode (silver chloride in contact with silver, both immersed in hydrochloric acid). Where the nature of the solution in which monitoring is to be performed is such that the above reference electrodes would be chemically attacked, other suitable reference electrodes may be employed. For example, gold wire is a suitable reference electrode where the chemical etching solution is the hot phosphoric acid described earlier. Although not a necessary part of this description, further details of this aspect may be found in Vol.|2, .ul Electrochemical Technology, pp.|61-64 (1964). Electrical contact with the electrolyte is provided by counter electrode 23, which is connected to one output side of potentiostat 20. Potentiostat circuits have been described in detail elsewhere, and thus do not form a necessary part of this description. See, e.g., Vol.|35, .ul Analytical Chemistry, pp.|1770-1778 (1963). The test region is maintained at a constant potential relative to the reference electrode during the chemical etching, and current is measured. Etching is considered to be complete when the current rises to and attains a substantially constant value, which is a function of the total amount of surface area exposed on the test region. In the etching of portions of a layer of silicon nitride to expose an underlying layer of tungsten using hot phosphoric acid, monitoring in accordance with the invention is conveniently done by measuring the reduction current resulting from the reduction of hydrogen ion to hydrogen gas at the exposed tungsten. Monitoring is performed cathodically only (i.e., tungsten is the cathode), since operating anodically would completely oxidize the tungsten. The range of potential values that may be employed is constrained by the observation that at the less cathodic potentials, there is insufficient current to measure conveniently, while at the more cathodic potentials, the current becomes too high to measure conveniently. In addition, at the more cathodic potentials, capious gas evolution also occurs, which must be avoided, since it interferes with the monitoring procedure. Accordingly, the potential is advantageously maintained at a voltage in the range of from -0.55|volts to -0.70|volts (with respect to the gold reference electrode; with respect to a standard hydrogen electrode, the corresponding range is from -0.21|volts to -0.36|volts). No current is observed to flow initially until the windows 18b are sufficiently chemically etched through for at least a portion of the tungsten to be exposed to the electrolyte|12. Current then begins to flow, and when the windows are completely open, the current reaches a maximum value and remains constant. It is contemplated that the inventive approach will find application in other related systems in which it is desired to chemically etch portions of a dielectric layer covering a metallic layer. For example, where it is desired to chemically etch portions of a layer of P-glass (silicon dioxide containing from less than 1|percent to about 4|percent phosphorous) covering a layer of aluminum, a hydrofluoric acid solution buffered to a pH of about 7 is used. A suitable counter electrode is platinum, and a suitable reference electrode is the standard hydrogen electrode. .br .ul Example .ta 10 Tungsten was deposited in the usual manner on integrated circuit devices previously formed on silicon slices having a diameter of about 3.2 centimeters, with the exception that during the tungsten patterning step, an annular ring of about 2|millimeters in width was formed on the surface of the slice between the periphery of the active devices and the periphery of the slice. In this particular example, a total window area of 0.17|square centimeters was to be etched in the deposited silicon nitride covering the ring. .ta 10 A platinum counter electrode and a gold reference electrode were employed. Applying a potential of -0.675|volts to the tungsten conductor, no current was observed to flow until after about 14|minutes of chemical etching; the etching was complete after an additional period of about 3 minutes. In order to prevent further chemical etching, which would result in deleterious undercutting of the silicon nitride mask layer, the slice was removed from the solution. For the window area of 0.17|square centimeters, the current attained a maximum value of about 600|microamperes, equivalent to a current density of about 3.5|milliamperes per square centimeter. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/paper/f13_fragment���������������������������������������������������������������������������0000644�0001750�0001750�00000011000�14735414536�014056� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������e runstream (<runassigns>), in the order they appear. A parameter can be assigned a value more than once|--|the last assignment holds. .ti-5 (3)||The assignment statements in the <defaults> part of the prototype, in the order they appear except that if the parameter already has a value, the assignment is descarded (without checking the <value> for syntax or other errors), thus preserving the runstream override value. .ti-5 (4)||The assignment statements in the <expansion> part of the prototype, as they are encountered during text generation, except that all lines skipped by control statements are ignored. .ti0 The important points to notice are .ti-5 (a)||Whenever reference replacement in a <value> during any assignment encounters the delete value, the assignment is not made. The parameter retains its old value, if it had one, or remains undefined. .ti-5 (b)||A reference to be replaced during a runstream assignment can access only values established by previous runstream assignments. .ti-5 (c)||A reference to be replaced during an assignment in the <defaults> will access the runstream override value, if one was specified. If none was, the parameter must have been defined by a previous default assignment. .br .ti -5 (d)||A parameter cannot be assigned more than once in the <defaults>|--|only its first default assignment will be made if it wasn't assigned by a runstream override, and not even that if it was. .br .in0 3.2||TEXT GENERATION .ta 20 .nf prototype = defaults expansion expansion = {modelline \| controlstmt}819918 {assignstmt \| modelline \| controlstmt}908 modelline8809 = (any line without +:@___ in column one) controlstmt8809 = lm +_ {goto \| label \| if}8199l8 {comment} .fi .pg After the default assignments have been processed and the first non-assignment line in the prototype has been found, text generation can begin. From here on, assignment statements override runstream assignments. Prototype processing is controlled by the contexts of column one of each line: .in 10 .ti -5 (1)||A masterspace (@), except for an@ADD (see section 4.4), causes Exec-8 to stop passing lines to PROC*DEF. The result is the same as if the end of the prototype has been reached. .ti-5 (2)||A colon indicates an assignment statement. The assignment is made, independent of whether a value already exists, so long as reference replacement in the <value> does not cause deletion. .ti -5 (3)||Anything else in column one causes replacement of all references in the line before further examination. The size limit for this replacement is 80 characters. As usual, the delete value can cause the line to be discarded. After replacement, column one is reexamined: .in 15 .ti-5 (a)||A plus indicates a control statement (<controlstmt>), which specifies conditional or unconditional skipping of succeeding lines. Control statements are described in Section 3.4. .ti-5 (b)||Anything else in column one indicates a text line (<modelline>). .in 0 At this point, the text line is about to be stored in the output file. The only further processing is that a minus in column one is replaced by a masterspace (@). This allows generation of Exec-8 JCL without the need for a reference in column one to produce the masterspace. .br 3.3||89COMMENT-CAUSED DELETION .nf .in 10 .ta 20 assignstmt = lm :_ {b} assign {comment} controlstmt8809 = lm +_ {goto \| label \| if}819918 {comment} comment = b {fdchar}908 .fi .in0 .pg Assignment and control statements can contain comments. A comment is simply a string of text separated from the last significant field on the line by one or more blanks. A comment in an assignment statement has no effect on 89PROC*DEF. A comment in a control statement, however, will cause deletion of the line if it contains a reference whose replacement encounters a delete value. .pg Comment-caused deletion is a handy feature for text lines as well, if the eventual use of the output text permits it. For example, EXEC-8 permits comments on control cards after the sequence blank-period-blank. .sp .ss .in 10 .nf .ta 21 30 :ASM=* -ASM,S MAIN,MAIN %ASM% is deleted .ls2 .in0 .fi Also, Fortran V permits comments after a masterspace in a column other than one. If a processor will only tolerate comments in columns 73-80 of its input, the user must beware of earlier references in a textline causing columns 73-80 to shift to the left. .br 3.4||CONTROL STATEMENTS .nf .ta 20 controlstmt8809 = lm +_ {goto \| label \| if}819918 {comment} .fi .pg A control statement is a prototype line that contains a plus in column one afterold_fs/paper/f15_fragment���������������������������������������������������������������������������0000644�0001750�0001750�00000001000�14735414536�014057� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.pl 78 .ll 60 .tr | .hy 0 .he '''Bobeck-Scovil 79-20' .fo ''- i -'' .na .ds .m1 6 .m2 2 .m3 3 .m4 3 .n1 .nn .ce .sp 9 .ds .ul Abstract of the Disclosure .ta 10 .pa 1 .fo ''- % -'' .ul Description of the Prior Art The current trend in seimiconductor circuit manufacture is toward the attainment of the highest density of circuit functions per unit area of semiconductor. System reliability, speed and economic considerations are advantageously affected by this miniaturization. Although studies have continueold_fs/paper/f20������������������������������������������������������������������������������������0000644�0001750�0001750�00000004352�14735414536�012205� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.pl 78 .tr | .na .m1 10 .m2 4 .m3 3 .m4 2 .fo ''- % -'' .nf Bell Laboratories ||||||Record .sp 2 Mrs. Parsons Mrs. Adamson Miss Byrne Mrs. Tishman .sp 10 MH Patent Library (U-R7,p1) .bp Applied Physics ||||Letters .sp 2 Mr. Hamlin Mr. Torsiglieri Mr. Anderson Mr. Birnbaum Mr. Businger Mr. Canepa Mr. Caplan Mr. Collins Mr. Fox Mr. Friedman Mr. Indig Mr. Nilsen Mr. Sherman Mr. Urbano .sp Mr. O'Konski Mr. Wisner .sp 8 MH Patent Library (U-R7,p2) .bp Official Gazette ||||Notices .sp 2 Copy 6 .sp 2 Mr. Steinmetz Mr. Adams Mr. Cameron Mr. Dubosky Mr. Gurey Mr. Hurewitz Mr. McDonnell Mr. Moran Mr. Mullarney Mr. Tannenbaum Mr. Tirva Mr. Tobe .sp 6 HO Patent Library (U-R7,p3) .bp Computer World .sp 2 Copy 1 .sp 2 Mr. Falk Mr. Hamlin Mr. Bush Mr. Canepa Mr. Cubert Mr. Nester Mr. Nimtz Mr. Padden Mr. Phelan Mr. Popper Mr. Ryan .sp 8 MH Patent Library (U-R7,p4) .bp Official Gazette |||||Notices .sp 2 Copy 4 .sp 2 Mrs. Adamson Miss Reid Mrs. Ther Mr. Falk Mr. Cubert Mr. Davis Mr. Funk Mr. Herndon Mr. Landis Mr. Marshall Mr. Nester Mr. Popper .sp 5 MH Patent Library (U-R7,P5) .bp Scientific American .sp 3 Copy 2 .sp 3 Mr. Torsiglieri Mr. Anderson Mr. Birnbaum Mr. C H Davis Mr. Fox Mr. Friedman Mr. Lockhart Mr. Nilsen Mr. Sherman Mr. Brendzel .sp 8 MH Patent Library (U-R7,p6) .bp IEEE Spectrum .sp 3 Copy 2 .sp 3 Mr. Nester Mr. Dubosky Mr. Havill Mr. McDonnell Mr. Mullarney Mr. O'Konski Mr. Tobe Mr. Wisner .sp 8 MH Patent Library (U-R7,p7) .bp Applied Optics .sp 2 Mr. Hamlin Mr. Torsiglieri Mr. Businger Mr. Canepa Mr. Fox Mr. Indig Mr. Nilsen Mr. Sherman Mr. O'Konski Mr. Wisner .sp 8 MH Patent Library (U-R7,p8) .bp IEEE Transactions on Communication Technology .sp 2 Copy 2 .sp 2 Mr. Hamlin Mrs. R A Ryan Mr. Fisher Mr. Phelan Mr. T A Turner Mr. Steinmetz Mr. Adams Mr. Olinder Mr. Cameron Mr. Dubosky Mr. Gurey Mr. Havill Mr. Lipton Mr. McDonnell Mr. Mularney Mr. Nowak .sp 5 MH Patent Library (U-R7,p9) .bp IBM Journal of Research and Development .sp 2 Copy 1 .sp 2 Mr. Cave Mr. Hamlin Mr. Businger Mr. Canepa Mr. Collins Mr. Phelan Mr. T A Turner Mr. Steinmetz Mr. Havill Mr. Snedeker .sp 8 MH Patent Library (U-R7,p9) .bp Patent Trends .sp 2 Copy 4 .sp 2 Mr. Hirsch Mr. Bush Mr. Murphy Mr. Nimtz Mr. Phillips Mr. Ryan Mr. Stafford .sp 5 MH Patent Library (U-R7,P11) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/paper/f22_fragment���������������������������������������������������������������������������0000644�0001750�0001750�00000001000�14735414536�014055� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.bp .ce .nn What is claimed is: .de cl .sp .n2 1 .ti 9 .. .cl 1. A method for fabricating integrated circuits in which regions of an insulating film overlying a metallic layer are chemically etched by a chemical etchant, characterized in that during chemical etching, .ta 14 (a) a constant potential relative to a reference electrode is maintained on at least a portion of the metallic layer such that a current is passed through a path including said portion of the metallic layer, said regions of the insulatold_fs/paper/f24������������������������������������������������������������������������������������0000644�0001750�0001750�00000001304�14735414536�012203� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.pl 78 .ll 60 .tr | .hy 0 .he '''O`Bryan-Plourde-Thomson 2-2-3' .fo ''- i -'' .na .ls 3 .m1 6 .m2 2 .m3 3 .m4 3 .n1 .nn .ce DEVICES USING LOW LOSS DIELECTRIC MATERIAL .sp 9 .ls 3 .ul Abstract of the Disclosure .ta 10 Devices are described which utilize a low loss dielectric material. This dielectric material is unique in that it combines low dielectric loss with a high and temperature-stable dielectric constant. The material is made up of BaO and TiO928 and corresponds closely in composition to the compound Ba948Ti998O9208. Devices utilizing this material are useful at a variety of frequencies, but are particularly advantageous in the microwave region above 0.5|GHz. .pa 1 .fo ''- % -'' ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/paper/f25_fragment���������������������������������������������������������������������������0000644�0001750�0001750�00000040000�14735414536�014063� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.ul Background of the Invention .ta 5 1. .ul Field of the Invention .ta 10 The invention relates to microwave devices employing resonant elements made from dielectric material with a specific composition of the BaO - TiO928 system. Exemplatory devices are pass-band filters and stop-band filters. .ta 5 2. .ul Description of the Prior Art .ta 10 A variety of electrical devices use dielectric materials of various properties for various purposes. For example, materials with moderately high dielectric constants are used in such devices as dielectric resonator filters, microwave strip-line circuits, various types of oscillators, as well as phase shifters, to name but a few. Dielectric constant is an important variable in the design of such devices, but equally important are low loss and temperature stability. For one class of devices, low loss is necessary to prevent dissipation of the electrical signal and for the design of circuits with high|Q and narrow bandwidth. Temperature stability is required to prevent frequency changes in these devices. Good temperature stability permits much closer control of frequency characteristics when external temperature stabilization is used and may eliminate need for such stabilization in some applications. In addition, external temperature stabilization may not correct for temperature changes due to microwave heating of the dielectric material. Up to the present time it has been relatively easy to obtain materials with high dielectric constant and low loss, but such materials have been accompanied by relatively large temperature variation of the dielectric constant. This temperature variation is measured by a temperature coefficient which represents the change in dielectric constant in parts per million per degree centigrade (ppm/degrees|C). It should be recognized that device characteristics, such as frequency, bandpass, etc., are particularly sensitive to slight variations in dielectric constant. This problem is usually more serious at high frequencies such as the microwave region (0.5|GHz to 200|GHz) as is the problem of low loss. For this reason, dielectric materials suitable for use in the low frequency region (below approximately 100|mc) have not been completely satisfactory in the microwave region. The temperature coefficient of interest here is the one determined by changes of resonance frequency in a resonant circuit. This effective temperature coefficient includes thermal expansion effects as well as dielectric effects. Presently known dielectric materials do not have prevalent use in devices in the microwave region at this time. For example, one of the better materials with 20|mole percent BaO and 80 mole percent TiO928 (formula BaTi948O998) has a dielectric constant of 38.0, a Q|equal to 2500, but a temperature coefficient of -49|ppm/degrees|C at 2-11|GHz (D.|J.|Masse et al, .ul Proc. IEEE, November|1971, page|1628). Although dielectric constant and Q are satisfactory for microwave applications, the temperature coefficient is sufficiently high so that very close temperature control would be required to stabilize device characteristics. Similar results were obtained with a second material with composition 14.0|mole percent BaO and 86.0|mole percent TiO928 exhibiting a dielectric constant of 50.3, a Q of 1600 and a temperature coefficient of 368|ppm/degrees|C at X band frequencies (8-12|GHz, D.|W.|Readey et al, "Microwave High Dielectric Constant Materials," final report on Contract No.|DAABO7-69-C-0455, reports control symbol|OSD01366). .br .ul Summary of the Invention The invention is concerned with microwave devices which employ materials of a specific composition as a dielectric material. The composition of the material involves largely the BaO-TiO928 system. However, limited substitutions of certain oxides for BaO and TiO928 can be made without adverse effects on the dielectric properties of the materials. This is often advantageous economically especially for large scale production in that less pure (and therefore less expensive) materials may be used. Also, the mechanical properties of ceramics made from the material may be improved by these substitutions. A convenient way of defining the composition is in terms of mole percent of divalent metal oxides and mole percent of tetravalent metal oxides. The dielectric material consists essentially of a composition made up of a material that yields 18.0 - 19.0|mole percent of divalent metal oxides [XO], remainder tetravalent metal oxides [YO928]. Of the total amount of XO, up to 0.4 mole percent of the XO is a divalent metal oxide other than BaO (e.g., MgO, CaO, SrO, etc) remainder BaO. Of the total amount of YO928, up to 7 mole percent of the YO928 is a tetravalent metal oxide other than TiO928 (e.g.,ZrO928, HfO928, SnO928, SiO928 etc) remainder TiO928. Oxides other than divalent and tetravalent metal oxides should be avoided and at least be kept below 0.5|mole percent. These oxides to be avoided alter the dielectric properties of these materials, especially the low temperature coefficient. Naturally, 18.0 - 19.0|mole percent BaO, remainder TiO928 is included in the above compositions and is preferred where close quality control is desirable. .ta 10 The material composition corresponds closely to the compound|Ba928Ti998O9208. It is believed that the beneficial characteristics of the claimed composition range originate from the formation of this compound. Although method of preparation is not essential to the invention, a particular procedure has led to good results. This procedure will be described in the detailed description section. Microwave devices utilizing this dielectric material exhibit superior performance because of the high dielectric constant and low loss (high Q) and because the temperature coefficient is particularly low. For example, very close control of the electrical properties of microwave devices can be obtained with external temperatures stabilization and in same applications the need for external temperature stabilization may be eliminated. Typical dielectric properties for these materials are a dielectric constant of 39.8, a Q over 6,000 and an effective temperature coefficient of -5|ppm/degree|C. .br .ul Brief Description of the Drawing FIG.|1 is a graph showing data on dielectric constant (K), quality factor (Q) temperature coefficient (I) as a function of material composition. FIG.|2 shows a side view of a bandpass filter including the dielectric material; FIG.|3 is a top view of a bandpass filter including the dielectric materials; FIG.|4 is a side view of a band reject filter showing the strip line conductor and the dielectric resonator; FIG.|5 is a top view of a complementary filter showing the dielectric material. .br .ul Detailed Description .ta 5 1. .ul Electrical Characteristics as a Function of Composition .ta 10 The invention is best illustrated by a study of the electrical characteristics of the dielectric material as a function of composition. The electrical characteristics are measured in the microwave region since it is in this frequency region that there is considerable difficulty in obtaining suitable properties. The three properties which are of importance for electrical device application are dielectric constant, dielectric loss (or high Q) and temperature coefficient of dielectric constant. These quantities are measured by conventional means. The dielectric constant is obtained by measuring the resultant frequency of the TE90118 mode with the dielectric material in a specific geometry. The dielectric losses are measured by determining the Q of the resonator and the temperature coefficient of the dielectric constant is measured by determining the change in frequency of the resonant mode as a function of temperature. The results are given in FIG.|1 where the dielectric constant, dielectric loss (in terms of the Q) and effective temperature coefficient are plotted as a function of the composition of the dielectric material. Particularly noteworthy is the fact that the absolute value of the effective temperature coefficient is a minimum close to the composition which corresponds to Ba928Ti998O9208. From a device point of view, satisfactory results may be obtained from a dielectric material made up from composition 18.0 - 19.0|mole percent divalent metal oxide (XO) remainder tetravalent metal oxide (YO928) with the restrictions on composition of XO and YO928 outlined in the summary section. For minimum temperature coefficient of dielectric constant, 18.1 - 18.3|mole percent divalent metal oxide remainder tetravalent metal oxide is preferred with the same restrictions on composition of the divalent metal oxides and tetravalent metal oxide as outlined above for the wider composition range. Again, 18.1 - 18.3|BaO remainder TiO928 is included in this composition range and is often preferred where a high degree of quality control might be desirable. It should be noted that this composition corresponds closely to the nominal composition Ba928Ti998O9208 from which it is believed much of the desirable dielectric properties originate. Other studies, such as x-ray studies, indicate that the phase responsible for the unique combination of suitable dielectric properties is nominally Ba928Ti998O9208. For example, these X-ray studies show that at the composition of from 18.1 to 18.3 mole percent BaO, remainder TiO928 (corresponding closely to the composition of Ba928Ti998O9208), only one phase is detected and outside this range, other phases begin to appear. Further, substitutions consistant with the limitations outlined above does not produce any detectable additional phases. .ta 5 2. .ul Preparation of the Dielectric Material .ta 10 A large variety of methods can be used for the preparation of the dielectric material. For example, single crystals might be prepared and used in an electrical device. However, this method is sometimes economically disadvantageous because of the difficulty in preparing single crystals in large quantities and the need for specific shapes and sizes in electrical devices. For this reason a polycrystalline technique is advantageous for preparing a ceramic form of the dielectric material. Method of preparation is illustrated where the divalent metal oxide is BaO and the tetravalent metal oxide is TiO928. Starting material can be any reagents that yields BaO and TiO928 under conditions of the preparation. Reagent grade BaCO938 and TiO928 are convenient. Measured amounts of starting materials are mixed by conventional means, such as ball milling, freeze drying, spray drying etc. The mixed reagents are dried, screened and reacted at a temperature between 1000|degrees|C and 1200|degrees|C for 1 - 48 hours in an atmosphere containing oxygen. A reaction temperature of 1125 to 1175 for a time of 2-6 hours is preferred since it gives a superior product. Also, an oxygen enriched atmosphere, such as an atmosphere containing at least 90|percent oxygen is preferred for the same reason. X-ray analysis can be used to monitor the decomposition of reagent which yields BaO and TiO928 on decomposition and the formation of the reaction product. Additional mixing of the reacted powder is also beneficial. A dielectric body suitable mechanically for making specifically shaped bodies for use in devices is made by either of two methods; hot pressing or sintering. These methods involve densification of the ceramic body so that the density of this body approaches the theoretical density exhibited by, for example, single crystals of the dielectric material. In the hot pressing method the ceramic is exposed to high pressures and temperatures to make a densified product. Typical pressures are 1000-6000|psi, the lower pressure limitation to insure reasonable densification and the upper limitation for convenience since higher pressures do not provide additional benefits and to prevent fracture of the pressure die. Temperature is between 1150 and 1400, the lower limit to insure densification. The upper limit for convenience since higher temperatures does not provide additional benefits. The minimum time is 30|minutes to insure complete reaction; the maximum 10|hours since reaction is complete in this time. The density attained is typically 99|percent of the theoretical. Where required samples are given a reoxidation treatment. This treatment is carried out at a temperature between 900 and 1400|degrees|C, in an oxygen-enriched atmosphere for 10-100|hours. The lower limits are provided to insure reaction; the upper limits for convenience since higher temperature or longer reaction times provides no additional benefits. In the sintering operation the dielectric material is first pressed in a steel die at a pressure between 2000-10,000|psi. The sample is then heated to a temperature between 1300 and 1420|degrees|C where it is maintained for 1-24|hours and then cooled. In the above pressure, temperature and time ranges, the lower limit is imposed to insure proper densification of the body made from the dielectric material. The upper limit is imposed for convenience since no benefits are obtained by exceeding these limits. Rates of heating and cooling higher than 300|degrees|C per hour may have detrimental effects on the product but the lower limit is for convenience only. These samples may also be exposed to a post-firing reoxidation treatment as described above. .ta 5 3. .ul Devices Employing Dielectric Material .ta 10 A variety of devices may be made employing this dielectric material. Particularly advantageous is the fact that strip line techniques may be used which yield devices both smaller in size and lower in cost than waveguide devices traditionally used in the microwave region. Also, performance is superior because of the greater flexibility in device design and characteristics of the dielectric material used in these devices. One class of devices makes use of the dielectric material as a dielectric resonator. The dielectric resonator has dimensions and shape such that for the frequency of the microwave energy of interest, the microwave energy is resonant (has high energy storage) inside the resonator. A typical device is shown in FIGS.|2 and 3. This is a band pass filter which allows a certain band of frequencies to propagate and reject frequencies outside this band pass. The device shown in FIG.|2 is made up of cylindrical resonators|21 and a suspended strip line conductor|22, ceramic substrate|23 and bottom|24 and top|25 ground planes. FIG.|3 shows a top view of this same device with cylindrical resonators|31 and suspended strip line conductors|32. Frequency and band pass characteristics of this device depend largely upon the diameter and height of these cylindrical resonators and spacing between these resonators. In the band pass filter shown in FIGS.|2 and 3, the stripline is interrupted in the structure so the structure is non-propagating (in the absence of dielectric resonators) for microwave energy. One or more dielectric resonators are inserted between the interrupted stripline to couple energy from one stripline to another. Direct coupling is achieved by placing the dielectric resonators close together (less than a quarter wavelength). Coupling can also be achieved by placing the dielectric resonator an odd multiple of one quarter wavelength apart. The wavelength referred to here is the microwave wavelength inside the microwave filter. Typical dimensions of the dielectric resonator for a center band frequency of 4|GHz is diameter 0.6|inches, and height 0.175|inches. FIG.|4 shows a side view of a band reject filter|40 (a certain band of frequencies not propagated by the device). Here cylindrical resonators|41 are shown as well as a strip line conductor|42 and ceramic substrate|43. Here, the stripline is continuous and the structure is propagating in the absence of dielectric resonators. The dielectric resonators are placed an odd quarter wavelength apart and make the structure non-propagating to frequencies surrounding the resonant frequency of the dielectric resonator. FIG.|5 shows a dielectric resonator complementary filter|50 showing dielectric resonators|51 in a propagating waveguide|52 and some dielectric resonators in old_fs/rc/������������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14735415531�011160� 5����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������old_fs/rc/f04���������������������������������������������������������������������������������������0000644�0001750�0001750�00000000105�14735414536�011474� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������as istat1.s mv a.out xxxxxx as istat2.s ld xxxxxx -l a.out rm xxxxxx �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������prev_nsys/������������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14735415531�011336� 5����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������prev_nsys/dmr/��������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14735415531�012120� 5����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������prev_nsys/dmr/rk.c����������������������������������������������������������������������������������0000644�0001750�0001750�00000005027�14735151015�012676� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# /* * RK disk driver */ #include "/sys/nsys/param.h" #include "/sys/nsys/buf.h" #include "/sys/nsys/conf.h" #include "/sys/nsys/user.h" struct buf *rk_q[NRK]; int *rk_ap; struct { int rkds; int rker; int rkcs; int rkwc; int rkba; int rkda; }; #define RKADDR 0177400 #define NRKBLK 4872 #define JRK 1 /* temp */ #define RESET 0 #define GO 01 #define SEEK 010 #define DRESET 014 #define IENABLE 0100 #define DRY 0200 #define ARDY 0100 #define WLO 020000 #define CTLRDY 0200 #define SEEKCMP 020000 #define B_SEEK 02000 rkstrategy(abp) struct buf *abp; { register struct buf *bp; register *qc, *ql; bp = abp; if (bp->b_blkno >= NRKBLK) { bp->b_flags =| B_ERROR; iodone(bp); return; } bp->av_forw = 0; bp->b_flags =& ~B_SEEK; spl5(); if ((ql = *(qc = &rk_q[bp->b_dev.d_minor])) == NULL) { *qc = bp; if (RKADDR->rkcs&CTLRDY) rkstart(); goto ret; } while ((qc = ql->av_forw) != NULL) { if (ql->b_blkno<bp->b_blkno && bp->b_blkno<qc->b_blkno || ql->b_blkno>bp->b_blkno && bp->b_blkno>qc->b_blkno) { ql->av_forw = bp; bp->av_forw = qc; goto ret; } ql = qc; } ql->av_forw = bp; ret: spl0(); } rkstart() { register struct buf *bp; struct buf *sbp; int *qp; for (qp = rk_q; qp < &rk_q[NRK];) { if ((bp = *qp++) && (bp->b_flags&B_SEEK)==0) { sbp = bp; RKADDR->rkda = rkaddr(bp); bp = sbp; rkcommand(IENABLE|SEEK|GO); if (RKADDR->rkcs<0) { /* error bit */ bp->b_flags =| B_ERROR; *--qp = bp->av_forw; iodone(bp); rkerror(); } else bp->b_flags =| B_SEEK; } } } rkaddr(bp) struct buf *bp; { register struct buf *p; p = bp; return(p->b_dev.d_minor<<13 | (p->b_blkno/12)<<4 | p->b_blkno%12); } rkintr() { register struct buf *bp; if (RKADDR->rkcs < 0) { /* error bit */ if (RKADDR->rker&WLO || ++devtab[JRK].d_errcnt>10) rkpost(B_ERROR); rkerror(); } if (RKADDR->rkcs&SEEKCMP) { rk_ap = &rk_q[(RKADDR->rkds>>13) & 07]; devstart(*rk_ap, &RKADDR->rkda, rkaddr(*rk_ap)); } else rkpost(0); } rkpost(errbit) { register struct buf *bp; if (rk_ap) { bp = *rk_ap; bp->b_flags =| B_DONE | errbit; *rk_ap = bp->av_forw; rk_ap = NULL; iodone(bp); devtab[JRK].d_errcnt = 0; rkstart(); } } rkerror() { int *qp; register struct buf *bp; rkcommand(IENABLE|RESET|GO); for (qp = rk_q; qp < &rk_q[NRK];) if ((bp = *qp++) != NULL && bp->b_flags&B_SEEK) { RKADDR->rkda = rkaddr(bp); while ((RKADDR->rkds&(DRY|ARDY)) == DRY); rkcommand(IENABLE|DRESET|GO); } } rkcommand(com) { RKADDR->rkcs = com; while((RKADDR->rkcs&CTLRDY)==0); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������prev_nsys/ken/��������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14735415531�012113� 5����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������prev_nsys/ken/11-45���������������������������������������������������������������������������������0000644�0001750�0001750�00000000312�14735150330�012472� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������11/45 KT FP KW-L MOS 16-24 DD cat PC KL _ MM 48-52 MM 8-12 MM 12-16 MM 0-4 MM 4-8 _ TC RK RF TM _ xx DB PL 24-32 PL 32-48 DD xx 11/20 ROM DA DR-B _ XX DN DC DC DC DB _ DP DC DC DC DC XX ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������prev_nsys/ken/low_fragment.s������������������������������������������������������������������������0000644�0001750�0001750�00000003667�14735150044�014772� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������all; _rfintr .globl _rkintr rkio: jsr r0,call; _rkintr .globl _tcintr tcio: jsr r0,call; _tcintr .globl _tmintr tmio: jsr r0,call; _tmintr .globl _klrint klin: jsr r0,call; _klrint .globl _klxint klou: jsr r0,call; _klxint .globl _pcrint pcin: jsr r0,call; _pcrint .globl _pcpint pcou: jsr r0,call; _pcpint .globl _dcrint dcin: jsr r0,call; _dcrint .globl _dcxint dcou: jsr r0,call; _dcxint .globl _dprint dpin: jsr r0,call; _dprint .globl _dpxint dpou: jsr r0,call; _dpxint .globl _dnint dnou: jsr r0,call; _dnint .globl _vsrintr vsin: jsr r0,call; _vsrintr .globl _vsxintr vsou: jsr r0,call; _vsxintr .globl _vtintr dr11ca: dr11cb: jsr r0,call; _vtintr .globl _draaint dr11aa: jsr r0,call; _draaint .globl _drabint dr11ab: jsr r0,call; _drabint .globl _catintr catin: catou: jsr r0,call; _catintr SSR0 = 177572 SSR1 = 177574 SSR2 = 177576 .globl _trap, _ssr .globl _nofault trap: mov PS,-4(sp) mov SSR0,_ssr mov SSR1,_ssr+2 mov SSR2,_ssr+4 mov $1,SSR0 tst _nofault bne 1f jsr r0,call1; _trap 1: mov _nofault,(sp) rti PS = 177776 mfpi = 6500^tst mtpi = 6600^tst rti = 2 spl = 230 .globl _runrun, _swtch, _u ldfps = 170100^tst stfps = 170200^tst call1: tst -(sp) spl 0 br 1f call: mov PS,-(sp) 1: mov r1,-(sp) mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) mfpi sp mov 10.(sp),-(sp) bic $!37,(sp) bit $30000,PS beq 1f clrb _runrun .if fpp mov $_u+4,r1 stfps (r1)+ movf fr0,(r1)+ movf fr4,fr0 movf fr0,(r1)+ movf fr5,fr0 movf fr0,(r1)+ movf fr1,(r1)+ movf fr2,(r1)+ movf fr3,(r1)+ .endif 1: jsr pc,*(r0)+ bit $30000,PS beq 1f tstb _runrun beq 2f jsr pc,_swtch 2: .if fpp mov $_u+4,r1 mov (r1)+,r0 ldfps r0 movf (r1)+,fr0 movf (r1)+,fr1 movf fr1,fr4 movf (r1)+,fr1 movf fr1,fr5 movf (r1)+,fr1 movf (r1)+,fr2 movf (r1)+,fr3 ldfps r0 .endif 1: tst (sp)+ mtpi sp mov (sp)+,r4 mov (sp)+,r3 mov (sp)+,r2 mov (sp)+,r1 tst (sp)+ mov (sp)+,r0 rti .data .globl _data, _edata, _end _data: �������������������������������������������������������������������������prev_nsys/ken/rc������������������������������������������������������������������������������������0000644�0001750�0001750�00000000051�14735150445�012436� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ld *.o ../dmr/*.o ../slib.a ../junk/ustr ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������prev_nsys/ken/sys1.c��������������������������������������������������������������������������������0000644�0001750�0001750�00000012434�14735151137�013161� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "/sys/nsys/param.h" #include "/sys/nsys/systm.h" #include "/sys/nsys/user.h" #include "/sys/nsys/proc.h" #include "/sys/nsys/text.h" #include "/sys/nsys/buf.h" #include "/sys/nsys/reg.h" #include "/sys/nsys/inode.h" char regloc[8]; exec() { int ap, c, na, nc, *bp, *ip; int ts, ds; register char *cp; extern uchar; /* * pick up file names * and check various modes * for execute permission */ ip = namei(&uchar, 0); if(ip == NULL) return; bp = getblk(NODEV); if(access(ip, IEXEC)) goto bad; /* * pack up arguments into * allocated disk buffer */ cp = bp->b_addr; na = 0; nc = 0; while(ap = fuword(u.u_arg[1])) { na++; if(ap == -1) goto bad; u.u_arg[1] =+ 2; for(;;) { c = fubyte(ap++); if(c == -1) goto bad; *cp++ = c; nc++; if(nc > 510) { u.u_error = E2BIG; goto bad; } if(c == 0) break; } } if((nc&1) != 0) { *cp++ = 0; nc++; } /* * read in first 8 bytes * of file for segment * sizes: * w0 = 407/410 (410 implies RO text) * w1 = text size * w2 = data size * w3 = bss size */ u.u_base = &u.u_arg[0]; u.u_count = 8; u.u_offset[1] = 0; u.u_offset[0] = 0; u.u_segflg = 1; readi(ip); u.u_segflg = 0; if(u.u_error) goto bad; if(u.u_arg[0] == 0407) { u.u_arg[2] =+ u.u_arg[1]; u.u_arg[1] = 0; } else if(u.u_arg[0] != 0410) { u.u_error = ENOEXEC; goto bad; } cp = ip; if(u.u_arg[1]!=0 && (cp->i_flag&ITEXT)==0 && cp->i_count!=1) { u.u_error = ETXTBSY; goto bad; } /* * find text and data sizes * try them out for possible * exceed of max sizes */ ts = ((u.u_arg[1]+63)>>6) & 01777; ds = ((u.u_arg[2]+u.u_arg[3]+63)>>6) & 01777; if(estabur(ts, ds, SSIZE)) goto bad; /* * allocate and clear core * at this point, committed * to the new image */ xfree(); xalloc(ip); c = USIZE+ds+SSIZE; expand(USIZE); expand(c); while(--c >= USIZE) clearseg(u.u_procp->p_addr+c); /* * read in data segment */ estabur(0, ds, 0); u.u_base = 0; u.u_offset[1] = 020+u.u_arg[1]; u.u_count = u.u_arg[2]; readi(ip); /* * initialize stack segment */ u.u_tsize = ts; u.u_dsize = ds; u.u_ssize = SSIZE; estabur(u.u_tsize, u.u_dsize, u.u_ssize); cp = bp->b_addr; ap = -nc - na*2 - 4; u.u_ar0[R6] = ap; suword(ap, na); c = -nc; while(na--) { suword(ap=+2, c); do subyte(c++, *cp); while(*cp++); } suword(ap+2, -1); /* * set SUID/SGID protections */ cp = ip; if(cp->i_mode&ISUID) if(u.u_uid != 0) u.u_uid = cp->i_uid; if(cp->i_mode&ISGID) u.u_gid = cp->i_gid; /* * clear sigs, regs and return */ for(c=0; c<NSIG; c++) if((u.u_signal[c]&1) == 0) u.u_signal[c] = 0; for(c=0; c<6; c++) u.u_ar0[regloc[c]] = 0; u.u_ar0[R7] = 0; for(c=0; c<25; c++) u.u_fsav[c] = 0; bad: iput(ip); brelse(bp); } rexit() { u.u_arg[0] = u.u_ar0[R0] << 8; exit(); } exit() { int i, a, *p; register int *q1, *q2; for(i=0; i<NSIG; i++) u.u_signal[i] = 1; for(i=0; i<NOFILE; i++) if(p = u.u_ofile[i]) { closef(p); u.u_ofile[i] = NULL; } iput(u.u_cdir); xfree(); a = malloc(swapmap, 8); p = getblk(SWAPDEV, a); q1 = p->b_addr; q2 = &u; for(i=0; i<256; i++) *q1++ = *q2++; bwrite(p); p = u.u_procp; mfree(coremap, p->p_size, p->p_addr); p->p_addr = a; p->p_stat = SZOMB; loop: for(i=0; i<NPROC; i++) if(p->p_ppid == proc[i].p_pid) { wakeup(&proc[1]); wakeup(&proc[i]); for(i=0; i<NPROC; i++) if(p->p_pid == proc[i].p_ppid) proc[i].p_ppid = 1; swtch(); /* no return */ } if(p->p_ppid == 1) panic("no init proc"); p->p_ppid = 1; goto loop; } wait() { int i, f, *bp; register struct proc *p; f = 0; loop: p = &proc[0]; for(i=0; i<NPROC; i++) { if(p->p_ppid == u.u_procp->p_pid) { f++; if(p->p_stat == SZOMB) { u.u_ar0[R0] = p->p_pid; p->p_stat = NULL; p->p_pid = 0; p->p_ppid = 0; p->p_sig = 0; p->p_ttyp = 0; p->p_flag = 0; bp = bread(SWAPDEV, i=p->p_addr); mfree(swapmap, 8, i); p = bp->b_addr; u.u_cstime[0] =+ p->u_cstime[0]; dpadd(u.u_cstime, p->u_cstime[1]); dpadd(u.u_cstime, p->u_stime); u.u_cutime[0] =+ p->u_cutime[0]; dpadd(u.u_cutime, p->u_cutime[1]); dpadd(u.u_cutime, p->u_utime); u.u_ar0[R1] = p->u_arg[0]; brelse(bp); return; } } p++; } if(f) { sleep(u.u_procp, PWAIT); goto loop; } u.u_error = ECHILD; } fork() { int i; struct proc *p1, *p2; p1 = u.u_procp; p2 = &proc[0]; for(i=0; i<NPROC; i++) { if(p2->p_stat == NULL) goto found; p2++; } u.u_error = EAGAIN; goto out; found: if(newproc()) { u.u_ar0[R0] = p1->p_pid; u.u_cstime[0] = 0; u.u_cstime[1] = 0; u.u_stime = 0; u.u_cutime[0] = 0; u.u_cutime[1] = 0; u.u_utime = 0; return; } u.u_ar0[R0] = p2->p_pid; out: u.u_ar0[R7] =+ 2; } sbreak() { int a, i, n, d; /* * set n to new data size * set d to new-old * set n to new total size */ n = (((u.u_arg[0]+63)>>6) & 01777) - nseg(u.u_tsize)*128; if(n < 0) n = 0; d = n - u.u_dsize; n =+ USIZE+u.u_ssize; if(estabur(u.u_tsize, u.u_dsize+d, u.u_ssize)) return; u.u_dsize =+ d; if(d > 0) goto bigger; a = u.u_procp->p_addr + n - u.u_ssize; for(i=0; i<u.u_ssize; i++) { copyseg(a-d, a); a++; } expand(n); return; bigger: expand(n); a = u.u_procp->p_addr + n; for(i=0; i<u.u_ssize; i++) { a--; copyseg(a-d, a); } while(d--) clearseg(--a); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������prev_nsys/ken/trap.c��������������������������������������������������������������������������������0000644�0001750�0001750�00000004024�14735150553�013225� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "/sys/nsys/param.h" #include "/sys/nsys/systm.h" #include "/sys/nsys/user.h" #include "/sys/nsys/proc.h" #include "/sys/nsys/reg.h" #define EBIT 1 #define UMODE 0170000 struct { int count; int (*call)(); } sysent[64]; struct { char hibyte; char lobyte; }; char regloc[8] { R0, R1, R2, R3, R4, R5, R6, R7 }; trap(dev, sp, r4, r3, r2, r1, nps, r0, pc, ps) char *sp; { int i, a; if(dev == 8) { psignal(u.u_procp, SIGFPT); return; } if((ps&UMODE) != UMODE) goto bad; if(dev==9 && sp<-u.u_ssize*64) { (&r0)[regloc[ssr[1].lobyte&07]] =- ssr[1].lobyte>>3; (&r0)[regloc[ssr[1].hibyte&07]] =- ssr[1].hibyte>>3; pc = ssr[2]; if(!estabur(u.u_tsize, u.u_dsize, u.u_ssize+SINCR)) { u.u_ssize =+ SINCR; expand(u.u_procp->p_size+SINCR); a = u.u_procp->p_addr + u.u_procp->p_size; for(i=0; i<u.u_ssize; i++) { a--; copyseg(a-SINCR, a); } return; } } u.u_error = 0; switch(dev) { case 0: i = SIGBUS; goto def; case 1: i = SIGINS; goto def; case 2: i = SIGTRC; goto def; case 3: i = SIGIOT; goto def; case 5: i = SIGEMT; goto def; case 9: i = SIGSEG; goto def; def: psignal(u.u_procp, i); default: u.u_error = dev+100; case 6:; } if(u.u_error) goto err; ps =& ~EBIT; dev = fuword(pc-2)&077; if(dev == 0) { /* indirect */ a = fuword(pc); pc =+ 2; dev = fuword(a)&077; a =+ 2; } else { a = pc; pc =+ sysent[dev].count*2; } for(i=0; i<sysent[dev].count; i++) { u.u_arg[i] = fuword(a); a =+ 2; } u.u_dirp = u.u_arg[0]; u.u_ar0 = &r0; trap1(sysent[dev].call); if(u.u_error >= 100) psignal(u.u_procp, SIGSYS); err: if(issig()) psig(); if(u.u_error != 0) { ps =| EBIT; r0 = u.u_error; } u.u_procp->p_pri = PUSER + u.u_procp->p_ndis; return; bad: printf("dev = %o\n", dev); printf("sp = %o\n", sp); printf("pc = %o\n", pc); printf("ps = %o\n", ps); printf("aps = %o\n", &ps); panic("trap"); } trap1(f) int (*f)(); { savu(u.u_qsav); (*f)(); } nosys() { printf("sys %d\n", u.u_ar0[-7]); u.u_error = 100; } nullsys() { } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������prev_nsys/user.h������������������������������������������������������������������������������������0000644�0001750�0001750�00000002030�14735150705�012457� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������struct user { int u_rsav[2]; /* must be first */ int u_fsav[25]; /* must be second */ char u_segflg; char u_error; char u_uid; char u_gid; char u_ruid; char u_rgid; int u_procp; char *u_base; char *u_count; char *u_offset[2]; int *u_cdir; char u_dbuf[DIRSIZ]; char *u_dirp; struct ( int u_ino; char u_name[DIRSIZ]; ) u_dent; int *u_pdir; int u_uisa[8]; int u_uisd[8]; int u_ofile[NOFILE]; int u_arg[5]; int u_tsize; int u_dsize; int u_ssize; int u_qsav[2]; int u_signal[NSIG]; int u_utime; int u_stime; int u_cutime[2]; int u_cstime[2]; int *u_ar0; } u; /* u = 140000 */ /* u_error codes */ #define EFAULT 106 #define EPERM 1 #define ENOENT 2 #define ESRCH 3 #define EIO 5 #define ENXIO 6 #define E2BIG 7 #define ENOEXEC 8 #define EBADF 9 #define ECHILD 10 #define EAGAIN 11 #define ENOMEM 12 #define EACCES 13 #define ENOTBLK 15 #define EBUSY 16 #define EEXIST 17 #define EXDEV 18 #define ENODEV 19 #define ENOTDIR 20 #define EISDIR 21 #define EINVAL 22 #define ENFILE 23 #define EMFILE 24 #define ENOTTY 25 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������