/P?S NON-SYSTEM LINC-8 LINCTAPE HANDLER XLIST OFF IFNDEF OFF IFNDEF ON XLIST ON; IFZERO 1 < P?S NON-SYSTEM LINCTAPE HANDLER FOR THE MODIFIED LINC-8. FEATURES: 1) SUPPORT OF EIGHT UNITS (0-7). 2) INDIVIDUAL RETENTION OF LATEST BLOCK INFORMATION. 3) THROUGH USE OF 2), CORRECT INITIAL SEARCH DIRECTION. 4) PARITY ERROR DETECTION AND RETRY (WITH COUNTER). 5) ADJUSTABLE (ONE WORD) CUSTOM OVERSHOOT FACTOR. LAST EDIT: 12-NOV-1983 06:00:00 CJL MAY BE ASSEMBLED WITH '/J' SWITCH SET. DEFINITIONS. > XLIST ON ACMN= 6177 /AC TO MOTION FLIP-FLOPS CLTF= 6144 /CLEAR AC, TAPE FLAG IAAC= 6171 /READ "A" REGISTER IACA= 6167 /LOAD "A" REGISTER IACF= 6175 /LOAD UNIT (ETC.) FLIP-FLOPS ICON= 6141 /INTERFACE CONTROL LDUW= 6162 /LOAD BUFFERED READ/WRITE, UNIT[2] FLIP-FLOPS LRWS= 6166 /LOAD "ON-BLOCK" MODE, SET WRITE AND SKIP IF /PREVIOUS LDUW AC[0] ON NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL2000= CLA CLL CML RTR /LOAD AC WITH 2000 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 SKFM= 6146 /SKIP IF FORWARD TAPE MOTION SKTF= 6142 /SKIP ON TAPE FLAG STSR= 6164 /SET SEARCH, CONDITIONALLY CLEAR AC. /LOSS OF TAPE MOTION DISABLES AC CLEAR. /EXECUTING STSR ENABLES FUTURE STSR'S TO /CLEAR THE AC. /SETTING SEARCH CLEARS THE TAPE FLAG. /LINC "A" REGISTER IS INTACT AFTER A TRANSFER /EVEN IF IN "ON-BLOCK" MODE AND WRITERS ON. PAGE /CAN ACTUALLY BE ANY PAGE! LINCTAP,.-. /ENTRY POINT NL0002 /SET INSTRUCTION FIELD BIT RDF /NOW HAVE CALLING FIELD TAD LTCDF /MAKE RETURN CIF CDF INSTRUCTION DCA LTOUT /SAVE FOR EXIT LATER TAD I LINCTAPE /GET PARAMETER POINTER DCA LTWAIT /STASH IT TAD I LTWAIT /GET TRANSFER ADDRESS DCA LTBUFF /SET IT UP ISZ LTWAIT /BUMP TO FUNCTION WORD TAD I LTWAIT /GET FUNCTION WORD RAL /MOVE UP AND LT7600 /ISOLATE PAGE BITS DCA LTPAGCT /SAVE AS PAGE COUNT TAD I LTWAIT /GET FUNCTION AGAIN AND LT70 /JUST TRANSFER FIELD BITS TAD LTCDF /NOW HAVE CDF TRANSFER FIELD DCA TRNCDF /SET IT UP TAD I LTWAIT /GET FUNCTION AGAIN LDUW /LOAD READ/WRITE AND LOW UNIT BITS RAR /MOVE OVER AND LT3 /JUST EXTENDED UNITS IACF /LOAD THE UNITS RAL /RESTORE ALL UNIT BITS TAD TDBLK /NOW HAVE "TAD BLOCK" INSTRUCTION DCA TADINST /STORE IN-LINE ISZ LTWAIT /BUMP TO BLOCK ARGUMENT TAD I LTWAIT /GET THE BLOCK NUMBER DCA TBLOCK /STASH IT TADINST,.-. /WILL BE "TAD BLOCK" CIA /INVERT TAD TBLOCK /COMPARE TO DESIRED BLOCK TAD LTOVSHT /ADD ON OVERSHOOT FACTOR DCA LTDIRCT /SAVE AS INITIAL DIRECTION NL7775 /SETUP THE DCA LTRYCT /RETRY COUNT ISZ LINCTAPE /BUMP TO ERROR RETURN IOF /PREVENT PROBLEMS LTNEXT, ISZ TBLOCK /FOR ONE'S COMPLEMENT BUMP FIRST LT3, 3 /WATCH OUT FOR BLOCK 7777! TAD LT7600 /SETUP DCA TCOUNT /BLOCK WORD COUNTER DCA TCHKSM /CLEAR CHECKSUM TAD LTDIRCT /GET FIRST TIME DIRECTION STSR /SET SEARCH AND AC IF NOT FIRST TIME SERCH1, ACMN /LOAD MOTION SERCH2, JMS LTWAIT /WAIT FOR A BLOCK MARK TAD TBLOCK /COMPARE TO DESIRED SZA /SKIP IF POSSIBLE JMP SERCH1 /JUMP IF NOT SKFM /GOING MY WAY? JMP SERCH2 /NO, IT'LL TURN AROUND SOON ENOUGH LRWS /GOTO READ (AND MAYBE WRITE) MODE JMS LTWAIT /SKIP GUARD WORD IF READING TRNCDF, CDF 00 /TO TRANSFER FIELD TRNLUP, TAD I LTBUFF /GET A WORD JMS LTWAIT /WAIT FOR IT (OR NEW ONE) DCA I LTBUFF /PUT A WORD TAD I LTBUFF /GET IT BACK TAD TCHKSM /UPDATE THE DCA TCHKSM /CHECKSUM ISZ LTBUFF /BUMP TO NEXT WORD LT70, 70 /JUST IN CASE ISZ TCOUNT /DONE WITH BLOCK? JMP TRNLUP /NO, KEEP GOING TAD TCHKSM /GET ACCUMULATED CHECKSUM CIA /INVERT FOR WRITING JMS LTWAIT /WRITE IT OUT (OR READ IN NEW ONE) TAD TCHKSM /MUST COMPARE EITHER WAY SZA CLA /SKIP IF NO PARITY ERROR JMP PARERR /BARF JMS LTWAIT /WAIT FOR LAST WORD TO BE WRITTEN LT7600, CLA!400 /CLEAN UP TAD LTPAGCT /GET CURRENT PAGE COUNT TAD LT7600 /DECREMENT IT SNA /DONE? JMP TDONE /YES, FINISH UP DCA LTPAGCT /NO, SAVE FOR NEXT TIME JMP LTNEXT /GO DO ANOTHER BLOCK TDONE, NL2000 /GET "DCA"-"TAD" TAD TADINST /NOW HAVE "DCA BLOCK" DCA LTRYCT /SAVE IN-LINE TAD TBLOCK /GET CURRENT BLOCK LTRYCT, .-. /WILL BE "DCA BLOCK" ISZ LINCTAPE /BUMP TO GOOD RETURN ERRXIT, ICON /STOP THE TAPE LTOUT, .-. /WILL BE CIF CDF RETURN INSTRUCTION JMP I LINCTAPE /RETURN TO CALLER PARERR, TAD LTBUFF /GET CURRENT ADDRESS TAD LT7600 /BACKUP A PAGE DCA LTBUFF /SAVE IT ISZ LTRYCT /TOO MANY ERRORS? JMP LT3 /NO, TRY AGAIN JMP ERRXIT /YES, FORGET IT LTWAIT, .-. /WAIT ROUTINE IACA /LOAD "A" REGISTER FOR WRITING SKTF /WAIT FOR TAPE FLAG JMP .-1 /TO HAPPEN CLTF /CLEAR AC, FLAG IAAC /GET LATEST WORD EITHER WAY JMP I LTWAIT /RETURN TBLOCK, .-. /SEARCH BLOCK BLOCK0, ZBLOCK 10 /BLOCK TABLE LTBUFF, .-. /TRANSFER ADDRESS POINTER TCHKSM, .-. /CHECKSUM TEMPORARY TCOUNT, .-. /PAGE WORD COUNT LTDIRCT,.-. /INITIAL DIRECTION LTCDF, CDF 00 /CDF CONSTANT LTOVSHT,7771 /OVERSHOOT FACTOR LTPAGCT,.-. /PAGE COUNT TDBLK, TAD BLOCK0 /INSTRUCTION CONSTANT