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. |
053820,000002: ## Copyright: Public domain.
053821,000003: ## Filename: INFLIGHT_ALIGNMENT_ROUTINES.agc
053822,000004: ## Purpose: A section of Luminary revision 210.
053823,000005: ## It is part of the source code for the Lunar Module's (LM)
053824,000006: ## Apollo Guidance Computer (AGC) for Apollo 15-17.
053825,000007: ## This file is intended to be a faithful transcription, except
053826,000008: ## that the code format has been changed to conform to the
053827,000009: ## requirements of the yaYUL assembler rather than the
053828,000010: ## original YUL assembler.
053829,000011: ## Reference: pp. 1246-1255
053830,000012: ## Assembler: yaYUL
053831,000013: ## Contact: Ron Burkey <info@sandroid.org>.
053832,000014: ## Website: www.ibiblio.org/apollo/index.html
053833,000015: ## Mod history: 2016-11-17 JL Created from Luminary131 version.
053834,000016: ## 2016-12-07 RRB Updated for Luminary210.
053835,000017: ## 2016-12-26 RSB Comment-text proofed using ProoferComments
053836,000018: ## and corrected errors found.
053837,000019: ## 2017-03-17 RSB Comment-text fixes identified in diff'ing
053838,000020: ## Luminary 99 vs Comanche 55.
053839,000021:
![]() |
Page 1246 |
053841,000023: 22,3774 BANK 22
053842,000024: 23,2000 SETLOC INFLIGHT
053843,000025: 23,2000 BANK
053844,000026:
053845,000027: 23,3232 E5,1642 EBANK= XSM
053846,000028:
053847,000029: # CALCGTA COMPUTES THE GYRO TORQUE ANGLES REQUIRED TO BRING THE STABLE MEMBER INTO THE DESIRED ORIENTATION.
053848,000030:
053849,000031: # THE INPUT IS THE DESIRED STABLE MEMBER COORDINATES REFERRED TO PRESENT STABLE MEMBER COORDINATES. THE THREE
053850,000032: # HALF-UNIT VECTORS ARE STORED AT XDC, YDC, AND ZDC.
053851,000033:
053852,000034: # THE OUTPUTS ARE THE THREE GYRO TORQUING ANGLES TO BE APPLIED TO THE Y, Z, AND X GYROS AND ARE STORED DP AT IGC,
053853,000035: # MGC, AND OGC RESPECTIVELY.
053854,000036:
053855,000037: 23,3232 COUNT* $$/INFLT
053856,000038: 23,3232 71220 CALCGTA ITA DLOAD # PUSHDOWN 00-03, 16D-27D, 34D-37D
053857,000039: 23,3233 00051 S2 # XDC = (XD1 XD2 XD3)
053858,000040: 23,3234 02665 XDC # YDC = (YD1 YD2 YD3)
053859,000041: 23,3235 65325 PDDL PDDL # ZDC = (ZD1 ZD2 ZD3)
053860,000042: 23,3236 06505 HI6ZEROS
053861,000043: 23,3237 02671 XDC +4
053862,000044: 23,3240 55476 DCOMP VDEF
053863,000045: 23,3241 77656 UNIT
053864,000046: 23,3242 14027 STODL ZPRIME # ZP = UNIT(-XD3 0 XD1) = (ZP1 ZP2 ZP3)
053865,000047: 23,3243 00027 ZPRIME
053866,000048:
053867,000049: 23,3244 77742 SR1
053868,000050: 23,3245 14023 STODL SINTH # SIN(IGC) = ZP1
053869,000051: 23,3246 00033 ZPRIME +4
053870,000052: 23,3247 77742 SR1
053871,000053: 23,3250 34021 STCALL COSTH # COS(IGC) = ZP3
053872,000054: 23,3251 47303 ARCTRIG
053873,000055:
053874,000056: 23,3252 16742 STODL IGC # Y GYRO TORQUING ANGLE FRACTION OF REV.
053875,000057: 23,3253 02667 XDC +2
053876,000058: 23,3254 77742 SR1
053877,000059: 23,3255 14023 STODL SINTH # SIN(MGC) = XD2
053878,000060: 23,3256 00027 ZPRIME
053879,000061:
053880,000062: 23,3257 65205 DMP PDDL
053881,000063: 23,3260 02671 XDC +4 # PD00 = (ZP1)(XD3)
053882,000064: 23,3261 00033 ZPRIME +4
053883,000065:
053884,000066: 23,3262 45205 DMP DSU
053885,000067: 23,3263 02665 XDC # MPAC = (ZP3)(XD1)
053886,000068: 23,3264 77626 STADR
053887,000069: 23,3265 43756 STCALL COSTH # COS(MGC) = MPAC - PD00
053888,000070: 23,3266 47303 ARCTRIG
![]() |
Page 1247 |
053890,000072: 23,3267 26744 STOVL MGC # Z GYRO TORQUING ANGLE FRACTION OF REV.
053891,000073: 23,3270 00027 ZPRIME
053892,000074: 23,3271 77641 DOT
053893,000075: 23,3272 02701 ZDC
053894,000076: 23,3273 24021 STOVL COSTH # COS(OGC) = ZP . ZDC
053895,000077: 23,3274 00027 ZPRIME
053896,000078: 23,3275 77641 DOT
053897,000079: 23,3276 02673 YDC
053898,000080: 23,3277 34023 STCALL SINTH # SIN(OGC) = ZP . YDC
053899,000081: 23,3300 47303 ARCTRIG
053900,000082:
053901,000083: 23,3301 36740 STCALL OGC # X GYRO TORQUING ANGLE FRACTION OF REV.
053902,000084: 23,3302 00051 S2
053903,000085:
![]() |
Page 1248 |
053905,000087: # ARCTRIG COMPUTES AN ANGLE GIVEN THE SINE AND COSINE OF THIS ANGLE.
053906,000088:
053907,000089: # THE INPUTS ARE SIN/4 AND COS/4 STORED DP AT SINTH AND COSTH.
053908,000090:
053909,000091: # THE OUTPUT IS THE CALCULATED ANGLE BETWEEN +.5 AND -.5 REVOLUTIONS AND STORED AT THETA. THE OUTPUT IS ALSO
053910,000092: # AVAILABLE AT MPAC.
053911,000093:
053912,000094: 23,3303 51545 ARCTRIG DLOAD ABS # PUSHDOWN 16D-21D
053913,000095: 23,3304 00023 SINTH
053914,000096: 23,3305 50025 DSU BMN
053915,000097: 23,3306 07517 QTSN45 # ABS(SIN/4) - SIN(45)/4
053916,000098: 23,3307 47316 TRIG1 # IF (-45,45) OR (135,-135)
053917,000099:
053918,000100: 23,3310 72545 DLOAD SL1 # (45,135) OR (-135,-45)
053919,000101: 23,3311 00021 COSTH
053920,000102: 23,3312 75326 ACOS SIGN
053921,000103: 23,3313 00023 SINTH
053922,000104: 23,3314 00025 STORE THETA # X = ARCCOS(COS) WITH SIGN(SIN)
053923,000105: 23,3315 77616 RVQ
053924,000106:
053925,000107: 23,3316 72545 TRIG1 DLOAD SL1 # (-45,45) OR (135,-135)
053926,000108: 23,3317 00023 SINTH
053927,000109: 23,3320 77736 ASIN
053928,000110: 23,3321 14025 STODL THETA # X = ARCSIN(SIN) WITH SIGN(SIN)
053929,000111: 23,3322 00021 COSTH
053930,000112: 23,3323 77640 BMN
053931,000113: 23,3324 47327 TRIG2 # IF (135,-135)
053932,000114:
053933,000115: 23,3325 43545 DLOAD RVQ
053934,000116: 23,3326 00025 THETA # X = ARCSIN(SIN) (-45,45)
053935,000117:
053936,000118: 23,3327 75345 TRIG2 DLOAD SIGN # (135,-135)
053937,000119: 23,3330 06503 HIDPHALF
053938,000120: 23,3331 00023 SINTH
053939,000121: 23,3332 77625 DSU
053940,000122: 23,3333 00025 THETA
053941,000123: 23,3334 00025 STORE THETA # X = .5 WITH SIGN(SIN) - ARCSIN(SIN)
053942,000124: 23,3335 77616 RVQ # (+) - (+) OR (-) - (-)
053943,000125:
![]() |
Page 1249 |
053945,000127: # SMNB, NBSM, AND AXISROT, WHICH USED TO APPEAR HERE, HAVE BEEN
053946,000128: # COMBINED IN A ROUTINE CALLED AX*SR*T, WHICH APPEARS AMONG THE POWERED
053947,000129: # FLIGHT SUBROUTINES.
053948,000130:
![]() |
Page 1250 |
053950,000132: # CALCGA COMPUTES THE CDU DRIVING ANGLES REQUIRED TO BRING THE STABLE MEMBER INTO THE DESIRED ORIENTATION.
053951,000133:
053952,000134: # THE INPUTS ARE 1) THE NAVIGATION BASE COORDINATES REFERRED TO ANY COORDINATE SYSTEM. THE THREE HALF-UNIT
053953,000135: # VECTORS ARE STORED AT XNB,YNB, AND ZNB. 2) THE DESIRED STABLE MEMBER COORDINATES REFERRED TO THE SAME
053954,000136: # COORDINATE SYSTEM ARE STORED AT XSM, YSM, AND ZSM.
053955,000137:
053956,000138: # THE OUTPUTS ARE THE THREE CDU DRIVING ANGLES AND ARE STORED SP AT THETAD, THETAD +1, AND THETAD +2.
053957,000139:
053958,000140: 23,3336 77601 CALCGA SETPD # PUSHDOWN 00-05, 16D-21D, 34D-37D
053959,000141: 23,3337 00001 0
053960,000142: 23,3340 47375 VLOAD VXV
053961,000143: 23,3341 02665 XNB # XNB = OGA (OUTER GIMBAL AXIS)
053962,000144: 23,3342 02651 YSM # YSM = IGA (INNER GIMBAL AXIS)
053963,000145: 23,3343 41456 UNIT PUSH # PD0 = UNIT(OGA X IGA) = MGA
053964,000146:
053965,000147: 23,3344 44041 DOT ITA
053966,000148: 23,3345 02701 ZNB
053967,000149: 23,3346 00051 S2
053968,000150: 23,3347 24021 STOVL COSTH # COS(OG) = MGA . ZNB
053969,000151: 23,3350 00001 0
053970,000152: 23,3351 77641 DOT
053971,000153: 23,3352 02673 YNB
053972,000154: 23,3353 34023 STCALL SINTH # SIN(OG) = MGA . YNB
053973,000155: 23,3354 47303 ARCTRIG
053974,000156: 23,3355 26740 STOVL OGC
053975,000157: 23,3356 00001 0
053976,000158:
053977,000159: 23,3357 50235 VXV DOT # PROVISION FOR MG ANGLE OF 90 DEGREES
053978,000160: 23,3360 02665 XNB
053979,000161: 23,3361 02651 YSM
053980,000162: 23,3362 77752 SL1
053981,000163: 23,3363 24021 STOVL COSTH # COS(MG) = IGA . (MGA X OGA)
053982,000164: 23,3364 02651 YSM
053983,000165: 23,3365 77641 DOT
053984,000166: 23,3366 02665 XNB
053985,000167: 23,3367 34023 STCALL SINTH # SIN(MG) = IGA . OGA
053986,000168: 23,3370 47303 ARCTRIG
053987,000169: 23,3371 02744 STORE MGC
053988,000170:
053989,000171: 23,3372 45246 ABS DSU
053990,000172: 23,3373 07521 .166...
053991,000173: 23,3374 77644 BPL
053992,000174: 23,3375 47414 GIMLOCK1 # IF ANGLE GREATER THAN 60 DEGREES
053993,000175:
053994,000176: 23,3376 50375 CALCGA1 VLOAD DOT
053995,000177: 23,3377 02657 ZSM
053996,000178: 23,3400 00001 0
053997,000179: 23,3401 24021 STOVL COSTH # COS(IG) = ZSM . MGA
053998,000180: 23,3402 02643 XSM
![]() |
Page 1251 |
054000,000182: 23,3403 45441 DOT STADR
054001,000183: 23,3404 43754 STCALL SINTH # SIN(IG) = XSM . MGA
054002,000184: 23,3405 47303 ARCTRIG
054003,000185:
054004,000186: 23,3406 26742 STOVL IGC
054005,000187: 23,3407 02740 OGC
054006,000188: 23,3410 77634 RTB
054007,000189: 23,3411 21630 V1STO2S
054008,000190: 23,3412 34322 STCALL THETAD
054009,000191: 23,3413 00051 S2
054010,000192:
054011,000193: 23,3414 77776 GIMLOCK1 EXIT
054012,000194: 23,3415 05571 TC ALARM
054013,000195: 23,3416 00401 OCT 00401
054014,000196: 23,3417 05506 TC UPFLAG # GIMBAL LOCK HAS OCCURED
054015,000197: 23,3420 00056 ADRES GLOKFAIL
054016,000198:
054017,000199: 23,3421 06060 TC INTPRET
054018,000200: 23,3422 77650 GOTO
054019,000201: 23,3423 47376 CALCGA1
054020,000202:
![]() |
Page 1252 |
054022,000204: # AXISGEN COMPUTES THE COORDINATES OF ONE COORDINATE SYSTEM REFERRED TO ANOTHER COORDINATE SYSTEM.
054023,000205:
054024,000206: # THE INPUTS ARE 1) THE STAR1 VECTOR REFERRED TO COORDINATE SYSTEM A STORED AT STARAD. 2) THE STAR2 VECTOR
054025,000207: # REFERRED TO COORDINATE SYSTEM A STORED AT STARAD +6. 3) THE STAR1 VECTOR REFERRED TO COORDINATE SYSTEM B STORED
054026,000208: # AT LOCATION 6 OF THE VAC AREA. 4) THE STAR2 VECTOR REFERRED TO COORDINATE SYSTEM B STORED AT LOCATION 12D OF
054027,000209: # THE VAC AREA.
054028,000210:
054029,000211: # THE OUTPUT DEFINES COORDINATE SYSTEM A REFERRED TO COORDINATE SYSTEM B. THE THREE HALF-UNIT VECTORS ARE STORED
054030,000212: # AT LOCATIONS XDC, XDC +6, XDC +12D, AND STARAD, STARAD +6, STARAD +12D.
054031,000213:
054032,000214: 23,3424 66370 AXISGEN AXT,1 SSP # PUSHDOWN 00-30D, 34D-37D
054033,000215: 23,3425 02714 STARAD +6
054034,000216: 23,3426 00051 S1
054035,000217: 23,3427 02700 STARAD -6
054036,000218:
054037,000219: 23,3430 77601 SETPD
054038,000220: 23,3431 00001 0
054039,000221: 23,3432 46773 AXISGEN1 VLOAD* VXV* # 06D UA = S1
054040,000222: 23,3433 02723 STARAD +12D,1 # STARAD +00D UB = S1
054041,000223: 23,3434 02731 STARAD +18D,1
054042,000224: 23,3435 77656 UNIT # 12D VA = UNIT(S1 X S2)
054043,000225: 23,3436 06731 STORE STARAD +18D,1 # STARAD +06D VB = UNIT(S1 X S2)
054044,000226: 23,3437 77773 VLOAD*
054045,000227: 23,3440 02723 STARAD +12D,1
054046,000228:
054047,000229: 23,3441 76433 VXV* VSL1
054048,000230: 23,3442 02731 STARAD +18D,1 # 18D WA = UA X VA
054049,000231: 23,3443 06737 STORE STARAD +24D,1 # STARAD +12D WB = UB X VB
054050,000232:
054051,000233: 23,3444 77700 TIX,1
054052,000234: 23,3445 47432 AXISGEN1
054053,000235:
054054,000236: 23,3446 66160 AXC,1 SXA,1
054055,000237: 23,3447 00006 6
054056,000238: 23,3450 00036 30D
054057,000239:
054058,000240: 23,3451 66370 AXT,1 SSP
054059,000241: 23,3452 00022 18D
054060,000242: 23,3453 00051 S1
054061,000243: 23,3454 00006 6
054062,000244:
054063,000245: 23,3455 66374 AXT,2 SSP
054064,000246: 23,3456 00006 6
054065,000247: 23,3457 00052 S2
054066,000248: 23,3460 00002 2
054067,000249:
054068,000250: 23,3461 76720 AXISGEN2 XCHX,1 VLOAD*
054069,000251: 23,3462 00036 30D # X1=-6 X2=+6 X1=-6 X2=+4 X1=-6 X2=+2
054070,000252: 23,3463 00001 0,1
054071,000253:
![]() |
Page 1253 |
054073,000255: 23,3464 62757 VXSC* PDVL* # J=(UA)(UB1) J=(UA)(UB2) J=(UA)(UB3)
054074,000256: 23,3465 75062 STARAD +6,2
054075,000257: 23,3466 00007 6,1
054076,000258: 23,3467 77757 VXSC*
054077,000259: 23,3470 75054 STARAD +12D,2
054078,000260: 23,3471 30031 STOVL* 24D # K=(VA)(VB1) J=(VA)(VB2) J=(VA)(VB3)
054079,000261: 23,3472 00015 12D,1
054080,000262:
054081,000263: 23,3473 53357 VXSC* VAD
054082,000264: 23,3474 75046 STARAD +18D,2 # L=(WA)(WB1) J=(WA)(WB2) J=(WA)(WB3)
054083,000265: 23,3475 76455 VAD VSL1
054084,000266: 23,3476 00031 24D
054085,000267: 23,3477 53520 XCHX,1 UNIT
054086,000268: 23,3500 00036 30D
054087,000269: 23,3501 06707 STORE XDC +18D,1 # XDC = L+J+K YDC = L+J+K ZDC = L+J+K
054088,000270:
054089,000271: 23,3502 77700 TIX,1
054090,000272: 23,3503 47504 AXISGEN3
054091,000273:
054092,000274: 23,3504 77704 AXISGEN3 TIX,2
054093,000275: 23,3505 47461 AXISGEN2
054094,000276:
054095,000277: 23,3506 77775 VLOAD
054096,000278: 23,3507 02665 XDC
054097,000279: 23,3510 26707 STOVL STARAD
054098,000280: 23,3511 02673 YDC
054099,000281: 23,3512 26715 STOVL STARAD +6
054100,000282: 23,3513 02701 ZDC
054101,000283: 23,3514 02723 STORE STARAD +12D
054102,000284:
054103,000285: 23,3515 77616 RVQ
054104,000286:
![]() |
Page 1254 |
054106,000288: 23,3516 05520 26075 QTSN45 2DEC .1768
054107,000289: 23,3520 05252 25253 .166... 2DEC .1666666667
054108,000290:
![]() |
Page 1255 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