Research PDP7 development
[unix-history] / bc.s
diff --git a/bc.s b/bc.s
new file mode 100644 (file)
index 0000000..b857335
--- /dev/null
+++ b/bc.s
@@ -0,0 +1,288 @@
+" bc
+
+   jmp start
+rinit:
+   jms initio
+   jmp .+1 i
+initio: 0
+   lac inter-1
+   dac fetch
+   jmp rinit
+   jms inter
+inter: 0
+   las
+   and o17
+   sza
+   jms trace
+   lac pc i
+   dac instr
+   lac pc
+   and o10000
+   sna
+   jmp badpc
+   lac sp
+   and o17700
+   sad o17700
+   jmp badsp
+   and o10000
+   sna
+   jmp badsp
+   lac instr
+   sad insasg
+   skp
+   jmp inter i
+   -4
+   tad sp
+   dac t1
+   lac t1 i
+   and o10000
+   sna
+   jmp badasgn
+   lac instr
+   jmp inter i
+
+trace: 0
+   and d1
+   sza
+   jms dtrace
+   las
+   and d2
+   sza
+   jms ddisp
+   las
+   and d4
+   sza
+   jms histog
+   las
+   and d8
+   sza
+   jmp stop
+   jmp trace i
+
+dtrace: 0
+   lac pc
+   dac 8
+   lac 8 i
+   dac instr
+   lac 8
+   jms octal; -4
+   law 040
+   jms putc
+   lac instr
+   cll; lrs 14
+   tad lacop
+   dac .+1
+   lac ..
+   jms putc
+   law 040
+   jms putc
+   lac instr
+   jms octal; -4
+   
+   lac instr
+   sad inslitr
+   skp
+   jmp 1f
+   law 040
+   jms putc
+   lac 8 i
+   jms octal; -6
+1:
+   law 012
+   jms putc
+   jms flush
+   jmp dtrace i
+
+ddisp: 0
+   jms dspinit
+   lac dspbp
+   dac 8
+   lac dp
+   sad olddp
+   skp
+   jms dspblk
+   lac pc
+   jms dspnt
+   lac sp
+   jms dspnt
+   lac lastv
+   jms dspnt
+   -1
+   dac B i
+   lac pbs i
+   sza
+   jmp .-2
+   jmp ddisp i
+
+dspblk: 0
+   lac dspbuf
+   dac 8
+   lac dp
+   dac t1
+   dzm t2
+1:
+   lac t1
+   sna
+   jmp 1f
+   lac o216000 " dx -20
+   dac 8 i
+   lac t2
+   tad o20
+   dac t2
+   lac t1
+   tad d1
+   dac t3
+   lac t3 i
+   jms dspnt
+   lac t1 i
+   dac t1
+   jmp 1b
+1:
+   lac o160020 " sx 20
+   tad t2
+   dac dspbuf i
+   dac 8 i
+   lac 8
+   dac dspbp
+   jmp dspblk i
+
+dspnt: 0
+   and o7777
+   lrss 2
+   xor o164000 " sy 0
+   dac 8 i
+   lac o17010
+   dac 8 i
+   jmp dspnt i
+
+dspinit: 0
+   -1
+   tad dspinit
+   dac dspinit
+   -300
+   tad lastv
+   dac lastv
+   dac dspbuf
+   -1
+   dac dspinit i
+   dac dspbuf i
+   dzm olddp
+   lac dspbuf
+   sys capt
+   law 13
+   sys sysloc
+   dac pbs
+   jmp dspinit i
+
+histog: 0
+   jms hisinit
+   lac pc
+   lrs 6
+   and o77
+   tad histbuf
+   dac t1
+   isz t1 i
+   jmp histog i
+   jmp .
+
+hisinit: 0
+   -1
+   tad hisinit
+   dac hisinit
+   -1
+   dac hisinit i
+   -64
+   dac t1
+   tad lastv
+   dac lastv
+   dac histbuf
+   tad dm1
+   dac 8
+1:
+   dsm 8 i
+   isz t1
+   jmp 1b
+   jmp hisinit i
+
+histbuf: 0
+olddp: 0
+dspbuf: 0
+dspbp: 0
+instr: 0
+obs: 0
+inslitr: n 5
+insasg: b 1
+o17: 017
+d8: 8
+o77: 077
+o10000: 010000
+d5: 5
+o60: 060
+o7777: 07777
+o216000: 0216000
+o160020: 0160020
+o20: 020
+o164000: 0164000
+o17010: 017010
+o17700: 017700
+d2: 2
+
+lacop: lac .
+   a>;b>;c>;f>;n>;s>;t>;u>;x>;y>
+
+badpc:
+   jms flush
+   lac d1
+   sys write; mpc; mpcs
+   jmp stop
+badsp:
+   jms flush
+   lac d1
+   sys write; msp; msps
+   jmp stop
+badasgn:
+   jms flush
+   lac d1
+   sys write; mas; mass
+   jmp stop
+mpc:
+   012;<pc>;012
+mpcs = .-mpc
+msp:
+   012;<sp>;012
+msps = .-msp
+mas:
+   012;<as>;012
+mass = .-mas
+
+octal: 0
+   lmq
+   lac d5
+   tad octal i
+   cma
+   dac 2f
+   sna
+   jmp 3f
+1:
+   llss 3
+   isz 2f
+   jmp 1b
+3:
+   lac octal i
+   dac 2f
+   lacq
+   dac 2f+1
+1:
+   lac 2f+1
+   lmq
+   ecla llss 3
+   tad o60
+   jms putc
+   lac 2f+1
+   alss 3
+   dac 2f+1
+   isz 2f
+   jmp 1b
+   isz octal
+   jmp octal i
+2: 0;0