.psect packet ,rw,d,lcl,rel,con packet::.blkb MAXLNG+20 .even .even .psect rttda consav::.blkb 50 ttparm::.blkb 50 .restore JSW = 44 .MCALL .TTINR dispatch: tst proflg ; is this a pro/350 today? bne pro ; yes tst tsxflg ; is this tsx/tsx+ bne tsx jsr pc ,@(r0) ; no, it plain old RT11. Use return ; multiple terminal service for i/o pro: tst (r0)+ ; pro/rt11, do the right thing jsr pc ,@(r0) ; simple return tsx: cmp (r0)+ ,(r0)+ ; tsx jsr pc ,@(r0) ; call the routine return ; and exit ENTRY TTYSAV ENTRY TTYRST ENTRY DEADEV Assdev::mov @r5 ,r0 ; get the first character of the name cmpb @r0 ,#'0 ; if a digit, then insure proflag is blo 5$ ; is turned off (in case this is a cmpb @r0 ,#'9 ; normal 11 with MT and XL service. bhi 5$ ; not a mt line setting clr proflg ; turn off the XC/XL flag please 5$: cmpb @r0 ,#'C&137 ; /44/ CLn: and TSX+? beq 6$ ; /44/ Yes cmpb @r0 ,#'X&137 ; if XC or XL, then treat as a PRO/350 bne 10$ ; no 6$: tst tsxflg ; are we tsx? beq 7$ ; no mov sp ,tsxcl ; and set tsx and cl mode 7$: clr tsxflg ; shut off tsx mode, enable PRO mov sp ,proflg ; simple to do br 100$ ; and dispatch to the correct thing 10$: cmpb @r0 ,#'T&137 ; /39/ SET LIN TT: ? bne 30$ ; /39/ no clr proflg ; /39/ yes, for RT11 use console then tst tsxflg ; /39/ already been here or real TSX+ bne 20$ ; /39/ yes, leave things alone then mov #-1 ,tsxflg ; /39/ flag to use TSX tt handling cmpb parity ,#PAR$NONE ; /39/ no parity? beq 15$ ; /39/ yes, fake space parity then tstb parity ; /39/ parity already set up? bne 20$ ; /39/ yes 15$: mov #PAR$SPACE,parity ; /39/ need 8bit quoting also 20$: movb #60. ,setrec+p.spsiz ; /39/ console port won't do XON/XOFF movb #60. ,setsen+p.spsiz ; /39/ fast enough to avoid data loss movb #60. ,senpar+p.spsiz ; /43/ Here for safety. 30$: 100$: CALLDSP ASSDEV return .enabl lsb Ttyini::CALLDSP TTYINI tst r0 beq iniend mov r0 ,r1 message direrr r1 mov r1 ,r0 iniend: return ENTRY TTYFIN ENTRY XBINREAD ENTRY BINREAD ENTRY BINWRITE PAKREA == BINREAD PAKWRI == BINWRITE ENTRY CANTYP ENTRY TTXON ENTRY SENBRK ENTRY TTPARS ENTRY GTTNAM ENTRY SETSPD ENTRY TTSPEED ENTRY TTYSET ENTRY TTRFIN ENTRY TTRINI ENTRY FINRT ENTRY TTYDTR ENTRY TTYHAN ENTRY KBREAD tidias:: tidiar::return rstsrv::clr r0 return inqdtr::mov #-1 ,r0 return inqpar::clr r0 return .MCALL .TTINR ,.TTYIN clrcns::call chkabo tst r0 bne clrcns return .mcall .SERR ,.HERR ,.TTINR ,.TWAIT read1c::mov @#JSW ,-(sp) .SERR 5$: bis #40000!10000!100,@#JSW tst tsxsav ble 10$ mov #tsxon ,r0 EMT 375 mov #tsxsin ,r0 EMT 375 10$: .TTINR bcc 90$ .TWAIT #rtwork,#tsxwai br 5$ 90$: bic #^C<40000!10000!100>,@#JSW mov r0 ,-(sp) .HERR tst tsxsav ble 100$ mov #tsxoff ,r0 EMT 375 100$: mov (sp)+ ,r0 bis (sp)+ ,@#JSW return .save .psect $pdata ,d tsxon: .byte 0,152 .word 'U&137,0 tsxsin: .byte 0,152 .word 'S&137,0 tsxoff: .byte 0,152 .word 'T&137,0 tsxwai: .word 0,3 .restore chkabo:: mov @#JSW ,-(sp) bis #40000!10000!100,@#JSW ; enable special input modes .ttinr ; check for ^z or ^x bcc 100$ ; no clr r0 ; nothing, return a null 100$: bic #^C<40000!10000!100>,@sp; bis (sp)+ ,@#JSW return ; return( failure ) .if ne ,0 .ift ; Moved to region $CBTA:: JSR R5,$SAVRG MOVB R2,R5 CLRB R2 SWAB R2 ASR R2 BCC E00134 TST R1 BPL E00134 NEG R1 MOVB #55,(R0)+ E00134: MOV R0,R4 ROR R2 ROR R2 ROR R3 CLRB R3 BISB R2,R3 CLRB R2 BISB #60,R2 MOV R1,R0 E00160: MOV R0,R1 CLR R0 DIV R5,R0 CMP R1,#11 BLOS E00200 ADD #7,R1 E00200: ADD R2,R1 MOV R1,-(SP) DECB R3 BLE E00234 TST R0 BNE E00230 TST R2 BPL E00234 TST R3 BPL E00230 BIC #20,R2 E00230: CALL E00160 E00234: MOVB (SP)+,(R4)+ MOV R4,R0 RETURN .endc .end K11DSPMAC[.050032]K11DSP.MAC[.050032]   X14|H [4;Ik(&'( k ߫H&P` \RrPP2PPzPP{PPPPP2P~\$\\TD 0D \~ hi) +\ ^( n ^( np\^txY\^ˀ\!kVk<\F˰<˴ˬ\VVkˤ1`@lP ABCDEFGHIJKLMNOPQRSTUVWXYZ$.?0123456789<@<SЬTЬ UQS>