Research PDP7 development
[unix-history] / s3.s
diff --git a/s3.s b/s3.s
new file mode 100644 (file)
index 0000000..ce11dee
--- /dev/null
+++ b/s3.s
@@ -0,0 +1,347 @@
+" s3
+
+searchu: 0
+   lac searchu i
+   dac 9f+t+1
+   -mnproc
+   dac 9f+t
+   law ulist-1
+   dac 8
+1:
+   lac 8 i
+   dac lu
+   lac 8 i
+   dac lu+1
+   lac 8 i
+   dac lu+2
+   lac 8 i
+   dac lu+3
+   jms 9f+t+1 i
+   isz 9f+t
+   jmp 1b
+   isz searchu
+   jmp searchu i
+t = t+2
+
+lookfor: 0
+   jms searchu; 1f
+   isz lookfor
+   isz lookfor
+   jmp lookfor i
+1: 0
+   lac lu
+   rtl; rtl; and o7
+   sad lookfor i
+   skp
+   jmp 1b i
+   -3
+   tad 8
+   and o17777
+   isz lookfor
+   jmp lookfor i
+
+.fork:
+   jms lookfor; 0 " not-used
+      skp
+      jms error
+   dac 9f+t
+   isz uniqpid
+   lac uniqpid
+   dac u.ac
+   law sysexit
+   dac u.swapret
+   lac o200000
+   tad u.ulistp i
+   dac u.ulistp i
+   jms dskswap; 07000
+   lac 9f+t
+   dac u.ulistp
+   lac o100000
+   xor u.ulistp i
+   dac u.ulistp i
+   lac u.pid
+   dac u.ac
+   lac uniqpid
+   dac u.pid
+   isz 9f+t
+   dac 9f+t i
+   isz u.rq+8
+   dzm u.intflg
+   jmp sysexit
+t= t+1
+
+badcal:
+   clon
+   -1
+   dac 7
+.save:
+   lac d1
+   jms iget
+   cla
+   jms iwrite; 4096; 4096
+   jms iwrite; userdata; 64
+   jms iput
+
+.exit:
+   lac u.dspbuf
+   sna
+   jmp .+3
+   law dspbuf
+   jms movdsp
+   jms awake
+   lac u.ulistp i
+   and o77777
+   dac u.ulistp i
+   isz u.ulistp
+   dzm u.ulistp i
+   jms swap
+
+.rmes:
+   jms awake
+   lac o100000
+   tad u.ulistp i
+   dac u.ulistp i
+   law 2
+   tad u.ulistp
+   dac 9f+t
+   -1
+   dac 9f+t i
+   jms swap
+   law 2
+   tad u.ulistp
+   dac 9f+t
+   lac 9f+t i
+   cma
+   dac u.ac
+   dzm 9f+t i
+   isz 9f+t
+   lac 9f+t i
+   dac u.mq
+   dzm 9f+t i
+   jmp sysexit
+t = t+1
+
+.smes:
+   lac u.ac
+   sna spa
+   jms error
+   jms searchu; 1f
+   law 2
+   tad u.ulistp
+   dac 9f+t
+   dzm 9f+t i
+   jms error
+1: 0
+   lac lu+1
+   sad u.ac
+   skp
+   jmp 1b i
+   lac lu+2
+   sad dm1
+   jmp 1f
+   lac o100000
+   tad u.ulistp i
+   dac u.ulistp i
+   law 2
+   tad u.ulistp
+   dac 9f+t
+   lac u.ac
+   dac 9f+t i
+   jms swap
+   law 2
+   tad u.ulistp
+   dac 9f+t
+   dzm 9f+t i
+   jmp .smes
+1:
+   -3
+   tad 8
+   dac 9f+t
+   lac o700000
+   tad 9f+t i
+   dac 9f+t i
+   isz 9f+t
+   isz 9f+t
+   lac u.pid
+   cma
+   dac 9f+t i
+   isz 9f+t
+   lac u.mq
+   dac 9f+t i
+   jmp okexit
+t = t+1
+
+awake: 0
+   jms searchu; 1f
+   jmp awake i
+1: 0
+   lac u.pid
+   sad lu+2
+   skp
+   jmp 1b i
+   -3
+   tad 8
+   dac 9f+t
+   lac o700000
+   tad 9f+t i
+   dac 9f+t i
+   jmp 1b i
+t = t+1
+
+swr:
+sww:
+   jmp .-4 i
+   .halt; rttyi; rkbdi; rppti; .halt
+   .halt; wttyo; wdspo; wppto
+
+.halt: jms halt
+
+rttyi:
+   jms chkint1
+   lac d1
+   jms getchar
+      jmp 1f
+   and o177
+   jms betwen; o101; o132
+      skp
+   tad o40
+   alss 9
+   jmp passone
+1:
+   jms sleep; sfiles+0
+   jms swap
+   jmp rttyi
+
+wttyo:
+   jms chkint1
+   jms forall
+   sna
+   jmp fallr
+   lmq
+   lac sfiles+1
+   spa
+   jmp 1f
+   xor o400000
+   dac sfiles+1
+   lacq
+   tls
+   sad o12
+   jms putcr
+   jmp fallr
+1:
+   lacq
+   dac char
+   jms putchar
+      skp
+   jmp fallr
+   jms sleep; sfiles+1
+   jms swap
+   jmp wttyo
+
+rkbdi:
+   jms chkint1
+   lac d3
+   jms getchar
+      jmp 3f
+   lmq
+   and o155
+   sad o55
+   jmp 1f
+   lacq
+   and o137
+   sad o134
+   skp
+   jmp 2f
+1:
+   lacq
+   xor o20
+   lmq
+2:
+   lacq
+   dac u.limit
+1:
+   jms chkint1
+   lac u.limit
+   jms dspput
+      jmp 1f
+   jms sleep; sfiles+6
+   jms swap
+   jmp 1b
+1:
+   lac u.limit
+   alss 9
+   jmp passone
+3:
+   jms sleep; sfiles+2
+   jms swap
+   jmp rkbdi
+
+wdspo:
+   jms chkint1
+   jms forall
+   jms dspput
+      jmp fallr
+   jms sleep; sfiles+6
+   jms swap
+   jmp wdspo
+
+
+rppti:
+   lac d4
+   jms getchar
+      jmp .+3
+   alss 9
+   jmp passone
+   lac sfiles+3
+   sma
+   rsa
+1:
+   jms sleep; sfiles+3
+   jms swap
+   jmp rppti
+
+wppto:
+   jms forall
+   sna
+   jmp fallr
+   lmq
+   lac sfiles+4
+   spa
+   jmp 1f
+   xor o400000
+   dac sfiles+4
+   lacq
+   psa
+   jmp fallr
+1:
+   lacq
+   dac char
+   lac d5
+   jms putchar
+      skp
+   jmp fallr
+   jms sleep; sfiles+4
+   jms swap
+   jmp wppto
+
+passone:
+   sad o4000
+   jmp okexit
+   dac u.base i
+   lac d1
+   dac u.ac
+   jmp sysexit
+
+error: 0
+   -1
+   dac u.ac
+   jmp sysexit
+
+chkint1: 0
+   dzm .insys
+   jms chkint
+      skp
+   jmp .save
+   -1
+   dac .insys
+   jmp chkint1 i