File: DVINP.RA of Tape: Various/Tests/dsk1c
(Source file text) 

/SUBROUTINE DVINP

/PURPOSE
/-------
/	HP-5326B TIMER-COUNTER-DVM SUBROUTINE

/USAGE
/-----
/	CALL DVINP(MODE,IRANGE,IERR,IVAL)

/OR
/	IVAL=DVINP(MODE,IRANGE,IERR,DUMMY)

/DESCRIPTION OF PARAMETERS
/-------------------------
/	MODE:	0=NO OPERATION
/		1=DVM
/		2=FREQUENCY
/		3=PERIOD
/		4=TIME INTERVAL
/	+	8=READ RESULT
/	+	16=READ FUNCTION

/	IRANGE:	TIME FUNCTIONS:	0-7 =	1SEC - 0.1MMSEC
/				15  =	1 SECOND RATE
/		DVM:		0-3 =	1SEC - 1MSEC
/				4   =	10 VOLT
/				8   =	100 VOLT
/				12  =	1000 VOLT

/	IERR:	ERROR VALUE	0   =	ALL OK
/				1   =	FOREGROUND ERROR
/				4   =	SIGN-CHANGE IN DVM MODE
/				8   =	OVERFLOW (NOT IN DVM MODE)
/				12  =	8 + 4
/				16  =	RUNNING UNDER OS/8

/	IVAL:	RESULT		SIGNED INTEGER VALUE
/REMARKS
/-------
/	ROUTINE WORKS ONLY IN MULTI-8 BACKGROUND

/SUBROUTINES REQUIRED
/--------------------
/	KBCD2B		BCD TO BINARY FUNCTION

/METHODS
/-------
/	RALF ROUTINE MAKES GIANT IOT CALL (CODE 20(8)) TO DV.TK

/	FORMAT:		TAD	(20
/			6770
/			JMP .+4
/			FUNCTION
/			ARG1
/			ARG2

/DEFINITIONS
/-----------

	MQL=7421
	MQA=7501
	SECT	DVINP
	JA	#ST	/JUMP TO START OF SUBROUTINE
	TEXT	+DVINP+	/ERROR TRACE BACK
#RET,	SETX	DVX8	/SET MY WORLD AFTER FOREIGN JSR
	SETB	#BASE
	JA	.+3
#BASE,	ORG	.+3
#ARGS,	ORG	.+3
MODE,	ORG	.+3
IRANGE,	ORG	.+3
IERR,	ORG	.+3
IVAL,	ORG	.+3
F16,	F 16.
	ORG	#BASE+30
	FNOP
	JA	#RET
	FNOP
#GOBAK,	0;0
	BASE 0
#ST,	STARTD
	FLDA	10*3
	FSTA	#GOBAK,0
	FLDA	0
	SETX	DVX8
	SETB	#BASE
	BASE	#BASE
	LDX	0,1
	FSTA	#BASE
	FLDA%	#BASE,1+
	FSTA	MODE
	FLDA%	#BASE,1+
	FSTA	IRANGE
	FLDA%	#BASE,1+
	FSTA	IERR
	FLDA%	#BASE,1+
	FSTA	IVAL
	STARTF
	FLDA%	MODE
	JSA	CHECK
	ATX	2	/MODE IN XR2
	FLDA%	IRANGE
	JSA	CHECK
	ATX	3	/RANGE IN XR3
	TRAP4	DVM8
	XTA	4	/ERROR IN XR4
	FSTA%	IERR
	XTA	5	/4000=RESULT POS.;0=RESULT NEG.;1=RESULT FUNCTION
	JGT	FUNC
	EXTERN	KBCD2B
	JSR 	KBCD2B
	JA	CC
	JA	DVCOMM	/ 1 BEFORE VAL1,VAL2
CC,	JXN	VALPOS,5
	FNEG
VALPOS,	FSTA%	IVAL
	JA	#GOBAK

FUNC,	XTA	6	/FUNCTION CODE IN XR6
	JA	VALPOS

CHECK,	JA	.
	JLT	ERROR	/ARG LT 0
	FSUB	F16
	JGT	ERROR	/ARG GT 16
	FADD	F16
	JA	CHECK

	EXTERN	#ARGER
ERROR,	TRAP4	#ARGER
	SECT8	DVM8

	0		/ENTRY POINT
	TAD	MODE8
	AND	P7	/GET MEASUREMENT TYPE
	TAD	PTBL	/ + TAD ...
	DCA	.+1
	HLT		/GET HARDWARE CODE
	MQL		/SAVE A WHILE
	TAD	RANG8	/GET RANGE
	AND	P17	/4 BITS
	MQA		/MERGE
	DCA	DVVAL1	/TO FOREGROUND
	TAD	MODE8
	CLL RAR
	CLL RAR
	CLL RAR		/GET MEASUREMENT MODE
	DCA	DVCOMM	/TO FOREGROUND
	TAD	P20
	MQL		/SET ERROR 16 IN CASE OF OS8
	TAD	P20
	6770		/GIANT IOT TO MULTI8 (CODE 20)
	JMP	.+4
DVCOMM,	0
DVVAL1,	0
DVVAL2,	0
	SZA CLA		/WAS IT MULTI8 ?
	JMP	DVM8RT	/NO, RETURN WITH ERROR 16
	MQL		/CLEAR ERROR NOW
	TAD	DVVAL1
	DCA	VAL1	/COPY VAL1 FOR FUNCTION READ
	TAD	MODE8	/WAS IT FUNCTION READ ?
	CIA
	TAD	P20	/FUNCTION IS MODE 16
	SNA CLA
	JMP	DVM8RT	/YES, THAT'S ALL
	TAD	DVCOMM	/GET FOREGROUND ERROR CODE
	MQL		/SET ERROR CODE 1-3
	CLA CLL CML RTR	/2000
	AND	DVVAL1	/PICK OUT SIGN BIT
	CLL RAL
	DCA	SIGN8	/SET POSITIVE = 4000
	CLA CMA		/-1
	TAD	MODE8	/+1 IF DVM
	AND	P7	/ZAP READ BITS
	SZA CLA		/IS IT DVM?
	CLL CML	RAR	/NO, MAKE 4000
	TAD	P1000	/IF DVM IGNORE OVERFLOW
	AND	DVVAL1	/GET DVM ERRORS 4000=OVERFLOW, 1000=SIGN CHANGE
	CLL RTL
	RAL		/OVFL IN BIT 10, SGNCH IN LINK
	SZL
	IAC		/SET BIT 11 ON SGNCH
	CLL RTL		/SET ERROR CODES 4,8,12
	MQA
	MQL		/OR THEM IN
	TAD	P1777
	AND	DVVAL1	/ELIMINATE CONTROL BITS
	DCA	DVVAL1	/ALL PREPARED FOR BCDBIN CONVERSION
DVM8RT,	MQA		/GET ERROR CODE INTO IERR8
	DCA	IERR8
	CIF CDF 0
	JMP%	DVM8

P7,	7
P17,	17
P20,	20
P1777,	1777
P1000,	1000
PTBL,	TAD	DVTBL

DVTBL,	0000		/NO OPERATION
	0060		/DVM FUNCTION
	5000		/FREQ FUNCTION
	4000		/PERIOD FUNCTION
	2000		/TIME INTERVAL FUNCTION

DVX8,	0		/TRACEBACK 0
	0		/ARG INDEX
MODE8,	0
RANG8,	0
IERR8,	0
SIGN8,	0
VAL1,	0
VAL2,	0

	END