ASMB,R,L,C HED GRPM 91700-16153 REV.A 760206 * (C) HEWLETT-PACKARD CO. 1976 NAM GRPM,1,4 91700-16153 REV.A 760206 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 GRPM EXT EXEC,#GRPM,#MNUM,#LDEF,#QRN,#SRPM,RNRQ EXT #QCLM,#CLWT,#PLOG,$TIME,#RSAX * * * GRPM * SOURCE: 91700-18153 * BINARY: 91700-16153 * PRGMR: BOB SHATZER * DATE: 06 FEB 76 * * * * GRPM IS THE GENERAL REQUEST PRE-PROCESS MODULE FOR DS-1. * IT RECEIVES INCOMING REQUESTS FROM QUEUE AND PERFORMS * VALIDITY CHECKS ON THE STREAM TYPE. IF THE INCOMING * PARMB IS A REPLY, IT IS FORWARDED TO THE STREAM TYPE * WHICH IS SPECIFIED IN PARMB WORD 2. ALL INCOMING SLAVE * REQUESTS ARE FORWARDED TO SRPM FOR DISPATCHING TO THE * PROPER MONITOR. IF THE REQUEST IS FROM SCE/1, THE * INCOMING REQUEST WORD IS PUT IN WORD 2 OF AN INTERN- * ALLY GENERATED STREAM 9 PARMB, AND THE REQUESTING LU * IS INDICATED IN WORD 25. IN THIS WAY, REQUESTS COMING INTO * THE SYSTEM FROM SCE/1 ARE REFORMATTED TO BE TREATED LIKE * ANY OTHER REQUEST. * * * ERRORS: THE FOLLOWING ERROR CONDITIONS CAN OCCUR: * * 1. BAD CLASS NUMBER FOR GRPM - REPORT CATASTROPIC ERROR * 2. ILLEGAL STREAM TYPE - SEND "ILRQ" * 3. SRPM'S CLASS IS BAD - REPORT CATASTROPHIC ERROR * * ALL ERROR PROCESSING IS DONE BY THE DISC-RESIDENT MODULE * 'QCLM'. THE NECESSARY ERROR PROCESSING INFORMATION AND THE * PARMB ARE WRITTEN INTO QCLM'S I/O CLASS. THUS, GRPM IS FREE TO * SERVICE THE NEXT INCOMING REQUEST. * SKP GRPM CLA STA QCB CLEAR QCB WHERE NEEDED STA SHEDR STA ERRAD * JSB EXEC CLASS GET TO WAIT FOR PARMB DEF *+7 DEF D21I DEF #GRPM DEF PARMB DEF D35 DEF LU DEF SCODE JSB ERR1 SLA,RSS CHECK FOR GOOD DRIVER COMPLETION JSB ERR0 NO GOOD - GIVE UP DST REGS SAVE REGISTERS ON RETURN FROM DRIVER LDA SCODE GET SELECT CODE ALF,ALF ROTATE TO UPPER BYTE FOR CHANNEL WORD IOR LU STUFF IN THE LU STA CHANL AND SAVE IT IN THE CHANNEL WORD LDA PARMB GET FIRST WORD OF REQUEST SSA,RSS IS IT AN SCE1 REQUEST? (BIT15 = 1) JMP GRP.1 NO - GO PROCESS AS NORMAL REQUEST * STA PARMB+1 STORE SCE1 REQUEST IN WORD 2 OF PARMB LDA D9 GET PROGL STREAM TYPE STA PARMB AND PUT IT INTO WORD 1 OF THE PARMB * GRP.1 ALF ROTATE 'FRIENDLY' (BIT11) TO BIT 15 SSA IS IT SET? JMP GRP.2 YES - REQUEST IS FROM FRIENDLY SATELLITE DLD $TIME REQUEST IS FROM 'OLD' BCS SATELLITE DST PARMB+33 SET UP BOGUS TIME TAG GRP.2 LDA PARMB GET FIRST WORD OF THE PARMB AND B377 ISOLATE STREAM TYPE STA STREM AND SAVE IT CMA,INA ADA #MNUM SUBTRACT FROM MAX STREAM NUMBER SSA DID IT OVERFLOW? JSB ERR2 YES - ILLEGAL STREAM TYPE LDA PARMB GET STREAM WORD OF PARMB RAL ROTATE BIT 14 TO HI BIT SSA IS IT SET? JMP REPLY YES - THIS IS A REPLY LDA STREM GET STREAM TYPE MPY D3 MULTIPLY BY 3 TO SETUP OFFSET LDB #LDEF,I GET POINTER TO STREAM HEADERS ADB A INDEX BY STREAM TYPE ADB B2 STB SHEDR AND SAVE POINTER ADB B2 BUMP POINTER TO MONITOR'S ID SEG ADDR LDA B,I GET ID SEG ADDRESS SZA,RSS IS IDSEG ADDR ZERO? JSB ERR2 YES - NO SUCH MONITOR * JSB RNRQ CHECK FOR #QRN BEING SET DEF *+4 DEF GLCN GLOBAL LOCK-CLEAR NO WAIT DEF #QRN DEF STREM JSB ERR0 GET NEXT REQUEST IF ERROR LDA STREM GET RETURNED STATUS CPA D1 IS RN CLEAR? RSS YES - GO ON JSB ERR3 NO - REJECT REQUEST JSB #CLWT WRITE PARMB TO SRPM'S CLASS DEF *+6 DEF #SRPM DEF QCB DEF D42 DEF LU DEF SCODE JSB ERR1 ERROR ON CLASS WRITE/READ JMP GRPM GO BACK TO GET * REPLY JSB #RSAX SEARCH FOR AN EXISTING CLASS IN RES DEF *+4 TO MAKE SURE REPLY ISN'T WRITTEN DEF D5 A GENERAL RTE USER WHO IS HUNG ON A DEF D1 NON-NETWORK ASSIGNED CLASS. DEF PARMB+1 SZA DOES CLASS EXIST? JSB ERR4 NO - GO BACK TO GET NEXT REQUEST JSB #CLWT WRITE TO MASTER REQUESTOR'S CLASS DEF *+6 DEF PARMB+1 DEF PARMB DEF D35 DEF ZERO DEF ZERO JSB ERR4 IGNORE THE ERROR - GO BACK TO GET * LDA #PLOG GET PARMB LOGGING FLAG SZA,RSS IS IT SET? JMP GRPM NO - GO AND GET NEXT REQUEST JSB #CLWT FLAG IS SET - WRITE QCB AND PARMB DEF *+6 TO THE PLOG MONITOR DEF #PLOG DEF QCB DEF D42 DEF XEQT DEF ZERO NOP IGNORE THE ERROR JMP GRPM GO BACK TO GET ANOTHER REQUEST * 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 REPORT CATASTROPHIC ERROR DST REGS LDA BIT15 LDB ERR1 JMP ERRN * ERR2 NOP HERE TO SEND 'ILRQ' TO REMOTE DST REGS LDA B5 LDB ERR2 JMP ERRN * ERR3 NOP HERE TO SEND BUSY REPLY DST REGS LDA B2 LDB ERR3 JMP ERRN * ERR4 NOP SEND 'STOP' IF DATA PENDING. STA REGS SAVE FIRST HALF OF ERROR CODE. LDA REGS+1 GET DRIVER STATUS (EQT12). STB REGS+1 SAVE REMAINDER OF ERROR CODE FOR . ALF,ALF POSITION DATA PENDING BIT(#8) TO LSB. AND D1 ISOLATE. IF DP SET, SENDS 'STOP'. LDB ERR4 GET ORIGINATION ADDRESS. * 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+PARMB TO QCLM DEF *+6 DEF #QCLM DEF QCB DEF D42 DEF XEQT DEF ZERO NOP ERROR RETURN JMP GRPM GO BACK TO GET * SKP * * CONSTANTS AND STORAGE * A EQU 0 B EQU 1 XEQT EQU 1717B D21I ABS 100000B+21 ZERO OCT 0 D9 DEC 9 D35 DEC 35 B377 OCT 377 STREM NOP LU NOP SCODE NOP B5 OCT 5 B2 OCT 2 BIT15 OCT 100000 M1 DEC -1 D1 DEC 1 D5 DEC 5 D3 DEC 3 GLCN OCT 140006 QCB NOP QCB - DO NOT REORDER THESE 8 LINES SHEDR NOP STREAM LIST HEADER ADDRESS NOP DUMMY PARAMETER CHANL NOP REQUESTING LU AND SELECT CODE ERRAD NOP ERROR ORIGINATION ADDRESS REGS NOP REGISTER SAVE AREA NOP PARMB BSS 35 PARMB AREA D42 DEC 42 * END GRPM