# Copyright:	Public domain.
# Filename:	PINBALL_GAME_BUTTONS_AND_LIGHTS.agc
# Purpose:	Part of the source code for Luminary 1A build 099.
#		It is part of the source code for the Lunar Module's (LM)
#		Apollo Guidance Computer (AGC), for Apollo 11.
# Assembler:	yaYUL
# Contact:	Jim Lawton <jim.lawton@gmail.com>
# Website:	www.ibiblio.org/apollo.
# Pages:	390-471
# Mod history:	2009-05-16 JVL	Started updating from page images.
# 		2009-05-25 JVL	Finished updating from page images.
#		2009-07-01 RSB	Began annotating.
#		2010-12-31 JL	Fixed page number comment.
#
# This source code has been transcribed or otherwise adapted from digitized
# images of a hardcopy from the MIT Museum.  The digitization was performed
# by Paul Fjeld, and arranged for by Deborah Douglas of the Museum.  Many
# thanks to both.  The images (with suitable reduction in storage size and
# consequent reduction in image quality as well) are available online at
# www.ibiblio.org/apollo.  If for some reason you find that the images are
# illegible, contact me at info@sandroid.org about getting access to the
# (much) higher-quality images which Paul actually created.
#
# Notations on the hardcopy document read, in part:
#
#    Assemble revision 001 of AGC program LMY99 by NASA 2021112-061
#    16:27 JULY 14, 1969

## <b>Note:</b> Notations below resembling this note are 21st-century
## annotations added by the <a href="http://www.ibiblio.org/apollo">
## Virtual AGC project</a>, and are not original AGC source code.
# Page 390
# PROGRAM NAME -- KEYBOARD AND DISPLAY PROGRAM
# MOD NO -- 4		DATE -- 27 APRIL 1967		ASSEMBLY -- PINDANCE REV 18
# MOD BY -- FILENE
# 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 PROGRAM, 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'.
#
## Ram&oacute;n Alonso, one of the original AGC developers, provides a
## little more insight:  Apparently, nobody had yet arrived at any kind
## of software requirements for the AGC's user interface when the desire
## arose within the Instrumentation Laboratory to set up a demo
## guidance-computer unit with which to impress visitors to the lab.
## Of course, this demo would have to <i>do</i> something, if it was going to be
## at all impressive, and to do something it would need some software. In
## short order, some of the coders threw together a demo program,
## inventing and using the verb/noun user-interface concept (in the
## whimsical fashion seen in much of this code), but without any idea
## that the verb/noun concept would somehow survive into the flight
## software.  As time passed, and more and more people became familiar
## with the demo, nobody got around to inventing an improvement for the
## user interface, so the coders simply built it into the flight software
## without any specific requirements to do so.<br>
## <br>
## However, that does not mean that the verb/noun interface was universally
## beloved.  Ram&oacute;n says that <i>many</i> objections were received from
## naysayers, such as "it's not scientific", "it's not dignified", or
## even "astronauts won't understand it".  Even though the coders of
## the demo hadn't seriously intended the verb/noun interface to be used
## in any permanent way, it became a kind of devilish game to counter
## these objections with (perhaps) sophistic arguments as to why the
## interface was really a good one.  In the end, the coders won.  I don't
## know whether they were elated or dismayed by this victory.<br>
## <br>
## The astronauts, of course, <i>could</i> understand the interface,
## but they did not like it.  Most of them really wanted an interface much
## more like that they had used in aircraft:  i.e., lots of dials and
## switches.  Dave Scott is the the only astronaut I'm aware of who had
## kind words for it (or for the AGC in general), though we are told that
## Jim McDivitt wasn't necessary completely hostile to it.<br>
## <br>
## <div style="text-align: right;"><small>&mdash;Ron Burkey, 07/2009</small></div>
#
# CALLING SEQUENCES --
#
# KEYBOARD:
# EACH DEPRESSION OF A KEYBOARD BUTTON ACTIVATES AN INTERRUPT KEYRUPT1
# AND PLACES THE 5 BIT KEY CODE INTO CHANNEL 15.  KEYRUPT1 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 391
#			PINBALL EXECUTIVE JOB WITH PRIORITY 30000.  IT IS THE
#			RESPONSIBILITY OF THE EXTEDED 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' AND 'NVSBWAIT' (SEE SYMBOL TABLE FOR PAGE NUMBERS).
#
# 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 01501).
#	IF A SECOND ATTEMPT IS MADE TO GO TO SLEEP IN PINBALL, AN ABORT IS
#	CAUSED (WITH OCTAL 01206). THERE ARE TWO WAYS TO GO TO SLEEP IN PINBALL:
#		1) ENDIDLE OR DATAWAIT.
#		2) NVSBWAIT, PRENVBSY, OR NVSUBUSY.
#
# CONDITIONS LEADING TO THE ABOVE ARE DESCRIBED IN FORTHCOMING MIT/IL
# E-REPORT DESCRIBING KEYBOARD AND DISPLAY OPERATION FOR 278.
#
# 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
# Page 392
# 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.
#
#	NVSUB		CALLING POINT FOR INTERNAL USE OF PINBALL.
#			OF RELATED INTEREST	NVSBWAIT
#						NVSUBUSY
#						PRENVBSY
#
#	ENDIDLE		ROUTINE FOR INTERNAL PROGRAMS WISHING TO GO TO SLEEP WHILE
#			AWAITING OPERATORS RESPONSE.
#
#	DSPMM		ROUTINE BY WHICH AN INTERNAL PROGRAM MAY DISPLAY A DECIMAL
#			PROGRAM CODE (MAJOR MODE) IN THE PROGRAM (MAJOR MODE) LIGHTS.
#			(DSPMM DOES NOT DISPLAY DIRECTLY BUT ENTERS EXEC REQUEST
#			FOR DSPMMJB WITH PRIO 30000 AND RETURNS TO CALLER.)
#
#	BLANKSUB	ROUTINE BY WHICH AN INTERNAL PROGRAM MAY BLANK ANY
#			COMBINATION OF THE DISPLAY REGISTERS R1, R2, R3.
#
#	JAMTERM		ROUTINE BY WHICH AN INTERNAL PROGRAM MAY PERFORM THE
#	JAMPROC		TERMINATE (V 34) OR PROCEED (V 33) 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 document described above, "Keyboard and Display Program Operation"
## by Alan I. Green and Robert J. Filene is
## <a href="http://www.ibiblio.org/apollo/hrst/archive/1706.pdf">
## available online at the Virtual AGC website</a>.
## <small>&mdash;Ron Burkey, 07/2009</small>

# 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
# Page 393
# CHRISTIAN EAR CAN ENDURE TO HEAR.::
#					HENRY 6, ACT 2, SCENE 4

## Actually, this quotation is from <i>Henry VI</i>, Part 2, Act IV, Scene VII.
## <small>&mdash;Ron Burkey, 07/2009</small>

# THE FOLLOWING ASSIGNMENTS FOR PINBALL ARE MADE ELSEWHERE
#
# DSPCOUNT	ERASE			# DISPLAY POSITION INDICATOR
# DECBRNCH	ERASE			# +DEC, -DEC, OCT INDICATOR
# VERBREG	ERASE			# VERB CODE
# NOUNREG	ERASE			# NOUN CODE
# XREG		ERASE			# R1 INPUT BUFFER
# 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 FOR 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	ERASE			# EXTENDED VERB ACTIVITY INTERLOCK
# DSPTEM1	ERASE			# BUFFER STORAGE AREA 1 (MOSTLY FOR TIME)
# DSPTEM2	ERASE			# BUFFER STORAGE AREA 2 (MOSTLY FOR DEG)
#
# END OF ERASABLES RESERVED FOR PINBALL EXECUTIVE ACTION
#
# TEMPORARIES FOR PINBALL EXECUTIVE ACTION

# Page 394

# 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
# NOUNTEM	=	VBUF		# COUNTER FOR MIXNOUN FETCH
# DISTEM	= 	VBUF		# COUNTER FOR OCTAL DISPLAY VERB
# 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

# Page 395
# 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 ADDRESS TABLE ENTRY (MIXNN)
#					# MUST = IDAD2TEM-1, = IDAD3TEM-2.
# IDAD2TEM	ERASE			# TEMP FOR INDIR ADDRESS TABLE ENTRY (MIXNN)
#					# MUST = IDAD1TEM+1, IDAD3TEM-1.
# IDAD3TEM	ERASE			# TEMP FOR INDIR ADDRESS 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 396
# 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
#
# (2003 RSB -- The PROCEED key has no keycode; it is read by an alternate mechanism.)
#
# OUTPUT FORMAT FOR DISPLAY PANEL.  SET OUT0 TO AAAABCCCCCDDDDD.
# A'S 	SELECTS 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 397
# 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

## <b>Hint:</b> In the source code below, each of the blue operands to the
## right of the instruction opcodes is a hyperlink back to the definition
## of the symbol.  This is particularly useful for tracing program flow.
# Page 398
# START OF EXECUTIVE SECTION OF PINBALL

		BANK	40
		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		+
# Page 399
		TC	NEGSGN		# 33		-
		TC	ENTERJMP	# 34		ENTER
		TC	CHARALRM	# 35
		TC	CLEAR		# 36		CLEAR
		TC	NOUN		# 37		NOUN

ELRCODE1	OCT	22
ENTERJMP	TC	POSTJUMP
		CADR	ENTER

89TEST		CCS	DSPCOUNT
		TC	+4		# +
		TC	+3		# +0
		TC	ENDOFJOB	# - BLOCK DATA IN IF DSPCOUNT IS - OR -0
		TC	ENDOFJOB	# -0
		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.

		CAF	ZERO
		TS	CHAR
NUM		CCS	DSPCOUNT
		TC	+4		# +
		TC	+3		# +0
		TC	+1		# -BLOCK DATA IN IF DSPCOUNT IS -
		TC	ENDOFJOB	# -0
		TC	GETINREL
		CCS	CLPASS		# IF CLPASS IS + OR +0, MAKE IT +0.
		CAF	ZERO
		TS	CLPASS
		TC	+1
		INDEX	CHAR
		CAF	RELTAB
		MASK	LOW5
		TS	CODE
		CA	DSPCOUNT
		TS	COUNT
		TC	DSPIN
		CAF	THREE
# Page 400
		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
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	DECEND
ENDNMTST	INDEX	INREL
		TS	VERBREG
		CS	DSPCOUNT
		INDEX	INREL
		AD	CRITCON
		EXTEND
		BZF	ENDNUM		# -0, DSPCOUNT = CRITCON
		TC	MORNUM		# - , DSPCOUNT G/ CRITCON
ENDNUM		CAF	THREE
		MASK	DECBRNCH
		CCS	A
		TC	DECEND
ENDALL		CS	DSPCOUNT	# BLOCK NUMIN BY PLACING DSPCOUNT
		TC	MORNUM +1	# NEGATIVELY
DECEND		CS	ONE
		AD	INREL
		EXTEND
		BZMF	ENDALL		# IF INREL=0,1 (VBREG,NNREG) LEAVE WHOLE
		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
# Page 401
		EXTEND			# - CASE
		DCS	MPAC +1
		DXCH	MPAC +1
+DECSGN		XCH	MPAC +2
		INDEX	INREL
		TS	XREGLP -2
		XCH	MPAC +1
		INDEX	INREL
		TS	VERBREG
		TC	ENDALL
MORNUM		CCS	DSPCOUNT	# DECREMENT DSPCOUNT
		TS	DSPCOUNT
		TC	ENDOFJOB

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)
		TC	CCSHOLE		# NO DSPCOUNT NUMBER = 15D
		OCT	1		# ND2		 =(16D)
		OCT	1		# ND1		 =(17D)
# Page 402
		OCT	0		# VD2		 =(18D)
		OCT	0		# VD1		 =(19D)

VERB		CAF	ZERO
		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
# Page 403
		TC	11DSPIN
		CAF	BIT11
		TS	CODE
		XCH	SGNON
		TC	11DSPIN
		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
		OCT	0		# -R3

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	+2		# MATCH FOUND
		TC	Q
		TC	L		# SIGN LEGAL

# CLEAR BLANKS WHICH R1, R2, R3 IS CURRENT OR LAST TO BE DISPLAYED (PERTINENT
# XREG, YREG, ZREG IS CLEARED).  SUCCESSIVE CLEARS TAKE CARE OF EACH RX
# L/ RC UNTIL R1 IS DONE. THEN NO FURTHER ACTION.
#
# THE SINGLE COMPONENT LOAD VERBS ALLOW ONLY THE SINGLE RC THAT IS
# APPROPRIATE TO BE CLEARED.
#
# CLPASS	+0 PASS0, CAN BE BACKED UP
#		+NZ HIPASS, CAN BE BACKED UP
#		-NZ PASS0, CANNOT BE BACKED UP
# Page 404
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		# +
		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	NEG2
		CCS	A
		TC	Q		# LEGAL 	INREL G/ 2
		TC	CCSHOLE
		TC	ENDOFJOB	# ILLEGAL 	INREL=0,1
		TC	Q		# LEGAL		INREL=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.

		TS	DSPCOUNT	# NEEDED FOR BLANKSUB
5BLANK		LXCH	Q
		TC	GETINREL
		CAF	ZERO
		INDEX	INREL
		TS	VERBREG		# ZERO X, Y, Z, REG.
# Page 405
		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
		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
		OCT	3

BRNCHCON	OCT	77774

# 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
		RELINT			# IF -, NOUT OK
		TC	Q
BLANKCON	OCT	4000

# Page 406
# 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).

		BANK	41
		SETLOC	PINBALL2
		BANK

		COUNT*	$$/PIN
NVSUBB		TC	NVSUB1		# STANDARD LEAD INS. DONT MOVE.
LOADLV1		TC	LOADLV

					# END OF STANDARD LEAD INS.

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, ALARM IF L/ 5 CHAR IN FOR DATA,
		MASK	DECBRNCH	# BUT LEAVE REQRET - AND FLASH ON, SO
		CCS	A		# OPERATOR CAN SUPPLY MISSING NUMERICAL
		TC	+2		# CHARACTERS AND CONTINUE.
		TC	ACCEPTWD	# OCTAL. ANY NUMBER OF CHAR OK.
		CCS	DSPCOUNT
		TC	GODSPALM	# LESS THAN 5 CHAR DEC(DSPCOUNT IS +)
		TC	GODSPALM	# LESS THAN 5 CHAR DEC(DSPCOUNT IS +)
		TC	+1		# 5 CHAR IN (DSPCOUNT IS -)
ACCEPTWD	CS	REQRET		# 5 CHAR IN (DSPCOUNT IS -)
		TS	REQRET		# SET REQRET +.
		TC	FLASHOFF
		TC	REQRET

ENTEXIT		=	ENTRET

MMADREF		ADRES	MMCHANG +1	# ASSUMES TC REQMM AT MMCHANG.

# Page 407
LOWVERB		DEC	28		# LOWER VERB THAT AVOIDS NOUN TEST.

ENTPAS0		CAF	ZERO		# NOUN VERB SUB ENTERS HERE
		TS	DECBRNCH
		CS	VD1		# BLOCK FURTHER NUM CHAR, SO THAT STRAY
		TS	DSPCOUNT	# CHAR DO NOT GET INTO VERB OR NOUN LTS.
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.
		CS	VD1		# OCTAL USED OK
		TS	DSPCOUNT	# BLOCK NUM CHAR IN
		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
# Page 408
LODNNLOC	2CADR	LODNNTAB

NEG5		OCT	77772

INTMCTBS	CA	MPAC	+2	# INTERNAL MACH CADR TO BE SPECIFIED.
		TC	SETNCADR	# ECADR INTO NOUNCADR. SET EB. NOUNADD.
		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	DSPOCTWO
		TC	VERBFAN

		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		DEC	40		# FIRST LIST2 VERB (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)
# Page 409
		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)
		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
REQEXLOC	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 410
# 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 (garbled) 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 411
		TC	Q		# DEG  NO DP
		TC	Q		# ARITH  NO DP
		TCF	DPTEST1		# DP1OUT
		TCF	DPTEST1		# DP2OUT
		TC	Q		# LRPOSOUT NO DP (DATA IN CHANNEL 33)
		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
		TC	Q		# 360-CDU   NO DP
DPTEST1		INDEX	Q
		TC	1		# RETURN TO L+2

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

		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

		TS	VERBREG
UPDATVB		XCH	Q
		TS	UPDATRET
		CAF	VD1
# Page 412
		TS	DSPCOUNT
		CA	VERBREG
UPDAT1		TC	POSTJUMP	# CANT USE SWCALL TO GO TO DSPDECVN, SINCE
		CADR	GOVNUPDT	# UPDATVB CAN ITSELF BE CALLED BY SWCALL.
		TC	UPDATRET

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

GODSPALM	TC	POSTJUMP
		CADR	DSPALARM

# Page 413
# 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 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 414
# 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		TC	DECTEST
		TC	TSTFORDP
		INDEX	NOUNADD
		CS	0
DSPCOM1		XCH	BUF
		TC	DSPCOM2
DSPB		CS	ONE
		TC	DCOMPTST
		INDEX	NOUNADD
		CS	1
		TC	DSPCOM1
DSPC		CS	TWO
		TC	DCOMPTST
		INDEX	NOUNADD
		CS	2
		TC	DSPCOM1
DSPCOM2		CS	TWO		# A  B  C  AB ABC
		AD	VERBREG		# -1 -0 +1 +2 +3   IN A
		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	DSPOCTWO
		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 415
		AD	SFTEMP1		# NOUN COMP = VERB COMP
		CCS	A
		TC	L		# NOUN COMP G/ VERB COMP
		TC	CCSHOLE
		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	DECTEST
		TC	COMPTST1

DECTEST		EXTEND			# ALARMS IF DEC ONLY BIT = 1 (BIT4 OF COMP
		QXCH	MPAC +2		# CODE NUMBER).  RETURNS IF NOT.
		TC	GETCOMP
		MASK	BIT14
		CCS	A
		TC	GODSPALM
		TC	MPAC +2

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
# Page 416
		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

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
# Page 417
		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
		TC	DECDSP3

DSPSFNOR	TC	SFRUTNOR
		TC	DECDSP3

		EBANK=	DSPCOUNT
GTSFOUTL	2CADR	GTSFOUT

DSPDCEND	TC	BANKCALL	# ALL SFOUT ROUTINES END HERE
		CADR	DSPDECWD
		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	LRPOSOUT
		CADR	DP3OUTSF
		CADR	HMSOUT
		CADR	M/SOUT
		CADR	DP2OUTSF
		CADR	AROUT1SF
		CADR	2INTOUT
		CADR	360-CDUO
ENDRTOUT	EQUALS

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

# Page 418
		SETLOC	BLANKCON +1

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

DEGOUTSF	CAF	ZERO
		TS	MPAC +2		# SET INDEX FOR FULL SCALE.
		TC	FIXRANGE
		TC	+2		# NO AUGMENT NEEDED (SFTEMP1 AND 2 ARE 0)
		TC	SETAUG		# SET AUGMENTER ACCORDING TO C(MPAC +2)
		TC	DEGCOM

# 360-CDUD COMPUTES 360 - CDU ANGLE IN MPAC, STORES RESULT IN MPAC AND
# GOES TO DEGOUTSF.

360-CDUO	TC	360-CDU
		TC	DEGOUTSF

360-CDU		CA	MPAC
		MASK	POSMAX		# IF ANGLE IS 0 OR 180 DEGREES, DO NOTHING
		EXTEND
		BZF	360-CDUE
		CS	MPAC		# COMPUTE 360 DEGREES MINUS ANGLE
		AD	ONE
		TS	MPAC
360-CDUE	TC	Q

# LRPOSOUT DISPLAYS +0,1,2, OR 3 (WHOLE) FOR CHANNEL 33, BITS 7-6 = 11,10,
# 01,00 RESPECTIVELY

LRPOSOUT	EXTEND
		READ	CHAN33
		EXTEND
		MP	BIT10		# BITS 7-6 TO BITS 2-1
		COM
		MASK	THREE
		TS	MPAC
		TC	ARTOUTSF	# DISPLAY AS WHOLE

SETAUG		EXTEND			# LOADS SFTEMP1 AND SFTEMP2 WITH THE
		INDEX	MPAC +2		# DP AUGMENTER CONSTANT
		DCA	DEGTAB
		DXCH	SFTEMP1
		TC	Q

FIXRANGE 	CCS	MPAC		# IF MPAC IS + RETURN TO L+1
		TC	Q		# IF MPAC IS - RETURN TO L+2 AFTER
		TC	Q		# MASKING OUT THE SIGN BIT
		TCF	+1

# Page 419
		CS	BIT15
		MASK	MPAC
		TS	MPAC
		INDEX	Q
		TC	1

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

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
# Page 420
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
		TS	DSPCOUNT
		TC	READLO		# GET 2ND INTEGER
		CA	MPAC +1
		TC	DSPDECVN	# DISPLAY 2ND INTEGER (LIKE VERB AND NOUN)
		TC	POSTJUMP
		CADR	DSPDCEND +2

# READLO PICKS UP FRESHDATA 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
# Page 421
RDLONOR		CA	NOUNADD		# E
ENDRDLO		TC	READLO1

		BANK	42
		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
		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		# GIVE 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 DISPLAY
		OCT	32445
# Page 422
MINCON1		OCT	02104		# .066..66 UPPED BY 2EXP-28
		OCT	10422
HRCON1		2DEC	.16384

		OCT	00000
RNDCON		OCT	00062		# .5 SEC

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
		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
		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
# Page 423
		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

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
		OCT	37016

SEPSEC		CCS	MPAC	+1	# IF +, ROUND BY ADDING .5 SEC
		TCF	POSEC		# IF -, ROUND BY SUBTRACING .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
		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.
# Page 424
		XCH	MPAC +1
		XCH	MPAC
		TC	SEPSCRET

SEPMIN		XCH	Q		# FIND 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 PURPOS VERB FOR DISPLAYING A DOUBLE PRECISION AGC
# WORD AS 10 DECIMAL DIGITS ON THE AGC DISPLAY PANEL.  IT CAN BE USED WITH
# 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	ENDRDLO +1

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

# Page 425
# 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.  (2)-(6) ALARM
# AND RECYCLE OCCUR AT FINAL ENTER OF SET. (1) ALARM AND RECYCLE OCCUR AT
# ENTER OF CADR.

		SETLOC	ENDRTOUT

		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 426
		CA	XREG		# ECADR OF FLAG WORD.
		TC	SETNCADR +1	# SET EBANK, NOUNADD.
		CA	ZREG		# ZERO TO RESET BITS, NON-ZERO TO SET BITS.
		INHINT
		EXTEND
		BZF	BITSOFF
		INDEX	NOUNADD
		CS	0
		MASK	YREG		# BITS TO BE PROCESSED.
		INDEX	NOUNADD
		ADS	0		# SET BITS.
		TC	BITSOFF1
BITSOFF		CS	YREG		# BITS TO BE PROCESSED.
		INDEX	NOUNADD
		MASK	0
		INDEX	NOUNADD
		TS	0		# RESET BITS.
BITSOFF1	RELINT
		TC	LOADLV

ABLOAD		CS	ONE
		TC	COMPTEST
		TC	NOUNTEST	# TEST IF NOUN CAN BE LOADED.
		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
		CAF	ONE		# Y COMP
		TC	PUTCOM
		INDEX	NOUNADD
		TS	1
		TC	LOADLV

ALOAD		TC	REQDATX
		EXTEND
		DCA	LODNNLOC	# SWITCH BANKS TO NOUN TABLE READING
		DXCH	Z		# ROUTINE.
		CAF	ZERO		# X COMP
		TC	PUTCOM
# Page 427
		INDEX	NOUNADD
		TS	0
		TC	LOADLV

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.
		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
		TC	LOADLV

LOADLV		CAF	ZERO
		TS	DECBRNCH
		CS	ZERO
		TS	LOADSTAT
		TC	RELDSP		# RELEASE FOR PRIORITY DISPLAY PROBLEM.
		CS	VD1		# TO BLOCK NUMERICAL CHARACTERS AND
		TS	DSPCOUNT	# CLEARS AFTER A COMPLETED LOAD
		TC	POSTJUMP	# AFTER COMPLETED LOAD, GO TO RECALTST
		CADR	RECALTST	# TO SEE IF THERE IS RECALL FROM ENDIDLE.

VBSP1LD		DEC	21		# VB21 = ALOAD
VBSP2LD		DEC	22		# VB22 = BLOAD
VBSP3LD		DEC	23		# VB23 = CLOAD

ALLDC/OC	TS	DECOUNT		# TESTS THAT DATA WORDS LOADED ARE EITHER
		CS	DECBRNCH	# ALL DEC OR ALL OCT. ALARMS IF NOT.
		TS	SR
# Page 428
		CS	SR
		CS	SR		# SHIFTED RIGHT 2
		CCS	A		# DEC COMP BITS IN LOW 3
		TCF	+2		# SOME ONES IN LOW 3
		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	+2		# MUST MATCH 6 FOR 3COMP, 5 FOR 2COMP.
		TC	ALMCYCLE	# ALARM AND RECYCLE.
GOQ		TC	Q		# ALL REQUIRED ARE DEC.  OK

SFRUTNOR	XCH	Q		# GETS SF ROUTINE NUMBER FOR NORMAL CASE
		TS	EXITEM		# CAN'T 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
		INDEX	DECOUNT
		CAF	DISPLACE	# PUT TC GOQ, TC RIGHT5, OR TC LEFT5 IN L
		TS	L
		INDEX	DECOUNT
		CAF	LOW5		# LOW5, MID5, OR HI5 IN A
		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
		INDEX	DECOUNT		# MIXED NOUN
		CAF	DISPLACE
		TS	L		# PUT TC GOQ, TC RIGHT5, OR TC LEFT5 IN L
		INDEX	DECOUNT
		CAF	LOW5
		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 429
		TC	RIGHT5
		TC	LEFT5

CONUMNOR	CAF	LOW5		# NORMAL NOUN ALWAYS GETS LOW5 OF
		MASK	NNTYPTEM	# NNTYPTAB FOR SF CONUM.
		DOUBLE
		TC	EXITEM		# 2X(SF CONSTANT NUMBER) IN A

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
					# 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

PUTNORM		TC	SETNADD		# ECADR FROM NOUNCADR. SETS EB, NOUNADD.
		CCS	DECBRNCH
# Page 430
		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

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

		EBANK=	DSPCOUNT
GTSFINLC	2CADR	GTSFIN

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

PUTDCSF2	INDEX	A
		CAF	SFINTABR
# Page 431
		TC	BANKJUMP	# SWITCH BANKS FOR EXPANSION 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	DSPALARM	# LRPOSOUT CANT BE LOADED.
		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	DEGINSF		# TESTS AT END FOR 360-CDU
ENDRUTIN	EQUALS

# 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	ENDDPDEC +1

		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
		TC	CCSHOLE
# Page 432
		TC	NEG180
		TC	+1
		XCH	MPAC
		MASK	POSMAX
		TS	MPAC
ENDSCALE	INDEX	MIXBR		# IF ROUTINE NO. IS NOT CDU DEGREES,
		TC	+0		# THEN THIS IS 360 - CDU DEGREES
		TC	+3		# AND ANGLE IN MPAC MUST BE REPLACED
		TC	SFMIXCAL	# BY 360 DEGREES MINUS ITSELF.
MIXBACK		TC	+2
		TC	SFNORCAL
NORBACK		CS	A
		AD	BIT2
		EXTEND
		BZF	+2
		TC	360-CDU
ENDSCAL1	TC	POSTJUMP
		CADR	PUTCOM2

SFMIXCAL	TC	BANKCALL
		CADR	SFRUTMIX
		TC	MIXBACK

SFNORCAL	TC	BANKCALL
		CADR	SFRUTNOR
		TC	NORBACK

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

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	ENDSCAL1	# RETURNS IF NO OF/UF

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

DPINSF		TC	DMP		# SCALES MPAC, MPAC +1 BY SFTEMP1,
		ADRES	SFTEMP1		# SFTEMP.  STORES LOW PART OF RESULT
		XCH	MPAC +2		# IN (E SUBK) +1 OR E+1
		DOUBLE
		TS	MPAC +2
		CAF	ZERO
		AD	MPAC +1
		TC	2ROUND +2
		TC	TESTOFUF
		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	ENDSCAL1	# (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
		TC	TPLEFTN		# SHIFT LEFT 7.
		TC	DPINSF +2

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
# Page 434
		TC	SFTEMP2

2ROUND		XCH	MPAC	 +1
		DOUBLE
		TS	MPAC 	+1
		TC	Q		# IF MPAC+1 DOES NOT OF/UF
		AD	MPAC
		TS	MPAC
		TC	Q		# IF MPAC DOES NOT OF/UF
		TS	MPAC+6
2RNDEND		TC	Q

TESTOFUF	CCS	MPAC+6		# RETURNS IF NO OF/UF
		TC	ALMCYCLE	# OF	ALARM AND RECYCLE.
		TC	Q
		TC	ALMCYCLE	# UF	ALARM AND RECYCLE.

		SETLOC	ENDSPMIN +1

		COUNT*	$$/PIN
HMSIN		TC	ALL3DEC		# IF ALL 3 WORDS WERE NOT LOADED, ALARM.
		TC	DMP		# XREG, XREGLP (=HOURS) WERE ALREADY PUT
		ADRES	WHOLECON	# INTO MPAC, MPAC+1.
		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 OVEFLOWS, G/ 745 HR, 39MIN
# Page 435
		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
		DXCH	HITEMIN		# ADD IN SECONDS CONTRIBUTION
		DAS	MPAC		# IF THIS DAS OVERFLOWS,
		EXTEND			# G/ 745 HR, 39 MIN, 14.59 SEC.
		BZF	+2
		TC	ALMCYCLE	# ALARM AND RECYCLE
		CAF	ZERO
		TS	MPAC +2
		TC	TPAGREE
		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
		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		CCS	MPAC		# ALARM IF MPAC NON ZERO
		TC	ALMCYCLE	# ALARM AND RECYCLE.
		TC	Q
		TC	ALMCYCLE	# ALARM AND RECYCLE.
		TC	Q

SIZETST		TS	MPAC +2		# CALLED WITH - CON IN A
		CCS	MPAC +1		# GET MAG OF MPAC+1
# Page 436
		AD	ONE
		TCF	+2
		AD	ONE
		AD	MPAC +2
		EXTEND			# MAG OF MPAC+1 - CON
		BZMF	+2
		TC	ALMCYCLE	# MAG OF MPAC+1 G/ CON. ALARM AND RECYCLE.
		TC	Q		# MAG OF MPAC+1 L/= CON

# ALL3DEC TESTS THAT ALL 3 WORDS ARE LOADED IN DEC (FOR HMSIN).
# ALARM IF NOT. (TEST THAT BITS 3,4,5 OF DECBRNCH ARE ALL = 1).

ALL3DEC		CS	OCT34BAR	# GET BITS 3,4,5 IN A
		MASK	DECBRNCH	# GET BITS 3,4,5 OF DECBRNCH IN A
		AD	OCT34BAR	# BITS 3,4,5 OF DECBRNCH MUST ALL = 1
		CCS	A
		TC	FORCEV25
OCT34BAR	OCT	77743
		TC	FORCEV25
		TC	Q

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.
ENDHMSS		EQUALS

# Page 437
# 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 DOESNT TEST FOR MATBS SINCE NVSUB CAN HANDLE INTERNAL MATBS NOW.

		SETLOC	ENDRUTIN

		COUNT*	$$/PIN
MONITOR		CS	BIT15/14
		MASK	NOUNCADR
MONIT1		TS	MPAC +1		# TEMP STORAGE
		CS	ENTEXIT
		AD	ENDINST
		CCS	A
		TC	MONIT2
BIT15/14	OCT	60000
		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 438
		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	+5		# IF MONSAVE WAS +, NO REQUEST
		CAF	ONE		# IF MONSAVE WAS 0, REQUEST MONREQ
		TC	WAITLIST
		EBANK=	DSPCOUNT
		2CADR	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
		CCS	MONSAVE1	# TIME IS SNATCHED N RUPT FOR NOUN 65
		TC	+4		# IF KILLER BIT = 0, ENTER REQUESTS
		TC	+3		# IF KILLER BIT = 0, ENTER REQUESTS
		TC	KILLMON		# IF KILLER BIT = 1, NO REQUESTS.
		TC	KILLMON		# IF KILLER BIT = 1, NO REQUESTS.
		CAF	MONDEL
		TC	WAITLIST	# ENTER WAITLIST REQUEST FOR MONREQ
		EBANK=	DSPCOUNT
		2CADR	MONREQ

		CAF	CHRPRIO
		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		OCT	144		# FOR 1 SEC MONITOR INTERVALS

MONDO		CCS	MONSAVE1	# CALLED BY EXEC
		TC	+4		# IF KILLER BIT = 0, CONTINUE
		TC	+3		# IF KILLER BIT = 0, CONTINUE
		TC	ENDOFJOB	# IN CASE TERMINATE CAME SINCE LAST MONREQ
		TC	ENDOFJOB	# IN CASE TERMINATE CAME SINCE LAST MONREQ
		CCS	DSPLOCK
		TC	MONBUSY		# NVSUB IS BUSY
# Page 439
		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
		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.

		BLOCK	2

		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

MID7		OCT	37600

		SETLOC	ENDMONDO +1
		COUNT*	$$/PIN
MONREF		OCT	75377		# -DEC10, STARTING IN BIT8
MONBACK		ADRES	PASTEVB

MONBUSY		TC	RELDSPON	# TURN KEY RELEASE LIGHT
		TC	ENDOFJOB
# Page 440
# 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.
#
# 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	DSPOCTWO
ENDSPF		TC	ENDOFJOB

# Page 441
# WORD DISPLAY ROUTINES
		SETLOC	TESTOFUF +4
		COUNT*	$$/PIN
DSPSIGN		XCH	Q
		TS	DSPWDRET
		CCS	MPAC
		TC	+8D
		TC	+7
		AD	ONE
		TS	MPAC
		TC	-ON
		CS	MPAC +1
		TS	MPAC +1
		TC	DSPWDRET
		TC	+ON
		TC	DSPWDRET

DSPRND		EXTEND			# ROUND BY 5 EXP-6
		DCA	DECROUND -1
		DAS	MPAC
		EXTEND
		BZF	+4
		EXTEND
		DCA	DPOSMAX
		DXCH	MPAC
		TC	Q

# 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
		TC	DSPRND
		CAF	FOUR
DSPDCWD1	TS	WDCNT
		CAF	BINCON
		TC	SHORTMP
TRACE1		INDEX	MPAC
		CAF	RELTAB
		MASK	LOW5
		TS	CODE
		CAF	ZERO
		XCH	MPAC +2
		XCH	MPAC +1
		TS	MPAC
		XCH	DSPCOUNT
TRACE1S		TS	COUNT
		CCS	A		# DECREMENT DSPCOUNT EXCEPT AT +0
# Page 442
		TS	DSPCOUNT
		TC	DSPIN
		CCS	WDCNT
		TC	DSPDCWD1
		CS	VD1
		TS	DSPCOUNT
		TC	WDRET

		OCT	00000
DECROUND	OCT	02476

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

DSPDECNR	XCH	Q
		TS	WDRET
		TC	DSPSIGN
		TC	DSPDCWD1 -1

# 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
		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.

# Page 443
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

VNDSPCON	OCT	00244		# .01 ROUNDED UP

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

ENDECVN		EQUALS

		SETLOC	ENDSPF +1
		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.

DSPOCTWO	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
		INDEX	A
		CAF	RELTAB
		MASK	LOW5
		TS	CODE
		XCH	DSPCOUNT
		TS	COUNT
		CCS	A		# DECREMENT DSPCOUNT EXCEPT AT +0
		TS	DSPCOUNT
		TC	POSTJUMP
		CADR	DSPOCTIN
OCTBACK		CCS	WDCNT
		TC	WDAGAIN		# +
DSPLV		CS	VD1		# TO BLOCK NUMERICAL CHARACTERS, CLEARS,
		TS	DSPCOUNT	# AND SIGNS AFTER A COMPLETED DISPLAY.
# Page 444
		TC	WDRET

DSPMSK		=	SEVEN

# DSP2BIT DISPLAYS C(A) UPON ENTRY AS A 2 CHAR OCT BEGINNING IN THE DSP
# LOC SPECIFIED IN DSPCOUNT BY PRE CYCLING RIGHT C(A) AND USING THE LOGIC
# OF THE 5 CHAR OCTAL DISPLAY

DSP2BIT		TS	CYR
		XCH	Q
		TS	WDRET
		CAF	ONE
		TS	WDCNT
		CS	CYR
		CS	CYR
		XCH	CYR
		TS	CYL
		TC	WDAGAIN +5

# 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	ENDECVN

		COUNT*	$$/PIN
DSPIN		XCH	Q		# CANT USE L FOR RETURN, SINCE MANYOF THE
		TS	DSEXIT		# ROTINE 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
		TC	SLEFT5		# DOES NOT USE CYL
		TS	CODE
		CAF	BIT14
		MASK	COUNT
		CCS	A
		CAF	TWO		# BIT14 = 1, BLANK SIGN
		AD	ONE		# BIT14 = 0, LEAVE SIGN ALONE
		TS	COUNT		# +0 INTO COUNT FOR RIGHT
# Page 445
					# +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 +
		TC	CCSHOLE
		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, 76777, 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 ADDRESS 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
		TC	DSPIN1

DSPOCTIN	TC	DSPIN		# SO DSPOCTWO DOESNT USE SWCALL
		CAF	+2
		TC	BANKJUMP
ENDSPOCT	CADR	OCTBACK

# Page 446
# DSPALARM FINDS TC NVSUBEND IN ENTRET FOR NVSUB INITIATED ROUTINES
# ABORT WITH 01501.
#
# DSPALARM FINDS TC ENDOFJOB IN ENTRET FOR KEYBOARD INITIATED ROUTINES.
# DC TC ENTRET.

PREDSPAL	CS	VD1
		TS	DSPCOUNT
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		# NO NVSUB INITATED. TURN ON OPR ERROR
		TC	ENDOFJOB
		TC	POODOO
		OCT	01501
MONADR		GENADR	PASTEVB
NVSBENDL	TC	NVSUBEND

# 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	MID7 +1
		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.
		TC	POSTJUMP
ENDALM		CADR	ENTER

# MMCHANG USES NOUN DISPLAY UNTIL ENTER.  THEN IT USES MODE DISP.
# 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.

# Page 447
		SETLOC	DSP2BIT +10D

		COUNT*	$$/PIN
MMCHANG		TC	REQMM		# ENTPASHI ASSUMES THE TC REQMM AT MMCHANG
					# IF THIS MOVES AT ALL, MUST CHANGE
					# MMADREF AT ENTPASHI.
		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
		CS	VD1		# BLOCK NUM CHAR IN
		TS	DSPCOUNT
		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

VBRQEXEC	CAF	BIT1
		MASK	DSPTEM1
		CCS	A
# Page 448
		TC	SETVAC		# IF BIT1 = 1, FINDVAC
		CAF	TCNOVAC		# IF BIT1 = 0, NOVAC
REQEX1		TS	MPAC		# TC NOVAC OR TC FINDVAC INTO MPAC
		CS	BIT1
		MASK	DSPTEM1
		TS	MPAC +4		# PRIO INTO MPAC+4 AS A TEMP
REQUESTC	TC	RELDSP
		CA	ENDINST
		TS	MPAC +3		# TC ENDOFJOB INTO MPAC+3
		EXTEND
		DCA	DSPTEM1 +1	# 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 WTIH
# COMPONENT 1  DELAY (LOW BITS)
# COMPONENT 2  TASK ADRES (12 BIT)
# COMPONENT 3  BBCON

VBRQWAIT	CAF	TCWAIT
		TS	MPAC		# TC WAITLIST INTO MPAC
		CA	DSPTEM1		# 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	NVSBENDL +1
		COUNT*	$$/PIN
VBPROC		CAF	ONE		# PROCEED WITHOUT DATA
		TS	LOADSTAT
		TC	KILMONON	# TURN ON KILL MONITOR BIT
		TC	RELDSP
		TC	FLASHOFF
		TC	RECALTST	# SEE IF THERE IS ANY RECALL FROM ENDIDLE

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

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

PROCKEY		CAF	ZERO		# SET REQRET FOR ENTER PASS 0.
		TS	REQRET
		CS	VD1		# BLOCK NUMERICAL CHARACTERS, SIGNS, CLEAR
		TS	DSPCOUNT
		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, REQUEQUENCE,
# END OF LOAD.

# Page 450

# 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 KEYRLSE WILL
# RE-ESTABLISH THE DISPLAYS TO THE STATE THEY WERE IN BEOFRE 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

ENDRELDS	EQUALS

# Page 451
# NVSUB IS USED FOR SUBROUTINE 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 WTIH 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 WTIH 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 AVAIALBLE. 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,
# PROCED 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 AND 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 WTIH 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 452
# 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 PASED INT 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	ENDALM +1

		COUNT*	$$/PIN
NVSUB		LXCH	7		# ZERO NVMONOPT OPTIONS
NVMONOPT	TS	NVTEMP
		CAF	BIT14
		MASK 	MONSAVE1	# EXTERNAL MONITOR BIT
		AD	DSPLOCK
		CCS	A
		TC	Q		# DSP SYST BLOCKED, RET TO 1+ CALLING LOC
		CAF	ONE		# DSP SYST AVAILABLE.
NVSBCOM		AD	Q
		TS	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

		SETLOC	ENDRQWT +1

		COUNT*	$$/PIN

# BLANKDSP BLANKS DISPLAY ACCORDING TO OPTION NUMBER IN NVTEMP AS FOLLOWS
# Page 453
#  -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
		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
		CS	VD1
		TS	DSPCOUNT
		TC	FLASHOFF	# PROTECT AGAINS 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
		CA	MPAC +4
		TC	UPDATVB -1	# IF NOUN = +0, DISPLAY VERB, THEN RETURN
		CAF	ZERO		# XERO REQRET SO THAT PASTED VERBS CAN
		TS	REQRET		# BE EXECUTED BY OPERATOR.
ENTSET		TC	NVSUBEND
NVSUB2		CCS	MPAC +4		# TEST VERB
		TC	+4		# IF VERB NOT +0, GO ON
		CA	MPAC +3
# Page 454
		TC	UPDATNN -1	# 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)
		CA	MPAC +4
		TC	UPDATVB -1	# IF BOTH NOUN AND VERB NOT +0, DISPLAY
		CA	MPAC +3		# BOTH AND GO TO ENTPAS0.
		TC	UPDATNN -1
		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	NVSUBEND +2
		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 SPECIAL VERB
#		-1	TERMINATE. SET BY SPECIAL VERB.
#		-0		DATA IN		SET BY END OF LOAD ROUTINE
#			OR 	RESEQUENCE	SET BY VERB 32
#
# L TO 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 JOB SLEEP AND JOBWAKE CAN HANDLE ONLY FIXED BANKS.
# RECALTST TESTS LOADSTAT AND WAKES JOB UP TO,
#	L+1	FOR TERMINATE
#	L+2	FOR PROCEED WITHOUT DATA
#	L+3	FOR DATA IN, OR RESEQUENCE
# IT DOES NOTHING IF LOADSTAT INDICATES WAITING FOR DTA.
#
# ENDIDLE ABORTS (WITH CODE 1206) IF A SECOND JOB ATTEMPTS TO GO TO SLEEP
# Page 455
# 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 INDICATES A JOB IS ALREADY ASLEEP DUE TO ENDIDDLE.)
# 2)	DSPLIST NOT= +0. THIS INDICATES A JOB IS ALREADY ASLEEP DUE TO
#	NVSUBUSY.

ENDIDLE		LXCH	Q		# RETURN ADDRESS INTO L.
		TC	ISCADR+0	# ABORT IF CADRSTOR NOT= +0
		TC	ISLIST+0	# ABORT IF DSPLIST NOT= +0
		CA	L		# DONT SET DSPLOC TO 1 SO CAN USE
		MASK	LOW10		# ENDIDLE WITH NVSUB INITIATED MONITOR.
		AD	FBANK		# SAME STRATEGY FOR CADR AS MAKECADR.
		TS	CADRSTOR
		TC	JOBSLEEP

ENDINST		TC	ENDOFJOB

ISCADR+0	CCS	CADRSTOR	# ABORTS (CODE 01206) IF CADRSTOR NOT= +0.
		TC	DSPABORT	# RETURNS IF CADRSTOR = +0.
		TC	Q
		TC	DSPABORT

ISLIST+0	CCS	DSPLIST		# ABORTS (CODE 01206) IF DSPLIST NOT= +0.
		TC	DSPABORT	# RETURNS IF DSPLIST = +0.
		TC	Q
DSPABORT	TC	POODOO
		OCT	01206

# 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.
		CS	VD1
		TS	DSPCOUNT
		TC	POSTJUMP
		CADR	VBTERM

34DEC		DEC	34

# JAMPROC ALLOWS PROGRAMS TO PERFORM THE PROCEED/PROCEED WITHOUT DATA
# FUNCTION. IT DOES ENDOFJOB.

# Page 456
JAMPROC		CAF	PINSUPBT
		EXTEND
		WRITE	SUPERBNK
		CAF	33DEC
		TS	REQRET		# LEAVE ENTER SET FOR ENTPASS0.
		CS	VD1
		TS	DSPCOUNT
		TC	POSTJUMP
		CADR	VBPROC

33DEC		DEC	33

# 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.
		CAF	BIT14
		MASK	MONSAVE1	# EXTERNAL MONITOR BIT
		AD	DSPLOCK
		CCS	A
		TC	Q		# DSP SYST BLOCKED. RET TO 1+ CALLING LOC
		INCR	Q		# DSP SYST AVAILABLE
					# SET RETURN FOR 2+ CALLING LOC
		CCS	NVTEMP
		TCF	+2
		TC	Q		# NOTHING TO BLANK. RET TO 2+ CALLING LOC
		LXCH	Q		# SET RETURN FOR 2 + CALLING LOC
		CAF	BLNKBBNK
		XCH	BBANK
		EXTEND
		ROR	SUPERBNK	# SAVE OLD SUPERBITS.
		DXCH	BUF
		CAF	PINSUPBT
		EXTEND
		WRITE	SUPERBNK
		TC	BLNKSUB1

		EBANK=	DSPCOUNT
BLNKBBNK	BBCON	BLNKSUB1
ENDBLFF		EQUALS

		SETLOC	ENDRELDS
		COUNT*	$$/PIN
BLNKSUB1	CA	DSPCOUNT	# SAVE OLD DSPCOUNT FOR LATER RESTORATION
# Page 457
		TS	BUF +2
		CAF	BIT1		# TEST BIT1. SEE IF R1 TO BE BLANKED.
		TC	TESTBIT
		CAF	R1D1
		TC	5BLANK -1
		CAF	BIT2		# TEST BIT2. 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.
		INDEX	Q		# IF CURRENT BIT = 0, RETURN TO L+3.
		TC	2

ENDBSUB1	EQUALS

# DSPMM DOES NOT DISPLAY MODREG DIRECTLY. IT PUTS IN EXEC REQUEST WITH
# PRIO 30000 FOR DSPMMJB AND RETURNS TO CALLER.
#
# IF MODREG CONTAINS -0, DSPMMJB BLANKS THE MODE LIGHTS.
#
# DSPMM MUST BE IN BANK 27 OR LOWER, SO IT CAN BE CALLED VIA BANKCALL.

		BANK	7
		SETLOC	PINBALL4
		BANK

		COUNT*	$$/PIN
DSPMM		XCH	Q
		TS	MPAC
		INHINT
		CAF	CHRPRIO
		TC	NOVAC
		EBANK=	DSPCOUNT
		2CADR	DSPMMJB

		RELINT
ENDSPMM		TC	MPAC

# Page 458
# DSPMM  PLACE MAJOR MODE CODE INTO MODREG

		SETLOC	ENDBSUB1

		COUNT*	$$/PIN
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
# 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
		CCS	LOADSTAT
		TC	DOPROC		# + PROCEED WITHOUT DATA
		TC	ENDOFJOB	# PATHALOGICAL CASE EXIT
		TC	DOTERM		# - TERMINATE
		CAF	TWO		# -0 DATA IN OR RESEQUENCE
RECAL2		INDEX	LOCCTR
		AD	LOC		# LOC IS + FOR BASIC JOBS
		INDEX	LOCCTR
		TS	LOC
		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

# Page 459
DOTERM		CAF	ZERO
		TC	RECAL2

DOPROC		CAF	ONE
		TC	RECAL2

# Page 460

# MISCELLANEOUS SERVICE ROUTINES IN FIXED/FIXED

		SETLOC	ENDBLFF

		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
		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 461
		XCH	CYL
		TC	Q

SLEFT5		DOUBLE
		DOUBLE
		DOUBLE
		DOUBLE
		DOUBLE
		TC	Q

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

TCNOVAC		TC	NOVAC
TCWAIT		TC	WAITLIST
TCTSKOVR	TC	TASKOVER
TCFINDVC	TC	FINDVAC

CHRPRIO		OCT	30000		# EXEC PRIORITY OF CHARIN

LOW11		OCT	3777
B12-1		EQUALS	LOW11
LOW8		OCT	377

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

BINCON		DEC	10

FALTON		CA	BIT7		# TURN ON OPERATOR ERROR LIGHT.
		EXTEND
		WOR	DSALMOUT	# BIT 7 OF CHANNEL 11
		TC	Q

FALTOF		CS	BIT7		# TURN OFF OPERATOR ERROR LIGHT
		EXTEND
		WAND	DSALMOUT	# BIT 7 OF CHANNEL 11
		TC	Q

RELDSPON	CAF	BIT5		# TURN ON KEY RELEASE LIGHT
		EXTEND
		WOR	DSALMOUT	# BIT 5 OF CHANNEL 11
		TC	Q

# Page 462
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
		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
		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 FORST 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

FLASHON		CAF	BIT6		# TURN ON V/N FLASH
		EXTEND			# BIT 6 OF CHANNEL 11
		WOR	DSALMOUT
		TC	Q

FLASHOFF	CS	BIT6		# TURN OFF V/N FLASH
		EXTEND
		WAND	DSALMOUT
		TC	Q

# Page 463
# 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 A JOB 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 NOT 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 01206) 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 464
# ENDIDLE.  (+-NZ INDICATE A JOB IS ALREADY ASLEEP DUE TO ENDIDLE.)

PRENVBSY	CS	2K+3		# SPECIAL ENTRANCE FOR ROUTINES IN FIXED
		AD	Q		# BANKS ONLY DESIRING THE FCADR OF (LOC
		AD	FBANK		# FROM WHICH THE TC PRENVBSY WAS DONE) -2
NVSUBUSY	TC	POSTJUMP	# TO BE ENTERED.
		CADR	NVSUBSY1
2K+3		OCT	2003

# NVSUBSY1 MUST BE IN BANK 27 OR LOWER, SO IT WILL PUT CALLER TO SLEEP
# WITH HIS PROPER SUPERBITS.

		SETLOC	ENDSPMM +1
		COUNT*	$$/PIN
NVSUBSY1	TS	L
		TC	ISCADR+0	# ABORT IF CADRSTOR NOT= +0.
		TC	ISLIST+0	# ABORT IF DSPLIST NOT= +0.
		TC	RELDSPON
		CA	L
		TS	DSPLIST
ENDNVBSY	TC	JOBSLEEP

# NVSBWAIT IS A SPECIAL ENTRANCE FOR ROUTINES IN FIXED BANKS ONLY. IF
# SYSTEM IS NOT BUSY, IT EXECUTES V/N AND RETURNS TO L+1 (L= LOC FROM
# WHICH THE TC NVSBWAIT WAS DONE). IF SYSTEM IS BUSY, IT PUTS CALLING JOB
# TO SLEEP WITH L-1 GOING INTO LIST FOR EVENTUAL WAKING UP WHEN SYSTEM
# IS NOT BUSY.

		SETLOC	NVSUBUSY +3
		COUNT*	$$/PIN
NVSBWAIT	LXCH	7		# ZERO NVMONOPT OPTIONS
		TS	NVTEMP
		CAF	BIT14
		MASK	MONSAVE1	# EXTERNAL MONITOR BIT
		AD	DSPLOCK
		CCS	A
		TCF	NVSBWT1		# BUSY
		TCF	NVSBCOM		# FREE. NVSUB WILL SAVE L+1 FOR RETURN
					# AFTER EXECUTION.
NVSBWT1		INCR	Q		# L+2. PRENVBSY WILL PUT L-1 INTO LIST AND
		TCF	PRENVBSY	# GO TO SLEEP.

# 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
# Page 465
		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
		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
		CAF	ZERO		# -  NOT EMPTY. LEAVE KEY RLSE LIGHT ALONE
		TS	DSPLOCK
		TC	RELRET

ENDPINBF	EQUALS

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

PINTEST		EQUALS	LST2FAN

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

		SETLOC	ENDNVSB1 +1

		COUNT*	$$/PIN
VBTSTLTS	INHINT
		CS	BIT1		# SET BIT 1 OF IMODES33 SO IMUMON WONT
		MASK	IMODES33	# TURN OUT ANY LAMPS.
		AD	BIT1
		TS	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
		RELINT
		CAF	SHOLTS
		INHINT
		TC	WAITLIST
		EBANK=	DSPTAB
		2CADR	TSTLTS2

		TC	ENDOFJOB	# DSPLOCK IS LEFT BUSY (FROM KEYBOARD
					# ACTION) UNTIL TSTLTS3 TO INSURE THAT
					# LIGHTS TEST WILL BE SEEN.

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.
# Page 468
TSTCON2		OCT	40674		# DSPTAB+11D BITS 3,4,5,6,8,9 LR LITES,
					# NO ATT, GIMBAL LOCK, TRACKER, PROG ALM.
TSTCON3		OCT	00115		# CHAN 11 BITS 1, 3, 4, 7.
					# UPLINK ACITIVY, TEMP, OPERATOR ERROR.
SHOLTS		OCT	764		# 5 SEC

TSTLTS2		CAF	CHRPRIO		# CALLED BY WAITLIST
		TC	NOVAC
		EBANK=	DSPTAB
		2CADR	TSTLTS3

		TC	TASKOVER

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
		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	13-11,1		# SET BITS TO INDICATE ALL LAMPS OUT. TEST
		MASK	IMODES33	# LIGHTS COMPLETE.
		AD	PRIO16
		TS	IMODES33

		CS	OCT55000
		MASK	IMODES30
		AD	PRIO15		# 15000.
		TS	IMODES30

		CS	RFAILS2
		MASK	RADMODES
		AD	RCDUFBIT
		TS	RADMODES

		RELINT

		TC	BANKCALL	# REDISPLAY C(MODREG)
		CADR	DSPMM
		TC	KILMONON	# TURN ON KILL MONITOR BIT.
		TC	FLASHOFF	# TURN OFF V/N FLASH.
		TC	POSTJUMP	# DOES RELDSP AND GOES TO PINBRNCH IF
		CADR	TSTLTS4		#  ENDIDLE IS AWAITING OPERATOR RESPONSE.
# Page 469
13-11,1		OCT	16001
RFAILS2		OCT	330		# RADAR CDU AND DATA FAIL FLAGS.
OCT55000	OCT	55000
ENDPINS2	EQUALS

# Page 470
# 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 ZEROS 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	DOPROC +2
		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	PRIO16		# RESET FAIL BITS WHICH GENERATE PROG
		MASK	IMODES33	# ALARM SO THAT IF THE FAILURE STILL
		AD	PRIO16		# EXISTS, THE ALARM WILL COME BACK.
		TS	IMODES33
		CS	BIT10
		MASK	IMODES30
		AD	BIT10
		TS	IMODES30

		CS	RFAILS
		MASK	RADMODES
		AD	RCDUFBIT
		TS	RADMODES

		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)
		TS	ERCNT		# ERCNT = COUNT
		INHINT
		INDEX	ERCNT
		CCS	DSPTAB
		AD	ONE
		TC	ERPLUS
		AD	ONE
ERMINUS		CS	A
		MASK	NOTBIT12
# Page 471
		TC	ERCOM
ERPLUS		CS	A
		MASK	NOTBIT12
		CS	A		# MIGHT WANT TO RESET CLPASS, DECBRNCH,
ERCOM		INDEX	ERCNT		# ETC.
		TS	DSPTAB
		RELINT
		CCS	ERCNT
		TC	TSTAB	+1
		CAF	ZERO
		TS	FAILREG
		TS	FAILREG +1
		TS	FAILREG +2
		TS	SFAIL
		TC	ENDOFJOB

ERCON		OCT	104		# CHAN 11 BITS 3,7.
					# UPLINK ACTIVITY, AND OPERATOR ERROR.
RFAILS		OCT	330		# RADAR CDU AND DATA FAIL FLAGS.
GL+NOATT	OCT	00050		# NO ATT AND GIMBAL LOCK LAMPS
NOTBIT12	OCT	73777

ENDPINS1	EQUALS

		SBANK=	LOWSUPER

