diff --git a/build/fs/password b/build/fs/password index 9548543..282ca02 100644 --- a/build/fs/password +++ b/build/fs/password @@ -1,3 +1,4 @@ system:system:system:777777 ken:ken:ken:12 dmr:dmr:dmr:14 +doug:doug:doug:15 diff --git a/build/proto b/build/proto index 31a1120..05c3b13 100644 --- a/build/proto +++ b/build/proto @@ -94,3 +94,14 @@ dd drwr- -1 4 hello.b frwr- 014 ../src/other/hello.b ops.s frwr- 014 ../src/other/ops.s $ + doug drwr- 015 + system l---- 3 + t1.s frwr- 015 ../src/cmd/t1.s + t2.s frwr- 015 ../src/cmd/t2.s + t3.s frwr- 015 ../src/cmd/t3.s + t4.s frwr- 015 ../src/cmd/t4.s + t5.s frwr- 015 ../src/cmd/t5.s + t6.s frwr- 015 ../src/cmd/t6.s + t7.s frwr- 015 ../src/cmd/t7.s + t8.s frwr- 015 ../src/cmd/t8.s + $ diff --git a/src/cmd/t1.s b/src/cmd/t1.s new file mode 100644 index 0000000..4e6d9d1 --- /dev/null +++ b/src/cmd/t1.s @@ -0,0 +1,69 @@ +"** 13-120-147.pdf page 5 +t=0 +main: + lac 017777 i + sad d4 + jmp 2f + sad d8 + jmp 1f + law 9 + tad 017777 + dac 0f + law 017 + sys creat;0:0 + dac output +1:law 5 + tad 017777 + dac 0f + sys open;0:0;0 + dac input + spa + sys exit +2: + jms advance; jmp 1f + jmp rinterp + +0:lac 2f + jms obuild +1:lac owrite + spa + jmp 0b + jms oflush + las + spa + sys exit + sys save +2:o777 + + +"special machine language code + +"puts out and octal strin g from symtab entry + +symoct: + lac equ + add equbot + dac 9f+t + lac 1f + jms twoktab; lac 9f+t i +1:gf .+1 x + lac ii + dac 8 + lac 8 i + add symbot + dac 9f+t + +2:lac 9f+t i + jms putoct + lac onenl + jms obuild + lac 9f+t i + and o600600 + sza "skip unless word contained eof (0777) + jmp ggoon + +"** 13-120-147.pdf page 6 + isz 9f+t + jmp 2b +t=t+1 +o600600:0600600 diff --git a/src/cmd/t2.s b/src/cmd/t2.s new file mode 100644 index 0000000..53ba357 --- /dev/null +++ b/src/cmd/t2.s @@ -0,0 +1,411 @@ +"** 13-120-147.pdf page 7 +" recognition stack frame advance + +advance:0 + lac frame + dac 8 + lac advance i + dac 8 i + lac ii + dac 8 i + lac ignore + dac 8 i + lac j + dac 8 i + lac k + dac 8 i + lac frame + dac nframe i + lac nframe + dac frame + add dffrmsz + dac nframe + dac nframe + jms between; add rbot; add rtop + jms halt + isz advance + jmp advance i + +retreat: + dzm junk + lac gflag + sza + jmp 1f + jms bundlep + dac junk +1:lac frame + dac nframe + lac frame i + dac frame + dac 8 + lac 8 i + dac 3f "retrun address + lac 8 i + dac ii + lac 8 i + dac ignore + lac fflag + sna + jmp 2f + lac 8 i "restore j and k on failure + dac j + lac 8 i + dac k +2:lac junk + sna + jmp 3f + dac nframe i "stass reslts + isz nframe +3:jmp + +" bundle up results and return single pointer to them in ac +" return 0 if no results + +"** 13-120-147.pdf page 8 +bundlep:0 + lac fflag + sza + jmp 2f "no results on failure + jms nframe0 + dac 9f+t + cma + tad nframe + cma + dac 9f+t+1 + sma + jmp 2f + sad m1 + jmp 3f "only one result, no bundling necessary + lac 9f+t + tad m1 + dac 8 + +1:lac 8 i + jms kput + isz 9f+t+1 + jmp 1b + lac k "make up result pointer + add l.gk + jmp bundlep i + +2:cla + jmp bundlep i +3:lac 9f+t i + jmp bundlep i +t=t+1 "where to find results +t=t+1 "negative of result count + +" the main interpreter loop +" locate original value of nframe for present stack level. +nframe0:0 + jms s1get; add d.ii + dac junk + lac junk i + dac junk + lac junk i + and opmask + sad l.rw + jmp 1f + lac refrsz + jmp 2f +1:lac junk i + and o17777 +2:add frame + jmp nframe0 i + +halt:0 + lac 1f + jms obuild + lac halt + jms putoct + lac onenl + jms obuild + xct rstack+1 +1:.+1;012077;end + +"** 13-120-147.pdf page 9 +rinterp: + las "trace check + and d5 + sna + jmp .+3 + lac bugr + jms bug + + lac fflag + ral + lac ii i + and opmask + sad l.ra + jmp rera + sad l.rb + jmp rerb + szl + jmp retreat + lrs 14 + and o17 + add rbranch + dac .+1 + jmp + +rbranch: + jmp .+1 i + reno + rerx + rerc + regc + rerf + rerw + rera + reuu + rero + rerm + rers + rerv + reuu + reuu + reuu + reuu + +reuu: + jms halt + +rerb: + cml +rera: + dzm fflag + snl + jmp goon + jms aget + dac ii + jmp rinterp + +backup: + lac jsav + dac j +nuts: + law + +"** 13-120-147.pdf page 10 + dac fflag + +reno: +goon: + lac ii i + isz ii + and exitmask + sza + jmp retreat + jmp rinterp + + +rerw: + jms aget + add frame + dac nframe + jmp goon + +rerc: + jms advance; jmp goon + jms aget + dac ii + jmp rinterp + + +gegf: +rerf: + jms aget + add ljmp + dac .+1 + jmp + +rerx: + lac j + dac jsav + jms aget +1:dac 9f+t + jms lchar + sad o777 + jmp goon + dac 9f+t+1 + jms getj +sad 9f+t+1 + jmp 2f + jmp backup +2:lac 9f+t + add o400000 + jmp 1b +t=t+1 "address of next comparison char +t=t+1 "character itself + +aget:0 + lac ii i + and o17777 + jmp aget i + +regc: + lac ii i + and o757777 + xor exitmask + dac nframe i + +"** 13-120-147.pdf page 11 + isz nframe + jmp goon + +kput:0 + isz k + dac junk1 + lac k + jms between; add d0; add kmax + jms halt + add kbot + dac junk + lac junk1 + dac junk i + jmp kput i + +s0get:0 + lac frame + xct s0get i + dac junk + lac junk i + isz s0get + jmp s0get i + +s1get:0 + lac frame i + xct s1get i + dac junk + lac junk i + isz s1get + jmp s1get i + +s0put:0 + lmq + lac frame + xct s0put i + dac junk + lacq + dac junk i + isz s0put + jmp s0put i +" here is the generaion interpreter +" the k table cant move while its active + +geno: +ggoon: + lac ii i + isz ii + and exitmask + sza + jmp retreat +ginterp: + las "trace check + and d6 + sna + jmp .+3 + lac bugg + jms bug + + lac ii i + lrss 14 + and o7 + +"** 13-120-147.pdf page 12 + add gbranch + dac .+1 + jmp + +gbranch: + jmp .+1 i + geno + gegx + geuu + gegc + gegf + gegk + gegp + gegq + +geuu: + jms halt + +gegx: + lac ii i + and o417777 + jms obuild + jmp ggoon + +gegq: + jms advance; jmp ggoon + lac env + add d.ii + dac junk + jms aget + add junk i + dac junk + lac junk i + dac ii + lac env + add d.env + dac junk + lac junk i + dac env + jmp ginterp + +gegp: + jms advance; jmp ggoon + lac env + add d.ii + dac junk + lac frame i + dac env + jms aget +cma + add junk i + dac ii + jmp ginterp + +gegk: + lac ii i + jms aget + add kbot + dac ii + jms s0put; add d.ii + lac frame + +"** 13-120-147.pdf page 13 + dac env + jmp ginterp + +gegc: + jms advance; jmp ggoon + jms aget + dac ii + jmp ginterp + +bug:0 + dac 1f+2 + lac onenl + jms obuild + lac ii + jms putoct + lac ii i + lrs 14 + and o17 + add 1f+2 + dac 1f+2 + lac 1f+2 i + dac 1f+2 + lac 1f + jms obuild + lac ii i + jms putoct + las + and d4 + sza + jms halt + jmp bug i + +1:0400000 .+1; 040; 0; 040777 diff --git a/src/cmd/t3.s b/src/cmd/t3.s new file mode 100644 index 0000000..96242c0 --- /dev/null +++ b/src/cmd/t3.s @@ -0,0 +1,263 @@ +"** 13-120-147.pdf page 14 +move: 0 + dac 9f+t + lac move i +1:dac 2f + lac 9f+t + jms lchar + dac 9f+t+1 + jms dchar +2: 0 + lac 9f+t+1 + sad o777 + jmp 3f + lac o400000 + add 9f+t + dac 9f+t + lac o400000 + add 2b + jmp 1b + +3:isz move + lac 2b + jmp move i +t=t+1 "source address +t=t+1 "source character + +lchar:0 + dac junk + ral + lac junk i + snl + lrs 9 + and o777 + jmp lchar i + +dchar:0 + lmq + lac dchar i + dac junk + spa + jmp 1f + llss 9 + lac o777 + jmp .+2 +1:0777000 + and junk i + omq + dac junk i + isz dchar + jmp dchar i + + +" gets designated character from input +jget:0 +1:lac j + jms cbetween; add jmin; add jmax + jmp jmore + cma + add jmin + cma + add jbot + jms lchar + jms class; add ignore + +"** 13-120-147.pdf page 15 + jmp jget i + lac j + add o400000 + dac j + jmp 1b + +" read more input - filthy code, enough to make disk & +" terminal input work. Theae only deliver full count +" except at eof or 1 word + +jmore: +and o377700 + dac jmin + add ljsiz + dac 9f+t + lac jmax + jms cbetween; add jmin; add 9f+t + lac jmin + dac jmax + dac 1f + cma + add jmin + cma + add jbot + dac 2f + lac input + sys seek +1:0;0 + -1 + dac 2f i + lac input + sys read +2:0;jsiz + sna + lac d1 + add jmax + dac jmax + jmp jget+1 +t=t+1 + +" gets next character from input + +getj:0 + lac j + jms jget + dac junk + lac j + add o400000 + dac j + lac junk + jmp getj i + +" compare two strings - assume both left justified + +comp:0 + dac 9f+t + lac comp i + dac 9f+t+1 + isz comp +1:lac 9f+t i + sad 9f+t+1 i + +"** 13-120-147.pdf page 16 + jmp 3f + and 9f+t+1 i "do both start with eof? + spa +2:isz comp + jmp comp i +3:and o600600 "is there an eof? + sza + jmp 2b + isz 9f+t + isz 9f+t+1 + jmp 1b +t=t+1 "address of string 1 +t=t+1 "address of string 2 + + +obuild:0 + lmq + lac owrite + add obot + dac 2f + lacq +1:jms move +2:0 + cma + add obot + cma + dac owrite + jms cbetween; add d0; add omax + skp + jmp obuild i + + lac lochunk + jms oflush + lac obot + dac 2b + add lochunk + jmp 1b + +oflush:0 + dac 2f + lac obot + dac 1f + lac output + sys write +1:0 +2:0 + jmp oflush i + +" outputs octal string from sesignated value + +octal: + isz ii + lac ii i + dac 2f + lac 1f + jms twoktab + lac 2f i + +1:gf geoctal x +2:0 + +"** 13-120-147.pdf page 17 +geoctal: + lac ii + dac 8 + lac 8 i + jms putoct + jmp ggoon + + +" converts word in ac into ocatl on output stream + +putoct:0 + dac 9f+t + lac 7f + jms obuild + dzm 9f+t+2 + -6 + dac 9f+t+1 + +1:lac 9f+t + cll + lrs 15 + add o60 + dac 8f+1 + lls 18 + dac 9f+t + lac 9f+t+2 "have nonzero digits been seen? + sza + jmp 2f + lac 8f+1 "no,is this nonzero? + sad o60 + jmp 3f "no +2:lac 8f + jms obuild + law + dac 9f+t+2 +3:isz 9f+t+1 + jmp 1b + jmp putoct i +t=t+1 "value to convert +t=t+1 "digit count +t=t+1 "nonzero digit flag +7: .+1; 060777 +8:0400000 .+1;0;end + + +eof: + lac j + dac jsav + jms jget + sad o777 + jmp goon + jmp backup +class:0 + dac junk1 + lrss 7 + sza + jmp 2f + lls 3 + xct class i + isz class + dac junk + +"** 13-120-147.pdf page 18 + cla + llss 4 + add l.llss + dac 1f + lac junk i +1:llss + spa +2:isz class + lac junk1 + jmp class i diff --git a/src/cmd/t4.s b/src/cmd/t4.s new file mode 100644 index 0000000..9c0df2e --- /dev/null +++ b/src/cmd/t4.s @@ -0,0 +1,112 @@ +"** 13-120-147.pdf page 19 +" put symbuf symbol into table + +table: + lac equwrite + dac equ + jms between; add d0; add equmax + jms halt + add delta + dac equwrite + lac equ + add equbot + tad m1 + dac 8 + lac symwrite + dac 8 i + add symbot + dac 2f + lac mdelta +1:dzm 8 i + tad d1 + spa + jmp 1b + lac sbbot + jms move +2:0 + add o400000 + cma +add symbot + cma + add o400000 + and o17777 + dac symwrite + jms between; add d0; add symmax + jms halt + jmp goon + +" find occurrence of symbuf symbol in equtab + +prev: + lac equ + jmp find+1 +find: + lac equwrite + dac 9f+t + lac o777 + jms sbput + lac sbbot + dac 2f +1:lac 9f+t + tad mdelta + dac 9f+t + spa + jmp nuts + add equbot + dac junk + lac junk i + add symbot + jms comp +2:0 + jmp 1b + lac 9f+t + dac equ + +"** 13-120-147.pdf page 20 + jmp goon +t=t+1 "next equtab location to test + +sbput:0 + lmq + lac sbwrite + add sbbot + dac 1f + lacq + jms dchar +1:0 + lac sbwrite + add o400000 + dac sbwrite + jms cbetween; add d0; add sbmax + jms halt + jmp sbput i + +getname: + lac equ + add equbot + dac 9f+t + lac 1f + jms twoktab; lac 9f+t i + +1:gf .+1 x + lac ii + dac 8 + lac 8 i + add symbot + and o17777 + jms obuild + jmp ggoon +t=t+1 "equtable entry + +" puts double word entries in ktab and gives +"pointer to first as result + +twoktab:0 + jms kput + lac l.gk + add k +dac nframe i + isz nframe + xct twoktab i + jms kput + jmp goon diff --git a/src/cmd/t5.s b/src/cmd/t5.s new file mode 100644 index 0000000..8fe775e --- /dev/null +++ b/src/cmd/t5.s @@ -0,0 +1,118 @@ +"** 13-120-147.pdf page 21 +char: + lac j + dac jsav + isz ii + jms ctest + jmp backup + jmp goon + +string: + isz ii + jms ctest + jmp goon + jmp string+1 + +ctest:0 + jms jget + jms class; add ii i + jmp ctest i + jms sbput + lac j + add o400000 + dac j + isz ctest + jmp ctest i + +mark: + jms jget + dzm sbwrite + jmp goon + +parsedo: + isz ii + jms advance; jmp 3f + jms advance; jmp 1f + jms aget + dac ii + jmp rinterp + +1:lac frame + add refrsz + dac ii + sad nframe + jmp retreat + dac gflag + lac gefrsz + dac dffrmsz + jms advance; jmp 2f + jmp ginterp + +2:lac refrsz + dac dffrmsz + add frame + dac nframe + dzm gflag + jmp retreat + +3:jms s0get; add d.k + dac k + jmp goon + +bundle: + jms bundlep + +"** 13-120-147.pdf page 22 + dac 9f+t + sna + jmp goon + jms nframe0 + dac nframe + lac 9f+t + dac nframe i + isz nframe + jmp goon +t=t+1 + +" jms between;add a; add b; skip if a<=ac= 100 + spa "= 101 + jmp 1f "> 110 + lac d1 "a>b, code 001 + jmp 3f +1:lac d2 "a;;;;;;; + ;;; +bugg:.+1;;;;;;;; + +o17:017 +o60:060 +o77:077 +o777:0777 + +o417777:0417777 +o400000:0400000 +o740000:0740000 +o377700:0377700 +o17777:017777 + +"** 13-120-147.pdf page 27 +o757777:0757777 +o600600:0600600 + +junk:0 +junk1:0 + +output:1 +input:0 + +stbit:st +fibit:fi +holdlv:0 +rand1:0 +rand2:0 + + +symwrite:0 +symbot: symtab +symsiz = 500 +symmax:symsiz + +equwrite:0 +equread:0 +equ = equread +equbot: equtab +equsiz = 500 +equmax: equsiz +delta: 2 +mdelta:0-2 + +sbsiz=50 +sbmax:sbsiz +sbwrite:0 +sbbot:sbbuf + +fflag:0 +gflag:0 +ignore:.+1;0400000;0;0;0;0;0;0;4 +frame:rstack +nframe:rstack+6 +env = ignore +d.ii = d2 +d.env = d3 +d.blkmod = d3 +d.j = d4 +d.k = d5 +dffrmsz:6 +framsiz:4 +refrsz = d6 +gefrsz = d4 +ii: start +k:0 + +rsiz = 500 +rmax: rsiz +rbot:rstack +rtop:rstack+rsiz + +owrite:0 +obot:obuf +osiz=64 diff --git a/src/cmd/t8.s b/src/cmd/t8.s new file mode 100644 index 0000000..db67d3a --- /dev/null +++ b/src/cmd/t8.s @@ -0,0 +1,58 @@ +"** 13-120-147.pdf page 28 +" op.s is the op code defination file +" for the assembler +" no iot ops are defined +" system cal entries are defined +" +dac = 0040000 +jms = 0100000 +dzm = 0140000 +lac = 0200000 +xor = 0240000 +add = 0300000 +tad = 0340000 +xct = 0400000 +isz = 0440000 +and = 0500000 +sad = 0540000 +jmp = 0600000 +eae = 0640000 +i = 020000 +opr = 0740000 +law = opr i +cma = opr 1 +cml = opr 2 +ral = opr 010 +rar = opr 020 +sma = opr 0100 +sza = opr 0200 +snl = opr 0400 +skp = opr 01000 +spa = opr 01100 +sna = opr 01200 +szl = opr 01400 +cll = opr 04000 +cla = opr 010000 +las = opr 010004 +lrs = eae 0500 +lrss = i lrs +lls = eae 0600 +llss = i lls +als = eae 0700 +alss = i als +lacq = eae 01002 +lacs = eae 01001 +clq = eae 010000 +omq = eae 2 +cmq = eae 4 +lmq = eae 012000 + +sys = i +save = 1 +open = 3 +read = 4 +write = 5 +creat = 6 +seek = 7 +close = 9 +exit = 14 diff --git a/tools/as7 b/tools/as7 index f0d194e..f476b17 100755 --- a/tools/as7 +++ b/tools/as7 @@ -294,7 +294,7 @@ sub set_label # An error to have different values if ( defined( $Glabel{$label} ) && $Glabel{$label} != $loc ) { # non-fatal: as.s doesn't even warn!!!! - print STDERR "$file:$lineno: Global label $label multiply defined\n" + print STDERR "$file:$lineno: NOTE: Global label $label multiply defined (not an error)\n" if ($stage == 2); } else { @@ -398,7 +398,7 @@ sub parse_line { return if (eol()); - if ( $line =~ s{^(\S+)\s*=}{}) { # assignment + if ( $line =~ s{^([^;= \t]+)\s*=}{}) { # assignment my $lhs = $1; my $word = parse_expression(); printf( "Setting variable %s to 0%o\n", $lhs, $word ) if ($debug);