FTN4,L
      SUBROUTINE DSVMU(IUNIT,ABUF,IN),
     +09580-16137 REV.2001 791113 
C************************************************************** 
C 
C     RELOC.       09580-16137
C     SOURCE       09580-18137
C 
C     R. UNTALAN      4 15 77     REV. A
C     R. UNTALAN      770901
C     R. UNTALAN      790112
C     R. UNTALAN      790727
C     BOB RICHARDS    791113
C 
C     HP 92425B TEST SYSTEM SOFTWARE IS THE PROPRIETARY 
C     MATERIAL OF THE HEWLETT-PACKARD COMPANY.  USE AND 
C     DISCLOSURE THEREOF ARE RESTRICTED BY WRITTEN AGREEMENT. 
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************************************************************** 
C 
C  GENERAL
C  -------
C     THE FOLLOWING DEVICE SUBROUTINE WILL ALLOW THE APPLICATION
C  PROGRAMMER TO MAKE MEASUREMENTS WITH THE 3437A. IT WILL PROGRAM
C  THE DESIRED NUMBER OF READINGS ALONG WITH THE MODE OF DATA 
C  TRANSFER.
C 
C  HARDWARE ENVIRONMENT:
C  ---------------------
C 
C     21MX SERIES COMPUTER
C     HP 3437A SYSTEM VOLTMETER 
C     HP 59310A/B INTERFACE BUS I/O KIT 
C 
C 
C    BRANCH AND MNEMONIC TABLE ENTRIES
C    ---------------------------------
C    DSVMU(I,RVA,I),     OV=XX,       ENT=DSVMU, FIL=%DSVMU 
C 
C 
C  BUFFER FOR NUMBER OF READINGS (3 WORDS)
C  ---------------------------------------
C 
C     WORD 1 =NX    WHERE ASCII N IS THE PREFIX FOR NO. OF READINGS.
C                   X = ASCII NUMBER 0-9
C     WORD 2 =XX
C     WORD 3 =XS    ASCII S = STORE COMMAND 
C 
C 
C  INPUT WORD FORMAT
C  -----------------
C 
C               8----DIO------1 
C     1RST BYTE 1 0 1 0 0 0 1 1 
C               --- - - ------- 
C              !R  !S!M!  2SD  !
C              !M  !B!S!       !
C                    !D!
C 
C     2ND  BYTE 0 0 1 0 0 1 0 0 
C              ! 3SD   !  LSD  !
C 
C    RM= RANGE MULTIPLIER 
C    SB= SIGN BIT 
C    MSD= MOST SIGNIFICANT DIGIT
C    2SD= SECOND SIGNIFICANT DIGIT
C    3SD= THIRD SIGNIFICANT DIGIT 
C    LSD= LEAST SIGNIFICANT DIGIT 
C 
C  EACH READING IS FIRST CONVERTED TO ASCII THEN IT IS
C  CONVERTED TO A FLOATING POINT NUMBER SO THAT IT CAN
C  BE USED BY BASIC.
C   THE DATA IS TRANSFERED DIRECTLY TO THE CALLING PROGRAM
C   VIA SAM . 
C 
C***************************************************************
      DIMENSION IERMS(5)
      DIMENSION ABUF(250) 
      DATA IDTB/9/
      DATA IDTN/43/ 
      DATA IERMS/10,5,2HDS,2HVM,2HU / 
C 
C 
C  INTERFACE MODULE FOR HP3437A MEASUREMENT DEVICE
C  SUBROUTINE.
C 
C 
      IERMS=10
      ISTN=ISN(DUMMY) 
      LU2=LUDV(ISTN,IDTN,IUNIT) 
      LU1=IBLU0(LU2)
      IF(ISTN.EQ.0.OR.LU1.EQ.0.OR.LU2.EQ.0)GO TO 500
      CALL XSVMU(LU1,LU2,IERMS,IUNIT,ABUF,IN) 
C 
C 
      IF(IERMS)500,20,500 
20    RETURN
500   CALL ERROR(IERMS,IERMS(2))
C 
C 
C 
C 
C 
C 
      RETURN
      END 
C 
C 
      SUBROUTINE XSVMU(LU1,LU2,IERMS,IUNIT,ABUF,IN),
     +09580-16137 REV.2001 791113 
C************************************************************** 
C     THIS THE MEASUREMENT DEVICE SUBROUTINE FOR THE 3437A
C   SVM.  THE PARAMETERS IN THE CALLING SEQUENCE
C   HAVE THE FOLLOWING MEANING: 
C 
C    LU1= LU NUMBER OF HPIB CARD
C    LU2= LU NUMBER OF 3437A
C 
C    IERR IS A 5 WORD ERROR ARRAY WITH IERR(1) = ERROR CODE WHERE:
C 
C     0=NO ERROR
C     1=PARAMETER ERROR 
C     4= BAD DATA FROM 3437A
C 
C 
C     ERROR MESSAGES WHICH PERTAIN TO THE HPIB
C 
C     9= I/O CALL REJECTED
C     10= LU1 OR LU2 NOT ASSIGNED TO STATION
C     11= DMA INPUT REQUEST PREMATURELY TERMINATED
C     12= I/O DEVICE TIME OUT 
C     13= IFC (INTERFACE CLEAR) DETECTED DURING I/O REQUEST 
C     14= SRQ SERVICE ABORTED 
C     15= NON-EXISTENT ALARM PROGRAM
C     16= ILLEGAL CONTROL REQUEST 
C     17= EQT EXTENSION AREA FULL, NO NEW DEVICE MAY BE ADDED ON LINE 
C 
C 
C  ABUF=NAME OF BUFFER
C 
C  IN=NUMBER OF READINGS
C     MAXIMUM NUMBER OF READINGS IS 250 
C 
C 
C 
C***************************************************************
      DIMENSION IERMS(5)
      DIMENSION IOBUF(3),IASBF(6) 
      DIMENSION IREG(2),IBUF(250) 
      DIMENSION ABUF(250) 
C 
C 
      EQUIVALENCE(REG,IREG,IA),(IREG(2),IB) 
C 
C 
C 
C 
      IDTN=43 
      IERMS=0 
      IPRAM=37000B
      IERR=1
      ICNWD=2500B 
      IASBF(1)=10.
C 
C 
      IF(IN.GT.250 .OR. IN.LE.0)IERMS=1 
      IF(IERMS.EQ.1)GOTO 9000 
C 
C 
C**CONFIGURE DRIVER WORD (DMA TRNSFER)*** 
C 
      REG=EXEC(3,2500B+LU2,IPRAM) 
C 
C 
C 
C****PICK UP NUMBER OF READINGS ******
C 
705   IN1=IN/1000 
      IX1=IN1+60B 
      IOBUF(1)=IOR(47000B,IX1)
C 
C 
      IN2=(IN-IN1*1000)/100 
      IX2=(IN2*2**8)+30000B 
C 
C 
C 
C 
      IN3=(IN-((IN1*1000)+(IN2*100)))/10
      IX3=IN3+60B 
C 
C 
      IN4=IN-((IN1*1000)+(IN2*100)+(IN3*10))
      IX4=(IN4*2**8)+30000B 
C 
C 
      IOBUF(2)=IOR(IX2,IX3) 
      IOBUF(3)=IOR(IX4,123B)
C 
C 
C******OUTPUT NUMBER OF READINGS********
C 
C 
      CALL EXEC(100002B,LU2,IOBUF,3,IDUMY,0)
      GO TO 700 
C 
260   CALL ABREG(IA,IB) 
      IF (IB.LT.0)GO TO 900 
C 
C***CONFIGURE DRIVER WORD**** 
C 
C*****READ DATA  FIXED BINARY ****
C 
      CALL EXEC(100001B,100B+LU2,IBUF(1),IN,IDUMY,0)
      GOTO 700
C 
280   CALL ABREG(IA,IB) 
C 
C 
C 
      IF (IB.LT.0)GO TO 900 
      I=1 
      J=1 
      JEND=177777B
C 
C 
C 
C 
C****SAVE MSD &LSD **** 
C 
100   IRDNG=IAND(IBUF(I),17777B)
C 
C  SAVE RANGE AND SIGN
C 
      IR=IAND(IBUF(I),140000B)
      ISGN=IAND(IBUF(I),20000B) 
C 
C 
C ***CONVERT BINARY DATA TO ASCII**** 
C 
C  SIGN 
C 
C 
      IF(ISGN.EQ.0)ISGN1=26400B 
      IF(ISGN.NE.0)ISGN1=25400B 
C***IF OVERLOAD (1999) CONVERT TO (9999) ***
      IF (IRDNG.EQ.14631B)IDGT1=71B 
      IF(IRDNG.EQ.14631B)GO TO 800
C 
C  1RST DGT 
C 
      IDGT1=IAND(IRDNG,10000B)
      IDGT1=IOR(IDGT1/2**12,60B)
C 
800   IASBF(2)=IOR(ISGN1,IDGT1) 
C 
C 
C  2ND DGT
C 
      IDGT2=IAND(IRDNG,7400B) 
      IDGT2=IOR(IDGT2/2**8,60B) 
C 
      IASBF(3)=IOR(27000B,IDGT2)
C 
C  3RD DGT
C 
      IDGT3=IAND(IRDNG,360B)
      IDGT3=IOR(IDGT3*2**4,30000B)
C 
C 
C  4TH DGT
C 
      IDGT4=IAND(IRDNG,17B) 
      IDGT4=IOR(IDGT4,60B)
C 
C 
      IASBF(4)=IOR(IDGT3,IDGT4) 
C 
C 
      IEX=42400B
      JSGN=53B
      IF(IR.EQ.40000B)JSGN=55B
C 
C 
C****SAVE E+/- ****** 
C 
      IASBF(5)=IOR(IEX,JSGN)
C 
      IMPY=30061B 
      IF(IR.EQ.140000B)IMPY=30060B
C 
C 
      IASBF(6)=IMPY 
      IF (IRDNG.EQ.14631B)IASBF(6)=31470B 
C 
C 
C******CONVERT ASCII TO FLOATING POINT **** 
C 
      IREG=A2F(IASBF,1,10,ABUF(I))
      IF(IREG)650,600 
600   IF(I.EQ.IN)GO TO 320
      I=I+1 
      GO TO 100 
C 
320   RETURN
C**ERRORS*****
C 
650   IERMS=4 
      GOTO 9000 
700   IERMS=9 
      GO TO 9000
C 
900   IERMS=IAND(IREG,377B)+11
C 
9000  IERMS(2)=5
      IERMS(3)=2HDS 
      IERMS(4)=2HVM 
      IERMS(5)=2HU
      RETURN
      END 
      END$
                                                                                                                                                                                                