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

/D2.TK 22-SEP-80

/THIS TASK CAN BE CALLED BY A GIANT IOT (22).
/IT HANDLES THE SETTING AND READING OF THE
/SECOND DIGITAL IN-OUT INTERFACE - DR8-EA
/
/CALLING SEQUENCE:
/
/		TAD (22
/		6770
/		JMP .+4
/		COMMAND/ERROR
/		MASK
/		DATA
/		........
/
/COMMAND:	0000	READ DIGITAL INPUT
/		0001	SET DIGITAL OUTPUT
/
/ERROR CODE:	0000	OK
/		0001	NOT IMPLEMENTED
/
/VALUE RETURNED TO DATA:
/
/ INPUT:	INPUT REG .AND. MASK
/ OUTPUT:	(MASK.AND.DATA).OR.(.NOT.MASK.AND.(OLD OUT REG))
/		SET/CLEAR OUT REG. WITH (MASK.AND.DATA)

		DBDI=D2+6000	/CLEAR INTENA
		DBEI=D2+6001	/SET INTENA
		DBSK=D2+6002	/SKIP ON INPUT
		DBCI=D2+6003	/CLEAR INPUT BITS
		DBRI=D2+6004	/READ INPUT BITS
		DBCO=D2+6005	/CLEAR OUTPUT BITS
		DBSO=D2+6006	/SET OUTPUT BITS
		DBRO=D2+6007	/READ OUTPUT BITS

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

	*200

D2NAME,	"D^100+"2&3777	/TASK NAME IS "D2"
	200		/ONE PAGE IS SUFFICIENT
D2STAT,	0
D2IO,	DCA	D2STAT
	SZL			/CLOSE ?
	JMP	D2CLOS		/YES
	TAD	D2STAT
	TAD	(UASEM-1	/FIND FREE UASEM ENTRY
	DCA	ZTEM1
D2UALP,	ISZ	ZTEM1
	TAD I	ZTEM1		/SEARCH
	SNA			/IS IT FREE ?
	JMP	D2UAFR		/YES
	CIA
	TAD	D2NAME		/IS IT MY NAME ?
	SZA CLA
	JMP	D2UALP		/NO, SEARCH
D2UAFR,	TAD	D2NAME
	DCA I	ZTEM1		/STORE NAME
	AC0003
	TAD	D2STAT		/ADDRESS OF UPC
	DCA	D2UPC
	AC0002
	TAD	D2UPC
	DCA	D2TEM		/ADDRESS OF UAC
	DCA I	D2TEM		/CLEAR AC OF 20 CODE
	TAD I	D2UPC		/GET UPC
	IAC			/SET ADDRESS OF 'COMMAND'
	DCA	D2UPC
	AC0001
	TAD	D2UPC
	DCA	D2ARG		/SET POINTER TOO ARG1
	AC0004
	TAD	D2STAT
	JMS	DEFER		/GET UFLDS
	AND	C70		/PICK OUT INSTRUCTION FIELD
	TAD I	D2STAT
	TAD	(-EMULATE+INCORE/SET INCORE REQUEST TO INSTR.FLD
	DCA I	D2STAT
	JMS	MONITOR		/FORCE BS IN INCORE HANDLING
	   SIGNAL
	   BSSLOT
	TAD	D2STAT
	TAD	(USLOT
	JMS	DEFER
	DCA	D2TEM
	JMS	MONITOR		/WAIT ON BS READY
	   WAIT
D2TEM,	   0
	TAD	C6201
	DCA	CDFSUB+1
	JMS	CDFSUB
	TAD I	D2ARG		//GET ARG1
	DCA	D2MASK		//ALWAYS MASK
	ISZ	D2ARG		//ADVANCE TO DATA
	TAD I	D2UPC		//GET COMMAND
	SZA CLA			//OUTPUT ?
	JMP	D2OUT		//YES
	DBRI			//READ INPUT REG
	AND	D2MASK		//CONSIDER ONLY MASKED
	DCA	D2RES		//RESULT
	TAD	D2RES
	DBCI			//CLEAR ONLY RESULT BITS
D2REL,	CLA
	TAD	D2RES		//SEND RESULT
	DCA I	D2ARG
	CDF 10
	JMS	MONITOR
	   RETURN RELEASE

D2OUT,	DCA I	D2UPC		//CLEAR FUNCTION NOW (NO ERRORS)
	TAD I	D2ARG		//GET DATA
	CMA			//BITS TO CLEAR
	AND	D2MASK		//ONLY THOSE IN MASK
	DBCO			//CLEAR THOSE
	JMS	BOUNCE		//WAIT FOR RELAYS
	DBRO			//READ OUTPUT REGISTER FIRST
	MQL			//KEEP A WHILE
	TAD I	D2ARG		//GET DATA
	AND	D2MASK		//BITS FOR SET
	MQA			//OR IN OLD BITS
	DBSO			//I.E. SET NEW BITS, LEAVE OLD ONES
	JMS	BOUNCE		//WAIT AGAIN
	DBRO			//READ FINAL RESULT
	DCA	D2RES
	JMP	D2REL		//END
BOUNCE,	0			//WAIT FOR RELAY BOUNCE
/	AC4000			//USES BIT 00 OF INPUT AS SIGNAL
/	DBCI			//CLEAR BIT 00 OF INPUT
/	DCA	CDFSUB		//CLEAR TIMOUT
/D2L,	ISZ	CDFSUB		//INTERFACE BAD ?
/	SKP CLA
/	JMP	D2ERR		//YES, OLD PDP8
	JMS	MONITOR
	   PRECEDE		//WAIT A WHILE
/	DBRI			//READY ?
/	SMA CLA
/	JMP	D2L		//NOT YET
/	AC4000			/CLEAR AGAIN
/	DBCI
	CLA
	JMP I	BOUNCE

D2ERR,	AC0001
	DCA I	D2UPC		//SET ERROR CODE 1
	JMP	D2REL		//GO BACK WITH RUBBISH

CDFSUB,	0
	HLT			//CDF TO BACKGROUND FIELD
	JMP I	CDFSUB

D2CLOS,	JMS	MONITOR
	   EXIT SWPOUT

D2UPC,	0
D2ARG,	0
D2RES,	0
D2MASK,	0

	PAGE
	$-$-$