File: D1.TK of Disk: Disks/MyPDP/m8-blue-rka1-rkb1
(Source file text) 

/D1.TK 22-SEP-80

/THIS TASK CAN BE CALLED BY A GIANT IOT (21).
/IT HANDLES THE SETTING AND READING OF THE
/FIRST DIGITAL IN-OUT INTERFACE - DR8-EA
/
/CALLING SEQUENCE:
/
/		TAD (21
/		6770
/		JMP .+4
/		COMMAND/ERROR
/		MASK
/		DATA
/		........
/
/COMMAND:	0000	READ DIGITAL INPUT
/		0001	SET DIGITAL OUTPUT
/
/ERROR CODE:	0000	OK
/		0001	INTERFACE BAD (ONLY OUTPUT FUNCTION)
/
/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=D1+6000	/CLEAR INTENA
		DBEI=D1+6001	/SET INTENA
		DBSK=D1+6002	/SKIP ON INPUT
		DBCI=D1+6003	/CLEAR INPUT BITS
		DBRI=D1+6004	/READ INPUT BITS
		DBCO=D1+6005	/CLEAR OUTPUT BITS
		DBSO=D1+6006	/SET OUTPUT BITS
		DBRO=D1+6007	/READ OUTPUT BITS

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

	*200

D1NAME,	"D^100+"1&3777	/TASK NAME IS "D1"
	200		/ONE PAGE IS SUFFICIENT
D1STAT,	0
D1IO,	DCA	D1STAT
	SZL			/CLOSE ?
	JMP	D1CLOS		/YES
	TAD	D1STAT
	TAD	(UASEM-1	/FIND FREE UASEM ENTRY
	DCA	ZTEM1
D1UALP,	ISZ	ZTEM1
	TAD I	ZTEM1		/SEARCH
	SNA			/IS IT FREE ?
	JMP	D1UAFR		/YES
	CIA
	TAD	D1NAME		/IS IT MY NAME ?
	SZA CLA
	JMP	D1UALP		/NO, SEARCH
D1UAFR,	TAD	D1NAME
	DCA I	ZTEM1		/STORE NAME
	AC0003
	TAD	D1STAT		/ADDRESS OF UPC
	DCA	D1UPC
	AC0002
	TAD	D1UPC
	DCA	D1TEM		/ADDRESS OF UAC
	DCA I	D1TEM		/CLEAR AC OF 20 CODE
	TAD I	D1UPC		/GET UPC
	IAC			/SET ADDRESS OF 'COMMAND'
	DCA	D1UPC
	AC0001
	TAD	D1UPC
	DCA	D1ARG		/SET POINTER TOO ARG1
	AC0004
	TAD	D1STAT
	JMS	DEFER		/GET UFLDS
	AND	C70		/PICK OUT INSTRUCTION FIELD
	TAD I	D1STAT
	TAD	(-EMULATE+INCORE/SET INCORE REQUEST TO INSTR.FLD
	DCA I	D1STAT
	JMS	MONITOR		/FORCE BS IN INCORE HANDLING
	   SIGNAL
	   BSSLOT
	TAD	D1STAT
	TAD	(USLOT
	JMS	DEFER
	DCA	D1TEM
	JMS	MONITOR		/WAIT ON BS READY
	   WAIT
D1TEM,	   0
	TAD	C6201
	DCA	CDFSUB+1
	JMS	CDFSUB
	TAD I	D1ARG		//GET ARG1
	DCA	D1MASK		//ALWAYS MASK
	ISZ	D1ARG		//ADVANCE TO DATA
	TAD I	D1UPC		//GET COMMAND
	SZA CLA			//OUTPUT ?
	JMP	D1OUT		//YES
	DBRI			//READ INPUT REG
	AND	D1MASK		//CONSIDER ONLY MASKED
	DCA	D1RES		//RESULT
	TAD	D1RES
	DBCI			//CLEAR ONLY RESULT BITS
D1REL,	CLA
	TAD	D1RES		//SEND RESULT
	DCA I	D1ARG
	CDF 10
	JMS	MONITOR
	   RETURN RELEASE

D1OUT,	DCA I	D1UPC		//CLEAR FUNCTION NOW (NO ERRORS)
	TAD I	D1ARG		//GET DATA
	CMA			//BITS TO CLEAR
	AND	D1MASK		//ONLY THOSE IN MASK
	DBCO			//CLEAR THOSE
	JMS	BOUNCE		//WAIT FOR RELAYS
	DBRO			//READ OUTPUT REGISTER FIRST
	MQL			//KEEP A WHILE
	TAD I	D1ARG		//GET DATA
	AND	D1MASK		//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	D1RES
	JMP	D1REL		//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
D1L,	ISZ	CDFSUB		//INTERFACE BAD ?
	SKP CLA
	JMP	D1ERR		//YES, OLD PDP8
	JMS	MONITOR
	   PRECEDE		//WAIT A WHILE
	DBRI			//READY ?
	SMA CLA
	JMP	D1L		//NOT YET
	AC4000			/CLEAR AGAIN
	DBCI
	CLA
	JMP I	BOUNCE

D1ERR,	AC0001
	DCA I	D1UPC		//SET ERROR CODE 1
	JMP	D1REL		//GO BACK WITH RUBBISH

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

D1CLOS,	JMS	MONITOR
	   EXIT SWPOUT


D1UPC,	0
D1ARG,	0
D1RES,	0
D1MASK,	0

	PAGE
	$-$-$