mirror of
https://github.com/PDP-10/its.git
synced 2026-04-26 20:27:13 +00:00
331 lines
6.2 KiB
Plaintext
331 lines
6.2 KiB
Plaintext
;;; MONDAY JAN 02,1978 07:38:17
|
||
.FASL
|
||
|
||
IF1,.INSRT .FASL DEFS
|
||
|
||
IFNDEF LA34,LA34==60
|
||
|
||
SUBTTL <TTY> specification
|
||
;;; A <TTY> spec may be a file object (in which case the channel number
|
||
;;; is passed to TTYVAR), or a small fixnum which represents that tty
|
||
;;; number.
|
||
|
||
TTYDC0: UNLOCKI
|
||
CAME A,.SPECIAL TYO
|
||
CAMN A,.SPECIAL TYI
|
||
.VALUE
|
||
WTA [BAD TTY SPECIFICATION!]
|
||
TTYDEC: ;; Takes <TTY> in A, returns spec in R.
|
||
;; DOES A LOCKI!
|
||
CAIN A,.ATOM T
|
||
HRRZ A,.SPECIAL TYO
|
||
LOCKI
|
||
MOVEI R,(A)
|
||
LSH R,-9.
|
||
HRRZ R,ST(R)
|
||
CAIN R,.ATOM FIXNUM
|
||
JRST [MOVE R,(A)
|
||
SKIPL R
|
||
CAILE R,259.
|
||
JRST TTYDC0
|
||
IORI R,400000
|
||
POPJ P,]
|
||
CAIE R,.ATOM ARRAY
|
||
JRST TTYDC0
|
||
MOVE R,ASAR(A)
|
||
TLNN R,AS.FIL
|
||
JRST TTYDC0
|
||
MOVE R,TTSAR(A)
|
||
TLNE R,TTS.CL
|
||
JRST TTYDC0
|
||
MOVE R,F.CHAN(R)
|
||
SKIPL R
|
||
CAILE R,20
|
||
.VALUE
|
||
POPJ P,
|
||
|
||
SUBTTL <TTYVAR> specification
|
||
;;; A <TTYVAR> may be a fixnum or a symbol which will be converted to
|
||
;;; sixbit. A check is made so that the sixbit will not be taken as
|
||
;;; an aobjn pointer.
|
||
|
||
VARDC0: WTA [UNRECOGNIZABLE TTYVAR SPECIFICATION!]
|
||
VARDEC: ;; May clobber everything since it may call SIXMAK.
|
||
;; Returns spec in TT.
|
||
MOVEI B,(A)
|
||
LSH B,-9.
|
||
HRRZ B,ST(B)
|
||
CAIN B,.ATOM FIXNUM
|
||
JRST [MOVE TT,(A) ? JRST VARDC1]
|
||
CAIE B,.ATOM SYMBOL
|
||
JRST VARDC0
|
||
PUSH P,A
|
||
PUSHJ P,SIXMAK
|
||
POP P,A
|
||
VARDC1: TLC TT,777000
|
||
TLCN TT,777000
|
||
JRST VARDC0
|
||
POPJ P,
|
||
|
||
TTYVAR: SETZ
|
||
SIXBIT \TTYVAR\
|
||
MOVE R
|
||
MOVE -1(FXP)
|
||
MOVEM TT
|
||
SETZB F
|
||
|
||
.ENTRY READ-TTY-VARIABLE SUBR 003
|
||
;; <TTY>, <TTYVAR>. NCALLable.
|
||
PUSH P,[FIX1]
|
||
RDTTV0: PUSH P,A
|
||
MOVEI A,(B)
|
||
PUSHJ P,VARDEC
|
||
PUSH FXP,TT
|
||
EXCH A,(P)
|
||
PUSHJ P,TTYDEC
|
||
.CALL TTYVAR
|
||
JRST RDTTV1
|
||
PUSHJ P,INTREL
|
||
SUB FXP,[1,,1]
|
||
SUB P,[1,,1]
|
||
POPJ P,
|
||
|
||
RDTTV1: CAIE F,11 ;; "illegal file name"
|
||
JRST RDTTV2
|
||
PUSHJ P,INTREL
|
||
EXCH A,(P)
|
||
WTA [ILLEGAL TTYVAR SPECIFICATION!]
|
||
SUB FXP,[1,,1]
|
||
MOVEI B,(A)
|
||
POP P,A
|
||
JRST RDTTV0
|
||
|
||
RDTTV2: CAIA
|
||
.CALL TTYVAR
|
||
IOJRST 1,.+1
|
||
EXCH A,(P)
|
||
JSP T,PDLNMK
|
||
CALL 1,.FUNCTION NCONS
|
||
MOVEI B,(A)
|
||
POP P,A
|
||
JSP T,PDLNMK
|
||
CALL 2,.FUNCTION CONS
|
||
MOVEI B,.ATOM READ-TTY-VARIABLE
|
||
CALL 2,.FUNCTION XCONS
|
||
%IOL (C)
|
||
JSP T,FXNV1
|
||
SUB FXP,[1,,1]
|
||
POPJ P,
|
||
|
||
.ENTRY READ-TTY-VARIABLE? SUBR 004
|
||
;; <TTY>, <TTYVAR>, Function. NIL on success; otherwise, if
|
||
;; function null, returns 0; else calls function with
|
||
;; args of the <TTY>, <TTYVAR>, and error code.
|
||
PUSH P,[FIX1]
|
||
PUSH P,C
|
||
PUSH P,A
|
||
MOVEI B,(A)
|
||
PUSHJ P,VARDEC
|
||
PUSH FXP,TT
|
||
EXCH A,(P)
|
||
PUSHJ P,TTYDEC
|
||
.CALL TTYVAR
|
||
JRST RDTTV4
|
||
PUSHJ P,INTREL
|
||
RDTTV3: SUB FXP,[1,,1]
|
||
SUB P,[1,,1]
|
||
POPJ P,
|
||
|
||
RDTTV4: PUSHJ P,INTREL
|
||
POP P,AR2A
|
||
JUMPE AR2A,[SETZ TT, ? JRST RDTTV2]
|
||
POP P,B
|
||
MOVEM F,(FXP)
|
||
MOVEI C,(FXP)
|
||
CALLF 3,(AR2A)
|
||
JSP T,FXNV1
|
||
SUB FXP,[1,,1]
|
||
POPJ P,
|
||
|
||
MDTTV0: ;; Modify a tty variable.
|
||
;; Instruction on fxp, <tty> in a, <ttyvar> in b, arg in c.
|
||
;; Skips on success; leaves <tty> in a, <ttyvar> in b, arg in
|
||
;; tt, error code (if any) in F. Leaves locki word on fxp.
|
||
JSP T,FXNV3
|
||
PUSH FXP,[0]
|
||
PUSH FXP,R
|
||
PUSH P,A
|
||
MOVEI A,(B)
|
||
PUSHJ P,VARDEC
|
||
EXCH A,(P)
|
||
PUSHJ P,TTYDEC
|
||
POP FXP,-2(FXP)
|
||
HLLZ T,-2(FXP)
|
||
HRRI T,(FXP)
|
||
POP P,B
|
||
AOS (P)
|
||
;; <TTY> in a, <TTYVAR> in b, <#tty> in r, <#ttyvar> in tt,
|
||
;; locki word at -1(fxp), arg at (fxp), opcode at -2(fxp),
|
||
;; full instruction in T.
|
||
.CALL [SETZ ? SIXBIT \TTYVAR\
|
||
MOVE R ? MOVE TT ? MOVEI 0 ? MOVE T ? SETZB F]
|
||
SOS (P)
|
||
POP FXP,TT
|
||
POPJ P,
|
||
|
||
MDTTV1: ;; Same as MDTTV0, but gives WTA on illegal ttyvar spec.
|
||
PUSHJ P,MDTTV0
|
||
CAIA
|
||
JRST [AOS (P) ? POPJ P,]
|
||
CAIE F,11
|
||
POPJ P,
|
||
PUSHJ P,INTREL
|
||
PUSH P,A
|
||
MOVEI A,(B)
|
||
WTA [ILLEGAL TTYVAR SPECIFICATION!]
|
||
MOVEI B,(A)
|
||
JSP T,FXCONS
|
||
MOVEI C,(A)
|
||
POP P,A
|
||
JRST MDTTV1
|
||
|
||
MDTTV2: ;; Function entry; wants instruction on fxp, function name on p,
|
||
;; <tty> in a, <ttyvar> in b, arg in c. Gives WTA for bad
|
||
;; ttyvar, else io-lossage error.
|
||
PUSHJ P,MDTTV1
|
||
JRST MDTTV3
|
||
PUSHJ P,INTREL
|
||
SUB P,[1,,1]
|
||
SUB FXP,[1,,1]
|
||
MOVEI A,.ATOM T
|
||
POPJ P,
|
||
|
||
MDTTV3: CAIA
|
||
.CALL TTYVAR
|
||
IOJRST 1,.+1
|
||
PUSHJ P,INTREL
|
||
PUSH P,A
|
||
PUSH P,B
|
||
JSP T,FXCONS
|
||
CALL 1,.FUNCTION NCONS
|
||
MOVEI B,(A)
|
||
POP P,A
|
||
JSP T,PDLNMK
|
||
CALL 2,.FUNCTION CONS
|
||
MOVEI B,(A)
|
||
POP P,A
|
||
JSP T,PDLNMK
|
||
CALL 2,.FUNCTION CONS
|
||
POP P,B
|
||
CALL 2,.FUNCTION XCONS
|
||
SUB FXP,[1,,1]
|
||
%IOL (C)
|
||
JSP T,FXNV1
|
||
POPJ P,
|
||
|
||
MDTTV4: ;; 'Nother function entry. Expects opcode on fxp, <tty> in a,
|
||
;; <ttyvar> in b, arg in c, and error-handling function in ar1.
|
||
;; Returns NIL on success. If error-handling function in NIL,
|
||
;; returns error code, else result of calling function with args
|
||
;; of <TTY>, <TTYVAR>, arg, and error code.
|
||
PUSH P,AR1
|
||
PUSHJ P,MDTTV0
|
||
JRST MDTTV5
|
||
SETZ A,
|
||
PUSHJ P,INTREL
|
||
SUB FXP,[1,,1]
|
||
SUB P,[1,,1]
|
||
POPJ P,
|
||
|
||
MDTTV5: PUSHJ P,INTREL
|
||
POP P,AR2A
|
||
JUMPE AR2A,[MOVE TT,F ? SUB FXP,[1,,1] ? JRST FIX1]
|
||
MOVEM TT,(FXP)
|
||
MOVEI C,(FXP)
|
||
PUSH FXP,F
|
||
MOVEI AR1,(FXP)
|
||
CALLF 4,(AR2A)
|
||
SUB FXP,[2,,2]
|
||
POPJ P,
|
||
|
||
.ENTRY WRITE-TTY-VARIABLE SUBR 004
|
||
;; <TTY>, <TTYVAR>, new value
|
||
PUSH FXP,[MOVE]
|
||
PUSH P,[.ATOM WRITE-TTY-VARIABLE ]
|
||
JRST MDTTV2
|
||
|
||
.ENTRY OR-INTO-TTY-VARIABLE SUBR 004
|
||
PUSH FXP,[IOR]
|
||
PUSH P,[.ATOM OR-INTO-TTY-VARIABLE ]
|
||
JRST MDTTV2
|
||
|
||
.ENTRY CLEAR-TTY-VARIABLE-BITS SUBR 004
|
||
PUSH FXP,[TDZ]
|
||
PUSH P,[.ATOM CLEAR-TTY-VARIABLE-BITS ]
|
||
JRST MDTTV2
|
||
|
||
.ENTRY *INCREMENT-TTY-VARIABLE SUBR 004
|
||
PUSH FXP,[ADD]
|
||
PUSH P,[.ATOM *INCREMENT-TTY-VARIABLE ]
|
||
JRST MDTTV2
|
||
|
||
.ENTRY INCREMENT-TTY-VARIABLE LSUBR 003004
|
||
JSP TT,LWNACK
|
||
LA23,,.ATOM INCREMENT-TTY-VARIABLE
|
||
CAMN T,[-2]
|
||
SKIPA C,[.ATOM #1 ]
|
||
POP P,C
|
||
POP P,B
|
||
MOVEI A,.ATOM INCREMENT-TTY-VARIABLE
|
||
EXCH A,(P)
|
||
PUSH FXP,[ADD]
|
||
JRST MDTTV2
|
||
|
||
.ENTRY DECREMENT-TTY-VARIABLE LSUBR 003004
|
||
JSP TT,LWNACK
|
||
LA23,,.ATOM DECREMENT-TTY-VARIABLE
|
||
CAMN T,[-2]
|
||
SKIPA C,[.ATOM #1 ]
|
||
POP P,C
|
||
POP P,B
|
||
MOVEI A,.ATOM DECREMENT-TTY-VARIABLE
|
||
PUSH FXP,[SUB]
|
||
JRST MDTTV2
|
||
|
||
.ENTRY WRITE-TTY-VARIABLE? SUBR 005
|
||
PUSH FXP,[MOVE]
|
||
JRST MDTTV4
|
||
|
||
.ENTRY OR-INTO-TTY-VARIABLE? SUBR 005
|
||
PUSH FXP,[IOR]
|
||
JRST MDTTV4
|
||
|
||
.ENTRY CLEAR-TTY-VARIABLE-BITS? SUBR 005
|
||
PUSH FXP,[TDZ]
|
||
JRST MDTTV4
|
||
|
||
MUMBLE: CAMN T,[-3]
|
||
JRST [PUSH P,(P) ? MOVEI A,.ATOM #1 ? MOVEM A,-1(P) ? JRST .+1]
|
||
POP P,AR1
|
||
POP P,C
|
||
POP P,B
|
||
POP P,A
|
||
POPJ FXP,
|
||
|
||
.ENTRY INCREMENT-TTY-VARIABLE? LSUBR 004005
|
||
JSP TT,LWNACK
|
||
LA34,,.ATOM INCREMENT-TTY-VARIABLE?
|
||
PUSHJ FXP,MUMBLE
|
||
PUSH FXP,[ADD]
|
||
JRST MDTTV4
|
||
|
||
.ENTRY DECREMENT-TTY-VARIABLE? LSUBR 004005
|
||
JSP TT,LWNACK
|
||
LA34,,.ATOM DECREMENT-TTY-VARIABLE?
|
||
PUSHJ FXP,MUMBLE
|
||
PUSH FXP,[SUB]
|
||
JRST MDTTV4
|
||
|
||
FASEND
|
||
|