ASMB,R,L,C
      HED * <D65SV> SLAVE REPLY INTERFACE * (C) HEWLETT-PACKARD CO. 1976 *
      NAM D65SV,7 91700-16147 REV.A 760101
      SPC 1 
      ENT D65SV,#MBRK 
      EXT .ENTR,EXEC,#RSAX,#PLOG,DRTEQ,D65CL
* 
* 
*    NAME:   D65SV
*    SOURCE: 91780-18147
*    RELOC:  91780-16147
*    PGMR:   C.C.H. [ 01/01/76 ]
* 
******************************************************************
*  * (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.       *
******************************************************************
* 
*  D65SV HANDLES SLAVE MONITOR REPLIES, WHICH ARE DESTINED FOR
*   REMOTE SATELLITES. THE REPLIES ARE COMMUNICATED TO THE NETWORK
*   VIA 'D65CL', IN ORDER TO AVOID CONFLICT WITH OTHER USERS OF 
*   THE SAME COMMUNICATION LINE. ADDITIONALLY, 'D65SV' CLEARS THE 
*   SLAVE MONITOR LIST-ENTRY, TO PREVENT POST FACTO TIMEOUT ERRORS. 
* 
*  D65SV OPERATION: 
* 
*   1. GET USER PARAMETERS. 
*     A. CHECK FOR VALID LOGICAL UNIT NO. (VIA 'DRTEQ').
*     B. EXTRACT THE COMM. LINE DEVICE SELECT CODE. 
*     C. VERIFY THAT THE LOGICAL UNIT IS LINKED TO DVR65. 
*   2. GET AND SAVE THE SLAVE MONITOR'S CLASS NUMBER. 
*   3. CALL <#MBRK> TO CHECK THE CURRENT TRANSACTION FOR A BREAK CONDITION. 
*     A. IF BREAK FLAG SET, DON'T REPLY (GO TO 6.). 
*   4. CALL <D65CL> TO SEND REPLY TO THE SATELLITE. 
*     A. IF #PLOG #0, WRITE PARMB TO PARMB LOGGER'S CLASS NO. 
*   5. CLEAR ENTRY IN SLAVE MONITOR CONTROL LIST. 
*   6. IF ERROR, RETURN TO THE CALLER AT <ERROR RETURN>, WITH 
*      ASCII ERROR CODES IN <A>&<B>; ELSE, RETURN TO <NORMAL RETURN>
*      WITH DVR65 RETURN INFO IN <A>&<B>. 
* 
*  D65SV CALLING SEQUENCE:
* 
*    JSB D65SV
*    DEF *+7
*    DEF RCODE      REQUEST CODE. 
*    DEF CONWD      CONTROL WORD. 
*    DEF RQBUF      REPLY BUFFER. 
*    DEF RQLEN      REPLY BUFFER LENGTH (MINIMUM =35 WORDS).
*    DEF DABUF      DATA BUFFER (OR DUMMY PARAMETER). 
*    DEF DALEN      DATA BUFFER LENGTH (OR DUMMY PARAMETER).
* <ERROR RETURN >   RETURN HERE UPON ERROR DETECTION. 
* <NORMAL RETURN>   NORMAL RETURN HERE, UPON COMPLETION.
*                   (  <A&B> =0: BREAK-FLAG DETECTED. ) 
* 
      SKP 
* 
*  D65SV ERROR MESSAGES:
* 
*   ( RETURNED TO CALLER IN <A>&<B> AT <ERROR RETURN> LOCATION )
* 
*   "DS01" - DRIVER HAS DETECTED AN ERROR CONDITION (PARITY, ETC.)
* 
*   "DS02" - <PROGL> HAS PREEMPTED ACCESS TO THE COMMUNICATION LINE.
* 
*   "DS04" - LOGICAL UNIT INVALID, OR NOT ENTERED IN CLCT TABLE.
* 
*   "DS07" - 'RES' TABLE ENTRY CANNOT BE LOCATED. 
* 
*   "DS08" - BUSY-REJECT FROM REMOTE [ RETRIES EXHAUSTED ]. 
* 
*   "IOXX" \
*           - SYSTEM LEVEL ERRORS DETECTED BY RTE.
*   "RNXX" /
* 
* 
      SPC 3 
****************************************************************************
*                                                                          *
*  #MBRK EXAMINES THE CURRENT SLAVE-STREAM LIST FOR THE MONITOR            *
*   OPERATING ON THE STREAM-TYPE SPECIFIED BY THE CALLER.                  *
*                                                                          *
*  IF AN ENTRY'S BREAK-FLAG (WORD #2, BIT#15) IS SET, #MBRK RETURNS TO     *
*  THE CALLER AT THE <BREAK RETURN> POINT. IF THE FLAG IS CLEAR, #MBRK     *
*  RETURNS TO THE <NORMAL RETURN> POINT. THE <ERROR RETURN> IS TAKEN,      *
*  WHEN #MBRK DISCOVERS AN IMPROPER LOGICAL UNIT SPECIFICATION, OR         *
*  WHEN #RSAX DETERMINES AN IMPROPER STREAM SPECIFICATION.                 *
*                                                                          *
*  #MBRK CALLING SEQUENCE:                                                 *
*                                                                          *
*     JSB #MBRK                                                            *
*     DEF *+4                                                              *
*     DEF STREM     MONITOR'S STREAM TYPE-CODE.                            *
*     DEF LU        LOGICAL UNIT NO. TO BE ACCESSED--IF NO BREAK.          *
*     DEF TTAGA     ADDRESS OF REQUEST TIME-TAGS (2-WORDS, FOR LIST SEARCH)*
*  <ERROR RETURN>   <A&B> = ASCII ERROR CODES ("DS04"/"DS07")              *
*  <BREAK RETURN>   <A> =0, <B> = ENTRY ADDRESS.                           *
*  <NORMAL RETRN>   <A> = LINE SELECT CODE, <B> = EQT EXTENSION ADDRESS.   *
*                                                                          *
****************************************************************************
      SKP 
RCODA NOP           REQUEST CODE ADDRESS. 
CONWD NOP           CONTROL WORD ADDRESS. 
RQBUF NOP           REPLY BUFFER ADDRESS. 
RQLEN NOP           REPLY BUFFER LENGTH ADDRESS.
DABUF NOP           DATA BUFFER ADDR. (OR DUMMY PARAMETER). 
DALEN NOP           DATA BUFFER LENG. (OR DUMMY PARAMETER). 
      SUP           [ SUPPRESS EXTENDED LISTING ] 
D65SV NOP           ENTRY/EXIT. 
      JSB .ENTR     OBTAIN DIRECT ADDRESSES 
      DEF RCODA       FOR PARAMETERS & RETURN POINT.
      CLA           INITIALIZE THE
      STA ERFLG       ERROR FLAG
      STA REG           AND REGISTER
      STA REG+1           STORAGE LOCATIONS.
      LDA RQBUF,I   GET THE FIRST WORD OF THE PARMB.
      AND B377      ISOLATE THE STREAM TYPE,
      STA STYPE       AND SAVE LOCALLY. 
      LDB RQBUF     GET THE REQUEST BUFFER ADDRESS. 
      ADB P33       FORM ADDRESS OF TIME-TAG WORDS. 
      STB TTADR     SAVE FOR LIST ACCESS. 
      SPC 1 
*  CHECK FOR BREAK FLAG, AND OBTAIN SELECT CODE & EXTENSION ADDRESS.
      SPC 1 
      JSB #MBRK     GO TO CHECK 
      DEF *+4        THE SLAVE-LIST ENTRY 
      DEF STYPE       FOR A BREAK CONDITION 
      DEF CONWD,I      IN THIS MONITOR'S
      DEF TTADR,I       STREAM-LIST.
      JMP D65SV,I   ERROR RETURN--CODES IN <A&B>. 
      JMP EXIT      BREAK DETECTED: NORMAL RETURN [<A&B>=0].
      SPC 1 
*  CALL 'D65CL' TO SEND THE REPLY TO THE SATELLITE. 
      SPC 1 
      JSB D65CL     GO TO COMM. LINE ACCESS ROUTINE.
      DEF *+8 
      DEF RCODA,I   REQUEST CODE. 
      DEF CONWD,I   CONTROL WORD. 
      DEF RQBUF,I   REPLY BUFFER ADDRESS. 
      DEF RQLEN,I   REPLY BUFFER LENGTH.
      DEF DABUF,I   DATA BUFFER ADDR. (OR DUMMY PARAMETER). 
      DEF DALEN,I   DATA BUFFER LENG. (OR DUMMY PARAMETER). 
      DEF EXTAD     EQT EXTENSION ADDRESS.
      ISZ ERFLG     * ERROR--SET ERROR-RETURN FLAG. 
      DST REG       SAVE REGISTERS FOR RETURN TO CALLER.
      JSB PLOG      GO TO CHECK FOR PARMB LOGGING REQUEST.
      SPC 1 
*  CLEAR CURRENT TRANSACTION IN SLAVE-STREAM LIST IN <RES>. 
      SPC 1 
      JSB #RSAX     GO TO <RES> ACCESS ROUTINE. 
      DEF *+5 
      DEF P3        CLEAR AN ENTRY. 
      DEF ST/LS     SPECIFY THIS MONITOR'S LIST.
      DEF SCODE     SEARCH, USING LINE SELECT CODE, 
      DEF TTADR,I     AND TRANSACTION TIME-TAGS.
      SSA           ANY ERRORS? 
      JMP ER07        YES. GO TO INFORM THE CALLER. 
      SPC 1 
*  RETURN TO THE CALLER WITH <A>&<B> FROM DVR65, OR ASCII ERROR CODE. 
      SPC 1 
EXIT  LDA ERFLG     GET THE ERROR RETURN FLAG.
      SZA,RSS       ANY ERRORS? 
      ISZ D65SV       NO. SET FOR NORMAL EXIT.
      DLD REG       GET THE RETURN INFORMATION. 
      JMP D65SV,I   RETURN TO THE CALLER. 
      SPC 1 
*  ERROR PROCESSING SECTION.
      SPC 1 
ER07  LDB "07"      #RSAX TABLE-ACCESS ERROR. 
      LDA "DS"      GET FIRST HALF OF ERROR MESSAGE "DS". 
      JMP D65SV,I   RETURN WITH ASCII ERROR MSG. IN <A>&<B>.
      SPC 4 
*  IF REQUESTED, WRITE PARMB'S TO THE LOGGER'S CLASS NO.
      SPC 1 
PLOG  NOP           ENTRY/EXIT: PARMB LOGGING ROUTINE.
      LDA #PLOG     GET REQUEST FLAG FROM <RES>.
      SZA,RSS       IS THERE A REQUEST TO LOG PARMB'S?
      JMP PLOG,I      NO. COMPLETE THE SLAVE PROCESSING.
* 
      STA PCLAS       YES. SAVE THE LOGGER'S CLASS LOCALLY. 
* 
      JSB EXEC            WRITE 
      DEF *+8              THE
      DEF CLS20             PARMB (PARAMETER BUFFER)
      DEF ZERO               TO THE 
      DEF RQBUF,I             PARMB LOGGER'S
      DEF RQLEN,I              CLASS NUMBER.
      DEF XEQT      SUPPLY THE I.D. SEGMENT ADDRESS 
      DEF "SV"       AND ASCII "SV" SOURCE IDENTIFIER 
      DEF PCLAS       AS OPTIONAL PARAMETERS. 
      NOP           ** IGNORE ERRORS FOR THIS OPERATION **
      JMP PLOG,I    RETURN TO COMPLETE SLAVE PROCESSING.
* 
      SKP 
*  CONSTANTS AND STORAGE. 
      SPC 1 
A     EQU 0 
B     EQU 1 
B77   OCT 77
B377  OCT 377 
CLS20 OCT 100024    CLASS WRITE/READ--NO ABORT. 
EQMSK OCT 37400     EQT5 EQUIPMENT TYPE-CODE MASK.
EXTAD NOP           EQT EXTENSION ADDRESS.
ERFLG NOP           ERROR FLAG: #0 - TAKE <ERROR RETURN>. 
P2    DEC 2 
P3    DEC 3 
P4    DEC 4 
P8    DEC 8 
P33   DEC 33
PCLAS NOP           LOCAL STORAGE: PARMB LOGGER'S CLASS NO. 
REG   OCT 0,0       REGISTER STORAGE. 
SCODE NOP           UPPER-BYTE SELECT CODE FOR LIST SEARCH. 
STYPE NOP           STREAM-TYPE FROM PARMB. 
ST/LS NOP           STREAM & LIST CODE-WORD FOR '#RSAX'.
TTADR NOP           TIME-TAG ADDRESS FROM PARMB.
TTAG  OCT 0,0       TIME-TAG STORAGE. 
TYP65 OCT 32400     EQUIPMENT TYPE-CODE 65, FOR DVR65.
XEQT  EQU 1717B     USER'S I.D. SEGMENT ADDRESS.
ZERO  OCT 0 
"04"  ASC 1,04
"07"  ASC 1,07
"DS"  ASC 1,DS
"SV"  ASC 1,SV
* 
      SKP 
*  < #MBRK > ROUTINE TO EXAMINE BREAK-FLAG IN MONITOR STREAM-LIST ENTRY.
      SPC 1 
*  CALLING SEQUENCE:
* 
*     JSB #MBRK 
*     DEF *+4 
*     DEF STRM      MONITOR'S STREAM TYPE-CODE. 
*     DEF LU        LU TO BE USED BY MONITOR--IF NO BREAK.
*     DEF TTAGA     ADDRESS OF TIME-TAGS (2). 
*   <ERROR RETURN>  <A&B> = ASCII ERROR CODES.
*   <BREAK RETURN>  <A> =0, <B> = ENTRY ADDRESS.
*   <NORMAL RETRN>  <A> =SELECT CODE, <B> =EQT EXTENSION ADDRESS. 
* 
STRM  NOP           STREAM TYPE-CODE ADDRESS
LU    NOP           LOGICAL UNIT NO. ADDRESS. 
TTAGA NOP           ADDRESS OF 2-WORD TIME-TAG BUFFER.
#MBRK NOP           ENTRY/EXIT: BREAK-FLAG ROUTINE. 
      JSB .ENTR     OBTAIN DIRECT ADDRESSES 
      DEF STRM        FOR PARAMETERS & RETURN POINT.
      SPC 1 
*  VERIFY LOGICAL UNIT & EXTRACT SELECT CODE & EQT EXTENSION ADDRESS. 
      SPC 1 
      JSB DRTEQ     GO TO FIND EQT INFORMATION. 
      DEF *+2 
      DEF LU,I      RETURN INFO FOR THIS LOGICAL UNIT.
      SSB           ANY ERRORS? 
      JMP MBER4     * ERROR: INVALID LU "DS04". 
* 
      ADB P3        FORM EQT4 ADDRESS FROM EQT FWA IN <B>.
      LDA B,I       GET THE CONTENTS OF EQT4. 
      AND B77       ISOLATE THE DEVICE SELECT CODE. 
      ALF,ALF       POSITION TO THE UPPER BYTE. 
      STA SCODE     SAVE FOR CLEARING THE TABLE ENTRY.
* 
      INB           POINT TO EQT5 ADDRESS.
      LDA B,I       GET THE CONTENTS OF EQT5. 
      AND EQMSK     ISOLATE THE EQUIPMENT TYPE-CODE.
      CPA TYP65     IS THIS LU LINKED TO DVR65? 
      RSS             YES. SKIP TO FIND THE EQT EXTENSION.
      JMP MBER4       NO. * ERROR: "DS04" INVALID LU! 
* 
      ADB P8        COMPUTE ADDRESS OF EQT13. 
      LDB B,I       GET A DIRECT
      RBL,CLE,SLB,ERB  ADDRESS FOR THE
      JMP *-2             EQT EXTENSION.
      STB EXTAD     SAVE FOR USE BY 'D65CL'.
      SPC 1 
*  LOCATE THE SLAVE-STREAM LIST-ENTRY FOR THE CURRENT TRANSACTION.
      SPC 1 
      LDA STRM,I    GET FIRST WORD OF REPLY BUFFER. 
      AND B377      ISOLATE THE STREAM TYPE.
      ALF,ALF       POSITION TO UPPER BYTE. 
      ADA P2        ADD OFFSET FOR STREAM HEADERS.
      STA ST/LS     SAVE CODE-WORD FOR CLEARING LIST ENTRY. 
      DLD TTAGA,I   GET THE TIME-TAGS,
      DST TTAG        AND SAVE FOR LATER USE. 
      SKP 
*  SEARCH FOR A "BREAK" CONDITION, AMONG THE STREAM-LIST ENTRIES. 
      SPC 1 
      JSB #RSAX     GO TO CHECK 
      DEF *+5        THE SLAVE-LIST ENTRY 
      DEF P4          FOR A BREAK CONDITION;
      DEF ST/LS        USING SPECIFIED LIST CODE, 
      DEF SCODE         DEVICE SELECT CODE, AND 
      DEF TTAG           TIME-TAGS, FOR ENTRY-SEARCH. 
      SSA           ANY ERRORS? 
      JMP MBER7       * LIST ERROR--REPORT: "DS07". 
      SZB           BREAK-FLAG DETECTED?
      JMP BREAK       YES. EXIT VIA <BREAK RETURN>. 
* 
      LDA SCODE     RETURN WITH: <A> = SELECT CODE, 
      LDB EXTAD                  <B> = EXTENSION ADDRESS. 
      ISZ #MBRK     SET NO-BREAK RETURN: P+3
BREAK ISZ #MBRK     IF BREAK DETECTED:   P+2
      JMP #MBRK,I   RETURN TO THE CALLER. 
* 
MBER4 LDB "04"      INVALID LOGICAL UNIT ERROR. 
      RSS 
MBER7 LDB "07"      #RSAX TABLE-ACCESS ERROR. 
      LDA "DS"      GET FIRST HALF OF ERROR MESSAGE.
      JMP #MBRK,I   TAKE ERROR-RETURN EXIT: P+1 
* 
      SPC 3 
      END 
                                                                          