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