ASMB,R,Q,C
      HED <#NRVS> NRV SEARCH ROUTINE
      NAM #NRVS,30 91750-1X022 REV 2013 800407 ALL
* 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  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.       *
******************************************************************
* 
* 
      ENT #NRVS 
* 
* 
      EXT #MSTO,#NCNT,$OPSY,#NRV
      EXT $LIBR,$LIBX,.ENTP 
      EXT #RR7
* 
*    NAME:   #NRVS
*    SOURCE: 91750-18022
*    RELOC:  91750-1X022
*    PGMR:   LYLE WEIMAN APR '79
**
**
* 
* 
*  #NRVS CALLING SEQUENCE:
* 
*     JSB #NRVS 
*     DEF RTN 
*     DEF NODE      NODE NUMBER FOR SEARCH
*     [DEF TIMOT]   RETURNED: MASTER TIME-OUT (OVERRIDE OR #MSTO) 
*     [DEF FMT#]    RETURNED: UPGRADE LEVEL OF <NODE>]
*     [DEF NAYBR]   RETURNED: NON-ZERO IF NODE IS NEIGHBOR TO LOCAL,
*     [DEF NODE#]   RETURNED: NODE NUMBER, WHEN <NODE> PARAMETER
*                       ON ENTRY CONTAINS -LU 
*     <ERROR RETURN, NODE NOT FOUND.  (B) REGISTER CONTAINS ASCII "04"> 
*     <NORMAL RETURN--A-REGISTER CONTAINS LU, B-REGISTER CONTAINS 
*                     POSITION NUMBER>
* 
*     NOTE 1: WHEN "NEIGHBOR ADDRESSING" IS USED, "DS04" ERRORS CAN 
*     OCCUR IF NO ENTRY IN THE NRV HAS BEEN IDENTIFIED SPECIFICALLY 
*     AS THE NEIGHBOR ON THE LU SPECIFIED.
* 
      SKP 
*     NRV TABLE FORMAT: 
* 
*               +--------------------------+
*     #NRV----> !  CPU  NUMBER  (16-BITS)  !
*               +--------------------------+
*               ! TIME-OUT ! XXXX !LEVEL # !
*               ! (8 BITS) !4 BITS!4 BITS  !
*               +----------+---------------+
*               !RESERVED!N! COMM-LINK LU  !
*               !(7 BITS)! ! (8 BITS)      !
*               +----------+---------------+
* 
*     N = 1 IF CPU IS NEIGHBOR TO LOCAL NODE, ELSE 0
* 
*     LEVEL # = 0 IF NODE IS DS/1000 (91740,
*               1 "   "   "  DS/100-IV (91750A), ETC. 
* 
*     XXXX = RESERVED FOR FUTURE USE
      SPC 2 
*     ARGUMENTS LIST: 
NODE  NOP           REMOTE NODE NUMBER, OR - LU 
TIMOT NOP           RETURNED:MASTER T.O. OVERRIDE, OR #MSTO 
FMT#  NOP           RETURNED: REMOTE NODE'S UPGRADE LEVEL 
NAYBR NOP           RETURNED: NEIGHBOR(#0)/NON-NEIGHBOR(0)/FLAG 
NNODX NOP           RETURNED: REMOTE NODE # ("NEIGHBOR" ADDRESSING ONLY)
      SPC 1 
#NRVS NOP           ENTRY/EXIT
      JSB $LIBR     GO PRIVILEGED 
      NOP 
      JSB .ENTP 
      DEF NODE        FOR PARAMETERS & RETURN POINT.
INT   JSB INIT
      LDA #NCNT     INTITIALIZE CNTR
      STA TEMP
      CLA,INA       INITIALIZE POSITION COUNTER 
      STA POS 
* 
*  CONVERT DESTINATION NODE TO LU 
* 
      LDA NODE,I
      SSA           ABSOLUTE DESTINATION CODE ? (NEIGHBOR)
      JMP ABS       YES, SEARCH FOR NEIGHBOR NODE.
FDLU  STA NODE
      LDB #NRV
* 
LOOP  JSB LODWD     GET A CPU # 
      CPA NODE      IS IT THE GOOD ONE ?
      JMP CPUFD     YES 
      ISZ POS       BUMP POSITION NUMBER
      ADB NRVSZ     POINT TO NEXT NODE IN TABLE 
      ISZ TEMP      END OF TABLE ?
      JMP LOOP      NO, CONTINUE
* 
*     NODE NOT FOUND.  TAKE ERROR EXIT. 
* 
DS04  EQU * 
      LDB "04"
      JMP EXIT2     TAKE ERROR RETURN 
* 
* 
*     HERE WHEN GIVEN A NEGATIVE NODE # (- LINK LU) 
ABS   EQU * 
      CMA,INA       MAKE IT >0
      JSB #RR7      FIND NEIGHBOR IN LINK VECTOR
       RSS          NOT FOUND, A = LU 
       JMP FDLU     FOUND, A = NODE 
      IOR  B400     SET "NEIGHBOR" BIT
      STA NODE      SAVE
      LDB #NRV
      ADB D2        ADVANCE TO LU WORD
LOOP2 EQU * 
      JSB LODWD     OBTAIN LU WORD
      AND =B777     MASK LU & "NEIGHBOR" BIT
      CPA NODE      MATCH THE ONE WE WANT?
      JMP ABSF      YES--FOUND IT 
      ISZ POS       NO, BUMP POSITION # 
      ADB NRVSZ     ADVANCE POINTER 
      ISZ TEMP      END OF LOOP?
      JMP LOOP2     NO, CONTINUE
      JMP DS04      NOT FOUND.
* 
ABSF  EQU *         HERE WHEN NEIGHBOR NODE # FOUND 
      ADB M2        BACK UP TO NODE NUMBER
      JSB LODWD     OBTAIN NODE NUMBER
      STA NODE
* 
CPUFD EQU *         HERE WHEN NODE HAS BEEN LOCATED IN NRV
      INB           BUMP TO TIME-OUT/FORMAT # WORD
      JSB LODWD     FETCH TIME-OUT & FORMAT # 
      STA TEMP      SAVE BOTH PARTS 
      AND =B17      ISOLATE MESSAGE FORMAT NUMBER 
      STA FMT#,I    RETURN TO CALLER
      LDA TEMP      RECOVER NRV WORD 2
      ALF,ALF       ROTATE TIME-OUT FIELD TO LOW HALF 
      AND =B377     MASK
      SZA,RSS       MASTER TIME-OUT OVERRIDE? 
      LDA #MSTO     NO, USE GENERAL TIME-OUT
      STA TIMOT,I   RETURN MASTER TIME-OUT
      INB           BUMP TO <LU> WORD 
      JSB LODWD     FETCH THE COMMUNICATION LINK LU 
      STA TEMP
      AND =B377     ISOLATE 
      STA COMLU     RETURN TO CALLER
      LDA TEMP      SET "NEIGHBOR" INDICATOR, IF NODE IS A NEIGHBOR 
      AND B400
      STA NAYBR,I 
      LDA NODE
      STA NNODX,I   RETURN REMOTE NODE # IF NECESSARY 
      ISZ #NRVS     TAKE NO-ERROR EXIT
      SPC 2 
EXIT  EQU * 
      LDB POS       RETURN WITH POSITION # IN (B) 
* 
EXIT2 EQU * 
      CLA           INITIALIZE DEFAULT- 
      STA FMT#        ABLE PARAMETERS 
      STA TIMOT         FOR NEXT CALL 
      STA NAYBR 
      STA NNODX 
      LDA COMLU      RETURN WITH (LU) IN (A)
      JSB $LIBX     RESTORE MEMORY PROTECT & RETURN TO CALLER 
      DEF #NRVS 
      SPC 2 
      SPC 2 
*     LOAD WORD FROM S.A.M., CROSS-LOAD IF DMS SYSTEM 
LODWD NOP 
MOD1  JMP X1        (NOP) IF DMS SYSTEM 
      XLA 1,I       CROSS-LOAD SAM WORD 
      JMP LODWD,I 
X1    LDA 1,I       NON-DMS.  PICK UP SAM WORD
      JMP LODWD,I   RETURN
* 
*     SUBROUTINE TO CONFIGURE LOAD/CROSS-LOAD INSTRUCTION 
* 
INIT  NOP 
      CLB 
      LDA $OPSY 
      RAR,SLA 
      STB MOD1
      STB INT 
      JMP INIT,I
* 
*     DATA AREA 
* 
*     EQUATE TEMPORARY STORAGE LOCATIONS TO LOCATIONS IN
*     THE EXECUTED-ONE-TIME-ONLY CONFIGURATION CODE AREA, 
*     TO SAVE A LITTLE MEMORY.
* 
TEMP  EQU INIT      TEMPORARY STORAGE 
POS   EQU INIT+1
COMLU EQU INIT+2
* 
NRVSZ DEC 3         # WORDS PER NRV ENTRY 
"04"  ASC 1,04
M2    DEC -2
D2    DEC 2 
B400  OCT 400 
      END 
                                                                                                                                                                          