SPL,L,O,T 
! 
! C6940 - HP6940A/B CONFIGURATION TABLE GENERATOR 
! 
!     SOURCE: 92413-18023  REV.1644 
!     RELOC:  92413-16023  REV.1644 
! 
! 
      NAME ISA04(5)  "92413-16023 REV.1644" 
! 
! 
!     THIS ENTRY IS JUST TO LOAD THE SEGMENT, THE MAIN CALLS
!     THE VARIOUS SUBROUNTINES. 
! 
      LET SWPRT BE LABEL,EXTERNAL 
ISA04:GOTO SWPRT
! 
! 
! 
      LET CMDIN BE SUBROUTINE, EXTERNAL ! FETCHES NEXT COMMAND
      LET WSAW BE PSEUDO,EXTERNAL,DIRECT ! WORK SPACE COMMAND 
      LET INWS BE PSEUDO,EXTERNAL,DIRECT
      LET STPRG BE PSEUDO,EXTERNAL,DIRECT ! RELEASE WORK SPACE
      LET WSAA  BE PSEUDO,EXTERNAL,DIRECT ! WORK SPACE _ ARRAY
      LET OUTRL BE SUBROUTINE,EXTERNAL ! OUTPUT RELOCATABLES
      LET GETCH BE FUNCTION,EXTERNAL
      LET WRITE BE SUBROUTINE,EXTERNAL,DIRECT ! WRITE ROUTINE 
      LET BUFFR BE INTEGER, EXTERNAL ! COMMAND INPUT BUFFER 
      LET RDNM BE INTEGER,FUNCTION,DIRECT 
      LET GCHR, FCHR BE INTEGER,FUNCTION,DIRECT 
      LET CMCNT, CHCNT, CMPTR BE INTEGER,EXTERNAL 
      LET CWSAW BE SUBROUTINE,DIRECT
      LET WSAW1 BE SUBROUTINE,DIRECT
      LET OCTL BE INTEGER,FUNCTION,DIRECT 
! 
!  ALL MESSAGES TO BE PRINTED DEFINED HERE
! 
      LET M2(15),M3(3),\
          M10(5),M11(10),M12(27),M13(17),M15(9), \
          M20(7),M21(13),M22(17),M23(6),M24(18),M25(8), \ 
          M26(9),M27(9),M28(9),M29(6),M30(7),M31(14), \ 
          M32(17),M33(21) BE INTEGER
! 
         INITIALIZE M2 TO 28," SUBSYSTEM #00 CONFIGURATION" 
         INITIALIZE M3 TO 3,"LU?" 
         INITIALIZE M10 TO 8,"# EVENT?" 
         INITIALIZE M11 TO 17,"# DIGITAL OUTPUT?" 
         INITIALIZE M12 TO 16,"# DIGITAL INPUT?", \ 
                           15,"# VOLTAGE DACS?", \
                           15,"# CURRENT DACS?" 
         INITIALIZE M13 TO 31,"HP 6940 SUBSYSTEM CONFIGURATION" 
         INITIALIZE M15 TO 16,"ILLEGAL RESPONSE"
         INITIALIZE M20 TO 12,"# OF 6940'S?"
         INITIALIZE M21 TO 24,"# OF CHANNELS IN 2313'S?"
         INITIALIZE M22 TO 32,"# OF CHANNELS IN 6940 UNIT #00? "
         INITIALIZE M23 TO 9,"I/O SLOT?"
         INITIALIZE M24 TO 34,"# DIG INPUT FOR PRESET CNTR W/INT?"
         INITIALIZE M25 TO 14,"# DIGITAL I/O?"
         INITIALIZE M26 TO 16,"# DIGITAL INPUT?"
         INITIALIZE M27 TO 15,"# VOLTAGE DACS?" 
         INITIALIZE M28 TO 15,"# CURRENT DACS?" 
         INITIALIZE M29 TO 9,"# TIMERS?"
         INITIALIZE M30 TO 11,"# COUNTERS?" 
         INITIALIZE M31 TO 25,"# STALL ALARM INCREMENTS?" 
         INITIALIZE M32 TO 31," ASSOCIATED CHNL FOR CNTR #000?" 
         INITIALIZE M33 TO 40,"ENTER INSTR. CONFG. CONSTANTS" 
! 
      LET ENT69 BE INTEGER(5) ! 6940 ENTRY RECORD 
         INITIALIZE ENT69 TO 4,"&694",30000K,0
      LET N6940 BE INTEGER(18) ! 6940 NAM RECORD
         INITIALIZE N6940 TO 17,10400K,20000K,0,"&6940 ", \ 
                             100001K,0,0,6,7(0) 
! 
! 
! 
! 
! 
! 
! C6940 PRODUCES THE HP6940 CONFIGURATION TABLE IN RELOCATABLE
! FORMAT. THE FOLLOWING IS AN ASSEMBLY LANGUAGE REPRESENTATION
! OF THE CONFIGURATION TABLE: 
! 
!       NAM &6940,6 
!       ENT &6940 
! &6940 DEC -99       - # OF CHAN IN 2313'S 
!       DEF U1
!       DEF U2
!       DEC -1
! U1    DEC -30       - # OF CHAN IN U1 
!       OCT 14        I O SLOT
!       OCT 107       LU + 100B 
!       DEC 2         # EVENT 
!       DEF EVBF1 
!       DEC 2         # DIG IN FOR CT W INT 
!       DEF CTI1
!       DEC 14        # I O CARDS 
!       DEF I/O1
!       DEC 2         # DIG IN
!       DEF 0 
!       DEC 2         # VOLT DACS 
!       DEF 0 
!       DEC 2         # CURRENT DACS
!       DEF 0 
!       DEC 2         # OF TIMERS 
!       DEF TME1
!       DEC 4         # OF CTRS 
!       DEF CT1 
! TME1  DEC 1000      NUMBER OF TIMER INC,0=NO STALL
! CT1   DEC 125       TIMER FOR FREQ
!       DEC 0          NO, REQUIRES UPDATE
!       DEC -102
!       DEC -103      D.I. CARD 
! I/O1  BSS 14        # OF I O
! EVBF1 DEF *+2       DEF *+# OF EVENT
!       BSS 26        BSS THIRTEEN TIMES # EVENT
! CTI1  BSS 2         # OF DI FOR CTR W INT 
! 
! U2    DEC -30       - # OF CHAN IN U2 
!       OCT 12        I O SLOT
!       OCT 110       LU + 100B 
!       DEC 2         # EVENT 
!       DEF EVBF2 
!       DEC 2         # DIG IN FOR CT W INT 
!       DEF CTI2
!       DEC 14        # I O CARDS 
!       DEF I/O2
!       DEC 2         # DIG IN
!       DEF 0 
!       DEC 2         # VOLT DACS 
!       DEF 0 
!       DEC 2         # CURRENT DACS
!       DEF 0 
!       DEC 2         # OF TIMERS 
!       DEF 0 
!       DEC 4         # OF CTRS 
!       DEF CT2 
!       OCT 0 
! CT2   DEC 155       TIMER FOR FREQ
!       DEC 0          NO 
!       DEC -132      D.I. CARD 
!       DEC -133
! I/O2  BSS 14        # OF I O
! EVBF2 DEF *+2       DEF *+# OF EVENT
!       BSS 26        BSS THIRTEEN TIMES # EVENT
! CTI2  BSS 2         # OF DI FOR CTR W INT 
! 
!       END 
! 
C6940: SUBROUTINE(W1,W2,W3,W4) GLOBAL 
! 
      WORDS _ 0 
      W1,W2,W3,W4 _ 0 
      CALL WRITE(M20) ! "# OF 6940'S?"
C100: IF [LSUBS_RDNM(8)] = 0 THEN RETURN ! IF NONE RETURN 
      IF FCHR = "-" THEN [CALL WRITE(M15); GO TO C100]
! 
      CALL WRITE(M21) ! "# OF CHANNELS IN 2313'S?"
C110: CHAN _ RDNM(10000)            ! READ IN # OF CHNL IN 2313'S 
      IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C110] 
      CALL CWSAW([CHAN_-CHAN])
! 
      REPEAT LSUBS TIMES DO [CALL WSAW1(0)] ! RESERVE SPACE FOR UNITS 
      ADDR _ LSUBS + 2
      INWS(W1,4) _ ADDR ! DEF U1
      CALL CWSAW(-1)    ! OCT -1
      START _ WORDS 
! 
      FOR SUBS_1 TO LSUBS DO THRU E6940 
         ONES _ SUBS-10*[TENS_SUBS/10]      ! GENERATE AND
         M2(8) _ "00" + ONES + (TENS-<8)    !  PRINT SUBSYSTEM
         CALL WRITE(M2)                     !   NUMBER MESSAGE
! 
      CALL CWSAW(0) ! RESERVE SPACE FOR -# CHNL'S IN UNIT 
      TCH _ WORDS 
! 
      CALL WRITE(M23) ! "I/O SLOT?" 
C120: IOSLT _ OCTL(256)             ! READ IN I/O SLOT
      IF FCHR = "-" OR IOSLT < 8 THEN [CALL WRITE(M15); GOTO C120]
      CALL CWSAW(IOSLT) 
! 
      CALL WRITE(M3) ! "LU?"
C130: LU _ RDNM(64) OR 64           ! READ IN LOGICAL UNIT NUMBER 
      IF FCHR = "-" OR LU < 71 THEN [CALL WRITE(M15); GOTO C130]
      CALL CWSAW(LU)
! 
      CALL WRITE(M10) ! "# EVENT?"
C140: EVNT _ RDNM(15)              ! READ IN # OF EVENT SENSE CARDS 
      IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C140] 
      CALL CWSAW(EVNT)
! 
      CALL WSAW1(0) ! RESERVE SPACE FOR PNTR TO EVENT BUFFER
      EVBF1 _ WORDS 
! 
      CALL WRITE(M24) ! "# DIGITAL INPUT FOR PRESET COUNTER W INT?" 
C150: DIGCT _ RDNM(15)             ! READ IN # OF DIGITAL INPUT 
!                                    CARDS FOR COUNTER W INT. 
      IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C150] 
      CALL CWSAW(DIGCT) 
! 
      CALL WSAW1(0) ! RESERVE SPACE FOR PNTR TO CT W INT
      CTI1 _ WORDS
! 
      CALL WRITE(M25) ! "# OF DIGITAL I/O?" 
C160: DIGIO _ RDNM(240)             ! READ IN # OF DIGITAL I/O CARD 
      IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C160] 
      CALL CWSAW(DIGIO) 
! 
      CALL WSAW1(0) ! RESERVE SPACE FOR PNTR TO # OF I O CARDS
      IO1 _ WORDS 
! 
      CALL WRITE(M26) ! "# DIGITAL INPUT?"
C170: DIGIN _ RDNM(240)             ! READ IN # OF DIGITAL INPUT CARD 
      IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C170] 
      CALL CWSAW(DIGIN) 
! 
      CALL CWSAW(0) ! OCT 0 
! 
      CALL WRITE(M27) ! "# VOLTAGE DACS?" 
C180: VDC _ RDNM(240)               ! READ IN # OF VOLTAGE DACS 
      IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C180] 
      CALL CWSAW(VDC) 
! 
      CALL CWSAW(0) ! OCT 0 
! 
      CALL WRITE(M28) ! "# CURRENT DACS?" 
C190: CDAC _ RDNM(240)              ! READ IN # OF CURRENT DACS 
      IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C190] 
      CALL CWSAW(CDAC)
! 
      CALL CWSAW(0) ! OCT 0 
! 
      CALL WRITE(M29) ! "# TIMERS?" 
C200: TIME _ RDNM(240)              ! READ IN # OF PROG. TIMER CARDS
      IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C200] 
      CALL CWSAW(TIME)
! 
      ADDR _ WORDS/2 + 3
      IF SUBS = 1 THEN CALL WSAW1(ADDR) ! DEF *+3 
      IF SUBS > 1 THEN CALL CWSAW(0)    ! OCT 0 
! 
      CALL WRITE(M30) ! "# COUNTERS?" 
C210: COUNT _ RDNM(240)             ! READ IN # OF PULSE COUNT CARDS
      IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C210] 
      CALL CWSAW(COUNT) 
! 
      TCHNL_EVNT+DIGCT+DIGIO+DIGIN+VDC+CDAC+TIME+COUNT
      INWS(W1,TCH) _ -TCHNL         ! INSERT -# OF CHNL'S IN UNIT 
! 
      ADDR _ WORDS/2 + 2
      CALL WSAW1(ADDR) ! DEF *+2
! 
      IF SUBS > 1 OR TIME = 0 THEN GOTO C230
      CALL WRITE(M31) ! "# STALL ALARM INCREMENTS?" 
C220: STALL _ RDNM(4096)            ! READ IN # OF STALL ALARM STEPS
      IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C220] 
      CALL CWSAW(STALL) 
      GO TO C240
C230: CALL CWSAW(0) ! OCT 0 
! 
C240: IF COUNT = 0 THEN GO TO C250
! 
      FOR T _ 1 TO COUNT DO THRU CNTR 
         HUNDS _ T/100                     ! GENERATE 
         TENS _ (T-(HUNDS*100))/10         ! COUNTER
         ONES _ T-(HUNDS*100)-(TENS*10)    ! NUMBER 
         M32(16) _ "00" + ONES + (TENS-<8) ! AND
         M32(15) _ "#0" + HUNDS            ! PRINT
         CALL WRITE(M32)                   ! MESSAGE
! 
      CNT _ RDNM(1000)               ! READ IN PULSE CNTR CHAN
      IF FCHR = "-" THEN CNT _ -CNT 
CNTR: CALL CWSAW(CNT) 
! 
C250: ADDR _ WORDS/2
      INWS(W1,IO1) _ ADDR            ! INSERT PNTR TO # OF IO CARDS 
! 
      REPEAT DIGIO TIMES DO [CALL CWSAW(0)] ! # OF IO 
! 
      ADDR _ WORDS/2
      INWS(W1,EVBF1) _ ADDR          ! INSERT PNTR TO EVENT BUFFER
! 
      ADDR _ EVNT + ADDR
      CALL WSAW1(ADDR) ! DEF *+# OF EVENTS
! 
      E _ 13*EVNT 
      REPEAT E TIMES DO [CALL CWSAW(0)] ! BSS 13*EVENT
! 
      ADDR _ WORDS/2
      INWS(W1,CTI1) _ ADDR           ! INSERT PNTR TO CT W INT
! 
      REPEAT DIGCT TIMES DO [CALL CWSAW(0)] ! BSS # OF DI FOR 
!                                             CTR W INT.
! 
      ADDR _ (WORDS - START)/2
      ADDR _ LSUBS + 2 + ADDR 
E6940: IF SUBS<LSUBS THEN INWS(W1,SUBS*2+4) _ ADDR
! 
      WSAA(W2) _ @N6940 
      WSAA(W3) _ @ENT69 
      RETURN
      END C6940 
! 
! 
RDNM: FUNCTION(LIMIT) INTEGER,DIRECT
      RDCMD: CALL CMDIN(BUFFR,ERR)
      N _ 0 
      IF [CHAR_GCHR] = 55K THEN [CHAR_GCHR]  !SKIP DASH 
! 
! FETCH NEXT COMMAND CHARACTER. IF AT EOL, RETURN 
! 
NXCHR: IF CHAR = 10 OR CHAR =54K \
        THEN [IF N > LIMIT  \ IF FINAL VALUE GREATER THAN 
         THEN [CALL WRITE(M15);  \ LIMIT GIVE ERROR AND 
          GOTO RDCMD]  \ TRY AGAIN
           , ELSE RETURN N] 
! 
! CONVERT ASCII TO NUMERIC, IF NOT NUMERIC GIVE ERROR 
! 
      IF [N1_CHAR-60K]<0 OR N1>9 \
         THEN [CALL WRITE(M15); \ IF CHARACTER IS NOT A NUMBER
               GO TO RDCMD]  \ GIVE ERROR AND TRY AGAIN 
         ,ELSE N_N*10+N1 ! UPDATE RUNNING SUM 
      CHAR_GCHR 
      GO TO NXCHR ! GO FETCH NEXT CHARACTER 
      END RDNM
! 
CWSAW: SUBROUTINE(WORD)DIRECT 
      WSAW(W1)_0
      WSAW(W1)_WORD 
      WORDS_WORDS+2 
      RETURN
      END CWSAW 
! 
WSAW1: SUBROUTINE(WORD1)DIRECT
      WSAW(W1)_1
      WSAW(W1)_WORD1
      WORDS_WORDS+2 
      RETURN
      END WSAW1 
! 
GCHR: FUNCTION DIRECT        ! GET NEXT CHARACTER ROUTINE 
GCHR1:IF GETCH(CHAR)=40K \
         THEN GO TO GCHR1 \ 
         ,ELSE RETURN CHAR
      END GCHR
! 
FCHR: FUNCTION DIRECT        ! FIRST CHARACTER ROUTINE
      CHCNT _ 0 
      CMPTR _ CMPTR - CMCNT/2 
FCHR1:IF GETCH(CHAR)=40K \
         THEN GO TO FCHR1 \ 
         ,ELSE RETURN CHAR
      END FCHR
! 
! 
OCTL: FUNCTION(LMT)INTEGER,DIRECT 
      READ: N _ RDNM(LMT) 
      IF [BIT64_N/100]>7 THEN [CALL WRITE(M15); GOTO READ]
      IF [BIT8_(N-(BIT64*100))/10]>7  \ 
        THEN [CALL WRITE(M15); GOTO READ] 
      IF [BIT1_N-(BIT64*100)-(BIT8*10)]>7 \ 
        THEN [CALL WRITE(M15); GOTO READ] 
      N_(BIT64*64)+(BIT8*8)+BIT1
      RETURN N
      END OCTL
! 
      END ISA04 
      END$
                                                                                    