AFIELD 0000ABS ARGAD 0200 ARG1 0253 ARG2 0254 ARG3 0255 BLOKK 0424 BUFF 0403 CFATAL 0600 CHKSUM 0605 CM200 0524 CM32 0603 CRDQUD 0401 CRWCOM 0601 CXFUN 0406 CXWCT 0411 C100 0412 C1000 0423 C1400 0604 C3 0415 C300 0700 C374 0416 C6201 0400 C70 0414 C7600 0640 DCAI 3400OP DOIT 0251 DRIVE 0010ABS DTA0 0420 DTA1 0424 DTA1X 0430 ENDZ 0552 EQUFUN 0732 EQUTMP 0611 EROR 0261 EXIT 0562 FATAL 0564 FOUND 0571 GETARG 0202 GETCHK 0747 GO 0516 GTCDF1 0203 GTCDF2 0212 HANDT 0201 HANDTD 0262 JMPI 5400OP JMSI 4400OP K77 0653 K7700 0630 LEAVE 0567 MFIELD 0000ABS MWORDS 0404 M110 0550 M20 0407 PGCT 0410 RDLP 0674 RDLP2 0711 RDQUAD 0725 READ 0666 REVGRD 0620 RTAP9 0300EXT RWCOM 0500 SDLC 6774OP SDLD 6775OP SDRC 6776OP SDRD 6777OP SDSQ 6773OP SDSS 6771OP SDST 6772OP SRCH 0525 TADI 1400OP THEART 0215 TRYCNT 0413 TRY3 0556 UNIT 0405 WCOUNT 0402 WDSBLK 0201ABS WORDS 0606 WRITE 0632 WRLP 0650 WRQUAD 0716 WRQUQ 0720 WTAP9 0263EXT WTPRS 0266 XBUFF 0607 XFIELD 0612 XFUNCT 0602 XUNIT 0732 XWCT 0610 XXFELD 0417 / SPECIAL TD8E DEVICE HANDLER. / MODIFIED RTAPE AND WTAPE TO HANDLE 129 WORDS / PER BLOCK. OCCUPIES THREE PAGES AND HAS CALLING / SEQUENCE AS FOLLOWS: / CALL WTAPE(IUNIT,IBLOCK,IWORDS,IBUF,IER) 0010 ABSYM DRIVE 0010 /UNITS 0 AND 1 SELECTED ABSYM AFIELD 0000 /INITIAL FIELD SETTING ABSYM MFIELD 0000 /AFIELD*10=MFIELD 0201 ABSYM WDSBLK 0201 /129 WORDS PER BLOCK 6771 OPDEF SDSS 6771 /SKIP ON SINGLE LINE FLAG 6772 OPDEF SDST 6772 /SKIP ON TIMING ERROR 6773 OPDEF SDSQ 6773 /SKIP ON QUAD LINE FLAG 6774 OPDEF SDLC 6774 /LOAD COMMAND REGISTER 6775 OPDEF SDLD 6775 /LOAD DATA REGISTER 6776 OPDEF SDRC 6776 /READ COMMAND REGISTER 6777 OPDEF SDRD 6777 /READ DATA REGISTER 1400 OPDEF TADI 1400 3400 OPDEF DCAI 3400 5400 OPDEF JMPI 5400 4400 OPDEF JMSI 4400 LAP / RTAPE,WTAPE SECTION OF THE HANDLER. ENTRY RTAP9 /READ TAPE ENTRY ENTRY WTAP9 /WRITE TAPE ENTRY /PARAMETER UNPACKING ROUTINE.... 0200 0000 ARGAD, 0 0201 0000 HANDT, 0 0202 0000 GETARG, 0 /GETS NEXT ARGUMENT IN FORTRAN /GENERATED PARAMETER STRING 0203 7402 GTCDF1, HLT /REPLACED BY CDF 0204 1664 TADI WTAP9# /GET PARAM DATA FIELD 0205 3212 DCA GTCDF2 0206 2264 INC WTAP9# /BUMP LIST ADDRESS 0207 1664 TADI WTAP9# /GET PARAMETER ADDRESS 0210 3200 DCA ARGAD /SAVE FOR INDIRECT (OR ARRAY) 0211 2264 INC WTAP9# 0212 7402 GTCDF2, HLT /REPLACED BY CDF 0213 1600 TADI ARGAD /PASS VALUE IN ACC 0214 5602 JMPI GETARG /EXIT QUIETLY.... /GENERAL DECODING AND PROCESSING (COMMON) DONE HERE. 0215 0000 THEART, 0 0216 4202 JMS GETARG /GET THE UNIT NUMBER 0217 0377 AND (1 /MUST BE 0 OR 1, SO.... 0220 7110 CLL RAR /FORCE TO ZERO OR ONE. 0221 1262 TAD HANDTD /COMPUTE THE ENTRY POINT TO /THE SYSTEM HANDLER ROUTINE. 0222 7430 SZL /DTA0 OR DTA1....? 0223 1376 TAD (4 0224 3201 DCA HANDT 0225 4202 JMS GETARG /GET THE BLOCK NUMBER. 0226 7510 SPA /IF NEGATIVE VALUED THEN SET 0227 2253 ISZ ARG1 /FLAG IN THE FUNCTION WORD 0230 7510 SPA /TO START THE SEARCH IN THE 0231 7041 CIA /FORWARD DIRECTION. 0232 3255 DCA ARG3 /BLOCK NUMBER = ARG3 0233 4202 JMS GETARG /GET THE NUMBER OF WORDS 0234 0375 AND (3700 /CONVERT TO NUMBER OF BLOCKS 0235 7110 CLL RAR 0236 1253 TAD ARG1 /MASK INTO THE FUNCTION WORD 0237 3253 DCA ARG1 0240 4202 JMS GETARG /FINALLY GET THE BUFFER 0241 7200 CLA 0242 1212 TAD GTCDF2 /MASK THE DATA FIELD INTO THE 0243 0374 AND (0070 /FUNCTION WORD. 0244 1253 TAD ARG1 0245 3253 DCA ARG1 0246 1200 TAD ARGAD /AND SET UP THE BUFFER ADDRESS 0247 3254 DCA ARG2 0250 3261 DCA EROR / NOW CALL THE SYSTEM HANDLER.... 0251 6201 05 DOIT, JMS I HANDT 0252 4601 0253 0000 ARG1, 0 /FUNCTION WORD 0254 0000 ARG2, 0 /BUFFER ADDRESS 0255 0000 ARG3, 0 /BLOCK NUMBER 0256 3261 DCA EROR /ERROR EXIT 0257 6201 05 JMP I THEART /SEEMS RATHER PAINLESS.... 0260 5615 0261 0000 EROR, 0 0262 0420 01 HANDTD, DTA0 / ENTRY POINT FOR WRITE FUNCTION (WTAP9) 0263 0000 WTAP9, BLOCK 2 0264 0000 0265 7130 CLL CML RAR /SET WRITE FLAG 0266 3253 WTPRS, DCA ARG1 /INTO FUNCTION WORD 0267 1263 TAD WTAP9 /SET UP DATA FIELD CHANGE 0270 3203 DCA GTCDF1 /FOR GETTING PARAMETERS 0271 4215 JMS THEART /GO DO IT.... 0272 4202 JMS GETARG /PASS BACK ERROR STSTUS 0273 7200 CLA 0274 1261 TAD EROR 0275 3600 DCAI ARGAD 0276 4040 RETRN WTAP9 0277 0002 06 / ENTRY POINT FOR READ FUNCTION (RTAP9) 0300 0000 RTAP9, BLOCK 2 0301 0000 0302 1300 TAD RTAP9 /MOVE CALLING SEQ TO WTAPE 0303 3263 DCA WTAP9 0304 1301 TAD RTAP9# 0305 3264 DCA WTAP9# /ONLY DIFFERENCE IS THAT THE 0306 5266 JMP WTPRS /FUNCTION FLAG IS FOR READ. 0374 0070 0375 3700 0376 0004 0377 0001 PAGE / HERE STARTS THE RELOCATABLE VERSION OF THE TWO / PAGE TD8E HANDLER ROUTINE. 0400 6201 C6201, 6201 0401 0725 01 CRDQUD, RDQUAD 0402 0000 WCOUNT, 0 0403 0000 BUFF, 0 0404 7577 MWORDS, 7577 0405 0000 UNIT, 0 0406 0602 01 CXFUN, XFUNCT 0407 7760 M20, -20 0410 0000 PGCT, 0 0411 0610 01 CXWCT, XWCT 0412 0100 C100, 100 0413 7775 TRYCNT, -3 0414 0070 C70, 70 0415 0003 C3, 3 0416 0374 C374, 374 0417 0612 01 XXFELD, XFIELD 0420 0000 DTA0, 0 /ENTRY POINT FROM UNIT 0 0421 7300 CLA CLL /0 TO LINK 0422 5230 JMP DTA1X 0423 1000 C1000, 1000 BLOKK, 0424 0000 DTA1, 0 /UNIT 2 ENTRY 0425 7320 CLA CLL CML /1 TO LINK 0426 1224 TAD DTA1 0427 3220 DCA DTA0 /PICK UP ARGS AT DTA0 0430 7010 DTA1X, RAR 0431 3205 DCA UNIT /LINK TO UNIT POSITION 0432 1620 TADI DTA0 /GET FUNCTION WORD 0433 6775 SDLD /PUT FUNCTION INTO DATA REGISTER 0434 7112 CLL RTR /AC STILL HAS FUNCTION. PUT # WORDS PER /BLOCK INTO LINK 0435 7630 SZL CLA /KNOCK ONE OFF WDSBLK? 0436 7001 IAC /YES 0437 1204 TAD MWORDS 0440 3202 DCA WCOUNT /STORE MASTER WORD COUNT 0441 2220 ISZ DTA0 /TO BUFFER 0442 1620 TADI DTA0 0443 3203 DCA BUFF 0444 2220 ISZ DTA0 /TO BLOCK NUMBER 0445 1620 TADI DTA0 0446 3224 DCA BLOKK 0447 2220 ISZ DTA0 /POINT TO ERROR EXIT 0450 6777 SDRD /GET FUNCTION INTO AC 0451 7104 CLL RAL 0452 0324 AND CM200 /GET # PAGES TO XFER 0453 3210 DCA PGCT 0454 6777 SDRD 0455 0214 AND C70 /GET FIELD FOR XFER 0456 1200 TAD C6201 /FORM CDF N 0457 6201 05 DCA I XXFELD /IF=0 AND DF=N AT XFER. 0460 3617 0461 7346 CLA CLL CMA RTL 0462 3213 DCA TRYCNT /3 ERROR TRIES 0463 1205 TAD UNIT /TEST FOR SELECT ERROR 0464 6774 SDLC 0465 6776 SDRC 0466 0212 AND C100 0467 7640 SZA CLA 0470 5363 JMP EXIT# 0471 6777 SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. 0472 3606 DCAI CXFUN 0473 1202 TAD WCOUNT 0474 3611 DCAI CXWCT 0475 6777 SDRD /GET MOTION BIT TO LINK 0476 7110 CLL RAR 0477 5316 JMP GO /AND START THE MOTION. 0500 6772 RWCOM, SDST /ANY CHECKSUM ERRORS? 0501 7640 SZA CLA /OR CHECKSUM ERRORS? 0502 5356 JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS /SET AT RWCOM. GETCHK SETS IT. 0503 1210 TAD PGCT /NO ERROR..FINISHED XFER? 0504 1324 TAD CM200 0505 7450 SNA 0506 5362 JMP EXIT /ALL DONE. GET OUT 0507 3210 DCA PGCT /NEW PAGE COUNT 0510 2224 ISZ BLOKK /NEXT BLOCK TO XFER 0511 1202 TAD WCOUNT /FORM NEXT BUFFER ADDRESS 0512 7041 CIA 0513 1203 TAD BUFF 0514 3203 DCA BUFF 0515 7120 CLL CML /FORCES MOTION FORWARD 0516 7232 GO, CLA CML RTR /LINK BECOMES MOTION BIT 0517 1223 TAD C1000 0520 1205 TAD UNIT /PUT IN 'GO' AND UNIT # 0521 6774 SDLC /LOOK FOR BLOCK NO. 0522 4601 JMSI CRDQUD /WAIT AT LEAST 6 LINES TO LOOK 0523 4601 JMSI CRDQUD 0524 7600 CM200, 7600 /COULD HAVE SAVED A LOC. HERE 0525 6771 SRCH, SDSS 0526 5325 JMP SRCH /WAIT FOR SINGLE LINE FLAG 0527 6776 SDRC 0530 7106 CLL RTL /DIRECTION TO LINK. INFO BITS /ARE SHIFTED. 0531 0216 AND C374 /ISOLATE MARK TRACK BITS 0532 1350 TAD M110 /IS IT END ZONE? 0533 7450 SNA /THE LINK STAYS SAME THRU THIS 0534 5352 JMP ENDZ 0535 1207 TAD M20 /CHECK FOR BLOCK MARK 0536 7640 SZA CLA 0537 5325 JMP SRCH 0540 6777 SDRD /GET THE BLOCK NUMBER 0541 7430 SZL /IF WE ARE IN REVERSE, LOOK FOR 3 /BLOCKS BEFORE TARGET BLOCK. THIS /ALLOWS TURNAROUND AND UP TO SPEED. 0542 1215 TAD C3 /REVERSE 0543 7040 CMA 0544 1224 TAD BLOKK 0545 7040 CMA /IS IT RIGHT BLOCK? 0546 7450 SNA 0547 5371 JMP FOUND /YES..HOORAY! 0550 7670 M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? /ABOVE SNA IS SUPERFLUOUS. 0551 5325 JMP SRCH /YES 0552 6776 ENDZ, SDRC /WE ARE IN THE END ZONE 0553 7106 CLL RTL /DIRECTION TO LINK 0554 7630 SZL CLA /ARE WE IN REVERSE? 0555 5316 JMP GO /YES..TURN US AROUND /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR 0556 2213 TRY3, ISZ TRYCNT 0557 5316 JMP GO /TRY 3 TIMES 0560 7300 CLL CLA 0561 5364 JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN 0562 2220 EXIT, ISZ DTA0 0563 7120 CLL CML /AC=0 ON NORMAL RETURN 0564 1205 FATAL, TAD UNIT 0565 6774 SDLC /STOP THE UNIT 0566 7230 CLA CML RAR 0567 6201 05 LEAVE, JMP I DTA0 0570 5620 0571 7630 FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? 0572 5316 JMP GO /WRONG..TURN AROUND 0573 1205 TAD UNIT /PUT UNIT INTO LINK 0574 7104 CLL RAL /AC IS NOW 0 0575 1203 TAD BUFF /GET BUFFER ADDRESS 0576 5617 JMPI XXFELD PAGE 0600 0564 01 CFATAL, FATAL 0601 0500 01 CRWCOM, RWCOM 0602 0000 XFUNCT, 0 0603 7746 CM32, -32 0604 1400 C1400, 1400 0605 0000 CHKSUM, 0 0606 0000 WORDS, 0 0607 0000 XBUFF, 0 0610 0000 XWCT, 0 0611 0000 EQUTMP, 0 0612 7402 XFIELD, HLT /CHANGE THE DATA FIELD 0613 3207 DCA XBUFF /SAVE ADDRESS 0614 7010 RAR /NOW GET UNIT # 0615 3332 DCA XUNIT 0616 1210 TAD XWCT 0617 3206 DCA WORDS /WORD COUNTER 0620 6771 REVGRD, SDSS 0621 5220 JMP REVGRD /LOOK FOR REVERSE GUARD 0622 6776 SDRC 0623 0253 AND K77 0624 1203 TAD CM32 /IS IT REVERSE GUARD? 0625 7640 SZA CLA 0626 5220 JMP REVGRD /NO.KEEP LOOKING 0627 1202 TAD XFUNCT /GET FUNCTION READ OR WRITE 0630 7700 K7700, SMA CLA 0631 5266 JMP READ /NEG. IS WRITE 0632 6776 WRITE, SDRC 0633 0300 AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR 0634 7120 CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS 0635 7640 SZA CLA 0636 5600 JMPI CFATAL /FATAL ERROR. LINK MUST BE ON 0637 4325 JMS RDQUAD /NO ONE EVER USES THIS WORD! 0640 7600 C7600, 7600 0641 1204 TAD C1400 0642 1332 TAD XUNIT /INITIATE WRITE MODE 0643 6774 SDLC 0644 7240 CLA CMA 0645 4316 JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM 0646 7240 CLA CMA 0647 3205 DCA CHKSUM 0650 1607 WRLP, TADI XBUFF /GLORY BE! THE ACTUAL WRITE! 0651 4316 JMS WRQUAD 0652 2207 ISZ XBUFF /BUMP CORE POINTER 0653 0077 K77, 77 /ABOVE MAY SKIP 0654 2206 ISZ WORDS /DONE THIS BLOCK? 0655 5250 JMP WRLP /NOT YET..LOOP A WHILE 0656 1202 TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? 0657 7112 CLL RTR /IF NO, WRITE A 0 WORD 0660 7630 SZL CLA 0661 4316 JMS WRQUAD /WRITE A WORD OF 0 0662 4347 JMS GETCHK /DO THE CHECK SUM 0663 4316 JMS WRQUAD /WRITE FORWARD CHECKSUM 0664 4316 JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN 0665 5601 JMPI CRWCOM 0666 4325 READ, JMS RDQUAD 0667 4325 JMS RDQUAD 0670 4325 JMS RDQUAD /SKIP CONTROL WORDS 0671 0253 AND K77 0672 1230 TAD K7700 /TACK 7700 ONTO CHECKSUM. 0673 3205 DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY 0674 4325 RDLP, JMS RDQUAD 0675 4332 JMS EQUFUN /COMPUT CHECKSUM AS WE GO 0676 3607 DCAI XBUFF /IT GETS CONDENSED LATER 0677 2207 ISZ XBUFF 0700 0300 C300, 300 /PROTECTION 0701 2206 ISZ WORDS /DONE THIS OP? 0702 5274 JMP RDLP /NO SUCH LUCK 0703 1202 TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND 0704 7112 CLL RTR /CHECKSUM THE LAST TAPE WORD 0705 7620 SNL CLA 0706 5311 JMP RDLP2 0707 4325 JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK 0710 4332 JMS EQUFUN /CHECKSUM IT 0711 4325 RDLP2, JMS RDQUAD /READ CHECKSUM 0712 0230 AND K7700 0713 4332 JMS EQUFUN 0714 4347 JMS GETCHK /GET SIX BIT CHECKSUM 0715 5601 JMPI CRWCOM 0716 0000 WRQUAD, 0 /WRITE OUT A 12 BIT WORD 0717 4332 JMS EQUFUN /ADD THIS TO CHECKSUM 0720 6773 WRQUQ, SDSQ /SKIP ON QUADLINE FLAG 0721 5320 JMP WRQUQ 0722 6775 SDLD /LOAD DATA ONTO BUS 0723 7200 CLA /SDLD DOESN'T CLEAR AC 0724 5716 JMPI WRQUAD 0725 0000 RDQUAD, 0 /READ A 12 BIT WORD 0726 6773 SDSQ 0727 5326 JMP RDQUAD# 0730 6777 SDRD /READ DATA 0731 5725 JMPI RDQUAD XUNIT, 0732 0000 EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM 0733 7040 CMA 0734 3211 DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE 0735 1211 TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD 0736 0205 AND CHKSUM /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE 0737 7041 CIA /IS ASSOCIATIVE, WE CAN DO IT 12 0740 7104 CLL RAL /BITS AT A TIME AND CONDENSE LATER. 0741 1211 TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: 0742 1205 TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) 0743 3205 DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) 0744 1211 TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) 0745 7040 CMA 0746 5732 JMPI EQUFUN 0747 0000 GETCHK, 0 /FORM 6 BIT CHECKSUM 0750 7200 CLA 0751 1205 TAD CHKSUM 0752 7040 CMA 0753 7106 CLL RTL 0754 7006 RTL 0755 7006 RTL 0756 4332 JMS EQUFUN 0757 7320 CLA CLL CML /FORCES LINK ON AT RWCOM 0760 1205 TAD CHKSUM 0761 0230 AND K7700 0762 5747 JMPI GETCHK END