Source Code

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