ASMB,R,Q,C
      HED <#MAUP> MA INITIALIZATION * (C) HEWLETT-PACKARD CO. 1980
      NAM #MAUP,7 91750-1X135 REV 2013 800415 ALL 
      ENT #MA1,#MA2,#MA3
* 
      EXT $LIBR,$LIBX,.MVW,.LDX 
      EXT #PRNT,#ABRT,#READ,#SYSR,#NODE,#PRSB,#EXFR,$OPSY 
      EXT #MARN,#MARL,#MCTR,#MTBL 
      EXT #MA1.,#MA2.,#RNSB,#CLSB 
PRINT EQU #PRNT 
ABORT EQU #ABRT 
READ  EQU #READ 
ERMSG EQU #SYSR 
QUERY EQU #EXFR 
RNSUB EQU #RNSB 
CLSUB EQU #CLSB 
* 
@NODE DEF #PRSB 
@RL   DEF #PRSB+4   RETRY LIMIT 
@MTO  DEF #PRSB+8 
@MA   DEF #PRSB+20  "MA" (MA INDICATOR) 
@MATO DEF #PRSB+24  (OPTIONAL) MA TIMEOUT 
      SPC 1 
******************************************************************
*  * (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 THE HEWLETT-PACKARD COMPANY.   *
******************************************************************
      SPC 1 
*         #MAUP 
*     ------------- 
*     SOURCE PART # 91750-18135 
*     REL. PART #   91750-1X135 
*     PROGRAMMER    TOM MILNER
*     WRITTEN       07.12.79
* 
* USED AS 3 SUBROUTINES FOR 'DINIT'. IF MA IS GENERATED 
* IN THE SYSTEM, THESE THREE ROUTINES (THRU DINIT) INITIALIZES THE
* MA TABLE, AND ATTEMPTS TO BRING ALL CHANNELS UP.
* 
* INITIAL CALL TO DETERMINE SPACE REQUIREMENTS
* 
*         JSB #MA1
*      < A-REG RETURNS WITH #WORDS REQUIRED > 
* 
* 
* CALL TO INITIALIZE INTERNAL MA VALUES 
* 
*     < #MTBL CONTAINS ADDRESS OF ALLOCATED SAM>
*     < <A> = NUMBER OF NRV ENTRIES > 
*         JSB #MA2
* 
* CALL FOR EACH NRV ENTRY (DETERMINES IF MA REQUIRED FOR THIS NODE) 
* 
*     < #PRSB HAS PARSE BUFFER = CPU#,LU,TIMEOUT,LEVEL,'N','MA',MATO >
*     < <A> = MASTER TIMEOUT VALUE  > 
*         JSB #MA3
* 
* 
#SIZE EQU 10        MA TABLE ENTRY SIZE (IN WORDS)
      SKP 
#MA1  NOP 
      CLB 
      STB M         CLEAR NODE COUNTER
      LDA $OPSY     TEST FOR DMS
      RAR,SLA 
      STB DMS1
      JSB PRINT     "HOW MANY NODES NEED MA?" 
       DEF MAMS1
      JMP *+3 
MA1.A JSB QUERY     REPEAT QUESTION AFTER PRINTING ERROR
       DEF ERMS6    "BAD NUMBER OF NODES" 
      JSB READ      ANY?
      CPA D1        NUMERIC?
      RSS           . YEP OK
      JMP MA1.A     . NO ASK AGAIN
      SSB           POSITIVE? 
      JMP MA1.A     . NO ASK AGAIN
      STB M         SAVE NODE COUNT 
* 
      DLD @RL,I     GET RETRY LIMIT - IF NONE USE DEFAULT 
      SZA,RSS       RETRY LIMIT SPECIFIED?
      JMP DRL       . NO GET DEFAULT
      CPA D1        NUMERIC INPUT 
      JMP DRL+1     . YEP GO FOR IT 
      CPB "/D"      DEFAULT REQUESTED?
      JMP DRL       . YEP DO IT 
      JSB QUERY     "INVALID RETRY LIMIT" 
       DEF ERMS3
      JMP MA1.A+2 
DRL   LDB MARL      DEFAULT RETRY LIMIT 
      STB RL        SAVE FOR NOW
      CMB,INB 
      ADB D15       RANGE LESS THAN OR EQUAL 15?
      SSB 
      JMP DRL-3     . NO BADO BADO... 
      LDB RL
      ADB N1        RANGE GREATER THAN OR EQUAL 1?
      SSB 
      JMP DRL-3     . NO BADO BADO... 
* 
      LDB M 
      LSR 16        <A> := <B>, <B> := 0
      MPY ESIZE     TIMES WORDS PER ENTRY 
      JMP #MA1,I    RETURN W/ <A> = NUMBER WORDS NEEDED 
      SPC 2 
#MA2  NOP 
      STA N         SAVE NUMBER OF NRV ENTRIES
      LDA M         MA NEEDED?
      SZA,RSS 
      JMP #MA2,I    . NO
      CMA,INA 
      STA #MCTR     SAVE NUMBER OF MA ENTRIES 
      LDA RL
      STA #MARL     SAVE MA RETRY LIMIT 
      LDA #MTBL 
      STA PTR       TEMPORARY PTR FOR #MA3
* 
      JSB RNSUB     ALLOCATE RN 
       DEF #MA1.
* 
      CCA 
      JSB CLSUB     ALLOCATE CLASS
       DEF #MA2.
      JMP #MA2,I
      SPC 2 
      SPC 1 
*     FILL IN MA TABLE. 'M' HAS REMAINING MA ENTRIES. 'N' HAS 
*     REMAINING NRV ENTRIES. 'PTR' CONTAINS NEXT MA ENTRY LOCATION. 
* 
#MA3  NOP 
      IOR UPPER 
      CMA,INA       MAKE POSITIVE # OF UPLIN TICKS
      MPY D5        CONVERT UPLIN TICKS TO SECONDS
      STA MSTO      SAVE MASTER TIMEOUT 
* 
      CCA 
      ADA N         DECREMENT # REMAINING NRV ENTRIES 
      STA N 
* 
      DLD @MA,I     CHECK IF MA SPECIFIED 
      SZA,RSS 
      JMP CKCNT     NOT SPECIFIED, CHECK COUNTS 
      CPB "MA"      CORRECT REQUEST 
      JMP *+3 
      JSB ERMSG     "INVALID MA SPECIFICATION"
       DEF ERMS1
* 
      CCA 
      ADA M         DECREMENT REMAINING MA NODES
      STA M 
      SSA,RSS       COUNT ROLLED OVER?
      JMP *+3       . NO OK 
      JSB ERMSG     "INCORRECT NUMBER OF MA NODES"
       DEF ERMS6
* 
      DLD @NODE,I   SAVE NODE # 
      STB @TBL+1
      CPB #NODE     MA SPECIFIED TO LOCAL NODE? 
      RSS 
      JMP *+3       . NO OK 
      JSB ERMSG     "CANNOT HAVE MA TO LOCAL NODE"
       DEF ERMS5
* 
      DLD @MATO,I   GET OPTIONAL TIMEOUT
      SZA,RSS 
      JMP DTO       NOT GIVEN, GET DEFAULT
      CPA D1        NUMERIC?
      JMP DTO+1     . YEP USE IT
      CPB "/D"      DEFAULT REQUESTED?
      JMP DTO 
      JSB ERMSG     "INVALID MA TIMEOUT"
       DEF ERMS2
DTO   LDB MATL      DEFAULT TIMEOUT 
      SSB           CHECK FOR NEGATIVE NUMBER 
      JMP DTO-2        BADO BADO
      RBL,RBL       ALLOW FOR STATE WORD
      STB @TBL+2
* 
*     VERIFY THAT # RETRYS * MA TIMEOUT <= MASTER TIMEOUT 
* 
      RBR,RBR 
      LDA B 
      MPY #MARL     RETRYS * MATO 
      CMA,INA 
      STA TMP       SAVE FOR NOW
      DLD @MTO,I    GET MASTER TIMEOUT FROM STRING
      SZA,RSS       GET DEFAULT IF
      LDB MSTO         NONE SPECIFIED 
      SZB,RSS       GET MASTER TIMEOUT IF 
      LDB MSTO         ZERO SPECIFIED 
      CPB "/D"            OR GET MASTER TIMEOUT 
      LDB MSTO               IF DEFAULT SPECIFIED 
      ADB TMP 
      SSB 
      JMP BADTO     BAD TIMEOUT 
*--   MOVE MA TABLE ENTRY INTO SAM
      LDA @TBL
      LDB PTR 
      JSB MOVE
      STB PTR       <B> --> NEXT MA ENTRY 
* 
*     CHECK FOR VALID NUMBER OF REMAINING MA ENTRIES
*     (IE., N >= M) 
* 
CKCNT LDA N 
      CMA 
      ADA M 
      SSA 
      JMP #MA3,I
      JSB ERMSG     "INCORRECT NUMBER OF MA NODES"
       DEF ERMS6
      SPC 2 
BADTO JSB ERMSG     "MA TIMEOUT * RETRYS > MASTER TIMEOUT"
       DEF ERMS4
      SPC 2 
MOVE  NOP 
      JSB $LIBR     TURN OFF INTERRUPTS 
       NOP
DMS1  JMP MOVE2     'NOP'ED IF DMS
      JSB .LDX
      DEF ESIZE 
      MWI           MOVE BACK INTO SAM
      JMP MOVE3 
MOVE2 JSB .MVW      MOVE BACK INTO SAM
      DEF ESIZE 
      NOP 
MOVE3 JSB $LIBX     TURN INTERRUPTS ON
       DEF *+1
       DEF *+1
      JMP MOVE,I
      SKP 
*----------------------------------------------------------*
*                  CONSTANTS
*----------------------------------------------------------*
A     EQU 0 
B     EQU 1 
* 
"/D"  ASC 1,/D
"MA"  ASC 1,MA
N1    DEC -1
D1    DEC 1 
D5    DEC 5 
D15   DEC 15
MATL  DEC 3         DEFAULT TIMEOUT SECONDS 
MARL  DEC 13        DEFAULT MAX RETRY LIMIT 
BIT13 OCT 020000
ESIZE ABS #SIZE 
UPPER OCT 177400
ALRN  OCT 040020
ALHC  OCT 000001
@TBL  DEF *+1       INITIAL MA TABLE ENTRY
      OCT 0         +0 NODE NUMBER WILL BE FILLED IN
      OCT 0         +1 MASW 
      OCT 1         +2 VA 
      OCT 2         +3 VT1/VT2
      OCT 1         +4 VR 
      OCT 0         +5 VF 
      OCT 0         +6 VC 
      OCT 0         +7 VCC/VCD
      OCT 0         +8 LERC 
      OCT 0         +9 LERN 
      SUP 
MAMS1 DEF *+3 
      DEF *+1 
      ABS ERMS1-*-1 
      ASC 19,ENTER # OF MA NODES [,RETRY LIMIT]?  _ 
ERMS1 DEF *+3 
      DEF *+1 
      ABS ERMS2-*-1 
      ASC 13,INVALID MA SPECIFICATION!
ERMS2 DEF *+3 
      DEF *+1 
      ABS ERMS3-*-1 
      ASC 10,INVALID MA TIMEOUT!
ERMS3 DEF *+3 
      DEF *+1 
      ABS ERMS4-*-1 
      ASC 21,INVALID MA RETRY LIMIT! EXCEEDS RANGE 1-15 
ERMS4 DEF *+3 
      DEF *+1 
      ABS ERMS5-*-1 
      ASC 20,(MA TIMEOUT * RETRYS) > MASTER TIMEOUT!
ERMS5 DEF *+3 
      DEF *+1 
      ABS ERMS6-*-1 
      ASC 15,CANNOT HAVE MA TO LOCAL NODE!
ERMS6 DEF *+3 
      DEF *+1 
      ABS ERMS7-*-1 
      ASC 15,INCORRECT NUMBER OF MA NODES!
ERMS7 EQU * 
      UNS 
*----------------------------------------------------------*
*                  STORAGE
*----------------------------------------------------------*
PTR   BSS 1 
M     BSS 1 
N     BSS 1 
RL    BSS 1 
TMP   BSS 1 
MSTO  BSS 1 
SIZE  EQU * 
      END 
                                                                                        