/ P?S/8 TC01/TC08 DECTAPE HANDLER / LAST EDIT: 12-MAR-1986 18:00 CJL / MAY BE ASSEMBLED WITH '/J' SWITCH SET. / 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) ADJUSTABLE (ONE WORD) CUSTOM OVERSHOOT FACTOR. / 5) SPECIAL HANDLING OF TAPE ERRORS: / A) DURING SEARCH: / I) SELECT AND REVERSE END ZONE ERRORS ARE IGNORED. / II) ALL OTHER ERRORS ARE RETRIED (SUBJECT TO ERROR COUNTER). / B) DURING READ OR WRITE: / I) ALL ERRORS ARE RETRIED (SUBJECT TO ERROR COUNTER). PAGE /START ON A NEW PAGE HERE= . /WHERE WE ARE XLIST OFF IFNDEF OFF IFNDEF ON IFNDEF DECTAPE XLIST ON / DEFINITIONS. CA= 7755 /CURRENT ADDRESS DTLA= 6766 /LOAD DECTAPE "A" REGISTER DTLB= 6774 /LOAD DECTAPE "B" REGISTER DTLENGT=2702 /DECTAPE LENGTH IN BLOCKS DTRA= 6761 /READ DECTAPE "A" REGISTER DTRB= 6772 /READ DECTAPE "B" REGISTER DTSF= 6771 /SKIP ON DECTAPE DONE OR ERROR FLAG DTXA= 6764 /EXCLUSIVE OR AC WITH DECTAPE "A" REGISTER 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 NL7777= CLA CMA /LOAD AC WITH 7777 OVSHOOT=5 /OVERSHOOT FACTOR REVISIO="B&77 /REVISION OF HANDLER SYSIO= 7640 /SYSTEM I/O ENTRY POINT WC= 7754 /WORD COUNT / DEVICE HANDLER HEADER BLOCK. *"D&177;*"T&177;*"A&177 /GROUP NAME *-1 /GROUP COUNT *"D&177;*"T&177;*"A&177 /DEVICE NAME *DECTAPE&177 /RELATIVE ENTRY POINT *DTLENGTH-1 /LENGTH (LARGEST BLOCK) *REVISION /REVISION OF HANDLER(S) *HERE /RESTORE ORIGIN IFNZRO .&177 D7, 7 /CONSTANT 0007 D4002, 4002 /CONSTANT 4002 DFUNCT, .-. /FUNCTION WORD DBLK, .-. /BLOCK NUMBER DADDR, .-. /TRANSFER ADDRESS DWC, WC /WORD COUNT DCAA, CA /CURRENT ADDRESS / CUSTOMIZABLE OVERSHOOT FACTOR; MINIMUM VALUE FIVE FOR ECO'D TU56 DRIVES. DOVSHT, OVSHOOT /OVERSHOOT FACTOR IFNZRO .&177-10 D400, 400 /CONSTANT 0400 DECTAPE,.-. /MAIN ENTRY POINT NL0002 /SET INSTRUCTION FIELD BIT RDF /GET CALLING FIELD TAD DCDF/(CDF) /FORM CIF CDF RETURN INSTRUCTION DCA DTEXIT /SAVE FOR LATER TAD I DECTAPE /GET PARAMETER POINTER DCA GETBLK /SAVE IT ISZ DECTAPE /BUMP TO ERROR RETURN NL7777 /BACKUP TAD I GETBLK /GET TRANSFER ADDRESS DCA DADDR /SAVE FOR LATER ISZ GETBLK /BUMP TO FUNCTION WORD TAD I GETBLK /GET FUNCTION DCA DFUNCT /SAVE IT ISZ GETBLK /BUMP TO BLOCK TAD I GETBLK /GET BLOCK NUMBER DCA DBLK /SAVE IT DCDF, CDF 00 /MUST HAVE FIELD 0 NOW NL7775 /SETUP THE ERROR / DCA I D7750/(7750) /RETRY COUNTER DCA DRETRY /RETRY COUNTER TAD DFUNCT /GET FUNCTION D200, AND D7/(7) /ISOLATE UNIT BITS TAD TADOLB/(TAD OLBLK0) /NOW HAVE "TAD OLBLK" DCA GETBLK /SAVE IN-LINE NL2000 /TAD (DCA-TAD) /GET "DCA"-"TAD" TAD GETBLK /NOW HAVE "DCA OLBLK" DCA PUTBLK /SAVE IN-LINE TAD DBLK /GET DESIRED BLOCK CLL CIA /INVERT GETBLK, .-. /WILL BE "TAD OLBLK" TAD DOVSHT /ADD ON OVERSHOOT FACTOR D7600, CLA+400 /CLEAN UP DRESTAR,TAD DFUNCT /GET FUNCTION AND D7/(7) /JUST UNIT BITS RTR;RTR /MOVE UNITS, DIRECTION TO AC[0-3] TAD D210/(210) /ADD ON SEARCH, GO BITS DTLA /LOAD "A" WITH GO, CORRECT DIRECTION, /UNIT, AND SEARCH FUNCTION BITS DTLB /SEARCH INTO FIELD 0 TAD DBLK /GET DESIRED BLOCK DCA GETBLK /BECOMES NEW OLBLK EVENTUALLY TAD DWC/(WC) /SEARCH INTO DCA I DCAA/(CA) / LOCATION DCONT, SPA CLA /CHANGE DIRECTION? TAD D400/(400) /YES DTXA /CLEAR FLAG (MAYBE CHANGE DIRECTION) DTWAIT, DTSF DTRB /WAIT FOR IT JMP DTWAIT /TO HAPPEN SMA /ANY ERRORS? JMP DTAPOK /NO CMA RTL;RAL /MOVE END ERROR TO LINK, SELECT ERROR TO AC[0] SMA CLA /SELECT ERROR? JMP DRESTART /IGNORE IT SZL CLA /END ZONE ERROR? JMP TAPERR /NO, COMPLAIN OF OTHER ERRORS TPERR2, DTRA /GET DIRECTION AND D400/(400) /ISOLATE DIRECTION BIT SNA CLA /SKIP IF REVERSE TAPERR, /ISZ I D7750/(7750) /TOO MANY ERRORS? ISZ DRETRY /TOO MANY ERRORS? JMP DRESTART /NO, RESTART IN DIRECTION OF LINK DTRB /GET STATUS JMP DEXCOM /BARF DTAPOK, DTRA /GET DIRECTION D210, AND D400/(400) /JUST DIRECTION BIT D7640, SZA CLA /GOING FORWARD? TAD D4002/(4002) /NO, ADD MAGIC REVERSE FUDGE TAD I DWC/(WC) /GET LATEST BLOCK CIA /INVERT FOR TEST TAD DBLK /GET DESIRED BLOCK SZA /DID WE FIND IT? JMP DCONT /NO, BUT SIGN TELLS WHAT TO DO NEXT! TAD DADDR /YES, GET TRANSFER ADDRESS DCA I DCAA/(CA) /STORE IN TAD DFUNCT /GET FUNCTION AGAIN DTLB /SET TRANSFER FIELD TAD DFUNCT /GET FUNCTION AGAIN RAL /READ/WRITE TO LINK AND D7600/(7600) /ISOLATE PAGE BITS / DCA I D7640/(SYSIO) /SAVE AS PAGE COUNT DCA DPAGCT /SAVE AS PAGE COUNT RAL;IAC;STL RTL;RTL /30 IF READING, 50 IF WRITING DNEXT, DTXA /SETUP NEXT BLOCK TO READ OR WRITE TAD D7600/(-200) /SETUP DCA I DWC/(WC) / DTRWAIT,DTSF DTRB /WAIT FOR TRANSFER JMP DTRWAIT /TO HAPPEN D7750, SPA SNA CLA /ANY ERRORS? JMP TPERR2 /YES ISZ GETBLK /BUMP CURRENT BLOCK / TAD I D7640/(SYSIO) /GET PAGE COUNT TAD DPAGCT /GET PAGE COUNT TAD D7600/(-200) /COUNT DOWN SNA /DONE? JMP DEXIT /YES / DCA I D7640/(SYSIO) /PUT IT BACK DCA DPAGCT /PUT IT BACK JMP DNEXT /GO DO NEXT DEXIT, TAD GETBLK /GET LATEST BLOCK PUTBLK, DCA OLBLK0+.-. /WILL BE "DCA OLBLK" ISZ DECTAPE /BUMP TO GOOD RETURN DEXCOM, DCA PUTBLK /SAVE STATUS DTRA /GET GO BIT AND D200/(200) /ISOLATE IT DTXA /TAPE IS NOW STOPPED TAD PUTBLK /RESTORE STATUS DTEXIT, .-. /WILL BE CIF CDF RETURN FIELD JMP I DECTAPE /RETURN TO CALLER DPAGCT, .-. /PAGE COUNTER; THIS CAN BE OPTIMIZED OUT! DRETRY,.-. /RETRY COUNTER; THIS CAN BE OPTIMIZED OUT! TADOLB, TAD OLBLK0 /INSTRUCTION CONSTANT / TABLE OF LAST REFERENCED BLOCKS FOR EACH UNIT; INITIALIZED TO START THE / SEARCH BACKWARDS THE FIRST TIME. OLBLK0, 3777 /FOR UNIT ZERO 3777 /FOR UNIT ONE 3777 /FOR UNIT TWO 3777 /FOR UNIT THREE 3777 /FOR UNIT FOUR 3777 /FOR UNIT FIVE 3777 /FOR UNIT SIX 3777 /FOR UNIT SEVEN $ /THAT'S ALL FOLK!