File: SCINP.RA of Disk: Disks/MyPDP/m8-1-rka1-rkb1
(Source file text) 

/FUNCTION SCINP

/PURPOSE
/-------
/	HP-34701A VOLTMETER SUBROUTINE

/USAGE
/-----
/	OUT=SCINP(MODE,IRANGE,IERR,TARGET)

/DESCRIPTION OF PARAMETERS
/-------------------------
/	MODE:	0=READ VALUE
/		1=READ VALUE
/		2=SEARCH IN POS. DIRECTION
/		3=SEARCH IN NEG. DIRECTION

/	IRANGE:	PRESUPPOSED RANGE: 0 =    1 VOLT
/				   1 =   10 VOLT
/				   2 =  100 VOLT
/				   3 = 1000 VOLT
/		ACTUAL RANGE:	   SAME VALUES AS RESULT

/	IERR:	INPUT VALUE:	    =	MAX. NUMBER OF SAMPLES
/		ERROR VALUE	0   =	ALL OK
/				1   =	INTERFACE ERROR
/				2   =	TIMOUT ERROR
/				4   =	BAD RANGE (PREC.NE.ACTUAL)
/				8   =	OVERFLOW
/				16  =	RUNNING UNDER OS/8

/	TARGET:	SEARCH TARGET	    =	SIGNED REAL VOLTAGE VALUE

/	OUT:	READ   RESULT	    =	SIGNED REAL VOLTAGE RESULT
/		TARGET RESULT	    =	SIGNED REAL DELTA RESULT
/REMARKS
/-------
/	ROUTINE WORKS ONLY IN MULTI-8 BACKGROUND

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

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

/	FORMAT:		TAD	(24
/			6770
/			JMP .+6
/			COMMAND/ERROR
/			SAMPLE COUNT
/			RANGE-SIGN IN/OUT
/			TARGET/RESULT HIGH
/			TARGET/RESULT LOW

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

	MQL=7421
	MQA=7501
	SECT	SCINP
	JA	#ST	/JUMP TO START OF SUBROUTINE
	TEXT	+SCINP+	/ERROR TRACE BACK
#RET,	SETX	SCX8	/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
TARGET,	ORG	.+3
BCDTEM,	F	0.
F4,	F	4.
	ORG	#BASE+30
	FNOP
	JA	#RET
	FNOP
#GOBAK,	0;0
POWERS,	F	100000.
	F 	10000.
	F	1000.
	F	100.
	BASE 0
#ST,	STARTD
	FLDA	10*3
	FSTA	#GOBAK,0
	FLDA	0
	SETX	SCX8
	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	TARGET
	STARTF
	FLDA%	MODE
	JSA	CHECK
	ATX	2	/MODE IN XR2
	FLDA%	IRANGE
	JSA	CHECK
	ATX	3	/RANGE IN XR3
	FLDA%	IERR
	ATX	4	/MAX # OF SAMPLES IN XR4
	LDX	0,5
	FLDA%	TARGET
	JGE	TARPOS
	LDX	4000,5	/SET SIGN IN XR5
	FNEG		/ABS NUMBER
TARPOS,	FMUL	POWERS,3
	FSTA	BCDTEM
	EXTERN	KB2BCD
	JSR	KB2BCD
	JA	TT
	JA	BCDTEM
TT,	FSTA	SCSIGN	/1 BEFORE TARH, TARL
	TRAP4	SCM8	/DO REAL WORK
	XTA	3
	FSTA%	IRANGE	/STORE BACK ACTUAL RANGE
	XTA	4	/ERROR IN XR4
	FSTA%	IERR
	EXTERN	KBCD2B
	JSR 	KBCD2B
	JA	CC
	JA	SCSIGN	/1 BEFORE TARH, TARL
CC,	FDIV	POWERS,3	/CONVERT TO REAL VOLTAGE
	JXN	VALPOS,5
	FNEG
VALPOS,	JXN	#GOBAK,2
	FSUB%	TARGET	/MAKE DELTA IF XR 2 ZERO (MODE 2,3)
	JA	#GOBAK


CHECK,	JA	.
	JLT	ERROR	/ARG LT 0
	FSUB	F4
	JGE	ERROR	/ARG GT 3
	FADD	F4
	JA	CHECK

	EXTERN	#ARGER
ERROR,	TRAP4	#ARGER
	SECT8	SCM8

	0		/ENTRY POINT
	CLA IAC
	AND	MODE8
	DCA	SCCOMM	/REDUCED COMMAND FOR FOREGROUND
	TAD	IERR8	/GET SAMPLE COUNT (DEFAULT 1)
	SNA
	CLA IAC
	CMA
	DCA	SCTRYC	/SET -NUMBER OF TRIES (MAX -2)
	TAD	MODE8
	CLL RAR		/WAS IT MEASURE ONCE ONLY ?
	SZA CLA		/L/PRESERVE LINK
	JMP	SERC8	/L/NO, SEARCH
	CLA CMA		/L/SET MAX. VALUES
	DCA	SCVALH	/L/FOR MEASURE ONLY
	CLA CMA		/L/IMMEDIATE SUCCES
	DCA	SCVALL	/L/
	CML RAR		/SIGN NEGATIVE, SEARCH POSITIVE OR
	SKP		/SIGN POSITIVE, SEARCH NEGATIVE
SERC8,	TAD	SIGN8	/SET SIGN IN SIGN
	TAD	RANG8	/MERGE IN RANGE
	DCA	SCSIGN	/TO FOREGROUND
	TAD	P24
	6770		/GIANT IOT TO MULTI8 (CODE 24)
	JMP	.+6
SCCOMM,	0
SCTRYC,	0
SCSIGN,	0
SCVALH,	0
SCVALL,	0
	SZA CLA		/WAS IT MULTI8 ?
	TAD	P20	/NO, SET ERROR 16 IN CASE OF OS8
	TAD	SCCOMM	/GET FOREGROUND ERROR CODE
	DCA	IERR8	/SET ERROR CODE 1-16
	TAD	SCSIGN	/PICK OUT SIGN BIT
	CLL RAL
	CLA CML RAL
	DCA	SIGN8	/SET POSITIVE = 1
	TAD	SCSIGN
	AND	P3
	DCA	RANG8	/SET ACTUAL RANGE
	TAD	MODE8
	CLL RAR
	SNA CLA
	CLA IAC
	DCA	MODE8	/SET SIGNAL FOR NO DELTA
	CIF CDF 0
	JMP%	SCM8
P3,	3
P20,	20
P24,	24

SCX8,	0
	0
MODE8,	0
RANG8,	0
IERR8,	0
SIGN8,	0
	0
	0

	END