Raw File
Q,R-AXES_REACTION_CONTROL_SYSTEM_AUTOPILOT.agc
### FILE="Main.annotation"
## Copyright:   Public domain.
## Filename:    Q,R-AXES_REACTION_CONTROL_SYSTEM_AUTOPILOT.agc
## Purpose:     A section of Sunburst revision 37, or Shepatin revision 0.
##              It is part of an early development version of the software
##              for Apollo Guidance Computer (AGC) on the unmanned Lunar
##              Module (LM) flight Apollo 5. Sunburst 37 was the program
##              upon which Don Eyles's offline development program Shepatin
##              was based; the listing herein transcribed was actually for
##              the equivalent revision 0 of Shepatin.
##              This file is intended to be a faithful transcription, except
##              that the code format has been changed to conform to the
##              requirements of the yaYUL assembler rather than the
##              original YUL assembler.
## Reference:   pp. 491-519
## Assembler:   yaYUL
## Contact:     Ron Burkey <info@sandroid.org>.
## Website:     www.ibiblio.org/apollo/index.html
## Mod history: 2017-05-24 MAS  Created from Sunburst 120.
##              2017-06-01 HG   Transcribed
##              2017-06-15 HG   Fix operator DXCH -> TS
##                                           DAS  -> ADS
##                                           DXCH -> XCH
##                                           TC   -> TCF
##                                           BZMF -> BZF
##                              change value MCOMPTQR  DEC -16  -> OCTAL 77765
##		2017-06-22 RSB	Proofed comment text with
##				octopus/ProoferComments.

## Page 491
                BANK            17
                EBANK=          DT
# THE FOLLOWING T5RUPT ENTRY BEGINS THE PROGRAM WHICH CONTROLS THE Q,R-AXIS ACTION OF THE LEM USING THE RCS JETS.
# THE NOMINAL TIME BETWEEN THE Q,R-AXIS RUPTS IS 100 MS (UNLESS THE TRIM GIMBAL CONTROL SYSTEM IS USED, IN WHICH
# CASE THIS PROGRAM IS IDLE).

                EBANK=          DT
NULLFILT        2CADR           FILDUMMY

QRAXIS          CAF             MS30QR                  # RESET TIME IMMEDIATELY: DT = 30 MS
                TS              TIME5

                LXCH            BANKRUPT                # INTERRUPT LEAD IN (CONTINUED)
                EXTEND
                QXCH            QRUPT

# SET UP A DUMMY KALMAN FILTER T5RUPT.  (THIS MAY BE RESET TO THE KALMAN FILTER INITIALIZATION PASS, IF THE TRIM
# GIMBAL CONTROL SYSTEM SHOULD BE USED.)

                EXTEND
                DCA             NULLFILT
                DXCH            T5ADR

# CALCULATE LEM BODY RATES FOR Q AND R AXES:

# THIS COMPUTATION IS VALID FOR BOTH ASCENT AND DESCENT SINCE THE OFFSET ACCELERATION TERM IS INCLUDED ALWAYS,
# BUT HAS VALUE ZERO IN DESCENT, AND SINCE THE WEIGHTING FACTORS ARE IN ERASABLE AND DISTINCT.

# FIRST, CONSTRUCT Y AND Z CDU INCREMENTS:

                CAE             CDUY                    # 2'S COMPLEMENT MEASUREMENT SCALED AT PI
                TS              L                       # (SAVE FOR UPDATING OF OLDYFORQ)
                EXTEND                                  # FORM INCREMENT IN CDUY FOR LAST 100 MS
                MSU             OLDYFORQ                # (100 MS OLD CDUY SAVED FROM LAST PASS)
                LXCH            OLDYFORQ                # UPDATE OLDYFORQ WITH NEW CDUY VALUE
                EXTEND                                  # RESCALE DELTA CDUY FROM PI RADIANS TO
                MP              BIT7                    # PI/2(6) RADIANS BY MULTIPLYING BY 64
                LXCH            ITEMP1                  # SAVE 1'S COMPLEMENT VALUE TEMPORARILY
                CAE             CDUZ                    # 2'S COMPLEMENT MEASUREMENT SCALED AT PI
                TS              L                       # (SAVE FOR UPDATING OF OLDZFORQ)
                EXTEND                                  # FORM INCREMENT IN CDUZ FOR LAST 100 MS
                MSU             OLDZFORQ                # (100 MS OLD CDUZ SAVED FROM LAST PASS)

                LXCH            OLDZFORQ                # UPDATE OLDZFORQ WITH NEW CDUZ VALUE
                EXTEND                                  # RESCALE DELTA CDUZ FROM PI RADIANS TO
                MP              BIT7                    # PI/2(6) RADIANS BY MULTIPLYING BY 64
                LXCH            ITEMP2                  # SAVE 1'S COMPLEMENT VALUE TEMPORARILY

## Page 492
# SECOND, TRANSFORM CPU INCREMENTS TO BODY-ANGLE INCREMENTS:

                CAE             M31                     # MATRIX*VECTOR(WITH X COMPONENT ZERO)
                EXTEND
                MP              ITEMP1                  # M31 * ITEMP1 = M31 * DELTA CDUY
                TS              ITEMP3
                CAE             M32                     # M32 * ITEMP2 = M32 * DELTA CDUZ
                EXTEND
                MP              ITEMP2                  # DELTAR = M31*(DEL CDUY) + M32*(DEL CDUZ)
                ADS             ITEMP3                  # R_BODY_ANGLE INCREMENT SCALED AT PI/2(6)

                CAE             M21                     # MATRIX*VECTOR(WITH X COMPONENT ZERO)
                EXTEND                                  # CLOBBERS ITEMP2=DEL CDUZ, FOR EFFICIENCY
                MP              ITEMP1                  # M21 * ITEMP1 = M21 * DELTA CDUY
                XCH             ITEMP2                  # M22 * ITEMP2 = M22 * DELTA CDUZ
                EXTEND
                MP              M22                     # DELTAQ = M21*(DEL CDUY) + M22*(DEL CDUZ)
                ADS             ITEMP2                  # Q_BODY_ANGLE INCREMENT SCALED AT PI/2(6)

# FINALLY, DERIVE Q AND R BODY ANGULAR RATES:

                EXTEND                                  # WFORQR IS K/(NOMINAL DT) SCALED AT 16
                MP              WFORQR                  # FORM WEIGHTED VALUE OF MEASURED DATA
                XCH             OMEGAQ                  # SAVE AND BEGIN TO WEIGHT VALUE OF OLD W
                EXTEND                                  # (1-K) IS SCALED AT 1 FOR EFFICIENT CALC
                MP              (1-K)                   # (K CHANGES EVERY 2 SECONDS IN ASCENT.)

                AD              JETRATEQ                # WEIGHTED TERM DUE TO JET ACCELERATION
                AD              AOSQTERM                # TERM DUE TO ASCENT OFFSET ACCELERATION
                ADS             OMEGAQ                  # TOTAL RATE ESTIMATE SCALED AT PI/4

                CAE             ITEMP3                  # GET DELTAR
                EXTEND                                  # WFORQR IS K/(NOMINAL DT) SCALED AT 16
                MP              WFORQR                  # FORM WEIGHTED VALUE OF MEASURED DATA
                XCH             OMEGAR                  # SAVE AND BEGIN TO WEIGHT VALUE OF OLD W
                EXTEND                                  # (1-K) IS SCALED AT 1 FOR EFFICIENT CALC
                MP              (1-K)                   # (K CHANGES EVERY 2 SECONDS IN ASCENT.)
                AD              JETRATER                # WEIGHTED TERM DUE TO JET ACCELERATION
                AD              AOSRTERM                # TERM DUE TO ASCENT OFFSET ACCELERATION
                ADS             OMEGAR                  # TOTAL RATE ESTIMATE SCALED AT PI/4

                TC              QJUMPADR
SKIPQRAX        CA              NORMQADR
                TS              QJUMPADR
                TCF             RESUME
NORMQADR        GENADR          NORMALQ
NORMALQ         CAF             BIT13                   # CHECKING ATTITUDE HOLD BIT
                EXTEND
                RAND            31                      # BITS INVERTED
                EXTEND

                BZF             CHKBIT10

## Page 493
                CAF             BIT14                   # ATT HOLD BIT NOT PRESENT. CHECK FOR AUTO
                EXTEND
                RAND            31
                EXTEND
                BZF             ATTSTEER                # AUTOMATIC STEERING, CHECK FOR RATE HOLD
                EXTEND                                  # IF MODE SELECT SW OFF DO DAPIDLER NEXT
                DCA             IDLEADRQ
                DXCH            T5ADR

                TCF             RESUME

                EBANK=          DT
IDLEADRQ        2CADR           DAPIDLER
CHKBIT10        CAF             BIT10                   # BIT10=1 FOR MIN IMP USE OF RHC
                MASK            DAPBOOLS
                EXTEND
                BZF             CHEKSTIK                # IN ATT-HOLD/RATE-COMMAND IF BIT10=0

                CAE             DELAYCTR                # SET TO 2 BY RUPT 10
                EXTEND
                BZF             XTRANS

                CA              MINTADR
                TS              TJETADR

                CA              BIT1
                EXTEND
                RAND            31
                EXTEND
                BZF             2JETS+Q

                CA              BIT2
                EXTEND
                RAND            31
                EXTEND
                BZF             2JETS-Q

                CA              BIT5
                EXTEND
                RAND            31
                EXTEND
                BZF             2JETS+R

                CA              BIT6
                EXTEND
                RAND            31
                EXTEND
                BZF             2JETS-R

                TCF             XTRANS

## Page 494
MINTJET         CAF             +T6TJMIN
                TS              TQR
                CA              ZERO
                TS              DELAYCTR
                TCF             TORQUEV

CHEKSTIK        CAF             BIT15                   # OUT-OF-DETENT BIT
                EXTEND
                RAND            31                      # BITS INVERTED

                EXTEND
                BZF             RHCACTIV                # BRANCH IF OUT OF DETENT
                CA              BIT1                    # OUR RATE COMMAND BIT
                MASK            DAPBOOLS

                EXTEND
                BZMF            ATTSTEER                # AUTOMATIC STEERING, CHECK FOR RATE HOLD
# WE WERE IN RATE COMMAND AND RATES MUST BE MADE SMALLER

#  ARE RATES SMALL ENOUGH NOW
                CA              OMEGAP
                EXTEND
                SQUARE
                DXCH            ITEMP1

                CA              OMEGAQ
                EXTEND
                SQUARE
                DAS             ITEMP1

                CA              OMEGAR
                EXTEND
                SQUARE
                DAS             ITEMP1

# WE NOW HAVE SQUARED MAGNITUDE OF RATE VECTOR IN ITEMP1
                CS              16/32400                # 1 DEG/SEC SCALED AT PI.PI/16
                AD              ITEMP1

                EXTEND
                BZMF            RATESMAL

#          THE RATE IS NOT SMALL ENOUGH YET.

                CA              OMEGAQ
                TS              QRATEDIF
                CA              OMEGAR
                TS              RRATEDIF
                TCF             OBEYQRRC

RATESMAL        CS              BIT1

## Page 495
                MASK            DAPBOOLS                # RATE COMMAND BIT SET TO ZERO
                TS              DAPBOOLS

                CAE             CDUX
                TS              CDUXD
                CAE             CDUY
                TS              CDUYD
                CAE             CDUZ
                TS              CDUZD

RHCACTIV        CAF             BIT1
                MASK            DAPBOOLS
                EXTEND
                BZF             XTRANS                  # LET P AXIS SET THE RATE COMMAND BIT
# COMPUTE RATE ERRORS
                CAE             Q-RHCCTR
                EXTEND
                MP              BIT9
                CA              -.88975

                EXTEND
                MP              L                       # -Q RATE COMMAND SCALED AT PI/4
                AD              OMEGAQ
                TS              QRATEDIF

                CAE             R-RHCCTR
                EXTEND
                MP              BIT9
                CA              -.88975
                EXTEND
                MP              L                       # -R RATE COMMAND SCALED AT PI/4.
                AD              OMEGAR
                TS              RRATEDIF

# ZERO,ENABLE,AND START COUNTERS 99
                CAF             ZERO
                TS              P-RHCCTR
                TS              Q-RHCCTR
                TS              R-RHCCTR
                CAF             BIT8,9
                EXTEND
                WOR             13

OBEYQRRC        CA              RTJETADR
                TS              TJETADR

                CCS             QRATEDIF
                TCF             POSQEROR
                TCF             NOQJETS
                TCF             NEGQEROR

## Page 496
NOQJETS         CCS             RRATEDIF                # CHECK SIGN OF RATE ERROR AND GET ABVAL
                TCF             R+,CHKDB

                TCF             XTRANS
                TCF             R-,CHKDB
                TCF             XTRANS

NEGQEROR        AD              -RATEDB
                EXTEND
                BZMF            NOQJETS

                CCS             RRATEDIF
                TCF             R+Q-CHKR
                TCF             Q-NORJTS
                TCF             R-Q-CHKR

Q-NORJTS        CS              QRATEDIF
                TS              RATEDIF
                AD              -2JETLIM
                EXTEND
                BZMF            2JETS+Q
                TCF             4JETS+Q

R+Q-CHKR        AD              -RATEDB
                EXTEND
                BZMF            Q-NORJTS

                TC              EDOTVGEN
                TCF             2-V.RATE

R-Q-CHKR        AD              -RATEDB
                EXTEND
                BZMF            Q-NORJTS
                TC              EDOTUGEN
                EXTEND
                SU              RRATEDIF
                TCF             2+U.RATE

POSQEROR        AD              -RATEDB
                EXTEND
                BZMF            NOQJETS

                CCS             RRATEDIF
                TCF             R+Q+CHKR
                TCF             Q+NORJTS
                TCF             R-Q+CHKR

Q+NORJTS        CA              QRATEDIF
                TS              RATEDIF
                AD              -2JETLIM

                EXTEND
                BZMF            2JETS-Q

## Page 497
                TCF             4JETS-Q

R+Q+CHKR        AD              -RATEDB
                EXTEND
                BZMF            Q+NORJTS
                TC              EDOTUGEN
                TCF             2-U.RATE

R-Q+CHKR        AD              -RATEDB
                EXTEND
                BZMF            Q+NORJTS
                TC              EDOTVGEN
                TCF             2+V.RATE

R+,CHKDB        AD              -RATEDB
                EXTEND
                BZMF            XTRANS
                CA              RRATEDIF
                TS              RATEDIF
                AD              -2JETLIM
                EXTEND
                BZMF            2JETS-R
                TCF             4JETS-R

R-,CHKDB        AD              -RATEDB
                EXTEND
                BZMF            XTRANS
                CS              RRATEDIF
                TS              RATEDIF
                AD              -2JETLIM
                EXTEND
                BZMF            2JETS+R

                TCF             4JETS+R

RTJETIME        CCS             RATEDIF                 # SCALED AT PI/4 RADIANS/SECOND
                AD              ONE
                TCF             +2
                AD              ONE                     # ABS(RATEDIF)
                EXTEND
                MP              1/NJETAC                # SCALED AT 2(8)/PI SECOND(2)/RADIANS
                EXTEND
                MP              BIT4                    # SCALED AT 2(3) SECONDS
                CAE             L
                EXTEND
                MP              25/32.QR                # TJET NOW PROPERLY SCALED IN A
                TS              TQR                     # AT 2(4)16/25 SECONDS
                TCF             TORQUEV

## Page 498
# DAPSECTION: XTRANS              MOD. NO. 1  DATE: NOVEMBER 20, 1966

# AUTHOR: JOHN S. BLISS (ADAMS ASSOCIATES)

# MODIFICATION BY: JONATHAN D. ADDELSTON (ADAMS ASSOCIATES)

# X-AXIS TRANSLATION LOGIC (IN THE ABSENSE OF Q,R-AXIS ROTATION) IS INITIATED IN THE "XTRANS" SECTION.

# XTRANS FIRST SETS ADDTLT6 AND ADDT6JTS TO ZERO FOR USE BY "JTLST" AND "T6JOB" WHEN THEY ARE CALLED.  IT THEN
# CHECKS FOR PLUS OR MINUS X TRANSLATION REQUESTS FROM THE ASTRONAUT'S STICK.  IF NONE IS REQUESTED IN THAT WAY,
# THE ULLAGE BIT OF DAPBOOLS IS CHECKED.  (NOTE THAT THE ORDER OF THE TESTS ALLOWS THE ASTRONAUT TO OVERRIDE THE
# INTERNAL ULLAGE REQUEST.)  IF NO TRANSLATION IS REQUESTED, ALL Q,R-AXIS JETS ARE TURNED OFF AND THE INTERRUPT
# IS TERMINATED.


# CALLING SEQUENCE: NONE.         SUBROUTINES CALLED: +/-TRANS

# NORMAL EXIT: 1. IF NO TRANSLATION: RESUME.
#              2.IF SOME TRANSLATION: +/-TRANS.

# ALARM/ABORT MODE: NONE.

# INPUT:  ULLAGER/DAPBOOLS,BITS7,8/CHANNEL 31.

# OUTPUT: C(ANYTRANS) = NEGMAX FOR +X TRANSLATION.
#         C(ANYTRANS) = POSMAX FOR -X TRANSLATION.
#         C(TRANSNOW) = C(TRANSAVE) = +0.
#         C(TRANONLY) = PNZ.

# DEBRIS: A,L,


XTRANS          CAF             ZERO                    # PICK UP ZERO AND INITIALIZE
                TS              ADDTLT6
                TS              ADDT6JTS

                TS              TQR                     # A ZERO OF JET TIME FOR THE TORQUE VEXTOR

                CAF             BIT7                    # IS PLUS X TRANSLATION DESIRED

                EXTEND
                RAND            31                      # CHANNEL 31 BITS INVERTED
                EXTEND
                BZF             +XORULGE                # YES, +X

                CAF             BIT8                    # NO, IS MINUS X TRANSLATION DESIRED
                EXTEND
                RAND            31                      # CHANNEL 31 BITS INVERTED
                EXTEND
                BZF             -XTRANS                 # YES, -X

                CAF             BIT6                    # NO, IS ULLAGE(+X TRANSLATION) DESIRED
                MASK            DAPBOOLS

## Page 499
                CCS             A
                TCF             +XORULGE                # YES, ULLAGE

                CAF             ZERO                    # SINCE NEITHER ROTATION NOR TRANSLATION
                EXTEND                                  # ARE NEEDED, TURN OFF ALL JETS FOR THE
                WRITE           5                       # Q,R-AXES.

                TCF             RESUME

+XORULGE        CAF             NEGMAX                  # PLUS TRANSLATION OR ULLAGE DESIRED:
                TCF             +2                      # LOAD NEGMAX IN A AND SKIP NEXT OPCODE TO

-XTRANS         CAF             POSMAX                  # -X TRANSLATION DESIRED, A = POSMAX, AND
                TS              ANYTRANS                # LOAD ANYTRANS WITH A(NEG/POS MAX)

                CAF             ZERO                    # INITIALIZE TRANSNOW AND TRANSAVE WITH
                TS              TRANSNOW                # ZERO FOR USE IN THE JET POLICY SELECTION
                TS              TRANSAVE                # PROGRAM.

                EXTEND                                  # SET UP 2CADR FOR TRANSFER TO +/-XTRAN.
                DCA             JTPOLADR
                TS              TRANONLY                # STORE POSITIVE, NON-ZERO S-REGISTER IN
                DTCB                                    # TRANONLY.  AFTER +/-XTRAN, GO TO JTLST.

                EBANK=          JTSONNOW
JTPOLADR        2CADR           +/-XTRAN                # TRANSLATION ONLY ENTRY TO JET POLICY

## Page 500
# DO NECESSARY PARTS OF Q,R-AXES TORQUE VECTOR RECONSTRUCTION HERE AND NOW.  FOR OTHER PARTS WAIT UNTIL THE NEXT
# P-AXIS RCS DAP T5RUPT.

NORMRETN        TS              TQR


TORQUEV         CS              TQR                     # CALCULATED Q,R JET TIME (AS IN TIME6)
                AD              +T6TJMIN
                EXTEND                                  #   CORRECT BRANCH.
                BZMF            TQRGTTMI                # BRANCH FOR TQR = OR GREATER THAN MINIMP.
                CA              ZERO
                TS              TOFJTCHG                # SINCE TQR LESS THAN A MINIMUM IMPULSE,
                TCF             XTRANS                  # SEE IF TRANSLATION IS DESIRED .
TQRGTTMI        CAE             TQR
                TS              TOFJTCHG
                AD              -1.5CSP
                EXTEND
                BZMF            DOQRSKIP
                CAE             JTSONNOW
                TC              WRITEQR                 # TURN ON QR JETS USING T6JOB SUBROUTINE.
                TCF             RESUME

SKIPQRAD        GENADR          SKIPQRAX
DOQRSKIP        CA              SKIPQRAD
                TS              QJUMPADR

# CHANGE JET ON AND OFF BITS TO ACCOUNT FOR THE PRESENT STATE OF THE
#   CHANNEL. THE CHANGES ACCOUNT FOR PURE ROTATION ONLY- NOT TRANSLATION.
                CA              JTSONNOW                # = JETS WHICH ARE TO GO ON NOW.
                EXTEND
                RAND            5                       # MASK THE CHANNEL WITH THE DESIRED STATE.
                EXTEND
                BZF             NOQRON                  # A IS ZERO IF NO JETS TO GO ON ARE ON.
                AD              BIT15                   # MAKE DIFFERENCE CORRESPOND TO A QR JET.
                EXTEND
                SU              JTSONNOW                # RESULT IS COMPLEMENT OF JET BITS WHICH
                TS              L                       #   ARE TO BE ON FOR 6.5MS MORE THAN CALC.
                EXTEND
                BZF             JTSAREON                # A=0,THUS ALL JETS TO GO ON ARE NOW ON.
TRSLTMN2        CAE             JTSATCHG
                MASK            POSMAX                  # REMOVE BIT15 FROM JTSATCHG.
                EXTEND
                BZF             NOTRANS                 # IF JTSATCHG = 0 THEN NO TRANSLATION NOW.
                CA              14-TQRMN
                ADS             TOFJTCHG                # INSURE T GREATER THAN 14 MS.
                TCF             TOJTLST
NOTRANS         CS              L
                AD              BIT15                   # MAKE JET BITS CORRESPOND TO QR AXIS.
                XCH             JTSATCHG                # JTSONNOW - L = JETS ON AT TOFJTCHG.

                TS              ADDT6JTS                # JTS ON AT TOFJTCHG +ONDELAY.

## Page 501
                CA              14-TQRMN
                TS              ADDTLT6
                TCF             TOJTLST
NOQRON          CA              14-TQRMN
                ADS             TOFJTCHG
                CA              ZERO
                TS              ADDTLT6
                TCF             TOJTLST

JTSAREON        CAE             JTSATCHG
                MASK            POSMAX
                EXTEND
                BZF             +3
                CAF             MCOMPTQR
                ADS             TOFJTCHG
                CA              ZERO
                TS              ADDTLT6
TOJTLST         CA              JTSONNOW
                TC              WRITEQR
                EXTEND
                DCA             JTLSTADR
                DTCB
-1.5CSP         DEC             -0.01465
+T6TJMIN        DEC             +.00073
25/32.QR        DEC             0.78125
MS20QR          OCTAL           37776
MS30QR          OCTAL           37775
MS50QR          OCTAL           37773
16/32400        DEC             0.00049
BIT8,9          OCTAL           00600
MCOMPTQR        OCTAL           77765                   # -10 MS COMPUTATION TIME
14-TQRMN        DEC             11

MINTADR         GENADR          MINTJET
-.88975         DEC             -.88975
(1-K),QR        DEC             0.50000                 # K = 1/2
(1-KQ)/8        DEC             0.06250
-90MS           DEC             -.00879
+90MS           DEC             0.00879
NEGCSP2         DEC             -.00977
ALL+XJTS        OCTAL           40252
2,10-OUT        OCTAL           00201
+X,A            OCTAL           40042
+X,B            OCTAL           40210
1,9-OUT         OCTAL           00104
-X,A            OCTAL           40104
-X,B            OCTAL           40021
                EBANK=          JTSONNOW
JTLSTADR        2CADR           JTLST
RTJETADR        GENADR          RTJETIME

## Page 502
# Q,R-AXES ATTITUDE STEERING CALCULATIONS:

# (EXECUTED WHEN LGC IS IN AUTOMATIC SCSMODE OR IF SCSMODE IS ATTITUDE HOLD AND THE ROTATIONAL HAND CONTROLLER IS
# NEITHER OUT OF DETENT NOR IS THE RATE COMMAND BIT SET IN DAPBOOLS)

# IMMEDIATELY AFTER CALCULATING THE ATTITUDE ERRORS, THE FOLLOWING TESTS ARE MADE TO DETERMINE WHETHER THE DESCENT
# ENGINE TRIM GIMBAL SHOULD BE USED TO CONTROL THE LEM ATTITUDE RATHER THAN THE RCS JETS:

#          1) IS THE TRIM GIMBAL FUNCTIONALLY OPERATIVE?
#          2) ARE THE Q,R-AXES RCS JETS OFF?
#          3) ARE BOTH TRIM GIMBAL DRIVES OFF?
#          4) IS THE LEM RATE LESS THAN .5 DEG/SEC ABOUT BOTH AXES?

GOTOGTS         CAF             INITFILT                # ERRORS NOW CONTROLLABLE BY TRIM GIMBAL

                TS              T5ADR                   # SET T5RUPT TO GO TO FILTER INITIALIZING
                TCF             RESUME                  # PROGRAM

BGIM24          OCTAL           07400
DESCADR         GENADR          TJETLAW
INITFILT        GENADR          FILTINIT                # ADDRESS OF FILTER INITIALIZATION RUPT

# "ATTSTEER" IS THE NOMINAL ENTRY POINT FOR REACTION CONTROL SYSTEM ATTITUDE STEERING:
# BEGIN ATTSTEER BY CHECKING IF RATE HOLD MODE(CURRENTLY USED ONLY AT SIVB
# -LEM SEPARATION-206 MISSION PHASE 6) IS REQUESTED(BIT 14 OF DAPBOOLS ON)
# IF BIT 14 IS OFF, BRANCH TO QERRCALC DIRECTLY AND BEGIN AUTOMATIC
# STEERING.  IF BIT 14 IS ON, TEST BIT 3 OF DAPBOOLS TO SEE IF THE DESIRED
# RATE HAS BEEN SAVED YET.  IF IT IS ON, THIS IS NOT THE FIRST PASS AND
# THE RATE HAS BEEN SAVED.  GO DIRECTLY TO QERRCALC FOR AUTOMATIC STEERING
# IF THE BIT IS OFF, THE RATE MUST BE SAVED.  TRANSFER TO SAVERATE(BANK25)
# AND RETURN AFTER FIRST PASS TO RESUME AND DAPIDLER.

# IN ORDER TO USE RATE HOLD, THE MISSION PROGRAMMER MUST SET BIT 14 OF
# DAPBOOLS ON AND SET BIT 3 OF DAPBOOLS TO ZERO.  UPON RETURNING FROM THE
# FIRST PASS AT LEAST THROUGH RATE HOLD, THE MISSION PROGRAMMER MUST RESET
# BIT 3 TO ITS PREVIOUS VALUE IF THIS IS NOT 1, BECAUSE SAVERATE SETS BIT3
# TO 1 FOR ALL PASSES AFTER THE FIRST IN ORDER NOT TO SAVE THE RATE AGAIN.


# IN ADDITION TO NON-RATE HOLD MODE AND NON-FIRST PASS RATE HOLD MODE
# EXITS TO QERRCALC, THE FIRST PASS EXITS TO RESUME, IE. OUT OF INTERRUPT
# AND BACK TO DAPIDLER TO AWAIT THE NEXT CALL TO DAP.

# RATE HOLD PRODUCES THE FOLLOWING OUTPUT IN ERASABLE --

#    CDUD - SCALED AT +/-PI, DESIRED GIMBAL ANGLE

#    DELCDU - SCALED AT +/-PI, INCREMENT TO CDUD EVERY 100 MS.

#    OMEGAPD, QD, RD - SCALED AT +/-PI/4, BODY AXIS RATES

# ALL THESE ARE USED BY AUTOMATIC STEERING MODE EQUATIONS.

## Page 503
# RATE HOLD REQUIRES OMEGAP, Q, R EVERY .25 SEC, AND ALSO REQUIRES PILOT-
# TO-GIMBAL AXIS MATRIX ELEMENTS, MR12, 22, 13, 23 TO BE LOCATED IN THAT
# ORDER.

# FINALLY, RATE HOLD LEAVES DEBRIS IN --

#    DLCDUIDX - LOOP INDEX USED IN COMPUTING DELCDUS, =1, 0

#    ITEMP1 - STORES TEMPORARY PRODUCTS AND SUMS, LEFT WITH DELCDUY IN 1S.



ATTSTEER        CS              DAPBOOLS		# DOES BIT14 OF DAPBOOLS REQUEST RATE HOLD
                MASK            BIT14			# (SIVB-LEM SEPARATION)
                CCS             A
                TCF             QERRCALC		# NO, GO DIRECTLY TO AUTOMATIC STEERING

# CHECK DAPBOOLS, BIT3, TO SEE IF DESIRED RATE HAS BEEN SAVED YET

# TO COMPUTE THE DELCDUS, Y AND Z, WE SET UP A LOOP AND SOLVE THE EQUATION

#  C(DELCDUY+DLCDUIDX)=(OMEGAQ).C(MR12+DLCDUIDX)+OMEGARD.C(MR13+DLCDUIDX))
#                         .(100MS) SCALED AT PI IN 2S COMPLEMENT(LIKE CDUS)

# DURING THIS COMPUTATION, ITEMP1 IS USED TO STORE THE PARTIAL SUMS AND
# PRODUCTS.  DELCDUY IS RESCALED TO 1 AS MR12 AND MR13 ARE SCALED AT 2.
# AFTER CONVERTING TO TWOS COMPLEMENT, WE SET DELCDUX TO ZERO TO AVOID ANY
# ROLL DURING RATE HOLD MODE.  NOTE THAT DELCDUS ARE COMPUTED IN THE NEGA-
# TIVE TO ALLOW 2S COMP. MOD. SUBTRACT LATER ON (CDU-(-DELCDU))

                CAF             ONE                     # SET UP LOOP INDEX TO COMPUTE DELCDUS.
NEXDLCDU        TS              DLCDUIDX                # DLCDUIDX = C(A)

                CS              OMEGAQD                 # DLCDUIDX = 1              DLCDUIDX = 0
                EXTEND                                  # ITEMP1=-OMEGAQD.MR22
                INDEX           DLCDUIDX
                MP              MR12                    # MR22 SCALED AT 1       MR12 SCALED AT 2
                TS              ITEMP1                  #                     ITEMP1=-OMEGAQD.MR12

                CS              OMEGARD                 # C(A)=ITEMP1 -OMEGARD.MR23
                EXTEND
                INDEX           DLCDUIDX                #                C(A)=ITEMP1 -OMEGARD.MR13
                MP              MR13                    # MR23 SCALED AT 1        MR13 SCALED AT 2

                AD              ITEMP1
                EXTEND                                  # DELT = 100 MS. SCALED AT 4 SEC.
                MP              100MSCAL
                TS              ITEMP1                  # ITEMP1 = C(A) . DELT

                CCS             DLCDUIDX                # CHECK INDEX FOR RESCALING
                TCF             +3                      # DELCDUZ SCALED AT PI/4, RESCALE UNNEEDED

## Page 504
                CAE             ITEMP1                  # DELCDUY SCALED AT PI/2, RESCALE BY
                ADS             ITEMP1                  # ADDING TO ITSELF

                CCS             ITEMP1                  # CONVERT DELCDUS TO TWOS COMPLEMENT (SAME
                AD              ONE                     # AS CDUS).  ADD ONE TO RESTORE PRE-CCS A
                TCF             STODLCDU                # STORE DIRECT IF POSITIVE ZERO
                COM                                     # COMPLEMENT IF NEGATIVE, CCS INCREMENTS
STODLCDU        INDEX           DLCDUIDX                # IF NEGATIVE ZERO, STORE POSITIVE ZERO
                TS              DELCDUY                 # STORE FINAL DELCDUZ OR DELCDUY

                CCS             DLCDUIDX                # TEST INDEX DLCDUIDX, EITHER 1 OR 0
                TCF             NEXDLCDU                # IF 1, DO DELCDUY
                TS              DELCDUX                 # DELCDUZ,Y DONE, 0 TO DELCDUX-NO ROLL

QERRCALC        CAE             CDUY                    # Q-ERROR CALCULATION
                EXTEND
                MSU             CDUYD                   # CDU ANGLE - ANGLE DESIRED (Y-AXIS)
                TS              ITEMP1                  # SAVE FOR RERRCALC
                EXTEND
                MP              M21                     # (CDUY-CDUYD)*M21 SCALED AT PI RADIANS
                XCH             ER                      # SAVE FIRST TERM (OF TWO) IN OPP.AXIS REG
                CAE             CDUZ                    # SECOND TERM CALCULATION:
                EXTEND
                MSU             CDUZD                   # CDU ANGLE -ANGLE DESIRED (Z-AXIS)
                TS              ITEMP2                  # SAVE FOR RERRCALC
                EXTEND

                MP              M22                     # (CDUZ-CDUZD)*M22 SCALED AT PI RADIANS
                ADS             ER                      # SAVE SUM OF TERMS, NO OVERFLOW EVER
                TS              QERROR                  # SAVE QERROR FOR EIGHT-BALL DISPLAY

RERRCALC        CAE             ITEMP1                  # R-ERROR CALCULATION:
                EXTEND                                  # CDU ANGLE -ANGLE DESIRED (Y-AXIS)
                MP              M31                     # (CDUY-CDUYD)*M31 SCALED AT PI RADIANS
                XCH             E                       # SAVE FIRST TERM (OF TWO) IN OPP.AXIS REG
                CAE             ITEMP2                  # SECOND TERM CALCULATION:
                EXTEND                                  # CDU ANGLE -ANGLE DESIRED (Z-AXIS)
                MP              M32                     # (CDUZ-CDUZD)*M32 SCALED AT PI RADIANS
                ADS             E                       # SAVE SUM OF TERMS, NO OVERFLOW EVER
                TS              RERROR                  # SAVE R-ERROR FOR EIGHT-BALL DISPLAY

# TEST (1): IS THE TRIM GIMBAL FUNCTIONALLY OPERATIVE?

                CAF             BIT2                    # ETST TO SEE IF LEM AND DAP MODES ALLOW
                MASK            DAPBOOLS                # USE OF TRIM GIMBAL CONTROL SYSTEM:
                CCS             A                       # BIT2 = 0 MEANS THAT TRIM GIMBAL CONTROL
                TCF             STILLRCS                # IS POSSIBLE, SO TEST OTHER TG CONDITIONS

# TEST (2): ARE THE Q,R-AXES RCS JETS OFF?
                EXTEND                                  # BUT, IF JETS ARE OFF AND TRIM GIMBAL MAY

                READ            5                       # POSSIBLY BE USED: BEING IN THE JET COAST

## Page 505
                CCS             A                       # REGION OF THE PHASE PLANE IS A NECESSARY
                TCF             STILLRCS                # BUT INSUFFICIENT REASON FOR GTS USE

# TEST(3): ARE BOTH TRIM GIMBAL DRIVES OFF?

                EXTEND                                  # BITS 9-12 OF CHANNEL 12 ARE THE SIGNALS
                READ            12                      # WHICH DRIVE THE TRIM GIMBAL ENGINE:
                MASK            BGIM24                  # IF NONE OF THESE BITS ARE ON, THEN BOTH

                CCS             A                       # WAITLIST TASKS TO TURN OFF THE DRIVES
                TCF             STILLRCS                # HAVE BEEN DONE AND GTS CONTROL CAN OCCUR

# TEST(4): IS THE LEM RATE LESS THAN .5 DEG/SEC ABOUT BOTH AXES?

                CA              BIT1
LOOPTOP         TS              QRCNTR
                DOUBLE
                INDEX           A
                CCS             OMEGAQ                  # IS ERROR RATE SMALL ENOUGH FOR GTS.
                AD              -RATLM+1                # -.5 DEG/SEC SCALED AT PI/4 + 1 BIT
                TCF             +2
                AD              -RATLM+1
                EXTEND
                BZMF            +2                      # IS RATE LESS,EQUAL .5 DEG/SEC.
                TCF             STILLRCS                # NO.      SO USE RCS.
                INDEX           QRCNTR                  # YES.     TRY THE ERROR MAGNITUDE.
                CCS             QDIFF                   # IS ERROR SMALL ENOUGH FOR GTS.
                AD              -XBND+1                 # -1.4 DEG SCALED AT PI    + 1 BIT
                TCF             +2
                AD              -XBND+1
                EXTEND
                BZMF            +2                      # IS ERROR LESS,EQUAL 1.4 DEG.

                TCF             STILLRCS                # NO.      USE RCS CONTROL.
                CCS             QRCNTR                  # THIS AXIS IS FINE.   ARE BOTH DONE.
                TCF             LOOPTOP                 # NOW TRY THE Q AXIS.
                TCF             GOTOGTS                 # TRANSFER TO TRIM GIMBAL CONTROL
-RATLM+1        OCT             77512                   # -.5 DEG/SEC SCALED AT PI/4  + 1 BIT
-XBND+1         OCT             77601                   # -1.4 DEG SCALED AT PI, + 1 BIT.
# "STILLRCS" IS THE ENTRY POINT TO RCS ATTITUDE STERRING WHENEVER IT IS FOUND THAT THE TRIM GIMBAL CONTROL
# SYSTEM SHOULD NOT BE USED;

# BRANCH TO SPSRCS WHEN BIT 15 = 0 FOR SPS BACKUP

STILLRCS        CCS             DAPBOOLS
                TCF             SPSBAKUP
                NOOP
                CAF             DESCADR                 # SET JET SELECT LOGIC RETURN ADDRESS TO
                TS              TJETADR                 # THE Q,R-AXIS TJETLAW CALCULATION

                TC              T6JOBCHK                # CHECK T6 CLOCK RUPT BEFORE SUBROUTINE

## Page 506

# Q,R-AXES URGENCY FUNCTION LOOP:

# SET UP LOOP TO DO R-AXIS, THEN Q-AXIS:

                CAF             ONE                     # 1: REFERS TO R-AXIS VARIABLES.
                TS              AXISCNTR                # 2: REFERS TO Q-AXIS VARIABLES.

# PICK UP EDOT AND RESCALE FROM PI/4 TO PI/16 RADIANS/SECOND:

URGLOOP         INDEX           AXISCNTR                # ERROR RATES ARE PRE-CALCULATED BY RATE
                CAE             EDOTQ                   # DERIVATION SCALED AT PI/4 RADIANS/SECOND
                EXTEND                                  # MULTIPLYING BY FOUR (BIT3) LEAVES EDOT
                MP              FOUR                    # AS C(L) IF EDOT LESS THAN 11.25 DEG/SEC.
                EXTEND

                BZF             +2                      # IF C(A) NON-ZERO, THEN EDOT GREATER THAN
                TCF             EDOTMAX                 # 11.25 DEG/SEC IN MAGNITUDE, SO LIMIT IT.

                CCS             L                       # INSURE NON-ZERO EDOT:
                AD              TWO                     # C(L) PNZ REMAINS UNCHANGED.
                TCF             +2                      # C(L) NNZ REMAINS UNCHANGED.
                COM                                     # C(L)  +0 BECOMES 77776.
                AD              NEG1                    # C(L)  -0 BECOMES 77776.
EDOTSTOR        TS              EDOT                    # SAVE NON-ZERO EDOT SCALED AT PI/16.

                EXTEND                                  # CALCULATE (EDOT)(EDOT):
                SQUARE
                TS              EDOT(2)                 # SCALED AT PI(2)/2(+8) RAD(2)/SEC(2).

                EXTEND                                  #  0.5               +8       2
                INDEX           AXISCNTR                # ------  SCALED AT 2  /PI SEC /RAD.
                MP              1/ACCQ                  # ACCQ,R
                EXTEND                                  # DEADBAND = 5.0 OR 1.0 OR 0.3 DEGREES
                SU              DB                      # SCALED AT PI RADIANS.
                TS              FPQR                    # 0.5(1/ACC)EDOT(2)-DB SCALED AT PI RADS.

                CAE             EDOT(2)                 # SCALED AT PI(2)/2(8) RAD(2)/SEC(2).
                EXTEND

                INDEX           AXISCNTR
                MP              1/AMINQ                 # .5(1/ACCMIN) 2(8)/PI SEC(2)/RAD.
                AD              DB                      # DEADBAND SCALED AT PI RADIANS.
                TS              FPQRMIN                 # .5(1/ACCMIN)EDOT(2)+DB SCALED AT PI RAD.

                CCS             EDOT                    # EDOT TEST ON SIGN (NON-ZERO):
                CAE             E                       # ATTITUDE ERROR FOR THIS AXIS
                TCF             +2                      # SCALED AT PI RADIANS.
                TCF             EDOTNEG
                ADS             FPQR                    # E+0.5(1/ACC)EDOT(2)-DB SCALED AT PI RAD.

FTEST           CCS             EDOT                    # EDOT GUARANTEED NOT +0 OR -0.
                CCS             FPQR                    # FPQR ---------- NOT +0.

## Page 507
                TCF             QUICKURG                # EDOT.G.+0, FPQR.G.+0.
                CCS             FPQR                    # EDOT.L.-0.
                TCF             FMINCALC                # EDOT.L.-0,FPQR.G.+0/EDOT.G.+0,FPQR.L.-0.
                TCF             FMINCALC                # EDOT.G.+0,FPQR.E.-0 (FROM FIRST CCS).
                TCF             QUICKURG                # EDOT.L.-0,FPQR.L.-0.

QUICKURG        CAE             EDOT                    # EDOT.L.-0,FPQR.E.-0 (FROM 2ND CCS).
                EXTEND                                  # SCALE FROM PI/16 TO PI RADIANS/SECOND
                MP              BIT11                   # TO HAVE SAME SCALING AS FPQR AFTER THE
                AD              FPQR                    # IMPLICIT MULT. OF FPQR BY 1/SEC.
                TCF             URGMULT                 # THIS URGENCY = (1/ACC)(FPQR+EDOT).

EDOTMAX         CCS             A                       # GUARANTEED NOT +0 OR -0.
                CAF             POSMAX
                TCF             EDOTSTOR                # SET EDOT TO SIGNED MAXIMUM.
                CS              POSMAX
                TCF             EDOTSTOR                # SCALED AT PI/16 RADIANS/SECOND.

EDOTNEG         CS              FPQR                    # SCALED AT PI RADIANS

                AD              E                       # ATTITUDE ERROR FOR THIS AXIS
                TS              FPQR                    # E-0.5(1/ACC)EDOT(2)+DB SCALED AT PI RAD.
                TCF             FTEST

FMINCALC        CCS             FPQR                    # NECESSARY RETEST ON FPQR;
                CS              FPQRMIN
                TCF             +2                      # E-0.5(1/ACCMIN)EDOT(2)-DB
                CAE             FPQRMIN
                AD              E                       # E+0.5(1/ACCMIN)EDOT(2)+DB
                TS              FPQRMIN                 # SCALED AT PI RADIANS.

                CCS             EDOT                    # EDOT    GUARANTEED NOT +0 OR -0.
                CCS             FPQRMIN                 # FPQRMIN GUARANTEED NOT +0 (CALL IT F).
                TCF             ZEROURG                 # EDOT.G.+0, F.G.+0.
                CCS             FPQRMIN                 # EDOT.L.-0.
                TCF             NORMURG                 # EDOT.L.-0, F.G.+0 / EDOT.G.+0, F.L.-0.
                TCF             NORMURG                 # EDOT.G.+0, F.E.-0 (FROM FIRST CCS).
                TCF             ZEROURG                 # EDOT.L.-0, F.L.-0.
ZEROURG         EXTEND                                  # EDOT.L.-0, F.E.-0 (FROM 2ND CCS).

                DCA             DPZEROY                 # THIS URGENCY IS ZERO.
                DXCH            URGENCYQ
                TCF             MOREURG                 # TEST FOR NEXT AXIS

NORMURG         CAE             FPQRMIN                 # THIS URGENCY IS FPQRMIN(1/ACC).
URGMULT         EXTEND
                INDEX           AXISCNTR
                MP              1/ACCQ
                DXCH            URGENCYQ                # SAVE D.P. SCALED AT 2(+9).

MOREURG         CCS             AXISCNTR                # TEST FOR END OF LOOP

## Page 508
                TCF             +2                      # CONTINUE.
                TCF             URGSCALQ                # FINISHED.

                TS              AXISCNTR                # Q-AXIS

                EXTEND
                DCA             URGENCYQ                # SET URGENCYR
                DXCH            URGENCYR

                DXCH            E                       # SET ER,EDOT(2)R
                DXCH            ER
                TS              EQ                      # SET EQ
                CAE             EDOT
                TS              EDOT(R)                 # SET EDOT(R).

                TCF             URGLOOP                 # CONTINUE.

# SUFFICIENT TEST FOR URGENCY RESCALING:

URGSCALR        CCS             URGENCYR                # IF ABVAL(URGENCYR) LESS THAN SCALE BOUND
                AD              SCALEBND
                TCF             +2                      # THEN BOTH URGENCIES CAN BE RESCALED FROM
                AD              SCALEBND
                EXTEND                                  # 2(+9) TO 2(+4) SECONDS.
                BZMF            URGSCALE
                TCF             URGLIMS

# RESCALE BOTH URGENCIES FROM 2(+9) TO 2(+4) SECONDS:

URGSCALE        CAE             URGENCYQ
                EXTEND
                MP              BIT6
                LXCH            URGENCYQ
                CAE             URGENCYQ        +1
                EXTEND
                MP              BIT6
                ADS             URGENCYQ

                CAE             URGENCYR
                EXTEND
                MP              BIT6
                LXCH            URGENCYR
                CAE             URGENCYR        +1
                EXTEND
                MP              BIT6
                ADS             URGENCYR

                CAF             URGLM2                  # SET URGENCY LIMIT FOR 2(+4) SCALING.
                TS              URGLIMIT
                TCF             URGFUDGE

## Page 509
URGRATQM        CAE             URGRATQ
                EXTEND
                MP              URGENCYQ
                TS              URGENCYQ
                TCF             URGFUDG1

URGRATRM        CAE             URGRATR
                EXTEND

                MP              URGENCYR
                TS              URGENCYR
                TCF             URGPLANE

URGLM1          DEC             -0.00586                # -3 SECONDS SCALED AT 2(+9)
URGLM2          DEC             -0.1875                 # -3 SECONDS SCALED AT 2(+4)
SCALEBND        DEC             -0.03105                # -16 SECONDS SCALED AT 2(+9)
DPZEROY         2DEC            0
# NECESSARY TEST FOR URGENCY RESCALING:

URGSCALQ        CCS             URGENCYQ                # IF ABVAL(URGENCYQ) LESS THAN SCALE BOUND
                AD              SCALEBND
                TCF             +2                      # THEN TEST URGENCYR FOR RESCALABLE
                AD              SCALEBND
                EXTEND                                  # MAGNITUDE.
                BZMF            URGSCALR

# USE URGENCY CORRECTION FACTOR RATIO WHEN NECESSARY:

URGLIMS         CAF             URGLM1                  # SET URGENCY LIMIT FOR 2(+9) SCALING
                TS              URGLIMIT


URGFUDGE        CAE             AOSQ                    # TEST ON ASOQ(URGENCYQ) GREATER THAN ZERO
                EXTEND

                BZF             URGFUDG1                # (IF AOSQ ZERO, DO NOT USE URGRATQ.)
                EXTEND
                MP              URGENCYQ                # IF PRODUCT NEGATIVE, APPLY URGRATQ.
                EXTEND
                BZMF            URGRATQM

URGFUDG1        CAE             AOSR                    # TEST ON AOSR(URGENCYR) GREATER THAN ZERO
                EXTEND
                BZF             URGPLANE                # (IF AOSR ZERO, DO NOT USE URGRATQ.)
                EXTEND
                MP              URGENCYR                # IF PRODUCT NEGATIVE, APPLY URGRATR.
                EXTEND
                BZMF            URGRATRM

URGPLANE        CAE             URGENCYQ                # BEGIN URGENCY-PLANE COMPUTATIONS:
                EXTEND

## Page 510
                BZF             BURGZERO                # TEST FOR BOTH URGENCIES ZERO

                EXTEND
                MP              -TAN22.5
                AD              URGENCYR
                EXTEND
                MP              COS22.5
                TS              TERMA                   # UR.COS(22.5)-UQ.SIN(22.5)

                CS              URGENCYR
                EXTEND
                MP              -TAN22.5
                AD              URGENCYQ
                EXTEND

                MP              COS22.5
                TS              TERMB                   # UR.SIN(22.5)+UQ.COS(22.5)

A+B/A-B         AD              TERMA
                TS              A+B
A-B/ONLY        CS              TERMB
                AD              TERMA
                TS              A-B

# AXIS AND MODE SELECTION

                CAE             TERMB                   # B URGENCY TEST
                EXTEND
                BZMF            NEGBURG

POSBURG         CAE             TERMA                   # A URGENCY TEST
                EXTEND
                BZMF            NETAPOSB

POSAPOSB        CAE             A-B
                EXTEND
                BZMF            MINUSU                  # NEGATIVE U-AXIS SELECTED

2/4JET-R        CAE             1/AMINR
                TS              .5ACCMNE
                EXTEND
                DCA             ER
                DXCH            E
                CAE             EDOT(R)
                TS              EDOT
                CAE             URGLIMIT
                AD              URGENCYR
                EXTEND
                BZMF            2JETS-R

4JETS-R         CS              ONE

## Page 511
                TCF             POLTYPE                 # GO FIND BEST POLICY

2JETS-R         CCS             NJ-R
                TCF             4JETS-R
                CS              TWO
                TCF             POLTYPE                 # GO FIND BEST POLICY

MINUSU          CAE             1/AMINU
                TS              .5ACCMNE
                CAE             URGENCYR
                AD              URGENCYR
                CCS             A
                AD              URGLIMIT
                TCF             +2
                AD              URGLIMIT
                EXTEND
                BZMF            2JETS-U

2JETSM-U        TC              UXFORM

2-U.RATE        CAF             THREE
                TCF             POLTYPE                 # GO FIND BEST POLICY

2JETS-U         CCS             NJ-U
                TCF             2JETSM-U
                TC              UXFORM
                CAF             TWO
                TCF             POLTYPE                 # GO FIND BEST POLICY

NETAPOSB        CAE             A+B
                EXTEND
                BZMF            PLUSV

2/4JET-Q        CAE             1/AMINQ
                TS              .5ACCMNE
                CAE             URGLIMIT
                AD              URGENCYQ
                EXTEND
                BZMF            2JETS-Q

4JETS-Q         CS              FIVE
                TCF             POLTYPE                 # GO FIND BEST POLICY

2JETS-Q         CCS             NJ-Q
                TCF             4JETS-Q
                CS              SIX
                TCF             POLTYPE                 # GO FIND BEST POLICY

PLUSV           CAE             1/AMINV
                TS              .5ACCMNE
                CS              URGENCYQ

## Page 512
                AD              URGENCYR
                CCS             A


                AD              URGLIMIT
                TCF             +2
                AD              URGLIMIT
                EXTEND
                BZMF            2JETS+V

2JETSM+V        TC              VXFORM
2+V.RATE        CAF             FIVE
                TCF             POLTYPE                 # GO FIND BEST POLICY

2JETS+V         CCS             NJ+V
                TCF             2JETSM+V
                TC              VXFORM
                CAF             FOUR
                TCF             POLTYPE                 # GO FIND BEST POLICY

BURGZERO        CAE             URGENCYR                # TEST FOR SECOND URGENCY ALSO ZERO
                EXTEND
                BZF             XTRANS                  # NO ROTATION NEEDED NOW

                EXTEND                                  # TIME SAVING A,B CALCULATION
                MP              SIN22.5
                TS              TERMB                   # UR.SIN(22.5)

                CAE             URGENCYR
                EXTEND
                MP              COS22.5
                TS              TERMA                   # UR.COS(22.5)
                TCF             A-B/ONLY

COS22.5         DEC             0.92388                 # COSINE OF 22.5 DEGREES
SIN22.5         DEC             0.38268                 # SINE OF 22.5 DEGREES
100MSCAL        DEC             0.025
-TAN22.5        DEC             -.41421                 # NEGATIVE OF TANGENT OF 22.5 DEGREES

NEGBURG         CAE             TERMA                   # A URGENCY TEST
                EXTEND
                BZMF            NEGANEGB

POSANEGB        CAE             A+B
                EXTEND
                BZMF            2/4JET+Q

MINUSV          CAE             1/AMINV
                TS              .5ACCMNE
                CS              URGENCYQ
                AD              URGENCYR

                CCS             A
                AD              URGLIMIT

## Page 513
                TCF             +2
                AD              URGLIMIT
                EXTEND
                BZMF            2JETS-V

2JETSM-V        TC              VXFORM
2-V.RATE        CAF             SEVEN
                TCF             POLTYPE                 # GO FIND BEST POLICY

2JETS-V         CCS             NJ-V
                TCF             2JETSM-V
                TC              VXFORM
                CAF             SIX
                TCF             POLTYPE                 # GO FIND BEST POLICY

NEGANEGB        CAE             A-B
                EXTEND
                BZMF            2/4JET+R

PLUSU           CAE             1/AMINU
                TS              .5ACCMNE
                CAE             URGENCYQ
                AD              URGENCYR
                CCS             A
                AD              URGLIMIT
                TCF             +2
                AD              URGLIMIT
                EXTEND
                BZMF            2JETS+U

2JETSM+U        TC              UXFORM
2+U.RATE        CAF             ONE

                TCF             POLTYPE                 # GO FIND BEST POLICY

2JETS+U         CCS             NJ+U
                TCF             2JETSM+U
                TC              UXFORM
                CAF             ZERO
                TCF             POLTYPE                 # GO FIND BEST POLICY

2/4JET+R        CAE             1/AMINR
                TS              .5ACCMNE
                EXTEND
                DCA             ER
                DXCH            E
                CAE             EDOT(R)
                TS              EDOT
                CAE             URGLIMIT
                AD              URGENCYR

                EXTEND

## Page 514
                BZMF            2JETS+R

4JETS+R         CS              THREE
                TCF             POLTYPE                 # GO FIND BEST POLICY

2JETS+R         CCS             NJ+R
                TCF             4JETS+R
                CS              FOUR
                TCF             POLTYPE                 # GO FIND BEST POLICY

2/4JET+Q        CAE             1/AMINQ
                TS              .5ACCMNE
                CAE             URGLIMIT
                AD              URGENCYQ

                EXTEND
                BZMF            2JETS+Q

4JETS+Q         CS              SEVEN
                TCF             POLTYPE                 # GO FIND BEST POLICY

2JETS+Q         CCS             NJ+Q
                TCF             4JETS+Q
                CS              EIGHT

# GENERALIZED CALLING SEQUENCE FOR ALL Q,R-AXES ROTATIONS (FROM BANK 17):

POLTYPE         TS              NETACNDX                # SAVE INDEX INDICATING AXIS, DIRECTION,
                EXTEND                                  # AND NUMBER OF JETS REQUESTED (THIS SPEC-
                DCA             POLADR                  # IFIES THE "OPTIMAL" POLICY.  TRANSFER
                DTCB                                    # ACROSS BANKS TO POLICY SELECTION ROUTINE

                EBANK=          JTSONNOW
POLADR          2CADR           POLTYPEP                # 2CADR OF JET POLICY SELECT ROUINTE.


## Page 515
# SUBROUTINES UXFORM AND VXFORM CALCULATE NEEDED VALUES FOR T-JET LAW
# (THEY GO OFF TO REDUCE RATE, IF NECESSARY, AND THEN DO NOT RETURN)

VXFORM          CAE             1/2JETSV                # GET INVERSE OF V-JET ACCELERATION
                TS              1/NJETAC
                CS              EQ                      # COMPLEMENT FOR TRANSFORMATION
                TS              EQ
                CS              EDOTQ
                TCF             UVXFORM         +1
UXFORM          CAE             1/2JETSU                # SET INVERSE OF U-JET ACCELERATION
                TS              1/NJETAC

UVXFORM         CAE             EDOTQ                   # TRANSFORM ANGULAR RATE TO U/V-AXIS
                AD              EDOTR
                EXTEND
                MP              .707
                TS              EDOT                    # SAVE FOR REDUCEUV
                EXTEND
                MP              BIT3
                EXTEND

                BZF             UVEDOT                  # BRANCH IF RESCALING SUCCESSFUL.

                CCS             A                       # LIMIT EDOT TO +/- 11.25 DEG/SEC.
                CAF             POSMAX
                TCF             UVEDOT1
                CS              POSMAX
                TCF             UVEDOT1

UVEDOT          CAE             L
UVEDOT1         TS              EDOT                    # RATE ERROR SCALED AT PI/16.
                EXTEND
                SQUARE
                TS              EDOT(2)                 # SAVE RATE SQUARED SCALED AT PI(2)/2(8)

-1.6CSP         DEC             -.01000			# 160 MS SCALED AT 2(4) SECONDS
+TJMINT6        DEC             +.00073
-TJMIN16        DEC             -.00047
-TJMINQR        EQUALS          -TJMIN16
38.5MAT4        DEC             0.00242                 # 38.75 MS SCALED AT 4
-MS35AT4        DEC             -.00219                 # -35MS SCALED AT 4
MAXRATE         DEC             0.88889                 # 10 DEGREES/SECOND SCALED AT PI/16
MAXRATE2        DEC             0.79012                 # 100 DEG(2)/SEC(2) SCALED AT PI(2)/2(8)
.6DEG/SC        DEC             0.05333                 # 6/10 DEGREES/SECOND SCALED AT PI/16

25/32QR         DEC             0.78125

## Page 516
# THESE TWO SUBROUTINES TRANSFORM EDOTQ,EDOTR INTO THE U/V-AXIS (RESPECTIVELY) FOR THE RATE COMMAND MODE (ONLY).
# VALUE IS STORED IN EDOTGEN SCALED AT PI/4 RADIANS/SECOND.

                BANK            17
EDOTUGEN        CAE             1/2JETSU                # FOR U-AXIS TRANSFORMATION
                TS              1/NJETAC
                CAE             EDOTQ
                TCF             +4
EDOTVGEN        CAE             1/2JETSV                # FOR V-AXIS TRANSFORMATION
                TS              1/NJETAC
                CS              EDOTQ
                AD              EDOTR
                EXTEND
                MP              .707
                TS              RATEDIF
                TC              Q



.707            DEC             0.70711

SPSBAKUP        EXTEND
                DCA             SPSRCSAD
                DXCH            Z
                EBANK=          DT
SPSRCSAD        2CADR           SPSRCS

## Page 517
# *********TJETLAW************************************************************************************************

TJETLAW         CS              EDOT                    # TEST ON EDOT SIGN:
                EXTEND
                BZMF            +4
                TS              EDOT                    # SIGNS OF E AND EDOT CHANGED IF EDOT NEG,
                CS              E                       # TO CONSIDER FUNCTIONS IN THE UPPER HALF
                TS              E                       # OF THE E-DOT PHASE PLANE.

                CAE             EDOT(2)                 # SCALED AT PI(2)/2(+8) RAD(2)/SEC(2)
                EXTEND                                  # 1/NETACC HAS BEEN SET FOR N-JETS WITH
                MP              1/NETACC                # IMPLICIT FACTOR OF (1/2).
                AD              E                       # ATTITUDE ERROR SCALED AT PI RADIANS.
                EXTEND                                  # DEADBAND VALUE SCALED AT PI RADIANS.
                SU              DB                      # E+.5EDOT/NETACC-DB
                TS              HDAP                    # SCALED AT PI RADIANS.

                EXTEND
                BZMF            NEGHDAP

                CAE             EDOT                    # RATE ERROR; LIMITED TO +/- 11.25 DEG/SEC
                EXTEND                                  # SCALED AT PI/LG RADIANS/SECOND.
                MP              1/NETACC                # SCALED AT 2(+8)/PI SEC(2)/RAD: (ACC) (-1)
                DDOUBL                                  # SCALED AT 2(+4) SECONDS.
                TS              TERMA

                AD              -1.6CSP                 # EDOT/NETACC-1.6CSP SCALED AT 16 SECONDS.
                EXTEND
                BZMF            +3

MAXTJET         CAF             BIT14                   # (1/2) IS LIKE POSMAX AT THIS SCALING.
                TCF             NORMRETN                # (OVERFLOW IS PREVENTED IN THIS WAY.)

                CS              HDAP                    # DBMINIMP-E-EDOT(2)/NETACC+DB
                AD              MINIMPDB                # SCALED AT PI RADIANS.
                EXTEND                                  # (DURING APS BURNS DBMINIMP=-DB)
                BZMF            MAINBRCH

                CAE             TERMA                   # EDOT/NETACC-35MS SCALED AT 16 SECONDS.
                AD              -MS35AT4
                EXTEND                                  # COMPARE TIME-TO-GET-ZERO-RATE WITH 35MS.
                BZMF            INZONE4

                AD              38.5MAT4                # TIME-TO-GET-ZERO-RATE + 1/2 MINIMP.
                TCF             TJETSCAL

INZONE4         CAE             NO.QJETS                # IF NO Q-AXIS JETS THEN MUST HAVE R-AXIS
                EXTEND
                BZF             ROTRAXIS

## Page 518
                CAE             OMEGAQD                 # WITH Q-AXIS JETS, ZERO THE RATE ERROR.
                TS              OMEGAQ

                CAE             NO.RJETS                # IF NO R-AXIS JETS, THEN Q-AXIS JETS WERE
                EXTEND                                  # ALREADY FOUND.
                BZF             DOTJMIN

ROTRAXIS        CAE             OMEGARD                 # WITH R-AXIS JETS, ZERO THE RATE ERROR.
                TS              OMEGAR

DOTJMIN         CAF             +TJMINT6                # USE MINIMUM IMPULSE DT FOR TQR.
                TCF             NORMRETN

NEGHDAP         CAE             EDOT(2)                 # RATE ERROR SQUARED SCALED AT PI(2)/2(8).

                EXTEND
                MP              .5ACCMNE                # .5(1/ACCMIN) AT 2(8)/PI SEC(2)/RAD.
                AD              E                       # ATTITUDE ERROR SCALED AT PI RADIANS
                AD              DB                      # DEADBANDS (2) SCALED AT PI RADIANS
                AD              DBMINIMP                # (DURING APS BURNS DBMINIMP = 0.)
                EXTEND
                BZMF            +2
                TCF             XTRANS                  # NO ROTATION JETS NEEDED.

 +2             CS              MAXRATE                 # 10 DEGREES/SECOND SCALED AT PI/16.
                AD              EDOT                    # EDOT-MAXRATE SCALED AT PI/16 RAD/SEC.
                EXTEND
                BZMF            +2
                TCF             XTRANS

 +2             CS              EDOT                    # RATE ERROR SCALED AT PI/16 RAD/SEC.
                EXTEND                                  # (LIMITED TO +/< 11.25 DEG/SEC.)
                MP              1/NETACC                # SCALED AT 2(+8)/PI SEC(2)/RAD; (ACC):-1)
                DDOUBL                                  # SCALED AT 2(34) SECONDS.
                TS              TERMA

                CS              HDAP                    # -E+.51EDOT(2)/NETACC+DB
                AD              E

                AD              E                       # TWICE ERROR NEGATES E OF HDAP(ABOVE)
                AD              MINIMPDB
MAINBRCH        TS              HDAP                    # -HDAP(ABOVE)+2E+DBMINIMP AT PI RADIANS.

                CAE             1/NETACC                # .5(1/NETACC+1/ACCMIN) SCALED AT 2(8)/PI.
                ADS             .5ACCMNE                # .5ACCMNE NOW HOLDS DENOM.

                EXTEND                                  # DENOM(MAXRATE(2)).HDAP AT PI RADIANS.
                MP              MAXRATE2
                AD              HDAP
                EXTEND
                BZMF            NOROOT
## Page 519
                CAE             HDAP                    # +(HDAP/DENOM)(1)NETACC)(2) AT 2(8) SELS.
                EXTEND
                DV              .5ACCMNE
                EXTEND
                MP              1/NETACC
                EXTEND
                MP              1/NETACC
                DDOUBL
                DDOUBL
                TS              TERMB

                CAF             -1.6CSP                 # -1.6(CSP)-EDOT/NETACC SCALED AT  16 SECS
                AD              TERMA
                EXTEND
                SQUARE                                  # (-1.6(CSP)-EDOT/NETACC)(2)   AT 256 SECS
                AD              TERMB
                EXTEND                                  # (-1.6(CSP)-EDOT/NETACC)(2)+TERMB
                BZMF            MAXTJET


                CAF             -TJMIN16                # -EDOT/NETACC-TJMIN SCALED AT 16.
                AD              TERMA
                EXTEND
                BZMF            MAYNOJET

PREROOT         TC              T6JOBCHK

                CS              TERMB
                TC              SPROOT                  # SQRT(-TERMB) SCALED AT 2(4) SECONDS.
TJSUM           AD              TERMA                   # TERMA+SQRT(-TERMB)

TJETSCAL        DOUBLE                                  # NOW SCALED AT 2(+3) SECONDS.
                EXTEND
                MP              25/32QR                 # SCALED TO 16/25 2(+4) SECONDS.
                TCF             NORMRETN

NOROOT          CAF             MAXRATE
                AD              .6DEG/SC                # MAXRATE+DEL SCALED AT PI/16 RAD/SEC.
                EXTEND
                MP              1/NETACC                # (MAXRATE+DEL)/NETACC
                DDOUBL                                  # SCALED AT 2(+4) SECONDS
                TCF             TJSUM


MAYNOJET        CAF             -TJMIN16
                AD              TERMA                   # TERMA-TJMIN SCALED AT 2(+4) SECONDS.
                EXTEND
                SQUARE                                  # SCALED AT 2(+8) SECONDS.
                AD              TERMB
                EXTEND
                BZMF            PREROOT                 # (TERMA-TJMIN)(2)+TERMB AT 2(8) SECONDS.
                TCF             XTRANS                  # NO ROTATION JETS.
back to top