ASMB,R,L,C
      HED SRPM 91700-16154 REV.A 760206 * (C) HEWLETT-PACKARD CO. 1976
      NAM SRPM,17,4 91700-16154 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 SRPM
      EXT EXEC,#SRPM,RNRQ,#TBRN,#RSAX 
      EXT #QCLM,#CLWT,#PLOG,#SVTO,#CDCB 
      SUP 
* 
* 
* SRPM
* SOURCE: 91700-18154 
* BINARY: 91700-16154 
* PRGMR: BOB SHATZER
* DATE: 06 FEB 76 
* 
* 
* 
*     SRPM IS THE SLAVE REQUEST PRE-PROCESS MODULE FOR DS-1.
*     IT RECEIVES BOTH PARMB'S AND QCB HEADERS FROM GRPM AND
*     BUILDS A SLAVE STREAM LIST ENTRY IN RES FOR THE REQUEST.
*     IT THEN PRE-PROCESSES THE REQUEST AS REQUIRED BY THE
*     PARTICULAR DESTINATION MONITOR AND THEN SENDS THE REQUEST 
*     TO THAT MONITOR VIA ITS I/O CLASS WITH A CLASS WRITE/ 
*     READ. 
* 
* 
*     ERRORS:  THE FOLLOWING ERROR CONDITIONS CAN OCCUR:
* 
*     1.  SRPM'S CLASS IS BAD - REPORT CATASTROPHIC ERROR 
*     2.  THE RES TABLE MGT RN (#TBRN) IS BAD - DITTO 
*     3.  CANNOT BUILD A TABLE ENTRY IN RES - IGNORE REQUEST
*     4.  MONITOR'S CLASS IS BAD - THROW THE REQUEST AWAY 
* 
*     ALL ERROR PROCESSING IS DONE BY THE DISC-RESIDENT MODULE
*     'QCLM'. THE NECESSARY ERROR PROCESSING INFORMATION AND
*     THE PARMB IS WRITTEN INTO QCLM'S I/O CLASS. THUS, SRPM IS 
*     FREE TO SERVICE THE NEXT INCOMING REQUEST.
* 
      SKP 
SRPM  JSB EXEC      CLASS GET TO WAIT FOR PARMB 
      DEF *+7 
      DEF D21I
      DEF #SRPM 
      DEF QCB 
      DEF D42 
      DEF LU
      DEF SCODE 
      JSB ERR1
* 
      LDA PARMB     GET FIRST WORD OF REQUEST 
      AND B377      ISOLATE STREAM TYPE 
      STA STREM     AND SAVE IT 
      ALF,ALF       ROTATE TO UPPER BYTE USE WITH #RSAX 
      ADA D2        SET IN LOWER BYTE TO INDICATE SLAVE LISTS 
      STA ST.LS     SAVE FOR #RSAX CONTROL WORD 
* 
      LDA SCODE     GET SELECT CODE 
      ALF,ALF       MOVE TO UPPER BYTE
      IOR #SVTO     STUFF IN SLAVE REQUEST TIMEOUT
      LDB REGS+1    GET EQT12 FROM DRIVER RETURN
      BLF,BLF       ROTATE DATA PENDING BIT TO BIT 0
      SLB           IS THERE A DATA PENDING CONDITION?
      IOR BIT14     YES - SET BIT 14 IN RSAX ENTRY WORD 
      STA ENTRY     AND STORE IN BUFFER FOR #RSAX 
      DLD PARMB+33  GET TIME TAG FROM PARMB 
      DST ENTRY+1   AND PUT INTO RSAX ENTRY 
* 
      JSB RNRQ      GLOBAL LOCK #RSAX TABLE RN
      DEF *+4 
      DEF GLW 
      DEF #TBRN 
      DEF MCLSN 
      JSB ERR1
* 
      JSB #RSAX     CALL #RSAX TO BUILD LIST ENTRY
      DEF *+5       FOR THIS REQUEST
      DEF D2
      DEF ST.LS 
      DEF ZERO
      DEF ENTRY 
      SSA           ERROR?
      JSB ERR0      YES - DROP THE REQUEST AND GET THE NEXT 
* 
      LDA LU        GET THE SPECIFIED LU
      STA PARMB+24  STUFF IT INTO THE PARMB 
* 
      LDA STREM     GET STREAM TYPE 
      CPA D6        IS THIS A STREAM 6 REQUEST? (RFA) 
      RSS             YES. SKIP TO GET CDCB ADDRESS.
      JMP GETCL       NO. GO TO GET MONITOR'S CLASS.
      LDB CDCBA     GET THE CDCB ADDRESS. 
      RSS           OBTAIN
      LDB B,I         A 
      RBL,CLE,SLB,ERB   DIRECT
      JMP *-2             ADDRESS 
      STB PARMB+22   STUFF CDCB ADDRESS INTO PARMB
* 
GETCL LDB SHEDR     GET STREAM HEADER ADDRESS 
      INB           BUMP POINTER TO MONITOR'S CLASS NUMBER
      LDA B,I       GET CLASS NUMBER
      STA MCLSN     SAVE MONITOR'S CLASS NUMBER 
* 
      JSB #CLWT     WRITE PARMB TO MONITOR'S CLASS
      DEF *+6 
      DEF MCLSN 
      DEF PARMB 
      DEF D35 
      DEF ZERO
      DEF ZERO
      JSB ERR2      ERROR RETURN
* 
      LDA #PLOG     GET PARMB LOGGING FLAG
      SZA,RSS       IS IT SET?
      JMP SRPM      NO - GO BACK TO GET ANOTHER REQUEST 
      JSB #CLWT     WRITE QCB AND PARMB TO LOGGER 
      DEF *+6 
      DEF #PLOG 
      DEF QCB 
      DEF D42 
      DEF XEQT
      DEF ZERO
      JSB ERR0      IGNORE ERROR RETURN 
      JMP SRPM      ALL DONE - GET THE NEXT 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 DEALLOCATE LIST ENTRY 
      DST REGS
      LDA B40 
      LDB ERR2
      JMP ERRN
* 
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 SRPM      GO GET ANOTHER REQUEST
* 
      SKP 
* 
*     CONSTANTS AND STORAGE 
* 
B     EQU 1 
XEQT  EQU 1717B 
BIT15 OCT 100000
D21I  ABS 100000B+21
D35   DEC 35
D42   DEC 42
B377  OCT 377 
STREM NOP 
ZERO  OCT 0 
D2    DEC 2 
GLW   OCT 40002 
LU    NOP 
SCODE NOP 
M1    DEC -1
CDCBA DEF #CDCB 
BIT14 OCT 40000 
ENTRY OCT 0,0,0 
MCLSN NOP 
D6    DEC 6 
QCB   NOP           QCB - DO NOT REORDER THESE 8 LINES
SHEDR NOP           STREAM LIST HEADER ADDRESS
ST.LS NOP           #RSAX STREAM/LIST CONTROL WORD
CHANL NOP           REQUESTING LU AND SELECT CODE 
ERRAD NOP           ERROR ORIGINATION ADDRESS 
REGS  NOP           REGISTER STORAGE AREA 
      NOP 
PARMB BSS 35        PARMB AREA
B40   OCT 40
* 
      END SRPM
                                                                                                  