Source Code

036897,000001: # Copyright: Public domain. 036898,000002: # Filename: CM_BODY_ATTITUDE.agc 036899,000003: # Purpose: Part of the source code for Colossus, build 249. 036900,000004: # It is part of the source code for the Command Module's (CM) 036901,000005: # Apollo Guidance Computer (AGC), possibly for Apollo 8 and 9. 036902,000006: # Assembler: yaYUL 036903,000007: # Reference: pp. 840-846 of 1701.pdf. 036904,000008: # Contact: Ron Burkey <info@sandroid.org>. 036905,000009: # Website: www.ibiblio.org/apollo. 036906,000010: # Mod history: 08/21/04 RSB. Began transcribing. 036907,000011: 036908,000012: # The contents of the "Colossus249" files, in general, are transcribed 036909,000013: # from a scanned document obtained from MIT's website, 036910,000014: # http://hrst.mit.edu/hrs/apollo/public/archive/1701.pdf. Notations on this 036911,000015: # document read, in part: 036912,000016: 036913,000017: # Assemble revision 249 of AGC program Colossus by NASA 036914,000018: # 2021111-041. October 28, 1968. 036915,000019: 036916,000020: # This AGC program shall also be referred to as 036917,000021: # Colossus 1A 036918,000022: 036919,000023: # Prepared by 036920,000024: # Massachusetts Institute of Technology 036921,000025: # 75 Cambridge Parkway 036922,000026: # Cambridge, Massachusetts 036923,000027: # under NASA contract NAS 9-4065. 036924,000028: 036925,000029: # Refer directly to the online document mentioned above for further information. 036926,000030: # Please report any errors (relative to 1701.pdf) to info@sandroid.org. 036927,000031: 036928,000032: # In some cases, where the source code for Luminary 131 overlaps that of 036929,000033: # Colossus 249, this code is instead copied from the corresponding Luminary 131 036930,000034: # source file, and then is proofed to incorporate any changes. 036931,000035: 036932,000036: # Page 840 036933,000037: 35,3755 BANK 35 036934,000038: 036935,000039: 37,2000 SETLOC BODYATT 036936,000040: 37,2000 BANK 036937,000041: 036938,000042: 37,3373 COUNT 37/CMBAT 036939,000043: 036940,000044: # PDL 12D - 15D SAFE. 036941,000045: 036942,000046: # VALUE OF GIMBAL AND BODY ANGLES VALID AT PIP TIME ARE SAVED DURING READACCS. 036943,000047: 036944,000048: 37,3373 E7,1451 EBANK= RTINIT # LET INTERPRETER SET EB 036945,000049: 036946,000050: 37,3373 06006 CM/POSE TC INTPRET # COME HERE VIA AVEGEXIT. 036947,000051: 036948,000052: 37,3374 77201 SETPD VLOAD 036949,000053: 37,3375 00001 0 036950,000054: 37,3376 01177 VN # KVSCALE = (12800/ .3048) /2VS 036951,000055: 37,3377 63361 VXSC PDVL 036952,000056: 37,3400 37672 -KVSCALE # KVSCALE = .81491944 036953,000057: 37,3401 01714 UNITW # FULL UNIT VECTOR 036954,000058: 37,3402 74235 VXV VXSC # VREL = V - WE*R 036955,000059: 37,3403 01760 UNITR 036956,000060: 37,3404 15244 KWE 036957,000061: 37,3405 45455 VAD STADR 036958,000062: 37,3406 74251 STORE -VREL # SAVE FOR ENTRY GUIDANCE. REF COORDS 036959,000063: 036960,000064: 37,3407 72056 UNIT LXA,1 036961,000065: 37,3410 00044 36D # ABVAL( -VREL) TO X1 036962,000066: 37,3411 03542 STORE UXA/2 # -UVREL REF COORDS 036963,000067: 036964,000068: 37,3412 57435 VXV VCOMP 036965,000069: 37,3413 01760 UNITR # .5 UNIT REF COORDS 036966,000070: 37,3414 66256 UNIT SSP # THE FOLLOWING IS TO PROVIDE A STABLE 036967,000071: 37,3415 00051 S1 # UN FOR THE END OF THE TERMINAL PHASE. 036968,000072: 37,3416 00476 SPVQUIT DEC .019405 # 1000/ 2 VS 036969,000073: 37,3417 77300 TIX,1 VLOAD # IF V-VQUIT POS, BRANCH. 036970,000074: 37,3420 77422 CM/POSE2 # SAME UYA IN OLDUYA 036971,000075: 37,3421 03534 OLDUYA # OTHERWISE CONTINUE TO USE OLDUYA 036972,000076: 37,3422 03550 CM/POSE2 STORE UYA/2 # REF COORDS 036973,000077: 036974,000078: 37,3423 03534 STORE OLDUYA # RESTORE, OR SAVE AS CASE MAY BE. 036975,000079: 036976,000080: 37,3424 57435 VXV VCOMP 036977,000081: 37,3425 03542 UXA/2 # FINISH OBTAINING TRAJECTORY TRIAD. 036978,000082: 37,3426 77772 VSL1 036979,000083: 37,3427 03556 STORE UZA/2 # REF COORDS 036980,000084: # Page 841 036981,000085: 37,3430 77751 TLOAD # PICK UP CDUX, CDUY, CDUZ CORRESPONDING 036982,000086: 37,3431 03270 AOG/PIP # TO PIPUP TIME IN 2'S C AND SAVE. 036983,000087: 37,3432 14031 CM/TRIO STODL 24D 036984,000088: 37,3433 00032 25D # AIG/PIP 036985,000089: 036986,000090: 37,3434 41434 RTB PUSH # TO PDL0 036987,000091: 37,3435 45510 CDULOGIC 036988,000092: 37,3436 77746 COS 036989,000093: 37,3437 17564 STODL UBX/2 # CI /2 036990,000094: # AIG/PIP FROM PDL 0 036991,000095: 37,3440 57556 SIN DCOMP 036992,000096: 37,3441 17570 STODL UBX/2 +4 # -SI /2 036993,000097: 37,3442 00033 26D # AMG/PIP 036994,000098: 37,3443 41434 RTB PUSH # TO PDL 0 036995,000099: 37,3444 45510 CDULOGIC 036996,000100: 37,3445 65356 SIN PDDL # XCH PDL 0. SAVE SM /2 036997,000101: 37,3446 65346 COS PDDL # CM /2 TO PDL 2 036998,000102: 37,3447 00001 0 # SM /2 036999,000103: 37,3450 74276 DCOMP VXSC 037000,000104: 37,3451 03564 UBX/2 037001,000105: 37,3452 77772 VSL1 # NOISE WON'T OVFL 037002,000106: 37,3453 17572 STODL UBY/2 # =(-SMCI, NOISE, SMSI)/2 037003,000107: 37,3454 00003 2 # CM /2 REPLACES NOISE 037004,000108: 37,3455 17574 STODL UBY/2 +2 # UBY/2=(-SMCI, CM, SMSI)/2 037005,000109: 37,3456 00031 24D # AOG/PIP 037006,000110: 37,3457 41434 RTB PUSH # TO PDL 4 037007,000111: 37,3460 45510 CDULOGIC 037008,000112: 37,3461 65356 SIN PDDL # XCH PDL 4. SAVE SO /2 037009,000113: 37,3462 74346 COS VXSC # CO /2 037010,000114: 37,3463 03572 UBY/2 037011,000115: 37,3464 17572 STODL UBY/2 # UBY/2=(-COSMCI, COCM, COSMSI)/4 037012,000116: 37,3465 00005 4D # SO /2 037013,000117: 37,3466 57405 DMP DCOMP 037014,000118: 37,3467 03570 UBX/2 +4 # -SI /2 037015,000119: 37,3470 77615 DAD 037016,000120: 37,3471 03572 UBY/2 # INCREMENT BY (SOSI /4) 037017,000121: 37,3472 17572 STODL UBY/2 037018,000122: # SO /2 FROM PDL 4 037019,000123: 37,3473 43205 DMP DAD 037020,000124: 37,3474 03564 UBX/2 # CI /2 037021,000125: 37,3475 03576 UBY/2 +4 037022,000126: 37,3476 27576 STOVL UBY/2 +4 # YB/4 PLATFORM COORDS 037023,000127: 037024,000128: # YB = (-COSMCI + SOSI , COCM , COSMSI + SOCI ) 037025,000129: 037026,000130: 37,3477 03572 UBY/2 037027,000131: 37,3500 72505 VXM VSL2 037028,000132: 37,3501 01736 REFSMMAT # .5 UNIT 037029,000133: 37,3502 17572 STODL UBY/2 # YB/2 DONE REF COORDS 037030,000134: # Page 842 037031,000135: # CM /2 FROM PDL 2 037032,000136: 37,3503 76561 VXSC VSL1 037033,000137: 37,3504 03564 UBX/2 037034,000138: 37,3505 17564 STODL UBX/2 # -( CMCI, NOISE, -CMSI)/2 037035,000139: 37,3506 77626 STADR # SM /2 FROM PDL 0 037036,000140: 37,3507 50211 STOVL UBX/2 +2 # SM /2 REPLACES NOISE 037037,000141: 37,3510 03564 UBX/2 # XB/2 PLATFORM COORDS 037038,000142: 037039,000143: # XB = ( CMCI , SM , -CMSI ) 037040,000144: 037041,000145: 37,3511 76505 VXM VSL1 037042,000146: 37,3512 01736 REFSMMAT # .5 UNIT 037043,000147: 37,3513 03564 STORE UBX/2 # XB/2 DONE REF COORDS 037044,000148: 037045,000149: 37,3514 76435 VXV VSL1 037046,000150: 37,3515 03572 UBY/2 037047,000151: 37,3516 27600 STOVL UBZ/2 # ZB/2 DONE REF COORDS 037048,000152: 037049,000153: # EQUIVALENT TO 037050,000154: # ZB = ( SOSMCI + COSI , -SOCM , -SOSMSI + COCI ) 037051,000155: 037052,000156: 37,3517 03542 UXA/2 # -UVREL/2 = -UVA/2 037053,000157: 37,3520 53435 VXV UNIT # GET UNIT(-UVREL*UBY)/2 = UL/2 037054,000158: 37,3521 03572 UBY/2 # YB/2 037055,000159: 37,3522 50206 PUSH DOT # UL/2 TO PDL 0,5 037056,000160: 37,3523 03556 UZA/2 # UNA/2 037057,000161: 37,3524 24021 STOVL COSTH # COS(ROLL)/4 037058,000162: 37,3525 00001 0 # UL/2 037059,000163: 037060,000164: 37,3526 77641 DOT 037061,000165: 37,3527 03550 UYA/2 037062,000166: 37,3530 34023 STCALL SINTH # -SIN(ROLL)/4 037063,000167: 37,3531 47211 ARCTRIG 037064,000168: 37,3532 24007 STOVL 6D # -(ROLL/180) /2 037065,000169: 37,3533 03572 UBY/2 037066,000170: 37,3534 72441 DOT SL1 # -UVA.UBY = -SIN(BETA) 037067,000171: 37,3535 03542 UXA/2 # -UVREL/2 037068,000172: 37,3536 77736 ARCSIN 037069,000173: 37,3537 24010 STOVL 7D # -(BETA/180) /2 037070,000174: 37,3540 03564 UBX/2 # XB/2 037071,000175: 37,3541 77641 DOT # UL.UBX = -SIN(ALFA) 037072,000176: 37,3542 00001 0 # UL/2 037073,000177: 37,3543 24023 STOVL SINTH # -SIN(ALFA)/4 037074,000178: 37,3544 77641 DOT # UL/2 FROM PDL 0 037075,000179: 37,3545 03600 UBZ/2 037076,000180: 37,3546 34021 STCALL COSTH # COS(ALFA)/2 037077,000181: 37,3547 47211 ARCTRIG 037078,000182: 37,3550 24011 STOVL 8D # -(ALFA/180) /2 037079,000183: 37,3551 01760 UNITR # UR/2 REF COORDS 037080,000184: 37,3552 72441 DOT SL1 037081,000185: # Page 843 037082,000186: 37,3553 03556 UZA/2 # MORE ACCURATE AT LARGE ARG. 037083,000187: 37,3554 77726 ARCCOS 037084,000188: 37,3555 00013 STORE 10D # (-GAMA/180)/2 037085,000189: 037086,000190: 37,3556 77551 TLOAD EXIT # ANGLES IN MPAC IN THE ORDER 037087,000191: # -( (ROLL, BETA, ALFA) /180)/2 037088,000192: 37,3557 00007 6D # THESE VALUES CORRECT AT PIPUP TIME. 037089,000193: 037090,000194: # Page 844 037091,000195: # BASIC SUBROUTINE TO UPDATE ATTITUDE ANGLES 037092,000196: 037093,000197: 37,3560 E6,1661 EBANK= AOG 037094,000198: 037095,000199: 37,3560 34752 CM/ATUP CA EBAOG 037096,000200: 37,3561 54003 TS EBANK 037097,000201: 37,3562 50120 CMTR1 INDEX FIXLOC 037098,000202: 37,3563 40012 CS 10D # (GAMA/180)/2 037099,000203: 37,3564 57722 XCH GAMA 037100,000204: 37,3565 54001 TS L 037101,000205: 037102,000206: 37,3566 00004 INHINT 037103,000207: # MUST REMAIN INHINTED UNTIL UPDATE OF BODY 037104,000208: # ANGLES, SO THAT GAMDIFSW IS VALID FIRST PASS 037105,000209: # INDICATOR. 037106,000210: 037107,000211: 37,3567 40102 CS CM/FLAGS 037108,000212: 37,3570 74700 MASK BIT11 # GAMDIFSW=94D BIT11 INITLY=0 037109,000213: 37,3571 00006 EXTEND # DON'T CALC GAMA DOT UNTIL HAVE FORMD 037110,000214: # ONE DIFFERENCE. 037111,000215: 37,3572 13575 BZF DOGAMDOT # IS OK, GO ON. 037112,000216: 37,3573 26102 ADS CM/FLAGS # KNOW BIT IS 0 037113,000217: 37,3574 03610 TC NOGAMDOT # SET GAMDOT = 0 037114,000218: 037115,000219: 37,3575 40001 DOGAMDOT CS L 037116,000220: 37,3576 61722 AD GAMA # DEL GAMA/360= T GAMDOT/360 037117,000221: 37,3577 00006 EXTEND 037118,000222: 37,3600 73673 MP TCDU # TCDU = .1 SEC, T = 2 SEC. 037119,000223: 37,3601 55723 TS GAMDOT # GAMA DOT TCDU / 180 037120,000224: 037121,000225: 37,3602 00006 EXTEND # IGNORE GAMDOT IF LEQ .5 DEG/SEC 037122,000226: 37,3603 63605 BZMF +2 037123,000227: 37,3604 40000 COM 037124,000228: 37,3605 64715 AD FIVE 037125,000229: 37,3606 00006 EXTEND 037126,000230: 37,3607 63612 BZMF +3 # SET GAMDOT=+0 AS TAG IF TOO SMALL. 037127,000231: 037128,000232: 37,3610 34714 NOGAMDOT CA ZERO # COME HERE INHINTED 037129,000233: 37,3611 55723 TS GAMDOT 037130,000234: # FOR NOW LEAVE IN 2'S C 037131,000235: # UPDATE ANGLES BY CORRECTING EULER ANG 037132,000236: # FOR ACCRUED INCREMENT SINCE PIPUP 037133,000237: # R = R EUIL + R(NOW) - R(PIPUP) 037134,000238: 37,3612 40154 CS MPAC # GET (R EUL/180) /2 037135,000239: 37,3613 60000 DOUBLE # POSSIBLE OVERFLOW 037136,000240: 37,3614 03663 TC CORANGOV # CORRECT FOR OVFL IF ANY 037137,000241: 37,3615 00006 EXTEND 037138,000242: 37,3616 61672 SU ROLL/PIP # GET INCR SINCE PIPUP 037139,000243: 37,3617 61664 AD ROLL/180 # ONLY SINGLE OVFL POSSIBLE. 037140,000244: 37,3620 03663 TC CORANGOV # CORRECT FOR OVFL IF ANY 037141,000245: # Page 845 037142,000246: 37,3621 55770 TS TEMPROLL 037143,000247: 037144,000248: 37,3622 40156 CS MPAC +2 # GET (ALFA EUL/180) /2 037145,000249: 37,3623 60000 DOUBLE # SAME AS FOR ROLL. NEEDED FOR EXT ATM DAP 037146,000250: 37,3624 03663 TC CORANGOV # CORRECT FOR OVFL IF ANY 037147,000251: 37,3625 00006 EXTEND 037148,000252: 37,3626 61673 SU ALFA/PIP 037149,000253: 37,3627 61665 AD ALFA/180 037150,000254: 37,3630 03663 TC CORANGOV # CORRECT FOR OVFL IF ANY 037151,000255: 37,3631 55771 TS TEMPALFA 037152,000256: 037153,000257: 37,3632 40155 CS MPAC +1 # GET (BETA EUL/180) /2 037154,000258: 37,3633 60000 CMTR2 DOUBLE 037155,000259: 37,3634 00006 EXTEND 037156,000260: 37,3635 61674 SU BETA/PIP 037157,000261: 37,3636 61666 AD BETA/180 037158,000262: 37,3637 57772 XCH TEMPBETA # OVFL NOT EXPECTED. 037159,000263: 037160,000264: 37,3640 34744 CA EBANK3 037161,000265: 37,3641 54003 TS EBANK 037162,000266: 037163,000267: 37,3642 E3,1446 EBANK= PHSNAME5 037164,000268: 37,3642 00006 EXTEND 037165,000269: 37,3643 33675 DCA REPOSADR # THIS ASSUMES THAT THE TC PHASCHNG 037166,000270: 37,3644 53447 DXCH PHSNAME5 # IS NOT CHANGED IN OCT 10035 037167,000271: # SERVICER. 037168,000272: 037169,000273: 37,3645 34752 CA EBAOG 037170,000274: 37,3646 54003 TS EBANK 037171,000275: 037172,000276: 37,3647 E6,1661 EBANK= AOG 037173,000277: 37,3647 00006 REDOPOSE EXTEND # RE-STARTS COME HERE 037174,000278: 37,3650 31771 DCA TEMPROLL 037175,000279: 37,3651 53665 DXCH ROLL/180 037176,000280: 37,3652 31772 CA TEMPBETA 037177,000281: 37,3653 55666 TS BETA/180 037178,000282: 037179,000283: 37,3654 00003 RELINT 037180,000284: 037181,000285: 37,3655 06006 TC INTPRET # CAN'T TC DANZIG AFTER PHASCHNG. 037182,000286: 37,3656 51575 CM/POSE3 VLOAD ABVAL # RETURN FROM CM/ATUP. (RESTART) 037183,000287: 37,3657 01177 VN # 2(-7) M/CS 037184,000288: 37,3660 03723 STORE VMAGI # FOR DISPLAY ON CALL. 037185,000289: 037186,000290: 37,3661 77650 GOTO 037187,000291: 37,3662 03324 POSEXIT # ENDEXIT, STARTENT, OR SCALEPOP. 037188,000292: 037189,000293: 37,3663 54001 CORANGOV TS L 037190,000294: 37,3664 00002 TC Q 037191,000295: 37,3665 50000 INDEX A 037192,000296: # Page 846 037193,000297: 37,3666 34673 CA LIMITS 037194,000298: 37,3667 26001 ADS L 037195,000299: 37,3670 00002 TC Q # COSTS 2 MCT TO USE. SEE ANGOVCOR. 037196,000300: 037197,000301: 37,3671 45730 53410 -KVSCALE 2DEC -.81491944 # -12800/(2 VS .3048) 037198,000302: 037199,000303: 37,3673 03146 TCDU DEC .1 # TCDU = .1 SEC. 037200,000304: 037201,000305: 37,3674 E6,1661 EBANK= AOG 037202,000306: 37,3674 03647 76066 REPOSADR 2CADR REDOPOSE 037203,000307: End of include-file CM_BODY_ATTITUDE.agc. Parent file is MAIN.agc