ASMB,L,R,C
      HED D65SV 91740-16029 REV 1740 HEWLETT-PACKARD CO. 1977 
      NAM D65SV,7 91740-16029 REV 1740 771018 
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS      *
*  * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY.   *
******************************************************************
      SPC 1 
****************************************************************
* 
*     D65SV 
* 
*     SOURCE PART # 91740-18029 
* 
*     REL PART #    91740-16029 
* 
*     WRITTEN BY    CHUCK WHELAN
* 
*     DATE WRITTEN  NOV 1976
* 
*     MODIFIED BY   C.C.H.                                                 #
* 
*     DATE MODIFIED 10/18/77                                               #
* 
*************************************************************** 
      SPC 2 
*     THIS ROUTINE SENDS SLAVE REQUESTS 
*     CALLING SEQUENCE: 
*                   JSB D65SV 
*                   DEF *+5 
*                   DEF RQBUF       REQUEST BUFFER
*                   DEF RQLEN       REQUEST LENGTH
*                   DEF DABUF       DATA BUFFER 
*                   DEF DATAL       DATA LENGTH 
*                   <ERROR RETURN>
*                   <NORMAL RETURN> 
* 
* 
*    D65SV IS CALLED BY DS/1000 MONITORS TO SEND A REPLY AND
*    POSSIBLY DATA BACK TO THE ORIGINATING NODE.  IT PERFORMS THE 
*    FOLLOWING STEPS: 
*        1.  DEALLOCATES THE SLAVE TCB, IF THIS FAILS TAKES THE 
*            ERROR RETURN.
*        2.  VERIFIES THAT 7<=REPLY LENGTH<=31 AND IF NOT RETURNS 
*            A DS03 ERROR.
*        3.  CONVERTS THE NODAL ADDRESS OF THE ORIGINATING CPU
*            TO AN OUTPUT LU. IF LU CONVERSION FAILS, A DS04 ERROR
*            IS RETURNED. 
*        4.  DOES A CLASS I/O WRITE/READ OF THE REPLY(/DATA) TO 
*            GRPM'S CLASS NUMBER (OR RPCNV'S CLASS IF A 3000 WAS
*            WAS THE REQUEST ORIGINATOR.
*        5.  RETURNS
* 
      SPC 2 
      ENT D65SV 
      EXT EXEC,.ENTR,$OPSY
      EXT #RSAX,#NCNT,#GRPM,#BREJ,#RPCV 
      SPC 2 
RQBUF NOP 
RQLEN NOP 
DABUF NOP 
DATAL NOP 
* 
D65SV NOP 
      JSB .ENTR     GET CALLER'S PARAMETERS 
      DEF RQBUF 
* 
      LDA RQBUF 
      INA 
      STA TEMP1     ADDR OF SEQ.# 
      INA 
      STA TEMP2     ADDR OF ORIGINATORS NODE
* 
      JSB #RSAX     DELETE SLAVE TCB
      DEF *+4 
      DEF K7
TEMP1 NOP 
      DEF RQBUF,I   STREAM
      SSB 
      JMP D65SV,I   TCB SEARCH FAILED, ERROR RETURN 
      STA TEMP1,I   RESTORE OLD SEQ # IN REQUEST
* 
*  VERIFY THAT 6 < REQUEST LENGTH < 32
* 
      LDB "03"
      LDA RQLEN,I   GET REQUEST LENGTH
      ADA N7        MUST BE AT LEAST 7
      SSA 
      JMP GETDS     GIVE DS03 IF <7 
      ADA N25 
      SSA,RSS 
      JMP GETDS     GIVE DS03 IF > 31 
* 
*  CHECK FOR REPLY TO DS/3000 REPLY CONVERTER.
* 
      LDB #RPCV     PRESET <B>= "RPCNV'S" CLASS NO.        #
      LDA RQBUF,I   GET THE STREAM WORD OF THE REPLY.      #
      AND RTYCT     CLEAR THE OLD RETRY COUNTER.           #
      IOR #BREJ     INITIALIZE NEW RETRY COUNT.            #
      STA RQBUF,I   RESTORE MODIFIED STREAM WORD.          #
*                                                                          #
      CLE,ELA       POSITION DS/3000 BIT#15 TO <E>.        #
      CLA,SEZ,CLE   IF THIS IS A DS/3000 REPLY, SET LU=0,  #
      JMP RPL3K      THEN BYPASS DS/1000 PROCESSING.       #
* 
      SKP 
* 
*  CONVERT DESTINATION NODE TO LU 
* 
      LDA TEMP2,I   GET THE ORIGINATOR'S NODAL ADDRESS
      SSA           ABSOLUTE DESTINATION CODE ? (NEIGHBOR)
      JMP ABS       YES, GET LU AND RETURN
      DLD #NCNT     NO, GET ADDR & SIZE OF THE TABLE
      STA TEMP1     SAVE COUNTER
* 
LOOP  JSB LODWD     GET A CPU # 
      INB           POINT TO CORRESPONDING LU 
      CPA TEMP2,I   IS IT THE GOOD ONE ?
      JMP LUFND     YES 
      INB           BUMP POINTER TO NEXT NODE # 
      ISZ TEMP1     NO, END OF TABLE ?
      JMP LOOP      NO, CONTINUE
* 
      LDB "04"      YES, CPU # ERROR
* 
GETDS LDA "DS"
      JMP D65SV,I   RETURN WITH ERROR CODE
* 
ABS   CMA,INA       MAKE IT >0
      JMP LUOK
* 
LUFND JSB LODWD     FETCH LU
      AND B77       ISOLATE IT
* 
*  NOW SEND THE REQUEST(/DATA)
* 
LUOK  LDB #GRPM     GET "GRPM'S" CLASS NUMBER.             #
RPL3K IOR CONWX     SET "Z" BIT AND "WRITE" INDICATOR      #
      STA TEMP1     SAVE CONFIGURED CONWD.                 #
      STB TEMP2     SAVE CLASS NUMBER (#GRPM OR #RPCV).    #
* 
      JSB EXEC      DO CLASS WRITE/READ 
      DEF *+8 
      DEF CLS20     NO ABORT
      DEF TEMP1     CONTROL WORD
      DEF DABUF,I   DATA BUFFER ADDRESS 
      DEF DATAL,I   DATA LENGTH 
      DEF RQBUF,I   REQUEST BUFFER ADDRESS
      DEF RQLEN,I   REQUEST LENGTH
      DEF TEMP2 
* 
      JMP D65SV,I 
      ISZ D65SV 
      JMP D65SV,I 
      SKP 
* 
*     LOAD WORD FROM S.A.M., CROSS-LOAD IF DMS SYSTEM 
* 
LODWD NOP 
      LDA $OPSY     OPERATING SYSTEM TYPE 
      RAR,SLA       BIT#1=0 IF NON-DMS                     #
      JMP XLOAD     DMS: USE CROSS LOAD.                   #
*                                                                          #
      LDA B,I       NON-DMS: GET THE WORD FROM S.A.M.      #
      JMP LODWD,I   RETURN WITH <A>= WORD, <B> UNCHANGED.  #
*                                                                          #
XLOAD XLA B,I       GET THE WORD FROM THE SYSTEM MAP.      #
      JMP LODWD,I   RETURN: <A>=WORD, <B> UNCHANGED.       #
* 
*  DATA AREA
* 
B     EQU 1                                                #
TEMP2 NOP 
B77   OCT 77
CONWX OCT 10100 
RTYCT OCT 170077
CLS20 OCT 100024    CLASS WRITE/READ--NO ABORT
K7    DEC 7 
N7    DEC -7
N25   DEC -25 
"03"  ASC 1,03
"04"  ASC 1,04
"DS"  ASC 1,DS
      END 
                                                                      