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