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:
committed by
Lars Brinkhoff
parent
f3020b3106
commit
a2988216e8
443
src/sysen2/os.93
Normal file
443
src/sysen2/os.93
Normal 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:
|
||||
Reference in New Issue
Block a user