Source Code
|
These source-code files are part of a reconstructed copy of Artemis 071, the
first release of the Apollo 15 through 17 Command Module (CM) Apollo Guidance
Computer (AGC) software.
The reconstruction began with source code of Artemis 072 previously transcribed from a digitized copy of that program. The code was then updated by undoing changes between the two versions. The reconstruction was verified by matching memory-bank checksums to those listed in drawing 2021154-. Note that page numbers in the reconstructed code match those on the Artemis 072 printout, although the changed code would likely have changed page numbers for a real Artemis 071 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. |
058011,000002: ## Copyright: Public domain.
058012,000003: ## Filename: INFLIGHT_ALIGNMENT_ROUTINES.agc
058013,000004: ## Purpose: A section of Artemis revision 071.
058014,000005: ## It is part of the reconstructed source code for the first
058015,000006: ## release of the flight software for the Command Module's
058016,000007: ## (CM) Apollo Guidance Computer (AGC) for Apollo 15 through
058017,000008: ## 17. The code has been recreated from a copy of Artemis 072.
058018,000009: ## It has been adapted such that the resulting bugger words
058019,000010: ## exactly match those specified for Artemis 071 in NASA
058020,000011: ## drawing 2021154-, which gives relatively high confidence
058021,000012: ## that the reconstruction is correct.
058022,000013: ## Reference: 1354
058023,000014: ## Assembler: yaYUL
058024,000015: ## Contact: Ron Burkey <info@sandroid.org>.
058025,000016: ## Website: www.ibiblio.org/apollo/index.html
058026,000017: ## Mod history: 2019-08-14 MAS Created from Artemis 072.
058027,000018:
|
Page 1354 |
058029,000020:
058030,000021: 23,2000 SETLOC INFLIGHT
058031,000022: 23,2000 BANK
058032,000023:
058033,000024: 23,3240 E5,1671 EBANK= XSM
058034,000025:
058035,000026: # CALCGTA COMPUTES THE GYRO TORQUE ANGLES REQUIRED TO BRING THE STABLE MEMBER INTO THE DESIRED ORIENTATION.
058036,000027:
058037,000028: # THE INPUT IS THE DESIRED STABLE MEMBER COORDINATES REFERRED TO PRESENT STABLE MEMBER COORDINATES. THE THREE
058038,000029: # HALF-UNIT VECTORS ARE STORED AT XDC, YDC, AND ZDC.
058039,000030:
058040,000031: # THE OUTPUTS ARE THE THREE GYRO TORQUING ANGLES TO BE APPLIED TO THE Y, Z, AND X GYROS AND ARE STORED DP AT IGC,
058041,000032: # MGC, AND OGC RESPECTIVELY.
058042,000033:
058043,000034: 23,3240 COUNT* $$/INFLT
058044,000035: 23,3240 71220 CALCGTA ITA DLOAD # PUSHDOWN 00-03,16D-27D,34D-37D
058045,000036: 23,3241 00051 S2 # XDC = (XD1 XD2 XD3)
058046,000037: 23,3242 02714 XDC # YDC = (YD1 YD2 YD3)
058047,000038: 23,3243 65325 PDDL PDDL # ZDC = (ZD1 ZD2 ZD3)
058048,000039: 23,3244 15336 HI6ZEROS
058049,000040: 23,3245 02720 XDC +4
058050,000041: 23,3246 55476 DCOMP VDEF
058051,000042: 23,3247 77656 UNIT
058052,000043: 23,3250 14027 STODL ZPRIME # ZP = UNIT(-XD3 0 XD1) = (ZP1 ZP2 ZP3)
058053,000044: 23,3251 00027 ZPRIME
058054,000045:
058055,000046: 23,3252 77742 SR1
058056,000047: 23,3253 14023 STODL SINTH # SIN(IGC) = ZP1
058057,000048: 23,3254 00033 ZPRIME +4
058058,000049: 23,3255 77742 SR1
058059,000050: 23,3256 34021 STCALL COSTH # COS(IGC) = ZP3
058060,000051: 23,3257 47311 ARCTRIG
058061,000052:
058062,000053: 23,3260 16762 STODL IGC # Y GYRO TORQUING ANGLE FRACTION OF REV.
058063,000054: 23,3261 02716 XDC +2
058064,000055: 23,3262 77742 SR1
058065,000056: 23,3263 14023 STODL SINTH # SIN(MGC) = XD2
058066,000057: 23,3264 00027 ZPRIME
058067,000058:
058068,000059: 23,3265 65205 DMP PDDL
058069,000060: 23,3266 02720 XDC +4 # PD00 = (ZP1)(XD3)
058070,000061: 23,3267 00033 ZPRIME +4
058071,000062:
058072,000063: 23,3270 45205 DMP DSU
058073,000064: 23,3271 02714 XDC # MPAC = (ZP3)(XD1)
058074,000065: 23,3272 77626 STADR
058075,000066: 23,3273 43756 STCALL COSTH # COS(MGC) = MPAC - PD00
058076,000067: 23,3274 47311 ARCTRIG
058077,000068: 23,3275 26764 STOVL MGC # Z GYRO TORQUING ANGLE FRACTION OF REV.
|
Page 1355 |
058079,000070: 23,3276 00027 ZPRIME
058080,000071: 23,3277 77641 DOT
058081,000072: 23,3300 02730 ZDC
058082,000073: 23,3301 24021 STOVL COSTH # COS(OGC) = ZP . ZDC
058083,000074: 23,3302 00027 ZPRIME
058084,000075: 23,3303 77641 DOT
058085,000076: 23,3304 02722 YDC
058086,000077: 23,3305 34023 STCALL SINTH # SIN(OGC) = ZP . YDC
058087,000078: 23,3306 47311 ARCTRIG
058088,000079:
058089,000080: 23,3307 36760 STCALL OGC # X GYRO TORQUING ANGLE FRACTION OF REV.
058090,000081: 23,3310 00051 S2
058091,000082:
|
Page 1356 |
058093,000084:
058094,000085: # ARCTRIG COMPUTES AN ANGLE GIVEN THE SINE AND COSINE OF THIS ANGLE.
058095,000086:
058096,000087: # THE INPUTS ARE SIN/4 AND COS/4 STORED DP AT SINTH AND COSTH.
058097,000088:
058098,000089: # THE OUTPUT IS THE CALCULATED ANGLE BETWEEN +.5 AND -.5 REVOLUTIONS AND STORED AT THETA. THE OUTPUT IS ALSO
058099,000090: # AVAILABLE AT MPAC.
058100,000091:
058101,000092: 23,3311 51545 ARCTRIG DLOAD ABS # PUSHDOWN 16D-21D
058102,000093: 23,3312 00023 SINTH
058103,000094: 23,3313 50025 DSU BMN
058104,000095: 23,3314 07525 QTSN45 # ABS(SIN/4) - SIN(45)/4
058105,000096: 23,3315 47324 TRIG1 # IF (-45,45) OR (135,-135)
058106,000097:
058107,000098: 23,3316 72545 DLOAD SL1 # (45,135) OR (-135,-45)
058108,000099: 23,3317 00021 COSTH
058109,000100: 23,3320 75326 ACOS SIGN
058110,000101: 23,3321 00023 SINTH
058111,000102: 23,3322 00025 STORE THETA # X = ARCCOS(COS) WITH SIGN(SIN)
058112,000103: 23,3323 77616 RVQ
058113,000104:
058114,000105: 23,3324 72545 TRIG1 DLOAD SL1 # (-45,45) OR (135,-135)
058115,000106: 23,3325 00023 SINTH
058116,000107: 23,3326 77736 ASIN
058117,000108: 23,3327 14025 STODL THETA # X = ARCSIN(SIN) WITH SIGN(SIN)
058118,000109: 23,3330 00021 COSTH
058119,000110: 23,3331 77640 BMN
058120,000111: 23,3332 47335 TRIG2 # IF (135,-135)
058121,000112:
058122,000113: 23,3333 43545 DLOAD RVQ
058123,000114: 23,3334 00025 THETA # X = ARCSIN(SIN) (-45,45)
058124,000115:
058125,000116: 23,3335 75345 TRIG2 DLOAD SIGN # (135,-135)
058126,000117: 23,3336 15334 HIDPHALF
058127,000118: 23,3337 00023 SINTH
058128,000119: 23,3340 77625 DSU
058129,000120: 23,3341 00025 THETA
058130,000121: 23,3342 00025 STORE THETA # X = .5 WITH SIGN(SIN) - ARCSIN(SIN)
058131,000122: 23,3343 77616 RVQ # (+) - (+) OR (-) - (-)
058132,000123:
|
Page 1357 |
058134,000125: # SMNB, NBSM, AND AXISROT, WHICH USED TO APPEAR HERE, HAVE BEEN
058135,000126: # COMBINED IN A ROUTINE CALLED AX*SR*T, WHICH APPEARS AMONG THE POWERED
058136,000127: # FLIGHT SUBROUTINES.
058137,000128:
|
Page 1358 |
058139,000130: # CALCGA COMPUTES THE CDU DRIVING ANGLES REQUIRED TO BRING THE STABLE MEMBER INTO THE DESIRED ORIENTATION.
058140,000131:
058141,000132: # THE INPUTS ARE 1) THE NAVIGATION BASE COORDINATES REFERRED TO ANY COORDINATE SYSTEM. THE THREE HALF-UNIT
058142,000133: # VECTORS ARE STORED AT XNB, YNB, AND ZNB. 2) THE DESIRED STABLE MEMBER COORDINATES REFERRED TO THE SAME
058143,000134: # COORDINATE SYSTEM ARE STORED AT XSM, YSM, AND ZSM.
058144,000135:
058145,000136: # THE OUTPUTS ARE THE THREE CDU DRIVING ANGLES AND ARE STORED SP AT THETAD, THETAD +1, AND THETAD +2.
058146,000137:
058147,000138: 23,3344 77601 CALCGA SETPD # PUSHDOWN 00-05, 16D-21D, 34D-37D
058148,000139: 23,3345 00001 0
058149,000140: 23,3346 47375 VLOAD VXV
058150,000141: 23,3347 02714 XNB # XNB = OGA (OUTER GIMBAL AXIS)
058151,000142: 23,3350 02700 YSM # YSM = IGA (INNER GIMBAL AXIS)
058152,000143: 23,3351 41456 UNIT PUSH # PD0 = UNIT(OGA X IGA) = MGA
058153,000144:
058154,000145: 23,3352 44041 DOT ITA
058155,000146: 23,3353 02730 ZNB
058156,000147: 23,3354 00051 S2
058157,000148: 23,3355 24021 STOVL COSTH # COS(OG) = MGA . ZNB
058158,000149: 23,3356 00001 0
058159,000150: 23,3357 77641 DOT
058160,000151: 23,3360 02722 YNB
058161,000152: 23,3361 34023 STCALL SINTH # SIN(OG) = MGA . YNB
058162,000153: 23,3362 47311 ARCTRIG
058163,000154: 23,3363 26760 STOVL OGC
058164,000155: 23,3364 00001 0
058165,000156:
058166,000157: 23,3365 50235 VXV DOT # PROVISION FOR MG ANGLE OF 90 DEGREES
058167,000158: 23,3366 02714 XNB
058168,000159: 23,3367 02700 YSM
058169,000160: 23,3370 77752 SL1
058170,000161: 23,3371 24021 STOVL COSTH # COS(MG) = IGA . (MGA X OGA)
058171,000162: 23,3372 02700 YSM
058172,000163: 23,3373 77641 DOT
058173,000164: 23,3374 02714 XNB
058174,000165: 23,3375 34023 STCALL SINTH # SIN(MG) = IGA . OGA
058175,000166: 23,3376 47311 ARCTRIG
058176,000167: 23,3377 02764 STORE MGC
058177,000168:
058178,000169: 23,3400 45246 ABS DSU
058179,000170: 23,3401 07527 .166...
058180,000171: 23,3402 77644 BPL
058181,000172: 23,3403 47422 GIMLOCK1 # IF ANGLE GREATER THAN 60 DEGREES
058182,000173:
058183,000174: 23,3404 50375 CALCGA1 VLOAD DOT
058184,000175: 23,3405 02706 ZSM
058185,000176: 23,3406 00001 0
058186,000177: 23,3407 24021 STOVL COSTH # COS(IG) = ZSM . MGA
058187,000178: 23,3410 02672 XSM
|
Page 1359 |
058189,000180: 23,3411 45441 DOT STADR
058190,000181: 23,3412 43754 STCALL SINTH # SIN(IG) = XSM . MGA
058191,000182: 23,3413 47311 ARCTRIG
058192,000183:
058193,000184: 23,3414 26762 STOVL IGC
058194,000185: 23,3415 02760 OGC
058195,000186: 23,3416 77634 RTB
058196,000187: 23,3417 45644 V1STO2S
058197,000188: 23,3420 35310 STCALL THETAD
058198,000189: 23,3421 00051 S2
058199,000190:
058200,000191: 23,3422 77776 GIMLOCK1 EXIT
058201,000192: 23,3423 05671 TC ALARM
058202,000193: 23,3424 00401 OCT 00401
058203,000194: 23,3425 05547 TC UPFLAG # GIMBAL LOCK HAS OCCURED
058204,000195: 23,3426 00056 ADRES GLOKFAIL
058205,000196:
058206,000197: 23,3427 06006 TC INTPRET
058207,000198: 23,3430 77650 GOTO
058208,000199: 23,3431 47404 CALCGA1
058209,000200:
|
Page 1360 |
058211,000202:
058212,000203: # AXISGEN COMPUTES THE COORDINATES OF ONE COORDINATE SYSTEM REFERRED TO ANOTHER COORDINATE SYSTEM.
058213,000204:
058214,000205: # THE INPUTS ARE 1) THE STAR1 VECTOR REFERRED TO COORDINATE SYSTEM A STORED AT STARAD. 2) THE STAR2 VECTOR
058215,000206: # REFERRED TO COORDINATE SYSTEM A STORED AT STARAD +6. 3) THE STAR1 VECTOR REFERRED TO COORDINATE SYSTEM B STORED
058216,000207: # AT LOCATION 6 OF THE VAC AREA. 4) THE STAR2 VECTOR REFERRED TO COORDINATE SYSTEM B STORED AT LOCATION 12D OF
058217,000208: # THE VAC AREA.
058218,000209:
058219,000210: # THE OUTPUT DEFINES COORDINATE SYSTEM A REFERRED TO COORDINATE SYSTEM B. THE THREE HALF-UNIT VECTORS ARE STORED
058220,000211: # AT LOCATIONS XDC, XDC +6, XDC +12D, AND STARAD, STARAD +6, STARAD +12D.
058221,000212:
058222,000213: 23,3432 66370 AXISGEN AXT,1 SSP # PUSHDOWN 00-30D,34D-37D
058223,000214: 23,3433 02743 STARAD +6
058224,000215: 23,3434 00051 S1
058225,000216: 23,3435 02727 STARAD -6
058226,000217:
058227,000218: 23,3436 77601 SETPD
058228,000219: 23,3437 00001 0
058229,000220: 23,3440 46773 AXISGEN1 VLOAD* VXV* # 06D UA = S1
058230,000221: 23,3441 02752 STARAD +12D,1 # STARAD +00D UB = S1
058231,000222: 23,3442 02760 STARAD +18D,1
058232,000223: 23,3443 77656 UNIT # 12D VA = UNIT(S1 X S2)
058233,000224: 23,3444 06760 STORE STARAD +18D,1 # STARAD +06D VB = UNIT(S1 X S2)
058234,000225: 23,3445 77773 VLOAD*
058235,000226: 23,3446 02752 STARAD +12D,1
058236,000227:
058237,000228: 23,3447 76433 VXV* VSL1
058238,000229: 23,3450 02760 STARAD +18D,1 # 18D WA = UA X VA
058239,000230: 23,3451 06766 STORE STARAD +24D,1 # STARAD +12D WB = UB X VB
058240,000231:
058241,000232: 23,3452 77700 TIX,1
058242,000233: 23,3453 47440 AXISGEN1
058243,000234:
058244,000235: 23,3454 66160 AXC,1 SXA,1
058245,000236: 23,3455 00006 6
058246,000237: 23,3456 00036 30D
058247,000238:
058248,000239: 23,3457 66370 AXT,1 SSP
058249,000240: 23,3460 00022 18D
058250,000241: 23,3461 00051 S1
058251,000242: 23,3462 00006 6
058252,000243:
058253,000244: 23,3463 66374 AXT,2 SSP
058254,000245: 23,3464 00006 6
058255,000246: 23,3465 00052 S2
058256,000247: 23,3466 00002 2
058257,000248:
058258,000249: 23,3467 76720 AXISGEN2 XCHX,1 VLOAD*
058259,000250: 23,3470 00036 30D # X1=-6 X2=+6 X1=-6 X2=+4 X1=-6 X2=+2
058260,000251: 23,3471 00001 0,1
058261,000252:
|
Page 1361 |
058263,000254: 23,3472 62757 VXSC* PDVL* # J=(UA)(UB1) J=(UA)(UB2) J=(UA)(UB3)
058264,000255: 23,3473 75033 STARAD +6,2
058265,000256: 23,3474 00007 6,1
058266,000257: 23,3475 77757 VXSC*
058267,000258: 23,3476 75025 STARAD +12D,2
058268,000259: 23,3477 30031 STOVL* 24D # K=(VA)(VB1) J=(VA)(VB2) J=(VA)(VB3)
058269,000260: 23,3500 00015 12D,1
058270,000261:
058271,000262: 23,3501 53357 VXSC* VAD
058272,000263: 23,3502 75017 STARAD +18D,2 # L=(WA)(WB1) J=(WA)(WB2) J=(WA)(WB3)
058273,000264: 23,3503 76455 VAD VSL1
058274,000265: 23,3504 00031 24D
058275,000266: 23,3505 53520 XCHX,1 UNIT
058276,000267: 23,3506 00036 30D
058277,000268: 23,3507 06736 STORE XDC +18D,1 # XDC = L+J+K YDC = L+J+K ZDC = L+J+K
058278,000269:
058279,000270: 23,3510 77700 TIX,1
058280,000271: 23,3511 47512 AXISGEN3
058281,000272:
058282,000273: 23,3512 77704 AXISGEN3 TIX,2
058283,000274: 23,3513 47467 AXISGEN2
058284,000275:
058285,000276: 23,3514 77775 VLOAD
058286,000277: 23,3515 02714 XDC
058287,000278: 23,3516 26736 STOVL STARAD
058288,000279: 23,3517 02722 YDC
058289,000280: 23,3520 26744 STOVL STARAD +6
058290,000281: 23,3521 02730 ZDC
058291,000282: 23,3522 02752 STORE STARAD +12D
058292,000283:
058293,000284: 23,3523 77616 RVQ
058294,000285:
|
Page 1362 |
058296,000287: 23,3524 05520 26075 QTSN45 2DEC .1768
058297,000288: 23,3526 05252 25253 .166... 2DEC .1666666667
058298,000289:
|
Page 1363 Empty page |
058301,000292:
058302,000293:
End of include-file INFLIGHT_ALIGNMENT_ROUTINES.agc. Parent file is MAIN.agc