FTN4,L SUBROUTINE PPGOM(IUNIT,AHIL,ALOL,IEN,ISCHN,IZCHN), +09580-16306 1926 790502 C C------------------------------------- C C HP 8160A PROGRAMMABLE SIGNAL SOURCE C (PPGOM) C C RELOCATABLE 09580-16306 C SOURCE 09580-18306 C C R.UNTALAN REV. 1840 C R.UNTALAN REV. 1926 C BOB RICHARDS 790502 C------------------------------------ C C !=================================================! C ! ! C ! (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979 ! C ! ALL RIGHTS RESERVED ! C ! ! C ! NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, ! C ! REPRODUCED OR TRANSLATED INTO ANOTHER PROGRAM ! C ! LANGUAGE WITHOUT THE PRIOR WRITTEN CONSENT OF ! C ! THE HEWLETT-PACKARD COMPANY. ! C ! ! C !-------------------------------------------------! C ! ! C ! TEST SYSTEM SOURCE SOFTWARE IS THE PROPRIETY ! C ! MATERIAL OF THE HEWLETT-PACKARD COMPANY. ! C ! ! C ! THIS SOURCE DATA SHALL BE USED SOLELY IN ! C ! CONJUCTION WITH ELECTRONIC COMPUTER SYSTEMS ! C ! SUPPLIED TO THE USER BY HEWLETT-PACKARD. ! C ! ! C ! THIS PROPRIETY DATA SHALL NOT BE COPIED OR ! C ! OTHERWISE REPRODUCED WITHOUT THE PRIOR WRITTEN ! C ! CONSENT OF HEWLETT-PACKARD, EXCEPT THAT ONE ! C ! COPY MAY BE MADE AND RETAINED BY THE USER FOR ! C ! ARCHIVE PURPOSES. ! C ! ! C ! THE USER SHALL NOT DISCLOSE THIS DATA TO ANY ! C ! THIRD PARTIES WITHOUT THE PRIOR WRITTEN CONSENT ! C ! OF HEWLETT-PACKARD. IN ADDITION, THE USER SHALL ! C ! USE AT LEAST THE SAME CARE AND SAFEGUARDS TO ! C ! PROTECT THIS DATA FROM UNAUTHORIZED USE OR ! C ! DISCLOSURE AS THE USER USES TO PROTECT ITS OWN ! C ! PROPRIETARY DATA. ! C ! ! C !=================================================! C C GENERAL: C -------- C C THE FOLLOWING DEVICE SUBROUTINES ARE USED C TO PROGRAM THE HP 8160A PROGRAMMABLE PULSE GENERATOR C C HARDWARE REQUIRED: C ------------------ C A. HP 8160A PROGRAMMABLE SIGNAL SOURCE. C B. HP59310 BUS INTERFACE KIT. C C JUMPER POSITION: C SW1-1 - 1 C SW1-2 TO SW1-8 - 0 C SW2-1 - 0 C SW2-2 - 0 C SW2-3 - 0 C SW2-4 - 0 C SW2-5 - 1 C SW2-6 - REN C SW2-7 - ICF C SW2-8 - CNX C C C. HP 21XX SERIES COMPUTER C C BRANCH AND MNEMONIC TABLE ENTRIES: C ---------------------------------- C C PPGOM(I,R,R,I,I,I), OV=XX, ENT=PPGOM, FIL=%PPGOM C C CONFIGURATION TABLE ENTRIES: C ---------------------------- C C R 49,1,11 C U1 C 2 NUMBER OF CHANNELS 1=CHAN. A ONLY 2=CHAN A&B C 0.0 TEMPORARY STORAGE FOR CHAN A LO-LEVEL C 0.0 TEMPORARY STORAGE FOR CHAN A HI-LEVEL C 0.0 TEMPORARY STORAGE FOR CHAN B LO-LEVEL C 0.0 TEMPORARY STORAGE FOR CHAN B HI-LEVEL C 0 TEMPORARY STORAGE FOR IMPEDANCE C 0 TEMPORARY STORAGE FOR (A SEP B) OR (A ADD B) C C C C C------------------------------------ C C PPGOM(IUNIT,AHIL,ALOL,IEN,ISCHN,IZCHN) C C WHERE: C C IUNIT = UNIT # C C AHIL = HIGH LEVEL AMPLITUDE C -9.89 TO 9.99 WITH 50 OHM IMPEDANCE C -19.7 TO 19.9 WITH 1K OHM IMPEDANCE C ALOL = LOW LEVEL AMPLITUDE C -9.99 TO 9.89 WITH 50 OHM IMPEDANCE C -19.9 TO 19.7 WITH 1K OHM IMPEDANCE C C NOTE: A PARAMETER ERROR WILL RESULT IF ALOL IS GREATER THAN AHIL. C C C C IEN = OUTPUT ENABLE/OUTPUT DISABLE C C 0 = ENABLE C 1 = DISABLE C C ISCHN = A SEP B * A ADD B C 0 = A SEP B C 1 = A ADD B C C IZCHN = IMPEDANCE*NORM.COMPL.*CHAN C C 0 = 50 OHMS/NORMAL/A CHAN C 1 = 1K OHMS/NORMAL/A CHAN C 2 = 50 OHMS/COMPLEMENT/A CHAN C 3 = 1K OHMS/COMPLEMENT/A CHAN C 4 = 50 OHMS/NORMAL/B CHAN C 5 = 1K OHMS/NORMAL/B CHAN C 6 = 50 OHMS/COMPLEMENT/B CHAN C 7 = 1K OHMS/COMPLEMENT/B CHAN C C C------------------------------------ DIMENSION IERMS(5) DATA IDTN / 49 / DATA IERMS / 10,5,2HPP,2HGO,2HM / C IERMS=10 C C FIND STATION AND LU #'S C ISTN = STATION # C LU1 = HP 8160A LU C LUIB = 59310 LU C ISTN=ISN(DUMMY) LU1=LUDV(ISTN,IDTN,IUNIT) LUIB=IBLU0(LU1) IF(LU1 .LE. 0 .OR. LUIB .LE. 0)GOTO 800 C C CALL X SUB C CALL XPGOM(LU1,LUIB,IERMS,IUNIT,AHIL,ALOL,IEN,ISCHN,IZCHN) IF(IERMS)800,20,800 C C EXIT C 20 RETURN C C ERROR EXIT C 800 CALL ERROR(IERMS,IERMS(2)) RETURN END C C--------------------------------------------- C SUBROUTINE XPGOM(LU1,LUIB,IERMS,IU,AHIL,ALOL,IEN,ISCHN, +IZCHN),09580-16306 1926 790502 C DIMENSION IERMS(5),IBUF(12),IREG(2),IOBUF(18),IPBUF(2) DIMENSION IN(3),IS(2),IZ(10),KHSTR(6),KLSTR(6) EQUIVALENCE (REG,IREG,IA),(IREG(2),IB),(JSTR,KHSTR),(LSTR,KLSTR) EQUIVALENCE (IBUF(2),ALO) EQUIVALENCE (IBUF(4),AHI) EQUIVALENCE (IBUF(6),BLO) EQUIVALENCE (IBUF(8),BHI) DATA IN /2HEN,2HDI / DATA IS /2HAS,2HAA / DATA IZ /2HA5,2HAN,2HA1,2HAN,2HA5,2HAC,2HA1,2HAC,2H / C C--------------------------------------------- C C C THE PARAMETERS IN THE CALLING SEGUENCE HAVE THE FOLLOWING C MEANINGS. C C LUIB = LU # OF HPIB BUS. C LU1 = LU # OF HP8160A C C IERMS IS A FIVE WORD ARRAY WITH IERR(1) CONTAINING C THE ERROR CODE. C C 0 = NO ERROR C 1 = PARAMETER ERROR C C ERROR MESSAGES THAT PERTAIN TO THE HPIB. C C 9 = I/O CALL REJECTED C 10 = LUIB OR LU1 = 0 C 12 = I/O DEVICE TIME OUT C 13 = IFC DETECTED DURING I/O REQUEST C 14 = SRQ ABORTED C 15 = NON-EXISTENT ALARM PROGRAM C 16 = ILLEGAL CONTROL REQUEST C 17 = EQT EXTENSION AREA FULL C C IERMS(2) = ERROR MNEMONIC CHARACTER COUNT C IERMS(3) TO IERMS(5) = ERROR MNEMONIC C C C--------------------------------------------- C C C RETRIEVE CONFIGURATION DATA C IBUFL=11 C C CALL TIM(49,IU,1,IBUF,IBUFL,IER) IF(IER .NE. 0)RETURN C C C C CHECK PREVIOUS AMPLITUDE ON CHAN A C IRCL=0 IFLAG=0 C C C C IF (IZCHN .GT. 3) GOTO 10 C C C C C C IF(ALO .GT. AHIL) IFLAG=1 ALO=ALOL AHI=AHIL GOTO 30 C C C CHECK PREVIOUS CHAN B AMPLITUDE C 10 IF(BLO .GT. AHIL) IFLAG=1 BLO=ALOL BHI=AHIL C C C STORE CURRENT AMPLITUDE AND CHAN SELECT MODE SETTING IN TABLE C 30 IBUF(10)=IZCHN IBUF(11)=ISCHN C C CALL TIM(49,IU,2,IBUF,IBUFL,IER) IF(IER .NE. 0) RETURN C C C C CHECK IF CHAN B AVAILABLE C 20 JMAX=INT(4.0*IBUF(1)) C C C C CHECK PARAMETERS C IERMS=1 INUM=18 IZCHN=IZCHN+1 ICHN=IZCHN ISCHN=ISCHN+1 IEN=IEN+1 C C C IF(ALOL.GT.AHIL) GOTO 8000 IF(ISCHN .LT. 1 .OR. ISCHN .GT. 2) GOTO 8000 IF(IEN .LT. 1 .OR. IEN .GT. 2) GOTO 8000 IF(IZCHN .LT. 1 .OR. IZCHN .GT. JMAX) GOTO 8000 C C IF((IZCHN/2)*2 .NE. IZCHN) GOTO111 C C SET MINIMUM AND MAXIMUM LIMITS FOR 1K OHM IMPEDANCE C ALOMX=19.705 ALOMN=-19.905 AHIMX=19.905 AHIMN=-19.705 DIF=ABS(AHIL-ALOL)+.0005 IF(DIF .GT. AHIMX .OR. DIF .LT. .2001) GOTO 8000 C C GOTO 112 C SET MINIMUM AND MAXIMUM LIMITS FOR 50 OHM IM@EDANCE C C 111 ALOMX=9.8905 ALOMN=-9.9905 AHIMX=9.9905 AHIMN=-9.8905 DIF=ABS(AHIL-ALOL)+.0005 IF(DIF .GT. AHIMX .OR. DIF .LT. .1001) GOTO 8000 C C 112 IF(ALOL.LT.ALOMN.OR.ALOL.GT.ALOMX)GOTO 8000 IF(AHIL.LT.AHIMN.OR.AHIL.GT.AHIMX)GOTO 8000 C C C C CLEAR BUFFER C DO 88 L=1,6 KLSTR(L)=2H 88 KHSTR(L)=2H C C CONVERT HI-LEVEL AND LO-LEVEL TO ASCII C IF(ABS(AHIL).GE..100)GOTO 105 CALL ISOL(AHIL,KHSTR(2),KHSTR(3),KHSTR(4)) C C 100 GOTO 106 C 105 CALL F2A(AHIL,JSTR) C C 106 IF(ABS(ALOL).GE..100) GOTO 108 C C CALL ISOL(ALOL,KLSTR(2),KLSTR(3),KLSTR(4)) C C GOTO 109 C C 108 CALL F2A(ALOL,LSTR) C C C C C C SET INDEX POINTER FOR IMPEDANCE/NORM.COMPL./CHANNEL OUT C 109 IF(IZCHN.GT.4)IZCHN=IZCHN-4 INDX=(2*IZCHN)-1 C C CLEAR OUTPUT BUFFER C DO 333 I=1,18 333 IOBUF(I)=2H C C C C SET UP OUTPUT BUFFER C IOBUF(1)=IS(ISCHN) IOBUF(2)=IN(IEN) IOBUF(3)=IZ(INDX) IOBUF(4)=IZ(INDX+1) IOBUF(5)=2HHI IF(ICHN .LE. 4) IOBUF(6)=2HLA IF(ICHN .GT. 4) IOBUF(6)=2HLB IOBUF(8)=KHSTR(2) IOBUF(9)=KHSTR(3) IOBUF(10)=KHSTR(4) IOBUF(11)=2HV IOBUF(12)=2HLO IF(ICHN .LE. 4) IOBUF(13)=2HLA IF(ICHN .GT. 4) IOBUF(13)=2HLB IOBUF(15)=KLSTR(2) IOBUF(16)=KLSTR(3) IOBUF(17)=KLSTR(4) IOBUF(18)=IOBUF(11) C C CHANGE SIGN IF POSITIVE C IF(AHIL .GT. 0) IOBUF(7)=2H+ IF(ALOL .GT. 0) IOBUF(14)=2H+ C C C C C IF PREVIOUS HI-LEVEL IS LOWER THAN THE CURRENT LO-LEVEL C THEN OUTPUT THE LO-LEVEL FIRST AND HI-LEVEL SECOND. C IF(IFLAG .EQ. 0) GOTO 510 C C IOBUF(5)=2HLO IF(ICHN .LE. 4) IOBUF(6)=2HLA IF(ICHN .GT. 4) IOBUF(6)=2HLB IOBUF(8)=KLSTR(2) IOBUF(9)=KLSTR(3) IOBUF(10)=KLSTR(4) IOBUF(12)=2HHI IF(ICHN .LE. 4) IOBUF(13)=2HLA IF(ICHN .GT. 4) IOBUF(13)=2HLB IOBUF(15)=KHSTR(2) IOBUF(16)=KHSTR(3) IOBUF(17)=KHSTR(4) C C IF(AHIL .GT. 0) IOBUF(14)=2H+ IF(ALOL .GT. 0) IOBUF(7)=2H+ C C C CHANGE BUFFER IF CHAN B SELECTED C 510 IF(ICHN.LT.5) GOTO 1999 IOBUF(3)=IOBUF(3)+400B IOBUF(4)=IOBUF(4)+400B C C C C 1999 IF(IBUF(1) .EQ. 2) GOTO 2000 C C DO NOT OUTPUT CHAN. INDICATOR C IOBUF(1)=2H IOBUF(6)=IAND(177400B,IOBUF(6)) IOBUF(13)=IAND(177400B,IOBUF(13)) C C C REMOTE ENABLE C 2000 CALL EXEC(100003B,1600B+LUIB) GOTO 9000 70 CALL ABREG(IA,IB) IF(IB .LT. 0) GOTO 8500 C C C C SEND OUTPUT BUFFER C 2100 CALL REIO(100002B,LU1,IOBUF(1),INUM,IDUMY,0) GOTO 9000 71 CALL ABREG(IA,IB) IF(IB .LT. 0) GOTO 8500 C C C RETURN C C CLEAR SRQ C CALL EXEC(100003B,600B+LU1) GOTO 9000 66 CALL ABREG(IA,IB) IF(IB .LT. 0) GOTO 8500 C IERMS=0 RETURN C C ERROR EXIT C 8500 IERMS=IAND(IA,377B)+11 GOTO 8000 9000 IERMS=9 8000 IERMS(2)=5 IERMS(3)=2HPP IERMS(4)=2HGO IERMS(5)=2HM RETURN END C C C C C C------------------------------------ C C C THIS SUBROUTINE CONVERTS NUMBERS WHICH ABSOLUTE VALUE IS <.01 C INTO AN ASCII STRING (IWD1,IWD2,IWD3) C C C SUBROUTINE ISOL (ANUM,IWD1,IWD2,IWD3), +09580-16306 1926 790502 C C TEMP=ANUM ANUM=ABS(ANUM) C C C CONVERT DIGITS TO ASCII C I2=INT(ANUM*100.) R2=I2 IAS2=I2+60B I3=INT(ANUM*1000.01-R2*10.) IAS3=I3+60B C C C CHECK IF ANUM IS NEGATIVE C IF(TEMP.LT.0) GOTO 300 C C IWD1=2H.0 IWD3=2H C IF(ANUM.GE..01) GOTO 310 C IWD2=IOR(30000B,IAS3) C C RETURN C C 310 IAS2=IAS2*2**8 IWD2=IOR(IAS2,IAS3) C C RETURN C C C PROCESS NEGATIVE NUMBER C C 300 IWD1=2H-. IAS3=IAS3*2**8 IWD3=IAND(177400B,IAS3) C C IF(ANUM.GE..01) GOTO 400 C C IWD2=2H00 C C RETURN C C 400 IWD2=IOR(30000B,IAS2) C C RETURN C C END END$