Source Code
057212,000001: # Copyright: Public domain.
057213,000002: # Filename: INFLIGHT_ALIGNMENT_ROUTINES.agc
057214,000003: # Purpose: Part of the source code for Colossus, build 249.
057215,000004: # It is part of the source code for the Command Module's (CM)
057216,000005: # Apollo Guidance Computer (AGC), possibly for Apollo 8 and 9.
057217,000006: # Assembler: yaYUL
057218,000007: # Reference: Starts on p. 1335 of 1701.pdf.
057219,000008: # Contact: Ron Burkey <info@sandroid.org>.
057220,000009: # Website: www.ibiblio.org/apollo.
057221,000010: # Mod history: 08/29/04 RSB. Adapted from corresponding Luminary131 file.
057222,000011:
057223,000012: # The contents of the "Colossus249" files, in general, are transcribed
057224,000013: # from a scanned document obtained from MIT's website,
057225,000014: # http://hrst.mit.edu/hrs/apollo/public/archive/1701.pdf. Notations on this
057226,000015: # document read, in part:
057227,000016:
057228,000017: # Assemble revision 249 of AGC program Colossus by NASA
057229,000018: # 2021111-041. October 28, 1968.
057230,000019:
057231,000020: # This AGC program shall also be referred to as
057232,000021: # Colossus 1A
057233,000022:
057234,000023: # Prepared by
057235,000024: # Massachussets Institute of Technology
057236,000025: # 75 Cambridge Parkway
057237,000026: # Cambridge, Massachusetts
057238,000027: # under NASA contract NAS 9-4065.
057239,000028:
057240,000029: # Refer directly to the online document mentioned above for further information.
057241,000030: # Please report any errors (relative to 1701.pdf) to info@sandroid.org.
057242,000031:
057243,000032: # In some cases, where the source code for Luminary 131 overlaps that of
057244,000033: # Colossus 249, this code is instead copied from the corresponding Luminary 131
057245,000034: # source file, and then is proofed to incorporate any changes.
057246,000035:
057247,000036: # Page 1335
057248,000037: 22,3505 BANK 22
057249,000038: 23,2000 SETLOC INFLIGHT
057250,000039: 23,2000 BANK
057251,000040:
057252,000041: 23,3140 E5,1671 EBANK= XSM
057253,000042:
057254,000043: # CALCGTA COMPUTES THE GYRO TORQUE ANGLES REQUIRED TO BRING THE STABLE MEMBER INTO THE DESIRED ORIENTATION.
057255,000044:
057256,000045: # THE INPUT IS THE DESIRED STABLE MEMBER COORDINATES REFERRED TO PRESENT STABLE MEMBER COORDINATES. THE THREE
057257,000046: # HALF-UNIT VECTORS ARE STORED AT XDC, YDC, AND ZDC.
057258,000047:
057259,000048: # THE OUTPUTS ARE THE THREE GYRO TORQUE ANGLES TO BE APPLIED TO THE Y, Z, AND X GYROS AND ARE STORED DP AT IGC,
057260,000049: # MGC, AND OGC RESPECTIVELY.
057261,000050:
057262,000051: 23,3140 COUNT 23/INFLT
057263,000052:
057264,000053: 23,3140 71220 CALCGTA ITA DLOAD # PUSHDOWN 00-03, 16D-27D, 34D-37D
057265,000054: 23,3141 00051 S2 # XDC = (XD1 XD2 XD3)
057266,000055: 23,3142 02714 XDC # YDC = (YD1 YD2 YD3)
057267,000056: 23,3143 65325 PDDL PDDL # ZDC = (ZD1 ZD2 ZD3)
057268,000057: 23,3144 15332 HI6ZEROS
057269,000058: 23,3145 02720 XDC +4
057270,000059: 23,3146 55476 DCOMP VDEF
057271,000060: 23,3147 77656 UNIT
057272,000061: 23,3150 14027 STODL ZPRIME # ZP = UNIT(-XD3 0 XD1) = (ZP1 ZP2 ZP3)
057273,000062: 23,3151 00027 ZPRIME
057274,000063:
057275,000064: 23,3152 77742 SR1
057276,000065: 23,3153 14023 STODL SINTH # SIN(IGC) = ZP1
057277,000066: 23,3154 00033 ZPRIME +4
057278,000067: 23,3155 77742 SR1
057279,000068: 23,3156 34021 STCALL COSTH # COS(IGC) = ZP3
057280,000069: 23,3157 47211 ARCTRIG
057281,000070:
057282,000071: 23,3160 16762 STODL IGC # Y GYRO TORQUING ANGLE FRACTION OF REV.
057283,000072: 23,3161 02716 XDC +2
057284,000073: 23,3162 77742 SR1
057285,000074: 23,3163 14023 STODL SINTH # SIN(MGC) = XD2
057286,000075: 23,3164 00027 ZPRIME
057287,000076:
057288,000077: 23,3165 65205 DMP PDDL
057289,000078: 23,3166 02720 XDC +4 # PD00 = (ZP1)(XD3)
057290,000079: 23,3167 00033 ZPRIME +4
057291,000080:
057292,000081: 23,3170 45205 DMP DSU
057293,000082: 23,3171 02714 XDC # MPAC = (ZP3)(XD1)
057294,000083: 23,3172 77626 STADR
057295,000084: 23,3173 43756 STCALL COSTH # COS(MGC) = MPAC - PD00
057296,000085: 23,3174 47211 ARCTRIG
057297,000086: # Page 1336
057298,000087: 23,3175 26764 STOVL MGC # Z GYRO TORQUING ANGLE FRACTION OF REV.
057299,000088: 23,3176 00027 ZPRIME
057300,000089: 23,3177 77641 DOT
057301,000090: 23,3200 02730 ZDC
057302,000091: 23,3201 24021 STOVL COSTH # COS(OGC) = ZP . ZDC
057303,000092: 23,3202 00027 ZPRIME
057304,000093: 23,3203 77641 DOT
057305,000094: 23,3204 02722 YDC
057306,000095: 23,3205 34023 STCALL SINTH # SIN(OGC) = ZP . YDC
057307,000096: 23,3206 47211 ARCTRIG
057308,000097:
057309,000098: 23,3207 36760 STCALL OGC # X GYRO TORQUING ANGLE FRACTION OF REV.
057310,000099: 23,3210 00051 S2
057311,000100:
057312,000101: # Page 1337
057313,000102: # ARCTRIG COMPUTES AN ANGLE GIVEN THE SINE AND COSINE OF THIS ANGLE.
057314,000103:
057315,000104: # THE INPUTS ARE SIN/4 AND COS/4 STORED UP AT SINTH AND COSTH.
057316,000105:
057317,000106: # THE OUTPUT IS THE CALCULATED ANGLE BETWEEN +.5 AND -.5 REVOLUTIONS AND STORED AT THETA. THE OUTPUT IS ALSO
057318,000107: # AVAILABLE AT MPAC.
057319,000108:
057320,000109: 23,3211 51545 ARCTRIG DLOAD ABS # PUSHDOWN 16D-21D
057321,000110: 23,3212 00023 SINTH
057322,000111: 23,3213 50025 DSU BMN
057323,000112: 23,3214 07427 QTSN45 # ABS(SIN/4) - SIN(45)/4
057324,000113: 23,3215 47224 TRIG1 # IF (-45,45) OR (135,-135)
057325,000114:
057326,000115: 23,3216 72545 DLOAD SL1 # (45,135) OR (-135,-45)
057327,000116: 23,3217 00021 COSTH
057328,000117: 23,3220 75326 ACOS SIGN
057329,000118: 23,3221 00023 SINTH
057330,000119: 23,3222 00025 STORE THETA # X = ARCCOS(COS) WITH SIGN(SIN)
057331,000120: 23,3223 77616 RVQ
057332,000121:
057333,000122: 23,3224 72545 TRIG1 DLOAD SL1 # (-45,45) OR (135,-135)
057334,000123: 23,3225 00023 SINTH
057335,000124: 23,3226 77736 ASIN
057336,000125: 23,3227 14025 STODL THETA # X = ARCSIN(SIN) WITH SIGN(SIN)
057337,000126: 23,3230 00021 COSTH
057338,000127: 23,3231 77640 BMN
057339,000128: 23,3232 47235 TRIG2 # IF (135,-135)
057340,000129:
057341,000130: 23,3233 43545 DLOAD RVQ
057342,000131: 23,3234 00025 THETA # X = ARCSIN(SIN) (-45,45)
057343,000132:
057344,000133: 23,3235 75345 TRIG2 DLOAD SIGN # (135,-135)
057345,000134: 23,3236 15330 HIDPHALF
057346,000135: 23,3237 00023 SINTH
057347,000136: 23,3240 77625 DSU
057348,000137: 23,3241 00025 THETA
057349,000138: 23,3242 00025 STORE THETA # X = .5 WITH SIGN(SIN) - ARCSIN(SIN)
057350,000139: 23,3243 77616 RVQ # (+) - (+) OR (-) - (-)
057351,000140:
057352,000141: # Page 1338
057353,000142: # SMNB, NBSM, AND AXISROT, WHICH USED TO APPEAR HERE, HAVE BEEN
057354,000143: # COMBINED IN A ROUTINE CALLED AX*SR*T, WHICH APPEARS AMONG THE POWERED
057355,000144: # FLIGHT SUBROUTINES.
057356,000145:
057357,000146: # Page 1339
057358,000147: # CALCGA COMPUTES THE CDU DRIVING ANGLES REQUIRED TO BRING THE STABLE MEMBER INTO THE DESIRED ORIENTATION.
057359,000148:
057360,000149: # THE INPUTS ARE 1) THE NAVIGATION BASE COORDINATES REFERRED TO ANY COORDINATE SYSTEM. THE THREE HALF-UNIT
057361,000150: # VECTORS ARE STORED AT XNB, YNB, AND ZNB. 2) THE DESIRED STABLE MEMBER COORDINATES REFERRED TO THE SAME
057362,000151: # COORDINATE SYSTEM ARE STORED AT XSM, YSM, AND ZSM.
057363,000152:
057364,000153: # THE OUTPUTS ARE THE THREE CDU DRIVING ANGLES AND ARE STORED SP AT THETAD, THETAD +1, AND THETAD +2.
057365,000154:
057366,000155: 23,3244 77601 CALCGA SETPD # PUSHDOWN 00-05, 16D-21D, 34D-37D
057367,000156: 23,3245 00001 0
057368,000157: 23,3246 47375 VLOAD VXV
057369,000158: 23,3247 02714 XNB # XNB = OGA (OUTER GIMBAL AXIS)
057370,000159: 23,3250 02700 YSM # YSM = IGA (INNER GIMBAL AXIS)
057371,000160: 23,3251 41456 UNIT PUSH # PD0 = UNIT(OGA X IGA) = MGA
057372,000161:
057373,000162: 23,3252 44041 DOT ITA
057374,000163: 23,3253 02730 ZNB
057375,000164: 23,3254 00051 S2
057376,000165: 23,3255 24021 STOVL COSTH # COS(OG) = MGA . ZNB
057377,000166: 23,3256 00001 0
057378,000167: 23,3257 77641 DOT
057379,000168: 23,3260 02722 YNB
057380,000169: 23,3261 34023 STCALL SINTH # SIN(OG) = MGA . YNB
057381,000170: 23,3262 47211 ARCTRIG
057382,000171: 23,3263 26760 STOVL OGC
057383,000172: 23,3264 00001 0
057384,000173:
057385,000174: 23,3265 50235 VXV DOT # PROVISION FOR MG ANGLE OF 90 DEGREES
057386,000175: 23,3266 02714 XNB
057387,000176: 23,3267 02700 YSM
057388,000177: 23,3270 77752 SL1
057389,000178: 23,3271 24021 STOVL COSTH # COS(MG) = IGA . (MGA X OGA)
057390,000179: 23,3272 02700 YSM
057391,000180: 23,3273 77641 DOT
057392,000181: 23,3274 02714 XNB
057393,000182: 23,3275 34023 STCALL SINTH # SIN(MG) = IGA . OGA
057394,000183: 23,3276 47211 ARCTRIG
057395,000184: 23,3277 02764 STORE MGC
057396,000185:
057397,000186: 23,3300 45246 ABS DSU
057398,000187: 23,3301 07431 .166...
057399,000188: 23,3302 77644 BPL
057400,000189: 23,3303 47324 GIMLOCK1 # IF ANGLE GREATER THAN 60 DEGREES
057401,000190:
057402,000191: 23,3304 50375 CALCGA1 VLOAD DOT
057403,000192: 23,3305 02706 ZSM
057404,000193: 23,3306 00001 0
057405,000194: 23,3307 24021 STOVL COSTH # COS(IG) = ZSM . MGA
057406,000195: 23,3310 02672 XSM
057407,000196: # Page 1340
057408,000197: 23,3311 45441 DOT STADR
057409,000198: 23,3312 43754 STCALL SINTH # SIN(IG) = XSM . MGA
057410,000199: 23,3313 47211 ARCTRIG
057411,000200:
057412,000201: 23,3314 26762 STOVL IGC
057413,000202: 23,3315 02760 OGC
057414,000203: 23,3316 43034 RTB BONCLR
057415,000204: 23,3317 45547 V1STO2S
057416,000205: 23,3320 00200 CPHIFLAG
057417,000206: 23,3321 00051 S2
057418,000207: 23,3322 35156 STCALL THETAD
057419,000208: 23,3323 00051 S2
057420,000209:
057421,000210: 23,3324 77776 GIMLOCK1 EXIT
057422,000211: 23,3325 05537 TC ALARM
057423,000212: 23,3326 00401 OCT 00401
057424,000213: 23,3327 05435 TC UPFLAG # GIMBAL LOCK HAS OCCURRED
057425,000214: 23,3330 00056 ADRES GLOKFAIL
057426,000215:
057427,000216: 23,3331 06006 TC INTPRET
057428,000217: 23,3332 77650 GOTO
057429,000218: 23,3333 47304 CALCGA1
057430,000219:
057431,000220: # Page 1341
057432,000221: # AXISGEN COMPUTES THE COORDINATES OF ONE COORDINATE SYSTEM REFERRED TO ANOTHER COORDINATE SYSTEM.
057433,000222:
057434,000223: # THE INPUTS ARE 1) THE STAR1 VECTOR REFERRED TO COORDINATE SYSTEM A STORED AT STARAD. 2) THE STAR2 VECTOR
057435,000224: # REFERRED TO COORDINATE SYSTEM A STORED AT STARAD +6. 3) THE STAR1 VECTOR REFERRED TO COORDINATE SYSTEM B STORED
057436,000225: # AT LOCATION 6 OF THE VAC AREA. 4) THE STAR2 VECTOR REFERRED TO COORDINATE SYSTEM B STORED AT LOCATION 12D OF
057437,000226: # THE VAC AREA.
057438,000227:
057439,000228: # THE OUTPUT DEFINES COORDINATE SYSTEM A REFERRED TO COORDINATE SYSTEM B. THE THREE HALF-UNIT VECTORS ARE STORED
057440,000229: # AT LOCATIONS XDC, XDC +6, XDC +12D, AND STARAD, STARAD +6, STARAD +12D.
057441,000230:
057442,000231: 23,3334 66370 AXISGEN AXT,1 SSP # PUSHDOWN 00-30D, 34D-37D
057443,000232: 23,3335 02743 STARAD +6
057444,000233: 23,3336 00051 S1
057445,000234: 23,3337 02727 STARAD -6
057446,000235:
057447,000236: 23,3340 77601 SETPD
057448,000237: 23,3341 00001 0
057449,000238: 23,3342 46773 AXISGEN1 VLOAD* VXV* # 06D UA = S1
057450,000239: 23,3343 02752 STARAD +12D,1 # STARAD +00D UB = S1
057451,000240: 23,3344 02760 STARAD +18D,1
057452,000241: 23,3345 77656 UNIT # 12D VA = UNIT(S1 X S2)
057453,000242: 23,3346 06760 STORE STARAD +18D,1 # STARAD +06D VB = UNIT(S1 X S2)
057454,000243: 23,3347 77773 VLOAD*
057455,000244: 23,3350 02752 STARAD +12D,1
057456,000245:
057457,000246: 23,3351 76433 VXV* VSL1
057458,000247: 23,3352 02760 STARAD +18D,1 # 18D WA = UA X VA
057459,000248: 23,3353 06766 STORE STARAD +24D,1 # STARAD +12D WB = UB X VB
057460,000249:
057461,000250: 23,3354 77700 TIX,1
057462,000251: 23,3355 47342 AXISGEN1
057463,000252:
057464,000253: 23,3356 66160 AXC,1 SXA,1
057465,000254: 23,3357 00006 6
057466,000255: 23,3360 00036 30D
057467,000256:
057468,000257: 23,3361 66370 AXT,1 SSP
057469,000258: 23,3362 00022 18D
057470,000259: 23,3363 00051 S1
057471,000260: 23,3364 00006 6
057472,000261:
057473,000262: 23,3365 66374 AXT,2 SSP
057474,000263: 23,3366 00006 6
057475,000264: 23,3367 00052 S2
057476,000265: 23,3370 00002 2
057477,000266:
057478,000267: 23,3371 76720 AXISGEN2 XCHX,1 VLOAD*
057479,000268: 23,3372 00036 30D # X1=-6 X2=+6 X1=-6 X2=+4 X1=-6 X2=+2
057480,000269: 23,3373 00001 0,1
057481,000270:
057482,000271: # Page 1342
057483,000272: 23,3374 62757 VXSC* PDVL* # J=(UA)(UB1) J=(UA)(UB2) J=(UA)(UB3)
057484,000273: 23,3375 75033 STARAD +6,2
057485,000274: 23,3376 00007 6,1
057486,000275: 23,3377 77757 VXSC*
057487,000276: 23,3400 75025 STARAD +12D,2
057488,000277: 23,3401 30031 STOVL* 24D # K=(VA)(VB1) J=(VA)(VB2) J=(VA)(VB3)
057489,000278: 23,3402 00015 12D,1
057490,000279:
057491,000280: 23,3403 53357 VXSC* VAD
057492,000281: 23,3404 75017 STARAD +18D,2 # L=(WA)(WB1) J=(WA)(WB2) J=(WA)(WB3)
057493,000282: 23,3405 76455 VAD VSL1
057494,000283: 23,3406 00031 24D
057495,000284: 23,3407 53520 XCHX,1 UNIT
057496,000285: 23,3410 00036 30D
057497,000286: 23,3411 06736 STORE XDC +18D,1 # XDC = L+J+K YDC = L+J+K ZDC = L+J+K
057498,000287:
057499,000288: 23,3412 77700 TIX,1
057500,000289: 23,3413 47414 AXISGEN3
057501,000290:
057502,000291: 23,3414 77704 AXISGEN3 TIX,2
057503,000292: 23,3415 47371 AXISGEN2
057504,000293:
057505,000294: 23,3416 77775 VLOAD
057506,000295: 23,3417 02714 XDC
057507,000296: 23,3420 26736 STOVL STARAD
057508,000297: 23,3421 02722 YDC
057509,000298: 23,3422 26744 STOVL STARAD +6
057510,000299: 23,3423 02730 ZDC
057511,000300: 23,3424 02752 STORE STARAD +12D
057512,000301:
057513,000302: 23,3425 77616 RVQ
057514,000303:
057515,000304: # Page 1343
057516,000305: 23,3426 05520 26075 QTSN45 2DEC .1768
057517,000306: 23,3430 05252 25253 .166... 2DEC .1666666667
057518,000307:
057519,000308: # Page 1344
057520,000309: # (There is no source code on this page of the original assembly listing.---RSB 2004)
057521,000310:
057522,000311:
End of include-file INFLIGHT_ALIGNMENT_ROUTINES.agc. Parent file is MAIN.agc