1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-28 21:01:16 +00:00
Files
PDP-10.its/src/bawden/obs.21
Eric Swenson dfd0ac4689 Added OBS.
Resolves #292.
2016-12-19 09:27:04 +01:00

345 lines
5.2 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
; -*- Midas -*-
title OBS - Observe
a=:1
b=:2
c=:3
d=:4
e=:5
t=:6
tt=:7
x=:10
y=:11
z=:12
;=:13
ch=:14
bp=:15
i=:16
p=:17
;ch==:0,,-1
chttyi==:1
chttyo==:2
chdump==:3
chusri==:4
%fr==:0,,525252
%frsym==:000001 ; Non-digit seen in JCL
%fl==:1,,525252
call=:pushj p,
return=:popj p,
save==:push p,
rest==:pop p,
flose=:.lose %lsfil
slose=:.lose %lssys
pause=:.break 16,100000
tyi=:.iot chttyi,
tyo=:.iot chttyo,
quit=:call .
skipe debug
.value
.logout 1,
define bltdup org,len
move tt,[<org>,,<org>+1]
blt tt,<org>+<len>-1
termin
define syscall name,args
.call [setz ? .1stwd sixbit /name/ ? args(400000)]
termin
define conc foo,bar
foo!bar!termin
; JSP T,LOSE is like .LOSE %LSSYS(TT) or SLOSE (TT)
lose: syscall lose,[movei %lssys(tt) ? movei -2(t)]
slose
popj1: aos (p)
cpopj: return
format"$$pcode==:1
.insrt dsk:syseng;format >
outstr: syscall siot,[movei chttyo ? a ? b]
slose
return
define format &string&,args
call [
call $format
.zzz.==-1
irp arg,,[args]
save arg
.zzz.==.irpcnt
termin
hrroi a,[ascii string]
movei b,.length string
movni c,.zzz.+1
jrst format"format]
termin
$forma: save a
save b
save c
call @-3(p)
rest c
rest b
rest a
rest (p)
return
.vector pdl(lpdl==:100.)
.vector jcl(ljcl==:21.)
usrvar: sixbit /OPTION/ ? tlo %opint\%opopc
sixbit /MASK/ ? move [%pipdl]
sixbit /OPTION/ ? movem a
lusrvar==:.-usrvar
go: move p,[-lpdl,,pdl-1]
setzi 0, ; Clear flags
syscall sstatu,[repeat 6,[ movem a ? ] movem b]
slose
camn a,sysnam
came b,sysvrs
call newsys
.open chttyi,[.uai,,'tty ? setz ? setz]
slose
.open chttyo,[.uao\%tjdis,,'tty ? setz ? setz]
slose
move t,[-lusrvar,,usrvar]
syscall usrvar,[movei %jself ? t] ; A: %OP bits
slose
setzi i, ; I: TTY number
tlnn a,%opcmd
jrst gotnum
setzm jcl
bltdup jcl,ljcl-1
movsi t,(.byte 7 ? ^M ? ^M)
movem t,jcl+ljcl-1
.break 12,[..rjcl,,jcl]
move a,[440700,,jcl]
move b,[440600,,c] ; C: User name
setzi c,
jclwss: call jclch
jrst gotnum
jrst jclwss
jcloop: lsh i,3
addi i,-"0(t)
trzn t,100 ; 6 bits
trca t,40
tro t,40
tlne b,770000 ; 6 chars
idpb t,b
call jclch
jrst jclend
jrst jclmor
jrst jcloop
jclmor: call jclch
jrst jclend
jrst jclmor
format "~&Huh?"
quit
jclch: ildb t,a
caie t,^M ; .+1: End of command
cain t,^C
return
caie t,^_
cain t,^@
return
aos (p)
caie t,40 ; .+2: Whitespace
cain t,^I
return
aos (p) ; .+3: Otherwise
cail t,"0
caile t,"9
tro %frsym ; Set %FRSYM if non-digit seen
return
jclend: trnn %frsym
jrst gotnum
syscall open,[movsi 10\.bii ? movei chusri
[sixbit /USR/] ? move c ? [sixbit /HACTRN/]]
jrst [ format "~&~S not logged in.",c
quit ]
.uset chusri,[.rcnsl,,i]
.close chusri,
jumpl i,[ format "~&~S is detached?",c
quit ]
gotnum: cail i,0
caml i,nct
jrst [ format "~&There is no TTY ~O.",i
quit ]
move bp,@toip
camn bp,@tobep
move bp,@tobbp
ildb ch,bp
jrst gogo
next0: move bp,@tobbp
next: camn bp,@toip
.hang
camn bp,@tobep
jrst next0
ildb ch,bp
return
chprnt: tyo ch
chnext: call next
gogo: jrst @chtab(ch)
chtab: repeat 40, chsail
repeat 140, chprnt
repeat 200, chcode
chcode: format "~&?~O~&",ch
jrst chnext
chsail: format "~&#~O~&",ch
jrst chnext
define defch ch,val=[.]
.val.==<val>
.loc.==.
loc chtab+<ch>
.val.
loc .loc.
termin
defch 177, chsail
defch %tdmov
call next
move a,ch
call next
move b,ch
call next
move c,ch
call next
format "~&(~D, ~D) -> (~D, ~D)~&",[a,b,c,ch]
jrst chnext
defch %tdmv0
defch %tdmv1
call next
move a,ch
call next
format "~&(?, ?) -> (~D, ~D)~&",[a,ch]
jrst chnext
defch %tdilp
call next
format "~&Insert ~D line~P.~&",ch
jrst chnext
defch %tddlp
call next
format "~&Delete ~D line~P.~&",ch
jrst chnext
defch %tdicp
call next
format "~&Insert ~D character~P.~&",ch
jrst chnext
defch %tddcp
call next
format "~&Delete ~D character~P.~&",ch
jrst chnext
defch %tdrsu
call next
move a,ch
call next
format "~&Scroll ~D line~P ~D time~P upwards.~&",[a,ch]
jrst chnext
defch %tdrsd
call next
move a,ch
call next
format "~&Scroll ~D line~P ~D time~P downwards.~&",[a,ch]
jrst chnext
defch %tdqot
call next
format "~&Quoted: ~O~&",ch
jrst chnext
irps fun,,[EOF EOL DLF MTF MTN CRL NOP BS LF RCR ORS FS
CLR BEL INI BOW RST GRF]
defch %td!fun
format "~&! fun~&"
jrst chnext
termin
.scalar sysnam
.scalar sysvrs
newsys: move t,[ffpage-200,,ffpage]
movei tt,ffpage
syscall corblk,[movei %cbndr
movei %jself ? move t
movei %jsabs ? move tt]
slose
irps sym,kind,[
toip: tobbp: tobep:
nct=
]
move t,[squoze 0,sym]
.eval t,
.lose
ifse kind,:, hrli t,i
.scalar sym
movem t,sym
termin
movem a,sysnam
movem b,sysvrs
skipe debug
return
syscall open,[movsi .bio ? movei chdump ? [sixbit /DSK/]
[sixbit /_OBS_/] ? [sixbit /OUTPUT/] ? [sixbit /SYS/]]
flose
setzi t,
syscall pdump,[movei %jself ? movei chdump ? move t]
slose
move t,[-2,,[jrst go ? jrst go]]
.iot chdump,t
syscall renmwo,[movei chdump ? [sixbit /TS/] ? [sixbit /OBS/]]
flose
.close chdump,
return
tsint:
loc 42
-ltsint,,tsint
loc tsint
400000,,p
ltsint==:.-tsint
dismis: setz ? sixbit /DISMIS/ ? movsi 400000 ? setz p
cnstnts:
constants
variables
debug: -1
patch::
pat: block 100.
epatch: -1 ; Make memory exist, end of patch area
ffaddr:
ffpage==:<ffaddr+1777>_-12
end go