/4 TD8E HANDLER FOR BUILD..TD8E-A / / / / / / / / / /COPYRIGHT (C) 1974,1975,1977 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. / / / / / / / / / / *0 -2 DEVICE TD8A;DEVICE DTA0;4210;4010;ZBLOCK 2 DEVICE TD8A;DEVICE DTA1;4210;4014;ZBLOCK 2 SDSS=6771 /SKIP ON SINGLE LINE FLAG SDST=6772 /SKIP ON TIME ERROR SDSQ=6773 /SKIP ON QUAD LINE FLAG SDLC=6774 /LOAD TAPE COMMAND REGISTER SDLD=6775 /LOAD DATA REGISTER SDRC=6776 /READ COMMAND REGISTER SDRD=6777 /READ DATA REGISTER TDVERSION="D&77 /V3 CHANGES: /1. VERSION # IS NOW 1 /2. PARITY ^C IS NOW LEGAL /3. ^C CHECK NO LONGER WILL ADVANCE READER /MAINTENANCE RELEASE CHANGES: /4. FIXED ^C BUG /5. MADE CODE IMPROVEMENTS /6. FIXED RETRY BUG *200 NXINIT, 7600 /CLEAR AC HERE!!! JMS I CINIT2 /PART OF INITIALIZATION..DO THE PART BASE2, DCA JINIT /ON SECOND PAGE AND THEN TO JINIT JMP JINIT BUFF, 0 PGCT, 0 FUNCT, 0 C1000, 1000 DTA0, TDVERSION /ENTRY FOR UNIT 0 CLA CLL JMP DTA1X UNIT, 0 /FILLER WORD DTA1, TDVERSION /ENTRY FOR UNIT 1 CLA CLL CML TAD DTA1 DCA DTA0 /PICK UP ARGS AT DTA0 DTA1X, RAR DCA UNIT /UNIT # FROM LINK RDF TAD C6203 DCA LEAVE /SET UP EXIT FROM HANDLER TAD I DTA0 DCA FUNCT /SAVE FUNCTION WORD TAD FUNCT CLL RAL C200, AND CM200 /GET A PAGE COUNT DCA PGCT TAD FUNCT C374, AND C70 /ISOLATE FIELD OF TRANSFER TAD C6203 DCA XFIELD ISZ DTA0 /POINT TO BUFFER TAD I DTA0 DCA BUFF ISZ DTA0 /POINT TO RECORD TAD I DTA0 CLL RAL /CONVERT TO DECTAPE BLOCKS DCA TBLOCK ISZ DTA0 /POINT TO ERROR RET. C6203, CIF CDF 0 JINIT, JMP INIT /FIRST TIME THRU IT GETS EXECUTED /THE RETURN FROM INIT ZEROES IT CLA CLL CMA RTL DCA ERCNT /3 ERROR TRIES TAD UNIT DCA I CXUNIT JMS I CSELCT /CHECK FOR SELEC ERROR JMP .-1 /LOOPS IF NO ^C AND SELECT ERROR TAD FUNCT CLL RAR JMP GO /OK.. START THE SEARCH TRWCOM, SDST /TIME OR CHECK SUM ERROR? SZA CLA JMP TRY3 /YES TRY UP TO 3 TIMES TAD PGCT /NO.. IS PAGE COUNT EXHAUSTED? TAD CM200 SNA JMP EXIT /YES.. DONE THIS TRANSFER DCA PGCT /NEW PAGE COUNT ISZ TBLOCK TAD BUFF TAD C200 /GET NEW BUFFER ADDRESS DCA BUFF CLL CML /FORCE FORWARD MOTION GO, CLA CML RTR /PUT IN DIRECTION BIT TAD C1000 TAD UNIT SDLC /INITIATE THE MOTION JMS I CRDQAD /WAIT FOR 8 LINES TO PASS JMS I CRDQAD M20, 7760 /DON'T CARE IF IT DOES SKIP!!! TSRCH, SDSS /WAIT FOR BLOCK MARK OR END ZONE JMP .-1 SDRC CLL RTL /DIRECTION TO LINK, DATA TO AC 4-9 AND C374 /ISOLATE M.T BITS TAD M110 /IS IT END ZONE? SNA JMP ENDZ /YES..DO SOMETHING REASONABLE TAD M20 /HOW ABOUT BLOCK MARK? SZA CLA 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 TAD TBLOCK CMA SNA /IS THIS THE BLOCK? JMP TFOUND /YES..HAVE CORRECT ONE M110, SZL SNA CLA /ARE WE HEADED PROPERLY? JMP TSRCH /YES.. KEEP LOOKING ENDZ, SDRC /IF WE ARE IN END ZONE FORWARD, WE LOSE CLL RTL JMP GO /EXECUTE TURN AROUND AND SEARCH TRY3, CLA CLL /V3C ISZ ERCNT /TRIED 3 TIMES? JMP GO JMP FATAL EXIT, ISZ DTA0 /NORMAL RETURN CLL CML FATAL, TAD UNIT /STOP TAPE FIRST SDLC CLA CML RAR /EITHER 0 OR 4000 IN AC LEAVE, HLT /GETS CIF CDF N JMP I DTA0 INIT, JMS . /FIND OUT WHERE WE GOT LOADED BASE, TAD CRDQAD SPA /NEGATIVE ENDS LIST JMP NXINIT TAD INIT DCA CRDQAD ISZ .-1 ISZ BASE JMP BASE CRDQAD, R4LINE-BASE CINIT2, INIT2-BASE CSELCT, SELECT-BASE CXUNIT, XUNIT-BASE *367 TFOUND, SZL CLA /ARE WE IN RIGHT DIRECTION JMP GO /NOT YET TAD FUNCT CLL RAL /R/W TO LINK CLA C70, 70 TC3, 3 TAD BUFF XFIELD, HLT /CONTROL 'TRICKLES THROUGH TBLOCK=DTA1 ERCNT=INIT+1 CM200=NXINIT DTA2=DTA0 DTA3=DTA1 DTA4=DTA0 DTA5=DTA1 DTA6=DTA0 DTA7=DTA1 *400 CIF 0 /WE ARE IN FIELD 0 DCA XBUFF RAR DCA XFUNCT /READ/WRITE TO FUNCTION RGRD, SDSS JMP .-1 /LOOK FOR REVERSE GUARD PATTERN SDRC 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 /IS IT READ OR WRITE? JMP TREAD SDRC /CHECK FOR WRITE LOCKOUT AND TC300 CLL /SETUP TO RETRY IF WRITE LOCK SZA CLA JMP I CTRY3 /IF LOCKED OUT, ERROR JMS R4LINE /SKIP A WORD C7600, 7600 /CLA TAD C1400 TAD XUNIT SDLC /TURN ON WRITE HEAD CLA CMA JMS W4LINE /7777 IN REV. CHECKSUM CLA CMA DCA CSUM /AND ALSO TAPE CHECKSUM WRTLP, TAD I XBUFF JMS W4LINE ISZ XBUFF /INCREMENT BUFF. ADD. K77, 77 ISZ WORDS /DONE A BLOCK? JMP WRTLP JMS W4LINE /A 129 TH WORD OF 0 JMS GCHK /GET 6 BIT CHECKSUM JMS W4LINE /WRITE IT TO TAPE JMS W4LINE /LET CHECK SUM FINISH JMP I CRWCOM /SEE IF WE ARE FINISHED TREAD, JMS R4LINE JMS R4LINE /SKIP CONTROL WORDS JMS R4LINE AND K77 /CHECKSUM TAD K7700 DCA CSUM RDLP, JMS R4LINE JMS EFUN /ADD WORD TO CHECKSUM DCA I XBUFF ISZ XBUFF TC300, 300 ISZ WORDS /DONE BLOCK? JMP RDLP JMS R4LINE JMS EFUN /CHECK SUM 129 TH WORD JMS R4LINE AND K7700 /READ CHECKSUM JMS EFUN JMS GCHK /COMPARE TAPE AND OUR CHECKSUM JMP I CRWCOM W4LINE, 0 /ADD TO CHECKSUM AND WRITE A 12 BIT JMS EFUN /WORD SDSQ JMP .-1 /SKIP ON QUAD LINE FLAG SDLD CLA /AC IS NOT CLEARED AFTER SDLD JMP I W4LINE R4LINE, 0 /WAIT FOR QUAD FLAG AND READ SDSQ JMP .-1 SDRD JMP I R4LINE EFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM CMA DCA ETMP /ACTUALLY CHECKSUMS ON DECTAPE ARE TAD ETMP /EQUIVALENCE OF ALL WORDS IN A RCORD AND CSUM /6 BITS AT A TIME. SINCE EQUIVALENCE CIA /IS ASSOCIATIVE WE DO IT 12 AT A TIME CLL RAL /AND CONDENSE LATER. TAD ETMP /IDENTITIES USED ARE: TAD CSUM /A+B=(A.XOR.B)+2*(A.AND.B) DCA CSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) TAD ETMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) CMA JMP I EFUN GCHK, 0 /FORM 6 BIT CHECKSUM CLA TAD CSUM CLL CMA RTL RTL RTL JMS EFUN CLA CLL CML TAD CSUM AND K7700 JMP I GCHK INIT2, 0 /TIS INITIALIZES LOCS IN PAGE 2 INIT3, TAD CTRY3 SNA JMP I INIT2 /0 ENDS LIST TAD INIT2 DCA CTRY3 /UPDATE THE LIST ISZ .-1 ISZ INIT3 JMP INIT3 CTRY3, TRY3-BASE2 CRWCOM, TRWCOM-BASE2 XBUFF, 0 /0 MUST TERMINATE IT!! CM32, -32 C1400, 1400 SELECT, 0 /THIS ROUTINE CHECKS FOR SELECT TAD XUNIT /AND ^C TYPED SDLC SDRC /GET STATUS AND SEE IF SELECT ERROR ON AND C100 SNA CLA ISZ SELECT /NOPE .TAKE NORMAL OUT KSF /SEE IF FLAG IS UP JMP I SELECT /NO..EXIT TAD C7600 KRS TAD (-7603 /IS IT A ^C? SZA CLA JMP I SELECT /NO..EXIT JMP I C7600 C100, 100 XFUNCT=INIT2 CSUM=XFUNCT+1 WORDS=CSUM+1 ETMP=WORDS+1 XUNIT=ETMP+1 $$$$$$$