.title k11dsp dispatch to correct terminal i/o for RT11, PRO/RT,TSX .ident /2.24/ .if ndf, K11INC .ift .include /IN:K11MAC.MAC/ .endc .enabl gbl ; 08-Nov-84 16:16:40 Brian Nelson ; ; Collect K11PRT, K11RTT and K11TSX into separete overlays in ; the same region (either disk or virtual). Dispatch to the ; correct one based on (1) the exectype flag set at program ; entry in XINIT, or (2) force PRO/350 mode if the device is ; X?: (checked in ASSDEV below). While the cost in address ; space is a bit to create overlay table entries for all of ; the ept's in each module is about 300 words, doing so will ; save me the need to create multiple save images every time ; I change Kermit-11. Additionally, one save image for all ; systems sounds like a nice idea to me. ; ; 12-Sep-86 11:20:20 BDN Changed around to separate I/D space ; Not needed for RT but may as well be ; consistant. .macro ENTRY ep .enabl lsb ep:: mov #200$ ,r0 jmp dispat .save .psect $PDATA ,D 200$: .word M.'EP,X.'EP,T.'EP .restore .dsabl lsb .endm ENTRY .macro CALLDSP ep .enabl lsb mov #200$ ,r0 call dispat return .save .psect $PDATA ,D 200$: .word M.'ep,X.'ep,T.'ep .restore .dsabl lsb .endm CALLDSP .save .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 tst tsxsave ; /59/ TSX+ beq 5$ ; /59/ No mov #ER$LIN ,r0 ; /59/ Yes, error return ; /59/ 5$: cmpb @r0 ,#'C&137 ; /44/ CLn: and TSX+? beq 6$ ; /44/ Yes cmpb @r0 ,#'K&137 ; /56/ KL? beq 6$ ; /56/ 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 110$: 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 ,.TTYOU 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 Wrtall::mov r1 ,-(sp) ; /56/ Save registers mov r0 ,-(sp) ; /56/ Ditto mov 6(sp) ,r1 ; /56/ Get string address 10$: tstb @r1 ; /56/ All done? beq 100$ ; /56/ Yes, exit .TTYOU (r1)+ ; /56/ No, dump br 10$ ; /56/ Next please 100$: mov (sp)+ ,r0 ; /56/ Pop registers mov (sp)+ ,r1 ; /56/ Ditto mov (sp)+ ,(sp) ; /56/ Move return address up return ; /56/ And exit 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