FTN,L C C * * * 6 9 4 0 V E R I F I C A T I O N T E S T * * * C C NAM: T6940 C SOURCE TAPE: 09611-18006 REV A C BINARY RELOCATABLE: 09611-16006 REV A C MANUAL: 09611-90010 JUNE, 1975 C AUTHOR: JULIA A. CATES C C THE 6940 VERIFICATION TEST, T6940, IS AN ON-LINE FUNC- C TIONAL TEST OF THE 6940A/B MULTIPROGRAMMER I/O CARDS. C T6940 RUNS IN RTE OR RTEC. THE 6940 MAY BE LOCAL OR C REMOTE TO THE CENTRAL SYSTEM. C PROGRAM T6940 (3,99) C DIMENSION IPRM(5),IREGS(2) EQUIVALENCE (REGS,IREGS(1)) DATA ICOD1/1/,ICOD2/2/,ICOD3/3/,ICOD12/12/ DATA ICOD13/13/,IZERO/0/,IOFST/-10/ C C CONFIGURATION SECTION. SET THE INPUT DEVICE, OUTPUT C DEVICE AND MULTIPROGRAMMER LUS. C C T6940 CHECKS TO SEE IF ON STARTING T6940, THE USER ENTERED C LU'S OF INPUT OR OUTPUT DEVICES TO BE USED. CALL RMPAR (IPRM) INLU = IPRM(1) IOUTLU = IPRM(2) C FIND OUT THE MAXIMUM VALID LU #. CALL LUCHK (MAXLU) IF (INLU.EQ.0) GOTO 10 C CHECK THE ENTERED LOGICAL UNIT NUMBER FOR THE C CORRESPONDING SELECT CODE AND DRIVER. IF (INLU.GT.MAXLU.OR.INLU.LT.0) GOTO 5 CALL EXEC (ICOD13,INLU,IEQT5,IEQT4) IDRIVR = IEQT5 / 400B IDRIVR = IAND (IDRIVR,77B) C CHECK THAT ENTERED LU IS A VALID INPUT DEVICE LU. IF (IDRIVR.EQ.0.OR.IDRIVR.EQ.5.OR.IDRIVR.EQ.1) GOTO 20 ISCODE = IAND (IEQT4,77B) WRITE (1,1010) INLU,IDRIVR,ISCODE 1010 FORMAT (" LU # "I2": DRIVER "@2", SELECT CODE "@2) 5 WRITE (1,1020) INLU 1020 FORMAT (" IMPROPER PARAMETER ("I2") ENTERED ON CALLING T6940." 1/"RESTART T6940.") GOTO 999 10 INLU = 1 20 IF (IOUTLU.EQ.0) GOTO 30 C CHECK THAT THE 2ND PARAMETER ENTERED IS A VALID C LIST DEVICE LU. IF (IOUTLU.GT.MAXLU.OR.IOUTLU.LT.0) GOTO 25 CALL EXEC (ICOD13,IOUTLU,IEQT5,IEQT4) IDRIVR = IEQT5 / 400B IDRIVR = IAND (IDRIVR,77B) IF (IDRIVR.EQ.0.OR.IDRIVR.EQ.5.OR.IDRIVR.EQ.12B) GOTO 50 ISCODE = IAND (IEQT4,77B) WRITE (1,1010) IOUTLU,IDRIVR,ISCODE 25 WRITE (1,1020) IOUTLU GOTO 999 30 IOUTLU = INLU 50 WRITE (IOUTLU,1050) 1050 FORMAT (" ENTER THE LU OF THE 6940 UNIT.") READ (INLU,*) LU C CHECK THAT THE ENTERED 6940 LOGICAL UNIT NUMBER C IS ASSOCIATED WITH DVR61 OR DVA72. IF (LU.GT.MAXLU.OR.LU.LE.0) GOTO 70 CALL EXEC (ICOD13,LU,IEQT5,IEQT4) IDRIVR = IEQT5 / 400B IDRIVR = IAND (IDRIVR,77B) ISCODE = IAND (IEQT4,77B) WRITE (IOUTLU,1010) LU,IDRIVR,ISCODE IF (IDRIVR.EQ.61B.OR.IDRIVR.EQ.72B) GOTO 80 70 WRITE (IOUTLU,1070) 1070 FORMAT (" IMPROPER LU.") GOTO 50 80 ICNWD = 100B + LU ICWD20 = 2000B + LU ICWD21 = 2100B + LU 85 WRITE (IOUTLU,1085) 1085 FORMAT (" ENTER THE # OF 6941'S.") READ (INLU,*) I6941 IF (I6941.LT.0.OR.I6941.GT.15) GOTO 85 DO 90 I = 0,I6941 ITEMP = I + 170000B C SEE IF THE COMPUTER CAN COMMUNICATE WITH THE C MULTIPROGRAMMER. REGS = EXEC (ICOD2,ICNWD,ITEMP,ICOD1,IZERO) IERR = IAND (IREGS(1),377B) IF (IERR.NE.0) WRITE (IOUTLU,1090) I,IERR 1090 FORMAT (" UNIT # "I2" HAS STATUS = "@3) 90 CONTINUE C SERCH CONFIGURES THE ID SEGMENT ADDRESS OF "SENSE" C IN THE 6940 DRIVER'S EQT TABLE. THUS, "SENSE" WILL C BE SCHEDULED ON SENSE MODE INTERRUPTS. CALL SERCH (LU,IOUTLU,ISCODE,IDRIVR,MODE) IF (MODE.EQ.-1) GOTO 999 IF (MODE.EQ.1) WRITE (IOUTLU,3000) C CONFIGURATION COMPLETED. C C CONTROL MODE MENU. C 100 WRITE (IOUTLU,1000) WRITE (IOUTLU,1001) WRITE (IOUTLU,1002) WRITE (IOUTLU,1003) WRITE (IOUTLU,1004) WRITE (IOUTLU,1005) WRITE (IOUTLU,1006) WRITE (IOUTLU,1007) WRITE (IOUTLU,1008) WRITE (IOUTLU,1009) 1000 FORMAT (/" * * * TEST MENU * * *") 1001 FORMAT (" 1. INPUT TEST - NORMAL READ.") 1002 FORMAT (" 2. INPUT TEST - READ DIRECT WITHOUT GATE.") 1003 FORMAT (" 3. SINGLE OUTPUT TEST.") 1004 FORMAT (" 4. CONTINUOUSLY ROTATED OUTPUT TEST.") 1005 FORMAT (" 5. EVENT SENSE TEST.") 1006 FORMAT (" 6. PULSE COUNTER TEST.") 1007 FORMAT (" 7. PROGRAMMABLE TIMER TEST.") 1008 FORMAT (" 8. STEPPER MOTOR CONTROL TEST.") 1009 FORMAT (" 0. REPEAT PREVIOUS TEST." 1/" -1. TERMINATE PROGRAM.") 110 WRITE (IOUTLU,1100) 1100 FORMAT (" ENTER TEST NUMBER.") READ (INLU,*) IASK IF (IASK.EQ.0) GOTO 160 IF (IASK.LT.0) GOTO 900 IF (IASK.GT.8) GOTO 100 ITEST = IASK 160 IF (ITEST.LT.5) GOTO 200 GOTO (300,400,500,600),ITEST-4 C C 1-4. INPUT/OUTPUT TEST SECTION. C READ OR WRITE DVR61/DVA72 EXEC CALL. C 200 IF (ITEST.EQ.1) WRITE (IOUTLU,1001) IF (ITEST.EQ.2) WRITE (IOUTLU,1002) IF (ITEST.EQ.3) WRITE (IOUTLU,1003) IF (ITEST.EQ.4) WRITE (IOUTLU,1004) CALL INOUT (I6941,INLU,IOUTLU,ITEST,ICNWD) GOTO 110 C C 5. EVENT SENSE TEST SECTION. C 300 IF (MODE.EQ.0) GOTO 310 WRITE (IOUTLU,3000) 3000 FORMAT (" NO SENSE PROGRAM IN SYSTEM.") GOTO 110 310 WRITE (IOUTLU,1005) WRITE (IOUTLU,3100) 3100 FORMAT (" SET REFERENCE WORDS.") CALL INOUT (I6941,INLU,IOUTLU,ITEST,ICNWD) 340 WRITE (IOUTLU,3400) 3400 FORMAT (" CAUSE EVENTS!") C C INTERRUPT SECTION. C 350 REGS = EXEC (ICOD3,ICWD20) CALL EXEC (ICOD12,IZERO,ICOD2,IZERO,IOFST) REGS = EXEC (ICOD3,ICWD21) 370 WRITE (IOUTLU,3700) 3700 FORMAT (" REPEAT INTERRUPT MODE? (O=NO,1=YES)") READ (INLU,*) IASK 390 GOTO (370,110,350,370),IASK+2 C C 6. PULSE COUNTER TEST SECTION. C 400 WRITE (IOUTLU,1006) C OUTPUT 7777B TO THE PULSE COUNTER CARD. CALL INOUT (I6941,INLU,IOUTLU,ITEST,ICNWD) WRITE (IOUTLU,4000) 4000 FORMAT (" CARRY LINE CHECK: PULSE COUNT UP INPUT ONCE" 1/"WHILE WATCHING CARRY LINE.") WRITE (IOUTLU,4100) 4100 FORMAT (" KEY IN A ""1"" WHEN READY TO CONTINUE.") READ (INLU,*) IASK ITEST = 11 C READ THE COUNT ON THE CARD TO CHECK FOR OVERFLOW. CALL INOUT (I6941,INLU,IOUTLU,ITEST,ICNWD) WRITE (IOUTLU,4200) 4200 FORMAT (" BORROW LINE CHECK: PULSE COUNT DOWN INPUT ONCE" 1/"WHILE WATCHING BORROW LINE.") C OUTPUT 0000 TO THE PULSE COUNTER CARD. ITEST = 9 CALL INOUT (I6941,INLU,IOUTLU,ITEST,ICNWD) WRITE (IOUTLU,4100) READ (INLU,*) IASK ITEST = 11 C READ THE COUNT ON THE CARD TO CHECK FOR UNDERFLOW. CALL INOUT (I6941,INLU,IOUTLU,ITEST,ICNWD) ITEST = 6 GOTO 110 C C 7. PROGRAMMABLE TIMER TEST SECTION. C 500 WRITE (IOUTLU,1007) WRITE (IOUTLU,5000) 5000 FORMAT (" PRESET TIMER COUNT, AND WATCH TIMER OUTPUT.") 510 CALL INOUT (I6941,INLU,IOUTLU,ITEST,ICNWD) ITEST = 7 520 WRITE (IOUTLU,5200) 5200 FORMAT (" REPEAT? (0=NO,1=YES)") READ (INLU,*) IASK GOTO (520,110,530,520),IASK+2 530 ITEST = 12 GOTO 510 C C 8. STEPPING MOTOR CONTROL TEST SECTION. C 600 WRITE (IOUTLU,1008) 610 WRITE (IOUTLU,6100) 6100 FORMAT (" SET THE # OF PULSES (LESS THAN 4000B)." 1/" WATCH OUTPUT #1.") C SPECIFY OUTPUT #1 AND OUTPUT THE DESIRED # OF PULSES. CALL INOUT (I6941,INLU,IOUTLU,ITEST,ICNWD) ITEST = 10 WRITE (IOUTLU,6200) 6200 FORMAT (" KEY IN A ""1"" WHEN READY TO WATCH OUTPUT #2.") READ (INLU,*) IASK C SPECIFY OUTPUT #2 AND OUTPUT THE SAME # OF PULSES. CALL INOUT (I6941,INLU,IOUTLU,ITEST,ICNWD) ITEST = 8 640 WRITE (IOUTLU,5200) READ (INLU,*) IASK GOTO (640,110,680,640),IASK+2 680 ITEST = 13 GOTO 610 C C DSRCH RESTORES THE USER'S INTERRUPT HANDLING PROGRAM C TO THE 6940 DRIVER'S TABLE. 900 IF (MODE.EQ.0) CALL DSRCH 999 STOP 0 END SUBROUTINE INOUT (I6941,INLU,IOUTLU,ITEST,ICNWD) C C INOUT IS A SUBROUTINE CALLED BY THE MAIN PROGRAM OF C T6940. INOUT IS A COLLECTION OF READ AND WRITE ROUTINES C TO THE 6940. C C T6940 TEST CODES FOR CALLS TO 6940 DRIVER: C C ITEST = 1. NORMAL READ CALL. USER SPECIFIES UNIT #, C SLOT #, AND TME ON OR OFF. TEST IS REPEATED UNTIL THE C USER ENTERS A -1 FOR TME. C ITEST = 2. READ DIRECT WITHOUT GATE. USER SPECIFIES C UNIT # AND SLOT #. C ITEST = 3. NORMAL WRITE CALL. USER SPECIFIES UNIT #, C SLOT #, AND DTE, SYE, AND TME ON OR OFF. TEST IS REPEATED C UNTIL USER ENTERS A -1 FOR DTE. C ITEST = 4. NORMAL WRITE CALL - DTE, SYE ON. USER C ENTERS UNIT # AND SLOT #. THE CALL IS REPEATED 25 TIMES C WHILE ROTATING A SINGLE BIT ON TWICE THROUGH THE 12 BITS. C FINAL CALL CLEARS ALL BITS. C ITEST = 5. NORMAL WRITE CALL - SYE ON. USER INPUTS C UNIT # AND SLOT # AND SETS REFERENCE WORD FOR EACH EVENT C SENSE CARD IN THE 6940 UNDER TEST. HE LEAVES THE C OUTPUT MODE BY ENTERING -1 FOR THE UNIT #. C ITEST = 6. NORMAL WRITE CALL - SYE ON. USER ENTERS C THE UNIT # AND SLOT # OF THE PULSE COUNTER CARD. 000000 C IS OUTPUT TO THE CARD. C ITEST = 7. NORMAL WRITE CALL - SYE ON. USER ENTERS C THE PROGRAMMABLE TIMER CARD UNIT #, SLOT # AND TIME C INTERVAL DATA WORD. C ITEST = 8. NORMAL WRITE CALL - SYE, TME ON. USER C SPECIFIES THE STEPPER MOTOR CARD UNIT #, SLOT # AND C DESIRED NUMBER OF PULSES. THE NUMBER OF PULSES MUST BE C LESS THAN 4000B. C ITEST = 9. NORMAL WRITE CALL - SYE ON. 007777 IS C OUTPUT TO THE PULSE COUNTER CARD SPECIFIED IN ITEST = 6. C ITEST = 10. NORMAL WRITE CALL - SYE, TME ON. THE # C OF PULSES AND BIT 11 ON IS OUTPUT TO THE STEPPER CARD C SPECIFIED IN ITEST = 8. C ITEST = 11. NORMAL READ CALL - TME OFF. DATA IS C READ FROM THE PULSE COUNTER CARD SPECIFIED IN ITEST = 6. C ITEST = 12. NORMAL WRITE CALL - SYE ON. USER ENTERS C TIME INTERVAL DATA WHICH IS OUTPUT TO THE TIMER C CARD SPECIFIED IN ITEST = 7. C ITEST = 13. NORMAL OUTPUT CALL - SYE ON. USER ENTERS C THE NUMBER OF PULSES TO BE OUTPUT BY THE STEPPER CARD C SPECIFIED IN ITEST = 8. THE NUMBER OF PULSES MUST BE C LESS THAN 4000B. C C DIMENSION IBUFFR (5) DIMENSION IREGS(2) EQUIVALENCE (REGS,IREGS(1)) DATA IZERO/0/,ICOD1/1/,ICOD2/2/ DATA ICOD12/12/,IOFST/-1/ C IFUNC = 0 IF (ITEST.EQ.9) IDATA = 0 ITME = 0 GOTO (20,50,600,130,320),ITEST-7 20 WRITE (IOUTLU,1020) 1020 FORMAT (" UNIT #, SLOT # ? (-1 TO EXIT)") READ (INLU,*) IUNIT,ISLOT IF (IUNIT.LT.0) GOTO 999 IF (IUNIT.GT.I6941) GOTO 20 IF (ISLOT.LT.0.OR.ISLOT.GT.14) GOTO 20 40 BTEMP = ISLOT * 10000B GOTO (100,200,300,400,50),ITEST 50 IBUFFR(1) = 170040B + IUNIT IF (ITEST.EQ.8) IBUFFR(1) = IBUFFR(1) + 20B GOTO (320,500,320,320,350),ITEST-4 C C INPUT CALL - NORMAL READ. C 100 WRITE (IOUTLU,1000) 1000 FORMAT (" TME? (0=OFF,1=ON,-1 TO EXIT)") READ (INLU,*) ITME IF (ITME.EQ.-1) GOTO 999 IF (ITME.NE.0.AND.ITME.NE.1) GOTO 100 130 IBUFFR(1) = 2 IBUFFR(2) = 170240B + IUNIT + ITME*20B IBUFFR(3) = BTEMP IBUFFR(4) = 1 IBUFFR(5) = 0 IBUFFL = 5 REGS = EXEC (ICOD1,ICNWD,IBUFFR,IBUFFL,IFUNC) IFUNC = 0 IERR = IAND (IREGS(1),377B) IF (IERR.NE.0) GOTO 370 150 WRITE (IOUTLU,1500) ISLOT,IBUFFR(5) 1500 FORMAT (" SLOT # "I2" HAS DATA "@6) C IN NORMAL READ TEST KEEP INPUTTING DATA UNTIL USER C ENTERS -1 FOR TME. IF (ITEST.EQ.1) GOTO 100 GOTO 999 C C INPUT - READ DIRECT WITHOUT GATE. C 200 IFUNC = 2 GOTO 130 C C OUTPUT CALLS TO MULTIPROGRAMMER. C C SINGLE OUTPUT ENTRY POINT. 300 IDTE = 0 ISYE = 0 ITME = 0 WRITE (IOUTLU,3000) 3000 FORMAT (" DTE, SYE, TME? (-1 TO EXIT)") READ (INLU,*) IDTE,ISYE,ITME IF (IDTE.EQ.-1) GOTO 999 IF (IDTE.NE.0.AND.IDTE.NE.1) GOTO 300 IF (ISYE.NE.0.AND.ISYE.NE.1) GOTO 300 IF (ITME.NE.0.AND.ITME.NE.1) GOTO 300 310 IBUFFR(1) = 170000B + IUNIT IBUFFR(1) = IBUFFR(1) + ITME*20B + ISYE*40B + IDTE*100B C EVENT SENSE REFERENCE WORD, PROGRAMMABLE TIMER AND C STEPPER MOTOR ENTRY POINT. 320 WRITE (IOUTLU,3200) 3200 FORMAT (" ENTER DATA (OCTAL).") READ (INLU,3300) IDATA 3300 FORMAT (@4) IF (IDATA) 999,330 330 IF (IDATA-10000B) 340,320 340 IF (IDATA-4000B) 350,345 345 IF (ITEST.EQ.8.OR.ITEST.EQ.13) GOTO 320 C PULSE COUNTER TEST ENTRY POINT. 350 IBUFFR(2) = BTEMP + IDATA 360 REGS = EXEC (ICOD2,ICNWD,IBUFFR,ICOD2,IFUNC) IERR = IAND (IREGS(1),377B) IF (IERR.EQ.0) GOTO 380 370 WRITE (IOUTLU,3700) IERR 3700 FORMAT ("ERROR RETURN FROM DRIVER. STATUS = "@3) IERR = IAND (IREGS(1),4) IF (IERR.EQ.0.OR.ITME.EQ.0) GOTO 380 IBUFFR(1) = 170000B + IUNIT IBUFFR(2) = BTEMP REGS = EXEC (ICOD2,ICNWD,IBUFFR,ICOD2,IFUNC) IERR = IAND (IREGS(1),377B) IF (IERR.NE.0) WRITE (IOUTLU,3600) IERR 3600 FORMAT (" ERROR IN DISARMING CARD. STATUS = "@3) C IN OUTPUT TEST KEEP REPEATING OUTPUT CALL UNTIL THE C USER ENTERS A NEGATIVE NUMBER FOR DTE. 380 IF (ITEST.EQ.3) GOTO 300 C IN EVENT SENSE TEST ASK FOR UNIT & SLOT OF NEXT CARD C IN ORDER TO SET ITS REFERENCE WORD. IF (ITEST.EQ.5) GOTO 20 GOTO 999 C C CONTINUOUSLY ROTATED OUTPUT. C T6940 SUSPENDS FOR A SECOND AND THEN OUTPUTS A C WORD WITH THE NEXT CONSECUTIVE BIT TURNED ON. 400 IBUFFR(1) = 170140B + IUNIT DO 450 I = 1,2 DO 440 J = 0,11 WRITE (IOUTLU,4200) J 4200 FORMAT (" BIT "I2) IDATA = 2 ** J 410 IBUFFR(2) = BTEMP + IDATA REGS = EXEC (ICOD2,ICNWD,IBUFFR,ICOD2,IFUNC) IERR = IAND (IREGS(1),377B) IF (IERR.NE.0) WRITE (IOUTLU,3700) IERR CALL EXEC (ICOD12,IZERO,ICOD2,IZERO,IOFST) 440 CONTINUE 450 CONTINUE IF (IDATA.EQ.0) GOTO 460 C IN FINAL OUTPUT CLEAR ALL THE BITS. IDATA = 0 GOTO 410 460 GOTO 999 C C PULSE COUNTER OVERFLOW CHECK. 500 IBUFFR(2) = BTEMP + 7777B GOTO 360 C C STEPPER MOTOR - ACTIVATE OUTPUT # 2. 600 IBUFFR(2) = BTEMP + 4000B + IDATA GOTO 360 C C 999 RETURN END END$