File: DHPCA.PA of Disk: Disks/Build-2007/MyProgs-22-04-07
(Source file text) 

/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...
$