SPL,L,O,T ! NAME ISA03(5) "92413-16022 REV.1644" ! ! SOURCE: 92413-18022 REV.1644 ! RELOC: 92413-16022 REV.1644 ! ! LET SWPRT BE LABEL,EXTERNAL ISA03:GOTO SWPRT ! ! LET CMDIN BE SUBROUTINE, EXTERNAL ! FETCHES NEXT COMMAND LET WSAW BE PSEUDO,EXTERNAL,DIRECT ! WORK SPACE COMMAND LET GETCH BE FUNCTION,EXTERNAL 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 GCHR,FCHR BE INTEGER,FUNCTION,DIRECT LET WRITE BE SUBROUTINE,EXTERNAL,DIRECT ! WRITE ROUTINE LET BUFFR BE INTEGER, EXTERNAL ! COMMAND INPUT BUFFER LET RDNM BE INTEGER,FUNCTION,DIRECT LET CMCNT, CHCNT, CMPTR BE INTEGER,EXTERNAL LET CWSAW BE SUBROUTINE,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), \ M15(9) 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 M15 TO 16,"ILLEGAL RESPONSE" ! 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) ! C2313: SUBROUTINE(W1,W2,W3,W4) GLOBAL 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 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 ! 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 ! END ISA03 END$