ASMB,R,L,C
      HED GRPM 91740-16014 REV 1913 * (C) HEWLETT-PACKARD CO. 1979
      NAM GRPM,17,4 91740-16014 REV 2001 791024 
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  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,#RSAX,#NCNT,#REQU,#RTRY,$OPSY
      EXT #NODE,#GRPM,$TIME,#PLOG 
      EXT #NULL,#LDEF,#QCLM,#BREJ 
      EXT #TBRN,#QRN,$RNTB
      EXT $LIBR,$LIBX,RNRQ,DRTEQ
* 
      SUP 
* 
* NAME:   GRPM
* SOURCE: 91740-18014 
* RELOC:  91740-16014 
* PGMR:   CHUCK WHELAN
* DATE:   17 DEC 76 
* MODIFIED BY: LYLE WEIMAN, AUG. '78
* 
* 
* 
*   GRPM IS THE GENERAL REQUEST PRE-PROCESS MODULE FOR DS/1000. 
*   IT PROCESSES INCOMING REQUESTS AND OUTGOING COMPLETIONS.
* 
*     I  INCOMING REQUESTS
* 
*      1. HANGS ON A GET ON ITS CLASS NUMBER, AND WHEN
*         SATISFIED, MOVES THE REQUEST INTO ITS LOCAL BUFFER. 
*      2. IF THE REQUEST IS NOT DESTINED FOR THE LOCAL NODE,
*         THE REQ/DATA IS RETHREADED FOR OUTPUT TO THE
*         APPROPRIATE LU ON "GRPM"S CLASS NUMBER. 
*      3. IF LOCAL AND A NEW REQUEST, DOES THE FOLLOWING: 
*          A) IF NO TCBS ARE AVAILABLE, SETS THE REPLY FLAG 
*             AND REMOTE BUSY FLAG AND RETURNS THE REQUEST TO 
*             THE ORIGINATOR BY RETHREADING THE REPLY FOR OUTPUT ON 
*             "GRPM"S CLASS.
*          B) IF SYSTEM IS GOING QUIESCENT, OR THE MONITOR IS 
*             IN AVAILABLE MEMORY SUSPEND (STATE 4), THE "BUSY" 
*             FLAG IS SET IN THE REQUEST AND THE ENTIRE TRANSACTION 
*             IS RETURNED TO THE ORIGINATOR.
*          C) OTHERWISE, CALLS "#RSAX" TO CREATE THE SLAVE TCB. 
*          D) DETERMINES THE MONITORS CLASS NUMBER FROM "RES" 
*             TABLE AND RETHREADS THE REQ/DATA TO THAT CLASS. 
*             IF THE MAXIMUM QUEUE DEPTH LIMIT FOR THAT MONITOR IS
*             EXCEEDED BY THIS RE-THREAD, THE ENTIRE REQUEST IS RETURNED
*             TO THE ORIGINATOR (AS DESCRIBED ABOVE), WITH A "DS08" 
*             ERROR.
*      4. IF LOCAL AND A REPLY, DOES THE FOLLOWING: 
*          A) IF "BUSY" FLAG IS SET, CLEARS IT AND RETHREADS
*             THE REQUEST TO RTRY SO AFTER A DELAY IT CAN 
*             BE REATTEMPTED.  HOWEVER, IF IT IS A LOCAL
*             REQUEST, DS08 IS RETURNED IMMEDIATELY.
*          B) CALLS #RSAX TO SEARCH FOR THE MASTER TCB. 
*          C) IF FOUND, RETHREADS THE REQ/DATA ON THE MASTER'S
*             CLASS #.
*      5. IF #PLOG IS NON-ZERO, COMPLETED WRITE CLASS BUFFERS 
*         ARE RETHREADED TO PLOG, OTHERWISE THEY ARE DEALLOCATED. 
*      6. WHEN DONE, "GRPM" RETURNS TO ITS GET. 
* 
*     II  OUTGOING LINE COMPLETIONS 
* 
*      GRPM PROCESSES COMPLETION STATUS OF ALL COMMUNICATION REQUEST/DATA 
*      WRITE OPERATIONS (EXCEPT PROGL).  IF AN OPERATION IS SUCCESSFUL
*      AND PLOG IS ENABLED, THE REQUEST IS RETHREADED TO PLOG'S CLASS,
*      IF NOT, THE CLASS BUFFER IS DEALLOCATED. 
*      ON REMOTE OR LOCAL BUSY ERRORS, GRPM CHECKS THE RETRY COUNT IN 
*      THE STREAM WORD OF THE REQUEST.  IF ALL RETRIES HAVE BEEN
*      EXHAUSTED, IT IS TREATED AS A LINE ERROR AND A DS08 IS RETURNED. 
*      IF ANOTHER RETRY IS POSSIBLE, THE ABSOLUTE SYSTEM TIME AT WHICH
*      THE RETRY SHOULD BE ATTEMPTED IS COMPUTED AND STORED IN THE
*      EQT5 STATUS SAVE AREA IN THE CLASS HEADER.  THE CLASS BUFFER IS
*      THEN RETHREADED ON "RTRY"S CLASS.
*      PARITY OR LINE TIMEOUT ERRORS ARE RETRIED 3 TIMES BY RETHREADING 
*      TO "RTRY".  IF ALL 4 TRIES FAIL, A DS02 ERROR IS RETURNED.  IF 
*      A "STOP RECEIVED" CONDITION IS DETECTED, A DS01 ERROR IS RETURNED. 
*      ALL LINE ERRORS HAVE THE ERROR CODE AND THE LOCAL NODE NUMBER
*      STORED IN THE ERROR FIELD IN THE REQUEST.
*      IF THE REQUEST WAS A REPLY, THE CLASS BUFFER IS SIMPLY 
*      CLEARED OR THE REQUEST IS RETHREADED TO PLOG (IF ENABLED). 
*      IF A NON-REPLY, AND THE ORIGINATOR IS NOT THE LOCAL NODE, THE
*      REPLY FLAG IS SET, AND THE REQUEST IS SENT BACK TO THE ORIGINATOR. 
*      IF THE ORIGINATOR IS LOCAL, THE REPLY IS RETHREADED ON THE 
*      MASTER REQUESTORS CLASS. 
      SKP 
GRPM  EQU * 
      LDB $OPSY 
      RBR,SLB       SKIP IF NON-DMS 
      CLA,RSS 
      JMP GRGET 
      STA MOD1      MODIFY FOR DMS
      STA LOOP
      STA LUFND 
      STA MOD4
      STA MOD5
* 
GRGET JSB EXEC      HANG ON CLASS 
      DEF *+6 
      DEF K21 
      DEF #GRPM 
RQADR DEF RQBUF     REQUEST BUFFER
      DEF K0        ZERO LENGTH GET 
      DEF BFADR     ADDR OF SAM REQST BUFFER
* 
      STA TEMP      SAVE ERROR STATUS 
      ADB K8
      CMB,INB 
      ADB BFADR     COMPUTE CLASS HEADER ADDRESS
      STB HEADR 
* 
      LDA BFADR 
      LDB RQADR     SET TO MOVE 4 WORDS OF REQUEST
MOD1  JMP RQLOC     NOP HERE IF DMS 
      LDX K4
      MWF           MOVE 4 WORDS FROM SYSTEM MAP
      JMP *+4 
RQLOC MVW K4        MOVE 4 WORDS
      LDA TEMP
      SLA,RSS       ANY DRIVER ERRORS 
      JMP ERCHK     YES 
      ALF,ALF 
      SSA           WAS THIS A WRITE COMPLETION?
      JMP WASOK     YES, PROCESS IT 
      SPC 3 
* 
*  SUCCESSFUL READ COMPLETION LOGIC FOLLOWS 
* 
      LDA RQBUF     GET STREAM WORD 
CKNOD LDB RQBF3     ADDR OF SOURCE NODE 
      RAL 
      SSA,RSS       REPLY?
      INB           NO, POINT TO DESTINATION NODE 
      LDB 1,I       GET NODE #
      STB TEMP2     SAVE NODAL ADDRESS
      SSB,RSS       SKIP IF ALWAYS LOCAL
      CPB #NODE     IS IT US? 
      JMP LOCAL     YES 
      SKP 
* 
*  STORE & FORWARD OR BUSY/ERROR REPLY TO ANOTHER NODE
* 
*  INITIALIZE THE WRITE RETRY COUNTS
* 
      LDA RQBUF 
      AND LEMSK     CLEAR COMM LINE RETRY COUNT 
      LDB BFADR 
      JSB STUFF     STORE MODIFIED STREAM WORD
* 
*  CONVERT DESTINATION NODE TO LU 
* 
      DLD #NCNT     GET ADDR & COUNT OF NRV TABLE 
      STA TEMP      SAVE COUNTER
* 
LOOP  JMP LOOP0     NOP'D IF DMS SYSTEM 
      XLA 1,I       CROSS-LOAD CPU # IF DMS SYSTEM
      RSS 
LOOP0 LDA 1,I       LOAD CPU # IF NON-DMS 
      INB           POINT TO CORRESPONDING LU 
      CPA TEMP2     IS IT THE GOOD ONE ?
      JMP LUFND     YES 
      INB           BUMP ADDR TO NEXT NODE #
      ISZ TEMP      END OF TABLE ?
      JMP LOOP      NO, CONTINUE
* 
*  NODAL ADDRESS CAN'T BE CONVERTED TO OUTPUT LU
      LDA ASC04     GIVE A "DS04" 
      JMP ERETN     ERROR, NODE IS NON-ADDRESSABLE
* 
LUFND JMP LUFN0     NOP'D IF DMS SYSTEM 
      XLA 1,I       CROSS-LOAD LU IF DMS SYSTEM 
      RSS 
LUFN0 LDA 1,I       LOAD LU IF NON-DMS
      AND B77       ISOLATE IT
* 
*  RETHREAD CLASS BUFFER FOR OUTPUT TO NODE 
* 
      STA TEMP      SAVE OUTPUT LU
      JSB DRTEQ    GET THE LOGICAL UNIT 
      DEF *+2        SUBCHANNEL BITS
      DEF TEMP         FROM THE DRT ENTRY 
      ALF,CLE,ELA  POSITION SUBCHANNEL LSB TO <E> 
      LDA ICNWD    REMOVE THE PREVIOUS SUBCHANNEL LSB 
      AND N5         FROM THE CONTROL WORD
      SEZ          IF THE OUTPUT LU SPECIFIES AN ODD SUBCHANNEL,
      IOR K4         THEN SET BIT # 2 
      STA ICNWD      IN THE CONFIGURED CONTROL WORD 
      JSB #REQU     OUTPUT BUFFER 
      DEF *+5 
      DEF #GRPM 
      DEF #GRPM 
      DEF TEMP      OUTPUT LU 
      DEF ICNWD     NEW CONTROL WORD
      SZA 
      JSB ERR1      CATASTROPHIC ERROR IF IT FAILED 
      JMP GRGET     BACK TO GET 
      SKP 
* 
*  WRITE WAS SUCCESSFUL 
* 
WASOK LDA #PLOG     PLOG CLASS NUMBER 
      SZA           LOGGING?
      JMP THRED+1   YES, RETHREAD TO PLOG 
*  JUST DEALLOCATE THIS CLASS BUFFER
CLSAM LDA #GRPM 
      ALR,RAR       CLEAR "SAVE BUFFER" FLAG
      STA CLASS 
* 
      JSB EXEC      DO DUMMY GET TO CLEAR CLASS BUFFER
      DEF *+5 
      DEF K21 
      DEF CLASS 
      DEF RQBUF 
      DEF K0
* 
      JMP GRGET     BACK TO GET 
      SKP 
* 
*  THIS REQ/DATA IS DESTINED LOCALLY
LOCAL EQU * 
      LDA RQBUF     GET STREAM WORD 
      AND B10K      ISOLATE LEVEL FIELD 
      SZA           LEVEL PRESENT?
      JMP ERLVL     .YES, ERROR 
      LDA RQBUF 
      RAL,RAL 
      SLA           TEST REPLY FLAG 
      JMP REPLY     IT'S A REPLY
* 
      LDB #NULL 
      SZB,RSS       ANY TCBS AVAILABLE? 
      JMP QRJCT     NO, SEND IT BACK FOR AWHILE 
* 
      LDA RQBUF 
      AND B77       ISOLATE STREAM
      ADA #LDEF 
      ADA K2        POINT TO LIST HEADER PNTR 
      LDB 0,I       POINT TO LIST HEADER 
      INB 
      STB TEMP      SAVE ADDRESS OF CLASS # 
      INB 
      LDB 1,I       GET ID SEGMENT ADDR OF MONITOR
      RBL,CLE,ERB   CLEAR "NO ABORT" FLAG 
      SZB,RSS       IS THIS MONITOR ENABLED?
      JMP ILLRQ     NO, RETURN A "DS06" 
      ADB K15       POINT TO STATUS 
      LDA 1,I       GET MONITOR'S STATUS
      AND K15 
      CPA K4        AVAILABLE MEMORY SUSPEND? 
      JMP QRJCT     YES, REJECT REQUEST 
* 
      LDB $RNTA 
      RSS 
      LDB 1,I 
      RBL,CLE,SLB,ERB RESOLVE INDIRECT
      JMP *-2 
      LDA #QRN      GET QUIESCENT RN
      AND B377      ISOLATE TABLE INDEX 
      ADB 0         COMPUTE POSITION IN RN TABLE
      LDA 1,I       GET IT
      AND B377
      SZA           QUIESCING?
      JMP QRJCT     YES, SEND IT BACK 
      SKP 
* 
*  THIS REQUEST CAN NOW BE PASSED TO THE REQUIRED MONITOR 
* 
      JSB #RSAX     BUILD TCB FOR THIS STREAM 
      DEF *+5 
      DEF K3
      DEF RQBUF+1   PASS ORIGINATORS SEQ #
      DEF RQBUF      & STREAM 
      DEF RQBUF+2     & ORIGIN NODE NO. 
* 
      SSB           OK? 
      JMP ILLRQ     NO, GIVE DS06 ERROR 
* 
      LDB BFADR 
      INB           POINT TO SECOND REQUEST WORD
      JSB STUFF     STORE LOCAL SEQUENCE #
* 
      LDB #NULL     NUMBER OF TCB'S LEFT
      SZB           DID WE USE THE LAST ONE?
      JMP MONIT     NO
* 
      JSB RNRQ      YES! LOCK THE TABLE ACCESS RN 
      DEF *+4 
      DEF LGNW      GLOBAL LOCK, NO WAIT, NO ABORT
      DEF #TBRN 
      DEF TEMP2 
      NOP 
MONIT LDA TEMP,I    GET MONITOR'S CLASS 
      SPC 2 
      SKP 
* 
*  ENTER HERE TO RETHREAD THE CLASS BUFFER FROM #GRPM TO THE CLASS
*  NUMBER PASSED IN THE A REGISTER. 
* 
THRED RAL,CLE,ERA   CLEAR SIGN
      STA CLASS 
* 
      JSB #REQU     RETHREAD TO 
      DEF *+3         MONITOR/MASTER/RTRY/PLOG
      DEF #GRPM 
      DEF CLASS 
* 
      SZA,RSS       OK? 
      JMP GRGET     YES,BACK TO GET 
      CPA N10       MAXIMUM QUEUE DEPTH EXCEEDED? 
      JMP BZYER     YES, RETURN "DS08" ERROR. 
      JMP ERR1      OTHER CATASTROPHIC ERROR. 
      SPC 4 
* 
*  HERE WHEN LOCAL REPLY RECEIVED 
* 
REPLY SSA,RSS       IS THIS A QUIESCENT/BUSY REJECT 
      JMP REPOK     NO
      LDA RQBUF     YES 
      AND B1174     CLEAR REPLY & BUSY FLAGS & LINE ERR CNTR
      STA RQBUF     WORD GETS STORED IN SAM LATER 
      LDB RQBUF+3   GET DESTINATION NODE
      CPB #NODE     WAS THIS A LOCAL REQUEST? 
      JMP BZYER     YES! GIVE A DS08 NOW
      JMP RTRY2+1   RETHREAD TO RTRY
* 
REPOK JSB #RSAX     SEARCH FOR MASTER TCB 
      DEF *+3 
      DEF K4
      DEF RQBUF+1 
      SSB           FOUND?
      JSB ERR1      NO, PURGE THE REQUEST 
      JMP THRED     RETHREAD IT (A REG = MASTER CLASS #)
* 
QRJCT LDA RQBUF 
      AND LEMSK     CLEAR LINE ERROR COUNT
      IOR RPBZY     SET "BUSY" & "REPLY" FLAGS
      JMP RPLYR     SEND REPLY
      SKP 
* 
*  ERROR OCCURRED 
* 
ERCHK LDB 0         GET EQT STATUS
      BLF,BLF 
      SSB,RSS       IS THIS AN OUTPUT COMPLETION? 
      JMP EREAD     NO, NOTE BUT IGNORE THE ERROR 
* 
      LDB LBZY#     DELAY FACTOR FOR LOCAL BUSY REJECTS 
      RAR,SLA,RAR   LOCAL BUSY REJECT?
      JMP DELAY     YES, RETRY WITH DELAY 
      SLA,RAR       SIMULTANEOUS REQUEST? 
      JMP SIMRQ 
      LDB 0 
      RAR,SLA,RAR   STOP RECEIVED?
      JMP LFAIL     YES 
      SLA           REMOTE BUSY?
      JMP RTRY2     YES 
* 
*  PARITY ERROR OR LINE TIMEOUT, CHECK RETRY COUNT
      LDA RQBUF     STREAM WORD 
      AND B300      ISOLATE RETRY COUNT 
      CPA B300      ALL RETRIES EXHAUSTED?
      JMP LFAIL     YES, GIVE LINE ERROR
* 
      LDB LERR#     LINE ERROR DELAY FACTOR 
      JSB SETDL     SET DELAY 
      LDA B100      BUMP BITS 7-6 
      JMP RBUMP 
* 
*  REMOTE BUSY REJECT 
RTRY2 LDA RQBUF     STREAM WORD 
      AND .074      BITS 11-8 HAVE RETRY COUNT
      CPA .074      ALL RETRIES EXHAUSTED?
      JMP BZYER     YES, GIVE ERROR 
      LDA B400      BUMP BITS 11-8
      LDB RBZY#     DELAY FOR REMOTE BUSY (1 SEC) 
      STB TEMP2     SAVE OFFSET (10'S OF MSECS) 
* 
RBUMP ADA RQBUF     BUMP RETRY COUNT
      LDB BFADR     ADDRESS OF REQUEST IN SAM 
      JSB STUFF     STORE MODIFIED STREAM WORD
      JMP DELA2 
      SKP 
* 
*  SIMULTANEOUS REQUEST, DELAY REQUIRED 
SIMRQ LDB SIRQ#     DELAY FACTOR FOR SIMULTANEOUS REQUEST 
* 
DELAY JSB SETDL     COMPUTE REQUIRED DELAY
* 
DELA2 CLE 
      DLD $TIME     CURRENT SYSTEM TIME 
      ADA TEMP2     ADD DELAY TIME
      SEZ,RSS       CARRY?
      JMP *+3       NO
      INB,SZB,RSS   WILL DAY ROLL OVER? 
      ADA B2500     YES, COMPENSATE FOR IT
      LDB HEADR     POINT TO CLASS BUFFER HEADER
      ADB K2        BUMP TO 3RD WORD OF HEADER
      JSB STUFF     PUT OFFSET THERE (A REG TO RTRY)
* 
      LDA #RTRY     RTRY'S CLASS
      JMP THRED+1   NOW RETHREAD THIS CLASS BUFFER
      SKP 
* 
*    IRRECOVERABLE LINE ERRORS
* 
LFAIL LDA ASC01     GET A DS01
      SLB           WAS IT DRIVER TIMEOUT?
      INA           YES, MAKE IT A DS02 
      RSS 
* 
*  BUSY RETRY COUNT EXHAUSTED, GIVE A DS08 ERROR
* 
BZYER LDA ASC08 
      RSS 
* 
*  NO MONITOR FOR REQUESTED STREAM IS PRESENT, ILLEGAL REQUEST
* 
ILLRQ LDA ASC06 
* 
ERETN LDB RQBUF     GET STREAM WORD 
      RBL 
      CCE,SSB       REPLY?
      JMP ERRFL     YES, NO RECOVERY POSSIBLE 
* 
      LDB BFADR 
      ADB K5        POINT TO REQUEST+5
      JSB STUFF     STORE ASCII CODE
      INB           POINT TO REQUEST+6
      LDA #NODE     GET LOCAL NODAL ADDRESS 
      RAL,ERA       INDICATE THERE'S AN ASCII ERROR 
      JSB STUFF     STORE ERROR LOCATION WORD 
      ADB N2        POINT TO REQUEST+4
      LDA ASCDS     GET "DS"
      JSB STUFF     STORE IT
      LDB HEADR     ADDRESS OF CLASS HEADER 
      ADB K5        POINT TO XMISSION LOG (DATA LENGTH) 
      CLA           SET IT TO ZERO
      JSB STUFF     SO NO DATA GETS SENT
      LDA RQBUF 
      AND RTYCT 
      IOR BIT14     SET REPLY FLAG
      IOR #BREJ     INITIALIZE RETRY COUNTERS 
* 
RPLYR STA RQBUF 
      LDB BFADR     POINT TO 1ST REQUEST WORD IN SAM
      JSB STUFF     STORE NEW VALUE 
      JMP CKNOD     NOW GO BACK TO SEND REPLY 
      SKP 
*     FORMAT OF BUFFER PASSED TO QCLM:
*     --------------------------------
* 
*     ****************************************
*  1  * STREAM WORD                          *  NOTE: ON 'READ' ERRORS, WORD 1
*     *--------------------------------------*  IS LINE EQT ADDRESS.
*  2  * SEQUENCE NUMBER                      *
*     *--------------------------------------*
*  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 
*   (USUALLY 'GRPM'). 
* 
*      **************************************** 
* 
ERRFL CLB           ERROR SENDING REPLY, ENCODE 
      STB ERR1       SO QCLM PRINTS "REPLY FLUSHED..."
      LDB ASCDS 
      JMP ERR1+1
* 
EREAD EQU * 
      LDA TEMP      MOVE I/O COMPLETION STATUS TO 
      STA RQBUF+1     REQUEST BUFFER
      LDA N5        ENCODE SO 'QCLM' PRINTS 
      LDB 0          "COMMUNICATIONS READ ERROR"
      JMP ERR1+1
* 
ERLVL EQU * 
      LDA N6        ENCODE FOR LEVEL ERROR
      LDB 0 
      RSS 
* 
*  THIS REQUEST IS NON-RECOVERABLE, CLEAR, LOG, THEN IGNORE IT
ERR1  NOP           HERE TO REPORT IRRECOVERABLE ERROR
      DST AREG      SAVE REGS FOR QCLM
      LDA ERR1
      STA PREG      PASS ERROR ADDR TO QCLM 
      DLD $TIME     RECORD TIME OF ERROR
      DST TOD 
      LDA #QCLM 
      STA CLASS     SAVE QCLM CLASS LOCALLY 
* 
      JSB EXEC      MAILBOX WRITE/READ TO QCLM
      DEF *+8 
      DEF K20N
      DEF K0
      DEF RQBUF 
      DEF K9
      DEF XEQT
      DEF K0
      DEF CLASS 
      NOP 
* 
      JMP CLSAM     GO DEALLOCATE CLASS BUFFER
      SKP 
* 
*  MULTIPLY PASSED TIMING FACTOR BY THE LINE TIMEOUT VALUE
SETDL NOP 
      STB TEMP2 
      LDB HEADR 
      INB           POINT TO 2ND WORD OF CLASS HEADER 
MOD4  JMP SETD0     NOP'D IF DMS SYSTEM 
      XLA 1,I       X-LOAD LINE'S TIMEOUT VALUE (DMS) 
      RSS 
SETD0 LDA 1,I       LOAD LINE'S TIMEOUT VALUE (NON-DMS) 
      RAR           FORM EQT14'S VALUE
      MPY TEMP2     TIMING FACTOR * LINE TIMEOUT
      STA TEMP2     SAVE ABSOLUTE DELAY (10'S OF MSECS) 
      JMP SETDL,I 
* 
*  STORE A WORD IN SAM
* 
STUFF NOP 
      JSB $LIBR     GO PRIVILEGED 
K0    NOP 
MOD5  JMP STUF2     NOP HERE IF DMS 
      XSA 1,I       STORE IN ALTERNATE MAP
      RSS 
STUF2 STA 1,I 
      JSB $LIBX 
      DEF STUFF 
      SKP 
* 
*     CONSTANTS AND STORAGE 
* 
B77   OCT 77
BFADR NOP 
HEADR NOP 
TEMP  NOP 
CLASS NOP 
TEMP2 NOP 
RPBZY OCT 60000 
BIT14 OCT 40000 
RTYCT OCT 170077    STREAM WORD RETRY COUNT MASK
LEMSK OCT 177477    MASK TO CLEAR LINE ERROR COUNT
ICNWD OCT 150101
LGNW  OCT 140002
K2    DEC 2 
K3    DEC 3 
K4    DEC 4 
K5    DEC 5 
K8    DEC 8 
K9    DEC 9 
K15   DEC 15
K21   DEC 21
N2    DEC -2
N5    DEC -5
N6    DEC -6
N10   DEC -10 
K20N  OCT 100024
B100  OCT 100 
B300  OCT 300 
B377  OCT 377 
B400  OCT 400 
B2500 OCT 25000 
B1174 OCT 117477
B10K  OCT 010000
.074  OCT 007400
$RNTA DEF $RNTB 
* 
*  TIME DELAY CONSTANTS 
LBZY# DEC -5        LOCAL BUSY DELAY = 5 * LINE TIMEOUT 
RBZY# DEC 100       REMOTE BUSY DELAY = 1 SECOND
LERR# DEC -10       LINE ERROR RETRY DELAY = 10 * LINE TO 
SIRQ# DEC -4        SIMULTANEOUS REQ DELAY = 4 * LINE TO
* 
ASC01 ASC 1,01
ASC04 ASC 1,04
ASC06 ASC 1,06
ASC08 ASC 1,08
ASCDS ASC 1,DS
* 
RQBF3 DEF RQBUF+2 
RQBUF BSS 9 
IBUF  EQU RQBUF 
* 
STREM EQU IBUF
SEQ#  EQU IBUF+1
SRC#  EQU IBUF+2
DESTN EQU IBUF+3
PREG  EQU IBUF+4
AREG  EQU IBUF+5
BREG  EQU IBUF+6
TOD   EQU IBUF+7
* 
XEQT  EQU 1717B 
* 
SIZE  BSS 0 
* 
      END GRPM
