Source Code
![]() |
These source-code files were derived from scans of the
Colossus 237 (Apollo 8 Command Module) program listing from the private collection of original
AGC developer Fred Martin. Scanning was by Ron Burkey. Pre-existing Colossus 249
(Apollo 9 CM) source files were used as a template, and changes between Colossus 249
and Colossus 237 were manually transcribed by a team of volunteers. Note
that the page images
presented online are of reduced quality, and that additional images
are available. Report any conversion errors or legibility
problems in page images to info@sandroid.org.
Notations on the program listing read, in part:GAP: ASSEMBLE REVISION 237 OF AGC PROGRAM COLOSSUS BY NASA 2021111-031 1:17 AUG. 24, 1968Note that the date is the date of the printout, not the date of the program revision. |
036377,000002: ## Copyright: Public domain.
036378,000003: ## Filename: CM_BODY_ATTITUDE.agc
036379,000004: ## Purpose: Part of the source code for Colossus build 237.
036380,000005: ## This is for the Command Module's (CM) Apollo Guidance
036381,000006: ## Computer (AGC), for Apollo 8.
036382,000007: ## Assembler: yaYUL
036383,000008: ## Contact: Onno Hommes <ohommes@alumni.cmu.edu>
036384,000009: ## Website: www.ibiblio.org/apollo/index.html
036385,000010: ## Page Scans: www.ibiblio.org/apollo/ScansForConversion/Colossus237/
036386,000011: ## Mod history: 2010-05-30 OH Adapted from corresponding Colossus 249 file.
036387,000012: ## 2010-12-04 JL Remove Colossus 249 header comments. Change to double-has page numbers.
036388,000013: ## 2011-02-07 JL Minor fixes.
036389,000014: ## 2017-01-01 RSB Proofed comment text using octopus/ProoferComments,
036390,000015: ## and fixed errors found.
036391,000016:
![]() |
Page 833 |
036393,000018: 35,3755 BANK 35
036394,000019:
036395,000020: 37,2000 SETLOC BODYATT
036396,000021: 37,2000 BANK
036397,000022:
036398,000023: 37,3375 COUNT 37/CMBAT
036399,000024:
036400,000025: # PDL 12D - 15D SAFE.
036401,000026:
036402,000027: # VALUES OF GIMBAL AND BODY ANGLES VALID AT PIP TIME ARE SAVED DURING READACCS.
036403,000028:
036404,000029: 37,3375 E7,1451 EBANK= RTINIT # LET INTERPRETER SET EB
036405,000030:
036406,000031: 37,3375 06006 CM/POSE TC INTPRET # COME HERE VIA AVEGEXIT.
036407,000032:
036408,000033: 37,3376 77201 SETPD VLOAD
036409,000034: 37,3377 00001 0
036410,000035: 37,3400 01177 VN # KVSCALE = (12800/ .3048) /2VS
036411,000036: 37,3401 63361 VXSC PDVL
036412,000037: 37,3402 37674 -KVSCALE # KVSCALE = .81491944
036413,000038: 37,3403 01714 UNITW # FULL UNIT VECTOR
036414,000039: 37,3404 74235 VXV VXSC # VREL = V - WE*R
036415,000040: 37,3405 01760 UNITR
036416,000041: 37,3406 15244 KWE
036417,000042: 37,3407 45455 VAD STADR
036418,000043: 37,3410 74251 STORE -VREL # SAVE FOR ENTRY GUIDANCE. REF COORDS
036419,000044:
036420,000045: 37,3411 72056 UNIT LXA,1
036421,000046: 37,3412 00044 36D # ABVAL( -VREL) TO X1
036422,000047: 37,3413 03542 STORE UXA/2 # -UVREL REF COORDS
036423,000048:
036424,000049: 37,3414 57435 VXV VCOMP
036425,000050: 37,3415 01760 UNITR # .5 UNIT REF COORDS
036426,000051: 37,3416 66256 UNIT SSP # THE FOLLOWING IS TO PROVIDE A STABLE
036427,000052: 37,3417 00051 S1 # UN FOR THE END OF THE TERMINAL PHASE.
036428,000053: 37,3420 00476 SPVQUIT DEC .019405 # 1000/ 2 VS
036429,000054: 37,3421 77300 TIX,1 VLOAD # IF V-VQUIT POS, BRANCH.
036430,000055: 37,3422 77424 CM/POSE2 # SAVE UYA IN OLDUYA
036431,000056: 37,3423 03534 OLDUYA # OTHERWISE CONTINUE TO USE OLDUYA.
036432,000057: 37,3424 03550 CM/POSE2 STORE UYA/2 # REF COORDS
036433,000058:
036434,000059: 37,3425 03534 STORE OLDUYA # RESTORE, OR SAVE AS CASE MAY BE.
036435,000060:
036436,000061: 37,3426 57435 VXV VCOMP
036437,000062: 37,3427 03542 UXA/2 # FINISH OBTAINING TRAJECTORY TRIAD.
036438,000063: 37,3430 77772 VSL1
036439,000064: 37,3431 03556 STORE UZA/2 # REF COORDS
![]() |
Page 834 |
036441,000066: 37,3432 77751 TLOAD # PICK UP CDUX, CDUY, CDUZ CORRESPONDING
036442,000067: 37,3433 03270 AOG/PIP # TO PIPUP TIME IN 2S,C AND SAVE.
036443,000068: 37,3434 14031 CM/TRIO STODL 24D
036444,000069: 37,3435 00032 25D # AIG/PIP
036445,000070:
036446,000071: 37,3436 41434 RTB PUSH # TO PDL0
036447,000072: 37,3437 45510 CDULOGIC
036448,000073: 37,3440 77746 COS
036449,000074: 37,3441 17564 STODL UBX/2 # CI /2
036450,000075: # AIG/PIP FROM PDL 0
036451,000076: 37,3442 57556 SIN DCOMP
036452,000077: 37,3443 17570 STODL UBX/2 +4 # -SI /2
036453,000078: 37,3444 00033 26D # AMG/PIP
036454,000079: 37,3445 41434 RTB PUSH # TO PDL 0
036455,000080: 37,3446 45510 CDULOGIC
036456,000081: 37,3447 65356 SIN PDDL # XCH PDL 0. SAVE SM /2
036457,000082: 37,3450 65346 COS PDDL # CM /2 TO PDL 2
036458,000083: 37,3451 00001 0 # SM /2
036459,000084: 37,3452 74276 DCOMP VXSC
036460,000085: 37,3453 03564 UBX/2
036461,000086: 37,3454 77772 VSL1 # NOISE WONT OVFL.
036462,000087: 37,3455 17572 STODL UBY/2 # =(-SMCI, NOISE, SMSI) /2
036463,000088: 37,3456 00003 2 # CM /2 REPLACES NOISE
036464,000089: 37,3457 17574 STODL UBY/2 +2 # UBY/2=(-SMCI, CM, SMSI)/2
036465,000090: 37,3460 00031 24D # AOG/PIP
036466,000091: 37,3461 41434 RTB PUSH # TO PDL 4
036467,000092: 37,3462 45510 CDULOGIC
036468,000093: 37,3463 65356 SIN PDDL # XCH PDL 4. SAVE SO /2
036469,000094: 37,3464 74346 COS VXSC # CO /2
036470,000095: 37,3465 03572 UBY/2
036471,000096: 37,3466 17572 STODL UBY/2 # UBY/2=(-COSMCI, COCM, COSMSI)/4
036472,000097: 37,3467 00005 4D # SO /2
036473,000098: 37,3470 57405 DMP DCOMP
036474,000099: 37,3471 03570 UBX/2 +4 # -SI /2
036475,000100: 37,3472 77615 DAD
036476,000101: 37,3473 03572 UBY/2 # INCREMENT BY (SOSI /4)
036477,000102: 37,3474 17572 STODL UBY/2
036478,000103: # SO /2 FROM PDL 4
036479,000104: 37,3475 43205 DMP DAD
036480,000105: 37,3476 03564 UBX/2 # CI /2
036481,000106: 37,3477 03576 UBY/2 +4
036482,000107: 37,3500 27576 STOVL UBY/2 +4 # YB/4 PLATFORM COORDS
036483,000108:
036484,000109: # YB = (-COSMCI + SOSI , COCM , COSMSI + SOCI )
036485,000110:
036486,000111: 37,3501 03572 UBY/2
036487,000112: 37,3502 72505 VXM VSL2
036488,000113: 37,3503 01736 REFSMMAT # .5 UNIT
036489,000114: 37,3504 17572 STODL UBY/2 # YB/2 DONE REF COORDS
![]() |
Page 835 |
036491,000116: # CM /2 FROM PDL 2
036492,000117: 37,3505 76561 VXSC VSL1
036493,000118: 37,3506 03564 UBX/2
036494,000119: 37,3507 17564 STODL UBX/2 # =( CMCI, NOISE, -CMSI)/2
036495,000120: 37,3510 77626 STADR # SM /2 FROM PDL 0
036496,000121: 37,3511 50211 STOVL UBX/2 +2 # SM /2 REPLACES NOISE
036497,000122: 37,3512 03564 UBX/2 # XB/2 PLATFORM COORDS
036498,000123:
036499,000124: # XB = ( CMCI , SM , -CMSI )
036500,000125:
036501,000126: 37,3513 76505 VXM VSL1
036502,000127: 37,3514 01736 REFSMMAT # .5 UNIT
036503,000128: 37,3515 03564 STORE UBX/2 # XB/2 DONE REF COORDS
036504,000129:
036505,000130: 37,3516 76435 VXV VSL1
036506,000131: 37,3517 03572 UBY/2
036507,000132: 37,3520 27600 STOVL UBZ/2 # ZB/2 DONE REF COORDS
036508,000133:
036509,000134: # EQUIVALENT TO
036510,000135: # ZB = ( SOSMCI + COSI , -SOCM , -SOSMSI + COCI )
036511,000136:
036512,000137: 37,3521 03542 UXA/2 # -UVREL/2 = -UVA/2
036513,000138: 37,3522 53435 VXV UNIT # GET UNIT(-UVREL*UBY)/2 = UL/2
036514,000139: 37,3523 03572 UBY/2 # YB/2
036515,000140: 37,3524 50206 PUSH DOT # UL/2 TO PDL 0,5
036516,000141: 37,3525 03556 UZA/2 # UNA/2
036517,000142: 37,3526 24021 STOVL COSTH # COS(ROLL)/4
036518,000143: 37,3527 00001 0 # UL/2
036519,000144:
036520,000145: 37,3530 77641 DOT
036521,000146: 37,3531 03550 UYA/2
036522,000147: 37,3532 34023 STCALL SINTH # -SIN(ROLL)/4
036523,000148: 37,3533 47211 ARCTRIG
036524,000149: 37,3534 24007 STOVL 6D # -(ROLL/180) /2
036525,000150: 37,3535 03572 UBY/2
036526,000151: 37,3536 72441 DOT SL1 # -UVA.UBY = -SIN(BETA)
036527,000152: 37,3537 03542 UXA/2 # -UVREL/2
036528,000153: 37,3540 77736 ARCSIN
036529,000154: 37,3541 24010 STOVL 7D # -(BETA/180) /2
036530,000155: 37,3542 03564 UBX/2 # XB/2
036531,000156: 37,3543 77641 DOT # UL.UBX = -SIN(ALFA)
036532,000157: 37,3544 00001 0 # UL/2
036533,000158: 37,3545 24023 STOVL SINTH # -SIN(ALFA)/4
036534,000159: 37,3546 77641 DOT # UL/2 FROM PDL 0
036535,000160: 37,3547 03600 UBZ/2
036536,000161: 37,3550 34021 STCALL COSTH # COS(ALFA)/4
036537,000162: 37,3551 47211 ARCTRIG
036538,000163: 37,3552 24011 STOVL 8D # -(ALFA/180) /2
036539,000164: 37,3553 01760 UNITR # UR/2 REF COORDS
036540,000165: 37,3554 72441 DOT SL1
![]() |
Page 836 |
036542,000167: 37,3555 03556 UZA/2 # MORE ACCURATE AT LARGE ARG.
036543,000168: 37,3556 77726 ARCCOS
036544,000169: 37,3557 00013 STORE 10D # (-GAMA/180)/2
036545,000170:
036546,000171: 37,3560 77551 TLOAD EXIT # ANGLES IN MPAC IN THE ORDER
036547,000172: # -( (ROLL, BETA, ALFA) /180)/2
036548,000173: 37,3561 00007 6D # THESE VALUES CORRECT AT PIPUP TIME.
036549,000174: # SPACER
![]() |
Page 837 |
036551,000176: # BASIC SUBROUTINE TO UPDATE ATTITUDE ANGLES
036552,000177:
036553,000178: 37,3562 E6,1661 EBANK= AOG
036554,000179:
036555,000180: 37,3562 34752 CM/ATUP CA EBAOG
036556,000181: 37,3563 54003 TS EBANK
036557,000182: 37,3564 50120 CMTR1 INDEX FIXLOC
036558,000183: 37,3565 40012 CS 10D # (GAMA/180)/2
036559,000184: 37,3566 57722 XCH GAMA
036560,000185: 37,3567 54001 TS L
036561,000186:
036562,000187: 37,3570 00004 INHINT
036563,000188: # MUST REMAIN INHINTED UNTIL UPDATE OF BODY
036564,000189: # ANGLES, SO THAT GAMDIFSW IS VALID FIRST PASS
036565,000190: # INDICATOR.
036566,000191:
036567,000192: 37,3571 40102 CS CM/FLAGS
036568,000193: 37,3572 74700 MASK BIT11 # GAMDIFSW=94D BIT11 INITLY=0
036569,000194: 37,3573 00006 EXTEND # DONT CALC GAMA DOT UNTIL HAVE FORMD
036570,000195: # ONE DIFFERENCE.
036571,000196: 37,3574 13577 BZF DOGAMDOT # IS OK, GO ON.
036572,000197: 37,3575 26102 ADS CM/FLAGS # KNOW BIT IS 0
036573,000198: 37,3576 03612 TC NOGAMDOT # SET GAMDOT = 0
036574,000199:
036575,000200: 37,3577 40001 DOGAMDOT CS L
036576,000201: 37,3600 61722 AD GAMA # DEL GAMA/360= T GAMDOT/360
036577,000202: 37,3601 00006 EXTEND
036578,000203: 37,3602 73675 MP TCDU # TCDU = .1 SEC, T = 2 SEC.
036579,000204: 37,3603 55723 TS GAMDOT # GAMA DOT TCDU / 180
036580,000205:
036581,000206: 37,3604 00006 EXTEND # IGNORE GAMDOT IF LEQ .5 DEG/SEC
036582,000207: 37,3605 63607 BZMF +2
036583,000208: 37,3606 40000 COM
036584,000209: 37,3607 64715 AD FIVE
036585,000210: 37,3610 00006 EXTEND
036586,000211: 37,3611 63614 BZMF +3 # SET GAMDOT=+0 AS TAG IF TOO SMALL.
036587,000212:
036588,000213: 37,3612 34714 NOGAMDOT CA ZERO # COME HERE INHINTED.
036589,000214: 37,3613 55723 TS GAMDOT
036590,000215: # FOR NOW LEAVE IN 2S,C
036591,000216: # UPDATE ANGLES BY CORRECTING EUILER ANG
036592,000217: # FOR ACCRUED INCREMENT SINCE PIPUP
036593,000218: # R = R EUIL + R(NOW) -R(PIPUP)
036594,000219: 37,3614 40154 CS MPAC # GET (R EUL/180) /2
036595,000220: 37,3615 60000 DOUBLE # POSSIBLE OVERFLOW
036596,000221: 37,3616 03665 TC CORANGOV # CORRECT FOR OVFL IF ANY
036597,000222: 37,3617 00006 EXTEND
036598,000223: 37,3620 61672 SU ROLL/PIP # GET INCR SINCE PIPUP
036599,000224: 37,3621 61664 AD ROLL/180 # ONLY SINGLE OVFL POSSIBLE.
036600,000225: 37,3622 03665 TC CORANGOV # CORRECT FOR OVFL IF ANY
![]() |
Page 838 |
036602,000227: 37,3623 55770 TS TEMPROLL
036603,000228:
036604,000229: 37,3624 40156 CS MPAC +2 # GET (ALFA EUL/180) /2
036605,000230: 37,3625 60000 DOUBLE # SAME AS FOR ROLL. NEEDED FOR EXT ATM DAP
036606,000231: 37,3626 03665 TC CORANGOV # CORRECT FOR OVFL IF ANY
036607,000232: 37,3627 00006 EXTEND
036608,000233: 37,3630 61673 SU ALFA/PIP
036609,000234: 37,3631 61665 AD ALFA/180
036610,000235: 37,3632 03665 TC CORANGOV # CORRECT FOR OVFL IF ANY
036611,000236: 37,3633 55771 TS TEMPALFA
036612,000237:
036613,000238: 37,3634 40155 CS MPAC +1 # GET (BETA EUL/180) /2
036614,000239: 37,3635 60000 CMTR2 DOUBLE
036615,000240: 37,3636 00006 EXTEND
036616,000241: 37,3637 61674 SU BETA/PIP
036617,000242: 37,3640 61666 AD BETA/180
036618,000243: 37,3641 57772 XCH TEMPBETA # OVFL NOT EXPECTED.
036619,000244:
036620,000245: 37,3642 34744 CA EBANK3
036621,000246: 37,3643 54003 TS EBANK
036622,000247:
036623,000248: 37,3644 E3,1446 EBANK= PHSNAME5
036624,000249: 37,3644 00006 EXTEND
036625,000250: 37,3645 33677 DCA REPOSADR # THIS ASSUMES THAT THE TC PHASCHNG
036626,000251: 37,3646 53447 DXCH PHSNAME5 # IS NOT CHANGED IN OCT 10035
036627,000252: # SERVICER.
036628,000253:
036629,000254: 37,3647 34752 CA EBAOG
036630,000255: 37,3650 54003 TS EBANK
036631,000256:
036632,000257: 37,3651 E6,1661 EBANK= AOG
036633,000258: 37,3651 00006 REDOPOSE EXTEND # RE-STARTS COME HERE
036634,000259: 37,3652 31771 DCA TEMPROLL
036635,000260: 37,3653 53665 DXCH ROLL/180
036636,000261: 37,3654 31772 CA TEMPBETA
036637,000262: 37,3655 55666 TS BETA/180
036638,000263:
036639,000264: 37,3656 00003 RELINT
036640,000265:
036641,000266: 37,3657 06006 TC INTPRET # CANT TC DANZIG AFTER PHASCHNG.
036642,000267: 37,3660 51575 CM/POSE3 VLOAD ABVAL # RETURN FROM CM/ATUP. (RESTART)
036643,000268: 37,3661 01177 VN # 2(-7) M/CS
036644,000269: 37,3662 03723 STORE VMAGI # FOR DISPLAY ON CALL.
036645,000270:
036646,000271: 37,3663 77650 GOTO
036647,000272: 37,3664 03324 POSEXIT # ENDEXIT, STARTENT, OR SCALEPOP.
036648,000273:
036649,000274: 37,3665 54001 CORANGOV TS L
036650,000275: 37,3666 00002 TC Q
036651,000276: 37,3667 50000 INDEX A
![]() |
Page 839 |
036653,000278: 37,3670 34673 CA LIMITS
036654,000279: 37,3671 26001 ADS L
036655,000280: 37,3672 00002 TC Q # COSTS 2 MCT TO USE. SEE ANGOVCOR.
036656,000281:
036657,000282: 37,3673 45730 53410 -KVSCALE 2DEC -.81491944 # -12800/(2 VS .3048)
036658,000283: 37,3675 03146 TCDU DEC .1 # TCDU = .1 SEC.
036659,000284:
036660,000285: 37,3676 E6,1661 EBANK= AOG
036661,000286: 37,3676 03651 76066 REPOSADR 2CADR REDOPOSE
End of include-file CM_BODY_ATTITUDE.agc. Parent file is MAIN.agc