/DECTAPE COPY PROGRAM. /COPIES AND/OR COMPARES /TWO DECTAPES. /BY JOHN WILSON 09-MAR-84. *0 JMP 200 /LEAVE PAGE 0 CLEAR *200 CLA TAD HEADER SAS JMP .-2 /PRINT HDR & 1ST PROMPT JMS GETNUM /GET SOURCE UNIT # TAD UNIT1 /SET UP FOR READ DCA UNIT1 TAD PRMPT2 SAS JMP .-2 /PRINT 2ND PROMPT JMS GETNUM /GET DEST. UNIT # TAD UNIT2R /(READ) DCA UNIT2R /SAVE IT TAD UNIT2R /GET WORD BACK TAD UNIT2W /CONVERT TO WRITE DCA UNIT2W /SAVE IT TAD PRMPT3 SAS /COPY OR COMPARE? JMP .-2 JMS GETNUM /GET RESPONSE DCA COPFLG /REMEMBER IT /NOW WE'RE READY TO START LOOP, CLA TAD KUNIT1 DTXA /READ A RECORD DTSF /WAIT UNTIL DONE NOP DTRB /GET FLAGS AND K7776 /CLEAR DT FLAG SZA JMP I ERR /PRINT ERROR, DIE TAD COPFLG /WRITE TO DEST UNIT? SZA /YES JMP NOCOPY TAD UNIT2W /WRITE, UNIT 2 DCA UNIT2 TAD KBUF1 DCA UNIT2+2 /WRITE BUFFER #1 TAD KUNIT2 DTXA /WRITE THE RECORD DTSF NOP DTRB /GET FLAGS AND K7776 SZA /CONT IF NO ERROR JMP I ERR TAD KBUF2 DCA UNIT2+2 /NEXT READ GOES TO BUFFER #2 NOCOPY, CLA TAD UNIT2R DCA UNIT2 TAD KUNIT2 DTXA /READ THE RECORD DTSF /WAIT UNTIL DONE NOP DTRB /GET FLAGS AND K7776 SZA JMP I ERR JMS I COMP /COMPARE THE TWO RECORDS ISZ UNIT1+1 ISZ UNIT2+1 TAD UNIT2+1 TAD M2703 /DONE THE WHOLE TAPE? SZA /YES JMP LOOP HLT /EXIT / HEADER, STR1 PRMPT2, STR2 PRMPT3, STR3 UNIT1, 20 1 BUFF1-1 UNIT2, 0 1 BUFF2-1 KUNIT1, UNIT1 KUNIT2, UNIT2 UNIT2R, 20 UNIT2W, 20 KBUF1, BUFF1-1 KBUF2, BUFF2-1 K7776, 7776 M2703, -2703 COPFLG, 0 ERR, ERROR COMP, CMPARE / GETNUM, 0 CLA TAD M2 DCA KB+1 TAD KKB DCA KB+2 TAD KB KSR /READ 2 CHARS TAD LF TLS /PRINT LF CLA TAD KB+3 /GET CHAR RTR /ROTATE 9-11 INTO 0-2 RTR AND K7000 /CLEAR OTHER BITS JMP I GETNUM / M2, -2 K7000, 7000 KB, .+1 0 0 0 0 KKB, KB+2 LF, 212 / PAGE CMPARE, 0 TAD CKBUF1 DCA PTR1 /POINT AT BUFFER #1 TAD CKBUF2 DCA PTR2 /POINT AT BUFFER #2 TAD M201 /LENGTH OF RECORD DCA CTR CPLOOP, TAD I PTR1 /GET A WORD CIA /NEGATE IT TAD I PTR2 /ADD IN CORRESPONDING WORD SZA /SKIP IF EQUAL JMP NOTEQU /PRINT ERROR COMP1, ISZ PTR1 /INC PTRS ISZ PTR2 ISZ CTR /INC CTR JMP CPLOOP /LOOP IF NOT DONE JMP I CMPARE /RETURN NOTEQU, CLA TAD KERR1 /PT. AT MESSAGE JMS TYPE TAD I BLOCK /GET BLOCK # JMS PROCT /PRINT IT TAD KERR2 JMS TYPE TAD CTR /GET WORD # TAD K202 /CONVERT JMS PROCT /PRINT IT TAD KERR3 JMS TYPE TAD I PTR1 JMS PROCT /PRINT SOURCE WORD TAD KERR4 JMS TYPE TAD I PTR2 JMS PROCT /PRINT DEST. WORD TAD CRLF JMS TYPE /PRINT CR/LF JMP COMP1 /GO CHECK NEXT WORD / CKBUF1, BUFF1 CKBUF2, BUFF2 PTR1, 0 PTR2, 0 CTR, 0 M201, -201 K202, 202 BLOCK, UNIT1+1 /POINTS AT CURRENT BLOCK KERR1, ERR1 /POINTERS TO ERROR MESSAGES KERR2, ERR2 KERR3, ERR3 KERR4, ERR4 CRLF, ERR5 / TYPE, 0 DCA TPTR /SAVE PTR TLOOP, TAD I TPTR /GET A CHAR SNA JMP I TYPE /RETURN IF 0 TLS /PRINT THE CHAR CLA ISZ TPTR /POINT AT NEXT CHAR JMP TLOOP /LOOP UNTIL 0 / TPTR, 0 / PROCT, 0 DCA PROCT1 /SAVE THE NUMBER TAD PROCT1 RTL RTL JMS DIGIT /1ST DIGIT TAD PROCT1 RTR RTR RTR JMS DIGIT /2ND DIGIT TAD PROCT1 RTR RAR JMS DIGIT /3RD DIGIT TAD PROCT1 JMS DIGIT /4TH DIGIT JMP I PROCT /RETURN / DIGIT, 0 AND K7 /MASK OUT AC0-AC8 TAD K260 /CONVERT TO ASCII TLS CLA JMP I DIGIT / PROCT1, 0 K7, 7 K260, "0 / ERROR, DCA PROCT1 /SAVE STATUS REG. TAD DTERR JMS TYPE /PRINT 'DECTAPE ERROR: ' TAD PROCT1 /GET ST. REG. B JMS PROCT /PRINT IT TAD CRLF /POINT AT CR/LF JMS TYPE /PRINT IT HLT /DIE / DTERR, ERR6 / PAGE STR1, -31 . "D "E "C "T "A "P "E " "C "O "P "Y 215 212 "F "R "O "M " "U "N "I "T "? " STR2, -11 . "T "O " "U "N "I "T "? " STR3, -36 . "C "O "P "Y " "( "0 ") " "O "R " "C "O "M "P "A "R "E " "O "N "L "Y " "( "1 ") "? " ERR1, "* "* " "B "L "O "C "K " 0 ERR2, ", " "W "O "R "D " 0 ERR3, ": " "E "X "P "E "C "T "E "D " 0 ERR4, ", " "F "O "U "N "D " 0 ERR5, 215 212 0 ERR6, "D "E "C "T "A "P "E " "E "R "R "O "R ": " 0 / BUFF1=. BUFF2=.+201 / $