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

/DA.TK 24-SEP-80

/THIS TASK CAN BE CALLED BY A GIANT IOT (23).
/IT HANDLES THE SETTING OF 1 OF THREE DACS
/
/CALLING SEQUENCE:
/
/		TAD (23
/		6770
/		JMP .+4
/		COMMAND/ERROR
/		UNIT
/		DATA
/		........
/
/COMMAND:	0000	SET DIGITAL VALUE TO CONVERT
/
/ERROR CODE:	0000	OK
/		0001	BAD INTERFACE
/		0002	BAD UNIT #
/
/DATA:
/
/OUTPUT:	DIGITAL VALUE TO CONVERT

		DAL1=DAC+6001	/LOAD DAC1 WITH AC3-AC11
		DAL2=DAC+6002	/LOAD DAC2, NO AC CLEAR
		DAL3=DAC+6003	/LOAD DAC3, DAC3 IS BIPOLAR
		DASK=DAC+6004	/SKIP ON ANY DAC FLAG
		DARS=DAC+6005	/READ STATUS REGISTER
		DALS=DAC+6006	/LOAD STATUS REGISTER
		DACL=DAC+6007	/CLEAR ALL

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

	*200

DANAME,	"D^100+"A&3777	/TASK NAME IS "DA"
	200		/ONE PAGE IS SUFFICIENT
DASTAT,	0
DAIO,	DCA	DASTAT
	SZL			/CLOSE ?
	JMP	DACLOS		/YES
	TAD	DASTAT
	TAD	(UASEM-1	/FIND FREE UASEM ENTRY
	DCA	ZTEM1
DAUALP,	ISZ	ZTEM1
	TAD I	ZTEM1		/SEARCH
	SNA			/IS IT FREE ?
	JMP	DAUAFR		/YES
	CIA
	TAD	DANAME		/IS IT MY NAME ?
	SZA CLA
	JMP	DAUALP		/NO, SEARCH
DAUAFR,	TAD	DANAME
	DCA I	ZTEM1		/STORE NAME
	AC0003
	TAD	DASTAT		/ADDRESS OF UPC
	DCA	DAUPC
	AC0002
	TAD	DAUPC
	DCA	DATEM		/ADDRESS OF UAC
	DCA I	DATEM		/CLEAR AC OF 23 CODE
	TAD I	DAUPC		/GET UPC
	IAC			/SET ADDRESS OF 'COMMAND'
	DCA	DAUPC
	AC0001
	TAD	DAUPC
	DCA	DAARG		/SET POINTER TOO ARG1
	AC0004
	TAD	DASTAT
	JMS	DEFER		/GET UFLDS
	AND	C70		/PICK OUT INSTRUCTION FIELD
	TAD I	DASTAT
	TAD	(-EMULATE+INCORE/SET INCORE REQUEST TO INSTR.FLD
	DCA I	DASTAT
	JMS	MONITOR		/FORCE BS IN INCORE HANDLING
	   SIGNAL
	   BSSLOT
	TAD	DASTAT
	TAD	(USLOT
	JMS	DEFER
	DCA	DATEM
	JMS	MONITOR		/WAIT ON BS READY
	   WAIT
DATEM,	   0
	TAD	C6201
	DCA	CDFSUB+1
	JMS	CDFSUB
	TAD I	DAARG		//GET ARG1
	DCA	DAUNIT		//ALWAYS UNIT
	ISZ	DAARG		//ADVANCE TO DATA

DAOUT,	DCA I	DAUPC		//CLEAR FUNCTION NOW (NO ERRORS)
	TAD I	DAARG		//GET DATA
	DCA	DARES
	TAD	(7700		//VALUE TO CLEAR ALL FLAGS
	DALS			//AND ENABLE INTERNAL SKIP
	CLA
	TAD	DAUNIT
	SPA SNA
	JMP	DAERR2		//BAD UNIT
	TAD	(-4
	SMA CLA
	JMP	DAERR2		//BAD UNIT (MUST BE 1-3)
	TAD	DAUNIT
	TAD	(DAL1-1		//MAKE INSTRUCTION
	DCA	DAEXEC
	TAD	DARES		//GET VALUE TO LOAD
DAEXEC,	HLT			//GETS LOAD INTSTRUCTION
	CLA
	DCA	CDFSUB		//CLEAR TIMOUT
DAL,	ISZ	CDFSUB		//INTERFACE BAD ?
	SKP CLA
	JMP	DAERR1		//YES, OLD PDP8
	JMS	MONITOR
	   PRECEDE		//WAIT A WHILE
	DASK			//READY ?
	JMP	DAL		//NOT YET
	DARS			//GET STATUS
	DALS			//LOAD STATUS
DAREL,	CLA			//THIS CLEARS THE FLAG
	CDF 10
	JMS	MONITOR
	   RETURN RELEASE

DAERR2,	AC0001
DAERR1,	IAC
	DCA I	DAUPC		//SET ERROR CODE 1 OR 2
	JMP	DAREL		//GO BACK WITH RUBBISH
CDFSUB,	0
	HLT			//CDF TO BACKGROUND FIELD
	JMP I	CDFSUB

DACLOS,	JMS	MONITOR
	   EXIT SWPOUT


DAUPC,	0
DAARG,	0
DARES,	0
DAUNIT,	0

	PAGE
	$-$-$