/17 TC08 DRIVER FOR RTS8 V3 / / #10 V2B CONVERSION TO MACREL / #11 .TASK MACRO, CIF, CDF 0 / #12 LEVEL ONTO SECTS, NO CUR / #13 RTFLD TO RTS8 / #14 MODS FOR KT8A / #15 POLISH OFF KT MODIFICATION J.R. / #16 MORE OF #15 J.R. / #17 CONDITIONAL / VERS=17. / / / / / / / / /COPYRIGHT (C) 1974,1975,1976,1977,1978,1979 BY DIGITAL EQUIPMENT CORPORATION / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. / /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / / / / / / / / XLIST 0 VERS= 2 /ACCEPTS STANDARD MASS STORAGE TASK MESSAGE FORMAT TASK= DTA INIWT= 0 DTCA= 6762 DTXA= 6764 DTLB= 6774 DTSF= 6771 DTRA= 6761 DTRB= 6772 DTACA= 7755 DTAWC= 7754 IFNZRO KT8A < IFZERO NFLDS-11&4000 < .ASECT DTAA1,LEVEL=0 FIELD 10 *DTAWC 0 0 > IFZERO NFLDS-21&4000 < .ASECT DTAA2,LEVEL=0 FIELD 20 *DTAWC 0 0 > IFZERO NFLDS-31&4000 < .ASECT DTAA3,LEVEL=0 FIELD 30 *DTAWC 0 0 > > .RSECT DTAT, LEVEL=0 .TASK DTA,DTA TMP, START, CAL DONEFG, SKPINS BREAKR, INTRPT /MAIN HANDLER LOOP IFNZRO KT8A < JMP I (KTONCE /CALL KT8A FSECT > LOOP, CAL RECEIV /GET A MESSAGE ADDR, IFZERO KT8A <0> IFNZRO KT8A DCA FLD DTREDO, AC7775 DCA I (TRYCT /TRY 3 TIMES ISZ DONEFG /INITIALIZE EVENT FLAG STA TAD ADDR DCA ADDR JMS GET AND (7 CDF .FLD DCA I (UNIT JMS GET CDF .FLD DCA I (DFUN STA JMS GET CDF .FLD DCA I (DLOC /GET OS/8 STYLE ARGS JMS GET CLL RAL CDF .FLD DCA I (DBLOCK /DOUBLE BLOCK NUMBER TAD (FSTINT DCA IDISP /INITIALIZE INTERRUPT DISPATCH IFNZRO KT8A < JMS I (MAPSET /SETUP BREAK MAP FOR QUICK ACCESS AT INT LEVEL > IOF JMS I (SETU /INITIALIZE THE OPERATION TAD (DTSF DCA INTSKP /ENABLE INTERRUPT TEST ION NOP /BE NICE TO OTHER PEOPLE IFNZRO KT8A < ZAPPED, JMP I (KTONLY /CALL KT8A FSECT TO INIT BREAK MAP > CAL /(AND THEY'LL KICK YOU IN THE TASK) WAITE PDONFG, DONEFG /WAIT FOR COMPLETION TAD DONEFG SNA CLA /IF EVENT FLAG DID NOT COME UP, JMP NOPFAL /BUT WE CAME OUT OF EFWT ANYWAY, AC7775 /A POWER FAILURE MUST HAVE OCCURRED. TAD ADDR DCA ADDR JMP DTREDO /TAKE IT FROM THE TOP NOPFAL, JMS GET /THIS JUST SETS THE DF AND ADDR P7600, 7600 TAD STATUS DCA I ADDR TAD FLD DCA PFLD TAD ADDR TAD (-7 /GET POINTER TO MESSAGE EVENT FLAG CAL POST STATUS, PFLD, HLT JMP LOOP /GET ANOTHER MESSAGE GET, 0 FLD, CDF .FLD ISZ ADDR TAD I ADDR JMP I GET /INTERRUPT ROUTINE BEFORE DISPATCHING INTRPT, 0;0 /CHAIN INTO SKIP CHAIN INTSKP, CLA /OR DTSF JMP I INTRPT CDF CIF .FLD DTRB JMP I IDISP /DISPATCH INTERRUPT DSTOP, DCA STATUS DTRA AND (200 TAD (6 /DISABLE INTERRUPTS WHEN TAPE THROUGH DTXA /STOP TAPE, CLEAR ERRORS IN CONTROL TAD P7600 DCA INTSKP TAD PDONFG JMP IDISP+1 IDISP, HLT CIF RTS8 POSTDS PAGE /SEARCH AND TRANSFER LOGIC DTGO, TAD (200 DTDC, SZL TAD (400 DTXA /START TAPE IN NEW (OLD) DIRECTION RSTRT, JMS I (IDISP FSTINT, SMA CLA JMP CKBLNO /NO ERROR - CHECK FOR CORRECT BLOCK DTRB RTL RAL SMA CLA /NEAT TEST - ONLY SELECT ERROR BAD ON SEARCH, BUT JMP DTGO /SINCE ENDZONE FLAG IS IN LINK WE WILL REVERSE ON EZ DTERR, ISZ TRYCT JMP TRYAGN /TRY THREE TIMES ON ERRORS DTRB JMP I (DSTOP /OTHERWISE RETURN WITH ERROR FLAGS IN STATUS TRYAGN, JMS SETU /TRY AGAIN - REINITIALIZE OPERATION ON UNIT JMP RSTRT /GO BACK INTO SEARCH WAIT SETU, 0 /ROUTINE TO INITIALIZE DT OP CDF .FLD IFNZRO KT8A < ZIPPED, JMP SETONC /SKIP THIS FOR FIRST PASS THRU TAD RTSBNK /GET RTS8'S BANK ADDR TAD I (BREAKR /ADD TO OUR MAP ADDR LBM /LOAD BREAK MAP FOR SEARCH BREAKS SETONC, > TAD UNIT /GET UNIT NUMBER TAD (BLKTAB DCA UB /GET POINTER INTO CURRENT BLOCK TABLE IFNZRO KT8A TAD I UB /GET POSITION OF TAPE IFNZRO KT8A TAD (12 CMA STL /IF DESIRED BLOCK IS MORE THAN 10 DECIMAL BLOCKS TAD DBLOCK /IN FRONT OF WHERE WE ARE, WE WANT L7600, 7600 /TO START FORWARD. TAD UNIT RTR RTR TAD (214 /IN EITHER CASE WE WANT TO SEARCH WITH DTCA DTXA /INTERRUPTS ENABLED TAD FLDD DTLB /AS A NEAT HACK WE TELL THE CONTROL ZIP, CDF 0 /TO PLACE TAPE BLOCK NUMBERS DIRECTLY TAD UB /INTO OUR CURRENT BLOCK NUMBER TABLE AS IT DCA I (DTACA /FINDS THEM, SAVING US SOME WORK JMP I SETU FLDD, IFZERO KT8A <.FLD> IFNZRO KT8A IFNZRO KT8A < RTSBNK, RTFLD%10 > UB, 0 IFZERO KT8A < BLKTAB, ZBLOCK 10 /ALL TAPES START REWOUND > TRYCT, 0 DFUN, 0 DLOC, 0 DBLOCK, 0 UNIT, 0 CKBLNO, DTRA RTL CMA RTL /DIRECTION IN LINK SNL CLA CML RTL /SEARCH REVERSE TO BLOCK-2 IFNZRO KT8A TAD I UB /GET BLOCK NUMBER FROM CONTROL BUFFER IFNZRO KT8A CIA TAD DBLOCK SNA CLA SZL CLA JMP DTDC /A FEW LOCATIONS, A HAIRY ALGORITHM TAD DLOC ZAP, CDF 0 DCA I (DTACA CDF .FLD TAD DFUN /SET ADDRESS AND FIELD FOR TRANSFER AND (70 /???? DTLB IFNZRO KT8A < TAD I (MAPBTS /GET PRELOADED BUFFER MAP BITS TAD I (BREAKR LBM /LOAD OUR MAP SLOT > TAD DFUN CLL RAL AND L7600 DCA DBLCT RAL IAC STL RTL RTL DL, DTXA /START TRANSFER ZOP, CDF 0 TAD L7600 DCA I (DTAWC /SET WORD COUNT TO 128 WORDS JMS I (IDISP /GIVE SOMEONE ELSE A CHANCE IFNZRO KT8A ISZ I UB /BUMP CURRENT TAPE BLOCK NUMBER IFNZRO KT8A SPA CLA /ALL ERRORS DURING DATA TRANSFER ARE BAD JMP DTERR TAD DBLCT TAD L7600 SNA JMP I (DSTOP DCA DBLCT JMP DL DBLCT, 0 PAGE IFNZRO KT8A < .SBTTL KT8A BREAK MAP INITIALIZATION .DSECT DTABT FIELD RTFLD /PUT TABLE IN RTS8 FIELD FOR KT BLKTAB, ZBLOCK 10 /ALL TAPES START REWOUND .EXTERN KTTAB,KTBUF,TSWFLG LBM= 6170 /LOAD BREAK MAP ENTRY RLB= 6172 /READ LAST BREAK THAT FLEW BY .FSECT DTAK FIELD DTAT KTONCE, CAL /GET THE FIRST MESSAGE TO ESTABLISH A UNIT RECEIV /ABOVE LOC USED AS TEMP LATER KADDR, 0 DCA KFLD KFLD, 0 TAD I KADDR /GET THE UNIT CDF .FLD AND (7 DCA KTMESG /STORE AS DUMMY MESSAGE TO READ JMP I (DTREDO /NOW DO THE KT BREAK ESTABLISHING READ KTONLY, CDF RTS8 /LOCK ACCESS TO KT SEMAPHORE TABLE DCA I (TSWFLG KTSPIN, CDF .FLD TAD I (DONEFG /SEE IF POST HAPPENED (UNLIKELY) SNA CLA JMP I (DTREDO /TRY AGAIN IF YES RLB /READ LAST BREAK DCA I (BREAKR /ASSUME ITS RIGHT, SAVE IT TAD I (BREAKR /NOW USE IT TO INDEX KT TABLE CLL RTR TAD (KTTAB DCA KTONCE CDF RTS8 TAD I KTONCE /TEST IF OUR BREAK OR NOT SMA CLA /SKP IF YES JMP KTSPIN /JUST LOOP IF NO DCA I KTSPIN /ELSE CLEAR THE SEMAPHORE CDF .FLD TAD KADDR /COPY OVER THE REAL USER MESSAGE DCA I (ADDR TAD KFLD DCA I (FLD TAD (NOP /DISABLE THIS PATH DCA I (ZAPPED TAD (NOP /ALSO FIX MAP SETTING TO WORK DCA I (ZIPPED JMP I (DTREDO /GO HANDLE THE REAL REQUEST KTMESG, 0 RTS8&70+100 /READ ONE PAGE TO THE DUMMY BUFFER KTBUF 0 /BLOCK 0 / 0 /STATUS MAPSET, 0 CLA STL IAC RTL /AC0006 AND I (DFUN /GET 000 000 000 BA0 CLL RTR SZL TAD (2 /MAKE 000 000 000 0AB DCA MAPBTS /SAVE THE EXTENDED BITS TAD MAPBTS SZL TAD (16 CLL RTL TAD (CDF DCA I (ZIP /STORE CDF TO 3 CYCLE DATA BREAK LOCS IN TAD I (ZIP /FIRST FIELD OF BANK DCA I (ZAP TAD I (ZIP DCA I (ZOP JMP I MAPSET /RETURN MAPBTS, 0 > $