Source Code

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