SPL,L,O ! ! C2313 - HP2313B AND HP6940A/B CONFIGURATION TABLE GENERATOR ! ! SOURCE TAPE 92413-18012 REV. 1644 ! RELOC. TAPE 92413-16012 REV. 1644 ! ! NAME C2313(7) ! ! ! "C2313" CONSISTS OF TWO SUBROUTINES (C2313 & C6940) WHICH GENERATES ! THE HP2313B AND HP6940A/B HARDWARE CONFIGURATION TABLES ..ADC AND ! &6940 RESPECTIVELY. THIS MODULE IS PART OF THE RTE-B TABLE GENERATOR ! 29102-60030 AND ISA TABLE GENERATOR 92413-16011. ! ! LET C2313,C6940 BE SUBROUTINE,GLOBAL,DIRECT 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 RELSE BE SUBROUTINE,DIRECT ! RELEASES WORK SPACE LET CWSAW BE SUBROUTINE,DIRECT LET WSAW1 BE SUBROUTINE,DIRECT LET .YES. BE SUBROUTINE,DIRECT ! INPUTS YES OR NO RESPONSE LET OCTL BE INTEGER,FUNCTION,DIRECT ! ! "GAINA" IS A TABLE OF THE POSSIBLE GAINS FOR THE LOW LEVEL ! MULTIPLEXER LET GAINA(16) BE INTEGER INITIALIZE GAINA TO "1000", \ "1000" "50",30012K, \ "500" "25",30012K, \ "250" "12",32412K, \ "125" "10",30012K, \ "100" "50",5012K, \ "50" "25",5012K, \ "25" "12.5" \ "12.5" ! ! ALL MESSAGES TO BE PRINTED DEFINED HERE ! LET M1(7),M2(15),M3(3),M5(6),M6(7),M7(7),M8(5), \ 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 M1 TO 12,"# OF 2313'S?" INITIALIZE M2 TO 28," SUBSYSTEM #00 CONFIGURATION" INITIALIZE M3 TO 3,"LU?" INITIALIZE M5 TO 10,"# HL - SE?" INITIALIZE M6 TO 11,"# HL - DIF?" INITIALIZE M7 TO 11,"# LL, GAIN?" INITIALIZE M8 TO 7,"# DACS?" 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 ENT23 BE INTEGER(9) ! ENTRY POINT RECORD FOR 2313 INITIALIZE ENT23 TO 8,"..AD",41400K,0,"..DA",41400K,0 LET N2313 BE INTEGER(18) ! 2313 NAM RECORD INITIALIZE N2313 TO 17,10400K,20000K,0,"..ADC ", \ 100001K,0,0,6,7(0) 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) ! C2313: SUBROUTINE GLOBAL,DIRECT CALL WRITE(M1) ! WRITE # OF SUBSYS MESSAGE C10: IF [LSUBS_RDNM(64)] = 0 THEN RETURN ! IF NONE RETURN IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C10] NDACS,NCHN,W1,W2,W3,W4_0 WSAW(W1)_1 ! FIRST WORD OF TABLE WSAW(W1)_1 ! IS A DEF *+1 CALL CWSAW(LSUBS) ! 2ND WORD IS NUMBER OF SUBSYSTEMS WSPNT_6 FOR SUBS_1 TO LSUBS DO THRU E2313 ONES_SUBS-10*[TENS_SUBS/10] ! GENERATE AND M2(8)_"00"+ONES+(TENS-<8) ! PRINT SUBSYSTEM CALL WRITE(M2) ! NUMBER MESSAGE WORDS_0 SLOT_2 CALL CWSAW(0) ! CALL WRITE(M3) ! PRINT "LU?" AND C20: LU _ RDNM(64) ! READ IN LOGICAL UNIT NUMBER IF FCHR = "-" OR LU < 7 THEN [CALL WRITE(M15); GOTO C20] CALL CWSAW(LU) ! CALL CWSAW(0) ! RESERVE SPACE FOR LAST CHANL IN SUBSYS. ! CALL WRITE(M5) ! INPUT NUMBER OF HLSE: K1_RDNM(1056) ! HIGH LEVEL SINGLE ENDED CHANNELS IF K1 # 16 THEN [ IF K1 AND 37K THEN [ \ MUST BE 16 OR CALL WRITE(M15) ; \ MULTIPLE OF 32, OTHERWISE GO TO HLSE ]] ! GIVE ERROR AND TRY AGAIN ! CALL CWSAW(K1) ! RECORD NUMBER OF HLSE CHANNELS ! HLCH,NCHN_NCHN+N SLOT_SLOT+(N >- 5) ! CALL WRITE(M6) ! INPUT NUMBER OF HIGH LEVEL HLDF: K1_RDNM(528) ! DIFFERENTIAL INPUT CHANNELS IF K1 # 8 THEN [ IF K1 AND 17K THEN [ \ MUST BE 8 OR CALL WRITE(M15) ;\ A MULTIPLE OF 16 GO TO HLDF ]] ! OTHERWISE GIVE ERROR ! CALL CWSAW(K1) ! RECORD NUMBER HLDF CHANNELS NCHN_NCHN+N ! ! GENERATE LOW LEVEL GAIN ENTRIES ! CALL WRITE(M7) ! PRINT LOW LEVEL MESSAGE RDLL: IF RDNM(528) = 0 THEN GO TO RDLL1 ! IF LAST ENTRY GO TO END IF GCHR = "-" \ IF GAIN IS NEGATIVE USE SINGLE THEN [ ENTRY_N; \ CHANNEL ENTRIES N_1; \ CALL GCHR ] \ FETCH NEXT CHARACTER ,ELSE ENTRY_1 ! USE ONE MULTIPLE CHAN ENTRY WD1_CHAR -< 8 OR GCHR ! FETCH GAIN ENTRY WD2_GCHR -< 8 OR GCHR ! TO COMPARE WITH TABLE FOR G_1 TO 15 BY 2 DO [ \ SEARCH TABLE IF WD1=GAINA(G) AND WD2=GAINA(G+1) THEN GO TO FGAIN ] CALL WRITE(M15) ! IF GAIN NOT FOUND GIVE ERROR GO TO RDLL ! AND TRY AGAIN ! FGAIN: REPEAT ENTRY TIMES DO [\ CALL CWSAW((G-1 -> 4) OR N); \ RECORD GAIN ENTRY NCHN_NCHN+N ] ! UPDATE SUM OF CHANNELS GO TO RDLL RDLL1: INWS(W1,WSPNT+4)_NCHN ! RECORD LAST CHAN. IN SUBSYS. INWS(W1,WSPNT)_WORDS>-1 ! RECORD TOTAL WORDS IN SUBSYS ENTRY ! ! GENERATE DAC ENTRIES ! LU_(LU AND 77K) -< 10 ! MOVE LU TO UPPER 6 BITS SLOT_SLOT+((NCHN-HLCH)>-4) ! COMPUTE CURRENT SLOT POSITION ! CALL WRITE(M8) ! OUTPUT "# DACS?" MESSAGE C30: DAC _ RDNM(64) ! INPUT RESPONSE AND UPDATE DAC CNTR IF (DAC AND 1K) THEN [WRITE(M15);GOTO C30] IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C30] NDACS _ NDACS + DAC ! FOR N_1 TO DAC>-1 DO [ \ GENERATE ENTRY FOR EACH CARD WSAW(W4)_ LU OR \ LOGICAL UNIT NUMBER IN BITS 10-15 (SLOT+N)/12 -< 7 OR \ BOX NUMBER IN BITS 7-9 $1 -< 3 OR \ SLOT NUMBER IN BITS 3-6 1 ] \ NUMBER OF CHNLS ON CARD -1 IN BITS 0-2 ! E2313: WSPNT_WSPNT+WORDS ! UPDATE WORK SPACE POINTER WSAW(W1)_1 ! PUT DEF *+1 AT BEGINNING ENT23(9)_[WSAW(W1)_(WSPNT>-1)]-1 ! OF DAC TABLE CALL CWSAW(NDACS) ! FOLLOWED BY NUMBER OF DACS ! MOVE DAC TABLE TO END OF ADC TABLE I_0 ALWAYS DO [ \ I_I+1; \ CALL CWSAW(INWS(W4,I)?[GO TO REL]) ] ! ! MOVE NAM AND ENTRY RECORDS INTO A WORK SPACE AND OUTPUT ! THE RELOCATABLE CODE ! REL: WSAA(W2)_@N2313 WSAA(W3)_@ENT23 CALL OUTRL(W2,W3,0,W1) CALL RELSE ! RELEASE WORKING STORAGE RETURN END C2313 ! RDNM: FUNCTION(LIMIT) INTEGER,DIRECT RDCMD: CALL CMDIN(BUFFR,ERR) N _ 0 ! ! FETCH NEXT COMMAND CHARACTER. IF AT EOL, RETURN ! NXCHR: IF [CHAR_GCHR] = 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 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 ! .YES.: SUBROUTINE FEXIT,DIRECT RDYES: CALL CMDIN(BUFFR,ERR) ! INPUT RESPONSE IF BUFFR = "YE" \ THEN RETURN \ ,ELSE [ IF BUFFR = "NO" \ THEN FRETURN ] CALL WRITE(M15) ! ANSWER NOT YES OR NO SO GIVE GO TO RDYES ! ERROR AND TRY AGAIN END .YES. ! 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 ! RELSE: SUBROUTINE DIRECT CALL STPRG(W1) CALL STPRG(W2) CALL STPRG(W3) CALL STPRG(W4) RETURN END RELSE ! ! ! LET C6940 BE SUBROUTINE,GLOBAL,DIRECT ! ! 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 GLOBAL,DIRECT ! 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