Raw File
PINBALL_GAME__BUTTONS_AND_LIGHTS.agc
### FILE="Main.annotation"
## Copyright:	Public domain.
## Filename:	PINBALL_GAME_BUTTONS_AND_LIGHTS.agc
## Purpose:	Part of the source code for Artemis (i.e., Colossus 3),
##		build 072.  This is for the Command Module's (CM)
##		Apollo Guidance Computer (AGC), for
##		Apollo 15-17.
## Assembler:	yaYUL
## Contact:	Jim Lawton <jim DOT lawton AT gmail DOT com>
## Website:	www.ibiblio.org/apollo/index.html
## Page Scans:	www.ibiblio.org/apollo/ScansForConversion/Artemis072/
## Mod history:	2009-08-10 JL	Adapted from corresponding Comanche 055 file.
## 		2009-09-03 JL	Fixed conversion error (duplicate declaration
##				of NEG.2).
## 		2009-09-04 JL	Fixed page comment.
## 		2010-01-31 JL	Fixed build errors.
## 		2010-02-02 JL	Removed extra instruction (TS DSPCOUNT). Fixed
##				page numbers.
## 		2010-02-05 JL	Fixed code errors.
## 		2010-02-07 JL	Added missing BANK opcode on p369. Removed 
##				extra instruction on p383.
##		2010-02-10 JL	Fixed line on p381.
##		2010-02-13 JL	Fixed errors on pages 327, 354, 356, 362, 363, 
##				368, 370, 374, 379, 380, 391, 392.
##		2010-02-20 RSB	Un-##'d this header.
##		2011-05-07 JL	Removed obsolete link.
##		2017-01-28 RSB	WTIH -> WITH.
##		2017-02-08 RSB	Proofed comment text by combination of 
##				octopus/ProoferComments and diff'ing vs
##				Comanche 55.
##		2017-03-08 RSB	Changed DSPOCTWO to DSPOCTWD.
##		2017-03-08 RSB	Comment-text fixes noted in proofing Luminary 116.
##		2017-03-16 RSB	Comment-text fixes identified in 5-way
##				side-by-side diff of Luminary 69/99/116/131/210.
##		2017-03-17 RSB	Comment-text fixes identified by 4-way diff'ing
##				of Colossus 237 & 249, Comanche 55, and Artemis 72.
##				In several places, trailing periods that were missing
##				or extremely faint in the printout were restored, 
##				and marked with a ##-style comment.  This occurred
##				if a period was present in _all_ other available 
##				Colossus or Luminary version (8 in all) without there
##				being any other different obvious in the line.

## Page 318

# PROGRAM NAME - KEYBOARD AND DISPLAY PROGRAM
# MOD BY - BARNERT	DATE - 20 AUG 1969
# LOG SECTION - PINBALL GAME BUTTONS AND LIGHTS
#
# FUNCTIONAL DESCRIPTION-
#
# 	THE KEYBOARD AND DISPLAY SYSTEM PROGRAM OPERATES UNDER EXECUTIVE
# 	CONTROL AND PROCESSES INFORMATION EXCHANGED BETWEEN THE AGC AND THE
# 	COMPUTER OPERATOR.  THE INPUTS TO THE PROGRAM ARE FROM THE KEYBOARD,
# 	FROM INTERNAL PROGRAMS, AND FROM THE UPLINK.
#
# 	THE LANGUAGE OF COMMUNICATION WITH THE PROGRAM IS A PAIR OF WORDS
# 	KNOWN AS VERB AND NOUN.  EACH OF THESE IS REPRESENTED BY A 2 CHARACTER
# 	DECIMAL NUMBER.  THE VERB CODE INDICATES WHAT ACTION IS TO BE TAKEN, THE
# 	NOUN CODE INDICATES TO WHAT THIS ACTION IS APPLIED.  NOUNS USUALLY
# 	REFER TO A GROUP OF ERASABLE REGISTERS.
#
# 	VERBS ARE GROUPED INTO DISPLAYS, LOADS, MONITORS (DISPLAYS THAT ARE
# 	UPDATED ONCE PER SECOND), SPECIAL FUNCTIONS, AND EXTENDED VERBS (THESE
# 	ARE OUTSIDE OF THE DOMAIN OF PINBALL AND CAN BE FOUND UNDER LOG SECTION
# 	:EXTENDED VERBS:).
#
# 	A LIST OF VERBS AND NOUNS IS GIVEN IN LOG SECTION :ASSEMBLY AND
# 	OPERATION INFORMATION:.
#
# CALLING SEQUENCES-
#
# 	KEYBOARD:
# 	EACH DEPRESSION OF A MAIN (NAVIGATION) KEYBOARD BUTTON ACTIVATES
# 	INTERRUPT KEYRUPT1 (KEYRUPT2) AND PLACES THE 5 BIT KEY CODE INTO
# 	CHANNEL 15 (CHANNEL 16).  KEYRUPT1 (KEYRUPT2) PLACES THE KEY
# 	CODE INTO MPAC, ENTERS AN EXECUTIVE REQUEST FOR THE KEYBOARD AND DISPLAY
# 	PROGRAM (AT :CHARIN:), AND EXECUTES A RESUME.
#
# 	UPLINK:
# 	EACH WORD RECEIVED BY THE UPLINK ACTIVATES INTERRUPT UPRUPT WHICH
# 	PLACES THE 5 BIT KEY CODE INTO MPAC, ENTERS AN EXECUTIVE REQUEST FOR THE
# 	KEYBOARD AND DISPLAY PROGRAM (AT :CHARIN:) AND EXECUTES A RESUME.
#
# 	INTERNAL PROGRAMS:
# 	INTERNAL PROGRAMS CALL PINBALL AT :NVSUB: WITH THE DESIRED VERB/NOUN
# 	CODE IN A (LOW 7 BITS FOR NOUN, NEXT 7 BITS FOR VERB).  DETAILS
# 	DESCRIBED ON REMARKS CARDS JUST BEFORE :NVSUB: AND :NVSBWAIT: (SEE
# 	SYMBOL TABLE FOR PAGE NUMBERS).
#
# NORMAL EXIT MODES-
#
#	IF PINBALL WAS CALLED BY EXTERNAL ACTION, THERE ARE FOUR EXITS:
#		1) ALL BUT (2), (3), AND (4) EXIT DIRECTLY TO ENDOFJOB.
#		2) EXTENDED VERBS GO TO THE EXTENDED VERB FAN AS PART OF THE
## Page 319
#		   PINBALL EXECUTIVE JOB WITH PRIORITY 30000.  IT IS THE
#		   RESPONSIBILITY OF THE EXTENDED VERB CALLED TO EVENTUALLY
#		   CHANGE PRIORITY (IF NECESSARY) AND DO AN ENDOFJOB.
#		   ALSO PINBALL IS A NOVAC JOB. EBANK SET FOR COMMON.
#		3) VERB 37. CHANGE OF PROGRAM (MAJOR MODE) CALLS :V37: IN THE
#		   SERVICE ROUTINES AS PART OF THE PINBALL EXEC JOB WITH PRIO
#		   30000.  THE NEW PROGRAM CODE (MAJOR MODE) IS LEFT IN A.
#		4) KEY RELEASE BUTTON CALLS :PINBRNCH: IN THE DISPLAY INTERFACE
#		   ROUTINES AS PART OF THE PINBALL EXEC JOB WITH PRIO 30000 IF
#		   THE KEY RELEASE LIGHT IS OFF AND :CADRSTOR: IS NOT +0.
#
# 	IF PINBALL WAS CALLED BY INTERNAL PROGRAMS, EXIT FROM PINBALL IS BACK
# 	TO CALLING ROUTINE.  DETAILS DESCRIBED IN REMARKS CARDS JUST BEFORE
# 	:NVSUB:
#
# ALARM OR ABORT EXIT MODES-
#
# 	EXTERNAL INITIATION:
#	IF SOME IMPROPER SEQUENCE OF KEY CODES IS DETECTED, THE OPERATOR
#	ERROR LIGHT IS TURNED ON AND EXIT IS TO :ENDOFJOB:.
#
#	INTERNAL PROGRAM INITIATION:
#	IF AN ILLEGAL V/N COMBINATION IS ATTEMPTED, AN ABORT IS CAUSED
#	(WITH OCTAL 21501).
#	IF A SECOND ATTEMPT IS MADE TO GO TO SLEEP IN PINBALL, AN ABORT IS
#	CAUSED (WITH OCTAL 21206). THERE ARE TWO WAYS TO GO TO SLEEP IN PINBALL:
#		1) ENDIDLE
#		2) NVSUBUSY
#
# OUTPUT-
#
# INFORMATION TO BE SENT TO THE DISPLAY PANEL IS LEFT IN THE :DSPTAB:
# BUFFERS REGISTERS (UNDER EXEC CONTROL).  :DSPOUT: (A PART OF T4RUPT)
# HANDLES THE PLACING OF THE :DSPTAB: INFORMATION INTO OUTPUT CHANNEL 10
# IN INTERRUPT.
#
# ERASABLE INITIALIZATION-
#
# FRESH START AND RESTART INITIALIZE THE NECESSARY E REGISTERS FOR
# PINBALL IN :STARTSUB:.  REGISTERS ARE:  DSPTAB BUFFER, CADRSTOR,
# REQRET, CLPASS, DSPLOCK, MONSAVE, MONSAVE1, VERBREG, NOUNREG, DSPLIST,
# DSPCOUNT, NOUT.
#
# A COMPLETE LIST OF ALL THE ERASABLES (BOTH RESERVED AND TEMPORARIES) FOR
# PINBALL IS GIVEN BELOW.
#
# THE FOLLOWING ARE OF GENERAL INTEREST-
#
# REMARKS CARDS PRECEDE THE REFERENCED SYMBOL DEFINITION.  SEE SYMBOL
# TABLE TO FIND APPROPRIATE PAGE NUMBERS.
#
## Page 320
#	NVSUB		CALLING POINT FOR INTERNAL USE OF PINBALL.
#			OF RELATED INTEREST - NVSUBUSY
#
#	ENDIDLE		ROUTINE FOR INTERNAL PROGRAMS WISHING TO GO TO SLEEP WHILE
#			AWAITING OPERATORS RESPONSE.
#
#	DSPMMJOB	ROUTINE CALL WITH PRIO 30000, USED TO DISPLAY A DECIMAL
#			PROGRAM CODE (MAJOR MODE) IN THE PROGRAM (MAJOR MODE) LIGHTS.
#
#	BLANKSUB	ROUTINE BY WHICH AN INTERNAL PROGRAM MAY BLANK ANY
#			COMBINATION OF THE DISPLAY REGISTERS R1, R2, R3.
#
#	JAMTERM		ROUTINES BY WHICH AN INTERNAL PROGRAM MAY PERFORM THE
#			TERMINATE (V 34) FUNCTION.
#
#	MONITOR		VERBS FOR PERIODIC (1 PER SEC) DISPLAY.
#
#	PLEASE PERFORM, PLEASE MARK SITUATIONS
#		REMARKS DESCRIBING HOW AN INTERNAL ROUTINE SHOULD HANDLE
#		THESE SITUATIONS CAN BE FOUND JUST BEFORE :NVSUB: (SEE
#		SYMBOL TABLE FOR PAGE NUMBER).
#
#	THE NOUN TABLE FORMAT IS DESCRIBED ON A PAGE OF REMARKS CARDS JUST
#	BEFORE :DSPABC: (SEE SYMBOL TABLE FOR PAGE NUMBER).
#
#	THE NOUN TABLES THEMSELVES ARE FOUND IN LOG SECTION :PINBALL NOUN
#	TABLES:.
#
# FOR FURTHER DETAILS ABOUT OPERATION OF THE KEYBOARD AND DISPLAY SYSTEM
# PROGRAM, SEE THE MISSION PLAN AND/OR MIT/IL E-2129
# DESCRIBING KEYBOARD AND DISPLAY OPERATION FOR 278.
#
# THE FOLLOWING QUOTATION IS PROVIDED THROUGH THE COURTESY OF THE AUTHORS.
#
#	::IT WILL BE PROVED TO THY FACE THAT THOU HAST MEN ABOUT THEE THAT
#	USUALLY TALK OF A NOUN AND A VERB, AND SUCH ABOMINABLE WORDS AS NO
#	CHRISTIAN EAR CAN ENDURE TO HEAR.::
#					HENRY 6, ACT 2, SCENE 4
#
# THE FOLLOWING ASSIGNMENTS FOR PINBALL ARE MADE ELSEWHERE
#
# RESERVED FOR PINBALL EXECUTIVE ACTION
#
# DSPCOUNT	ERASE			DISPLAY POSITION INDICATOR
# DECBRNCH	ERASE			+DEC, -DEC, OCT INDICATOR
# VERBREG	ERASE			VERB CODE
# NOUNREG	ERASE			NOUN CODE
# XREG		ERASE			R1 INPUT BUFFER
## Page 321
# YREG		ERASE			R2 INPUT BUFFER
# ZREG		ERASE			R3 INPUT BUFFER
# XREGLP	ERASE			LO PART OF XREG (FOR DEC CONV ONLY)
# YREGLP	ERASE			LO PART OF YREG (FOR DEC CONV ONLY)
# HITEMOUT	=	YREGLP		TEMP FOR DISPLAY OF HRS,MIN,SEC
#						MUST = LOTEMOUT-1.
# ZREGLP	ERASE			LO PART OF ZREG (FOR DEC CONV ONLY)
# LOTEMOUT	=	ZREGLP		TEMP FOR DISPLAY OF HRS,MIN,SEC
#						MUST = HITEMOUT+1.
# MODREG	ERASE			MODE CODE
# DSPLOCK	ERASE			KEYBOARD/SUBROUTINE CALL INTERLOCK
# REQRET	ERASE			RETURN REGISTER FOR LOAD
# LOADSTAT	ERASE			STATUS INDICATOR FOR LOADTST
# CLPASS	ERASE			PASS INDICATOR CLEAR
# NOUT		ERASE			ACTIVITY COUNTER FOR DSPTAB
# NOUNCADR	ERASE			MACHINE CADR FOR NOUN
# MONSAVE	ERASE			N/V CODE FOR MONITOR. (= MONSAVE1-1)
# MONSAVE1	ERASE			NOUNCADR FOR MONITOR (MATBS) = MONSAVE+1
# MONSAVE2	ERASE			NVMONOPT OPTIONS
# DSPTAB	ERASE	+13D		0-10, DISPLAY PANEL BUFFER. 11-13, C RELAYS
# CADRSTOR	ERASE			ENDIDLE STORAGE
# NVQTEM	ERASE			NVSUB STORAGE FOR CALLING ADDRESS
#					MUST = NVBNKTEM-1
# NVBNKTEM	ERASE			NVSUB STORAGE FOR CALLING BANK
#					MUST = NVQTEM+1
# VERBSAVE	ERASE			NEEDED FOR RECYCLE
# DSPLIST	ERASE			WAITING REG FOR DSP SYST INTERNAL USE
# EXTVBACT	REASE			EXTENDED VERB ACTIVITY INTERLOCK
# DSPTEM1	ERASE	+2		BUFFER STORAGE AREA 1 (MOSTLY FOR TIME)
# DSPTEM2	ERASE	+2		BUFFER STORAGE AREA 2 (MOSTLY FOR DEG)
#
# END OF ERASABLES RESERVED FOR PINBALL EXECUTIVE ACTION
#
# TEMPORARIES FOR PINBALL EXECUTIVE ACTION
#
# DSEXIT	=	INTB15+		RETURN FOR DSPIN
# EXITEM	=	INTB15+		RETURN FOR SCALE FACTOR ROUTINE SELECT
# BLANKRET	=	INTB15+		RETURN FOR 2BLANK
#
# WRDRET	=	INTBIT15	RETURN FOR 5BLANK
# WDRET		=	INTBIT15	RETURN FOR DSPWD
# DECRET	=	INTBIT15	RETURN FOR PUTCOM(DEC LOAD)
# 21/22REG	=	INTBIT15	TEMP FOR CHARIN
#
# UPDATRET	=	POLISH		RETURN FOR UPDATNN, UPDATVB
# CHAR		=	POLISH		TEMP FOR CHARIN
# ERCNT		=	POLISH		COUNTER FOR ERROR LIGHT RESET
# DECOUNT	=	POLISH		COUNTER FOR SCALING AND DISPLAY (DEC)
#
# SGNON		=	VBUF		TEMP FOR +,- ON
## Page 322
# NOUNTEM	=	VBUF		COUNTER FOR MIXNOUN FETCH
# DISTEM	= 	VBUF		COUNTER FOR OCTAL DISPLAY VERBS
# DECTEM	=	VBUF		COUNTER FOR FETCH (DEC DISPLAY VERBS)
#
# SGNOFF	=	VBUF +1		TEMP FOR +,- ON
# NVTEMP	=	VBUF +1		TEMP FOR NVSUB
# SFTEMP1	=	VBUF +1		STORAGE FOR SF CONST HI PART (=SFTEMP2-1)
# HITEMIN	=	VBUF +1		TEMP FOR LOAD OF HRS, MIN, SEC
#						MUST = LOTEMIN-1.
# CODE		=	VBUF +2		FOR DSPIN
# SFTEMP2	=	VBUF +2		STORAGE FOR SF CONST LO PART (=SFTEMP1+1)
# LOTEMIN	=	VBUF +2		TEMP FOR LOAD OF HRS, MIN, SEC
#						MUST = HITEMIN+1.
# MIXTEMP	=	VBUF +3		FOR MIXNOUN DATA
# SIGNRET	=	VBUF +3		RETURN FOR +,- ON
#
# ALSO MIXTEMP+1 = VBUF+4, MIXTEMP+2 = VBUF+5.
#
# ENTRET	=	DOTINC		EXIT FROM ENTER
#
# WDCNT		=	DOTRET		CHAR COUNTER FOR DSPWD
# INREL		=	DOTRET		INPUT BUFFER SELECTOR (X,Y,Z, REG)
#
# DSPMMTEM	=	MATINC		DSPCOUNT SAVE FOR DSPMM
# MIXBR		=	MATINC		INDICATOR FOR MIXED OR NORMAL NOUN
#
# TEM1		ERASE			EXEC TEMP
# DSREL		=	TEM1		REL ADDRESS FOR DSPIN
#
# TEM2		ERASE			EXEC TEMP
# DSMAG		=	TEM2		MAGNITUDE STORE FOR DSPIN
# IDADDTEM	=	TEM2		MIXNOUN INDIRECT ADDRESS STORAGE
#
# TEM3		ERASE			EXEC TEMP
# COUNT		=	TEM3		FOR DSPIN
#
# TEM4		ERASE			EXEC TEMP
# LSTPTR	=	TEM4		LIST POINTER FOR GRABUSY
# RELRET	=	TEM4		RETURN FOR RELDSP
# FREERET	=	TEM4		RETURN FOR FREEDSP
# DSPWDRET	=	TEM4		RETURN FOR DSPSIGN
# SEPSCRET	=	TEM4		RETURN FOR SEPSEC
# SEPMNRET	=	TEM4		RETURN FOR SEPMIN
#
# TEM5		ERASE			EXEC TEMP
# NOUNADD	=	TEM5		TEMP STORAGE FOR NOUN ADDRESS
#
# NNADTEM	ERASE			TEMP FOR NOUN ADDRESS TABLE ENTRY
# NNTYPTEM	ERASE			TEMP FOR NOUN TYPE TABLE ENTRY
# IDAD1TEM	ERASE			TEMP FOR INDIR ADRESS TABLE ENTRY (MIXNN)
## Page 323
#					MUST = IDAD2TEM-1, = IDAD3TEM-2.
# IDAD2TEM	ERASE			TEMP FOR INDIR ADRESS TABLE ENTRY (MIXNN)
#					MUST = IDAD1TEM+1, = IDAD3TEM-1.
# IDAD3TEM	ERASE			TEMP FOR INDIR ADRESS TABLE ENTRY (MIXNN)
#					MUST = IDAD1TEM+2, = IDAD2TEM+1.
# RUTMXTEM	ERASE			TEMP FOR SF ROUT TABLE ENTRY (MIXNN ONLY)
#
# END OF TEMPORARIES FOR PINBALL EXECUTIVE ACTION
#
# ADDITIONAL TEMPORARIES FOR PINBALL EXECUTIVE ACTION
#
#	MPAC, THRU MPAC +6
#	BUF, +1, +2
#	BUF2, +1, +2
#	MPTEMP
#	ADDRWD
#
# END OF ADDITIONAL TEMPS FOR PINBALL EXEC ACTION
#
# RESERVED FOR PINBALL INTERRUPT ACTION
#
# DSPCNT	ERASE			COUNTER FOR DSPOUT
# UPLOCK	ERASE			BIT1 = UPLINK INTERLOCK (ACTIVATED BY
#					RECEPTION OF A BAD MESSAGE IN UPLINK)
#
# END OF ERASABLES RESERVED FOR PINBALL INTERRUPT ACTION
#
# TEMPORARIES FOR PINBALL INTERRUPT ACTION
#
# KEYTEMP1	=	WAITEXIT	TEMP FOR KEYRUPT, UPRUPT
# DSRUPTEM	=	WAITEXIT	TEMP FOR DSPOUT
# KEYTEMP2	=	RUPTAGN		TEMP FOR KEYRUPT, UPRUPT
#
# END OF TEMPORARIES FOR PINBALL INTERRUPT ACTION

## Page 324
# THE INPUT CODES ASSUMED FOR THE KEYBOARD ARE,
#	0		10000
#	1		00001
#	9		01001
#	VERB		10001
#	ERROR RES	10010
#	KEY RLSE	11001
#	+		11010
#	-		11011
#	ENTER		11100
#	CLEAR		11110
#	NOUN		11111
#
# OUTPUT FORMAT FOR DISPLAY PANEL. SET OUT0 TO AAAABCCCCCDDDDD.
# A-S 	SELECT A RELAYWORD. THIS DETERMINES WHICH PAIR OF CHARACTERS ARE
#     	ENERGIZED.
# B	FOR SPECIAL RELAYS SUCH AS SIGNS ETC.
# C-S	5 BIT RELAY CODE FOR LEFT CHAR OF PAIR SELECTED BY RELAYWORD
# D-S	5 BIT RELAY CODE FOR RIGHT CHAR OF PAIR SELECTED BY RELAYWORD.
#
# THE PANEL APPEARS AS FOLLOWS,
#	MD1	MD2 				(MAJOR MODE)
#	VD1	VD2 (VERB)	ND1	ND2	(NOUN)
#	R1D1	R1D2	R1D3	R1D4	R1D5 	(R1)
#	R2D1	R2D2	R2D3	R2D4	R2D5 	(R2)
#	R3D1	R3D2	R3D3	R3D4	R3D5 	(R3)
#
# EACH OF THESE IS GIVEN A DSPCOUNT NUMBER FOR USE WITHIN COMPUTATION ONLY
#
#	MD1	25	R2D1	11		ALL ARE OCTAL
#	MD2	24	R2D2	10
#	VD1	23	R2D3	7
#	VD2	22	R2D4	6
#	ND1	21	R2D5	5
#	ND2	20	R3D1	4
#	R1D1	16	R3D2	3
#	R1D2	15	R3D3	2
#	R1D3	14	R3D4	1
#	R1D4	13	R3D5	0
#	R1D5	12
#
# THERE IS AN 11 REGISTER TABLE (DSPTAB) FOR THE DISPLAY PANEL.
#
#	DSPTAB		RELAYWD		BIT11		BITS 10-6	BITS 5-1
#	RELADD
#	10		1011				MD1 (25)	MD2  (24)
#	9		1010				VD1 (23)	VD2  (22)
#	8		1001				ND1 (21)	ND2  (20)
#	7		1000						R1D1 (16)
## Page 325
#	6		0111		+R1		R1D2 (15)	R1D3 (14)
#	5		0110		-R1		R1D4 (13)	R1D5 (12)
#	4		0101		+R2		R2D1 (11)	R2D2 (10)
#	3		0100		-R2		R2D3 (7)	R2D4 (6)
#	2		0011				R2D5 (5)	R3D1 (4)
#	1		0010		+R3		R3D2 (3)	R3D3 (2)
#	0		0001		-R3		R3D4 (1)	R3D5 (0)
#			0000	    NO RELAYWORD
#
# THE 5 BIT OUTPUT RELAY CODES ARE:
#
#	BLANK	00000
#	0	10101
#	1	00011
#	2	11001
#	3	11011
#	4	01111
#	5	11110
#	6	11100
#	7	10011
#	8	11101
#	9	11111
#
# OUTPUT BITS USED BY PINBALL:
#
#	KEY RELEASE LIGHT	- BIT 5 OF CHANNEL 11
#	VERB/NOUN FLASH		- BIT 6 OF CHANNEL 11
#	OPERATOR ERROR LIGHT	- BIT 7 OF CHANNEL 11

## Page 326
# START OF EXECUTIVE SECTION OF PINBALL

		SETLOC	PINBALL1
		BANK

		COUNT*	$$/PIN
CHARIN		CAF	ONE		# BLOCK DISPLAY SYST
		XCH	DSPLOCK		# MAKE DSP SYST BUSY, BUT SAVE OLD
		TS	21/22REG	# C(DSPLOCK) FOR ERROR LIGHT RESET.
		CCS	CADRSTOR	# ALL KEYS EXCEPT ER TURN ON KR LITE IF
		TC	+2		# CADRSTOR IS FULL.  THIS REMINDS OPERATOR
		TC	CHARIN2		# TO RE-ESTABLISH A FLASHING DISPLAY
		CS	ELRCODE1	# WHICH HE HAS OBSCURED WITH DISPLAYS OF
		AD	MPAC		# HIS OWN (SEE REMARKS PRECEDING ROUTINE
		EXTEND			# VBRELDSP).
		BZF	CHARIN2
		TC	RELDSPON
CHARIN2		XCH	MPAC
		TS	CHAR
		INDEX	A
		TC	+1		#   INPUT CODE	    FUNCTION
		TC	CHARALRM	# 	0
		TC	NUM		#	1
		TC	NUM		#	2
		TC	NUM		#	3
		TC	NUM		#	4
		TC	NUM		#	5
		TC	NUM		#	6
		TC	NUM		# 	7
		TC	89TEST		#	10		8
		TC	89TEST		#	11		9
		TC	CHARALRM	#	12
		TC	CHARALRM	#	13
		TC	CHARALRM	#	14
		TC	CHARALRM	#	15
		TC	CHARALRM	#	16
		TC	CHARALRM	#	17
		TC	NUM	-2	#	20		0
		TC	VERB		#	21		VERB
		TC	ERROR		#	22		ERROR LIGHT RESET
		TC	CHARALRM	#	23
		TC	CHARALRM	#	24
		TC	CHARALRM	#	25
		TC	CHARALRM	#	26
		TC	CHARALRM	#	27
		TC	CHARALRM	#	30
		TC	VBRELDSP	#	31		KEY RELEASE
		TC	POSGN		#	32		+
		TC	NEGSGN		#	33		-
## Page 327
		TC	ENTERJMP	#	34		ENTER
		TC	CHARALRM	#	35
		TC	CLEAR		#	36		CLEAR
		TC	NOUN		#	37		NOUN

CHKDSP		CCS	DSPCOUNT
		TC	Q
		TC	Q
		TCF	ENDOFJOB	# BLOCK DATA IN IF DSPCOUNT NEG.
		TCF	ENDOFJOB

89TEST		TC	CHKDSP
		CAF	THREE
		MASK	DECBRNCH
		CCS	A
		TC	NUM		# IF DECBRNCH IS +, 8 OR 9 OK
		TC	CHARALRM	# IF DECBRNCH IS +0, REJECT 8 OR 9

# NUM ASSEMBLES OCTAL 3 BITS AT A TIME. FOR DECIMAL IT CONVERTS INCOMING
# WORD AS A FRACTION, KEEPING RESULTS TO DP.
# OCTAL RESULTS ARE LEFT IN XREG, YREG, OR ZREG. HI PART OF DEC IN XREG,
# YREG, ZREG. THE LOW PARTS IN XREGLP, YREGLP, OR ZREGLP)
# DECBRNCH IS LEFT AT +0 FOR OCT, +1 FOR + DEC, +2 FOR - DEC.
# IF DSPCOUNT WAS LEFT -, NO MORE DATA IS ACCEPTED.

 -2		CAF	ZERO
		TS	CHAR
NUM		TC	CHKDSP
		TC	GETINREL
		CCS	CLPASS		# IF CLPASS IS + OR +0, MAKE IT +0.
		CAF	ZERO
		TS	CLPASS
		TC	+1
		CA	CHAR
		TC	CODSTOR
		TC	DSPIN
		CAF	THREE
		MASK	DECBRNCH
		CCS	A		# +0, OCTAL.  +1, + DEC.  +2, - DEC.
		TC	DECTOBIN	# +
		INDEX	INREL		# +0 OCTAL
		XCH	VERBREG
		TS	CYL
		CS	CYL
		CS	CYL
		XCH	CYL
		AD	CHAR
		TC	ENDNMTST
## Page 328
DECTOBIN	INDEX	INREL
		XCH	VERBREG
		TS	MPAC		# SUM X 2EXP-14 IN MPAC
		CAF	ZERO
		TS	MPAC +1
		CAF	TEN		# 10 X 2EXP-14
		TC	SHORTMP		# 10SUM X 2EXP-28 IN MPAC, MPAC+1
		XCH	MPAC +1
		AD	CHAR
		TS	MPAC +1
		TC	ENDNMTST	# NO OF
		ADS	MPAC		# OF MUST BE 5TH CHAR
		TC	DECCEND
ENDNMTST	INDEX	INREL
		TS	VERBREG
		CS	DSPCOUNT
		INDEX	INREL
		AD	CRITCON
		EXTEND
		BZF	ENDNUM		# -0, DSPCOUNT = CRITCON
MORNUM		CCS	DSPCOUNT	# -, DSPCOUNT G/ CRITCON
		TS	DSPCOUNT	# DECREMENT DSPCOUNT
		TC	ENDOFJOB
ENDNUM		CAF	THREE
		MASK	DECBRNCH
		CCS	A
		TC	DECCEND
ENDALL		CS	DSPCOUNT	# BLOCK NUMIN BY PLACING DSPCOUNT
		TC	MORNUM +1	# NEGATIVELY
DECCEND		TC	BANKCALL
		CADR	DECEND
		TC	ENDALL
DECEND		CS	ONE
		AD	INREL
		EXTEND
		BZMF	ENDALL		# IF INREL=0,1 (VBREG,NNREG), LEAVE WHOLE
 +4		TC	GETINREL
		INDEX	INREL
		CA	VERBREG
		TS	MPAC +1
		TC	DMP		# IF INREL=2,3,4 (R1,R2,R3), CONVERT TO FRAC
					# MULT SUM X 2EXP-28 IN MPAC, MPAC+1 BY
		ADRES	DECON		# 2EXP14/10EXP5. GIVES (SUM/10EXP5)X2EXP-14
		CAF	THREE		# IN MPAC, +1, +2.
		MASK	DECBRNCH
		INDEX	A
		TC	+0
		TC	+DECSGN
		EXTEND			# - CASE
		DCS	MPAC +1
## Page 329
		DXCH	MPAC +1
+DECSGN		XCH	MPAC +2
		INDEX	INREL
		TS	XREGLP -2
		XCH	MPAC +1
		INDEX	INREL
		TS	VERBREG
		TC	SWRETURN
ELRCODE1	EQUALS	CRITCON
CRITCON		OCT	22		# (DEC 18)
		OCT	20		# (DEC 16)
		OCT	12		# (DEC 10)
		OCT	5
		OCT	0

DECON		2DEC	1 E-5 B14	# 2EXP14/10EXP5 = .16384 DEC

# GETINREL GETS PROPER DATA REG REL ADDRESS FOR CURRENT C(DSPCOUNT) AND
# PUTS IN INTO INREL. +0 VERBREG, 1 NOUNREG, 2 XREG, 3 YREG, 4 ZREG.

GETINREL	INDEX	DSPCOUNT
		CAF	INRELTAB
		TS	INREL		# (A TEMP, REG)
		TC	Q

INRELTAB	OCT	4		# R3D5 (DSPCOUNT = 0)
		OCT	4		# R3D4		 =(1)
		OCT	4		# R3D3		 =(2)
		OCT	4		# R3D2		 =(3)
		OCT	4	 	# R3D1		 =(4)
		OCT	3		# R2D5		 =(5)
		OCT	3		# R2D4		 =(6)
		OCT	3		# R2D3		 =(7)
		OCT	3		# R2D2		 =(8D)
		OCT	3		# R2D1		 =(9D)
		OCT	2		# R1D5		 =(10D)
		OCT	2		# R1D4		 =(11D)
		OCT	2		# R1D3		 =(12D)
		OCT	2		# R1D2		 =(13D)
		OCT	2		# R1D1		 =(14D)
VNDSPCON	OCT	244		# .01 ROUNDED UP. CANNOT GET HERE
		OCT	1		# ND2		 =(16D)
		OCT	1		# ND1		 =(17D)
		OCT	0		# VD2		 =(18D)
		OCT	0		# VD1		 =(19D)
VERB		CAF	ZERO
## Page 330

		TS	VERBREG
		CAF	VD1
NVCOM		TS	DSPCOUNT
		TC	2BLANK
		CAF	ONE
		TS	DECBRNCH	# SET FOR DEC V/N CODE
		CAF	ZERO
		TS	REQRET		# SET FOR ENTPAS0
		CAF	ENDINST		# IF DSPALARM OCCURS BEFORE FIRST ENTPAS0
		TS	ENTRET		# OR NVSUB, ENTRET MUST ALREADY BE SET
					# TO TC ENDOFJOB
		TC	ENDOFJOB
NOUN		CAF	ZERO
		TS	NOUNREG
		CAF	ND1		# ND1, OCT 21 (DEC 17)
		TC	NVCOM

NEGSGN		TC	SIGNTEST
		TC 	-ON
		CAF	TWO
BOTHSGN		INDEX	INREL		# SET DEC COMP BIT TO 1 (IN DECBRNCH)
		AD	BIT7		# BIT 5 FOR R1, BIT 4 FOR R2,
		ADS	DECBRNCH	# BIT 3 FOR R3.
FIXCLPAS	CCS	CLPASS		# IF CLPASS IS + OR +0, MAKE IT +0.
		CAF	ZERO
		TS	CLPASS
		TC	+1
		TC	ENDOFJOB

POSGN		TC	SIGNTEST
		TC	+ON
		CAF	ONE
		TC	BOTHSGN

+ON		LXCH	Q
		TC	GETINREL
		INDEX	INREL
		CAF	SGNTAB -2
		TS	SGNOFF
		AD 	ONE
		TS	SGNON
SGNCOM		CAF	ZERO
		TS	CODE
		XCH	SGNOFF
		TC	11DSPIN
		CAF	BIT11
		TS	CODE
		XCH	SGNON
		TC	11DSPIN
## Page 331
 -1		TC	L
-ON		LXCH	Q
		TC	GETINREL
		INDEX	INREL
		CAF	SGNTAB -2
		TS	SGNON
		AD	ONE
		TS	SGNOFF
		TC	SGNCOM

SGNTAB		OCT	5		# -R1
		OCT	3		# -R2
 -1		OCT	00000		# -R3
DECROUND	OCT	02476		# MUST FOLLOW ZERO WORD
SIGNTEST	LXCH	Q		# ALLOWS +,- ONLY WHEN DSPCOUNT=R1D1,
		CAF	THREE		# R2D1, OR R3D1. ALLOWS ONLY FIRST OF
		MASK	DECBRNCH	# CONSECUTIVE +/- CHARACTERS.
		CCS	A		# IF LOW2 BITS OF DECBRNCH NOT= 0, SIGN
		TC	ENDOFJOB	# FOR THIS WORD ALREADY IN. REJECT.
		CS	R1D1
		TC	SGNTST1
		CS	R2D1
		TC	SGNTST1
		CS	R3D1
		TC	SGNTST1
		TC	ENDOFJOB	# NO MATCH FOUND. SIGN ILLEGAL
SGNTST1		AD	DSPCOUNT
		EXTEND
		BZF	-ON -1		# MATCH FOUND. SIGN LEGAL
		TC	Q

# CLEAR BLANKS WHICH R1, R2, R3 IS CURRENT OR LAST TO BE DISPLAYED (PERTINE
# NT XREG, YREG, ZREG IS CLEARED). SUCCESSIVE CLEARS TAKE CARE OF EACH RX
# L/ RC UNTIL R1 IS DONE. THEN NO FURTHER ACTION
#
# CLPASS	+0	PASS0, CAN BE BACKED UP
#		+NZ	HIPASS, CAN BE BACKED UP
#		-NZ	PASS0, CANNOT BE BACKED UP

CLEAR		CCS	DSPCOUNT
		AD	ONE
		TC	+2
		AD	ONE
		INDEX	A		# DO NOT CHANGE DSPCOUNT BECAUSE MAY LATER
		CAF	INRELTAB	# FAIL LEGALTST.
		TS	INREL		# MUST SET INREL, EVEN FOR HIPASS.
		CCS	CLPASS
		TC	CLPASHI		# +
## Page 332
		TC	+2		# +0	IF CLPASS IS +0 OR -, IT IS PASS0
		TC	+1		# -
		CA	INREL
		TC	LEGALTST
		TC	CLEAR1
CLPASHI		CCS	INREL
		TS	INREL
		TC	LEGALTST
		CAF	DOUBLK +2	# +3 TO - NUMBER. BACKS DATA REQUESTS.
		ADS	REQRET
		CA	INREL
		TS	MIXTEMP		# TEMP STORAGE FOR INREL
		EXTEND
		DIM	VERBREG		# DECREMENT VERB AND RE-DISPLAY
		TC	BANKCALL
		CADR	UPDATVB
		CA	MIXTEMP
		TS	INREL		# RESTORE INREL
CLEAR1		TC	CLR5
		INCR	CLPASS		# ONLY IF CLPASS IS + OR +0,
		TC	ENDOFJOB	# SET FOR HIGHER PASS.
CLR5		LXCH	Q		# USES 5BLANK BUT AVOIDS ITS TC GETINREL
		TC	5BLANK +2
LEGALTST	AD	NEG1
		EXTEND
		BZMF	ENDOFJOB	# ILLEGAL. INREL=0,1
		TC	Q		# LEGAL. INREL GE 2

# 5BLANK BLANKS 5 CHAR DISPLAY WORD IN R1, R2, OR R3. IT ALSO ZEROES XREG,
# YREG, OR ZREG. PLACE ANY + DSPCOUNT NUMBER FOR PERTINENT RC INTO DSPCOUNT
# DSPCOUNT IS LEFT SET TO LEFT MOST DSP NUMB FOR RC JUST BLANKED.

 -1		TS	DSPCOUNT	# NEEDED FOR BLANKSUB
5BLANK		LXCH	Q
		TC	GETINREL
 +2		CAF	ZERO
		INDEX	INREL
		TS	VERBREG		# ZERO X, Y, Z REG.
		INDEX	INREL
		TS	XREGLP -2
		TS	CODE
		INDEX	INREL		# ZERO PERTINENT DEC COMP BIT.
		CS	BIT7		# PROTECT OTHERS
		MASK	DECBRNCH
		MASK	BRNCHCON	# ZERO LOW 2 BITS.
		TS	DECBRNCH
		INDEX	INREL
		CAF	SINBLANK -2	# BLANK ISOLATED CHAR SEPARATELY
		TS	COUNT
		TC	DSPIN
5BLANK1		INDEX	INREL
## Page 333
		CAF	DOUBLK -2
		TS	DSPCOUNT
		TC	2BLANK
		CS	TWO
		ADS	DSPCOUNT
		TC	2BLANK
		INDEX	INREL
		CAF	R1D1 -2
		TS	DSPCOUNT	# SET DSPCOUNT TO LEFT MOST DSP NUMBER
		TC	L		# OF REG. JUST BLANKED

SINBLANK	OCT	16		# DEC 14
		OCT	5
		OCT	4
DOUBLK		OCT	15		# DEC 13
		OCT	11		# DEC 9
 +2		OCT	3
BRNCHCON	EQUALS	NEG3

# 2BLANK BLANKS TWO CHAR. PLACE DSP NUMBER OF LEFT CHAR OF THE PAIR INTO
# DSPCOUNT. THIS NUMBER IS LEFT IN DSPCOUNT

2BLANK		CA	DSPCOUNT
		TS	SR
		CS	BLANKCON
		INHINT
		INDEX	SR
		XCH	DSPTAB
		EXTEND
		BZMF 	+2		# IF OLD CONTENTS -, NOUT OK
		INCR	NOUT		# IF OLD CONTENTS +, +1 TO NOUT
		TCF	REQ		# IF -, NOUT OK
BLANKCON	EQUALS	BIT12

## Page 334
# ENTER PASS 0 IS THE EXECUTE FUNCTION. HIGHER ORDER ENTERS ARE TO LOAD
# DATA. THE SIGN OF REQRET DETERMINES THE PASS, + FOR PASS 0, - FOR HIGHER
# PASSES.
#
# MACHINE CADR TO BE SPECIFIED (MCTBS) NOUNS DESIRE AN ECADR TO BE LOADED
# WHEN USED WITH LOAD VERBS, MONITOR VERBS, OR DISPLAY VERBS (EXCEPT
# VERB = FIXED MEMORY DISPLAY, WHICH REQUIRES AN FCADR).

		SETLOC	PINBALL2
		BANK

		COUNT*	$$/PIN
NVSUBB		EQUALS	NVSUB1
LOADLV1		EQUALS	LOADLV
ENTER		CAF	ZERO
		TS	CLPASS
		CAF	ENDINST
		TS	ENTRET
		CCS	REQRET
		TC	ENTPAS0		# IF +, PASS 0
		TC	ENTPAS0		# IF +, PASS 0
		TC	+1		# IF -, NOT PASS 0
ENTPASHI	CAF	MMADREF
		AD	REQRET		# IF L/ 2 CHAR IN FOR MM CODE, ALARM
		EXTEND			# AND RECYCLE (DECIDE AT MMCHANG+1).
		BZF	ACCEPTWD
		CAF	THREE		# IF DEC, L/ 5 CHAR IN FOR DATA MUST BE
		MASK	DECBRNCH	# SCALED (DECEND); IF 5 CHAR IN, DATA
		CCS	A		# HAS ALREADY BEEN SCALED. ANY NUMBER
		TC	+2		# OF DECIMAL CHARACTERS ARE ACCEPTABLE.SCR 
		TC	ACCEPTWD	# OCTAL. ANY NUMBER OF CHAR OK.
		CCS	DSPCOUNT
		TC	LT5
		TC	LT5
		TC	+1		# 5 CHAR IN (DSPCOUNT IS -)
ACCEPTWD	CS	REQRET		# 5 CHAR IN (DSPCOUNT IS -)
		TS	REQRET		# SET REQRET +.
		TC	FLASHOFF
		TC	REQRET

LT5		CAF	ZERO
		TS	MPAC
		TC	BANKCALL
		CADR	DECEND +4
		TC	ACCEPTWD
MMADREF		ADRES	MMCHANG +1	# ASSUMES TC REQMM AT MMCHANG.

LOWVERB		DEC	28		# LOWER VERB THAT AVOIDS NOUN TEST.

## Page 335
ENTPAS0		CAF	ZERO		# NOUN VERB SUB ENTERS HERE
		TS	DECBRNCH
		TC	-VD1SET
TESTVB		CS	VERBREG		# IF VERB IS G/E LOWVB, SKIP NOUN TEST.
		TS	VERBSAVE	# SAVE VERB FOR POSSIBLE RECYCLE.
		AD	LOWVERB		# LOWVERB - VB
		EXTEND
		BZMF	VERBFAN		# VERB G/E LOWVERB
TESTNN		EXTEND			# VERB L/ LOWVERB
		DCA	LODNNLOC	# SWITCH BANKS TO NOUN TABLE READING
		DXCH	Z		# ROUTINE.
		INDEX	MIXBR
		TC	+0
		TC	+2		# NORMAL
		TC	MIXNOUN		# MIXED
		CCS	NNADTEM		# NORMAL
		TC	VERBFAN -2	#	NORMAL 	IF +
		TC	GODSPALM	# NOT IN USE	IF +0
		TC	REQADD		# SPECIFY MACHINE CADR IF -
		INCR	NOUNCADR	# AUGMENT MACHINE CADR IF -0
		TC	SETNADD		# ECADR FROM NOUNCADR. SETS EB, NOUNADD.
		TC	INTMCTBS +2
REQADD		CAF	BIT15		# SET CLPASS FOR PASS 0 ONLY
		TS	CLPASS
		CS	ENDINST		# TEST IF REACHED HERE FROM INTERNAL OR
		AD	ENTEXIT		#	FROM EXTERNAL
		EXTEND
		BZF	+2		# EXTERNAL MACH CADR TO BE SPECIFIED
		TC	INTMCTBS
		TC	REQDATZ		# EXTERNAL MACH CADR TO BE SPECIFIED
		CCS	DECBRNCH	# ALARM AND RECYCLE IF DECIMAL USED
		TC	ALMCYCLE	# FOR MCTBS.
		TC	-VD1SET
		CCS	CADRSTOR
		TC	+3		# EXTERNAL MCTBS DISPLAY WILL LEAVE FLASH
		TC	USEADD		# ON IF ENDIDLE NOT = +0.
		TC	+1
		TC	FLASHON
USEADD		XCH	ZREG
		TC	SETNCADR	# ECADR INTO NOUNCADR. SET EB, NOUNADD.
		EXTEND
		DCA	LODNNLOC	# SWITCH BANKS TO NOUN TABLE READING
		DXCH	Z		# ROUTINE.
		TC	VERBFAN

		EBANK=	DSPCOUNT
LODNNLOC	2CADR	LODNNTAB

INTMCTBS	CA	MPAC +2		# INTERNAL MACH CADR TO BE SPECIFIED.
## Page 336
		TC	SETNCADR	# ECADR INTO NOUNCADR. SET EB, NOUNADD.
 +2		CS	FIVE		# NVSUB CALL LEFT CADR IN MPAC+2 FOR MACH
		AD	VERBREG		# CADR TO BE SPECIFIED.
		EXTEND
		BZF	VERBFAN		# DONT DISPLAY CADR IF VB = 05.
		CAF	R3D1		# VB NOT = 05. DISPLAY CADR.
		TS	DSPCOUNT
		CA	NOUNCADR
		TC	DSPOCTWD
		TC	VERBFAN

 -2		AD	ONE
		TC	SETNCADR	# ECADR INTO NOUNCADR. SETS EB, NOUNADD.
VERBFAN		CS	LST2CON
		AD	VERBREG		# VERB-LST2CON
		CCS	A
		AD	ONE		# VERB G/ LST2CON
		TC	+2
		TC	VBFANDIR	# VERB L/ LST2CON
		TS	MPAC
		TC	RELDSP		# RELEASE DISPLAY SYST
		TC	POSTJUMP	# GO TO GOEXTVB WITH VB-40 IN MPAC.
		CADR	GOEXTVB
LST2CON		EQUALS	OCT50		# DEC40-FIRST EXTENDED VERB
VBFANDIR	INDEX	VERBREG
		CAF	VERBTAB
		TC	BANKJUMP

VERBTAB		CADR	GODSPALM	# VB00 ILLEGAL
		CADR	DSPA		# VB01 DISPLAY OCT COMP 1 (R1)
		CADR	DSPB		# VB02 DISPLAY OCT COMP 2 (R1)
		CADR	DSPC		# VB03 DISPLAY OCT COMP 3 (R1)
		CADR	DSPAB		# VB04 DISPLAY OCT COMP 1,2 (R1,R2)
		CADR	DSPABC		# VB05 DISPLAY OCT COMP 1,2,3 (R1,R2,R3)
		CADR	DECDSP		# VB06 DECIMAL DISPLAY
		CADR	DSPDPDEC	# VB07 DP DECIMAL DISPLAY (R1,R2)
		CADR	GODSPALM	# VB08 SPARE
		CADR	GODSPALM	# VB09 SPARE
		CADR	DSPALARM	# VB10 SPARE
		CADR	MONITOR		# VB11 MONITOR OCT COMP 1 (R1)
		CADR	MONITOR		# VB12 MONITOR OCT COMP 2 (R1)
		CADR	MONITOR		# VB13 MONITOR OCT COMP 3 (R1)
		CADR	MONITOR		# VB14 MONITOR OCT COMP 1,2 (R1,R2)
		CADR	MONITOR		# VB15 MONITOR OCT COMP 1,2,3 (R1,R2,R3)
		CADR	MONITOR		# VB16 MONITOR DECIMAL
		CADR	MONITOR		# VB17 MONITOR DP DEC (R1,R2)
		CADR	GODSPALM	# VB18 SPARE
		CADR	GODSPALM	# VB19 SPARE
		CADR	GODSPALM	# VB20 SPARE
		CADR	ALOAD		# VB21 LOAD COMP 1 (R1)
## Page 337
		CADR	BLOAD		# VB22 LOAD COMP 2 (R2)
		CADR	CLOAD		# VB23 LOAD COMP 3 (R3)
		CADR	ABLOAD		# VB24 LOAD COMP 1,2 (R1,R2)
		CADR	ABCLOAD		# VB25 LOAD COMP 1,2,3 (R1,R2,R3)
		CADR	GODSPALM	# VB26 SPARE
		CADR	DSPFMEM		# VB27 FIXED MEMORY DISPLAY
					# THE FOLLOWING VERBS MAKE NO NOUN TEST
		CADR	GODSPALM	# VB28 SPARE
		CADR	GODSPALM	# VB29 SPARE
REQEXLQC	CADR	VBRQEXEC	# VB30 REQUEST EXECUTIVE
		CADR	VBRQWAIT	# VB31 REQUEST WAITLIST
		CADR	VBRESEQ		# VB32 RESEQUENCE
		CADR	VBPROC		# VB33 PROCEED WITHOUT DATA
		CADR	VBTERM		# VB34 TERMINATE CURRENT TEST OR LOAD REQ
		CADR	VBTSTLTS	# VB35 TEST LIGHTS
		CADR	SLAP1		# VB36 FRESH START
		CADR	MMCHANG		# VB37 CHANGE MAJOR MODE
		CADR	GODSPALM	# VB38 SPARE
		CADR	GODSPALM	# VB39 SPARE

# THE LIST2 VERBFAN IS LOCATED IN THE EXTENDED VERB BANK.

## Page 338

# NNADTAB CONTAINS A RELATIVE ADDRESS, IDADDREL (IN LOW 10 BITS), REFERRING
# TO WHERE 3 CONSECUTIVE ADDRESSES ARE STORED (IN IDADDTAB).
# MIXNOUN GETS DATA AND STORES IN MIXTEMP,+1,+2. IT SETS NOUNADD FOR
# MIXTEMP.

MIXNOUN		CCS	NNADTEM
		TC	+4		# +  IN USE
		TC	GODSPALM	# +0 NOT IN USE
		TC	+2		# -  IN USE
		TC	+1		# -0 IN USE
		CS	SIX
		AD	VERBREG
		EXTEND
		BZMF	+2		# VERB L/E 6
		TC	VERBFAN		# AVOID MIXNOUN SWAP IF VB NOT = DISPLAY
		CAF	TWO
MIXNN1		TS	DECOUNT
		AD	MIXAD
		TS	NOUNADD		# SET NOUNADD TO MIXTEMP + K
		INDEX	DECOUNT		# GET IDADDTAB ENTRY FOR COMPONENT K
		CA	IDAD1TEM	# OF NOUN.
		TS	NOUNTEM
					# TEST FOR DP (FOR OCT DISPLAY). IF SO, GET
					#   MINOR PART ONLY.
		TC	SFRUTMIX	# GET SF ROUT NUMBER IN A
		TC	DPTEST
		TC	MIXNN2		# NO DP
		INCR	NOUNTEM		# DP  GET MINOR PART
MIXNN2		CA	NOUNTEM
		MASK	LOW11		# ESUBK (NO DP) OR (ESUBK)+1  FOR DP
		TC	SETEBANK	# SET EBANK, LEAVE EADRES IN A.
		INDEX	A		# PICK UP C(ESUBK)  NOT DP
		CA	0		# OR C((ESUBK)+1)  FOR DP MINOR PART
		INDEX	NOUNADD
		XCH	0		# STORE IN MIXTEM + K
		CCS	DECOUNT
		TC	MIXNN1
		TC	VERBFAN

MIXAD		TC	MIXTEMP

# DPTEST	ENTER WITH SF ROUT NUMBER IN A.
#		RETURNS TO L+1 IF NO DP.
#		RETURNS TO L+2 IF DP.

DPTEST		INDEX	A
		TCF	+1
		TC	Q		# OCTAL ONLY  NO DP
		TC	Q		# FRACT NO DP
## Page 339
		TC	Q		# DEG  NO DP
		TC	Q		# ARITH  NO DP
		TCF	DPTEST1		# DP1OUT
		TCF	DPTEST1		# DP2OUT
		TC	Q		# OPDEG  NO DP
		TCF	DPTEST1		# DP3OUT
		TC	Q		# HMS   NO DP
		TC	Q		# M/S   NO DP
		TCF	DPTEST1		# DP4OUT
		TC	Q		# ARITH1   NO DP
		TC	Q		# 2INTOUT  NO DP TO GET HI PART IN MPAC
		TCF	DPTEST1		# DPFRACOT
DPTEST1		EQUALS	Q+1
REQDATX		CAF	R1D1
		TCF	REQCOM
REQDATY		CAF	R2D1
		TCF	REQCOM
REQDATZ		CAF	R3D1
REQCOM		TS	DSPCOUNT
		CS	Q
		TS	REQRET
		TC	BANKCALL
		CADR	5BLANK
		TC	FLASHON
ENDRQDAT	TC	ENTEXIT

 -2		CA	MPAC +3
 -1		TS	NOUNREG
UPDATNN		XCH	Q
		TS	UPDATRET
		EXTEND
		DCA	LODNNLOC	# SWITCH BANKS TO NOUN TABLE READING
		DXCH	Z		# ROUTINE.
		CCS	NNADTEM
		AD	ONE		# NORMAL
		TCF	PUTADD
		TCF	PUTADD +1	# MCTBS	 DONT CHANGE NOUNADD
		TCF	PUTADD +1	# MCTBI	 DONT CHANGE NOUNADD
PUTADD		TC	SETNCADR	# ECADR INTO NOUNCADR. SETS EB, NOUNADD.
		CAF	ND1
		TS	DSPCOUNT
		CA	NOUNREG
		TCF	UPDAT1

 -2		CA	MPAC +4
 -1		TS	VERBREG
UPDATVB		XCH	Q
		TS	UPDATRET
		CAF	VD1
		TS	DSPCOUNT
## Page 340
		CA	VERBREG
UPDAT1		TC	POSTJUMP	# CANT USE SWCALL TO GO TO DSPDECVN, SINCE
		CADR	GOVNUPDT	# UPDATVB CAN ITSELF BE CALLED BY SWCALL.
 +2		TC	UPDATRET

GOALMCYC	TC	ALMCYCLE	# NEEDED BECAUSE BANKJUMP CANT HANDLE F/F.

GODSPALM	TC	POSTJUMP
		CADR	DSPALARM

## Page 341

# NOUN TABLES
#
# NOUN CODE L/40, NORMAL NOUN CASE.  NOUN CODE G/E 40, MIXED NOUN CASE.
# FOR NORMAL CASE, NNADTAB CONTAINS ONE  ECADR  FOR EACH NOUN.
# +0 INDICATES NOUN NOT USED.  - ENTRY INDICATES MACHINE CADR (E OR F) TO
# BE SPECIFIED. -1 INDICATES CHANNEL TO BE SPECIFIED. -0 INDICATES AUGMENT
# OF LAST MACHINE CADR SUPPLIED.
#
# FOR MIXED CASE, NNADTAB CONTAINS ONE INDIRECT ADDRESS (IDADDREL) IN LOW
# 10 BITS, AND THE COMPONENT CODE NUMBER IN THE HIGH 5 BITS.
#
# NNTYPTAB IS A PACKED TABLE OF THE FORM MMMMMNNNNNPPPPP.
#
# FOR THE NORMAL CASE,	M-S ARE THE COMPONENT CODE NUMBER.
#			N-S ARE THE SF ROUTINE CODE NUMBER.
#			P-S ARE THE SF CONSTANT CODE NUMBER.
#
# MIXED CASE,		M-S ARE THE SF CONSTANT3 CODE NUMBER	3 COMPONENT CASE
#			N-S ARE THE SF CONSTANT2 CODE NUMBER
#			P-S ARE THE SF CONSTANT1 CODE NUMBER
#			N-S ARE THE SF CONSTANT2 CODE NUMBER	2 COMPONENT CASE
#			P-S ARE THE SF CONSTANT1 CODE NUMBER
#			P-S ARE THE SF CONSTANT1 CODE NUMBER	1 COMPONENT CASE
#
# THERE IS ALSO AN INDIRECT ADDRESS TABLE (IDADDTAB) FOR MIXED CASE ONLY.
# EACH ENTRY CONTAINS ONE ECADR.  IDADDREL IS THE RELATIVE ADDRESS OF
# THE FIRST OF THESE ENTRIES.
# THERE IS ONE ENTRY IN THIS TABLE FOR EACH COMPONENT OF A MIXED NOUN
# THEY ARE LISTED IN ORDER OF ASCENDING K.
#
# THERE IS ALSO A SCALE FACTOR ROUTINE NUMBER TABLE (RUTMXTAB) FOR MIXED
# CASE ONLY. THERE IS ONE ENTRY PER MIXED NOUN. THE FORM IS,
#
#	QQQQQRRRRRSSSSS
#
# Q-S ARE THE SF ROUTINE 3 CODE NUMBER		3 COMPONENT CASE
# R-S ARE THE SF ROUTINE 2 CODE NUMBER
# S-S ARE THE SF ROUTINE 1 CODE NUMBER
# R-S ARE THE SF ROUTINE 2 CODE NUMBER		2 COMPONENT CASE
# S-S ARE THE SF ROUTINE 1 CODE NUMBER
#
# IN OCTAL DISPLAY AND LOAD (OCT OR DEC) VERBS, EXCLUDE USE OF VERBS WHOSE
# COMPONENT NUMBER IS GREATER THAN THE NUMBER OF COMPONENTS IN NOUN.
# (ALL MACHINE ADDRESS TO BE SPECIFIED NOUNS ARE 3 COMPONENT.)
#
# IN MULTI-COMPONENT LOAD VERBS, NO MIXING OF OCTAL AND DECIMAL DATA
# COMPONENT WORDS IS ALLOWED. ALARM IF VIOLATION.
#
# IN DECIMAL LOADS OF DATA, 5 NUMERICAL CHARACTERS MUST BE KEYED IN
# BEFORE EACH ENTER. IF NOT, ALARM.

## Page 342

# DISPLAY VERBS

DSPABC		CS	TWO
		TC	COMPTEST
		INDEX	NOUNADD
		CS	2
		XCH	BUF +2
DSPAB		CS	ONE
		TC	COMPTEST
		INDEX	NOUNADD
		CS	1
		XCH	BUF +1
DSPA		CS	ZERO
		TC	DCOMPTST
		TC	TSTFORDP
		INDEX	NOUNADD
		CS	0
		TC	DSPCOM1
DSPB		CS	ONE
		TC	DCOMPTST
		INDEX	NOUNADD
		CS	1
		TC	DSPCOM1
DSPC		CS	TWO
		TC	DCOMPTST
		INDEX	NOUNADD
		CS	2
DSPCOM1		XCH	BUF
DSPCOM2		CS	TWO		# A  B  C  AB ABC
		AD	VERBREG		# -1 -0 +1 +2 +3  IN A
 +2		CCS	A		# +0 +0 +0 +1 +2  IN A AFTER CCS
		TC	DSPCOM3
		TC	ENTEXIT
		TC	+1
DSPCOM3		TS	DISTEM		# +0,+1,+2 INTO DISTEM
		INDEX	A
		CAF	R1D1
		TS	DSPCOUNT
		INDEX	DISTEM
		CS	BUF
		TC	DSPOCTWD
		XCH	DISTEM
		TC	DSPCOM2 +2

# COMPTEST ALARMS IF COMPONENT NUMBER OF VERB (LOAD OR OCT DISPLAY) IS
# GREATER THAN THE HIGHEST COMPONENT NUMBER OF NOUN.

COMPTEST	TS	SFTEMP1		# - VERB COMP
		LXCH	Q
COMPTST1	TC	GETCOMP
		TC	LEFT5
		MASK	THREE		# NOUN COMP
## Page 343
		AD	SFTEMP1		# NOUN COMP - VERB COMP
		CCS	A
		TC	L		# NOUN COMP G/ VERB COMP
MONBACK		ADRES	PASTEVB		# CANNOT GET HERE
		TC	GODSPALM	# NOUN COMP L/ VERB COMP
NDCMPTST	TC	L		# NOUN COMP = VERB COMP

# DCOMPTST ALARMS IF DECIMAL ONLY BIT (BIT4 OF COMP CODE NUMBER) = 1.
# IF NOT, IT PERFORMS REGULAR COMPTEST.

DCOMPTST	TS	SFTEMP1		# - VERB COMP
		LXCH	Q
		TC	GETCOMP
		MASK	BIT14
		CCS	A
		TC	GODSPALM
		TC	COMPTST1
DCTSTCYC	LXCH	Q		# ALARMS AND RECYCLES IF DEC ONLY BIT = 1
		TC	GETCOMP		# (BIT4 OF COMP CODE NUMBER). RETURNS
		MASK	BIT14		# IF NOT.  USED BY LOAD VERBS.
		CCS	A
		TC	ALMCYCLE
		TC	L

# NOUNTEST ALARMS IF NO-LOAD BIT (BIT5 OF COMP CODE NUMBER) = 1.
# IF NOT, IT RETURNS.

NOUNTEST	LXCH	Q
		TC	GETCOMP
		CCS	A
		TC	L
		TC	L
		TC	GODSPALM

TSTFORDP	LXCH	Q		# TEST FOR DP. IF SO, GET MINOR PART ONLY.
		CA	NNADTEM
		AD	ONE		# IF NNADTEM = -1, CHANNEL TO BE SPECIFIED
		EXTEND
		BZF	CHANDSP
		INDEX	MIXBR
		TC	+0
		TC	+2		# NORMAL
		TC	L		# MIXED CASE ALREADY HANDLED IN MIXNOUN
		TC	SFRUTNOR
		TC	DPTEST
		TC	L		# NO DP
		INCR	NOUNADD		# DP	E+1 INTO NOUNADD FOR MINOR PART.
		TC	L

## Page 344

CHANDSP		CA	NOUNCADR
		MASK	LOW9
		EXTEND
		INDEX	A
		READ	0
		CS	A
		TCF	DSPCOM1

COMPICK		ADRES	NNTYPTEM
		ADRES	NNADTEM

GETCOMP		INDEX	MIXBR		# NORMAL			MIXED
		CAF	COMPICK -1	# ADRES NNTYPTEM		ADRES NNADTEM
		INDEX	A
		CA	0		# C(NNTYPTEM)			C(NNADTEM)
		MASK	HI5		# GET HI5 OF NNTYPTAB (NORM) OF NNADTAB (MIX)
		TC	Q

DECDSP		TC	GETCOMP
		TC	LEFT5
		MASK	THREE
		TS	DECOUNT		# COMP NUMBER INTO DECOUNT
DSPDCGET	TS	DECTEM		# PICKS UP DATA
		AD	NOUNADD		# DECTEM  1COMP +0, 2COMP +1, 3COMP +2
		INDEX	A
		CS	0
		INDEX	DECTEM
		XCH	XREG		# CANT USE BUF SINCE DMP USES IT.
		CCS	DECTEM
		TC	DSPDCGET	# MORE TO GET
DSPDCPUT	CAF	ZERO		# DISPLAYS DATA
		TS	MPAC +1		# DECOUNT 1COMP +0, 2COMP +1, 3COMP +2
		TS	MPAC +2
		INDEX	DECOUNT
		CAF	R1D1
		TS	DSPCOUNT
		INDEX	DECOUNT
		CS	XREG
		TS	MPAC
		TC	SFCONUM		# 2X (SF CON NUMB) IN A
		TS	SFTEMP1
		EXTEND			# SWITCH BANKS TO SF CONSTANT TABLE
		DCA	GTSFOUTL	#    READING ROUTINE.
		DXCH	Z		# LOADS SFTEMP1, SFTEMP2.
		INDEX	MIXBR
		TC	+0
		TC	DSPSFNOR
		TC	SFRUTMIX
## Page 345
		TC	DECDSP3

DSPSFNOR	TC	SFRUTNOR
		TC	DECDSP3

		EBANK=	DSPCOUNT
GTSFOUTL	2CADR	GTSFOUT

DSPDCEND	TC	BANKCALL	# ALL SFOUT ROUTINES END HERE
		CADR	DSPDECWD
 +2		CCS	DECOUNT
		TC	+2
		TC	ENTEXIT
		TS	DECOUNT
		TC	DSPDCPUT	# MORE TO DISPLAY

DECDSP3		INDEX	A
		CAF	SFOUTABR
		TC	BANKJUMP

SFOUTABR	CADR	PREDSPAL	# ALARM IF DEC DISP WITH OCTAL ONLY NOUN
		CADR	DSPDCEND
		CADR	DEGOUTSF
		CADR	ARTOUTSF
		CADR	DP1OUTSF
		CADR	DP2OUTSF
		CADR	OPDEGOUT
		CADR	DP3OUTSF
		CADR	HMSOUT
		CADR	M/SOUT
		CADR	DP2OUTSF
		CADR	AROUT1SF
		CADR	2INTOUT
		CADR	DPFRACOT

# THE FOLLOWING IS A TYPICAL SF ROUTINE. IT USES MPAC. LEAVES RESU
# LTS IN MPAC, MPAC+1. ENDS WITH TC DSPDCEND

		SETLOC	PINBALL1
		BANK
		COUNT*	$$/PIN

# OPDEGOUT SCALES BY .45 (THE RANGE IS 90 DEGREES) AND ADDS A 20 DEG BIAS.

OPDEGOUT	CCS	MPAC		# RANGE IS 90 DEG
		XCH	MPAC		# IF POS OR POS 0 THEN ADD BIAS AND
		TC	+3		# CORRECT FOR POSSIBLE OVERFLOW
		TC	NEGOPT		# IF NEG NON ZERO
## Page 346
		AD	NEG1		# IF NEG ZERO SUBTRACT 1
		AD	20BIAS
BIASCOM		TS	MPAC		# TEST FOR OVERFLOW
		TC	+3		# NO OVFLOW
		CAF	BIT15		# IF OVFLOW
		ADS	MPAC
		CAF	TWO		# SET MULTIPLIER TO .45
		TC	DEGOUTSF +1

NEGOPT		XCH	MPAC		# NEGATIVE CASE
		AD	20BIAS
		CCS	A
		TC	BIASCOM		# IF POS THEN SUBTRACT 1 BECAUSE OF 2SCOM
NEG.2		OCT	-06250		# =.197753906 TRUN BIAS (CANNOT GET HERE)
		AD	ONE		# IF NEG RESTORE SUM
		COM			# IF NEG 0 LEAVE NEG 0
		TC	BIASCOM

#    DEGOUTSF SCALES BY .18 THE LOW 14 BITS OF ANGLE, ADDING .18 FOR
# NUMBERS IN THE NEGATIVE (AGC) RANGE.

DEGOUTSF	CAF	ZERO
 +1		TS	MPAC +2		# SET INDEX FOR FULL SCALE
		CCS	MPAC
		TCF	DEGCOM		# NO AUGMENT NEEDED (SFTEMP1,SFTEMP2 ARE 0,
		TCF	DEGCOM		# MPAC IS +)
		TCF	+1
		CS	BIT15		# MPAC IS -, MASK OUT SIGN BIT AND ADD
		MASK	MPAC		# AUGMENTER ACCORDING TO C(MPAC +2)
		TS	MPAC
		EXTEND			
		INDEX	MPAC +2
		DCA	DEGTAB		# LOADS SFTEMP1 AND SFTEMP2 WITH DP AUGMENTER
		DXCH	SFTEMP1		# CONSTANT
DEGCOM		EXTEND			# LOADS MULTIPLIER, DOES SHORTMP, AND
		INDEX	MPAC +2		# ADDS AUGMENTER.
		DCA	DEGTAB
		DXCH	MPAC		# ADJUSTED ANGLE IN A
		TC	SHORTMP
		DXCH	SFTEMP1
		DAS	MPAC
		TC	SCOUTEND

DEGTAB		OCT	05605		# HI PART OF 	.18
		OCT	03656		# LOW PART OF	.18
		OCT	16314		# HI PART OF 	.45
		OCT	31463		# LO PART OF	.45

20BIAS		OCT	16040		# 20 DEG BIAS FOR OPTICS

## Page 347

ARTOUTSF	DXCH	SFTEMP1		# ASSUMES POINT AT LEFT OF DP SFCON
		DXCH	MPAC
		TC	PRSHRTMP	# IF C(A) = -0, SHORTMP FAILS TO GIVE -0.
SCOUTEND	TC	POSTJUMP
		CADR	DSPDCEND

AROUT1SF	DXCH	SFTEMP1		# ASSUMES POINT BETWEEN HI AND LO PARTS OF
		DXCH	MPAC		# DP SFCON. SHIFTS RESULTS LEFT 14, BY
		TC	PRSHRTMP	# TAKING RESULTS FROM MPAC+1, MPAC+2.
		TC	L14/OUT

DP1OUTSF	TC	DPOUT		# SCALES MPAC, MPAC +1 BY DP SCALE FACTOR
L14/OUT		XCH	MPAC +2		# IN SFTEMP1, SFTEMP2. THEN SCALE RESULT
		XCH	MPAC +1		# BY B14.
		TS	MPAC
		TC	SCOUTEND

DP2OUTSF	TC	DPOUT		# SCALES MPAC, MPAC +1 BY DP SCALE FACTOR
		TC	SCOUTEND

DP3OUTSF	TC	DPOUT		# ASSUMES POINT BETWEEN BITS 7-8 OF HIGH
		CAF	SIX		# LEFT BY 7, ROUNDS MPAC+2 INTO MPAC+1.
		TC	TPLEFTN		# SHIFT LEFT 7.
		TC	SCOUTEND

MPAC+6		= 	MPAC +6		# USE MPAC +6 INSTEAD OF OVFIND

DPOUT		XCH	Q
		TS	MPAC+6
		TC	READLO		# GET FRESH DATA FOR BOTH HI AND LO.
		TC	TPAGREE		# MAKE DP DATA AGREE
		TC	DMP
		ADRES	SFTEMP1
		TC	MPAC+6

# THE FOLLOWING ROUTINE DISPLAYS TWO CONTIGUOUS SP POSITIVE INTEGERS
# AS TWO POSITIVE DECIMAL INTEGERS IN RXD1-RXD2 AND RXD4-RXD5 (RXD3 IS
# BLANKED). THE INTEGER IN THE LOWER NUMBERED ADDRESS IS DISPLAYED IN
# RXD1-RXD2.

2INTOUT		TC	5BLANK		# TO BLANK RXD3
		TC	+ON		# TURN ON + SIGN
		CA	MPAC
		TC	DSPDECVN	# DISPLAY 1ST INTEGER (LIKE VERB AND NOUN)
		CS	THREE
		INDEX	DECOUNT
		AD	R1D1		# RXD4
## Page 348
		TS	DSPCOUNT
		TC	READLO		# GET 2ND INTEGER
		CA	MPAC +1
		TC	DSPDECVN	# DISPLAY 2ND INTEGER (LIKE VERB AND NOUN)
		TC	POSTJUMP
		CADR	DSPDCEND +2

DPFRACOT	TC	READLO		# DP FRACTION TO MPAC,+1
		TC	SCOUTEND

# READLO PICKS UP FRESH DATA FOR BOTH HI AND LO AND LEAVES IT IN
# MPAC, MPAC+1. THIS IS NEEDED FOR TIME DISPLAY. IT ZEROES MPAC+2, BUT
# DOES NOT FORCE TPAGREE.

READLO		XCH	Q
		TS	TEM4
		INDEX	MIXBR
		TC	+0
		TC	RDLONOR
		INDEX	DECOUNT
		CA	IDAD1TEM	# GET IDADDTAB ENTRY FOR COMP K OF NOUN.
		MASK	LOW11		# E SUBK
		TC	SETEBANK	# SET EB, LEAVE EADRES IN A.
READLO1		EXTEND			# MIXED			NORMAL
		INDEX	A		# C(ESUBK)		C(E)
		DCA	0		# C((E SUBK)+1)		C(E+1)
		DXCH	MPAC
		CAF	ZERO
		TS	MPAC +2
		TC	TEM4

RDLONOR		CA	NOUNADD		# E
ENDRDLO		TC	READLO1


		SETLOC	PINBALL3
		BANK

		COUNT*	$$/PIN
HMSOUT		TC	BANKCALL	# READ FRESH DATA FOR HI AND LO INTO MPAC,
		CADR	READLO		# MPAC+1.
		TC	TPAGREE		# MAKE DP DATA AGREE
		TC	SEPSECNR	# LEAVE FRACT SEC/60 IN MPAC, MPAC+1. LEAVE
					# WHOLE MIN IN BIT13 OF LOTEMOUT AND ABOVE
		TC	DMP		# USE ONLY FRACT SEC/60 MOD 60
		ADRES	SECON2		# MULT BY .06
		CAF	R3D1		# GIVES CENTI-SEC/10EXP5 MOD 60
		TS	DSPCOUNT
## Page 349
		TC	BANKCALL	# DISPLAY SEC MOD 60
		CADR	DSPDECWD
		TC	SEPMIN		# REMOVE REST OF SECONDS
		CAF	MINCON2		# LEAVE FRACT MIN/60 IN MPAC+1. LEAVE
		XCH	MPAC		# WHOLE HOURS IN MPAC.
		TS	HITEMOUT	# SAVE WHOLE HOURS.
		CAF	MINCON2 +1
		XCH	MPAC 	+1	# USE ONLY FRACT MIN/60 MOD 60
		TC	PRSHRTMP	# IF C(A) = -0, SHORTMP FAILS TO GIVE -0.
					# MULT BY .0006
		CAF	R2D1		# GIVES MIN/10EXP5 MOD 60
		TS	DSPCOUNT
		TC	BANKCALL	# DISPLAY MIN MOD 60
		CADR	DSPDECWD
		EXTEND			# MINUTES, SECONDS HAVE BEEN REMOVED
		DCA	HRCON1
		DXCH	MPAC
		CA	HITEMOUT 	# USE WHOLE HOURS
		TC	PRSHRTMP	# IF C(A) = -0, SHORTMP FAILS TO GIVE -0.
					# MULT BY .16384
		CAF	R1D1		# GIVES HOURS/10EXP5
		TS	DSPCOUNT
		TC	BANKCALL	# USE REGULAR DSPDECWD, WITH ROUND OFF.
		CADR	DSPDECWD
		TC	ENTEXIT

SECON1		2DEC*	1.666666666 E-4 B12*	# 2EXP12/6000

SECON2		OCT	01727		# .06 FOR SECONDS DISPLAY
		OCT	01217
MINCON2		OCT	00011		# .0006 FOR MINUTES DISLPAY
 +1		OCT	32445
MINCON1		OCT	02104		# .066..66 UPPED BY 2EXP-28
		OCT	10422
HRCON1		2DEC	.16384

 -1		OCT	00000
RNDCON		DEC	50		# *** USED DP WITH PRECEDING ZERO ***

M/SOUT		TC	BANKCALL	# READ FRESH DATA FOR HI AND LO INTO MPAC,
		CADR	READLO		# MPAC+1.
		TC	TPAGREE		# MAKE DP DATA AGREE
		CCS	MPAC		# IF MAG OF (MPAC, MPAC+1) G/ 59 M 59 S,
		TC	+2		# DISPLAY 59B59, WITH PROPER SIGN.
		TC	M/SNORM		# MPAC = +0. L/ 59M58.5S
		AD	M/SCON1		# - HI PART OF (59M58.5S) +1  FOR CCS
		CCS	A		# MAG OF MPAC - HI PART OF (59M58.5S)
		TC	M/SLIMIT	# G/ 59M58.5S
		TC	M/SNORM		# ORIGINAL MPAC = -0. L/ 59M58.5S
		TC	M/SNORM		# L/ 59M58.5S
		CCS	MPAC +1		# MAG OF MPAC = HI PART OF 59M58.5S
## Page 350
		TC	+2
		TC	M/SNORM		# MPAC+1 = +0.  L/ 59M58.5S
		AD	M/SCON2		# - LO PART OF (59M58.5S) +1 FOR CCS
		CCS	A		# MAG OF MPAC+1 - LO PART OF (59M58.5S)
		TC	M/SLIMIT	# G/ 59M58.5S
		TC	M/SNORM		# ORIGINAL MPAC+1 = -0. L/ 59M58.5S
		TC	M/SNORM		# L/ 59M58.5S
M/SLIMIT	CCS	MPAC		# = 59M58.5S	LIMIT
		CAF	M/SCON3		# MPAC CANNOT BE +/- 0 AT THIS POINT.
		TC	+LIMIT		# FORCE MPAC, MPAC+1 TO +/- 59M59.5S
		CS	M/SCON3
		TS	MPAC		# WILL DISPLAY 59M59S IN DSPDECNR
		CS	M/SCON3 +1
LIMITCOM	TS	MPAC +1
		CAF	NORMADR		# SET RETURN TO M/SNORM+1.
		TC	SEPSECNR +1
+LIMIT		TS	MPAC
		CAF	M/SCON3 +1
		TC	LIMITCOM
M/SNORM		TC	SEPSEC		# LEAVE FRACT SEC/60 IN MPAC,MPAC+1. LEAVE
					# WHOLE MIN IN BIT13 OF LOTEMOUT AND ABOVE
 +1		CAF	HISECON		# USE ONLY FRACT SEC/60 MOD 60
		TC	SHORTMP		# MULT BY .6 + 2EXP-14
		CS	THREE		# GIVES SEC/100 MOD 60
		ADS	DSPCOUNT	# DSPCOUNT ALREADY SET TO RXD1
		TC	BANKCALL	# DISPLAY SEC MOD 60 IN D4D5.
		CADR	DSPDC2NR
		CAF	ZERO
		TS	CODE
		CS	TWO
		INDEX	DECOUNT
		AD	R1D1		# RXD3
		TS	COUNT
		TC	BANKCALL	# BLANK MIDDLE CHAR
		CADR	DSPIN
		TC	SEPMIN		# REMOVE REST OF SECONDS
		XCH	MPAC +1		# LEAVE FRACT MIN/60 IN MPAC+1
		EXTEND			# USE ONLY FRACT MIN/60 MOD 60
		MP	HIMINCON	# MULT BY .6 + 2EXP-7
		DXCH	MPAC		# GIVES MIN/100 MOD 60
		INDEX	DECOUNT
		CAF	R1D1		# RXD1
		TS	DSPCOUNT
		TC	BANKCALL	# DISPLAY MIN MOD 60 IN D1D2.
		CADR	DSPDC2NR
		TC	POSTJUMP
		CADR	DSPDCEND +2

HISECON		OCT	23147		# .6 + 2EXP-14
HIMINCON	OCT	23346		# .6 + 2EXP-7

## Page 351

M/SCON1		OCT	77753		# - HI PART OF (59M58.5S) +1
M/SCON2		OCT	41126		# - LO PART OF (59M58.5S) +1
NORMADR		ADRES	M/SNORM +1
M/SCON3		OCT	00025		# 59M 59.5S
 +1		OCT	37016
SEPSEC		CCS	MPAC +1		# IF +, ROUND BY ADDING .5 SEC
		TCF	POSEC		# IF -, ROUND BY SUBTRACTING .5 SEC
		TCF	POSEC		# FINDS TIME IN MPAC, MPAC+1
		TCF	+1		# ROUNDS OFF BY +/- .5 SEC
		EXTEND			# LEAVES WHOLE MIN IN BIT13 OF
		DCS	RNDCON -1	# LOTEMOUT AND ABOVE.
SEPSEC1		DAS	MPAC		# LEAVES FRACT SEC/60 IN MPAC, MPAC+1.
		TCF	SEPSECNR
POSEC		EXTEND
		DCA	RNDCON -1
		TCF	SEPSEC1
SEPSECNR	XCH	Q		# THIS ENTRY AVOIDS ROUNDING BY .5 SEC
 +1		TS	SEPSCRET
		TC	DMP		# MULT BY 2EXP12/6000
		ADRES	SECON1		# GIVES FRACT SEC/60 IN BIT12 OF MPAC+1
		EXTEND			# AND BELOW.
		DCA	MPAC		# SAVE MINUTES AND HOURS
		DXCH	HITEMOUT
		TC	TPSL1
		TC	TPSL1		# GIVES FRACT SEC/60 IN MPAC+1, MPAC+2.
		CAF	ZERO
		XCH	MPAC +2		# LEAVE FRACT SEC/60 IN MPAC, MPAC+1.
		XCH	MPAC +1
		XCH	MPAC
		TC	SEPSCRET

SEPMIN		XCH	Q		# FINDS WHOLE MINUTES IN BIT13
		TS	SEPMNRET	# OF LOTEMOUT AND ABOVE.
		CA	LOTEMOUT	# REMOVES REST OF SECONDS.
		EXTEND			# LEAVES FRACT MIN/60 IN MPAC+1.
		MP	BIT3		# LEAVES WHOLE HOURS IN MPAC.
		EXTEND			# SR 12, THROW AWAY LP.
		MP	BIT13		# SR 2, TAKE FROM LP. = SL 12.
		LXCH	MPAC +1		# THIS FORCES BITS 12-1 TO 0 IF +,
					# FORCES BITS 12-1 TO 1 IF -.
		CA	HITEMOUT
		TS	MPAC
		TC	DMP		# MULT BY 1/15
		ADRES	MINCON1		# GIVES FRACT MIN/60 IN MPAC+1.
ENDSPMIN	TC	SEPMNRET	# GIVES WHOLE HOURS IN MPAC.

# THIS IS A SPECIAL PURPOSE VERB FOR DISPLAYING A DOUBLE PRECISION AGC
# WORD AS 10 DECIMAL DIGITS ON THE AGC DISPLAY PANEL.  IT CAN BE USED WITH
## Page 352
# ANY NOUN, EXCEPT MIXED NOUNS. IT DISPLAYS THE CONTENTS
# OF THE REGISTER NOUNADD IS POINTING TO.  IF USED WITH NOUNS WHICH ARE
# INHERENTLY NOT DP SUCH AS THE CDU COUNTERS THE DISPLAY WILL BE GARBAGE.
# DISPLAY IS IN R1 AND R2 ONLY WITH THE SIGN IN R1.

		SETLOC	PINBALL1
		BANK
		COUNT*	$$/PIN
DSPDPDEC	INDEX	MIXBR
		TC	+0
		TC	+2		# NORMAL NOUN
		TC	DSPALARM
		EXTEND
		INDEX	NOUNADD
		DCA	0
		DXCH	MPAC
		CAF	R1D1
		TS	DSPCOUNT
		TC	DPAGREE
		TC	DSP2DEC
ENDDPDEC	TC	ENTEXIT

## Page 353
# LOAD VERBS		IF ALARM CONDITION IS DETECTED DURING EXECUTE,
# CHECK FAIL LIGHT IS TURNED ON AND ENDOFJOB. IF ALARM CONDITION IS
# DETECTED DURING ENTER OF DATA, CHECK FAIL IS TURNED ON AND IT RECYCLES
# TO EXECUTE OF ORIGINAL LOAD VERB.  RECYCLE CAUSED BY  1) DECIMAL MACHINE
# CADR	2) MIXTURE OF OCTAL/DECIMAL DATA  3) OCTAL DATA INTO DECIMAL
# ONLY NOUN  4) DEC DATA INTO OCT ONLY NOUN  5) DATA TOO LARGE FOR SCALE
# 6) FEWER THAN 3 DATA WORDS LOADED FOR HRS, MIN, SEC NOUN.8  (2)-(6) ALARM
# AND RECYCLE OCCUR AT FINAL ENTER OF SET. (1) ALARM AND RECYCLE OCCUR AT
# ENTER OF CADR.

		SETLOC	PINBALL2
		BANK
		COUNT*	$$/PIN
ABCLOAD		CS	TWO
		TC	COMPTEST
		TC	NOUNTEST	# TEST IF NOUN CAN BE LOADED.
		CAF	VBSP1LD
		TC	UPDATVB -1
		TC	REQDATX
		CAF	VBSP2LD
		TC	UPDATVB -1
		TC	REQDATY
		CAF	VBSP3LD
		TC	UPDATVB -1
		TC	REQDATZ

PUTXYZ		CS	SIX		# TEST THAT THE 3 DATA WORDS LOADED ARE
		TC	ALLDC/OC	# ALL DEC OR ALL OCT.
		EXTEND
		DCA	LODNNLOC	# SWITCH BANKS TO NOUN TABLE READING
		DXCH	Z		# ROUTINE.
		CAF	ZERO		# X COMP
		TC	PUTCOM
		INDEX	NOUNADD
		TS	0
		CAF	ONE		# Y COMP
		TC	PUTCOM
		INDEX	NOUNADD
		TS	1
		CAF	TWO		# Z COMP
		TC	PUTCOM
		INDEX	NOUNADD
		TS	2
		CS	SEVEN		# IF NOUN 7 HAS JUST BEEN LOADED, SET
		AD	NOUNREG		#  FLAG BITS AS SPECIFIED.
		EXTEND
		BZF	+2
		TC	LOADLV
## Page 354
		INHINT
		CS	OCT30		# IS IT A CHANNEL (30 OR UNDER)
		AD	XREG
		EXTEND
		BZMF	CHANBITS	# YES

		CA	XREG		# ECADR OF ERASABLE CELL
		TC	SETNCADR +1	# SET EBANK, NOUNADD

		INDEX	NOUNADD
		CA	0
		TS	L
		CAF	ONE
		TS	XREG		# MAKE IT LOOK LIKE A CHANNEL FOR A WHILE

CHANBITS	AD	OCT21
		EXTEND
		BZF	BITSOFF2	# DONT TOUCH CHAN7 (SUPERBANK)

		CA	ZREG
		EXTEND
		BZMF	BITSOFF		# R3 IS ZERO FOR OFF, NONZERO FOR ON

		CA	YREG
		EXTEND
		INDEX	XREG
		WOR	0
		TCF	BITSOFF1

BITSOFF		CS	YREG
		EXTEND
		INDEX	XREG
		WAND	0

BITSOFF1	CCS	XREG		# WAS IT REALLY A CHANNEL
		CCS	A
		TCF	BITSOFF2	# YES

		LXCH	A
 -2		INDEX	NOUNADD
		TS	0
BITSOFF2	RELINT
		TC	LOADLV

OCT30		=	BITS4&5
OCT21		=	ND1

ABLOAD		CS	ONE
		TC	COMPTEST
		TC	NOUNTEST	# TEST IF NOUN CAN BE LOADED.
## Page 355
		CAF	VBSP1LD
		TC	UPDATVB -1
		TC	REQDATX
		CAF	VBSP2LD
		TC	UPDATVB -1
		TC	REQDATY
PUTXY		CS	FIVE		# TEST THAT THE 2 DATA WORDS LOADED ARE
		TC	ALLDC/OC	# ALL DEC OR ALL OCT.
		EXTEND
		DCA	LODNNLOC	# SWITCH BANKS TO NOUN TABLE READING
		DXCH	Z		# ROUTINE.
		CAF	ZERO		# X COMP
		TC	PUTCOM
		INDEX	NOUNADD
		TS	0
		TCF	COMBLOAD	# Y COMP
ALOAD		TC	REQDATX
		EXTEND
		DCA	LODNNLOC	# SWITCH BANKS TO NOUN TABLE READING
		DXCH	Z		# ROUTINE.
		CAF	ZERO		# X COMP
		TC	PUTCOM
		TCF	BITSOFF2 -2
BLOAD		CS	ONE
		TC	COMPTEST
		CAF	BIT15		# SET CLPASS FOR PASS0 ONLY
		TS	CLPASS
		TC	REQDATY
		EXTEND
		DCA	LODNNLOC	# SWITCH BANKS TO NOUN TABLE READING
		DXCH	Z		# ROUTINE.
COMBLOAD	CAF	ONE
		TC	PUTCOM
		INDEX	NOUNADD
		TS	1
		TC	LOADLV

CLOAD		CS	TWO
		TC	COMPTEST
		CAF	BIT15		# SET CLPASS FOR PASS0 ONLY
		TS	CLPASS
		TC	REQDATZ
		EXTEND
		DCA	LODNNLOC	# SWITCH BANKS TO NOUN TABLE READING
		DXCH	Z		# ROUTINE.
		CAF	TWO
		TC	PUTCOM
		INDEX	NOUNADD
		TS	2
LOADLV		CAF	ZERO
## Page 356
		TS	DECBRNCH
		CS	ZERO
		TS	LOADSTAT
## Restored trailing period in the following line. &mdash; RSB 2017.
		TC	RELDSP		# RELEASE FOR PRIORITY DISPLAY PROBLEM.
		TC	-VD1SET
		TC	POSTJUMP	# AFTER COMPLETED LOAD, GO TO RECALTST
		CADR	RECALTST	# TO SEE IF THERE IS RECALL FROM ENDIDLE.

ALLDC/OC	TS	DECOUNT		# TESTS THAT DATA WORDS LOADED ARE EITHER
		CS	DECBRNCH	# ALL DEC OR ALL OCT. ALARMS IF NOT.
		TS	SR
		CS	SR
		CS	SR		# SHIFTED RIGHT 2
		CCS	A		# DEC COMP BITS IN LOW 3
		TCF	+2		# SOME ONES IN LOW 3
GOQ		TC	Q		# ALL ZEROS. ALL OCTAL. OK.
		AD	DECOUNT		# DEC COMP = 7 FOR 3COMP, =6 FOR 2COMP
		EXTEND			# (BUT IT HAS BEEN DECREMENTED BY CCS)
		BZF	TCQ		# MUST MATCH 6 FOR 3COMP, 5 FOR 2COMP
		TC	ALMCYCLE	# ALARM AND RECYCLE.
SFRUTNOR	XCH	Q		# GETS SF ROUTINE NUMBER FOR NORMAL CASE
		TS	EXITEM		# CANT USE L FOR RETURN. TSTFORDP USES L.
		CAF	MID5
		MASK 	NNTYPTEM
		TC	RIGHT5
		TC	EXITEM		# SF ROUTINE NUMBER IN A

SFRUTMIX	XCH	Q		# GETS SF ROUTINE NUMBER FOR MIXED CASE
		TS	EXITEM
		TC	GETTCRLQ
		MASK	RUTMXTEM	# GET HI5, MID5, OR LOW5 OF RUTMXTAB ENTRY
		INDEX	L
		TC	0
# DO TC GOQ(DECOUNT=0), DO TC RIGHT5(DECOUNT=1), DO TC LEFT5(DECOUNT=2).
SFRET1		TC	EXITEM		# SF ROUTINE NUMBER IN A

SFCONUM		XCH	Q		# GETS 2X(SF CONSTANT NUMBER)
		TS	EXITEM
		INDEX	MIXBR
		TC	+0
		TC	CONUMNOR	# NORMAL NOUN
		TC	GETTCRLQ
		MASK	NNTYPTEM
		INDEX	L
		TC	0
# DO TC GOQ(DECOUNT=0), DO TC RIGHT5(DECOUNT=1), DO TC LEFT5(DECOUNT=2).
SFRET		DOUBLE			# 2X(SF CONSTANT NUMBER) IN A
		TC	EXITEM

DISPLACE	TC	GOQ
## Page 357
		TC	RIGHT5
		TC	LEFT5

CONUMNOR	CAF	LOW5		# NORMAL NOUN ALWAYS GETS LOW 5 OF
		MASK	NNTYPTEM	# NNTYPTAB FOR SF CONUM.
		TCF	SFRET
GETTCRLQ	INDEX	DECOUNT
		CAF	DISPLACE
		TS	L		# PUT TC GOQ, TC RIGHT5, TC LEFT5 IN L
		INDEX	DECOUNT
		CAF	LOW5		# LOW5, MID5, HI5 IN A
		TC	Q
PUTCOM		TS	DECOUNT
		XCH	Q
		TS	DECRET
		CAF	ZERO
		TS	MPAC+6
		INDEX	DECOUNT
		XCH	XREGLP
		TS	MPAC +1
		INDEX	DECOUNT
		XCH	XREG
		TS	MPAC
		INDEX	MIXBR
		TC	+0
		TC	PUTNORM		# NORMAL NOUN
# IF MIXNOUN, PLACE ADDRESS FOR COMPONENT K INTO NOUNADD, SET EBANK BITS.
		INDEX	DECOUNT		# GET IDADDTAB ENTRY FOR COMPONENT K
		CA	IDAD1TEM	#	OF NOUN.
		MASK	LOW11		# (ECADR)SUBK FOR CURRENT COMP OF NOUN
		TC	SETNCADR	# ECADR INTO NOUNCADR. SETS EB, NOUNADD.
		EXTEND			# C(NOUNADD) IN A UPON RETURN
		SU	DECOUNT		# PLACE (ESUBK)-K INTO NOUNADD
		TS	NOUNADD
		CCS	DECBRNCH
		TC	PUTDECSF	# + DEC
		TC	DCTSTCYC	# +0 OCTAL
		TC	SFRUTMIX	# TEST IF DEC ONLY BIT = 1. IF SO,
		TC	DPTEST		# ALARM AND RECYCLE. IF NOT, CONTINUE.
		TC	PUTCOM2		# NO DP
					# TEST FOR DP SCALE FOR OCT LOAD. IF SO,
					# +0 INTO MAJOR PART. SET NOUNADD FOR
## Restored trailing period in the following line. &mdash; RSB 2017.					
					# LOADING OCTAL WORD INTO MINOR PART.
PUTDPCOM	INCR	NOUNADD		# DP  (ESUBK)-K+1  OR  E+1
		CA	NOUNADD		# NOUNADD NOW SET FOR MINOR PART
		ADS	DECOUNT		# (ESUBK)+1  OR  E+1  INTO DECOUNT
		CAF	ZERO		# NOUNADD SET FOR MINOR PART
		INDEX	DECOUNT
		TS	0 -1		# ZERO MAJOR PART(ESUBK OR E)
		TC	PUTCOM2

## Page 358
PUTNORM		TC	SETNADD		# ECADR FROM NOUNCADR. SETS EB, NOUNADD.
		CCS	DECBRNCH
		TC	PUTDECSF	# + DEC
		TC	DCTSTCYC	# +0 OCTAL
		TC	SFRUTNOR	# TEST IF DEC ONLY BIT = 1.  IF SO,
		TC	DPTEST		# ALARM AND RECYCLE. IF NOT, CONTINUE.
		TC	PUTCOM2 -4	# NO DP
		CAF	ZERO		# DP
		TS	DECOUNT
		TC	PUTDPCOM

 -4		CA	NNADTEM
		AD	ONE		# IF NNADTEM = -1, CHANNEL TO BE SPECIFIED
		EXTEND
		BZF	CHANLOAD
PUTCOM2		XCH	MPAC
		TC	DECRET

		EBANK=	DSPCOUNT
GTSFINLC	2CADR	GTSFIN

## Restored trailing period in the following line. &mdash; RSB 2017.
CHANLOAD	CS	SEVEN		# DONT LOAD CHAN 7. (IT = SUPERBANK).
		AD	NOUNCADR
		EXTEND
		BZF	LOADLV
		CA 	NOUNCADR
		MASK	LOW9
		XCH	MPAC
		EXTEND
		INDEX	MPAC
		WRITE	0
		TC	LOADLV

# PUTDECSF FINDS MIXBR AND DECOUNT STILL SET FROM PUTCOM

PUTDECSF	TC	SFCONUM		# 2X(SF CON NUMB) IN A
		TS	SFTEMP1
		EXTEND			# SWITCH BANKS TO SF CONSTANT TABLE
		DCA	GTSFINLC	# READING ROUTINE.
		DXCH	Z		# LOADS SFTEMP1, SFTEMP2.
		INDEX	MIXBR
		TC	+0
		TC	PUTSFNOR
		TC	SFRUTMIX
		TC	PUTDCSF2
PUTSFNOR	TC	SFRUTNOR

## Page 359
PUTDCSF2	INDEX	A
		CAF	SFINTABR
		TC	BANKJUMP	# SWITCH BANKS FOR EXPANSHION ROOM
SFINTABR	CADR	GOALMCYC	# ALARM AND RECYCLE IF DEC LOAD
					# WITH OCTAL ONLY NOUN.
		CADR	BINROUND
		CADR	DEGINSF
		CADR	ARTHINSF
		CADR	DPINSF
		CADR	DPINSF2
		CADR	OPTDEGIN
		CADR	DPINSF		# SAME AS ARITHDP1
		CADR	HMSIN
		CADR	DSPALARM	# MIN/SEC CANT BE LOADED.
		CADR	DPINSF4
		CADR	ARTIN1SF
		CADR	DSPALARM	# 2INTOUT CANT BE LOADED.
		CADR	DPFRACIN

# SCALE FACTORS FOR THOSE ROUTINES NEEDING THEM ARE AVAILABLE IN SFTEMP1.
# ALL SFIN ROUTINES USE MPAC MPAC+1. LEAVE RESULT IN A. END WITH TC DECRET

		SETLOC	PINBALL1
		BANK
		COUNT*	$$/PIN

# DEGINSF APPLIES 1000/180 = 5.55555(10) = 5.43434(8)

DEGINSF		TC	DMP		# SF ROUTINE FOR DEC DEGREES
		ADRES	DEGCON1		# MULT BY 5.5 5(10)X2EXP-3
		CCS	MPAC +1		# THIS ROUNDS OFF MPAC+1 BEFORE SHIFT
		CAF	BIT11		# LEFT 3, AND CAUSES 360.00 TO OF/UF
		TC	+2		# WHEN SHIFTED LEFT AND ALARM.
		CS	BIT11
		AD	MPAC +1
		TC	2ROUND +2
		TC	TPSL1		# LEFT 1
DEGINSF2	TC	TPSL1		# LEFT 2
		TC	TESTOFUF
		TC	TPSL1		# RETURNS IF NO OF/UF (LEFT3)
		CCS	MPAC
		TC	SIGNFIX		# IF +, GO TO SIGNFIX
		TC	SIGNFIX		# IF +0, GO TO SIGNFIX
		COM			# IF -, USE -MAGNITUDE +1
		TS	MPAC		# IF -0, USE +0
SIGNFIX		CCS	MPAC+6
		TC	SGNTO1		# IF OVERFLOW
		TC	ENDSCALE	# NO OVERFLOW/UNDERFLOW
		CCS	MPAC		# IF UF FORCE SIGN TO 0 EXCEPT -180
MONADR		GENADR	PASTEVB		# CANNOT GET HERE
		TC	NEG180
## Page 360
		TC	+1
		XCH	MPAC
		MASK	POSMAX
 -1		TS	MPAC
ENDSCALE	TC	POSTJUMP
		CADR	PUTCOM2

NEG180		CS	POSMAX
		TC	ENDSCALE -1

SGNTO1		CS	MPAC		# IF OF FORCE SIGN TO 1
		MASK	POSMAX
		CS	A
		TC	ENDSCALE -1

DEGCON1		2DEC	5.555555555 B-3

DEGCON2		2DEC	2.222222222 B-2

ARTHINSF	TC	DMP		# SCALES MPAC, +1 BY SFTEMP1, SFTEMP2.
		ADRES	SFTEMP1		# ASSUMES POINT BETWEEN HI AND LO PARTS
		XCH	MPAC +2		# OF SFCON. SHIFTS RESULTS LEFT BY 14.
		XCH	MPAC +1		# (BY TAKING RESULTS FROM MPAC+1, MPAC+2)
		XCH	MPAC
		EXTEND
		BZF	BINROUND
		TC	ALMCYCLE	# TOO LARGE A LOAD. ALARM AND RECYCLE.
BINROUND	TC	2ROUND
		TC	TESTOFUF
		TC	ENDSCALE	# RETURNS IF NO OF/UF

ARTIN1SF	TC	DMP		# SCALES MPAC, +1 BY SFTEMP1, SFTEMP2.
		ADRES	SFTEMP1		# ROUNDS MPAC+1 INTO MPAC.
		TC	BINROUND

OPTDEGIN	CCS	MPAC		# OPTICS SCALING ROUTINE
		TC	+4
		TC	+3
		TC	ALMCYCLE	# REJECT - INPUT. ALARM AND RECYCLE.
		TC	ALMCYCLE	# REJECT - INPUT. ALARM AND RECYCLE.
OPDEGIN2	CAF	NEG.2		# RANGE IS 90 DEG
		ADS	MPAC		# SUBTRACT BIAS
		TC	DMP		# MULT BY 100 / 45 B-2
		ADRES	DEGCON2
		CAF	BIT12		# ROUND AS IN DEGINSF
		AD	MPAC	+1
		TC	2ROUND	+2
## Page 361
		TC	DEGINSF2

DPINSF		TC	DMP		# SCALES MPAC, MPAC +1 BY SFTEMP1,
		ADRES	SFTEMP1		# SFTEMP2. STORES LOW PART OF RESULT
 +2		XCH	MPAC +2		# IN (E SUBK) +1 OR E+1
		DOUBLE
		TS	MPAC +2
		CAF	ZERO
		AD	MPAC +1
		TC	2ROUND +2
		TC	TESTOFUF
DPFRACIN	INDEX	MIXBR		# RETURNS IF NO OF/UF
		TC	+0
		TC	DPINORM
		CA	DECOUNT		# MIXED NOUN
DPINCOM		AD	NOUNADD		#	MIXED		NORMAL
		TS	Q		#	E SUBK		E
		XCH	MPAC +1
		INDEX	Q
		TS	1		# PLACE LOW PART IN
		TC	ENDSCALE	# (E SUBK) +1	MIXED
DPINORM		CAF	ZERO		# E +1		NORMAL
		TC	DPINCOM

DPINSF2		TC	DMP		# ASSUMES POINT BETWEEN BITS 7-8 OF HIGH
		ADRES	SFTEMP1		# PART OF SF CONST. DPINSF2 SHIFTS RESULTS
		CAF	SIX		# LEFT BY 7, ROUNDS MPAC+2 INTO MPAC+1
		TCF	+4		# SHIFT LEFT 7
DPINSF4		TC	DMP		# ASSUMES POINT BETWEEN BITS 11-12 OF HIGH
		ADRES	SFTEMP1		# PART OF SF CONST. DPINSF2 SHIFTS RESULTS
		CAF	TWO		# LEFT BY 3, ROUNDS MPAC+2 INTO MPAC+1.
		TC	TPLEFTN		# SHIFT LEFT 3.
		TC	DPINSF +2

TPLEFTN		XCH	Q		# SHIFTS MPAC, +1, +2 LEFT N. SETS OVFIND
		TS	SFTEMP2		# TO +1 FOR OF, -1 FOR UF.
		XCH	Q		# CALL WITH N-1 IN A.
LEFTNCOM	TS	SFTEMP1		#	LOOP TIME .37 MSEC.
		TC	TPSL1
		CCS	SFTEMP1
		TC	LEFTNCOM
		TC	SFTEMP2

2ROUND		XCH	MPAC	 +1
		DOUBLE
 +2		TS	MPAC 	+1
		TC	Q		# IF MPAC+1 DOES NOT OF/UF
## Page 362
		TCF	TPSL1 +4	# CHECK FOR MPAC OF/UF
TESTOFUF	CA	MPAC+6		# RETURNS IF NO OF/UF
		EXTEND
		BZF	TCQ
		TC	ALMCYCLE	# UF	ALARM AND RECYCLE.

		SETLOC	PINBALL3
		BANK
		COUNT*	$$/PIN
HMSIN		CS	DECBRNCH	# CHECK FOR ALL 3.COMPS DEC
		MASK	OCT34		# BITS 3,4,5
		CCS	A
		TC	FORCEV25
		TC	DMP		# XREG, XREGLP (=HOURS) WERE ALREADY PUT
		ADRES	WHOLECON	# INTO MPAC, MPAC+1.
## Restored trailing period in the following two lines. &mdash; RSB 2017.
		TC	RND/TST		# ROUND OFF TO WHOLE HRS IN MPAC+1.
		CAF	ZERO		# ALARM IF MPAC NON ZERO (G/ 16383).
		TS	MPAC +2
		CAF	HRCON
		TS	MPAC
		CAF	HRCON +1
		XCH	MPAC +1
		TC	SHORTMP
		TC	MPACTST		# ALARM IF MPAC NON ZERO (G/ 745)
		DXCH	MPAC +1		# STORE HOURS CONTRIBUTION
		DXCH	HITEMIN
		CA	YREG		# PUT YREG, YREGLP INTO MPAC, +1.
		LXCH	YREGLP
		DXCH	MPAC
		TC	DMP
		ADRES	WHOLECON
		TC	RND/TST		# ROUND OFF TO WHOLE MIN IN MPAC+1
		CS	59MIN		# ALARM IF MPAC NON ZERO (G/16383)
		TC	SIZETST		# ALARM IF MPAC+1 G/ 59MIN
		XCH	MPAC +1
		EXTEND
		MP	MINCON		# LEAVES MINUTES CONTRIBUTION IN A,L
		DAS	HITEMIN		# ADD IN MINUTES CONTRIBUTION
		EXTEND			# IF THIS DAS OVERFLOWS, G/ 745 HR,39MIN
		BZF	+2
		TC	ALMCYCLE
		CA	ZREG		# PUT ZREG, ZREGLP INTO MPAC, +1.
		LXCH	ZREGLP
		DXCH	MPAC
		TC	DMP
		ADRES	WHOLECON
		TC	RND/TST		# ROUND OFF TO WHOLE CENTI-SEC IN MPAC+1
		CS	59.99SEC	# ALARM IF MPAC NON ZERO (G/163.83 SEC)
		TC	SIZETST		# ALARM IF MPAC+1 G/59.99 SEC
## Page 363
		DXCH	HITEMIN		# ADD IN SECONDS CONTRIBUTION
		DAS	MPAC		# IF THIS DAS OVERFLOWS,
		EXTEND			# G/ 745 HR, 39 MIN, 14.55 SEC.
		BZF	+2
		TC	ALMCYCLE	# ALARM AND RECYCLE
		TC	DPAGREE
		DXCH	MPAC
		INDEX	NOUNADD
		DXCH	0
		TC	POSTJUMP
		CADR	LOADLV

WHOLECON	OCT	00006		# (10EXP5/2EXP14)2EXP14
		OCT	03240
HRCON		OCT	00025		# 1 HOUR IN CENTI-SEC
 +1		OCT	37100
MINCON		OCT	13560		# 1 MINUTE IN CENTI-SEC
59MIN		OCT	00073		# 59 AS WHOLE
59.99SEC	OCT	13557		# 5999 CENTI-SEC

RND/TST		XCH	MPAC +2		# ROUNDS MPAC+2 INTO MPAC+1.
		DOUBLE			# ALARMS IF MPAC NOT 0
		TS	MPAC +2
		CAF	ZERO
		AD	MPAC +1
		TS	MPAC +1
		CAF	ZERO
		AD	MPAC		# CANT OVFLOW
		XCH	MPAC
MPACTST		CA	MPAC		# ALARM IF MPAC NON ZERO
		EXTEND
		BZF	TCQ
		TC	ALMCYCLE	# ALARM AND RECYCLE.
SIZETST		TS	MPAC +2		# CALLED WITH - CON IN A
		CCS	MPAC +1		# GET MAG OF MPAC+1
		AD	ONE
		TCF	+2
		AD	ONE
		AD	MPAC +2
		EXTEND			# MAG OF MPAC+1 - CON
		BZMF	TCQ
		TC	ALMCYCLE	# MAG OF MPAC+1 G/ CON. ALARM AND RECYCLE.
FORCEV25	CS	OCT31		# FORCE VERB 25 TO BE EXECUTED BY RECYCLE
		TS	VERBSAVE	#  IN CASE OPERATOR EXECUTED A LOWER LOAD
		TC	ALMCYCLE	#  VERB. ALARM AND RECYCLE.

## Page 364

# MONITOR ALLOWS OTHER KEYBOARD ACTIVITY. IT IS ENDED BY VERB TERMINATE,
# VERB PROCEED WITHOUT DATA, VERB RESEQUENCE,
# ANOTHER MONITOR, OR ANY NVSUB CALL THAT PASSES THE DSPLOCK (PROVIDED
# THAT THE OPERATOR HAS SOMEHOW ALLOWED THE ENDING OF A MONITOR WHICH
# HE HAS INITIATED THROUGH THE KEYBOARD).
#
# MONITOR ACTION IS SUSPENDED, BUT NOT ENDED, BY ANY KEYBOARD ACTION,
# EXCEPT ERROR LIGHT RESET. IT BEGINS AGAIN WHEN KEY RELEASE IS PERFORMED.
# MONITOR SAVES THE NOUN AND APPROPRIATE DISPLAY VERB IN MONSAVE. IT SAVES
# NOUNCADR IN MONSAVE1, IF NOUN = MACHINE CADR TO BE SPECIFIED. BIT 15 OF
# MONSAVE1 IS THE KILL MONITOR SIGNAL (KILLER BIT). BIT 14 OF MONSAVE1
# INDICATES THE CURRENT MONITOR WAS EXTERNALLY INITIATED (EXTERNAL
# MONITOR BIT). IT IS TURNED OFF BY RELDSP AND KILMONON.
#
# MONSAVE INDICATES IF MONITOR IS ON (+=ON, +0=OFF)
# IF MONSAVE IS +, MONITOR ENTERS NO REQUEST, BUT TURNS KILLER BIT OFF.
# IF MONSAVE IS +0, MONITOR ENTERS REQUEST AND TURNS KILLER BIT OFF.
#
# NVSUB (IF EXTERNAL MONITOR BIT IS OFF), VB=PROCEED WITHOUT DATA,
# VB=RESEQUENCE, AND VB=TERMINATE TURN KILL MONITOR BIT ON.
#
# IF KILLER BIT IS ON, MONREQ ENTERS NO FURTHER REQUESTS, ZEROS MONSAVE
# AND MONSAVE1 (TURNING OFF KILLER BIT AND EXTERNAL MONITOR BIT).
#
# MONITOR DOSENT TEST FOR MATBS SINCE NVSUB CAN HANDLE INTERNAL MATBS NOW

		SETLOC	PINBALL2
		BANK
		COUNT*	$$/PIN
MONITOR		CS	BIT15/14
		MASK	NOUNCADR
MONIT1		TS	MPAC +1		# TEMP STORAGE
		CS	ENTEXIT
		AD	ENDINST
		CCS	A
		TC	MONIT2
MONREF		OCT	75377		# -DEC10,STARTING IN BIT8. CANNOT GET HERE
		TC	MONIT2
		CAF	BIT14		# EXTERNALLY INITIATED MONITOR,
		ADS	MPAC +1		# SET BIT 14 FOR MONSAVE1.
		CAF	ZERO
		TS	MONSAVE2	# ZERO NVMONOPT OPTIONS
MONIT2		CAF	LOW7
		MASK	VERBREG
		TC	LEFT5
		TS	CYL
		CS	CYL
		XCH	CYL
		AD	NOUNREG
		TS	MPAC		# TEMP STORAGE
		CAF	ZERO
## Page 365
		TS	DSPLOCK		# +0 INTO DSPLOCK SO MONITOR CAN RUN.
		CCS	CADRSTOR	# TURN OFF KR LITE IF CADRSTOR AND DSPLIST
		TC	+2		# ARE BOTH EMPTY. (LITE COMES ON IF NEW
		TC	RELDSP1		# MONITOR IS KEYED IN OVER OLD MONITOR.)
		INHINT
		CCS	MONSAVE
		TC	+3		# IF MONSAVE WAS +, NO REQUEST
		TC	TWIDBIT1	# IF MONSAVE WAS 0, REQUEST MONREQ
		ADRES	MONREQ
		DXCH	MPAC		# PLACE MONITOR VERB AND NOUN INTO MONSAVE
		DXCH	MONSAVE		# ZERO THE KILL MONITOR BIT
		RELINT			# SET UP EXTERNAL MONITOR BIT
		TC	ENTRET

MONREQ		TC	LODSAMPT	# CALLED BY WAITLIST
		TC	B15MONCK	# CHECK FOR KILLER BIT
		TC	KILLMON		# IF KILLER BIT = 1, NO REQUESTS
		CAF	MONDEL
TCWAIT		TC	WAITLIST	# ENTER WAITLIST REQUEST FOR MONREQ
		EBANK=	DSPCOUNT
		2CADR	MONREQ

		CAF	CHRPRIO
TCNOVAC		TC	NOVAC		# ENTER EXEC REQUEST FOR MONDO
		EBANK=	DSPCOUNT
		2CADR	MONDO

		TC	TASKOVER

KILLMON		CAF	ZERO		# ZERO MONSAVE AND TURN KILLER BIT OFF
		TS	MONSAVE
		TS	MONSAVE1	# TURN OFF KILL MONITOR BIT.
		TC	TASKOVER	# TURN OFF EXTERNAL MONITOR BIT.
MONDEL		EQUALS	1SEC
B15MONCK	CCS	MONSAVE1	# CHECK FOR KILLER BIT=1
		TCF	+1		# =0
		INCR	Q		# =0
		TC	Q		# =1
		TC	Q		# =1
MONDO		TC	B15MONCK	# CHECK FOR KILLER BIT
		TC	ENDOFJOB	# IN CASE TERMINATE CAME SINCE LAST MONREQ
		CCS	DSPLOCK
		TC	MONBUSY		# NVSUB IS BUSY
		CAF	LOW7
		MASK	MONSAVE
		TC	UPDATNN -1	# PLACE NOUN INTO NOUNREG AND DISPLAY IT
		CAF	MID7
		MASK	MONSAVE		# CHANGE MONITOR VERB TO DISPLAY VERB
		AD	MONREF		# -DEC10, STARTING IN BIT8
## Page 366
		TS	EDOP		# RIGHT 7
		CA	EDOP
		TS	VERBREG
		CAF	MONBACK		# SET RETURN TO PASTEVB AFTER DATA DISPLAY
		TS	ENTRET
		CS	BIT15/14
		MASK	MONSAVE1	# PUT ECADR INTO MPAC +2. INTMCTBS WILL
		TS	MPAC +2		# DISPLAY IT AND SET NOUNCADR, NOUNADD,
ENDMONDO	TC	TESTNN		# EBANK.

BIT15/14	EQUALS	RELTAB11	# OCT 60000
		SETLOC	FFTAG8
		BANK

		COUNT*	$$/PIN
PASTEVB		CAF	MID7
		MASK	MONSAVE2	# NVMONOPT PASTE OPTION
		EXTEND
		BZF	+2
		TC	PASTEOPT	# PASTE PLEASE VERB FOR NVMONOPT
		CA	MONSAVE		# PASTE MONITOR VERB - PASTE OPTION IS 0
PASTEOPT	TS	EDOP		# RIGHT 7
		CA	EDOP		# PLACE MONITOR VERB OR PLEASE VERB INTO
		TC	BANKCALL	#  VERBREG AND DISPLAY IT.
		CADR	UPDATVB -1
		CAF	ZERO		# ZERO REQRET SO THAT PASTED VERBS CAN
		TS	REQRET		#  BE EXECUTED BY OPERATOR.
		CA	MONSAVE2
		TC	BLANKSUB	# PROCESS NVMONOPT BLANK OPTION IF ANY
		TC	+1
ENDPASTE	TC	ENDOFJOB

ENDINST		EQUALS	ENDPASTE

MID7		OCT	37600

OCT34		OCT	34
		SETLOC	PINBALL2
		BANK
		COUNT*	$$/PIN
MONBUSY		TC	RELDSPON	# TURN KEY RELEASE LIGHT
		TC	ENDOFJOB

# DSPFMEM IS USED TO DISPLAY (IN OCTAL) ANY FIXED REGISTER.
# IT IS USED WITH NOUN = MACHINE CADR TO BE SPECIFIED. THE FCADR OF THE
# DESIRED LOCATION IS THEN PUNCHED IN. IT HANDLES F/F (FCADR 4000-7777)
#
# FOR BANKS L/E 27, THIS IS ENOUGH.
## Page 367
#
# FOR BANKS G/E 30, THE THIRD COMPONENT OF NOUN 26 (PRIO, ADRES, BBCON)
# MUST BE PRELOADED WITH THE DESIRED SUPERBANK BITS (BITS 5,6,7).
#	V23N26 SHOULD BE USED.
#
# SUMMARY
# FOR BANKS L/E 27,				V27N01E(FCADR)E
# FOR BANKS G/E 30, 	V23N26E(SUPERBITS)E	V27N01E(FCADR)E

DSPFMEM		CAF	R1D1		# IF F/F, DATACALL USES BANK 02 OR 03.
		TS	DSPCOUNT
		CA	DSPTEM1 +2	# SUPERBANK BITS WERE PRELOADED INTO
		TS	L		# 3RD COMPONENT OF NOUN 26.
		CA	NOUNCADR	# ORIGINAL FCADR LOADED STILL IN NOUNCADR.
		TC	SUPDACAL	# CALL WITH FCADR IN A, SUPERBITS IN L.
		TC	DSPOCTWD
ENDSPF		TC	ENDOFJOB

## Page 368
# WORD DISPLAY ROUTINES
		SETLOC	PINBALL1
		BANK
		COUNT*	$$/PIN
DSPSIGN		XCH	Q
		TS	DSPWDRET
		CCS	MPAC
		TCF	TCPLON
		TCF	TCPLON
		AD	ONE
		TS	MPAC
		TC	-ON
		CS	MPAC +1
		TS	MPAC +1
		TC	DSPWDRET
TCPLON		TC	+ON
		TC	DSPWDRET

# DSPDECWD CONVERTS C(MPAC,MPAC+1) INTO A SIGN AND 5 CHAR DECIMAL
# STARTING IN LOC SPECIFIED IN DSPCOUNT. IT ROUNDS BY 5 EXP-6.

DSPDECWD	XCH	Q
		TS	WDRET
		TC	DSPSIGN
		EXTEND			# ROUND BY 5 EXP-6
		DCA	DECROUND -1
		DAS	MPAC
		EXTEND
		BZF	+4
		EXTEND
		DCA	DPOSMAX
		DXCH	MPAC
		CAF	FOUR
DSPDCWD1	TS	WDCNT
		CAF	BINCON
		TC	SHORTMP
		CA	MPAC
		TC	CODSTOR
		CAF	ZERO
		XCH	MPAC +2
		XCH	MPAC +1
		TS	MPAC
		CCS	COUNT
		TS	DSPCOUNT
		TC	DSPIN
		CCS	WDCNT
		TC	DSPDCWD1
		TC	-VD1SET
		TC	WDRET

## Page 369

# DSPDC2NR CONVERTS C(MPAC,MPAC+1) INTO A SIGN AND 2 CHAR DECIMAL
# STARTING IN LOC SPECIFIED IN DSPCOUNT. IT DOES NOT ROUND

DSPDC2NR	XCH	Q
		TS	WDRET
		TC	DSPSIGN
 +3		CAF	ONE
		TC	DSPDCWD1

# DSP2DEC CONVERTS C(MPAC) AND C(MPAC+1) INTO A SIGN AND 10 CHAR DECIMAL
# STARTING IN THE LOC SPECIFIED IN DSPCOUNT.

DSP2DEC		XCH	Q
		TS	WDRET
		CAF	ZERO
		TS	CODE
		CAF	THREE
		TC	11DSPIN		# -R2 OFF
		CAF	FOUR
		TC	11DSPIN		# +R2 OFF
		TC	DSPSIGN
		CAF	R2D1
END2DEC		TC	DSPDCWD1

# DSPDECVN DISPLAYS C(A) UPON ENTRY AS A 2 CHAR DECIMAL BEGINNING IN THE
# DSP LOC SPECIFIED IN DSPCOUNT.
# C(A) SHOULD BE IN FORM N X 2EXP-14. THIS IS SCALED TO FORM N/100 BEFORE
# DISPLAY CONVERSION.

DSPDECVN	EXTEND
		MP	VNDSPCON	# MULT BY .01
		LXCH	MPAC		# TAKE RESULTS FROM L. (MULT BY 2EXP14).
		CAF	ZERO
		TS	MPAC +1
		XCH	Q
		TS	WDRET
		TC	DSPDC2NR +3	# NO SIGN, NO ROUND, 2 CHAR

GOVNUPDT	TC	DSPDECVN	# THIS IS NOT FOR GENERAL USE. REALLY PART
		TC	POSTJUMP	# OF UPDATVB.
		CADR	UPDAT1 +2

		SETLOC	PINBALL2
		BANK
		COUNT*	$$/PIN

# DSPOCTWD DISPLAYS C(A) UPON ENTRY AS A 5 CHAR OCT STARTING IN THE DSP
# CHAR SPECIFIED IN DSPCOUNT. IT STOPS AFTER 5 CHAR HAVE BEEN DISPLAYED.
## Page 370

DSPOCTWD	TS	CYL
		XCH	Q
		TS	WDRET		# MUST USE SAME RETURN AS DSP2BIT.
		CAF	BIT14		# TO BLANK SIGNS
		ADS	DSPCOUNT
		CAF	FOUR
WDAGAIN		TS	WDCNT
		CS	CYL
		CS	CYL
		CS	CYL
		CS	A
		MASK	DSPMSK
		TC	CODSTOR
		CCS	A		# DECREMENT DSPCOUNT EXCEPT AT +0
		TS	DSPCOUNT
		TC	POSTJUMP
		CADR	DSPOCTIN
OCTBACK		CCS	WDCNT
		TC	WDAGAIN		# +
DSPLV		TC	-VD1SET
		TC	WDRET

DSPMSK		=	SEVEN

# FOR DSPIN PLACE 0/25 OCT INTO COUNT, 5 BIT RELAY CODE INTO CODE. BOTH
# ARE DESTROYED. IF BIT14 OF COUNT IS 1, SIGN IS BLANKED WITH LEFT CHAR.
# FOR DSPIN1 PLACE 0,1 INTO BIT11 OF CODE, 2 INTO COUNT, REL ADDRESS OF
# DSPTAB ENTRY INTO DSREL.

		SETLOC	PINBALL1
		BANK
		COUNT*	$$/PIN
DSPIN		XCH	Q		# CANT USE L FOR RETURN, SINCE MANY OF THE
		TS	DSEXIT		# ROUTINES CALLING DSPIN USE L AS RETURN.
		CAF	LOW5
		MASK	COUNT
		TS	SR
		XCH	SR
		TS	DSREL
		CAF	BIT1
		MASK	COUNT
		CCS	A
		TC	+2		# LEFT IF COUNT IS ODD
		TC	DSPIN1 -1	# RIGHT IF COUNT IS EVEN
		XCH	CODE
		DOUBLE
		DOUBLE
		DOUBLE
		DOUBLE
## Page 371
		DOUBLE
		TS	CODE
		CAF	BIT14
		MASK 	COUNT
		CCS	A
		CAF	TWO		# BIT14 = 1, BLANK SIGN
		AD	ONE		# BIT14 = 0, LEAVE SIGN ALONE
 -1		TS	COUNT		# +0 INTO COUNT FOR RIGHT
					# +1 INTO COUNT FOR LEFT (SIGN LEFT ALONE)
					# +3 INTO COUNT FOR LEFT (TO BLANK SIGN)
DSPIN1		INHINT
		INDEX	DSREL
		CCS	DSPTAB
		TC	+2		# IF +
ERCON		OCT	104		# CHAN 11, BITS 3,7. CANNOT GET HERE
		AD	ONE		# IF -
		TS	DSMAG
		INDEX	COUNT
		MASK	DSMSK
		EXTEND
		SU	CODE
		EXTEND
		BZF	DSLV		# SAME
DFRNT		INDEX	COUNT
		CS	DSMSK		# MASK WITH 77740,76037,75777, OR 74037
		MASK	DSMAG
		AD	CODE
		CS	A
		INDEX	DSREL
		XCH	DSPTAB
		EXTEND
		BZMF	DSLV		# DSPTAB ENTRY WAS -
		INCR	NOUT		# DSPTAB ENTRY WAS +
DSLV		RELINT
		TC	DSEXIT

DSMSK		OCT	37
		OCT	1740
		OCT	2000
		OCT	3740

# FOR 11DSPIN, PUT REL ADDRESSS OF DSPTAB ENTRY INTO A, 1 IN BIT11 OR 0 IN
# BIT11 OF CODE.

11DSPIN		TS	DSREL
		CAF	TWO
		TS	COUNT
		XCH	Q		# MUST USE SAME RETURN AS DSPIN
		TS	DSEXIT
## Page 372
		TC	DSPIN1

DSPOCTIN	TC	DSPIN		# SO DSPOCTWD DOESNT USE SWCALL
		TC	POSTJUMP
ENDSPOCT	CADR	OCTBACK

# DSPALARM FINDS TC NVSUBEND IN ENTRET FOR NVSUB INITIATED ROUTINES.
# ABORT WITH 21501
# DSPALARM FINDS TC ENDOFJOB IN ENTRET FOR KEYBOARD INITIATED ROUTINES.
# DO TC ENTRET.

PREDSPAL	TC	-VD1SET
DSPALARM	CS	NVSBENDL
		AD	ENTEXIT
		EXTEND
		BZF	CHARALRM +2
		CS	MONADR		# IF THIS IS A MONITOR, KILL IT
		AD	ENTEXIT
		EXTEND
		BZF	+2
		TC	CHARALRM
		TC	KILMONON
		TC	FALTON
		TC	PASTEVB		# PUT MONITOR VERB BACK IN VERBREG
CHARALRM	TC	FALTON		# NOT NVSUB INITIATED. TURN ON OPR ERROR
		TC	ENDOFJOB
 +2		TC	POODOO
		OCT	21501		# KEYBOARD + ALARM DISPLAY DURING NVSUB.

# ALMCYCLE TURNS ON CHECK FAIL LIGHT, REDISPLAYS THE ORIGINAL VERB THAT
# WAS EXECUTED, AND RECYCLES TO EXECUTE THE ORIGINAL VERB/NOUN COMBINATION
# THAT WAS LAST EXECUTED. USED FOR BAD DATA DURING LOAD VERBS AND BY
# MCTBS. ALSO BY MMCHANG IF 2 NUMERICAL CHARACTERS WERE NOT PUNCHED IN
# FOR MM CODE.

		SETLOC	FFTAG8
		BANK
		COUNT*	$$/PIN
ALMCYCLE	TC	FALTON		# TURN ON CHECK FAIL LIGHT.
		CS	VERBSAVE	# GET ORIGINAL VERB THAT WAS EXECUTED
		TS	REQRET		# SET FOR ENTPAS0
		TC	BANKCALL	# PUTS ORIGINAL VERB INTO VERBREG AND
		CADR	UPDATVB -1	# DISPLAYS IT IN VERB LIGHTS.
ENTERJMP	TC	POSTJUMP
ENDALM		CADR	ENTER

# MMCHANG USES NOUN DISPLAY UNTIL ENTER.  THEN IT USES MODE DISP.
## Page 373
# IT GOES TO MODROUT WITH THE NEW M M CODE IN A, BUT NOT DISPLAYED IN
# MM LIGHTS.
# IT DEMANDS 2 NUMERICAL CHARACTERS BE PUNCHED IN FOR NEW MM CODE.
# IF NOT, IT RECYCLES.

		SETLOC	PINBALL2
		BANK
		COUNT*	$$/PIN
MMCHANG		TC	REQMM		# ENTPASHI ASSUMES THE TC REQMM AT MMCHANG
					# IF THIS MOVES AT ALL, MUST CHANGE
					# MMADREF AT ENTPASHI.
 +1		CAF	BIT5		# OCT20 = ND2.
		AD	DSPCOUNT	# DSPCOUNT MUST = -ND2.
		EXTEND			# DEMAND THAT 2 NUM CHAR WERE PUNCHED IN.
		BZF	+2
		TC	ALMCYCLE	# DSPCOUNT NOT= -ND2. ALARM AND RECYCLE.
		CAF	ZERO		# DSPCOUNT = -ND2.
		XCH	NOUNREG
		TS	MPAC
		CAF	ND1
		TS	DSPCOUNT
		TC	BANKCALL
		CADR	2BLANK
		TC	-VD1SET
		CA	MPAC
		TC	POSTJUMP
		CADR	MODROUTB	# GO THRU STANDARD LOC.

MODROUTB	=	V37
REQMM		CS	Q
		TS	REQRET
		CAF	ND1
		TS	DSPCOUNT
		CAF	ZERO
		TS	NOUNREG
		TC	BANKCALL
		CADR	2BLANK
		TC	FLASHON
		CAF	ONE
		TS	DECBRNCH	# SET FOR DEC
		TC	ENTEXIT

# VBRQEXEC ENTERS REQUEST TO EXEC FOR ANY ADDRESS WITH ANY PRIORITY.
# IT DOES ENDOFJOB AFTER ENTERING REQUEST. DISPLAY SYST IS RELEASED.
# IT ASSUMES NOUN 26 HAS BEEN PRELOADED WITH
# 	COMPONENT 1 	PRIORITY (BITS 10-14) BIT1=0 FOR NOVAC, BIT1=1 FOR FINDVAC.
# 	COMPONENT 2 	JOB ADRES (12 BIT)
#	COMPONENT 3	BBCON

## Page 374

VBRQEXEC	CAF	BIT1
		MASK	N26/PRI
		CCS	A
		TC	SETVAC		# IF BIT1 = 1, FINDVAC
		CAF	TCNOVAC		# IF BIT1 = 0, NOVAC
REQEX1		TS	MPAC		# TC NOVAC OR TC FINDVAC INTO MPAC
		CA	PRIO37
		MASK	N26/PRI
 -1		TS	MPAC +4		# PRIO INTO MPAC+4 AS A TEMP
REQUESTC	TC	RELDSP
		CA	N26/PRI
		EXTEND
		BZF	GODSPALM	# OP ERROR AND EOJ IF R1 OF N26 = 0
		CA	ENDINST
		TS	MPAC +3		# TC ENDOFJOB INTO MPAC+3
		EXTEND
		DCA	N26/2CAD	# JOB ADRES INTO MPAC+1
		DXCH	MPAC +1		# BBCON INTO MPAC+2
		CA	MPAC +4		# PRIO IN A
		INHINT
		TC	MPAC

SETVAC		CAF	TCFINDVC
		TC	REQEX1

# VBRQWAIT ENTERS REQUEST TO WAITLIST FOR ANY ADDRESS WITH ANY DELAY.
# IT DOES ENDOFJOB AFTER ENTERING REQUEST. DISPLAY SYST IS RELEASED.
# IT ASSUMES NOUN 26 HAS BEEN PRELOADED WITH
#	COMPONENT 1	DELAY (LOW BITS)
#	COMPONENT 2	TASK ADRES (12 BIT)
#	COMPONENT 3	BBCON

VBRQWAIT	CAF	TCWAIT
		TS	MPAC		# TC WAITLIST INTO MPAC
		CA	N26/PRI		# TIME DELAY
ENDRQWT		TC	REQUESTC -1

# REQUESTC WILL PUT TASK ADRES INTO MPAC+1, BBCON INTO MPAC+2,
# TC ENDOFJOB INTO MPAC+3. IT WILL TAKE TIME DELAY OUT OF MPAC+4 AND
# LEAVE IT IN A, INHINT AND TC MPAC.

		SETLOC	PINBALL1
		BANK
		COUNT*	$$/PIN
VBPROC		CS	ONE
 +1		TS	LOADSTAT
		TC	KILMONON	# TURN ON KILL MONITOR BIT
		TC	RELDSP
		TC	FLASHOFF
## Page 375
		TC	RECALTST	# SEE IF THERE IS ANY RECALL FROM ENDIDLE

VBTERM		CS	TWO
		TC	VBPROC +1	# TERM VERB SETS LOADSTAT NEG

# PROCKEY PERFORMS THE SAME FUNCTION AS VBPROC.  IT MUST BE CALLED UNDER
# EXECUTIVE CONTROL, WITH CHRPRIO.

PROCKEY		CS	VERBREG		# DONT ALLOW PROCEED DURING LOAD.
		AD	VBSP2LD
		EXTEND
		DIM	A
		EXTEND
		BZF	CHARALRM
PROCKEY1	CAF	ZERO		# SET REQRET FOR ENTER PASS 0.
		TS	REQRET
		TC	-VD1SET
		TC	VBPROC

# VBRESEQ WAKES ENDIDLE AT SAME LINE AS FINAL ENTER OF LOAD (L+3).
# (MAIN USE IS INTENDED AS RESPONSE TO INTERNALLY INITIATED FLASHING
# DISPLAYS IN ENDIDLE. SHOULD NOT BE USED WITH LOAD VERBS, PLEASE PERFORM,
# OR PLEASE MARK VERBS BECAUSE THEY ALREADY USE L+3 IN ANOTHER CONTEXT.)

VBRESEQ		CS	ZERO		# MAKE IT LOOK LIKE DATA IN.
		TC	VBPROC +1

# FLASH IS TURNED OFF BY PROCEED WITHOUT DATA, TERMINATE, RESEQUENCE,
# END OF LOAD.

## Page 376

# KEY RELEASE ROUTINE
#
# THIS ROUTINE ALWAYS TURNS OFF THE UPACT LIGHT AND ALWAYS CLEARS DSPLOCK.
#
# THE HIGHEST PRIORITY FUNCTION OF THE KEY RELEASE BUTTON IS THE
# UNSUSPENDING OF A SUSPENDED MONITOR WHICH WAS EXTERNALLY INITIATED.
# THIS FUNCTION IS ACCOMPLISHED BY CLEARING DSPLOCK AND TURNING OFF
# THE KEY RELEASE LIGHT IF BOTH DSPLIST AND CADRSTOR ARE EMPTY.
#
# IF NO SUCH MONITOR EXISTS, THEN RELDSP IS EXECUTED TO CLEAR DSPLOCK
# AND THE EXTERNAL MONITOR BIT (FREEING THE DISPLAY SYSTEM FOR INTERNAL
# USE), TURN OFF THE KEY RELEASE LIGHT, AND WAKE UP ANY JOB IN DSPLIST.
#
# IN ADDITION IF THERE IS A JOB IN ENDIDLE, THEN CONTROL IS TRANSFERRED
# TO PINBRNCH (IN DISPLAY INTERFACE ROUTINE) TO RE-EXECUTE THE SERIES OF
# NVSUB CALLS ETC. THAT PRECEDED THE ENDIDLE CALL STILL AWAITING RESPONSE.
# THIS FEATURE IS INTENDED FOR USE WHEN THE OPERATOR HAS BEEN REQUESTED TO
# RESPOND TO SOME INTERNAL ACTION THAT USED ENDIDLE, BUT HE HAS WRITTEN
# OVER THE INFORMATION ON THE DISPLAY PANEL BY SOME DISPLAYS OF HIS OWN
# INITIATION WHICH DO NOT SERVE AS RESPONSES. HITTING KEY RLSE WILL
# RE-ESTABLISH THE DISPLAYS TO THE STATE THEY WERE IN BEFORE HE OBSCURED
# THEM, SO THAT HE CAN SEE THE WAITING REQUEST.  THIS WORKS ONLY FOR
# INTERNAL PROGRAMS THAT USED ENDIDLE THROUGH MARGARETS DISPLAY
# SUBROUTINES.

VBRELDSP	CS	BIT3
		EXTEND
		WAND	DSALMOUT	# TURN OFF UPACT LITE
		CCS	21/22REG	# OLD DSPLOCK
		CAF	BIT14
		MASK	MONSAVE1	# EXTERNAL MONITOR BIT (EMB)
		CCS	A
		TC	UNSUSPEN	# OLD DSPLOCK AND EMB BOTH 1, UNSUSPEND.
TSTLTS4		TC	RELDSP		# NOT UNSUSPENDING EXTERNAL MONITOR,
		CCS	CADRSTOR	#  RELEASE DISPLAY SYSTEM AND
		TC	+2		#  DO RE-ESTABLISH IF CADRSTOR IS FULL.
		TC	ENDOFJOB
		TC	POSTJUMP
		CADR	PINBRNCH
UNSUSPEN	CAF	ZERO		# EXTERNAL MONITOR IS SUSPENDED,
		TS	DSPLOCK		#  JUST UNSUSPEND IT BY CLEARING DSPLOCK.
		CCS	CADRSTOR	#  TURN KEY RELEASE LIGHT OFF IF BOTH
		TC	ENDOFJOB	#  CADRSTOR AND DSPLIST ARE EMPTY.
		TC	RELDSP1
		TC	ENDOFJOB

## Page 377

# NVSUB IS USED FOR SUB ROUTINE CALLS FROM WITHIN COMPUTER. IT CAN BE
# USED TO CALL THE COMBINATION OF ANY DISPLAY, LOAD, OR MONITOR VERB
# TOGETHER WITH ANY NOUN AVAILABLE TO THE KEYBOARD.
# PLACE 0VVVVVVVNNNNNNN INTO A.
# V-S ARE THE 7 BIT VERB CODE.  N-S ARE THE 7 BIT NOUN CODE.
#
# IF NVSUB IS CALLED WITH THE FOLLOWING NEGATIVE NUMBERS (RATHER THAN THE
# VERB-NOUN CODE) IN A, THEN THE DISPLAY IS BLANKED AS FOLLOWS-
# -4 FULL BLANK, -3 LEAVE MODE, -2 LEAVE MODE AND VERB, -1 BLANK R-S ONLY
#
# NVSUB CAN BE USED WITH MACH CADR TO BE SPEC BY PLACING THE CADR INTO
# MPAC+2 BEFORE THE STANDARD NVSUB CALL.
#
# NVSUB RETURNS TO 2+ CALLING LOC AFTER PERFORMING TASK, IF DISPLAY
# SYSTEM IS AVAILABLE. THE NEW NOUN AND VERB CODES ARE DISPLAYED.
# IF V:S =0, THE NEW NOUN CODE IS DISPLAYED ONLY (RETURN WITH NO FURTHER
# ACTION). IF N-S =0, THE NEW VERB CODE IS DISPLAYED ONLY (RETURN WITH NO
# FURTHER ACTION).
#
# IT RETURNS TO 1+ CALLING LOC WITHOUT PERFORMING TASK, IF DISPLAY
# SYSTEM IS BLOCKED (NOTHING IS DISPLAYED IN THIS CASE).
# IT DOES TC ABORT (WITH OCT 01501) IF IT ENCOUNTERS A DISPLAY PROGRAM
# ALARM CONDITION BEFORE RETURN TO CALLER.
#
# THE DISPLAY SYSTEM IS BLOCKED BY THE DEPRESSION OF ANY
# KEY, EXCEPT ERROR LIGHT RESET
# IT IS RELEASED BY THE KEY RELEASE BUTTON, ALL EXTENDED VERBS,
# PROCEED WITHOUT DATA, TERMINATE, RESEQUENCE, INITIALIZE EXECUTIVE,
# RECALL PART OF RECALTST IF ENDIDLE WAS USED,
# VB = REQUEST EXECUTIVE, VB = REQUEST WAITLIST,
# MONITOR SET UP.
#
# THE DISPLAY SYSTEM IS ALSO BLOCKED BY THE EXTERNAL MONITOR BIT, WHICH
# INDICATES AN EXTERNALLY INITIATED MONITOR IS RUNNING (SEE MONITOR)
#
# A NVSUB CALL THAT PASSES DSPLOCK AND THE EXTERNAL MONITOR BIT ENDS OLD
# MONITOR.
#
# DSPLOCK IS THE INTERLOCK FOR USE OF KEYBOARD AND DISPLAY SYSTEM WHICH
# LOCKS OUT INTERNAL USE WHENEVER THERE IS EXTERNAL KEYBOARD ACTION.
#
# NVSUB SHOULD BE USED TWICE IN SUCCESSION FOR :PLEASE PERFORM: SITUATIONS
# (SIMILARLY FOR PLEASE MARK). FIRST PLACE THE CODED NUMBER FOR WHAT
# ACTION IS DESIRED OF OPERATOR INTO THE REGISTERS REFERRED TO BY THE
# :CHECKLIST: NOUN. GO TO NVSUB WITH A DISPLAY VERB AND THE :CHECKLIST:
# NOUN. GO TO NVSUB AGAIN WITH THE :PLEASE PERFORM: VERB AND ZEROS IN THE
# LOW 7 BITS. THIS :PASTES UP: THE :PLEASE PERFORM: VERB INTO THE VERB
# LIGHTS.
#
# NVMONOPT IS AN ENTRY SIMILAR TO NVSUB, BUT REQUIRING AN ADDITIONAL
## Page 378
# PARAMETER IN L. IT SHOULD BE USED ONLY WITH A MONITOR VERB-NOUN CODE IN
# A. AFTER EACH MONITOR DISPLAY A *PLEASE* VERB WILL BE PASTED IN THE VERB
# LIGHTS OR DATA WILL BE BLANKED (OR BOTH) ACCORDING TO THE OPTIONS
# SPECIFIED IN L. IF BITS 8-14 OF L ARE OTHER THAN ZERO, THEN THEY WILL
# BE INTERPRETED AS A VERB CODE AND PASTED IN THE VERB LIGHTS. (THIS VERB
# CODE SHOULD DESIGNATE ONE OF THE *PLEASE* VERBS.) IF BITS 1-3 OF L ARE
# OTHER THAN ZERO, THEN THEY WILL BE USED TO BLANK DATA BY BEING FED TO
# BLANKSUB. IF NVMONOPT IS USED WITH A VERB OTHER THAN A MONITOR VERB,
# THE PARAMETER IN L HAS NO EFFECT.
#
# NVSUB IN FIXED-FIXED PLACES 2+CALLING LOC INTO NVQTEM, TC NVSUBEND INTO
# ENTRET. (THIS WILL RESTORE OLD CALLING BANK BITS)

		SETLOC	FFTAG8
		BANK
		COUNT*	$$/PIN
NVSUB		LXCH	7		# ZERO NVMONOPT OPTIONS
NVMONOPT	TS	NVTEMP
		LXCH	NVQTEM
		LXCH	Q
		TC	EMBDSPCK	# CHECK FOR DSP SYST AVAILABLE
		LXCH	NVQTEM		# 2+ CALLING LOC INTO NVQTEM
		LXCH	MONSAVE2	# STORE NVMONOPT OPTIONS
		TC	KILMONON	# TURN ON KILL MONITOR BIT
NVSUBCOM	CAF	NVSBBBNK

		XCH	BBANK
		EXTEND			# SAVE OLD SUPERBITS
		ROR	SUPERBNK
		TS	NVBNKTEM
		CAF	PINSUPBT
		EXTEND
		WRITE 	SUPERBNK
		TC	NVSUBB		# GO TO NVSUB1 THRU STANDARD LOC
		EBANK=	DSPCOUNT
NVSBBBNK	BBCON	NVSUB1

PINSUPBT	=	NVSBBBNK	# CONTAINS THE PINBALL SUPERBITS.

NVSUBEND	DXCH	NVQTEM		# NVBNKTEM MUST = NVQTEM+1
		TC	SUPDXCHZ	# DTCB WITH SUPERBIT SWITCHING

EMBDSPCK	CAF	BIT14
		MASK	MONSAVE1	# EXTERNAL MONITOR BIT
		AD	DSPLOCK
		CCS	A
		TC	L		# DSP SYST BLOCKED. RET TO 1+ CALLING LOC
		INCR	L		# DSP SYST OK. SET RET TO 2+ CALLING LOC
		TC	Q
		SETLOC	PINBALL2
## Page 379

		COUNT*	$$/PIN
		BANK

# BLANKDSP BLANKS DISPLAY ACCORDING TO OPTION NUMBER IN NVTEMP AS FOLLOWS
# -4 FULL BLANK, -3 LEAVE MODE, -2 LEAVE MODE AND VERB, -1 BLANK R-S ONLY

BLANKDSP	AD	SEVEN		# 7,8,9,OR 10 (A HAD 0,1,2,OR 3)
		INHINT
 +2		TS	CODE		# BLANK SPECIFIED DSPTABS
		CS	BIT12
		INDEX	CODE
		XCH	DSPTAB
		CCS	A
		INCR	NOUT
		TC	+1
		CCS	CODE
		TC	BLANKDSP +2
		RELINT
		INDEX	NVTEMP
		TC	+5
		TC	+1		# NVTEMP HAS -4 (NEVER TOUCH MODREG)
		TS	VERBREG		#	     -3
		TS	NOUNREG		#	     -2
		TS	CLPASS		#	     -1
		TC	-VD1SET
		TC	FLASHOFF	# PROTECT AGAINST INVISIBLE FLASH
		TC	ENTSET -2	# ZEROS REQRET

NVSUB1		CAF	ENTSET		# IN BANK
		TS	ENTRET		# SET RETURN TO NVSUBEND
		CCS	NVTEMP		# WHAT NOW
		TC	+4		# NORMAL NVSUB CALL (EXECUTE VN OR PASTE)
		TC	GODSPALM
		TC	BLANKDSP	# BLANK DISPLAY AS SPECIFIED
		TC	GODSPALM
		CAF	LOW7
		MASK	NVTEMP
		TS	MPAC +3		# TEMP FOR NOUN (CANT USE MPAC. DSPDECVN
		CA	NVTEMP		#		 USES MPAC, +1, +2
		TS	EDOP		# RIGHT 7
		CA	EDOP
		TS	MPAC +4		# TEMP FOR VERB (CANT USE MPAC+1. DSPDECVN
					# 		 USES MPAC, +1, +2).
		CCS	MPAC +3		# TEST NOUN
		TC	NVSUB2		# IF NOUN NOT +0, GO ON
		TC	UPDATVB -2	# IF NOUN=+0, DISPLAY VERB, THEN RETURN
 -2		CAF	ZERO		# ZERO REQRET SO THAT PASTED VERBS CAN
		TS	REQRET		# BE EXECUTED BY OPERATOR.
ENTSET		TC	NVSUBEND
NVSUB2		CCS	MPAC +4		# TEST VERB
		TCF	+3		# IF VERB NOT +0, GO ON
## Page 380
		TC	UPDATNN -2	# IF VERB=+0, DISPLAY NOUN. THEN RETURN
		TC	NVSUBEND
		CA	MPAC +2		# TEMP FOR MACH CADR TO BE SPEC. (DSPDECVN
		TS	MPAC +5		# 	USES MPAC, +1, +2)
		TC	UPDATVB -2	# IF BOTH NOUN AND VERB NOT +0, DISPLAY
		TC	UPDATNN -2	# BOTH AND GO TO ENTPAS0.
		CAF	ZERO
		TS	LOADSTAT	# SET FOR WAITING FOR DATA CONDITION
		TS	CLPASS
		TS	REQRET		# SET REQRET FOR PASS 0.
		CA	MPAC +5		# RESTORES MACH CADR TO BE SPEC TO MPAC+2
		TS	MPAC +2		# FOR USE IN INTMCTBS (IN ENTPAS0).
ENDNVSB1	TC	ENTPAS0

# IF INTERNAL MACH CADR TO BE SPECIFIED, MPAC+2 WILL BE PLACED INTO
# NOUNCADR IN ENTPAS0 (INTMCTBS).

		SETLOC	FFTAG8
		BANK
		COUNT*	$$/PIN
					# FORCE BIT 15 OF MONSAVE1 TO 1.
KILMONON	CAF	BIT15		#    THIS IS THE KILL MONITOR BIT.
		TS	MONSAVE1	# TURN OFF BIT 14, THE EXTERNAL
					#  MONITOR BIT.
		TC	Q

# LOADSTAT	+0	INACTIVE (WAITING FOR DATA). SET BY NVSUB
#		+1	PROCEED NO DATA SET BY V33 OR PROCEED
#		-1	TERMINATE SET BY V34
#		-0	  DATA IN  	SET BY END OF LOAD ROUTINE
#			OR RESEQUENCE   SET BY VERB 32
#
# L TC ENDIDLE (FIXED FIXED)
# ROUTINES THAT REQUEST LOADS THROUGH NVSUB SHOULD USE ENDIDLE WHILE
# WAITING FOR THE DATA TO BE LOADED. ENDIDLE PUTS CURRENT JOB TO SLEEP.
# ENDIDLE CANNOT BE CALLED FROM ERASABLE OR F/F MEMORY,
# SINCE JOBSLEEP AND JOBWAKE CAN HANDLE ONLY FIXED BANKS.
# RECALTST TESTS LOADSTAT AND WAKES JOB UP TO,
# L+1 FOR TERMINATE, PROCEED WITHOUT DATA, DATA IN, OR RESEQUENCE
# IT DOES NOTHING IF LOADSTAT INDICATES WAITING FOR DATA.
#
# ENDIDLE ABORTS (WITH CODE 21206) IF A SECOND JOB ATTEMPTS TO GO TO SLEEP
# IN PINBALL. IN PARTICULAR, IF AN ATTEMPT IS MADE TO GO TO ENDIDLE WHEN
# 1) CADRSTOR NOT= +0.  THIS IS THE CASE WHERE THE CAPACITY OF ENDIDLE IS
# EXCEEDED. (+-NZ INDICATE A JOB IS ALREADY ASLEEP DUE TO ENDIDLE.)
## Page 381
# 2) DSPLIST NOT= +0. THIS INDICATES A JOB IS ALREADY ASLEEP DUE TO
# NVSUBUSY.
#
# ENDIDLE MOVED TO DISPLAY INTERFACE ROUTINES

ISCADR+0	CCS	CADRSTOR	# ABORTS (CODE 01206) IF CADRSTOR NOT= +0.
		TC	DSPABORT	# RETURNS IF CADRSTOR = +0.
		CCS	DSPLIST		# ABORT (CODE 01206) IF DSPLIST NOT = +0.
		TC	DSPABORT
		TC	Q
DSPABORT	TC	POODOO
		OCT	21206		# SECOND JOB TRYING TO GO TO SLEEP

# JAMTERM ALLOWS PROGRAMS TO PERFORM THE TERMINATE FUNCTION.
# IT DOES ENDOFJOB.

JAMTERM		CAF	PINSUPBT
		EXTEND
		WRITE	SUPERBNK
		CAF	34DEC
		TS	REQRET		# LEAVE ENTER SET FOR ENTPASS0.
		TS	VERBREG
		TC	-VD1SET
		TC	POSTJUMP
		CADR	VBTERM

34DEC		DEC	34

-VD1SET		CS	VD1
		TS	DSPCOUNT
		TC	Q

# BLANKSUB BLANKS ANY COMBINATION OF R1, R2, R3.
# CALL WITH BLANKING CODE IN A.
# BIT1=1 BLANKS R1, BIT2=1 BLANKS R2, BIT3=1 BLANKS R3.
# ANY COMBINATION OF THESE BITS IS ACCEPTED.
#
# DSPCOUNT IS RESTORED TO STATE IT WAS IN BEFORE BLANKSUB WAS EXECUTED.

BLANKSUB	MASK 	SEVEN
		TS	NVTEMP		# STORE BLANKING CODE IN NVTEMP.
		LXCH	Q
		TC	EMBDSPCK	# CHECK FOR DSP SYST AVAILABLE
		CCS	NVTEMP
		TCF	+2
		TC	L		# NOTHING TO BLANK. RET TO 2+ CALLING LOC
		CAF	BLNKBBNK
		XCH	BBANK
		EXTEND
		ROR	SUPERBNK	# SAVE OLD SUPERBITS.
		DXCH	BUF
## Page 382
		CAF	PINSUPBT
		EXTEND
		WRITE	SUPERBNK
		TC	BLNKSUB1

		EBANK=	DSPCOUNT
BLNKBBNK	BBCON	BLNKSUB1
ENDBLFF		EQUALS

		SETLOC	PINBALL1
		BANK
		COUNT*	$$/PIN
BLNKSUB1	CA	DSPCOUNT	# SAVE OLD DSPCOUNT FOR LATER RESTORATION
		TS	BUF +2
		CAF	BIT1		# TEST BIT1. SEE IF R1 TO BE BLANKED.
		TC	TESTBIT
		CAF	R1D1
		TC	5BLANK -1
		CAF	BIT2		# TEST BIT 2. SEE IF R2 TO BE BLANKED.
		TC	TESTBIT
		CAF	R2D1
		TC	5BLANK -1
		CAF	BIT3		# TEST BIT3. SEE IF R3 TO BE BLANKED.
		TC	TESTBIT
		CAF	R3D1
		TC	5BLANK -1
		CA	BUF +2		# RESTORE DSPCOUNT TO STATE IT HAD
		TS	DSPCOUNT	# 	BEFORE BLANKSUB.
		DXCH	BUF		# CALL L+2 DIRECTLY.
		TC	SUPDXCHZ +1	# DTCB WITH SUPERBIT SWITCHING

TESTBIT		MASK	NVTEMP		# NVTEMP CONTAINS BLANKING CODE.
		CCS	A
		TC	Q		# IF CURRENT BIT = 1, RETURN TO L+1.
		TCF	Q+2		# IF CURRENT BIT = 0, RETURN TO L+3
DSPMMJB		CAF	MD1		# GETS HERE THRU DSPMM
		XCH	DSPCOUNT
		TS	DSPMMTEM	# SAVE DSPCOUNT
		CCS	MODREG
		AD	ONE
		TC	DSPDECVN	# IF MODREG IS + OR +0, DISPLAY MODREG
		TC	+2		# IF MODREG IS -NZ, DO NOTHING
		TC	2BLANK		# IF MODREG IS -0, BLANK MM
		XCH	DSPMMTEM	# RESTORE DSPCOUNT
		TS	DSPCOUNT
		TC	ENDOFJOB

# RECALTST IS ENTERED DIRECTLY AFTER DATA IS LOADED (OR RESEQUENCE VERB IS
# EXECUTED), TERMINATE VERB IS EXECUTED, OR PROCEED WITHOUT DATA VERB IS
## Page 383
# EXECUTED.  IT WAKES UP JOB THAT DID TC ENDIDLE.
#
# IF CADRSTOR NOT= +0, IT PUTS +0 INTO DSPLOCK, AND TURNS OFF KEY RLSE
# LIGHT IF DSPLIST IS EMPTY (LEAVES KEY RLSE LIGHT ALONE IF NOT EMPTY).

RECALTST 	CCS	CADRSTOR
		TC	RECAL1
		TC	ENDOFJOB	# NORMAL EXIT IF KEYBOARD INITIATED
RECAL1		CAF	ZERO
		XCH	CADRSTOR
		INHINT
		TC	JOBWAKE
		CA	NOUNREG		# SAVE VERB IN MPAC, NOUN IN MPAC+1 AT
		TS	L		# TIME OF RESPONSE TO ENDIDLE FOR
		CA	VERBREG		# POSSIBLE LATER TESTING BY JOB THAT HAS
		INDEX	LOCCTR		# BEEN WAKED UP.
		DXCH	MPAC
		RELINT
RECAL3		TC	RELDSP
		TC	ENDOFJOB

NVSBENDL	TC	NVSUBEND
		SBANK=	LOWSUPER

## Page 384

# MISCELLANEOUS SERVICE ROUTINES IN FIXED/FIXED

		SETLOC	FFTAG8
		BANK
		COUNT*	$$/PIN

# SETNCADR	E CADR ARRIVES IN A. IT IS STORED IN NOUNCADR. EBANK BITS
#		ARE SET. E ADRES IS DERIVED AND PUT INTO NOUNADD.

SETNCADR	TS	NOUNCADR	# STORE ECADR
 +1		TS	EBANK		# SET EBANK BITS
		MASK	LOW8
		AD	OCT1400
		TS	NOUNADD		# PUT E ADRES INTO NOUNADD
		TC	Q

# SETNADD	GETS E CADR FROM NOUNCADR, SETS EBANK BITS, DERIVES
#		E ADRES AND PUTS IT INTO NOUNADD.

SETNADD		CA	NOUNCADR
		TCF	SETNCADR +1

# SETEBANK	E CADR ARRIVES IN A. EBANK BITS ARE SET. E ADRES IS
#		DERIVED AND LEFT IN A.

SETEBANK	TS	EBANK		# SET EBANK BITS
		MASK	LOW8
		AD	OCT1400		# E ADRES LEFT IN A
		TC	Q

R1D1		OCT	16		# THESE 3 CONSTANTS FORM A PACKED TABLE.
R2D1		OCT	11		# DONT SEPARATE.
R3D1		OCT	4

RIGHT5		TS	CYR
		CS	CYR
		CS	CYR
		CS	CYR
		CS	CYR
		XCH	CYR
		TC	Q

LEFT5		TS	CYL
		CS	CYL
		CS	CYL
		CS	CYL
		CS	CYL
## Page 385
		XCH	CYL
		TC	Q

LOW5		OCT	37		# THESE 3 CONSTANTS FORM A PACKED TABLE.
MID5		OCT	1740		# DONT SEPARATE.
HI5		OCT	76000		# MUST STAY HERE

TCTSKOVR	EQUALS	TSKOVCDR
TCFINDVC	TC	FINDVAC

CHRPRIO		OCT	30000		# EXEC PRIORITY OF CHARIN

LOW11		OCT	3777
LOW8		OCT	377

VD1		OCT	23		# THESE 3 CONSTANTS FORM A PACKED TABLE.
ND1		OCT	21		# DONT SEPARATE.
MD1		OCT	25

VBSP1LD		EQUALS	MD1		# VB21 = ALOAD
VBSP2LD		DEC	22		# VB22 = BLOAD
VBSP3LD		EQUALS	DEC23		# VB23 = CLOAD
BINCON		DEC	10

RELDSPON	CAF	BIT5
		TCF	+4
FLASHON		CAF	BIT6
		TCF	+2
FALTON		CA	BIT7		# TURN ON OPERATOR ERROR LIGHT
		EXTEND
		WOR	DSALMOUT	# BIT 7 OF CHANNEL 11
		TC	Q

LODSAMPT	EXTEND
		DCA	TIME2
		DXCH	SAMPTIME
		TC	Q

TPSL1		EXTEND			# SHIFTS MPAC, +1, +2 LEFT 1
		DCA	MPAC +1		# LEAVES OVFIND SET TO +/- 1 FOR OF/UF
		DAS	MPAC +1
		AD	MPAC
 +4		ADS	MPAC
		TS	7		# TS A DOES NOT CHANGE A ON OF/UF.
		TC	Q		# NO NET OF/UF
		TS	MPAC+6		# MPAC +6 SET TO +/-1 FOR OF/UF
## Page 386
		TC	Q

# IF MPAC, +1 ARE EACH +NZ OR +0 AND C(A)=-0, SHORTMP WRONGLY GIVES +0.
# IF MPAC, +1 ARE EACH -NZ OR -0 AND C(A)=+0, SHORTMP WRONGLY GIVES +0.
# PRSHRTMP FIXES FIRST CASE ONLY, BY MERELY TESTING C(A) AND IF IT = -0,
# SETTING RESULT TO -0.
#  (DO NOT USE PRSHRTMP UNLESS MPAC, +1 ARE EACH +NZ OR +0, AS THEY ARE
#  WHEN THEY CONTAIN THE SF CONSTANTS.)

PRSHRTMP	TS	MPTEMP
		CCS	A
		CA	MPTEMP		# C(A) +,  DO REGULAR SHORTMP
		TCF	SHORTMP +1	# C(A) +0, DO REGULAR SHORTMP
		TCF	-2		# C(A) -,  DO REGULAR SHORTMP
		CS	ZERO		# C(A) -0, FORCE RESULT TO -0 AND RETURN.
		TS	MPAC
		TS	MPAC +1
		TS	MPAC +2
		TC	Q

UPACTOFF	CS	BIT3		# TURN OFF UPLINK ACTIVITY
		TCF	+2

FLASHOFF	CS	BIT6		# TURN OFF V/N FLASH
		EXTEND
		WAND	DSALMOUT	# BIT 6 OF CHANNEL 11
		TC	Q

CODSTOR		INDEX	A
		CAF	RELTAB
		MASK	LOW5
		TS	CODE
		CA	DSPCOUNT
		TS	COUNT
		TC	Q

## Page 387
# INTERNAL USE OF KEYBOARD AND DISPLAY PROGRAM
#
# USER MUST SCHEDULE CALLS TO NVSUB SO THAT THERE IS NO CONFLICT OF USE OR
# CONFUSION TO OPERATOR. THE OLD GRABLOCK (INTERNAL/INTERNAL INTERLOCK)
# HAS BEEN REMOVED AND THE INTERNAL USER NO LONGER HAS THE PROTECTION THIS
# OFFERED.
#
# THERE ARE TWO WAYS A JOB CAN BE PUT TO SLEEP BY THE KEYBOARD + DISPLAY
# PROGRAM.	1) BY ENDIDLE
#		2) BY NVSUBUSY
# THE BASIC CONVENTION IS THAT ONLY ONE JOB WILL BE PERMITTED ASLEEP VIA
# THE KEYBOARD + DISPLAY PROGRAM AT A TIME. IF A JOB ATTEMPTS TO GO TO
# SLEEP BY MEANS OF (1) OR (2) AND THERE IS ALREADY AJOB ASLEEP THAT WAS
# PUT TO SLEEP BY (1) OR (2), THEN AN ABORT IS CAUSED.
#
# THE CALLING SEQUENCE FOR NVSUB IS
#		CAF	V/N
#	L	TC	NVSUB
#	L+1	RETURN HERE IF OPERATOR HAS INTERVENED
#	L+2	RETURN HERE AFTER EXECUTION
#
# A ROUTINE CALLED NVSUBUSY IS PROVIDED (USE IS OPTIONAL) TO PUT
# YOUR JOB TO SLEEP UNTIL THE OPERATOR RELEASES THE KEYBOARD + DISPLAY
# SYSTEM. NVSUBUSY ALSO TURNS ON THE KEY RELEASE LIGHT.
# NVSUBUSY CANNOT BE CALLED FROM ERASABLE OR F/F MEMORY,
# SINCE JOBSLEEP AND JOBWAKE CAN HANDLE ONLY FIXED BANKS.
#
# THE CALLING SEQUENCE IS
#	CAF	WAKEFCADR
#	TC	NVSUBUSY
# .
#
# NVSUBUSY IS INTENDED FOR USE WHEN AN INTERNAL PROGRAM FINDS THE OPERATOR
# IS USING THE KEYBOARD + DISPLAY PROGRAM (BY HIS OWN INITIATION). IT IS
# NOT INTENDED FOR USE WHEN ONE INTERNAL PROGRAM FINDS ANOTHER INTERNAL
# PROGRAM USING THE KEYBOARD + DISPLAY PROGRAM.
#
# NVSUBUSY ABORTS (WITH CODE 21206) IF A SECOND JOB ATTEMPTS TO GO TO
# SLEEP IN PINBALL. IN PARTICULAR, IF AN ATTEMPT IS MADE TO GO TO NVSUBUSY
# WHEN
# 1) DSPLIST NOT= +0. THIS IS THE CASE WHERE THE CAPACITY OF THE DSPLIST
#    IS EXCEEDED.
# 2) CADRSTOR NOT= +0. THIS INDICATES THAT A JOB IS ALREADY USING
## Page 388
# ENDIDLE. (+-NZ INDICATE A JOB IS ALREADY ASLEEP DUE TO ENDIDLE.)
#
# NVSUBUSY MOVED TO DISPLAY INTERFACE ROUTINES

# RELDSP IS USED BY VBPROC, VBTERM, VBRQEXEC, VBRQWAIT, VBRELDSP, EXTENDED
# VERB DISPATCHER, VBRESEQ, RECALTST.
# RELDSP1 IS USED BY MONITOR SET UP, VBRELDSP.

RELDSP		XCH	Q		# SET DSPLOCK TO +0, TURN RELDSP LIGHT
		TS	RELRET		# OFF, SEARCH DSPLIST
		CS	BIT14
		INHINT
		MASK	MONSAVE1
		TS	MONSAVE1	# TURN OFF EXTERNAL MONITOR BIT
		CCS	DSPLIST
		TC	+2
		TC	RELDSP2		# LIST EMPTY
		CAF	ZERO
		XCH	DSPLIST
		TC	JOBWAKE
RELDSP2		RELINT
		CS	BIT5		# TURN OFF KEY RELEASE LIGHT
		EXTEND			# (BIT 5 OF CHANNEL 11)
		WAND	DSALMOUT
 +4		CAF	ZERO
		TS	DSPLOCK
		TC	RELRET
RELDSP1		XCH	Q		# SET DSPLOCK TO +0. NO DSPLIST SEARCH.
		TS	RELRET		# TURN KEY RLSE LIGHT OFF IF DSPLIST IS
					# EMPTY. LEAVE KEY RLSE LIGHT ALONE IF
					# DSPLIST IS NOT EMPTY.
		CCS	DSPLIST
		TC	+2		# +  NOT EMPTY. LEAVE KEY RLSE LIGHT ALONE
		TC	RELDSP2		# +0 EMPTY. TURN OFF KEY RLSE LIGHT
		TCF	RELDSP2 +4	# -  NOT EMPTY. LEAVE KEY RLSE LIGHT ALONE
ENDPINBF	EQUALS

## Page 389
# PINTEST IS NEEDED FOR AUTO CHECK OF PINBALL.

PINTEST		EQUALS	LST2FAN

## Page 390
# VBTSTLTS TURNS ON ALL DISPLAY PANEL LIGHTS. AFTER 5 SEC, IT TURNS
# OFF THE CAUTION AND STATUS LIGHTS.

		SETLOC	PINBALL1
		BANK
		COUNT*	$$/PIN
VBTSTLTS	TC	BANKCALL
		CADR	CHKPOOH

		INHINT
		CS	IMODES33	# SET BIT 1 OF IMODES33 SO IMUMON WONT
		MASK	LMPTSTBT	# TURN OUT ANY LAMPS.
		ADS	IMODES33
		CAF	TSTCON1		# TURN ON UPLINK ACTIVITY, TEMP, KEY RLSE,
		EXTEND			# V/N FLASH, OPERATOR ERROR.
		WOR	DSALMOUT
		CAF	TSTCON2		# TURN ON NO ATT, GIMBAL LOCK, TRACKER,
		TS	DSPTAB 	+11D	# PROG ALM.
		CAF	BIT10		# TURN ON TEST ALARM OUTBIT
		EXTEND
		WOR	CHAN13
		CAF	TEN
TSTLTS1		TS	ERCNT
		CS	FULLDSP
		INDEX	ERCNT
		TS	DSPTAB
		CCS	ERCNT
		TC	TSTLTS1
		CS	FULLDSP1
		TS	DSPTAB +1	# TURN ON 3 PLUS SIGNS
		TS	DSPTAB +4
		TS	DSPTAB +6
		CAF	ELEVEN
		TS	NOUT
		CAF	SHOLTS
		TC	BANKCALL
		CADR	DELAYJOB
					# DSPLOCK IS LEFT BUSY (FROM KEYBOARD
					# ACTION) UNTIL TSTLTS3 TO INSURE THAT
					# LIGHTS TEST WILL BE SEEN.

SHOLTS		=	DEC500		# 5 SEC
TSTLTS3		CS	TSTCON3		# CALLED BY EXECUTIVE
		INHINT
		EXTEND			# TURN OFF UPLINK ACTIVITY, TEMP,
		WAND	DSALMOUT	# OPERATOR ERROR.
		CS	BIT10		# TURN OFF TEST ALARM OUTBIT
		EXTEND
		WAND	CHAN13
## Page 391
		CAF	BIT4		# MAKE NO ATT FOLLOW BIT 4 OF CHANNEL 12
		EXTEND			#   (NO ATT LIGHT ON IF IN COARSE ALIGN)
		RAND	CHAN12
		AD	BIT15		# TURN OFF AUTO, HOLD, FREE, SPARE,
		TS	DSPTAB 	+11D	# GIMBAL LOCK, SPARE, TRACKER, PROG ALM
		CS	LMPTSTBT
		MASK	IMODES33
		TS	IMODES33
		COM
		MASK	PIP2FLBT
		ADS	IMODES33
		COM
		MASK	DNLKFAIL
		ADS	IMODES33
		COM
		MASK	UPLKFAIL
		ADS	IMODES33
		CS	TLIMBIT
		MASK	IMODES30
		TS	IMODES30
		COM
		MASK	IMUFLBIT
		ADS	IMODES30
		COM
		MASK	ICDUFLBT
		ADS	IMODES30
		COM
		MASK	PIPAFLBT
		ADS	IMODES30
		CS	OPTMODES
		MASK	OCDUFBIT
		ADS	OPTMODES
		RELINT

		TC	NOVAC30
		EBANK=	DSPCOUNT
		2CADR	DSPMMJOB

		TC	KILMONON	# TURN ON KILL MONITOR BIT.
		TC	FLASHOFF	# TURN OFF V/N FLASH.
		TCF	TSTLTS4
FULLDSP		OCT	05675		# DISPLAY ALL 8:S
FULLDSP1	OCT	07675		# DISPLAY ALL 8:S AND +
TSTCON1		OCT	00175
					# UPLINK ACTIVITY, TEMP, KEY RLSE, 
					# V/N FLASH, OPERATOR ERROR.
TSTCON2		OCT	40650		# DSPTAB+11D  BITS 4,6,8,9.
					# NO ATT, GIMBAL LOCK, TRACKER, PROG ALM.
TSTCON3		OCT	00115		# CHAN 11  BITS 1, 3, 4, 7.
					# UPLINK ACTIVITY, TEMP, OPERATOR ERROR.
## Page 392

# ERROR LIGHT RESET (RSET) TURNS OFF,
# UPLINK ACTIVITY, AUTO, HOLD, FREE, OPERATOR ERROR,
# PROG ALM, TRACKER FAIL.
# LEAVES GIMBAL LOCK AND NO ATT ALONE.
# IT ALSO ZEROES THE :TEST ALARM: OUT BIT, WHICH TURNS OFF STBY, RESTART.
# IT ALSO SETS :CAUTION RESET: TO 1.
# IT ALSO FORCES BIT 12 OF ALL DSPTAB ENTRIES TO 1.

		SETLOC	PINBALL1
		BANK
		COUNT*	$$/PIN
ERROR		XCH	21/22REG	# RESTORE ORIGINAL C(DSPLOCK). THUS ERROR
		TS	DSPLOCK		# LIGHT RESET LEAVES DSPLOCK UNCHANGED.
		INHINT
		CAF	BIT10		# TURN ON :CAUTION RESET: OUTBIT
		EXTEND
		WOR	DSALMOUT	# BIT10 CHAN 11
		CAF	GL+NOATT	# LEAVE GIMBAL LOCK AND NO ATT INTACT,
		MASK	DSPTAB +11D	# TURNING OFF AUTO, HOLD, FREE,
		AD	BIT15		# PROG ALARM, AND TRACKER.
		TS	DSPTAB +11D
		CS	IMODES33	# RESET FAIL BITS WHICH GENERATE PROG
		MASK	PRIO16		# ALARM SO THAT IF THE FAILURE STILL
		ADS	IMODES33	# EXISTS, THE ALARM WILL COME BACK ON
		CS	IMODES30
		MASK	PIPAFLBT
		ADS	IMODES30

		CS	OPTMODES
		MASK	OCDUFBIT
		ADS	OPTMODES
		TC	C13STALL
		CS	BIT10		# TURN OFF :TEST ALARM: OUTBIT.
		EXTEND
		WAND	CHAN13
		CS	ERCON		# TURN OFF UPLINK ACTIVITY,
		EXTEND			# OPERATOR ERROR.
		WAND	DSALMOUT
TSTAB		CAF	BINCON		# (DEC 10)
 +1		TS	ERCNT		# ERCNT = COUNT
		INHINT
		INDEX	ERCNT
		CCS	DSPTAB
		AD	ONE
		TC	ERPLUS
		AD	ONE
ERMINUS		CS	A
		MASK	NOTBIT12
		TC	ERCOM
ERPLUS		CS	A
## Page 393
		MASK	NOTBIT12
		CS	A		# MIGHT WANT TO RESET CLPASS, DECBRNCH,
ERCOM		INDEX	ERCNT		# ETC.
		TS	DSPTAB
		RELINT
		CCS	ERCNT
		TC	TSTAB +1
		TS	FAILREG
		TS	FAILREG +1
		TS	SFAIL
		TC	ENDOFJOB

OCT55000	OCT	55000
13-11,1		OCT	16001
GL+NOATT	EQUALS	OCT50		# NO ATT AND GIMBAL LOCK LAMPS
NOTBIT12	EQUALS	-1/8
ENDPINS1	EQUALS

		SBANK=	LOWSUPER
back to top