home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
archives
/
kermit11.tar.gz
/
kermit11.tar
/
k11dsp.mac
< prev
next >
Wrap
Text File
|
1989-06-13
|
6KB
|
306 lines
.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 <Line init failure - >
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