Source Code
![]() |
This is the source-code for the Apollo 9 Command Module's Guidance Computer.
These files were derived originally from the scan from MIT's Dibner Institute's
now-discontinued website titled "History of Recent Science and Technology", which
in turn was originally created by Gary Neff, though his high-quality scans were
unfortunately reduced in legibility when presented online.
The markings on the front of the
printout imply that it was the original AGC developer Norm Brodeur's copy.
A scan by Ron Burkey has superceded it, made from a more-legible copy from the collection of original
AGC developer Fred Martin. The source code was transcribed from
those images by Ron Burkey. Note that the page images
presented online are of reduced quality, and that higher-quality 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:ASSEMBLE REVISION 249 OF AGC PROGRAM COLOSSUS BY NASA 2021111-041 20'35 OCT. 28,1968Note that the date is the date of the printout, not the date of the program revision. |
040929,000002: ## Copyright: Public domain.
040930,000003: ## Filename: TVCRESTARTS.agc
040931,000004: ## Purpose: Part of the source code for Colossus, build 249.
040932,000005: ## It is part of the source code for the Command Module's (CM)
040933,000006: ## Apollo Guidance Computer (AGC), for Apollo 9.
040934,000007: ## Assembler: yaYUL
040935,000008: ## Reference: Starts on p. 916
040936,000009: ## Contact: Ron Burkey <info@sandroid.org>.
040937,000010: ## Website: www.ibiblio.org/apollo/index.html
040938,000011: ## Mod history: 08/23/04 RSB. Began transcribing.
040939,000012: ## 05/14/05 RSB Corrected website reference above.
040940,000013: ## 2010-10-24 JL Indentation fixes.
040941,000014: ## 2017-01-06 RSB Page numbers now agree with those on the
040942,000015: ## original harcopy, as opposed to the PDF page
040943,000016: ## numbers in 1701.pdf.
040944,000017: ## 2017-01-20 RSB Cross-diff'd comment text (not whitespace)
040945,000018: ## vs the already-proofed corresponding Colossus
040946,000019: ## 237 and Comanche 55 source-code files
040947,000020: ## and corrected errors found.
040948,000021: ##
040949,000022: ## The contents of the "Colossus249" files, in general, are transcribed
040950,000023: ## from a scanned copy of the program listing. Notations on this
040951,000024: ## document read, in part:
040952,000025: ##
040953,000026: ## Assemble revision 249 of AGC program Colossus by NASA
040954,000027: ## 2021111-041. October 28, 1968.
040955,000028: ##
040956,000029: ## This AGC program shall also be referred to as
040957,000030: ## Colossus 1A
040958,000031: ##
040959,000032: ## Prepared by
040960,000033: ## Massachusetts Institute of Technology
040961,000034: ## 75 Cambridge Parkway
040962,000035: ## Cambridge, Massachusetts
040963,000036: ## under NASA contract NAS 9-4065.
040964,000037: ##
040965,000038: ## Refer directly to the online document mentioned above for further information.
040966,000039: ## Please report any errors (relative to the scanned pages) to info@sandroid.org.
040967,000040: ##
040968,000041: ## In some cases, where the source code for Luminary 131 overlaps that of
040969,000042: ## Colossus 249, this code is instead copied from the corresponding Luminary 131
040970,000043: ## source file, and then is proofed to incorporate any changes.
040971,000044:
![]() |
Page 916 |
040973,000046: # NAME....TVCRESTART PACKAGE, CONSISTING OF REDOTVC, ENABL1, 2, CMDSOUT, PHSCHK2, ETC.
040974,000047: # LOG SECTION....TVCRESTART PACKAGE SUBROUTINE....DAPCSM
040975,000048: # MOD BY ENGEL DATE....19 OCT, 1967
040976,000049:
040977,000050: # FUNCTIONAL DESCRIPTION....
040978,000051:
040979,000052: # *RESTART-PROOFS THE TVC DAPS, INCLUDING PITCHDAP, YAWDAP,
040980,000053: # TVCEXECUTIVE, ROLL DAP, TVCINIT4, TVCDAPON, AND STROKE TEST
040981,000054:
040982,000055: # *TVC RESTARTS DESERVE SPECIAL CONSIDERATION IN SEVERAL AREAS.
040983,000056: # RESTART DOWN-TIME IS IMPORTANT BECAUSE OF THE TRANSIENTS INTRODUCED
040984,000057: # BY THE THRUST VECTOR RETURN TO THE ACTUATOR MECHANICAL NULLS
040985,000058: # FOLLOWING TVC- AND OPTICS-ERROR-COUNTER-DISENABLES (CHANNEL 12).
040986,000059: # TVC USES A MIXTURE OF WAITLIST, T5, T6, AND JOB CALLS. THERE IS
040987,000060: # FILTER MEMORY (UP TO 7TH ORDER) TO BE PROTECTED IF WILD TRANSIENTS
040988,000061: # ARE TO BE AVOIDED. SEVERAL COUNTERS ARE INVOLVED FOR TIMING TVC
040989,000062: # EVENTS SUCH AS SWITCHOVER AND STROKE TEST STARTUPS AND RE-STARTUPS.
040990,000063: # THE TVC GAINS ARE DECREMENTED. THE GIMBAL TRIM ESTIMATORS AND THE
040991,000064: # BODY AXIS ATTITUDE ERROR INTEGRATORS INVOLVE DIGITAL SUMMATION.
040992,000065: # DIGITAL DIFFERENTIATORS ARE INVOLVED IN THE BODY AXIS RATE ESTIMA-
040993,000066: # TIONS AND IN THE OUTPUTTING OF ACTUATOR COMMANDS. THERE IS AN
040994,000067: # OFFSET-TRACKER-FILTER TO PROTECT. ETC., ETC.
040995,000068:
040996,000069: # *THOSE QUANTITIES WHICH MUST BE PROTECTED ARE STORED IN TEMPORARY
040997,000070: # REGISTERS AS THEY ARE COMPUTED, FOR UPDATING THE REAL REGISTERS
040998,000071: # DURING COPYCYCLES.
040999,000072:
041000,000073: # *THE SEVERAL COPYCYCLES ARE EACH PROTECTED BY PHASE POINTS AT THEIR
041001,000074: # BEGINNING AND AT THEIR TERMINATION. THE PHASE POINTS ARE SIMPLY
041002,000075: # ..INCR.. INSTRUCTIONS, EITHER ..INCR TVCEXPHS.. FOR COPYCYCLES
041003,000076: # IN THE TVCEXECUTIVE, OR ..INCR TVCPHASE.. FOR THE PITCH AND YAW
041004,000077: # COPYCYCLES. INDEXING ON EACH OF THESE POINTERS THEN PERMITS A
041005,000078: # RETURN TO THE APPROPRIATE RESTART POINTS.
041006,000079:
041007,000080: # *IF A RESTART OCCURS DURING EITHER COPYCYCLE, THAT COPYCYCLE IS
041008,000081: # COMPLETED. THEN THE NORMAL TVCINIT4....DAPINIT....PITCHDAP STARTUP
041009,000082: # SEQUENCE IS CALLED UPON TO GET THINGS GOING AGAIN.
041010,000083:
041011,000084: # *TVC-ENABLE AND OPTICS-ERROR-COUNTER ENABLE MUST BE SET ASAP
041012,000085: # (ALLOWING FOR PROCEDURAL DELAYS). THEN THE ENGINES ARE COMMANDED
041013,000086: # TO THE P,YACTOFF TRIM VALUES. THE DAPS ARE THEN READY TO GO ON THE
041014,000087: # AIR, WITH THE REGULAR STARTUP SEQUENCE, EITHER AT MRCLEAN FOR A
041015,000088: # COMPLETE INITIALIZATION OR AT TVCINIT4 FOR A PARTIAL INITIALIZATION
041016,000089:
041017,000090: # *FOR RESTARTS PRIOR TO THE SETTING OF THE T5 BITS IN IGNOVER THE
041018,000091: # PRE40.6 SECTION OF S40.6 TAKES CARE OF RE-ESTABLISHING TRIMS.
041019,000092:
041020,000093: # *IF A RESTART OCCURS DURING THE TVCEXEC....TVCEXFIN SEQUENCE THE
041021,000094: # COMPUTATIONS WILL BE COMPLETED, STARTING AT THE APPROPRIATE RESTART
041022,000095: # POINT, AFTER THE DAPS ARE READY TO GO ON THE AIR.
041023,000096:
041024,000097: # *IF A RESTART OCCURS PRIOR TO TVCINIT4 (TVCPHASE = -1) E.G. DURING
041025,000098: # THE EARLY DAP INITIALIZATION PHASE, THE DAP STARTUP SEQUENCE IS
041026,000099: # ENTERED AT MRCLEAN FOR A FULL INITIALIZATION.
041027,000100:
041028,000101: # *RESTARTS ARE NOT CRITICAL TO THE ROLL DAP PERFORMANCES HENCE THE
041029,000102: # THE ROLL DAP IS MERELY RESTARTED.
041030,000103:
041031,000104: # *RESTARTS DURING A STROKE TEST (STROKER IS NON-ZERO) WILL CAUSE THE
041032,000105: # STROKE TEST TO BE TERMINATED. A NEW V68 ENTRY WILL BE REQUIRED
![]() |
Page 917 |
041034,000107: # TO GET IT GOING AGAIN (NO AUTOMATIC RESTART).
041035,000108: #
041036,000109: # *REDOTVC IS REACHED FOLLOWING ANY RESTART WHICH FINDS THE T5 BITS
041037,000110: # (BITS 15,14 OF FLAGWRD6) SET FOR TVC. IGNOVER PREPARES TVCPHASE = -1
041038,000111: # AND TVC EXPHS = 0 JUST BEFORE SETTING THESE BITS, JUST BEFORE
041039,000112: # MAKING THE T5 CALL TO TVCDAPON. T.V.N.G. TAKES OVER THE T5 CLOCK
041040,000113: # TO CALL RCSUP/RCSDAPON WHICH RESETS THE T5 BITS (FOR RCS) ON A
041041,000114: # NORMAL SHUTDOWN.
041042,000115:
041043,000116: # CALLING SEQUENCE....T5, IN PARTICULAR BY ELRSKIP OF FRESH START/RESTART
041044,000117:
041045,000118: # NORMAL EXIT MODES....RESUME, NOQRSM, POSTJUMP (TO TVCINIT4 OR MRCLEAN)
041046,000119:
041047,000120: # ALARM OR ABORT EXIT MODES....NONE
041048,000121:
041049,000122: # SUBROUTINES CALLED....
041050,000123:
041051,000124: # *PCOPY+1, YCOPY+1 (PITCH AND YAW COPYCYCLES)
041052,000125:
041053,000126: # *ENABLE1,2, CMDSOUT (RE-ESTABLISH ACTUATOR TRIMS)
041054,000127:
041055,000128: # *MRCLEAN OR TVCINIT4 (TVCDAP INITIALIZATIONS)
041056,000129:
041057,000130: # *EXRSTRT AND TVCEXECUTIVE PHASE POINTS 1 THRU 9
041058,000131:
041059,000132: # *WAITLIST, IBNKCALL, POSTJUMP, ISWCALL
041060,000133:
041061,000134: # OTHER INTERFACES....IGNOVER AND RCSDAPON (T5 BITS), ELRSKIP (CALLS IT)
041062,000135:
041063,000136: # ERASABLE INITIALIZATION REQUIRED....
041064,000137:
041065,000138: # *T5 BITS, TVCPHASE, TVCEXPHS
041066,000139:
041067,000140: # *TVC DAP VARIABLES
041068,000141:
041069,000142: # *OPERATIONS PERFORMED BY REDOTVC ARE BASED ON THE ASSUMPTION THAT
041070,000143: # THE TVC DAPS ARE RUNNING NORMALLY
041071,000144:
041072,000145: # OUTPUT....
041073,000146:
041074,000147: # *PITCH AND YAW TVC DAP COPYCYCLES COMPLETED IF INTERUPTED
041075,000148:
041076,000149: # *TVCEXECUTIVE COMPLETED IF INTERUPTED
041077,000150:
041078,000151: # *STROKE TEST TERMINATED IF INTERRUPTED
041079,000152:
041080,000153: # *ACTUATOR TRIMS RE-ESTABLISHED (ACTUATORS BACK ON THE AIR)
041081,000154:
041082,000155: # *TVC DAP INITIALIZATION AS REQUIRED
041083,000156:
041084,000157: # *ALL TVC DAP OPERATIONS ON THE AIR
041085,000158:
041086,000159: # DERIS....TVC TEMPORARIES IN EBANK6
041087,000160:
041088,000161: 16,3165 BANK 16
041089,000162: 16,2000 SETLOC DAPROLL
041090,000163: 16,2000 BANK
041091,000164: 16,3165 E6,1654 EBANK= TVCPHASE
041092,000165:
041093,000166: 16,3165 COUNT* $$/RSRT
041094,000167: 16,3165 22016 REDOTVC LXCH BANKRUPT # TVC RESTART PACKAGE
![]() |
Page 918 |
041096,000169: 16,3166 00006 EXTEND
041097,000170: 16,3167 22012 QXCH QRUPT # (..TCR.. IN ..FINCOPY..)
041098,000171:
041099,000172: 16,3170 11661 EXECPHS CCS TVCEXPHS # CHECK TVCEXECUTIVE PHASE
041100,000173: 16,3171 13173 TCF +2 # MUST RESTART TVCEXECUTIVE
041101,000174: 16,3172 13177 TCF TVCDAPHS # NO NEED TO RESTART TVCEXECUTIVE
041102,000175:
041103,000176: 16,3173 34334 CAF NINE # 9CS DELAY TO FORCE EXRSTRT TO OCCUR
041104,000177: 16,3174 05140 TC WAITLIST # BEFORE PITCHDAP, AFTER CMDSOUT
041105,000178: 16,3175 E6,1661 EBANK= TVCEXPHS
041106,000179: 16,3175 03271 34066 2CADR EXRSTRT
041107,000180:
041108,000181: 16,3177 47700 TVCDAPHS CS OCT37776 # CHECK BITS 15 AND 1 OF TVCPHASE TO SEE
041109,000182: 16,3200 71654 MASK TVCPHASE # DAP RESTART LOCATION (-1,1,2,3)
041110,000183: 16,3201 10000 CCS A
041111,000184: 16,3202 13256 TCF FINCOPY # FINISH THE COPYCYCLE FIRST
041112,000185: 16,3203 13205 TCF ENABL1 # JUST PREPARE THE OUTCOUNTERS AND GO
041113,000186: 16,3204 13262 TCF TRIM/CMD # (RE-)DO P,YCMD INITIALIZATION FIRST
041114,000187: 16,3205 34703 ENABL1 CAF BIT8 # TVC ENABLE, FOLLOWED BY 40 MS (MIN) WAIT
041115,000188: 16,3206 64700 AD BIT11 # OPTICS DAC DISENGAGE TOO
041116,000189: 16,3207 00006 EXTEND # (ENABL1 ENTRIES..+0,- CCS, FINCOPY)
041117,000190: 16,3210 05012 WOR CHAN12
041118,000191: 16,3211 33275 CAF TVCADDR # WAIT, CALLING ENABL2 (BBCON THERE)
041119,000192: 16,3212 55312 TS T5LOC
041120,000193: 16,3213 33301 CAF TVCADDR +4 # 60 MS (TVCEXADR)
041121,000194: 16,3214 54030 TS TIME5
041122,000195:
041123,000196: 16,3215 15222 TCF RESUME
041124,000197: 16,3216 22016 ENABL2 LXCH BANKRUPT # CONTINUE PREPARATION OF OUTCOUNTERS
041125,000198:
041126,000199: 16,3217 34711 CAF BIT2 # OPTICS ERROR CNTR ENABLE, 4MS MIN WAIT
041127,000200: 16,3220 00006 EXTEND
041128,000201: 16,3221 05012 WOR CHAN12
041129,000202: 16,3222 33277 CAF TVCADDR +2 # WAIT, CALLING CMDSOUT (BBCON THERE)
041130,000203: 16,3223 55312 TS T5LOC
041131,000204: 16,3224 37700 CAF OCT37776 # 20MS
041132,000205: 16,3225 54030 TS TIME5
041133,000206:
041134,000207: 16,3226 15224 TCF NOQRSM
041135,000208: 16,3227 22016 CMDSOUT LXCH BANKRUPT # CONTINUE PREPARATION OF OUTCOUNTERS
041136,000209: 16,3230 00006 EXTEND
041137,000210: 16,3231 22012 QXCH QRUPT
![]() |
Page 919 |
041139,000212: 16,3232 44714 CS ZERO # MOST RECENT ACTUATOR COMMANDS
041140,000213: 16,3233 61631 AD PCMD # (AVOID +0)
041141,000214: 16,3234 54054 TS TVCPITCH
041142,000215: 16,3235 44714 CS ZERO
041143,000216: 16,3236 61632 AD YCMD
041144,000217: 16,3237 54053 TS TVCYAW
041145,000218:
041146,000219: 16,3240 34755 CAF PRIO6 # RELEASE THE COUNTERS (BITS 11,12)
041147,000220: 16,3241 00006 EXTEND
041148,000221: 16,3242 05014 WOR CHAN14
041149,000222:
041150,000223: 16,3243 41654 PHSCHK2 CS TVCPHASE # CHECK TVCPHASE AGAIN
041151,000224: 16,3244 00006 EXTEND
041152,000225: 16,3245 63250 BZMF +3
041153,000226: 16,3246 04574 TC POSTJUMP # IF NEGATIVE, RESTART AT MRCLEAN
041154,000227: 16,3247 36033 CADR MRCLEAN # FOR FULL INITIALIZATION
041155,000228:
041156,000229: 16,3250 11614 CHKSTRK CCS STROKER # CHECK FOR STROKE TEST IN PROGRESS
041157,000230: 16,3251 13266 TCF TSTINITJ # YES, KILL IT
041158,000231: 16,3252 13254 TCF +2 # NO, PROCEED
041159,000232: 16,3253 13266 TCF TSTINITJ # YES, KILL IT
041160,000233:
041161,000234: 16,3254 04574 +4 TC POSTJUMP # IF POSITIVE OR ZERO, RESTART AT
041162,000235: 16,3255 36160 CADR TVCINIT4 # TVCINIT4 (ZEROS TVCPHASE, AND
041163,000236: # CALLS TVC DAPS)
041164,000237: 16,3256 51654 FINCOPY INDEX TVCPHASE # PICK UP THE APPROPRIATE COPYCYCLE
041165,000238: 16,3257 33275 CAF TVCCADR
041166,000239: 16,3260 04637 TCR ISWCALL # RE-ENTER THE COPYCYCLE, RETURN AT END
041167,000240: 16,3261 13205 TCF ENABL1 # NOW PREPARE THE OUTCOUNTERS
041168,000241: 16,3262 00006 TRIM/CMD EXTEND # TVCDAPON INITIALIZATION NOT COMPLETED,
041169,000242: 16,3263 31426 DCA PACTOFF # EG. P,YCMD MAY NOT BE SET. SET...
041170,000243: 16,3264 53632 DXCH PCMD
041171,000244: 16,3265 13205 TCF ENABL1 # NOW PREPARE THE OUTCOUNTERS
041172,000245: 16,3266 34714 TSTINITJ CAF ZERO # DISABLE STROKE TEST (-0 SHOWS PRIOR V68)
041173,000246: 16,3267 55614 TS STROKER # (+0 MEANS NEW V68 REQUIRED FOR STARTUP)
041174,000247: 16,3270 13254 TCF CHKSTRK +4
041175,000248:
041176,000249: 16,3271 51661 EXRSTRT INDEX TVCEXPHS # TVCEXECUTIVE RESTARTS....GO TO
041177,000250: 16,3272 33301 CAF TVCEXADR # APPROPRIATE RESTART POINT
041178,000251: 16,3273 50000 INDEX A
041179,000252: 16,3274 10000 TCF 0
041180,000253:
![]() |
Page 920 |
041182,000255: # TVC RESTART TABLES.... ORDER IS REQUIRED. HI-ORDER WORDS ONLY, OF 2CADRS, SINCE BBCON IS ALREADY THERE.
041183,000256:
041184,000257: 16,3275 16,3275 TVCADDR = TVCCADR # TABLE OF CADRS, UNUSED LOCS FOR GENADRS
041185,000258: 16,3275 03216 TVCCADR GENADR ENABL2 # (FOR T5 CALL, UNUSED TABLE LOC)
041186,000259: 16,3276 40561 +1 CADR PCOPY +1 # PITCH COPYCYCLE
041187,000260: 16,3277 03227 +2 GENADR CMDSOUT # (FOR T5 CALL, UNUSED TABLE LOC)
041188,000261: 16,3300 41037 +3 CADR YCOPY +1 # YAW COPYCYCLE
041189,000262: 16,3301 37772 TVCEXADR OCT 37772 # (UNUSED TABLE LOC, FILL WITH 60MS, T5)
041190,000263: 16,3302 02742 +1 GENADR EXECCOPY +1 # TVCEXECUTIVE RESTART POINTS (ORDERED)
041191,000264: 16,3303 02750 +2 GENADR SWT/COR
041192,000265: 16,3304 03030 +3 GENADR SWTCOPY +1
041193,000266: 16,3305 03050 +4 GENADR TEMPSET
041194,000267: 16,3306 03053 +5 GENADR CORSETUP
041195,000268: 16,3307 03111 +6 GENADR CORCOPY +1
041196,000269: 16,3310 03122 +7 GENADR CNTRCOPY
041197,000270: 16,3311 03125 +8D GENADR STRKUP
041198,000271: 16,3312 03140 +9D GENADR STRKTCPY +1
End of include-file TVCRESTARTS.agc. Parent file is MAIN.agc