Source Code
![]() |
These source-code files were obtained by digitally photographing
a Solarium 55 (Apollo 6) program listing from the American Computer Museum in
Bozeman, Montana. Photography was by Ron Burkey, with assistance from
museum curator George Keremedjiev and Montana
State University curator Kim Scott. The listing originally belonged to Eldon C. Hall,
who donated it to the museum. Volunteers then manually typed in the
source code or else modified similar pre-existing Colossus 249
(Apollo 9) source files to incorporate changes, although this transcription was
principally done by Jim Lawton and corrected by Ron Burkey.
Notations on the program listing read, in part:YUL SYSTEM FOR AGC4: REVISION 0 OF PROGRAM SOLRUM55 BY NASA 1021108-021 DEC. 4, 1966Note that the date is the date of the printout, not the date of the program revision. Due to statements by Jay Sampson, the original contractor from AC Electronics who created Solarium 54 (Apollo 4) from the earlier Corona (AS-202 mission) program, it is believed that Solarium 54 and Solarium 55 (Apollo 6) are actually identical programs. The change in numbering, from 54 to 55, is believed to be for some administrative purpose. Thus, it is believed that the source-code represented here is equally appropriate for both Apollo 4 and Apollo 6 missions. |
029632,000002: ## Copyright: Public domain.
029633,000003: ## Filename: AVERAGE_G_INTEGRATOR.agc
029634,000004: ## Purpose: Part of the source code for Solarium build 55. This
029635,000005: ## is for the Command Module's (CM) Apollo Guidance
029636,000006: ## Computer (AGC), for Apollo 6.
029637,000007: ## Assembler: yaYUL --block1
029638,000008: ## Contact: Jim Lawton <jim DOT lawton AT gmail DOT com>
029639,000009: ## Website: www.ibiblio.org/apollo/index.html
029640,000010: ## Page Scans: www.ibiblio.org/apollo/ScansForConversion/Solarium055/
029641,000011: ## Mod history: 2009-10-01 JL Created.
029642,000012: ## 2016-08-19 RSB Added temporary "BANK 30" workaround.
029643,000013: ## 2016-08-20 RSB Typos.
029644,000014: ## 2016-12-28 RSB Proofed comment text using octopus/ProoferComments,
029645,000015: ## and fixed errors found.
029646,000016:
![]() |
Page 746 |
029648,000018:
029649,000019: # ROUTINE CALCRVG INTEGRATES THE EQUATIONS OF MOTION BY AVERAGING THE THRUST AND GRAVITATIONAL ACCELERA-
029650,000020: # TIONS OVER A TIME INTERVAL, DELTAT
029651,000021: # FOR THE EARTH-CENTERED GRAVITATIONAL FIELD THE PERTURBATION DUE TO OBLATENESS IS COMPUTED TO THE FIRST
029652,000022: # HARMONIC COEFFICIENT J
029653,000023: # ROUTINE NORMLISE MUST BE CALLED PRIOR TO THE FIRST ENTRY INTO CALCRVG. IT REQUIRES RN SCALED TO 2(+29)M
029654,000024: # IT LEAVES RN NORMALISED, SO THAT THE SCALED MAGNITUDE OF THE VECTOR CONTAINS ONE LEADING ZERO, BY SHIFTING THE
029655,000025: # VECTOR LEFT N BINARY PLACES
029656,000026: # ROUTINE CALCRVG REQUIRES
029657,000027: # 1) THRUST ACCELERATION INCREMENTS IN DELV SCALED SAME AS PIPAX,Y,Z
029658,000028: # 2) VN SCALED AT 2(+7) M/CS
029659,000029: # 3) ADDRESS OF CALCGLUN OR CALCGEAR IN CALCG
029660,000030: # 4) DELTAT SCALED AT 2(+9) CS
029661,000031: # 5) PUSH-DOWN COUNTER SET TO ZERO
029662,000032: # IT LEAVES UPDATED RN, SCALED AT 2(29-N) M, VN, AND GRAVITY SCALED AT 2(-5) M/CS/CS
029663,000033:
029664,000034:
029665,000035: # CONTINUE ON IN BANK 30.
![]() |
RSB — The original source code did not have the following BANK pseudo-op, but for some reason I haven't tracked down yet, yaYUL can't resolve the addresses without it. Perhaps a bug in yaYUL. |
029669,000039: 30,7524 BANK 30
029670,000040:
029671,000041: 30,7524 71173 NORMLISE ABVAL 3 # COUNT NUMBER OF LEADING ZEROS IN
029672,000042: 30,7525 57715 TSLC INCR,1 # ABVAL (RN) AND STORE -N(=2-M) IN NSHIFT
029673,000043: 30,7526 67515 SXA,1 INCR,1 # RN MUST BE SCALED AT 2(+29)M
029674,000044: 30,7527 67425 SXA,1 ITA
029675,000045: 30,7530 00766 RN
029676,000046: 30,7531 00047 X1
029677,000047: 30,7532 00003 2
029678,000048: 30,7533 01041 NSHIFT # SAVE C(X1)=-N
029679,000049: 30,7534 00017 14D
029680,000050: 30,7535 01042 XSHIFT # SAVE C(X1) =14-N
029681,000051: 30,7536 00052 S2
029682,000052:
029683,000053: 30,7537 75175 VMOVE 1
029684,000054: 30,7540 44376 VSLT*
029685,000055: 30,7541 00766 RN
029686,000056: 30,7542 00035 14D,1
029687,000057: 30,7543 32766 STORE RN # RN SCALED AT 2(29-N)METRES
029688,000058:
029689,000059: 30,7544 76776 ITC 0
029690,000060: 30,7545 21645 CALCGRV1
029691,000061:
029692,000062: 30,7546 44576 ITCI 0
029693,000063: 30,7547 00052 S2
029694,000064:
![]() |
Page 747 |
029696,000066:
029697,000067: 30,7550 75776 CALCRVG VXSC 0
029698,000068: 30,7551 01002 DELV
029699,000069: 30,7552 21742 KPIP # DV TO PD SCALED AT 2(+4)M/CS
029700,000070:
029701,000071: 30,7553 75775 VXSC 1
029702,000072: 30,7554 73432 LXA,1 BVSU
029703,000073: 30,7555 01010 GRAVITY
029704,000074: 30,7556 01030 DELTAT
029705,000075: 30,7557 01042 XSHIFT
029706,000076: 30,7560 00001 0 # (DV-(OLD GDT))/2 TO PD SCALED 2(+3)M/CS
029707,000077:
029708,000078: 30,7561 47573 NOLOD 3
029709,000079: 30,7562 45642 VSRT VAD
029710,000080: 30,7563 75620 VXSC VSLT*
029711,000081: 30,7564 50625 VAD ITA
029712,000082: 30,7565 00005 4
029713,000083: 30,7566 00774 VN
029714,000084: 30,7567 01030 DELTAT
029715,000085: 30,7570 00001 0,1
029716,000086: 30,7571 00766 RN
029717,000087: 30,7572 00052 S2
029718,000088: 30,7573 33300 STORE RN1 # SCALED AT 2(29-N) METERS
029719,000089:
029720,000090: 30,7574 76776 ITC 0
029721,000091: 30,7575 21645 CALCGRV1
029722,000092:
029723,000093: 30,7576 47573 NOLOD 3
029724,000094: 30,7577 75632 VXSC BVSU
029725,000095: 30,7600 50626 VAD VSRT
029726,000096: 30,7601 50776 VAD
029727,000097: 30,7602 01030 DELTAT
029728,000098: 30,7603 77777 - # (DV-(OLD GDT))/2
029729,000099: 30,7604 77777 - # DV/2
029730,000100: 30,7605 00005 4
029731,000101: 30,7606 00774 VN
029732,000102: 30,7607 33306 STORE VN1 # SCALED AT 2(+7) MET/CS
029733,000103:
029734,000104: # IN AVERAGE G, UP THE PHASE BITS BY 2 OF ACTIVE PROG BEFORE COPY CYCLE.
029735,000105:
029736,000106: 30,7610 77576 EXIT 0
029737,000107:
029738,000108: 30,7611 20067 INDEX FIXLOC
029739,000109: 30,7612 40051 CS S2 # SAVE NEG RETURN ADDRESS IN NON-VAC AREA.
029740,000110: 30,7613 51313 CALCRVG2 TS AVGRETRN # SAVE NEGATIVE OF RETURN ADDRESS.
029741,000111:
029742,000112: 30,7614 40662 CS -PHASE1 +4 # PICK UP PHASES.
029743,000113: 30,7615 64516 AD ONE # INCREMENT BY 1.
029744,000114: 30,7616 02312 TC NEWPHASE # AND CALL ROUTINE TO CHANGE PHASE.
029745,000115: 30,7617 00005 OCT 00005
![]() |
Page 748 |
029747,000117: 30,7620 20017 REFAZE6 INHINT
029748,000118: 30,7621 37641 CAF ELEVEND
029749,000119: 30,7622 50115 TS MPAC # USE MPAC FOR LOOP COUNTER.
029750,000120: 30,7623 20115 INDEX MPAC
029751,000121: 30,7624 41277 CS RN1 # RN1 AND VN1 MUST BE IN ORDER.
029752,000122: 30,7625 40000 COM # LEAVE RN1 ALONE IN CASE OF RESTARTS.
029753,000123: 30,7626 20115 INDEX MPAC # SELECT THE RIGHT TERM.
029754,000124: 30,7627 50765 TS RN # ...AND GO THRU COPY CYCLE.
029755,000125:
029756,000126: 30,7630 10115 CCS MPAC # ARE WE DONE..
029757,000127: 30,7631 07622 TC REFAZE6 +2 # NO, NOT YET.
029758,000128: 30,7632 44515 CS BIT2 # YES, MPAC = 0.
029759,000129: 30,7633 70675 MASK TMMARKER
029760,000130: 30,7634 64515 AD BIT2 # SET BIT 2 TO ONE IN TMMARKER.
029761,000131: 30,7635 50675 TS TMMARKER
029762,000132: # WHAT ABOUT GRAVITY FOR RESTART..
029763,000133: 30,7636 20016 RELINT
029764,000134: 30,7637 41313 CS AVGRETRN # NEG OF ADDRESS WAS STORED.
029765,000135: 30,7640 05723 TC BANKJUMP
029766,000136:
029767,000137:
029768,000138:
029769,000139: 30,7641 00013 ELEVEND DEC 11 B-14 # 11D (ELEVEN DECIMAL, OF COURSE.)
029770,000140:
029771,000141:
029772,000142:
029773,000143: 30,7642 73576 CALCGRAV LXA,1 0
029774,000144: 30,7643 01042 XSHIFT
029775,000145:
029776,000146: 30,7644 47575 CALCGRV1 NOLOD 1
029777,000147: 30,7645 73176 UNIT
029778,000148: 30,7646 33016 STORE UNITR
029779,000149:
029780,000150: 30,7647 45175 DMOVE 1
029781,000151: 30,7650 63776 TSLT
029782,000152: 30,7651 00037 30D
029783,000153: 30,7652 00002 1
029784,000154: 30,7653 33024 STORE RMAG # SCALED AT 2(30-N)M
029785,000155:
029786,000156: 30,7654 63776 TSLT 0
029787,000157: 30,7655 00035 28D
029788,000158: 30,7656 00003 2
029789,000159: 30,7657 33026 STORE RMAGSQ # SCALED AT 2(+50)M(+2)
029790,000160:
029791,000161: 30,7660 45575 ITA 1
029792,000162: 30,7661 61576 XAD,1
029793,000163: 30,7662 00034 27D
029794,000164: 30,7663 01041 NSHIFT
![]() |
Page 749 |
029796,000166:
029797,000167: 30,7664 42776 CALCGEAR DOT 0
029798,000168: 30,7665 01016 UNITR
029799,000169: 30,7666 01044 UNITW
029800,000170: 30,7667 32032 STORE 25D
029801,000171:
029802,000172: 30,7670 47574 NOLOD 2
029803,000173: 30,7671 51122 DSQ DMP
029804,000174: 30,7672 63726 TSLT BDSU
029805,000175: 30,7673 21746 DP(5/8)
029806,000176: 30,7674 00005 4
029807,000177: 30,7675 21744 DP2(-3)
029808,000178:
029809,000179: 30,7676 62775 DDV 1
029810,000180: 30,7677 63376 TSLT*
029811,000181: 30,7700 21754 J(RE)SQ # SCALED AT 2(+40) M(+2)
029812,000182: 30,7701 01026 RMAGSQ
029813,000183: 30,7702 00001 0,1
029814,000184: 30,7703 32030 STORE 23D # J(RE/RN) SQ SCALED AT 2(-3)
029815,000185:
029816,000186: 30,7704 47574 NOLOD 2
029817,000187: 30,7705 64766 DMP VXSC
029818,000188: 30,7706 50776 VAD
029819,000189: 30,7707 77777 -
029820,000190: 30,7710 01016 UNITR
029821,000191: 30,7711 01016 UNITR
029822,000192:
029823,000193: 30,7712 64775 DMP 1
029824,000194: 30,7713 75642 VXSC VAD
029825,000195: 30,7714 00030 23D
029826,000196: 30,7715 00032 25D
029827,000197: 30,7716 01044 UNITW
029828,000198:
029829,000199: 30,7717 45175 DMOVE 1
029830,000200: 30,7720 76776 ITC
029831,000201: 30,7721 21750 MUEARTH
029832,000202: 30,7722 21732 MU/RSQ
029833,000203:
029834,000204: 30,7723 75176 CALCGLUN VMOVE 0
029835,000205: 30,7724 01016 UNITR
029836,000206:
029837,000207: 30,7725 45175 DMOVE 1
029838,000208: 30,7726 63576 INCR,1
029839,000209: 30,7727 21752 MUMOON
029840,000210: 30,7730 00007 6
029841,000211:
029842,000212: 30,7731 47574 MU/RSQ NOLOD 2
029843,000213: 30,7732 62714 DDV TSLT*
029844,000214: 30,7733 75776 VXSC
029845,000215: 30,7734 01026 RMAGSQ # C(X1)=14-2N (EARTH)
029846,000216: 30,7735 00013 5,1 # =20-2N (MOON)
![]() |
Page 750 |
029848,000218: 30,7736 33010 STORE GRAVITY # SCALED AT 2(-5) M/CS/CS
029849,000219:
029850,000220: 30,7737 44576 ITCI 0
029851,000221: 30,7740 00034 27D
029852,000222:
029853,000223: 30,7741 23126 25370 KPIP 2DEC 0.59904
029854,000224: 30,7743 04000 00000 DP2(-3) 2DEC 0.125
029855,000225: 30,7745 24000 00000 DP(5/8) 2DEC 0.625
029856,000226: 30,7747 00022 21756 MUEARTH 2DEC .009063188 B-3 # SCALED AT 2(+45)M(+3)/CS(+2)
029857,000227: 30,7751 00164 34414 MUMOON 2DEC 0.007134481 # 4.90277800 E12 2(+36)M(+3)/CS(+2)
029858,000228: 30,7753 00173 00416 J(RE)SQ 2DEC .06006663 B-3 # SCALED AT 2(+43)M(+2)
029859,000229:
![]() |
Page 751 |
029861,000231:
029862,000232: # ROUTINE FOR FLIGHTS 501 &2 TO INCORPORATE STATE VECTOR UPDATE DURING AVERAGE G. EACH PASS THROUGH
029863,000233: # SERVICER COMES HERE TO SEE IF AN UPDATE IS READY.
029864,000234:
029865,000235: 26,7711 BANK 26
029866,000236:
029867,000237: 26,7711 66774 501UPCHK DSU 2 # IF PIPTIME IS GREATER THAN OR EQUAL TO
029868,000238: 26,7712 73615 BMN TEST # UPTIME, AND UPTIME IS NOT TOO OLD, AND
029869,000239: 26,7713 66616 DSU BPL # UPDATFLG IS SET, DO THE UPDATE. UPTIME
029870,000240: 26,7714 01465 PIPTIME # IS NORMALLY SET TO POSMAX
029871,000241: 26,7715 01672 UPTIME # POSMAX.
029872,000242: 26,7716 25302 REGSTEP
029873,000243: 26,7717 00023 UPDATFLG
029874,000244: 26,7720 25302 REGSTEP
029875,000245:
029876,000246: 26,7721 15770 2.5SEC26
029877,000247: 26,7722 15755 BADUPTIM
029878,000248: 26,7723 52775 MXV 1 # TRANSFORM DATA IN STBUFF TO SM COORDS.
029879,000249: 26,7724 44776 VSLT
029880,000250: 26,7725 01107 STBUFF +6
029881,000251: 26,7726 01052 REFSMMAT
029882,000252: 26,7727 00002 1 # THIS ASSUMES THAT UPDATE SCALED 2(7)M/CS
029883,000253: 26,7730 33306 STORE VN1
029884,000254:
029885,000255: 26,7731 52775 MXV 1
029886,000256: 26,7732 44776 VSLT
029887,000257: 26,7733 01101 STBUFF
029888,000258: 26,7734 01052 REFSMMAT
029889,000259: 26,7735 00003 2 # THIS ASSUMES THAT UPDATE SCALED 2(26)M
029890,000260: 26,7736 33300 STORE RN1
029891,000261:
029892,000262: 26,7737 76776 ITC 0 # CALCULATE THE ASSOCIATED GRAVITY VECTOR
029893,000263: 26,7740 21643 CALCGRAV # FOR THE NEXT TIME STEP.
029894,000264:
029895,000265: 26,7741 77576 EXIT 0
029896,000266:
029897,000267: 26,7742 02276 TC PHASCHNG # UPDATE RESTART POINT BEFORE SETTING
029898,000268: 26,7743 03005 OCT 03005 # UPTIME TO SHOW THATTHE DATA HAS BEEN
029899,000269:
029900,000270: 26,7744 03430 REDO5.24 TC FLAG1DWN # INCORPORATED. ALSO, INDICATE THIS TO THE
029901,000271: 26,7745 20000 OCT 20000 # GROUND BY RESETTING UPDATFLG.
029902,000272:
029903,000273: 26,7746 34476 CAF POSMAX
029904,000274: 26,7747 51671 TS UPTIME
029905,000275: 26,7750 51672 TS UPTIME +1
029906,000276:
029907,000277: 26,7751 47771 CS 501AVEX # SET UP FOR AVERAGE G TO RETURN TO USUAL
029908,000278: 26,7752 05720 TC POSTJUMP # POINT IN SERVICER
029909,000279: 26,7753 61613 CADR CALCRVG2
029910,000280:
029911,000281: 26,7754 77576 BADUPTIM EXIT 0 # COME HERE IF UPTIME REPRESENTS PAST TIME
![]() |
Page 752 |
029913,000283: 26,7755 03007 TC ALARM
029914,000284: 26,7756 01411 OCT 01411
029915,000285:
029916,000286: 26,7757 34476 CAF POSMAX
029917,000287: 26,7760 51671 TS UPTIME
029918,000288: 26,7761 51672 TS UPTIME +1
029919,000289:
029920,000290: 26,7762 03430 TC FLAG1DWN # RESET UPDAT FLAG
029921,000291: 26,7763 20000 OCT 20000
029922,000292:
029923,000293: 26,7764 04000 TC INTPRET
029924,000294:
029925,000295: 26,7765 76776 ITC 0
029926,000296: 26,7766 25302 REGSTEP
029927,000297:
029928,000298: 26,7767 00000 00372 2.5SEC26 2DEC 250 B-28
029929,000299: 26,7771 65303 501AVEX CADR AVGRET
029930,000300:
![]() |
Page 753 |
029932,000302:
029933,000303: # SIM FLIGHT SPECIAL
029934,000304:
029935,000305:
029936,000306:
029937,000307: 31,7520 BANK 31
029938,000308:
029939,000309: 31,7520 04000 MALSJOB TC INTPRET
029940,000310:
029941,000311: 31,7521 51776 VXM 0
029942,000312: 31,7522 01101 STBUFF
029943,000313: 31,7523 01052 REFSMMAT
029944,000314: 31,7524 33101 STORE STBUFF
029945,000315:
029946,000316: 31,7525 51775 VXM 1
029947,000317: 31,7526 44776 VSLT
029948,000318: 31,7527 01107 STBUFF +6
029949,000319: 31,7530 01052 REFSMMAT
029950,000320: 31,7531 00002 1
029951,000321: 31,7532 33107 STORE STBUFF +6
029952,000322:
029953,000323: 31,7533 77576 EXIT 0
029954,000324:
029955,000325: 31,7534 02124 TC ENDOFJOB
029956,000326:
End of include-file AVERAGE_G_INTEGRATOR.agc. Parent file is MAIN.agc