Source Code
![]() |
These source-code files derive from a printout of Luminary 210 (Apollo 15-17
Lunar Module guidance computer program), from the personal library of
original AGC developer Don Eyles, digitally photographed at archive.org,
financially sponsored by Jim Lawton, and transcribed to source code by a
team of volunteers. This colorized, syntax-highlighted form was created
by assembling that transcribed source code. Note that the full page images
are available on the
Virtual AGC project page at archive.org, while reduced-size images
are presented at the VirtualAGC project website. Report or fix any
transcription errors at
the Virtual AGC project code repository. Notations on the program listing read, in part: GAP: ASSEMBLE REVISION 210 OF AGC PROGRAM LUMINARY BY NASA 2021112-161 17:11 MAR. 19,1971Note that the date is the date of the printout, not the date of the program revision. |
021516,000002: ## Copyright: Public domain.
021517,000003: ## Filename: R60,R62.agc
021518,000004: ## Purpose: A section of Luminary revision 210.
021519,000005: ## It is part of the source code for the Lunar Module's (LM)
021520,000006: ## Apollo Guidance Computer (AGC) for Apollo 15-17.
021521,000007: ## This file is intended to be a faithful transcription, except
021522,000008: ## that the code format has been changed to conform to the
021523,000009: ## requirements of the yaYUL assembler rather than the
021524,000010: ## original YUL assembler.
021525,000011: ## Reference: pp. 487-500
021526,000012: ## Assembler: yaYUL
021527,000013: ## Contact: Ron Burkey <info@sandroid.org>.
021528,000014: ## Website: www.ibiblio.org/apollo/index.html
021529,000015: ## Mod history: 2016-11-17 JL Created from Luminary131 version.
021530,000016: ## 2016-11-27 HG Transcribed
021531,000017: ## 2016-12-07 HG Fix P00 -> POO
021532,000018: ## Change POO -> P00 in some comments
021533,000019: ## 2016-12-23 RSB Proofed comment text with octopus/ProoferComments
021534,000020: ## and fixed all errors found.
021535,000021: ## 2017-03-09 RSB Comment text fixes noted in proofing Luminary 116.
021536,000022: ## 2017-03-16 RSB Comment-text fixes identified in 5-way
021537,000023: ## side-by-side diff of Luminary 69/99/116/131/210.
021538,000024:
![]() |
Page 487 |
021540,000026: # MOD NO: 0 DATE: 1 MAY 1968
021541,000027: # MOD BY: DIGITAL DEVEL GROUP LOG SECTION R60,R62
021542,000028:
021543,000029: # FUNCTIONAL DESCRIPTION:
021544,000030:
021545,000031: # CALLED AS A GENERAL SUBROUTINE TO MANEUVER THE LM TO A SPECIFIED
021546,000032: # ATTITUDE.
021547,000033:
021548,000034: # 1. IF THE 3-AXIS FLAG IS NOT SET THE FINAL CDU ANGLES ARE
021549,000035: # CALCULATED (VECPOINT).
021550,000036:
021551,000037: # 2. THE FDAI BALL ANGLES (NOUN 18) ARE CALCULATED (BALLANGS).
021552,000038:
021553,000039: # 3. REQUEST FLASHING DISPLAY V50 N18 PLEASE PERFORM AUTO MANEUVER.
021554,000040:
021555,000041: # 4. IF PRIORITY DISPLAY FLAG IS SET DO A PHASECHANGE. THEN AWAIT
021556,000042: # ASTRONAUT RESPONSE.
021557,000043:
021558,000044: # 5. DISPLAY RESPONSE RETURNS:
021559,000045:
021560,000046: # A. ENTER - RESET 3-AXIS FLAG AND RETURN TO CLIENT.
021561,000047:
021562,000048: # B. TERMINATE - IF IN P00 GO TO STEP 5A. OTHERWISE CHECK IF R61 IS
021563,000049: # THE CALLING PROGRAM. IF IN R61 AN EXIT IS MADE TO GOTOV56. IF
021564,000050: # NOT IN R61 AN EXIT IS DONE VIA GOTOP00H.
021565,000051:
021566,000052: # C. PROCEED - CONTINUE WITH PROGRAM AT STEP 6.
021567,000053:
021568,000054: # 6. IF THE 3-AXISFLAG IS NOT SET, THE FINAL CDU ANGLES ARE CALCULATED
021569,000055: # (VECPOINT).
021570,000056:
021571,000057: # 7. THE FDAI BALL ANGLES (NOUN 18) ARE CALCULATED (BALLANGS).
021572,000058:
021573,000059: # 8. IF THE G+N SWITCH IS NOT SET GO BACK TO STEP 3.
021574,000060:
021575,000061: # 9. IF THE AUTO SWITCH IS NOT SET GO BACK TO STEP 3.
021576,000062:
021577,000063: # 10. NONFLASHING DISPLAY V06N18 (FDAI ANGLES).
021578,000064:
021579,000065: # 11. DO A PHASECHANGE.
021580,000066:
021581,000067: # 12. DO A MANEUVER CALCULATION AND ICDU DRIVE ROUTINE TO ACHIEVE FINAL
021582,000068:
021583,000069: # GIMBAL ANGLES (GOMANUR).
021584,000070: # 13. AT END OF MANEUVER GO TO STEP 3.
021585,000071:
021586,000072: # IF SATISFACTORY MANEUVER STEP 5A EXITS R60.
021587,000073: # FOR FURTHER ADJUSTMENT OF THE VEHICLE ATTITUDE ABOUT THE
021588,000074: # DESIRED VECTOR, THE ROUTINE MAY BE PERFORMED AGAIN STARTING AT
021589,000075:
![]() |
Page 488 |
021591,000077: # STEP 5C.
021592,000078:
021593,000079: # CALLING SEQUENCE: TC BANKCALL
021594,000080: # CADR R60LEM
021595,000081:
021596,000082: # ERASABLE INITIALIZATION REQUIRED : SCAXIS, POINTVSM (FOR VECPOINT)
021597,000083: # 3AXISFLG.
021598,000084:
021599,000085: # SUBROUTINES CALLED: VECPOINT, BALLANGS, GOPERF2R, LINUS, GODSPER,
021600,000086: # GOMANUR, DOWNFLAG, PHASCHNG, UPFLAG
021601,000087:
021602,000088: # NORMAL EXIT MODES: CAE TEMPR60 (CALLERS RETURN ADDRESS)
021603,000089: # TC BANKJUMP
021604,000090:
021605,000091: # ALARMS: NONE
021606,000092:
021607,000093: # OUTPUT: NONE
021608,000094:
021609,000095: # DEBRIS: CPHI, CTHETA, CPSI, 3AXISFLG, TBASE2
021610,000096:
021611,000097:
021612,000098: 34,2000 BANK 34
021613,000099: 26,2000 SETLOC MANUVER
021614,000100: 26,2000 BANK
021615,000101:
021616,000102: 26,2125 1163 EBANK= TEMPR60
021617,000103:
021618,000104: 26,2125 COUNT* $$/R06
021619,000105: 26,2125 04636 R60LEM TC MAKECADR
021620,000106: 26,2126 55163 TS TEMPR60
021621,000107:
021622,000108: 26,2127 34737 REDOMANN CAF 3AXISBIT
021623,000109: 26,2130 70101 MASK FLAGWRD5 # IS 3-AXIS FLAG SET
021624,000110: 26,2131 10000 CCS A
021625,000111: 26,2132 12140 TCF TOBALL # YES
021626,000112: 26,2133 06060 TC INTPRET
021627,000113: 26,2134 77624 CALL
021628,000114: 26,2135 56040 VECPOINT # TO COMPUTE FINAL ANGLES
021629,000115: 26,2136 00322 STORE CPHI # STORE FINAL ANGLES - CPHI,CTHETA,CPSI
021630,000116: 26,2137 77776 EXIT
021631,000117:
021632,000118: 26,2140 05506 TOBALL TC UPFLAG # INSURE THAT TOTAL ATTITUDE ERRORS ARE
021633,000119: 26,2141 00013 ADRES NEEDLFLG # DISPLAYED ON FDAI ERROR NEEDLES
021634,000120: 26,2142 05520 TC DOWNFLAG
021635,000121: 26,2143 00000 ADRES NEED2FLG
021636,000122: 26,2144 04607 TC BANKCALL
021637,000123: 26,2145 54300 CADR BALLANGS # TO CONVERT ANGLES TO FDAI
021638,000124: 26,2146 32266 TOBALLA CAF V06N18
021639,000125: 26,2147 04607 TC BANKCALL
021640,000126:
![]() |
Page 489 |
021642,000128: 26,2150 20722 CADR GOPERF2R # DISPLAY PLEASE PERFORM AUTO MANEUVER
021643,000129: 26,2151 02254 TC R61TEST
021644,000130: 26,2152 02162 TC REDOMANC # PROCEED
021645,000131: 26,2153 02207 TC ENDMANU1 # ENTER I.E. FINISHED WITH R60
021646,000132: 26,2154 02214 TC CHKLINUS # TO CHECK FOR PRIORITY DISPLAYS
021647,000133: 26,2155 05146 TC ENDOFJOB
021648,000134:
021649,000135: 26,2156 46266 CS THREE # SET UP RESTART POINT AT BEGINNING OF
021650,000136: 26,2157 60133 AD BUF2 # DISPLAY IF PRIORITY DISP FLAG SET
021651,000137: 26,2160 02221 TC CHKLINS1
021652,000138: 26,2161 05146 TC ENDOFJOB
021653,000139:
021654,000140: 26,2162 34737 REDOMANC CAF 3AXISBIT
021655,000141: 26,2163 70101 MASK FLAGWRD5 # IS 3-AXIS FLAG SET
021656,000142: 26,2164 10000 CCS A
021657,000143: 26,2165 12173 TCF TOBALLC # YES
021658,000144: 26,2166 06060 TC INTPRET
021659,000145: 26,2167 77624 CALL
021660,000146: 26,2170 56040 VECPOINT # TO COMPUTE FINAL ANGLES
021661,000147: 26,2171 00322 STORE CPHI # STORE ANGLES
021662,000148: 26,2172 77776 EXIT
021663,000149:
021664,000150: 26,2173 04607 TOBALLC TC BANKCALL
021665,000151: 26,2174 54300 CADR BALLANGS # TO CONVERT ANGLES TO FDAI
021666,000152: 26,2175 02267 TC G+N,AUTO # CHECK AUTO MODE
021667,000153: 26,2176 10000 CCS A
021668,000154: 26,2177 12146 TCF TOBALLA # NOT AUTO, GO REREQUEST AUTO MANEUVER.
021669,000155:
021670,000156: 26,2200 02214 AUTOMANV TC CHKLINUS
021671,000157: 26,2201 12204 TCF STARTMNV
021672,000158: 26,2202 32213 CAF STARTMNAD # RESTART AT STARTMNV IF PRIORITY
021673,000159: 26,2203 55054 TS TBASE2 # DISPLAY FLAG SET
021674,000160:
021675,000161: 26,2204 04607 STARTMNV TC BANKCALL # PERFORM MANEUVER VIA KALCMANU
021676,000162: 26,2205 42764 CADR GOMANUR
021677,000163:
021678,000164: 26,2206 12146 ENDMANUV TCF TOBALLA # FINISHED MANEUVER.
021679,000165: 26,2207 05520 ENDMANU1 TC DOWNFLAG # RESET 3-AXIS FLAG
021680,000166: 26,2210 00124 ADRES 3AXISFLG
021681,000167: 26,2211 31163 CAE TEMPR60 # -
021682,000168: 26,2212 04631 TC BANKJUMP # -
021683,000169:
021684,000170: 26,2213 02204 STARTMNAD ADRES STARTMNV
021685,000171:
021686,000172: 26,2214 40101 CHKLINUS CS FLAGWRD5
021687,000173: 26,2215 74727 MASK PDSPFBIT # IS PRIORITY DISPLAY FLAG SET?
021688,000174: 26,2216 10000 CCS A # -
021689,000175: 26,2217 00002 TC Q # NO - EXIT
021690,000176: 26,2220 16760 TCF Q+1 # GO BACK AND SET UP CORRECT RESTART ADDR.
021691,000177:
![]() |
Page 490 |
021693,000179: 26,2221 55054 CHKLINS1 TS TBASE2
021694,000180: 26,2222 30002 CA Q
021695,000181: 26,2223 54156 TS MPAC +2
021696,000182:
021697,000183: 26,2224 05355 TC PHASCHNG
021698,000184: 26,2225 00132 OCT 00132
021699,000185:
021700,000186: 26,2226 34736 CAF BIT7
021701,000187: 26,2227 05466 TC LINUS # GO SET BITS FOR PRIORITY DISPLAY -
021702,000188: 26,2230 00156 TC MPAC +2
021703,000189:
021704,000190: 26,2231 37735 RELINUS CAF PRIO26 # RESTORE ORIGINAL PRIORITY
021705,000191: 26,2232 05137 TC PRIOCHNG
021706,000192:
021707,000193: 26,2233 34740 CAF TRACKBIT # DON'T CONTINUE R60 UNLESS TRACKFLAG ON.
021708,000194: 26,2234 70075 MASK FLAGWRD1
021709,000195: 26,2235 10000 CCS A
021710,000196: 26,2236 12251 TCF RER60
021711,000197:
021712,000198: 26,2237 34736 CAF RNDVZBIT # IS IT P20?
021713,000199: 26,2240 70074 MASK FLAGWRD0
021714,000200: 26,2241 10000 CCS A
021715,000201: 26,2242 02246 TC +4 # YES
021716,000202: 26,2243 05355 TC PHASCHNG # NO, MUST BE P25, SET 2.11 SPOT
021717,000203: 26,2244 40112 OCT 40112
021718,000204:
021719,000205: 26,2245 05146 TC ENDOFJOB
021720,000206:
021721,000207: 26,2246 05355 TC PHASCHNG # SET 2.7 SPOT FOR P20
021722,000208: 26,2247 40072 OCT 40072
021723,000209:
021724,000210: 26,2250 05146 TC ENDOFJOB
021725,000211:
021726,000212: 26,2251 05506 RER60 TC UPFLAG # SET PRIO DISPLAY FLAG AFTER RESTART
021727,000213: 26,2252 00114 ADRES PDSPFLAG
021728,000214:
021729,000215: 26,2253 01054 TC TBASE2
021730,000216:
021731,000217: 26,2254 31010 R61TEST CA MODREG # IF WE ARE IN P00 IT MUST BE V49 OR V89
021732,000218: 26,2255 00006 EXTEND
021733,000219: 26,2256 12207 BZF ENDMANU1 # THUS WE GO TO ENDEXT VIA USER
021734,000220:
021735,000221: 26,2257 30101 CA FLAGWRD5
021736,000222: 26,2260 74727 MASK PDSPFBIT
021737,000223: 26,2261 00006 EXTEND
021738,000224: 26,2262 16001 BZF GOTOPOOH # NO
021739,000225: 26,2263 06043 TC GOTOV56 # YES
021740,000226:
021741,000227: 26,2264 20100 BIT14+7 OCT 20100 # -
021742,000228: 26,2265 00203 OCT203 OCT 203
021743,000229:
![]() |
Page 491 |
021745,000231: 26,2266 01422 V06N18 VN 0618
021746,000232: # SUBROUTINE TO CHECK FOR G+N CONTROL, AUTO STABILIZATION
021747,000233:
021748,000234: # RETURNS WITH C(A) = + IF NOT SET FOR G+N, AUTO
021749,000235: # RETURNS WITH C(A) = +0 IF SWITCHES ARE SET
021750,000236:
021751,000237: 26,2267 00006 G+N,AUTO EXTEND
021752,000238: 26,2270 00030 READ CHAN30
021753,000239: 26,2271 74733 MASK BIT10
021754,000240: 26,2272 10000 CCS A
021755,000241: 26,2273 00002 TC Q # NOT IN G+N C(A) = +
021756,000242: 26,2274 00006 ISITAUTO EXTEND # CHECK FOR AUTO MODE
021757,000243: 26,2275 00031 READ CHAN31
021758,000244: 26,2276 74727 MASK BIT14
021759,000245: 26,2277 00002 TC Q # (+) = NOT IN AUTO, (+0) = AOK
021760,000246:
![]() |
Page 492 |
021762,000248: # PROGRAM DESCRIPTION BALLANGS
021763,000249: # MOD NO. LOG SECTION R60,R62
021764,000250:
021765,000251: # WRITTEN BY RAMA M.AIYAWAR
021766,000252: # FUNCTIONAL DESCRIPTION
021767,000253:
021768,000254: # COMPUTES LM FDAI BALL DISPLAY ANGLES
021769,000255: # CALLING SEQUENCE
021770,000256:
021771,000257: # TC BALLANGS
021772,000258: # NORMAL EXIT MODE
021773,000259:
021774,000260: # TC BALLEXIT (SAVED Q)
021775,000261:
021776,000262: # ALARM OR EXIT MODE NIL
021777,000263: # SUBROUTINES CALLED
021778,000264: # CD*TR*G
021779,000265: # ARCTAN
021780,000266:
021781,000267: # INPUT
021782,000268:
021783,000269: # CPHI,CTHETA,CPSI ARE THE ANGLES CORRESPONDING TO AOG,AIG,AMG. THEY ARE
021784,000270: # SP,2S COMPLIMENT SCALED TO HALF REVOLUTION.
021785,000271: # OUTPUT
021786,000272:
021787,000273: # FDAIX,FDAIY,FDAIZ ARE THE REQUIRED BALL ANGLES SCALED TO HALF REVOLUTION
021788,000274: # SP,2S COMPLIMENT.
021789,000275: # THESE ANGLES WILL BE DISPLAYED AS DEGREES AND HUNDREDTHS, IN THE ORDER ROLL, PITCH, YAW, USING NOUNS 18 & 19.
021790,000276:
021791,000277: # ERASABLE INITIALIZATION REQUIRED
021792,000278:
021793,000279: # CPHI,CTHETA,CPSI EACH A SP REGISTER
021794,000280: # DEBRIS
021795,000281:
021796,000282: # A,L,Q,MPAC,SINCDU,COSCDU,PUSHLIST,BALLEXIT
021797,000283:
021798,000284:
021799,000285: # NOMENCLATURE: CPHI, CTHETA, & CPSI REPRESENT THE OUTER, INNER, & MIDDLE GIMBAL ANGLES, RESPECTIVELY; OR
021800,000286: # EQUIVALENTLY, CDUX, CDUY, & CDUZ.
021801,000287:
021802,000288: # NOTE: ARCTAN CHECKS FOR OVERFLOW AND SHOULD BE ABLE TO HANDLE ANY SINGULARITIES.
021803,000289:
021804,000290: 26,2000 SETLOC BAWLANGS
021805,000291: 26,2000 BANK
021806,000292:
021807,000293: 26,2300 COUNT* $$/BALL
021808,000294: 26,2300 04636 BALLANGS TC MAKECADR
021809,000295: 26,2301 55337 TS BALLEXIT
021810,000296: 26,2302 30321 CA CPHI
021811,000297:
![]() |
Page 493 |
021813,000299: 26,2303 54771 TS CDUSPOT +4
021814,000300: 26,2304 30322 CA CTHETA
021815,000301: 26,2305 54765 TS CDUSPOT
021816,000302: 26,2306 30323 CA CPSI
021817,000303: 26,2307 54767 TS CDUSPOT +2
021818,000304:
021819,000305: 26,2310 06060 TC INTPRET
021820,000306: 26,2311 45001 SETPD CALL
021821,000307: 26,2312 00001 0D
021822,000308: 26,2313 47526 CD*TR*G
021823,000309:
021824,000310: 26,2314 41345 DLOAD DMP
021825,000311: 26,2315 00742 SINCDUX # SIN (OGA)
021826,000312: 26,2316 00746 COSCDUZ # COS (MGA)
021827,000313:
021828,000314: 26,2317 57552 SL1 DCOMP # SCALE
021829,000315: 26,2320 65336 ARCSIN PDDL # YAW = ARCSIN(-SXCZ) INTO 0 PD
021830,000316: 26,2321 00740 SINCDUZ
021831,000317: 26,2322 14023 STODL SINTH # (SINTH = 18D IN PD)
021832,000318: 26,2323 00746 COSCDUZ
021833,000319: 26,2324 72405 DMP SL1 # RESCALE
021834,000320: 26,2325 00750 COSCDUX
021835,000321: 26,2326 34021 STCALL COSTH # (COSTH = 16D IN PD)
021836,000322: 26,2327 26545 ARCTAN
021837,000323: 26,2330 41325 PDDL DMP # ROLL = ARCTAN(SZ/CZCX) INTO 2 PD
021838,000324: 26,2331 00740 SINCDUZ
021839,000325: 26,2332 00742 SINCDUX
021840,000326: 26,2333 41512 SL2 PUSH # SXSZ INTO 4 PD
021841,000327: 26,2334 65205 DMP PDDL # SXSZCY INTO 4 PD
021842,000328: 26,2335 00744 COSCDUY
021843,000329: 26,2336 65205 DMP PDDL # SXSZSY INTO 6 PD
021844,000330: 26,2337 00736 SINCDUY
021845,000331: 26,2340 00750 COSCDUX
021846,000332: 26,2341 72405 DMP SL1 # CXCY
021847,000333: 26,2342 00744 COSCDUY
021848,000334: 26,2343 45425 DSU STADR # PULL UP FROM 6 PD
021849,000335: 26,2344 63756 STODL COSTH # COSTH = CXCY - SXSZSY
021850,000336: 26,2345 00736 SINCDUY
021851,000337: 26,2346 72405 DMP SL1
021852,000338: 26,2347 00750 COSCDUX # CXSY
021853,000339: 26,2350 45415 DAD STADR # PULL UP FROM 4 PD
021854,000340: 26,2351 43754 STCALL SINTH # SINTH = CXSY + SXSZCY
021855,000341: 26,2352 26545 ARCTAN # RETURNS WITH D(MPAC) = PITCH
021856,000342: 26,2353 55525 PDDL VDEF # PITCH INTO 2 PD, ROLL INTO MPAC FROM 2PD
021857,000343: 26,2354 77634 RTB # VDEF MAKES V(MPAC) = ROLL, PITCH, YAW
021858,000344: 26,2355 21630 V1STO2S
021859,000345: 26,2356 02336 STORE FDAIX # MODE IS TP
021860,000346: 26,2357 77776 EXIT
021861,000347:
021862,000348: 26,2360 31337 ENDBALL CA BALLEXIT
021863,000349:
![]() |
Page 494 |
021865,000351: 26,2361 04631 TC BANKJUMP
021866,000352:
![]() |
Page 495 |
021868,000354: # PROGRAM DESCRIPTION - VECPOINT
021869,000355:
021870,000356:
021871,000357: # THIS INTERPRETIVE SUBROUTINE MAY BE USED TO POINT A SPACECRAFT AXIS IN A DESIRED DIRECTION. THE AXIS
021872,000358: # TO BE POINTED MUST APPEAR AS A HALF UNIT DOUBLE PRECISION VECTOR IN SUCCESSIVE LOCATIONS OF ERASABLE MEMORY
021873,000359: # BEGINNING WITH THE LOCATION CALLED SCAXIS. THE COMPONENTS OF THIS VECTOR ARE GIVEN IN SPACECRAFT COORDINATES.
021874,000360: # THE DIRECTION IN WHICH THIS AXIS IS TO BE POINTED MUST APPEAR AS A HALF UNIT DOUBLE PRECISION VECTOR IN
021875,000361: # SUCCESSIVE LOCATIONS OF ERASABLE MEMORY BEGINNING WITH THE ADDRESS CALLED POINTVSM. THE COMPONENTS OF THIS
021876,000362: # VECTOR ARE GIVEN IN STABLE MEMBER COORDINATES. WITH THIS INFORMATION VECPOINT COMPUTES A SET OF THREE GIMBAL
021877,000363: # ANGLES (2S COMPLEMENT) CORESPONDING TO THE CROSS-PRODUCT ROTATION BETWE EN SCAXIS AND POINTVSM AND STORES THEM
021878,000364: # IN T(MPAC) BEFORE RETURNING TO THE CALLER.
021879,000365: # THIS ROTATION, HOWEVER, MAY BRING THE S/C INTO GIMBAL LOCK. WHEN POINTING A VECTOR IN THE Y-Z PLANE,
021880,000366: # THE TRANSPONDER AXIS, OR THE AOT FOR THE LEM, THE PROGRAM WILL CORRECT THIS PROBLEM BY ROTATING THE CROSS-
021881,000367: # PRODUCT ATTITUDE ABOUT POINTVSM BY A FIXED AMOUNT SUFFICIENT TO ROTATE THE DESIRED S/C ATTITUDE OUT OF GIMBAL
021882,000368: # LOCK. IF THE AXIS TO BE POINTED IS MORE THAN 40.6 DEGREES BUT LESS THAN 60.5 DEG FROM THE +X (OR-X) AXIS,
021883,000369: # THE ADDITIONAL ROTATION TO AVOID GIMAL LOCK IS 35 DEGREES. IF THE AXIS IS MORE THAN 60.5 DEGEES FROM +X (OR -X)
021884,000370: # THE ADDITIONAL ROTATION IS 35 DEGREES. THE GIMBAL ANGLES CORRESPONDING TO THIS ATTITUDE ARE THEN COMPUTED AND
021885,000371: # STORED AS 2S COMPLIMENT ANGLES IN T(MPAC) BEFORE RETURNING TO THE CALLER.
021886,000372: # WHEN POINTING THE X-AXIS, OR THE THRUST VECTOR, OR ANY VECTOR WITHIN 40.6 DEG OF THE X-AXIS, VECPOINT
021887,000373: # CANNOT CORRECT FOR A CROSS-PRODUCT ROTATION INTO GIMBAL LOCK. IN THIS CASE A PLATFORM REALIGNMENT WOULD BE
021888,000374: # REQUIRED TO POINT THE VECTOR IN THE DESIRED DIRECTION. AT PRESENT NO INDICATION IS GIVEN FOR THIS SITUATION
021889,000375: # EXCEPT THAT THE FINAL MIDDLE GIMBAL ANGLE IN MPAC +2 IS GREATER THAN 59 DEGREES.
021890,000376:
021891,000377: # CALLING SEQUENCE -
021892,000378: # 1) LOAD SCAXIS, POINTVSM
021893,000379: # 2) CALL
021894,000380: # VECPOINT
021895,000381:
021896,000382: # RETURNS WITH
021897,000383:
021898,000384: # 1) DESIRED OUTER GIMBAL ANGLE IN MPAC
021899,000385: # 2) DESIRED INNER GIMBAL ANGLE IN MPAC +1
021900,000386: # 3) DESIRED MIDDLE GIMBAL ANGLE IN MPAC +2
021901,000387:
021902,000388:
021903,000389: # ERASABLES USED -
021904,000390:
021905,000391: # 1) SCAXIS 6
021906,000392: # 2) POINTVSM 6
021907,000393: # 3) MIS 18
021908,000394: # 4) DEL 18
021909,000395: # 5) COF 6
021910,000396: # 6) VECQTEMP 1
021911,000397: # 7) ALL OF VAC AREA 43
021912,000398:
021913,000399: # TOTAL 99
021914,000400:
021915,000401: 27,2000 SETLOC VECPT
021916,000402: 27,2000 BANK
021917,000403:
![]() |
Page 496 |
021919,000405: 27,2032 COUNT* $$/VECPT
021920,000406:
021921,000407: 27,2032 E6,1675 EBANK= BCDU
021922,000408:
021923,000409: 27,2032 40020 VECPNT1 STQ BOV # THIS ENTRY USES DESIRED CDUS
021924,000410: 27,2033 03324 VECQTEMP # NOT PRESENT-ENTER WITH CDUD'S IN MPAC
021925,000411: 27,2034 56035 VECPNT2
021926,000412: 27,2035 52164 VECPNT2 AXC,2 GOTO
021927,000413: 27,2036 03245 MIS
021928,000414: 27,2037 56046 STORANG
021929,000415: 27,2040 40020 VECPOINT STQ BOV # SAVE RETURN ADDRESS
021930,000416: 27,2041 03324 VECQTEMP
021931,000417: 27,2042 56043 VECLEAR # AND CLEAR OVFIND
021932,000418: 27,2043 47164 VECLEAR AXC,2 RTB
021933,000419: 27,2044 03245 MIS # READ THE PRESENT CDU ANGLES AND
021934,000420: 27,2045 44403 READCDUK # STORE THEM IN PD25, 26, 27
021935,000421: 27,2046 34032 STORANG STCALL 25D
021936,000422: 27,2047 44410 CDUTODCM # S/C AXES TO STABLE MEMBER AXES (MIS)
021937,000423: 27,2050 61375 VLOAD VXM
021938,000424: 27,2051 03773 POINTVSM # RESOLVE THE POINTING DIRECTION VF INTO
021939,000425: 27,2052 03246 MIS # INITIAL S/C AXES (VF = POINTVSM)
021940,000426: 27,2053 77656 UNIT
021941,000427: 27,2054 00035 STORE 28D
021942,000428: # PD 28 29 30 31 32 33
021943,000429: 27,2055 53435 VXV UNIT # TAKE THE CROSS PRODUCT VF X VI
021944,000430: 27,2056 03765 SCAXIS # WHERE VI = SCAXIS
021945,000431: 27,2057 57400 BOV VCOMP
021946,000432: 27,2060 56170 PICKAXIS
021947,000433: 27,2061 17270 STODL COF # CHECK MAGNITUDE
021948,000434: 27,2062 00045 36D # OF CROSS PRODUCT
021949,000435: 27,2063 50025 DSU BMN # VECTOR, IF LESS
021950,000436: 27,2064 14423 DPB-14 # THAN B-14 ASSUME
021951,000437: 27,2065 56170 PICKAXIS # UNIT OPERATION
021952,000438: 27,2066 50375 VLOAD DOT # INVALID.
021953,000439: 27,2067 03765 SCAXIS
021954,000440: 27,2070 00035 28D
021955,000441: 27,2071 65552 SL1 ARCCOS
021956,000442: 27,2072 77624 COMPMATX CALL # NOW COMPUTE THE TRANSFORMATION FROM
021957,000443: 27,2073 44527 DELCOMP # FINAL S/C AXES TO INITIAL S/C AXES MFI
021958,000444: 27,2074 75160 AXC,1 AXC,2
021959,000445: 27,2075 03245 MIS # COMPUTE THE TRANSFORMATION FROM FINAL
021960,000446: 27,2076 02221 KEL # S/C AXES TO STABLE MEMBER AXES
021961,000447: 27,2077 77624 CALL # MFS = MIS MFI
021962,000448: 27,2100 44312 MXM3 # (IN PD LIST)
021963,000449:
021964,000450: 27,2101 51545 DLOAD ABS
021965,000451: 27,2102 00007 6 # MFS6 = SIN(CPSI) $2
021966,000452: 27,2103 50025 DSU BMN
021967,000453: 27,2104 14410 SINGIMLC # = SIN(59 DEGS) $2
021968,000454: 27,2105 56160 FINDGIMB # /CPSI/ LESS THAN 59 DEGS
021969,000455:
![]() |
Page 497 |
021971,000457: # I.E. DESIRED ATTITUDE NOT IN GIMBAL LOCK
021972,000458:
021973,000459: 27,2106 51545 DLOAD ABS # CHECK TO SEE IF WE ARE POINTING
021974,000460: 27,2107 03765 SCAXIS # THE THRUST AXIS
021975,000461: 27,2110 51025 DSU BPL
021976,000462: 27,2111 14412 SINVEC1 # SIN 49.4 DEGS $2
021977,000463: 27,2112 56160 FINDGIMB # IF SO, WE ARE TRYING TO POINT IT INTO
021978,000464: 27,2113 77775 VLOAD # GIMBAL LOCK, ABORT COULD GO HERE
021979,000465: 27,2114 77626 STADR
021980,000466: 27,2115 50515 STOVL MIS +12D
021981,000467: 27,2116 77626 STADR # STORE MFS (IN PD LIST) IN MIS
021982,000468: 27,2117 50523 STOVL MIS +6
021983,000469: 27,2120 77626 STADR
021984,000470: 27,2121 50531 STOVL MIS
021985,000471: 27,2122 03254 MIS +6 # INNER GIMBAL AXIS IN FINAL S/C AXES
021986,000472: 27,2123 57444 BPL VCOMP # LOCATE THE IG AXIS DIRECTION CLOSEST TO
021987,000473: 27,2124 56125 IGSAMEX # FINAL X S/C AXIS
021988,000474:
021989,000475: 27,2125 50035 IGSAMEX VXV BMN # FIND THE SHORTEST WAY OF ROTATING THE
021990,000476: 27,2126 03765 SCAXIS # S/C OUT OF GIMBAL LOCK BY A ROTATION
021991,000477: 27,2127 56134 U=SCAXIS # ABOUT +- SCAXIS, I.E. IF (IG (SGN MFS3)
021992,000478: # X SCAXIS . XF) LESS THAN 0, U = SCAXIS
021993,000479: # OTHERWISE U = -SCAXIS
021994,000480:
021995,000481: 27,2130 57575 VLOAD VCOMP
021996,000482: 27,2131 03765 SCAXIS
021997,000483: 27,2132 37270 STCALL COF # ROTATE ABOUT -SCAXIS
021998,000484: 27,2133 56137 CHEKAXIS
021999,000485: 27,2134 77775 U=SCAXIS VLOAD
022000,000486: 27,2135 03765 SCAXIS
022001,000487: 27,2136 03270 STORE COF # ROTATE ABOUT + SCAXIS
022002,000488: 27,2137 51545 CHEKAXIS DLOAD ABS
022003,000489: 27,2140 03765 SCAXIS # SEE IF WE ARE POINTING THE AOT
022004,000490: 27,2141 51025 DSU BPL
022005,000491: 27,2142 14414 SINVEC2 # SIN 29.5 DEGS $2
022006,000492: 27,2143 56147 PICKANG1 # IF SO, ROTATE 50 DEGS ABOUT +- SCAXIS
022007,000493: 27,2144 52145 DLOAD GOTO # IF NOT, MUST BE POINTING THE TRANSPONDER
022008,000494: 27,2145 14420 VECANG2 # OR SOME VECTOR IN THE Y, OR Z PLANE
022009,000495: 27,2146 56151 COMPMFSN # IN THIS CASE ROTATE 35 DEGS TO GET OUT
022010,000496: # OF GIMBAL LOCK (VECANG2 $360)
022011,000497: 27,2147 77745 PICKANG1 DLOAD
022012,000498: 27,2150 14416 VECANG1 # = 50 DEGS $ 360
022013,000499: 27,2151 77624 COMPMFSN CALL
022014,000500: 27,2152 44527 DELCOMP # COMPUTE THE ROTATION ABOUT SCAXIS TO
022015,000501: 27,2153 75160 AXC,1 AXC,2 # BRING MFS OUT OF GIMBAL LOCK
022016,000502: 27,2154 03245 MIS
022017,000503: 27,2155 02221 KEL
022018,000504: 27,2156 77624 CALL # COMPUTE THE NEW TRANSFORMATION FROM
022019,000505: 27,2157 44312 MXM3 # DESIRED S/C AXES TO STABLE MEMBER AXES
022020,000506: # WHICH WILL ALIGN VI WITH VF AND AVOID
022021,000507:
![]() |
Page 498 |
022023,000509: # GIMBAL LOCK
022024,000510: 27,2160 45160 FINDGIMB AXC,1 CALL
022025,000511: 27,2161 00000 0 # EXTRACT THE COMMANDED CDU ANGLES FROM
022026,000512: 27,2162 44654 DCMTOCDU # THIS MATRIX
022027,000513: 27,2163 40234 RTB SETPD
022028,000514: 27,2164 21630 V1STO2S # CONVERT TO 2:S COMPLEMENT
022029,000515: 27,2165 00001 0
022030,000516: 27,2166 77650 GOTO
022031,000517: 27,2167 03324 VECQTEMP # RETURN TO CALLER
022032,000518:
022033,000519: 27,2170 50375 PICKAXIS VLOAD DOT # IF VF X VI = 0, FIND VF . VI
022034,000520: 27,2171 00035 28D
022035,000521: 27,2172 03765 SCAXIS
022036,000522: 27,2173 72240 BMN TLOAD
022037,000523: 27,2174 54362 ROT180
022038,000524: 27,2175 00032 25D
022039,000525: 27,2176 77650 GOTO # IF VF = VI, CDU DESIRED = PRESENT CDU
022040,000526: 27,2177 03324 VECQTEMP # PRESENT CDU ANGLES
022041,000527:
022042,000528: 35,2000 BANK 35
022043,000529: 26,2000 SETLOC MANUVER1
022044,000530: 26,2000 BANK
022045,000531: 26,2362 47375 ROT180 VLOAD VXV # IF VF, VI ANTIPARALLEL, 108 DEG ROTATION
022046,000532: 26,2363 03254 MIS +6 # IS REQUIRED. Y STABLE MEMBER AXIS IN
022047,000533: 26,2364 06503 HIDPHALF # INITIAL S/C AXES.
022048,000534: 26,2365 47256 UNIT VXV # FIND Y(SM) X X(I)
022049,000535: 26,2366 03765 SCAXIS # FIND UNIT(VI X UNIT(Y(SM) X X(I)))
022050,000536: 26,2367 40056 UNIT BOV # I.E. PICK A VECTOR IN THE PLANE OF X(I),
022051,000537: 26,2370 54404 PICKX # Y(SM) PERPENDICULAR TO VI
022052,000538: 26,2371 17270 STODL COF
022053,000539: 26,2372 00045 36D # CHECK MAGNITUDE
022054,000540: 26,2373 50025 DSU BMN # OF THIS VECTOR.
022055,000541: 26,2374 14423 DPB-14 # IF LESS THAN B-14,
022056,000542: 26,2375 54404 PICKX # PICK X-AXIS.
022057,000543: 26,2376 77775 VLOAD
022058,000544: 26,2377 03270 COF
022059,000545: 26,2400 17270 XROT STODL COF
022060,000546: 26,2401 06503 HIDPHALF
022061,000547: 26,2402 77650 GOTO
022062,000548: 26,2403 56072 COMPMATX
022063,000549: 26,2404 52175 PICKX VLOAD GOTO # PICK THE XAXIS IN THIS CASE
022064,000550: 26,2405 06503 HIDPHALF
022065,000551: 26,2406 54400 XROT
022066,000552: 26,2407 15555 35172 SINGIMLC 2DEC .4285836003 # =SIN(59) $2
022067,000553: 26,2411 14113 36326 SINVEC1 2DEC .3796356537 # =SIN(49.4) $2
022068,000554: 26,2413 07701 35703 SINVEC2 2DEC .2462117800 # =SIN(29.5) $2
022069,000555: 26,2415 04343 21616 VECANG1 2DEC .1388888889 # = 50 DEGREES $360
022070,000556:
![]() |
Page 499 |
022072,000558: 26,2417 03070 34344 VECANG2 2DEC .09722222222 # = 35 DEGREES $360
022073,000559: 26,2421 00000 1BITDP OCT 0 # KEEP THIS BEFORE DPB(-14) *********
022074,000560: 26,2422 00001 DPB-14 OCT 00001
022075,000561: 26,2423 00000 OCT 00000
022076,000562:
![]() |
Page 500 |
022078,000564: # ROUTINE FOR INITIATING AUTOMATIC MANEUVER VIA KEYBOARD (V49)
022079,000565:
022080,000566:
022081,000567: 34,2000 BANK 34
022082,000568: 23,2000 SETLOC R62
022083,000569: 23,2000 BANK
022084,000570: 23,2103 E6,1675 EBANK= BCDU
022085,000571:
022086,000572: 23,2103 COUNT* $$/R62
022087,000573:
022088,000574: 23,2103 23,2103 R62DISP EQUALS R62FLASH
022089,000575:
022090,000576: 23,2103 35001 R62FLASH CAF V06N22 # FLASH V06N22 AND
022091,000577: 23,2104 04607 TC BANKCALL # ICDU ANGLES
022092,000578: 23,2105 20471 CADR GOFLASH
022093,000579: 23,2106 15474 TCF ENDEXT # TERMINATE
022094,000580: 23,2107 12111 TCF GOMOVE # PROCEED
022095,000581: 23,2110 12103 TCF R62FLASH # ENTER
022096,000582:
022097,000583: # ASTRONAUT MAY LOAD NEW ICDUS AT THIS
022098,000584: # POINT
022099,000585: 23,2111 05506 GOMOVE TC UPFLAG # SET FOR 3-AXIS MANEUVER
022100,000586: 23,2112 00124 ADRES 3AXISFLG
022101,000587:
022102,000588: 23,2113 04607 TC BANKCALL
022103,000589: 23,2114 54125 CADR R60LEM
022104,000590: 23,2115 15474 TCF ENDEXT # END R62
022105,000591:
End of include-file R60,R62.agc. Parent file is MAIN.agc