File: SD8SY.PA of Tape: Various/System-Tapes/s5
(Source file text)
/SD8SY DECTAPE SYSTEM HANDLER /THIS HANDLER CAN DRIVE UNITS 0&1, AND IS PERMANENTLY /RESIDENT IN FIELDS 0&2. /THE HANDLER CAN BE USED WITH ION SYSTEMS AND WILL /TURN OFF THE INTERRUPT DURING READ/WRITES FOR AT /MOST 17MSECS AND WILL TURN IT ON IF INITIALLY ON /BLOCKS LARGER THAN 2047 GIVE IMMEDIATE FATAL ERROR /USR CALL TRAP IN FIELD 0 & 2;SAME CIF LOCS AS TD8E VERSION="E-300 /VERSION E: 23-OCT-78 (DTA0: NAMES) /W. VAN DER MARK, ETH, ZUERICH 10/28/74 SDSS=6771 SDST=6772 SDSQ=6773 SDLC=6774 SDLD=6775 SDRC=6776 SDRD=6777 *0 /DESCRIPTOR TABLE -3 /TWO HANDLERS + SYS DEVICE SD8E;DEVICE SYS;4210;6007;0;1341 DEVICE SD8E;DEVICE DTA0;4210;5007;0;1341 DEVICE SD8E;DEVICE DTA1;4210;5014;0;1341 -103 /# OF WORDS IN BOOT NOPUNC *7360 ENPUNC ZBLOCK 20 /INTERBLOCK ZONE LENGTH /(5*2)*3/2+1 /EXPLANATION: /THE TOGGLE BOOTSTRAP READS 4 WORDS OF NONSENSE /INTO 7354-7357;THEN 20 WORDS OF ZERO INTO 7360-7377 /'TDBOOT' IN 7400;NOW WE HAVE GAINED 20 WORDS SO THAT /WE CAN GO ON READING OVER THE INTERBLOCK ZONE AND /THE FIELD 0 RESIDENT PART WILL LOAD CORRECTLY INTO /7600-7777;FIELD 1 & 2 ARE LOADED FROM BLOCK 66 /THIS EXPLAINS WHY A 'TWO PAGE' RESIDENT HANDLER /CAN USE A MUCH LONGER BOOTSTRAP. /TD8E DECTAPE BOOTSTRAP RECORD TDBOOT, TAD K7600 /128 WORDS PER PAGE DCA TDWCT SDSS /WAIT FOR A BLOCK MARK (TAPE IS JMP .-1 /STILL MOVING) SDRC AND TD77 TAD KM26 /IS IT A BLOCK MARK? SZA CLA JMP TDBOOT+2 /NO..WAIT A WHILE LONGER SDRD /GET THE BLOCK NO. TDBKNO, TAD TDM154 /NEED BLOCKS 154&155 (REC.66) SZA CLA JMP TDBOOT+2 /NOT YET, BUSTER TDRGRD, SDSS JMP .-1 /LOOK FOR A REVERSE GUARD WORD SDRC AND TD77 TAD KM32 SZA CLA JMP TDRGRD /KEEP LOOKING FOR IT JMS TDRQD JMS TDRQD JMS TDRQD /SKIP CONTROL WORDS CDF 10 /LOAD UP FIELD 1 TDREAD, JMS TDRQD /GET A DATA WORD DCA I TDPTR ISZ TDPTR /ARE WE DONE? JMP TDREAD /NOT YET ISZ TDBKNO /YES..LOOK AT BLOCK 155 TAD KCDF20 DCA TDREAD-1 /LOAD UP FIELD 2 ISZ M2 /DONE THIS JUNK? JMP TDBOOT /GO DO FIELD 2 SDLC /STOP THE TAPE CIF CDF 0 JMP I K7605 TDM154, -154 -155 TDWCT, 7600 TDRQD, 0 SDSQ JMP .-1 SDRD JMP I TDRQD K7600, 7600 KM26, -26 KM32, -32 KCDF20, CDF 20 M2, -2 K7605, 7605 TD77, 77 TDPTR=TDWCT /FOLLOWING IS THE BOOTSTRAP FOR THE TD8E 12K SYSTEM / *7300 /7300 1312 K1000, TAD GET /PUT DRIVE IN REVERSE /7301 4312 JMS GET /LOOK FOR END ZONE /7302 4312 JMS GET /LOOK FOR 31 CODE /7303 6773 RD, SDSQ /NOW READ ALL INTO CORE /7304 5303 JMP .-1 /7305 6777 SDRD /READ 12 BIT WORD /7306 3726 DCA I WCT/AND PUT IT IN CORE /7307 2326 ISZ WCT /7310 5303 JMP RD /LOOP UNTIL FIELD 0 /7311 5732 JMP I STRT/IS LOADED, THEN START /7312 2000 GET, 2000 /7313 1300 TAD K1000/SET MOTION &DIRECTION /7314 6774 SDLC /7315 6771 BSRCH, SDSS /WAIT FOR 22 OR 31 CODE /7316 5315 JMP .-1 /22 IS END ZONE, 31 IS /7317 6776 SDRC /4 WORDS BEFORE DATA /7320 0331 AND K77 /IS THIS WHAT WE WANT? /7321 1327 TAD BM22/THIS GETS INCREMENTED /7322 7640 SZA CLA /IF YES, RETURN. /7323 5315 JMP BSRCH/NO.KEEP LOOKING. /7324 2321 ISZ .-3 /LOOK FOR NEXT IN LIST /7325 5712 JMP I GET /7326 7354 WCT, 7354/START LOADING CORE AT 7354 /7327 7756 BM22, -22/THE OTHER BOOTSTRAP GETS /7330 7747 -31/LOADED AT 7400. /7331 0077 K77, 77 /7332 7400 STRT, 7400 *200 NOPUNC *7600 ENPUNC ZBLOCK 7 SHNDLR, VERSION /UNIT 0 ENTRY POINT CLA CLL JMP SHND2 C3, 3 /FINGERPRINT FOR BUILD S70, 70 SDTA1, VERSION /UNIT 1 ENTRY CLA CLL CML SC1000, TAD SDTA1 /DOUBLES AS CONSTANT 1000 DCA SHNDLR /GET ARGS AT SHNDLR SHND2, RAR /UNIT # DCA SUNIT RDF /SETUP FOR EXIT TAD S6203 DCA EFLD TAD I SHNDLR /FUNCTION WORD SDLD /PUT IT IN DATA EGISTER AND S70 /SDLD DOES NOT 0 AC..GET FIELD TAD S6203 /CIF CDF N FOR TRANSFER FIELD DCA TFLD ISZ SHNDLR TAD I SHNDLR /BUFFER ADDRESS MQL ISZ SHNDLR TAD I SHNDLR /BLOCK #. TIMES 2 FOR REAL # ISZ SHNDLR /POINT TO ERROR EXIT SPA JMP SEREX IFNZRO .-7642 <CIFERR+=> CIF CDF 20 /BLOAD & FRTS LOAD SOME CIF CDF X CLL RAL /FRTS USES THIS LOC FOR DCA BLOCK /TD8E RECOGNITION CLA CLL CMA RTL DCA TRYCNT /3 ERROR TRIES TAD SUNIT JMP F2SET /TO FIELD 2 FOR INIT. KION, ION RGO, CLA CML RTR /LINK TO MOTION BIT TAD SC1000 TAD SUNIT SDLC /MOVE THE TAPE SDSQ JMP .-1 SDRD /KNOCK DOWN QUAD FLAG SDSQ JMP .-1 /DON'T CARE IF TIMING ERROR SRCH, CIF CDF 0 /SWITCH OFF INT. TILL NEXT JUMP SDSS /WAIT FOR A BLOCK MARK JMP SRCH SDRC /GET MARK TRACK BITS CLL RTL /DIRECTION TO LINK AND SC374 TAD SM110 /IS IT A N END ZONE? SNA /FORWARD:LNK=1 JMP SENDZ /YES TAD SM20 /MAYBE A BLOCK MARK? SZA CLA /FORWARD:LNK=0 JMP SRCH /NEITHER..KEEP GOING SM20, -20 /=SMA SZA SNL CLA - IT SKIPS ALWAYS IFNZRO .-7700 <USRERR+=> SC374, 374 /IF USR IS CALLED HERE - MASK GETS WIPED /OUT - SO WE RUN OUT OF TAPE OR HANG SDRD /READ THE BLOCK # SZL /IF REVERSE, LOOK 3 AHEAD TAD C3 CMA TAD BLOCK /CML IF TARGET.GT.READ BLK. CMA SZA /IS IT THE RIGHT ONE? JMP NOTFND /NO - GO CHECK LNK & SIGN SZL CLA /FORWARD:LNK=0 JMP RGO /WRONG DIRECTION SDRC /CLEAR FLAGS SDLC /CLEAR TIMING ERRORS TAD KION /LOAD 'ION' INSTR. SKON /IF INT.ON - TURN OFF AND SKIP IAC /=IOF TFLD, HLT /GETS CIF CDF N IFNZRO .-7721 <CIFERR+=>/BLOAD & FRTS LOAD CIF X CIF 20 /CARRY 'ION' OR 'IOF' IN AC JMP RDWT /LET'S TRANSFER DATA SEXIT, ISZ SHNDLR /NORMAL RETURN TAD SUNIT /STOP THE TAPE SDLC CML CLA RAR /EITHER 0 OR 4000 IN AC ON RETURN IFNZRO .-7727 <CIFERR+=> EFLD, HLT /BLOAD & FRTS LOAD CIF X - SO WHAT? JMP I SHNDLR SENDZ, CML IAC /FORWARD:LNK=0;IAC FOR SNA SM110, SNA SZL CLA /IF IN END ZONE FORWARD, ERROR JMP RGO /TURN AROUND AND SEARCH ERROR, ISZ TRYCNT /TRIED 3 TIMES? JMP RGO /LINK IS ZERO SEREX, CLL CLA JMP SEXIT+1 /FATAL RETURN NOTFND, SZL JMP SRCH /RIGHT DIRECTION ,GO ON RAL /IF TAR.GT.READ JMP RGO /FORCE FORWARD MOTION TRYCNT=7755 BLOCK=7754 SUNIT=SDTA1 S6203=SRCH *400 NOPUNC FIELD 2 *7600 ENPUNC EQUTMP, 0 /KEEP HERE! XPTR, 0 /BUFFER POINTER - KEEP HERE! BPTR, 0 /HARMLESS LOCS IN CASE OF ABSLDR SXFUN, 0 /ERROR (IT PERMITS FIELD 2 LOAD) GETCHK, 0 /GET SIXBIT CHECKSUM MQA CLA BSW /28MMSEC SUB JMS EQUFUN MQA JMP I GETCHK SXUNIT, 0 /IMPORTANT REGS PROTECTED BY JMPS F2SET, DCA SXUNIT /GET UNIT TO FIELD 2 TAD SXUNIT SDLC /MAKE SURE UNIT IS STOPPED MQA CLA DCA BPTR /SET INITIAL ADD. SDRD /FUNCTION WORD CLL RAL AND CX7600 /WRITE BIT IN LNK DCA XPGCT SDRD RAR /INITIAL DIRECTION TO LNK DCA SXFUN /SAVE THE WRITE BIT CIF CDF 0 JMP RGO XPGCT, 0 RDWT, DCA RWCOM /SAVE 'ION' OR 'IOF' TAD BPTR DCA XPTR REVGRD, SDSS /WAIT FOR REVERSE GUARD WORD JMP .-1 /18MMSEC TO HERE SDRC AND X77 TAD XM32 /IS IT REVERSE GUARD? SZA CLA JMP REVGRD /NO TAD CX7600 DCA XWCNT /128 WORDS PER BLOCK TAD SXFUN SK7700, SMA CLA /READ OR WRITE? JMP READ /READ CLL /LINK TO RWCOM SDRC /17MMSEC FROM LAST SDSS AND C300 /ERRORS ON WRITE LOCKOUT AND TIME SZA /KEEP AC ON FOR ERROR JMP RWCOM /LNK=0 - NO READ OR WRITE JMS RDQUAD /SKIP A WORD CLA MQL /ALSO 0 TO CHECKSUM TAD SXUNIT TAD WRLP SDLC /TURN ON THE WRITE TAD X77 JMS WRQUAD /WRITE 0077 IN REV. CHECKSUM WRLP, TAD I XPTR JMS WRQUAD /WRITE THE DATA ISZ XPTR /38MMSEC LOOP X77, 77 /JUST IN CASE ISZ XWCNT /DONE 128? JMP WRLP JMS WRQUAD /WRITE AND CHECKSUM A WORD OF 0 JMS GETCHK /GET CHECKSUM AND SK7700 JMS WRQUAD JMS WRQUAD /LET CHECKSUM GET WRITTEN IFNZRO .-7700 <USRERR+=> SKP CLA /27MMSEC TO SDST XM32, -32 /DOUBLES AS HLT RWCOM, IOF /OR 'ION' - NEXT WILL EXECUTE CIF CDF 0 SDST /CHECK FOR TIME AND CHECKSUM ERRS SZA CLA JMP ERROR /LNK=0 AT RWCOM TAD XPGCT /FINISHED TRANSFER? TAD CX7600 /TURNS LNK ON SNA JMP SEXIT /YES.GET OUT DCA XPGCT TAD BPTR TAD SC200 /NEW BUFFER ADRESS DCA BPTR ISZ I DBLOCK /NEXT TAPE BLOCK..CAN'T SKIP JMP RGO READ, JMS RDQUAD /SKIP CONTROL WORDS JMS RDQUAD JMS RDQUAD /GET CHECKSUM AND X77 /.NOT. CK MQL SRDLP, JMS RDQUAD DCA I XPTR ISZ XPTR C300, 300 /39MMSEC LOOP ISZ XWCNT /DONE ALL? JMP SRDLP /NO JMS RDQUAD /READ AND CHECKSUM LAST WORD JMS RDQUAD /GET CHECKSUM AND X77 /.NOT. CK JMS EQUFUN /AND RESET SECOND HALF JMS GETCHK /80MMSEC TO SDST JMP RWCOM XWCNT, 0 WRQUAD, 0 /WRITE A 12 BIT WORD SDSQ JMP .-1 SDLD /25MMSEC SUB JMS EQUFUN JMP I WRQUAD RDQUAD, 0 /READ A 12 BIT WORD SDSQ JMP .-1 SDRD /27MMSEC SUB JMS EQUFUN TAD EQUTMP JMP I RDQUAD EQUFUN, 0 /EQUIVALENCE CHECKSUM DCA EQUTMP /ORIGINAL WORD IS KEPT TAD EQUTMP /19MMSEC SUB MQA /X.OR.C CMA CLL /.NOT.(X.OR.C) - LINK TO RWCOM SWP /C IN AC-(.NOT.X).AND.(.NOT.C) IN MQ SC200, AND EQUTMP /X.AND.C MQA /(X.AND.C).OR.((.NOT.X).AND.(.NOT.C)) MQL /CLEAR AC AND RELOAD CHECKSUM JMP I EQUFUN CX7600, 7600 DBLOCK, BLOCK 0;0;0;0 /USED BY BATCH MONITOR $$$$