mirror of
https://github.com/PDP-10/stacken.git
synced 2026-03-01 01:19:17 +00:00
739 lines
25 KiB
Plaintext
739 lines
25 KiB
Plaintext
TITLE DZINT -- INTERRUPT SERVICE FOR DZ11 - V021
|
||
SUBTTL Dave McClure/DMcC/DBD/TL 10 MAY 88
|
||
|
||
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 1978,1979,1980,1982,1984,1986,1988.
|
||
;ALL RIGHTS RESERVED.
|
||
|
||
.CPYRT<1978,1988>
|
||
|
||
|
||
XP VDZINT,021
|
||
|
||
ENTRY DZINT ;LOAD DZINT IF LIBRARY SEARCH
|
||
DZINT:
|
||
SUBTTL DISPATCH TABLE
|
||
|
||
DZDSP:: JRST SCNTYP ;DATA OUT
|
||
JRST DSCTYP ;DATA SET CONTROL
|
||
|
||
JRST DZSEC ;CALLED ONCE A SECOND
|
||
; CHECK INTERRUPT ENABLES
|
||
; AND DO DATASET TIMING
|
||
JRST DZINI ;INIT
|
||
JRST DZCHP ;CHANGE HARDWARE PARAMETERS
|
||
JRST DZLPC ;SET LINE PARAM CTRL MSG
|
||
POPJ P, ;SET ELEMENT
|
||
POPJ P, ;REMOTE STATION STUFF
|
||
JRST DZOFL ;OFF LINE TEST
|
||
IFE 1,<
|
||
DSCOFS==DSCOF'N## ;OFFSET INTO DSCTAB
|
||
DLSMXD==DL'N'MXD## ;MAX LINE NUMBER
|
||
DLSMXL==DL'N'MXL## ;MAXIMUM DATASET NUMBER
|
||
DLSOFS==DL'N'OFS## ;OFFSET FROM HARDWARE TO LINTAB
|
||
>;IFE 1
|
||
SUBTTL DZ11 HARDWARE DEFINITIONS
|
||
|
||
;DZ11 OFFSETS INTO DEVICE DEFINITIONS
|
||
|
||
DZCSR==0 ;CONTROL AND STATUS
|
||
DZRBUF==2 ;RECEIVER BUFFER
|
||
DZLPR==2 ;LINE PARAMETER REGISTER
|
||
DZTCR==4 ;TRANSMIT CONTROL
|
||
DZDTR==5 ;DATA TERM READY FLAGS (HIGH BYTE OF TCR)
|
||
DZRNG==6 ;RING INDICATOR
|
||
DZMSR==6 ;COMBINATION OF RING AND CARRIER
|
||
DZCAR==7 ;CARRIER
|
||
DZTBUF==6 ;TRANSMITTER BUFFER
|
||
DZBRK==7 ;BREAK (HIGH OF TBUF)
|
||
|
||
;CSR BIT DEFINITIONS
|
||
|
||
DZTRDY==1B20 ;TRANSMIT READY
|
||
DZTIEN==1B21 ;TRANSMIT INTERRUPT ENABLE
|
||
DZSILO==1B22 ;SILO ALARM
|
||
DZSIEN==1B23 ;SILO ALARM ENABLE
|
||
DZTXLN==7B27 ;TRANSMIT LINE NUMBER
|
||
DZRRDY==1B28 ;RECEIVE READY
|
||
DZRIEN==1B29 ;RECIEVE INTERRUPT ENABLE
|
||
DZMSCN==1B30 ;MASTER SCAN ENABLE
|
||
DZCLR==1B31 ;CLEAR (RESET)
|
||
|
||
;RECEIVER BUFFER DEFINITIONS
|
||
|
||
DZRDVL==1B20 ;DATA VALID
|
||
DZROVR==1B21 ;OVER RUN
|
||
DZRFRM==1B22 ;FRAME ERROR
|
||
DZRPAR==1B23 ;PARITY ERROR
|
||
DZRLIN==7B27 ;LINE NUMBER
|
||
|
||
;LINE PARAMETER DEFINITIONS
|
||
|
||
DZ1RXO==1B23 ;RECEIVE ON
|
||
DZ1FRQ==17B27 ;LINE FREQUENCY
|
||
;0B27 ;50 BAUD
|
||
;1B27 ;75 BAUD
|
||
;2B27 ;110 BAUD
|
||
;3B27 ;NOT USED (134.5 BAUD)
|
||
;4B27 ;150 BAUD
|
||
;5B27 ;300 BAUD
|
||
;6B27 ;600 BAUD
|
||
;7B27 ;1200 BAUD
|
||
;10B27 ;1800 BAUD
|
||
;11B27 ;2000 BAUD
|
||
;12B27 ;2400 BAUD
|
||
;13B27 ;3600 BAUD
|
||
;14B27 ;4800 BAUD
|
||
;15B27 ;7200 BAUD
|
||
;16B27 ;9600 BAUD
|
||
;17B27 ;NOT USED (19200 BAUD)
|
||
DZ1OPA==1B28 ;ODD PARITY
|
||
DZ1PEN==1B29 ;PARITY ENABLE
|
||
DZ1STP==0B30 ;STOPCODE 1 BIT
|
||
DZ2STP==1B30 ;STOPCODE 2 BITS
|
||
DZ1CHL==3B32 ;CHARACTER LENGTH
|
||
;0B32 ;5 LEVEL
|
||
;1B32 ;6 LEVEL
|
||
;2B32 ;7 LEVEL
|
||
DZ8BIT==3B32 ;8BIT CHARACTER DEFINITION
|
||
DZ1LNO==7B35 ;LINE NUMBER
|
||
SUBTTL INITIALIZATION CODE
|
||
|
||
;DEVICE-DEPENDENT PORTION OF INITIALIZATION CODE
|
||
; CALLED BY SYSINI WITH LINE NUMBER IN RH(J) & LDB ADDR IN U
|
||
|
||
DZINI: HRRZI T1,1-M.DZNL##(J) ;GET LINE NUMBER FROM TTYINI
|
||
JUMPN T1,CPOPJ## ;SKIP OVERHEAD OF REDUNDANT CALLS
|
||
PUSHJ P,SAVE3## ;SAVE P1 - P3
|
||
MOVE P1,[DZ11BA-10] ;BASE ADDRESS FOR DZ11'S
|
||
MOVEI T1,DZ11BA_-^D18 ;GET UNIBUS ADAPTER NUMBER
|
||
MOVEI T2,DZ11IV ;GET INTERRUPT VECTOR INDEX
|
||
PUSHJ P,AUTVIA## ;COMPUTE ADDRESS OF INTERRUPT INSTRUCTION
|
||
MOVE P2,T1 ;SAVE IT AWAY HERE
|
||
HRLI P2,DZ0VA## ;FIRST DZ11 INTERRUPT ROUTINE
|
||
SETZM P3 ;WILL BE DZMAXL
|
||
DZINI2: TRNE P3,7 ;FIRST LINE ON THIS DZ11 ?
|
||
JRST DZINI4 ;NO SO HAVE ALREADY CLEARED IT
|
||
ADDI P1,10 ;NEXT DZ11 ADDRESS
|
||
MOVE T1,P1 ;FOR CALL TO UBGOOD
|
||
PUSHJ P,UBGOOD## ;SEE IF THAT DZ11 EXISTS
|
||
JRST DZINI8 ;HAVE DONE ALL LEGAL ONES
|
||
LDB T1,[POINT 6,P3,32] ;GET DZ11 UNIT NUMBER
|
||
SETZM DZDSTB##(T1) ;INITIALIZE THE DATASET TABLE
|
||
MOVEI T1,DZCLR ;TO MASTER CLEAR THE DZ11
|
||
WRIO T1,DZCSR(P1) ;CLEAR THE DZ11
|
||
MOVSI T2,1 ;STALL COUNTER
|
||
TIOE T1,DZCSR(P1) ;DID INITIALIZE CLEAR YET ?
|
||
SOJG T2,.-1
|
||
JUMPLE T2,DZINI8 ;DZ11 IS BAD
|
||
MOVSI T1,(XPCW) ;BUILD JSR DZ#VA
|
||
MOVE T2,T1 ;BUILD JSR DZ#VB
|
||
HLR T1,P2 ;ADD DZ#VA
|
||
HRRI T2,DZ0VB##-DZ0VA##(T1) ;ADD DZ#VB
|
||
DMOVEM T1,(P2) ;ADD JSR'S TO INTERRUPT TABLE
|
||
ADD P2,[2*<DZ0VB##-DZ0VA##>,,2] ;SO NEXT SET OF JSR'S ARE RIGHT
|
||
MOVEI T1,DZTIEN!DZRIEN!DZMSCN ;TRANS & RECV INT ENABLE
|
||
WRIO T1,DZCSR(P1) ; AND MASTER SCAN ENABLE
|
||
DZINI4: SETZM DZCHTB##(P3) ;CLEAR OUTPUT WORD FOR LINE
|
||
MOVSI T1,DZMABL ;AUTOBAUD LINE FLAG
|
||
ANDM T1,DZMSTS##(P3) ;REINITIALIZE DATASET QUEUE WORD
|
||
MOVEI T1,1 ;BIT FOR DATA TERMINAL READY
|
||
MOVE T2,P3 ;COPY LINE NUMBER
|
||
ANDI T2,7 ;LEAVE ONLY RELATIVE LINE NUMBER
|
||
LSH T1,(T2) ;MAKES RIGHT BIT FOR DTR
|
||
MOVE T3,LINTAB##(P3) ;GET LDB ADDRESS
|
||
MOVE T3,LDBDCH##(T3) ;GET CHAR BITS
|
||
TRNE T3,LDRDSD## ;DATASET LINE?
|
||
JRST [BCIOB T1,DZDTR(P1) ;YES--PREVENT DATASET FROM ANSWERING
|
||
MOVSI T1,DZMABL ;MAKE ALL DATASET LINES
|
||
IORM T1,DZMSTS##(P3) ;BE AUTOBAUD LINES
|
||
JRST DZINI5] ;DONE WITH DATASET CASE
|
||
BSIOB T1,DZDTR(P1) ;LOCAL LINE--SET DTR NOW
|
||
SKIPL DZMSTS##(P3) ;SKIP IF AUTOBAUD LINE
|
||
TROA T2,DZ1RXO!5B27!DZ8BIT ;NO--RECEIVER ON, 300 BAUD,
|
||
DZINI5: IOR T2,SPD240 ;YES--SETUP HIGH-SPEED AUTOBAUD VALUES
|
||
WRIO T2,DZLPR(P1) ; 1 STOP BIT, 8BIT CHARS
|
||
AOS P3 ;HAVE SETUP NEXT LINE
|
||
CAIE P3,M.DZNL## ;HAVE WE DONE ALL LINES WE SHOULD ?
|
||
JRST DZINI2 ;DO NEXT LINE
|
||
DZINI8: MOVEM P3,DZMAXL ;SAVE NUMBER OF DZ11 LINES
|
||
SETZM DZLIEN ;INITALIZE ERROR COUNTER
|
||
POPJ P,0 ;RETURN FROM DZINI
|
||
SUBTTL CHECK TO SEE IF DZ11 IS OFFLINE
|
||
|
||
;HERE TO SEE IF DZ11 IS "OFFLINE" = NO DZ11 FOR LINE
|
||
; CALLED WITH U POINTING TO LDB
|
||
DZOFL: LDB T1,LDPLNO## ;GET LINE NUMBER
|
||
CAMGE T1,DZMAXL ;IN RANGE ?
|
||
AOS (P) ;YES SO IS "ONLINE"
|
||
POPJ P,0
|
||
SUBTTL ONCE A TICK ROUTINE
|
||
|
||
;HERE ONCE A TICK TO START OUTPUT
|
||
DZSTO:: PUSH P,T1 ;SAVE QUEUE POINTER ADDRESS
|
||
DZST1: PUSHJ P,TOTAKE## ;ANYTHING TO TYPE?
|
||
JRST DZQTIC ;NO--TIME DATASETS
|
||
MOVEI T1,L1RCHP##
|
||
TDNE T1,LDBBYT##(U) ;IS CHP SET?
|
||
PUSHJ P,DZCHP ;YES--GO SET SPEED
|
||
LDB T1,LDPLNO## ;GET LINE NUMBER
|
||
MOVE T1,DZMSTS##(T1) ;AND CORRESPONDING BITS
|
||
TLNE T1,DZMABW!DZMCRW ;IN CARRIER OR AUTOBAUD WAIT?
|
||
JRST DZST2 ;YES--IGNORE THIS FOR OUTPUT
|
||
SKIPGE LDBDCH##(U) ;DON'T START AN ACTIVE LINE
|
||
PUSHJ P,XMTCHR## ;ANY CHARS FOR THIS LINE?
|
||
JRST DZST2 ;NO--GO TO NEXT
|
||
PUSHJ P,SCNTYP ;START LINE
|
||
PUSHJ P,CLRIRM## ;CLEAR IRMA
|
||
DZST2: MOVE T1,(P) ;RESTORE QUEUE POINTER ADDRESS
|
||
JRST DZST1 ;GO SEE IF MORE TO DO
|
||
|
||
;HERE ONCE A TIC TO TIME DATASETS
|
||
|
||
DZQTIC: POP P,T1 ;RESTORE T1
|
||
SKIPG DZTTQN## ;ANY LINES IN OUR QUEUE?
|
||
POPJ P, ;NO, DONE
|
||
PUSHJ P,SAVE4## ;SAVE A REGISTER
|
||
PUSHJ P,SAVT##
|
||
SETZ P1, ;START AT BEGINNING
|
||
DZQTC1: CAML P1,DZMAXL ;DONE (DON'T PAGEFAIL ON NX DZ!)
|
||
POPJ P, ;YES, DONE WITH TIC PROCESSING
|
||
SCNOFF ;STOP WORLD
|
||
LDB T1,DZQPTM ;GET TIME TO GO
|
||
SOSL T1 ;COUNT DOWN
|
||
DPB T1,DZQPTM ; MORE TO GO, PUT TIME LEFT BACK
|
||
JUMPN T1,[SCNON ;EXIT IF NOTHING TO DO YET
|
||
JRST DZQTC2] ;NEXT LINE...
|
||
HRRZ T1,DZMSTS##(P1) ;TIME'S UP, GET ROUTINE TO CALL
|
||
HLLZS DZMSTS##(P1) ;CLEAR ROUTINE, SAVE STATUS
|
||
SOS DZTTQN## ;REMOVED 1 ENTRY
|
||
SCNON ;QUEUE IS FREE
|
||
SKIPN T1 ;IS ROUTINE LEGAL?
|
||
STOPCD DZQTC2,DEBUG,DQR, ;++ILLEGAL QUEUE ROUTINE
|
||
MOVE U,LINTAB##(P1) ;FIND LDB FOR THIS LINE
|
||
PUSHJ P,(T1) ;CALL ROUTINE
|
||
DZQTC2: SKIPE DZTTQN## ;MORE TO DO?
|
||
AOJA P1,DZQTC1 ;YES, DO NEXT LINE
|
||
POPJ P, ;NO, EXIT
|
||
SUBTTL ONCE A SECOND SERVICE FOR DZ11'S
|
||
|
||
;HERE ONCE A SECOND
|
||
; CHECK DZ11 FOR INTERRUPT ENABLES
|
||
; CHECK DZ11 FOR DATASET LINES
|
||
DZSEC: PUSHJ P,SAVE3## ;SAVE P1, P2, AND P3
|
||
SETZ P1, ;LINE NUMBER
|
||
MOVE P2,[DZ11BA-10] ;ADDRESS OF FIRST DZ11
|
||
MOVEI P3,DZDSTB##-1 ;DATASET TABLE FOR DZ11
|
||
SCNCK1: CAML P1,DZMAXL ;DONE ALL LINES YET ?
|
||
POPJ P,0 ;RETURN TO CLOCK
|
||
TRNE P1,7 ;FIRST LINE IN GROUP ?
|
||
JRST SCNCK3
|
||
ADDI P2,10 ;NEXT DZ11 ADR
|
||
AOS P3 ;NEXT DATASET WORD
|
||
RDIO T1,DZMSR(P2) ;GET MODEM STATUS REGISTER
|
||
HRL T1,(P3) ;GET OLD DATASET STATUS
|
||
TLC T1,(T1) ;LH IS NEW.XOR.OLD
|
||
MOVEM T1,(P3) ;SAVE IT
|
||
RDIO T1,DZCSR(P2) ;GET CONTROL AND STATUS REGISTER
|
||
TRNE T1,DZTIEN ;STILL HAVE TRANSMIT ENABLE ?
|
||
TRNN T1,DZRIEN ;AND RECEIVE ENABLE ?
|
||
JRST [MOVEI T1,DZTIEN!DZRIEN!DZMSCN ;ALL ENABLES
|
||
BSIO T1,DZCSR(P2) ;RESET ENABLES
|
||
AOS DZLIEN ;COUNT TIMES THEY DROP
|
||
JRST SCNCK3 ]
|
||
SCNCK3: MOVE U,LINTAB##(P1) ;GET LDB FOR LINE
|
||
MOVE T1,LDBDCH##(U) ;GET DEVICE BITS
|
||
TRNN T1,LDRDSD## ;IS THIS A DATASET LINE ?
|
||
JRST SCNCK8 ;NOT DATASET SO DONE WITH LINE
|
||
MOVE T1,P1 ;COPY LINE NUMBER
|
||
ANDI T1,7 ;LEAVE RELATIVE LINE NUMBER
|
||
MOVE T2,[401,,401] ;BITS FOR MASK
|
||
LSH T2,(T1) ;MAKE MASK FOR CARRIER ETC.
|
||
AND T2,(P3) ;LEAVE ONLY BITS FOR THIS LINE
|
||
TLNN T2,-1 ;DID ANYTHING CHANGE FOR THIS LINE ?
|
||
JRST SCNCK8 ;NO
|
||
TLNE T2,377 ;DID RING CHANGE?
|
||
TRNN T2,377 ;YES, IS IT NOW ASSERTED?
|
||
CAIA ;NO, CONTINUE (IN CASE CARRIER CHANGED TOO)
|
||
JRST SCNCKR ;RING CHANGED TO ASSERTED, PROCESS NEW CALL
|
||
TLNN T2,377*400 ;DID CARRIER CHANGE?
|
||
JRST SCNCK8 ;NO, ON TO NEXT LINE
|
||
TRNE T2,377*400 ;DID CARRIER GO AWAY ?
|
||
JRST SCNCKO ;NO, CARRIER ON
|
||
JRST SCNCKF ;YES, CARRIER OFF
|
||
|
||
SCNCK8: AOJA P1,SCNCK1 ;ON FOR NEXT LINE
|
||
SUBTTL ROUTINES FOR DATASET CONTROL
|
||
|
||
;THIS CODE CREATES A SMALL FRONT END FOR THE KS, AND ONLY TELLS
|
||
;SCNSER ABOUT RING, CARRIER AFTER THE ACTION IS OVER.
|
||
;
|
||
;WE ARE CALLED AT CLOCK LEVEL BY THE ONCE/SECOND DATASET POLL,
|
||
;AND BY THE ONCE/TIC EVENT TIMER IN DZQTIC
|
||
|
||
;OUR IDEA OF LINE STATUS IS KEPT IN THE LH OF DZMSTS
|
||
|
||
;BITS IN THE LH OF DZMSTS
|
||
DZMABL==(1B0) ;AUTOBAUD LINE
|
||
DZMCRW==(1B1) ;IN CARRIER WAIT
|
||
DZMABW==(1B2) ;IN AUTOBAUD WAIT
|
||
DZMABF==(1B3) ;AUTOBAUD IGNORE NEXT CHAR
|
||
DZMCON==(1B4) ;CARRIER IS ON
|
||
DZMLSP==(1B5) ;AUTOBAUDING AT LOW "LOOK" SPEED
|
||
DZMLIB==(1B6) ;LAST INPUT WAS BREAK (FRAMING ERROR)
|
||
;BITS 7-17 ARE TIME FIELD (MAX = 2047 TICS, OR APPROX 34 SEC @ 60HZ)
|
||
|
||
DZQPTM: POINT 11,DZMSTS##(P1),17 ;POINTER TO TIME FIELD
|
||
|
||
;HERE ON A RING TRANSITION
|
||
|
||
SCNCKR: MOVSI T2,DZMCON ;WAS CARRIER ON?
|
||
TDNE T2,DZMSTS##(P1) ;...
|
||
JRST [MOVEI T2,1 ;YES, START WITH LINE ZERO
|
||
LSH T2,(T1) ;POSITION TO CORRECT LINE
|
||
ANDCAM T2,(P3) ;ENSURE RING IS SEEN AGAIN ON NEXT POLL
|
||
PUSHJ P,REPCOF ;BETTER TELL SCNSER
|
||
JRST SCNCK8] ;...
|
||
MOVEI T2,1 ;START WITH LINE 0
|
||
LSH T2,(T1) ;POSITION TO CORRECT LINE
|
||
MOVEI T1,ST.NRL ;ALLOWED TO ANSWER?
|
||
TDNE T1,STATES## ;...
|
||
JRST SCNCK8 ;NO, IGNORE RING
|
||
BSIOB T2,DZDTR(P2) ;ANSWER THE PHONE
|
||
MOVSI T1,DZMCRW ;IN CARRIER WAIT
|
||
IORM T1,DZMSTS##(P1) ;FOR NOW
|
||
MOVE T1,[CRWTMO,,^D<20K>] ;WAIT 20 SECONDS FOR CARRIER
|
||
PUSH P,T2 ;SAVE LINE BIT
|
||
PUSHJ P,DZQADD ;ADD TO QUEUE
|
||
POP P,T2 ;GET LINE BIT BACK
|
||
LSH T2,^D8 ;SHIFT OVER TO CARRIER REGISTER
|
||
TDNE T2,(P3) ;IS CARRIER UP NOW TOO?
|
||
JRST SCNCKO ;YES, DO CARRIER UP PROCESSING AS WELL
|
||
JRST SCNCK8 ;DONE WITH THIS LINE
|
||
|
||
;HERE IF CARRIER DOESN'T APPEAR, OR AUTOBAUD FAILS
|
||
|
||
CRWTMO: PUSHJ P,DZUADR ;GET UNIBUS ADDRESS
|
||
MOVE T4,LDBDCH##(U) ;GET SOME BITS
|
||
TRNN T4,LDRDSD## ;IS THIS A DATASET?
|
||
JRST ABRTMO ;NO--HANDLE AUTOBAUD TIMEOUT
|
||
BCIOB T1,DZDTR(T2) ;YES--HANG UP
|
||
REPCOF: MOVSI T1,DZMCON!DZMCRW!DZMABW!DZMABF ;GET STATUS BITS
|
||
ANDCAM T1,DZMSTS##(P1) ;CAN'T BE PROCESSING A CALL
|
||
MOVE U,P1 ;SET UP U
|
||
MOVEI T3,DSTOFF## ;CODE FOR CARRIER WENT AWAY
|
||
PJRST DSCREC## ;BETTER TELL SCNSER
|
||
;HERE WHEN CARRIER COMES ON
|
||
|
||
SCNCKO: MOVSI T2,DZMCON ;CARRIER ON BIT
|
||
IORB T2,DZMSTS##(P1) ;SET IT
|
||
TLNN T2,DZMCRW ;IN CARRIER WAIT?
|
||
JRST [MOVEI T3,DSTON## ;NO, BETTER TELL SCNSER
|
||
JRST SCNDST]
|
||
.CREF DZMABL
|
||
SKIPL T2,DZMSTS##(P1) ;AUTOBAUD LINE?
|
||
JRST [MOVE T1,[DZCXUP,,^D<2K>] ;NO, WAIT 2 SEC FOR CARRIER
|
||
PUSHJ P,DZQADD ;TO BECOME SOLID
|
||
JRST SCNCK8] ;THEN TELL SCNSER
|
||
MOVE T1,P1 ;COPY LINE NUMBER
|
||
ANDI T1,7 ;ONLY WITHIN DZ
|
||
TLNE T2,DZMLSP ;LOOKING AT LOW SPEED?
|
||
TDOA T1,SPD300 ;YES, TURN ON AT 300 BAUD
|
||
IOR T1,SPD240 ;TURN ON RECEIVER AT 2400 BAUD
|
||
WRIO T1,DZLPR(P2) ;...
|
||
MOVE T1,[DZABCS,,^D<2K>] ;WAIT 2 SEC FOR CARRIER TO SETTLE
|
||
PUSHJ P,DZQADD ;...
|
||
JRST SCNCK8 ;DONE WITH THIS LINE
|
||
|
||
;HERE 2 SEC AFTER LAST CARRIER ON TRANSITION FOR A NON-AUTOBAUD DATASET
|
||
;OR AT END OF AUTOBAUD SEQUENCE
|
||
|
||
DZCXUP: PUSHJ P,DZUADR ;FIND DZ ON UNIBUS
|
||
MOVE T4,LDBDCH##(U) ;GET SOME BITS
|
||
TRNN T4,LDRDSD## ;IS THIS A DATASET?
|
||
JRST ABRFIN ;NO--HANDLE AUTOBAUD TERMINATION
|
||
TIONB T1,DZCAR(T2) ;YES--IS CARRIER STILL THERE?
|
||
JRST REPCOF ;NO, IT DIED
|
||
MOVSI T3,DZMCRW ;CARRIER WAIT BIT
|
||
TDNN T3,DZMSTS##(P1) ;WERE WE IN CARRIER/AUTOBAUD SEQUENCE?
|
||
JRST ABRFIN ;NO--IT WAS .TOEAB. DON'T SIGNAL RING AGAIN.
|
||
MOVSI T3,DZMCRW!DZMABW!DZMLIB ;CAN'T BE IN THESE STATES ANYMORE
|
||
ANDCAM T3,DZMSTS##(P1) ;SO GET OUT
|
||
MOVE U,P1 ;SET UP U FOR SCNSER
|
||
MOVEI T3,DSTRNG## ;RING
|
||
PUSHJ P,DSCREC## ;SCNSER
|
||
MOVEI T3,DSTON## ;CARRIER UP
|
||
PJRST DSCREC## ;SCNSER
|
||
|
||
;HERE 2 SEC AFTER AUTOBAUD DATASET HAS SETTLED DOWN
|
||
|
||
DZABCS: PUSHJ P,DZUADR ;FIND DZ ON UNIBUS
|
||
TIONB T1,DZCAR(T2) ;IS CARRIER STILL UP?
|
||
JRST REPCOF ;NO, IT DIED
|
||
MOVSI T3,DZMABF ;FLUSH BIT
|
||
SCNOFF ;PREVENT FUNNY RACES
|
||
ANDCAM T3,DZMSTS##(P1) ;MAKE SURE NOT FLUSHING
|
||
MOVSI T3,DZMABW!DZMCRW;AND AUTOBAUD WAIT
|
||
IORM T3,DZMSTS##(P1) ;HAS BEGUN
|
||
SCNON ;OK NOW
|
||
MOVE T1,[CRWTMO,,^D<30K>] ;ALLOW 30 SEC FOR AUTOBAUD SEQUENCE
|
||
PJRST DZQADD ;...
|
||
;HERE WHEN CARRIER DROPS
|
||
|
||
SCNCKF: MOVSI T2,DZMCON ;REMEMBER DROP
|
||
ANDCAB T2,DZMSTS##(P1) ;...
|
||
TLNN T2,DZMABW ;IF AWAITING AUTOBAUD,
|
||
TLNN T2,DZMCRW ;OR NOT IN CARRIER WAIT,
|
||
TRNA ;THEN TELL SCNSER
|
||
JRST SCNCK8 ;NO--IGNORE CARRIER DROP
|
||
MOVEI T3,DSTOFF## ;OTHERWISE LET SCNSER WORRY
|
||
SCNDST: MOVE U,P1 ;SET UP U FOR SCNSER
|
||
PUSHJ P,DSCREC## ;TELL SCNSER WHAT HAPPENED
|
||
JRST SCNCK8 ;AND CONTINUE SCAN
|
||
|
||
;ROUTINE TO ADD AN ENTRY TO THE DATASET TIMER QUEUE
|
||
;
|
||
;CALL: T1/ROUTINE TO CALL,,TIME IN MS
|
||
; PUSHJ P,DZQADD
|
||
;
|
||
;ROUTINE WILL BE CALLED WITH P1 = LINE # AND U = LINTAB(P1) BY DZQTIC
|
||
|
||
DZQADD: MOVEI T2,-1 ;MASK FOR ROUTINE ADDRESS
|
||
SCNOFF ;NO RACES
|
||
TDNN T2,DZMSTS##(P1) ;REPLACING ENTRY IN Q?
|
||
AOS DZTTQN## ;NO, NEW ENTRY
|
||
HLRM T1,DZMSTS##(P1) ;SET UP ROUTINE ADDRESS
|
||
HRRZS T1 ;GET TIME IN MS
|
||
IMUL T1,TICSEC## ;CONVERT TO K TICS
|
||
HRRZ T2,STOPAT## ;GET # TICS BETWEEN CALLS - 1
|
||
IDIVI T1,1(T2) ;AND ADJUST FOR M.STOF
|
||
IDIVI T1,^D1000 ;TICS
|
||
SKIPE T2
|
||
AOS T1
|
||
DPB T1,DZQPTM ;STORE TICS TO GO
|
||
SCNON ;Q ALL SET
|
||
POPJ P,
|
||
SUBTTL ROUTINE TO CONVERT A LINE NUMBER TO A UBA ADDRESS
|
||
|
||
;CALL: P1/LINE NUMBER
|
||
; PUSHJ P,DZUADR
|
||
; T1/BIT CORRESPONDING TO LINE NUMBER
|
||
; T2/UNIBUS ADDRESS
|
||
|
||
DZUADR: MOVE T2,P1 ;COPY LINE NUMBER
|
||
ANDI T2,7 ;MAKE DZ-RELATIVE
|
||
MOVEI T1,1 ;START WITH LINE 0
|
||
LSH T1,(T2) ;SHIFT TO THIS LINE NUMBER
|
||
MOVE T2,P1 ;GET LINE NUMBER
|
||
ANDI T2,770 ;ONLY DZ PART
|
||
ADD T2,[DZ11BA] ;CONVERT TO UNIBUS ADDRESS
|
||
POPJ P,
|
||
SUBTTL INTERRUPT -- RECEIVER
|
||
|
||
;HERE ON AN A VECTOR INTERRUPT ... RECEIVER
|
||
DZVCAF: MOVEM T1,DZMSTS##(U) ;UPDATE SOFTWARE STATUS
|
||
DZVECA::RDIO T3,DZRBUF(P1) ;GET RECEIVED CHARACTER
|
||
TRNN T3,DZRDVL ;IS DATA VALID ?
|
||
POPJ P, ;DISMISS INTERRUPT
|
||
TRNE T3,DZROVR ;OVERRUN ?
|
||
AOS DZOVRC ;COUNT TIMES THAT HAPPENS
|
||
LDB U,[POINT 3,T3,27] ;GET RELATIVE LINE NUMBER
|
||
ADDI U,-<777777&DZ11BA>(P1) ;MAKE LINE NUMBER
|
||
CAML U,DZMAXL ;IS LINE NUMBER IN RANGE
|
||
JRST DZVECA ;NO SO IGNORE IT
|
||
MOVE T1,DZMSTS##(U) ;GET SOFTWARE STATUS
|
||
TLZE T1,DZMABF ;IF FLUSHING AB JUNK, TRASH CHAR
|
||
JRST DZVCAF ;IGNORE JUST ONE
|
||
MOVE T2,LINTAB##(U) ;GET LDB ADDRESS
|
||
MOVE T2,LDBDCH##(T2) ;GET CHAR BITS
|
||
TLNN T1,DZMABW ;ASSUME ABW CLEARED BY REPCOF
|
||
TRNN T2,LDRDSD## ;DATASET LINE?
|
||
JRST DZVCA2 ;NO, SKIP DATASET CODE
|
||
TLNN T1,DZMCRW ;IF WAITING FOR CARRIER, IGNORE THIS CHAR
|
||
TLNN T1,DZMCON ;IS CARRIER ON?
|
||
JRST DZVECA ;NO, TRASH CHARACTER
|
||
DZVCA2: TLNN T1,DZMABW ;IN AUTOBAUD WAIT?
|
||
JRST DZVCA1 ;NO, PROCESS NORMALLY
|
||
;THE FOLLOWING AUTOBAUD ALGORITHM COMES FROM DNTTY.P11, THE ANF-10 CODE
|
||
|
||
ANDI T3,377 ;REDUCE TO DATA BITS
|
||
TLNN T1,DZMLSP ;LOOKING AT LOW SPEED?
|
||
SKIPA T2,[POINT 18,ATOHSP] ;NO, USE HIGH SPEED TABLE
|
||
SKIPA T2,[POINT 18,ATOLSP] ;YES, USE LOW SPEED TABLE
|
||
ANDI T3,376 ;IN HIGH SPEED MODE, KEEP ONLY THESE BITS
|
||
ILDB T1,T2 ;GET SWITCH CHARACTER
|
||
CAMN T1,T3 ;MATCH?
|
||
JRST DZVCAC ;YES, SWITCH NOW
|
||
DZVCA0: ILDB T1,T2 ;GET CODE FOR NEXT SPEED
|
||
JUMPE T1,DZVCAC ;IF NO MATCH, CHANGE SPEEDS
|
||
XOR T1,T3 ;SEE IF CHARACTER MATCHES
|
||
TRNE T1,377 ;DOES IT?
|
||
JRST DZVCA0 ;NOPE, TRY NEXT
|
||
MOVSI T2,DZMABF ;BIT TO FLUSH NEXT CHARACTER
|
||
TRZE T1,400K ;SHOULD WE?
|
||
IORM T2,DZMSTS##(U) ;YES
|
||
LSH T1,-^D9 ;GET SPEED CODE (9 BITS = READABLE TBL CREF)
|
||
MOVE T2,SPDXTB(T1) ;TURN INTO DZ BITS
|
||
DPB T1,[POINT 4,T1,35-4] ;COPY SPEED CODE
|
||
MOVE T3,LINTAB##(U) ;FIND LDB
|
||
EXCH U,T3 ;SET UP U
|
||
DPB T1,LDPSPD## ;STORE SPEED FOR PROGRAM
|
||
MOVE U,T3 ;RESTORE U
|
||
ANDI T3,7 ;MAKE DZ LINE
|
||
IORI T2,(T3) ;SET FOR LPR
|
||
WRIO T2,DZLPR(P1) ;SET SPEED, STOP BITS, RCV ENABLE, 8 BIT CHARS
|
||
EXCH P1,U ;SET UP P1
|
||
MOVE T1,[DZCXUP,,^D<1>] ;TELL SCNSER LINE IS UP -- SOON
|
||
PUSHJ P,DZQADD ;QUEUE THE TRANSACTION
|
||
EXCH P1,U ;RESTORE P1
|
||
JRST DZVECA ;PROCESS NEXT CHAR IN SILO
|
||
|
||
;HERE TO SWITCH TO THE OTHER AB SPEED
|
||
DZVCAC: MOVSI T1,DZMLSP ;GET THE LOW SPEED LOOK BIT
|
||
XORB T1,DZMSTS##(U) ;LOOK AT THE OTHER SPEED
|
||
TLNE T1,DZMLSP ;WHAT SPEED ARE WE LOOKING AT NOW?
|
||
SKIPA T2,SPD300 ;LOW, USE 300
|
||
SKIPA T2,SPD240 ;HIGH, USE 2400
|
||
TLO T1,DZMABF ;LOW MUST FLUSH NEXT CHAR
|
||
MOVE T3,U ;GET LINE NUMBER
|
||
ANDI T3,7 ;MAKE DZ LINE
|
||
IORI T2,(T3) ;SET FOR LPR
|
||
WRIO T2,DZLPR(P1) ;SET SPEED, STOP BITS, RCV ENABLE, 8 BIT CHARS
|
||
JRST DZVCAF ;STORE STATUS AND CHECK NEXT SILO CHAR
|
||
;AUTOBAUD DETECT TABLES
|
||
|
||
DEFINE CH(CHR,SPD,FLG<0>),< <<SPD_9>+CHR+FLG> >
|
||
;400K MEANS IGNORE NEXT CHAR. SPD IS INDEX INTO SPDXTB
|
||
|
||
;NOTE THAT LOW BIT MASKED OFF BEFORE COMPARE
|
||
ATOHSP: XWD 000 ,CH(200,7,400K) ;LOW-SPD SWITCH, 300 CR/^C O/E
|
||
XWD CH(036,11,400K) ,CH(346,11,400K);1200 ^C O/E, 1200 CR O/E
|
||
XWD CH(006,12) ,CH(072,12) ;1800 ^C O/E, 1800 CR O/E
|
||
XWD CH(002,13) ,CH(202,13) ;2400 ^C EVN, 2400 ^C ODD
|
||
XWD CH(214,13) ,CH(014,13) ;2400 CR EVN, 2400 CR ODD
|
||
XWD CH(370,14) ,CH(360,14) ;4800 ^C ODD, 4800 ^C EVN
|
||
XWD CH(374,14) ,CH(376,15) ;4800 ^C EVN, 9600 ^C OR CR O/E
|
||
EXP 0 ;TERMINATOR
|
||
|
||
ATOLSP: XWD 377 ,CH(174,3) ;HS-SWITCH, 110 ^C O/E
|
||
XWD CH(214,3,400K) ,CH(234,3,400K) ;110 CR , 110 CR
|
||
XWD CH(346,5,400K) ,CH(036,5) ;150 CR , 150 CR
|
||
XWD CH(215,7) ,CH(015,7) ;300 CR EVN, 300 CR ODD
|
||
XWD CH(003,7) ,CH(203,7) ;300 ^C EVN, 300 ^C ODD
|
||
XWD CH(376,11) ,0 ;1200 ^C EVN, TERMINATOR
|
||
|
||
|
||
|
||
;NORMAL RECEIVED CHARACTER PROCESSING
|
||
|
||
DZVCA1: TRNE T3,DZRFRM ;CHECK FOR FRAME ERROR
|
||
JRST RCVFER ;HANDLE FRAMING ERROR
|
||
TLZE T1,DZMLIB ;CLEAR LAST-INPUT-BREAK FLAG
|
||
MOVEM T1,DZMSTS##(U) ;UPDATE STATUS BITS
|
||
ANDI T3,CK.CHR ;KEEP ONLY CHARACTER
|
||
PUSHJ P,RECINT## ;CALL SCNSER
|
||
JRST DZVECA ;CHECK FOR MORE DATA IN SILO
|
||
|
||
;HERE WHEN RECEIVED CHAR HAS A FRAMING ERROR
|
||
|
||
RCVFER: TLON T1,DZMLIB ;SET LAST-INPUT-BREAK FLAG
|
||
JRST DZVCAF ;UPDATE AND PITCH ON FIRST BREAK IN SEQUENCE
|
||
TLZ T1,DZMLIB!DZMLSP!DZMABF ;CLEAR SOME JUNK BITS
|
||
.CREF DZMABL
|
||
JUMPGE T1,DZVCAF ;SKIP THIS IF NOT AN AUTOBAUD LINE
|
||
TLO T1,DZMABW ;AND SET ANOTHER
|
||
MOVEM T1,DZMSTS##(U) ;UPDATE IN STATUS TABLE
|
||
EXCH P1,U ;SETUP LINE FOR DZQADD
|
||
MOVE T1,[CRWTMO,,^D30K] ;GIVE AUTOBAUD 30 SECONDS TO COMPLETE
|
||
PUSHJ P,DZQADD ;START THE TIMER
|
||
EXCH P1,U ;RESTORE VALUES
|
||
MOVE T1,U ;COPY LINE NUMBER
|
||
ANDI T1,7 ;DZ-RELATIVE
|
||
IOR T1,SPD240 ;HIGH-SPEED AUTOBAUD SETTINGS
|
||
WRIO T1,DZLPR(P1) ;SET IT UP
|
||
JRST DZVECA ;CHECK FOR MORE DATA IN SILO
|
||
SUBTTL INTERRUPT -- TRANSMITTER
|
||
|
||
;HERE ON AN B VECTOR INTERRUPT ... TRANSMITTER
|
||
; HERE WITH DZ11 HDW ADR IN P1
|
||
DZVECB::RDIO T1,DZCSR(P1) ;GET STATUS
|
||
TRNN T1,DZTRDY ;IS TRANSMITTER READY ?
|
||
POPJ P, ;DONE
|
||
LDB U,[POINT 3,T1,27] ;GET RELATIVE LINE NUMBER
|
||
ADDI U,-<777777&DZ11BA>(P1) ;MAKE LINE NUMBER
|
||
SKIPL T3,DZCHTB##(U) ;GET CHAR WE SAVED TO TYPE
|
||
JRST DZVCB4 ;DONE WITH LINE FOR NOW
|
||
SETZM DZCHTB##(U) ;CLEAN OUT TABLE
|
||
WRIOB T3,DZTBUF(P1) ;GIVE DATA TO DZ11
|
||
PUSHJ P,XMTINT## ;LET SCNSER KNOW WE NEED MORE DATA
|
||
JRST DZVECB ;LOOK FOR MORE LINES TO SERVICE
|
||
|
||
;HERE IF LINE DONE
|
||
DZVCB4: LDB T1,[POINT 3,U,35] ;GET RELATIVE LINE NUMBER
|
||
MOVEI T2,1 ;MASK
|
||
LSH T2,(T1) ;POSITION MASK
|
||
BCIOB T2,DZTCR(P1) ;CLEAR WANT TO TRANSMIT FLAG
|
||
JRST DZVECB ;LOOK FOR MORE LINES TO SERVICE
|
||
SUBTTL SETUP HARDWARE PARAMETERS
|
||
|
||
;SUBROUTINE TO SETUP EVERYTHING (I.E. SPEED) ACCORDING TO THE LDB
|
||
; CALL WITH:
|
||
; MOVEI U,<LDB ADR>
|
||
; PUSHJ P,DZCHP
|
||
; RETURN
|
||
DZCHP: ANDCAM T1,LDBBYT##(U) ;CLEAR CHP BIT
|
||
LDB T1,LDPLNO## ;GET LINE NUMBER
|
||
CAML T1,DZMAXL ;IS THIS POSSIBLE
|
||
POPJ P,
|
||
MOVE T2,DZMSTS##(T1) ;GET STATUS BITS
|
||
TLNE T2,DZMABW ;IF IN AUTOBAUD WAIT,
|
||
POPJ P, ;CAN'T DO IT
|
||
LDB T2,LDPSPD## ;GET LINE SPEED
|
||
MOVE T3,T1 ;COPY LINE NUMBER
|
||
ANDI T3,770 ;STRIP RELATIVE LINE NUMBER
|
||
ADD T3,[DZ11BA] ;MAKES ADR OF DZ11
|
||
ANDI T1,7 ;LEAVE ONLY RELATIVE LINE NUMBER
|
||
ANDI T2,17 ;ONLY LOOK AT HALF OF SPEED
|
||
IOR T1,SPDXTB(T2) ;GET DZ11 SPEED INDEX
|
||
JUMPL T1,CPOPJ## ;CAN'T DO IT
|
||
WRIO T1,DZLPR(T3) ;SET SPEED ETC
|
||
POPJ P,
|
||
|
||
;TABLE TO TRANSLATE DH11 INDEXES TO DZ11 INDEXES
|
||
|
||
SPDXTB: EXP DZ8BIT ; 0 BAUD
|
||
EXP DZ1RXO!<0*400>!DZ8BIT ; 50 BAUD
|
||
EXP DZ1RXO!<1*400>!DZ8BIT ; 75 BAUD
|
||
EXP DZ1RXO!<2*400>!DZ2STP!DZ8BIT ; 110 BAUD
|
||
EXP -1 ; 134.5 BAUD
|
||
EXP DZ1RXO!<4*400>!DZ8BIT ; 150 BAUD
|
||
EXP -1 ; 200 BAUD
|
||
SPD300: EXP DZ1RXO!<5*400>!DZ8BIT ; 300 BAUD
|
||
EXP DZ1RXO!<6*400>!DZ8BIT ; 600 BAUD
|
||
EXP DZ1RXO!<7*400>!DZ8BIT ; 1200 BAUD
|
||
EXP DZ1RXO!<10*400>!DZ8BIT ; 1800 BAUD
|
||
SPD240: EXP DZ1RXO!<12*400>!DZ8BIT ; 2400 BAUD
|
||
EXP DZ1RXO!<14*400>!DZ8BIT ; 4800 BAUD
|
||
EXP DZ1RXO!<16*400>!DZ8BIT ; 9600 BAUD
|
||
EXP -1 ; EXTERNAL INPUT A BAUD
|
||
EXP -1 ; EXTERNAL INPUT B BAUD
|
||
SUBTTL LINE PARAMETER CONTROL
|
||
|
||
;CALLED FROM LDBISR DISPATCH WITH LPC TRANSACTION IN T3
|
||
; AND LDB ADDRESS IN U.
|
||
|
||
DZLPC: MOVE T1,T3 ;COPY TRANSACTION CODE
|
||
LSH T1,-8 ;ISOLATE SUB-FUNCTION
|
||
CAIE T1,LPCABR ;IS IT AUTOBAUD REQUEST?
|
||
POPJ P, ;NO--WE HANDLE NO OTHERS
|
||
LDB T1,LDPLNO## ;YES--GET LINE NUMBER
|
||
CAML T1,DZMAXL ;IS IT IN RANGE?
|
||
POPJ P, ;NO--IGNORE IT
|
||
PUSHJ P,SAVE1## ;YES--PRESERVE A REGISTER
|
||
MOVE P1,T1 ;SAVE LINE NUMBER
|
||
PUSHJ P,DZUADR ;GET DZ BASE ADDRESS IN T2
|
||
MOVE T1,P1 ;COPY LINE NUMBER
|
||
ANDI T1,7 ;MAKE DZ-RELATIVE
|
||
MOVSI T3,DZMABL ;AUTOBAUD LINE BIT
|
||
IORB T3,DZMSTS##(P1) ;SET AND FETCH STATUS
|
||
MOVE T4,LDBDCH##(U) ;GET SOME BITS
|
||
TRNN T4,LDRDSD## ;IS THIS A DATASET?
|
||
JRST DZLPC1 ;NO--SKIP DATASET CODE
|
||
TLNN T3,DZMCRW ;IF IN CARRIER WAIT,
|
||
TLNN T3,DZMCON ;OR NO CARRIER,
|
||
POPJ P, ;PUNT THIS
|
||
DZLPC1: TLOE T3,DZMABW ;IF ALREADY WAITING,
|
||
POPJ P, ;IGNORE THIS REQUEST
|
||
SCNOFF ;FIGHT RACES
|
||
MOVSI T3,DZMABW ;AUTOBAUD WAIT
|
||
IORM T3,DZMSTS##(P1) ;START IT
|
||
IOR T1,SPD240 ;HIGH-SPEED AUTOBAUD
|
||
WRIO T1,DZLPR(T2) ;SET ITS VALUES
|
||
MOVSI T3,DZMABF!DZMLSP ;BITS TO CLEAR
|
||
ANDCAM T3,DZMSTS##(P1) ;DO IT
|
||
SCNON ;DONE WITH THIS RACE PROBLEM
|
||
MOVE T1,[CRWTMO,,^D30K] ;GIVE AUTOBAUD 30 SECONDS TO COMPLETE
|
||
PJRST DZQADD ;START THE TIMER & RETURN
|
||
|
||
ABRTMO:!
|
||
ABRFIN: MOVSI T1,DZMABW!DZMLIB!DZMLSP ;BITS TO CLEAR
|
||
ANDCAM T1,DZMSTS##(P1) ;DO IT
|
||
IFN FTNET,<
|
||
SKIPGE LDBREM##(U) ;IF A VTM,
|
||
PUSHJ P,VTMSPD## ;TELL NETVTM ABOUT THE SPEED CHANGE
|
||
>
|
||
PJRST SETCHP## ;MAKE SURE THE SPEED GETS SET
|
||
SUBTTL CONTROL OVER DATASET
|
||
|
||
;HERE TO EXERCISE CONTROL OVER A DATASET.
|
||
; CALLED WITH TRANSACTION CODE IN T3, DSCTAB INDEX IN U.
|
||
; ENTERED FROM SCNSER ONLY.
|
||
|
||
DSCTYP: CAML U,DZMAXL ;IS LINE NUMBER IN RANGE
|
||
POPJ P, ;NO JUST SAY ITS OFF
|
||
LDB T2,[POINT 3,U,35] ;GET LINE NUMBER MODULO 8
|
||
MOVEI T1,1 ;BIT FOR CARRIER ETC
|
||
LSH T1,(T2) ;PRESTO MASK
|
||
MOVE T2,U ;COPY LINE NUMBER
|
||
ANDI T2,770 ;MAKES DZ11 # * 10
|
||
ADD T2,[DZ11BA] ;MAKES ADR OF DZ11 FOR LINE
|
||
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 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.
|
||
TIOEB T1,DZCAR(T2) ;IS CARRIER ON ?
|
||
SKIPA T1,[EXP DSTON##] ;YES
|
||
MOVEI T1,DSTOFF## ;NOT ON
|
||
POPJ P,
|
||
|
||
;HERE TO DRIVE A DATASET ON.
|
||
DSDON: BSIOB T1,DZDTR(T2) ;TURN IT ON
|
||
POPJ P,
|
||
|
||
;HERE TO DRIVE A DATASET OFF.
|
||
DSDOFF: BCIOB T1,DZDTR(T2) ;CLEAR DATA TERMINAL READY
|
||
MOVSI T1,DZMCON!DZMCRW!DZMABW!DZMABF
|
||
ANDCAM T1,DZMSTS##(U) ;CLEAR OUR STATUS BITS
|
||
POPJ P,
|
||
SUBTTL TYPE A CHARACTER
|
||
|
||
;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
|
||
CAML T1,DZMAXL ;IS LINE NUMBER IN RANGE ?
|
||
POPJ P, ;NO SO DISMISS
|
||
WRPI PI.OFF ;DISABLE INTERRUPTS
|
||
HRROM T3,DZCHTB##(T1) ;SAVE CHAR TO TYPE LATER
|
||
MOVEI T3,1 ;MASK FOR LINE
|
||
MOVE T2,T1 ;COPY LINE NUMBER
|
||
ANDI T1,770 ;LEAVE ONLY DZ11 UNIT * 10
|
||
ADD T1,[DZ11BA] ;MAKE ADR OF DZ11
|
||
ANDI T2,7 ;LEAVE ONLY RELATIVE LINE NUMBER
|
||
LSH T3,(T2) ;POSITION MASK
|
||
BSIOB T3,DZTCR(T1) ;LET DZ11 KNOW WE WANT TO TYPE
|
||
WRPI PI.ON ;REENABLE INTERRUPTS
|
||
POPJ P,0 ;AND RETURN
|
||
$LOW
|
||
DZLIEN: 0 ;COUNT OF LOST INTERRUPT ENABLES
|
||
DZOVRC: Z ;COUNT OF TIMES RECEIVER GETS OVERRUN
|
||
DZMAXL: 0 ;NUMBER OF DZ11 LINES
|
||
; I.E. HIGHEST DZ11 LINE #+1
|
||
|
||
$LIT
|
||
|
||
DZEND: END
|
||
|