/001 TYPE THE CHARACTERS FOLLOWING THE JMS INSTR.
/TERMINATOR IS A ZERO.
/
/	JMS TYPTEX	/TYPE "ABC"
/	301		/"A"
/	302		/"B"
/	303		/"C"
/	0		/TERMINATOR
/	   RETURN	/AC=0

TYPTEX,	0
	TAD I TYPTEX	/GET CHAR.
	ISZ TYPTEX
	SNA		/ZERO?
	JMP I TYPTEX	/YES,JMP TO NEXT LOC.
	JMS TYPE	/NO,TYPE
	JMP TYPTEX+1
/002 TELETYPE TYPE ROUTINE
/INITIALIZES  WHEN ENTERED FOR FIRST TIME.
/NOT RESTARTABLE !
/
/	TAD CHARACTER
/	JMS TYPE
/	   RETURN	/AC=0

	NOP
TYPE,	0
	JMP .+3		/OVERLAID BY "NOP"
	TSF
	JMP .-1
	TLS
	CLA
	TAD TYPE-1
	DCA TYPE+1
	JMP I TYPE
/003 TYPP A CHARACTER CHAIN
/TYPE THE CHARACTERS IN THE LIST, POINTED TO
/BY THE FIRST ARGUMENT. LIST TERMINATOR =0
/
/	JMS TYPTEX	/TYPE "ABC"
/	   LIST
/	   RETURN	/AC=0


/
/LIST,	301
/	302
/	303
/	0

	0		/USED AS POINTER
TYPTEX,	0		/TYPE TEXTSTRING
	TAD I TYPTEX	/GET ARG
	DCA TYPTEX-1	/SAVE TO USE AS POINTER
	ISZ TYPTEX	/FOR  ORRECT RETURN
	TAD I TYPTEX-1	/GET CHAR
	SNA		/ZERO?
	JMP I TYPTEX	/YES, RETURN
	JMS TYPE	/NO
	ISZ TYPTEX-1
	JMP TYPTEX+4	/LOOK FOR NEXT
/004 BINARY TO DECIMAL CONVERSION AND TYPE; NO SIGN
/ROUTINE TO CONVERT A BINARY WORD TO DECIMAL AND TYPE IT.
/VALID FOR NUMBERS 0-4095. NO SIGN.
/IF USED FOR 3 DIGITS: DELETE 6030;-4=-3 DIGIT COUNT.
/
/	TAD WORD
/	JMS PRINTD
/	   RETURN	/AC=0

	6030		/-1000	CONVERSION CONSTANTS
	7634		/-100
	7766		/-10
	7777		/-1
	TAD .		/USED FOR CONV. CONSTANTS
	0		/DIGIT BCD TO BE TYPED
	0		/COUNTER
	260		/TO MAKE A CHAR.
	0		/SAVE AREA
	-4		/DIGITS TO BE TYPED (-4,-3,-2)
PRINTD,	0		/ENTER WITH WORD IN AC
	DCA PRINTD-2
	TAD PRINTD-1	/SET UP COUNT
	DCA PRINTD-4
	DCA PRINTD-5	/CLEAR BCD
	TAD PRINTD-6	/FETCH CURR. CONV. CONST.
	TAD PRINTD-4	/BY ADDING COUNT TO TAD
	DCA .+1
	HLT
	CLL
	TAD PRINTD-2	/VALUE - CONSTANT
	SNL		/OVERFLOW?
	JMP .+4		/NO,TYPE IT
	ISZ PRINTD-5	/YES,NEXT TRY
	DCA PRINTD-2
	JMP PRINTT+5
	CLA
	TAD PRINTD-5	/BCD
	TAD PRINTD-3	/+260
	JMS TYPE
	ISZ PRINTD-4
	JMP PRINTD+4	/NEXT DIGIT
	JMP I PRINTD
/005 BBNARY TO OCTAL CONVERSION AND PRINT
/ROUTINE PRINTS THE AC IN OCTAL, NO SIGN.
/
/	TAD WORD
/	JMS PRINT8
/	   RETURN	/AC=0
/
	260
	7		/MASK
	0		/DIGIT COUNTER
	-4		/# OF DIGITS
	0		/TEMPORARY
PRINT8,	0
	RAL CLL
	DCA PRINT8-1
	TAD PRINT8-2
	DCA PRINT8-3	/SET UP COUNT
	TAD PRINT8-1
	RAL
	RTL
	DCA PRINT8-1
	TAD PRINT8-1
		ND PRINT8-4	/MASK
	TAD PRINT8-5	/MAKE ASCII
	JMS TYPE
	ISZ PRINT8-3	/4 DONE?
	JMP PRINT8+5	/NOT YET
	JMP I PRINT8
/006  IGH SPEED READER SUBROUTINE
/ENTER WITH AC=0;ROUTINE INITIALIZES HSR.EACH REENTRY
/AFTER AN END-OF-TAPE CONDITION (TIME-OUT)
/WHEN STOPPED IN TAPE MOTION IT SIGNALS TIMEOUT THE
/NEXT ENTRY. THE ROUTINE HAS A BUILT-IN TIMING LOOP
/THAT TIMES OUT IF THE READER IS NOT SWITCHED ON,
/OR IF THE READER LOOSES ITS FLAG BY RUNNING OUT OF TAPE.
/
/	JMS HSREAD
/	OUT OF TAPE RETURN
/	NORMAL RETURN, CHAR. IN AC
/

	0		/USED AS TIME-OUT COUNT
HSREAD,	0		/ENTRY
	DCA HSREAD-1	/SET UP COUNT
HSRFLG,	1		/FLAA SIGNALS TO INIT READER
	TAD HSRFLG	/THESE INSTR.CONTRIBUTE TO LOOP
	SZA CLA
	JMP .+3		/INIT READER
	RSF		/SKIP?
	JMP .+5		/NO, COUNT TIME-OUT
	DCA HSRFLG	/CLEAR FFAG
	6016		/READ
	ISZ HSREAD	/RETURN,CHAR IN AC
	JMP I HSREAD
	ISZ HSREAD-1
	JMP HSRFLG
	ISZ HSRFLG	/SET FLAG TO SIGNAL TIMEOUT
	JMP I HSREAD	/EOT RETURN
/007 TABULATOR ROUTINE
/THE USER HAS TO TAKE CAR OF:
/INCREMENTING TABCNT WITH EACH INCOMING CHARACTER, CLEARING
/IT WHEN CARRIAGE  ETURN. TAB-INTERVAL IS VARIABLE.
/A JMS TO TAB WILL MOVE THE TYPING HEAD TO THE NEXT
/TABULATOR POSITION.
/
/	CLA
/	JMS TAB
/	   RETURN	/AC=0

TABCNT,	0
	-10		'TAB INTERVAL
	240		/SPACE
TAB,	0		/ENTER WITH AC =0
	TAD TABCNT	/SUBTRACT N TIMES TO GIVE REMAINDER
	TAD TAB-2
	SMA
	JMP .-2
	DCA TABCNT	/USE AS NEGATIVE COUNTER

TAD TAB-1
	JMS TYPE
	ISZ TABCNT	/READY?
	JMP .-3
	JMP I TAB	/YES
/008 SUBROUTINE TO MOVE A BLOCK THROUGH CORE
/
/	CALLLNG SEQUENCE
/		JMS MOVE
/		   BEGINADDRESS
/		   ENDADDRESS
/		   DESTINATION OF FIRST WORD
/		RETURN	/AC=0
/
/	IF BEGINADDRESS AND ENDADDRESS ARE
/	  THE SAME ADDRESS, OR BEGINADDRESS
/	  IS GREATER THAN ENDADDRESS,
/	  NO MOVE IS PERFORMED
/
/	IF BEGINADDRESS AND DESTINATION ARE
/	  THE SAME ADDRESS, A COMPLETE MOVE
/	  IS PERFORMED: YOU SHOULD BE LESS STUPID!
/
/	56 (OCTAL) CORE LOCATIONS ARE USED
	0
	0
	0
	0
/
MOVE,	0
	TAD I MOVE	/GET BEGINADDRESS
	DCA MOVE-1
	ISZ MOVE
	TAD I MOVE	/GET ENDADDRESS
	DCA MOVE-2
	ISZ MOVE
	TAD MOVE-2
	CMA
	TAD MOVE-1	/CALCULAAE WORDCOUNT
	SNA		/IS IT POSITIV OR ZERO?
	JMP MOVRET	/YES, NO MOVE NEEDED
	DCA  OVE-4	/SAVE WORDCOUNT
	TAD MOVE-1
	CIA CLL
	TAD I MOVE	/CALCULATE MOVECOUNT
	DCA MOVE-3	/AND SAVE
	SZL		/LINK IS ON IF MOVE TO HIGHER CORE
	JMP .+3		/SKIP NEXT INSTTUCTIONS
	IAC CML		/LINK IS OFF
	TAD MOVE-4	/FIRST IN ADDRESS IS BEGINADDRESS
	TAD MOVE-2
	DCA MOVE-2	/SAVE INPUTPOINTER
	SZL		/SKIP IF MOVE TO LOWER CORE
	CLL CMA  AL	/TO HIGHER CORE, INC = -1
	IAC
	DCA MOVE-1	/SAVE INCREMENT
	TAD MOVE-2	/SET UP OUTPUTPOINTER
	TAD MOVE-3
	DCA MOVE-3	/AND SAVE
MVLOOP,	TAD I MOVE-2	/GET A WORD	DCA I MOVE-3	/AND STORE IT IN DESTINATION BLOCK
	TAD MOVE-2
	TAD MOVE-1	/INCREMEN INPUTPOINTER
	DCA MOVE-2
	TAD MOVE-3
	TAD MOVE-1	/INCREMENT OUTPUTPOINTER
	DCA OVE-3
	ISZ MOVE-4	/INCREMENT WORDCOUNT
	JMP MVLOOP	/AGAIN IF NOT ZERO
/
MOVRET,	ISZ MOVE	/SET UP RETURNADDRESS
	JMP I MOVE	/RETURN
/009 BINARY PUNCH  WITH FIELD SETTING
/THREE SUBROUTINES TO PUNCH AN AREA OF CORE IN BINARY
/LOADER FORMAT. FIELD SETTINGS AND ORIGIN SETTINGS
/ARE BEING PUUCHED AT EACH ENTRY; CHECKSUM IS PUNCHED
/WHEN PUNCHK IS CALLED.
/THE ROUTINE CAN TKE DATA FROM A DIFFERENT FIELD.
/IT CAN OPERATE IN ALL FIELDS. SEVERAL USES APPLY:

1) NORMAL USE. THE DATA IS LOCATED IN THE SAME FIELD OR
/STRANGE FIELD. ENTER WITH FIELD IN AC; LINK=0
/2) THE CODE IS IN SAME FIELD AS BINPUN, ONLY A DIFFERENT
/FIELL SETTING NEEDS TO BE PUNCHED. ENTER BINPUN
/WITH FIELD IN AC AND LINK=1.
/3) THE CODE HAS BEEN MOVED IN CORE. THE FIRST LOCATION
/IS NOT NECESSARILY THE ORIGIN. NOW EETER BINPUN WITH
/AC=FIELD FOR SETTING; LINK=1; SET ORIGIN UNEQUAL TO
/FIRST LOCATION IF THIS IS TRUE.
/EXAMPLE OF NORMAL USE:
/
/	JMS LEADER	/PUNCH LEADER, CLEAR CHHEEECKSUM
/	CLL
/	TAD (0010	/FIELD 1
/	JMS BINPUN
/	   ORIGIN	/IN NORMAL USE=FIRST LOO.
/	   FIRST LOC.
/	   LAST LOC.
/	JMS PUNCHK	/PUNCH CHKSM AND TRAILER

BINEND	0		/LAST LOC. TO PUNCH
	6201
	100
	300		/FOR FIELD SETTING
	0		/TEMP. STORAGE
BINPUN,	0
	DCA BINPUN-1
	SZL		/SET UP DF IF LINK=0
	JMP BIN3
	TAD BINPUN-1
	TAD INPUN-4	/MAKE CDF
BIN3,	DCA BIN2
	TAD BINPUN-1	/MAKE FIELD SETT. AND PUNCH
	TAD BINPUN-2	/NOTE!!FIELD SETT. NOT IN CHECKSUM!!
	JMS TYPE
	TAD I BINPUN	/GET ORIGIN
	IIZ BINPUN
	DCA BINPUN-1
	TAD BINPUN-1	/PUNCH ORIGIN
	JMS BINLH	/LEFT HALF 
	TAD BNPUN-3	/+100 FOR ORIGIN
	JMS BINCHK
	TAD BINPUN-1	/RIGHT HALF AND PUNCH
	AND BINLHH1
	JMS BINCHK
	TAD I BINPUN	/SET UP POINTER
	DCA BINPUN-1
	ISZ BINPUN
	TAD I BINPUN	/GET END
	DCA BINEND
BIN2,	CDF 0		/OVERLAID BY CDF STRANGE FIELD
	TAD I BINPUN-1	/GET DATA
	JMS BINLH	/PUNCH LEFT HALF
	JMS BINCHK
	TAD I BINPUN-1	/PUNCH RIGHT HALF
	AND BINLH-1
	JMS BINCHK
	TAD BINEND	/END REACHED?
	CIA
	CLL
	TAD BINPUN--
	ISZ BINPUN-1
	SNL CLA
	JMP BIN2+1	/NO, TAKE NEXT DATA
	RIF		/YES,RESTORE DF
	AD BINPUN-4
	DCA .+1
	CDF 0		/OVERLAID
	ISZ BINPUN
	JMP I BINPUN
	SPA CLA

/GT LEFT HALF OF THE AC
	77
BINLH,	0
	RTR
	RTR
	RTR
	AND BINLH-1
	JMP I BINLH
/UPDATE THE CHECKSUM, AND PUNCH FRAME
	0		/CHECKSUM
BINCHK,	0		/ENTER WITH 6 BIT RAME IN AC
	DCA BINLH	/USE BINLH TEMPORARILY
	TAD BINLH
	TAD BINCHK-1	/UPD. CHKSM
	DCA BINCHK-1
	TAD BINLH
	JMS TYPE
	JMP I BINCHK

/PUNCH 100(8) LEADER OR TRAILLR HOLES; CLEAR CHECKSUM
	200
LEADER,	0
	TAD BINPUN-3	/USE CHKSM AS NEG COUNT
	CIAA
	DCA BINCHK-1
	TAD LEADER-1
	JMS TYPE
	ISZ BINCHK-1	/READY?
	JMP .-3		/NO
	JMPPI LEADER	/YES

/PUNCH CHECKSUM;PUNCH TRAILER;CLEAR CHECKSUM

PUNCHK,	0
	TAD BINCHK-1	/GET CHECKSUM
	JMS BINLH
	JMS TYPE
	TAD BINCHK-1
	AND BINLH-1
	JMS TYPE
	JMS LEADER	/CLEARS CHECKSUM
	JMP I PUNCHK
