diff --git a/.gitignore b/.gitignore
index 2a854d2..c0a042b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,5 @@ build/n.out
build/alt/a.lst
build/alt/a.out
build/alt/image.fs
+**/.DS_Store
+/a.out
diff --git a/README.md b/README.md
index 2f65fe0..0f43293 100644
--- a/README.md
+++ b/README.md
@@ -48,12 +48,6 @@ To run pdp-unix from the pdp7-unix source tree, do:
Press `ctl-e` to break out the simulator into simh
-### Precompiled Binaries
-
-You can also run pdp7-unix from precompiled binaries in the [/binaries](/binaries) directory.
-
-`cd binaries/; pdp7 unixv0.simh`
-
### Typical Output
A typical pdp7-unix session on simh looks like:
diff --git a/binaries/boot.rim b/binaries/boot.rim
deleted file mode 100644
index d5bf44b..0000000
--- a/binaries/boot.rim
+++ /dev/null
@@ -1 +0,0 @@
-ธธธนกฟธนฝธนขฆถคธนขธนคธนฑธนผผ ฟฐธนฃธนขฆถฅธนขธนคธนฑธนผผ ฐฐฑภ
\ No newline at end of file
diff --git a/binaries/image.fs b/binaries/image.fs
deleted file mode 100644
index 6093ce7..0000000
Binary files a/binaries/image.fs and /dev/null differ
diff --git a/binaries/unixv0.simh b/binaries/unixv0.simh
deleted file mode 100644
index 297ef35..0000000
--- a/binaries/unixv0.simh
+++ /dev/null
@@ -1,31 +0,0 @@
-set cpu 8k
-set cpu eae
-set cpu history=100
-show cpu
-
-# set up SIMH devices:
-
-# UNIX character translations (CR to NL, ESC to ALTMODE):
-set tti unix
-
-# RB09 fixed head disk:
-set rb ena
-att rb image.fs
-
-# uncomment to TELNET in GRAPHICS-2 keyboard/display(!!)
-# (requires github.com/philbudne/simh)
-set g2in ena
-att -U g2in 12345
-
-# disable hardware UNIX-7 doesn't know about:
-set lpt disa
-set drm disa
-set dt disa
-
-# show device settings:
-show dev
-
-# load and run the paper tape bootstrap
-# (loads system from disk)
-load boot.rim 010000
-go
diff --git a/build/Makefile b/build/Makefile
index 10ceb31..5c73479 100644
--- a/build/Makefile
+++ b/build/Makefile
@@ -14,6 +14,7 @@ PDP7=pdp7
# source dirs
SYSSRC=../src/sys
CMDSRC=../src/cmd
+GAMESRC=../src/games
ALTSRC=../src/alt
OTHERSRC=../src/other
TESTSRC=../src/tests
@@ -57,9 +58,9 @@ a.out:
# Alternative kernel: no dd, but . and ..
alt/a.out:
$(AS) -f ptr -o alt/a.out $(SYSSRC)/sop.s $(SYSSRC)/s1.s \
- $(ALTSRC)/s2.s $(SYSSRC)/s[3-8].s
+ $(ALTSRC)/s2/s2.s $(SYSSRC)/s[3-8].s
$(AS) -n -f list -o alt/a.lst $(SYSSRC)/sop.s $(SYSSRC)/s1.s \
- $(ALTSRC)/s2.s $(SYSSRC)/s[3-8].s
+ $(ALTSRC)/s2/s2.s $(SYSSRC)/s[3-8].s
# Phil's bootstrap code
boot.rim: $(SYSSRC)/sop.s $(OTHERSRC)/pbboot.s
@@ -84,7 +85,7 @@ alt/image.fs: altcmd altothers
clean:
rm -f boot.rim image.fs a.lst n.out a.out
rm -f alt/image.fs alt/a.out alt/a.lst
- rm -rf $(BINDIR) $(TESTDIR)
+ rm -rf $(BINDIR) $(TESTDIR)
rm -rf $(BINARIES)
dirs:
@@ -94,7 +95,9 @@ dirs:
cmd: dirs $(BINDIR)/as $(BINDIR)/cat $(BINDIR)/check $(BINDIR)/chmod \
$(BINDIR)/chown $(BINDIR)/chrm $(BINDIR)/cp $(BINDIR)/ds \
$(BINDIR)/dskres $(BINDIR)/dsksav $(BINDIR)/ed $(BINDIR)/init \
- $(BINDIR)/db
+ $(BINDIR)/db $(BINDIR)/stat $(BINDIR)/tm $(BINDIR)/dsw $(BINDIR)/apr \
+ $(BINDIR)/cas $(BINDIR)/rm $(BINDIR)/rn $(BINDIR)/pd $(BINDIR)/nm \
+ $(BINDIR)/roff $(BINDIR)/p
# Alternate commands: no dd, but . and ..
altcmd: dirs $(BINDIR)/as $(BINDIR)/cat $(BINDIR)/check $(BINDIR)/chmod \
@@ -143,6 +146,57 @@ $(BINDIR)/init: $(CMDSRC)/init.s
$(BINDIR)/db: $(CMDSRC)/db.s
$(AS) $(ASARGS) -o $(BINDIR)/db $(CMDSRC)/db.s
+$(BINDIR)/stat: $(CMDSRC)/stat.s
+ $(AS) $(ASARGS) -o $(BINDIR)/stat $(CMDSRC)//stat.s
+
+$(BINDIR)/tm: $(CMDSRC)/tm.s
+ $(AS) $(ASARGS) -o $(BINDIR)/tm $(CMDSRC)/tm.s
+
+$(BINDIR)/cas: $(CMDSRC)/cas.s
+ $(AS) $(ASARGS) -o $(BINDIR)/cas $(CMDSRC)/cas.s
+
+# -- compile errors
+$(BINDIR)/dmabs: $(CMDSRC)/dmabs.s
+ $(AS) $(ASARGS) -o $(BINDIR)/dmabs $(CMDSRC)/dmabs.s
+
+# -- compile errors
+$(BINDIR)/bc: $(CMDSRC)/bc.s
+ $(AS) $(ASARGS) -o $(BINDIR)/bc $(CMDSRC)/bc.s
+
+$(BINDIR)/dsw: $(CMDSRC)/dsw.s
+ $(AS) $(ASARGS) -o $(BINDIR)/dsw $(CMDSRC)/dsw.s
+
+$(BINDIR)/apr: $(CMDSRC)/apr.s
+ $(AS) $(ASARGS) -o $(BINDIR)/apr $(CMDSRC)/apr.s
+
+# -- compile errors
+$(BINDIR)/adm: $(CMDSRC)/adm.s
+ $(AS) $(ASARGS) -o $(BINDIR)/adm $(CMDSRC)/adm.s
+
+$(BINDIR)/sh: $(CMDSRC)/sh.s
+ $(AS) $(ASARGS) -o $(BINDIR)/sh $(CMDSRC)/sh.s
+
+$(BINDIR)/rn: $(CMDSRC)/rn.s
+ $(AS) $(ASARGS) -o $(BINDIR)/rn $(CMDSRC)/rn.s
+
+$(BINDIR)/rm: $(CMDSRC)/rm.s
+ $(AS) $(ASARGS) -o $(BINDIR)/rm $(CMDSRC)/rm.s
+
+$(BINDIR)/pd: $(CMDSRC)/pd.s
+ $(AS) $(ASARGS) -o $(BINDIR)/pd $(CMDSRC)/pd.s
+
+$(BINDIR)/ls: $(CMDSRC)/ls.s
+ $(AS) $(ASARGS) -o $(BINDIR)/ls $(CMDSRC)/ls.s
+
+$(BINDIR)/nm: $(CMDSRC)/nm.s
+ $(AS) $(ASARGS) -o $(BINDIR)/nm $(CMDSRC)/nm.s
+
+$(BINDIR)/roff: $(CMDSRC)/roff.s
+ $(AS) $(ASARGS) -o $(BINDIR)/roff $(CMDSRC)/roff.s
+
+$(BINDIR)/p: $(CMDSRC)/p0.s $(CMDSRC)/p1.s $(CMDSRC)/p2.s $(CMDSRC)/p3.s $(CMDSRC)/p4.s $(CMDSRC)/p5.s
+ $(AS) $(ASARGS) -o $(BINDIR)/p $(CMDSRC)/p0.s $(CMDSRC)/p1.s $(CMDSRC)/p2.s $(CMDSRC)/p3.s $(CMDSRC)/p4.s $(CMDSRC)/p5.s
+
# Alternative init: no dd directory
$(BINDIR)/altinit: $(ALTSRC)/init.s
$(AS) $(ASARGS) -o $(BINDIR)/altinit $(ALTSRC)/init.s
@@ -182,8 +236,8 @@ $(BINDIR)/ls: $(OTHERSRC)/wktls.s
$(BINDIR)/lsd: $(OTHERSRC)/pblsd.s
$(AS) $(ASARGS) -o $(BINDIR)/lsd $(OTHERSRC)/pblsd.s
-$(BINDIR)/altls: $(ALTSRC)/wktls.s
- $(AS) $(ASARGS) -o $(BINDIR)/altls $(ALTSRC)/wktls.s
+$(BINDIR)/altls: $(ALTSRC)/wktls/wktls.s
+ $(AS) $(ASARGS) -o $(BINDIR)/altls $(ALTSRC)/wktls/wktls.s
$(BINDIR)/lsl: $(OTHERSRC)/pblsd.s
$(AS) $(ASARGS) -o $(BINDIR)/lsl $(OTHERSRC)/pblsd.s
diff --git a/build/proto b/build/proto
index 07e60e1..a6063e7 100644
--- a/build/proto
+++ b/build/proto
@@ -11,7 +11,7 @@
# Contents of each directory ends with a $ on a line by itself
# Format was inspired by 6th Edition mkfs
#
-dd drwr- -1 4
+dd drwr- -1 4
core frwrw -1 /dev/null 1
system drwr- -1 3
ttyin irwr- -1 6
@@ -20,8 +20,10 @@ dd drwr- -1 4
ttyout irwr- -1 11
display irwr- -1 12
pptout irwr- -1 13
+ apr frwr- -1 bin/apr
as frwr- -1 bin/as
bc frwr- -1 bin/bc
+ cas frwr- -1 bin/cas
cat frwr- -1 bin/cat
check frwr- -1 bin/check
chmod frwr- -1 bin/chmod
@@ -33,18 +35,27 @@ dd drwr- -1 4
ds frwr- -1 bin/ds
dskres frwr- -1 bin/dskres
dsksav frwr- -1 bin/dsksav
+ dsw frwr- -1 bin/dsw
ed frwr- -1 bin/ed
- init frwr- -1 bin/init
+ init frwr- -1 bin/init
ln frwr- -1 bin/ln
ls frwr- -1 bin/ls
lsd frwr- -1 bin/lsd
lsl frwr- -1 bin/lsd
+ nm frwr- -1 bin/nm
od frwr- -1 bin/od
+ p frwr- -1 bin/p
+ pd frwr- -1 bin/pd
mv frwr- -1 bin/mv
- password frw-- -1 fs/password
+ password frw-- -1 fs/password
+ roff frwr- -1 bin/roff
+ rn frwr- -1 bin/rn
+ rm frwr- -1 bin/rm
sh frwr- -1 bin/sh
stat frwr- -1 bin/stat
- $
+ tm frwr- -1 bin/tm
+
+ $
ken drwr- 10
system l---- 3
sop.s frwr- 10 ../src/sys/sop.s
diff --git a/scans/dsw.s b/scans/dsw.s
index 03f8ff2..f1f25ac 100644
--- a/scans/dsw.s
+++ b/scans/dsw.s
@@ -24,7 +24,7 @@ wr:
lac d1
sys write; o12; 1
sys save
-io:
+do:
sys unlink; dir+1
sys exit
diff --git a/src/alt/chrm.s b/src/alt/chrm/chrm.s
similarity index 100%
rename from src/alt/chrm.s
rename to src/alt/chrm/chrm.s
diff --git a/src/alt/init.s b/src/alt/init/init.s
similarity index 100%
rename from src/alt/init.s
rename to src/alt/init/init.s
diff --git a/src/alt/s2.s b/src/alt/s2/s2.s
similarity index 100%
rename from src/alt/s2.s
rename to src/alt/s2/s2.s
diff --git a/src/alt/wktls.s b/src/alt/wktls/wktls.s
similarity index 100%
rename from src/alt/wktls.s
rename to src/alt/wktls/wktls.s
diff --git a/src/alt/wktmkdir.s b/src/alt/wktmkdir/wktmkdir.s
similarity index 100%
rename from src/alt/wktmkdir.s
rename to src/alt/wktmkdir/wktmkdir.s
diff --git a/src/cmd/.DS_Store b/src/cmd/.DS_Store
new file mode 100644
index 0000000..9a3bd68
Binary files /dev/null and b/src/cmd/.DS_Store differ
diff --git a/src/cmd/dsw.s b/src/cmd/dsw.s
index a197aca..1a17271 100644
--- a/src/cmd/dsw.s
+++ b/src/cmd/dsw.s
@@ -24,7 +24,7 @@ wr:
lac d1
sys write; o12; 1
sys save
-io:
+do:
sys unlink; dir+1
sys exit
diff --git a/src/cmd/ls.s b/src/cmd/ls.s
new file mode 100644
index 0000000..f51bd24
--- /dev/null
+++ b/src/cmd/ls.s
@@ -0,0 +1,276 @@
+"** 09-1-35.pdf page 17
+" ls
+" list
+
+ lac 017777
+ tad d1
+ dac name
+ lac name i
+ sad ali
+ dac longflg
+ lac 017777 i
+ sad d4
+ skp
+ jmp loop
+ law dd
+ dac name
+ jmp 2f
+
+loop:
+ lac 017777 i
+ sad d4
+ jmp done
+ tad dm4
+ dac 017777 i
+ lac name
+ tad d4
+ dac name
+2:
+ law stbuf
+ sys status; dd; name:..
+ spa
+ jmp badfile
+ lac s.flags
+ and o20
+ sna
+ jmp badfile
+ lac name
+ dac 0f
+ sys open; 0:..; 0
+ spa
+ jmp badfile
+ dac fi
+ jms readdir
+ lac fi
+ sys close
+1:
+ lac o200000
+ dac maxfn
+ jms findf
+ lac maxfn
+ sad o200000
+ jmp loop
+
+ lac longflg
+ sza
+ jms longout
+ law maxfn
+ jms putfn
+ law 012
+ jms putc
+ lac o200000
+ dac maxfp i
+ jmp 1b
+
+"** 09-1-35.pdf page 18
+longout: 0
+ lac name
+ dac 0f
+ law stbuf
+ sys status; 0:..; maxfn
+ lac s.i
+ jms octal; -3
+ lac s.flags
+ jms octal; -2
+ lac s.uid
+ jms octal; -2
+ -1
+ tad s.nlinks
+ cma
+ jms octal; -2
+ lac s.size
+ jms octal; -5
+ jmp longout i
+
+octal: 0
+ lmq
+ lac d5
+ tad octal i
+ cma
+ dac t
+1:
+ llss 3
+ isz t
+ jmp 1b
+ lac octal i
+ dac t
+1:
+ ecla llss 3
+ tad o60
+ jms putc
+ isz t
+ jmp 1b
+ law 040
+ jms putc
+ isz octal
+ jmp octal i
+
+toobig:
+ law 076
+ jms putc
+ law 040
+ jms putc
+
+badfile:
+ lac name
+ jms putfn
+ law 040
+ jms putc
+ law 077
+ jms putc
+ law 012
+ jms putc
+ jmp loop
+
+putfn: 0
+"** 09-1-35.pdf page 19
+ dac t
+ -4
+ dac t1
+1:
+ lac t i
+ lrss 9
+ sad o40
+ jmp putfn i
+ jms putc
+ lac t i
+ and o177
+ sad o40
+ jmp putfn i
+ jms putc
+ isz t
+ isz t1
+ jmp 1b
+ jmp putfn i
+
+done:
+ lac noc
+ sna
+ sys exit
+ and d1
+ sna cla
+ jmp 1f
+ jms putc
+ jmp done
+1:
+ lac noc
+ rcr
+ dac 1f
+ lac fo
+ sys write; iopt+1; 1:..
+ sys exit
+
+readdir: 0
+ lac fi
+ sys read; buf; 2048
+ sad .-1
+ jmp toobig
+ lrss 3
+ cma
+ tad d1
+ dac ndir
+ jmp readdir i
+
+findf: 0
+ law buf
+ dac t
+ lac ndir
+ dac t1
+1:
+ lac t i
+ sna
+ jmp 2f
+ isz t
+ lac t i
+ cma
+ tad maxfn
+ spa
+"** 09-1-35.pdf page 20
+ jmp 2f+1
+ lac t
+ dac maxfp
+ lac t i
+ dac maxfn
+ skp
+2:
+ isz t
+ lac t
+ tad d7
+ dac t
+ isz t1
+ jmp 1b
+
+ lac maxfp
+ dac 8
+ lac 8 i
+ dac maxfn+1
+ lac 8 i
+ dac maxfn+2
+ lac 8 i
+ dac maxfn+3
+ jmp findf i
+
+putc: 0
+ and o177
+ dac 2f+1
+ lac opt
+ dac 2f
+ add o400000
+ dac opt
+ spa
+ jmp 1f
+ lac 2f i
+ xor 2f+1
+ jmp 3f
+1:
+ lac 2f+1
+ alss 9
+3:
+ dac 2f i
+ isz noc
+ lac noc
+ sad d128
+ skp
+ jmp putc i
+ lac fo
+ sys write; iopt+1; 64
+ lac iopt
+ dac opt
+ dzm noc
+ jmp putc i
+2: 0;0
+fi: 0
+opt: .+2
+iopt: .+1; .=.+64
+noc: 0
+fo: 1
+longflg: 0
+
+d1: 1
+"** 09-1-35.pdf page 21
+d5: 5
+o60: 060
+o40: 040
+o20: 020
+d7: 7
+o400000: 0400000
+d128: 128
+d4: 4
+dm4: -4
+o177: 0177
+o200000: 0200000
+dd: 056056;040040;040040;040040
+ali:
+
+t: .=.+1
+t1: .=.+1
+maxfn: .=.+4
+maxfp: .=.+1
+ndir: .=.+1
+stbuf:
+ s.flags: .=.+8
+ s.uid: .=.+1
+ s.nlinks: .=.+1
+ s.size: .=.+2
+ s.i: .=.+1
+buf:
diff --git a/src/cmd/nm.s b/src/cmd/nm.s
new file mode 100644
index 0000000..cc6b99b
--- /dev/null
+++ b/src/cmd/nm.s
@@ -0,0 +1,234 @@
+"** 09-1-35.pdf page 31
+" nm
+
+ lac 017777 i
+ sad d3
+ skp
+ jmp 1f
+ law n.out
+ dac fname
+ jmp 2f
+1:
+ lac 017777
+ tad d1
+ dac fname
+
+loop:
+ lac 017777 i
+ sad d4
+ jmp done
+ tad dm4
+ dac 017777 i
+ lac fname
+ tad d4
+ dac fname
+2:
+ law 012
+ jms putc
+ sys open; fname: 0; 0
+ sma
+ jmp 1f
+ lac fname
+ dac 2f
+ lac d1
+ sys write; 2: 0; 4
+ lac d1
+ sys write; mes; 2
+ jmp loop
+mes:
+ 040077; 012
+
+1:
+ lac d2
+ sys read; buf; 3072
+ cll; idiv; 6
+ lacq
+ dac size
+ law o200000
+ dac c2
+
+print:
+ lac o200000
+ dac c2 i
+ dzm c2name
+ -1
+ tad size
+ cma
+ dac c1
+ law buf
+ dac c3
+ lac o200000
+ dac c2name
+1:
+ lac c3 i
+"** 09-1-35.pdf page 32
+ cma
+ tad c2name
+ spa
+ jmp 2f
+ lac c3 i
+ dac c2name
+ lac c3
+ dac c2
+2:
+ law 6
+ tad c3
+ dac c3
+ isz c1
+ jmp 1b
+ lac c2name
+ sad o200000
+ skp
+ jmp 1f
+ lac d2
+ sys close
+ jmp loop
+1:
+
+ lac c2
+ tad d3
+ dac t
+ lac i t
+ sna
+ jmp print
+ isz t
+ lac i t
+ sna
+ jmp print
+ -1
+ tad c2
+ dac 8
+ -4
+ dac c3
+1:
+ lac 8 i
+ lrss 9
+ jms putc
+ llss 9
+ jms putc
+ isz c3
+ jmp 1b
+ lac i t
+ sad d3
+ jmp undef
+ sna
+ jmp 1f
+ law 0162
+ skp
+1:
+ law 0141
+ dac type
+ law 040
+ jms putc
+ isz t
+ lac i t
+ lmq
+"** 09-1-35.pdf page 33
+ -6
+ dac c3
+1:
+ cla
+ llss 3
+ tad o60
+ jms putc
+ isz c3
+ jmp 1b
+ law 040
+ jms putc
+ lac type
+ jms putc
+ law 012
+ jms putc
+ jmp print
+undef:
+ -8
+ dac c3
+1:
+ law 040
+ jms putc
+ isz c3
+ jmp 1b
+ law 0165
+ jms putc
+ law 012
+ jms putc
+ jmp print
+
+done:
+ lac noc
+ sna
+ sys exit
+ and d1
+ sna cla
+ jmp 1f
+ jms putc
+ jmp done
+1:
+ lac noc
+ rcr
+ dac 1f
+ lac fo
+ sys write; iopt+1; 1:..
+ sys exit
+
+putc: 0
+ and o777
+ dac 2f+1
+ lac opt
+ dac 2f
+ add o400000
+ dac opt
+ spa
+ jmp 1f
+ lac 2f i
+ xor 2f+1
+ jmp 3f
+1:
+ lac 2f+1
+"** 09-1-35.pdf page 34
+ alss 9
+3:
+ dac 2f i
+ isz noc
+ lac noc
+ sad d128
+ skp
+ jmp putc i
+ lac fo
+ sys write; iopt+1; 64
+ lac iopt
+ dac opt
+ dzm noc
+ jmp putc i
+2: 0;0
+ipt: 0
+eipt: 0
+iipt: .+1; .=.+64
+fi: 0
+opt: .+2
+iopt: .+1; .=.+64
+noc: 0
+fo: 1
+
+c1: 0
+c2: 0
+c3: 0
+t: 0
+size: 0
+c2name: 0
+type: 0
+
+d1: 1
+d128: 128
+o200000: 0200000
+o777: 0777
+o400000: 0400000
+d2: 2
+d4: 4
+dm4: -4
+o60: 060
+d3: 3
+d6: 6
+n.out:
+0156056;0157165;0164040;040040
+buf:
diff --git a/src/cmd/p0.s b/src/cmd/p0.s
new file mode 100644
index 0000000..407a7f0
--- /dev/null
+++ b/src/cmd/p0.s
@@ -0,0 +1,37 @@
+"** 10-36-55.pdf page 1
+osc = 0640001
+omq = 0640002
+otq = 0642000
+cmq = 0640004
+lmq = 0652000
+ecla = 0641000
+
+i = 020000
+
+save = 1
+getuid = 2
+open = 3
+read = 4
+write = 5
+creat = 6
+seek = 7
+tell = 8
+close = 9
+link = 10
+unlink = 11
+setuid = 12
+rename = 13
+exit = 14
+time = 15
+intrp = 16
+chdir = 17
+chmode = 18
+chowner = 19
+sysloc = 21
+capt = 23
+rele = 24
+status = 25
+sleep = 26
+smes = 27
+rmes = 28
+fork = 29
diff --git a/src/cmd/p1.s b/src/cmd/p1.s
new file mode 100644
index 0000000..8e3f342
--- /dev/null
+++ b/src/cmd/p1.s
@@ -0,0 +1,261 @@
+"** 10-36-55.pdf page 2
+" p1
+
+t = 0
+ las
+ dac .sw
+ law 13
+ sys sysloc
+ dac .pb
+ jms ballinit
+ lac nballp
+ cll; mul; bvsize
+ lacq
+ tad listpm1
+ dac 15
+ tad d1
+ sys capt
+ law outline-1
+ dac 8
+ -noutline
+ dac 9f+t
+1:
+ lac 8 i
+ dac 15 i
+ isz 9f+t
+ jmp 1b
+ lac 15
+ dac displist
+ lac o400000
+ dac 15 i
+ jms dump
+
+loop:
+
+" dump/restore
+
+ lac waitup
+ sza
+ jmp 2f
+ lac .pb i
+ als 5; ral
+ snl
+ jmp 1f
+ jms dump
+ jmp 3f
+1:
+ sma
+ jmp 3f
+ jms restore
+ jmp 3f
+2:
+ lac .pb i
+ als 5; ral
+ szl
+ jmp 3f
+ spa
+ jmp 3f
+ dzm waitup
+3:
+ sys time
+ lacq
+ sad stime
+ jmp loop
+"** 10-36-55.pdf page 3
+ tad dm1
+ sad stime
+ jmp loop
+ tad d1
+ dac stime
+ lac .pb i
+ als 7
+ spa
+ sys exit
+
+ lac displist
+ dac 15
+
+ -nball
+ dac 9f+t
+
+" q and stich controls
+
+ jms getball; ball1; 9f+t
+ lac ball1+vx
+ lmq
+ lac ball1+vy
+ omq
+ sza
+ jmp 1f
+ jms stickcont
+ jms putball; ball1; 9f+t
+
+1:
+ jms getball; ball1; 9f+t
+
+" if in pocket, ignore
+
+ lac ball1+sflg
+ spa
+ jmp 4f
+ lac 9
+ dac 14
+
+" update
+
+ lac ball1+vx
+ lrss 6
+ tad ball1+x
+ and o177777
+ dac ball1+x
+ lac ball1+vy
+ lrss 6
+ tad ball1+y
+ and o177777
+ dac ball1+y
+
+" display
+
+ lac ball1+x
+ lrss 6
+ xor o142000 " setx
+ dac 15 i
+ lac ball1+y
+ lrss 6
+ xor o164000 " sety
+"** 10-36-55.pdf page 4
+ dac 15 i
+
+ law circle-1
+ dac 8
+ -circsize
+ dac 9f+t+1
+2:
+ lac 8 i
+ dac 15 i
+ isz 9f+t+1
+ jmp 2b
+
+" degrade velocity
+ jms frict
+
+" edge collision
+
+ lac lefttest
+ tad ball1+x
+ sma
+ jmp 2f
+ jms pocketlr
+ jmp 4f
+ lac ball1+vx
+ sma
+ jmp 2f
+ cma
+ tad d1
+ dac ball1+vx
+2:
+ lac bottest
+ tad ball1+y
+ sma
+ jmp 2f
+ jms pockettb
+ jmp 4f
+ lac ball1+vy
+ sma
+ jmp 2f
+ cma
+ tad d1
+ dac ball1+vy
+2:
+ lac righttest
+ tad ball1+x
+ spa
+ jmp 2f
+ jms pocketlr
+ jmp 4f
+ lac ball1+vx
+ spa
+ jmp 2f
+ cma
+ tad d1
+ dac ball1+vx
+2:
+ lac toptest
+ tad ball1+vy
+ spa
+ jmp 2f
+ jms pockettb
+"** 10-36-55.pdf page 5
+ jmp 4f
+ lac ball1+vy
+ spa
+ jmp 2f
+ cma
+ tad d1
+ dac ball1+vy
+2:
+
+" ball/ball collision
+
+ lac 9f+t
+ tad d1
+ sma
+ jmp 4f
+ dac 9f+t+1
+
+2:
+ lac 14 i
+ dac ball2+0
+ lac 14 i
+ dac ball2+1
+ lac 14 i
+ dac ball2+2
+ lac 14 i
+ dac ball2+3
+ lac 14 i
+ dac ball2+4
+ lac ball2+sflg
+ spa
+ jmp 3f
+ lac ball1+x
+ cma
+ tad ball2+x
+ cma
+ lmq
+ gsm
+ dac .+3
+ lacq
+ muls; ..
+ dac 9f+t+3
+ lrss 4
+ sza
+ jmp 3f
+ lac ball1+y
+ cma
+ tad ball2+y
+ cma
+ lmq
+ gsm
+ dac .+3
+ lacq
+ muls; ..
+ tad 9f+t+3
+ lrss 4
+ sza
+ jmp 3f
+ jms ballball
+ jms putball; ball2; 9f+t+1
+3:
+ isz 9f+t+1
+"** 10-36-55.pdf page 6
+ jmp 2b
+4:
+
+ jms putball; ball1; 9f+t
+ isz 9f+t
+ jmp 1b
+
+ lac o400000
+ dac 15 i
+ jmp loop
+t = t+3
diff --git a/src/cmd/p2.s b/src/cmd/p2.s
new file mode 100644
index 0000000..4006fee
--- /dev/null
+++ b/src/cmd/p2.s
@@ -0,0 +1,226 @@
+"** 10-36-55.pdf page 7
+" p2
+
+frict: 0
+ las
+ and d1
+ sza
+ jmp frict i
+ lac ball1+vx
+ cll; muls; frfac
+ dac ball1+vx
+ lac ball1+vy
+ cll; muls; frfac
+ dac ball1+vy
+ gsm
+ dac 9f+t
+ lac ball1+vx
+ gsm
+ tad 9f+t
+ tad minvx
+ sma
+ jmp frict i
+ dzm ball1+vx
+ dzm ball1+vy
+ jmp frict i
+t = t+1
+
+ballball: 0
+ llss 15 " x**2+y**2 in q
+ cma
+ tad o300000
+ dac 1f; dac 2f
+ lac ball2+y
+ cma
+ tad ball1+y
+ cma
+ cll; muls; 1:..; llss 6
+ dac sin
+ lac ball2+x
+ cma
+ tad ball1+x
+ cma
+ cll; muls; 2:..; llss 6
+ dac cos
+
+" calculate closing velocities
+
+ lac ball1+vx
+ gsm
+ dac .+3
+ lac cos
+ muls; ..; llss 3
+ dac 9f+t
+ lac ball1+vy
+ gsm
+ dac .+3
+ lac sin
+ muls; ..; llss 3
+ tad 9f+t
+ dac vp1
+
+ lac ball2+vx
+ gsm
+"** 10-36-55.pdf page 8
+ dac .+3
+ lac cos
+ muls; ..; llss 3
+ dac 9f+t
+ lac ball2+vy
+ gsm
+ dac .+3
+ lac sin
+ muls; ..; llss 3
+ tad 9f+t
+ dac vp2
+ cma
+ tad vp1
+ cma
+ sma
+ jmp ballball i
+
+" calculate tangential velocities
+
+ lac ball1+vx
+ gsm
+ dac .+3
+ lac sin
+ muls; ..; llss 3
+ dac 9f+t
+ lac ball1+vy
+ gsm
+ dac .+3
+ lac cos
+ muls; ..; llss 3
+ cma
+ tad 9f+t
+ cma
+ dac vt1
+
+ lac ball2+vx
+ gsm
+ dac .+3
+ lac sin
+ muls; ..; llss 3
+ dac 9f+t
+ lac ball2+vy
+ gsm
+ dac .+3
+ lac cos
+ muls; ..; llss 3
+ cma
+ tad 9f+t
+ cma
+ dac vt2
+
+" recalculate x,y velocities
+" with interchanged closing components
+
+ lac vp2
+ gsm
+ dac .+3
+ lac cos
+ muls; ..; llss 3
+ cma
+ dac 9f+t
+"** 10-36-55.pdf page 9
+ lac vt1
+ gsm
+ dac .+3
+ lac sin
+ muls; ..; llss 3
+ tad 9f+t
+ cma
+ dac ball1+vx
+
+ lac vp2
+ gsm
+ dac .+3
+ lac sin
+ muls; ..; llss 3
+ dac 9f+t
+ lac vt1
+ gsm
+ dac .+3
+ lac cos
+ muls; ..; llss 3
+ tad 9f+t
+ dac ball1+vy
+
+ lac vp1
+ gsm
+ dac .+3
+ lac cos
+ muls; ..; llss 3
+ cma
+ dac 9f+t
+ lac vt2
+ gsm
+ dac .+3
+ lac sin
+ muls; ..; llss 3
+ tad 9f+t
+ cma
+ dac ball2+vx
+
+ lac vp1
+ gsm
+ dac .+3
+ lac sin
+ muls; ..; llss 3
+ dac 9f+t
+ lac vt2
+ gsm
+ dac .+3
+ lac cos
+ muls; ..; llss 3
+ tad 9f+t
+ dac ball2+vy
+
+ jmp ballball i
+t = t+1
+
+dump: 0
+ lac o17
+ sys creat; dmpname
+ spa
+ sys save
+"** 10-36-55.pdf page 10
+ dac waitup
+ sys write; qsin; 1
+ lac waitup
+ sys write; qcos; 1
+ lac nballp
+ cll; mul; bvsize
+ lacq
+ dac 0f
+ lac waitup
+ sys write; list; 0:..
+ lac waitup
+ sys close
+ jmp dump i
+
+restore: 0
+ sys open; dmpname; 0
+ spa
+ sys save
+ dac waitup
+ sys read; qsin; 1
+ lac waitup
+ sys read; qcos; 1
+ lac nballp
+ cll; mul; bvsize
+ lacq
+ dac 0f
+ lac waitup
+ sys read; list; 0:..
+ sad 0b
+ skp
+ sys save
+ lac waitup
+ sys read; dump; 1
+ sza
+ sys save
+ lac waitup
+ sys close
+ jmp restore i
diff --git a/src/cmd/p3.s b/src/cmd/p3.s
new file mode 100644
index 0000000..efb5ad1
--- /dev/null
+++ b/src/cmd/p3.s
@@ -0,0 +1,149 @@
+"** 10-36-55.pdf page 11
+" p3
+
+rad = 02000
+diam = rad+rad
+diam3 = diam-0200
+middle: 0100000
+high: 0177700-010000
+low: 010000
+ballinit: 0
+ -nball
+ dac 9f+t
+
+" Q ball
+
+ lac middle
+ dac ball1+x
+ lac low
+ dac ball1+y
+ dzm ball1+vx
+ dzm ball1+vy
+ dzm ball1+sflg
+ jms put
+
+" top row
+
+ lac d1
+ dac ball1+sflg
+ lac high
+ dac ball1+y
+ -diam-diam-diam
+ tad ball1+x
+ dac ball1+x
+ jms put
+ jms put
+ jms put
+ jms put
+ jms put
+
+" second row
+
+ -diam3
+ tad ball1+y
+ dac ball1+y
+ -diam-diam-diam
+ tad ball1+x
+ dac ball1+x
+ -diam-rad
+ tad ball1+x
+ dac ball1+x
+ jms put
+ jms put
+ jms put
+ jms put
+
+" third row
+
+ -diam3
+ tad ball1+y
+ dac ball1+y
+ -diam-diam-diam-rad
+ tad ball1+x
+ dac ball1+x
+"** 10-36-55.pdf page 12
+ jms put
+ jms put
+ jms put
+
+" fourth row
+
+ -diam3
+ tad ball1+y
+ dac ball1+y
+ -diam-diam-rad
+ tad ball1+x
+ dac ball1+x
+ jms put
+ jms put
+
+" last row
+
+ -diam3
+ tad ball1+y
+ dac ball1+y
+ -diam-rad
+ tad ball1+x
+ dac ball1+x
+ jms put
+
+ jmp ballinit i
+
+put: 0
+ jms putball; ball1; 9f+t
+ -diam-1
+ cma
+ tad ball1+x
+ dac ball1+x
+ isz 9f+t
+ jmp put i
+ jmp put i
+t = t+1
+
+getball: 0
+ -1
+ tad getball i
+ dac 8
+ isz getball
+ lac getball i
+ dac 9f+t
+ lac nballp
+ tad 9f+t i
+ cll; mul; bvsize
+ lacq
+ tad listpm1
+ dac 9
+ -bvsize
+ dac 9f+t
+1:
+ lac 9 i
+ dac 8 i
+ isz 9f+t
+ jmp 1b
+ isz getball
+ jmp getball i
+
+"** 10-36-55.pdf page 13
+putball: 0
+ -1
+ tad putball i
+ dac 8
+ isz putball
+ lac putball i
+ dac 9f+t
+ lac nballp
+ tad 9f+t i
+ cll; mul; bvsize
+ lacq
+ tad listpm1
+ dac 9
+ -bvsize
+ dac 9f+t
+1:
+ lac 8 i
+ dac 9 i
+ isz 9f+t
+ jmp 1b
+ isz putball
+ jmp putball i
+t = t+1
diff --git a/src/cmd/p4.s b/src/cmd/p4.s
new file mode 100644
index 0000000..fbe692d
--- /dev/null
+++ b/src/cmd/p4.s
@@ -0,0 +1,202 @@
+"** 10-36-55.pdf page 14
+" p4
+
+stickcont: 0
+
+" display stick
+
+ lac ball1+x
+ lrss 6
+ xor o142000 " setx
+ dac 15 i
+ lac ball1+y
+ lrss 6
+ xor o164000 " sety
+ dac 15 i
+
+ lac qcos
+ lrss 8
+ sma
+ jmp 1f
+ cma
+ tad d1
+ xor o2000 " minus
+1:
+ xor o100000 " vecx hold
+ dac 15 i
+
+ lac qsin
+ lrss 8
+ sma
+ jmp 1f
+ cma
+ tad d1
+ xor o2000 " minus
+1:
+ xor o124000 " vecy vis
+ dac 15 i
+
+" rotation
+
+ lac .pb i
+ rtl
+ sma rar
+ jmp 2f
+
+" coarse rotation
+
+ sma
+ jmp 1f
+ szl
+ jmp 3f
+ jms rotate; mcsin; ccos
+ jmp 3f
+1:
+ snl
+ jmp 3f
+ jms rotate; csin; ccos
+ jmp 3f
+
+" fine rotation
+
+2:
+ sma
+"** 10-36-55.pdf page 15
+ jmp 1f
+ szl
+ jmp 3f
+ jms rotate; mfsin; fcos
+ jmp 3f
+1:
+ snl
+ jmp 3f
+ jms rotate; fsin; fcos
+3:
+
+" strike
+
+ lac .pb i
+ rtl; ral
+ sma ral
+ jmp 1f
+
+ lac qcos
+ dac ball1+vx
+ lac qsin
+ dac ball1+vy
+ jmp stickcont i
+
+1: sma
+ jmp stickcont i
+ lac qcos
+ lrss 1
+ dac ball1+vx
+ lac qsin
+ lrss 1
+ dac ball1+vy
+ jmp stickcont i
+
+rotate: 0
+ lac rotate i
+ dac 9f+t+1
+ lac 9f+t+1 i
+ dac 9f+t
+ isz rotate
+ lac rotate i
+ dac 9f+t+1
+ lac 9f+t+1 i
+ dac 9f+t+1
+ isz rotate
+
+ lac qsin
+ gsm
+ dac .+3
+ lac 9f+t+1
+ muls; ..; llss 2
+ dac 9f+t+2
+ lac qcos
+ gsm
+ dac .+3
+ lac 9f+t
+ muls; ..; llss 2
+ tad 9f+t+2
+ dac 9f+t+3
+
+ lac qsin
+"** 10-36-55.pdf page 16
+ gsm
+ dac .+3
+ lac 9f+t
+ muls; ..; llss 2
+ cma
+ dac 9f+t+2
+ lac qcos
+ gsm
+ dac .+3
+ lac 9f+t+1
+ muls; ..; llss 2
+ tad 9f+t+2
+ dac qcos
+ lac 9f+t+3
+ dac qsin
+ jmp rotate i
+t = t+4
+
+prad: 02000
+pocketlr: 0
+ lac ball1+sflg
+ sna
+ jmp 2f
+ -1
+ tad prad
+ cma
+ tad bottest
+ tad ball1+y
+ spa
+ jmp 3f
+ lac prad
+ tad toptest
+ tad ball1+y
+ sma
+ jmp 3f
+ -1
+ tad middle
+ cma
+ tad ball1+y
+ sma
+ cma
+ tad prad
+ sma
+ jmp 3f
+2:
+ isz pocketlr
+ jmp pocketlr i
+3:
+ -1
+ dac ball1+sflg
+ jmp pocketlr i
+
+pockettb: 0
+ lac ball1+sflg
+ sna
+ jmp 2f
+ -1
+ tad prad
+ cma
+ tad lefttest
+ tad ball1+x
+"** 10-36-55.pdf page 17
+ spa
+ jmp 3f
+ lac prad
+ tad righttest
+ tad ball1+x
+ sma
+ jmp 3f
+2:
+ isz pockettb
+ jmp pockettb i
+3:
+ -1
+ dac ball1+sflg
+ jmp pockettb i
diff --git a/src/cmd/p5.s b/src/cmd/p5.s
new file mode 100644
index 0000000..35a3389
--- /dev/null
+++ b/src/cmd/p5.s
@@ -0,0 +1,156 @@
+"** 10-36-55.pdf page 18
+" p5
+
+frfac = 0774000 " loss in vel to friction
+toptest: 02000+01000-0177700
+bottest: -02000-01000
+righttest: 02000+040400-0177700
+lefttest: -02000-040400
+minvx: -02000 " vel below whitch vel is set zero
+fsin: 0203 " sine of fine rotation angle
+csin: 02534 " sine of coarse rotation angle
+mfsin: -0203 " negative of fsin
+mcsin: -02534 " negative of csin
+fcos: 0177777 " cosine of fine rotation angle
+ccos: 0177761 " cosine of coarse rotation angle
+
+nball = 16
+
+d1: 1
+o17: 017
+o300000: 0300000
+dm1: -1
+o142000: 0142000
+o164000: 0164000
+o400000: 0400000
+o177777: 0177777
+o2000: 02000
+o100000: 0100000
+o124000: 0124000
+qsin: 0177777
+qcos: 0
+dmpname: ;;; jmp casead; ncase = ncase+1
+; jmp casebp; ncase = ncase+1
+
; jmp casebr; ncase = ncase+1
+; jmp casecc; ncase = ncase+1
+; jmp casece; ncase = ncase+1
+; jmp caseds; ncase = ncase+1
+; jmp casefi; ncase = ncase+1
+; jmp casein; ncase = ncase+1
+; jmp caseli; ncase = ncase+1
+; jmp casell; ncase = ncase+1
+; jmp casels; ncase = ncase+1
+; jmp casena; ncase = ncase+1
+; jmp casene; ncase = ncase+1
+; jmp casenf; ncase = ncase+1
+; jmp casepl; ncase = ncase+1
+; jmp casesp; ncase = ncase+1
+; jmp casess; ncase = ncase+1
+; jmp caseti; ncase = ncase+1
+; jmp caseul; ncase = ncase+1
+; jmp caseun; ncase = ncase+1
+
+" control cases
+casead:
+ jms break
+ -1
+ dac ad
+ jmp i control
+
+casebp:
+ jms break
+ jms eject
+ jmp i control
+
+casebr:
+ jms break
+ jmp i control
+
+casecc:
+ jms skipcont
+ lac i 8
+ sad o12
+ jmp i control
+ dac cc
+ jmp i control
+
+casece:
+ jms break
+ jms number; d0
+ spa
+ cla
+ dac ce
+ jms need; ce
+ jmp i control
+
+caseds:
+ jms break
+ lac d2
+ dac ls
+ jmp i control
+
+casefi:
+" ** 11-45-91.pdf page 13
+ jms break
+ -1
+ dac fi
+ jmp i control
+
+casein:
+ jms number; in
+ cma
+ tad d1
+ sma
+ cla
+ dac in
+ dac un
+ jmp i control
+
+caseli:
+ jms number; d0
+ cma
+ tad d1
+ sma
+ jmp i control
+ dac 2f
+1:
+ jms readline
+ jmp i control
+ jms text
+ isz 2f
+ jmp 1b
+ jmp i control
+2: 0
+
+casell:
+ jms number; ll
+ spa
+ cla
+ dac ll
+ jmp i control
+
+casels:
+ jms number; d0
+ sza; spa
+ lac d1
+ dac ls
+ jmp i control
+
+casena:
+ jms break
+ dzm ad
+ jmp i control
+
+casene:
+ jms number; d0
+ spa
+ cla
+ dac c
+ jms need; c
+ jmp i control
+
+casenf:
+ jms break
+ dzm fi
+" ** 11-45-91.pdf page 14
+ jmp i control
+
+casepl:
+ jms number; pl
+ spa
+ cla
+ dac pl
+ jms topbot
+ jmp i control
+
+casesp:
+ jms break
+ jms number; d0
+ cma
+ tad d1
+ sma
+ jmp i control
+ dac c
+1:
+ jms nline
+ isz c
+ jmp 1b
+ jmp i control
+
+casess:
+ jms break
+ lac d1
+ dac ls
+ jmp i control
+
+caseti:
+ jms break
+ jms number; in
+ spa
+ cla
+ dac un
+ jmp i control
+
+caseul:
+ jms number; d0
+ spa
+ cla
+ dac ul
+ jmp i control
+
+caseun:
+ jms number; d0
+ tad in
+ sma
+ cla
+ dac un
+ jmp i control
+
+" selected short routines
+skipcont: 0
+ law rawchar-1
+ dac 8
+1:
+ lac i 8
+ sad o40
+ jmp 1f
+" ** 11-45-91.pdf page 15
+ sad o12
+ jmp 2f
+ jmp 1b
+1:
+ lac i 8
+ sad o12
+ jmp 2f
+ sad o40
+ jmp 1b
+2:
+ -1
+ tad 8
+ dac 8
+ jmp i skipcont
+
+break: 0
+ lac nc
+ sna
+ jmp i break
+ -2
+ tad ls
+ cma
+ sma
+ jmp 2f
+ dac c
+1:
+ jms nline
+ isz c
+ jmp 1b
+2:
+ lac nl
+ sad bl
+ jms eject
+ lac nl
+ sza
+ jmp 2f
+ -5
+ dac c
+1:
+ lac o55
+ jms putchar
+ isz c
+ jmp 1f
+ lac ma1
+ dac c
+1:
+ jms newline
+ isz c
+ jmp 1b
+2:
+ law char-1
+ dac 8
+ lac un
+ sza
+ jmp 1f
+ dac c
+2:
+ lac o40
+ jms putchar
+ isz c
+ jmp 2b
+" ** 11-45-91.pdf page 16
+1:
+ lac i 8
+ jms putchar
+ isz nc
+ jmp 1b
+ jms newline
+ dzm nwd
+ dzm ne
+ lac in
+ dac un
+ jmp i break
+
+newline: 0
+ lac o12
+ jms putchar
+ isz nl
+ jmp i newline
+
+nline: 0
+ lac nl
+ sna
+ jmp i nline
+ sad bl
+ jmp i nline
+ jms newline
+ jmp i nline
+
+number: 0
+ dzm num
+ dzm sign
+ -1
+ dac any
+ jms skipcont
+1:
+ lac i 8
+ sad o12
+ jmp 3f
+ sad o53
+ jmp 2f
+ tad om72
+ sma
+ jmp 1b
+ tad o12
+ spa
+ jmp 1b
+ dac any
+ lac num
+ cll; mul; 10
+ lacq
+ tad any
+ dac num
+ jmp 1b
+2:
+ dac sign
+ jmp 1b
+3:
+ lac any
+ sma
+ jmp 1f
+" ** 11-45-91.pdf page 17
+ lac d1
+ isz number
+ jmp i number
+1:
+ lac sign
+ sza
+ jmp 1f
+ lac num
+ isz number
+ jmp i number
+1:
+ sad o53
+ jmp 1f
+ lac i number
+ jms laci
+ cma
+ tad num
+ cma
+ isz number
+ jmp i number
+1:
+ lac i number
+ jms laci
+ tad num
+ isz number
+ jmp i number
+
+eject: 0
+ lac pl
+ sna
+ jmp i eject
+ lac nl
+ sna
+ jmp i eject
+1:
+ sad pl
+ jmp 1f
+ jms newline
+ lac nl
+ jmp 1b
+1:
+ dzm nl
+ jmp i eject
+
+storechar: 0
+ lmq
+ lac nc
+ sza
+ jmp 1f
+ law char-1
+ dac 10
+1:
+ lacq
+ dac i 10
+ jms width
+ cma
+ tad d1
+ tad ne
+ dac ne
+ -1
+ tad nc
+" ** 11-45-91.pdf page 18
+ dac nc
+ jmp i storechar
+
+getword: 0
+ law word-1
+ dac 8
+ " *** hand written box/arrow to move after 1:
+ dzm wne
+ dzm wch
+1:
+ lac i 11
+ sad o12
+ jmp i getword
+2:
+ dac i 8
+ lmq
+ jms width
+ cma
+ jms width
+ cma
+ tad d1
+ tad wne
+ dac wne
+ -1
+ tad wch
+ dac wch
+ lacq
+ sad o40
+ jmp 1b
+ lac word
+ sad o40
+ jmp 1f
+ lac o40
+ dac word
+ lacq
+ jmp 2b
+1:
+ lac i 11
+ sad o12
+ jmp 1f
+ sad o40
+ jmp 1f
+ dac i 8
+ jms width
+ cma
+ tad d1
+ tad wne
+ dac wne
+ -1
+ tad wch
+ dac wch
+ jmp 1b
+1:
+ -1
+ tad 11
+ dac 11
+ isz getword
+ jmp i getword
+
+need: 0
+ lac ls
+ dac 1f
+ lac i need
+ jms laci
+" ** 11-45-91.pdf page 19
+ cll; mul; 1: 0
+ lacq
+ tad nl
+ cma
+ tad bl
+ spa
+ jms eject
+ isz need
+ jmp i need
+
+" text line routine
+text: 0
+ -1
+ tad ul
+ sma
+ jms undline
+ -1
+ tad ce
+ sma
+ jms center
+ law rawchar-1
+ dac 11
+ lac rawchar
+ sad o12
+ jmp 1f-1
+ sad o40
+ lac fi
+ sza
+ jmp 2f
+ skp
+ jms break
+1:
+ lac i 11
+ sad o12
+ jmp 1f
+ jms storechar
+ jmp 1b
+1:
+ lac nc
+ sna
+ jms nline
+ jms break
+ jmp i text
+2:
+ jms getword; jmp i text
+ lac wne
+ tad ne
+ tad un
+ tad ll
+ spa
+ jms adjust
+ law word-1
+ dac 8
+ lac nwd
+ sza
+ jmp 3f
+1:
+ lac i 8
+ sad o40
+ skp
+" ** 11-45-91.pdf page 20
+ jmp 3f+1
+ isz wch
+ jmp 1b
+3:
+ lac i 8
+ jms storechar
+ isz wch
+ jmp 3b
+ isz nwd
+ jmp 2b
+
+" adjust routine
+adjust: 0
+ lac nwd
+ sna
+ jmp i adjust
+ dac 8
+ law tchar-1
+ dac 9
+ dzm ndiv
+ dzm nrem
+ lac ad
+ sna
+ jmp 1f
+ -1
+ tad nwd
+ sna
+ jmp 1f
+ dac 2f
+ lac ll
+ tad ne
+ tad un
+ spa
+ jmp 1f
+ cll; idiv; 2: 0
+ dac nrem
+ lacq
+ dac ndiv
+1:
+ lac i 8
+ sad o40
+ jms fill
+ dac i 9
+ isz nc
+ jmp 1b
+ lac o12
+ dac i 9
+ law tchar-1
+ dac 8
+2:
+ lac i 8
+ sad o12
+ jmp 2f
+ jms storechar
+ jmp 2b
+2:
+ jms break
+ jmp i adjust
+
+fill: 0
+" ** 11-45-91.pdf page 21
+ lac nrem
+ sna
+ jmp 2f
+ tad dm1
+ dac nrem
+ lac d1
+2:
+ tad ndiv
+ cma
+ dac c
+ lac o40
+2:
+ dac i 9
+ isz c
+ jmp 2b
+2:
+ isz nc
+ lac i 8
+ sad o40
+ skp
+ jmp i fill
+ dac i 9
+ jmp 2b
+
+" more routines
+topbot: 0
+ lac pl
+ sza
+ jmp 1f
+ dzm bl
+ jmp i topbot
+1:
+ -11
+ tad pl
+ spa
+ jmp 1f
+ dac bl
+ cma
+ tad d1
+ tad nl
+ spa
+ jmp i topbot
+ lac bl
+ dac nl
+ jmp i topbot
+1:
+ lac d55
+ dac bl
+ dac nl
+ tad d11
+ dac pl
+ jmp i topbot
+
+undline: 0
+ dac ul
+ law rawchar-1
+ dac 8
+ law tchar-1
+ dac 9
+1:
+ lac i 8
+" ** 11-45-91.pdf page 22
+ dac i 9
+ sad o12
+ jmp 1f
+ sad o40
+ jmp 1b
+ lac o10
+ dac i 9
+ lac o137
+ jmp 1b
+1:
+ law tchar-1
+ dac 8
+ law rawchar-1
+ dac 9
+1:
+ lac i 8
+ dac i 9
+ sad o12
+ jmp i undline
+ jmp 1b
+
+center: 0
+ dac ce
+ law rawchar-1
+ dac 8
+ law tchar-1
+ dac 9
+ dzm wne
+1:
+ lac i 8
+ dac i 9
+ sad o12
+ jmp 1f
+ jms width
+ tad wne
+ dac wne
+ jmp 1b
+1:
+ -1
+ tad wne
+ spa
+ jmp i center
+ cma
+ tad ll
+ tad in
+ lrss 1
+ cma
+ tad d1
+ sma
+ -1
+ dac c
+ law tchar-1
+ dac 8
+ law rawchar-1
+ dac 9
+ lac o40
+1:
+ dac i 9
+ isz c
+ jmp 1b
+" ** 11-45-91.pdf page 23
+1:
+ lac i 8
+ dac i 9
+ sad o12
+ jmp i center
+ jmp 1b
+
+width: 0
+ sad o10
+ jmp 1f
+ lac d1
+ jmp i width
+1:
+ -1
+ jmp i width
+
+eibufp: ibuf+64
+ibufp: ibuf
+eobufp: obuf+64
+obufp: obuf
+input: 0
+output: 1
+ls: 1
+ce: 0
+in: 0
+un: 0
+ul: 0
+ma1: -5
+bl: 55
+ll: 50
+nwd: 0
+nl: 0
+nc: 0
+ne: 0
+pl: 88
+ad: -1
+fi: -1
+cc: .>
+o12: 012
+o40: 040
+o177: 0177
+o53: 053
+om72: -072
+o55: 055
+o400000: 0400000
+o10: 010
+d11: 11
+d55: 55
+o137: 0137
+d1: 1
+d2: 2
+d4: 4
+dm4: -4
+d0: 0
+dm1: -1
+c: .=.+1
+nrem: .=.+1
+ndiv: .=.+1
+num: .=.+1
+" ** 11-45-91.pdf page 24
+any: .=.+1
+ital: .=.+1
+otal: .=.+1
+sctal: .=.+1
+sctalp: .=.+1
+sign: .=.+1
+wch: .=.+1
+wne: .=.+1
+word: .=.+300
+char: .=.+300
+tchar: .=.+300
+rawchar: .=.+300
+ibuf: .=.+64
+obuf: .=.+64
diff --git a/src/cmd/sh.s b/src/cmd/sh.s
new file mode 100644
index 0000000..5fbd9cc
--- /dev/null
+++ b/src/cmd/sh.s
@@ -0,0 +1,430 @@
+" ** 11-45-91.pdf page 30
+" sh
+
+clear:
+ jmp shell
+
+1:
+ dzm i 8
+ isz clear
+ jms 1b
+ lacq
+ jmp 017771
+zerop: .-1
+
+comerr:
+ lac d1
+ sys write; errmes; 1
+
+shell:
+ lac d1
+ sys write; ready; 1
+shell1:
+ lac delim
+ sad newln
+ jms rline
+ jms getcom
+ lac narg
+ sna
+ jmp comretrn
+ lac args
+ sad chcom
+ skp
+ jmp 3f
+ lac args+1
+ sad spsp
+ jmp doch
+3:
+ sys fork
+ skp
+ jmp loadcom
+ spa
+ jmp comerr
+ lmq
+ lac delim
+ sad amper
+ jmp shell1
+ lacq " hand written
+ clq " send mesg to child
+ sys smes
+comretrn:
+ lac delim
+ sad newln
+ jmp shell
+ jmp shell1
+
+loadcom:
+ sys open; args; 0
+ sma
+ jmp 1f
+ sys link; system; args; args
+ spa
+
+" ** 11-45-91.pdf page 30
+
+ jmp 2f
+ -1
+ dac lnkflg
+ jmp loadcom
+
+2:
+ lac lnkflg
+ sna
+ jmp 3f
+ sys unlink; args
+3:
+ lac d1
+ sys write; args; 4
+ lac d1
+ sys write; errmes; 1
+ sys exit
+
+1:
+ lac lnkflg
+ sna
+ jmp 1f
+ sys unlink; args
+1:
+ lac in
+ sna
+ jmp 2f
+ cla
+ sys close
+ sys open; in; 0
+ sma
+ jmp 2f
+ lac d1
+ sys write; in; 4
+ sys write; errmes; 1
+ sys exit
+2:
+ lac out
+ sna
+ jmp 1f
+ lac d1
+ sys close
+ lac o17
+ sys creat; out
+ spa
+ sys exit
+1:
+ lac narg
+ cma
+ dac t1
+ tad o17771
+ dac 017777
+ tad dm1
+ dac 8
+ and o7777
+ dac boot+2
+ cma
+ tad d7
+ dac close
+ lac nargp
+ dac 9
+
+" ** 11-45-91.pdf page 32
+
+2:
+ lac i 9
+ dac i 8
+ isz t1
+ jmp 2b
+ lac bootp
+ dac 9
+ -6
+ dac t1
+2:
+ lac i 9
+ dac i 8
+ isz t1
+ jmp 2b
+ lac d2
+ lmq
+ lac zerop
+ dac 8
+ jmp clear+1
+
+boot:
+ sys read; 4096; ..
+ lacq
+ sys close
+ jmp 4096
+
+getcom: 0
+ law args-1
+ dac 10
+ dzm in
+ dzm out
+ dzm narg
+ dzm lnkflg
+
+ jms get
+nparm:
+ sad gr
+ jmp cgr
+ sad ls
+ jmp cls
+ sad amper
+ jmp endcom
+ sad semic
+ jmp endcom
+ sad newln
+ jmp endcom
+ sad space
+ jmp nparm-1
+ lmq
+ lac narg
+ tad d4
+ dac narg
+ lacq
+ jms getparm
+ jmp nparm
+
+endcom:
+ dac delim
+ jmp getcom i
+
+cls:
+
+" ** 11-45-91.pdf page 33
+
+ jms get
+ jms getparm
+ dac t1
+ law in-1
+ jmp cpio
+cgr:
+ jms get
+ jms getparm
+ dac t1
+ law out-1
+cpio:
+ dac 11
+ lac 10
+ tad dm4
+ dac 10
+ lmq
+ -4
+ dac c1
+1:
+ lac i 10
+ dac i 11
+ isz c1
+ jmp 1b
+ lacq
+ dac 10
+ lac t1
+ jmp nparm
+
+getparm:0
+ lmq
+ -8
+ dac c1
+ lacq
+ skp
+1:
+ jms get
+ sad space
+ jmp 1b
+ jms checkdlm
+ jmp comerr
+ jmp 2f
+1:
+ jmp get
+ jms checkdlm
+ jmp fill1
+2:
+ alss 9
+ isz c1
+ lmq
+ jms get
+ jms checkdlm
+ jmp fill
+ omq
+ dac i 10
+ isz c1
+ jmp 1b
+1:
+ jms get
+ jms checkdlm
+ jmp i getparm
+ jmp 1b
+
+" ** 11-45-91.pdf page 34
+
+fill:
+ dac t1
+ lac space
+ omq
+ dac i 10
+ isz c1
+ nop
+ lac t1
+fill1:
+ lmq
+ lac c1
+ spa
+ jmp 1f
+ lacq
+ jmp i getparm
+1:
+ lac spsp
+ dac i 10
+ isz c1
+ isz c1
+ jmp 1b
+ lacq
+ jmp i getparm
+
+checkdlm: 0
+ sad space
+ jmp i checkdlm
+ sad newln
+ jmp i checkdlm
+ sad amper
+ jmp i checkdlm
+ sad semic
+ jmp i checkdlm
+ isz checkdlm
+ jmp i checkdlm
+
+get: 0
+ lac i 8
+ sad slash
+ skp
+ jmp i get
+ lac i 8
+ sad newln
+ skp
+ jmp comerr
+ lacq
+ dac 1f
+ jms rline
+ lac 1f
+ lmq
+ lac space
+ jmp i get
+
+1: 0
+rline:0
+2:
+ law lineb-1
+ dac 15
+ dac 8
+1:
+ jms getcha
+
+" ** 11-45-91.pdf page 35
+ dac i 15
+ sad newln
+ jmp i rline
+ sad sharp
+ jmp psharp
+ sad atsign
+ jmp 2b
+ jmp 1b
+psharp:
+ -1
+ tad 15
+ sad 2b
+ jmp 2b
+ tad dm1
+ dac 15
+ jmp 1b
+
+getcha: 0
+ lac char
+ dzm char
+ sza
+ jmp i getcha
+ isz nread
+ jmp 1f
+ cla
+ sys read; inbuf; 64
+ spa sna
+ jmp lgout
+ cma
+ tad d1
+ dac nread
+ law inbuf-1
+ dac 14
+1:
+ lac i 14
+ lmq
+ and o777
+ dac char
+ ecla llss 9
+ jmp i getcha
+
+doch:
+ lac narg
+ lrss 2
+ cma
+ tad d1
+ dac narg
+ law args+4
+ dac 1f
+2:
+ isz narg
+ skp
+ jmp comretrn
+ sys chdir; 1:0
+ spa
+ jmp cherr
+ lac 1b
+ tad d4
+ dac 1b
+ jmp 2b
+cherr:
+
+" ** 11-45-91.pdf page 36
+ lac 1b
+ dac .+3
+ lac d1
+ sys write; ..; 4
+ jmp comerr
+
+lgout:
+ clq
+ lac d1
+ sys smes
+ sys exit
+
+d1: 1
+dm1: -1
+d4: 4
+dm4: -5
+d2: 2
+d7: 7
+o17: 017
+o17771: 017771
+o7777: 07777
+o777: 0777
+gr: 076
+ls: 074
+amper: &>
+semic: 073
+space: 040
+sharp: 043
+atsign: 0100
+newln: 012
+slash: 057
+in: 0;0;0;0
+out: 0;0;0;0
+errmes: 077012
+chcom:
+ready: 0100040
+delim: 012
+system: ; ; ; spsp: 040040
+nargp: narg-1
+bootp: boot-1
+char: 0
+nread: -1
+lineb: .=.+128
+inbuf: .=.+64
+c1: .=.+1
+t1: .=.+1
+lnkflg: .=.+1
+narg: .=.+1
+args:
diff --git a/src/cmd/stat.s b/src/cmd/stat.s
new file mode 100644
index 0000000..26b8298
--- /dev/null
+++ b/src/cmd/stat.s
@@ -0,0 +1,119 @@
+"** 13-120-147.pdf page 1
+" stat
+
+arg = 017777
+
+ lac arg
+ tad d1
+ dac name
+
+loop:
+ lac arg i
+ sad d4
+ sys exit
+ tad dm4
+ dac arg i
+ lac name
+ tad d4
+ dac name
+
+ law statbuf
+ sys status; dotdot; name: ..
+ spa
+ jmp error
+ law obuf-1
+ dac 12
+ lac ii
+ lmq
+ -3
+ jms octal
+ lac iflags
+ lmq
+ -2
+ jms octal
+ lac iuid
+ lmq
+ -2
+ jms octal
+ -1
+ tad iniks
+ cma
+ lmq
+ -2
+ jms octal
+ lac isize
+ lmq
+ -5
+ jms octal
+ lac o12
+ dac obuf+18
+ lac d1
+ sys write; obuf; 19
+ jmp loop
+
+error:
+ lac name
+ dac 1f
+ lac d1
+ sys write; 1:..; 4
+ lac d1
+ sys write; 1f; 2
+ jmp loop
+1: 040077; 012
+
+"** 13-120-147.pdf page 2
+octal: 0
+ dac c
+ law tbuf-1
+ dac 8
+ lac o40
+ dac 8 i
+1:
+ lacq
+ and o7
+ tad o60
+ dac 8 i
+ lrs 3
+ isz c
+ jmp 1b
+ lac 8
+ dac c
+1:
+ lac c i
+ dac 12 i
+ sad o40
+ jmp octal i
+ -1
+ tad c
+ dac c
+ jmp 1b
+
+dotdot:
+ 056056; 040040; 040040; 040040
+
+d1: 1
+d2: 2
+d3: 3
+d8: 8
+d14: 14
+d12: 12
+o12: 012
+o60: 060
+o40: 040
+o7: 7
+d4: 4
+dm4: -4
+
+c: .=.+1
+
+statbuf:
+ iflags: .=.+1
+ .=.+7
+ iuid: .=.+1
+ iniks: .=.+1
+ isize: .=.+1
+ .=.+1
+ ii: .=.+1
+
+obuf: .=.+19
+tbuf: .=.+10
diff --git a/src/cmd/tm.s b/src/cmd/tm.s
new file mode 100644
index 0000000..015c5f2
--- /dev/null
+++ b/src/cmd/tm.s
@@ -0,0 +1,74 @@
+"** 13-120-147.pdf page 3
+" tm
+
+ sys time
+ cll
+ div
+ 216000
+ dac t1
+ lacq
+ cll
+ idiv
+ 10
+ tad o60
+ dac buf+1
+ lacq
+ cll; idiv; 10
+ tad o60
+ dac buf
+ lacq
+ sna
+ jmp 1f
+ tad o60
+ alss 9
+ xor buf
+ dac buf
+1:
+ lac t1
+ cll
+ idiv
+ 6
+ lacq
+ cll
+ idiv
+ 10
+ tad o56060
+ dac buf+6
+ lacq
+ cll
+ idiv
+ 10
+ tad o60
+ dac buf+5
+ lacq
+ cll
+ idiv
+ 6
+ tad o72060
+ dac buf+4
+ lacq
+ cll
+ idiv
+ 10
+ tad o60
+ dac buf+3
+ lacq
+ cll
+ idiv
+ 6
+ tad o72060
+ dac buf+2
+ lac d1
+ sys write; buf; 8
+ sys exit
+
+"** 13-120-147.pdf page 4
+d1: 1
+d13: 13
+d2: 2
+o60: 060
+o56060: 056060
+o72060: 072060
+t1: 0
+t2: 0
+buf: .=.+7; 012
diff --git a/tools/README.md b/tools/README.md
index df41209..c6676b1 100644
--- a/tools/README.md
+++ b/tools/README.md
@@ -1,4 +1,4 @@
-#Tools
+# Tools
## 3dump