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

/RE.TK 10-JUN-80
/**UASEM VERSION**
/IN VIEW OF THE DEVELOPMENT OF THE NETWORK SOFTWARE
/A NEW PAPERTAPE READER EMULATOR IS CREATED THAT READS THE TAPE
/THROUGH THE NORMAL BLOCKDRIVER, PR. THIS MAKES IT POSSIBLE
/TO READ TAPES THROUGH THE NETWORK LINK.

LENGTH=200	/BUFFER LENGTH, E.G. 200, 400, 600, 1000

/SETUP EMTAB:
	*0
	CDF 10		/EMTAB IS IN FIELD 1
	EMTAB+01	/DEVICE CODE 01
	"R^100+"E&3777	/NAME OF THIS EMULATOR TASK

	*200
	"R^100+"E&3777	/NAME IS RE
	200+LENGTH	/ONE PAGE CODE AND THE BUFFER
REXDTV,	REDTV		/ADDRESS OF DATA TRANSFER VECTOR
XBUF,	BUFFER		/ADDRESS OF BUFFER
XINIT,	INIT		/ADDRESS OF INITIALIZATION CODE (IN BUFFER)
RESAVE,	0
RE,	JMP I XINIT	/THIS INSTRUCTION IS REPLACED
	/SZL CLA	/BY SZL CLA
	 JMP RECLR	/THE USER IS OUT
	TAD I REUINST	/GET THE INSTRUCTION
	AND C7		/GET IOP'S
	TAD (JMP JMP0
	DCA .+1
	 HLT		/BRANCH TO EMULATION ROUTINE

JMP0,	JMP RERET	/0 NOP
	JMP RERSF	/1 A VERY DELICATE INSTRUCTION
	JMP RERRB	/2 READ A CHARACHTER
	JMP RERET	/3 NOP
	JMP RERFC	/4 MAKE IT A NOP
	JMP RERET	/5 NOP
	JMP RERRB	/6 READ A CHARACTER
/	JMP RERET	/7 NOP

RERET,	JMS MONITOR	/RETURN TO CENTRAL EMULATOR
	   RETURN

RERRB,	JMS REIN	/GET A CHARACTER FROM THE TAPE
	MQL
	CDF 10
	TAD I REUAC	/GET USERS AC
	MQA		/OR-IN THE CHARACTER
	DCA I REUAC	/
	JMP RERET	/AND RETURN

RERSF,	TAD I REUPC	/REMEMBER WHERE THE RSF WAS
	DCA RESAVE
	TAD XSKP		/MAKE IT A SKP
XSKP,	SKP
RERFC,	TAD C7000	/(NOP
	JMP RERET	/PATCH THIS INSTRUCTION WITH A NOP

REEND,	TAD RESAVE	/ADDRESS OF RSF INSTRUCTION
	CDF 10
	DCA I REUPC	/BRUTELY DERAIL HIM TO HIS WAITLOOP
	TAD XSKP	/LET EMULATOR THINK THAT THE SKP
	DCA I REUINST	/WAS TRAPPED (TO FAKE EMCHCK).
	JMP RERFC	/GO PATCH THE SKP (RFC) WITH NOP
REIN,	0		/ROUTINE TO READ A CHARACTER FROM TAPE
	CDTOIF
	JMP I REOUT	/CO-ROUTINES!
REOUT,	RE2		/ADJUSTED BY INIT
	AND (377
	JMP I REIN

RE1,	JMS RESUB
	DCA RETEMP
	JMS RESUB
	CLL RTR
	RTR
	TAD RETEMP
	RTR
	RTR
	JMS REOUT	/THAT'S THE THIRD CHARACTER
	ISZ REWC
	 JMP RE1
RE2,	JMS REFLIP	/MAKE BG INACTIVE
RECALL,	TAD REXDTV
	JMS MONITOR
	   CALL
	   "P^100+"R&3777
	 JMP REWAIT	/PR SEEMS BUSY !
	DCA .+3
	JMS MONITOR
	   WAIT
REWC,	   0		/A SHARED LOCATION
	CDTOIF
	SZA CLA
	 JMP REEOM	/ASSUME IT'S END OF TAPE
RECONT,	JMS REFLIP	/MAKE BG ACTIVE AGAIN
	TAD (-LENGTH%2!4000
	DCA REWC
	TAD XBUF
	DCA RECA
	JMP RE1

REEOM,	TAD (JMP REEND	/DON'T READ ANOTHER BUFFER AFTER THIS ONE
	DCA RECALL-1
	JMP RECONT	/NOW PASS ALL OF THIS BUFFER TO THE USER
RESUB,	0
	TAD I RECA
	JMS REOUT
	TAD I RECA
	AND C7400
	ISZ RECA
	NOP
	JMP I RESUB

REWAIT,	JMS MONITOR
	   STALL
	   DGNTICK
	CLA CLL
	JMP RECALL

REFLIP,	0		/CHANGE BG STATUS AND KICK BS
	CDF 10
	TAD I RESTAT
	CLL RAL
	CML RAL
	CML RTR
	AND (-LONG-1	/GET PRIORITY
	DCA I RESTAT
	JMS MONITOR
	   SIGNAL
	   BSSLOT
	CDTOIF
	JMP I REFLIP

RECLR,	DCA REXDTV	/MAKE A FINAL CLOSE CALL
	CDTOIF
	TAD (JMP REXIT
	DCA REWC+1
REFAKE,	JMP RECALL	/CALL PR ONCE AGAIN
REXIT,	JMS MONITOR
	   EXIT SWPOUT
REDTV,	ZBLOCK 2
RESTAT,	0
REUPC,	0
REUINST,0
REUAC,	0
RECA,	0
RETEMP,	0

PAGE
BUFFER,	REDTV-1		/ADDRESS OF VARIABLE TABLE
YBUF,	BUFFER
XRE2,	RE2
XREOUT,	REOUT
XRE,	RE
XREPAT,	0

INIT,	DCA ZTEM1
	TAD ZTEM1
	TAD (UASEM-1	/SETUP POINTER TO UASEM
	DCA XREPAT	/IN OUR BG TABLE
REASLP,	ISZ XREPAT
	TAD I XREPAT	/LOOK AT ENTRY
	SNA		/IS IT FREE ?
	 JMP REASFR	/YES, GO PUT IN MY NAME
	CIA
	TAD RENAME	/WAS IT ALREADY USED BY ME ?
	SZA CLA
	 JMP REASLP	/NO, SOME OTHER TASK, LOOK FOR MORE
REASFR,	TAD RENAME
	DCA I XREPAT	/OK, PUT MY NAME IN UASEM TABLE
	CDTOIF
	TAD BUFFER
	DCA AUTO10
	TAD (LENGTH%2	/READ ONE BUFFER
	RIF		/THIS FIELD
	DCA I AUTO10	/FUNCTION WORD OF DTV
	TAD YBUF
	DCA I AUTO10	/ADDRESS OF BUFFER
	TAD ZTEM1
	DCA I AUTO10	/RESTAT
	TAD ZTEM1
	TAD (UPC
	DCA I AUTO10	/REUPC
	TAD ZTEM1
	TAD (UINST
	DCA I AUTO10	/REUINST
	TAD ZTEM1
	TAD (UAC
	DCA I AUTO10	/REUAC
	TAD XRE2
	DCA I XREOUT	/INITIALIZE COROUTINES
	TAD (SZL CLA
	DCA I XRE
	CDF 10
	CLL
	JMP I XRE
RENAME,	"R^100+"E&3777

	PAGE

	ZBLOCK LENGTH-200

	$$$