/PROGRAM TO TEST A DECTAPE. /READS AND WRITES 1 AND 0 ON /EVERY BIT ON THE TAPE. /BY JOHN WILSON 24-JUN-84. *0 /PRINT HEADER JMS TYPE /PRINT "DECTAPE TEST" HEADER TAD (202 /KB BRK IS ^J,^K,^L,^M,^[ KSB  /SET KB BREAK TAD (BEG /SET ^C VECTOR SRA JMP I (BEG /GO START PATERN, 0 /CURRENT PATTERN (EITHER 2525 OR 5252) *10 POINT1, 0 /AUTOINDEXING PTRS POINT2, 0 POINT3, 0 *20 DTA, .+1 /DT: CTRL BLOCK 0 0 0 UNIT, 0 /READ COMMAND FOR THIS DTA PASS, 0 /PASS COUNTER (2 PASSES) PASS1, 0 /MINOR PASS COUNTER (8. PASSES PER FULL PASS) /FOR EACH PATTERN, 8. PASSES ARE MADE OVER THE TAPE, EACH TESTING ONLY /EVERY 8TH BLOCK. THE REASON FOR THIS IS THAT, SINCE TSS/8 ONLY MAINTAINS /BUFFERS FOR ONE BLOCK PER TRANSPORT, IT IS NOT POSSIBLE TO READ OR WRITE /CONSECUTIVE BLOCKS WITHOUT STOPPING THE MOTOR AND REWINDING A LITTLE, /SINCE THE TC08 MUST BE WARNED IN ADVANCE THAT THERE IS GOING TO BE A /MULTI-BLOCK TRANSFER. 8 IS THE SMALLEST BLOCK SPACING WITH WHICH NO /MOTOR STOP IS NECESSARY, SO THE PROGRAM SKIPS 8 BLOCKS BETWEEN BLOCKS, /AND COMES BACK AND DOES THE BLOCKS IN BETWEEN LATER. THIS ISN'T REALLY /SO HACKISH, COPY AND PUTR DO THIS TOO. COUNT, 0 /LOOP COUNTER (READ/VERIFY BLOCKS) COUNT1, 0 /LOOP COUNTER FOR VERIFY ERRORS, 0 /ERROR COUNT / ERROR, 0 /PRINT ERROR MESSAGE JMS TYPE /PRINT "ERROR IN BLOCK " ERRM1 TAD DTA+2 /GET BLOCK # JMS PROCT /PRINT IT JMS TYPE /PRINT ", WORD " ERRM2 TAD POINT1 /GET PTR TAD (-BUFF1 /SUBTRACT BASE JMS PROCT /PRINT IT JMS TYPE /PRINT ": EXPECTED " ERRM3 CMA  /GET WORD EXPECTED TAD POINT1 /(DEC PTR) DCA POINT1 TAD I POINT1 JMS PROCT /PRINT WORD JMS TYPE /PRINT ", FOUND " ERRM4 CMA  /GET WORD FOUND TAD POINT2 /(DEC PTR) DCA POINT2 TAD I POINT2 JMS PROCT /PRINT WORD JMS TYPE /PRINT CR, LF CRLF ISZ ERRORS /INC ERROR COUNT NOP  /IGNORE OVERFLOW (USER WON'T CARE BY THEN) JMP I ERROR /RETURN / TYPE, 0 /ROUTINE TO PRINT .ASCIZ STRING AT @(PC) ON K: STA  /AC=-1 TAD I TYPE /GET PTR-1 DCA POINT3 /SAVE TYPE1, TAD I POINT3 /GET A CHAR SNA  /SKIP IF NOT 0 JMP I TYPE /ELSE RETURN TLS  /PRINT IT CLA JMP TYPE1 /LOOP / PROCT, 0 /ROUTINE TO PRINT AC IN OCTAL ON K: DCA PROCT1 /SAVE NUMBER TAD PROCT1 RTL  /GET 1ST DIG TO AC9-AC11 RTL JMS DIGIT /PRINT IT TAD PROCT1 7002  /(BSW - PALD BUG) JMS DIGIT /PRINT 2ND DIGIT TAD PROCT1 RTR RAR JMS DIGIT /PRINT 3RD DIGIT TAD PROCT1 JMS DIGIT /PRINT 4TH DIGIT JMP I PROCT /RETURN (AC CLEAR) / DIGIT, 0 AND (7  /MASK OUT AC0-AC8 TAD ("0  /(CONVERT TO ASCII TLS  /PRINT CHAR CLA  /CLEAR AC JMP I DIGIT /RETURN / PROCT1, 0 /BUFFER FOR NUMBER / KBBUF, 0 /KB BUFFER - WORD COUNT 0 /ADDR 0 /2 CHARS (DIGIT, LF/VT/FF/CR/ESC) 0 / CRLF, 215 /"" 212 0 / DTAERR, /DECTAPE ERROR HAS OCCURRED JMS TYPE /PRINT "DTA ERRORB=" DTERTX DTRB  /GET STATUS REGISTER B JMS PROCT /PRINT CONTENTS JMS TYPE /PRINT CR, LF CRLF JMP I (BEG /START OVER / DONE, /REWIND TAPE AND PRINT @#ERRORS JMS TYPE /PRINT "REWINDING..." REWIND TAD UNIT /GET UNIT TAD (20  /MAKE READ COMMAND DCA DTA+1 /SET UP FOR READ DCA DTA+2 /READ BLOCK 0 TAD DTA  /POINT AT BLOCK DTXA  /REWIND TAPE JMS TYPE /PRINT "TOTAL ERRORS: " TOTERR TAD ERRORS /GET ERROR COUNT JMS PROCT /PRINT IT JMS TYPE /CR, LF CRLF JMP I (BEG /START OVER / PAGE 1 BEG, JMS TYPE /PRINT "UNIT? " UNTTXT /GET UNIT NUMBER CLA CLL CMA RAL /LOAD -2 DCA KBBUF /READ 2 CHARS TAD (KBBUF+1 /PT AT KB BUFF DCA KBBUF+1 TAD (KBBUF /PT AT KB BUFF KSR  /READ 2 CHARS JMS TYPE /CR, LF CRLF TAD KBBUF+2 /GET FIRST CHAR AND (7770 /REMOVE BOTTOM 3 BITS TAD (-"0 /MAKE SURE IT'S A DIGIT SZA  /SKIP IF SO JMP BEG  /ELSE TRY AGAIN TAD KBBUF+2 /GET FIRST CHAR BACK RTR  /ROTATE INTO AC0-AC2 RTR AND (7000 /CLEAR AC3-AC11 DCA UNIT /THAT'S THE UNIT NUMBER CLA CLL CMA RAL /LOAD -2 DCA PASS /SET # OF PASSES TAD (2525 /STARTING PATTERN IS 010101010101 DCA PATERN /SAVE STARTING PATTERN LOOP1, TAD ("3  /PRINT PASS NUMBER TAD PASS DCA PASTXT+7 /POKE INTO TEXT JMS TYPE /PRINT "PASS #" PASTXT TAD (-10 /MAKE 8. PASSES, EACH DOING EVERY 8TH BLOCK DCA PASS1 TAD (-201 /GET LENGTH OF DECTAPE BLOCK DCA COUNT1 /SET LOOP COUNTER TAD (BUFF1-1 /POINT AT BUFF1 DCA POINT1 /SAVE POINTER LOOP2, TAD PATERN /GET CURRENT PATTERN DCA I POINT1 /PUT IN BUFF1, AUTOINC TAD PATERN /GET PATTERN BACK CMA  /COMPLEMENT DCA PATERN /REPLACE ISZ COUNT1 /DONE? JMP LOOP2 /NO, LOOP /SINCE A BLOCK CONTAINS AN ODD NUMBER OF WORDS, PATERN IS NOW /THE COMPLEMENT OF WHAT IT STARTED AS (IT IS NOW 5252). LOOP3, TAD ("A+10 /FIND MINOR PASS NUMBER TAD PASS1 TLS  /PRINT LETTER [A,H] CLA TAD UNIT /GET UNIT NUMBER TAD (40  /COMPOSE WRITE COMMAND DCA DTA+1 /PUT IN CONTROL BLOCK TAD (BUFF1-1 /PT AT BUFFER #1 DCA DTA+3 /PUT IN CTRL BLOCK TAD PASS1 /GET - TAD (10  /CVT TO [0,7] DCA DTA+2 /SET STARTING BLOCK LOOP4, TAD DTA  /PT AT MONITOR COMM BLOCK DTXA  /WRITE A BLOCK OF ALTERNATING 0'S AND 1'S DTRB  /GET STATUS B AND (7776 /MASK OUT DECTAPE FLAG SZA  /SKIP IF NO ERROR JMP DTAERR /REPORT ERRORS TAD (10  /INC BLOCK NUMBER BY 8. TAD DTA+2 DCA DTA+2 TAD DTA+2 /GET BLOCK NUMBER TAD (-2701 /BLOCK>2701? CLA SPA  /SKIP IF SO JMP LOOP4 /ELSE LOOP /EVERY 8TH BLOCK ON THE TAPE, STARTING WITH BLOCK (PASS1+8.), NOW /CONTAINS ALTERNATING 2525'S AND 5252'S. READ BACK AND VERIFY THIS. TAD UNIT /GET UNIT NUMBER TAD (20  /COMPOSE READ COMMAND DCA DTA+1 /PUT IN CTRL BLOCK TAD (BUFF2-1 /PT AT BUFFER #2 DCA DTA+3 /PUT IN CTRL BLOCK TAD PASS1 /GET PASS NUMBER TAD (10  /CONVERT TO [0,7] DCA DTA+2 /SET STARTING BLOCK NUMBER LOOP5, TAD DTA  /PT AT MONITOR COMM BLOCK DTXA  /READ A BLOCK DTRB  /CHECK STATUS REG B AND (7776 /MASK OUT DTF SZA  /SKIP IF NO ERROR JMP DTAERR /REPORT ERRORS TO K: /NOW COMPARE BUFF1 TO BUFF2 TAD (-201 /BLOCK CONTAINS 129. WORDS DCA COUNT1 /LOOP CTR TAD (BUFF1-1 /PT AT BUFF1 DCA POINT1 TAD (BUFF2-1 /PT AT BUFF2 DCA POINT2 LOOP6, TAD I POINT1 /GET WORD FROM BUFF1 CIA  /NEGATE TAD I POINT2 /GET WORD FROM BUFF2 SZA  /SKIP IF EQUAL JMS ERROR /MESSAGE IF NOT ISZ COUNT1 /DONE? JMP LOOP6 /LOOP IF NOT TAD (10  /INC BLOCK # BY 8. TAD DTA+2 DCA DTA+2 TAD DTA+2 /GET BLOCK NUMBER TAD (-2701 /BLOCK>2701? CLA SPA  /SKIP IF SO JMP LOOP5 /ELSE LOOP ISZ PASS1 /FINISHED THIS COMPLETE PASS? JMP LOOP3 /LOOP IF NOT ISZ PASS /DONE TESTING? JMP LOOP1 /LOOP IF NOT JMP DONE /REWIND AND PRINT ERROR COUNT / PAGE 2 HEADER, "D /"DECTAPE TEST" "E "C "T "A "P "E 240 "T "E "S "T 215 212 0 ERRM1, "E /"ERROR IN BLOCK " "R "R "O "R 240 "I "N 240 "B "L "O "C "K 240 0 ERRM2, ", /", WORD " 240 "W "O "R "D 240 0 ERRM3, ": /": EXPECTED " 240 "E "X "P "E "C "T "E "D 240 0 ERRM4, ", /", FOUND " 240 "F "O "U "N "D 240 0 TOTERR, "T /"TOTAL ERRORS: " "O "T "A "L 240 "E "R "R "O "R "S ": 240 0 UNTTXT, 215 /"UNIT? " 212 "U "N "I "T "? 240 0 REWIND, 215 /"REWINDING..." 212 "R "E "W "I "N "D "I "N "G ". ". ". 215 212 0 DTERTX, "D /"DTA ERRORB=" "T "A 240 "E "R "R "O "R 240 240 "B "= 0 PASTXT, 215 /"PASS #" 212 "P "A "S "S 240 240 215 212 0 /DECTAPE BUFFERS: BUFF1=. BUFF2=.+201 $