Source Code
|
These source-code files are part of a reconstructed copy of LUM69 Revision 2, the
flown Apollo 10 Lunar Module (LM) Apollo Guidance Computer (AGC) software.
The reconstruction began with source code of Luminary 69 revision 0 previously transcribed from a digitized copy of that program. The code was then updated by back-porting the R-2 lunar potential model from previously-transcribed source code of Luminary 99. These required changes were described in the original Luminary memos 75 and 78. The reconstructed code was verified by matching memory-bank checksums to those listed in drawing 2021152G. Note that page numbers in the reconstructed code match those on the Luminary 069 printout, although the added code would likely have changed page numbers for a real LUM69 Revision 2 listing. Comments from the original source code are prefixed with a single '#' symbol, whereas comments added later are prefixed by "##" or "###". Report any errors noted by creating an issue report at the Virtual AGC project's GitHub repository. |
053573,000002: ## Copyright: Public domain.
053574,000003: ## Filename: INFLIGHT_ALIGNMENT_ROUTINES.agc
053575,000004: ## Purpose: A section of LUM69 revision 2.
053576,000005: ## It is part of the reconstructed source code for the flown
053577,000006: ## version of the flight software for the Lunar Module's (LM)
053578,000007: ## Apollo Guidance Computer (AGC) for Apollo 10. The code has
053579,000008: ## been recreated from a copy of Luminary revsion 069, using
053580,000009: ## changes present in Luminary 099 which were described in
053581,000010: ## Luminary memos 75 and 78. The code has been adapted such
053582,000011: ## that the resulting bugger words exactly match those specified
053583,000012: ## for LUM69 revision 2 in NASA drawing 2021152B, which gives
053584,000013: ## relatively high confidence that the reconstruction is correct.
053585,000014: ## Reference: pp. 1244-1253
053586,000015: ## Assembler: yaYUL
053587,000016: ## Contact: Ron Burkey <info@sandroid.org>.
053588,000017: ## Website: www.ibiblio.org/apollo/index.html
053589,000018: ## Mod history: 2019-07-27 MAS Created from Luminary 69.
053590,000019:
|
Page 1244 |
053592,000021: 22,3731 BANK 22
053593,000022: 23,2000 SETLOC INFLIGHT
053594,000023: 23,2000 BANK
053595,000024:
053596,000025: 23,3151 E5,1642 EBANK= XSM
053597,000026:
053598,000027: # CALCGTA COMPUTES THE GYRO TORQUE ANGLES REQUIRED TO BRING THE STABLE MEMBER INTO THE DESIRED ORIENTATION.
053599,000028:
053600,000029: # THE INPUT IS THE DESIRED STABLE MEMBER COORDINATES REFERRED TO PRESENT STABLE MEMBER COORDINATES. THE THREE
053601,000030: # HALF-UNIT VECTORS ARE STORED AT XDC, YDC, AND ZDC.
053602,000031:
053603,000032: # THE OUTPUTS ARE THE THREE GYRO TORQUING ANGLES TO BE APPLIED TO THE Y, Z, AND X GYROS AND ARE STORED DP AT IGC,
053604,000033: # MGC, AND OGC RESPECTIVELY.
053605,000034:
053606,000035: 23,3151 COUNT* $$/INFLT
053607,000036: 23,3151 71220 CALCGTA ITA DLOAD # PUSHDOWN 00-03,16D-27D,34D-37D
053608,000037: 23,3152 00051 S2 # XDC = (XD1 XD2 XD3)
053609,000038: 23,3153 02665 XDC # YDC = (YD1 YD2 YD3)
053610,000039: 23,3154 65325 PDDL PDDL # ZDC = (ZD1 ZD2 ZD3)
053611,000040: 23,3155 06424 HI6ZEROS
053612,000041: 23,3156 02671 XDC +4
053613,000042: 23,3157 55476 DCOMP VDEF
053614,000043: 23,3160 77656 UNIT
053615,000044: 23,3161 14027 STODL ZPRIME # ZP = UNIT(-XD3 0 XD1) = (ZP1 ZP2 ZP3)
053616,000045: 23,3162 00027 ZPRIME
053617,000046:
053618,000047: 23,3163 77742 SR1
053619,000048: 23,3164 14023 STODL SINTH # SIN(IGC) = ZP1
053620,000049: 23,3165 00033 ZPRIME +4
053621,000050: 23,3166 77742 SR1
053622,000051: 23,3167 34021 STCALL COSTH # COS(IGC) = ZP3
053623,000052: 23,3170 47222 ARCTRIG
053624,000053:
053625,000054: 23,3171 16742 STODL IGC # Y GYRO TORQUING ANGLE FRACTION OF REV.
053626,000055: 23,3172 02667 XDC +2
053627,000056: 23,3173 77742 SR1
053628,000057: 23,3174 14023 STODL SINTH # SIN(MGC) = XD2
053629,000058: 23,3175 00027 ZPRIME
053630,000059:
053631,000060: 23,3176 65205 DMP PDDL
053632,000061: 23,3177 02671 XDC +4 # PD00 = (ZP1)(XD3)
053633,000062: 23,3200 00033 ZPRIME +4
053634,000063:
053635,000064: 23,3201 45205 DMP DSU
053636,000065: 23,3202 02665 XDC # MPAC = (ZP3)(XD1)
053637,000066: 23,3203 77626 STADR
053638,000067: 23,3204 43756 STCALL COSTH # COS(MGC) = MPAC - PD00
053639,000068: 23,3205 47222 ARCTRIG
|
Page 1245 |
053641,000070: 23,3206 26744 STOVL MGC # Z GYRO TORQUING ANGLE FRACTION OF REV.
053642,000071: 23,3207 00027 ZPRIME
053643,000072: 23,3210 77641 DOT
053644,000073: 23,3211 02701 ZDC
053645,000074: 23,3212 24021 STOVL COSTH # COS(OGC) = ZP . ZDC
053646,000075: 23,3213 00027 ZPRIME
053647,000076: 23,3214 77641 DOT
053648,000077: 23,3215 02673 YDC
053649,000078: 23,3216 34023 STCALL SINTH # SIN(OGC) = ZP . YDC
053650,000079: 23,3217 47222 ARCTRIG
053651,000080:
053652,000081: 23,3220 36740 STCALL OGC # X GYRO TORQUING ANGLE FRACTION OF REV.
053653,000082: 23,3221 00051 S2
053654,000083:
|
Page 1246 |
053656,000085: # ARCTRIG COMPUTES AN ANGLE GIVEN THE SINE AND COSINE OF THIS ANGLE.
053657,000086:
053658,000087: # THE INPUTS ARE SIN/4 AND COS/4 STORED DP AT SINTH AND COSTH.
053659,000088:
053660,000089: # THE OUTPUT IS THE CALCULATED ANGLE BETWEEN +.5 AND -.5 REVOLUTIONS AND STORED AT THETA. THE OUTPUT IS ALSO
053661,000090: # AVAILABLE AT MPAC.
053662,000091:
053663,000092: 23,3222 51545 ARCTRIG DLOAD ABS # PUSHDOWN 16D-21D
053664,000093: 23,3223 00023 SINTH
053665,000094: 23,3224 50025 DSU BMN
053666,000095: 23,3225 07440 QTSN45 # ABS(SIN/4) - SIN(45)/4
053667,000096: 23,3226 47235 TRIG1 # IF (-45,45) OR (135,-135)
053668,000097:
053669,000098: 23,3227 72545 DLOAD SL1 # (45,135) OR (-135,-45)
053670,000099: 23,3230 00021 COSTH
053671,000100: 23,3231 75326 ACOS SIGN
053672,000101: 23,3232 00023 SINTH
053673,000102: 23,3233 00025 STORE THETA # X = ARCCOS(COS) WITH SIGN(SIN)
053674,000103: 23,3234 77616 RVQ
053675,000104:
053676,000105: 23,3235 72545 TRIG1 DLOAD SL1 # (-45,45) OR (135,-135)
053677,000106: 23,3236 00023 SINTH
053678,000107: 23,3237 77736 ASIN
053679,000108: 23,3240 14025 STODL THETA # X = ARCSIN(SIN) WITH SIGN(SIN)
053680,000109: 23,3241 00021 COSTH
053681,000110: 23,3242 77640 BMN
053682,000111: 23,3243 47246 TRIG2 # IF (135,-135)
053683,000112:
053684,000113: 23,3244 43545 DLOAD RVQ
053685,000114: 23,3245 00025 THETA # X = ARCSIN(SIN) (-45,45)
053686,000115:
053687,000116: 23,3246 75345 TRIG2 DLOAD SIGN # (135,-135)
053688,000117: 23,3247 06422 HIDPHALF
053689,000118: 23,3250 00023 SINTH
053690,000119: 23,3251 77625 DSU
053691,000120: 23,3252 00025 THETA
053692,000121: 23,3253 00025 STORE THETA # X = .5 WITH SIGN(SIN) - ARCSIN(SIN)
053693,000122: 23,3254 77616 RVQ # (+) - (+) OR (-) - (-)
053694,000123:
|
Page 1247 |
053696,000125: # SMNB, NBSM, AND AXISROT, WHICH USED TO APPEAR HERE, HAVE BEEN
053697,000126: # COMBINED IN A ROUTINE CALLED AX*SR*T, WHICH APPEARS AMONG THE POWERED
053698,000127: # FLIGHT SUBROUTINES.
053699,000128:
|
Page 1248 |
053701,000130: # CALCGA COMPUTES THE CDU DRIVING ANGLES REQUIRED TO BRING THE STABLE MEMBER INTO THE DESIRED ORIENTATION.
053702,000131:
053703,000132: # THE INPUTS ARE 1) THE NAVIGATION BASE COORDINATES REFERRED TO ANY COORDINATE SYSTEM. THE THREE HALF-UNIT
053704,000133: # VECTORS ARE STORED AT XNB, YNB, AND ZNB. 2) THE DESIRED STABLE MEMBER COORDINATES REFERRED TO THE SAME
053705,000134: # COORDINATE SYSTEM ARE STORED AT XSM, YSM, AND ZSM.
053706,000135:
053707,000136: # THE OUTPUTS ARE THE THREE CDU DRIVING ANGLES AND ARE STORED SP AT THETAD, THETAD +1, AND THETAD +2.
053708,000137:
053709,000138: 23,3255 77601 CALCGA SETPD # PUSHDOWN 00-05, 16D-21D, 34D-37D
053710,000139: 23,3256 00001 0
053711,000140: 23,3257 47375 VLOAD VXV
053712,000141: 23,3260 02665 XNB # XNB = OGA (OUTER GIMBAL AXIS)
053713,000142: 23,3261 02651 YSM # YSM = IGA (INNER GIMBAL AXIS)
053714,000143: 23,3262 41456 UNIT PUSH # PD0 = UNIT(OGA X IGA) = MGA
053715,000144:
053716,000145: 23,3263 44041 DOT ITA
053717,000146: 23,3264 02701 ZNB
053718,000147: 23,3265 00051 S2
053719,000148: 23,3266 24021 STOVL COSTH # COS(OG) = MGA . ZNB
053720,000149: 23,3267 00001 0
053721,000150: 23,3270 77641 DOT
053722,000151: 23,3271 02673 YNB
053723,000152: 23,3272 34023 STCALL SINTH # SIN(OG) = MGA . YNB
053724,000153: 23,3273 47222 ARCTRIG
053725,000154: 23,3274 26740 STOVL OGC
053726,000155: 23,3275 00001 0
053727,000156:
053728,000157: 23,3276 50235 VXV DOT # PROVISION FOR MG ANGLE OF 90 DEGREES
053729,000158: 23,3277 02665 XNB
053730,000159: 23,3300 02651 YSM
053731,000160: 23,3301 77752 SL1
053732,000161: 23,3302 24021 STOVL COSTH # COS(MG) = IGA . (MGA X OGA)
053733,000162: 23,3303 02651 YSM
053734,000163: 23,3304 77641 DOT
053735,000164: 23,3305 02665 XNB
053736,000165: 23,3306 34023 STCALL SINTH # SIN(MG) = IGA . OGA
053737,000166: 23,3307 47222 ARCTRIG
053738,000167: 23,3310 02744 STORE MGC
053739,000168:
053740,000169: 23,3311 45246 ABS DSU
053741,000170: 23,3312 07442 .166...
053742,000171: 23,3313 77644 BPL
053743,000172: 23,3314 47335 GIMLOCK1 # IF ANGLE GREATER THAN 60 DEGREES
053744,000173:
053745,000174: 23,3315 50375 CALCGA1 VLOAD DOT
053746,000175: 23,3316 02657 ZSM
053747,000176: 23,3317 00001 0
053748,000177: 23,3320 24021 STOVL COSTH # COS(IG) = ZSM . MGA
053749,000178: 23,3321 02643 XSM
|
Page 1249 |
053751,000180: 23,3322 45441 DOT STADR
053752,000181: 23,3323 43754 STCALL SINTH # SIN(IG) = XSM . MGA
053753,000182: 23,3324 47222 ARCTRIG
053754,000183:
053755,000184: 23,3325 26742 STOVL IGC
053756,000185: 23,3326 02740 OGC
053757,000186: 23,3327 43034 RTB BONCLR
053758,000187: 23,3330 21524 V1STO2S
053759,000188: 23,3331 00200 CPHIFLAG
053760,000189: 23,3332 00051 S2
053761,000190: 23,3333 34322 STCALL THETAD
053762,000191: 23,3334 00051 S2
053763,000192:
053764,000193: 23,3335 77776 GIMLOCK1 EXIT
053765,000194: 23,3336 05567 TC ALARM
053766,000195: 23,3337 00401 OCT 00401
053767,000196: 23,3340 05504 TC UPFLAG # GIMBAL LOCK HAS OCCURED
053768,000197: 23,3341 00056 ADRES GLOKFAIL
053769,000198:
053770,000199: 23,3342 06036 TC INTPRET
053771,000200: 23,3343 77650 GOTO
053772,000201: 23,3344 47315 CALCGA1
053773,000202:
|
Page 1250 |
053775,000204: # AXISGEN COMPUTES THE COORDINATES OF ONE COORDINATE SYSTEM REFERRED TO ANOTHER COORDINATE SYSTEM.
053776,000205:
053777,000206: # THE INPUTS ARE 1) THE STAR1 VECTOR REFERRED TO COORDINATE SYSTEM A STORED AT STARAD. 2) THE STAR2 VECTOR
053778,000207: # REFERRED TO COORDINATE SYSTEM A STORED AT STARAD +6. 3) THE STAR1 VECTOR REFERRED TO COORDINATE SYSTEM B STORED
053779,000208: # AT LOCATION 6 OF THE VAC AREA. 4) THE STAR2 VECTOR REFERRED TO COORDINATE SYSTEM B STORED AT LOCATION 12D OF
053780,000209: # THE VAC AREA.
053781,000210:
053782,000211: # THE OUTPUT DEFINES COORDINATE SYSTEM A REFERRED TO COORDINATE SYSTEM B. THE THREE HALF-UNIT VECTORS ARE STORED
053783,000212: # AT LOCATIONS XDC, XDC +6, XDC +12D, AND STARAD, STARAD +6, STARAD +12D.
053784,000213:
053785,000214: 23,3345 66370 AXISGEN AXT,1 SSP # PUSHDOWN 00-30D,34D-37D
053786,000215: 23,3346 02714 STARAD +6
053787,000216: 23,3347 00051 S1
053788,000217: 23,3350 02700 STARAD -6
053789,000218:
053790,000219: 23,3351 77601 SETPD
053791,000220: 23,3352 00001 0
053792,000221: 23,3353 46773 AXISGEN1 VLOAD* VXV* # 06D UA = S1
053793,000222: 23,3354 02723 STARAD +12D,1 # STARAD +00D UB = S1
053794,000223: 23,3355 02731 STARAD +18D,1
053795,000224: 23,3356 77656 UNIT # 12D VA = UNIT(S1 X S2)
053796,000225: 23,3357 06731 STORE STARAD +18D,1 # STARAD +06D VB = UNIT(S1 X S2)
053797,000226: 23,3360 77773 VLOAD*
053798,000227: 23,3361 02723 STARAD +12D,1
053799,000228:
053800,000229: 23,3362 76433 VXV* VSL1
053801,000230: 23,3363 02731 STARAD +18D,1 # 18D WA = UA X VA
053802,000231: 23,3364 06737 STORE STARAD +24D,1 # STARAD +12D WB = UB X VB
053803,000232:
053804,000233: 23,3365 77700 TIX,1
053805,000234: 23,3366 47353 AXISGEN1
053806,000235:
053807,000236: 23,3367 66160 AXC,1 SXA,1
053808,000237: 23,3370 00006 6
053809,000238: 23,3371 00036 30D
053810,000239:
053811,000240: 23,3372 66370 AXT,1 SSP
053812,000241: 23,3373 00022 18D
053813,000242: 23,3374 00051 S1
053814,000243: 23,3375 00006 6
053815,000244:
053816,000245: 23,3376 66374 AXT,2 SSP
053817,000246: 23,3377 00006 6
053818,000247: 23,3400 00052 S2
053819,000248: 23,3401 00002 2
053820,000249:
053821,000250: 23,3402 76720 AXISGEN2 XCHX,1 VLOAD*
053822,000251: 23,3403 00036 30D # X1=-6 X2=+6 X1=-6 X2=+4 X1=-6 X2=+2
053823,000252: 23,3404 00001 0,1
053824,000253:
|
Page 1251 |
053826,000255: 23,3405 62757 VXSC* PDVL* # J=(UA)(UB1) J=(UA)(UB2) J=(UA)(UB3)
053827,000256: 23,3406 75062 STARAD +6,2
053828,000257: 23,3407 00007 6,1
053829,000258: 23,3410 77757 VXSC*
053830,000259: 23,3411 75054 STARAD +12D,2
053831,000260: 23,3412 30031 STOVL* 24D # K=(VA)(VB1) J=(VA)(VB2) J=(VA)(VB3)
053832,000261: 23,3413 00015 12D,1
053833,000262:
053834,000263: 23,3414 53357 VXSC* VAD
053835,000264: 23,3415 75046 STARAD +18D,2 # L=(WA)(WB1) J=(WA)(WB2) J=(WA)(WB3)
053836,000265: 23,3416 76455 VAD VSL1
053837,000266: 23,3417 00031 24D
053838,000267: 23,3420 53520 XCHX,1 UNIT
053839,000268: 23,3421 00036 30D
053840,000269: 23,3422 06707 STORE XDC +18D,1 # XDC = L+J+K YDC = L+J+K ZDC = L+J+K
053841,000270:
053842,000271: 23,3423 77700 TIX,1
053843,000272: 23,3424 47425 AXISGEN3
053844,000273:
053845,000274: 23,3425 77704 AXISGEN3 TIX,2
053846,000275: 23,3426 47402 AXISGEN2
053847,000276:
053848,000277: 23,3427 77775 VLOAD
053849,000278: 23,3430 02665 XDC
053850,000279: 23,3431 26707 STOVL STARAD
053851,000280: 23,3432 02673 YDC
053852,000281: 23,3433 26715 STOVL STARAD +6
053853,000282: 23,3434 02701 ZDC
053854,000283: 23,3435 02723 STORE STARAD +12D
053855,000284:
053856,000285: 23,3436 77616 RVQ
053857,000286:
|
Page 1252 |
053859,000288: 23,3437 05520 26075 QTSN45 2DEC .1768
053860,000289:
053861,000290: 23,3441 05252 25253 .166... 2DEC .1666666667
053862,000291:
|
Page 1253 Empty page |
053865,000294:
End of include-file INFLIGHT_ALIGNMENT_ROUTINES.agc. Parent file is MAIN.agc