/LAST EDIT 1-OCTOBER-75, ES /LAST EDIT 11-OKTOBER-74, ELC /DECTAPE BLOCK DRIVER /NAME: "D^100+"T&3777 DT /LENGTH: ONE PAGE /FUNCTION:TO HANDLE DECTAPE TRANSFERS. IT CAN DO A / SEARCH-ONLY AND A SEARCH-AND-TRANSFER. / THE DECTAPE DATATRANSFER VECTOR RESEMBLES / THAT OF OS8 EXCEPT FOR THE UNIT NUMBER AND / THE MEANING OF THE LINK TO SAY IN WHICH / DIRECTION TO START SEARCHING. /CONCEPT: BLOCK TRANSFERS TO AND FROM DECTAPE ARE / PRESUMABLY VERY COMMON IN BOTH FOREGROUND AND / BACKGROUND. THE MASS-STORAGE HANDLER HAS TO RE- / SEMBLE OTHER MASS-STORAGE HANDLERS FOR COMPATI- / BILITY, AND THIS IS TRUE FOR THE SYSTEM BLOCKDRIVER / THERE IS ONE DISTINCT EXCEPTION: WHEN A TRANSFER / LENGTH IS SPECIFIED OF 00 BLOCKS THEN THE DISK / WILL DO A FULL 20, BUT THIS MODULE USES THIS / SIGNAL TO DO A SEARCH-ONLY. THUS MAX TRANSFERLENGTH / IS 37 PAGES OR 17 AND A HALF BLOCKS. / THE MODULE WORKS 'CONNECTED' TO THE INTERRUPT: / AN INTERRUPH A VERY SHORT / DELAY TS DOING A SEARCH, AND NEG.) OVERFLOWS, THE TRAIT FLOWS OVER THE VERY FIRST TIME / THEN THE MODULE HAS DONE A SERACH-ONLY. /ERRORS:WHEN AC UNEQ 0 THERE CAN BE A NUMBER OF DECTAPE ERRORS / HAVING CAUSED IT. TIMING ERRORS IN THE SENSE THAT / THE INTERRUPT HAS H CAN ALSO / OCCUR. /TANSFER 3 TIMES MAX. IFL: /AGAIN, CDF FIELD OFDTV / JMS MONITOR / CALL / "D^100+"T&3777 /DT / JMP AGAIN /BUSY RETURN;AC UNCHANGED / /ONE CAN BETTER WAIT A FEW SECS. / DCA SLOT /RETURNS WITH SLOT# IN AC / JMS MONITOR /WAIT FOR COMPLETION OR ERROR / WAIT /SLOT, 0 / SZA CLA /ERROR? / ETC. / /FORMAT OF DATATRANSFER VECTOR: /DTV, RLL.LLL.FFF.UUU /READ/WRITE;LENGTH(PAGES);FIELD;UNIT / BUFFER ADDRESS IN CORE / BLOCK# ON DECTAPE /NOTE THAT THE DECTAPE IS A LITTLE BIT TROUBLESOME /WITH ITS ERRORFLAG: THIS FLAG CN COME UP /SPONTANEOUSLY WHEN A SELECT ERROR OCCURS WHEN /ONE OF THE UNITS IS SELECTED. THE SKIPCHAIN WOULD /THEN RUN INTO A FLAG THAT COULD NOT BE CLEARED. /SO ITS DTSF INSTRUCTION MUST BE REMOVED FROM THE SKIPCHAIN. /DECTAPE IOT DEFINITIONS: DTSF=6771 DTRA=6761 DTXA=6764 DTCA=6762 DTLA=6766 DTRB=6772 DTLB=6774 DTTRY, "D^100+"T&3777 /NAME DT , -NUMBER OF TRIES 200+1 /ONE PAGE , ONE CONNECT CDTA, DTA /CONNECT DEVICE DTA IN THE SKIPCHAIN DTINT /SO IT JTERRUPT DTFLD, 0 DT, DER-VECTOR TAD I DTV /GD /SAVE BUFFERFIELD TAR OF BLOCKS CML RTR /DIVIDE BY 100 RTR DCA DTUNIT /SAVE DTUNIT ISZ DTV CLA CMA TAD I DTV /GET BUFFER ADDRESS DCA DTBUF ISZ DTV TAD I DTV /GET OS/8 BLOCK CLL RAL /THIS IS THE DECTAPE BLOCK DCA DF /NOTE THAT 'CDTOIF' CLD /IN THE INTERRUPT-ENVJMS I ZRESERV JMS A JMS MONITOR RETURN CONTINUE DCA DTSLOT ACM3 /SET # OF RETRIES TO 3 DCA DTTRY DTST, /START AFTER ERROR TOO TAD DTUNIT /COMPUTE # OF BLOCKS RTR AND C37 CMA DCA DTNUM DTMON, CDF MONFLD CLA CMA // TAD DRET1A //DTRB-1=DTSF DCA I (DTA^4+SKPBAS //INSERT DTSF IN SKIPCHAIN DCA DTJMP // TAD (7754 // DCA I (7755 //DEPOSIT BLOCKNUMBER IN WC TAD DTMON //FLD=MONFLD DTLB //FOR SEARCH TAD DTUNIT // AND C7400 //UNIT+MOTION TAD (214 //SEARCH DTCA DTXA // JMS MONITOR // WAIT DTA SNA CLA /ERROR ? JMP .+4 /N ISZ DTTRY /TRIED ENOUGH ? JMP DTST /N IFNZRO HRDERR-4 TAD C4 /Y: PASS HRDERR JMS MONITOR HALT SIGNAL CLEAR RELEASE DTSLOT, 0 DTBUF, 0 /NOW THE INTERRUPT PART OF THIS TASK / DTINT, CDF MONFLD DTRB ///ERRORS AND (2700 ///DON'T MIND END OF TAPE SZA CLA JMP DTERR /// DTJMP, 0 ///PROGRAM SWITCH DRET1A, DTRB /// SPA CLA ///END ZONE ? JMP DTURN1 ///YES: REVERSE MOTION DTE BIT TO LINK RTL ///ND -200 TAD I (7754 // ///RIGHT BLOCK ? SNA YES CIA /// SNL /// IAC /// SNL CLA /// DTURN, TAD C400 ///REVERSE MOTION DTURN2, DTXA /// TAD DT7600 ///SET UP WC DCA I (7754 /// DTEXIT, CIF MONFLD /// JMP I ZFSTEXT DTURN1, TAD C200 /// JNL CLA /RIGHT DIRECTION TAD DTBUF /// DCA I (3A /// DCA DTJMP ///DR/// DTLB /// TAD DTFLD /// SPA CLA /// TAD (50-30 /// TAD (30 /// DRET3A, ISZ DTNUM ///LAST BLOCK ? JMP DTURN2 ///N0: NEXT ONE DTERR, DTRA /// AND C200 /// TAD C4 ///CLEAR INT ENABLE DTXA ///STOP MOTION DCA I (DTA^4+SKPBAS///REMOVE DTSF FROM SKIPCHAIN TAD CDTA /// DTRFLD, CDF /// CIF MONFLD /// JMS I ZSOFINT /// DTNUM, 0 ///PASS -NUMBER OF BLOCKS IF ERROR C400, 400 DTBLK, 0 DTV=ZTEM1 DTUNIT, 0 $