1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-29 13:21:11 +00:00

Added LSPEED.

Resolves #301.
This commit is contained in:
Eric Swenson
2016-12-20 16:30:51 -08:00
committed by Lars Brinkhoff
parent c658ec7862
commit 4937eeff98
3 changed files with 441 additions and 0 deletions

436
src/syseng/lspeed.19 Executable file
View File

@@ -0,0 +1,436 @@
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
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