1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-16 12:53:06 +00:00
Files
PDP-10.its/src/sysen1/scandl.4
2016-12-08 07:43:20 +01:00

346 lines
5.6 KiB
Groff
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.
TITLE TTY OUTPUT SPY
.MLLIT==1
A=1
B=2
C=3
D=4
N=5
OBP=6
CH=7
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
GO:
LOC 42
JSR TSINT
LOC GO
MOVEI P,PDL
.SUSET [.RSNAME,,SNAME]
.CALL [SETZ
SIXBIT /OPEN/
MOVSI .UAO
MOVEI TTYO
[SIXBIT /DSK/]
[SIXBIT /DIRT/]
[SIXBIT />/]
SETZ SNAME]
.VALUE
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:
GO1: .SUSET [.SMASK,,[%PIIOC+%PITYI]]
SETZM VPOS
SETZM JCL
MOVE A,[JCL,,JCL+1]
BLT A,JCL+20
.BREAK 12,[5,,JCL]
SKIPN JCL
JRST [ SKIPE DEBUG
.VALUE
.VALUE [ASCIZ \:USE JCLKILL \]]
.VALUE [ASCIZ /:GENJOB
:PROCED
/]
PUSHJ P,GETNUM
ANDI N,77
MOVSI A,N
IORM A,TOIP ;SET UP INDEX FIELD FOR INDIRECTION
IORM A,TOOP
IORM A,TOBEP
IORM A,TOBBP
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,%TXDIS
JRST TYPD ;DISPLAY OR CURSOR POS, DISPATCH
.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
TYPDMX==.-TYPDTB
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: MOVE C,[440700,,JCL] ;TRY OCTAL FIRST
SETZ N,
GETNLP: ILDB A,C
CAIN A,^M
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]
NAM1: ILDB A,C
CAIN A,^M
JRST NAM2
CAIN A,40
JRST NAM2
CAIL A,140
SUBI A,40
DPB A,C
AOJL D,NAM1
JRST DIR1
NAM2: MOVEI A,40
DPB A,C
AOJGE D,DIR1
IDPB A,C
AOJL D,.-1
DIR1: MOVE D,JCL
CAMN D,[ASCII /SYS /]
JRST [ SKIPL N,@SYSCN
POPJ P,
JRST .+1]
.OPEN DIRI,[0,,SIXBIT / TTY.FILE.(DIR)/]
.VALUE
MOVNI B,2
DIRLP1: .IOT DIRI,A
CAIE A,^J
JRST DIRLP1
AOJL B,DIRLP1
DIRLP2: MOVNI D,6 ;NO. CHARS IN UNAME
MOVE C,[440700,,JCL]
.IOT DIRI,A ;"T" AT START OF LINE
CAIN A,"D
JRST FLSLIN
CAIE A,"T
JRST [ SKIPE DEBUG
.VALUE
.VALUE [ASCIZ \:NOT LOGGED IN?KILL \]]
.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 FLSLIN ;NOT ON THIS LINE OF THE DIR
AOJL D,DIRLP3
MOVE N,TMN ;WE FOUND HIM
SUBI N,"0
LSH N,3
MOVE A,TMN+1
SUBI A,"0
ADDI N,(A)
.CLOSE DIRI,
POPJ P,
FLSLIN: .IOT DIRI,A
CAIE A,^J
JRST FLSLIN
JRST DIRLP2
7TYPE: HRLI A,440700
7TYLP: ILDB B,A
JUMPE B,CPOPJ
.IOT TTYO,B
JRST 7TYLP
CPOPJ: POPJ P,
;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
CAIN CH,^L
JRST VAL1
.IOT TTYO,[^M]
JRST BYEBYE
VAL1: .IOT TTYI,CH ; EAT UP ^L
.IOT TTYO,[^P]
.IOT TTYO,["C]
BYEBYE: .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
SNAME: 0
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: -1 ;-1 => INHIBIT :KILLS.
SYMS:
IRPS X,,[NCT TOBEP TOBBP TOIP TOOP SYSCN]
X: SQUOZE 0,X
TERMIN
NSYMS==.-SYMS
CONSTA ? VARIAB
LPDL==20
PDL: BLOCK 20
PATCH": BLOCK 100
END GO