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 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$