PDP7-Unix/cmd/cas.s
"** 04-cas.pdf page 1
" cas
" Usage: cas [ input [ output ] ]
" graphics display character assembler???
narg = i 017777
lac 017777
tad d5
dac name1
tad d4
dac name2
lac narg " get arg count
sad d4 " 4?
jmp 1f " yes: default both to tty
sad d8 " 8?
jmp 2f " no: default input to tty
jmp 3f " yes: use files from command line
1:
law ttyout
dac name1
2:
law ttyin
dac name2
3:
sys open; name2: 0; 0
sma
jmp 1f
lac name2
dac 2f
lac d1
sys write; 2: 0; 4
lac d1
sys write; mes; 2
sys exit
1:
sys open; name1: 0; 1
sma
jmp 1f
lac name1
dac 2f
lac o17
sys creat; 2: 0
sma
jmp 1f
lac name1
dac 2f
lac d1
sys write; 2: 0; 4
lac d1
sys write; mes; 2
sys exit
mes:
040077;012
1:
dzm nchar
dzm x
dzm y
dzm parflg
dzm nins
dzm nwds
lac bufp
dac 10
advanc:
"** 04-cas.pdf page 2
lac nchar
dzm nchar
sza
jmp adv1
lac d2
sys read; char; 1
sna
jmp done
lac char
and o777
dac nchar
lac char
lrss 9
adv1:
sna
jmp advanc
dac char
lac labflg
sna
jmp 2f
lac char
sad o12
skp
jmp 1f
dzm labflg
dac i 11
jmp advanc
1:
dac i 11
jmp advanc
2:
lac parflg
sza
jmp atoz
lac char
sad o12
jmp advanc
sad o72 " ':'?
skp " yes
jmp 1f " no
-4
dac labflg
dac mod3
jms wbuf "???
lac lbufp
dac 11
lac o170072 " "x:"
dac i 10
lac o12 " \n
dac i 10
lac o60 " 0
dac i 10
isz nwds
isz nwds
isz nwds
jmp advanc
1:
sad o170
skp
jmp 1f
"** 04-cas.pdf page 3
dzm vis
jmp advanc
1:
sad o166 " 'v'?
skp
jmp 1f
lac visbit
dac vis
jmp advanc
1:
sad o162 " 'r'?
skp
jmp letr
isz mod3
skp
jmp 2f
lac o60060
1:
dac i 10
isz nwds
isz mod3
jmp 1b
2:
lac o12
dac i 10
isz nwds
lac lbufp
dac 11
1: "???
lac i 11
sad o12
jmp 1f
dac i 10
isz nwds
jmp 1b
1:
lac o75170 " =x
dac i 10
isz nwds
lac ob1
dac i 10
isz nwds
lac sp
dac i 10
isz nwds
lac nins
dzm nins
tad o100
lmq
llss 10
cla
llss 3
alss 6
llss 3
tad o60060
dac i 10
cla
llss 3
alss 6
llss 3
tad o60060
"** 04-cas.pdf page 4
dac i 10
cla
llss 3
alss 6
llss 3
tad o60060
dac i 10
lac nwds
tad d4
dac nwds
lac o12012
dac i 10
dzm x
dzm y
jmp advanc
letr:
tad om141 "???
spa
jmp error
tad dm16
sma "???
jmp error
cma "???
tad dm3
dac ny
-1
dac parflg
jmp advanc
atoz:
lac char
tad om141
spa
jmp error
tad dm14
sma
jmp error
tad d14
dac nx
loop:
-1
tad x
cma
tad nx
dac delx
-1
tad y
cma
tad ny
dac dely
" generate direction
lac delx
sna
jmp c1
spa
jmp c2
lac dely ;"dx ,gr, 0
sna
jmp c3
"** 04-cas.pdf page 5
spa
jmp c4
lac d1
jmp b
c3:
lac d2
jmp a
c4:
lac d3
jmp b
c1:
lac dely
sna
jmp out
spa
jmp c5
cla
jmp a
c5:
lac d4
jmp a
c2:
lac dely
sna
jmp c6
spa
jmp c7
lac d7
jmp b
c6:
lac d6
jmp a
c7:
lac d5
jmp b
"
"
a:
dac direc
lac delx
sma
jmp 1f
cma
tad d1
dac delx
1:
lac dely
sma
jmp 1f
cma
tad d1
1:
tad delx
tad dm4
sma
cla
tad d3
dac dist
tad incxp
dac tmp
"** 04-cas.pdf page 6
lac i tmp
dac incx
lac dist
tad incyp
dac tmp
lac i tmp
dac incy
jmp com
"
b:
dzm dist
dac direc
lac incxt
dac incx
lac incyt
dac incy
"
com:
isz nins
lac dist
alss 4
xor vis
xor direc
isz mod3
skp
jmp 1f
2:
lmq
llss 12
cla
llss 3
alss 6
llss 3
tad o60060
dac i 10
isz nwds
jmp 3f
1:
dac tmp
lac o12060
dac i 10
isz nwds
-3
dac mod3
lac tmp
jmp 2b
3:
lac direc
tad incx
dac tmp
lac i tmp
tad x
dac x
lac direc
tad incy
dac tmp
lac i tmp
tad y
dac y
jmp loop
"** 04-cas.pdf page 7
out:
lac nx
dac x
lac ny
dac y
dzm parflg
jmp advanc
done:
lac d2
sys close
jms wbuf
lac d3
sys close
sys exit
error:
lac d1
sys write; char; 1
lac d1
sys write; mes; 2
dzm parflg
dzm labflg
jmp advanc
wbuf: 0
lac nwds
dac 1f
lac d3
sys write; buf; 1: 0; " PLB: label was 1f:
dzm nwds
lac bufp
dac 10
jmp i wbuf
d1: 1
d2: 2
d3: 3
d4: 4
d5: 5
d6: 6
d7: 7
d8: 8
o12: 012
o75170: 075170
ob1: 055142
sp: 053060
o60: 060
o60060: 060060
o73: 073
"d6: 6 "seems like a dupe
d14: 14
dm14: -14
dm16: -16
om141: -0141 "???
dm3: -3
dm4: -4
o162: 0162
o166: 0166
"** 04-cas.pdf page 8
o17: 017
o777: 0777
o72: 072
o170: 0170
o10000: 010000
o20000: 020000
o200000: 0200000
o41: 041
ttyin:
0164164;0171151;0156040;040040
ttyout:
0164164;0171157;0165164;040040
char: .=.+1
parflg: .=.+1
labflg: .=.+1
obuf: .=.+8
x: .=.+1
y: .=.+1
nx: .=.+1
ny: .=.+1
vis: .=.+1
nchar: .=.+1
"
incxp:incxt
incyp:incyt
incxt: x1;x2;x3;x4
incyt: y1;y2;y3;y4
"
x1: 0;1;1;1;0;-1;-1;-1
x2: 0;2;2;2;0;-2;-2;-2
x3: 0;3;3;3;0;-3;-3;-3
x4: 0;4;4;4;0;-4;-4;-4
y1: 1;1;0;-1;-1;-1;0;1
y2: 2;2;0;-2;-2;-2;0;2
y3: 3;3;0;-3;-3;-3;0;3
y4: 4;4;0;-4;-4;-4;0;4
delx: .=.+1
dely: .=.+1
incx: .=.+1
incy: .=.+1
direc: .=.+1
dist: .=.+1
visbit: 010
mod3: .=.+1
tmp: .=.+1
buf: .=.+500
bufp: buf-1
lbuf: .=.+10
lbufp: lbuf-1
nwds: .=.+1
o170072: 0170072
nins: .=.+1
o100: 0100
o12012: 012012
o12060: 012060