      NAM LKAST 
      EXT ASTRT 
      JMP ASTRT 
      END 
      PROGRAM TEST
      DIMENSION ID(288),ICS(16),OUT(6),IN(6)
    1 PAUSE 
C-------------------REPEAT SAME PARAMETER?
      IF(ISSW(3))14,3 
C-------------------SUPPRESS INITIAL PRINTOUT?
    3 IF(ISSW(0))5,2
    2 WRITE(2,100)
C-------------------BYPASS IOL AND F.S. VOLTS 
    5 IF(ISSW(2))21,20
   20 WRITE(1,200)
      READ(1,*)IOL
      WRITE(2,930)
      READ(1,*)VOLT 
   21 WRITE(2,300)
      READ(1,*)IM 
C-------------------PUT ZEROS IN ARRAYS 
      DO 6 IO=1,322 
    6 ID(IO)=0
      WRITE(2,400)
      READ(1,*)ISN
      ISN1=ISN
C-------------------SEQ=8 
C-------------------RANDOM=7
C-------------------MONITOR=9 
      IF(IM-1)8,7,9 
    9 WRITE (2,500) 
      READ(1,*)ICS(1) 
      ICN=ISN1
      ISN1=1
      WRITE(2,910)
      GO TO 14
    7 WRITE(2,500)
      READ(1,*)ICS
      GO TO 10
    8 WRITE(2,920)
      PAUSE 
   10 WRITE(2,600)
      READ(1,*)ICN
   16 DO 11 I=1,6 
   11 IN(I)=I 
      WRITE(2,700)(IN(I),I=1,ISN) 
C-------------------GET DATA FROM MULTI AND PRINTOUT
   14     CALL MULTI(IM,ICN,ICS,ID,ISN,IOL) 
          DO 13 K=1,ICN 
          IY=K
          DO 12 I=1,ISN1
C-------------------BYPASS DATA OUTPUT? 
          IF(ISSW (1))1,19
   19     OUT(I)=FLOAT(ID(IY))*VOLT/32768.
          IF(IM-2)18,12 
   18     IY=IY+ICN 
   12     CONTINUE
          IX=ICS(K) 
C-------------------IF SEQ MODE START AT CHANNEL 0
C-------------------IF RANDOM MODE PRINT CHANNEL #
C-------------------IF MONITOR MODE PRINT ONLY ONE CHANNEL #
          IF(IM-1)17,13,15
   17     IX=K-1
          GO TO 13
   15     IX=ICS(1) 
   13     WRITE(2,800)IX,(OUT(I),I=1,ISN1)
          WRITE(2,900)
      GO TO 1 
C 
C 
C 
100   FORMAT("MULTIPLEXER AND A/D CONVERTER HI SPEED
     1 ANALOG TEST" 
     1/"PROGRAM PARAMETERS:"/3X"1)MULTI MODE SELECTION" 
     1/5X"SEQUENTIAL    IM=0"/5X"RANDOM        IM=1"
     1/5X" MONITOR ONLY IM=2"/3X"2)# OF CHANNELS TO BE SCANNED" 
     1/5X"ICN= XXX (3 DIGIT DEC #)"/3X"3)MULTI CHANNEL ADDRESS #" 
     1/5X"ICS=XXX,XXX,---(MAX OF SIXTEEN 3 DIGIT DEC #)"/3X"
     14)# OF SCANS ON EACH SET OF CHANNELS"/5X"ISN=XXX (3 DIGIT 
     1 DEC #)"/12X"MAX OF 6 
     1 SCANS FOR 48 OR LESS CHANNELS"/12X"MAX OF 1 SCAN 
     1 FOR MORE THAN 48 CHANNELS"/12X"MAX OF 288 SCANS IN 
     1 DIGITIZE MODE"/3X"5)COMPUTER I/O LOC OF MULTI INTERFACE
     1 CARD"/5X"IOL=@XX (2 DIGIT OCTAL #)"/3X"6)COMPUTER SWITCH 
     1 REGISTER OPTIONS"/5X"SW(0)=1  BYPASS INITIAL PRINTOUT" 
     1/5X"SW(1)=1  BYPASS DATA PRINTOUT"/5X"SW(2)=1  BYPASS 
     1 INITALIZING IOL AND F.S. VOLTS"/5X"SW(3)=1 REPEAT SAME 
     1 PARAMETERS"/3X"7)F.S. VOLTS=XX.X (RATED FULL SCALE VOLTAGE 
     1 OF INSTR"//"SET INSTR FUNCTION SWITCH TO NORMAL" 
     1 /"FOR A/D CONVERTER ONLY, LET IM=2 AND ICS=0 
     1 "/"TEST RESULTS IN VOLTS"//) 
200   FORMAT("IOL= _")
300   FORMAT("IM= _") 
400   FORMAT("ISN= _")
500   FORMAT("ICS= _")
600   FORMAT("ICN= _")
700   FORMAT (//"CHAN#"4X,6(I1," SCAN",4X)
800   FORMAT(1X,I3,2X,6F10.4) 
900   FORMAT("END OF TEST"/////"NEW PROGRAM PARAMETERS"/) 
910   FORMAT("CHAN #   VALUE")
920   FORMAT(/"SET MULTI OCTAL SELECT SWITCH=ICN-1")
930   FORMAT("F.S. VOLTS= _") 
      END 
      END$
      HED MULTI ROUTINE **  2310C TEST
      NAM MULTI 
* 
* MULTIPLEXER AND A/D CONVERTER TEST SUBROUTINE 
*                                     AUG. 1971 
* 
* TEST MAY BE CALLED BY A FORTRAN PROGRAM 
* 
* CALL STATEMENT: 
* 
*      CALL MULTI(IM,ICN,ICS,ID,ISN,IOL)
* 
* DEFINITION OF CALL VARIABLES: 
* 
*      IM=MULTIPLEXER MODE SELECTION
*        =0 "SEQUENTIAL MODE" 
*        =1 "RANDOM MODE" 
*        =2 "MONITOR SCAN ONE CHANNEL ONLY" 
*      ICN=# OF CHANNELS TO BE SCANNED
*      ICS=MULTIPLEXER CHANNEL ADDRESS
*      ID=DATA BUFFER 
*      ISN=# OF SCANS 
*      IOL=COMPUTER I/0 LOCATION OF INTERFACE CARD
* 
* THROUGHPUT RATES FOR THIS TEST PROGRAM: 
* (WITHOUT EXTERNAL PACER)
* 
*           FOR MINIVERTERS WITH 2.5 US START PULSE 
*  COMPUTER ----------------------- 2116    2115/2114   2100
*    RANDOM MODE ------------------ 24KHZ     21KHZ     25KHZ 
*    SEQUENTIAL MODE -------------- 40KHZ     37KHZ     41KHZ 
*    SINGLE CHANNEL MONITOR MODE -- 38KHZ     34KHZ     38KHZ 
* 
*           FOR MINIVERTERS WITH 10.0 US START PULSE
*  COMPUTER ----------------------- 2116    2115/2114   2100
*    RANDOM MODE ------------------ 20KHZ     18KHZ     21KHZ 
*    SEQUENTIAL MODE -------------- 32KHZ     32KHZ     31KHZ 
*    SINGLE CHANNEL MONITOR MODE -- 28KHZ     27KHZ     26KHZ 
* 
* 
      ENT MULTI 
      EXT .ENTR,.IOC.,ENDIO,.MPY
IM    NOP           MODE SEQ=0 RAM=1 DIT=2
ICN   NOP           # OF CHANS TO BE SCANNED
ICS   NOP           CHAN ADDRESS #
ID    NOP           DATA BUFFER 
ISN   NOP           # OF SCANS
IOL   NOP           MULTI I/0 LOC 
MULTI NOP           ENTER AND EXIT MULTI SUBROUTINE 
      JSB .ENTR 
      DEF IM
      JSB ENDIO 
      DEF *+1 
      CLF 0 
* 
* INITIALIZE I/0 LOC
* 
      LDA IOL,I     I/O LOC 
      STA IOLOC 
      IOR ISTCC     ADD I/O LOC TO STC,C INSTR
      STA RSTC1 
      STA SSTC1 
      STA SSTC2 
      STA DSTC1 
      STA DSTC2 
      LDA IOLOC     I/O LOC 
      IOR ISFS      ADD I/O LOC TO SFS INSTR
      STA RSFS
      STA RSFS2 
      STA SSFS
      STA SSFS2 
      STA DSFS
      STA DSFS1 
      STA CSFS
      LDA IOLOC     I/O LOC 
      IOR ILIA      ADD I/O LOC TO LIA INSTR
      STA RLIA
      STA SLIA
      STA DLIA
      LDA IOLOC     I/O LOC 
      IOR IOTA      ADD I/O LOC TO OTA INSTR
      STA ROTA
      STA ROTA1 
      STA SOTA
      STA DOTA
      LDA IOLOC 
      IOR OTBI
      STA C1        . STORE 
* 
* TEST FOR MULTIPLEXER MODE SELECTION 
* 
      LDA IM,I
      SLA           RANDOM MODE?
      JMP RAN       YES 
      RAR 
      SLA           MONITOR MODE? 
      JMP DO        YES 
      JMP SEQ       SEQUENTIAL MODE 
* 
* RAMDOM MODE TEST DRIVER 
* 
RAN   LDA ID
      CMA,INA 
      CMA 
      STA .DATA    .DATA BUFFER ADDRESS 
      LDA ISN,I 
      CMA,INA 
      STA SCTR     .NUMBER OF SCANS COUNTER 
RSFS2 SFS 0        .CONVERTER READY ? 
      JMP *-1 
LOOP1 LDA ICS 
      STA .CHAN    .CHANNEL ADDRESS BUFFER
      LDA ICN,I 
      CMA,INA 
      STA CHCTR    .CHANNEL COUNTER 
     LDA .CHAN,I   .FIRST CHANNEL 
ROTA1 OTA 0 
RSTC1 STC 0,C      .START 
      ISZ .CHAN    .INCREMENT BUFFER COUNTERS 
      ISZ .DATA 
RSFS  SFS 0 
      JMP *-1 
      LDB .CHAN,I  .GET NEXT CHAN ADDRESS 
RLIA  LIA 0        .READ DATA 
C1    OTB 0        .SET NEXT CHANNEL
      STA .DATA,I  .SAVE DATA 
      ISZ CHCTR    .DONE THIS SCAN ?
      JMP RSTC1 
      ISZ SCTR     .YES - DONE THIS TEST ?
      JMP LOOP1    .NO - NEXT SCAN
      JMP CLEAN    .YES - EXIT
* 
* SEQUENTIAL MODE TEST DRIVER 
* 
SEQ   LDA ID        BUFFER ADDRESS
      STA .DATA     COUNTER 
      LDA ISN,I     # OF SCANS
      LDB ICN 
      STB T1
      JSB .MPY      .CALCULATE # OF READINGS
T1    NOP 
      CMA,INA       .SET INTO READINGS
      STA SCTR      COUNTER 
LOOP2 LDA RESET 
ROTA  OTA 0         SET MULTI TO CHAN 000 
SSFS2 SFS 0         ENSURE FLAG IS UP 
      JMP *-1       NOT READY 
      LDA SQM 
SOTA  OTA 0         SEQ MODE TO MULTI 
SSTC1 STC 0B        START MULTI ON CHAN 000 
SSFS  SFS 0         .DATA READY ? 
      JMP *-1 
SSTC2 STC 0,C       .YES ENCODE FOR NEXT CHANNEL
SLIA  LIA 0 
      STA .DATA,I   STORE DATA IN BUFFER
      ISZ .DATA     BUMP COUNTER
      ISZ SCTR      .DONE ? 
      JMP SSFS      .NO 
      JMP CLEAN 
* 
* MONITOR MODE DRIVER 
* 
DO    LDA ID        BUFFER ADDRESS
      CMA,INA 
      CMA           BUFFER ADDRESS-1
      STA .DATA     COUNTER 
      LDA ISN,I     # OF SCANS
      CMA 
      STA SCTR      COUNTER 
      LDA ICS,I     MULTI CHAN ADDRESS
DOTA  OTA 0B        SET MULTI TO CHAN # 
DSFS1 SFS 0         READY MULTI FOR SCAN
      JMP *-1       FLAG NOT SET
DSTC1 STC 0B        START MULTI ON CHAN # 
      NOP 
      NOP 
      JMP *+3 
DSTC2 STC 0B        START MULTI 
      STA .DATA,I   STORE DATA IN BUFFER
      ISZ SCTR      # OF SCANS COMPLETE?
      JMP *+2       NO
      JMP CLEAN     YES 
      ISZ .DATA     BUMP BUFFER ADDRESS 
DSFS  SFS 0B        DATA READY? 
      JMP *-1       NO
DLIA  LIA 0B        YES 
      JMP DSTC2     NEXT SCAN "A-REG HOLDS DATA"
* 
* EXIT MULTI SUBROUTINE 
* 
CLEAN NOP           EXIT LOCATION 
CSFS  SFS 0B        HAS MULTI COMPLETED OPERATION?
      JMP *-1       NO WAIT FOR FLAG
      CLC 0 
      JMP MULTI,I   YES EXIT MULTI SUBROUTINE 
* 
* OCTAL CONSTANTS 
* 
.DATA OCT 0         BUFFER ADDRESS COUNTER
SCTR  OCT 0         # OF SCANS COUNTER
.CHAN OCT 0          MULTIPLEXER CHAN ADDRESS COUNTER 
CHCTR OCT 0         #OF CHANS TO BE SCANNED COUNTER 
IOLOC OCT 0         I/O LOC 
ISTCC OCT 103700    STC,C 
ISFS  OCT 102300    SFS 
ILIA  OCT 102500    LIA 
IOTA  OCT 102600    OTA 
OTBI  OTB 0 
SQM   OCT 040000    SEQ MODE COMMAND CODE---CHAN000 
RESET OCT 020000    RESET COMMAND CODE CHAN 000 
      END 
*  THIS PROGRAM PERMITS CONFIGURATION OF THE TELETYPE 
*  FROM THE SWITCH REGISTER AT THE START OF PROGRAM EXECUTION.
* 
*  IT REQUIRES THAT THE PROGRAM BE LOADED VIA THE ABSOLUTE
*  TAPE OPTION PRIOR TO EXECUTION.
* 
*  THE STARTING ADDRESS OF THIS PROGRAM CAN THEN BE OBTAINED
*  FROM THE LOADER SYMBOL TABLE (LST) AT THE END OF LOADING.
*  THE STARTING ADDRESS WILL BE THE ADDRESS OF ASTRT.  AFTER
*  THIS ADDRESS IS LOADED BY PRESSING 'LOAD ADDRESS', THE ADDRESS 
*  OF THE TELETYPE SHOULD BE SET INTO THE SWITCH REGISTER 
*  BEFORE PRESSING 'RUN'. 
* 
*  IF THIS PROGRAM IS LOADED FIRST, ITS STARTING ADDRESS
*  WILL BE 2000B. 
* 
      NAM ASTRT 
      ENT ASTRT 
      EXT .SQT. 
* 
A     EQU 0 
B     EQU 1 
* 
ASTRT NOP 
      LDA SQTAD     GET ADDRESS OF SQT TABLE
N1    SSA,RSS       THIS AN INDIRECT? 
      JMP N2        NO - LETS GO
      AND IBIT      YES - ELIMINATE IT
      LDA A,I       GET NEXT STEP 
      JMP N1        AND TRY AGAIN 
N2    INA           GO TO SQT #2 - TTY OUTPUT 
      LDB A,I       GET EQT # FROM SQT
      ADB .M7       SUBTRACT 7
      BLS,BLS       MULTIPLY BY 4 
      ADB .6        ADD 6 TO GET PROPER EQT ADDRESS 
      ADB A         MAKE EQT ADDRESS ABSOLUTE 
      STB EQTAD     SAVE IT 
      LDB B,I       GET ORIGINAL I/O ADDRESS
      LDB B,I       GET CONTENTS OF TRAP CELL 
      LIA 1         GET I/O ADDRESS OF TTY IN SW REG
      AND IOMSK     MASK ANY EXTRA BITS 
      STB A,I       PUT LINK IN NEW TRAP CELL 
      STA EQTAD,I   STORE NEW I/O ADDR IN EQT 
      INA          TAKE CARE OF 
      STB A,I      SERIAL TTY 
      JMP 2         START PROGRAM EXECUTION 
* 
*  PROGRAM CONSTANTS
* 
SQTAD DEF .SQT.     POINTER TO SQT TABLE
IBIT  OCT 77777     MASK TO ELIMINATE INDIRECT BIT
.M7   DEC -7
.6    DEC 6 
IOMSK OCT 77        I/O LIMIT MASK
EQTAD NOP 
      END 
                                                                                                                            