ASMB,R,L,C  
      HED QUEUE 91700-16130 REV A 760127 * (C) HEWLETT-PACKARD CO. 1976 
      NAM QUEUE,1,2 91700-16130 REV.A 760127
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
******************************************************************
      SPC 2 
      ENT QUEUE 
      EXT EXEC,RNRQ,#GRPM,#QRN,#BUSY,#QCLM,#CLWT
      IFZ 
      EXT DBUG
      XIF 
* 
* 
* QUEUE 
* SOURCE: 91700-18130 
* BINARY: 91700-16130 
* PRGMR: BOB SHATZER
* DATE: 27 JAN 76 
* 
* 
* 
*     QUEUE IS THE DS-1 PROGRAM WHICH IS SCHEDULED BY A 'REQUEST
*     COMING' BEING RECEIVED BY DVR65. QUEUE FIRST CHECKS FOR THE 
*     VALIDITY OF THE INTERRUPT. IF IT IS NOT FROM AN INITIALIZED 
*     DVR65 CHANNEL OR IF IT IS A SPURIOUS INTERRUPT FROM ANOTHER 
*     I/O SLOT, THE INTERRUPT WILL BE IGNORED. QUEUE THEN 
*     DETERMINES THE LU AND SELECT CODE OF THE INTERRUPTING 
*     CHANNEL AND DOES A RESOURCE NUMBER LOCK ON THE LINE RN
*     TO PREVENT CONTENTION PROBLEMS. THE INCOMING REQUEST IS 
*     THEN READ TO GRPM'S I/O CLASS.
* 
* 
*     ERRORS:  THE FOLLOWING ERROR CONDITIONS CAN OCCUR:
* 
*     1.  INTERRUPT NOT FROM DVR65 - IGNORE IT
*     2.  INTERRUPT NOT FROM INITIALIZED COMM LINE - CLEAR THE
*                   DRIVER
*     3.  INTERRUPT FROM NON-EXISTANT LU - IGNORE IT
*     4.  BAD LRN - CLEAR THE DRIVER AND DOWN THE EQT 
*     5.  GRPM'S CLASS IS BAD - REPORT CATASTROPHIC ERROR 
*     6.  NOT ENOUGH SYS. AVAIL. MEM. - SEND STOP 
* 
*     ALL ERROR PROCESSING IS DONE BY THE DISC-RESIDENT MODULE
*     'QCLM'. QUEUE WRITES THE NECESSARY ERROR INFORMATION TO 
*     QCLM'S I/O CLASS AND GOES ABOUT IT'S BUSINESS. THIS IS DONE 
*     TO INCREASE THRUPUT THROUGH THE QUEUEING MODULES AND TO 
*     DECREASE THE REQUIREMENTS FOR A LARGE FOREGROUND CORE-
*     RESIDENT AREA.
* 
      SKP 
QUEUE STB EQT4      SAVE EQT 4 ADDRESS FROM DRIVER
      LDA B,I       GET SCHEDULE PARAMETER
      IFZ 
      CPA D99       IS IT 99? 
      RSS 
      JMP Q.1       NO - NORMAL SCHEDULE CALL 
      JSB DBUG      CALL DBUG 
      DEF *+1 
      JMP EXIT      EXIT WHEN DONE WITH DBUG
      XIF 
Q.1   AND B77       IF NORMAL SCHEDULE, PICK UP SELECT CODE 
      STA SCODE     AND SAVE IT LOCALLY 
      ALF,ALF       ROTATE SELECT CODE TO UPPER BYTE
      STA CHANL     AND SAVE IT IN QCB
      INB           BUMP POINTER TO EQT 5 
      LDA B,I       GET EQT 5 
      ALF,ALF       ROTATE
      AND B77       AND ISOLATE EQUIP TYPE
      CPA B65       IS INTERRUPT FROM DVR65?
      RSS           YES 
      JSB ERR0      NO - IGNORE IT
      ADB D8        INDEX TO EQT 13 ADDRESS 
      LDA B,I       GET EQT EXTENSION ADDRESS 
      LDA A,I       GET LRN FROM EXTENSION
      SZA,RSS       IS DRIVER INITIALIZED?
      JSB ERR1      NO - ILLEGAL INTERRUPT
      STA LRN       GOOD RN - SAVE IT 
* 
      CLB 
      LDA EQTA      GET FWA EQT AREA
      CMA,INA       MAKE IT NEGATIVE
      ADA EQT4      ADD THE ADDRESS OF EQT4 
      DIV D15       DIVIDE BY 15 TO GET EQT # 
      INA           BUMP BY ONE 
      STA EQT#      AND SAVE EQT NUMBER 
* 
      CLB,INB       SET UP B AS LU COUNTER
      LDA DRT       GET FWA DRT 
      STA TEMP      AND SAVE IN TEMPORARY LOCATION
NEXT  LDA TEMP,I    GET DRT ENTRY 
      AND B77       MASK OFF EQT #
      CPA EQT#      IS THE THE RIGHT ONE? 
      JMP FOUND     YES - PROCEED 
      ISZ TEMP      NO - GO TRY AGAIN 
      CPB LUMAX     ALL LU'S CHECKED? 
      JSB ERR0      YES - IGNORE INTERRUPT
      INB           NO - BUMP LU COUNTER
      JMP NEXT      AND TRY AGAIN 
* 
FOUND STB LU        FOUND A VALID LU - SAVE IT
      LDA CHANL     GET CHANNEL FROM QCB
      IOR LU        STUFF IN THE LU 
      STA CHANL     AND SAVE IT AWAY
      LDA #GRPM     GET GRPM'S CLASS NUMBER FROM RES
      STA GRPM      AND SAVE IT LOCALLY 
* 
      JSB RNRQ      DO AN RN LOCK ON THE LRN
      DEF *+4 
      DEF LGNW      LOCK GLOBAL,NO WAIT,NO ABORT
      DEF LRN 
      DEF EQT4
      JSB ERR2      ERROR RETURN
* 
      JSB EXEC      READ THE REQUEST TO GRPM'S CLASS
      DEF *+8 
      DEF D17I
      DEF LU
      DEF ZERO
      DEF D35 
      DEF LU
      DEF SCODE 
      DEF GRPM
      JSB ERR3      HERE IF CLASS READ FAILS
* 
      LDA #BUSY     GET # OF TCB'S COUNTER
      SZA           ANY ACTIVE TCB'S? 
      JMP EXIT      YES - DO NORMAL EXIT
      JSB RNRQ      IF NONE, HANG ON #QRN - THIS IS 
      DEF *+4       A QUIESCENT CONDITION 
      DEF GLCW
      DEF #QRN
      DEF EQT4
      JSB ERR0      ERROR RETURN
EXIT  JSB EXEC      TERMINATE QUEUE 
      DEF *+2 
      DEF D6
* 
      SKP 
* 
*     ERROR PROCESSING SECTION
* 
ERR0  NOP           HERE TO GIVE UP AND TERMINATE 
      DST REGS      SAVE REGISTERS IN QCB 
      CLA           SET QCB CONTROL WORD TO ZERO
      LDB ERR0      PICK UP ORIGINATION ADDRESS 
      JMP ERRN      AND GO TO GENERAL ERROR PROCESSOR 
* 
ERR1  NOP           HERE TO CLEAR DRIVER
      DST REGS
      LDA B10 
      LDB ERR1
      JMP ERRN
* 
ERR2  NOP           HERE TO CLEAR AND DOWN EQT
      DST REGS
      LDA B30 
      LDB ERR2
      JMP ERRN
* 
ERR3  NOP           HERE TO REPORT CATASTROPHIC ERROR 
      DST REGS
      LDA BIT15 
      LDB ERR3
* 
ERRN  STA QCB       SAVE CONTROL WORD 
      ADB M1        SUBTRACT 1 FROM ERROR ADDRESS 
      STB ERRAD     AND SAVE IT IN THE QCB
      JSB #CLWT     WRITE QCB TO QCLM 
      DEF *+6 
      DEF #QCLM 
      DEF QCB 
      DEF D7
      DEF XEQT
      DEF ZERO
      NOP           ERROR RETURN
      JMP EXIT      AND GO TERMINATE
* 
      SKP 
* 
*     CONSTANTS AND STORAGE 
* 
A     EQU 0B
B     EQU 1B
LUMAX EQU 1653B 
DRT   EQU 1652B 
EQTA  EQU 1650B 
XEQT  EQU 1717B 
* 
      IFZ 
D99   DEC 99
      BSS 30        ** TEMPORARY PATCH AREA FOR DEBUG **
      XIF 
EQT4  NOP 
TEMP  NOP 
EQT#  NOP 
GRPM  NOP 
B77   OCT 77
B65   OCT 65
D8    DEC 8 
LRN   NOP 
D15   DEC 15
M1    DEC -1
LGNW  OCT 140002
GLCW  OCT 040006
D17I  ABS 100000B+17
D35   DEC 35
D6    DEC 6 
D7    DEC 7 
B10   OCT 10
B30   OCT 30
LU    NOP 
SCODE NOP 
BIT15 OCT 100000
QCB   NOP           QCB - DO NOT REORDER THESE SEVEN WORDS
ZERO  NOP           DUMMY PARAMETER 
      NOP           DUMMY PARAMETER 
CHANL NOP           REQUESTING LU AND SELECT CODE 
ERRAD NOP           ERROR ADDRESS POINTER 
REGS  NOP           REGISTER STORAGE AREA 
      NOP 
* 
      END QUEUE 
                                                                          