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

/KE.TK 12-JUN-80 
/**UASEM VERSION**
/THIS IS THE EMULATOR FOR THE CARDREADER BLOCKDRIVER
/WVDM OR THE		    - MARK SENSE -

/THIS TASK IS CALLED THROUGH THE FAKE-HANDLER MECHANISM.
/FOR DEVICE CDR:

/IT TAKES THE USERS PARAMETERS FROM HIS DATA-AREA AND
/PASSES THE REQUEST ON TO KR, THE CARDREADER BLOCKDRIVER
/OR			- MR -  - MARK SENSE -

IFDEF CR8E <
CNAME="K^100+"R&3777 	/CALL DIFFERENT DRIVERS >
IFDEF CM8E <
CNAME="M^100+"R&3777 	/FOR DIFFERENT HARDWARE >
/
	*200

KENAME,	"K^100+"E&3777	/NAME IS KE
	200		/ONE PAGE SHOULD BE SUFFICIENT
KELOCK,	LOCKS		/UNITS LOCK TABLE
KEBASE,	0

KE,	DCA KEBASE	/THIS IS OUR HOLY CUSTOMER
	TAD KEBASE
	TAD (UAC
	DCA KEUAC	/MAKE SURE KEUAC NON-ZERO
	SZL		/IS THIS THE END ?
	 JMP KEEXIT	/YES, RELEASE THIS TASK
/	TAD C7		/
/	AND I KEUAC	/UNIT NUMBER
	DCA ZTEM1	/UNIT 0 ONLY
	TAD KEUAC
	TAD (UDTV-UAC	/SAME LITERAL
	DCA KESLOT	/DTV POINTER
	TAD ZTEM1	/GET UNIT AGAIN
	TAD KELOCK	/INDEX IN LOCK TABLE
	CDTOIF
	JMS DEFER	//GET TABLE ENTRY
	SNA		//ANY LOCK ACTIVATED ?
	 JMP KEFREE	//NO, UNIT WAS FREE YET
	TAD KEBASE	//COMPARE LOCK WITH USER ID
	SZA CLA		//SAME USER ?
	 JMP KEERR	//FATAL!, BOTH WANT ACCESS
KEFREE,	TAD KEBASE	//OK
	CIA		//
	DCA I X		//PUT IN MY REQUEST
	CDF 10		/BACK TO EMULATOR FIELD
	TAD I KESLOT	/GET HIS REQUEST FUNCTION WORD
	AND C7770	/ZERO THE UNIT NUMBER FIELD
	TAD ZTEM1	/ADD THE TRUE UNIT NUMBER
	DCA I KESLOT	/THIS IS THE COMPLETED FUNCTION WORD
	TAD I KESLOT	/
	AND C70		/GET VIRTUAL FIELD NUMBER
	TAD I KEBASE
	TAD (-EMULATE+INCORE
	DCA I KEBASE	/MAKE INCORE REQUEST
	JMS MONITOR
	   SIGNAL
	   BSSLOT
	TAD KEBASE
	TAD (USLOT	/BS SLOT
	JMS DEFER
	DCA .+3
	JMS MONITOR
	   WAIT
	   0
	MQL		/SAVE REAL FIELD
	TAD I KESLOT
	AND (7707	/STRIP VIRTUAL FIELD #
	MQA		/INSERT REAL FIELD #
	DCA I KESLOT
	TAD KESLOT	/POINTER TO DTV !
	JMS MONITOR
	   CALL
RNAME,	   CNAME	/SOME CARD READER
	 JMP .-3	/HANG ON
	DCA KESLOT	/THE SLOT WHERE WE WILL GET COMPLETION
	JMS MONITOR
	   WAIT
KESLOT,	   0
	DCA ZTEM1
	TAD ZTEM1
	TAD (-4
	SNA CLA		/FATAL ERROR ?
	 AC4000		/YES, SET BIT 0
	TAD ZTEM1
	CDF 10		/BE SURE !
	DCA I KEUAC	/PUT THE COMPLETION CODE IN HIS ACCUMULATOR
	TAD KEBASE
	TAD (UASEM-1	/SETUP POINTER TO UASEM
	DCA KESLOT	/IN OUR BG TABLE
KEASLP,	ISZ KESLOT
	TAD I KESLOT	/LOOK AT ENTRY
	SNA		/IS IT FREE ?
	 JMP KEASFR	/YES, GO PUT IN MY NAME
	CIA
	TAD KENAME	/WAS IT ALREADY USED BY ME ?
	SZA CLA
	 JMP KEASLP	/NO, SOME OTHER TASK, LOOK FOR MORE
KEASFR,	TAD KENAME
	DCA I KESLOT	/OK, PUT MY NAME IN UASEM TABLE
	TAD ZTEM1	/GET COMPLETION CODE
	SZA CLA		/END-OF-FILE ?
	 JMP KEEXIT	/YES, CLEAR UP
	SKP
KEERR,	AC0002		/RETURN SPECIAL BUSY CODE
KERTRN,	JMS MONITOR
	   EXIT
KEEXIT,	TAD KELOCK	/SET POINTER TO
	DCA ZTEM1	/LOCK TABLE
	ACM1		/
	DCA ZTEM2	/SET UNITS COUNTER
	CDTOIF		//LOCKS IN THIS TASK
KECLLP,	TAD I ZTEM1	//GET A LOCK
	SNA		//
	 JMP KECLNX	//IF ZERO GO ON
	TAD KEBASE	//IS IT MY LOCK ?
	SNA		//
	 DCA I ZTEM1	//YES, CLEAR IT
	SZA CLA		//WAS IT ANOTHER USER ?
	 DCA KEUAC	//YES, SIGNAL NOT ALL CLEARED (WAS NON-ZERO)
KECLNX,	ISZ ZTEM1	//NEXT LOCK LOC
	ISZ ZTEM2	//MORE SLOTS ?
	 JMP KECLLP	//YES
	CDF 10		/
	TAD KEUAC	/ALL LOCKS ZEROED ?
	SNA CLA		/
	 JMP KERTRN	/NO, WAIT FOR OTHER RELEASE
	TAD RNAME	/GET NAME OF HANDLER USED
	DCA RRNAME	/STORE FOR CLOSE
	JMS MONITOR	/CLOSE CALL TO DRIVER
	   CALL
RRNAME,	   0
	 NOP		/QUITE UNLIKELY
	CLA		/MOST PROBABLY HE RETURNS -1
	JMS MONITOR	/YES, FORGET EVERYTHING (SWPOUT OR RELEASE)
	   EXIT SWPOUT

KEUAC,	1234		/ALWAYS NON-ZERO
LOCKS,	ZBLOCK 1
	PAGE
	$-$-$