/HIGH SPEED READER/PUNCH TESTS /DHPCA VER A MARCH 1977 /1.0 ABSTRACT / THE PC8-E HIGH-SPEED READER AND PUNCH TESTS ARE A TEST PACKAGE / USED TO TEST THE TYPE PC02 AND PC03 HIGH-SPEED READER-PUNCH WHEN / ATTACHED TO A PDP8/E SYSTEM. THE TESTS PERFORM BASIC INPUT AND / OUTPUT CONTROL LOGIC TESTS, READER AND PUNCH TESTS, READER AND / PUNCH SPEED PRINTOUTS, AND PROVIDE MAINTENANCE LOOPS USEFUL IN / ADJUSTING THE READER AND PUNCH / / THE AVAILABLE TEST PROGRAMS ARE: / / PRG0 - BASIC READER AND READER CONTROL LOGIC TESTS / PRG1 - BASIC PUNCH AND PUNCH CONTROL LOGIC TEST / PRG2 - READER TEST. SPECIAL BINARY COUNT PATTERN / PRG3 - PUNCH TEST. SPECIAL BINARY COUNT PATTERN / PRG4 - PUNCH VERIFY. SPECIAL BINARY COUNT PATTERN / PRG5 - PUNCH TEST. RANDOM CHARACTERS / PRG6 - PUNCH VERIFY. RANDOM CHARACTERS / PRG7 - COMBINED READER-PUNCH TEST. SPECIAL BINARY / COUNT PATTERN / PRG10 - READ AMPLIFIER ADJUSTMENT LOOP. 1'S AND 0'S TAPE / PRG11 - PUNCH ANY CHARACTER IN SR LOOP / PRG12 - 1'S AND 0'S PUNCH LOOP / PRG13 - READER SPEED PRINT LOOP / PRG14 - PUNCH SPEED PRINT LOOP / PRG15 - READ X CHARACTERS. STALL Y MS LOOP / /2.0 REQUIREMENTS /2.1 EQUIPMENT / / PDP8/E WITH ASR33/35 TELETYPE, PR8-E READER, OR PR8-E PUNCH, OR / PC8-E READER/PUNCH. THE FOLLOWING TAPED ARE REQUIRED IN CON- / JUNCTION WITH THIS TEST: / / MAINDEC-08-D2G1-PT / MAINDEC-08-D2G2-PT / MAINDEC-08-D2G4-PT / /2.2 STORAGE / / LOCATIONS 0000 THROUGH 4377 ARE USED. / /2.3 PRELIMINARY PROGRAMS / / ALL BASIC CPU AND TELETYPE MAINDEC MUST HAVE BEEN RUN SUCCESS- / FULLY. / /3.0 LOADING PROCEDURE / / THE BINARY LOADER IS USED TO LOAD THE PROGRAM / /4.0 USE PROCEDURES / / THE FOLLOWING PAGES EXPLAIN IN DETAIL THE STEPS NECESSARY TO / RUN EACH PROGRAM / /4.1 PRG0 USE PROCEDURE / / A. INSURE THAT THE TELETYPE IS ONLINE. / B. LOAD READER WITH ALL 0'S TEST TAPE. PREFERABLY THE TAPE / SHOULD BE SPLICED INTO A LOOP. / C. LOAD ADDRSS 0200. / D. SET SR TO 0000. PRESS START. / E. PROGRAM HALTS AT LOC 0242 TO PERMIT SETTING OF SR OPTIONS / SET DESIRED OPTIONS AND PRESS CONTINUE. / / PRG0 SR OPTIONS / SR0 HALT AT ROUTINE END. ROUTINE NUMBER IN AC / SR1 SELECT ROUTINE WHOSE NUMBER IS SET IN SR8-SR11. / SR2 LOOP PROGRAM. / SR3 0=HALT ON ERROR. 1=DO NOT HALT ON ERROR. / SR4 SKIP TEST AFTER ERROR. / SR5 ENTER SCOPE LOOP AFTER ERROR / SR8 / THROUGH ROUTINE NUMBER TO BE SELECTED / SR11 / / F. THE PROGRAM RUNS AND HALTS AT PROGRAM END HALT, AT LOC 0305 / UNLESS PREVENTED FROM ENDING BY ERRORS, OR SR OPTIONS. / /4.2 PRG1 USE PROCEDURE / / A. INSURE THAT THE TELETYPE IS ONLINE. / B. MAKE PUNCH READY, INSURING THAT THERE ARE SEVERAL INCHES OF / BLANK LEADER. / C. LOAD ADDRSS 0200. / D. SET SR TO 0001. PRESS START. / E. PROGRAM HALTS AT LOC 0242 TO PERMIT SETTING OF SR OPTIONS / SET DESIRED OPTIONS AND PRESS CONTINUE. / / PRG1 SR OPTIONS / SR0 HALT AT ROUTINE END. ROUTINE NUMBER IN AC / SR1 SELECT ROUTINE WHOSE NUMBER IS SET IN SR8-SR11. / SR2 LOOP PROGRAM. / SR3 0=HALT ON ERROR. 1=DO NOT HALT ON ERROR. / SR4 SKIP TEST AFTER ERROR. / SR5 ENTER SCOPE LOOP AFTER ERROR / SR8 / THROUGH ROUTINE NUMBER TO BE SELECTED / SR11 / / F. THE PROGRAM RUNS AND HALTS AT PROGRAM END HALT, AT LOC 0305 / UNLESS PREVENTED FROM ENDING BY ERRORS, OR SR OPTIONS. / / NOTE / / THE RESULTING PUNCHED TAPE MUST BE INSPECTED VISUALLY. / EXCEPT FOR TWO 500 CHARACTER BLOCKS CONTAINING PUNCHES / IN ALTERNATE CHANNELS, THE REMAINDER OF THE TAPE SHOULD / BE BLANK. / /4.3 PRG2 USE PROCEDURE / / A. INSURE THAT THE TELETYPE IS ONLINE. / B. LOAD READER WITH SPECIAL BINARY COUNT PATTERN TEST LOOP. / C. LOAD ADDRSS 0200. / D. SET SR TO 0002. PRESS START. / E. PROGRAM RUNS CONTINUOUSLY UNLESS ERRORS OCCUR. / / PRG2 SR OPTIONS / / SR3 =0-HALT ON ERROR. SR3=1-NO HALT ON ERROR. / SR6 =0-STALL (RANDOM), SR6=1-RUN FULL SPEED / SR7 LOCK IN CURRENT STALL (SR6 MUST BE 0) / /4.4 PRG3 USE PROCEDURE / / A. INSURE THAT THE TELETYPE IS ONLINE. / B. MAKE PUNCH READY. / C. LOAD ADDRSS 0200. / D. SET SR TO 0003. PRESS START. / E. THE PROGRAM PUNCHES SPECIAL BINARY COUNT PATTERN CONTIN- / UOUSLY UNTIL STOPPED BY USER. / / PRG3 SR OPTIONS / / SR6 =0-STALL (RANDOM), SR6=1-RUN FULL SPEED / SR7 LOCK IN CURRENT STALL (SR6 MUST BE 0) / /4.5 PRG4 USE PROCEDURE / / A. INSURE THAT THE TELETYPE IS ONLINE. / B. LOAD READER WITH TAPE PUNCHED BY PRG3, BLANK LEADER SHOULD / BE UNDER READ STATION. WITH "UP" MARKER TO THE LEFT. / C. LOAD ADDRSS 0200. / D. SET SR TO 0004. PRESS START. / E. PROGRAM RUNS CONTINUOUSLY UNLESS ERRORS OCCUR, OR UNTIL / THE READER RUNS OUT OF TAPE. / / PRG4 SR OPTIONS / / SR3 =0-HALT ON ERROR. SR3=1-NO HALT ON ERROR. / / NOTE / / DISREGARD ERRORS TAHT OCCUR WHEN THE END OF SPECIAL / BINARY COUNT PATTERN IS REACHED. / /4.6 PRG5 USE PROCEDURE / / A. INSURE THAT THE TELETYPE IS ONLINE. / B. MAKE PUNCH READY. / C. LOAD ADDRSS 0200. / D. SET SR TO 0005. PRESS START. / E. THE PROGRAM PUNCHES RANDOM CHARACTERS CONTINUOUSLY / UNTIL STOPPED BY USER. / / PRG5 SR OPTIONS / / SR6 =0-STALL (RANDOM), SR6=1-RUN FULL SPEED / SR7 LOCK IN CURRENT STALL (SR6 MUST BE 0) / /4.7 PRG6 USE PROCEDURE / / A. INSURE THAT THE TELETYPE IS ONLINE. / B. LOAD READER WITH TAPE PUNCHED BY PRG5, BLANK LEADER SHOULD / BE UNDER READ STATION. WITH "UP" MARKER TO THE LEFT. / C. LOAD ADDRSS 0200. / D. SET SR TO 0006. PRESS START. / E. PROGRAM RUNS CONTINUOUSLY UNLESS ERRORS OCCUR, OR UNTIL / THE READER RUNS OUT OF TAPE. / / PRG4 SR OPTIONS / / SR3 =0-HALT ON ERROR. SR3=1-NO HALT ON ERROR. / / NOTE / / DISREGARD ERRORS TAHT OCCUR WHEN THE END OF SPECIAL / BINARY COUNT PATTERN IS REACHED. / /4.8 PRG7 USE PROCEDURE / / A. INSURE THAT THE TELETYPE IS ONLINE. / B. MAKE PUNCH READY, PUNCH ABOUT 20 INCHES (MAXIMUM) OF BLANK / LEADER, AND LOAD READER WITH THE BLANK LEADER. THE PUNCH / TO READER SLACK SHOULD NOT BE EXCESSIVE. / C. LOAD ADDRSS 0200. / D. SET SR TO 0007. PRESS START. / E. THE PROGRAM PUNCHES AND READ CHECKS SPECIAL BINARY COUNT / PATTERN CONTINUOUSLY UNTIL ERROR OCCURS, OR SUPPLY OF TAPE / IS EXHAUSTED. / / PRG7 SR OPTIONS / / SR3 =0-HALT ON ERROR. SR3=1-NO HALT ON ERROR. / SR6 =0-STALL (RANDOM), SR6=1-RUN FULL SPEED / SR7 LOCK IN CURRENT STALL (SR6 MUST BE 0) / /4.9 PRG10 USE PROCEDURE / / A. INSURE THAT THE TELETYPE IS ONLINE. / B. LOAD READER WITH 1'S AND 0'S TEST TAPE LOOP. / C. LOAD ADDRSS 0200. / D. SET SR TO 0010. PRESS START. / E. PROGRAM RUNS CONTINUOUSLY UNTIL STOPPED BY USER. WITH / THE PROGRAM RUNNING, THE USER CAN ADJUST THE READ / AMPLIFIERS. / /4.10 PRG11 USE PROCEDURE / / A. INSURE THAT THE TELETYPE IS ONLINE. / B. MAKE PUNCH READY. / C. LOAD ADDRSS 0200. / D. SET SR TO 0011. PRESS START. / E. THE PROGRAM PUNCHES CONTINUOUSLY THE CODE SET IN SWITCHES / 4 TO 11. THE SWITCHES MAY BE CHANGED AT ANY TIME. / /4.11 PRG12 USE PROCEDURE / / A. INSURE THAT THE TELETYPE IS ONLINE. / B. MAKE PUNCH READY. / C. LOAD ADDRSS 0200. / D. SET SR TO 0012. PRESS START. / E. THE PROGRAM PUNCHES 1'S AND 0'S TAPE CONTINUOUSLY. / / PRG12 SR OPTIONS / / SR6 =0-STALL (RANDOM), SR6=1-RUN FULL SPEED / SR7 LOCK IN CURRENT STALL (SR6 MUST BE 0) / /4.12 PRG13 USE PROCEDURE / / PRG13 IS USED TO TIME THE HIGH SPEED READER WITH THE AID OF A / WATCH WITH SWEEP SECOND HAND. THE READER CAN BE TIMED IN 2 / WAYS: / / A. 30 SECOND TIMING. USED FOR APPROXIMATE SPEED SETTINGS. / B. 300 SECOND TIMING (5 MINUTES) FOR ACCURATE AND FINAL / VERIFICATION OF READER SPEED / / TO TIME THE READER PROCEED AS FOLLOWS: / / A. INSURE TELETYPE IS ON-LINE / B. LOAD ANY TAPE IN READER / C. LOAD ADDRESS 0200 / D. SET SR TO 0013 / E. FOR 30 SECOND TIMING, LEAVE SR1=0, FOR 300 SECOND TIMING / SET SR1 TO A 1 / F. PRESS START, READER WILL RUN CONTINUOUSLY / G. WHEN THE 30 OR 300 SECOND TIME IS UP, TURN ON SR0, AND THEN / TURN IT OFF. THE PROGRAM WILL TYPE OUT THE READER / SPEED IN CHARACTERS PER SECOND (CPS) / H. PROGRAM HALTS AT LOC 4230 AFTER PRINTOUT / I. TO RETIME THE READER, PRESS CONTINUE AFTER MAKING SURE THAT / SR0 IS OFF, AND THAT SR1 IS SET TO THE CORRECT TIME BASE / / NOTE / / ACCURATE READER SPEED MEASUREMENT DEPENDS ON THE USER'S / ATTENTION TO THE STARTING AND STOPPING TIMES / /4.13 PRG14 USE PROCEDURE / / PRG14 IS USED TO TIME THE HIGH SPEED PUNCH WITH THE AID OF A / WATCH WITH SWEEP SECOND HANDD. THE PUNCH IS TIMES OVER A PERIOD / OF 60 SECONDS. TO TIME THE PUNCH, PROCEED AS FOLLOWS: / / A. INSURE TELETYPE IS ONLINE / B. MAKE PUNCH READY / C. LOAD ADDRSS 0200 / D. SET SR TO 0014 / E. PRESS START. PUNCH RUNS CONTINUOUSLY. / F. AFTER 60 SECONDS TURN ON SR0, AND THEN TURN IT OFF. / THE PROGRAM WILL TYPE OUT THE PUNCH SPEED IN CHARACTERS / PER SECOND (CPS). / G. PROGRAM HALTS AT LOC 4255 AFTER PRINTOUT. / H. TO REIME THE PUNCH, PRESS CONTINUE AFTER MAKING SURE THAT / SR0 IS OFF / / NOTE / / ACCURATE READER SPEED MEASUREMENT DEPENDS ON THE USER'S / ATTENTION TO THE STARTING AND STOPPING TIMES / /4.14 PRG15 USE PROCEDURE / / A. LOAD ANY TAPE IN READER / B. LOAD ADDRESS 0200 / C. SET SR TO 0015. PRESS START / D. PROGRAM HALTS AT LOC 4332 / E. SET SR SWITCHES 0 THROUGH 4 TO NUMBER OF CHARACTERS TO / READ (1 TO 37 OCTAL) / F. SET SR SWITCHES 5 THROUGH 11 TO NUMBER OF MILLISECONDS TO / STALL AFTER READING CHARACTERS (1 TO 177 OCTAL) / G. PRESS CONTINUE / H. PROGRAM RUNS CONTINUOUSLY, READING THE SPECIFIED NUMBER OF / CHARACTERS, AND STALLING FOR THE SPECIFIED NUMBER OF / MILLISECONDS / / NOTE / / THE NUMBER OF CHARACTERS READ AND/OR THE STALL COUNT CAN / BE CHANGED AT ANY TIME. THIS PROGRAM DOES NOT CHECK FOR / CORRECT DATA, IT IS INTENDED PRIMARILY AS AN AID IN / ADJUSTING READER TIMINGS. / /5. OPERATING PROCEDURES / /5.1 PROGRAM AND/OR OPERATOR ACTION / /5.1.1 NORMAL HALTS / / LOC 0242 SR OPTIONS HALT. THIS HALT OCCURS DURING EXECU- / TION OF PRG0 AND PRG1 TO PERMIT SETTING OF DE- / SIRED OPTIONS. PRESS CONTINUE TO PROCEED. / LOC 0305 PROGRAM END HALT. OCCURS AT END OF PRG0 AND / PRG1. IF "LOOP PROGRAM" OPTION IS NOT SET / SET DESIRED OPTIONS, AND PRESS CONTINUE. IF NO / OPTIONS ARE SET, THIS HALT REOCCURS. / LOC 0340 ROUTINE END HALT. OCCURS DURING EXECUTION OF / PRG0 AND PRG1 IF SR0 IS 1. / LOC 4230 THIS HALT OCCURS IN PRG13 AFTER PROGRAM TYPES / THE READER SPEED IN CHARACTERS PER SECOND. TO / RETIME THE READER, PRESS CONTINUE AFTER MAKING / SURE THAT SR0 IS OFF, AND THAT SR1 IS SET TO / THE CORRECT TIME BASE. / LOC 4255 THIS HALT OCCURS IN PRG14 AFTER PROGRAM TYPE / THE PUNCH SPEED IN CHARACTERS PER SECOND. TO / RETIME THE PUNCH, PRESS CONTINUE AFTER MAKING / SURE THAT SR0 IS OFF. / LOC 4332 PRG15 SR SET HALT. OCCURS TO PERMIT SETTING OF / DESIRED CHARACTER AND STALL COUNT. SET SR0-4 TO / NUMBER OF CHARACTERS TO BE READ. SET SR5-11 TO / NUMBER OF MILLISECONDS TO STALL AFTER READING / CHARACTERS, PRESS CONTINUE / /6.0 ERRORS / /6.1 ERROR PRINTOUTS ARE IDENTIFIED BY AN ASTERISK (*) PRECEDING THE / PRINTOUT. MOST ERROR PRINTOUTS TAKE THE FORM: / / *P00XX R00XXY ZZZZZ / WHERE / P00XX=PROGRAM NUMBER / R00XX=ROUTINE NUMBER IN PROGRAM / Y=A LETTER. INDICATES WHICH ERROR OCCURRED WITHIN A / ROUTINE. IF NO LETTER IS PRINTED, ONLY ONE ERROR / IS POSSIBLE IN THE ROUTINE. / ZZZZZ=ADDITIONAL INFORMATION PRINTOUT / / FOLLOWING AN ERROR PRINTOUT THE PROGRAM HALTS IF SR3 (HALT-ON- / ERROR OPTION) IS OFF, AND THE OPTION APPLIES TO THE PROGRAM. / / *P0000 R0001 / / WITH READ FLAG = 1, RSF (IOT011) COMMAND FAILED TO SKIP. / / *P0000 R0002 / / RRB(IOT012) FAILED TO CLEAR FLAG, OR RSF(IOT011) SKIPPED / WITH FLAG=0. / / *P0000 R0003 / / SKIP NOT GENERATED WITH INTERRUPT OFF, OR 6010 (RPE) / MALFUNCTION. / / *P0000 R0004 / / PCE (6020) MALFUNCTION. INTERRUPT ENABLE NOT CLEARED / / *P0000 R0005 / / RRB (IOT012) COMMAND FAILED TO CLEAR FLAG / / *P0000 R0006 / / RFC (IOT014) FAILED TO CLEAR FLAG / / *P0000 R0007 / / RRB (IOT012) COMMAND RESULTED IN NON-ZERO CHARACTER SET INTO AC. / SHOULD BE ALL 0'S. AN ALL 0'S TEST TAPE SHOULD BE IN THE READER / / *P0000 R0010A / / UNEXPECTED INTERRUPT AFTER CLEARING REDER PUNCH, TTY PUNCH, / AND TTY READER. TURN OFF INTERRUPTING DEVICE / / *P0000 R0010B / / WITH READER FLAG SET, READER FAILED TO INTERRUPT. / / *P0000 R0011A / / "STOP DELAY" NOT FIRING OR SET FOIR TOO SHORT A DURATION, REFER / TO SECTION 9 FOR TEST DESCRIPTION / / *P0000 R0011B / / "STOP DELAY" TIME OUT IS TOO LONG. REFER TO SECTION 9 FOR TEST / DESCRIPTION / / *P0001 R0000 / / PSF (IOT021) COMMAND SKIPPED WITH FLAG = 0, OR, LESS LIKELY / PCF(IOT022) FAILED TO CLEAR FLAG. / / *P0001 R0001 / / PSF(IOT021) FAILED TO SKIP WITH FLAG = 1, OR FLAG IS NOT SET. / / *P0001 R0002 / / PCF(IOT022) FAILED TO CLEAR FLAG / / *P0001 R0003 / / DID NOT SKIP WITH INTERRUPT DISABLED / / *P0001 R0004 / / COULD NOT CLEAR INTERRUPT ENABLE FOR PUNCH / / *P0001 R0010A / / UNEXPECTED INTERRUPT AFTER CLEARING PUNCH, READER, TTY PUNCH / AND TTY READER. TURN OFF INTERRUPTING DEVICE. / / *P0001 R0010B / / WITH PUNCH FLAG SET, PUNCH FAILED TO INTERRUPT / / *P0002 R0000 S/B XXXX WAS YYYY / *P0004 R0000 S/B XXXX WAS YYYY / *P0006 R0000 S/B XXXX WAS YYYY / *P0007 R0000 S/B XXXX WAS YYYY / *P0010 R0000 S/B XXXX WAS YYYY / / ONE OF THE ABOVE PRINTOUTS OCCURS DURING ITS RESPECTIVE PROGRAM / WHEN THE DATA READ FROM PAPER TAPE AND THE EXPECTED DATA DID NOT / MATCH. "S/B" (SHOUD/BE) XXXX REPRESENTS THE EXPECTED CHARACTER. / "WAS" REPRESENTS THE CHARACTER READ. / / INCORRECT RTN SELECTED / / THIS PRINTOUT OCCURS DURING EXECUTION OF PRG0 AND PRG1 IF A / NONEXISTENT ROUTINE IS SELECTED. THE PROGRAM HALTS, SET CORRECT / ROUTINE NUMBER IN SR AND PRESS CONTINUE / / UNEXPECTED INTERRUPT / / THIS PRINTOUT OCCURS DURING PRG7 EXECUTION. PRGRAM HALTS. / TURN OFF INTERRUPTING DEVICE. PRESS CONTINUE / /6.2 ERROR HALTS / / LOC 0201 INCORRECT PRGRAM NUMBER SELECTED. SET SR / TO CORRECT NUMBER AND PRESS CONTINUE. / / LOC 0266 INCORRECT ROUTINE NUMBER SELECTED. PRECEDED / PRINTOUT. SET CORRECT ROUTINE NUMBER IN SR / AND PRESS CONTINUE. / / LOC 0732 UNEXPECTED INTERRUPT. PRECEDED BY PRINTOUT. / OCCURS DURING PRG7 EXECUTION. TURN OFF INTER- / RUPTING DEVICE. PRESS CONTINUE. / / LOC 1347 SYNC ERROR. OCCURS DURING PRG2 AND PRG7, IF / PROGRAM IS UNABLE TO SYNC. PRESS CONTINUE TO / RETRY. / / LOC 1075 COMMON ERROR HALT. OCCURS AFTER ERROR PRINTOUT / IF SR3=0 AND OPTION APPLIES TO PROGRAM BEING / RUN. PRESS CONTINUE / / LOC 3631 PRG7. PUNCH COUNT HAS EXCEEDED 100. READER / IS PROBABLY NOT RUNNING. RESTART PROGRAM. / /7.0 RESTRICTIONS / /7.1 STARTING RESTRICTIONS / / THIS PROGRAM MUST BE STARTED AT LOC 0200. / /8.0 MISCELLANEOUS / /8.1 EXECUTION TIME / / PRG0 1 MINUTE 50 SECONDS / PRG1 45 SECONDS / PRG2 THROUGH PRG15 ARE CONTINUOUS RUNNING PROGRAMS / /8.2 TEST TAPES / / MAINDEC-00D2G4-PT SPECIAL BINARY COUNT PATTERN TEST TAPE IS / PROVIDED WITH THIS PROGRAM. FOR EASE OF USE, THE TAPE SHOULD BE / SPLICED INTO A LOOP INSURING THAT THE PATTERN IS MATCHED AT THE / SPLICE POINT. THE END OF A PATTERN IS INDICATED BY THE / CHARACTERS: RUBOUT, ALL 0'S CHARACTER, ALL 0'S CHARACTER, AND / THEN ANOTHER RUBOUT. / / IT IS DESIRABLE TO SPLICE INTO LOOPS, MAINDEC-00-D2G1-PT AND / MAINDEC-00-D2G2-PT TO FACILITATE TESTING. / /9.0 PROGRAM DESCRIPTION / / THIS PROGRAM CONSISTS OF 14 INDIVIDUAL PROGRAMS NUMBERED FROM / 00 TO 15 (OCTAL). PROGRAMS ARE SELECTED BY MEANS OF THE SWITCH / REGISTER (SR). / /9.1 PRG0 - BASIC READER AND READER CONTROL LOGIC TEST / / THIS PROGRAM CONTAINS TEN ROUTINES NUMBERED FOR 0 TO 11 (OCTAL) / / RTN0 CHECKS THAT FLAG IS SET 250 MS AFTER ISSUING RFC COMMAND / (IOT014). FAILURE TO SKIP ON FLAG COULD BE CAUSED BY / FLAG NOT SET, OR RSF FAILURE TO SKIP. TEST IS DONE / 200 TIMES. / / RTN1 CHECKS THAT RSF COMMAND (IOT011) SKIPS WITH FLAG=1. / TEST IS DONE 4095 TIMES. / / RTN2 CHECK THAT RSF COMMAND (IOT011) DOES NOT SKIP WITH FLAG / = 0. DONE 4095 TIMES. / / RTN3 CHECKS FOR SKIP WITH INTERRUPT OFF. DONE 2047 TIMES. / / RTN4 CHECKS THAT INTERRUPT ENABLE CAN BE CLEARED FOR READER. / (DONE 4095 TIMES) / / RTN5 CHECKS THAT RRB COMMAND (IOT012) CLEARS THE FLAG. DONE / 500 TIMES. / / RTN6 CHECKS THAT RFC COMMAND (IOT014) CLEARS THE FLAG. DONE / 500 TIMES. / / RTN7 CHECKS THE ABILITY TO READ ALL 0'S CHARACTER. DONE 500 / TIMES. / / RTN10 CHECKS FOR UNEXPECTED INTERRUPTS, AND THEN CHECKS THAT / READER IS ABLE TO INTERRUPT. / / RTN11 THIS ROUTINE CHECKS THAT THE "STOP DELAY" IS NOT LESS / THAN 10 MS. OR MORE THAN 250 MS. THE TEST SEQUENCE IS: / / A. RFC (FETCH CHARACTER) / B. WAIT FOR FLAG 1 (SHOULD SET IMMEDIATELY) / C. DELAY 19 MS. (STOP DELAY SHOULD FIRE 6 MS AFTER STEP / A) / D. RFC (FETCH CHARACTER, CLEAR FLAG) / E. DELAY 19 MS. / F. SKIP ON FLAG. IF SKIP OCCURS, THE "STOP DELAY" / DID NOT FIRE, OR IS TOO SHORT. / G. DELAY ADDITIONAL 212 MILLISECONDS / H. SKIP ON FLAG. IF NO SKIP OCCURS, THE "STOP DELAY" / IS TOO LONG. TEST IS DONE 200 TIMES. / /9.2 PRG1 - BASIC PUNCH AND PUNCH CONTROL LOGIC TEST / / THIS PROGRAM CONTAINS NINE ROUTINES NUMBERED FROM 0 TO 10 / (OCTAL). / / RTN0 CHECKS THAT PSF COMMAND (IOT021) DOES NOT SKIP / WITH FLAG = 0. / / RTN1 CHECKS THAT PSF COMMAND (IOT021) SKIPS WITH FLAG = 1. / DONE 4095 TIMES. / / RTN2 CHECKS THAT PCF COMMAND (IOT022) IS ABLE TO CLEAR THE / FLAG. DONE 500 TIMES. / / RTN3 CHECKS FOR SKIP WITH INTERRUPT OFF. DONE 2047 TIMES. / / RTN4 CHECKS THAT INTERRUPT ENABLE CAN BE CLEARED FOR PUNCH. / DONE 4095 TIMES. / / RTN5 TEST DONE 500 TIMES. VISUAL CHECK OF TAPE REQUIRED. / CHECKS THAT PCF COMMAND (IOT022) IS ABLE TO CLEAR THE / PUNCH BUFFER. THE TEST SEQUENCE IS: / / A. ALL 1'S TO PUNCH BUFFER AND PUNCH (PLS). / B. IMMEDIATELY CLEAR THE PUNCH BUFFER BY ISSUING / PCF COMMAND. NO HOLES SHOULD BE PUNCHED EXCEPT / FOR FEED HOLE. / / RTN6 TEST IS DONE 500 TIMES, VISUAL CHECK OF TAPE REQUIRED. / ROUTINE LOADS PUNCH BUFFER WITH 125 (8) AND PUNCHES. / ALTERNATE HOLES SHOULD BE PUNCHED. / / RTN7 TEST IS DONE 500 TIMES, VISUAL CHECK OF TAPE REQUIRED. / ROUTINE LOADS PUNCH BUFFER WITH 252 (8) AND PUNCHES. / ALTERNATE HOLES SHOULD BE PUNCHED. / / RTN10 CHECKS FOR UNEXPECTED INTERRUPTS, AND THEN CHECKS THAT / PUNCH IS ABLE TO INTERRUPT. / /9.3 PRG2 - READER TEST / / THE READER IS TESTED USING A SPECIAL BINARY COUNT PATTERN TEST / TAPE. THE PROGRAM IS CONTINUOUS RUNNING. ERRORS ARE INDICATED / BY PRINTOUTS. NORMAL TEST MODE IS WITH RANDOM STALLS AFTER / EVERY CHARACTER GROUP READ. SR6=1 GIVES FULL SPEED TESTING. / SR7 = 1 LOCKS PROGRAM ON CURRENT STALL. (SR6 MUST BE 0). / PROGRAM RESYNCS AFTER 5 ERRORS. THE LENGTH OF A CHARACTER GROUP / IS RANDOM, BUT DOES NOT EXCEE 15 CHARACTERS. / /9.4 PRG3 - PUNCH TEST, SPECIAL BINARY COUNT PATTERN / / THIS CONTINUOUS RUNNING PROGEAM PUNCHES SPECIAL BINARY COUNT / PATTERN. NORMAL TEST MODE IS WITH RANDOM STALLS AFTER EVERY / CHARACTER PUNCHED. SR6=1 GIVES FULL SPEED PUNCHING. / SR7 = 1 LOCKS PROGRAM ON CURRENT STALL. (SR6 MUST BE 0). / /9.5 PRG4 - PUNCH VERIFY, BINARY COUNT PATTERN / / THIS PROGRAM READS AND CHECKS THE TAPE PUNCHED DURING EXECUTION / OF PRG3. ERRORS ARE INDICATED BY ERROR PRINTOUTS. / /9.6 PRG5 - PUNCH TEST, RANDOM CHARACTERS / / THIS CONTINUOUS RUNNING PROGRAM PUNCHES RANDOM CHARACTERS. / NORMAL TEST MODE IS WITH RANDOM STALLS AFTER EVERY / CHARACTER PUNCHED. SR6=1 GIVES FULL SPEED PUNCHING. / SR7 = 1 LOCKS PROGRAM ON CURRENT STALL. (SR6 MUST BE 0). / /9.7 PRG6 - PUNCH VERIFY, RANDOM CHARACTERS / / THIS PROGRAM READS AND CHECKS THE TAPE PUNCHED DURING EXECUTION / OF PRG5. ERRORS ARE INDICATED BY ERROR PRINTOUTS. / /9.8 PRG7 - COMBINED READER - PUNCH TEST / / THIS CONTINUOUS RUNNING PROGRAM PUNCHES AND READ - CHECKS / SPECIAL BINARY COUNT PATTERN. THE READER AND PUNCH WORK IN THE / INTERRUPT MODE. NORMAL TEST MODE IS WITH RANDOM STALLS AFTER / EVERY CHARACTER PUNCHED. SR6=1 GIVES FULL SPEED PUNCHING AND / READING. SR7 = 1 LOCKS PROGRAM ON CURRENT STALL. (SR6 MUST / BE 0). THE READER RESYNCS ITSELF AUTOMATICALLY AFTER 5 ERRORS. / /9.9 PRG10 - READ AMPLIFIER ADJUSTMENT LOOP / / THIS CONTINUOUS RUNNING PROGRAM USES A 1'S AND 0'S TEST TAPE / LOOP, AND PROVIDES A MEANS OF DETERMINING THE UPPER AND LOWER / LIMITS OF CORRECT OPERATION OF THE READ AMPLIFIER OF THE PAPER / TAPE READER. AFTER OBTAINING THE LIMITS THE POT CAN BE SET TO / THE MIDDLE POSITION. READ ERRORS ARE INDICATED BY ERROR PRINT- / OUTS. DROPPING OF THE READER FLAG BY OVERDRIVING OF THE FEED- / HOLE AMPLIFIER IS INDICATED BY 3 BELLS FROM THE TELETYPE. THE / READER IS THEN RESTARTED. / /9.10 PRG11 - PUNCH ANY CHARACTER IN SR LOOP / / THIS PROGRAM LOOP CONTINUOUSLY PUNCHES THE CODE SET IN SR4 / THROUGH SR11. SWITCHES MAY BE CHANGED WHILE RUNNING. / /9.11 PRG12 - ONES AND ZEROS PUNCH LOOP / / THIS PROGRAM PUNCHES 1'S AND 0'S CONTINUOUSLY. NORMAL MODE IS / WITH RANDOM STALLS AFTER EVERY CHARACTER PUNCHED. SR6=1 GIVES / FULL SPEED PUNCHING. SR7 = 1 LOCKS PROGRAM ON CURRENT STALL. / (SR6 MUST BE 0). / /9.12 PRG13 - READ SPEED PRINT LOOP / / THIS PROGRAM TYPES THE READER SPEED MEASURED OVER A 30 OR 300 / SECOND PERIOD. THE USER CONTROLS THE MEASURING TIME WITH THE / AID OF A WATCH WITH SWEEP SECOND HAND. / /9.13 PRG14 - PUNCH SPEED LOOP / / THIS PROGRAM TYPES THE PUNCH SPEED MEASURED OVER A 60 SECOND / PERIOD. THE USER CONTROLS THE MEASURING TIME WITH THE AID OF A / WATCH WITH SWEEP SECOND HAND. / /9.14 PRG15 - READ X, STALL Y MS LOOP / / THIS PROGRAM LOOP IS INTENDED AS AN AID IN ADJUSTING THE PAPER / TAPE READER. THE USER SETS IN SR0 THROUGH SR4 THE NUMBER OF / CHARACTERS TO BE READ (RANGE: 1 TO 37 OCTAL) AND IN SR5 THROUGH / SR11 THE NUMBER OF MS TO STALL AFTER READING THE CHARACTERS / (RANGE: 1 TO 177 OCTAL). THIS LOOP IS USEFUL IN ADJUSTING / CLOCK TIMING, STROBE, ETC. / /10.0 LISTING / /PC8-E HIGH SPEED READER AND PUNCH TESTS. /MAINDEC-08-DHPCA-A-D /DATE: MARCH 1977 /COPYRIGHT 1977 DIGITAL EQUIPMENT CORP. MAYNARD, MASS. 01754 /AUTHORS: BOB KOLLER/MAIT TAFFEL/MARK SANDLER/STEVE JENSEN /WILLEM VAN DER MARK RETYPED PROGRAM IN 2009 /PRG0-BASIC READER AND READER CONTROL LOGIC TEST. ALL 0'S TAPE /PRG1-BASIC PUNCH AND PUNCH CONTROL LOGIC TEST /PRG2-READER TEST, BINARY COUNT PATTERN /PRG3-PUNCH TEST, BINARY COUNT PATTERN /PRG4-PUNCH VERIFY, BINARY COUNT PATTERN /PRG5-PUNCH TEST, RANDOM CHARACTERS /PRG6-PUNCH VERIFY, RANDOM CHARACTERS /PRG7-COMBINED READER-PUNCH TEST, BINARY PATTERN /PRG10-READ AMPLIFIER ADJUSTMENT LOOP, ONES AND ZEROES TAPE /PRG11-PUNCH ANY CHARACTER OR SR LOOP /PRG12-ONES AND ZEROES PUNCH LOOP /PRG13-READER SPEED PRINT LOOP /PRG14-PUNCH SPEED PRINT LOOP /PRG15-READ X,STALL Y MSEC LOOP SKON=6000 SRQ=6003 CAF=6007 RPE=6010 PCE=6020 RCF=6014 PPC=6024 *0 0000 JMP 1 2 3 *5 JMP I 2 0 *20 KSTART, 0 DELAYM, 0 COUNT, 0000 AC, 0 LINK, 0 CHAIN, CHAINN SHLT, SHALT RANDNO, RANGEN PRGNUM, 0 PRGTAB, PRG0 PRG1 PRG2 PRG3 PRG4 PRG5 PRG6 PRG7 PRG10 PRG11 PRG12 PRG13 PRG14 PRG15 XTYPST, TYPSTG UCRLF, CRLF UERROR, ERROR UASCCN, ASCCN ULPRGN, LPRGN ULRRGN, LRRGN UTREAD, TREAD UTPCH, TPCH UPLDR, PLDR UMARK, MARK UTCHK, TCHK UTSB, TSB CRCNT, CHRCNT SYNC, SYNK SYNCA, SYNKA INPATT, INITPT GETPT, GETPTT GETPTR, GTPTRP CHECK, CHCK DLYCNT, DLCNT UPUNCH, PUNCH UMOVE, MOVE USTCTR, STCTR URDSR, RDSR USTCTA, STCTA USTCTB, STCTB USTDLM, STDLYM UDLYMS, DLYMS UIOUT, IOUT DLYMSK, 0 SRMSK, 0 MIL1, 7354 /CONSTANT FOR MILLISECONDS CPIC, 0 CHR1, 0 CHR2, 0 CHR3, 0 TEMP, 0 TEMP1, 0 CURTST, 0 RTNNO, 0 NXTST, 0 MSCTR, 0 /STORED NUMBER OF MILLISECONDS TO BE COUNTED MILCTR, 0 /MILLISECOND TALLY CTRA, 0 CTRB, 0 CTRC, 0 CTRD, 0 PFLAG, 0 RBUSY, 0 RCHKW, 0 /?? TCHKW, 0 PCHCNT, 0 ACTIND, 0 DELTIM, 0 MILLI, 0 CTR, 0 SR0MSK=4000 SR1MSK=2000 SR2MSK=1000 SR3MSK=0400 SR4MSK=0200 SR5MSK=0100 SR6MSK=0040 SR7MSK=0020 TSTMSK=0017 PTMSK=0377 SETLOC=JMS I USTCTR READSR=JMS I URDSR SETA=JMS I USTCTA SETB=JMS I USTCTB DELAY=JMS I UDLYMS OUT=JMP I UIOUT A=0140 B=0240 NONE=0000 NOSUF=4040 SETDLM=JMS I USTDLM DELAY=JMS I UDLYMS OUT=JMP I UIOUT OPEN=0000 /SET INT ENABLE FOR READER AND PUNCH /SKIP IF RDR FLAG = 1 /READ READER BUFFER AND CLEAR FLAG /RRB,RCC /CLEAR INTERRUPT EANBLE FOR READER AND PUNCH /SKIP IF PUNCH FLAG = 1 /CLEAR FLAG AND BUFFER /LOAD BUFFER AND PUNCH CHARACTER /PCF,PPC /SKIP IF INTERRUPT ON AND TURN INTERRUPT OFF /TURN INTERRUPT ON /TURN INTERRUPT OFF /SKIP ON INTERRUPT REQUEST /GET FLAGS /RESTORE FLAGS /SKIP ON GREATER THAN FLAGS /CLEAR ALL FLAGS *200 STRT, SKP HLT CLA /INCORRECT PRGNUM LAS /READ SR AND [17 /MASK ALL BUT LAST 4 BITS TAD [-15 SMA SZA /VALID PROGRAM? JMP STRT+1 /NO, GO TO ERROR HALT LAS /YES, REREAD SR AND [17 DCA PRGNUM TAD PRGNUM /DEVELOP PROGRAM ADDRESS TAD [PRGTAB DCA TEMP TAD I TEMP DCA PRGADR /STORE DEVELOPED ADDRESS INIT, JMS I UMOVE /INITIALIZE INTERRUPT 5 /AREAD 1 -2 DCA TEMP /0 TO TEMP JMS I UMOVE /CLEAR WORK AREA TEMP TEMP1 -20 SETLOC ERRORA 7402 TAD [177 DCA DLYMSK TAD [7640 DCA I [STALL+3 JMP I .+1 /JMP TO SELECTED PRGADR, 0 /PROGRAM SRSET, HLT CLA GETRDY, CLA TAD KSTART /SET ADDRESS OF 1ST ROUTINE DCA NXTST /STORE AT NXTST JMS FORWD READSR /READ SR RTL SNL /ROUTINE SELECT? SR1 JMP I CURTST /NO, START WITH 1ST RTN READSR /YES AND [TSTMSK CIA TAD RTNNO SNA CLA /IS IT THIS RTN? JMP I CURTST /YES, GO DO IT TAD NXTST /NO IAC /IS THIS LAST RTN? SZA CLA /NO JMP GETRDY+3 JMS I XTYPST WRTN INCRTN, HLT CLA /YES, INCORRECT ROUTINE NO JMP GETRDY CHAINN, JMS I SHLT READSR /READ SR RTL SZL CLA /ROUTINE SELECT? SR1 JMP GETRDY /YES TAD NXTST IAC SZA CLA /LAST ROUTINE? JMP GETRDY+3 /NO READSR RTL SPA CLA /LOOP PROGRAM? SR2 JMP GETRDY /YES PRGEND, HLT /END OF PROGRAM HALT JMP CHAINN FORWD, 0 CLA CLL TAD I NXTST /GET NEXT RTN NO DCA RTNNO /STORE AT RTNNO ISZ NXTST TAD NXTST /SET CURRENT DCA TEMP /RTN NUMBER ISZ NXTST TAD NXTST /SET CURRENT DCA CURTST /RTN ADDR. TAD I TEMP /SET NEXT DCA NXTST /RTN ADDR. JMP I FORWD CHRCNT, 0 JMS I RANDNO /SET RANDOM NUMBER AND [17 /REMOVE EXCESS BITS SNA /0? JMP CHRCNT+1 /YES, REPEAT CIA /COMPLEMENT JMP I CHRCNT /EXIT. SHALT, 0 READSR /READ SR SMA CLA /HALT? (SR0) JMP I SHALT TAD RTNNO HLT /UNCONDITIONAL HALT JMP I SHALT /EXIT.S/-10L PAGE STCTR, 0 CLA TAD I STCTR /GET CTR ADDR DCA TEMP /AND SAVE AT TEMP ISZ STCTR TAD I STCTR /GET COUNT AND DCA I TEMP /STORE PER C(TEMP) ISZ STCTR JMP I STCTR /EXIT DLYMS, 0 CLA CLL TAD DELAYM /GET MS COUNT DCA MSCTR /STORE IN MSCTR JMP I .+1 .+1 TAD MIL1 /GET 1 MS CONSTANT DCA MILCTR /STORE IN MILCTR ISZ MILCTR /DELAYED 1 MSEC? JMP .-1 ISZ MSCTR /DONE DELAYING? JMP .-5 JMP I DLYMS /EXIT /PUNCH/PRINT ONE CHARACTER SUBROUTINE (CHAR IN AC) PUNCH, 0 ISZ PFLAG /SET PFLAG TLS /PUNCH PRINT CLA TAD PFLAG SZA CLA /FLAG RESET? SKP JMP .+3 /YES TSF /DONE PRINTING? JMP .-5 /NO TCF /YES, RESET PRINTER FLAG DCA PFLAG /RESET FLAG JMP I PUNCH RDSR, 0 LAS AND SRMSK JMP I RDSR / /RANDOM NUMBER GENERATOR SUBROUTINE RANGEN, 0 CLA TAD RANTND TAD RANDEX SZA CLA JMP RANTAD TAD RANTBL DCA RANDEX TAD RANCON CLL RAL SZL IAC DCA RANCON RANTAD, TAD RANCON TAD I RANDEX DCA I RANDEX TAD RANSAV RAR TAD I RANDEX ISZ RANDEX DCA RANSAV TAD RANSAV JMP I RANGEN RANDEX, RANTND RANCON, 6543 RANTBL, .+1 6543 3210 0765 5432 2107 7654 4321 1076 RANTND, -. RANSAV, 0 / /SUBROUTINE TO GENERATE RANDOM DELAY COUNT / DLCNT, 0 JMS I RANDNO /GO GENERATE RANDOM NUMBER AND [177 /MASK OUT UNDESIRED BITS CIA /2'S COMPLEMENT IT DCA DELAYM JMP I DLCNT /EXIT / /SUBROUTINE TO COMPARE C(AC) TO CONTENTS STORED AT CALL+1 / CHCK, 0 DCA WCHK /STORE AC AT WCHK TAD I CHCK /GET COMPARE DATE CIA /2'S COMPLEMENT IT TAD WCHK /ADD C(WCHK) ISZ CHCK /SET UP FOR UNEQUAL SZA CLA /EQUAL (AC=0) JMP .+3 /NO ISZ CHCK /YES, SET UP FOR EQUAL JMP I CHCK /EQUAL EXIT TAD WCHK /RESTORE AC JMP I CHCK /UNEQUAL EXIT WCHK, 0 / /SUBROUTINE TO MOVE VARIABLE LENGTH DATA FIELDS / MOVE, 0 CLA TAD I MOVE /GET "FROM ADDR" AND DCA FADDR /STORE AT FADDR ISZ MOVE TAD I MOVE /GET "TO ADDR" AND DCA TADDR /STORE AT TADDR ISZ MOVE TAD I MOVE /GET "MOVE COUNT" AND DCA MCTR /STORE AT MCTR ISZ MOVE /SET UP FOR EXIT MOVEA, CLA TAD I FADDR /GET "FROM" WORD DCA I TADDR /STORE AT "TO" LOCATION ISZ FADDR /+1 TO "FROM" ADDR ISZ TADDR /+1 TO "TO" LOCATION ISZ MCTR /ALL WORDS MOVED? JMP MOVEA /NO, GO MOVE AGAIN JMP I MOVE /YES, EXIT FADDR, 0 TADDR, 0 MCTR, 0 PAGE CRLF, 0 CLA /CRLF SUBROUTINE TAD I CRLF /GET NUMBER OF CRLF'S DCA CRCTR /AND SAVE ISZ CRLF JMS I XTYPST /GO CRLF .+4 ISZ CRCTR /ALL DONE? JMP .-3 /NO JMP I CRLF /YES, EXIT 0015 /CR 0012 /LF 0001 /END CODE CRCTR, 0 TYPSTG, 0 CLA TAD I TYPSTG /GET AND STORE DCA TEMQ /INITIAL ADDRESS DCA FLAG /CLEAR FLAG ISZ TYPSTG TSC1, TAD I TEMQ /SET DATA RTR /ROTATE RIGHT 6 RTR RTR JMS TSC2 /GO TYPE CHARACTER TAD I TEMQ /GET DATA JMS TSC2 /GO TYPE CHARACTER ISZ TEMQ /INCR STRING ADDR JMP TSC1 /GO BACK FOR MORE TSC2, 0 AND [77 /MASK OFF 6 BITS DCA TEMR /SAVE CHARACTER TAD FLAG SZA CLA /TEST FLAG JMP TYPSP /SET TAD TEMR /NOT SET SNA /ZERO? JMP .+3 /YES, SET FLAG TYPAT, JMS PRINT /NO, PRINT IT JMP I TSC2 /RETURN ISZ FLAG /SET FLAG JMP I TSC2 /EXIT TYPSP, DCA FLAG /CLEAR FLAG TAD TEMR CIA SNA /ZERO? JMP TYPAT /YES, TYPE "@" IAC SNA CLA /IS IT 01? JMP I TYPSTG /YES, EXIT TAD [SMA /SMA TO SWITCH DCA SWITCH TAD TEMR /GET CHARACTER JMS PRINT /PRINT IT TAD [SPA /SPA TO SWITCH DCA SWITCH JMP I TSC2 PRINT, 0 TAD [-40 SWITCH, SPA TAD [100 TAD [240 JMS I UPUNCH JMP I PRINT TEMQ, 0 TEMR, 0 FLAG, 0 / INTSVC, DCA AC /SAVE AC RAR DCA LINK /SAVE LINK RSF /READER? JMP .+3 /NO JMP I .+1 RVCTR, 0 PSF /PUNCH? JMP .+4 /NO JMS I [STALL /STALL IF DESIRED JMP I .+1 PVCTR, 0 KSF /TTY READER/KYBD? JMP .+3 KCC /YES OUT /TO MAINLINE TSF /TTY PRINTER/PUNCH? JMP .+4 /NO TCF /YES DCA PFLAG OUT /TO MAINLINE UNEXIT, JMS I XTYPST /PRINT ERROR MESSAGE UNINT HLT CLA /HALT, UNEXPECTED INTERRUPT IOUT, CLA CLL TAD LINK RAL /RESTORE LINK TAD AC /RESTORE AC ION JMP I 0 /EXIT INTERRUPT / PCHCLR, PCF OUT RDRCLR, RRB OUT PAGE ASCCN, 0 /SUBROUTINE TO CONVERT CLA /A WORD TO PRINTABLE ASCII TAD I ASCCN DCA WASC ISZ ASCCN TAD I ASCCN DCA SASC ISZ ASCCN TAD [7700 AND I WASC RTR CLL RTR RTR JMS CNV ISZ SASC TAD [7700 CMA AND I WASC JMS CNV JMP I ASCCN CNV, 0 DCA ASCT TAD ASCT RTL RAL AND [707 TAD ASCT AND [707 TAD [6060 DCA I SASC JMP I CNV WASC, 0 SASC, 0 ASCT, 0 / STDLYM, 0 /SET DELAYM SUB CLA TAD I STDLYM /SET DELAYM TO DCA DELAYM /NUMBER SPECIFIED ISZ STDLYM /AT CALL +1 JMP I STDLYM /EXIT ERROR, 0 JMS I UASCCN /CONVERT PROGRAM PRGNUM /NUMBER TO PRINTABLE PNUMB /OCTAL JMS I UASCCN /CONVERT ROUTINE RTNNO /NUMBER TO PRINTABLE ENUMB /OCTAL TAD I ERROR /GET ERROR SUFFIX AND DCA I SFADR /STORE AT SUFX JMS I XTYPST /PRINT ERROR NUMBER ERNUMB ISZ ERROR TAD I ERROR /GET ADDRESS OF ADDITIONAL SNA /PRINTOUT. ZERO? JMP .+4 /YES DCA .+2 JMS I XTYPST /NO, PRINT IT 0 READSR AND [SR3MSK SNA CLA /HALT ON ERROR? (SR3) ERRORA, HLT /YES READSR AND [SR4MSK SZA CLA /SKIP TEST? (SR4) JMP I CHAIN /YES READSR AND [SR5MSK SZA CLA /ENTER SCOPE LOOP? (SR5) ISZ ERROR /YES ISZ ERROR JMP I ERROR SFADR, SUFX STCTA, 0 /SET CTRA TO CLA /NUMBER SPECIFIED TAD I STCTA /AT CALL+1 DCA CTRA ISZ STCTA JMP I STCTA /EXIT STCTB, 0 /SET CTRB TO CLA /NUMBER SPECIFIED TAD I STCTB /AT CALL+1 DCA CTRB ISZ STCTB JMP I STCTB /EXIT STALL, 0 /RANDOM STALL SUBROUTINE READSR AND [SR6MSK SZA CLA /STALL? (SR6) JMP I STALL /NO, EXIT READSR AND [SR7MSK SZA CLA /LOCK ON STALL? (SR7) SKP /YES JMS I DLYCNT /NO, RANDOM STALL TAD DELAYM SZA DELAY /STALL JMP I STALL /EXIT TCHK, 0 JMS I CHECK /CHECK THAT C(AC) AND C(TSB) ARE TSB, 0 JMP .+3 /ERROR, NOT EQUAL ISZ TCHK /EQUAL JMP I TCHK /OK DCA TCHKW /STORE BAD CHARACTER JMS I UASCCN TSB SB JMS I UASCCN TCHKW WAS JMS I UERROR NOSUF SBWAS JMP I TCHK /RETURN JMP I TCHK /RETURN PAGE TREAD, 0 RFC RSF JMP .-1 CLA RRB JMP I TREAD TPCH, 0 PLS PSF JMP .-1 JMP I TPCH PLDR, 0 SETLOC /-100 TO PLDRW PLDRW -144 CLA PLS PSF JMP .-1 ISZ PLDRW /DONE? JMP .-5 /NO JMP I PLDR /YES, EXIT PLDRW, 0 / MARK, 0 JMS PLDR SETB -11 SETLOC /MARKER ADDRESS MARKAD /TO MARKAD MARKER CLA TAD I MARKAD /GET MARK JMS TPCH /PUNCH IT ISZ MARKAD /UPDATE ISZ CTRB /DONE? JMP .-5 /NO JMP I MARK /YES, EXIT MARKAD, 0 SEED1, 1233 7622 RANP1, 0 RANP2, 0 RANR1, 0 RANR2, 0 LPRGN, 0 CLL CLA TAD RANP1 RTL TAD RANP2 DCA RANP1 TAD RANP1 RTL TAD RANP2 RTL DCA RANP2 TAD RANP1 AND [PTMSK JMP I LPRGN LRRGN, 0 CLL CLA TAD RANR1 RTL TAD RANR2 DCA RANR1 TAD RANR1 RTL TAD RANR2 RTL DCA RANR2 TAD RANR1 AND [PTMSK JMP I LRRGN SYNK, 0 JMS I INPATT JMS I UTREAD /READ CHARACTER DCA CHR1 /STORE AT CHR1 JMS I UTREAD /READ CHARACTER DCA CHR2 /STORE AT CHR2 JMS I UTREAD /READ CHAR DCA CHR3 /STORE JMS I SYNCA /GO SYNC JMP SYNK+1 /NO SYNC, TRY AGAIN JMP I SYNK /SYNCED, EXIT SYNKA, 0 SETLOC /-512 TO CTSK CTSK -1000 SETLOC /SET CTSK1 CTSK1 /TO -10 -12 JMS I GETPT /GET BIN CHARACTER CMA AND CHR1 /SAME AS CHR1? SZA JMP .-4 /NO JMS I GETPT /YES, GET ANOTHER BIN CHAR CMA AND CHR2 SNA /SAME AS CHR2? JMP SYNKC /YES ISZ CTSK /NO, 512 TIMES? JMP SYNKA+4 /NO SYNKB, HLT CLA /YES, SYNC ERROR JMP I SYNKA /TRY AGAIN SYNKC, JMS I GETPT /GET LINE CHARACTER CMA AND CHR3 /SAME AS CHR3? SZA JMP .+3 /NO ISZ SYNKA /YES JMP I SYNKA /EXIT ISZ CTSK1 /DONE 10 TIMES? JMP SYNKA+4 /NO JMP SYNKB /YES, SYNC ERROR CTSK, 0 CTSK1, 0 PAGE INITPT, 0 /INITIALIZE BINARY CLA IAC /PATTERN ROUTINES DCA PT0 JMS I UMOVE PT0 PT1 -3 DCA RIND DCA PIND JMP I INITPT GETPTT, 0 /BINARY COUNT PATTERN CLA /ROUTINE SPECIAL TAD PT0 DCA PT1 TAD RIND CMA DCA RIND TAD RIND SNA CLA JMP .+4 TAD PT1 CMA JMP .+3 TAD PT1 CIA AND [PTMSK DCA PT0 TAD PT1 JMP I GETPTT GTPTRP, 0 /BINARY COUNT PATTERN CLA /ROUTINE TAD PT2 DCA PT3 TAD PIND CMA DCA PIND TAD PIND SNA CLA JMP .+4 TAD PT3 CMA JMP .+3 TAD PT3 CIA AND [PTMSK DCA PT2 TAD PT3 JMP I GTPTRP PT0, 0 PT1, 0 PT2, 0 PT3, 0 RIND, 0 PIND, 0 ERNUMB, 0015 /CR 0012 /LF 5220 /*,P PNUMB, 4040 4040 4022 /SP,R ENUMB, 4040 4040 SUFX, 4040 4040 /SP,SP 0001 /END CODE UNINT, 0015 /CR 0012 /LF 0007 /BELL 4025 /SP,U 1605 /N,E 3020 /X,P 0503 /E,C 2405 /T,E 0440 /D,SP 1116 /I,N 2405 /T,E 2222 /R,R 2520 /U,P 2456 /T,. 0015 /CR 0001 /END CODE MARKER, 0037 0040 0040 0037 0000 0077 0011 0011 0006 RSPD, 0015 /CR 0012 /LF 4022 /SP,R 0422 /D,R 4023 /SP,S 2005 /P,E 0504 /E,D 4000 /SP 0100 /END CODE PSPD, 0015 /CR 0012 /LF 4020 /SP,P 0310 /C,H 4023 /SP,S 2005 /P,E 0504 /E,D 4000 /SP 0100 /END CODE CPS, 4003 /SP,C 2023 /P,S 0015 /CR 0001 /END CODE WRTN, 0015 /CR 0012 /LF 4000 /SP 0711 /BELL,I 1603 /N,C 1722 /O,R 2205 /R,E 0324 /C,T 4022 /SP,R 2416 /T,N 4023 /SP,S 0514 /E,L 0503 /E,C 2405 /T,E 0456 /D,. 0015 /CR 0001 /END CODE SBWAS, 4023 /SP,S 5702 /"/",B 4040 /SP,SP SB, 4040 /SP,SP 4040 /SP,SP 4040 /SP,SP 2701 /W,A 2340 /S,SP WAS, 4040 /SP,SP 4040 /SP,SP 0015 /CR 0001 /END CODE TDOMSG, 0015 /CR 0012 /LF 7005 /8,E 4040 /SP,SP 2331 /SY 2324 /ST 0515 /EM 5640 /.,SP 2305 /SE 2440 /T,SP 2411 /TI 1505 /ME 4004 /SP,D 0514 /EL 0131 /AY 4003 /SP,C 1716 /ON 2324 /ST 0116 /AN 2440 /T,SP 1116 /IN 4023 /SP,S 2256 /R,. 0015 /CR 0012 /LF 2205 /RE 0605 /FE 2240 /R,SP 2417 /TO 4020 /SP,P 0107 /AG 0523 /ES 4062 /SP,2 4001 /SP,A 1604 /ND 4063 /SP,3 4017 /SP,O 0640 /F,SP 2022 /PR 0740 /G,SP 1411 /LI 2324 /ST 1116 /IN 0756 /G. 0001 /END PAGE /PRGRAM 0, BASIC READER AND READER LOGIC CONTROL TEST / PRG0, SETLOC /SET KSTART TO KSTART /INITIAL ROUTINE P0T0 /ADDRESS SETLOC /SET SR MSAK SRMSK 7717 JMP I .+1 /SET STARTED SRSET P0T0, 0 P0T1 /CHECKS THAT FLAG=1 250MS AFTER RFC (IOT014), INDICATING THAT /READER IS ADVANCING SETA /-200 TO CTRA -310 SETDLM /-250 TO DELAY -372 P0T0A, RFC /CLEAR FLAG, FETCH CHAR (IOT014) DELAY /DELAY 75MS RSF /SKIP IF FLAG=1 (IOT011) JMP P0E0 ISZ CTRA /DONE? JMP P0T0A /NO, REPEAT JMP I CHAIN /YES, CHAIN P0E0, JMS I UERROR /GO TO ERROR SUBROUTINE NOSUF /NO PRINTOUT SUFFIX NONE /NO PRINTOUT JMP P0T0A+4 /CONTINUE TEST P0T0S, SETDLM /SCOPE LOOP -14 RFC /FETCH CHAR (IOT014) DELAY /DELAY 12 MS JMP .-2 P0T1, 1 P0T2 /WITH FLAG=1, SKIP ON FLAG 4095 TIMES TO CHECK FOR RELIABLE SKIPPING SETA /-4095 TO CTRA -7777 RFC /FETCH CHAR (IOT014) RSF /SKIP ON FLAG (IOT011) JMP .-1 /REPEAT P0T1A, RSF /SKIP ON FLAG (IOT011) JMP P0E1 /ERROR ISZ CTRA /DONE 4095 TIMES? JMP P0T1A /NO, REPEAT TEST JMP I CHAIN /YES, CHAIN P0E1, JMS I UERROR /GO TO ERROR SUBROUTINE NOSUF /NO PRINTOUT SUFFIX NONE /NO PRINTOUT JMP P0T1A+2 /CONTINUE TEST P0T1S, RFC /START SCOPE LOOP. FETCH CHAR (IOT014) RSF /SKIP ON FLAG (IOT011) JMP .-1 /REPEAT RSF /SKIP ON FLAG (IOT011) JMP .-1 /REPEAT JMP .-2 /REPEAT P0T2, 2 P0T3 /CHECKS THAT IOT011 DOES NOT SKIP WITH FLAG=0 SETA /-4095 TO CTRA -7777 RRB /CLEAR FLAG P0T2A, RSF /SKIP ON FLAG=1 (IOT011) JMP P0T2OK /OK P0E2, JMS I UERROR /ERROR, GO TO ERROR SUB NOSUF /NO PRINTOUT SUFFIX NONE /NO PRINTOUT JMP P0T2OK /CONTINUE TEST P0T2S, RSF /START SCOPE LOOP, SKIP ON FLAG JMP .-1 /REPEAT JMP .-2 /REPEAT P0T2OK, ISZ CTRA /DONE 4095 TIMES? JMP P0T2A /NO, REPEAT JMP I CHAIN /YES, CHAIN / /ROUTINE TO CHECK FOR SKIP WITH INTERRUPT DISABLED P0T3, 3 P0T4 TAD (4000 DCA COUNT TAD (7773 DCA CTR IOF CLA DCA MILLI ISZ MILLI JMP .-1 ISZ CTR JMP .-3 TAD (2260 /4.56 MS CONSTANT DCA DELTIM CAF RCF /READ JMS TIM P0T3A, RSF /SKIP IF READER FLAG SET JMP P0E3 /FLAG DID NOT SET RPE /ENABLE INTERRUPT SRQ /SHOULD SKIP HERE IF INT REQ JMP P0E3 /REPORT ERROR ISZ COUNT JMP P0T3+4 JMP I CHAIN P0E3, JMS I UERROR NOSUF NONE JMP P0T3+4 P0T3S, IOF RSF JMP .-1 RSF JMP .-1 JMP .-2 TIM, 0 ISZ DELTIM JMP .-1 JMP I TIM PAGE / /ROUTINE TO CHECK THAT INTERRUPT ENABLE CAN BE CLEARED FOR READER P0T4, 4 P0T5 IOF TAD R7770 DCA RCNT2 /INIT # OF ITERATIONS RLOOP, CAF RPE /ENABLE INTERRUPT PCE /DISABLE INTERRUPT ION RCF /READ SKON JMP P0E4 /INTERRUPT NOT ON SRQ /SKIP IF INT REQ GENERATED SKP /NO INT REQ JMP P0E4 /INT REQ GENERATED ISZ COUNT /RELIABILITY SETUP P0T4A, JMP RLOOP /CONTINUE ISZ RCNT2 JMP RLOOP JMP I CHAIN P0E4, JMS I UERROR NOSUF NONE JMP I CHAIN P0T4S, RPE DELAY PCE JMP .-3 R7770, 7770 RCNT2, 7770 PAGE P0T5, 5 P0T6 /CHECKS IOT012 (RRB) FOR ABILITY TO CLEAR FLAG SETA /-500 TO CTRA -764 P0T5A, RFC /FETCH CHAR (IOT014) RSF /WAIT FOR FLAG=1 JMP .-1 RRB /CLEAR FLAG (IOT012) RSF /SKIP ON FLAG=1 JMP P0T5B /OK P0E5, JMS I UERROR /ERROR, GO TO ERROR SUB NOSUF NONE JMP P0T5B /CONTINUE TEST P0T5S, RFC /START SCOPE LOOP, FETCH CHAR RSF /WAIT FOR FLAG=1 JMP .-1 RRB /CLEAR FLAG (IOT012) RSF /SKIP IF FLAG=1 JMP .-5 /NO, IOT012 CLEARED IT, READ AGAIN JMP .-3 /IOT012 FAILED, REPEAT P0T5B, ISZ CTRA /DONE? JMP P0T5A /NO, REPEAT JMP I CHAIN /YES, CHAIN P0T6, 6 P0T7 /CHECKS THAT IOT014 CLEARS FLAG SETA /-500 TO CTRA -764 RFC /FETCH CLEAR (IOT014) P0T6A, RSF /WAIT FOR FLAG=1 JMP .-1 RFC /CLEAR FLAG WITH IOT014 RSF /SKIP ON FLAG=1 JMP P0T6B /OK, FLAG IS OFF P0E6, JMS I UERROR /ERROR, FLAG=1, GO TO ERROR SUB NOSUF NONE JMP P0T6B P0T6S, DELAY /START SCOPE LOOP, DELAY 20 MS RFC /FETCH CHAR (IOT014) RSF /WAIT FOR FLAG=1 JMP .-1 JMP .-3 /GO CLEAR FLAG AND FETCH CHAR P0T6B, ISZ CTRA /DONE? JMP P0T6A /NO, REPEAT JMP I CHAIN /YES, CHAIN PAGE P0T7, 7 P0T10 /CHECKS ABILITY TO READ ALL 0'S CHARACTERS SETA /-500 TO CTRA -764 P0T7A, RFC /FETCH CHAR (IOT014) RSF /WAIT FOR FLAG=1 JMP .-1 CLA RRB /READ BUFFER DCA P0T7WB /SAVE TAD P0T7WB SZA CLA /RESULT 0? JMP P0E7 /ERROR, DID NOT READ 0'2 CHAR P0T7B, ISZ CTRA /DONE? JMP P0T7A /NO, REPEAT JMP I CHAIN /YES, CHAIN P0E7, JMS I UASCCN P0T7WA SB JMS I UASCCN P0T7WB WAS JMS I UERROR NOSUF SBWAS JMP P0T7B P0T7S, CLA RRB JMP .-2 P0T7WA, 0000 P0T7WB, 0000 P0T10, 10 P0T11 /CHECKS ABILITY OF READER FLAG TO CAUSE AN INTERRUPT SETLOC /SET INTERRUPT TO RETURN TO 2 /P0E10A P0E10A P0T10A, KCC /CLEAR TTY READER FLAG TCF /CLEAR TTY PRINTER FLAG PCF /CLEAR PUNCH FLAG RRB /CLEAR READER FLAG ION /ENABLE INTERRUPT NOP /NO OP IOF /TURN OFF INTERRUPT JMP P0T10B P0E10A, JMS I UERROR /GO TO ERROR SUB A /SUFFIX A NONE /NO PRINTOUT JMP P0T10A /REPEAT TEST JMP P0T10A /REPEAT TEST P0T10B, SETA /-4095 TO CTRA -7777 SETLOC /SET INTERRUPT RETURN TO 2 /P0T10E P0T10E RPE /SET INTERRUPT ENABLE RFC /FETCH CHAR (IOT014) RSF /WAIT FOR FLAG=1 JMP .-1 P0T10C, ION /ENABLE INTERRUPT NOP IOF /TURN OFF INTERRUPT JMS I UERROR /GO TO ERROR SUB B /SUFFIX B NONE JMP P0T10E /CONTINUE TEST P0T10S, SETLOC /SET INTERRUPT RETURN TO 2 /P0T10D P0T10D RFC /FETCH CLEAR RSF /WAIT FOR FLAG=1 JMP .-1 ION /ENABLE INTERRUPT NOP JMP .-2 P0T10D, JMP .-3 P0T10E, ISZ CTRA /DONE? JMP P0T10C /NO, REPEAT PCE /CLEAR INTERRUPT ENABLE JMP I CHAIN /YES, CHAIN /STOP DELAY TEST P0T11, 11 7777 /LAST TEST SETA /-200 TO CTRA -310 P0T11A, JMS DLY250 /INITIAL DELAY SETDLM /-19 TO DELAYM -23 RFC /FETCH CHAR RSF /WAIT FOR FLAG JMP .-1 DELAY /DELAY 19 MS TO CAUSE RFC /"STOP DELAY" TO FIRE, FETCH CHAR DELAY /DELAY 19 MORE MS RSF /CHECK FLAG JMP P0T11B /FLAG NOT UP, OK JMS I UERROR /ERROR, FLAG SHOULD NOT BE UP A /38 MS AFTER "STOP DELAY" NONE /FIRES JMP P0T11A /CONTINUE TEST JMP P0T11S /GO TO SCOPE LOOP P0T11B, JMS DLY212 /DELAY ADDITIONAL 212 MS RSF /FLAG UP? JMP .+4 /NO, ERROR P0T11C, ISZ CTRA /DONE 500 TIMES? JMP P0T11A /NO, REPEAT JMP I CHAIN /YES, CHAIN JMS I UERROR /ERROR, FLAG NOT UP 250 MS B /AFTER "STOP DELAY" FIRED NONE JMP P0T11C P0T11S, SETDLM /SET DELAYM FOR 15 MS -17 RFC /FETCH CHAR JMP .-1 /FLAG 1? DELAY /YES DELAY 15 MS RFC /FETCH CHAR RSF /WAIT FOR FLAG JMP .-1 JMP .-4 /REPEAT DLY212, 0 SETDLM /-212 TO DELAYM -324 DELAY JMP I DLY212 DLY250, 0 SETDLM /DELAY 250 MS -372 DELAY JMP I DLY250 PAGE /PROGRAM 1, BASIC PUNCH AND CONTROL LOGIC TEST / PRG1, SETLOC /SET KSTART TO KSTART /INITIAL ROUTINE P1T0 /ADDRESS SETLOC SRMSK 7717 JMP I .+1 /GET STARTED SRSET P1T0, 0 P1T1 /CHECKS THAT PSF (IOT021) DOES NOT SKIP WITH FLAG=0 SETA /-4095 TO CTRA -7777 P1T0A, PCF /CLEAR FLAG PSF /SKIP IF FLAG=1 JMP P1T0B /NO SKIP, OK P1E0, JMS I UERROR /SKIP ERROR, GO TO ERROR SUB NOSUF /NO SUFFIX NONE /NO PRINTOUT JMP P1T0B /CONTINUE TEST P1T0S, PCF /CLEAR FLAG PSF /SKIP IF FLAG=1 JMP .-1 JMP .-2 P1T0B, ISZ CTRA /DONE? JMP P1T0A /NO, REPEAT JMP I CHAIN /YES, CHAIN P1T1, 1 P1T2 /CHECKS THAT PSF (IOT021) SKIPS WITH FLAG=1 SETA /-4095 TO CTRA -7777 SETDLM /-4095 TO DELAYM -7777 CLA CLL PCF /CLEAR PUNCH FLAG, LOAD BUFFER PPC /LOAD BUFFER AND PUNCH DELAY P1T1A, PSF /SKIP IF FLAG=1, SHOULD BE 1 JMP P1E1 /NO SKIP, ERROR P1T1B, ISZ CTRA /DONE? JMP P1T1A /NO, REPEAT JMP I CHAIN /YES, CHAIN P1E1, JMS I UERROR /GO TO ERROR SUB NOSUF NONE JMP P1T1B /CONTINUE TEST P1T1S, CLA PCF /CLEAR FLAG AND BUFFER PPC /LOAD AND PUNCH PSF /SKIP IF FLAG JMP .-1 JMP .-2 P1T2, 2 P1T3 /CHECKS THAT PCF (IOT022) IS ABLE TO CLEAR FLAG SETA /-500 TO CTRA -764 P1T2A, CLA PLS /CLEAR, LOAD AND PUNCH PSF /WAIT FOR FLAG JMP .-1 PCF /CLEAR FLAG (IOT022) PSF /SKIP IF FLAG=1 JMP P1T2B /NO SKIP OK P1E2, JMS I UERROR /SKIP ERROR, GO TO ERROR SUB NOSUF NONE JMP P1T2B /CONTINUE TEST P1T2S, CLA PLS /CLEAR LOAD AND PUNCH PSF /WAIT FOR FLAG JMP .-1 PCF /CLEAR FLAG PSF /SKIP IF FLAG JMP .-6 /CLEARED JMP .-3 /NOT CLEARED P1T2B, ISZ CTRA /DONE? JMP P1T2A /NO, REPEAT JMP I CHAIN /YES, CHAIN /ROUTINE TO CHECK FOR SKIP WITH INTERRUPT DISABLED P1T3, 3 P1T4 TAD (4000 DCA COUNT TAD (7773 DCA CTR IOF CLA DCA MILLI ISZ MILLI JMP .-1 ISZ CTR JMP .-3 TAD (0001 DCA DELTIM CAF PPC /PUNCH JMS TIM1 P1T3A, PSF /SKIP IF PUNCH FLAG JMP P1E3 RPE /R/P INTERRUPT ON SRQ /SHOULD SKIP HERE FOR INT REQ JMP P1E3 /REPORT ERROR ISZ COUNT JMP P1T3+4 JMP I CHAIN P1E3, JMS I UERROR NOSUF NONE JMP P1T3+4 P1T3S, IOF PSF JMP .-1 RSF JMP .-1 JMP .-2 TIM1, 0 /44 MS TIME OUT ISZ DELTIM JMP .-1 TAD (0500 DCA DELTIM ISZ DELTIM JMP .-1 ISZ DELTIM JMP .-1 JMP I TIM1 PAGE /ROUTINE TO CHECK THAT INTERRUPT ENABLE CAN BE CLEARED FOR PUNCH P1T4, 4 P1T5 IOF TAD P7770 DCA PCNT2 /INT COUNTER PLOOP, CAF RPE /ENABLE INTERRUPT PCE /CLEAR INTERRUPT ION PPC /PUNCH SKON JMP P1E4 /ERROR , NO ION SRQ /SKIP IF INT REQ GENERATED SKP /NO INT REQ JMP P1E4 /ERROR, INT REQ GENERATED ISZ COUNT /RELIABILITY SETUP P1T4A, JMP PLOOP ISZ PCNT2 JMP PLOOP JMP I CHAIN P1E4, JMS I UERROR NOSUF NONE JMP I CHAIN P1T4S, RPE DELAY PCE JMP .-3 P1T5, 5 P1T6 /USED TO CHECK ABILITY OF IOT022 TO CLEAR BUFFER. VISUAL CHECK SETA /-500 TO CTRA -764 P1T5A, CLA CMA /7777 TO AC PLS /CLEAR, LOAD AND PUNCH CLA PLS /CLEAR BUFFER CONTENTS PRIOR TO PUNCHING PSF JMP .-1 ISZ CTRA /DONE? JMP P1T5A /NO, REPEAT JMP I CHAIN /YES, CHAIN P1T6, 6 P1T7 /CHECKS ABILITY OF IOT024 TO SET BUFFER TO 125 AND PUNCH IT SETA /-500 TO CTRA -764 P1T6A, CLA TAD [125 PLS /CLEAR, LOAD AND PUNCH PSF /WAIT FOR FLAG JMP .-1 ISZ CTRA /DONE? JMP P1T6A /NO, REPEAT JMP I CHAIN /YES, CHAIN P1T7, 7 P1T10 /CHECKS ABILITY OF IOT024 TO SET BUFFER TO 252 AND PUNCH IT SETA /-500 TO CTRA -764 P1T7A, CLA TAD [252 PLS /CLEAR, LOAD AND PUNCH PSF /WAIT FOR FLAG JMP .-1 ISZ CTRA /DONE? JMP P1T7A /NO, REPEAT JMP I CHAIN /YES, CHAIN PCNT2, 7770 P7770, 7770 PAGE P1T10, 10 7777 /END OF TESTS /CHECKS ABILITY OF PUNCH FLAG TO CAUSE AN INTERRUPT SETLOC /SET INTERRUPT RETURN 2 /TO P1E10A P1E10A P1T10A, KCC /CLEAR TTY READER TCF /CLEAR TTY PUNCH RRB /CLEAR READER PCF /CLEAR PUNCH ION /ENABLE INTERRUPT NOP IOF /TURN OFF INTERRUPT JMP P1T10B P1E10A, JMS I UERROR A NONE JMP P1T10A JMP P1T10A P1T10B, SETA /-4095 TO CTRA -7777 SETLOC /SET INTERRUPT RETURN 2 /TO P1T10E P1T10E CLA RPE /SET INTERRUPT ENABLE PLS /CLEAR, LOAD AND PUNCH PSF /WAIT FOR FLAG JMP .-1 P1T10C, ION NOP IOF P1E10B, JMS I UERROR B NONE JMP P1T10E P1T10S, SETLOC /SET INTERRUPT RETURN 2 /TO P1T10D P1T10D CLA PLS /CLEAR, LOAD AND PUNCH PSF /WAIT FOR FLAG JMP .-1 ION /ENABLE INTERRUPT NOP JMP .-2 P1T10D, JMP .-3 P1T10E, ISZ CTRA /DONE? JMP P1T10C /NO, REPEAT PCE /CLEAR INTERRUPT ENABLE JMP I CHAIN /YES, CHAIN /PROGRAM 2, READER TEST, SPECIAL BINARY COUNT PATTERN PRG2, SETLOC /SET SR SRMSK /MASK TO 0460 /0460 P2A, JMS I SYNC /SYNC READER SETA -5 P2B, JMS I CRCNT /GET RANDOM CHAR DCA CTRB /COUNT IN CTRB P2C, JMS I GETPT /GET BINARY CHAR DCA I UTSB /STORE IT JMS I UTREAD /GO READ CHAR JMS I UTCHK /GO CHECK IT JMP P2E /ERROR P2D, ISZ CTRB /GROUP DONE? JMP P2C /NO JMS I [STALL /YES, STALL JMP P2B /REPEAT P2E, ISZ CTRA /5 ERRORS? JMP P2D /NO, CONTINUE JMP P2A /RESYNC / /PROGRAM 3, PUNCH TEST, SPECIAL BINARY COUNT PATTERN PRG3, JMS I UMARK /MARK TAPE JMS I UPLDR /PUNCH LEADER JMS I INPATT /INITIALIZE BINARY PATTERN TAD [60 DCA SRMSK P3A, JMS I GETPT /GET BINARY CHAR JMS I UTPCH /PUNCH IT JMS I [STALL JMP P3A /PROGRAM 4, PUNCH VERIFY, SPECIAL BINARY COUNT PATTERN PRG4, JMS I INPATT /INITIALIZE BINARY PATTERN SETLOC /400 TO SRMSK /TO SR MASK 0400 JMS I GETPT /GET BINARY CHAR DCA I UTSB /STORE IT JMS I UTREAD /READ CHARACTER SZA /ZERO? JMP P4B /NO JMP .-3 /YES, REPEAT READ P4A, JMS I GETPT /GET BINARY CHAR DCA I UTSB /STORE IT JMS I UTREAD /READ CHAR P4B, JMS I UTCHK /GO CHECK IT NOP JMP P4A /REPEAT /PROGRAM 5, PUNCH TEST, RANDOM CHARACTER PATTERN PRG5, JMS I UMARK /MARK TAPE JMS I UPLDR /PUNCH LEADER JMS I UMOVE /INITIALIZE RANDOM SEED1 /CHARACTER ROUTINE RANP1 -4 TAD [60 DCA SRMSK P5A, JMS I ULPRGN /GET RANDOM CHAR JMS I UTPCH /PUNCH IT JMS I [STALL JMP P5A /REPEAT /PROGRAM 6, PUNCH VERIFY, RANDOM CHARACTER PATTERN PRG6, JMS I UMOVE /INITIALIZE RANDOM SEED1 /CHARACTER ROUTINE RANP1 -4 SETLOC /400 TO SRMSK /SR MASK 0400 JMS I ULRRGN /GET RANDOM CHAR DCA I UTSB /STORE IT JMS I UTREAD /READ CHAR SZA /ZERO? JMP P6B /NO JMP .-3 P6A, JMS I ULRRGN /GET RANDOM CHAR DCA I UTSB /STORE IT JMS I UTREAD /READ CHAR P6B, JMS I UTCHK /GO CHECK IT NOP /ERROR JMP P6A PAGE /PROGRAM 7, COMBINES READER-PUNCH TEST, SPECIAL BINARY COUNT PATTERN PRG7, SETLOC /SET SR MASK TO 0460 SRMSK 0460 SETLOC DLYMSK 77 JMS I INPATT /INITIALIZE BINARY PATTERN ISZ ACTIND /SET ACTIVE INDICATOR SETLOC /SET INTERRUPT 2 /SERVIE ADDRESS INTSVC SETLOC /SET PUNCH SERVICE ADDRESS PVCTR PBIN SETLOC /SET READER SERVICE ADDRESS RVCTR WNZERO JMS CPCH /PUNCH CHAR ION /ENABLE INTERRUPT JMP . /IDLE PBIN, ISZ PCHCNT /INCREMENT PUNCH COUNT TAD PCHCNT /COMPARE PUNCH COUNT TAD [-144 /TO 100 SPA CLA /GREATER THAN 100? JMP .+3 /NO, OK HLT /YES, ERROR HALT JMP .-1 JMS CPCH /PUNCH BIN CHAR TAD RBUSY SZA CLA /READER BUSY? OUT /YES, EXIT TAD PCHCNT /GET PUNCH COUNT TAD [-12 /SUBTRACT SLACK COUNT SPA CLA /POSITIVE? OUT /NO, EXIT RFC /YES, START READER ISZ RBUSY /SET READER BUSY OUT /EXIT CPCH, 0 JMS I GETPTR /GET BIN CHAR PLS /ENABLE PUNCH CLA /CLEAR AC JMP I CPCH /EXIT CREAD, 0 CLA RRB /READ CHAR DCA TCHKW /STORE IT TAD PCHCNT /GET PUNCH COUNT TAD [-1 /MINUS 1 DCA PCHCNT /STORE IT TAD PCHCNT SZA CLA /0? JMP .+3 /NO DCA RBUSY /YES, CLEAR READER BUSY JMP I CREAD /EXIT RFC /FETCH NEXT CHAR JMP I CREAD /EXIT WNZERO, JMS CREAD /READ CHAR TAD TCHKW SNA CLA /IS IT 0? OUT /YES SETLOC /SET INTERRUPT SERVICE RVCTR /TO RBIN RBIN SETA /-5 TO CTRA -5 SKP RBIN, JMS CREAD /READ CHAR JMS I GETPT /GET BINARY CHAR DCA I UTSB TAD TCHKW /GET CHAR READ JMS I UTCHK /GO CHECK IT SKP /ERROR OUT /NO ISZ CTRA /5 ERRORS? OUT /NO, TO MAINLINE RBINA, SETLOC /YES, SET READER SERVICE RVCTR /TO RESYNC TAPE .+2 OUT JMS CREAD /READ CHAR TAD TCHKW DCA CHR1 /STORE SETLOC /SET READER SERVICE RVCTR .+2 OUT JMS CREAD /READ CHAR TAD TCHKW DCA CHR2 SETLOC /SET READER SERVICE RVCTR .+2 OUT JMS CREAD /READ CHAR TAD TCHKW DCA CHR3 JMS I SYNCA /GO SYNC JMP RBINA /SYNC ERROR, TRY AGAIN SETA /YES, -5 TO CTRA -5 SETLOC /RESTORE READER SERVICE TO RVCTR /TO RBIN RBIN OUT PAGE /PROGRAM 10, READ AMPLIFIER ADJUSTMENT LOOP PRG10, SETLOC /SET INTERRUPT SERVICE 2 /TO INTSVC INTSVC SETLOC /SET PUNCH SERVICE ADDRESS PVCTR /TO PCHCLR PCHCLR SETLOC /SET READER SERVICE ADDRESS RVCTR /TO AMPRDA AMPRDA SETLOC ERRORA 7000 TAD [NOP DCA I [STALL+3 DCA SRMSK /0 TO SR MASK RAMPA, JMS AMPRD /GO READ CHAR SZA /ZERO? SKP /NO RAMPB, JMS AMPRD /GO READ CHAR CIA TAD [PTMSK SZA CLA /ALL 1'S? JMP RAMPC /NO, ERROR JMS AMPRD /YES, GO READ SZA CLA /ZERO? JMP RAMPD /NO, ERROR JMP RAMPB /YES, REPEAT RAMPC, JMS I UASCCN /CONVERT EXPECTED CHAR RAMPF /TO PRINTABLE ASCII SB JMS I UASCCN /CONVERT BAD CHAR TO RAMPWA /TO PRINTABLE ASCII WAS JMP RAMPE RAMPD, JMS I UASCCN /CONVERT EXPECTED CHAR RAMPWB /TO PRINTABLE ASCII SB JMP RAMPD-4 RAMPE, JMS I UERROR /GO PRINT ERROR NOSUF SBWAS JMP RAMPA /TRY AGAIN RAMPF, 377 AMPRD, 0 SETDLM /-75 TO DELAYM -113 RFC /FETCH CHAR ION /ENABLE INTERRUPT DELAY /DELAY 75 MS IOF RSF /FLAG 1? SKP /NO, FLAG DROPPED JMP AMPRDA /YES JMS I XTYPST /RING BELL 3 TIMES BELL3 JMP RAMPA /TRY AGAIN AMPRDA, RRB DCA RAMPWA TAD RAMPWA JMP I AMPRD RAMPWA, 0 RAMPWB, 0 BELL3, 0007 /BELL 0007 /BELL 0007 /BELL 0001 /END CODE / /PROGRAM 11, PUNCH ANY CHAR IN SR CONTIUOUSLY PRG11, LAS /READ SR AND [PTMSK PLS /PUNCH CHAR PSF /FLAG 1? JMP .-1 JMP .-6 /YES, REPEAT / /PROGRAM 12, PUNCH 1'S AND 0'S LOOP PRG12, SETLOC SRMSK 0075 PRG12A, CLA CMA AND [PTMSK JMS I UTPCH /PUNCH ALL 1'S JMS I [STALL CLA JMS I UTPCH /PUNCH ALL 0'S JMS I [STALL JMP PRG12A /REPEAT PAGE /PROGRAM 13, READER SPEED PRINT LOOP PRG13, CLA DCA CTRB /CLEAR CTRB LAS /READ SR CLL RAL SPA CLA /LONG OR SHORT? TAD [-416 /LONG TAD [-36 /SHORT DCA TKN /STORE AT TKN JMP TSTRL TSTRD, RFC /START READER RSF /WAIT FOR JMP .-1 /FLAG ISZ CTRA /INCREMENT CTRA JMP TSTRC ISZ CTRB /INCREMENT CTRB NOP TSTRL, TAD TKN /LOAD CTRA DCA CTRA TSTRC, LAS /READ SR SMA CLA /PRINT SPEED? JMP TSTRD /NO, CONTINUE JMS I XTYPST /YES RSPD JMS TSTRPC HLT JMP PRG13 TKN, OPEN /PROGRAM 14, PUNCH SPEED PRINT LOOP PRG14, CLA DCA CTRB /CLEAR CTRB JMP TSTPL TSTPP, PLS PSF JMP .-1 ISZ CTRA /60? JMP TSTPC /NO ISZ CTRB /YES, INCREMENT CTRB NOP TSTPL, TAD [-74 DCA CTRA /LOAD -60 IN CTRA TSTPC, LAS /READ SR SMA CLA /PRINT SPEED (AFTER 60 SECONDS) JMP TSTPP /NO, CONTINUE JMS I XTYPST /YES PSPD JMS TSTRPC HLT JMP PRG14 TSTRPC, 0 JMS BDCNV /TYPE C(CTRB) IN DECIMAL CTRB JMS I XTYPST /TYPE "CPS" CPS JMP I TSTRPC /EXIT BDCNV, 0 /BINARY TO DECIMAL CONVERT SETLOC /AND PRINT SUBROUTINE CNVCTR -4 TAD ADDRZA /INITIALIZE ARROW DCA ARROW TAD I BDCNV /GET AND STORE BINARY ISZ BDCNV /NUMBER, SORE IT AT VALUE DCA DIGIT TAD I DIGIT DCA VALUE DCA DIGIT /O TO DIGIT CLL TAD VALUE ARROW, TAD TENPWR SNL JMP .+4 ISZ DIGIT DCA VALUE JMP ARROW-2 CLA TAD DIGIT TAD [260 JMS I UPUNCH CLA CLL ISZ ARROW ISZ CNVCTR JMP ARROW-3 JMP I BDCNV ADDRZA, TAD TENPWR TENPWR, -1750 -144 -12 -1 VALUE, 0 DIGIT, 0 CNVCTR, 0 / /PROGRAM 15, READ X CHARACTERS, STALL Y MS, LOOP TO ADJUST TIMINGS PRG15, HLT CLA /HALT TO SET SR LAS /READ SR AND [177 /MASK OFF EXCESS BITS CIA DCA DELAYM /STORE STALL COUNT LAS /READ SR AND [7600 /MASK OFF EXCESS BITS CLL RTL RTL RTL CIA DCA .+2 P15A, SETA /-X TO CTRA 0 P15B, RFC /FETCH CHAR RSF /FLAG 1? JMP .-1 ISZ CTRA /READ X CHARS? JMP P15B /NO DELAY /YES, DELAY Y MS JMP PRG15+1 /REPEAT /WOW! I MADE IT... $