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 $$$$$