Source Code
![]() |
These source-code files were transcribed from scans made from Don Eyles's personal
copy of BURST120 (SUNBURST 120). They were scanned at archive.org's Boston
facility, and the scanning was sponsored by Mike Stewart. The code was transcribed
from these scans by a team of volunteers who are referenced in the program
comments. Comments from the original source code are in ALL-CAPS, whereas
comments added later in transcription are in Mixed-Case. In some cases, where
similar code blocks exist in previously-transcribed AGC programs (primarily
Luminary 99, from Apollo 11) those code blocks were used as a starting point and
then corrected to agree with the BURST120 scans. The full scans are available
at the Virtual AGC
project's collection at archive.org, while more-convenient reduced-size (but reduced-quality)
images are available at
the main Virtual AGC website. Report any errors noted by creating an
issue report at the Virtual AGC
project's GitHub repository. Notations on the program listing read, in part:YUL SYSTEM FOR AGC: REVISION 0 OF PROGRAM BURST120 BY NASA 2021106-031 DEC 7, 1967 THIS LISTING IS A COPY OF A VERSION OF THE PROGRAM INTENDED FOR USE IN THE ON-BOARD PRIMARY GUIDANCE COMPUTER IN THE UNMANNED FLIGHT OF APOLLO LUNAR MODULE 1 --- THE AS206 MISSION.Note that the date is the date of the printout, not the date of the program revision. |
026694,000002: ## Copyright: Public domain.
026695,000003: ## Filename: ATTITUDE_MANEUVER_ROUTINE.agc
026696,000004: ## Purpose: A module for revision 0 of BURST120 (Sunburst). It
026697,000005: ## is part of the source code for the Lunar Module's
026698,000006: ## (LM) Apollo Guidance Computer (AGC) for Apollo 5.
026699,000007: ## Assembler: yaYUL
026700,000008: ## Contact: Ron Burkey <info@sandroid.org>.
026701,000009: ## Website: www.ibiblio.org/apollo/index.html
026702,000010: ## Mod history: 2016-09-30 RSB Created draft version.
026703,000011: ## 2016-10-20 MAS Began adapting from Luminary 099.
026704,000012: ## 2016-10-21 MAS Completed adapting/transcribing.
026705,000013: ## 2016-10-31 RSB Typos.
026706,000014: ## 2016-11-01 RSB More typos.
026707,000015: ## 2016-11-02 RSB More typos.
026708,000016: ## 2016-12-06 RSB Comment-proofing with octopus/ProoferComments,
026709,000017: ## changes made.
026710,000018: ## 2017-03-07 RSB Comment-text fixes noted in proofing Luminary 116.
026711,000019: ## 2017-03-15 RSB Comment-text fixes identified in 6-way
026712,000020: ## side-by-side diff of Sunburst 120 and
026713,000021: ## Luminary 69/99/116/131/210.
026714,000022:
![]() |
Page 636 |
026716,000024: # BLOCK 2 LGC ATTITUDE MANEUVER ROUTINE-KALCMANU
026717,000025:
026718,000026:
026719,000027:
026720,000028: # MOD 1 DATE 11/7/66 BY DON KEENE
026721,000029: # PROGRAM DESCRIPTION
026722,000030:
026723,000031: # KALCMANU IS A ROUTINE WHICH GENERATES COMMANDS FOR THE LM DAP TO CHANGE THE ATTITUDE OF THE SPACECRAFT
026724,000032: # DURING FREE FALL. IT IS DESIGNED TO MANEUVER THE SPACECRAFT FROM ITS INITIAL ORIENTATION TO SOME DESIRED
026725,000033: # ORIENTATION SPECIFIED BY THE PROGRAM WHICH CALLS KALCMANU, AVOIDING GIMBAL LOCK IN THE PROCESS. IN THE
026726,000034: # MOD 1 VERSION, THIS DESIRED ATTITUDE CAN BE SPECIFIED IN ONE OF TWO WAYS
026727,000035:
026728,000036: # A) BY A SET OF THREE COMMANDED CDU ANGLES
026729,000037:
026730,000038: # B) BY A VECTOR IN STABLE MEMBER COORDINATES ALONG WHICH THE THRUST VECTOR (GIVEN IN SPACECRAFT
026731,000039: # COORDINATES IS TO BE ALIGNED.
026732,000040:
026733,000041: # IF THE FIRST METHOD IS USED, THE THREE DESIRED CDU ANGLES MUST BE STORED AS 2:S COMPLEMENT SINGLE
026734,000042: # PRECISION ANGLES IN THE THREE CONSECUTIVE LOCATIONS, CPHI, CTHETA, CPSI, WHERE
026735,000043:
026736,000044: # CPHI = COMMANDED OUTER GIMBAL ANGLE
026737,000045: # CTHETA = COMMANDED INNER GIMBAL ANGLE
026738,000046: # CPSI = COMMANDED MIDDLE GIMBAL ANGLE
026739,000047:
026740,000048: # THE ENTRY POINT IN KALCMANU FOR THIS METHOD IS KALCMAN3 (SEE SECTION 4)
026741,000049:
026742,000050: # THE SECOND METHOD MAY BE USED FOR POINTING THE THRUST AXIS OF THE SPACECRAFT. IN THIS CASE THE AXIS TO
026743,000051: # BE POINTED MUST APPEAR AS A HALF UNIT DOUBLE PRECISION VECTOR IN SUCCESSIVE LOCATIONS OF ERASABLE MEMORY
026744,000052: # BEGINNING WITH THE LOCATION CALLED SCAXIS. THE COMPONENTS OF THIS VECTOR ARE GIVEN IN SPACECRAFT COORDINATES.
026745,000053: # THE DIRECTION IN WHICH THIS AXIS IS TO BE POINTED MUST APPEAR AS A HALF UNIT DOUBLE PRECISION VECTOR IN
026746,000054: # SUCCESSIVE LOCATIONS OF ERASABLE MEMORY BEGINNING WITH THE ADDRESS CALLED POINTVSM. THE COMPONENTS OF
026747,000055: # THIS VECTOR ARE GIVEN IN STABLE MEMBER COORDINATES.
026748,000056:
026749,000057: # -
026750,000058: # KALCMANU DETERMINES THE DIRECTION OF THE SINGLE EQUIVALENT ROTATION (COF ALTERNATELY TERMED U) AND THE
026751,000059: # MAGNITUDE OF THE ROTATION (AM) TO BRING THE S/C FROM ITS INITIAL ORIENTATION TO ITS FINAL ORIENTATION.
026752,000060: # THIS DIRECTION REMAINS FIXED BOTH IN INERTIAL COORDINATES AND IN COMMANDED S/C AXES THROUGHOUT THE
026753,000061: # -
026754,000062: # MANEUVER. ONCE COF AND AM HAVE BEEN DETERMINED, KALCMANU THEN EXAMINES THE MANEUVER TO SEE IF IT WILL BRING
026755,000063: # -
026756,000064: # THE S/C THROUGH GIMBAL LOCK. IF SO, COF AND AM ARE READJUSTED SO THAT THE S/C WILL JUST SKIM THE GIMBAL
026757,000065: # LOCK ZONE AND ALIGN THE X-AXIS. IN GENERAL A FINAL YAW ABOUT X WILL BE NECESSARY TO COMPLETE THE MANEUVER.
026758,000066: # NEEDLESS TO SAY, NEITHER THE INITIAL NOR THE FINAL ORIENTATION CAN BE IN GIMBAL LOCK.
026759,000067:
026760,000068: # FOR PROPER ATTITUDE CONTROL THE DIGITAL AUTOPILOT MUST BE GIVEN AN ATTITUDE REFERENCE WHICH IT CAN TRACK.
026761,000069: # KALCMANU DOES THIS BY GENERATING A REFERENCE OF DESIRED GIMBAL ANGLES (CDUXD, CDUYD, CDUZD) WHICH ARE UPDATED
026762,000070: # EVERY ONE SECOND DURING THE MANEUVER. TO ACHIEVE A SMOOTHER SEQUENCE OF COMMANDS BETWEEN SUCCESSIVE UPDATES,
026763,000071: # THE PROGRAM ALSO GENERATES A SET OF INCREMENTAL CDU ANGLES (DELDCDU) TO BE ADDED TO CDU DESIRED BY THE DIGITAL
026764,000072: # AUTOPILOT. KALCMANU ALSO CALCULATES THE COMPONENT MANEUVER RATES (OMEGAPD, OMEGAQD, OMEGARD), WHICH CAN
026765,000073: # -
![]() |
Page 637 |
026767,000075: # BE DETERMINED SIMPLY BY MULTIPLYING COF BY SOME SCALAR (ARATE) CORRESPONDING TO THE DESIRED ROTATIONAL RATE.
026768,000076:
026769,000077: # AUTOMATIC MANEUVERS ARE TIMED WITH THE HELP OF WAITLIST SO THAT AFTER A SPECIFIED INTERVAL THE Y AND Z
026770,000078: # DESIRED RATES ARE SET TO ZERO AND THE DESIRED CDU ANGLES (CDUYD, CDUZD) ARE SET EQUAL TO THE FINAL DESIRED CDU
026771,000079: # ANGLES (CTHETA, CPSI). IF ANY YAW REMAINS DUE TO GIMBAL LOCK AVOIDANCE, THE FINAL YAW MANEUVER IS
026772,000080: # CALCULATED AND THE DESIRED YAW RATE SET TO SOME FIXED VALUE (ROLLRATE = + OR - 2 DEGREES PER SEC).
026773,000081: # IN THIS CASE ONLY AN INCREMENTAL CDUX ANGLE (DELFROLL) IS SUPPLIED TO THE DAP. AT THE END OF THE YAW
026774,000082: # MANEUVER OR IN THE EVENT THAT THERE WAS NO FINAL YAW, CDUXD IS SET EQUAL TO CPHI AND THE X-AXIS DESIRED
026775,000083: # RATE SET TO ZERO. THUS, UPON COMPLETION OF THE MANEUVER THE S/C WILL FINISH UP IN A LIMIT CYCLE ABOUT THE
026776,000084: # DESIRED FINAL GIMBAL ANGLES.
026777,000085:
026778,000086:
026779,000087:
026780,000088: # PROGRAM LOGIC FLOW
026781,000089:
026782,000090: # KALCMANU IS CALLED AS A HIGH PRIORITY JOB WITH ENTRY POINTS AT KALCMAN3 AND VECPOINT. IT FIRST PICKS
026783,000091: # UP THE CURRENT CDU ANGLES TO BE USED AS THE BASIS FOR ALL COMPUTATIONS INVOLVING THE INITIAL S/C ORIENTATION.
026784,000092: # IT THEN DETERMINES THE DIRECTION COSINE MATRICES RELATING BOTH THE INITIAL AND FINAL S/C ORIENTATION TO STABLE
026785,000093: # * * *
026786,000094: # MEMBER AXES (MIS, MFS). IT ALSO COMPUTES THE MATRIX RELATING FINAL S/C AXES TO INITIAL S/C AXES (MFI). THE
026787,000095: # ANGLE OF ROTATION (AM) IS THEN EXTRACTED FROM THIS MATRIX, AND TESTS ARE MADE TO DETERMINE IF
026788,000096:
026789,000097: # A) AM LESS THAN .25 DEGREES (MINANG)
026790,000098: # B) AM GREATER THAN 170 DEGREES (MAXANG)
026791,000099:
026792,000100: # IF AM LESS THAN .25 DEGREES, NO COMPLICATED AUTOMATIC MANEUVERING IS NECESSARY. THEREFORE WE CAN SIMPLY
026793,000101: # SET CDU DESIRED EQUAL TO THE FINAL CDU DESIRED ANGLES AND TERMINATE THE JOB.
026794,000102:
026795,000103: # IF AM IS GREATER THAN .25 DEGREES BUT LESS THAN 170 DEGREES, THE AXES OF THE SINGLE EQUIVALENT ROTATION
026796,000104: # - *
026797,000105: # (COF) IS EXTRACTED FROM THE SKEW SYMMETRIC COMPONENTS OF MFI. * *
026798,000106: # IF AM GREATER THAN 170 DEGREES AN ALTERNATE METHOD EMPLOYING THE SYMMETRIC PART OF MFI (MFISYM) IS USED
026799,000107: # -
026800,000108: # TO DETERMINE COF.
026801,000109:
026802,000110: # THE PROGRAM THEN CHECKS TO SEE IF THE MANEUVER AS COMPUTED WILL BRING THE S/C THROUGH GIMBAL LOCK. IF
026803,000111: # SO, A NEW MANEUVER IS CALCULATED WHICH WILL JUST SKIM THE GIMBAL LOCK ZONE AND ALIGN THE S/C X-AXIS. THIS
026804,000112: # METHOD ASSURES THAT THE ADDITIONAL MANEUVERING TO AVOID GIMBAL LOCK WILL BE KEPT TO A MINIMUM. SINCE A FINAL
026805,000113: # P AXIS YAW WILL BE NECESSARY, A SWITCH IS RESET (STATE SWITCH 31) TO ALLOW FOR THE COMPUTATION OF THIS FINAL
026806,000114: # YAW.
026807,000115:
026808,000116: # AS STATED PREVIOUSLY KALCMANU GENERATES A SEQUENCE OF DESIRED GIMBAL ANGLES WHICH ARE UPDATED EVERY
026809,000117: # -
026810,000118: # SECOND. THIS IS ACCOMPLISHED BY A SMALL ROTATION OF THE DESIRED S/C FRAME ABOUT THE VECTOR COF. THE NEW
026811,000119: # DESIRED REFERENCE MATRIX IS THEN,
026812,000120:
026813,000121: # * * *
026814,000122: # MIS = MIS DEL
026815,000123: # N+1 N
![]() |
Page 638 |
026817,000125: # *
026818,000126: # WHERE DEL IS THE MATRIX CORRESPONDING TO THIS SMALL ROTATION. THE NEW CDU ANGLES CAN THEN BE EXTRACTED
026819,000127: # *
026820,000128: # FROM MIS.
026821,000129:
026822,000130: # AT THE BEGINNING OF THE MANEUVER THE AUTOPILOT DESIRED RATES (OMEGAPD, OMEGAQD, OMEGARD) AND THE
026823,000131: # MANEUVER TIMINGS ARE ESTABLISHED. ON THE FIRST PASS AND ON ALL SUBSEQUENT UPDATES THE CDU DESIRED
026824,000132: # ANGLES ARE LOADED WITH THE APPROPRIATE VALUES AND THE INCREMENTAL CDU ANGLES ARE COMPUTED. THE AGC CLOCKS
026825,000133: # (TIME1 AND TIME2) ARE THAN CHECKED TO SEE IF THE MANEUVER WILL TERMINATE BEFORE THE NEXT UPDATE. IF
026826,000134: # NOT, KALCMANU CALLS FOR ANOTHER UPDATE (RUN AS A JOB WITH PRIORITY TBD) IN ONE SECOND. ANY DELAYS IN THIS
026827,000135: # CALLING SEQUENCE ARE AUTOMATICALLY COMPENSATED IN CALLING FOR THE NEXT UPDATE.
026828,000136:
026829,000137: # IF IT IS FOUND THAT THE MANEUVER IS TO TERMINATE BEFORE THE NEXT UPDATE A ROUTINE IS CALLED (AS A WAIT-
026830,000138: # LIST TASK) TO STOP THE MANEUVER AT THE APPROPRIATE TIME AS EXPLAINED ABOVE.
026831,000139:
026832,000140:
026833,000141:
026834,000142: # CALLING SEQUENCE
026835,000143:
026836,000144: # THE ENTRY POINT IN KALCMANU FOR POINTING THE THRUST AXIS OF THE SPACECRAFT IS VECPOINT
026837,000145:
026838,000146: # CAF PRIO XX
026839,000147: # --
026840,000148: # INHINT
026841,000149: # TC FINDVAC
026842,000150: # 2CADR VECPOINT
026843,000151: # RELINT
026844,000152:
026845,000153: # THE CALLING PROGRAM MUST ALSO SPECIFY THE DESIRED MANEUVERING RATES, PRESENTLY IN THE FORM OF A SINGLE
026846,000154: # PRECISION NUMBER (RATEINDEX), WHICH IS LOADED WITH ONE OF FOUR VALUES 0, 2, 4, OR 6, CORRESPONDING TO ANGULAR
026847,000155: # RATES OF .5, 2, 5, 10 DEGREES/SEC. THERE IS ALSO A STATE SWITCH (33) WHICH MAY BE SET TO IGNORE ANY FINAL YAW
026848,000156: # INCURRED BY AVOIDING GIMBAL LOCK.
026849,000157:
026850,000158: # WITH THIS INFORMATION KALCMANU WILL THEN GENERATE A SEQUENCE OF THREE CDU DESIRED ANGLES (CDUXD, CDUYD,
026851,000159: # CDUZD), AND THREE INCREMENTAL ANGLES (DELDCDU, DELDCDU1, DELDCDU2) AS WELL AS THE COMPONENT MANEUVER RATES
026852,000160: # (IN S/C AXES) TO BE USED BY THE LEM DAP IN PERFORMING THE AUTOMATIC MANEUVER.
026853,000161:
026854,000162: # THERE ARE TWO WAYS IN WHICH KALCMANU MAY BE INITIATED CORRESPONDING TO THE TWO METHODS OF SPECIFYING THE
026855,000163: # DESIRED ATTITUDE OF THE SPACECRAFT. IF METHOD 1 IS USED, THE COMMANDED GIMBAL ANGLES MUST BE PRECOMPUTED AND
026856,000164: # STORED IN LOCATIONS CPHI, CTHETA, CPSI. THE USER:S PROGRAM MUST THEN CLEAR STATE SWITCH NO 33 TO ALLOW THE
026857,000165: # ATTITUDE MANEUVER ROUTINE TO PERFORM ANY FINAL P-AXIS YAW INCURRED BY AVOIDING GIMBAL LOCK. THE MANEUVER IS
026858,000166: # THEN INITIATED BY ESTABLISHING THE FOLLOWING EXECUTIVE JOB
026859,000167:
026860,000168: # *
026861,000169: # CAF PRIO XX
026862,000170: # --
026863,000171: # INHINT
026864,000172: # TC FINDVAC
026865,000173: # 2CADR KALCMAN3
026866,000174: # RELINT
026867,000175:
![]() |
Page 639 |
026869,000177: # THE USER:S PROGRAM MAY EITHER CONTINUE OR WAIT FOR THE TERMINATION OF THE MANEUVER. IF THE USER WISHES TO
026870,000178: # WAIT, HE MAY PUT HIS JOB TO SLEEP WITH THE FOLLOWING INSTRUCTIONS
026871,000179:
026872,000180: # L TC BANKCALL
026873,000181: # L+1 CADR ATTSTALL
026874,000182: # L+2 (BAD RETURN)
026875,000183: # L+3 (GOOD RETURN)
026876,000184:
026877,000185: # UPON COMPLETION OF THE MANEUVER, THE PROGRAM WILL BE AWAKENED AT L+3 IF THE MANEUVER WAS COMPLETED
026878,000186: # SUCCESSFULLY, OR AT L+2 IF THE MANEUVER WAS ABORTED. THIS ABORT WOULD OCCUR IF THE INITIAL OR FINAL ATTITUDE
026879,000187: # WAS IN GIMBAL LOCK.
026880,000188: # -
026881,000189: # IF THE SECOND METHOD IS USED, THE DESIRED THRUST DIRECTION, V , MUST BE COMPUTED AND STORED IN THE SIX
026882,000190: # F
026883,000191: # ERASABLE LOCATIONS BEGINNING WITH THE ADDRESS POINTVSM. THE THRUST AXIS MUST BE LOADED INTO THE SIX ERASABLE
026884,000192: # LOCATIONS BEGINNING WITH SC AXIS. THE CALLER MUST THEN CLEAR (OR SET) STATE SWITCH NO 33 AND SPECIFY THE
026885,000193: # DESIRED MANEUVERING RATE AS BEFORE. THE MANEUVER IS THEN INITIATED BY THE EXECUTIVE CALL.
026886,000194:
026887,000195:
026888,000196:
026889,000197: # SUBROUTINES
026890,000198:
026891,000199: # KALCMANU USES A NUMBER OF INTERPRETIVE SUBROUTINES WHICH MAY BE OF GENERAL INTEREST. SINCE THESE ROUTINES
026892,000200: # WERE PROGRAMMED EXCLUSIVELY FOR KALCMANU, THEY ARE NOT, AS YET, GENERALLY AVAILABLE FOR USE BY OTHER PROGRAMS.
026893,000201:
026894,000202: # MXM3
026895,000203: # ----
026896,000204:
026897,000205: # THIS SUBROUTINE MULTIPLIES TWO 3X3 MATRICES AND LEAVES THE RESULT IN THE FIRST 18 LOCATIONS OF THE PUSH
026898,000206: # DOWN LIST, I.E.,
026899,000207:
026900,000208: # (M M M )
026901,000209: # ( 0 1 2)
026902,000210: # * ( ) * *
026903,000211: # M = (M M M ) = M1 X M2
026904,000212: # ( 3 4 5)
026905,000213: # ( )
026906,000214: # (M M M )
026907,000215: # ( 6 7 8)
026908,000216:
026909,000217: # *
026910,000218: # INDEX REGISTER X1 MUST BE LOADED WITH THE COMPLEMENT OF THE STARTING ADDRESS FOR M1, AND X2 MUST BE
026911,000219: # *
026912,000220: # LOADED WITH THE COMPLEMENT OF THE STARTING ADDRESS FOR M2. THE ROUTINE USES THE FIRST 20 LOCATIONS OF THE PUSH
026913,000221: # DOWN LIST. THE FIRST ELEMENT OF THE MATRIX APPEARS IN PDO. PUSH UP FOR M .
026914,000222: # 8
026915,000223:
026916,000224: # TRANSPOS
026917,000225: # --------
![]() |
Page 640 |
026919,000227: # THIS ROUTINE TRANSPOSES A 3X3 MATRIX AND LEAVES THE RESULT IN THE PUSH DOWN LIST, I.E.,
026920,000228: #
026921,000229: # * * T
026922,000230: # M = M1
026923,000231:
026924,000232: # INDEX REGISTER X1 MUST CONTAIN THE COMPLEMENT OF THE STARTING ADDRESS FOR M1. PUSH UP FOR THE FIRST AND SUB-
026925,000233: # *
026926,000234: # SEQUENT COMPONENTS OF M. THIS SUBROUTINE ALSO USES THE FIRST 20 LOCATIONS OF THE PUSH DOWN LIST.
026927,000235:
026928,000236: # CDU TO DCM
026929,000237: # ----------
026930,000238:
026931,000239: # THIS SUBROUTINE CONVERTS THREE CDU ANGLES IN T(MPAC) TO A DIRECTION COSINE MATRIX (SCALED BY 2) RELATING
026932,000240: # THE CORRESPONDING S/C ORIENTATIONS TO THE STABLE MEMBER FRAME. THE FORMULAS FOR THIS CONVERSION ARE
026933,000241:
026934,000242: # M = COSY COSZ
026935,000243: # 0
026936,000244:
026937,000245: # M = -COSY SINZ COSX + SINY SINX
026938,000246: # 1
026939,000247:
026940,000248: # M = COSY SINZ SINX + SINY COSX
026941,000249: # 2
026942,000250:
026943,000251: # M = SINZ
026944,000252: # 3
026945,000253:
026946,000254: # M = COSZ COSX
026947,000255: # 4
026948,000256:
026949,000257: # M = -COSZ SINX
026950,000258: # 5
026951,000259:
026952,000260: # M = -SINY COSZ
026953,000261: # 6
026954,000262:
026955,000263: # M = SINY SINZ COSX + COSY SINX
026956,000264: # 7
026957,000265:
026958,000266: # M = -SINY SINZ SINX + COSY COSX
026959,000267: # 8
026960,000268:
026961,000269: # WHERE X = OUTER GIMBAL ANGLE
026962,000270: # Y = INNER GIMBAL ANGLE
026963,000271: # Z = MIDDLE GIMBAL ANGLE
026964,000272:
026965,000273: # THE INTERPRETATION OF THIS MATRIX IS AS FOLLOWS
026966,000274:
026967,000275: # IF A , A , A REPRESENT THE COMPONENTS OF A VECTOR IN S/C AXES THEN THE COMPONENTS OF THE SAME VECTOR IN
026968,000276: # X Y Z
![]() |
Page 641 |
026970,000278: # STABLE MEMBER AXES (B , B , B ) ARE
026971,000279: # X Y Z
026972,000280:
026973,000281: # (B ) (A )
026974,000282: # ( X) ( X)
026975,000283: # ( ) ( )
026976,000284: # ( ) * ( )
026977,000285: # (B ) = M (A )
026978,000286: # ( Y) ( Y)
026979,000287: # ( ) ( )
026980,000288: # (B ) (A )
026981,000289: # ( Z) ( Z)
026982,000290:
026983,000291: # THE SUBROUTINE WILL STORE THIS MATRIX IN SEQUENTIAL LOCATIONS OF ERASABLE MEMORY AS SPECIFIED BY THE CALLING
026984,000292: # *
026985,000293: # PROGRAM. TO DO THIS THE CALLING PROGRAM MUST FIRST LOAD X2 WITH THE COMPLEMENT OF THE STARTING ADDRESS FOR M.
026986,000294:
026987,000295: # INTERNALLY, THE ROUTINE USES THE FIRST 16 LOCATIONS OF THE PUSH DOWN LIST, ALSO STEP REGISTER S1 AND INDEX
026988,000296: # REGISTER X2.
026989,000297:
026990,000298:
026991,000299:
026992,000300: # DCM TO CDU
026993,000301: # ----------
026994,000302: # *
026995,000303: # THIS ROUTINE EXTRACTS THE CDU ANGLES FROM A DIRECTION COSINE MATRIX (M SCALED BY 2) RELATING S/C AXIS TO
026996,000304: # *
026997,000305: # STABLE MEMBER AXES. X1 MUST CONTAIN THE COMPLEMENT OF THE STARTING ADDRESS FOR M. THE SUBROUTINE LEAVES THE
026998,000306: # CORRESPONDING GIMBAL ANGLES IN V(MPAC) AS DOUBLE PRECISION 1:S COMPLEMENT ANGLES SCALED BY 2PI. THE FORMULAS
026999,000307: # FOR THIS CONVERSION ARE
027000,000308:
027001,000309: # Z = ARCSIN (M )
027002,000310: # 3
027003,000311:
027004,000312: # Y = ARCSIN (-M /COSZ)
027005,000313: # 6
027006,000314:
027007,000315: # IF M IS NEGATIVE, Y IS REPLACED BY PI SGN Y - Y
027008,000316: # 0
027009,000317:
027010,000318: # X = ARCSIN (-M /COSZ)
027011,000319: # 5
027012,000320:
027013,000321: # IF M IS NEGATIVE X IS REPLACED BY PI SGN X - X
027014,000322: # 4
027015,000323:
027016,000324: # THIS ROUTINE DOES NOT SET THE PUSH DOWN POINTER, BUT USES THE NEXT 8 LOCATIONS OF THE PUSH DOWN LIST AND
027017,000325: # RETURNS THE POINTER TO ITS ORIGINAL SETTING. THIS PROCEDURE ALLOWS THE CALLER TO STORE THE MATRIX AT THE TOP OF
027018,000326: # THE PUSH DOWN LIST.
027019,000327:
![]() |
Page 642 |
027021,000329: # DELCOMP
027022,000330: # -------
027023,000331:
027024,000332: # *
027025,000333: # THIS ROUTINE COMPUTES THE DIRECTION COSINE MATRIX (DEL) RELATING ON
027026,000334: # -
027027,000335: # IS ROTATED WITH RESPECT TO THE FIRST BY AN ANGLE, A, ABOUT A UNIT VECTOR, U. THE FORMULA FOR THIS MATRIX IS
027028,000336:
027029,000337: # * * --T *
027030,000338: # DEL = I COSA + UU (1-COSA) + V SINA
027031,000339: # X
027032,000340:
027033,000341: # WHERE * (1 0 0)
027034,000342: # I = (0 1 0)
027035,000343: # (0 0 1)
027036,000344:
027037,000345:
027038,000346: # 2
027039,000347: # (U U U U U )
027040,000348: # ( X X Y X Z)
027041,000349: # ( )
027042,000350: # --T ( 2 )
027043,000351: # UU = (U U U U U )
027044,000352: # ( Y X Y Y Z)
027045,000353: # ( )
027046,000354: # ( 2 )
027047,000355: # (U U U U U )
027048,000356: # ( Z X Z Y Z )
027049,000357:
027050,000358:
027051,000359: # (0 -U U )
027052,000360: # ( Z Y )
027053,000361: # * ( )
027054,000362: # V = (U 0 -U )
027055,000363: # X ( Z X)
027056,000364: # ( )
027057,000365: # (-U U 0 )
027058,000366: # ( Y X )
027059,000367:
027060,000368: # -
027061,000369: # U = UNIT ROTATION VECTOR RESOLVED INTO S/C AXES
027062,000370: # A = ROTATION ANGLE
027063,000371:
027064,000372: # *
027065,000373: # THE INTERPRETATION OF DEL IS AS FOLLOWS
027066,000374:
027067,000375: # IF A , A , A REPRESENT THE COMPONENT OF A VECTOR IN THE ROTATED FRAME, THEN THE COMPONENTS OF THE SAME
027068,000376: # X Y Z
027069,000377: # VECTOR IN THE ORIGINAL S/C AXES (B , B , B ) ARE
027070,000378: # X Y Z
![]() |
Page 643 |
027072,000380: # (B ) (A )
027073,000381: # ( X) ( X)
027074,000382: # ( ) * ( )
027075,000383: # (B ) = DEL (A )
027076,000384: # ( Y) ( Y)
027077,000385: # ( ) ( )
027078,000386: # (B ) (A )
027079,000387: # ( Z) ( Z)
027080,000388:
027081,000389: # THE ROUTINE WILL STORE THIS MATRIX (SCALED UNITY) IN SEQUENTIAL LOCATIONS OF ERASABLE MEMORY BEGINNING WITH
027082,000390: # -
027083,000391: # THE LOCATION CALLED DEL. IN ORDER TO USE THE ROUTINE, THE CALLING PROGRAM MUST FIRST STORE U (A HALF UNIT
027084,000392: # DOUBLE PRECISION VECTOR) IN THE SET OF ERASABLE LOCATIONS BEGINNING WITH THE ADDRESS CALLED COF. THE ANGLE, A,
027085,000393: # MUST THEN BE LOADED INTO D(MPAC).
027086,000394: #
027087,000395: # INTERNALLY, THE PROGRAM ALSO USES THE FIRST 10 LOCATIONS OF THE PUSH DOWN LIST.
027088,000396:
027089,000397:
027090,000398:
027091,000399: # READCDUK
027092,000400: # --------
027093,000401:
027094,000402: # THIS BASIC LANGUAGE SUBROUTINE LOADS T(MPAC) WITH THE THREE CDU ANGLES.
027095,000403:
027096,000404:
027097,000405:
027098,000406: # SIGNMPAC
027099,000407: # --------
027100,000408:
027101,000409: # THIS IS A BASIC LANGUAGE SUBROUTINE WHICH LIMITS THE MAGNITUDE OF D(MPAC) TO + OR - DPOSMAX ON OVERFLOW.
027102,000410:
027103,000411:
027104,000412:
027105,000413: # PROGRAM STORAGE ALLOCATION
027106,000414:
027107,000415: # 1) FIXED MEMORY 1059 WORDS
027108,000416: # 2) ERASABLE MEMORY 98
027109,000417: # 3) STATE SWITCHES 3
027110,000418: # 4) FLAGS 1
027111,000419:
027112,000420:
027113,000421:
027114,000422: # JOB PRIORITIES
027115,000423:
027116,000424: # 1) KALCMANU TBD
027117,000425: # 2) ONE SECOND UPDATE TBD
027118,000426:
027119,000427:
027120,000428:
027121,000429:
027122,000430: # SUMMARY OF STATE SWITCHES AND FLAGWORDS USED BY KALCMANU.
![]() |
Page 644 |
027124,000432: # STATE FLAGWRD 2 SETTING MEANING
027125,000433: # SWITCH NO. BIT NO.
027126,000434:
027127,000435: # *
027128,000436: # 31 14 0 MANEUVER WENT THROUGH GIMBAL LOCK
027129,000437: # 1 MANEUVER DID NOT GO THROUGH GIMBAL LOCK
027130,000438:
027131,000439: # *
027132,000440: # 32 13 0 CONTINUE UPDATE PROCESS
027133,000441: # 1 START UPDATE PROCESS
027134,000442:
027135,000443: # 33 12 0 PERFORM FINAL P-AXIS YAW IF REQUIRED
027136,000444: # 1 IGNORE ANY FINAL P-AXIS YAW
027137,000445:
027138,000446: # 34 11 0 SIGNAL END OF KALCMANU
027139,000447: # 1 KALCMANU IN PROCESS USER MUST SET SWITCH BEFORE INITIATING
027140,000448:
027141,000449:
027142,000450: # * INTERNAL TO KALCMANU
027143,000451:
027144,000452:
027145,000453:
027146,000454: # SUGGESTIONS FOR PROGRAM INTEGRATION
027147,000455:
027148,000456: # THE FOLLOWING VARIABLES SHOULD BE ASSIGNED TO UNSWITCH ERASABLE
027149,000457:
027150,000458: # CPHI
027151,000459: # CTHETA
027152,000460: # CPSI
027153,000461: # POINTVSM +5
027154,000462: # SCAXIS +5
027155,000463: # DELDCDU
027156,000464: # DELDCDU1
027157,000465: # DELDCDU2
027158,000466: # RATEINDX
027159,000467:
027160,000468: # THE FOLLOWING SUBROUTINES MAY BE PUT IN A DIFFERENT BANK
027161,000469:
027162,000470: # MXM3
027163,000471: # TRANSPOS
027164,000472: # SIGNMPAC
027165,000473: # READCDUK
027166,000474: # CDUTODCM
027167,000475:
![]() |
Page 645 |
027169,000477: 34,2000 BANK 34
027170,000478: 34,2000 E3,1535 EBANK= MIS
027171,000479: 34,2000 12001 NOOP
027172,000480: 34,2001 06112 VECPOINT TC INTPRET
027173,000481: 34,2002 77634 RTB
027174,000482: 34,2003 73513 READCDUK # READ THE PRESENT CDU ANGLES
027175,000483: 34,2004 01533 STORE BCDU
027176,000484: 34,2005 45164 AXC,2 CALL # COMPUTE THE TRANSFORMATION FROM INITIAL
027177,000485: 34,2006 01535 MIS # S/C AXES TO STABLE MEMBER AXES (MIS)
027178,000486: 34,2007 70445 CDUTODCM
027179,000487: 34,2010 61375 VLOAD VXM # -
027180,000488: 34,2011 01656 POINTVSM # RESOLVE THE POINTING DIRECTION VS INTO
027181,000489: 34,2012 01536 MIS # INITIAL S/C AXES
027182,000490: 34,2013 41456 UNIT PUSH
027183,000491: 34,2014 53435 VXV UNIT # TAKE THE CROSS PRODUCT VF X VI
027184,000492: 34,2015 01664 SCAXIS # WHERE VI = SCAXIS
027185,000493: 34,2016 57400 BOV VCOMP
027186,000494: 34,2017 70042 PICKAXIS
027187,000495: 34,2020 25624 STOVL COF
027188,000496: 34,2021 01664 SCAXIS
027189,000497: 34,2022 72441 DOT SL1
027190,000498: 34,2023 77726 ARCCOS
027191,000499: 34,2024 77624 COMPMATX CALL # NOW COMPUTE THE TRANSFORMATION FROM
027192,000500: 34,2025 70564 DELCOMP # FINAL S/C AXES TO INITIAL S/C AXES = MFI
027193,000501: 34,2026 75160 AXC,1 AXC,2 # COMPUTE THE TRANSFORMATION FROM FINAL
027194,000502: 34,2027 01535 MIS # S/C AXES TO STABLE MEMBER AXES
027195,000503: 34,2030 01557 KEL
027196,000504: 34,2031 77624 CALL
027197,000505: 34,2032 73417 MXM3 # MFS IN PD LIST
027198,000506: 34,2033 45160 AXC,1 CALL
027199,000507: 34,2034 00000 0 # EXTRACT THE CDU ANGLES FROM THIS MATRIX
027200,000508: 34,2035 70711 DCMTOCDU
027201,000509: 34,2036 77634 RTB
027202,000510: 34,2037 33526 V1STO2S # AND USE THEM AS THE COMMANDED CDU ANGLES
027203,000511: 34,2040 35632 STCALL CPHI
027204,000512: 34,2041 70070 KALCMAN3 +1 # PROCEED AS IF WE HAD BEEN GIVEN COMMAND
027205,000513: # CDU ANGLES
027206,000514: 34,2042 50375 PICKAXIS VLOAD DOT # IF VF X VI = 0. PUSH UP FOR VF
027207,000515: 34,2043 01664 SCAXIS # FIND VF . VI
027208,000516: 34,2044 72240 BMN TLOAD # IF ANTIPARALLEL
027209,000517: 34,2045 70051 ROT180
027210,000518: 34,2046 01533 BCDU
027211,000519: 34,2047 35632 STCALL CPHI # IF VF + VI
027212,000520: 34,2050 70070 KALCMAN3 +1
027213,000521:
027214,000522: 34,2051 47375 ROT180 VLOAD VXV # 180 DEG ROTATION IS REQUIRED
027215,000523: 34,2052 01544 MIS +6 # Y STABLE MEMBER AXIS IN INITIAL S/C AXES
027216,000524: 34,2053 30414 HALFA
027217,000525: 34,2054 47256 UNIT VXV # FIND Y(SM) X X(I)
027218,000526: 34,2055 01664 SCAXIS # FIND UNIT (VI X UNIT(Y(SM) X X(I)))
![]() |
Page 646 |
027220,000528: 34,2056 40056 UNIT BOV # PICK A VECTOR PERPENDICULAR TO VI IN THE
027221,000529: 34,2057 70064 PICKX # PLANE CONTAINING Y(SM) AND X(I) SO THAT
027222,000530: 34,2060 15624 XROT STODL COF # MANEUVER DOES NOT GO THRU GIMBAL LOCK
027223,000531: 34,2061 30414 HALFA
027224,000532: 34,2062 77650 GOTO
027225,000533: 34,2063 70024 COMPMATX
027226,000534: 34,2064 52175 PICKX VLOAD GOTO # PICK THE X AXIS IN THIS CASE
027227,000535: 34,2065 30414 HALFA
027228,000536: 34,2066 70060 XROT
027229,000537:
027230,000538: # FIRST ENTRY POINT- KALCMAN3
027231,000539:
027232,000540: # THE THREE DESIRED CDU ANGLES MUST BE STORED AS SINGLE PRECISION TWOS COMPLEMENT ANGLES IN THE THREE SUCCESSIVE
027233,000541: # LOCATIONS, CPHI, CTHETA, CPSI.
027234,000542:
027235,000543: 34,2067 06112 KALCMAN3 TC INTPRET # PICK UP THE CURRENT CDU ANGLES AND
027236,000544: 34,2070 77634 RTB # COMPUTE THE MATRIX FROM INITIAL S/C
027237,000545: 34,2071 73513 READCDUK # AXES TO FINAL S/C AXES
027238,000546: 34,2072 01533 STORE BCDU # STORE INITIAL S/C ANGLES
027239,000547: 34,2073 51535 SLOAD ABS
027240,000548: 34,2074 01535 BCDU +2 # CHECK MAGNITUDE OF MIDDLE GIMBAL ANGLE
027241,000549: 34,2075 51025 DSU BPL
027242,000550: 34,2076 30444 LOCKANGL # IF GREATER THAN 60 DEG, ABORT MANEUVER
027243,000551: 34,2077 70771 TOOBAD
027244,000552: 34,2100 72364 AXC,2 TLOAD
027245,000553: 34,2101 01535 MIS
027246,000554: 34,2102 01533 BCDU
027247,000555: 34,2103 77624 CALL # COMPUTE THE TRANSFORMATION FROM INITIAL
027248,000556: 34,2104 70445 CDUTODCM # S/C AXES TO STABLE MEMBER AXES
027249,000557: 34,2105 51535 SLOAD ABS # CHECK THE MAGNITUDE OF THE DESIRED
027250,000558: 34,2106 01634 CPSI # MIDDLE GIMBAL ANGLE
027251,000559: 34,2107 51025 DSU BPL
027252,000560: 34,2110 30444 LOCKANGL # IF GREATER THAN 60 DEG, ABORT MANEUVER
027253,000561: 34,2111 70771 TOOBAD
027254,000562: 34,2112 72364 AXC,2 TLOAD
027255,000563: 34,2113 01557 MFS # PREPARE TO CALCULATE ARRAY MFS
027256,000564: 34,2114 01632 CPHI
027257,000565: 34,2115 77624 CALL
027258,000566: 34,2116 70445 CDUTODCM
027259,000567: 34,2117 45160 SECAD AXC,1 CALL # MIS AND MFS ARRAYS CALCULATED $2
027260,000568: 34,2120 01535 MIS
027261,000569: 34,2121 73447 TRANSPOS
027262,000570: 34,2122 77775 VLOAD
027263,000571: 34,2123 77626 STADR
027264,000572: 34,2124 52161 STOVL TMIS +12D
027265,000573: 34,2125 77626 STADR
027266,000574: 34,2126 52167 STOVL TMIS +6
027267,000575: 34,2127 77626 STADR
027268,000576: 34,2130 76175 STORE TMIS # TMIS = TRANSPOSE(MIS) SCALED BY 2
027269,000577: 34,2131 75160 AXC,1 AXC,2
![]() |
Page 647 |
027271,000579: 34,2132 01601 TMIS
027272,000580: 34,2133 01557 MFS
027273,000581: 34,2134 77624 CALL
027274,000582: 34,2135 73417 MXM3
027275,000583: 34,2136 45575 VLOAD STADR
027276,000584: 34,2137 52203 STOVL MFI +12D
027277,000585: 34,2140 77626 STADR
027278,000586: 34,2141 52211 STOVL MFI +6
027279,000587: 34,2142 77626 STADR
027280,000588: 34,2143 76217 STORE MFI # MFI = TMIS MFS (SCALED BY 4)
027281,000589: 34,2144 45001 SETPD CALL # TRANSPOSE MFI IN PD LIST
027282,000590: 34,2145 00023 18D
027283,000591: 34,2146 73456 TRNSPSPD
027284,000592: 34,2147 45575 VLOAD STADR
027285,000593: 34,2150 52161 STOVL TMFI +12D
027286,000594: 34,2151 77626 STADR
027287,000595: 34,2152 52167 STOVL TMFI +6
027288,000596: 34,2153 77626 STADR
027289,000597: 34,2154 76175 STORE TMFI # TMFI = TRANSPOSE (MFI) SCALED BY 4
027290,000598:
027291,000599: # CALCULATE COFSKEW AND MFISYM
027292,000600:
027293,000601: 34,2155 45345 DLOAD DSU
027294,000602: 34,2156 01604 TMFI +2
027295,000603: 34,2157 01562 MFI +2
027296,000604: 34,2160 45325 PDDL DSU # CALCULATE COF SCALED BY 2/SIN(AM)
027297,000605: 34,2161 01564 MFI +4
027298,000606: 34,2162 01606 TMFI +4
027299,000607: 34,2163 45325 PDDL DSU
027300,000608: 34,2164 01614 TMFI +10D
027301,000609: 34,2165 01572 MFI +10D
027302,000610: 34,2166 77666 VDEF
027303,000611: 34,2167 01635 STORE COFSKEW # EQUALS MFISKEW
027304,000612:
027305,000613: # CALCULATE AM AND PROCEED ACCORDING TO ITS MAGNITUDE
027306,000614:
027307,000615: 34,2170 43345 DLOAD DAD
027308,000616: 34,2171 01560 MFI
027309,000617: 34,2172 01600 MFI +16D
027310,000618: 34,2173 43225 DSU DAD
027311,000619: 34,2174 30426 QUARTA
027312,000620: 34,2175 01570 MFI +8D
027313,000621: 34,2176 01645 STORE CAM # CAM = (MFI0+MFI4+MFI8-1)/2 HALF SCALE
027314,000622: 34,2177 77726 ARCCOS
027315,000623: 34,2200 01643 STORE AM # AM=ARCCOS(CAM) (AM SCALED BY 2)
027316,000624: 34,2201 51025 DSU BPL
027317,000625: 34,2202 30410 MINANG
027318,000626: 34,2203 70214 CHECKMAX
027319,000627: 34,2204 77751 TLOAD # MANEUVER LESS THAN .25 DEGREES
027320,000628: 34,2205 01632 CPHI # GO DIRECTLY INTO ATTITUDE HOLD
![]() |
Page 648 |
027322,000630: 34,2206 00767 STORE CDUXD # ABOUT COMMANDED ANGLES
027323,000631: 34,2207 77751 TLOAD
027324,000632: 34,2210 30416 NIL
027325,000633: 34,2211 00775 STORE OMEGAPD # ZERO DESIRED RATES
027326,000634: 34,2212 34772 STCALL DELDCDU # PREPARE TO END MANEUVER ON GOOD RETURN
027327,000635: 34,2213 70761 ENDMANU
027328,000636: 34,2214 45345 CHECKMAX DLOAD DSU
027329,000637: 34,2215 01643 AM
027330,000638: 34,2216 30412 MAXANG
027331,000639: 34,2217 77244 BPL VLOAD
027332,000640: 34,2220 70226 ALTCALC # UNIT
027333,000641: 34,2221 01635 COFSKEW # COFSKEW
027334,000642: 34,2222 77656 UNIT
027335,000643: 34,2223 01624 STORE COF # COF IS THE MANEUVER AXIS
027336,000644: 34,2224 77650 GOTO # SEE IF MANEUVER GOES THRU GIMBAL LOCK
027337,000645: 34,2225 71006 LOCSKIRT
027338,000646: 34,2226 53375 ALTCALC VLOAD VAD # IF AM GREATER THAN 170 DEGREES
027339,000647: 34,2227 01560 MFI
027340,000648: 34,2230 01602 TMFI
027341,000649: 34,2231 77762 VSR1
027342,000650: 34,2232 25602 STOVL MFISYM
027343,000651: 34,2233 01566 MFI +6
027344,000652: 34,2234 74455 VAD VSR1
027345,000653: 34,2235 01610 TMFI +6
027346,000654: 34,2236 25610 STOVL MFISYM +6
027347,000655: 34,2237 01574 MFI +12D
027348,000656: 34,2240 74455 VAD VSR1
027349,000657: 34,2241 01616 TMFI +12D
027350,000658: 34,2242 01616 STORE MFISYM +12D # MFISYM=(MFI+TMFI)/2 SCALED BY 4
027351,000659:
027352,000660: # CALCULATE COF
027353,000661:
027354,000662: 34,2243 70545 DLOAD SR1
027355,000663: 34,2244 01645 CAM
027356,000664: 34,2245 45325 PDDL DSU # PDO CAM $4
027357,000665: 34,2246 30414 HALFA
027358,000666: 34,2247 01645 CAM
027359,000667: 34,2250 65204 BOVB PDDL # PD2 1 - CAM $2
027360,000668: 34,2251 73501 SIGNMPAC
027361,000669: 34,2252 01622 MFISYM +16D
027362,000670: 34,2253 56225 DSU DDV
027363,000671: 34,2254 00001 0
027364,000672: 34,2255 00003 2
027365,000673: 34,2256 65366 SQRT PDDL # COFZ = SQRT(MFISYM8-CAM)/1-CAM)
027366,000674: 34,2257 01612 MFISYM +8D # $ ROOT 2
027367,000675: 34,2260 56225 DSU DDV
027368,000676: 34,2261 00001 0
027369,000677: 34,2262 00003 2
027370,000678: 34,2263 65366 SQRT PDDL # COFY = SQRT(MFISYM4-CAM)/(1-CAM) $ROOT2
![]() |
Page 649 |
027372,000680: 34,2264 01602 MFISYM
027373,000681: 34,2265 56225 DSU DDV
027374,000682: 34,2266 00001 0
027375,000683: 34,2267 00003 2
027376,000684: 34,2270 55566 SQRT VDEF # COFX = SQRT(MFISYM-CAM)/(1-CAM) $ROOT 2
027377,000685: 34,2271 77656 UNIT
027378,000686: 34,2272 01624 STORE COF
027379,000687:
027380,000688: # DETERMINE LARGEST COF AND ADJUST ACCORDINGLY
027381,000689:
027382,000690: 34,2273 45345 COFMAXGO DLOAD DSU
027383,000691: 34,2274 01624 COF
027384,000692: 34,2275 01626 COF +2
027385,000693: 34,2276 71240 BMN DLOAD # COFY G COFX
027386,000694: 34,2277 70306 COMP12
027387,000695: 34,2300 01624 COF
027388,000696: 34,2301 50025 DSU BMN
027389,000697: 34,2302 01630 COF +4
027390,000698: 34,2303 70363 METHOD3 # COFZ G COFX OR COFY
027391,000699: 34,2304 77650 GOTO
027392,000700: 34,2305 70337 METHOD1 # COFX G COFY OR COFZ
027393,000701: 34,2306 45345 COMP12 DLOAD DSU
027394,000702: 34,2307 01626 COF +2
027395,000703: 34,2310 01630 COF +4
027396,000704: 34,2311 77640 BMN
027397,000705: 34,2312 70363 METHOD3 # COFZ G COFY OR COFX
027398,000706:
027399,000707: 34,2313 51145 METHOD2 DLOAD BPL # COFY MAX
027400,000708: 34,2314 01637 COFSKEW +2 # UY
027401,000709: 34,2315 70321 U2POS
027402,000710: 34,2316 57575 VLOAD VCOMP
027403,000711: 34,2317 01624 COF
027404,000712: 34,2320 01624 STORE COF
027405,000713: 34,2321 51145 U2POS DLOAD BPL
027406,000714: 34,2322 01604 MFISYM +2 # UX UY
027407,000715: 34,2323 70327 OKU21
027408,000716: 34,2324 57545 DLOAD DCOMP # SIGN OF UX OPPOSITE TO UY
027409,000717: 34,2325 01624 COF
027410,000718: 34,2326 01624 STORE COF
027411,000719: 34,2327 51145 OKU21 DLOAD BPL
027412,000720: 34,2330 01614 MFISYM +10D # UY UZ
027413,000721: 34,2331 71006 LOCSKIRT
027414,000722: 34,2332 57545 DLOAD DCOMP # SIGN OF UZ OPPOSITE TO UY
027415,000723: 34,2333 01630 COF +4
027416,000724: 34,2334 01630 STORE COF +4
027417,000725: 34,2335 77650 GOTO
027418,000726: 34,2336 71006 LOCSKIRT
027419,000727: 34,2337 51145 METHOD1 DLOAD BPL # COFX MAX
027420,000728: 34,2340 01635 COFSKEW # UX
027421,000729: 34,2341 70345 U1POS
![]() |
Page 650 |
027423,000731: 34,2342 57575 VLOAD VCOMP
027424,000732: 34,2343 01624 COF
027425,000733: 34,2344 01624 STORE COF
027426,000734: 34,2345 51145 U1POS DLOAD BPL
027427,000735: 34,2346 01604 MFISYM +2 # UX UY
027428,000736: 34,2347 70353 OKU12
027429,000737: 34,2350 57545 DLOAD DCOMP
027430,000738: 34,2351 01626 COF +2 # SIGN OF UY OPPOSITE TO UX
027431,000739: 34,2352 01626 STORE COF +2
027432,000740: 34,2353 51145 OKU12 DLOAD BPL
027433,000741: 34,2354 01606 MFISYM +4 # UX UZ
027434,000742: 34,2355 71006 LOCSKIRT
027435,000743: 34,2356 57545 DLOAD DCOMP # SIGN OF UZ OPPOSITE TO UY
027436,000744: 34,2357 01630 COF +4
027437,000745: 34,2360 01630 STORE COF +4
027438,000746: 34,2361 77650 GOTO
027439,000747: 34,2362 71006 LOCSKIRT
027440,000748: 34,2363 51145 METHOD3 DLOAD BPL # COFZ MAX
027441,000749: 34,2364 01641 COFSKEW +4 # UZ
027442,000750: 34,2365 70371 U3POS
027443,000751: 34,2366 57575 VLOAD VCOMP
027444,000752: 34,2367 01624 COF
027445,000753: 34,2370 01624 STORE COF
027446,000754: 34,2371 51145 U3POS DLOAD BPL
027447,000755: 34,2372 01606 MFISYM +4 # UX UZ
027448,000756: 34,2373 70377 OKU31
027449,000757: 34,2374 57545 DLOAD DCOMP
027450,000758: 34,2375 01624 COF # SIGN OF UX OPPOSITE TO UZ
027451,000759: 34,2376 01624 STORE COF
027452,000760: 34,2377 51145 OKU31 DLOAD BPL
027453,000761: 34,2400 01614 MFISYM +10D # UY UZ
027454,000762: 34,2401 71006 LOCSKIRT
027455,000763: 34,2402 57545 DLOAD DCOMP
027456,000764: 34,2403 01626 COF +2 # SIGN OF UY OPPOSITE TO UZ
027457,000765: 34,2404 01626 STORE COF +2
027458,000766: 34,2405 77650 GOTO
027459,000767: 34,2406 71006 LOCSKIRT
027460,000768:
![]() |
Page 651 |
027462,000770: # MATRIX OPERATIONS
027463,000771:
027464,000772: 35,3417 BANK 35
027465,000773: 35,3417 E3,1535 EBANK= MIS
027466,000774:
027467,000775: 35,3417 77601 MXM3 SETPD # MXM3 MULTIPLIES 2 3X3 MATRICES
027468,000776: 35,3420 00001 0 # AND LEAVES RESULT IN PD LIST
027469,000777: 35,3421 64743 DLOAD* PDDL* # ADDRESS OF 1ST MATRIX IN XR1
027470,000778: 35,3422 77762 12D,2 # ADDRESS OF 2ND MATRIX IN XR2
027471,000779: 35,3423 77770 6,2
027472,000780: 35,3424 55523 PDDL* VDEF # DEFINE VECTOR M2(COL 1)
027473,000781: 35,3425 77776 0,2
027474,000782: 35,3426 64717 MXV* PDDL* # M1XM2(COL 1) IN PD
027475,000783: 35,3427 00001 0,1
027476,000784: 35,3430 77760 14D,2
027477,000785: 35,3431 64723 PDDL* PDDL*
027478,000786: 35,3432 77766 8D,2
027479,000787: 35,3433 77774 2,2
027480,000788: 35,3434 63666 VDEF MXV* # DEFINE VECTOR M2(COL 2)
027481,000789: 35,3435 00001 0,1
027482,000790: 35,3436 64723 PDDL* PDDL* # M1XM2(COL 2) IN PD
027483,000791: 35,3437 77756 16D,2
027484,000792: 35,3440 77764 10D,2
027485,000793: 35,3441 55523 PDDL* VDEF # DEFINE VECTOR M2(COL 3)
027486,000794: 35,3442 77772 4,2
027487,000795: 35,3443 41517 MXV* PUSH # M1XM2(COL 3) IN PD
027488,000796: 35,3444 00001 0,1
027489,000797: 35,3445 77650 GOTO
027490,000798: 35,3446 73456 TRNSPSPD # REVERSE ROWS AND COLS IN PD AND
027491,000799: # RETURN WITH M1XM2 IN PD LIST
027492,000800:
027493,000801: 35,3447 76601 TRANSPOS SETPD VLOAD* # TRANSPOS TRANSPOSES A 3X3 MATRIX
027494,000802: 35,3450 00001 0 # AND LEAVES RESULT IN PD LIST
027495,000803: 35,3451 00001 0,1 # MATRIX ADDRESS IN XR1
027496,000804: 35,3452 62713 PDVL* PDVL*
027497,000805: 35,3453 00007 6,1
027498,000806: 35,3454 00015 12D,1
027499,000807: 35,3455 77606 PUSH # MATRIX IN PD
027500,000808: 35,3456 65345 TRNSPSPD DLOAD PDDL # ENTER WITH MATRIX IN PD LIST
027501,000809: 35,3457 00003 2
027502,000810: 35,3460 00007 6
027503,000811: 35,3461 14003 STODL 2
027504,000812: 35,3462 77626 STADR
027505,000813: 35,3463 63770 STODL 6
027506,000814: 35,3464 00005 4
027507,000815: 35,3465 77725 PDDL
027508,000816: 35,3466 00015 12D
027509,000817: 35,3467 14005 STODL 4
027510,000818: 35,3470 77626 STADR
027511,000819: 35,3471 63762 STODL 12D
![]() |
Page 652 |
027513,000821: 35,3472 00013 10D
027514,000822: 35,3473 77725 PDDL
027515,000823: 35,3474 00017 14D
027516,000824: 35,3475 14013 STODL 10D
027517,000825: 35,3476 77626 STADR
027518,000826: 35,3477 77760 STORE 14D
027519,000827: 35,3500 77616 RVQ # RETURN WITH TRANSPOSED MATRIX IN PD LIST
027520,000828:
![]() |
Page 653 |
027522,000830: 34,2407 BANK 34
027523,000831: 34,2407 E3,1535 EBANK= MIS
027524,000832:
027525,000833: 34,2407 00013 13563 MINANG 2DEC 0.00069375
027526,000834:
027527,000835: 34,2411 17070 34343 MAXANG 2DEC 0.472222222
027528,000836:
027529,000837: 34,2413 20000 00000 HALFA 2DEC 0.5
027530,000838:
027531,000839: 34,2415 00000 00000 NIL 2DEC 0.0
027532,000840:
027533,000841: 34,2417 00000 00000 2DEC 0.0
027534,000842:
027535,000843: 34,2421 00000 00000 2DEC 0.0
027536,000844:
027537,000845: 34,2423 20000 00000 2DEC 0.5
027538,000846:
027539,000847: 34,2425 10000 00000 QUARTA 2DEC .25
027540,000848: # GIMBAL LOCK CONSTANTS
027541,000849:
027542,000850: # D = MGA CORRESPONDING TO GIMBAL LOCK = 60 DEGREES
027543,000851: # NGL = BUFFER ANGLE (TO AVOID DIVISIONS BY ZERO) = 2 DEGREES
027544,000852:
027545,000853: 34,2427 15666 20443 SD 2DEC .433015 # = SIN(D) $2
027546,000854:
027547,000855: 34,2431 33555 01106 K3S1 2DEC .86603 # = SIN(D) $1
027548,000856:
027549,000857: 34,2433 67777 77777 K4 2DEC -.25 # = -COS(D) $2
027550,000858:
027551,000859: 34,2435 04000 00000 K4SQ 2DEC .125 # = COS(D)COS(D) $2
027552,000860:
027553,000861: 34,2437 00216 36323 SNGLCD 2DEC .008725 # = SIN(NGL)COS(D) $2
027554,000862:
027555,000863: 34,2441 17773 00057 CNGL 2DEC .499695 # COS(NGL) $2
027556,000864:
027557,000865: 34,2443 12525 12525 LOCKANGL 2DEC .3333333333 # $60DEGG
027558,000866:
027559,000867: 35,3501 BANK 35
027560,000868: 35,3501 E3,1535 EBANK= MIS
027561,000869: # ROUTINE FOR LIMITING THE SIZE OF MPAC ON OVERFLOW TO OP POSMAX OR DP NEGMAX
027562,000870:
027563,000871: 35,3501 00006 SIGNMPAC EXTEND
027564,000872: 35,3502 37743 DCA DPOSMAX
027565,000873: 35,3503 52145 DXCH MPAC
027566,000874: 35,3504 10000 CCS A
027567,000875: 35,3505 37767 CAF ZERO
027568,000876: 35,3506 16544 TCF SLOAD2 +2
027569,000877: 35,3507 13510 TCF +1
027570,000878: 35,3510 00006 EXTEND
![]() |
Page 654 |
027572,000880: 35,3511 47743 DCS DPOSMAX
027573,000881: 35,3512 16542 TCF SLOAD2
027574,000882:
027575,000883:
027576,000884:
027577,000885: # INTERPRETIVE SUBROUTINE TO READ THE CDU ANGLES
027578,000886:
027579,000887: 35,3513 30034 READCDUK CA CDUZ # LOAD T(MPAC) WITH CDU ANGLES
027580,000888: 35,3514 54146 TS MPAC +2
027581,000889: 35,3515 00006 EXTEND
027582,000890: 35,3516 30033 DCA CDUX # AND CHANGE MODE TO TRIPLE PRECISION
027583,000891: 35,3517 16554 TCF TLOAD +6
027584,000892:
027585,000893:
027586,000894:
027587,000895: 34,2445 BANK 34
027588,000896: 34,2445 E3,1535 EBANK= MIS
027589,000897: 34,2445 66370 CDUTODCM AXT,1 SSP
027590,000898: 34,2446 00003 OCT 3
027591,000899: 34,2447 00051 S1
027592,000900: 34,2450 00001 OCT 1 # SET XR1, S1, AND PD FOR LOOP
027593,000901: 34,2451 00010 STORE 7
027594,000902: 34,2452 77601 SETPD
027595,000903: 34,2453 00001 0
027596,000904: 34,2454 47133 LOOPSIN SLOAD* RTB
027597,000905: 34,2455 00013 10D,1
027598,000906: 34,2456 33457 CDULOGIC
027599,000907: 34,2457 00013 STORE 10D # LOAD PD WITH 0 SIN(PHI)
027600,000908: 34,2460 65356 SIN PDDL # 2 COS(PHI)
027601,000909: 34,2461 00013 10D # 4 SIN(THETA)
027602,000910: 34,2462 41546 COS PUSH # 6 COS(THETA)
027603,000911: 34,2463 71300 TIX,1 DLOAD # 8 SIN(PSI)
027604,000912: 34,2464 70454 LOOPSIN # 10 COS(PSI)
027605,000913: 34,2465 00007 6
027606,000914: 34,2466 72405 DMP SL1
027607,000915: 34,2467 00013 10D
027608,000916: 34,2470 10001 STORE 0,2 # C0=COS(THETA)COS(PSI)
027609,000917: 34,2471 41345 DLOAD DMP
027610,000918: 34,2472 00005 4
027611,000919: 34,2473 00001 0
027612,000920: 34,2474 41325 PDDL DMP # (PD6 SIN(THETA)SIN(PHI))
027613,000921: 34,2475 00007 6
027614,000922: 34,2476 00011 8D
027615,000923: 34,2477 72405 DMP SL1
027616,000924: 34,2500 00003 2
027617,000925: 34,2501 72421 BDSU SL1
027618,000926: 34,2502 00015 12D
027619,000927: 34,2503 10003 STORE 2,2 # C1=-COS(THETA)SIN(PSI)COS(PHI)
027620,000928: 34,2504 41345 DLOAD DMP
027621,000929: 34,2505 00003 2
![]() |
Page 655 |
027623,000931: 34,2506 00005 4
027624,000932: 34,2507 41325 PDDL DMP # (PD7 COS(PHI)SIN(THETA)) SCALED 4
027625,000933: 34,2510 00007 6
027626,000934: 34,2511 00011 8D
027627,000935: 34,2512 72405 DMP SL1
027628,000936: 34,2513 00001 0
027629,000937: 34,2514 72415 DAD SL1
027630,000938: 34,2515 00017 14D
027631,000939: 34,2516 10005 STORE 4,2 # C2=COS(THETA)SIN(PSI)SIN(PHI)
027632,000940: 34,2517 77745 DLOAD
027633,000941: 34,2520 00011 8D
027634,000942: 34,2521 10007 STORE 6,2 # C3=SIN(PSI)
027635,000943: 34,2522 77745 DLOAD
027636,000944: 34,2523 00013 10D
027637,000945: 34,2524 72405 DMP SL1
027638,000946: 34,2525 00003 2
027639,000947: 34,2526 10011 STORE 8D,2 # C4=COS(PSI)COS(PHI)
027640,000948: 34,2527 41345 DLOAD DMP
027641,000949: 34,2530 00013 10D
027642,000950: 34,2531 00001 0
027643,000951: 34,2532 72476 DCOMP SL1
027644,000952: 34,2533 10013 STORE 10D,2 # C5=-COS(PSI)SIN(PHI)
027645,000953: 34,2534 41345 DLOAD DMP
027646,000954: 34,2535 00005 4
027647,000955: 34,2536 00013 10D
027648,000956: 34,2537 72476 DCOMP SL1
027649,000957: 34,2540 10015 STORE 12D,2 # C6=-SIN(THETA)COS(PSI)
027650,000958: 34,2541 77745 DLOAD
027651,000959: 34,2542 72405 DMP SL1 # (PUSH UP 7)
027652,000960: 34,2543 00011 8D
027653,000961: 34,2544 41325 PDDL DMP # (PD7 COS(PHI)SIN(THETA)SIN(PSI)) SCALE 4
027654,000962: 34,2545 00007 6
027655,000963: 34,2546 00001 0
027656,000964: 34,2547 72415 DAD SL1 # (PUSH UP 7)
027657,000965: 34,2550 77626 STADR # C7=COS(PHI)SIN(THETA)SIN(PSI)
027658,000966: 34,2551 67760 STORE 14D,2 # +COS(THETA)SIN(PHI)
027659,000967: 34,2552 77745 DLOAD
027660,000968: 34,2553 72405 DMP SL1 # (PUSH UP 6)
027661,000969: 34,2554 00011 8D
027662,000970: 34,2555 41325 PDDL DMP # (PD6 SIN(THETA)SIN(PHI)SIN(PSI)) SCALE 4
027663,000971: 34,2556 00007 6
027664,000972: 34,2557 00003 2
027665,000973: 34,2560 72425 DSU SL1 # (PUSH UP 6)
027666,000974: 34,2561 77626 STADR
027667,000975: 34,2562 67756 STORE 16D,2 # C8=-SIN(THETA)SIN(PHI)SIN(PSI)
027668,000976: 34,2563 77616 RVQ # +COS(THETA)COS(PHI)
027669,000977:
027670,000978: # CALCULATION OF THE MATRIX DEL......
027671,000979:
027672,000980: # * * --T *
![]() |
Page 656 |
027674,000982: # DEL = (IDMATRIX)COS(A)+UU (1-COS(A))+UX SIN(A) SCALED 1
027675,000983: # -
027676,000984: # WHERE U IS A UNIT VECTOR (DP SCALED 2) ALONG THE AXIS OF ROTATION.
027677,000985: # A IS THE ANGLE OF ROTATION (DP SCALED 2)
027678,000986: # -
027679,000987: # UPON ENTRY THE STARTING ADDRESS OF U IS COF, AND A IS IN MPAC
027680,000988:
027681,000989: 34,2564 41401 DELCOMP SETPD PUSH # MPAC CONTAINS THE ANGLE A
027682,000990: 34,2565 00001 0
027683,000991: 34,2566 65356 SIN PDDL # PD0 = SIN(A)
027684,000992: 34,2567 41546 COS PUSH # PD2 = COS(A)
027685,000993: 34,2570 65302 SR2 PDDL # PD2 = COS(A) $8
027686,000994: 34,2571 41021 BDSU BOVB
027687,000995: 34,2572 30414 HALFA
027688,000996: 34,2573 73501 SIGNMPAC
027689,000997: 34,2574 77725 PDDL # PD4 = 1-COS(A)
027690,000998:
027691,000999: # COMPUTE THE DIAGONAL COMPONENTS OF DEL
027692,001000:
027693,001001: 34,2575 01624 COF
027694,001002: 34,2576 41316 DSQ DMP
027695,001003: 34,2577 00005 4
027696,001004: 34,2600 52415 DAD SL3 # UXUX(1-COS(A)) $8
027697,001005: 34,2601 00003 2
027698,001006: 34,2602 77604 BOVB
027699,001007: 34,2603 73501 SIGNMPAC
027700,001008: 34,2604 15560 STODL KEL # UX UX(1-COS(A)) +COS(A) $1
027701,001009: 34,2605 01626 COF +2
027702,001010: 34,2606 41316 DSQ DMP
027703,001011: 34,2607 00005 4
027704,001012: 34,2610 52415 DAD SL3 # UYUY(1-COS(A)) $8
027705,001013: 34,2611 00003 2
027706,001014: 34,2612 77604 BOVB
027707,001015: 34,2613 73501 SIGNMPAC
027708,001016: 34,2614 15570 STODL KEL +8D # UY UY(1-COS(A)) +COS(A) $1
027709,001017: 34,2615 01630 COF +4
027710,001018: 34,2616 41316 DSQ DMP
027711,001019: 34,2617 00005 4
027712,001020: 34,2620 52415 DAD SL3 # UZUZ(1-COS(A)) $8
027713,001021: 34,2621 00003 2
027714,001022: 34,2622 77604 BOVB
027715,001023: 34,2623 73501 SIGNMPAC
027716,001024: 34,2624 01600 STORE KEL +16D # UZ UZ(1-COS(A)) +COS(A) $1
027717,001025:
027718,001026: # COMPUTE THE OFF DIAGONAL TERMS OF DEL
027719,001027:
027720,001028: 34,2625 41345 DLOAD DMP
027721,001029: 34,2626 01624 COF
027722,001030: 34,2627 01626 COF +2
![]() |
Page 657 |
027724,001032: 34,2630 72405 DMP SL1
027725,001033: 34,2631 00005 4
027726,001034: 34,2632 41325 PDDL DMP # D6 UX UY (1-COS A) $ 4
027727,001035: 34,2633 01630 COF +4
027728,001036: 34,2634 00001 0
027729,001037: 34,2635 43206 PUSH DAD # D8 UZ SIN A $ 4
027730,001038: 34,2636 00007 6
027731,001039: 34,2637 41112 SL2 BOVB
027732,001040: 34,2640 73501 SIGNMPAC
027733,001041: 34,2641 15566 STODL KEL +6
027734,001042: 34,2642 62421 BDSU SL2
027735,001043: 34,2643 77604 BOVB
027736,001044: 34,2644 73501 SIGNMPAC
027737,001045: 34,2645 15562 STODL KEL +2
027738,001046: 34,2646 01624 COF
027739,001047: 34,2647 41205 DMP DMP
027740,001048: 34,2650 01630 COF +4
027741,001049: 34,2651 00005 4
027742,001050: 34,2652 65352 SL1 PDDL # D6 UX UZ (1-COS A ) $ 4
027743,001051: 34,2653 01626 COF +2
027744,001052: 34,2654 41405 DMP PUSH # D8 UY SIN(A)
027745,001053: 34,2655 00001 0
027746,001054: 34,2656 62415 DAD SL2
027747,001055: 34,2657 00007 6
027748,001056: 34,2660 77604 BOVB
027749,001057: 34,2661 73501 SIGNMPAC
027750,001058: 34,2662 15564 STODL KEL +4 # UX UZ (1-COS(A))+UY SIN(A)
027751,001059: 34,2663 62421 BDSU SL2
027752,001060: 34,2664 77604 BOVB
027753,001061: 34,2665 73501 SIGNMPAC
027754,001062: 34,2666 15574 STODL KEL +12D # UX UZ (1-COS(A))-UY SIN(A)
027755,001063: 34,2667 01626 COF +2
027756,001064: 34,2670 41205 DMP DMP
027757,001065: 34,2671 01630 COF +4
027758,001066: 34,2672 00005 4
027759,001067: 34,2673 65352 SL1 PDDL # D6 UY UZ (1-COS(A)) $ 4
027760,001068: 34,2674 01624 COF
027761,001069: 34,2675 41405 DMP PUSH # D8 UX SIN(A)
027762,001070: 34,2676 00001 0
027763,001071: 34,2677 62415 DAD SL2
027764,001072: 34,2700 00007 6
027765,001073: 34,2701 77604 BOVB
027766,001074: 34,2702 73501 SIGNMPAC
027767,001075: 34,2703 15576 STODL KEL +14D # UY UZ(1-COS(A)) +UX SIN(A)
027768,001076: 34,2704 62421 BDSU SL2
027769,001077: 34,2705 77604 BOVB
027770,001078: 34,2706 73501 SIGNMPAC
027771,001079: 34,2707 01572 STORE KEL +10D # UY UZ (1-COS(A)) -UX SIN(A)
027772,001080: 34,2710 77616 RVQ
027773,001081:
![]() |
Page 658 |
027775,001083: # DIRECTION COSINE MATRIX TO CDU ANGLE ROUTINE
027776,001084: # X1 CONTAINS THE COMPLEMENT OF THE STARTING ADDRESS FOR MATRIX (SCALED 2)
027777,001085: # LEAVES CDU ANGLES SCALED 2PI IN V(MPAC)
027778,001086: # COS(MGA) WILL BE LEFT IN S1 (SCALED 1)
027779,001087:
027780,001088: # THE DIRECTION COSINE MATRIX RELATING S/C AXES TO STABLE MEMBER AXES CAN BE WRITTEN AS***
027781,001089:
027782,001090: # C =COS(THETA)COS(PSI)
027783,001091: # 0
027784,001092:
027785,001093: # C =-COS(THETA)SIN(PSI)COS(PHI)+SI (THETA)SIN(PHI)
027786,001094: # 1
027787,001095:
027788,001096: # C =COS(THETA)SIN(PSI)SIN(PHI) + S N(THETA)COS(PHI)
027789,001097: # 2
027790,001098:
027791,001099: # C =SIN(PSI)
027792,001100: # 3
027793,001101:
027794,001102: # C =COS(PSI)COS(PHI)
027795,001103: # 4
027796,001104:
027797,001105: # C =-COS(PSI)SIN(PHI)
027798,001106: # 5
027799,001107:
027800,001108: # C =-SIN(THETA)COS(PSI)
027801,001109: # 6
027802,001110:
027803,001111: # C =SIN(THETA)SIN(PSI)COS(PHI)+COS THETA)SIN(PHI)
027804,001112: # 7
027805,001113:
027806,001114: # C =-SIN(THETA)SIN(PSI)SIN(PHI)+CO (THETA)COS(PHI)
027807,001115: # 8
027808,001116:
027809,001117: # WHERE PHI = OGA
027810,001118: # THETA = IGA
027811,001119: # PSI = MGA
027812,001120:
027813,001121: 34,2711 67543 DCMTOCDU DLOAD* ARCSIN
027814,001122: 34,2712 00007 6,1
027815,001123: 34,2713 71406 PUSH COS # PD +0 PSI
027816,001124: 34,2714 41152 SL1 BOVB
027817,001125: 34,2715 73501 SIGNMPAC
027818,001126: 34,2716 00051 STORE S1
027819,001127: 34,2717 57543 DLOAD* DCOMP
027820,001128: 34,2720 00015 12D,1
027821,001129: 34,2721 67471 DDV ARCSIN
027822,001130: 34,2722 00051 S1
027823,001131: 34,2723 51123 PDDL* BPL # PD +2 THETA
027824,001132: 34,2724 00001 0,1 # MUST CHECK THE SIGN OF COS(THETA)
027825,001133: 34,2725 70737 OKTHETA # TO DETERMINE THE PROPER QUADRANT
027826,001134: 34,2726 57545 DLOAD DCOMP
027827,001135: 34,2727 43244 BPL DAD
027828,001136: 34,2730 70734 SUHALFA
027829,001137: 34,2731 30414 HALFA
027830,001138: 34,2732 77650 GOTO
027831,001139: 34,2733 70736 CALCPHI
027832,001140: 34,2734 77625 SUHALFA DSU
![]() |
Page 659 |
027834,001142: 34,2735 30414 HALFA
027835,001143: 34,2736 77606 CALCPHI PUSH
027836,001144: 34,2737 57543 OKTHETA DLOAD* DCOMP
027837,001145: 34,2740 00013 10D,1
027838,001146: 34,2741 67471 DDV ARCSIN
027839,001147: 34,2742 00051 S1
027840,001148: 34,2743 51123 PDDL* BPL # PUSH DOWN PHI
027841,001149: 34,2744 00011 8D,1
027842,001150: 34,2745 70757 OKPHI
027843,001151: 34,2746 57545 DLOAD DCOMP # PUSH UP PHI
027844,001152: 34,2747 43244 BPL DAD
027845,001153: 34,2750 70754 SUHALFAP
027846,001154: 34,2751 30414 HALFA
027847,001155: 34,2752 77650 GOTO
027848,001156: 34,2753 70760 VECOFANG
027849,001157: 34,2754 52025 SUHALFAP DSU GOTO
027850,001158: 34,2755 30414 HALFA
027851,001159: 34,2756 70760 VECOFANG
027852,001160: 34,2757 77745 OKPHI DLOAD # PUSH UP PHI
027853,001161: 34,2760 43466 VECOFANG VDEF RVQ
027854,001162:
![]() |
Page 660 |
027856,001164: # ROUTINES FOR TERMINATING THE AUTOMATIC MANEUVER AND RETURNING TO USER
027857,001165:
027858,001166: 34,2761 77776 ENDMANU EXIT
027859,001167: 34,2762 37762 CAF TWO
027860,001168: 34,2763 00004 INHINT
027861,001169: 34,2764 05663 TC WAITLIST # PREPARE FOR A GOOD (NORMAL) RETURN VIA
027862,001170: 34,2765 E3,1535 EBANK= MIS
027863,001171: 34,2765 03710 70063 2CADR GOODMANU # GOODEND
027864,001172:
027865,001173: 34,2767 00003 RELINT
027866,001174: 34,2770 05567 TC ENDOFJOB
027867,001175:
027868,001176: 34,2771 77776 TOOBAD EXIT # INITIAL OR FINAL GIMBAL ANGLES IN
027869,001177: 34,2772 37762 CAF TWO # GIMBAL LOCK
027870,001178: 34,2773 00004 INHINT
027871,001179: 34,2774 05663 TC WAITLIST
027872,001180: 34,2775 E3,1535 EBANK= MIS
027873,001181: 34,2775 03001 70063 2CADR NOGO # PREPARE FOR A BAD RETURN VIA BADEND
027874,001182:
027875,001183: 34,2777 00003 RELINT
027876,001184: 34,3000 05567 TC ENDOFJOB
027877,001185:
027878,001186: 34,3001 06076 NOGO TC FLAG2DWN # RESET BIT 11 OF FLAGWRD2 TO SIGNAL END
027879,001187: 34,3002 02000 OCT 2000 # OF KALCMANU
027880,001188: 34,3003 36311 CAF THREE
027881,001189: 34,3004 05225 TC POSTJUMP # RETURN UNDER WAITLIST VIA BADEND
027882,001190: 34,3005 26715 CADR BADEND # AND WAKE UP USER
End of include-file ATTITUDE_MANEUVER_ROUTINE.agc. Parent file is MAIN.agc