File: MDR.PA of Tape: Various/System-Tapes/s5
(Source file text) 

/B&H MARK SENSE READER HANDLER OS/8 V3
/W.VAN DER MARK - ACU - ZUERICH - SWITZERLAND
/MARCH 15, 1975

/DEFINITIONS OF MARK READER IOTS

MRDI=6540
MREI=6541
MRSS=6542
MRCI=6543
MRRI=6544
MRCO=6545
MRSO=6546
MRRO=6547
	*0	/DESCRIPTOR BLOCK
	-1
	DEVICE MRBH;DEVICE MDR;2003;4000;0;0

	*200

MDR,	0		/ENTRY POINT RELATIVE ZERO
MDR770,	7700		/"SMA CLA" CLEARS THE AC
MDRTMP,	0		/LESS THAN 400 - PROTECTS SKIP
	JMP MDRSET	/INITIALIZATION - BECOMES "RDF"
	TAD MDRCIF	/FORM "CIF CDF N" TO CALLING FIELDS
	DCA MDRXIT	/SAVE CALLING FIELDS
	TAD MDRCCF-1
	DCA MDRXIT-1	/RESTORE THE "ISZ MDR"
	TAD I MDR	/GET FUNCTION WORD
	AND MDR070	/GET BUFFER FIELD BITS
	TAD MDRCCF	/MAKE A "CDF N"
	DCA MDRTM2	/SAVE IT TEMPORARILY
	TAD I MDR	/GET FUNCTION WORD AGAIN
	ISZ MDR
	SPA		/IS IT A WRITE FUNCTION?
	JMP MDRERR	/YES - HARD ERROR
	AND MDR770	/GET COUNT BITS
	CMA
	DCA MDRWC	/SAVE WORD COUNT (DIVIDED BY 2)-1
	TAD I MDR	/GET BUFFER ADDRESS
	DCA MDRCA	/AND SAVE IT
	ISZ MDR		/THE BLOCK NUMBER IS IGNORED
MDRCCF,	CDF		/WE ARE IN FIELD 0
	DCA I MDRIN2	/RESET ^Z FLAG TO ZERO
	TAD MDRTM2
	DCA I MDRIN3	/SET THE BUFFER FIELD "CDF N"
	JMP MDR070	/IN CASE OF ZERO WORDS
MDRLP,	JMS I MDRIN4	/GET A CHARACTER
	DCA I MDRCA	/BUFFER FIELD IS RETURNED CORRECTLY
	JMS I MDRIN4	/GET NEXT CHARACTER
	DCA MDRTMP	/AND SAVE IT
	JMS I MDRIN4	/GET NEXT CHARACTER
	RTL
	RTL		/GET THE FIRST FOUR BITS OF IT
	DCA MDRTM2	/SAVE THE REST FOR LATER
	TAD MDRTM2
	AND MDR740	/ONLY 4 BITS
	TAD I MDRCA
	DCA I MDRCA	/ADD THOSE BITS TO 1ST CHARACTER
	ISZ MDRCA	/BUMP POINTER TO BUFFER
MDR740,	7400		/PROTECT THE ISZ AGAINST SKIPS
	TAD MDRTM2
	RTL
	RTL		/NOW GET LOW ORDER 4 BITS
	AND MDR7400	/AND ONLY 4 BITS
	TAD MDRTMP	/ADD IN THE 2ND CHARACTER
	DCA I MDRCA	/AND STORE THE WORD
	ISZ MDRCA	/BUMP POINTER AGAIN
MDR070,	70		/PROTECT THE ISZ
	ISZ MDRWC	/DONE?
	JMP MDRLP	/NO - LOOP
	ISZ MDR
	ISZ MDR		/IF ^Z THIS IS "CLL CLA IAC"
MDRXIT,	HLT		/RESTORE CALLING FIELDS
	JMP I MDR	/EXIT

MDRERR,	CLL CLA CML RAR	/HARD ERROR
	JMP MDRXIT-2

MDRCA,	0		/BUFFER POINTER
MDRWC,	0		/WORD COUNT DIVIDED BY 2
MDRTM2,	0		/SPLIT WORD TEMPORARY
MDRCIF,	CIF CDF 0	/TO FORM EXIT WORD

MDRIN2,	MDRJMP-MDRLOC	/CORRECTED AT INITIALIZATION TIME
MDRIN3,	MDRCDF-MDRLOC
MDRIN4,	MDRGCH-MDRLOC

MDRBUF=.		/CARD BUFFER

MDRSET,	RDF		/INITIALIZATION CODE
	TAD MDRCCF
	DCA MDRSE1	/SAVE CALLING FIELDS
	CDF		/WE ARE IN FIELD 0
	JMS .		/FIND OUT OUR LOCATION
MDRLOC,	TAD MDRSE2	/ADDRESS TO MODIFY
	TAD MDRLOC-1	/CORRECT IT
	DCA MDRSE3	/SAVE IT
	TAD I MDRSE3	/GET DATA TO MODIFY
	TAD MDRLOC-1	/CORRECT IT
	DCA I MDRSE3	/AND RESTORE IT
	ISZ MDRLOC	/NEXT ADDRESS
	ISZ MDRSE4	/MORE?
	JMP MDRLOC	/YES - LOOP
	TAD MDRSET
	DCA MDR+3	/SET THE "RDF"
MDRSE1,	HLT		/RESTORE CALLING FIELDS
	CLA CMA
	MRCO		/CLEAR ALL
	CLA IAC
	MRSO		/TURN ON MOTOR
	CLA CMA
	MRCI		/CLEAR INPUT
	CLA CLL
	JMP MDR+3	/AND BACK TO NORMAL

MDRSE3,	0		/MODIFY POINTER
MDRSE4,	-5		/FIVE LOCATIONS TO MODIFY

MDRSE2,	MDRIN2-MDRLOC	/LOCATIONS TO MODIFY
	MDRIN3-MDRLOC
	MDRIN4-MDRLOC
	MDRIN5-MDRLOC
	MDRABF-MDRLOC
*MDRBUF+120		/END OF THE BUFFER

MDRGCH,	0		/GET A CHARACTER ROUTINE
	CDF		/WE ARE IN FIELD 0
MDRJMP,	0		/THIS IS "JMP MDRCDF" AFTER A ^Z
	ISZ MDRCNT	/MORE CHARACTERS IN THE BUFFER?
	JMP MDRGET	/YES - GET ONE
MDRGE4,	ISZ MDRCT2	/GIVE A 215, 212 FOR EVERY CARD
	JMP MDRCLF	/215, 212 ROUTINE
	CLL CLA CMA RTL
	DCA MDRCT2	/RESET COUNT TO -3
	TAD MDRABF
	DCA MDRPT	/SET POINTER TO INTERNAL BUFFER
MDRGE0,	KSF		/KEYBOARD FLAG UP?
	JMP MDRGE7	/NO - TRY TO READ A CARD
	KRS		/READ STATIC FROM KEYBOARD
	AND MDR177	/IGNORE PARITY
	TAD MDRM03	/IS IT ^C?
	SNA
	JMP I MDR760	/YES - TO MONITOR VIA 07600
	TAD MDRM27	/IS IT ^Z?
	SZA CLA
	JMP MDRGE7	/NO - GET A CARD
	KCC		/KILL FLAG
MDRGEZ,	CLA CMA
	DCA MDRCNT	/RESET COUNTS TO SKIP
	CLA CMA
	DCA MDRCT2
	TAD MDRMOD
	DCA MDRJMP	/SET TO GIVE 0'S
	TAD MDROPR
	DCA I MDRIN5	/AND A SOFT ERROR
	TAD MDR32	/^Z
MDRCDF,	HLT		/TO BUFFER FIELD
	TAD MDR200	/ADD PARITY BIT
	JMP I MDRGCH	/EXIT

MDRGE7,	MRRI
	AND MDR400	/HOPPER FULL?
	SZA CLA
	JMP MDRGE0	/NO GO - TRY AGAIN
	CLA CMA
	MRCI		/CLEAR EOC AND STROBE
	MRSO		/CARD FEED
MDRGE1,	MRRI		/CARD DONE?
	SMA CLA
	JMP MDRGE2	/NO - TRY FOR DATA READY
	CLA CLL CML RAR
	MRCO		/INHIBIT CARD FEED
MDR760,	7600		/MONITOR ADRESS AND CLEAR
MDRGE3,	TAD I MDRPT	/GET LAST CHARACTER
	TAD MDRM40
	SZA CLA		/SPACE?
	JMP MDRGE5	/NO
	CLA CMA
	TAD MDRPT
	DCA MDRPT	/BACK UP POINTER ONE
	ISZ MDRCNT	/AND TAKE COUNT DOWN BY 1
	JMP MDRGE3	/TEST AGAIN OR...
	JMP MDRGE4	/IF COUNT IS ZERO THEN A BLANK CARD

MDRGE5,	TAD I MDRPT	/GET LAST NON-SPACE
	TAD MDRMBA	/IS IT "_" 0-8-5 CODE?
	SNA CLA
MDROPR,	CLL CLA IAC	/YES - 1 INTO AC
	TAD MDRCNT	/IS COUNT ALSO 1?
	SNA CLA
	JMP MDRGEZ	/YES - MUST BE END OF FILE
MDRGE6,	TAD MDRABF
	DCA MDRPT
MDRGET,	ISZ MDRPT
MDR200,	200
	TAD I MDRPT
	TAD MDRMSB	/CHECK FOR "SUB" CHAR = ERROR
	SNA CLA
	JMP MDRCER
	TAD I MDRPT
MDRMOD,	JMP MDRCDF

MDRCER,	CLA CLL CML RAR		/FATAL ERROR
	JMP I MDRIN5

MDRGE2,	MRSS		/DATA READY?
	JMP MDRGE1	/NO - TRY FOR END OF CARD
	CLA CMA
	TAD MDRCNT
	DCA MDRCNT	/COUNT THE CHARACTERS
	ISZ MDRPT
MDR400,	400
	MRRI		/READ ASCII
	AND MDR177	/IGNORE PARITY ETC.
	DCA I MDRPT	/STORE IN BUFFER
	CLA CMA
	MRCI		/CLEAR INPUT
	JMP MDRGE1	/CONTINUE

MDRCLF,	CLA CMA
	DCA MDRCNT	/SET MAIN COUNT TO SKIP
	TAD MDRCT2
	CLL CMA RTL	/ALL THIS DOES IS...
	TAD MDRCT2	/MAKE A 2 OR -1
	TAD MDR13	/SO THIS MAKES A 15 OR 12
	JMP MDRCDF

MDRM03,	-3		/^C TEST
MDRM27,	-27		/-27-3=-32 ^Z TEST
MDRCNT,	-1		/MAIN COUNT
MDRCT2,	-1		/215, 212 COUNT
MDRPT,	0		/BUFFER POINTER
MDR13,	13		/215, 212 CORRECTION FACTOR
MDR32,	32		/ASCII ^Z
MDR177,	177		/PARITY MASK
MDR077,	77		/SIX BIT MASK
MDRM40,	-40		/SPACE TEST
MDRMSB,	-32		/- "SUB"
MDRMBA,	-137		/-"EOF" (_)

MDRABF,	MDRBUF-1-MDRLOC	/MODIFIED LOCATIONS
MDRIN5,	MDRXIT-1-MDRLOC

	$$$$$