From 4937eeff98891b9e60d53eb0c93644bc463622f9 Mon Sep 17 00:00:00 2001 From: Eric Swenson Date: Tue, 20 Dec 2016 16:30:51 -0800 Subject: [PATCH] Added LSPEED. Resolves #301. --- README.md | 1 + build/build.tcl | 4 + src/syseng/lspeed.19 | 436 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 441 insertions(+) create mode 100755 src/syseng/lspeed.19 diff --git a/README.md b/README.md index f2f4099e..b7df62b9 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,7 @@ A list of [known ITS machines](doc/machines.md). - LOCK, shut down system. - LOOKUP, looks up user info in INQUIR database. - LOSS (device). + - LSPEED, set tty line parameters. - LUSER, request help from registered list of logged-in users. - MAIL, Mail sending client. - MAILT, allows editing mail (from :MAIL) in EMACS. diff --git a/build/build.tcl b/build/build.tcl index bc2d149a..f85dcaf4 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -967,6 +967,10 @@ expect ":KILL" respond "*" ":midas sys2;ts hostab_sysen1;hostab\r" expect ":KILL" +# LSPEED +respond "*" ":midas sys1;ts lspeed_syseng;lspeed\r" +expect ":KILL" + # PROBE respond "*" ":link syseng;its defs,sys;itsdfs >\r" respond "*" ":midas sysbin;probe bin_bawden;probe\r" diff --git a/src/syseng/lspeed.19 b/src/syseng/lspeed.19 new file mode 100755 index 00000000..3e2d5acf --- /dev/null +++ b/src/syseng/lspeed.19 @@ -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