Source Code

051604,000001: # Copyright: Public domain. 051605,000002: # Filename: INFLIGHT_ALIGNMENT_ROUTINES.agc 051606,000003: # Purpose: A section of Luminary 1C, revision 131. 051607,000004: # It is part of the source code for the Lunar Module's (LM) 051608,000005: # Apollo Guidance Computer (AGC) for Apollo 13 and Apollo 14. 051609,000006: # This file is intended to be a faithful transcription, except 051610,000007: # that the code format has been changed to conform to the 051611,000008: # requirements of the yaYUL assembler rather than the 051612,000009: # original YUL assembler. 051613,000010: # Reference: pp. 1246-1255 of 1729.pdf. 051614,000011: # Contact: Ron Burkey <info@sandroid.org>. 051615,000012: # Website: www.ibiblio.org/apollo/index.html 051616,000013: # Mod history: 06/03/03 RSB. Began transcribing. 051617,000014: # 05/14/05 RSB. Corrected website reference above. 051618,000015: 051619,000016: # Page 1246 051620,000017: 22,3773 BANK 22 051621,000018: 23,2000 SETLOC INFLIGHT 051622,000019: 23,2000 BANK 051623,000020: 051624,000021: 23,3251 E5,1642 EBANK= XSM 051625,000022: 051626,000023: # CALCGTA COMPUTES THE GYRO TORQUE ANGLES REQUIRED TO BRING THE STABLE MEMBER INTO THE DESIRED ORIENTATION. 051627,000024: 051628,000025: # THE INPUT IS THE DESIRED STABLE MEMBER COORDINATES REFERRED TO PRESENT STABLE MEMBER COORDINATES. THE THREE 051629,000026: # HALF-UNIT VECTORS ARE STORED AT XDC, YDC, AND ZDC. 051630,000027: 051631,000028: # THE OUTPUTS ARE THE THREE GYRO TORQUE ANGLES TO BE APPLIED TO THE Y, Z, AND X GYROS AND ARE STORED DP AT IGC, 051632,000029: # MGC, AND OGC RESPECTIVELY. 051633,000030: 051634,000031: 23,3251 COUNT* $$/INFLT 051635,000032: 23,3251 71220 CALCGTA ITA DLOAD # PUSHDOWN 00-03, 16D-27D, 34D-37D 051636,000033: 23,3252 00051 S2 # XDC = (XD1 XD2 XD3) 051637,000034: 23,3253 02665 XDC # YDC = (YD1 YD2 YD3) 051638,000035: 23,3254 65325 PDDL PDDL # ZDC = (ZD1 ZD2 ZD3) 051639,000036: 23,3255 06524 HI6ZEROS 051640,000037: 23,3256 02671 XDC +4 051641,000038: 23,3257 55476 DCOMP VDEF 051642,000039: 23,3260 77656 UNIT 051643,000040: 23,3261 14027 STODL ZPRIME # ZP = UNIT(-XD3 0 XD1) = (ZP1 ZP2 ZP3) 051644,000041: 23,3262 00027 ZPRIME 051645,000042: 051646,000043: 23,3263 77742 SR1 051647,000044: 23,3264 14023 STODL SINTH # SIN(IGC) = ZP1 051648,000045: 23,3265 00033 ZPRIME +4 051649,000046: 23,3266 77742 SR1 051650,000047: 23,3267 34021 STCALL COSTH # COS(IGC) = ZP3 051651,000048: 23,3270 47322 ARCTRIG 051652,000049: 051653,000050: 23,3271 16742 STODL IGC # Y GYRO TORQUING ANGLE FRACTION OF REV. 051654,000051: 23,3272 02667 XDC +2 051655,000052: 23,3273 77742 SR1 051656,000053: 23,3274 14023 STODL SINTH # SIN(MGC) = XD2 051657,000054: 23,3275 00027 ZPRIME 051658,000055: 051659,000056: 23,3276 65205 DMP PDDL 051660,000057: 23,3277 02671 XDC +4 # PD00 = (ZP1)(XD3) 051661,000058: 23,3300 00033 ZPRIME +4 051662,000059: 051663,000060: 23,3301 45205 DMP DSU 051664,000061: 23,3302 02665 XDC # MPAC = (ZP3)(XD1) 051665,000062: 23,3303 77626 STADR 051666,000063: 23,3304 43756 STCALL COSTH # COS(MGC) = MPAC - PD00 051667,000064: 23,3305 47322 ARCTRIG 051668,000065: # Page 1247 051669,000066: 23,3306 26744 STOVL MGC # Z GYRO TORQUING ANGLE FRACTION OF REV. 051670,000067: 23,3307 00027 ZPRIME 051671,000068: 23,3310 77641 DOT 051672,000069: 23,3311 02701 ZDC 051673,000070: 23,3312 24021 STOVL COSTH # COS(OGC) = ZP . ZDC 051674,000071: 23,3313 00027 ZPRIME 051675,000072: 23,3314 77641 DOT 051676,000073: 23,3315 02673 YDC 051677,000074: 23,3316 34023 STCALL SINTH # SIN(OGC) = ZP . YDC 051678,000075: 23,3317 47322 ARCTRIG 051679,000076: 051680,000077: 23,3320 36740 STCALL OGC # X GYRO TORQUING ANGLE FRACTION OF REV. 051681,000078: 23,3321 00051 S2 051682,000079: 051683,000080: # Page 1248 051684,000081: # ARCTRIG COMPUTES AN ANGLE GIVEN THE SINE AND COSINE OF THIS ANGLE. 051685,000082: 051686,000083: # THE INPUTS ARE SIN/4 AND COS/4 STORED UP AT SINTH AND COSTH. 051687,000084: 051688,000085: # THE OUTPUT IS THE CALCULATED ANGLE BETWEEN +.5 AND -.5 REVOLUTIONS AND STORED AT THETA. THE OUTPUT IS ALSO 051689,000086: # AVAILABLE AT MPAC. 051690,000087: 051691,000088: 23,3322 51545 ARCTRIG DLOAD ABS # PUSHDOWN 16D-21D 051692,000089: 23,3323 00023 SINTH 051693,000090: 23,3324 50025 DSU BMN 051694,000091: 23,3325 07536 QTSN45 # ABS(SIN/4) - SIN(45)/4 051695,000092: 23,3326 47335 TRIG1 # IF (-45,45) OR (135,-135) 051696,000093: 051697,000094: 23,3327 72545 DLOAD SL1 # (45,135) OR (-135,-45) 051698,000095: 23,3330 00021 COSTH 051699,000096: 23,3331 75326 ACOS SIGN 051700,000097: 23,3332 00023 SINTH 051701,000098: 23,3333 00025 STORE THETA # X = ARCCOS(COS) WITH SIGN(SIN) 051702,000099: 23,3334 77616 RVQ 051703,000100: 051704,000101: 23,3335 72545 TRIG1 DLOAD SL1 # (-45,45) OR (135,-135) 051705,000102: 23,3336 00023 SINTH 051706,000103: 23,3337 77736 ASIN 051707,000104: 23,3340 14025 STODL THETA # X = ARCSIN(SIN) WITH SIGN(SIN) 051708,000105: 23,3341 00021 COSTH 051709,000106: 23,3342 77640 BMN 051710,000107: 23,3343 47346 TRIG2 # IF (135,-135) 051711,000108: 051712,000109: 23,3344 43545 DLOAD RVQ 051713,000110: 23,3345 00025 THETA # X = ARCSIN(SIN) (-45,45) 051714,000111: 051715,000112: 23,3346 75345 TRIG2 DLOAD SIGN # (135,-135) 051716,000113: 23,3347 06522 HIDPHALF 051717,000114: 23,3350 00023 SINTH 051718,000115: 23,3351 77625 DSU 051719,000116: 23,3352 00025 THETA 051720,000117: 23,3353 00025 STORE THETA # X = .5 WITH SIGN(SIN) - ARCSIN(SIN) 051721,000118: 23,3354 77616 RVQ # (+) - (+) OR (-) - (-) 051722,000119: 051723,000120: # Page 1249 051724,000121: # SMNB, NBSM, AND AXISROT, WHICH USED TO APPEAR HERE, HAVE BEEN 051725,000122: # COMBINED IN A ROUTINE CALLED AX*SR*T, WHICH APPEARS AMONG THE POWERED 051726,000123: # FLIGHT SUBROUTINES. 051727,000124: 051728,000125: # Page 1250 051729,000126: # CALCGA COMPUTES THE CDU DRIVING ANGLES REQUIRED TO BRING THE STABLE MEMBER INTO THE DESIRED ORIENTATION. 051730,000127: 051731,000128: # THE INPUTS ARE 1) THE NAVIGATION BASE COORDINATES REFERRED TO ANY COORDINATE SYSTEM. THE THREE HALF-UNIT 051732,000129: # VECTORS ARE STORED AT XNB, YNB, AND ZNB. 2) THE DESIRED STABLE MEMBER COORDINATES REFERRED TO THE SAME 051733,000130: # COORDINATE SYSTEM ARE STORED AT XSM, YSM, AND ZSM. 051734,000131: 051735,000132: # THE OUTPUTS ARE THE THREE CDU DRIVING ANGLES AND ARE STORED SP AT THETAD, THETAD +1, AND THETAD +2. 051736,000133: 051737,000134: 23,3355 77601 CALCGA SETPD # PUSHDOWN 00-05, 16D-21D, 34D-37D 051738,000135: 23,3356 00001 0 051739,000136: 23,3357 47375 VLOAD VXV 051740,000137: 23,3360 02665 XNB # XNB = OGA (OUTER GIMBAL AXIS) 051741,000138: 23,3361 02651 YSM # YSM = IGA (INNER GIMBAL AXIS) 051742,000139: 23,3362 41456 UNIT PUSH # PD0 = UNIT(OGA X IGA) = MGA 051743,000140: 051744,000141: 23,3363 44041 DOT ITA 051745,000142: 23,3364 02701 ZNB 051746,000143: 23,3365 00051 S2 051747,000144: 23,3366 24021 STOVL COSTH # COS(OG) = MGA . ZNB 051748,000145: 23,3367 00001 0 051749,000146: 23,3370 77641 DOT 051750,000147: 23,3371 02673 YNB 051751,000148: 23,3372 34023 STCALL SINTH # SIN(OG) = MGA . YNB 051752,000149: 23,3373 47322 ARCTRIG 051753,000150: 23,3374 26740 STOVL OGC 051754,000151: 23,3375 00001 0 051755,000152: 051756,000153: 23,3376 50235 VXV DOT # PROVISION FOR MG ANGLE OF 90 DEGREES 051757,000154: 23,3377 02665 XNB 051758,000155: 23,3400 02651 YSM 051759,000156: 23,3401 77752 SL1 051760,000157: 23,3402 24021 STOVL COSTH # COS(MG) = IGA . (MGA X OGA) 051761,000158: 23,3403 02651 YSM 051762,000159: 23,3404 77641 DOT 051763,000160: 23,3405 02665 XNB 051764,000161: 23,3406 34023 STCALL SINTH # SIN(MG) = IGA . OGA 051765,000162: 23,3407 47322 ARCTRIG 051766,000163: 23,3410 02744 STORE MGC 051767,000164: 051768,000165: 23,3411 45246 ABS DSU 051769,000166: 23,3412 07540 .166... 051770,000167: 23,3413 77644 BPL 051771,000168: 23,3414 47433 GIMLOCK1 # IF ANGLE GREATER THAN 60 DEGREES 051772,000169: 051773,000170: 23,3415 50375 CALCGA1 VLOAD DOT 051774,000171: 23,3416 02657 ZSM 051775,000172: 23,3417 00001 0 051776,000173: 23,3420 24021 STOVL COSTH # COS(IG) = ZSM . MGA 051777,000174: 23,3421 02643 XSM 051778,000175: # Page 1251 051779,000176: 23,3422 45441 DOT STADR 051780,000177: 23,3423 43754 STCALL SINTH # SIN(IG) = XSM . MGA 051781,000178: 23,3424 47322 ARCTRIG 051782,000179: 051783,000180: 23,3425 26742 STOVL IGC 051784,000181: 23,3426 02740 OGC 051785,000182: 23,3427 77634 RTB 051786,000183: 23,3430 21621 V1STO2S 051787,000184: 23,3431 34322 STCALL THETAD 051788,000185: 23,3432 00051 S2 051789,000186: 051790,000187: 23,3433 77776 GIMLOCK1 EXIT 051791,000188: 23,3434 05567 TC ALARM 051792,000189: 23,3435 00401 OCT 00401 051793,000190: 23,3436 05504 TC UPFLAG # GIMBAL LOCK HAS OCCURRED 051794,000191: 23,3437 00056 ADRES GLOKFAIL 051795,000192: 051796,000193: 23,3440 06042 TC INTPRET 051797,000194: 23,3441 77650 GOTO 051798,000195: 23,3442 47415 CALCGA1 051799,000196: 051800,000197: # Page 1252 051801,000198: # AXISGEN COMPUTES THE COORDINATES OF ONE COORDINATE SYSTEM REFERRED TO ANOTHER COORDINATE SYSTEM. 051802,000199: 051803,000200: # THE INPUTS ARE 1) THE STAR1 VECTOR REFERRED TO COORDINATE SYSTEM A STORED AT STARAD. 2) THE STAR2 VECTOR 051804,000201: # REFERRED TO COORDINATE SYSTEM A STORED AT STARAD +6. 3) THE STAR1 VECTOR REFERRED TO COORDINATE SYSTEM B STORED 051805,000202: # AT LOCATION 6 OF THE VAC AREA. 4) THE STAR2 VECTOR REFERRED TO COORDINATE SYSTEM B STORED AT LOCATION 12D OF 051806,000203: # THE VAC AREA. 051807,000204: 051808,000205: # THE OUTPUT DEFINES COORDINATE SYSTEM A REFERRED TO COORDINATE SYSTEM B. THE THREE HALF-UNIT VECTORS ARE STORED 051809,000206: # AT LOCATIONS XDC, XDC +6, XDC +12D, AND STARAD, STARAD +6, STARAD +12D. 051810,000207: 051811,000208: 23,3443 66370 AXISGEN AXT,1 SSP # PUSHDOWN 00-30D, 34D-37D 051812,000209: 23,3444 02714 STARAD +6 051813,000210: 23,3445 00051 S1 051814,000211: 23,3446 02700 STARAD -6 051815,000212: 051816,000213: 23,3447 77601 SETPD 051817,000214: 23,3450 00001 0 051818,000215: 23,3451 46773 AXISGEN1 VLOAD* VXV* # 06D UA = S1 051819,000216: 23,3452 02723 STARAD +12D,1 # STARAD +00D UB = S1 051820,000217: 23,3453 02731 STARAD +18D,1 051821,000218: 23,3454 77656 UNIT # 12D VA = UNIT(S1 X S2) 051822,000219: 23,3455 06731 STORE STARAD +18D,1 # STARAD +06D VB = UNIT(S1 X S2) 051823,000220: 23,3456 77773 VLOAD* 051824,000221: 23,3457 02723 STARAD +12D,1 051825,000222: 051826,000223: 23,3460 76433 VXV* VSL1 051827,000224: 23,3461 02731 STARAD +18D,1 # 18D WA = UA X VA 051828,000225: 23,3462 06737 STORE STARAD +24D,1 # STARAD +12D WB = UB X VB 051829,000226: 051830,000227: 23,3463 77700 TIX,1 051831,000228: 23,3464 47451 AXISGEN1 051832,000229: 051833,000230: 23,3465 66160 AXC,1 SXA,1 051834,000231: 23,3466 00006 6 051835,000232: 23,3467 00036 30D 051836,000233: 051837,000234: 23,3470 66370 AXT,1 SSP 051838,000235: 23,3471 00022 18D 051839,000236: 23,3472 00051 S1 051840,000237: 23,3473 00006 6 051841,000238: 051842,000239: 23,3474 66374 AXT,2 SSP 051843,000240: 23,3475 00006 6 051844,000241: 23,3476 00052 S2 051845,000242: 23,3477 00002 2 051846,000243: 051847,000244: 23,3500 76720 AXISGEN2 XCHX,1 VLOAD* 051848,000245: 23,3501 00036 30D # X1=-6 X2=+6 X1=-6 X2=+4 X1=-6 X2=+2 051849,000246: 23,3502 00001 0,1 051850,000247: 051851,000248: # Page 1253 051852,000249: 23,3503 62757 VXSC* PDVL* # J=(UA)(UB1) J=(UA)(UB2) J=(UA)(UB3) 051853,000250: 23,3504 75062 STARAD +6,2 051854,000251: 23,3505 00007 6,1 051855,000252: 23,3506 77757 VXSC* 051856,000253: 23,3507 75054 STARAD +12D,2 051857,000254: 23,3510 30031 STOVL* 24D # K=(VA)(VB1) J=(VA)(VB2) J=(VA)(VB3) 051858,000255: 23,3511 00015 12D,1 051859,000256: 051860,000257: 23,3512 53357 VXSC* VAD 051861,000258: 23,3513 75046 STARAD +18D,2 # L=(WA)(WB1) J=(WA)(WB2) J=(WA)(WB3) 051862,000259: 23,3514 76455 VAD VSL1 051863,000260: 23,3515 00031 24D 051864,000261: 23,3516 53520 XCHX,1 UNIT 051865,000262: 23,3517 00036 30D 051866,000263: 23,3520 06707 STORE XDC +18D,1 # XDC = L+J+K YDC = L+J+K ZDC = L+J+K 051867,000264: 051868,000265: 23,3521 77700 TIX,1 051869,000266: 23,3522 47523 AXISGEN3 051870,000267: 051871,000268: 23,3523 77704 AXISGEN3 TIX,2 051872,000269: 23,3524 47500 AXISGEN2 051873,000270: 051874,000271: 23,3525 77775 VLOAD 051875,000272: 23,3526 02665 XDC 051876,000273: 23,3527 26707 STOVL STARAD 051877,000274: 23,3530 02673 YDC 051878,000275: 23,3531 26715 STOVL STARAD +6 051879,000276: 23,3532 02701 ZDC 051880,000277: 23,3533 02723 STORE STARAD +12D 051881,000278: 051882,000279: 23,3534 77616 RVQ 051883,000280: 051884,000281: # Page 1254 051885,000282: 23,3535 05520 26075 QTSN45 2DEC .1768 051886,000283: 23,3537 05252 25253 .166... 2DEC .1666666667 051887,000284: 051888,000285: # Page 1255 051889,000286: # (There is no source code on this page of the original assembly listing.) End of include-file INFLIGHT_ALIGNMENT_ROUTINES.agc. Parent file is MAIN.agc