Source Code
![]() |
These source-code files were transcribed from scans made from Don Eyles's personal
copy of Luminary 069. They were scanned at archive.org's Boston
facility, and the scanning was sponsored by Onno Hommes. 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 prefixed with a single '#' symbol,
whereas comments added later are prefixed by "##" or "###". 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 Luminary 69 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:GAP: ASSEMBLE REVISION 069 OF AGC PROGRAM LUMINARY BY NASA 2021112-011 19:02 NOV. 25,1968Note that the date is the date of the printout, not the date of the program revision. |
053956,000002: ## Copyright: Public domain.
053957,000003: ## Filename: INFLIGHT_ALIGNMENT_ROUTINES.agc
053958,000004: ## Purpose: The main source file for Luminary revision 069.
053959,000005: ## It is part of the source code for the original release
053960,000006: ## of the flight software for the Lunar Module's (LM) Apollo
053961,000007: ## Guidance Computer (AGC) for Apollo 10. The actual flown
053962,000008: ## version was Luminary 69 revision 2, which included a
053963,000009: ## newer lunar gravity model and only affected module 2.
053964,000010: ## This file is intended to be a faithful transcription, except
053965,000011: ## that the code format has been changed to conform to the
053966,000012: ## requirements of the yaYUL assembler rather than the
053967,000013: ## original YUL assembler.
053968,000014: ## Reference: pp. 1244-1253
053969,000015: ## Assembler: yaYUL
053970,000016: ## Contact: Ron Burkey <info@sandroid.org>.
053971,000017: ## Website: www.ibiblio.org/apollo/index.html
053972,000018: ## Mod history: 2016-12-13 MAS Created from Luminary 99.
053973,000019: ## 2016-12-18 MAS Updated from comment-proofed Luminary 99 version.
053974,000020: ## 2017-01-16 RRB Updated for Luminary 69.
053975,000021: ## 2017-01-21 HG Add missing interpretive operation BONCLR
053976,000022: ## 2017-01-28 RSB Proofed comment text using octopus/prooferComments
053977,000023: ## but no errors found.
053978,000024: ## 2017-03-17 RSB Comment-text fixes identified in diff'ing
053979,000025: ## Luminary 99 vs Comanche 55.
053980,000026:
![]() |
Page 1244 |
053982,000028: 22,3731 BANK 22
053983,000029: 23,2000 SETLOC INFLIGHT
053984,000030: 23,2000 BANK
053985,000031:
053986,000032: 23,3151 E5,1642 EBANK= XSM
053987,000033:
053988,000034: # CALCGTA COMPUTES THE GYRO TORQUE ANGLES REQUIRED TO BRING THE STABLE MEMBER INTO THE DESIRED ORIENTATION.
053989,000035:
053990,000036: # THE INPUT IS THE DESIRED STABLE MEMBER COORDINATES REFERRED TO PRESENT STABLE MEMBER COORDINATES. THE THREE
053991,000037: # HALF-UNIT VECTORS ARE STORED AT XDC, YDC, AND ZDC.
053992,000038:
053993,000039: # THE OUTPUTS ARE THE THREE GYRO TORQUING ANGLES TO BE APPLIED TO THE Y, Z, AND X GYROS AND ARE STORED DP AT IGC,
053994,000040: # MGC, AND OGC RESPECTIVELY.
053995,000041:
053996,000042: 23,3151 COUNT* $$/INFLT
053997,000043: 23,3151 71220 CALCGTA ITA DLOAD # PUSHDOWN 00-03,16D-27D,34D-37D
053998,000044: 23,3152 00051 S2 # XDC = (XD1 XD2 XD3)
053999,000045: 23,3153 02665 XDC # YDC = (YD1 YD2 YD3)
054000,000046: 23,3154 65325 PDDL PDDL # ZDC = (ZD1 ZD2 ZD3)
054001,000047: 23,3155 06424 HI6ZEROS
054002,000048: 23,3156 02671 XDC +4
054003,000049: 23,3157 55476 DCOMP VDEF
054004,000050: 23,3160 77656 UNIT
054005,000051: 23,3161 14027 STODL ZPRIME # ZP = UNIT(-XD3 0 XD1) = (ZP1 ZP2 ZP3)
054006,000052: 23,3162 00027 ZPRIME
054007,000053:
054008,000054: 23,3163 77742 SR1
054009,000055: 23,3164 14023 STODL SINTH # SIN(IGC) = ZP1
054010,000056: 23,3165 00033 ZPRIME +4
054011,000057: 23,3166 77742 SR1
054012,000058: 23,3167 34021 STCALL COSTH # COS(IGC) = ZP3
054013,000059: 23,3170 47222 ARCTRIG
054014,000060:
054015,000061: 23,3171 16742 STODL IGC # Y GYRO TORQUING ANGLE FRACTION OF REV.
054016,000062: 23,3172 02667 XDC +2
054017,000063: 23,3173 77742 SR1
054018,000064: 23,3174 14023 STODL SINTH # SIN(MGC) = XD2
054019,000065: 23,3175 00027 ZPRIME
054020,000066:
054021,000067: 23,3176 65205 DMP PDDL
054022,000068: 23,3177 02671 XDC +4 # PD00 = (ZP1)(XD3)
054023,000069: 23,3200 00033 ZPRIME +4
054024,000070:
054025,000071: 23,3201 45205 DMP DSU
054026,000072: 23,3202 02665 XDC # MPAC = (ZP3)(XD1)
054027,000073: 23,3203 77626 STADR
054028,000074: 23,3204 43756 STCALL COSTH # COS(MGC) = MPAC - PD00
054029,000075: 23,3205 47222 ARCTRIG
![]() |
Page 1245 |
054031,000077: 23,3206 26744 STOVL MGC # Z GYRO TORQUING ANGLE FRACTION OF REV.
054032,000078: 23,3207 00027 ZPRIME
054033,000079: 23,3210 77641 DOT
054034,000080: 23,3211 02701 ZDC
054035,000081: 23,3212 24021 STOVL COSTH # COS(OGC) = ZP . ZDC
054036,000082: 23,3213 00027 ZPRIME
054037,000083: 23,3214 77641 DOT
054038,000084: 23,3215 02673 YDC
054039,000085: 23,3216 34023 STCALL SINTH # SIN(OGC) = ZP . YDC
054040,000086: 23,3217 47222 ARCTRIG
054041,000087:
054042,000088: 23,3220 36740 STCALL OGC # X GYRO TORQUING ANGLE FRACTION OF REV.
054043,000089: 23,3221 00051 S2
054044,000090:
![]() |
Page 1246 |
054046,000092: # ARCTRIG COMPUTES AN ANGLE GIVEN THE SINE AND COSINE OF THIS ANGLE.
054047,000093:
054048,000094: # THE INPUTS ARE SIN/4 AND COS/4 STORED DP AT SINTH AND COSTH.
054049,000095:
054050,000096: # THE OUTPUT IS THE CALCULATED ANGLE BETWEEN +.5 AND -.5 REVOLUTIONS AND STORED AT THETA. THE OUTPUT IS ALSO
054051,000097: # AVAILABLE AT MPAC.
054052,000098:
054053,000099: 23,3222 51545 ARCTRIG DLOAD ABS # PUSHDOWN 16D-21D
054054,000100: 23,3223 00023 SINTH
054055,000101: 23,3224 50025 DSU BMN
054056,000102: 23,3225 07440 QTSN45 # ABS(SIN/4) - SIN(45)/4
054057,000103: 23,3226 47235 TRIG1 # IF (-45,45) OR (135,-135)
054058,000104:
054059,000105: 23,3227 72545 DLOAD SL1 # (45,135) OR (-135,-45)
054060,000106: 23,3230 00021 COSTH
054061,000107: 23,3231 75326 ACOS SIGN
054062,000108: 23,3232 00023 SINTH
054063,000109: 23,3233 00025 STORE THETA # X = ARCCOS(COS) WITH SIGN(SIN)
054064,000110: 23,3234 77616 RVQ
054065,000111:
054066,000112: 23,3235 72545 TRIG1 DLOAD SL1 # (-45,45) OR (135,-135)
054067,000113: 23,3236 00023 SINTH
054068,000114: 23,3237 77736 ASIN
054069,000115: 23,3240 14025 STODL THETA # X = ARCSIN(SIN) WITH SIGN(SIN)
054070,000116: 23,3241 00021 COSTH
054071,000117: 23,3242 77640 BMN
054072,000118: 23,3243 47246 TRIG2 # IF (135,-135)
054073,000119:
054074,000120: 23,3244 43545 DLOAD RVQ
054075,000121: 23,3245 00025 THETA # X = ARCSIN(SIN) (-45,45)
054076,000122:
054077,000123: 23,3246 75345 TRIG2 DLOAD SIGN # (135,-135)
054078,000124: 23,3247 06422 HIDPHALF
054079,000125: 23,3250 00023 SINTH
054080,000126: 23,3251 77625 DSU
054081,000127: 23,3252 00025 THETA
054082,000128: 23,3253 00025 STORE THETA # X = .5 WITH SIGN(SIN) - ARCSIN(SIN)
054083,000129: 23,3254 77616 RVQ # (+) - (+) OR (-) - (-)
054084,000130:
![]() |
Page 1247 |
054086,000132: # SMNB, NBSM, AND AXISROT, WHICH USED TO APPEAR HERE, HAVE BEEN
054087,000133: # COMBINED IN A ROUTINE CALLED AX*SR*T, WHICH APPEARS AMONG THE POWERED
054088,000134: # FLIGHT SUBROUTINES.
054089,000135:
![]() |
Page 1248 |
054091,000137: # CALCGA COMPUTES THE CDU DRIVING ANGLES REQUIRED TO BRING THE STABLE MEMBER INTO THE DESIRED ORIENTATION.
054092,000138:
054093,000139: # THE INPUTS ARE 1) THE NAVIGATION BASE COORDINATES REFERRED TO ANY COORDINATE SYSTEM. THE THREE HALF-UNIT
054094,000140: # VECTORS ARE STORED AT XNB, YNB, AND ZNB. 2) THE DESIRED STABLE MEMBER COORDINATES REFERRED TO THE SAME
054095,000141: # COORDINATE SYSTEM ARE STORED AT XSM, YSM, AND ZSM.
054096,000142:
054097,000143: # THE OUTPUTS ARE THE THREE CDU DRIVING ANGLES AND ARE STORED SP AT THETAD, THETAD +1, AND THETAD +2.
054098,000144:
054099,000145: 23,3255 77601 CALCGA SETPD # PUSHDOWN 00-05, 16D-21D, 34D-37D
054100,000146: 23,3256 00001 0
054101,000147: 23,3257 47375 VLOAD VXV
054102,000148: 23,3260 02665 XNB # XNB = OGA (OUTER GIMBAL AXIS)
054103,000149: 23,3261 02651 YSM # YSM = IGA (INNER GIMBAL AXIS)
054104,000150: 23,3262 41456 UNIT PUSH # PD0 = UNIT(OGA X IGA) = MGA
054105,000151:
054106,000152: 23,3263 44041 DOT ITA
054107,000153: 23,3264 02701 ZNB
054108,000154: 23,3265 00051 S2
054109,000155: 23,3266 24021 STOVL COSTH # COS(OG) = MGA . ZNB
054110,000156: 23,3267 00001 0
054111,000157: 23,3270 77641 DOT
054112,000158: 23,3271 02673 YNB
054113,000159: 23,3272 34023 STCALL SINTH # SIN(OG) = MGA . YNB
054114,000160: 23,3273 47222 ARCTRIG
054115,000161: 23,3274 26740 STOVL OGC
054116,000162: 23,3275 00001 0
054117,000163:
054118,000164: 23,3276 50235 VXV DOT # PROVISION FOR MG ANGLE OF 90 DEGREES
054119,000165: 23,3277 02665 XNB
054120,000166: 23,3300 02651 YSM
054121,000167: 23,3301 77752 SL1
054122,000168: 23,3302 24021 STOVL COSTH # COS(MG) = IGA . (MGA X OGA)
054123,000169: 23,3303 02651 YSM
054124,000170: 23,3304 77641 DOT
054125,000171: 23,3305 02665 XNB
054126,000172: 23,3306 34023 STCALL SINTH # SIN(MG) = IGA . OGA
054127,000173: 23,3307 47222 ARCTRIG
054128,000174: 23,3310 02744 STORE MGC
054129,000175:
054130,000176: 23,3311 45246 ABS DSU
054131,000177: 23,3312 07442 .166...
054132,000178: 23,3313 77644 BPL
054133,000179: 23,3314 47335 GIMLOCK1 # IF ANGLE GREATER THAN 60 DEGREES
054134,000180:
054135,000181: 23,3315 50375 CALCGA1 VLOAD DOT
054136,000182: 23,3316 02657 ZSM
054137,000183: 23,3317 00001 0
054138,000184: 23,3320 24021 STOVL COSTH # COS(IG) = ZSM . MGA
054139,000185: 23,3321 02643 XSM
![]() |
Page 1249 |
054141,000187: 23,3322 45441 DOT STADR
054142,000188: 23,3323 43754 STCALL SINTH # SIN(IG) = XSM . MGA
054143,000189: 23,3324 47222 ARCTRIG
054144,000190:
054145,000191: 23,3325 26742 STOVL IGC
054146,000192: 23,3326 02740 OGC
054147,000193: 23,3327 43034 RTB BONCLR
054148,000194: 23,3330 21524 V1STO2S
054149,000195: 23,3331 00200 CPHIFLAG
054150,000196: 23,3332 00051 S2
054151,000197: 23,3333 34322 STCALL THETAD
054152,000198: 23,3334 00051 S2
054153,000199:
054154,000200: 23,3335 77776 GIMLOCK1 EXIT
054155,000201: 23,3336 05567 TC ALARM
054156,000202: 23,3337 00401 OCT 00401
054157,000203: 23,3340 05504 TC UPFLAG # GIMBAL LOCK HAS OCCURED
054158,000204: 23,3341 00056 ADRES GLOKFAIL
054159,000205:
054160,000206: 23,3342 06036 TC INTPRET
054161,000207: 23,3343 77650 GOTO
054162,000208: 23,3344 47315 CALCGA1
054163,000209:
![]() |
Page 1250 |
054165,000211: # AXISGEN COMPUTES THE COORDINATES OF ONE COORDINATE SYSTEM REFERRED TO ANOTHER COORDINATE SYSTEM.
054166,000212:
054167,000213: # THE INPUTS ARE 1) THE STAR1 VECTOR REFERRED TO COORDINATE SYSTEM A STORED AT STARAD. 2) THE STAR2 VECTOR
054168,000214: # REFERRED TO COORDINATE SYSTEM A STORED AT STARAD +6. 3) THE STAR1 VECTOR REFERRED TO COORDINATE SYSTEM B STORED
054169,000215: # AT LOCATION 6 OF THE VAC AREA. 4) THE STAR2 VECTOR REFERRED TO COORDINATE SYSTEM B STORED AT LOCATION 12D OF
054170,000216: # THE VAC AREA.
054171,000217:
054172,000218: # THE OUTPUT DEFINES COORDINATE SYSTEM A REFERRED TO COORDINATE SYSTEM B. THE THREE HALF-UNIT VECTORS ARE STORED
054173,000219: # AT LOCATIONS XDC, XDC +6, XDC +12D, AND STARAD, STARAD +6, STARAD +12D.
054174,000220:
054175,000221: 23,3345 66370 AXISGEN AXT,1 SSP # PUSHDOWN 00-30D,34D-37D
054176,000222: 23,3346 02714 STARAD +6
054177,000223: 23,3347 00051 S1
054178,000224: 23,3350 02700 STARAD -6
054179,000225:
054180,000226: 23,3351 77601 SETPD
054181,000227: 23,3352 00001 0
054182,000228: 23,3353 46773 AXISGEN1 VLOAD* VXV* # 06D UA = S1
054183,000229: 23,3354 02723 STARAD +12D,1 # STARAD +00D UB = S1
054184,000230: 23,3355 02731 STARAD +18D,1
054185,000231: 23,3356 77656 UNIT # 12D VA = UNIT(S1 X S2)
054186,000232: 23,3357 06731 STORE STARAD +18D,1 # STARAD +06D VB = UNIT(S1 X S2)
054187,000233: 23,3360 77773 VLOAD*
054188,000234: 23,3361 02723 STARAD +12D,1
054189,000235:
054190,000236: 23,3362 76433 VXV* VSL1
054191,000237: 23,3363 02731 STARAD +18D,1 # 18D WA = UA X VA
054192,000238: 23,3364 06737 STORE STARAD +24D,1 # STARAD +12D WB = UB X VB
054193,000239:
054194,000240: 23,3365 77700 TIX,1
054195,000241: 23,3366 47353 AXISGEN1
054196,000242:
054197,000243: 23,3367 66160 AXC,1 SXA,1
054198,000244: 23,3370 00006 6
054199,000245: 23,3371 00036 30D
054200,000246:
054201,000247: 23,3372 66370 AXT,1 SSP
054202,000248: 23,3373 00022 18D
054203,000249: 23,3374 00051 S1
054204,000250: 23,3375 00006 6
054205,000251:
054206,000252: 23,3376 66374 AXT,2 SSP
054207,000253: 23,3377 00006 6
054208,000254: 23,3400 00052 S2
054209,000255: 23,3401 00002 2
054210,000256:
054211,000257: 23,3402 76720 AXISGEN2 XCHX,1 VLOAD*
054212,000258: 23,3403 00036 30D # X1=-6 X2=+6 X1=-6 X2=+4 X1=-6 X2=+2
054213,000259: 23,3404 00001 0,1
054214,000260:
![]() |
Page 1251 |
054216,000262: 23,3405 62757 VXSC* PDVL* # J=(UA)(UB1) J=(UA)(UB2) J=(UA)(UB3)
054217,000263: 23,3406 75062 STARAD +6,2
054218,000264: 23,3407 00007 6,1
054219,000265: 23,3410 77757 VXSC*
054220,000266: 23,3411 75054 STARAD +12D,2
054221,000267: 23,3412 30031 STOVL* 24D # K=(VA)(VB1) J=(VA)(VB2) J=(VA)(VB3)
054222,000268: 23,3413 00015 12D,1
054223,000269:
054224,000270: 23,3414 53357 VXSC* VAD
054225,000271: 23,3415 75046 STARAD +18D,2 # L=(WA)(WB1) J=(WA)(WB2) J=(WA)(WB3)
054226,000272: 23,3416 76455 VAD VSL1
054227,000273: 23,3417 00031 24D
054228,000274: 23,3420 53520 XCHX,1 UNIT
054229,000275: 23,3421 00036 30D
054230,000276: 23,3422 06707 STORE XDC +18D,1 # XDC = L+J+K YDC = L+J+K ZDC = L+J+K
054231,000277:
054232,000278: 23,3423 77700 TIX,1
054233,000279: 23,3424 47425 AXISGEN3
054234,000280:
054235,000281: 23,3425 77704 AXISGEN3 TIX,2
054236,000282: 23,3426 47402 AXISGEN2
054237,000283:
054238,000284: 23,3427 77775 VLOAD
054239,000285: 23,3430 02665 XDC
054240,000286: 23,3431 26707 STOVL STARAD
054241,000287: 23,3432 02673 YDC
054242,000288: 23,3433 26715 STOVL STARAD +6
054243,000289: 23,3434 02701 ZDC
054244,000290: 23,3435 02723 STORE STARAD +12D
054245,000291:
054246,000292: 23,3436 77616 RVQ
054247,000293:
![]() |
Page 1252 |
054249,000295: 23,3437 05520 26075 QTSN45 2DEC .1768
054250,000296:
054251,000297: 23,3441 05252 25253 .166... 2DEC .1666666667
054252,000298:
![]() |
Page 1253 Empty page |
054255,000301:
End of include-file INFLIGHT_ALIGNMENT_ROUTINES.agc. Parent file is MAIN.agc