Research PDP7 development
[unix-history] / s4.s
diff --git a/s4.s b/s4.s
new file mode 100644 (file)
index 0000000..2fea802
--- /dev/null
+++ b/s4.s
@@ -0,0 +1,334 @@
+" s4
+
+alloc: 0
+   -1
+   tad s.nfblks
+   spa
+   jmp 1f
+   dac s.nfblks
+   tad fblksp
+   jms laci
+   dac 9f+t
+   jms copyz; dskbuf; 64
+   lac 9f+t
+   jms dskwr
+   dzm .savblk
+   lac 9f+t
+   jmp alloc i
+1:
+   lac s.nxfblk
+   sna
+   jms halt " OUT OF DISK
+   dac s.fblks
+   jms dskrd
+   lac dskbuf
+   dac s.nxfblk
+   jms copy; dskbuf+1; s.fblks+1; 9
+   lac d10
+   dac s.nfblks
+   jmp alloc+1
+
+free: 0
+   lmq
+   lac s.nfblks
+   sad d10
+   jmp 1f
+   tad fblksp
+   dac 9f+t
+   lacq
+   dac 9f+t i
+   dzm .savblk
+   isz s.nfblks
+   jmp free i
+1:
+   lac s.nxfblk
+   dac dskbuf
+   jms copy; s.fblks+1; dskbuf+1; 9
+   lacq
+   dac s.nxfblk
+   jms dskwr
+   dzm .savblk
+   lac d1
+   dac s.nfblks
+   jmp free i
+t = t+1
+
+laci: 0
+   and o17777
+   tad o200000
+   dac .+1
+   lac ..
+   jmp laci i
+
+
+betwen: 0
+   lmq cmq
+   lac betwen i
+   dac 9f+t
+   isz betwen
+   lacq
+   tad 9f+t i
+   sma
+   jmp 1f
+   lac betwen i
+   dac 9f+t
+   isz betwen
+   lacq
+   tad 9f+t i
+   cma
+   spa sna
+1:
+   isz betwen
+   lacq
+   cma
+   jmp betwen i
+
+copy: 0
+   -1
+   tad copy i
+   dac 8
+   isz copy
+   -1
+   tad copy i
+   dac 9
+   isz copy
+   -1
+   tad copy i
+   cma
+   dac 9f+t
+   isz copy
+1:
+   lac 8 i
+   dac 9 i
+   isz 9f+t
+   jmp 1b
+   jmp copy i
+
+copyz: 0
+   -1
+   tad copyz i
+   dac 8
+   isz copyz
+   -1
+   tad copyz i
+   cma
+   dac 9f+t
+   isz copyz
+1:
+   dzm 8 i
+   isz 9f+t
+   jmp 1b
+   jmp copyz i
+t = t+1
+
+putchar: 0
+   dac 9f+t
+   cla
+   jms takeq
+      jmp putchar i
+   tad o40001
+   dac .+4
+   lac 9f+t
+   jms putq
+   lac char
+   dac q2+1 ..
+   isz putchar
+   jmp putchar i
+t = t+1
+
+getchar: 0
+   jms takeq
+      jmp i getchar
+   tad o200001
+   dac .+3
+   cla
+   jms putq
+   lac q2+1 ..
+   isz getchar
+   jmp i getchar
+
+takeq: 0
+   rcl
+   tad lacq1
+   dac .+7
+   tad o640000
+   dac .+17
+   tad d1
+   dac .+14
+   tad o500000
+   dac .+5
+   lac q1 ..
+   sna
+   jmp takeq i
+   dac lnkaddr
+   sad q1+1 ..
+   jmp .+5
+   tad o200000
+   dac .+1
+   lac q2 ..
+   jmp .+3
+   cla
+   dac q1+1 ..
+   dac q1 ..
+   isz takeq
+   lac lnkaddr
+   jmp i takeq
+
+putq: 0
+   rcl
+   tad dacq1
+   dac .+14
+   tad d1
+   dac .+13
+   tad o140000
+   dac .+1
+   lac q1-1 ..
+   sna
+   jmp .+6
+   tad o40000
+   dac .+2
+   lac lnkaddr
+   dac q2 ..
+   jmp .+3
+   lac lnkaddr
+   dac q1 ..
+   dac q1+1 ..
+   jmp putq i
+
+srcdbs: 0
+   dac 9f+t+2   "* lmq
+   -ndskbs
+   dac 9f+t
+   law dskbs   "* -1 dac 8 written
+   dac 9f+t+1  "* lacq
+1:
+   jmp srcdbs i
+   isz 9f+t+1
+   isz 9f+t
+   jmp 1b
+   isz srcdbs
+   jmp srcdbs i
+
+collapse: 0
+   cla
+   jms srcdbs
+      jmp 1f
+   law dskbs
+1:
+   dac 0f+1
+   dac 0f
+   cma
+   tad d1
+   tad edskbsp
+   and o17777
+   sna
+   jmp 0f+3
+   dac 0f+2
+   jms copy; 0:..; ..; ..
+   -65
+   tad edskbsp
+   dac 9f+t
+   tad d1
+   dac 0f
+   lac dskaddr
+   dac 9f+t i
+   jms copy; dskbuf; 0:..; 64
+   jmp collapse i
+
+dskrd: 0
+   jms betwen; d2; d7999
+
+      jms halt
+   sad dskaddr
+   jmp dskrd i
+   dac dskaddr
+   jms srcdbs
+      jmp 1f
+   lac dskaddr
+   jms dskio; 06000
+   jmp 2f
+1:
+   dzm 9f+t+1 i
+   law 1
+   tad 9f+t+1
+   dac .+2
+   jms copy; ..; dskbuf; 64
+2:
+   jms collapse
+   jmp dskrd i
+
+dskwr: 0
+   jms betwen; d2; d7999
+      jms halt
+   jms dskio; 07000
+   lac dskaddr
+   jms srcdbs
+      dzm 9f+t+1 i
+   jms collapse
+   jmp dskwr i
+t = t+3
+
+dskio: 0
+   dac dskaddr
+   cll; idiv; 80
+   dac 9f+t
+   lacq
+   idiv; 10
+   dac 9f+t+1
+   lls 22
+   xor 9f+t+1
+   als 8
+   dac 9f+t+1
+   lac 9f+t
+   idiv; 10
+   dac 9f+t
+   lls 22
+   xor 9f+t
+   xor 9f+t+1
+   xor o200000
+   dac 9f+t
+   jms dsktrans; -64; dskbuf; 9f+t; dskio
+   isz dskio
+   jmp dskio i
+t = t+1
+
+dsktrans: 0
+   -10
+   dac 9f+t
+1:
+   -1
+   tad dsktrans
+   dac 12
+   dscs
+   lac 12 i
+   dslw
+   lac 12 i
+   dslm
+   lac 12 i
+   jms laci
+   dsld
+   dzm .dskb
+   lac 12 i
+   jms laci
+   jms laci
+   dsls
+   lac .dskb
+   sna
+   jmp .-2
+   lac .dske
+   sma
+   jmp 12 i
+   isz 9f+t
+   jmp 1b
+   jms halt " 10 disk errors
+t = t+1
+
+halt: 0
+   isz 9f+t
+   jmp .-1
+   iof
+   hlt
+   jms copy; law; 4096; 4096
+   hlt; jmp .-1
+t = t+1
+