mirror of
https://github.com/PDP-10/stacken.git
synced 2026-02-28 17:09:15 +00:00
254 lines
7.3 KiB
Plaintext
254 lines
7.3 KiB
Plaintext
SEARCH F,S
|
||
$RELOC
|
||
$HIGH
|
||
|
||
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED
|
||
; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
|
||
;
|
||
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION
|
||
; 1973,1974,1975,1976,1977,1978,1979,1980,1984,1986,1988.
|
||
;ALL RIGHTS RESERVED.
|
||
|
||
.CPYRT<1973,1988>
|
||
|
||
|
||
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
|
||
|