File: MDR.PA of Tape: OS8/OS8-V40/v40-9
(Source file text) 

/B&H MARK SENSE READER FOR KBM V40
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1980   BY DATAPLAN GMBH, LAUDA, BRD
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DATAPLAN GMBH.
/DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR ANY ERRORS THAT MAY APPEAR
/IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DATAPLAN'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DATAPLAN.
/
/DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY
/OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DATAPLAN.
/
/
/
/
/
/
/
/
/
/
/
/WVDM, DP, ZUERICH, 1-JAN-80
/W.VAN DER MARK - DATAPLAN - ZUERICH - SWITZERLAND
/1-JAN-80
		VERSION="M&77

/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 CM8E;DEVICE CDR;2030;4000;0;0
	*200

MDR,	VERSION		/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 "SNA CLA"
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	/GET 'SNA CLA' TO
	DCA I MDRIN5	/GIVE 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?
MDRMBA,	SZA CLA		/ALSO 7640 = -137-1 FOR '_' CHECK
	JMP MDRGE0	/NO GO - TRY AGAIN
	STA		/TURN MOTOR ON AGAIN AND
	MRSO		/DO A CARD FEED
MDRGE1,	CLA CMA		/COMMON EXIT FOR DATA AND CARD
	MRCI		/CLEAR EOC AND STROBE
MDRTLP,	ISZ MDRJMP	/TIMOUT? STARTS WITH 0
	SKP CLA		/WILL ALWAYS CLEAR AC
	JMP MDRGE0	/TRY ALL OVER, MDRJMP = 0
MDR200,	200		/MAKE DELAY LONG
MDR13,	13		/215, 212 CORRECTION FACTOR
MDR32,	32		/ASCII ^Z
MDR177,	177		/PARITY MASK
MDR400,	400		/DELAY = 100MS
	MRSS		/DATA READY OR CARD DONE?
	JMP MDRTLP	/NO WAIT FOR THEM
	DCA MDRJMP	/RESET TIMOUT
	MRRI		/CARD DONE?
	SMA
	JMP MDRGE2	/NO - MUST BE DATA READY
	CLA CLL CML RAR
	MRCO		/INHIBIT CARD FEED
	STA
	MRCI		/CLEAR INPUT
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?
	AND MDRCNT	/MAINTAINS 7777 IF MDRCNT = -1
	CMA		/IF BOTH TRUE: AC NOW = 0
MDROPR,	SNA CLA
	JMP MDRGEZ	/YES - MUST BE END OF FILE
MDRGE6,	TAD MDRABF
	DCA MDRPT
MDRGET,	ISZ MDRPT
	TAD I MDRPT
MDRMOD,	JMP MDRCDF

MDRGE2,	CLL RTL
	SMA CLA		/IS IT DATA DONE?
	JMP MDRGE1	/CLEAR AND TRY AGAIN
	CLA CMA
	TAD MDRCNT
	DCA MDRCNT	/COUNT THE CHARACTERS
	ISZ MDRPT
	MRRI		/READ ASCII
	AND MDR177	/IGNORE PARITY ETC.
	DCA I MDRPT	/STORE IN BUFFER
	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
MDRM40,	-40		/SPACE TEST

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

	$$$$$