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