1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-04 15:53:01 +00:00

Added OS: realtime TTY spy.

This commit is contained in:
Eric Swenson
2016-12-07 22:15:47 -08:00
committed by Lars Brinkhoff
parent f3020b3106
commit a2988216e8
3 changed files with 448 additions and 0 deletions

443
src/sysen2/os.93 Normal file
View File

@@ -0,0 +1,443 @@
;-*-MIDAS-*-
TITLE TTY OUTPUT SPY
.MLLIT==1
A=1
B=2
C=3
D=4
N=5
OBP=6
CH=7 ;HACKED ONLY AT INTERRUPT LEVEL
TTNPTR=10
P=17
TTYO=10
TTYI=11
DIRI=12
DEFINE UTYI AC
CAMN OBP,@TOOP
.HANG
CAMN OBP,@TOBEP
JRST [ MOVE OBP,@TOBBP
JRST .-3]
ILDB AC,OBP
ANDI AC,377
TERMIN
DEFINE SYSCAL A,B
.CALL [SETZ ? SIXBIT |A| ? B ((SETZ)) ]
TERMIN
DEFINE TTYVAR WHICH,TTY,REST
.CALL [SETZ ? 'TTYVAR ? TTY ? [SIXBIT |WHICH|] ? REST ((SETZ)) ]
TERMIN
CALL=PUSHJ P,
RET=POPJ P,
GO:
LOC 42
JSR TSINT
LOC GO
MOVEI P,PDL
.OPEN TTYO,[21,,'TTY]
.LOSE %LSFIL
.OPEN TTYI,[4,,'TTY]
.LOSE %LSFIL
SYSCAL STYGET,[ %CLIMM,,TTYI ? %CLOUT,,STYFLG]
.LOSE %LSSYS
SYSCAL TTYGET,[%CLIMM,,TTYO ? %CLOUT,,A ? %CLOUT,,B ? %CLOUT,,C]
.LOSE %LSFIL
TLO C,%TSMOR ;PLEASE, NO MORE PROCESSING
SYSCAL TTYSET,[%CLIMM,,TTYO ? %CLIN,,A ? %CLIN,,B ? %CLIN,,C]
.LOSE %LSFIL
SKIPE RUNFLG
JRST SETDON
SETOM RUNFLG
MOVE A,[-NSYMS,,SYMS]
SYMLP: MOVE B,(A)
.EVAL B,
.VALUE
MOVEM B,(A)
AOBJN A,SYMLP
MOVE A,SYSCN
MOVEI B,1
PUSHJ P,MAKPAG
MOVE A,TOIP ;MAKE SURE WE HAVE THE PAGES THE BUFFER POINTERS ARE IN
MOVE B,NCT
PUSHJ P,MAKPAG
MOVE A,TOOP
PUSHJ P,MAKPAG
MOVE A,TOBEP
PUSHJ P,MAKPAG
MOVE A,TOBBP
PUSHJ P,MAKPAG
SETDON: SYSCAL CNSGET,[ %CLIMM,,TTYO ? %CLOUT,,VSZ
%CLOUT,,HSZ ? %CLOUT,,LTCTYP]
.LOSE %LSFIL
GO1: .SUSET [.SMASK,,[%PIIOC+%PITYI]]
SETZM VPOS
SETZM JCL
MOVE A,[JCL,,JCL+1]
BLT A,JCL+20
.BREAK 12,[..RJCL,,JCL]
SKIPN JCL
JRST [ SKIPE DEBUG
.VALUE
.VALUE [ASCIZ \:Use JCLKILL \]]
CALL GETNUM ;LEAVES <TTY> IN N AS 400000+TTY#
TTYVAR TCTYP,N,[%CLOUT,,A]
.LOSE %LSFIL
TTYVAR TTYOPT,N,[%CLOUT,,B]
.LOSE %LSFIL
MOVEM A,FTCTYP
CAIN A,%TNTV
.VALUE [ASCIZ |:Doesn't work on TV's.KILL |]
; FIND OUT IF IT IS A SOFTWARE IMLAC
CAIE A,%TNSFW ; SOFTWARE?
JRST GO2 ; NO
TLNE B,%TOIML ; IMLAC (OLD WAY)?
JRST TST2 ; YES
TTYVAR SMARTS,N,[%CLOUT,,A]
JRST GO2
TLNN A,%TQIM1 ; IMLAC (NEW WAY)?
JRST GO2 ; NO
TST2: SKIPN STYFLG
SETOM SIMLAC
GO2: ANDI N,77 ;CLEAR OUT 400000 FOR <TTY>
ADDM N,TOIP ;SET UP INDEX FIELDS FOR INDIRECTION
ADDM N,TOOP
ADDM N,TOBEP
ADDM N,TOBBP
MOVE ,N ;WHAT THE HELL DOES THIS LOSSAGE DO?
LSH ,6
ADDI ,330012
LDB A,[030300,,N]
LSH A,6
ANDI N,7
IORI N,'T00(A)
MOVSS N
.SUSET [.SSNAM,,N]
SETZ N,
MOVE A,@TOBBP
MOVE B,@TOBEP
SUB B,A
PUSHJ P,MAKPAG ;MAKE SURE WE HAVE THE PAGE(S) THE BUFFER ITSELF IS IN
.IOT TTYO,[^P] ;BOY, IF WE'RE NOT A DISPLAY TERMINAL,
.IOT TTYO,["C] ; WILL WE LOSE!
MOVE A,TOIP
MOVE B,FTCTYP ;TV'S HAVE NO INFO IN TOOP, SO MUST USE TOIP.
CAIN B,%TNTV
MOVEM A,TOOP
MOVE OBP,@TOOP ;HAVE TO START SOMEWHERE
CAMN OBP,@TOBEP
MOVE OBP,@TOBBP
IBP OBP
LPE:
LP: UTYI A
TRZE A,200
JRST TYPD ;DISPLAY OR CURSOR POS, DISPATCH
SKIPN SIMLAC
JRST LP2
CAIN A,^A ;^A IS MAGIC
JRST IML.A
CAIL A,40
JRST LP2 ;HANDLE NON-CONTROL CHARS NORMALLY
CAIN A,^G
JRST LP2 ;HANDLE ^G NORMALLY
ADDI A,176 ;RECONSTRUCT DISPLAY CODE
TRZ A,200
JRST TYPD ;HANDLE DISPLAY CODE
IML.A: UTYI A
CAIE A,^Y
JRST LP
UTYI A
JRST LP
LP2: .IOT TTYO,A
JRST LP
TYPD: CAIL A,TYPDMX
JRST LPE
JRST @TYPDTB(A)
DTB::
TYPDTB: TYMOV ;MOVE CURSOR
TYMOV1 ;DUMMY FOR ABOVE
TYEEOF ;CLEAR EOF
TYEEOL ;CLEAR EOL
TYDELF ;DELETE FWD
LPE ;TERMINET MOTOR ON
LPE ; " " OFF
TYECRL ;CRLF TO DATAPOINTS & IMLACS
LPE ;"NOP FOR SUPERDUPER IMAGE MODE"
TYEBS ;BS
TYELF ;LF
TYECRL ;CARRET
LPE ;OUTPUT RESET
LPE ;QUOTE
TYEFS ;FWD SPACE
TYMOV1 ;MOVE CURSOR NEW STYLE
TYECLR ;CLEAR SCREEN
TYBEL ; %TDBEL=221 ring bell
TYINIT ; %TDINI=222 reinitialize terminal
TYILP ; %TDILP=223 insert lines at cursor
TYDLP ; %TDDLP=224 delete lines at cursor
TYICP ; %TDICP=225 insert characters at cursor
TYDCP ; %TDDCP=226 delete characters at cursor
TYBOW ; %TDBOW=227 [start reverse video]
TYRST ; %TDRST=230 [reset display modes]
TYPDMX==.-TYPDTB
TYBEL: .IOT TTYO,[^G]
JRST LPE
TYILP:
TYDLP:
TYICP:
TYDCP:
UTYI
JRST LPE
TYINIT:
TYBOW:
TYRST: JRST LPE
TYMOV: UTYI C ;OLD VPOS
UTYI B ;OLD HPOS OR 201
UTYI A ;NEW VPOS
UTYI B ;NEW HPOS
SKIPE FTCTYP
JRST TYMOV0
SUB A,C
ADD A,VPOS
EXCH A,B
IDIV B,VSZ
MOVE B,C
EXCH A,B
TYMOV0: MOVEM A,VPOS
MOVEI A,10(A)
MOVEI B,10(B)
.IOT TTYO,[^P]
.IOT TTYO,["V]
.IOT TTYO,A
.IOT TTYO,[^P]
.IOT TTYO,["H]
.IOT TTYO,B
JRST LPE
TYMOV1: UTYI A ;NEW VPOS
UTYI B ;NEW HPOS
SKIPE FTCTYP
JRST TYMOV0
EXCH A,B
IDIV B,VSZ
MOVE B,C
EXCH A,B
JRST TYMOV0
TYEFS: MOVEI A,"F
JRST PTYO
TYECLR: MOVEI A,"C
JRST PTYO
TYEEOF: MOVEI A,"E
PTYO: .IOT TTYO,[^P]
.IOT TTYO,A
JRST LPE
TYDELF: MOVEI A,"F
JRST PTYO
TYEEOL: MOVEI A,"L
JRST PTYO
TYECRL: .IOT TTYO,[^M]
JRST LPE
TYEBS: .IOT TTYO,[^H]
JRST LPE
TYELF: .IOT TTYO,[^J]
AOS VPOS
JRST LPE
GETNUM: MOVEI TTNPTR,TTNBUF
MOVE C,[440700,,JCL] ;TRY OCTAL FIRST
SETZ N,
GETNLP: ILDB A,C
caie a,^C
CAIN A,^M
jrst [iori n,400000 ? popj p,]
CAIG A,"7
CAIGE A,"0
JRST NAM ;MUST BE A UNAME
SUBI A,"0
LSH N,3
IORI N,(A)
JRST GETNLP
NAM: MOVNI D,6 ;SET UP FOR 6 CHARS, INCL SPACES IF NECESS
MOVE C,[440700,,JCL] ;INPUT POINTER
MOVE N,C ;OUTPUT POINTER
NAM1: ILDB A,C
CAIN A,^M
JRST NAM2
CAIN A,40
JRST NAM1
CAIL A,140
SUBI A,40
IDPB A,N
AOJL D,NAM1
JRST DIR1 ;SKIP SPACE FILL IF WE GOT 6 CHS
NAM2: MOVEI A,40
IDPB A,N
CAME N,[350700,,JCL+1]
JRST .-2 ;FALL THRU
;FALL IN
DIR1: MOVE D,JCL
CAMN D,[ASCII /SYS /]
JRST [ SKIPL N,@SYSCN
JRST [IORI N,400000 ? RET]
JRST .+1]
.OPEN DIRI,[0,,SIXBIT / TTY.FILE.(DIR)/]
.VALUE
CALL FLS2LIN
DIRLP2: MOVNI D,6 ;NO. CHARS IN UNAME
MOVE C,[440700,,JCL]
.IOT DIRI,A ;"T" AT START OF LINE
CAIN A,"D
JRST [CALL FLSLIN ? JRST DIRLP2]
CAIE A,"T
JRST DIREND
.IOT DIRI,TMN
.IOT DIRI,TMN+1
.IOT DIRI,A ;SPACE
DIRLP3: .IOT DIRI,A ;1ST CHAR OF UNAME
ILDB B,C
CAIE B,(A)
JRST [CALL FLSLIN ? JRST DIRLP2] ; NOT ON THIS LINE OF THE DIR
AOJL D,DIRLP3
MOVE N,TMN ;WE FOUND HIM, IN ONE INCARNATION
SUBI N,"0
LSH N,3
MOVE A,TMN+1
SUBI A,"0
ADDI N,400000(A) ;MAKE INTO A <TTY>
MOVEM N,(TTNPTR)
CALL FLSLIN
AOJA TTNPTR,DIRLP2
FLS2LIN: CALL FLSLIN ;CLEVERLY FALL THRU
FLSLIN: .IOT DIRI,A
CAIE A,^J
JRST FLSLIN
; JRST DIRLP2
RET
DIREND: .CLOSE DIRI,
CAIE TTNPTR,TTNBUF
SOJA TTNPTR,DIREN1
SKIPE DEBUG
.VALUE
.VALUE [ASCIZ |:Not logged in? KILL |]
DIREN1: MOVE N,(TTNPTR)
CAIN TTNPTR,TTNBUF ;SKIP OF WE FOUND MORE THAN ONE OF HIM
RET
DIREN2: SKIPN A,(TTNPTR)
RET ;AT THE END OF THE LIST
; SYSCAL TTYVAR,[ MOVEI A ? [SIXBIT |TCTYP|] ? MOVEM B]
TTYVAR TCTYP,A,[%CLOUT,,B]
; SETZ B,
.VALUE ;DEBUGGING?
CAIE B,%TNSFW ;WE WANT TO USE HIS SOFTWARE TERMINAL,
AOJA TTNPTR,DIREN2
MOVEI N,(A) ; IF HE HAS ONE.
AOJA TTNPTR,DIREN2
;GET THE SAME PAGE THE SYS JOB HAS IN ITS PAGE WHOSE ADDRESS IS IN A, # WORDS IN B
MAKPAG: ANDI A,-1
PUSH P,A
ASH A,-10.
MOVEM A,CBLK1 ;GET FIRST PAGE
.CALL CBLK
.VALUE
POP P,A
ADDI A,-1(B) ;ADDRESS OF LAST WORD
ASH A,-10.
CAMN A,CBLK1
POPJ P,
MOVEM A,CBLK1
.CALL CBLK ;CROSSES PAGE BOUNDARY, GET SECOND PAGE
.VALUE
POPJ P,
TSINT: 0
0
EXCH A,TSINT
TSIN1: TRZE A,%PIIOC ;TYPICALLY ILLEGAL CHAR AFTER ^P
JRST [ AOS TSINT+1 ;SO FORGET IT
JRST INTRET]
TRZE A,%PITYI
JRST [ MOVEI CH,TTYI
.ITYIC CH,
JRST INTRET
CAIE CH,^Z
JRST VALRT
JRST INTRET]
.VALUE [ASCIZ \:UNKNOWN INTERRUPT?î\]
INTRET: JUMPN A,TSIN1
MOVE A,TSINT
.DISMIS TSINT+1
VALRT: CAIN CH,40
.IOT TTYI,CH ; EAT UP SPACE
CAIE CH,^L
JRST BYEBYE
VALL: .IOT TTYI,CH ; EAT UP ^L
.IOT TTYO,[^P]
.IOT TTYO,["C]
JRST INTRET
BYEBYE: .IOT TTYO,[^M]
.BREAK 16,160000
CBLK: SETZ
SIXBIT \CORBLK\
1000,,210000 ;READ ACCESS, FAIL IF CAN'T
[-1] ;PUT PAGE IN SELF
CBLK1
SETZI 400000 ;GET FROM SYS JOB
CBLK1: 0 ;GETS -#PAGES,,PAGE # TO START
JCL: BLOCK 20
TMN: 0 ? 0 ;HOLDS 2 DIGIT TTY NO. FOR DIRI
LTCTYP: 0 ;LOCAL TCTYP
FTCTYP: 0 ;FOREIGN TCTYP
VSZ: 0 ;LOCAL VERTICAL SCREEN SIZE
HSZ: 0 ; " HORIZONTAL " "
VPOS: 0 ;CURRENT (HOPEFULLY) LOCAL VERTICAL CURSOR POS
RUNFLG: 0 ;NONZERO IF SETUP DONE ALREADY
DEBUG: 0 ;-1 => INHIBIT :KILLS.
SIMLAC: 0 ;NONZERO => IMLAC RUNNING AS SOFTWARE TTY
STYFLG: 0 ;NONZERO => USER IS ON STY
SYMS:
IRPS X,,[NCT TOBEP TOBBP TOIP TOOP SYSCN]
X: SQUOZE 0,X
TERMIN
NSYMS==.-SYMS
TTNBUF: BLOCK 10 ;WILL LOSE IF THE LUSER HAS > 10 Tmn's
CONSTA ? VARIAB
LPDL==20
PDL: BLOCK 20
PATCH": BLOCK 100
END GO
;; Local Modes:
;; Mode:MIDAS
;; Comment Column:32
;; END: