File: SC.TK of Tape: Sources/Multi8/m8-tk-etc-20-10-80
(Source file text) 

/SC.TK 8-OCT-80

/THIS TASK CAN BE CALLED BY A GIANT IOT (24).
/IT HANDLES THE SETTING AND READING OF THE
/HP 34701A VOLTMETER
/
/CALLING SEQUENCE:
/
/		TAD (24
/		6770
/		JMP .+6
/		COMMAND/ERROR
/		SAMPLE COUNT
/		RANGE IN/OUT
/		TARGET/RESULT HIGH
/		TARGET/RESULT LOW
/		........
/
/COMMAND:	0000	SEARCH MODE POS. DIRECTION
/		0001	SEARCH MODE NEG. DIRECTION
/
/VALUE RETURNED TO COMMAND:
/
/		0000	MEASUREMENT OK
/		0001	INTERFACE ERROR
/		0002	TIMOUT ERROR
/		0004	BAD RANGE
/		0008	OVERFLOW
/
/SAMPLE COUNT:	-MAX SAMPLE COUNT-1 FOR SEARCH MODE
/
/RANGE:		0000-0003	PRESUPPOSED RANGE IN
/		0000-0003	ACTUAL RANGE OUT (IF DIFFERENT ERR 2)
/		+4000		IF NEGATIVE BCD VALUE
/
/TARGET/RESULT:	6-DIGIT BCD REPRESENTATION OF
/		TARGET VALUE IN SEARCH MODE (IN)
/		6-DIGIT BCD RESULT AFTER READ
/		OR SEARCH COMMAND (OUT)
/
		SCEI=SCV+6000	/ENABLE INTERRUPTS
		SCDI=SCV+6001	/DISABLE INTERRUPTS
		SCSF=SCV+6002	/SKIP ON DONE FLAG
		SCCF=SCV+6003	/CLEAR FLAGS
		SCRL=SCV+6004	/READ LOW ORDER BCD
		SCRH=SCV+6005	/READ HI ORDER BCD AND STATUS
		SCST=SCV+6006	/START MEASUREMENT
		SCSE=SCV+6007	/SKIP ON ERROR

	*0
	CDF 10		/GIGATB IS IN FIELD 1
	GIGATB+24
	"S^100+"C&3777
	*200

SCARG,	"S^100+"C&3777	/TASK NAME IS "SC"
	401		/TWO PAGES, CONNECTED
	SCHP
	SCINT		/EVENT SCHP GOES TO SCINT
SCMCNT,	SCINIT
XEND,	SCEND
SCSTAT,	0
SC,	JMP I	SCMCNT		/GETS	SZL CLA	/CLOSE ?
	JMP	SCCLOS		/YES
	DCA I	SCUAC		/CLEAR USER AC
	TAD I	SCFLDS
	AND	C70		/PICK OUT INSTRUCTION FIELD
	TAD I	SCSTAT
	TAD	(-EMULATE+INCORE/SET INCORE REQUEST TO INSTR.FLD
	DCA I	SCSTAT
	JMS	MONITOR		/FORCE BS IN INCORE HANDLING
	   SIGNAL
	   BSSLOT
	TAD I	SCSLOT
	DCA	SCDIR
	JMS	MONITOR		/WAIT ON BS READY
	   WAIT
SCDIR,	   0
	TAD	C6201
	DCA	SCUSER
	AC0001
	TAD I	SCUPC
	DCA	SCARG		/ADDRESS OF GIOT+2
	CDF 0
	DCA I	(SCHP^2+HRDLST	/CLEAR STATUS
	DCA I	(SCHP^2+HRDLST+1/AND EVENT
SCUSER,	HLT			//GETS CDF BG
	TAD I	SCARG		//GET COMMAND
	CLL RTR
	DCA	SCDIR		//SET SEARCH DIRECTION
	TAD	SCARG
	DCA	AUTO10		//SET ADDRESS OF SAMPLE COUNT
	TAD I	AUTO10
	DCA	SCMCNT		//SET IT (-)-1
	TAD I	AUTO10		//SET TARGET SIGN
	DCA	SCTARS
	TAD I	AUTO10
	DCA	SCTARH		//SET HI-ORDER TARGET
	TAD I	AUTO10
	DCA	SCTARL		//SET LO-ORDER TARGET
SCLOOP,	SCEI			//ENABLE INTERRUPTS
	TAD	(-DGNTICK^10	//WAIT FOR MAX 8 SECS
	JMS	MONITOR
	   WAIT
	   SCHP			//WAIT FOR SC EVENT
	TAD	SCERR		//TIMOUT = ERROR 2, INTERFACE = ERROR 1
SCSTOR,	DCA	SCERR		//MAYBE OTHERS
	AC0002			//LOAD TIMOUT ERROR CODE
	ISZ	SCMCNT		//MORE SAMPLES ALLOWED ?
	SKP CLA			//IF MORE ALLOWED CLEAR AC
	JMP	SCSTOR		//NO, SET TIMOUT ERROR
	TAD	SCTARS		//GET PRESUPP. RANGE
	CIA
	TAD	SCRESS		//COMPARE TO MEASURED RANGE
	CLL RAL			//THROW OUT SIGN
	SZA CLA			//IDENTICAL ?
	AC0004			//ADD IN RANGE ERROR = ERROR 4
	TAD	SCERR
	DCA	SCERR
	TAD	SCRESL		//TEST LOW ORDER RESULT
	IAC			//FOR OVERFLOW = 7777
	SNA CLA
	TAD	(10		//OVERFLOW ERROR CODE = 8
	TAD	SCERR		// + OTHER ERRORS
	DCA	SCERR
	CLL			//CLEAR LINK
	TAD	SCTARL
	CIA			//- LOW TARGET
	TAD	SCRESL
	CLA CML RAL		//1 IF TARL GT RESL
	TAD	SCTARH
	CIA
	TAD	SCRESH
	CLA			//LINK = 0 IF TARGET GT RESULT
	TAD	SCRESS
	TAD	SCTARS		//SIGNS EQUAL ?
	SPA CLA			//IF BOTH NEGATIVE, CML LINK
	JMP	SCSPEC		//NO, TAKE SIGN OF TARGET
	RAR			//SIGNS EQUAL, 4000 IF TAR .LE. RES
SCSES,	TAD	SCDIR		//+DIRECTION
	TAD	SCERR		//LOAD ERROR STATUS (OTHER BITS)
	SNA CLA			//IF WRONG DIRECTION OR ERROR
	JMP	SCLOOP		//NOT DIFFERENT, SEARCH ON
	TAD	SCERR		//GET ERROR STATUS
	DCA I	SCARG		//BACK TO COMMAND
	AC0001			//BUMP OVER SAMPLE COUNT
	TAD	SCARG
	DCA	AUTO10		//POINTER TO SIGN AND RANGE
	TAD	SCRESS		//NOW GET INSTRUMENT RANGE AND SIGN
	DCA I	AUTO10		//STORE IT
	TAD	SCRESH		//READ FIRST VALUE
	DCA I	AUTO10		//STORE IT
	TAD	SCRESL		//READ SECOND VALUE
	DCA I	AUTO10		//STORE IT
	JMP I	XEND		//RETURN AND SET HIGH PRIORITY

SCSPEC,	AC4000			//KILL RANGE BITS
	AND	SCTARS		//
	JMP	SCSES		//

SCCLOS,	JMS	MONITOR
	   EXIT SWPOUT

SCUPC,	0
SCUAC,	0
SCFLDS,	0
SCSLOT,	0
SCERR,	0
SCRESS,	0
SCRESH,	0
SCRESL,	0
SCTARS,	0
SCTARH,	0
SCTARL,	0
	PAGE
YTEMP,
YSTAT,	SCSTAT
YUPC,	SCUPC
YUAC,	SCUAC
YUFLDS,	SCFLDS
YSLOT,	SCSLOT
YGO,	SC
YRESS,	SCRESS
YRESH,	SCRESH
YRESL,	SCRESL
YERR,	SCERR
INSTAT,	0

SCINIT,	DCA	INSTAT
	TAD	INSTAT
	TAD	(UASEM-1	/FIND FREE UASEM ENTRY
	DCA	ZTEM1
SCUALP,	ISZ	ZTEM1
	TAD I	ZTEM1		/SEARCH
	SNA			/IS IT FREE ?
	JMP	SCUAFR		/YES
	CIA
	TAD	SCNAME		/IS IT MY NAME ?
	SZA CLA
	JMP	SCUALP		/NO, SEARCH
SCUAFR,	TAD	SCNAME
	DCA I	ZTEM1		/STORE NAME
	CDTOIF
	TAD	INSTAT
	DCA I	YSTAT
	AC0003
	TAD	INSTAT		/ADDRESS OF UPC
	DCA I	YUPC
	AC0002
	TAD I	YUPC
	DCA I	YUAC		/ADDRESS OF UAC
	AC0004
	TAD	INSTAT
	DCA I	YUFLDS		/ADDRESS OF UFLDS
	TAD	(USLOT
	TAD	INSTAT
	DCA I	YSLOT		/ADDRESS OF USLOT
	TAD	(SZL CLA
	DCA I	YGO		/ZAP INIT CALL
	CLL
	CDF 10
	JMP I	YGO
SCNAME,	"S^100+"C&3777
SCEND,	CDF 10			/BACK TO EMULATOR FIELD
	TAD I	INSTAT
	AND	(-LONG-1	/CLEAR LONG BIT
	DCA I	INSTAT		/TO REGAIN PRIORITY
	JMS	MONITOR
	   SIGNAL
	   BSSLOT		/AND TELL BS
	JMS	MONITOR
	   RETURN RELEASE

SCINT,	CLA IAC			///INTERRUPT ROUTINE
	SCSE			///ERROR ?
	CLA			///NO
	DCA I	YERR		///YES, SET FLAG
	SCCF			///CLEAR FLAGS
	SCRH			///READ HIGH-ORDER
	DCA	YTEMP		///TEMP
	TAD	YTEMP
	AND	(777		///OVERRANGE AND 2 DIGITS
	DCA I	YRESH
	TAD	YTEMP
	AND	(7000
	CLL RTL
	RAL			///RANGE IN BITS 10-11, SIGN IN LINK
	SNL			///NEGATIVE ?
	TAD	(4000		///YES
	DCA I	YRESS
	SCRL			///READ LOW-ORDER
	DCA I	YRESL
	TAD	(SCHP
	CIF 0
	JMS I	ZSOFINT		///SIGNAL EVENT TO TASK LEVEL
	   0
	PAGE
	$-$-$