Google
 

Trailing-Edge - PDP-10 Archives - scratch - 10,7/unsmon/dlsint.mac
There are 9 other files named dlsint.mac in the archive. Click here to see a list.
	SEARCH	F,S
	$RELOC
	$HIGH

;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
;  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
.CPYRT<1973,1986>
;COPYRIGHT (C) 1973,1974,1975,1976,1977,1978,1979,1980,1984,1986
;BY DIGITAL EQUIPMENT CORP., MAYNARD, MASS.
;ALL RIGHTS RESERVED.


DEFINE	ISRNAM(N),<

TITLE	DL'N'INT	-- INTERRUPT SERVICE FOR DC10 - NUMBER N - 550
SUBTTL	/RCC/DAL - 14 APR 87




XP	VDL'N'IT,550


IFG N-1,<	PRINTX	?ONLY 2 DC10S ON ANY DECSYSTEM-10>

	ENTRY	DL'N'INT	;FOR LINK-10
DL'N'INT::CONSO	DLS,30
	JRST	.-1
	JRST	DLSINT


DSCOFS==DSCOF'N##		;OFFSET INTO DSCTAB
DL'N'DSP::JRST	SCNTYP		;DATA OUT
	JRST	DSCTYP		;DATA SET CONTROL

	JRST	SCNCHK		;PI TEST
	JRST	DLSINI		;INIT
	POPJ	P,		;CHANGE HARDWARE PARMS
	POPJ	P,		;LINE PARM CTL
	POPJ	P,		;SET ELEMENT
	POPJ	P,		;REMOTE STATION STUFF
	JRST	DLSOFL		;OFF LINE TEST
DLSMXD==DL'N'MXD##		;MAX LINE NUMBER
DLSMXL==DL'N'MXL##		;MAXIMUM DATASET NUMBER
DLSOFS==DL'N'OFS##		;OFFSET FROM HARDWARE TO LINTAB

IFE	N,<
	DLS==240		;HARDWARE ADDRESS
>

IFE	<N-1>,<
	DLS==244
>
;STILL IN ISRNAM DEFINITION
;ONCE A TICK CODE TO START OUTPUT
DL'N'STO::PUSH	P,T1
DL'N'ST1:PUSHJ	P,TOTAKE##
	  JRST	TPOPJ##
	MOVEI	T1,L1RCHP##
	ANDCAM	T1,LDBBYT##(U)	;CLEAR CHP BIT
	SKIPGE	LDBDCH##(U)	;DON'T START AN ACTIVE LINE
	PUSHJ	P,XMTCHR##
	  JRST	DL'N'ST2
	PUSHJ	P,SCNTYP
	PUSHJ	P,CLRIRM##
DL'N'ST2:MOVE	T1,(P)
	JRST	DL'N'ST1
>

IFNDEF	DLSNUM,<DLSNUM==0>
	ISRNAM(\DLSNUM)

;BITS IN T3 TO COMMUNICATE WITH THE HARDWARE (CONSIDERING 680 AS HARDWARE)

USDRLN==100				;USE DIRECTED LINE NUMBER
TDSABL==400				;TRANSMIT DISABLE
RCVBIT==400				;DATAI FROM DLS OR 680 WAS RECEIVE
					;INT, NOT XMT DONE
DLSOHE==100				;OFF-HOOK ENABLE TO DC10E
DLSART==200				;REQUEST ARTIFICIAL INTERRUPT FROM DC10E
DLSCAR==4				;CARRIER IS ON, IN DC10E DATAI
DLSRNG==2				;LINE RINGING, IN DC10E DATAI
DLSCRQ==40				;CALL REQUEST, DATAO
DLSDPR==20				;DIGIT PRESENT, DATAO
DLSPND==20				;PRESENT NEXT DIGIT, DATAI
;DEVICE-DEPENDENT PORTION OF INITIALIZATION CODE
;CALL:	PUSHJ P,SCNINI

DLSINI:	CONO	DLS,40		;I/O RESET TO DC10
	SETZM	DLSERR		;CLEAR COUNT OF LOST PI ERRORS
	CONO	DLS,SCNCHN##	;ASSIGN ITS PI
	POPJ	P,0		;RETURN FROM DLSINI
DLSOFL:	CONSZ	DLS,7
	JRST	CPOPJ1##
	PUSHJ	P,SCNCHK
	CONSZ	DLS,7
	AOS	(P)
	POPJ	P,0
DLSINT:	JSR	SCNSAV##	;YES. GET AC'S AND P
	DATAI	DLS,T3		;GET WHAT THE DC10 SAID
SCNNT1:	HLRZ	U,T3		;GET THE HARDWARE LINE NUMBER
	TRNE	T3,RCVBIT	;RECEIVE OR TRANSMIT?
	JRST	SCNREC		;RECEIVE.
	DATAO	DLS,[TDSABL]	;TRANSMIT. FIRST CLEAR FLAG
	CAILE	U,DLSMXD	;LEGAL LINE NUMBER?
	POPJ	P,		;NO--DO NOT KICK SCNSER
	ADDI	U,DLSOFS	;YES--CONVERT TO LINTAB INDEX
	JRST	XMTINT##	;CALL SCNSER
SCNREC:	CAIG	U,DLSMXD	;DATASET CONTROL OR JUST DATA?
	JRST	SCNRC0		;HAVE RECEIVED DATA
	CAILE	U,DLSMXL	;LEGAL DC10E LINE?
	POPJ	P,0		;NO. JUNK IT.
	SUBI	U,DSCOFS	;CONVERT TO TABLE ADDRESS
	ANDI	T3,DLSCAR!DLSRNG!DLSPND

	MOVE	T1,DSCTAB##(U)	;GET CONTROL BITS
	TLNN	T1,DSCDLW##	;IN DIALLER CODE?
	TRZ	T3,DLSPND	;NO, IGNORE DIALLER

	HRR	T1,T3		;COPY HARDWARE BITS
	TRNE	T3,DLSCAR	;CARRIER ON?
	TLC	T1,DSCHWC##	;YES. XOR THE TWO BITS
	TLNE	T1,DSCHWC##	;CARRIER CHANGE?
	JRST	DSCRC1		;YES. THATS MAIN FLAG.
	MOVEI	T3,DSTPND##	;PRESENT NEXT DIGIT
	TRNE	T1,DLSPND	;IS THAT IT?
	JRST	DSCREC##	;YES.

	MOVEI	T3,DSTRNG##	;RING TRANSACTION CODE
	TRNE	T1,DLSRNG	;IS IT A RING?
	JRST	DSCREC##	;YES. INFORM SCNSER
DSCRC1:	MOVEI	T3,DSTOFF##	;NO. TRY OFF TRANSACTION
	TRNE	T1,DLSCAR	;CARRIER ON?
	MOVEI	T3,DSTON##	;YES. ON-COMING TRANSACTION
	JRST	DSCREC##	;PASS TO SCNSER
SCNRC0:	ADDI	U,DLSOFS	;CONVERT TO LINTAB INDEX
	ANDI	T3,CK.CHR	;KEEP ONLY CHARACTER
	JRST	RECINT##	;CALL SCNSER
;HERE TO EXERCISE CONTROL OVER A DATASET. TRANSACTION CODE IN T3,
; DSCTAB INDEX IN LINE. ENTERED FROM SCNSER ONLY.

DSCTYP:	CAIN	T3,DSTON##	;IS CODE FOR ON?
	JRST	DSDON		;YES. DRIVEN ON FLAG
	CAIN	T3,DSTOFF##	;NO. FOR OFF?
	JRST	DSDOFF		;YES. DISPATCH.
	CAIN	T3,DSTCRQ##	;PLACE OUTGOING CALL REQUEST?
	JRST	DSDCRQ		;YES
	CAIG	T3,DSTPND##+17	;DIGIT TO DIAL?
	CAIGE	T3,DSTPND##	; ..
	SKIPA			; NO.
	JRST	DSDPND		;YES.

	CAIE	T3,DSTREQ##	;REQUEST SATATUS?
	POPJ	P,0		;NO. ERRONEOUS CODE. DISMISS.

	;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.

	MOVSI	T3,USDRLN+DSCOFS(U)	;PUT DIRECTED LINE NUMBER IN LH
	HRRI	T3,DLSOHE+DLSART	;REQUEST ARTIFICIAL INT, KEEP OFFHOOK ENABLE
	DATAO	DLS,T3		;SEND TO DC10
	MOVEI	T1,1000		;TIMEOUT, IN CASE DC10E DEAD
DSCIL2:	CONSZ	DLS,30		;WAIT FOR INTERRUPT
	JRST	DSDRQ1		;GOT A FLAG. SEE WHAT IT IS
	SOJG	T1,DSCIL2	;WAIT FOR FLAG
DSRQOF:	MOVEI	T3,DSTOFF##	;TELL SCNSER IT'S OFF.
	POPJ	P,0		;RETURN TO SCNSER

DSDRQ1:	DATAI	DLS,T3		;SEE WHAT THE DC10 SAYS
	TRNE	T3,RCVBIT	;IS IT A RECEIVE FLAG?
	JRST	DSDRQ2		;YES. GOOD.
	DATAO	DLS,[EXP TDSABL]	;NO. RANDOM XMT FLAG. JUNK IT.
	JRST	DSCIL2		;AND KEEP WAITING
DSDRQ2:	HLRZ	T2,T3		;GET LINE NUMBER FROM DC10 INT.
	CAIE	T2,DSCOFS(U)	;CORRECT FOR THIS REQUEST?
	JRST	DSCIL2		;NO. IGNORE IT.
	TRNN	T3,DLSCAR	;YES. IS CARRIER ON?
	JRST	DSRQOF		;NO. TELL SCNSER ITS OFF
	MOVEI	T3,DSTON##	;YES. TELL SCNSER.
	POPJ	P,0		;RETURN FROM DSCTYP

;STILL IN FTMODM
;HERE TO DRIVE A DATASET ON.

DSDON:	MOVEI	T2,DLSOHE	;BIT FOR DC10E
	JRST	DSDOF1		;SEE WHICH TO USE

;HERE TO DRIVE A DATASET OFF.

DSDOFF:	MOVEI	T2,0		;BIT FOR DC10E OFF
DSDOF1:	MOVEI	T1,0(U)		;GET COPY OF LINE NUMBER
	ADDI	T1,DSCOFS	;CORRECT TO DC10E NUMBER
	MOVE	T3,T2		;GET BIT (OR NOT) FOR DC10E
	JRST	SCNTY1		;SEND TO DC10


DSDCRQ:	MOVEI	T1,0(U)		;COPY DSCTAB INDEX
	ADDI	T1,DSCOFS	;CONVERT TO DC10E PHYSICAL LINE NUMBER
	MOVEI	T3,DLSOHE!DLSCRQ	;REQUEST LINE
	JRST	SCNTY1		;SEND TO HARDWARE

DSDPND:	MOVEI	T1,0(U)		;COPY DSCTAB INDEX
	ADDI	T1,DSCOFS	;CONVERT TO PHYSICAL LINE IN DC10E
	ANDI	T3,17		;JUST THE DESIRED DIGIT
	CAIN	T3,16		;FLAG FOR SECOND DIAL TONE DELAY?
	JRST	DSDSDT		;YES. GO WAIT FOR SECOND DIAL TONE
	TRO	T3,DLSOHE!DLSDPR!DLSCRQ
	JRST	SCNTY1		;SEND THE DIGIT TO DC10E

DSDSDT:	MOVE	T1,TICSEC##	;ONE SECOND
	IMULI	T1,5		;FIVE SECONDS
	HRLI	T1,DLSCLK	;WHERE TO COME ON CLK LEVEL
	SYSPIF			;FOR CLOCK REQUEST
	IDPB	T1,CLOCK##	;PUT IN QUEUE
	IBP	CLOCK##		;TWO WORDS/ENTRY
	SETOM	CLKNEW##	;INDICATE NEW ENTRY
	PJRST	ONPOPJ##	;RE-ENABLE INTERRUPTS, DISMISS & WAIT FOR CLOCK

;HERE ON CLOCK LEVEL AFTER WAITING FOR SECOND DIAL TONE

DLSCLK:	MOVE	T3,DSDUNI##	;GET TTY NUMBER FOR DIALLER
	MOVE	U,LINTAB##(T3)	;LINE TABLE ENTRY IS LDB ADDRESS
	LDB	T3,LDPDSC##	;GET THE DATASET CONTROLLER INDEX
	MOVSI	T3,DSCOFS(T3)	;DC10E LINE NUMBER TO LEFT HALF
	HRRI	T3,RCVBIT!DLSPND	;PRETEND IT WAS RECEIPT OF NEXT DIGIT
	JRST	SCNNT1		;AND JUMP INTO RECEIVE INTERRUPT CODE
;ROUTINE TO OUTPUT A CHARACTER TO A LINE
;CALLED FROM TYPE IN SCNSER
;WITH 8-BITS OF CHARACTER IN T3

SCNTYP:	ANDI	T3,377		;MAKE SURE NO JUNK
	LDB	T1,LDPLNO##	;PICK UP LINE NUMBER
	SUBI	T1,DLSOFS	;CONVERT LINE #
SCNTY1:	HRL	T3,T1		;SET UP LINE NUMBER IN T3 LH
	TLO	T3,USDRLN	;AND DIRECT TO THAT LINE
	DATAO	DLS,T3		;OUT TO SCANNER
	POPJ	P,0		;AND RETURN

SCNCHK:	CONSZ	DLS,7		;ANY PI CHAN ON DC10?
	POPJ	P,0		;YES. OK
	CONO	DLS,SCNCHN##	;NO. RE ASSIGN IT
	AOS	DLSERR		;AND COUNT OCCURRENCE OF ERROR
	POPJ	P,0		;RETURN TO CLOCK

	$LOW
DLSERR:	0				;COUNT OF LOST PI CHANNEL ERRORS

	$LIT

DLSEND:	END