Raw File
PINBALL_GAME__BUTTONS_AND_LIGHTS.agc
### FILE="Main.annotation"
## Copyright:   Public domain.
## Filename:    PINBALL_GAME__BUTTONS_AND_LIGHTS.agc
## Purpose:     A section of a reconstructed, mixed version of Sundance
##              It is part of the reconstructed source code for the Lunar
##              Module's (LM) Apollo Guidance Computer (AGC) for Apollo 9.
##              No original listings of this program are available;
##              instead, this file was created via disassembly of dumps
##              of various revisions of Sundance core rope modules.
## Assembler:   yaYUL
## Contact:     Ron Burkey <info@sandroid.org>.
## Website:     www.ibiblio.org/apollo/index.html
## Mod history: 2020-06-17 MAS  Created from Luminary 69.
##              2021-05-30 ABS  RCDUFBIT -> BIT7 to match Luminary 69.

## Sundance 306

# 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 PROGRAMS, AND FROM THE UPLINK.
#    THE LANGUAGE OF COMMUNICATION WITH THE PROGRAM IS A PAIR OF WORDS
# KNOWN AS VERB AND NOUN.  EACH OF THESE IS REPRESENTED BY A 2 CHARACTER
# DECIMAL NUMBER.  THE VERB CODE INDICATES WHAT ACTION IS TO BE TAKEN, THE
# NOUN CODE INDICATES TO WHAT THIS ACTION IS APPLIED.  NOUNS USUALLY
# REFER TO A GROUP OF ERASABLE REGISTERS.

# VERBS ARE GROUPED INTO DISPLAYS, LOADS, MONITORS (DISPLAYS THAT ARE
# UPDATED ONCE PER SECOND), SPECIAL FUNCTIONS, AND EXTENDED VERBS(THESE
# ARE OUTSIDE OF THE DOMAIN OF PINBALL AND CAN BE FOUND UNDER LOG SECTION
# :EXTENDED VERBS:).
# A LIST OF VERBS AND NOUNS IS GIVEN IN LOG SECTION :ASSEMBLY AND 
# OPERATION INFORMATION:.

## 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 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
#             PINBALL EXECUTIVE JOB WITH PRIORITY 30000.  IT IS THE 
#             RESPONSIBILITY OF THE EXTENDED VERB CALLED TO EVENTUALLY
#             CHANGE PRIORITY (IF NECESSARY) AND DO AN ENDOFJOB.
#             ALSO PINBALL IS A NOVAC JOB. EBANK SET FOR COMMON.
#          3) VERB 37. CHANGE OF PROGRAM (MAJOR MODE) CALLS :V37: IN THE
#             SERVICE ROUTINES AS PART OF THE PINBALL EXEC JOB WITH PRIO
#             30000.  THE NEW PROGRAM CODE (MAJOR MODE) IS LEFT IN A.
#          4) KEY RELEASE BUTTON CALLS :PINBRNCH: IN THE DISPLAY INTERFACE
#             ROUTINES AS PART OF THE PINBALL EXEC JOB WITH PRIO 30000 IF 
#             THE KEY RELEASE LIGHT IS OFF AND :CADRSTOR: IS NOT +0.

#    IF PINBALL WAS CALLED BY INTERNAL PROGRAMS, EXIT FROM PINBALL IS BACK
# TO CALLING ROUTINE.  DETAILS DESCRIBED IN REMARKS CARDS JUST BEFORE
# :NVSUB: 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
# 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   ROUTINES 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
# 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


# RESERVED FOR PINBALL EXECUTIVE ACTION

# DSPCOUNT ERASE                  DISPLAY POSITION INDICATOR
# DECBRNCH ERASE                  +DEC, - DEC, OCT INDICATOR
# VERBREG  ERASE                  VERB CODE
# NOUNREG  ERASE                  NOUN CODE
# XREG     ERASE                  R1 INPUT BUFFER
# YREG     ERASE                  R2 INPUT BUFFER
# ZREG     ERASE                  R3 INPUT BUFFER
# XREGLP   ERASE                  LO PART OF XREG (FOR DEC CONV ONLY)
# YREGLP   ERASE                  LO PART OF YREG (FOR DEC CONV ONLY)
# HITEMOUT =      YREGLP          TEMP FOR DISPLAY OF HRS, MIN, SEC
#                                          MUST = LOTEMOUT-1.
# ZREGLP   ERASE                  LO PART OF ZREG (FOR DEC CONV ONLY)
# LOTEMOUT =      ZREGLP          TEMP FOR DISPLAY OF HRS, MIN, SEC
#                                          MUST = HITEMOUT+1.
# MODREG   ERASE                  MODE CODE
# DSPLOCK  ERASE                  KEYBOARD/SUBROUTINE CALL INTERLOCK
# REQRET   ERASE                  RETURN REGISTER FOR LOAD
# LOADSTAT ERASE                  STATUS INDICATOR FOR LOADTST
# CLPASS   ERASE                  PASS INDICATOR CLEAR
# NOUT     ERASE                  ACTIVITY COUNTER FOR DSPTAB
# NOUNCADR ERASE                  MACHINE CADR FOR NOUN
# MONSAVE  ERASE                  N/V CODE FOR MONITOR. (= MONSAVE1-1)
# MONSAVE1 ERASE                  NOUNCADR FOR MONITOR (MATBS) =MONSAVE+1
# MONSAVE2 ERASE                  NVMONOPT OPTIONS
# DSPTAB   ERASE          +13D    0-10,DISPLAY PANEL BUFFER.11-13,C RELAYS
# CADRSTOR ERASE                  ENDIDLE STORAGE
# NVQTEM   ERASE                  NVSUB STORAGE FOR CALLING ADDRESS
#                                 MUST = NVBNKTEM-1
# NVBNKTEM ERASE                  NVSUB STORAGE FOR CALLING BANK
#                                 MUST = NVQTEM+1
# VERBSAVE ERASE                  NEEDED FOR RECYCLE
# DSPLIST  ERASE                  WAITING REG FOR DSP SYST INTERNAL USE
# EXTVBACT REASE                  EXTENDED VERB ACTIVITY INTERLOCK
# DSPTEM1  ERASE          +2      BUFFER STORAGE AREA 1 (MOSTLY FOR TIME)
# DSPTEM2  ERASE          +2      BUFFER STORAGE AREA 2 (MOSTLY FOR DEG)
# END OF ERASABLES RESERVED FOR PINBALL EXECUTIVE ACTION


# TEMPORARIES FOR PINBALL EXECUTIVE ACTION

# DSEXIT   =      INTB15+         RETURN FOR DSPIN
# EXITEM   =      INTB15+         RETURN FOR SCALE FACTOR ROUTINE SELECT
# BLANKRET =      INTB15+         RETURN FOR 2BLANK

# WRDRET   =      INTBIT15        RETURN FOR 5BLANK
# WDRET    =      INTBIT15        RETURN FOR DSPWD
# DECRET   =      INTBIT15        RETURN FOR PUTCOM(DEC LOAD)
# 21/22REG =      INTBIT15        TEMP FOR CHARIN

# UPDATRET =      POLISH          RETURN FOR UPDATNN, UPDATVB
# CHAR     =      POLISH          TEMP FOR CHARIN
# ERCNT    =      POLISH          COUNTER FOR ERROR LIGHT RESET
# DECOUNT  =      POLISH          COUNTER FOR SCALING AND DISPLAY (DEC)

# SGNON    =      VBUF            TEMP FOR +,- ON
# NOUNTEM  =      VBUF            COUNTER FOR MIXNOUN FETCH
# DISTEM   =      VBUF            COUNTER FOR OCTAL DISPLAY VERBS
# DECTEM   =      VBUF            COUNTER FOR FETCH (DEC DISPLAY VERBS)

# SGNOFF   =      VBUF    +1      TEMP FOR +,- ON
# NVTEMP   =      VBUF    +1      TEMP FOR NVSUB
# SFTEMP1  =      VBUF    +1      STORAGE FOR SF CONST HI PART(=SFTEMP2-1)
# HITEMIN  =      VBUF    +1      TEMP FOR LOAD OF HRS, MIN, SEC
#                                          MUST = LOTEMIN-1.
# CODE     =      VBUF    +2      FOR DSPIN
# SFTEMP2  =      VBUF    +2      STORAGE FOR SF CONST LO PART(=SFTEMP1+1)
# LOTEMIN  =      VBUF    +2      TEMP FOR LOAD OF HRS, MIN, SEC
#                                          MUST = HITEMIN+1.
# MIXTEMP  =      VBUF    +3      FOR MIXNOUN DATA
# SIGNRET  =      VBUF    +3      RETURN FOR +,- ON

# ALSO MIXTEMP+1 = VBUF+4, MIXTEMP+2 = VBUF+5.

# ENTRET   =      DOTINC          EXIT FROM ENTER

# WDCNT    =      DOTRET          CHAR COUNTER FOR DSPWD
# INREL    =      DOTRET          INPUT BUFFER SELECTOR ( X,Y,Z, REG )

# DSPMMTEM =      MATINC          DSPCOUNT SAVE FOR DSPMM
# MIXBR    =      MATINC          INDICATOR FOR MIXED OR NORMAL NOUN

# TEM1     ERASE                  EXEC TEMP
# DSREL    =      TEM1            REL ADDRESS FOR DSPIN

# TEM2     ERASE                  EXEC TEMP
# DSMAG    =      TEM2            MAGNITUDE STORE FOR DSPIN
# IDADDTEM =      TEM2            MIXNOUN INDIRECT ADDRESS STORAGE

# TEM3     ERASE                  EXEC TEMP
# COUNT    =      TEM3            FOR DSPIN

# TEM4     ERASE                  EXEC TEMP
# LSTPTR   =      TEM4            LIST POINTER FOR GRABUSY
# RELRET   =      TEM4            RETURN FOR RELDSP
# FREERET  =      TEM4            RETURN FOR FREEDSP
# DSPWDRET =      TEM4            RETURN FOR DSPSIGN
# SEPSCRET =      TEM4            RETURN FOR SEPSEC
# SEPMNRET =      TEM4            RETURN FOR SEPMIN

# TEM5     ERASE                  EXEC TEMP
# NOUNADD  =      TEM5            TEMP STORAGE FOR NOUN ADDRESS

# NNADTEM  ERASE                  TEMP FOR NOUN ADDRESS TABLE ENTRY
# NNTYPTEM ERASE                  TEMP FOR NOUN TYPE TABLE ENTRY
# IDAD1TEM ERASE                  TEMP FOR INDIR ADRESS TABLE ENTRY(MIXNN)
#                                 MUST = IDAD2TEM-1, = IDAD3TEM-2.
# IDAD2TEM ERASE                  TEMP FOR INDIR ADRESS TABLE ENTRY(MIXNN)
#                                 MUST = IDAD1TEM+1, = IDAD3TEM-1.
# IDAD3TEM ERASE                  TEMP FOR INDIR ADRESS TABLE ENTRY(MIXNN)
#                                 MUST = IDAD1TEM+2, = IDAD2TEM+1.
# RUTMXTEM ERASE                  TEMP FOR SF ROUT TABLE ENTRY(MIXNN ONLY)
# END OF TEMPORARIES FOR PINBALL EXECUTIVE ACTION


# ADDITIONAL TEMPORARIES FOR PINBALL EXECUTIVE ACTION

# MPAC, THRU MPAC +6
# BUF, +1, +2
# BUF2, +1, +2
# MPTEMP
# ADDRWD
#   END OF ADDITIONAL TEMPS FOR PINBALL EXEC ACTION


# RESERVED FOR PINBALL INTERRUPT ACTION

# DSPCNT   ERASE                  COUNTER FOR DSPOUT
# UPLOCK   ERASE                  BIT1 = UPLINK INTERLOCK (ACTIVATED BY
#                                                                         RECEPTION OF A BAD MESSAGE IN UPLINK)
# END OF ERASABLES RESERVED FOR PINBALL INTERRUPT ACTION


# TEMPORARIES FOR PINBALL INTERRUPT ACTION
#
# KEYTEMP1 =      WAITEXIT        TEMP FOR KEYRUPT, UPRUPT
# DSRUPTEM =      WAITEXIT        TEMP FOR DSPOUT
# KEYTEMP2 =      RUPTAGN         TEMP FOR KEYRUPT, UPRUPT
# END OF TEMPORARIES FOR PINBALL INTERRUPT ACTION

# THE INPUT CODES ASSUMED FOR THE KEYBOARD ARE,
# 0        10000
# 1        00001
# 9        01001
# VERB     10001
# ERROR RES10010
# KEY RLSE 11001
# +        11010
# -        11011
# ENTER    11100
# CLEAR    11110
# NOUN     11111
## 2003 RSB &mdash; The PROCEED key has no keycode; it is read by an alternate mechanism.


# OUTPUT FORMAT FOR DISPLAY PANEL. SET OUT0 TO  AAAABCCCCCDDDDD.
# A-S SELECT A RELAYWORD. THIS DETERMINES WHICH PAIR OF CHARACTERS ARE
# ENERGIZED.
# B FOR SPECIAL RELAYS SUCH AS SIGNS ETC.
# C-S  5 BIT RELAY CODE FOR LEFT CHAR OF PAIR SELECTED BY RELAYWORD
# D-S  5 BIT RELAY CODE FOR RIGHTCHAR 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)
# 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.

# 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                 +
                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
                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
                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)
                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
                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(PERTINE
# NT 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

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

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

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 PASS0 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
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      DSPOCTWD
                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)
                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.

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

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


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

DPTEST          INDEX   A
                TCF     +1
                TC      Q               # OCTAL ONLY  NO DP
                TC      Q               # FRACT NO DP
                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
                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
                
#          NOUN   TABLES
# NOUN CODE L/40, NORMAL NOUN CASE.  NOUN CODE G/E 40, MIXED NOUN CASE.
# FOR NORMAL CASE, NNADTAB CONTAINS ONE       ECADR     FOR EACH NOUN.
# +0 INDICATES NOUN NOT USED.   - ENTRY INDICATES MACHINE CADR(E OR F) TO
# BE SPECIFIED. -1 INDICATES CHANNEL TO BE SPECIFIED. -0 INDICATES AUGMENT
# OF LAST MACHINE CADR SUPPLIED.

# FOR MIXED CASE, NNADTAB CONTAINS ONE INDIRECT ADDRESS(IDADDREL) IN LOW
# 10 BITS, AND THE COMPONENT CODE NUMBER IN THE HIGH 5 BITS.

# NNTYPTAB IS A PACKED TABLE OF THE FORM MMMMMNNNNNPPPPP.

# FOR THE NORMAL CASE, M-S ARE THE COMPONENT CODE NUMBER.
#                      N-S ARE THE SF ROUTINE CODE NUMBER.
#                      P-S ARE THE SF CONSTANT CODE NUMBER.

# MIXED CASE,M-S ARE THE SF CONSTANT3 CODE NUMBER     3 COMPONENT CASE
#            N-S ARE THE SF CONSTANT2 CODE NUMBER
#            P-S ARE THE SF CONSTANT1 CODE NUMBER
#            N-S ARE THE SF CONSTANT2 CODE NUMBER     2 COMPONENT CASE
#            P-S ARE THE SF CONSTANT1 CODE NUMBER
#            P-S ARE THE SF CONSTANT1 CODE NUMBER      1 COMPONENT CASE

# THERE IS ALSO AN INDIRECT ADDRESS TABLE(IDADDTAB) FOR MIXED CASE ONLY.
# EACH ENTRY CONTAINS ONE ECADR.    IDADDREL IS THE RELATIVE ADDRESS OF
# THE FIRST OF THESE ENTRIES.
# THERE IS ONE ENTRY IN THIS TABLE FOR EACH COMPONENT OF A MIXED NOUN
# THEY ARE LISTED IN ORDER OF ASCENDING K.

# THERE IS ALSO A SCALE FACTOR ROUTINE NUMBER TABLE( RUTMXTAB ) FOR MIXED
# CASE ONLY. THERE IS ONE ENTRY PER MIXED NOUN. THE FORM IS,
#       QQQQQRRRRRSSSSS
# Q-S ARE THE SF ROUTINE 3 CODE NUMBER     3 COMPONENT CASE
# R-S ARE THE SF ROUTINE 2 CODE NUMBER
# S-S ARE THE SF ROUTINE 1 CODE NUMBER
# R-S ARE THE SF ROUTINE 2 CODE NUMBER     2 COMPONENT CASE
# S-S ARE THE SF ROUTINE 1 CODE NUMBER


# IN OCTAL DISPLAY AND LOAD (OCT OR DEC) VERBS, EXCLUDE USE OF VERBS WHOSE
# COMPONENT NUMBER IS GREATER THAN THE NUMBER OF COMPONENTS IN NOUN.
# (ALL MACHINE ADDRESS TO BE SPECIFIED NOUNS ARE 3 COMPONENT.)


# IN MULTI-COMPONENT LOAD VERBS, NO MIXING OF OCTAL AND DECIMAL DATA
# COMPONENT WORDS IS ALLOWED. ALARM IF VIOLATION.

# IN DECIMAL LOADS OF DATA, 5 NUMERICAL CHARACTERS MUST BE KEYED IN
# BEFORE EACH ENTER. IF NOT, ALARM.

#          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      DSPOCTWD
                XCH     DISTEM
                TC      DSPCOM2 +2
                
# COMPTEST ALARMS IF COMPONENT NUMBER OF VERB(LOAD OR OCT DISPLAY) IS
# GREATER THAN THE HIGHEST COMPONENT NUMBER OF NOUN.
COMPTEST        TS      SFTEMP1         # - VERB COMP
                LXCH    Q
COMPTST1        TC      GETCOMP
                TC      LEFT5
                MASK    THREE           # NOUN COMP
                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
                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         EXTEND
                INDEX   NOUNCADR
                READ    0
                CS      A
                TCF     DSPCOM1
                

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


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

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

                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

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 FRESH DATA FOR BOTH HI AND LO AND LEAVES IT IN 
# MPAC, MPAC+1. THIS IS NEEDED FOR TIME DISPLAY. IT ZEROES MPAC+2, BUT
# DOES NOT FORCE TPAGREE.

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


                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            # GIVES MIN/10EXP5 MOD 60
                TS      DSPCOUNT
                TC      BANKCALL        # DISPLAY MIN MOD 60
                CADR    DSPDECWD
                EXTEND                  # MINUTES, SECONDS HAVE BEEN REMOVED
                DCA     HRCON1
                DXCH    MPAC
                CA      HITEMOUT        # USE WHOLE HOURS
                TC      PRSHRTMP        # IF C(A) = -0, SHORTMP FAILS TO GIVE -0.
                                        # MULT BY .16384
                CAF     R1D1            # GIVES HOURS/10EXP5
                TS      DSPCOUNT
                TC      BANKCALL        # USE REGULAR DSPDECWD, WITH ROUND OFF.
                CADR    DSPDECWD
                TC      ENTEXIT
                
SECON1          2DEC*   1.666666666 E-4 B12* #  2EXP12/6000

SECON2          OCT     01727           # .06 FOR SECONDS DISPLAY
                OCT     01217
MINCON2         OCT     00011           # .0006 FOR MINUTES DISLPAY
                OCT     32445
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
                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 SUBTRACTING .5 SEC
                TCF     POSEC           # FINDS TIME IN MPAC, MPAC+1
                TCF     +1              # ROUNDS OFF BY +/- .5 SEC
                EXTEND                  # LEAVES WHOLE MIN IN BIT13 OF
                DCS     RNDCON  -1      # LOTEMOUT AND ABOVE.
SEPSEC1         DAS     MPAC            # LEAVES FRACT SEC/60 IN MPAC, MPAC+1.
                TCF     SEPSECNR
POSEC           EXTEND
                DCA     RNDCON -1
                TCF     SEPSEC1
SEPSECNR        XCH     Q               # THIS ENTRY AVOIDS ROUNDING BY .5 SEC
                TS      SEPSCRET
                TC      DMP             # MULT BY 2EXP12/6000
                ADRES   SECON1          # GIVES FRACT SEC/60 IN BIT12 OF MPAC+1
                EXTEND                  # AND BELOW.
                DCA     MPAC            # SAVE MINUTES AND HOURS
                DXCH    HITEMOUT
                TC      TPSL1
                TC      TPSL1           # GIVES FRACT SEC/60 IN MPAC+1, MPAC+2.
                CAF     ZERO
                XCH     MPAC +2         # LEAVE FRACT SEC/60 IN MPAC, MPAC+1.
                XCH     MPAC +1
                XCH     MPAC
                TC      SEPSCRET

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


# THIS IS A SPECIAL PURPOSE VERB FOR DISPLAYING A DOUBLE PRECISION AGC
# WORD AS 10 DECIMAL DIGITS ON THE AGC DISPLAY PANEL.  IT CAN BE USED WITH
# 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

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


                SETLOC  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
                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
                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
                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
                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          # CANT USE L FOR RETURN. TSTFORDP USES L.
                CAF     MID5
                MASK    NNTYPTEM
                TC      RIGHT5
                TC      EXITEM          # SF ROUTINE NUMBER IN A
                
SFRUTMIX        XCH     Q               # GETS SF ROUTINE NUMBER FOR MIXED CASE
                TS      EXITEM
                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
                TC      RIGHT5
                TC      LEFT5

CONUMNOR        CAF     LOW5            # NORMAL NOUN ALWAYS GETS LOW 5 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
                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      MPAC
                EXTEND
                INDEX   NOUNCADR
                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
                TC      BANKJUMP        # SWITCH BANKS FOR EXPANSHION ROOM
SFINTABR        CADR    GOALMCYC        # ALARM AND RECYCLE IF DEC LOAD
                                        # WITH OCTAL ONLY NOUN.
                CADR    BINROUND
                CADR    DEGINSF
                CADR    ARTHINSF
                CADR    DPINSF
                CADR    DPINSF2
                CADR    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
                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

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         # SFTEMP2.  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
                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 OVERFLOWS, G/ 745 HR,39MIN
                BZF     +2
                TC      ALMCYCLE
                CA      ZREG            # PUT ZREG, ZREGLP INTO MPAC, +1.
                LXCH    ZREGLP
                DXCH    MPAC
                TC      DMP
                ADRES   WHOLECON
                TC      RND/TST         # ROUND OFF TO WHOLE CENTI-SEC IN MPAC+1
                CS      59.99SEC        # ALARM IF MPAC NON ZERO (G/163.83 SEC)
                TC      SIZETST         # ALARM IF MPAC+1 G/59.99 SEC
                DXCH    HITEMIN         # ADD IN SECONDS CONTRIBUTION
                DAS     MPAC            # IF THIS DAS OVERFLOWS,
                EXTEND                  # G/ 745 HR, 39 MIN, 14.55 SEC.
                BZF     +2
                TC      ALMCYCLE        # ALARM AND RECYCLE
                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
                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

# MONITOR ALLOWS OTHER KEYBOARD ACTIVITY. IT IS ENDED BY VERB TERMINATE,
# VERB PROCEED WITHOUT DATA, VERB RESEQUENCE,
# ANOTHER MONITOR, OR ANY NVSUB CALL THAT PASSES THE DSPLOCK (PROVIDED
# THAT THE OPERATOR HAS SOMEHOW ALLOWED THE ENDING OF A MONITOR WHICH
# HE HAS INITIATED THROUGH THE KEYBOARD).

# MONITOR ACTION IS SUSPENDED, BUT NOT ENDED, BY ANY KEYBOARD ACTION,
# EXCEPT ERROR LIGHT RESET. IT BEGINS AGAIN WHEN KEY RELEASE IS PERFORMED.
# MONITOR SAVES THE NOUN AND APPROPRIATE DISPLAY VERB IN MONSAVE. IT SAVES
# NOUNCADR IN MONSAVE1, IF NOUN = MACHINE CADR TO BE SPECIFIED. BIT 15 OF
# MONSAVE1 IS THE KILL MONITOR SIGNAL (KILLER BIT). BIT 14 OF MONSAVE1
# INDICATES THE CURRENT MONITOR WAS EXTERNALLY INITIATED (EXTERNAL
# MONITOR BIT). IT IS TURNED OFF BY RELDSP AND KILMONON.

# MONSAVE INDICATES IF MONITOR IS ON(+=ON, +0=OFF)
# IF MONSAVE IS +, MONITOR ENTERS NO REQUEST, BUT TURNS KILLER BIT OFF.
# IF MONSAVE IS +0, MONITOR ENTERS REQUEST AND TURNS KILLER BIT OFF.

# NVSUB (IF EXTERNAL MONITOR BIT IS OFF), VB=PROCEED WITHOUT DATA,
# VB=RESEQUENCE, AND VB=TERMINATE TURN KILL MONITOR BIT ON.

# IF KILLER BIT IS ON, MONREQ ENTERS NO FURTHER REQUESTS, ZEROS MONSAVE
# AND MONSAVE1 (TURNING OFF KILLER BIT AND EXTERNAL MONITOR BIT).

# MONITOR DOSENT TEST FOR MATBS SINCE NVSUB CAN HANDLE INTERNAL MATBS NOW
                SETLOC  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
                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 IN 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
                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.

## Sundance 292

                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

## Sundance 306

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

MONBUSY         TC      RELDSPON        # TURN KEY RELEASE LIGHT
                TC      ENDOFJOB
# DSPFMEM IS USED TO DISPLAY (IN OCTAL) ANY FIXED REGISTER.
# IT IS USED WITH NOUN = MACHINE CADR TO BE SPECIFIED. THE FCADR OF THE 
# DESIRED LOCATION IS THEN PUNCHED IN. IT HANDLES F/F (FCADR 4000-7777)

# FOR BANKS L/E 27, THIS IS ENOUGH.

# FOR BANKS G/E 30, THE THIRD COMPONENT OF NOUN 26 (PRIO, ADRES, BBCON)
# MUST BE PRELOADED WITH THE DESIRED SUPERBANK BITS (BITS 5,6,7).
#          V23N26 SHOULD BE USED.

# SUMMARY
# FOR BANKS L/E 27,                          V27N01E(FCADR)E
# FOR BANKS G/E 30,    V23N26E(SUPERBITS)E   V27N01E(FCADR)E

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

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

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.

DSPOCTWD        TS      CYL
                XCH     Q
                TS      WDRET           # MUST USE SAME RETURN AS DSP2BIT.
                CAF     BIT14           # TO BLANK SIGNS
                ADS     DSPCOUNT
                CAF     FOUR
WDAGAIN         TS      WDCNT
                CS      CYL
                CS      CYL
                CS      CYL
                CS      A
                MASK    DSPMSK
                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.
                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 MANY OF THE 
                TS      DSEXIT          # ROUTINES CALLING DSPIN USE L AS RETURN.
                CAF     LOW5
                MASK    COUNT
                TS      SR
                XCH     SR
                TS      DSREL
                CAF     BIT1
                MASK    COUNT
                CCS     A
                TC      +2              # LEFT IF COUNT IS ODD
                TC      DSPIN1 -1       # RIGHT IF COUNT IS EVEN
                XCH     CODE
                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
                                        # +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,75777, OR 74037
                MASK    DSMAG
                AD      CODE
                CS      A
                INDEX   DSREL
                XCH     DSPTAB
                EXTEND
                BZMF    DSLV            # DSPTAB ENTRY WAS -
                INCR    NOUT            # DSPTAB ENTRY WAS +
DSLV            RELINT
                TC      DSEXIT
                
DSMSK           OCT     37
                OCT     1740
                OCT     2000
                OCT     3740
                

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

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

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

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

PREDSPAL        CS      VD1
                TS      DSPCOUNT
DSPALARM        CS      NVSBENDL
                AD      ENTEXIT
                EXTEND
                BZF     CHARALRM +2
CHARALRM        TC      FALTON          # NOT NVSUB INITIATED. TURN ON OPR ERROR
                TC      ENDOFJOB
                TC      ABORT
                OCT     01501
NVSBENDL        TC      NVSUBEND

## Sundance 292

# 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

## Sundance 306

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

                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
                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 WITH
# COMPONENT 1  DELAY (LOW BITS)
# COMPONENT 2  TASK ADRES (12 BIT)
# COMPONENT 3  BBCON

VBRQWAIT        CAF     TCWAIT
                TS      MPAC            # TC WAITLIST INTO MPAC
                CA      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
                
# 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, RESEQUENCE,
# END OF LOAD.

# KEY RELEASE ROUTINE

# THIS ROUTINE ALWAYS TURNS OFF THE UPACT LIGHT AND ALWAYS CLEARS DSPLOCK.

# THE HIGHEST PRIORITY FUNCTION OF THE KEY RELEASE BUTTON IS THE
# UNSUSPENDING OF A SUSPENDED MONITOR WHICH WAS EXTERNALLY INITIATED.
# THIS FUNCTION IS ACCOMPLISHED BY CLEARING DSPLOCK AND TURNING OFF
# THE KEY RELEASE LIGHT IF BOTH DSPLIST AND CADRSTOR ARE EMPTY.

# IF NO SUCH MONITOR EXISTS, THEN RELDSP IS EXECUTED TO CLEAR DSPLOCK
# AND THE EXTERNAL MONITOR BIT (FREEING THE DISPLAY SYSTEM FOR INTERNAL
# USE), TURN OFF THE KEY RELEASE LIGHT, AND WAKE UP ANY JOB IN DSPLIST.

# IN ADDITION IF THERE IS A JOB IN ENDIDLE, THEN CONTROL IS TRANSFERRED
# TO PINBRNCH (IN DISPLAY INTERFACE ROUTINE) TO RE-EXECUTE THE SERIES OF
# NVSUB CALLS ETC. THAT PRECEDED THE ENDIDLE CALL STILL AWAITING RESPONSE.
# THIS FEATURE IS INTENDED FOR USE WHEN THE OPERATOR HAS BEEN REQUESTED TO
# RESPOND TO SOME INTERNAL ACTION THAT USED ENDIDLE, BUT HE HAS WRITTEN
# OVER THE INFORMATION ON THE DISPLAY PANEL BY SOME DISPLAYS OF HIS OWN
# INITIATION WHICH DO NOT SERVE AS RESPONSES. HITTING KEY RLSE WILL
# RE-ESTABLISH THE DISPLAYS TO THE STATE THEY WERE IN BEFORE HE OBSCURED
# THEM, SO THAT HE CAN SEE THE WAITING REQUEST.  THIS WORKS ONLY FOR
# INTERNAL PROGRAMS THAT USED ENDIDLE THROUGH MARGARETS DISPLAY
# SUBROUTINES.

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

## Sundance 292

# NVSUB IS USED FOR SUB ROUTINE CALLS FROM WITHIN COMPUTER. IT CAN BE
# USED TO CALL THE COMBINATION OF ANY DISPLAY, LOAD, OR MONITOR VERB
# TOGETHER WITH ANY NOUN AVAILABLE TO THE KEYBOARD.
# PLACE 0VVVVVVVNNNNNNN INTO A.
# V-S ARE THE 7 BIT VERB CODE.  N-S ARE THE 7 BIT NOUN CODE.

# IF NVSUB IS CALLED WITH THE FOLLOWING NEGATIVE NUMBERS (RATHER THAN THE
# VERB-NOUN CODE) IN A, THEN THE DISPLAY IS BLANKED AS FOLLOWS-
#  -4 FULL BLANK, -3 LEAVE MODE, -2 LEAVE MODE AND VERB, -1 BLANK R-S ONLY

# NVSUB CAN BE USED WITH MACH CADR TO BE SPEC BY PLACING THE CADR INTO
# MPAC+2 BEFORE THE STANDARD NVSUB CALL.

#  NVSUB RETURNS TO 2+ CALLING LOC AFTER PERFORMING TASK, IF DISPLAY
# SYSTEM IS AVAILABLE. THE NEW NOUN AND VERB CODES ARE DISPLAYED.
# IF V:S =0, THE NEW NOUN CODE IS DISPLAYED ONLY(RETURN WITH NO FURTHER
# ACTION). IF N-S =0, THE NEW VERB CODE IS DISPLAYED ONLY(RETURN WITH NO
# FURTHER ACTION).

# IT RETURNS TO 1+ CALLING LOC WITHOUT PERFORMING TASK, IF DISPLAY
# SYSTEM IS BLOCKED (NOTHING IS DISPLAYED IN THIS CASE).
# IT DOES TC ABORT (WITH OCT 01501) IF IT ENCOUNTERS A DISPLAY PROGRAM
# ALARM CONDITION BEFORE RETURN TO CALLER.

# THE DISPLAY SYSTEM IS BLOCKED BY THE DEPRESSION OF ANY
# KEY, EXCEPT ERROR LIGHT RESET
# IT IS RELEASED BY THE KEY RELEASE BUTTON, ALL EXTENDED VERBS,
# PROCEED WITHOUT DATA, TERMINATE, RESEQUENCE, INITIALIZE EXECUTIVE,
# RECALL PART OF RECALTST IF ENDIDLE WAS USED,
# VB = REQUEST EXECUTIVE, VB = REQUEST WAITLIST,
# MONITOR SET UP.

# THE DISPLAY SYSTEM IS ALSO BLOCKED BY THE EXTERNAL MONITOR BIT, WHICH
# INDICATES AN EXTERNALLY INITIATED MONITOR IS RUNNING (SEE MONITOR)

# A NVSUB CALL THAT PASSES DSPLOCK AND THE EXTERNAL MONITOR BIT ENDS OLD
# MONITOR.

# DSPLOCK IS THE INTERLOCK FOR USE OF KEYBOARD AND DISPLAY SYSTEM WHICH
# LOCKS OUT INTERNAL USE WHENEVER THERE IS EXTERNAL KEYBOARD ACTION.

# NVSUB SHOULD BE USED TWICE IN SUCCESSION FOR :PLEASE PERFORM: SITUATIONS
# (SIMILARLY FOR PLEASE MARK). FIRST PLACE THE CODED NUMBER FOR WHAT
# ACTION IS DESIRED OF OPERATOR INTO THE REGISTERS REFERRED TO BY THE
# :CHECKLIST: NOUN. GO TO NVSUB WITH A DISPLAY VERB AND THE :CHECKLIST:
# NOUN. GO TO NVSUB AGAIN WITH THE :PLEASE PERFORM: VERB AND ZEROS IN THE
# LOW 7 BITS. THIS :PASTES UP: THE :PLEASE PERFORM: VERB INTO THE VERB
# LIGHTS.

# NVMONOPT IS AN ENTRY SIMILAR TO NVSUB, BUT REQUIRING AN ADDITIONAL
# PARAMETER IN L. IT SHOULD BE USED ONLY WITH A MONITOR VERB-NOUN CODE IN
# A. AFTER EACH MONITOR DISPLAY A *PLEASE* VERB WILL BE PASTED IN THE VERB
# LIGHTS OR DATA WILL BE BLANKED (OR BOTH) ACCORDING TO THE OPTIONS
# SPECIFIED IN L. IF BITS 8-14 OF L ARE OTHER THAN ZERO, THEN THEY WILL 
# BE INTERPRETED AS A VERB CODE AND PASTED IN THE VERB LIGHTS. (THIS VERB
# CODE SHOULD DESIGNATE ONE OF THE *PLEASE* VERBS.) IF BITS 1-3 OF L ARE
# OTHER THAN ZERO, THEN THEY WILL BE USED TO BLANK DATA BY BEING FED TO
# BLANKSUB. IF NVMONOPT IS USED WITH A VERB OTHER THAN A MONITOR VERB,
# THE PARAMETER IN L HAS NO EFFECT.

# NVSUB IN FIXED-FIXED PLACES 2+CALLING LOC INTO NVQTEM, TC NVSUBEND INTO
# ENTRET. (THIS WILL RESTORE OLD CALLING BANK BITS)

                SETLOC  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
                
## Sundance 306

                SETLOC  ENDRQWT +1
                
                COUNT*  $$/PIN
# BLANKDSP BLANKS DISPLAY ACCORDING TO OPTION NUMBER IN NVTEMP AS FOLLOWS
#  -4 FULL BLANK, -3 LEAVE MODE, -2 LEAVE MODE AND VERB, -1 BLANK R-S ONLY

BLANKDSP        AD      SEVEN           # 7,8,9,OR 10 (A HAD 0,1,2,OR 3)
                INHINT
                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 AGAINST INVISIBLE FLASH
                TC      ENTSET -2       # ZEROS REQRET
                
NVSUB1          CAF     ENTSET          # IN BANK
                TS      ENTRET          # SET RETURN TO NVSUBEND
                CCS     NVTEMP          # WHAT NOW
                TC      +4              # NORMAL NVSUB CALL (EXECUTE VN OR PASTE)
                TC      GODSPALM
                TC      BLANKDSP        # BLANK DISPLAY AS SPECIFIED
                TC      GODSPALM
                CAF     LOW7
                MASK    NVTEMP
                TS      MPAC +3         # TEMP FOR NOUN (CANT USE MPAC. DSPDECVN
                CA      NVTEMP          #                 USES MPAC, +1, +2
                TS      EDOP            # RIGHT 7
                CA      EDOP
                TS      MPAC +4         # TEMP FOR VERB (CANT USE MPAC+1. DSPDECVN
                                        #                USES MPAC, +1, +2).
                CCS     MPAC +3         # TEST NOUN
                TC      NVSUB2          # IF NOUN NOT +0, GO ON
                CA      MPAC +4 
                TC      UPDATVB -1      # IF NOUN = +0, DISPLAY VERB . THEN RETURN
                CAF     ZERO            # ZERO 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
                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

## Sundance 292

# 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  TC ENDIDLE  (FIXED FIXED)
# ROUTINES THAT REQUEST LOADS THROUGH NVSUB SHOULD USE ENDIDLE WHILE
# WAITING FOR THE DATA TO BE LOADED. ENDIDLE PUTS CURRENT JOB TO SLEEP.
# ENDIDLE CANNOT BE CALLED FROM ERASABLE OR F/F MEMORY,
# SINCE JOBSLEEP AND JOBWAKE CAN HANDLE ONLY FIXED BANKS.
# RECALTST TESTS LOADSTAT AND WAKES JOB UP TO,
# L+1      FOR TERMINATE
# L+2      FOR PROCEED WITHOUT DATA
# L+3      FOR DATA IN, OR RESEQUENCE
# IT DOES NOTHING IF LOADSTAT INDICATES WAITING FOR DATA.


# ENDIDLE 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 ENDIDLE WHEN
# 1) CADRSTOR NOT= +0. THIS IS THE CASE WHERE THE CAPACITY OF ENDIDLE IS
# EXCEEDED. (+-NZ INDICATE A JOB IS ALREADY ASLEEP DUE TO ENDIDLE.)
# 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 DSPLOCK 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      ABORT
                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.

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

## Sundance 306

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

TESTBIT         MASK    NVTEMP          # NVTEMP CONTAINS BLANKING CODE.
                CCS     A
                TC      Q               # IF CURRENT BIT = 1, RETURN TO L+1.
                INDEX   Q               # IF CURRENT BIT = 0, RETURN TO L+3.
                TC      2
                
ENDBSUB1        EQUALS

## Sundance 292

# 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

## Sundance 306

# 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
                
DOTERM          CAF     ZERO
                TC      RECAL2

DOPROC          CAF     ONE
                TC      RECAL2

## Sundance 292

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

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 FIRST CASE ONLY, BY MERELY TESTING C(A) AND IF IT = -0,
# SETTING RESULT TO -0.
#  (DO NOT USE PRSHRTMP UNLESS MPAC, +1 ARE EACH +NZ OR +0, AS THEY ARE
#  WHEN THEY CONTAIN TH E 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        # BIT 6 OF CHANNEL 11
                TC      Q
                
# 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 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
# 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
                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

# PINTEST IS NEEDED FOR AUTO CHECK OF PINBALL.

PINTEST         EQUALS  LST2FAN

## Sundance 306

# 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.
TSTCON2         OCT     40650           # DSPTAB+11D  BITS 4,6,8,9.
                                        # NO ATT, GIMBAL LOCK, TRACKER, PROG ALM.
TSTCON3         OCT     00115           # CHAN 11  BITS 1, 3, 4, 7.
                                        # UPLINK ACTIVITY, TEMP, OPERATOR ERROR.
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      BIT7
                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.
13-11,1         OCT     16001
RFAILS2         OCT     330             # RADAR CDU AND DATA FAIL FLAGS.
OCT55000        OCT     55000
ENDPINS2        EQUALS

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

                SETLOC  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      BIT7
                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
                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
back to top