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