FTN4,L SUBROUTINE WAVSU(IUN,IFLD,ISBF,PVAL),09580-16317 REV.2013 800131 C C **************************************************** C C SOURCE 09580-18317 C RELOCATABLE 09580-16317 C C T. KONDO 12/11/78 REV. A C BOB RICHARDS 02/20/79 REV. B C BOB RICHARDS 05/02/79 C BOB RICHARDS 791120 THIS REV. IS USED TO PROGRAM C AUTEK 505'S WITH THE IEEE-488 C BUS MOD. C BOB RICHARDS 800131 C C TEST SYSTEM SOURCE SOFTWARE IS THE PROPRIETRY C MATERIAL OF THE HEWLETT-PACKARD COMPANY. C C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979 C ALL RIGHTS RESERVED. NO PART OF THIS PROGRAM C MAY BE PHOTOCOPIED, REPRODUCED OR TRANSLATED C TO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR C WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. C ********************************************************** C C THIS DEVICE SUBROUTINE IS FOR AUTEK 505 WAVEFORM ANALYZER. C C SET-UP CALL: C WAVSU(IUN,IFLD,ISBF,PVAL) C WHERE: C IUN = UNIT NUMBER C IFLD = PROGRAM FIELD C 1 = RA C 2 = AP C 3 = BP C 4 = ST C 5 = SP C 6 = AM C 7 = BM C 8 = DC C 9 = TG C ISBF = PROGRAM SUBFIELD C (1 THROUGH 4) C PVAL = PROGRAM VALUE C C MEASUREMENT CALL: C WAVMU(IUN,IFUNC,VAL,LSTAT) C C WHERE: C IUN = UNIT NUMBER C IFUNC = FUNCTION C 1 = PROGRAM,TRIGGER,& MEASURE C 2 = TRIGGER & MEASURE C 3 = TRIGGER ONLY C 4 = MEASURE ONLY C VAL = MEAUREMENT VALUE C LSTAT = MEASUREMENT STATUS C 0 = VALID MEASUREMENT C 1 = OVER-RANGE C 2 = MEASUREMENT IN PROGRESS C 3 = SEARCH FAIL C 4 = MEASUREMENT IN PROCESS / OVER RANGE C 5 = OVER RANGE / SEARCH FAIL C 6 = MEASUREMENT IN PROCESS / SEARCH FAIL C 8 = MEASUREMENT IN PROCESS / OVER RANGE / C SEARCH FAIL C C = * = * = * = * = * = * = * = * = * = * = C C AUTEK 505 CONFIGURATION: C C BRANCH & MNEMONIC TABLES: C WAVSU(I,I,I,R), OV=XX, ENT=WAVSU, FIL=%WAVSU C WAVMU(I,I,RV,I), OV=XX, ENT=WAVMU, FIL=%WAVSU C C CONFIGURATION TABLE (ALLFL) ENTRIES: C R 52,1,39 C U1 C 1 NUMBER OF PROBE MULTIPLERS C 1 NUMBER OF TRIGGER CONDITIONERS C 0 STORAGE C 051101B RA C 030466B 16 C 032460B 50 C 052060B T0 C C 040520B AP C 030060B 00 C 030461B 11 C 025461B +1 C C 041120B BP C 030061B 01 C 030461B 11 C 026461B -1 C C 051524B ST C 032460B 50 C 022501B %A C 030455B 1+ C C 051520B SP C 032460B 50 C 022501B %A C 031055B 2+ C C 040515B AM C 030061B 01 C 050071B P9 C 034520B 9P C C 041115B BM C 030061B 01 C 050071B P9 C 034520B 9P C C 042103B DC C 030053B 0+ C 030060B 00 C 030060B 00 C C 052107B TG C 030462B 12 C 025460B +0 C 030053B 0+ C C = * = * = * = * = * = * = * = * = * = * = C DIMENSION IERMS(5) DATA IERMS /10,5,2HWA,2HVS,2HU / DATA IDTN /52/ C C FIND LU # C IERMS = 10 ISTN =ISN(DUMMY) LU1 = LUDV(ISTN,IDTN,IUN) LU0 = IBLU0(LU1) IF(LU1.LE.0.OR.LU0.LE.0)GOTO 800 CALL XAVSU(LU0,LU1,IERMS,IUN,IFLD,ISBF,PVAL) IF(IERMS.NE.0)GOTO 800 20 RETURN C C 800 CALL ERROR(IERMS,IERMS(2)) RETURN END C ------------------------------------- SUBROUTINE WAVMU(IUN,IFUNC,VAL,LSTAT),09580-16317 REV.2013 800131 DIMENSION IERMS(5) DATA IERMS /10,5,2HWA,2HVM,2HU / DATA IDTN /52/ C C FIND LU # C IERMS = 10 ISTN = ISN(DUMY) LU1 = LUDV(ISTN,IDTN,IUN) LU0 = IBLU0(LU1) IF (LU1.LE.0.OR.LU0.LE.0)GOTO 800 CALL XAVMU(LU0,LU1,IERMS,IUN,IFUNC,VAL,LSTAT) IF(IERMS.NE.0)GOTO 800 20 RETURN C 800 CALL ERROR(IERMS,IERMS(2)) RETURN END C -------------------------------------------------- SUBROUTINE XAVSU(LU0,LU1,IERR,IUN,IFLD,ISBF,PVAL),09580-16317 REV. +2013 800131 DIMENSION TPERD(26),VERTS(12) DIMENSION IBUFR(40),ITDIV(26),IVERT(12),IFCDE(9),IOBUF(5) DIMENSION IERR(5),IREG(2) EQUIVALENCE (REG,IREG,IA),(IREG(2),IB) DATA TPERD /.2E-9,.5E-9,1E-9,.2E-8,.5E-8,1E-8,.2E-7, S.5E-7,1E-7,.2E-6,.5E-6,1E-6,.2E-5,.5E-5,1E-5,.2E-4, S.5E-4,1E-4,.0005,.001,.002,.005,.01,.02,.05,.1/ DATA ITDIV /2H29,2H59,2H19,2H28,2H58,2H18,2H27,2H57,2H17, S2H26,2H56,2H16,2H25,2H55,2H15,2H24,2H54,2H14,2H53,2H13, S2H22,2H52,2H12,2H21,2H51,2H11/ DATA VERTS /.002,.005,.01,.02,.05,.1,.2,.5,1.0,2.0,5.0,10.0/ DATA IVERT /2H20,2H50,2H10,2H21,2H51,2H11,2H22,2H52,2H12, S2H23,2H53,2H13/ DATA IFCDE /2HRA,2HAP,2HBP,2HST,2HSP,2HAM,2HBM,2HDC,2HTG/ DATA IDTN /52/ DATA LEN /39/ C C C READ OUTPUT BUFFER C CALL TIM(IDTN,IUN,1,IBUFR,LEN,IERFG) IF (IERFG.LT.0)GOTO 9900 NUMS = 8 IF(IBUFR(2).GT.0)NUMS = 9 IF (IFLD.LT.1.OR.IFLD.GT.NUMS)GOTO 9900 IF (ISBF.LT.1.OR.ISBF.GT.4)GOTO 9900 C C RETRIEVE CURRENT PROGRAM FIELD C IERR = 0 INDEX = IFLD * 4 IOBUF(2) = IFCDE(IFLD) INX = INDEX + 1 DO 5 I=3,5 IOBUF(I) = IBUFR(INX) 5 INX = INX + 1 C IF(IFLD.EQ.1.AND.ISBF.EQ.1.OR.IFLD.EQ.2.AND.ISBF.EQ.2)GOTO 10 IF(IFLD.EQ.3.AND.ISBF.EQ.2)GOTO 10 IVAL = PVAL C C BRANCH TO FIELD TO BE EDITED C 10 CONTINUE GO TO (100,200,200,400,400,600,600,800,900),IFLD C =========================== C RA FIELD C ============================ 100 CONTINUE GO TO (110,120,130,140),ISBF C C TIME/DIV C 110 JNX = 0 IF(PVAL.LT.TPERD(1).OR.PVAL.GT.TPERD(26))GOTO 9900 IF(PVAL.GT.TPERD(25))JNX = 26 IF(JNX.EQ.26)GOTO 116 DO 112 I=2,26 JNX = JNX + 1 IF(PVAL.LT.TPERD(I))GOTO 116 112 CONTINUE C 116 IOBUF(3) = ITDIV(JNX) GO TO 7700 C C TRIGGER DELAY C 120 IF(IVAL.LT.0)GOTO 9900 IFLAG = 0 JNX = 4 GO TO 7000 C C MEASUREMENT TYPE C 130 IF(IVAL.LT.0.OR.IVAL.GT.2)GOTO 9900 ICHAR = IAND(IOBUF(5),377B) IF(IVAL.EQ.0)IOBUF(5)=52000B IF(IVAL.EQ.1)IOBUF(5)=40400B IF(IVAL.EQ.2)IOBUF(5)=41000B IOBUF(5) = IOR(IOBUF(5),ICHAR) GO TO 7700 C C SWEEP TYPE C 140 IF(IVAL.LT.0.OR.IVAL.GT.7)GOTO 9900 ICHAR =IVAL + 60B GO TO 645 C ========================= C AP####X# BP####X# C ========================= 200 CONTINUE GO TO (210,220,230,230),ISBF C C PROBE # C 210 IF(IVAL.LT.0)GOTO 9900 IF(IBUFR.EQ.0.AND.IVAL.GT.1)GOTO 9900 IF(IVAL.GT.IBUFR*9)GOTO 9900 GO TO 610 C C VERTICAL SENSITIVITY C 220 JNX = 0 IF(PVAL.LT.VERTS(1).OR.PVAL.GT.VERTS(12))GOTO 9900 DO 222 I=1,12 JNX = JNX +1 IF(JNX.EQ.12)GOTO 222 IF(PVAL.GE.VERTS(I).AND.PVAL.LT.VERTS(I+1))GOTO 226 222 CONTINUE 226 IOBUF(4) = IVERT(JNX) GO TO 7700 C C BASELINE OFFSET C 230 IF(IABS(IVAL).GT.9)GOTO 9900 ICHAR = IABS(IVAL)+60B IOBUF(5) = IOR(26400B,ICHAR) IF(IVAL.GE.0)IOBUF(5)=IOR(25400B,ICHAR) GO TO 7700 C ====================== C ST##XX#X SP##XX#X C ====================== 400 CONTINUE GO TO (410,420,430,440),ISBF C C PERCENTAGE LEVEL C 410 ICHAR = 22400B GO TO 425 C C PERCENTAGE OF VERTICAL FULL-SCALE C 420 ICHAR = 26400B IF(IVAL.GE.0)ICHAR=25400B IF(IVAL.LT.0)IVAL = -IVAL 425 IOBUF(4) = IOR(ICHAR,IAND(IOBUF(4),377B)) GO TO 610 C C CHANNEL C 430 IF(IVAL.LT.1.OR.IVAL.GT.2)GOTO 9900 ICHAR = IAND(177400B,IOBUF(4)) IOBUF(4) = IOR(ICHAR,IVAL+100B) GO TO 7700 C C TRANSITION & SLOPE C 440 IF(IABS(IVAL).GT.9)GOTO 9900 ICHAR =(60B+IABS(IVAL))*400B IOBUF(5) = IOR(ICHAR,53B) IF(IVAL.LT.0)IOBUF(5)=IOR(ICHAR,55B) GO TO 7700 C ==================== C AM##X##X BM##X##X C ==================== 600 CONTINUE GO TO (610,620,630,640),ISBF C C 0% REFERENCE C 610 IFLAG = 0 IF(IVAL.LT.0)GOTO 9900 JNX = 3 GO TO 7000 C C MEMORY OPERATION C 620 IF(IVAL.LT.0.OR.IVAL.GT.2)GOTO 9900 ICHAR = 50000B IF(IVAL.EQ.1)ICHAR=51000B IF(IVAL.EQ.2)ICHAR=43400B IOBUF(4) = IOR(ICHAR,IAND(IOBUF(4),377B)) GO TO 7700 C C 100% REFERENCE C 630 IF(IVAL.LT.0)GOTO 9900 IOBUF(4) = IAND(IOBUF(4),177400B) GO TO 935 C C 100% MEMORY OPERATION C 640 IF(IVAL.LT.0.OR.IVAL.EQ.1.OR.IVAL.GT.2)GOTO 9900 ICHAR =120B IF(IVAL.GT.0)ICHAR = 107B 645 IOBUF(5) = IOR(IAND(177400B,IOBUF(5)),ICHAR) GO TO 7700 C =================== C DCXX#000 C =================== 800 CONTINUE GO TO (810,820,9900,9900),ISBF C C AUTO-DELAY C 810 IF(IABS(IVAL).GT.2)GOTO 9900 IF(IVAL.EQ.0)IOBUF(3)=30053B IF(IVAL.EQ.0)GOTO 7700 ICHAR = 40400B IF(IABS(IVAL).EQ.2)ICHAR = 41000B IOBUF(3) = IOR(ICHAR,53B) IF(IVAL.LT.0)IOBUF(3) = IOR(ICHAR,55B) GO TO 7700 C C CAL ON/OFF C 820 IF(IVAL.GT.1)GOTO 9900 IOBUF(4) = 30060B IF(IVAL.EQ.1)IOBUF(4)=30460B GO TO 7700 C C TG###### C 900 CONTINUE GO TO (910,920,930,940),ISBF C C TRIGGER SOURCE C 910 IF(IVAL.LT.1.OR.IVAL.GT.8)GOTO 9900 ICHAR = IAND(IOBUF(3),377B) IOBUF(3) = IOR((60B+IVAL)*400B,ICHAR) GO TO 7700 C C TRIGGER CONDITION C 920 IF(IVAL.LT.1.OR.IVAL.GT.3)GOTO 9900 ICHAR = IAND(177400B,IOBUF(3)) IOBUF(3) = IOR(ICHAR,60B+IVAL) GO TO 7700 C C TRIGGER DISCRIMINATOR LEVEL C 930 IOBUF(4) = 25400B IF(IVAL.LT.0)IOBUF(4) = 26400B 935 IOBUF(5) = IAND(IOBUF(5),377B) IFLAG = 1 JNX = 4 GO TO 7000 C C TRIGGER SLOPE C 940 IF(IVAL.EQ.0.OR.IABS(IVAL).GT.1)GOTO 9900 ICHAR =IAND(177400B,IOBUF(5)) IOBUF(5) = IOR(ICHAR,53B) IF(IVAL.LT.1)IOBUF(5)=IOR(ICHAR,55B) GO TO 7700 C C CONVERT TO ASCII - NUMERIC C 7000 MSD = 60B LSD = IABS(IVAL) IF(LSD.GT.99)GOTO 9900 7010 CONTINUE IF(LSD.LE.9)GOTO 7020 LSD = LSD - 10 MSD = MSD + 1 GO TO 7010 C 7020 LSD = LSD + 60B IF(IFLAG.EQ.0)IOBUF(JNX)=IOR(MSD*400B,LSD) IF(IFLAG.EQ.0)GOTO 7700 IOBUF(JNX) = IOR(IOBUF(JNX),MSD) IOBUF(JNX+1) = IOR(LSD*400B,IOBUF(JNX+1)) C C OUTPUT NEW 8-CHARRACTER FIELD C 7700 CONTINUE CALL EXEC(100003B,1600B+LU0) GOTO 9000 7710 CALL ABREG(IA,IB) IF(IB.LT.0)GOTO 9100 C C DETERMINE NUMBER OF FIELDS TO BE TRANSMITTED C INX = INDEX DO 7720 I=2,5 IBUFR(INX) = IOBUF(I) 7720 INX = INX + 1 IOBUF = 4 CALL REIO(100002B,LU1,IOBUF(2),IOBUF,IDUMY,0) GOTO 9000 7730 CALL ABREG(IA,IB) IF(IB.LT.0)GOTO 9100 C C UPDATE FIELD CODE C 8000 IBUFR(3) = 1 CALL TIM(IDTN,IUN,2,IBUFR,LEN,IERFG) IF (IERFG.LT.0)GOTO 9900 RETURN C C ERROR ROUTINE C 9000 IERR = 9 GOTO 9910 9100 IERR = IAND(IREG,377B) + 11 GO TO 9910 9900 IERR = 1 9910 IERR(2) = 5 IERR(3) = 2HWF IERR(4) = 2HAS IERR(5) = 2HU RETURN END C C --------------------------------------------------------- SUBROUTINE XAVMU(LU0,LU1,IERR,IUN,IFUNC,VAL,LSTAT),09580-16317 REV +.2013 800131 DIMENSION IBUFR(40),IOBUF(6),IERR(5),IREG(2) EQUIVALENCE (REG,IREG,IA),(IREG(2),IB) DATA MTRGO /2HGO/ DATA IDTN /52/ C VAL = 1E+38 LSTAT = 0 ITIME = 0 IERR = 0 MIPTR = 0 IF(IFUNC.LT.1.OR.IFUNC.GT.4)GOTO 9900 IF(IFUNC.NE.1)GOTO 50 C C READ DATA FROM BUFFER C CALL TIM(IDTN,IUN,1,IBUFR,39,IERFG) IF(IERFG.LT.0)GOTO 9900 C C REMOTE ENABLE C 50 CONTINUE CALL EXEC(100003B,1600B+LU0) GO TO 9000 60 CALL ABREG(IA,IB) IF(IB.LT.0)GOTO 9100 C IF(IFUNC.EQ.4)GOTO 300 IF(IFUNC.GT.1)GOTO 100 LENTH = 32 IF(IBUFR(2).GT.0)LENTH = 36 C C OUTPUT FIELD CODES C CALL REIO(100002B,LU1,IBUFR(4),LENTH,IDUMY,0) GO TO 9000 70 CALL ABREG(IA,IB) IF(IB.LT.0)GOTO 9100 C C OUTPUT 'GO' C 100 CONTINUE CALL REIO(100002B,LU1,MTRGO,1,IDUMY,0) GO TO 9000 110 CALL ABREG(IA,IB) IF(IB.LT.0)GOTO 9100 IF(IFUNC.EQ.3)RETURN C C WAIT FOR STATUS C 160 IOFST = -20 CALL EXEC(12,0,1,0,IOFST) 170 CONTINUE CALL EXEC(100003B,600B+LU1) GO TO 9000 180 CALL ABREG(IA,IB) ISTAT = IAND(IA,377B) IF(ISTAT.GE.100B)GOTO 210 ITIME = ITIME + 1 IF(ITIME.LE.110)GOTO 160 C$ C$ ALL LINES COMMENTED OUT WITH 'C$' ARE PRE REV 2013 C$ IF(ITIME.LE.55)GOTO 160 C$ GO TO 220 C C CHECK STATUS: C MEASUREMENT-IN-PROCESS OVER RANGE SEARCH FAIL C 210 CONTINUE IF(ISTAT.EQ.100B)GOTO 300 IF(ISTAT.EQ.101B)GOTO 230 215 LSTAT = 5 IF(ISTAT.EQ.102B)LSTAT = 1 IF(ISTAT.EQ.103B)LSTAT = 4 IF(ISTAT.EQ.104B)LSTAT = 3 IF(ISTAT.EQ.105B)LSTAT = 6 IF(ISTAT.EQ.106B)LSTAT = 8 RETURN C 220 LSTAT = 2 RETURN C 230 MIPTR = MIPTR + 1 IF (MIPTR.GT.40)GOTO 220 C$ C$ IF (MIPTR.GT.20)GOTO 220 C$ IOFST = -50 CALL EXEC(12,0,1,0,IOFST) C C READ DATA FROM BUS C 300 CONTINUE C C ALL LINES COMMENTED OUT WITH 'C$' ARE PRE REV 2013 C C$ CALL REIO(100001B,100B+LU1,IOBUF(2),4,IDUMY,0) CALL REIO(100001B,100B+LU1,IOBUF(2),5,IDUMY,0) GO TO 9000 310 CALL ABREG(IA,IB) IF(IB.LT.0)GOTO 9100 ISTAT = IAND(IOBUF(2),177400B)/256 IF(ISTAT.EQ.101B)GOTO 230 IF(ISTAT.GT.101B)GOTO 215 IOBUF(1) = 10 C THE FOLLOWING 2 LINES ARE REV 2013 IF (IOBUF(2) .EQ. 40053B) IOBUF(2) = 2H+0 IF (IOBUF(2) .EQ. 40055B) IOBUF(2) = 2H-0 C C$ ICHAR = IAND(IOBUF(5),177400B) ICHAR = IAND(IOBUF(5),377B) C$ NCHAR = IAND(IOBUF(5),377B) NCHAR = IAND(IOBUF(6),177400B)/256 IOBUF(5) = IAND(IOBUF(5),177400B) IOBUF(5) = IOBUF(5) + 105B C$ IF(ICHAR.EQ.20000B)IOBUF(5)=42453B IF(ICHAR.EQ.40B)IOBUF(6)=2H+0 C$ IF(ICHAR.EQ.47000B)IOBUF(6)=34440B IF(ICHAR.EQ.116B)IOBUF(6)=2H-9 C$ IF(ICHAR.EQ.46400B)IOBUF(6)=31440B IF(ICHAR.EQ.115B)IOBUF(6)=2H-3 C$ IF(ICHAR.EQ.52400B)IOBUF(6)=33040B IF(ICHAR.EQ.125B)IOBUF(6)=2H-6 C$ IF(ICHAR.EQ.20000B.AND.NCHAR.EQ.126B)IOBUF(6)=30060B IF(ICHAR.EQ.40B.AND.NCHAR.EQ.126B)IOBUF(6)=30060B IERR = A2F(IOBUF,1,IOBUF,VAL) IF(IERR.NE.0)GOTO 9300 400 CONTINUE RETURN C C ERROR EXIT C 9000 IERR = 9 GO TO 9910 9100 IERR = IAND(IREG,377B) + 11 GO TO 9910 9200 IERR = 4 GO TO 9910 9300 IERR = 3 GO TO 9910 9900 IERR = 1 9910 IERR(2) = 5 IERR(3) = 2HWF IERR(4) = 2HAM IERR(5) = 2HU RETURN END END$