Trailing-Edge
-
PDP-10 Archives
-
dec-10-omona-u-mc9
-
cciint.mac
There are 8 other files named cciint.mac in the archive. Click here to see a list.
SUBTTL R CLEMENTS /RCC/DAL -11 JAN 77 - V527
SEARCH F,S
$RELOC
$HIGH
;***COPYRIGHT 1973,1974,1975,1976,1977 DIGITAL EQUIPMENT CORP., MAYNARD, MASS.***
XP VCCIIT,527
;BITS IN T3 TO COMMUNICATE WITH THE HARDWARE (CONSIDERING 680 AS HARDWARE)
RCVBIT==400 ;DATAI FROM 680 WAS RECEIVE
;INT, NOT XMT DONE
;CODES USED FOR SCNSER-DLSTYP INTERFACE, IN CH.
EXTERN DSTOFF,DSTON,DSTRNG,DSTREQ ;THESE ARE SOFTWARE, SINCE HARDWARE VARIES
;CODES BETWEEN THIS ROUTINE AND THE 680 SOFTWARE FOR DATAPHONES
;THESE MUST AGREE WITH THOSE IN THE 680 SOFTWARE
;THESE HAVE SIGN BIT OF PDP8 ON FOR CHECKING EASILY IN THE 8
;IT IS ASSUMED THAT THESE ARE DSTXXX+4000
XP CCHOFF,4001 ;TURN OFF MODEM (IT WENT OFF)
XP CCHON,4002 ;TURN ON MODEM(IT CAME ON)
XP CCHRNG,4003 ;(MODEM IS RINGING)
XP CCHREQ,4003 ;WHAT IS STATE OF MODEMS CARRIER?
;CODES FOR SPECIAL LINE CONTROL ARE DENOTED WITH
; 6000+CODE. THEY ARE SIMILAR TO DATA-SET CONTROL CODES
; EXCEPT THAT THEY CONCERN THE DATA-SIDE OF THE LINE AND
; ARE HANDLED BY LNCREC IN SCNSER.
;TO-10 CODES IN USE:
; 1 ENABLE HUNG CHECKING (IRMA CATCHED)
; 2 DISABLE HUNG CHECKING
;
;FROM-10 CODES IN USE:
; NONE
DEFINE ISRNAM(N),< ;SEPERATE ROUTINE FOR EACH CCI
TITLE CC'N'INT -- INTERRUPT SERVICE FOR DA10/DC68A NUMBER N
IFE N,< CCI==14 ;DEVICE ADDRESS FOR CCI>
IFE <N-1>,<CCI==20 ;DEVICE ADDRESS FOR CCI2>
ENTRY CC'N'INT
CC'N'INT:CONSO CCI,240
JRST .-1
JRST CCIINT
CC'N'DSP::
JRST SCNTYP ;OUTPUT DATA
IFN FTMODM,<
JRST DSCTYP ;DATASET CONTROL
>
IFE FTMODM,<
POPJ P,0
>
JRST SCNCHK ;TEST PIA STILL SET
JRST CCIINI ;INIT CCI
POPJ P, ;CHANGE HARDWARE PARMS
POPJ P, ;LINE PARM CONTROL
POPJ P, ;SET ELEMENT
POPJ P, ;REMOTE STATION STUFF
JRST CCIOFL ;680 UP TEST
CCIOFS==CC'N'OFS## ;OFFSET FROM LINE PHYSICAL LINE 0 TO
; SOFTWARE LINE NUMBER.
CCIMAX==M.68L'N## ;NUMBER OF LINES ON THIS 680
IFN FTMODM,<
CCIDSO==CC'N'DSO## ;OFFSET INTO DSCTAB FOR THIS 680
>>
IFNDEF CCINUM,<CCINUM==0>
ISRNAM(\CCINUM)
;DEVICE-DEPENDENT PORTION OF INITIALIZATION CODE
;CALL: PUSHJ P,SCNINI
EXTERN SCNCHN
CCIINI: CONO CCI,2510+SCNCHN ;CLEAR DA10 AND ASSIGN PI
SETZM CCIERR ;CLEAR COUNT OF LOST PI ERRORS
POPJ P,0 ;RETURN FROM SCNINI
EXTERN SCNSAV,TCONLN,XMTINT,RECINT,CCIRWD
CCIOFL: CONSZ CCI,7
JRST CPOPJ1##
PUSHJ P,SCNCHK
CONSZ CCI,7
AOS (P)
POPJ P,0
CCIINT: CONSO CCI,40 ;YES. WHICH ONE?
JRST CCIDSM ;JUST FLAG THAT 8 ATE DATA
JSR SCNSAV ;RECEIVE. GET SOME AC'S AND P
DATAI CCI,T3 ;SEE WHAT THE 8 HAD TO SAY
LDB U,PCCILN ;GET THE PSEUDO LINE NUMBER
CAILE U,CCIMAX ;MAKE SURE USABLE LINE
POPJ P,0 ;TOO BIG. IGNORE IT.
ADDI U,CCIOFS ;ADD IN OFFSET
TRZN T3,RCVBIT ;IS 8 SAYING KEYBOARD?
JRST XMTINT ;NO. TRANSMIT INTERRUPT.
IFN FTMODM,<
TRZN T3,4000 ;DATASET TRANSACTION CODE?
>
JRST RECINT ;NO. RECEIVE INTERRUPT.
IFN FTMODM,<
IFN FTSCLC,<
ANDI T3,3777 ;REMOVE LINE FIELD
TRZE T3,2000 ;SPECIAL LINE CONTROL?
JRST LNCREC## ;YES
>
IFE FTSCLC,<
ANDI T3,1777 ;REMOVE LINE FIELD & POSSIBLE 2000 BIT
>
SUBI U,CCIOFS ;CONVERT LINTAB INDEX TO 680 LINE #
ADDI U,CCIDSO ;CONVERT TO DSCTAB INDEX
JRST DSCREC ;AND PROCESS CODE.
;STILL IN FTMODM
EXTERN DSCREC,DSTRNG,DSTOFF,DSTON
;HERE TO EXERCISE CONTROL OVER A DATASET. TRANSACTION CODE IN T3,
; DSCTAB INDEX IN U. ENTERED FROM SCNSER ONLY.
EXTERN DSTON,DSTOFF,DSTREQ,DSTRNG,SCNCHN
DSCTYP: CAIN T3,DSTON ;IS CODE FOR ON?
JRST DSDON ;YES. DRIVEN ON FLAG
CAIN T3,DSTOFF ;NO. FOR OFF?
JRST DSDOFF ;YES. DISPATCH.
CAIE T3,DSTREQ ;REQUEST STATUS?
POPJ P,0 ;NO. ERRONEOUS CODE. DISMISS.
DSDREQ: ;HERE TO REQUEST STATUS OF A LINE, ONLY DURING TTYINI. THUS
; IT IS OK TO GO INTO A WAIT-LOOP TO ACCOMPLISH THIS, AND TO IGNORE
; ANY OTHER ACTIVITY.
CCIREQ: MOVEI T3,CCHREQ ;CORRECT CODE FOR 680 SOFTWARE
HRRZ T1,DSCTAB##(U) ;LINE NUMBER TO RIGHT AC
PUSHJ P,CCITYP ;SEND TO DA10
MOVE T1,CCITIM ;TIMEOUT IN CASE 680 DEAD
CCIRQL: CONSO CCI,240 ;WAIT FOR DA10 FLAG
SOJG T1,.-1 ; ..
JUMPLE T1,DSRQOF ;NO REPONSE. ASSUME OFF.
CONSO CCI,40 ;WHICH FLAG IN DA10?
JRST CCIRQ1 ;JUST FM 10 BFR EMPTY.
DATAI CCI,T3 ;READ DATA FROM THE 8
LDB T2,PCCILN ;GET THE LINE NUMBER
CAIE T2,0(U) ;REQUESTED LINE?
JRST CCIRQL ;NO. KEEP WAITING.
ANDI T3,7777-RCVBIT ;JUST THE CHARACTER FIELD
CAIE T3,CCHON ;ON FLAG?
JRST DSRQOF ;NO. ASSUME OFF
DSRQON: MOVEI T3,DSTON ;YES. TELL SCNSER.
POPJ P,0 ;RETURN FROM DSCTYP
DSRQOF: MOVEI T3,DSTOFF ;TELL SCNSER IT'S OFF.
POPJ P,0 ;RETURN TO SCNSER
CCIRQ1: CONO CCI,400+SCNCHN ;CLEAR FROM-10 EMPTY FLAG
JRST CCIRQL ;AND WAIT FOR ANOTHER FLAG
;HERE TO DRIVE A DATASET ON.
DSDON: MOVEI T3,CCHON ;FLAG FOR 680
JRST DSDOF1 ;SEE WHICH TO USE
;HERE TO DRIVE A DATASET OFF.
DSDOFF: MOVEI T3,CCHOFF ;FLAG FOR 680
DSDOF1: HRRZ T1,DSCTAB##(U) ;GET COPY OF LINE NUMBER
JRST CCITYP ;SEND TO 680
> ;FTMODM
EXTERN SCNCHN,SCNCHL
CCIDSM: CONO CCI,400+SCNCHN ;CLEAR DA10 SEND DONE FLAG
JRST 12,@SCNCHL ;AND DISMISS
PCCILN: POINT 12,T3,23 ;SECOND PDP8 BYTE IN WORD
;ROUTINE TO OUTPUT A CHARACTER TO A LINE
;CALLED FROM TYPE IN SCNSER
;WITH 8-BITS OF CHARACTER IN T3
SCNTYP: LDB T1,LDPLNO## ;PICK UP LINE NUMBER
ANDI T3,377 ;MAKE SURE NO JUNK
IFN FTHDPX!FTTRACK,<
DPB T3,LDPECK## ;SAVE FOR ECHO CHECK
>
CCITYP: SUBI T1,CCIOFS ;CONVERT BACK TO HARDWARE LINE #
DPB T1,PCCILN ;STORE IN THE OUTPUT WORD
MOVE T1,CCITIM ;A DELAY FOR THE SLOW 8 IF NEEDED
CONSZ CCI,1000 ;SEE IF DA10 BUFFER IS EMPTY
SOJG T1,.-1 ;IF NOT, 8 IS PROBABLY DEAD
MOVEM T1,CCITIM ;STORE UPDATED TIMEOUT
DATAO CCI,T3 ;SEND TO EIGHT
POPJ P,0 ;DONE.
SCNCHK: PUSH P,[1000] ;RESET TIMEOUT EACH SECOND
POP P,CCITIM ; SO WE DO NOT USE TOO MUCH TIME
CONSZ CCI,7 ;ANY PI CHAN ON DA10?
POPJ P,0 ;YES. RETURN
CONO CCI,2510+SCNCHN ;NO. GIVE IT BACK TO DA10
AOS CCIERR ;COUNT OCCURRENCE OF ERROR
POPJ P,0 ;AND RETURN TO CLOCK ROUTINE
$LOW
CCITIM: 1000 ;TIMEOUT TIME FOR SLOW 8
CCIERR: 0 ;COUNT OF LOST PI ERRORS ON CCI
$LIT
CCIEND: END