ASMB,R,L,C
      HED QUEUE 91740-16013 REV 2026 * (C) HEWLETT-PACKARD CO. 1980 
      NAM QUEUE,17,2 91740-16013 REV.2026 800421
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977.  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,#QRN,#BUSY
      EXT #GRPM,#QCLM,#ST09 
* 
* 
* QUEUE 
* SOURCE: 91740-18013 
* BINARY: 91740-16013 
* PRGMR:  CHUCK WHELAN
* DATE:   DEC 1976
* 
* 
* 
*     QUEUE IS THE DS/1000 PROGRAM SCHEDULED BY COMMUNICATIONS
*     DRIVER DVA65 WHEN A NEW REQUEST IS TO BE READ FROM A COMMUNICATIONS 
*     LINE.  THE REQUEST AND DATA BUFFER LENGTHS ARE PASSED TO QUEUE
*     IN THE EQT EXTENSION FOR THE CORRESPONDING LINE.  QUEUE FIRST 
*     CHECKS THE VALIDITY OF THE INTERRUPT. IF IT IS NOT FROM AN INITIALIZED
*     DVA65 CHANNEL OR IF IT IS A SPURIOUS INTERRUPT FROM ANOTHER 
*     I/O SLOT, THE INTERRUPT WILL BE IGNORED.  IF THE PASSED LENGTHS 
*     ARE NOT WITHIN THE ALLOWABLE RANGE (6<REQ.LENG.<63) OR
*     (DATA LENG.<=4096), QUEUE SENDS A STOP VIA THE DRIVER.
*     IF ALL IS OK, QUEUE DOES A CLASS I/O READ TO EITHER PROGRAM 
*     GRPM'S CLASS OR PROGL'S CLASS (IF IT IS AN CBL DOWNLOAD 
*     REQUEST).  IF AN IMMEDIATE REJECT OF THE REQUEST OCCURS DUE 
*     TO INSUFFICIENT SYSTEM AVAILABLE MEMORY, QUEUE SENDS A STOP 
*     VIA THE DRIVER.  IF THE READ IS ALLOWED, AND THERE ARE NO 
*     ACTIVE TCB'S, QUEUE ATTEMPTS TO HANG ON THE QUIESCENT RN
*     IF THE SYSTEM IS INDEED QUIESCING, THIS WILL CAUSE THE
*     DRIVER TO SPEEDILY REJECT (REMOTE BUSY) ANY INCOMING REQUESTS 
*     SINCE IT WILL BE UNABLE TO SCHEDULE QUEUE.  IF THE RN ISN'T 
*     LOCKED, QUEUE TERMINATES. 
* 
* 
*     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.  LENGTHS OUT OF RANGE - SEND A STOP
*     5.  GRPM'S CLASS IS BAD - REPORT CATASTROPHIC ERROR 
*     6.  NOT ENOUGH SYS. AVAIL. MEM. - SEND STOP 
* 
      SKP 
QUEUE STB EQT4      SAVE EQT 4 ADDRESS FROM DRIVER
      CLA 
      STA LU
      LDA 1,I       GET EQT 4 
      AND B77       PICK-UP SELECT CODE 
      STA SCODE     AND SAVE IT LOCALLY 
      INB           BUMP POINTER TO EQT 5 
      LDA 1,I       GET EQT 5 
      ALF,ALF       ROTATE
      AND B77       AND ISOLATE EQUIP TYPE
      CPA B65       IS INTERRUPT FROM DVR65?
      RSS           YES 
      JSB ERR       NO - IGNORE IT
      ADB K6        POINT TO EQT11
      LDA 1,I       GET EQT11 CONTENTS
      SZA,RSS       IS DRIVER INITIALIZED?
      JSB ERR       NO - ILLEGAL INTERRUPT
* 
      CLB 
      LDA EQTA      GET FWA EQT AREA
      CMA,INA       MAKE IT NEGATIVE
      ADA EQT4      ADD THE ADDRESS OF EQT4 
      DIV K15       DIVIDE BY 15 TO GET EQT # 
      INA           BUMP BY ONE 
      STA EQT#      AND SAVE EQT #
      LDB LUMAX     NO OF LU'S
      CBX           USE X AS COUNTER
      ADB DRT       POINT TO END OF DRT TABLE 
* 
NEXT  ADB N1        DECREMENT DRT POINTER 
      LDA 1,I       GET DRT ENTRY 
      AND B77       ISOLATE EQT # 
      CPA EQT#      MATCH?
      JMP FOUND     YES 
      DSX           COUNT 
      JMP NEXT      STILL MORE, ITERATE 
      JSB ERR       NO LU, IGNORE INTERRUPT 
* 
FOUND CXB 
      STB LU        FOUND A VALID LU - SAVE IT
      ADB ZBIT      BIT 12 INDICATES CONTROL BUFR 
      STB CONWD 
* 
*  GET AND VERIFY DATA AND REQUEST LENGTHS PASSED IN EQT EXTENSION
      LDB EQT4
      ADB K9        POINT TO EQT13
      LDB 1,I       GET EXTENSION AREA ADDRESS
      ADB K2        EXT(2) HAS REQUEST LENGTH 
      LDA 1,I       GET IT
      STA RLEN      SAVE IT 
      SSA           POSITIVE? 
      JMP SSTOP     NO, ERROR 
      ADA N64 
      SSA,RSS       REQ LENGTH > 63?
      JMP SSTOP     YES, CAN'T ACCEPT IT
      INB           EXT(3) HAS DATA LENGTH
      LDA 1,I       GET IT
      SSA 
      JMP SSTOP     LENGTH ERROR
      STA DLEN      SAVE IT 
      ADA N4097 
      SSA,RSS       DATA LENGTH > 4096? 
      JMP SSTOP     YES, CAN'T ACCEPT IT
* 
      LDA DLEN
      LDB RLEN
      CPA K2        IF DATA LENGTH=2, AND 
      SZB            REQUEST LENGTH=0,
      JMP GRPCL       THIS IS A NON-CBL RQST, ELSE
      JSB RNRQ      CHECK FOR QUIESCENT SYSTEM
      DEF *+4 
      DEF NWGLC     LOCK WORD:NO-WAIT,NO-ABORT,GLOBAL LOCK & CLEAR
      DEF #QRN      QUIESCENT SYSTEM RN 
      DEF EQT4      RETURN STATUS HERE
      JSB ERR       ERROR RETURN
      LDA EQT4      IS THIS SYSTEM
      CPA K7          QUIESCED? 
      JMP SSTOP     YES, SEND STOP
      LDA #ST09+1   THIS IS AN CBL DOWNLOAD REQUEST,
      JMP READ       USE PROGL'S CLASS
* 
*     NON-CBL REQUEST.
*     CHECK REQUEST LENGTH >= 7 
* 
GRPCL EQU * 
      ADB N7
      SSB 
      JMP SSTOP     ILLEGAL LENGTH: SEND 'STOP' 
* 
      LDA #GRPM     LENGTH OK: LOAD GRPM'S CLASS #
READ  EQU * 
      CCE,SZA,RSS 
      JMP SSTOP     SEND STOP IF NO CLASS ALLOCATED 
      RAL,ERA       SET NO-WAIT BIT IN CLASS WORD.
      STA CLASS     SAVE LOCALLY
* 
      JSB EXEC      READ THE REQUEST TO GRPM'S CLASS
      DEF *+8 
      DEF K17N      NO ABORT
      DEF CONWD 
      DEF ZERO
      DEF DLEN      RECEIVED DATA LENGTH
      DEF ZERO
      DEF RLEN      RECEIVED REQUEST LENGTH 
      DEF CLASS 
      JSB ERR       HERE IF CLASS READ FAILS
* 
      SZA           SUCCESS?
      JMP SSTOP     NO, PROBABLY NO SAM, SEND STOP VIA DRIVER 
      CPA #BUSY     ANY ACTIVE TCB'S? 
      JMP HANG      NO
* 
EXIT  JSB EXEC      TERMINATE QUEUE 
      DEF *+2 
      DEF K6
* 
HANG  JSB RNRQ      IF NONE, HANG ON #QRN - THIS IS 
      DEF *+4       A QUIESCENT CONDITION 
      DEF GLCW
      DEF #QRN
      DEF EQT4
      JSB ERR       ERROR RETURN
      JMP EXIT
      SKP 
* 
*     ERROR PROCESSING SECTION
* 
ERR   NOP           PASS ERROR INFO TO QCLM & GIVE UP 
      DST AREG      PASS REGS TO QCLM 
      LDA ERR       PICK UP ORIGINATION ADDRESS 
      STA PREG      PASS TO QCLM
      LDA #QCLM     QCLM CLASS
      SZA,RSS       IS CLASS NUMBER DEFINED?
      JMP ERR1      NO--SEND A 'STOP' 
      STA CLASS     SAVE LOCALLY
* 
      JSB EXEC      MAILBOX CLASS WRITE/READ TO QCLM
      DEF *+8 
      DEF K20N
      DEF ZERO
      DEF QBUF
      DEF K9
      DEF XEQT      PASS ID SEG ADDR
      DEF ZERO
      DEF CLASS 
ZERO  NOP           ERROR RETURN
ERR1  EQU * 
      LDA LU
      SZA,RSS       WAS LU DETERMINED?
      JMP EXIT      NO, CAN'T SEND STOP 
* 
*  CALL DRIVER TO SEND A STOP 
* 
SSTOP JSB EXEC
      DEF *+3 
      DEF K3
      DEF LU
      JMP EXIT
* 
      SKP 
* 
*     CONSTANTS AND STORAGE 
* 
* 
*     FORMAT OF BUFFER PASSED TO QCLM:
*     --------------------------------
* 
*     ****************************************
*  1  * STREAM WORD                          *  NOTE: ON 'READ' ERRORS, WORD
*     *--------------------------------------*  1 IS LINE EQT ADDRESS, WORD 
*  2  * SEQUENCE NUMBER                      *  2 CONTAINS I O STATUS.
*     *--------------------------------------*
*  3  * SOURCE (ORIGINATING) NODE NUMBER     *
*     *--------------------------------------*
*  4  * DESTINATION NODE NUMBER              *
*     *--------------------------------------*
*  5  * P-REGISTER WHEN ERROR DETECTED       *
*     *--------------------------------------*  NOTE: CERTAIN COMBINATIONS
*  6  * A-REGISTER WHEN ERROR DETECTED       *  OF A- AND B-REGISTER VALUES 
*     *--------------------------------------*  ARE USED TO FLAG SUCH CONDI-
*  7  * B-REGISTER WHEN ERROR DETECTED       *  TIONS AS "COMMUNICATIONS
*     *--------------------------------------*  READ ERROR", "TCB NOT FOUND,
*  8  * TIME OF DAY WHEN ERROR DETECTED      *  ETC.
*  9  *    (2 WORDS)                         *
*     ****************************************
* 
*   FIRST OPTIONAL PARAMETER = ID SEGMENT ADDRESS OF SENDER 
* 
*      **************************************** 
QBUF  DEC 0,0,0,0,0,0,0,0,0  ERROR BUFFER TO QCLM 
* 
STREM EQU QBUF
SEQ#  EQU QBUF+1
SRC#  EQU QBUF+2
DESTN EQU QBUF+3
PREG  EQU QBUF+4
AREG  EQU QBUF+5
BREG  EQU QBUF+6
TOD   EQU QBUF+7
* 
LUMAX EQU 1653B 
DRT   EQU 1652B 
EQTA  EQU 1650B 
XEQT  EQU 1717B 
* 
EQT4  NOP 
RLEN  NOP 
DLEN  NOP 
CLASS NOP 
EQT#  NOP 
CONWD NOP 
B77   OCT 77
B65   OCT 65
GLCW  OCT 040006
NWGLC OCT 140006    GLOBAL LOCK & CLEAR, WITHOUT WAITING, NO ABORT
K2    DEC 2 
K3    DEC 3 
K6    DEC 6 
K7    DEC 7 
K9    DEC 9 
K15   DEC 15
N1    DEC -1
N7    DEC -7
N64   DEC -64 
N4097 DEC -4097 
K17N  OCT 100021
K20N  OCT 100024
LU    NOP 
SCODE NOP 
ZBIT  OCT 10000 
* 
* 
SIZE  BSS 0 
* 
      END QUEUE 
                                                                                                                                                                                                                            