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