1
0
mirror of https://github.com/PDP-10/stacken.git synced 2026-02-28 17:09:15 +00:00
Files
Lars Brinkhoff 6e18f5ebef Extract files from tape images.
Some tapes could not be extracted.
2021-01-29 10:47:33 +01:00

254 lines
7.3 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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