Revision 3577d0b1de1ac147c1710524517c563b2bfe231c authored by Ronald Burkey on 30 May 2021, 19:14:00 UTC, committed by GitHub on 30 May 2021, 19:14:00 UTC
Issue 1143: Fix various symbol name and other minor typos
2 parent s bc21d6b + 8d274f6
Raw File
FINDCDUW_-_GUIDAP_INTERFACE.agc
### FILE="Main.annotation"
## Copyright:   Public domain.
## Filename:    FINDCDUW_-_GUIDAP_INTERFACE.agc
## Purpose:     A section of LUM69 revision 2.
##              It is part of the reconstructed source code for the flown
##              version of the flight software for the Lunar Module's (LM)
##              Apollo Guidance Computer (AGC) for Apollo 10. The code has
##              been recreated from a copy of Luminary revsion 069, using
##              changes present in Luminary 099 which were described in
##              Luminary memos 75 and 78. The code has been adapted such
##              that the resulting bugger words exactly match those specified
##              for LUM69 revision 2 in NASA drawing 2021152B, which gives
##              relatively high confidence that the reconstruction is correct.
## Reference:   pp. 907-924
## Assembler:   yaYUL
## Contact:     Ron Burkey <info@sandroid.org>.
## Website:     www.ibiblio.org/apollo/index.html
## Mod history: 2019-07-27 MAS  Created from Luminary 69.

## Page 907
# PROGRAM NAME:   FINDCDUW

# MOD NUMBER:     1         68 07 15

# MOD AUTHOR:     KLUMPP

# OBJECTS OF MOD: 1.        TO SUPPLY COMMANDED GIMBAL ANGLES FOR NOUN 22.
#                 2.        TO MAINTAIN CORRECT AND CURRENT THRUST
#                           DIRECTION DATA IN ALL MODES.  THIS IS DONE BY
#                           FETCHING FOR THE THRUST DIRECTION FILTER THE
#                           CDUD'S IN PNGCS-AUTO, THE CDU'S IN ALL OTHER
#                           MODES.
#                 3.        TO SUBSTITUTE A STOPRATE FOR THE NORMAL
#                           AUTOPILOT COMMANDS WHENEVER
#                           1) NOT IN PNGCS-AUTO, OR
#                           2) ENGINE IS OFF.

# FUNCTIONAL DESCRIPTION:

# FINDCDUW PROVIDES THE INTERFACES BETWEEN THE VARIOUS POWERED FLITE GUIDANCE PROGRAMS
# AND THE DIGITAL AUTOPILOT.  THE INPUTS TO FINDCDUW ARE THE THRUST COMMAND VECTOR
# AND THE WINDOW COMMAND VECTOR, AND THE OUTPUTS ARE THE GIMBAL ANGLE
# INCREMENTS, THE COMMANDED ATTITUDE ANGLE RATES, AND THE COMMANDED
# ATTITUDE LAG ANGLES (WHICH ACCOUNT FOR THE ANGLES BY WHICH THE BODY WILL
# LAG BEHIND A RAMP COMMAND IN ATTITUDE ANGLE DUE TO THE FINITE ANGULAR
# ACCELERATIONS AVAILABLE).

# FINDCDUW ALINES THE ESTIMATED THRUST VECTOR FROM THE THRUST DIRECTION
# FILTER WITH THE THRUST COMMAND VECTOR, AND, WHEN  XOVINHIB  SET,
# ALINES THE +Z HALF OF THE LM ZX PLANE WITH THE WINDOW COMMAND VECTOR.

## Page 908
# SPECIFICATIONS:

# INITIALIZATION: A SINGLE INTERPRETIVE CALL TO  INITCDUW  IS REQUIRED
#                 BEFORE EACH GUIDED MANEUVER USING FINDCDUW.

# CALL:           INTERPRETIVE CALL TO FINDCDUW WITH THE THRUST COMMAND
#                 VECTOR IN MPAC.  INTERPRETIVE CALL TO FINDCDUW -2 WITH
#                 THE THRUST COMMAND VECTOR IN UNFC/2 AND NOT IN MPAC.

# RETURNS:        NORMAL INTERPRETIVE IN ALL CASES

#                 1.       NORMALLY ALL AUTOPILOT CMDS ARE ISSUED.

#                 2.       IF NOT PNGCS AUTO, DO STOPRATE AND RETURN
#                          WITHOUT ISSUING AUTOPILOT CMDS.

#                 3.       IF ENGINE OFF, DO STOPRATE AND RETURN WITHOUT
#                          ISSUING AUTOPILOT CMDS.

# ALARMS:         00401 IF INPUTS DETERMINE AN ATTITUDE IN GIMBAL LOCK.
#                          FINDCDUW DRIVES CDUXD AND CDUYD TO THE RQD VALUES,
#                          BUT DRIVES CDUZD ONLY TO THE GIMBAL LOCK CONE.
#                 00402 IF UNFC/2 OR UNWC/2 PRODUCE OVERFLOW WHEN
#                          UNITIZED USING NORMUNIT.  FINDCDUW ISSUES
#                          STOPRATE AS ONLY INPUT TO AUTOPILOT.

# INPUTS:         UNFC/2   THRUST COMMAND VECTOR, NEED NOT BE SEMI-UNIT.
#                 UNWC/2   WINDOW COMMAND VECTOR, NEED NOT BE SEMI-UNIT.
#                 XOVINHIB FLAG DENOTING X AXIS OVERRIDE INHIBITED.
#                 CSMDOCKD FLAG DENOTING CSM DOCKED.
#                 STEERSW  FLAG DENOTING INSUFF THRUST FOR THRUST DIR FLTR.
#
# OUTPUTS:        DELCDUX,Y,Z
#                 OMEGAPD,+1,+2
#                 DELPEROR,+1,+2
#                 CPHI,+1,+2 FOR NOUN22
#
# DEBRIS:         FINDCDUW DESTROYS SINCDUX,Y,Z AND COSCDUX,Y,Z BY
#                 WRITING INTO THESE LOCATIONS THE SINES AND COSINES
#                 OF THE CDUD'S IN PNGCS-AUTO, OF THE CDU'S OTHERWISE.

## Page 909
# INITIALIZATION FOR FINDCDUW

                BANK            30
                SETLOC          FCDUW
                BANK

                EBANK=          ECDUW

                COUNT*          $$/FCDUW

INITCDUW        VLOAD
                                UNITX
                STORE           UNFV/2
                STORE           UNWC/2
                RVQ

# FINDCDUW PRELIMINARIES

                VLOAD                                   # FINDCDUW -2: ENTRY WHEN UNFC/2 PRE-STORD
                                UNFC/2                  # INPUT VECTORS NEED NOT BE SEMI-UNIT
FINDCDUW        BOV             SETPD                   # FINDCDUW: ENTRY WHEN UNFC/2 IN MPAC
                                FINDCDUW                # INTERPRETER NOW INITIALIZED
                                22                      # LOCS 0 THRU 21 FOR DIRECTION COSINE MAT
                STQ             EXIT
                                QCDUWUSR                # SAVE RETURN ADDRESS

# MORE HAUSKEEPING
                CA              ECDUWL
                XCH             EBANK                   # SET EBANK
                TS              ECDUWUSR                # SAVE USER'S EBANK

                CA              DAPBOOLS
                MASK            CSMDOCKD                # CSMDOCKD MUST NOT BE BIT15
                CCS             A
                CA              ONE                     # INDEX IF CSM DOCKED
                TS              NDXCDUW

                CA              XOVINHIB                # XOVINHIB MUST NOT BE BIT15
                TS              FLPAUTNO                # SET TO POS-NON-ZERO FLAG PNGCS AUTO NOT

                MASK            DAPBOOLS
                TS              FLAGOODW                # FLAGOODW = ANY PNZ NUMBER IF XOV INHIBTD

## Page 910
# FETCH BASIC DATA

                INHINT                                  # RELINT AT PAUTNO (TC INTPRET)

                CA              CDUX                    # FETCH CDUX,CDUY,CDUZ IN ALL CASES, BUT
                TS              CDUSPOTX                #      REPLACE BELOW IF PNGCS AUTO
                CA              CDUY
                TS              CDUSPOTY
                CA              CDUZ
                TS              CDUSPOTZ

                CA              BIT10                   # PNGCS CONTROL BIT
                EXTEND
                RAND            CHAN30
                CCS             A
                TCF             PAUTNO                  # NOT PNGCS (BITS INVERTED)

                CA              BIT14                   # AUTO MODE BIT
                EXTEND
                RAND            CHAN31
                CCS             A
                TCF             PAUTNO                  # NOT AUTO (BITS INVERTED)

                TS              FLPAUTNO                # RESET FLAG PNGCS AUTO NOT

                CA              CDUXD                   # PNGCS AUTO: FETCH CDUXD,CDUYD,CDUZD
                TS              CDUSPOTX
                CA              CDUYD
                TS              CDUSPOTY
                CA              CDUZD
                TS              CDUSPOTZ

## Page 911
# FETCH INPUTS

PAUTNO          TC              INTPRET                 # ENTERING THRUST CMD STILL IN MPAC
                RTB
                                NORMUNIT
                STOVL           UNX/2                   # SEMI-UNIT THRUST CMD AS INITIAL UNX/2
                                UNWC/2
                RTB             RTB
                                NORMUNIT
                                QUICTRIG                # ALWAYS RQD TO OBTAIN TRIGS OF CDUD'S
                STOVL           UNZ/2                   # SEMI-UNIT WINDOW CMD AS INITIAL UNZ/2
                                DELV
                BOVB            UNIT
                                NOATTCNT                # AT LEAST ONE ENTERING CMD VCT ZERO
                BOV             CALL
                                AFTRFLTR                # IF UNIT DELV OVERFLOWS, SKIP FILTER
                                *SMNB*                  # YIELDS UNIT(DELV) IN VEH COORDS FOR FLTR

# THRUST DIRECTION FILTER

                EXIT

                CA              UNFVY/2                 # FOR RESTARTS, UNFV/2 ALWAYS INTACT, MPAC
                LXCH            MPAC            +3      #       RENEWED AFTER RETURN FROM CALLER,
                TC              FLTRSUB                 #       TWO FILTER UPDATES MAY BE DONE.
                TS              UNFVY/2                 # UNFV/2 NEED NOT BE EXACTLY SEMI-UNIT.

                CA              UNFVZ/2
                LXCH            MPAC            +5
                TC              FLTRSUB
                TS              UNFVZ/2

                TC              INTPRET                 # COMPLETES FILTER

## Page 912
# FIND A SUITABLE WINDOW POINTING VECTOR

AFTRFLTR        SLOAD           BHIZ                    # IF XOV NOT INHIBITED, GO FETCH ZNB
                                FLAGOODW
                                FETCHZNB
                VLOAD           CALL
                                UNZ/2
                                UNWCTEST

FETCHZNB        VLOAD
                                ZNBPIP
                STCALL          UNZ/2
                                UNWCTEST

                VLOAD           VCOMP                   # Z AND -X CAN'T BOTH PARALLEL UNFC/2
                                XNBPIP
                STORE           UNZ/2

# COMPUTE THE REQUIRED DIRECTION COSINE MATRIX

DCMCL           VLOAD           VXV
                                UNZ/2
                                UNX/2
                UNIT            PUSH                    # UNY/2 FIRST ITERATION
                VXV             VSL1
                                UNX/2
                STORE           UNZ/2                   # -UNZ/2 FIRST ITERATION
                VXSC            PDVL                    # EXCHANGE -UNFVZ/2 UNZ/2 FOR UNY/2
                                UNFVZ/2                 # MUST BE SMALL
                VXSC            BVSU                    # YIELDS -UNFVY/2 UNY/2-UNFVZ/2 UNZ/2
                                UNFVY/2                 # MUST BE SMALL
                VSL1            VAD
                                UNX/2
                UNIT                                    # TOTALLY ELIMINATES THRUST POINTING ERROR
                STORE           UNX/2                   # UNX/2
                VXV             VSL1
                                UNZ/2                   # -UNZ/2 WAS STORED HERE REMEMBER
                STORE           UNY/2                   # UNY/2
                VCOMP           VXV
                                UNX/2
                VSL1
                STORE           UNZ/2                   # UNZ/2

## Page 913
# COMPUTE THE REQUIRED GIMBAL ANGLES

                CALL
                                NB2CDUSP                # YIELDS THE RQD GIMBAL ANGLES, 2'S, PI
                EXIT

# LIMIT THE MIDDLE GIMBAL ANGLE & COMPUTE THE UNLIMITED GIMBAL ANGLE CHGS

                CA              MPAC            +2      # LIMIT THE MGA
                TS              L                       # CAN'T LXCH: NEED UNLIMITED MGA FOR ALARM
                CA              CDUZDLIM
                TC              LIMITSUB                # YIELDS LIMITED MGA. 1 BIT ERROR POSSIBLE
                XCH             MPAC            +2      #      BECAUSE USING 2'S COMP. WHO CARES?
                EXTEND
                MSU             MPAC            +2      # THIS BETTER YIELD ZERO
                EXTEND
                BZF             +2
                TCF             ALARMMGA

MGARET          INHINT                                  # RELINT AT TC INTPRET AFTER TCQCDUW

                ZL
                CA              TWO
DELGMBLP        TS              TEM2

                CA              L                       # TO PREVENT FALSE STARTS ABOUT X, ZERO
                EXTEND                                  #      FLAGOODW IF DELGMBZ OR Y TOO BIG.
                SQUARE
                AD              HI5                     # WITHIN 1 BIT OF -(45 DEG SQUARED)
                EXTEND
                BZMF            +3
                CA              ZERO
                TS              FLAGOODW

                INDEX           TEM2
                CA              MPAC
                INDEX           TEM2
                TS              CPHI                    # OUTPUTS TO NOUN22
                EXTEND
                INDEX           TEM2
                MSU             CDUXD                   # NO MATTER THAT THESE SLIGHTLY DIFFERENT
                COM                                     #      FROM WHEN WE INITIALLY FETCHED THEM
                INDEX           TEM2
                TS              -DELGMB                 # -UNLIMITED GIMBAL ANGLE CHGS, 1'S, PI
                TS              L                       # FOR PRECEDING TEST ON NEXT LOOP PASS
                CCS             TEM2
                TCF             DELGMBLP

## Page 914
# BRANCHES TO NOATTCNT

                CCS             FLPAUTNO
                TCF             NOATTCNT        +2      # NOT PNGCS AUTO

                CA              FLAGWRD5
                MASK            ENGONBIT
                EXTEND
                BZF             NOATTCNT        +2      # ENGINE NOT ON

## Page 915
# LIMIT THE ATTITUDE ANGLE CHANGES
#
# THIS SECTION LIMITS THE ATTITUDE ANGLE CHANGES ABOUT A SET OF ORTHOGONAL VEHICLE AXES X,YPRIME,ZPRIME.
# THESE AXES COINCIDE WITH THE COMMANDED VEHICLE AXES IF AND ONLY IF CDUXD IS ZERO.  THE PRIME SYSTEM IS
# THE COMMANDED VEHICLE SYSTEM ROTATED ABOUT THE X AXIS TO BRING THE Z AXIS INTO ALINEMENT WITH THE MIDDLE GIMBAL
# AXIS.  ATTITUDE ANGLE CHANGES IN THE PRIME SYSTEM ARE RELATED TO SMALL GIMBAL ANGLE CHANGES BY:
#
# * -DELATTX      *   * 1  SIN(CDUZD)  0 * * -DELGMBX *
# *               *   *                  * *          *
# * -DELATTYPRIME * = * 0  COS(CDUZD)  0 * * -DELGMBY *
# *               *   *                  * *          *
# * -DELATTZPRIME *   * 0  0           1 * * -DELGMBZ *

                LXCH            -DELGMB         +2      # SAME AS -DELATTZPRIME UNLIMITED
                INDEX           NDXCDUW
                CA              DAZMAX
                TC              LIMITSUB
                TS              -DELGMB         +2      # -DELGMBZ

                CA              -DELGMB         +1
                EXTEND
                MP              COSCDUZ                 # YIELDS -DELATTYPRIME/2 UNLIMITED
                TS              L
                INDEX           NDXCDUW
                CA              DAY/2MAX
                TC              LIMITSUB
                EXTEND
                DV              COSCDUZ
                XCH             -DELGMB         +1      # -DELGMBY, FETCHING UNLIMITED VALUE

                EXTEND
                MP              SINCDUZ
                DDOUBL
                COM
                EXTEND                                  # YIELDS +DELATTX UNLIMITD, MAG < 180 DEG,
                MSU             -DELGMB                 #       BASED ON UNLIMITED DELGMBY.
                TS              L                       #       ONE BIT ERROR IF OPERANDS IN MSU
                INDEX           NDXCDUW                 #       OF MIXED SIGNS.  WHO CARES?
                CA              DAXMAX
                TC              LIMITSUB
                TS              -DELGMB                 # SAVE LIMITED +DELATTX
                CCS             FLAGOODW
                CS              -DELGMB                 # FETCH IT BACK CHGING SIGN IF WINDOW GOOD
                TS              -DELGMB                 # OTHERWISE USE ZERO FOR -DELATTX
                CS              -DELGMB         +1
                EXTEND
                MP              SINCDUZ
                DDOUBL                                  # YIELDS -CNTRIB TO -DELATTX FROM -DELGMBY
                ADS             -DELGMB                 # -DELGMBX.  NO OVERFLOW SINCE LIMITED TO
                                                        # 20DEG(1+SIN(70DEG)/COS(70DEG)) < 180DEG

## Page 916
# COMPUTE COMMANDED ATTITUDE RATES

# * OMEGAPD *   * -2  -4 SINCDUZ          +0         * * -DELGMBX *
# *         *   *                                    * *          *
# * OMEGAQD * = * +0  -8 COSCDUZ COSCDUX  -4 SINCDUX * * -DELGMBY *
# *         *   *                                    * *          *
# * OMEGARD *   * +0  +8 COSCDUZ SINCDUX  -4 COSCDUX * * -DELGMBZ *

# ATTITUDE ANGLE RATES IN UNITS OF PI/4 RAD/SEC = K TRIG FCNS IN UNITS OF 2 X GIMBAL ANGLE RATES IN UNITS OF
# PI/2 RAD/SEC.  THE CONSTANTS ARE BASED ON DELGMB BEING THE GIMBAL ANGLE CHANGES IN UNITS OF PI RADIANS,
# AND 2 SECONDS BEING THE COMPUTATION PERIOD (THE PERIOD BETWEEN SUCCESSIVE PASSES THRU FINDCDUW).

                CS              -DELGMB
                TS              OMEGAPD
                CS              -DELGMB         +1
                EXTEND
                MP              SINCDUZ
                DDOUBL
                ADS             OMEGAPD
                ADS             OMEGAPD

                CS              -DELGMB         +1
                EXTEND
                MP              COSCDUX
                DDOUBL
                EXTEND
                MP              COSCDUZ
                TS              OMEGAQD
                CS              -DELGMB         +2
                EXTEND
                MP              SINCDUX
                ADS             OMEGAQD
                ADS             OMEGAQD
                ADS             OMEGAQD

                CA              -DELGMB         +1
                EXTEND
                MP              SINCDUX
                DDOUBL
                EXTEND
                MP              COSCDUZ
                TS              OMEGARD
                CS              -DELGMB         +2
                EXTEND
                MP              COSCDUX
                ADS             OMEGARD
                ADS             OMEGARD
                ADS             OMEGARD

## Page 917
# FINAL TRANSFER

                CA              TWO
CDUWXFR         TS              TEM2
                INDEX           TEM2
                CA              -DELGMB
                EXTEND
                MP              DT/DELT                 # RATIO OF DAP INTERVAL TO CDUW INTERVAL
                TC              ONESTO2S
                INDEX           TEM2
                TS              DELCDUX                 # ANGLE INTERFACE

                INDEX           TEM2
                CCS             OMEGAPD
                AD              ONE
                TCF             +2
                AD              ONE
                EXTEND                                  # WE NOW HAVE ABS(OMEGAPD,QD,RD)
                INDEX           TEM2
                MP              OMEGAPD
                EXTEND
                MP              BIT11                   # 1/16
                EXTEND
                INDEX           TEM2                    #                  2
                DV              1JACC                   # UNITS PI/4 RAD/SEC
                TS              L
                CA              DELERLIM
                TC              LIMITSUB
                INDEX           TEM2
                TS              DELPEROR                # LAG ANGLE = OMEGA ABS(OMEGA)/2 ACCEL
                CCS             TEM2
                TCF             CDUWXFR

# HAUSKEEPING AND RETURN

TCQCDUW         CA              ECDUWUSR
                TS              EBANK                   # RETURN USER'S EBANK

                TC              INTPRET
                SETPD           GOTO
                                0
                                QCDUWUSR                # NORMAL AND ABNORMAL RETURN TO USER

## Page 918
# THRUST VECTOR FILTER SUBROUTINE

FLTRSUB         EXTEND
                QXCH            TEM2
                TS              TEM3                    # SAVE ORIGINAL OFFSET
                COM                                     # ONE MCT, NO WDS, CAN BE SAVED IF NEG OF
                AD              L                       #      ORIG OFFSET ARRIVES IN A, BUT IT'S
                EXTEND                                  #      NOT WORTH THE INCREASED OBSCURITY.
                INDEX           NDXCDUW
                MP              GAINFLTR
                TS              L                       # INCR TO OFFSET, UNLIMITED
                CA              DUNFVLIM                # SAME LIMIT FOR Y AND Z
                TC              LIMITSUB                # YIELDS INCR TO OFFSET, LIMITED
                AD              TEM3                    # ORIGINAL OFFSET
                TS              L                       # TOTAL OFFSET, UNLIMITED
                CA              UNFVLIM                 # SAME LIMIT FOR Y AND Z
                TC              LIMITSUB                # YIELDS TOTAL OFFSET, LIMITED
                TC              TEM2

# SUBR TO TEST THE ANGLE BETWEEN THE PROPOSED WINDOW AND THRUST CMD VCTS

UNWCTEST        DOT             DSQ
                                UNX/2
                DSU             BMN
                                DOTSWFMX
                                DCMCL
                SSP             RVQ                     # RVQ FOR ALT CHOICE IF DOT MAGN TOO LARGE
                                FLAGOODW                #      ZEROING WINDOW GOOD FLAG
                                0

## Page 919
# NB2CDUSP RETURNS THE 2'S COMPLEMENT, PI, SP CDU ANGLES X,Y,Z IN MPAC,+1,+2 GIVEN THE MATRIX WHOSE ROW VECTORS
# ARE THE SEMI-UNIT NAV BASE VECTORS X,Y,Z EXPRESSED IN STABLE MEMBER COORDINATES, LOCATED AT 0 IN THE PUSH LIST.

# NB2CDUSP USES ARCTRGSP WHICH HAS A MAXIMUM ERROR OF +-4 BITS.

NB2CDUSP        DLOAD           DSQ
                                2
                BDSU            BPL
                                DP1/4TH
                                +3
                DLOAD
                                ZEROVECS                # IN CASE SIN WAS SLIGHTLY > 1/2
                SQRT            EXIT                    # YIELDS COS(CDUZ) IN UNITS OF 2

                EXTEND
                DCA             MPAC
                DDOUBL
                TS              TEM5
                TCF             +3
                CA              POSMAX                  # OVERFLOW. FETCH POSMAX, MPAC ALWAYS POS
                TS              TEM5                    # COS(CDUZ) IN TEM5, UNITS 1

                INDEX           FIXLOC
                CA              2
                LXCH            MPAC
                TC              ARCTRGSP
                TS              MPAC            +2      # CDUZ

                CA              ZERO
                TC              DVBYCOSM
                CA              FOUR
                TC              DVBYCOSM
                CS              TEM1
                TC              ARCTRGSP
                TS              MPAC            +1      # CDUY

                CA              BIT4
                TC              DVBYCOSM
                CA              16OCT
                TC              DVBYCOSM
                CS              TEM1
                TC              ARCTRGSP
                TS              MPAC                    # CDUX

                TC              INTPRET
                RVQ

16OCT           OCT             16

## Page 920
# THE ELEMENTS OF THE NAV BASE MATRIX WHICH WE MUST DIVIDE BY COS(MGA)
# ALREADY CONTAIN COS(MGA)/2 AS A FACTOR. THEREFORE THE QUOTIENT SHOULD
# ORDINARILY NEVER EXCEED 1/2 IN MAGNITUDE.  BUT IF THE MGA IS NEAR PI/2
# THEN COS(MGA) IS NEAR ZERO, AND THERE MAY BE SOME CHAFF IN THE OTHER
# ELEMENTS OF THE MATRIX WHICH WOULD PRODUCE CHAOS UNDER DIVISION.
# BEFORE DIVIDING WE MAKE SURE COS(MGA) IS AT LEAST ONE BIT LARGER
# THAN THE MAGNITUDE OF THE HIGH ORDER PART OF THE OPERAND.

# IF ONE OR MORE DIVIDES CANNOT BE PERFORMED, THIS MEANS THAT THE
# REQUIRED MGA IS VERY NEARLY +-PI/2 AND THEREFORE THE OTHER GIMBAL
# ANGLES ARE INDETERMINATE.  THE INNER AND OUTER GIMBAL ANGLES RETURNED
# IN THIS CASE WILL BE RANDOM MULTIPLES OF PI/2.

DVBYCOSM        AD              FIXLOC
                TS              ADDRWD                  # ADRES OF OPERAND

                INDEX           ADDRWD                  # FETCH NEG ABS OF OPERAND, AD TEM5, AND
                CA              0                       #     SKIP DIVIDE IF RESULT NEG OR ZERO
                EXTEND
                BZMF            +2
                COM
                AD              TEM5                    # C(A) ZERO OR NEG, C(TEM5) ZERO OR POS
                EXTEND
                BZMF            TSL&TCQ                 # DIFFERENCE ALWAYS SMALL IF BRANCH

                EXTEND                                  # TEM5 EXCEEDS ABS HIGH ORDER PART OF
                INDEX           ADDRWD                  #      OPERAND BY AT LEAST ONE BIT.
                DCA             0                       #      THEREFORE IT EXCEEDS THE DP OPERAND
                EXTEND                                  #      AND DIVISION WILL ALWAYS SUCCEED.
                DV              TEM5
TSL&TCQ         TS              L
                LXCH            TEM1
                TC              Q

## Page 921
# ARCTRGSP RETURNS THE 2'S COMPLEMENT, PI, SP ANGLE IN THE A REGISTER GIVEN ITS SINE IN A AND ITS COSINE IN L IN
# UNITS OF 2.  THE RESULT IS AN UNAMBIGUOUS ANGLE ANYWHERE IN THE CIRCLE, WITH A MAXIMUM ERROR OF +-4 BITS.
# THE ERROR IS PRODUCED BY THE SUBROUTINE SPARCSIN WHICH IS USED ONLY IN THE REGION +-45 DEGREES.

ARCTRGSP        EXTEND
                BZF             SINZERO                 # TO AVOID DIVIDING BY ZERO

                EXTEND
                QXCH            TEM4
                TS              TEM2
                CA              L
                TS              TEM3
                CA              ZERO
                EXTEND
                DV              TEM2
                EXTEND
                BZF             USECOS

                CCS             TEM3                    # SIN IS SMALLER OR EQUAL
                CA              ZERO
                TCF             +4
                CS              TEM2                    # IF COS NEG, REVERSE SIGN OF SIN,
                TS              TEM2                    #      ANGLE = PI-ARCSIN(SIN)
                CA              NEGMAX                  # PICK UP PI, 2'S COMPLEMENT
                TS              TEM3                    # WE NO LONGER NEED COS
                CA              TEM2
                TC              SPARCSIN        -1
                TC              ONESTO2S
                EXTEND
                MSU             TEM3
1TO2&TCQ        TC              ONESTO2S
                TC              TEM4

USECOS          CS              TEM3                    # COS IS SMALLER
                TC              SPARCSIN        -1      # ANGLE = SIGN(SIN)(PI/2-ARCSIN(COS))
                AD              HALF
                TS              TEM3                    # WE NO LONGER NEED COS
                CCS             TEM2
                CA              TEM3
                TCF             1TO2&TCQ
                CS              TEM3
                TCF             1TO2&TCQ

SINZERO         CCS             L
                CA              ZERO
                TC              Q
                CA              NEGMAX                  # PI, 2'S COMP
                TC              Q

## Page 922
# SPARCSIN TAKES AN ARGUMENT SCALED UNITY IN A AND RETURNS AN ANGLE SCALED
# 180 DEGREES IN A.  IT HAS BEEN UNIT TESTED IN THE REGION +-.94 (+-70
# DEGREES) AND THE MAXIMUM ERROR IS +-5 BITS WITH AN AVERAGE TIME OF
# 450 MICROSECONDS.  SPARCSIN -1 TAKES THE ARGUMENT SCALED TWO.(BOB CRISP)

                DOUBLE
SPARCSIN        TS              SR
                TCF             +4
                INDEX           A
                CS              LIMITS
                TS              SR
                EXTEND
                MP              A
                TS              TEM1
                EXTEND
                MP              DPL9
                AD              DPL7
                EXTEND
                MP              TEM1
                AD              DPL5
                EXTEND
                MP              TEM1
                AD              DPL3
                EXTEND
                MP              TEM1
                AD              DPL1
                EXTEND
                MP              SR
                TC              Q
DPL1            DEC             10502
DPL3            DEC             432
DPL5            DEC             7300
DPL7            DEC             -11803
DPL9            DEC             8397

## Page 923
# LIMITSUB LIMITS THE MAGNITUDE OF THE POSITIVE OR NEGATIVE VARIABLE
# ARRIVING IN L TO THE POSITIVE LIMIT ARRIVING IN A.
# THE SIGNED LIMITED VARIABLE IS RETURNED IN A.

# VERSION COURTESY HUGH BLAIR-SMITH

LIMITSUB        TS              TEM1
                CA              ZERO
                EXTEND
                DV              TEM1
                CCS             A
                LXCH            TEM1
                TCF             +2
                TCF             +3
                CA              L
                TC              Q
                CS              TEM1
                TC              Q

# SUBROUTINE TO CONVERT 1'S COMP SP TO 2'S COMP

ONESTO2S        CCS             A
                AD              ONE
                TC              Q
                CS              A
                TC              Q

# NO ATTITUDE CONTROL

NOATTCNT        TC              ALARM
                OCT             00402                   # NO ATTITUDE CONTROL

 +2             INHINT                                  # COME HERE FOR NOATTCNT WITHOUT ALARM
                TC              IBNKCALL                # RELINT AT TC INTPRET AFTER TCQCDUW
                FCADR           STOPRATE
                TCF             TCQCDUW                 # RETURN TO USER SKIPPING AUTOPILOT CMDS

# MIDDLE GIMBAL ANGLE ALARM

ALARMMGA        TC              ALARM
                OCT             00401
                TCF             MGARET

## Page 924
#************************************************************************
# CONSTANTS
#************************************************************************

# ADDRESS CONSTANTS

ECDUWL          ECADR           ECDUW

# THRUST DIRECTION FILTER CONSTANTS

GAINFLTR        DEC             .2                      # GAIN FILTER SANS CSM
                DEC             .1                      # GAIN FILTER WITH CSM

DUNFVLIM        DEC             .007            B-1     # 7 MR MAX CHG IN F DIR IN VEH IN 2 SECS.
                                                        # THIS DOES NOT ALLOW FOR S/C ROT RATE.

UNFVLIM         DEC             .129            B-1     # 129 MR MAX THRUST OFFSET.  105 MR TRAVEL
                                                        # +10MR DEFL+5MR MECH MOUNT+9MR ABLATION.

# CONSTANTS RELATED TO GIMBAL ANGLE COMPUTATIONS

DOTSWFMX        DEC             .93302          B-4     # LIM COLNRTY OF UNWC/2 & UNFC/2 TO 85 DEG
                                                        # LOWER PART COMES FROM NEXT CONSTANT

DAXMAX          DEC             .11111111111            # DELATTX LIM TO 20 DEG IN 2 SECS, 1'S, PI
                DEC             .0111111111             # 2 DEG WHEN CSM DOCKED

DAY/2MAX        DEC             .05555555555            # LIKEWISE FOR DELATTY
                DEC             .0055555555

DAZMAX          =               DAXMAX                  # LIKEWISE FOR DELATTZ

CDUZDLIM        DEC             .3888888888             # 70 DEG LIMIT FOR MGA, 1'S, PI

# CONSTANTS FOR DATA TRANSFER

DT/DELT         DEC             .05                     # .1 SEC/2 SEC WHICH IS THE AUTOPILOT
                                                        # CONTROL SAMPLE PERIOD/COMPUTATION PERIOD

DELERLIM        =               DAY/2MAX                # 10 DEG LIMIT FOR LAG ANGLES, 1'S, PI


back to top