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