/ 400 WORDS/BLOCK PARAMETER FILE BLKSIZE=400 /400 WORDS/BLOCK / REGULAR LINC-8 LINCTAPE HANDLER XLIST OFF IFNDEF OFF IFNDEF ON XLIST ON / P?S/8 NON-SYSTEM LINCTAPE HANDLER FOR THE REGULAR (UN-MODIFIED) LINC-8. / LAST EDIT: 17-APR-1986 10:00:00 CJL / MAY BE ASSEMBLED WITH '/J' SWITCH SET. / FEATURES: / 1) SUPPORT OF EIGHT UNITS (0-7). / 2) STORAGE OF LATEST BLOCK SEARCHED. / 3) CUSTOM OVERSHOOT FACTOR. / 4) CORRECT INITIAL SEARCH DIRECTION BY COMPARING THE DESIRED / BLOCK TO THE LATEST BLOCK SEARCHED, OFFSET BY THE CUSTOM / OVERSHOOT FACTOR. / 5) PARITY ERROR DETECTION. XLIST OFF IFNDEF BLKSIZE IFZERO BLKSIZE-200 < XLIST ON / 6) SUPPORTS 128 WORDS/BLOCK LINCTAPES. XLIST OFF > IFZERO BLKSIZE-400 < XLIST ON / 6) SUPPORTS 256 WORDS/BLOCK LINCTAPES AS A NON-STANDARD FEATURE / OF THIS HANDLER. XLIST OFF > XLIST ON / RESTRICTIONS: / 1) NO RETRIES ON ERROR. / 2) LATEST BLOCK SEARCHED IS IGNORANT OF CHANGE OF LOGICAL UNIT. PAGE /START ON A GOOD BOUNDARY HERE= . /WHERE WE ARE / DEFINITIONS. XLIST OFF IFZERO BLKSIZE-200 < XLIST ON BLKSIZE=0200 /128 WORDS/BLOCK XLIST OFF > IFZERO BLKSIZE-400 < XLIST ON BLKSIZE=0400 /256 WORDS/BLOCK XLIST OFF > XLIST ON IAAC= 6171 /READ LINC "A" REGISTER IACA= 6167 /LOAD LINC "A" REGISTER IACF= 6175 /LOAD LINC INDICATOR FLIP-FLOPS ICON= 6141 /LOAD INTERFACE CONTROL INTS= 6147 /READ INTERFACE STATUS IZSA= 6173 /LOAD LINC "Z" REGISTER INTO LINC "A" REGISTER LTLENGT=4000 /LINCTAPE BLOCK COUNT XLIST OFF IFNDEF L8TAPE XLIST ON NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL7777= CLA CMA /LOAD AC WITH 7777 REVISIO="A&77 /REVISION OF HANDLER / DEVICE HANDLER HEADER BLOCK. XLIST OFF IFZERO BLKSIZE-200 < XLIST ON *"L&177;*"I&177;*"N&177 /GROUP NAME *-1 /GROUP COUNT *"L&177;*"I&177;*"N&177 /DEVICE NAME XLIST OFF > IFZERO BLKSIZE-400 < XLIST ON *"L&177;*"I&177;*"D&177 /GROUP NAME *-1 /GROUP COUNT *"L&177;*"I&177;*"D&177 /DEVICE NAME XLIST OFF > XLIST ON *L8TAPE&177 /ENTRY POINT *LTLENGTH-1 /LENGTH EXPRESSED AS HIGHEST BLOCK *REVISION /REVISION OF HANDLER *HERE /RESET ORIGIN L8TAPE, .-. /ENTRY POINT NL0002 /SET INSTRUCTION FIELD BIT RDF /GET CALLING FIELD TAD (CDF) /NOW HAVE CIF CDF RETURN FIELD INSTRUCTION DCA L8OUT /STORE IN-LINE TAD I L8TAPE /GET PARAMETER POINTER DCA L8WAIT /STASH IT TAD I L8WAIT /GET TRANSFER ADDRESS DCA L8BUFF /SAVE IT ISZ L8WAIT /BUMP TO NEXT TAD I L8WAIT /GET FUNCTION WORD RAL /MOVE UP XLIST OFF IFZERO BLKSIZE-400 < XLIST ON AND (-BLKSIZE) /JUST PAGE BITS XLIST OFF > IFZERO BLKSIZE-200 < XLIST ON AND L87600/(-BLKSIZE) /JUST PAGE BITS XLIST OFF > XLIST ON DCA L8PCNT /SAVE AS PAGE COUNT RAR /RECOVER READ/WRITE BIT TAD L83/(3) /ADD ON BLOCK MODE BITS DCA L8FUNCT /SAVE AS TAPE FUNCTION TAD I L8WAIT /GET FUNCTION WORD AGAIN AND L870/(70) /JUST FIELD BITS TAD (CDF) /TURN INTO TRANSFER CDF DCA L8TRFLD /SAVE IN-LINE TAD I L8WAIT /L RW P P P P P F F F U U U RAR /U L RW P P P P P F F F U U AND L83/(3) /U 0 0 0 0 0 0 0 0 0 0 U U IACF /LOAD UNIT FLIP-FLOPS ONLY! NL7777 CML RAR /1 UC 1 1 1 1 1 1 1 1 1 1 1 TAD L83/(3) /L U 0 0 0 0 0 0 0 0 0 1 0 DCA L8UNIT /SAVE UNIT AND SEARCH BITS ISZ L8WAIT /BUMP TO BLOCK ARGUMENT TAD L8BLOCK /GET CURRENT BLOCK CIA /INVERT TAD I L8WAIT /FORM DIFFERENCE WITH DESIRED TAD L8OVSHT /ADD ON OVERSHOOT FACTOR DCA L8DIR /SAVE AS INITIAL DIRECTION TAD I L8WAIT /GET BLOCK ARGUMENT DCA L8BLOCK /SET IT UP ISZ L8TAPE /BUMP TO ERROR RETURN L84002, IOF /PREVENT PROBLEMS! L8NEXT, ISZ L8BLOCK /BUMP UP FOR ONE'S COMPLEMENT L83, 3 /BLOCK 7777 WOULD SKIP! XLIST OFF IFZERO BLKSIZE-400 < XLIST ON TAD (-BLKSIZE) /SETUP XLIST OFF > IFZERO BLKSIZE-200 < XLIST ON TAD L87600/(-BLKSIZE) /SETUP XLIST OFF > XLIST ON DCA L8COUNT /PAGE WORD COUNT DCA L8CHKSM /CLEAR CHECKSUM TAD L8DIR /GET INITIAL DIRECTION RAL /INTO LINK L87600, CLA!400 /CLEAN UP DCA L8DIR /ALL OTHERS FORWARD TAD L8UNIT /D U 0 0 0 0 0 0 0 0 0 1 0 ICON /LOAD UNIT AND SEARCH CML RAR /0 DC U 0 0 0 0 0 0 0 0 0 1 L8SER1, ICON /LOAD NEW DIRECTION L8SER2, JMS L8WAIT /WAIT FOR A BLOCK MARK SMA /NEGATIVE BLOCK NUMBERS? CML /YES, REVERSE OUR INTENT TAD L8BLOCK /COMPARE TO DESIRED BLOCK SNA /SKIP IF NOT FOUND JMP L8COULD /JUMP IF POSSIBLE SZL /RIGHT DIRECTION ANYWAY? JMP L8SER2 /YES, JUST KEEP GOING SMA CLA /REVERSE? STL RAR /NO, FORWARD ICON /STOP THE TAPE IAC /NOW SET TO CHANGE DIRECTION JMP L8SER1 /TURN AROUND THERE L8COULD,SNL CLA /GOING FORWARD? JMP L8SER2 /NO, UNDERSHOOT AND TRY AGAIN TAD L8FUNCT /GET A 3 ICON /GOTO BLOCK MODE SPA /WRITING? TAD L84002/(4002) /YES ICON /REDUNDANT OR TURN WRITERS ON SZL CLA /READING? JMS L8WAIT /YES, WAIT FOR GUARD WORD L8TRFLD,.-. /WILL BE CDF TRANSFER FIELD L8TRLUP,TAD I L8BUFF /GET A WORD JMS L8WAIT /WAIT FOR IT DCA I L8BUFF /PUT A WORD TAD I L8BUFF /RETRIEVE WORD TAD L8CHKSM /UPDATE CHECKSUM DCA L8CHKSM /STORE IT BACK ISZ L8BUFF /BUMP TO NEXT WORD L870, 70 /JUST IN CASE ISZ L8COUNT /DONE WITH THIS BLOCK? JMP L8TRLUP /NO, KEEP GOING TAD L8CHKSM /GET CHECKSUM IN CASE WRITING CIA /INVERT IT JMS L8WAIT /WRITE IT OR READ IN NEW ONE TAD L8CHKSM /WRITE ERROR IMPOSSIBLE SZA CLA /SKIP IF NO READ PARITY ERROR JMP L8ERROR /BARF JMS L8WAIT /WAIT FOR LAST TO BE WRITTEN STL CLA /CLEAN UP TAD L8PCNT /GET PAGE COUNT XLIST OFF IFZERO BLKSIZE-400 < XLIST ON TAD (-BLKSIZE) /DECREMENT IT XLIST OFF > IFZERO BLKSIZE-200 < XLIST ON TAD L87600/(-BLKSIZE) /DECREMENT IT XLIST OFF > XLIST ON SNA /DONE? JMP L8DONE /YES, FINISH UP THERE DCA L8PCNT /NO, SAVE FOR NEXT TIME JMP L8NEXT /GO DO ANOTHER BLOCK L8DONE, ISZ L8TAPE /BUMP TO GOOD RETURN L8ERROR,ICON /STOP THE TAPE L8OUT, .-. /WILL BE CIF CDF RETURN FIELD JMP I L8TAPE /RETURN L8WAIT, .-. /WAIT ROUTINE IACA /LOAD A IN CASE WRITING CLA /CLEAN UP TAD L87/(7) /GET CLEAR BITS ICON /CLEAR TAPE FLAG CLA /CLEAN UP L87, INTS /GET STATUS SMA /SKIP IF TAPE FLAG UP JMP L87 /JUMP IF NOT STL RAR /SAVE DIRECTION, FORM FUNCTION MASK AND L8FUNCT /NOW HAVE READ/WRITE FUNCTION SPA CLA /READING? IZSA /NO, RESTORE A IAAC /GET A EITHER WAY JMP I L8WAIT /RETURN L8BLOCK,.-. /BLOCK TEMPORARY L8BUFF, .-. /BUFFER POINTER L8CHKSM,.-. /CHECKSUM TEMPORARY L8COUNT,.-. /PAGE WORD COUNT L8DIR, .-. /CURRENT DIRECTION L8FUNCT,.-. /FUNCTION TEMPORARY L8OVSHT,7771 /OVERSHOOT FACTOR L8PCNT, .-. /PAGE COUNT L8UNIT, .-. /UNIT AND SEARCH TEMPORARY PAGE $ /THAT'S ALL FOLK!