File: DV.TK of Tape: Sources/Multi8/multi8-1
(Source file text) 

/DV.TK 22-SEP-80

/THIS TASK CAN BE CALLED BY A GIANT IOT (20).
/IT HANDLES THE SETTING AND READING OF THE
/HP 5326B TIMER-COUNTER-DVM
/
/CALLING SEQUENCE:
/
/		TAD (20
/		6770
/		JMP .+4
/		COMMAND
/		ARG1
/		ARG2
/		........
/
/COMMAND:	0000	START MEASUREMENT WITH FUNCTION IN ARG1 IF ARG1.NE.0
/		0001	WAIT TILL READY AND READ RESULT INTO ARG1,ARG2
/		0002	READ FUNCTION INTO ARG1
/		0003	MAINTENANCE READ -123456
/
/VALUE RETURNED TO COMMAND:
/
/		0000	MEASUREMENT OK
/		0001	ERROR
/
		TCEI=DVM+6010	/INTENA ON AC11
		TCSD=DVM+6011	/SKIP ON DONE FLAG
		TCSE=DVM+6012	/SKIP ON ERROR FLAG
		TCCL=DVM+6013	/CLEAR FLAGS AND MODE
		TCME=DVM+6014	/SET TC MODE AND START
		TCRB=DVM+6015	/READ OUTPUT (TWICE)
		TCSF=DVM+6016	/SET FUNCTION
		TCRF=DVM+6017	/READ FUNCTION

	*0
	CDF 10		/GIGATB IS IN FIELD 1
	GIGATB+20
	"D^100+"V&3777

	*200

DVNAME,	"D^100+"V&3777	/TASK NAME IS "DVM"
	201		/ONE PAGE IS SUFFICIENT, CONNECTED
CDVM,	DVMHP
	DVMINT		/EVENT DVMHP GOES TO DVMINT
DVSTAT,	0
DV,	DCA	DVSTAT
	SZL			/CLOSE ?
	JMP	DVCLOS		/YES
	TAD	DVSTAT
	TAD	(UASEM-1	/FIND FREE UASEM ENTRY
	DCA	ZTEM1
DVUALP,	ISZ	ZTEM1
	TAD I	ZTEM1		/SEARCH
	SNA			/IS IT FREE ?
	JMP	DVUAFR		/YES
	CIA
	TAD	DVNAME		/IS IT MY NAME ?
	SZA CLA
	JMP	DVUALP		/NO, SEARCH
DVUAFR,	TAD	DVNAME
	DCA I	ZTEM1		/STORE NAME
	AC0003
	TAD	DVSTAT		/ADDRESS OF UPC
	DCA	DVUPC
	AC0002
	TAD	DVUPC
	DCA	DVTEM		/ADDRESS OF UAC
	DCA I	DVTEM		/CLEAR AC OF 20 CODE
	TAD I	DVUPC		/GET UPC
	IAC			/SET ADDRESS OF 'COMMAND'
	DCA	DVUPC
	AC0001
	TAD	DVUPC
	DCA	DVARG		/SET POINTER TOO ARG1
	AC0004
	TAD	DVSTAT
	JMS	DEFER		/GET UFLDS
	AND	C70		/PICK OUT INSTRUCTION FIELD
	TAD I	DVSTAT
	TAD	(-EMULATE+INCORE/SET INCORE REQUEST TO INSTR.FLD
	DCA I	DVSTAT
	JMS	MONITOR		/FORCE BS IN INCORE HANDLING
	   SIGNAL
	   BSSLOT
	TAD	DVSTAT
	TAD	(USLOT
	JMS	DEFER
	DCA	DVTEM
	JMS	MONITOR		/WAIT ON BS READY
	   WAIT
DVTEM,	   0
	TAD	C6201
	DCA	CDFSUB+1
	JMS	CDFSUB
	TAD I	DVUPC		//GET COMMAND
	CLL RAR			//WAIT TOO LINK
	SZA			//SPECIALS ?
	JMP	DVSPEC		//YES
	RAR
	DCA	DVTEM		//SET WAIT FLAG
	DCA I	DVUPC		//CLEAR FUNCTION NOW (NO ERRORS)
	TAD I	DVARG		//GET ARG1
	SNA			//WAS IT NOP ?
	JMP	DVWAIT		//YES WAIT ONLY
	TCSF			//OK, SET FUNCTION
	AC0001
	TCEI			//ENABLE INTERRUPTS
	TCME			//START MEASUREMENT
DVWAIT,	TAD	DVTEM		//DO I WANT TO WAIT ?
	SMA CLA
	JMP	DVRET		//NO, JUST RETURN
	TAD	(-DGNTICK^10	//WAIT FOR MAX 8 SECS
	JMS	MONITOR
	   WAIT
	   DVMHP		//WAIT FOR DVM EVENT
	SZA CLA
	JMP	DVTMO		//TIMOUT
	TAD	DVMERR
	SZA CLA
	JMP	DVTMO		//OTHER ERROR
	JMS	CDFSUB		//GO TO USER FIELD
	TAD	DVRES1		//READ FIRST VALUE
	DCA I	DVARG
	ISZ	DVARG
	TAD	DVRES2		//READ SECOND VALUE
	DCA I	DVARG
DVREL,	CDF 10
	JMS	MONITOR
	   RETURN RELEASE

DVRET,	CDF 10
	JMS	MONITOR
	   RETURN

DVSPEC,	CLA
	TCRF			//READ FUNCTION
	DCA I	DVARG
	JMP	DVREL		//AN EASY ONE

DVTMO,	AC0001
	DCA I	DVUPC		//SET ERROR
	DCA	DVMERR		//CLEAR ERROR AGAIN
	JMP	DVREL		//AND RETURN
CDFSUB,	0
	HLT			//CDF TO BACKGROUND FIELD
	JMP I	CDFSUB

DVCLOS,	JMS	MONITOR
	   EXIT SWPOUT

DVUPC,	0
DVARG,	0
DVRES1,	0
DVRES2,	0
DVMERR,	0

DVMINT,	TCSE			///INTERRUPT ROUTINE
	SKP CLA			///ERROR ?
	ISZ	DVMERR		///YES, SET FLAG
	TCRB			///READ FIRST PART
	DCA	DVRES1
	TCRB			///READ SECOND PART
	DCA	DVRES2
	TCCL			///CLEAR ALL
	TCEI			///CLEAR INTENA
	TAD	CDVM
	CIF 0
	JMS I	ZSOFINT		///SIGNAL EVENT TO TASK LEVEL
	   0
	PAGE
	$-$-$