File: DMPTD8.LS of Tape: Original/Originals/dta02
(Source file text)
/TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 1 /TD8E Dectape DUMP Program / / This program will send a Dectape image out the console port. / The format of the data sent is 0xff (0377) or 0xfd if read error / followed by 128 word of data for each block. / After the last block a 0xfe (0376) is sent / with a two byte checksum, low 8 bits first then upper 4. / The words in a block are sent as three bytes for each 2 words. / Like this: (WvdM) / +--------------------+ / ! byte1 ! byte2h ! / +--------------------+ / ! byte2l ! byte 3 ! / +--------------------+ / / 1 = low 8 bits first word (was like this WvdM) / 2 = upper 4 bits first and lower 4 bits second / 3 = upper 8 bits second word / / The program (PC) receiving the data should be started before this program / / To run start at 0200. / SR 11 should be drive, only 0 and 1 supported without reassembling / SR 6-8 should be maximum memory field in computer, needs 8k minimum / The receiving program should be running first. / At normal exit hitting cont will restart the program / / Should halt at label finish (140) with number of recoverable errors in AC / The current block being read will be displayed in the AC / while running. / / If a unrecoverable error occurs the program will halt with the error in / the AC. Hit continue to dump more or comment out hlt, search for *****. / The PC program will print out the bad location if an error occurs / / We will retry each read up to 16 times on error / / This transfers the standard 129 word by 1474 blocks used by OS/8 etc. / Other formats can be handled by changing constants below 0030 INAD=030 / Address of serial input, 30 for console 6030 KCF2=6000 INAD 6031 KSF2=6001 INAD 6032 KCC2=6002 INAD 6034 KRS2=6004 INAD 6035 KIE2=6005 INAD 6036 KRB2=6006 INAD 0040 OUTAD=040 / Address of serial output, 40 for console 6040 TFL2=6000 OUTAD 6041 TSF2=6001 OUTAD 6042 TCF2=6002 OUTAD 6044 TPC2=6004 OUTAD 6045 TSK2=6005 OUTAD 6046 TLS2=6006 OUTAD /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 1-1 /2 TD8E INITIALIZER PROGRAM, V7A / /COPYRIGHT (C) 1975, 1977 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / / /ABSTRACT-- / THE ROUTINE DESCRIBED AND LISTED HERE IS A GENERAL /DATA HANDLER FOR THE TD8E DECTAPE SYSTEM. THE ROUTINE /CONTAINS SEARCH, READ, AND WRITE FUNCTIONS IN A FORMAT /WHICH IS COMPATIBLE WITH OS/8 DEVICE HANDLER CALLING /SEQUENCES. /THIS ROUTINE CAN BE RE-EDITED AND ASSEMBLED TO PRODUCE /VARIATIONS ON THE BASIC TD8E SYSTEM. ASSEMBLY PARAMETERS /CONTROL: /A) WHAT DRIVES (UNITS 0-7) WILL BE USED /B) THE ORIGIN OF THE TWO PAGE ROUTINE /C) WHAT MEMORY FIELD THE ROUTINE WILL RUN IN /D) THE SIZE OF THE DECTAPE BLOCK TO BE READ/WRITTEN /FOLLOWING ARE THE PARAMETERS SET UP FOR THE STANDARD /DEC VERSION OF THIS ROUTINE: 0010 DRIVE=10 /UNITS 0 AND 1 SELECTED 0600 ORIGIN=600 /ENTER AT ORIGIN, ORIGIN+4 0000 AFIELD=0 /INITIAL FIELD SETTING 0000 MFIELD=00 /AFIELD*10=MFIELD 0201 WDSBLK=201 /129 WORDS PER BLOCK /THE USE OF THE PARAMETERS IS AS FOLLOWS: / DRIVE: DRIVE DETERMINES WHICH UNITS WILL BE SELECTED / DRIVE=10 IMPLIES UNITS 0 &1 / DRIVE=20 IMPLIES UNITS 2&3 / DRIVE=30 IMPLIES UNITS 4&5 / DRIVE=40 IMPLIES UNITS 6&7 /ORIGIN: ALTERING ORIGIN CAUSES ASSEMBLY IN A DIFFERENT / MEMORY LOCATION. WHEN CHANGING ORIGIN KEEP IN MIND /THAT THIS IS A TWO PAGE ROUTINE. /AFIELD: AFIELD DETERMINES THE INITIAL FIELD SETTING FOR THE / LOADER. PERMISSIBLE VALUES FOR AFIELD ARE 0 TO 7. /MFIELD: MFIELD IS USED IN A CIF CDF MFIELD INSTRUCTION. / THE VALUE INSERTED FOR MFIELD SHOULD BE 10(8) TIMES / THE VALUE FOR AFIELD. THE PERMISSIBLE VALUES ARE 00-70. /WDSBLK: WDSBLK GOVERNS HOW MANY WORDS THE ROUTINE THINKS ARE / IN A DECTAPE BLOCK. THE STANDARD VALUE IS 201(8) OR / 129 DECIMAL. NOTE THAT THE FUNCTION WORD BIT 10 CAN / BE USED TO SUBTRACT ONE FROM WDSBLK. THE VALUE USED / FOR WDSBLK SHOULD BE THE NUMBER OF WORDS THE TAPE WAS /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 1-2 / FORMATTED TO CONTAIN. /IF WE WANT A HANDLER FOR UNITS 2&3 TO RESIDE IN /FIELD 2 AT LOCATION 3000 AND READ/WRITE 256(10) WORDS /PER BLOCK, THE PARAMETERS WOULD BE: / DRIVE=20 / ORIGIN=3000 / AFIELD=2 / MFIELD=20 / WDSBLK=400 / /THE CALL TO THE SUBROUTINE FOLLOWS BASICALLY THE /CALLING SEQUENCE FOR OS/8 DEVICE HANDLERS. /THE CALLING SEQUENCE IS: / CDF CURRENT / CIF MFIELD /MFIELD=FIELD ASSEMBLED IN / JMS ENTRY /ENTRY=ORIGIN (EVEN NUMBERED DRIVE /AND ORIGIN+4 FOR ODD NUMBERED DRIVE. / ARG1A / ARG1B (DJG) / ARG2 / ARG3 / ERROR RETURN / NORMAL RETURN /THE ARGUMENTS ARE: /ARG1A: FUNCTION WORD BIT0: 0=READ, 1=WRITE / BITS 1-5: UNUSED, WAS # BLOCKS IN OPERATION (DJG) / BITS 6-8: FIELD OF BUFFER AREA / BIT 9: UNUSED / BIT 10: # OF WORDS/BLOCK. / 0= WDSBLK, 1=WDSBLK-1 / BIT 11: 1=START FORWARD, 0=REVERSE /ARG1B: # OF BLOCKS IN OPERATION (DJG) /ARG2: BUFFER ADDRESS FOR OPERATION /ARG3: STARTING BLOCK FOR OPERATION /ERRORS: THE HANDLER DETECTS TWO TYPES OF ERRORS: /A) FATAL ERRORS- PARITY ERROR, TIMING ERROR, / TOO GREAT A BLOCK NUMBER / FATAL ERRORS TAKE ERROR RETURN WITH THE / AC=4000. /B) NON-FATAL- SELECT ERROR. / IF NO PROPER UNIT IS SELECTED, THE ERROR / RETURN IS TAKEN WITH CLEAR AC. /FATAL ERRORS TRY THREE TIMES BEFORE TAKING ERROR RETURN. /THE NORMAL RETURN IS TAKEN AFTER ALL INDICATED /BLOCKS HAVE BEEN TRANSFERRED. THE AC IS CLEAR. /THE TD8E IOT'S ARE: 6771 SDSS=7001-DRIVE /SKIP ON SINGLE LINE FLAG 6772 SDST=7002-DRIVE /SKIP ON TIMING ERROR 6773 SDSQ=7003-DRIVE /SKIP ON QUAD LINE FLAG /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 1-3 6774 SDLC=7004-DRIVE /LOAD COMMAND REGISTER 6775 SDLD=7005-DRIVE /LOAD DATA REGISTER 6776 SDRC=7006-DRIVE /READ COMMAND REGISTER 6777 SDRD=7007-DRIVE /READ DATA REGISTER /THE IOT'S IN GENERAL ARE 677X,676X,675X,AND 674X. /THE OTHERS CONTROL UNITS 2-7. / THIS HANDLER USES DECTAPE BLOCKS NOT OS/8 BLOCKS ! 0600 *ORIGIN / MODIFIED SO BIT 0 ON ENTRY IS UNIT 1 00600 0000 DTA0, 0 00601 3355 DCA UNIT /SAVE UNIT POSITION 00602 6214 RDF 00603 1351 TAD C6203 /GET DATA FIELD AND SETUP RETURN 00604 3347 DCA LEAVE 00605 1600 TAD I DTA0 /GET FUNCTION WORD 00606 6775 SDLD /PUT FUNCTION INTO DATA REGISTER 00607 7112 CLL RTR /AC STILL HAS FUNCTION. PUT # WORDS PER /BLOCK INTO LINK 00610 7630 SZL CLA /KNOCK ONE OFF WDSBLK? 00611 7001 IAC /YES 00612 1022 TAD MWORDS 00613 3023 DCA WCOUNT /STORE MASTER WORD COUNT 00614 2200 ISZ DTA0 /TO BLOCK COUNT (DJG) 00615 1600 TAD I DTA0 / (DJG) 00616 7041 CIA / (DJG) 00617 3360 DCA PGCT / (DJG) 00620 2200 ISZ DTA0 /TO BUFFER 00621 1600 TAD I DTA0 00622 3044 DCA XBUFF /SAVE ADDRESS (DJG) / DCA BUFF 00623 2200 ISZ DTA0 /TO BLOCK NUMBER 00624 1600 TAD I DTA0 00625 3046 DCA BLOCK 00626 2200 ISZ DTA0 /POINT TO ERROR EXIT 00627 6203 CIF CDF MFIELD /TO ROUTINES DATA FIELD / SDRD /GET FUNCTION INTO AC / CLL RAL / AND CM200 /GET # PAGES TO XFER / DCA PGCT 00630 6777 SDRD 00631 0376 AND C70 /GET FIELD FOR XFER 00632 1352 TAD C6201 /FORM CDF N 00633 3253 DCA XFIELD /IF=0 AND DF=N AT XFER. 00634 1355 TAD UNIT /TEST FOR SELECT ERROR 00635 6774 SDLC 00636 7200 CLA / Moved here because my drive 1 is slow selecting 00637 1020 TAD RETRY 00640 3363 DCA TRYCNT /3 ERROR TRIES 00641 6776 SDRC 00642 0362 AND C100 00643 7640 SZA CLA /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 1-4 00644 5343 JMP FATAL-1 00645 6777 SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. 00646 3756 DCA I CXFUN 00647 1023 TAD WCOUNT 00650 3761 DCA I CXWCT 00651 6777 SDRD /GET MOTION BIT TO LINK 00652 7110 CLL RAR 00653 7402 XFIELD, HLT /INTO NEXT PAGE 00654 5265 JMP GO /AND START THE MOTION. 00655 6772 RWCOM, SDST /ANY CHECKSUM ERRORS? 00656 7640 SZA CLA /OR CHECKSUM ERRORS? 00657 5333 JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS /SET AT RWCOM. GETCHK SETS IT. / TAD PGCT /NO ERROR..FINISHED XFER? / TAD CM200 / SNA 00660 2360 ISZ PGCT / (DJG) 00661 7410 SKP / (DJG) 00662 5342 JMP EXIT /ALL DONE. GET OUT / DCA PGCT /NEW PAGE COUNT 00663 2046 ISZ BLOCK /NEXT BLOCK TO XFER / TAD WCOUNT /FORM NEXT BUFFER ADDRESS / CIA / TAD BUFF / DCA XBUFF /SAVE ADDRESS (DJG) / DCA BUFF / (DJG) 00664 7120 CLL CML /FORCES MOTION FORWARD 00665 7232 GO, CLA CML RTR /LINK BECOMES MOTION BIT 00666 1364 TAD C1000 00667 1355 TAD UNIT /PUT IN 'GO' AND UNIT # 00670 6774 SDLC /LOOK FOR BLOCK NO. 00671 7200 CLA 00672 1044 TAD XBUFF 00673 3043 DCA OLDBUF 00674 6214 RDF 00675 1352 TAD C6201 00676 3334 DCA OLDFLD 00677 4753 JMS I CRDQUD /WAIT AT LEAST 6 LINES TO LOOK 00700 4753 JMS I CRDQUD 00701 7600 CM200, 7600 /COULD HAVE SAVED A LOC. HERE 00702 6771 SRCH, SDSS 00703 5302 JMP .-1 /WAIT FOR SINGLE LINE FLAG 00704 6776 SDRC 00705 7106 CLL RTL /DIRECTION TO LINK. INFO BITS /ARE SHIFTED. 00706 0045 AND C374 /ISOLATE MARK TRACK BITS 00707 1325 TAD M110 /IS IT END ZONE? 00710 7450 SNA /THE LINK STAYS SAME THRU THIS 00711 5327 JMP ENDZ 00712 1357 TAD M20 /CHECK FOR BLOCK MARK 00713 7640 SZA CLA 00714 5302 JMP SRCH 00715 6777 SDRD /GET THE BLOCK NUMBER 00716 7430 SZL /IF WE ARE IN REVERSE, LOOK FOR 3 /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 1-5 /BLOCKS BEFORE TARGET BLOCK. THIS /ALLOWS TURNAROUND AND UP TO SPEED. 00717 1377 TAD C3 /REVERSE 00720 7040 CMA 00721 1046 TAD BLOCK 00722 7040 CMA /IS IT RIGHT BLOCK? 00723 7450 SNA 00724 5372 JMP FOUND /YES..HOORAY! 00725 7670 M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? /ABOVE SNA IS SUPERFLUOUS. 00726 5302 JMP SRCH /YES 00727 6776 ENDZ, SDRC /WE ARE IN THE END ZONE 00730 7106 CLL RTL /DIRECTION TO LINK 00731 7200 CLA /ARE WE IN REVERSE? 00732 5265 JMP GO /YES..TURN US AROUND /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR 00733 7200 TRY3, CLA 00734 7000 OLDFLD, NOP 00735 1043 TAD OLDBUF 00736 3044 DCA XBUFF 00737 2363 ISZ TRYCNT 00740 5265 JMP GO /TRY 3 TIMES 00741 5344 JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN 00742 2200 EXIT, ISZ DTA0 00743 7120 CLL CML /AC=0 ON NORMAL RETURN 00744 1355 FATAL, TAD UNIT 00745 6774 SDLC /STOP THE UNIT 00746 7230 CLA CML RAR 00747 7402 LEAVE, HLT 00750 5600 JMP I DTA0 /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 2 00751 6203 C6203, 6203 00752 6201 C6201, 6201 00753 1126 CRDQUD, RDQUAD /WCOUNT, 0 (MOVED PAGE 0 DJG) 00754 0000 BUFF, 0 /MWORDS, -WDSBLK (MOVED PAGE 0 DJG) 00755 0000 UNIT, 0 00756 1166 CXFUN, XFUNCT 00757 7760 M20, -20 00760 0000 PGCT, 0 /TOTAL PAGES TO TRANSFER 00761 1173 CXWCT, XWCT 00762 0100 C100, 100 00763 7775 TRYCNT, -3 00764 1000 C1000, 1000 0772 *ORIGIN+172 00772 7630 FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? 00773 5265 JMP GO /WRONG..TURN AROUND 00774 1355 TAD UNIT /PUT UNIT INTO LINK 00775 7104 CLL RAL /AC IS NOW 0 00776 0070 C70, 70 /********DON'T MOVE THIS!!!!****** 00777 0003 C3, 3 / TAD BUFF /GET BUFFER ADDRESS (DJG) /XFIELD, HLT /INTO NEXT PAGE /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 3 1000 *ORIGIN+200 01000 6202 CIF MFIELD / DCA XBUFF /SAVE ADDRESS (DJG) 01001 7010 RAR /NOW GET UNIT # 01002 3333 DCA XUNIT 01003 6776 SDRC 01004 6774 SDLC 01005 6771 REVGRD, SDSS 01006 5205 JMP .-1 /LOOK FOR REVERSE GUARD 01007 6776 SDRC 01010 0261 AND K77 01011 1367 TAD CM32 /IS IT REVERSE GUARD? 01012 7640 SZA CLA 01013 5205 JMP REVGRD /NO.KEEP LOOKING 01014 1373 TAD XWCT 01015 3372 DCA WORDS /WORD COUNTER 01016 1366 TAD XFUNCT /GET FUNCTION READ OR WRITE 01017 7700 K7700, SMA CLA 01020 5262 JMP READ /NEG. IS WRITE 01021 6776 WRITE, SDRC 01022 0316 AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR 01023 7120 CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS 01024 7640 SZA CLA 01025 5764 JMP I CFATAL /FATAL ERROR. LINK MUST BE ON 01026 4326 JMS RDQUAD /NO ONE EVER USES THIS WORD! 01027 7600 C7600, 7600 01030 1370 TAD C1400 01031 1333 TAD XUNIT /INITIATE WRITE MODE 01032 6774 SDLC 01033 7240 CLA CMA 01034 4317 JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM 01035 7240 CLA CMA 01036 3371 DCA CHKSUM 01037 1444 WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE! 01040 4317 JMS WRQUAD 01041 2044 ISZ XBUFF /BUMP CORE POINTER 01042 5247 JMP STFLD1+1 /NOT AT END OF FIELD (DJG) 01043 6214 RDF 01044 1377 TAD (6211 01045 3246 DCA STFLD1 01046 7000 STFLD1, NOP 01047 2372 ISZ WORDS /DONE THIS BLOCK? 01050 5237 JMP WRLP /NOT YET..LOOP A WHILE 01051 1366 TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? 01052 7112 CLL RTR /IF NO, WRITE A 0 WORD 01053 7630 SZL CLA 01054 4317 JMS WRQUAD /WRITE A WORD OF 0 01055 4350 JMS GETCHK /DO THE CHECK SUM 01056 4317 JMS WRQUAD /WRITE FORWARD CHECKSUM 01057 4317 JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN 01060 5765 JMP I CRWCOM 01061 0077 K77, 77 /ABOVE MAY SKIP (NOT ANYMORE DJG) /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 4 01062 4326 READ, JMS RDQUAD 01063 4326 JMS RDQUAD 01064 4326 JMS RDQUAD /SKIP CONTROL WORDS 01065 0261 AND K77 01066 1217 TAD K7700 /TACK 7700 ONTO CHECKSUM. 01067 3371 DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY 01070 4326 RDLP, JMS RDQUAD 01071 4333 JMS EQUFUN /COMPUT CHECKSUM AS WE GO 01072 3444 DCA I XBUFF /IT GETS CONDENSED LATER 01073 2044 ISZ XBUFF /AT END OF FIELD? 01074 5301 JMP STFLD2+1 /NOT AT END OF FIELD (DJG) 01075 6214 RDF 01076 1377 TAD (6211 01077 3300 DCA STFLD2 01100 7000 STFLD2, NOP 01101 2372 ISZ WORDS /DONE THIS OP? 01102 5270 JMP RDLP /NO SUCH LUCK 01103 1366 TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND 01104 7112 CLL RTR /CHECKSUM THE LAST TAPE WORD 01105 7620 SNL CLA 01106 5311 JMP RDLP2 01107 4326 JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK 01110 4333 JMS EQUFUN /CHECKSUM IT 01111 4326 RDLP2, JMS RDQUAD /READ CHECKSUM 01112 0217 AND K7700 01113 4333 JMS EQUFUN 01114 4350 JMS GETCHK /GET SIX BIT CHECKSUM 01115 5765 JMP I CRWCOM 01116 0300 C300, 300 /PROTECTION (NOT ANYMORE DJG) 01117 0000 WRQUAD, 0 /WRITE OUT A 12 BIT WORD 01120 4333 JMS EQUFUN /ADD THIS TO CHECKSUM 01121 6773 SDSQ /SKIP ON QUADLINE FLAG 01122 5321 JMP .-1 01123 6775 SDLD /LOAD DATA ONTO BUS 01124 7200 CLA /SDLD DOESN'T CLEAR AC 01125 5717 JMP I WRQUAD 01126 0000 RDQUAD, 0 /READ A 12 BIT WORD 01127 6773 SDSQ 01130 5327 JMP .-1 01131 6777 SDRD /READ DATA 01132 5726 JMP I RDQUAD /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 5 XUNIT, 01133 0000 EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM 01134 7040 CMA 01135 3374 DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE 01136 1374 TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD 01137 0371 AND CHKSUM /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE 01140 7041 CIA /IS ASSOCIATIVE, WE CAN DO IT 12 01141 7104 CLL RAL /BITS AT A TIME AND CONDENSE LATER. 01142 1374 TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: 01143 1371 TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) 01144 3371 DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) 01145 1374 TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) 01146 7040 CMA 01147 5733 JMP I EQUFUN 01150 0000 GETCHK, 0 /FORM 6 BIT CHECKSUM 01151 7200 CLA 01152 1371 TAD CHKSUM 01153 7040 CMA 01154 7106 CLL RTL 01155 7006 RTL 01156 7006 RTL 01157 4333 JMS EQUFUN 01160 7320 CLA CLL CML /FORCES LINK ON AT RWCOM 01161 1371 TAD CHKSUM 01162 0217 AND K7700 01163 5750 JMP I GETCHK 01164 0744 CFATAL, FATAL 01165 0655 CRWCOM, RWCOM 01166 0000 XFUNCT, 0 / FUNCTION SET IN FIRST PAGE 01167 7746 CM32, -32 01170 1400 C1400, 1400 01171 0000 CHKSUM, 0 01172 0000 WORDS, 0 01173 0000 XWCT, 0 01174 0000 EQUTMP, 0 01177 6211 0020 *20 00020 7774 RETRY, 7774 / RETRY UP TO 4 TIME 00021 2702 NUMBLK, 2702 / NUMBER OF BLOCKS 00022 7577 MWORDS, -WDSBLK / WORDS PER BLOCK 00023 0000 WCOUNT, 0 / MASTER WORD COUNT 00024 0037 BLKFLD, 37 / 31 129 word blocks per field / WRAPPING PAST END OF LAST FIELD DOESN'T WORK 00025 0000 FIELDS, 0 00026 0000 RDSIZE, 0 / NUMBER BLOCKS PER READ 00027 0000 CBLOCK, 0 / CURRENT BLOCK TO XFER 00030 0000 CLKSUM, 0 00031 0000 DRVSEL, 0 00032 0377 READST, 377 00033 0000 LOC, 0 00034 0000 LEN, 0 00035 0000 BCNT, 0 / BLOCKS TO SEND TO PC /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 5-1 00036 0000 TEMP, 0 00037 0017 C17, 17 00040 0360 C360, 360 00041 0000 CHKSM, 0 00042 0000 ERRCN2, 0 00043 0000 OLDBUF, 0 / USED BY DTA0 ROUTINE 00044 0000 XBUFF, 0 / USED BY DTA0 ROUTINE 00045 0374 C374, 374 / USED BY DTA0 ROUTINE 00046 0000 BLOCK, 0 / USED BY DTA0 ROUTINE 0140 *140 00140 7402 FINISH, HLT / Normal good halt 00141 5777' JMP START 0200 *200 00200 6201 START, CDF 0 00201 6007 CAF 00202 7704 CLA CLL OSR / Get drive 00203 0377 AND (1 00204 7012 RTR 00205 3031 DCA DRVSEL 00206 7704 CLA CLL OSR / Get max field 00207 7012 RTR 00210 7010 RAR 00211 0376 AND (7 00212 7450 SNA 00213 7402 HLT / Must have at least 1 field for buffer 00214 7041 CIA 00215 3025 DCA FIELDS 00216 3042 DCA ERRCN2 00217 1024 RDSZLP, TAD BLKFLD / Multiply by number of fields available 00220 2025 ISZ FIELDS 00221 5217 JMP RDSZLP 00222 3026 DCA RDSIZE / NUMBER BLOCK PER READ 00223 3027 DCA CBLOCK 00224 3041 DCA CHKSM 00225 7200 DUMPLP, CLA 00226 1026 TAD RDSIZE 00227 1027 TAD CBLOCK 00230 7041 CIA 00231 1021 TAD NUMBLK / MORE BLOCKS LEFT THAN READSIZE? 00232 7500 SMA / NO, READ NUMBER LEFT 00233 7200 CLA / YES, ONLY READ RDSIZE 00234 1026 TAD RDSIZE 00235 7450 SNA / ANY MORE BLOCKS? 00236 5267 JMP DONE / NO, DO FINISH STUFF 00237 3245 DCA ARGSZ 00240 1027 TAD CBLOCK 00241 3247 DCA ARGBK 00242 1031 TAD DRVSEL 00243 4775' JMS DTA0 00244 0010 0010 / READ STARTING IN FIELD 1 00245 0000 ARGSZ, 0 00246 0000 0 /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 5-2 00247 0000 ARGBK, 0 00250 5321 JMP ERRRET 00251 1374 TAD (377 / All blocks good 00252 3032 DCA READST / Send data, each block starts with FF 00253 7300 CLA CLL / then 2 12 bit words in 3 bytes 00254 3033 DCA LOC / ERRRET DUPLICATES SOME OF THIS 00255 1245 TAD ARGSZ 00256 7041 CIA 00257 3035 DCA BCNT / Setup loop counter with number blocks read 00260 6211 CDF 10 00261 4773' OUTBL1, JMS OUTBLK / Send a block 00262 2027 ISZ CBLOCK 00263 2035 ISZ BCNT / Send all read? 00264 5261 JMP OUTBL1 / No 00265 6201 CDF 0 00266 5225 JMP DUMPLP / Go read next batch 00267 7200 DONE, CLA / Send FE and -checksum of all words 00270 1372 TAD (376 00271 4771' JMS PUN 00272 7300 CLA CLL 00273 1041 TAD CHKSM / Send checksum in two bytes, low bits first 00274 7041 CIA 00275 4771' JMS PUN 00276 7300 CLA CLL 00277 1041 TAD CHKSM 00300 7041 CIA 00301 7012 RTR 00302 7012 RTR 00303 7012 RTR 00304 7012 RTR 00305 0037 AND C17 00306 4771' JMS PUN 00307 7200 CLA 00310 1031 TAD DRVSEL 00311 4775' JMS DTA0 / REWIND TAPE 00312 0010 0010 00313 0001 1 00314 0000 0 00315 0000 0 00316 7000 NOP 00317 1042 TAD ERRCN2 / Leave AC with # of errors 00320 5140 JMP FINISH /SEND GOOD BLOCKS READ WITH GOOD BLOCK FLAG /THEN BAD WITH BAD BLOCK FLAG. ERRRET, / HLT / ****** If we want to stop on error 00321 6211 CDF 10 00322 7300 CLA CLL 00323 3033 DCA LOC 00324 1027 TAD CBLOCK 00325 7041 CIA /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 5-3 00326 1046 TAD BLOCK /Get - number good blocks read 00327 7041 CIA /Last was bad 00330 7450 SNA 00331 5341 JMP FSTBAD /First block is bad, no good to send 00332 3035 DCA BCNT 00333 1374 TAD (377 00334 3032 DCA READST 00335 4773' OUTBL2, JMS OUTBLK /Send good blocks 00336 2027 ISZ CBLOCK 00337 2035 ISZ BCNT 00340 5335 JMP OUTBL2 00341 1370 FSTBAD, TAD (375 /NOW SEND BAD BLOCK 00342 3032 DCA READST 00343 4773' JMS OUTBLK 00344 2027 ISZ CBLOCK 00345 2042 ISZ ERRCN2 00346 6201 CDF 0 00347 5225 JMP DUMPLP /And read from here on 00370 0375 00371 0466 00372 0376 00373 0400 00374 0377 00375 0600 00376 0007 00377 0001 0400 PAGE 00400 0000 OUTBLK, 0 /Send a block of data out serial port 00401 7200 CLA 00402 1023 TAD WCOUNT 00403 3034 DCA LEN 00404 1032 TAD READST /Send good/bad flag 00405 4266 JMS PUN 00406 7300 OUT, CLA CLL 00407 1433 TAD I LOC 00410 1041 TAD CHKSM / Keep checksum of all words sent 00411 3041 DCA CHKSM 00412 1433 TAD I LOC / Send 2 words as 3 bytes 00413 7112 CLL RTR / WvdM: Left 8 Bits first 00414 7012 RTR / WvdM: 00415 4266 JMS PUN 00416 7300 CLA CLL 00417 1433 TAD I LOC / RTR / Shift top 4 bits to low 4 / RTR / RTR / RTR 00420 0037 AND C17 00421 7106 CLL RTL / WvdM: Low 4 Bits to high byte 2 00422 7006 RTL / WvdM 00423 3036 DCA TEMP 00424 2033 ISZ LOC 00425 5232 JMP STFLD3+1 /NOT AT END OF FIELD (DJG) 00426 6214 RDF /At end, inc to next field /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 5-4 00427 1377 TAD (6211 /BUILD CDF 00430 3231 DCA STFLD3 00431 7000 STFLD3, NOP 00432 2034 ISZ LEN /END IF BUFFER? 00433 7410 SKP /NO 00434 5263 JMP ENDBK /YES 00435 1433 TAD I LOC 00436 1041 TAD CHKSM 00437 3041 DCA CHKSM 00440 1433 TAD I LOC 00441 7106 CLL RTL 00442 7006 RTL 00443 7004 RAL / New: High 4 bits to low byte 2 00444 0037 AND C17 / (WvdM) was AND C360 00445 1036 TAD TEMP 00446 4266 JMS PUN 00447 7300 CLA CLL 00450 1433 TAD I LOC / RTR / WvdM: byte 3 / RTR 00451 4266 JMS PUN 00452 2033 ISZ LOC 00453 5260 JMP STFLD4+1 /NOT AT END OF FIELD (DJG) 00454 6214 RDF 00455 1377 TAD (6211 /BUILD CDF 00456 3257 DCA STFLD4 00457 7000 STFLD4, NOP 00460 2034 ISZ LEN 00461 5206 JMP OUT 00462 5600 JMP I OUTBLK 00463 1036 ENDBK, TAD TEMP /SEND LAST PART OF WORD 00464 4266 JMS PUN 00465 5600 JMP I OUTBLK 00466 0000 PUN, 0 / Send byte out serial port 00467 6026 PLS / Punch for testing with emulator / TLS2 / Send out console 00470 7300 CLA CLL 00471 1027 TAD CBLOCK 00472 6021 PSF / TSF2 /Wait until character sent 00473 5272 JMP .-1 00474 7200 CLA 00475 5666 JMP I PUN 00577 6211 $ 00177 0200 /TD8E Dectape DUMP Program PAL8-V10A 06-AUG-77 PAGE 6 AFIELD 0000 KSF2 6031 WDSBLK 0201 ARGBK 0247 K77 1061 WORDS 1172 ARGSZ 0245 K7700 1017 WRITE 1021 BCNT 0035 LEAVE 0747 WRLP 1037 BLKFLD 0024 LEN 0034 WRQUAD 1117 BLOCK 0046 LOC 0033 XBUFF 0044 BUFF 0754 MFIELD 0000 XFIELD 0653 CBLOCK 0027 MWORDS 0022 XFUNCT 1166 CFATAL 1164 M110 0725 XUNIT 1133 CHKSM 0041 M20 0757 XWCT 1173 CHKSUM 1171 NUMBLK 0021 CLKSUM 0030 OLDBUF 0043 CM200 0701 OLDFLD 0734 CM32 1167 ORIGIN 0600 CRDQUD 0753 OUT 0406 CRWCOM 1165 OUTAD 0040 CXFUN 0756 OUTBLK 0400 CXWCT 0761 OUTBL1 0261 C100 0762 OUTBL2 0335 C1000 0764 PGCT 0760 C1400 1170 PUN 0466 C17 0037 RDLP 1070 C3 0777 RDLP2 1111 C300 1116 RDQUAD 1126 C360 0040 RDSIZE 0026 C374 0045 RDSZLP 0217 C6201 0752 READ 1062 C6203 0751 READST 0032 C70 0776 RETRY 0020 C7600 1027 REVGRD 1005 DONE 0267 RWCOM 0655 DRIVE 0010 SDLC 6774 DRVSEL 0031 SDLD 6775 DTA0 0600 SDRC 6776 DUMPLP 0225 SDRD 6777 ENDBK 0463 SDSQ 6773 ENDZ 0727 SDSS 6771 EQUFUN 1133 SDST 6772 EQUTMP 1174 SRCH 0702 ERRCN2 0042 START 0200 ERRRET 0321 STFLD1 1046 EXIT 0742 STFLD2 1100 FATAL 0744 STFLD3 0431 FIELDS 0025 STFLD4 0457 FINISH 0140 TCF2 6042 FOUND 0772 TEMP 0036 FSTBAD 0341 TFL2 6040 GETCHK 1150 TLS2 6046 GO 0665 TPC2 6044 INAD 0030 TRYCNT 0763 KCC2 6032 TRY3 0733 KCF2 6030 TSF2 6041 KIE2 6035 TSK2 6045 KRB2 6036 UNIT 0755 KRS2 6034 WCOUNT 0023 ERRORS DETECTED: 0 LINKS GENERATED: 9