1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-22 02:26:05 +00:00
PDP-10.its/src/syseng/lspeed.20
2018-10-10 17:54:39 +02:00

438 lines
7.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.

TITLE LSPEED - SET LINE PARAMETERS
A=1
B=2
C=3
D=4
E=5
T=6
TT=7
I=10
P=17
TYIC=14
TYOC=15
DKIC=16
TMNCH=13
LPDL==40
PDL: -LPDL,,.
BLOCK LPDL
;SYMBOLS TO BE .EVAL'ED
SYMTAB::
IRPS SYM,,[NFDLTY:NDLTYS:DL10PL:DL10PR:DL10PS:
NFETY:NETYS:DTELSP:DTELPR:]
SYM!: 0 ? SQUOZE 0,SYM
TERMIN
LSYMTB==.-SYMTAB
;DH-11 LINE PARAMETER REGISTER
%DHCLN==3 ;1.1-1.2 CHAR LENGTH 0=5 1=6 2=7 3=8
%DHXSB==4 ;1.3 1 => EXTRA STOP BIT
%DHPAR==20 ;1.5 1 => EXTRA PARITY BIT
%DHEVN==40 ;1.6 0 => ODD PARITY, 1 => EVEN
%DHRCV==1700 ;1.7-2.1 RECEIVE SPEED
%DHXMT==36000 ;2.2-2.5 TRANSMIT SPEED
%DHHDX==40000 ;2.6 HALF DUPLEX
%DHECO==100000 ;2.7 ECHOPLEX
;SPEED TABLE. DECIMAL BAUDS INDEXED BY HARDWARE CODE USED BY THE DH-11.
SPDTAB: 0 ? 50. ? 75. ? 110. ? 133. ? 150. ? 200.
300. ? 600. ? 1200. ? 1800. ? 2400.
4800. ? 9600. ? 1 ? 2 ;EXT A ; EXT B
LSPDTB==.-SPDTAB
;BUT MINIMUM OF 10. AND MAXIMUM OF 260. INDEXED BY HARDWARE CODE.
BSZTAB: 10. ? 10. ? 10. ? 10. ? 10. ? 10. ? 10.
15. ? 30. ? 60. ? 90. ? 120.
240. ? 260. ? 260. ? 260.
; CHARACTER LENGTH TABLE. INDEXED BY DH-11'S CHARACTER LENGTH CODE.
CLNTAB: 5 ? 6 ? 7 ? 8
LCLNTB==.-CLNTAB
TTYTIP: SETZ
SIXBIT/OPEN/
[.UAI,,DKIC]
[SIXBIT/DSK/]
[SIXBIT/TTYTYP/]
[SIXBIT/>/]
SETZ [SIXBIT/SYSENG/]
MNAME: 0 ;2-LETTER MACHINE NAME
GMNAME: SETZ
'SSTATU
REPEAT 5,MOVEM NOWHER'
SETZM MNAME
JCLF: 0 ;-1 JCL MODE ;+1 END OF JCL
JCLF2: 0 ;-1 IF NO TYPEIN/TYPEOUT
FJ: 5,,JCLBUF
JCLP: 440700,,JCLBUF
JCLBUF: BLOCK 20
;TYPEIN INTO C
CTYI: SKIPE JCLF
JRST CTYI1
.IOT TYIC,C
POPJ P,
CTYI1: SKIPL JCLF
JRST CTYI3
ILDB C,JCLP
JUMPE C,CTYI2
CAIE C,^C
CAIN C,^M
JRST CTYI2
POPJ P,
CTYI2: MOVNS JCLF
CTYI3: MOVEI C,40 ;AT END OF JCL, INFINITE SPACES
POPJ P,
;DECIMAL PRINT
;ARGUMENT IN A. CLOBBERS T,TT.
DPT: MOVE T,A
DPT0: IDIV T,RDX
HRLM TT,(P)
SKIPE T
PUSHJ P,DPT0
HLRZ TT,(P)
ADDI TT,"0
.IOT TYOC,TT
POPJ P,
;READ NUMBER. CALL WITH ASCIZ PROMPT IN C,
;DEFAULT IN A. RADIX IN RDX.
;RETURNS NUMBER IN A
RNUM: PUSH P,C
PUSH P,A
RNUM0: PUSHJ P,CRLF
MOVE C,-1(P)
SKIPN JCLF
PUSHJ P,7TYPE
MOVE A,(P)
SKIPE JCLF
JRST RNUM2B
JUMPL A,RNUM2A ;- NO DEFAULT
.IOT TYOC,[40]
.IOT TYOC,["(]
PUSHJ P,DPT
.IOT TYOC,[")]
RNUM2A: .IOT TYOC,[40]
RNUM2B: SETZB A,B
RNUM3: PUSHJ P,CTYI
CAIN C,"- ;ALLOW NEGATIVE NUMBER FOR LINE #
SOJA A,RNUM5 ;-LINE # MEANS LINE LOGGED IN ON
CAIG C,40
JRST RNUM4
CAIL C,"0
CAILE C,"9
JRST RNUM0
IMUL A,RDX
ADDI A,-"0(C)
AOJA B,RNUM3
RNUM4: SKIPN B
MOVE A,(P) ;NOTHING TYPED TAKE DEFAULT
RNUM5: SUB P,[2,,2]
CRLF: SKIPN JCLF
.IOT TYOC,[15]
POPJ P,
; TYPE ASCIZ STRING IN C
7TYPE: HRLI C,440700
7TYPE1: ILDB T,C
JUMPE T,7TYPE2
.IOT TYOC,T
JRST 7TYPE1
7TYPE2: POPJ P,
LSPEED: MOVE P,PDL
SETZM JCLF
SETZM JCLF2
.BREAK 12,FJ
SKIPE JCLBUF
JRST [ SETOM JCLF
LDB A,[350700,,JCLBUF] ; GET FIRST CHAR OF JCL
CAIE A,33 ; ESC?
JRST .+1
SETOM JCLF2 ; FIRST CHAR IS ESC, SET JCLF2
IBP JCLP ; SKIP ESC CHAR
JRST LS1 ; AND DON'T OPEN TTY
]
.OPEN TYIC,[.UAI,,'TTY]
.VALUE
.OPEN TYOC,[.UAO,,'TTY]
.VALUE
LS1: .CALL GMNAME
.VALUE
MOVSI I,-LSYMTB
EVALUP: MOVE A,SYMTAB+1(I)
.EVAL A,
.VALUE [ASCIZ /:DL10 OR DTE20 TTY NOT FOUND.
:KILLî/]
MOVEM A,SYMTAB(I)
AOBJN I,.+1
AOBJN I,EVALUP
MOVEI A,8
MOVEM A,RDX'
MOVNI A,1
MOVEI C,[ASCIZ "Set speed of line #"]
PUSHJ P,RNUM
JUMPGE A,HAVTTY ;HAVE A TTY IF NON-NEGATIVE
.SUSET [.RCNSL,,A] ;GET LINE JOB IS ON
HRRZS A ;SELECT TTY NO.--BETTER BE ON A TTY
HAVTTY: MOVEM A,TTYNUM'
SETOM DL10P'
SUB A,NFDLTY
JUMPL A,NOTDL
CAMGE A,NDLTYS
JRST LOOK0
NOTDL: SETZM DL10P
SETOM DTE20P'
ADD A,NFDLTY
SUB A,NFETY
JUMPL A,NOTDTE
CAMGE A,NETYS
JRST LOOK0
NOTDTE: MOVEI C,[ASCIZ "TTY does not have settable speed"]
ERR: PUSHJ P,7TYPE
.BREAK 16,040000
;LOOK THIS LINE UP IN TTYTYP FILE
LOOK0: SKIPE JCLF2 ;NO TYPEOUT?
JRST RPAR1 ;SKIP CHECK
.CALL TTYTIP
.VALUE
LOOK1: .IOT DKIC,A
JUMPL A,NOTFND ;EOF
REPEAT 3,[ ;FIND 3 SEMICOLONS
CAIE A,";
JRST LOOK1
.IOT DKIC,A
JUMPL A,NOTFND
]
CAIE A,40 ;A SPACE
JRST LOOK1
.IOT DKIC,A
.IOT DKIC,B ;AND A MACHINE NAME (2 LETTERS)
SUBI A,40
SUBI B,40
LDB C,[360600,,MNAME]
CAME A,C
JRST LOOK1
LDB C,[300600,,MNAME]
CAME B,C
JRST LOOK1
;FOUND THIS MACHINE'S STUFF; SEARCH FOR ;TNM
LOOK2: .IOT DKIC,A
JUMPL A,NOTFND
CAIE A,";
JRST LOOK2
.IOT DKIC,A
JUMPL A,NOTFND
CAIE A,"T
JRST LOOK2
.IOT DKIC,A
.IOT DKIC,B
LDB C,[030300,,TTYNUM]
ADDI C,"0
CAME A,C
JRST LOOK2
LDB C,[000300,,TTYNUM]
ADDI C,"0
CAME B,C
JRST LOOK2
; FOUND IT
.IOT TYOC,["T]
.IOT TYOC,A
.IOT TYOC,B
LOOK3: .IOT DKIC,A
JUMPL A,LOOK4
CAIN A,15
JRST LOOK4
.IOT TYOC,A
JRST LOOK3
LOOK4: MOVEI C,[ASCIZ " - OK?"]
PUSHJ P,7TYPE
.IOT TYIC,A
CAIE A,"Y ;UC
CAIN A,"y ;LC
JRST RPARAM
.BREAK 16,160000 ;don't take error return, since user said specifically to flush
NOTFND: MOVEI C,[ASCIZ "Line not found in TTYTYP file"]
PUSHJ P,7TYPE
JRST LOOK4
;HAVE GOT THE LINE, READ PARAMETERS
RPARAM: .IOT TYOC,[15]
RPAR1: MOVEI A,10.
MOVEM A,RDX
MOVEI E,0 ;BUILD UP DH11 LINE PARAMETER WORD IN E
MOVNI A,1
MOVEI C,[ASCIZ "Receive speed"]
PUSHJ P,RNUM
MOVSI I,-LSPDTB ;GET SPEED CODES
GETRCV: CAMN A,SPDTAB(I)
JRST GOTRCV
AOBJN I,GETRCV
MOVEI C,[ASCIZ "Receive speed impossible"]
JRST ERR
GOTRCV: DPB I,[.BP %DHRCV,E]
HRRZM I,RCVCOD'
MOVEM A,RCVSPD'
MOVEI C,[ASCIZ "Transmit speed"]
PUSHJ P,RNUM
MOVSI I,-LSPDTB
GETXMT: CAMN A,SPDTAB(I)
JRST GOTXMT
AOBJN I,GETXMT
MOVEI C,[ASCIZ "Transmit speed impossible"]
JRST ERR
GOTXMT: DPB I,[.BP %DHXMT,E]
HRRZM I,XMTCOD'
MOVEM A,XMTSPD'
CAIE A,110.
TDZA A,A
MOVEI A,1
MOVEI C,[ASCIZ "Extra stop-bit"]
PUSHJ P,RNUM
DPB A,[.BP %DHXSB,E]
MOVEI A,0
MOVEI C,[ASCIZ "Parity"]
PUSHJ P,RNUM
DPB A,[.BP %DHPAR,E]
JUMPE A,NOPAR
MOVEI A,0
MOVEI C,[ASCIZ "Even parity"]
PUSHJ P,RNUM
DPB A,[.BP %DHEVN,E]
NOPAR: MOVEI A,0
MOVEI C,[ASCIZ "Half duplex"]
PUSHJ P,RNUM
DPB A,[.BP %DHHDX,E]
MOVEI A,0
MOVEI C,[ASCIZ "Hardware echo"]
PUSHJ P,RNUM
DPB A,[.BP %DHECO,E]
MOVEI A,8
TRNE E,%DHPAR
MOVEI A,7
MOVEI C,[ASCIZ "Character length not including start, stop, and parity bits"]
PUSHJ P,RNUM
MOVSI I,-LCLNTB
GETCLN: CAMN A,CLNTAB(I)
JRST GOTCLN
AOBJN I,GETCLN
MOVEI C,[ASCIZ "Impossible character length"]
JRST ERR
GOTCLN: DPB I,[.BP %DHCLN,E]
MOVE A,XMTCOD ;GET BUFFER SIZE
MOVE A,BSZTAB(A)
MOVEI C,[ASCIZ "Buffer size"]
PUSHJ P,RNUM
CAILE A,260.
MOVEI A,260.
CAIGE A,1
MOVEI A,1
MOVE D,A
; DO IT
SETLOC: SKIPN DL10P
JRST SETLC2
MOVSI A,E
HRR A,DL10PR
.SETLOC A,
MOVSI A,D
HRR A,DL10PS
.SETLOC A,
MOVSI A,TTYNUM
HRR A,DL10PL
.SETLOC A,
WAIT: MOVS A,DL10PL ;WAIT UNTIL 11 ZEROS IT
HRRI A,A
.GETLOC A,
JUMPE A,DONE
MOVEI A,2
.SLEEP A,
JRST WAIT
SETLC2: SKIPN DTE20P
.VALUE
HRL D,E ;LINE PARAMETER REG,,BUFFER SIZE
MOVSI A,D
HRR A,DTELPR
.SETLOC A,
MOVSI A,TTYNUM
HRR A,DTELSP
.SETLOC A,
WAIT2: MOVS A,DTELSP ;WAIT UNTIL 11 SETOMS IT
HRRI A,A
.GETLOC A,
JUMPL A,DONE
MOVEI A,2
.SLEEP A,
JRST WAIT2
DONE: MOVE A,TTYNUM
IDIVI A,8
LSH A,6
ADD A,B
IORI A,'T00
.OPEN TMNCH,A
.LOSE %LSFIL
.CALL [ SETZ ;NOW SET THE SPEED'S IN THE SYSTEM
'TTYVAR
MOVEI TMNCH
['ISPEED]
SETZ RCVSPD ]
.LOSE %LSSYS
.CALL [ SETZ
'TTYVAR
MOVEI TMNCH
['OSPEED]
SETZ XMTSPD ]
.LOSE %LSSYS
SKIPE JCLF
.BREAK 16,160000
MOVEI C,[ASCIZ "OK"]
JRST ERR
END LSPEED