/TD8E HANDLER FOR RTS-8 /THIS HANDLER DRIVES UNITS 0,2,4,6 & 1,3,5,7 /PARAMETER 'DRIVE' WILL SELECT WHICH GROUP IS ACTIVE /DEFAULT: DRIVE=0 /THIS HANDLER CAN BE USED WITH ION SYSTEMS AND WILL /TURN THE INTERRUPT OFF FOR AT MOST 17MSECS AND THIS /ONLY DURING THE ACTUAL READ/WRITES.EXTRA FEATURES: /BLOCKS LARGER THAN 2047 GIVE IMMEDIATE FATAL ERROR /NUMBER OF ERROR TRIES CAN BE CHANGED. /7775/-NUMBER OF TRIES /W.VAN DER MARK, ETH, ZUERICH 10/28/74 IFNDEF DRIVE UNITNO=DRIVE^10 VERSION="E-300 /THE IOT'S ARE: SDSS=6771-UNITNO/SKIP ON SINGLE LINE FLAG SDST=6772-UNITNO/SKIP ON TIME ERROR SDSQ=6773-UNITNO/SKIP ON QUAD LINE FLAG SDLC=6774-UNITNO/LOAD TAPE COMMAND REGISTER SDLD=6775-UNITNO/LOAD DATA REGISTER SDRC=6776-UNITNO/READ COMMAND REGISTER SDRD=6777-UNITNO/READ DATA REGISTER /THIS IS A RTS-8 TASK TO DRIVE THE TD-TYPE DEC TAPE / SHOULD BE ASSAMBLED AS: PAL8 PARAM,RTS8TD / INCASE PARAM NOT FIRST IFNDEF CAL IFNDEF POST IFNDEF RECEIV IFNDEF DTA INIWT= 0 CUR= 10 TASK= DTA FIELD CUR%10 *4600 START, C70, 70 /LEAVE THIS HERE! LOOP, CAL RECEIV /WAIT FOR A MESSAGE ADDR, 0 DCA .+1 /DEPOSITS CALLING FIELD FLD, HLT /HERE JMS GET /FIRST ARG IS UNIT RTR DCA UNIT /SAVE IT JMS GET /NEXT IS FUNCTION WORD SDLD /HOLD IT IN DATA REGISTER C200, AND C70 TAD C6201 /CREATE CDF XX INSTR DCA XFIELD SDRD CLL RAL C374, AND CM200 /EFFECTIVE AND (7600 DCA PGCT /SAVE PAGE COUNT JMS GET DCA BUFF /SAVE BUFER ADDRESS JMS GET CLL RAL DCA TBLOCK /SAVE STARTING BLOCK CDF CUR SZL /TEST FOR TOO BIG BK # JMP FATAL C1000, TAD TRIES DCA ERCNT TAD UNIT JMS I CSELCT /CHECK FOR SELECT ERROR JMP .-2 /HANG ON SELECT ERROR JMP GO GET, 0 /GET WORDS FROM USER MESSAGE TAD I ADDR ISZ ADDR NOP /WRAP AROUND IF WE SKIP JMP I GET M20, -20 TRIES, -3 CTC8LN, CTCLN8 CSELCT, SELECT CRDW, RDWRT /FRW:TAR.GT.READ:L=1 - .LT.:L=0 NTFOUN, SZL /REV:TAR.GT.READ:L=0 - .LT.:L=1 JMP TSRCH /RIGHT DIRECTION - GO ON JMP REVRS /WRONG - SIGN SHOWS THE WAY UNIT, 0 TRWCOM, IOF /OR 'ION' - NEXT WILL EXECUTE SDST /TIME OR CHECK SUM ERROR? SZA CLA /LNK OFF AT TRWCOM JMP TRY3 /YES TRY UP TO 3 TIMES TAD PGCT /NO.. IS PAGE COUNT EXHAUSTED? TAD CM200 /TURNS LINK ON SNA JMP EXIT /YES.. DONE THIS TRANSFER DCA PGCT /NEW PAGE COUNT ISZ TBLOCK TAD BUFF TAD C200 /GET NEW BUFFER ADDRESS DCA BUFF REVRS, SPA /IF TAR.GT.READ CLL CML /FORCE FORWARD MOTION GO, CLA CML RTR /PUT IN DIRECTION BIT TAD C1000 TAD UNIT SDLC /INITIATE THE MOTION JMS I CTC8LN /WAIT FOR 8 LINES TO PASS NOP /AND CHECK FOR CTRL/C TSRCH, CIF CDF CUR /TURN OFF INT. IN SKIP CHAIN SDSS /WAIT FOR BLOCK MARK OR END ZONE JMP TSRCH SDRC /FORWARD:LNK=0 CLL RTL /DIRECTION TO LINK, DATA TO AC 4-9 AND C374 /ISOLATE M.T BITS TAD M110 /IS IT END ZONE? SNA /FORWARD:LNK=1 JMP ENDZ /YES..DO SOMETHING REASONABLE TAD M20 /HOW ABOUT BLOCK MARK? SZA CLA /FORWARD:LNK=0 JMP TSRCH /NEITHER..KEEP LOOKING SDRD /WHAT IS THIS BLOCK'S #? SZL /IF IN REVERSE, LOOK FOR 3 BEFORE TAD TC3 /THE ACTUAL TARGET BLOCK CMA /-READ(-3)-1 TAD TBLOCK /CML IF TAR.GT.READ(+3) CMA /READ(+3)-TAR SZA /IS THIS THE BLOCK? JMP NTFOUN /NO - GO CHECK LNK AND SIGN SZL CLA /FOUND BLOCK - DIRECTION? JMP GO /WRONG - TURN AROUND TAD CION /LOAD 'ION' INST. SKON /IF INT. ON - TURN OFF AND SKIP IAC /=IOF DCA TRWCOM /SAVE INSTR. SDRC /CLEAR FLAGS-GET UNIT,FORWARD,GO SDLC /CLEAR RESIDUAL TIMING ERRORS TAD BUFF XFIELD, HLT /GETS CDF N JMS I CRDW /LETS TRANSFER DATA JMP TRWCOM ENDZ, CML IAC /MAKE FORWARD: LNK=0 M110, CLA SNA SZL /IAC ALLOWS 'SNA' JMP GO /EXECUTE TURN AROUND AND SEARCH /END ZONE FORWARD - ERROR TRY3, ISZ ERCNT /TRIED 3 TIMES? JMP GO /LINK IS ZERO FATAL, CLA CLL CML RAR /=4000; TRADITIONAL ERROR VALUE EXIT, DCA STATUS TAD UNIT SDLC /STOP THE DECTAPE TAD FLD DCA .+1 BUFF, 0 /BUFFER ADDR CAN BE LOST NOW TAD STATUS DCA I ADDR TAD FLD DCA PFLD TAD ADDR /SET POINTER FOR POSTING OF STATUS TAD M7 CAL POST STATUS, /THIS LOC SERVES THREE FUNCTIONS TBLOCK, /AT THREE DIFFERENT TIMES PFLD, 0 /BK # CAN BE LOST NOW JMP LOOP /GO BACK AND WAIT FOR MORE M7, -7 PGCT, 0 ERCNT, 0 CM200, 7600 /MUST BE AT 374 CION, ION C6201, CDF 0 TC3, 3 PAGE XBUFF, 0 /KEEP XBUFF AND EFUN HERE! EFUN, 0 /EQUIVALENCE CHECKSUM DCA ETMP/ORIGINAL WORD IS KEPT TAD ETMP/19MMSEC SUB MQA /X.OR.C CMA CLL /.NOT.(X.OR.C) - LNK TO TRWCOM SWP /C IN AC-(.NOT.X).AND.(.NOT.C) IN MQ AND ETMP/X.AND.C MQA /(X.AND.C).OR.((.NOT.X).AND.(.NOT.C)) MQL /CLEAR AC AND REELAD CHECKSUM JMP I EFUN RDWRT, 0 DCA XBUFF RGRD, SDSS JMP .-1 /LOOK FOR REVERSE GUARD PATTERN SDRC /IT TAKES AT MOST 25MMSEC TO GET HERE AND K77 TAD CM32 SZA CLA /IF NOT REV. GUARD, KEEP LOOKING JMP RGRD TAD C7600 DCA WORDS /128 WORDS/BLOCK TAD XFUNCT K7700, SMA CLA /S IT READ OR WRITE? JMP TREAD SDRC /CHECK FOR WRITE LOCKOUT AND TC300 /17MMSEC TO HERE CLL /SETUP TO RETRY IF WRITE LOCK SZA /KEEP AC ON FOR ERROR JMP I RDWRT /IF LOCKED OUT, ERROR JMS R4LINE /SKIP A WORD;LOCK MARK CLA /NEXT QUADFLAG SETT FTER TAD WRTLP /START OF CHECKSUM TAD XUNIT SDLC /TURN ON WRITE HEAD MQL /ZERO TO CHECKSUM TAD K77 /0077 IN REV. CHECKSUM JMS W4LINE /GIVES 7700 CK:.NOT.EQU OF ALL WRTLP, TAD I XBUFF JMS W4LINE ISZ XBUFF /INCREMENT BUFF. ADD. K77, 77 /38MMSEC LOOP ISZ WORDS /DONE A BLOCK? JMP WRTLP JMS W4LINE /A 129 TH WORD OF 0 JMS GCHK /GET 6 BIT CHECKSUM AND K7700 JMS W4LINE /WRITE IT TO TAPE JMS W4LINE /LET CHECK SUM FINISH JMP I RDWRT /SEE IF WE ARE FINISHED TREAD, JMS R4LINE /LOCK MARK JMS R4LINE /END LOCK,START CHECKS. JMS R4LINE /SKIP CONTROL WORDS AND K77 /.NOT. CK MQL RDLP, JMS R4LINE DCA I XBUFF ISZ XBUFF TC300, 300 /39MMSEC LOOP ISZ WORDS /DONE BLOCK? JMP RDLP JMS R4LINE /CHECK SUM 129 TH WORD JMS R4LINE /READ CHECKS. AND HALF NONSNS AND K77 /.NOT.CK,ELIMINATES SECOND HALF JMS EFUN JMS GCHK /COMPARE TAPE AND OUR CHECKSUM JMP I RDWRT /80MMSEC TO SDST W4LINE, 0 /ADD TO CHECKSUM, WRITE A 12 BIT SDSQ /WORD JMP .-1 /SKIP ON QUAD LINE FLAG SDLD /25MMSEC SUB JMS EFUN JMP I W4LINE R4LINE, 0 /WAIT FOR QUAD FLAG AND READ SDSQ JMP .-1 SDRD /27MMSEC SUB JMS EFUN TAD ETMP JMP I R4LINE GCHK, 0 /FORM 6 BIT CHECKSUM MQA CLA BSW JMS EFUN /28MMSEC SUB MQA JMP I GCHK SELECT, 0 /THIS ROUTINE CHECKS FOR SELECT DCA XUNIT /INITIALIZES TAD XUNIT /AND CHECKS FOR ^C TYPED SDLC SDRD /5MMSEC SETTLE DCA XFUNCT SDRC /SEE IF SELECT ERROR ON AND C100 SNA CLA ISZ SELECT /NOPE .TAKE NORMAL OUT SELEX, SDRD RAR /INITIAL DIR. TO LNK C7600, 7600 /CLA JMP I SELECT C100, 100 CM32, -32 XFUNCT, 0 WORDS, 0 ETMP, 0 XUNIT, 0 CTCLN8, 0 /WAIT FOR 8 LINES AND CHECK CTRL/C JMS R4LINE JMS R4LINE JMP I CTCLN8 $$$$