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. |
060535,000002: ## Copyright: Public domain.
060536,000003: ## Filename: RESTARTS_ROUTINE.agc
060537,000004: ## Purpose: Part of the source code for Colossus, build 249.
060538,000005: ## It is part of the source code for the Command Module's (CM)
060539,000006: ## Apollo Guidance Computer (AGC), for Apollo 9.
060540,000007: ## Assembler: yaYUL
060541,000008: ## Reference: Starts on p. 1382
060542,000009: ## Contact: Ron Burkey <info@sandroid.org>.
060543,000010: ## Website: www.ibiblio.org/apollo.
060544,000011: ## Mod history: 08/30/04 RSB. Adapted from corresponding Luminary131 file.
060545,000012: ## 2010-10-24 JL Added missing # in comment.
060546,000013: ## 2017-01-06 RSB Page numbers now agree with those on the
060547,000014: ## original harcopy, as opposed to the PDF page
060548,000015: ## numbers in 1701.pdf.
060549,000016: ## 2017-01-18 RSB Cross-diff'd comment text (not whitespace)
060550,000017: ## vs the already-proofed corresponding Colossus
060551,000018: ## 237 and Comanche 55 source-code files
060552,000019: ## and corrected errors found.
060553,000020: ## 2017-03-14 RSB Comment-text fixes noted in proofing Luminary 116.
060554,000021:
060555,000022: ## The contents of the "Colossus249" files, in general, are transcribed
060556,000023: ## from a scanned copy of the program listing. Notations on this
060557,000024: ## document read, in part:
060558,000025: ##
060559,000026: ## Assemble revision 249 of AGC program Colossus by NASA
060560,000027: ## 2021111-041. October 28, 1968.
060561,000028: ##
060562,000029: ## This AGC program shall also be referred to as
060563,000030: ## Colossus 1A
060564,000031: ##
060565,000032: ## Prepared by
060566,000033: ## Massachusetts Institute of Technology
060567,000034: ## 75 Cambridge Parkway
060568,000035: ## Cambridge, Massachusetts
060569,000036: ## under NASA contract NAS 9-4065.
060570,000037: ##
060571,000038: ## Refer directly to the online document mentioned above for further information.
060572,000039: ## Please report any errors (relative to the scanned pages) to info@sandroid.org.
060573,000040: ##
060574,000041: ## In some cases, where the source code for Luminary 131 overlaps that of
060575,000042: ## Colossus 249, this code is instead copied from the corresponding Luminary 131
060576,000043: ## source file, and then is proofed to incorporate any changes.
060577,000044: ## source file, and then is proofed to incorporate any changes.
060578,000045:
![]() |
Page 1382 |
060580,000047: 01,3520 BANK 01
060581,000048: 01,2000 SETLOC RESTART
060582,000049: 01,2000 BANK
060583,000050:
060584,000051: 01,3520 E3,1436 EBANK= PHSNAME1 # GOPROG MUST SWITCH TO THIS EBANK
060585,000052:
060586,000053: 01,3520 COUNT 01/RSROU
060587,000054:
060588,000055: 01,3520 30161 RESTARTS CA MPAC +5 # GET GROUP NUMBER -1
060589,000056: 01,3521 60000 DOUBLE # SAVE FOR INDEXING
060590,000057: 01,3522 54155 TS TEMP2G
060591,000058:
060592,000059: 01,3523 33762 CA PHS2CADR # SET UP EXIT IN CASE IT IS AN EVEN
060593,000060: 01,3524 54157 TS TEMPSWCH # TABLE PHASE
060594,000061:
060595,000062: 01,3525 33557 CA RTRNCADR # TO SAVE TIME ASSUME IT WILL GET NEXT
060596,000063: 01,3526 54707 TS GOLOC +2 # GROUP AFTER THIS
060597,000064:
060598,000065: 01,3527 30154 CA TEMPPHS
060599,000066: 01,3530 74744 MASK OCT1400
060600,000067: 01,3531 10000 CCS A # IS IT A VARIABLE OR TABLE RESTART
060601,000068: 01,3532 13543 TCF ITSAVAR # IT:S A VARIABLE RESTART
060602,000069:
060603,000070: 01,3533 10154 GETPART2 CCS TEMPPHS # IS IT AN X.1 RESTART
060604,000071: 01,3534 10000 CCS A
060605,000072: 01,3535 13643 TCF ITSATBL # NO, ITS A TABLE RESTART
060606,000073:
060607,000074: 01,3536 34761 CA PRIO14 # IT IS AN X.1 RESTART, THEREFORE START
060608,000075: 01,3537 05042 TC FINDVAC # THE DISPLAY RESTART JOB
060609,000076: 01,3540 E3,1400 EBANK= LST1
060610,000077: 01,3540 03165 20103 2CADR INITDSP
060611,000078:
060612,000079: 01,3542 03557 TC RTRNCADR # FINISHED WITH THIS GROUP, GET NEXT ONE
060613,000080:
060614,000081: 01,3543 74744 ITSAVAR MASK OCT1400 # IS IT TYPE B ?
060615,000082: 01,3544 10000 CCS A
060616,000083: 01,3545 13614 TCF ITSLIKEB # YES, IT IS TYPE B
060617,000084:
060618,000085: 01,3546 00006 EXTEND # STORE THE JOB (OR TASK) 2CADR FOR EXIT
060619,000086: 01,3547 50155 NDX TEMP2G
060620,000087: 01,3550 31437 DCA PHSNAME1
060621,000088: 01,3551 52706 DXCH GOLOC
060622,000089:
060623,000090: 01,3552 30154 CA TEMPPHS # SEE IF THIS IS A JOB, TASK, OR A LONGCAL
060624,000091: 01,3553 74716 MASK OCT7
060625,000092: 01,3554 67715 AD MINUS2
060626,000093: 01,3555 10000 CCS A
060627,000094: 01,3556 13726 TCF ITSLNGCL # ITS A LONGCALL
060628,000095:
![]() |
Page 1383 |
060630,000097: 01,3557 04570 RTRNCADR TC SWRETURN # CANT GET HERE
060631,000098: 01,3560 13562 TCF ITSAWAIT
060632,000099:
060633,000100: 01,3561 13627 TCF ITSAJOB # ITS A JOB
060634,000101:
060635,000102: 01,3562 33766 ITSAWAIT CA WTLTCADR # SET UP WAITLIST CALL
060636,000103: 01,3563 54704 TS GOLOC -1
060637,000104:
060638,000105: 01,3564 50155 NDX TEMP2G # DIRECTLY STORED
060639,000106: 01,3565 31054 CA PHSPRDT1
060640,000107: 01,3566 10000 TIMETEST CCS A # IS IT AN IMMEDIATE RESTART
060641,000108: 01,3567 24000 INCR A # NO,
060642,000109: 01,3570 13573 TCF FINDTIME # FIND OUT WHEN IT SHOULD BEGIN
060643,000110:
060644,000111: 01,3571 15367 TCF ITSINDIR # STORED INDIRECTLY
060645,000112:
060646,000113: 01,3572 13612 TCF IMEDIATE # IT WANTS AN IMMEDIATE RESTART
060647,000114:
060648,000115: # ***** THIS MUST BE IN FIXED FIXED *****
060649,000116:
060650,000117: 5367 BLOCK 02
060651,000118: 4000 SETLOC FFTAG2
060652,000119: 4000 BANK
060653,000120:
060654,000121: 5367 COUNT 02/RSROU
060655,000122:
060656,000123: 5367 22706 ITSINDIR LXCH GOLOC +1 # GET THE CORRECT E BANK IN CASE THIS IS
060657,000124: 5370 22006 LXCH BB # SWITCHED ERRASIBLE
060658,000125:
060659,000126: 5371 50000 NDX A # GET THE TIME INDIRECTLY
060660,000127: 5372 30001 CA 1
060661,000128:
060662,000129: 5373 22006 LXCH BB # RESTORE THE BB AND GOLOC
060663,000130: 5374 22706 LXCH GOLOC +1
060664,000131:
060665,000132: 5375 13573 TCF FINDTIME # FIND OUT WHEN IT SHOULD BEGIN
060666,000133:
060667,000134: # ***** YOU MAY RETURN TO SWITCHED FIXED *****
060668,000135:
060669,000136: 01,3573 BANK 01
060670,000137: 01,2000 SETLOC RESTART
060671,000138: 01,2000 BANK
060672,000139:
060673,000140: 01,3573 COUNT 01/RSROU
060674,000141:
060675,000142: 01,3573 40000 FINDTIME COM # MAKE NEGITIVE SINCE IT WILL BE SUBTRACTD
060676,000143: 01,3574 54001 TS L # AND SAVE
060677,000144: 01,3575 50155 NDX TEMP2G
060678,000145: 01,3576 41053 CS TBASE1
060679,000146: 01,3577 00006 EXTEND
![]() |
Page 1384 |
060681,000148: 01,3600 60025 SU TIME1
060682,000149: 01,3601 10000 CCS A
060683,000150: 01,3602 40000 COM
060684,000151: 01,3603 67700 AD OCT37776
060685,000152: 01,3604 64712 AD ONE
060686,000153: 01,3605 60001 AD L
060687,000154: 01,3606 10000 CCS A
060688,000155: 01,3607 34714 CA ZERO
060689,000156: 01,3610 13612 TCF +2
060690,000157: 01,3611 13612 TCF +1
060691,000158: 01,3612 64712 IMEDIATE AD ONE
060692,000159: 01,3613 00704 TC GOLOC -1
060693,000160: 01,3614 33557 ITSLIKEB CA RTRNCADR # TYPE B, SO STORE RETURN IN
060694,000161: 01,3615 54157 TS TEMPSWCH # TEMPSWCH IN CASE OF AN EVEN PHASE
060695,000162:
060696,000163: 01,3616 33763 CA PRT2CADR # SET UP EXIT TO GET TABLE PART OF THIS
060697,000164: 01,3617 54707 TS GOLOC +2 # VARIABLE TYPE OF PHASE
060698,000165:
060699,000166: 01,3620 30154 CA TEMPPHS # MAKE THE PHASE LOOK RIGHT FOR THE TABLE
060700,000167: 01,3621 76043 MASK OCT177 # PART OF THIS VARIABLE PHASE
060701,000168: 01,3622 54154 TS TEMPPHS
060702,000169:
060703,000170: 01,3623 00006 EXTEND
060704,000171: 01,3624 50155 NDX TEMP2G # OBTAIN THE JOB:S 2CADR
060705,000172: 01,3625 31437 DCA PHSNAME1
060706,000173: 01,3626 52706 DXCH GOLOC
060707,000174:
060708,000175: 01,3627 50155 ITSAJOB NDX TEMP2G # NOW ADD THE PRIORITY AND LET:S GO
060709,000176: 01,3630 31054 CA PHSPRDT1
060710,000177: 01,3631 54704 CHKNOVAC TS GOLOC -1 # SAVE PRIO UNTIL WE SEE IF ITS
060711,000178: 01,3632 00006 EXTEND # A FINDVAC OR A NOVAC
060712,000179: 01,3633 63637 BZMF ITSNOVAC
060713,000180:
060714,000181: 01,3634 33765 CAF FVACCADR # POSITIVE, SET UP FINDVAC CALL.
060715,000182: 01,3635 56704 XCH GOLOC -1 # PICK UP PRIO,
060716,000183: 01,3636 00704 TC GOLOC -1 # AND GO
060717,000184:
060718,000185: 01,3637 33767 ITSNOVAC CAF NOVACADR # NEGATIVE,
060719,000186: 01,3640 56704 XCH GOLOC -1 # SET UP NOVAC CALL,
060720,000187: 01,3641 40000 COM # CORRECT PRIO,
060721,000188: 01,3642 00704 TC GOLOC -1 # AND GO
060722,000189:
060723,000190: 01,3643 54020 ITSATBL TS CYR # FIND OUT IF THE PHASE IS ODD OR EVEN
060724,000191: 01,3644 10020 CCS CYR
060725,000192: 01,3645 13646 TCF +1 # IT:S EVEN
060726,000193: 01,3646 13744 TCF ITSEVEN
060727,000194:
060728,000195: 01,3647 33557 CA RTRNCADR # IN CASE THIS IS THE SECOND PART OF A
060729,000196: 01,3650 54707 TS GOLOC +2 # TYPE B RESTART, WE NEED PROPER EXIT
![]() |
Page 1385 |
060731,000198: 01,3651 30154 CA TEMPPHS # SET UP POINTER FOR FINDING OUR PLACE IN
060732,000199: 01,3652 54021 TS SR # THE RESTART TABLES
060733,000200: 01,3653 60021 AD SR
060734,000201: 01,3654 50155 NDX TEMP2G
060735,000202: 01,3655 62001 AD SIZETAB +1
060736,000203: 01,3656 54156 TS POINTER
060737,000204:
060738,000205: 01,3657 00006 CONTBL2 EXTEND # FIND OUT WHAT:S IN THE TABLE
060739,000206: 01,3660 50156 NDX POINTER
060740,000207: 01,3661 32002 DCA CADRTAB # GET THE 2CADR
060741,000208:
060742,000209: 01,3662 22706 LXCH GOLOC +1 # STORE THE BB INFORMATION
060743,000210:
060744,000211: 01,3663 10000 CCS A # IS IT A JOB OR IS IT TIMED
060745,000212: 01,3664 24000 INCR A # POSITIVE, MUST BE A JOB
060746,000213: 01,3665 13740 TCF ITSAJOB2
060747,000214:
060748,000215: 01,3666 24000 INCR A # MUST BE EITHER A WAITLIST OR LONGCALL
060749,000216: 01,3667 54705 TS GOLOC # LET-S STORE THE CORRECT CADR
060750,000217:
060751,000218: 01,3670 33766 CA WTLTCADR # SET UP OUR EXIT TO WAITLIST
060752,000219: 01,3671 54704 TS GOLOC -1
060753,000220:
060754,000221: 01,3672 30706 CA GOLOC +1 # NOW FIND OUT IF IT IS A WAITLIST CALL
060755,000222: 01,3673 74701 MASK BIT10 # THIS SHOULD BE ONE IF WE HAVE -BB
060756,000223: 01,3674 10000 CCS A # FOR THAT MATTER SO SHOULD BE BITS 9,8,7,
060757,000224: # 6,5, AND LAST BUT NOT LEAST (PERHAPS NOT
060758,000225: # IN IMPORTANCE ANYWAY. BIT 4
060759,000226: 01,3675 13733 TCF ITSWTLST # IT IS A WAITLIST CALL
060760,000227:
060761,000228: 01,3676 50156 NDX POINTER # OBTAIN THE ORIGINAL DELTA T
060762,000229: 01,3677 32000 CA PRDTTAB # ADDRESS FOR THIS LONGCALL
060763,000230:
060764,000231: 01,3700 15376 TCF ITSLGCL1 # NOW GO GET THE DELTA TIME
060765,000232:
060766,000233: # ***** THIS MUST BE IN FIXED FIXED *****
060767,000234:
060768,000235: 5376 BLOCK 02
060769,000236: 4000 SETLOC FFTAG2
060770,000237: 4000 BANK
060771,000238:
060772,000239: 5376 COUNT 02/RSROU
060773,000240:
060774,000241: 5376 22706 ITSLGCL1 LXCH GOLOC +1 # OBTAIN THE CORRECT E BANK
060775,000242: 5377 22006 LXCH BB
060776,000243: 5400 22706 LXCH GOLOC +1 # AND PRESERVE OUR E AND F BANKS
060777,000244:
060778,000245: 5401 00006 EXTEND # GET THE DELTA TIME
060779,000246: 5402 50000 NDX A
060780,000247: 5403 30001 DCA 0
![]() |
Page 1386 |
060782,000249: 5404 22706 LXCH GOLOC +1 # RESTORE OUR E AND F BANK
060783,000250: 5405 22006 LXCH BB # RESTORE THE TASKS E AND F BANKS
060784,000251: 5406 22706 LXCH GOLOC +1 # AND PRESERVE OUR L
060785,000252: 5407 13701 TCF ITSLGCL2 # NOW LET:S PROCESS THIS LONGCALL
060786,000253:
060787,000254: # ***** YOU MAY RETURN TO SWITCHED FIXED *****
060788,000255:
060789,000256: 01,3701 BANK 01
060790,000257: 01,2000 SETLOC RESTART
060791,000258: 01,2000 BANK
060792,000259:
060793,000260: 01,3701 COUNT 01/RSROU
060794,000261: 01,3701 53140 ITSLGCL2 DXCH LONGTIME
060795,000262:
060796,000263: 01,3702 00006 EXTEND # CALCULATE TIME LEFT
060797,000264: 01,3703 40025 DCS TIME2
060798,000265: 01,3704 21140 DAS LONGTIME
060799,000266: 01,3705 00006 EXTEND
060800,000267: 01,3706 31136 DCA LONGBASE
060801,000268: 01,3707 21140 DAS LONGTIME
060802,000269:
060803,000270: 01,3710 11137 CCS LONGTIME # FIND OUT HOW THIS SHOULD BE RESTARTED
060804,000271: 01,3711 13721 TCF LONGCLCL
060805,000272: 01,3712 13714 TCF +2
060806,000273: 01,3713 13607 TCF IMEDIATE -3
060807,000274: 01,3714 11140 CCS LONGTIME +1
060808,000275: 01,3715 13721 TCF LONGCLCL
060809,000276: 01,3716 13717 NOOP # CAN:T GET HERE *********
060810,000277: 01,3717 13607 TCF IMEDIATE -3
060811,000278: 01,3720 13612 TCF IMEDIATE
060812,000279:
060813,000280: 01,3721 33764 LONGCLCL CA LGCLCADR # WE WILL GO TO LONGCALL
060814,000281: 01,3722 54704 TS GOLOC -1
060815,000282:
060816,000283: 01,3723 00006 EXTEND # PREPARE OUR ENTRY TO LONGCALL
060817,000284: 01,3724 31140 DCA LONGTIME
060818,000285: 01,3725 00704 TC GOLOC -1
060819,000286:
060820,000287: 01,3726 33766 ITSLNGCL CA WTLTCADR # ASSUME IT WILL GO TO WAITLIST
060821,000288: 01,3727 54704 TS GOLOC -1
060822,000289:
060823,000290: 01,3730 50155 NDX TEMP2G
060824,000291: 01,3731 41054 CS PHSPRDT1 # GET THE DELTA T ADDRESS
060825,000292:
060826,000293: 01,3732 15376 TCF ITSLGCL1 # NOW GET THE DELTA TIME
060827,000294:
060828,000295: 01,3733 40706 ITSWTLST CS GOLOC +1 # CORRECT THE BBCON INFORMATION
060829,000296: 01,3734 54706 TS GOLOC +1
![]() |
Page 1387 |
060831,000298: 01,3735 50156 NDX POINTER # GET THE DT AND FIND OUT IF IT WAS STORED
060832,000299: 01,3736 32000 CA PRDTTAB # DIRECTLY OR INDIRECTLY
060833,000300:
060834,000301: 01,3737 13566 TCF TIMETEST # FIND OUT HOW THE TIME IS STORED
060835,000302:
060836,000303: 01,3740 56705 ITSAJOB2 XCH GOLOC # STORE THE CADR
060837,000304:
060838,000305: 01,3741 50156 NDX POINTER # ADD THE PRIORITY AND LET:S GO
060839,000306: 01,3742 32000 CA PRDTTAB
060840,000307:
060841,000308: 01,3743 13631 TCF CHKNOVAC
060842,000309:
060843,000310: 01,3744 30157 ITSEVEN CA TEMPSWCH # SET UP FOR EITHER THE SECOND PART OF THE
060844,000311: 01,3745 54707 TS GOLOC +2 # TABLE, OR A RETURN FOR THE NEXT GROUP
060845,000312:
060846,000313: 01,3746 50155 NDX TEMP2G # SET UP POINTER FOR OUR LOCATION WITHIN
060847,000314: 01,3747 32000 CA SIZETAB # THE TABLE
060848,000315: 01,3750 60154 AD TEMPPHS # THIS MAY LOOK BAD BUT LET:S SEE YOU DO
060849,000316: 01,3751 60154 AD TEMPPHS # BETTER IN TIME OR NUMBERR OF LOCATIONS
060850,000317: 01,3752 60154 AD TEMPPHS
060851,000318: 01,3753 54156 TS POINTER
060852,000319:
060853,000320: 01,3754 13657 TCF CONTBL2 # NOW PROCESS WHAT IS IN THE TABLE
060854,000321:
060855,000322: 01,3755 36214 PHSPART2 CA THREE # SET THE POINTER FOR THE SECOND HALF OF
060856,000323: 01,3756 26156 ADS POINTER # THE TABLE
060857,000324:
060858,000325: 01,3757 33557 CA RTRNCADR # THIS WILL BE OUR LAST TIME THROUGH THE
060859,000326: 01,3760 54707 TS GOLOC +2 # EVEN TABLE, SO AFTER IT GET THE NEXT
060860,000327: # GROUP
060861,000328: 01,3761 13657 TCF CONTBL2 # SO LET:S GET THE SECOND ENTRY IN THE TBL
060862,000329:
060863,000330: 01,3762 0154 TEMPPHS EQUALS MPAC
060864,000331: 01,3762 0155 TEMP2G EQUALS MPAC +1
060865,000332: 01,3762 0156 POINTER EQUALS MPAC +2
060866,000333: 01,3762 0157 TEMPSWCH EQUALS MPAC +3
060867,000334: 01,3762 0705 GOLOC EQUALS VAC5 +20D
060868,000335: 01,3762 7715 MINUS2 EQUALS NEG2
060869,000336: 01,3762 6043 OCT177 EQUALS LOW7
060870,000337:
060871,000338: 01,3762 03755 PHS2CADR GENADR PHSPART2
060872,000339: 01,3763 03533 PRT2CADR GENADR GETPART2
060873,000340: 01,3764 05231 LGCLCADR GENADR LONGCALL
060874,000341: 01,3765 05042 FVACCADR GENADR FINDVAC
060875,000342: 01,3766 05140 WTLTCADR GENADR WAITLIST
060876,000343: 01,3767 05027 NOVACADR GENADR NOVAC
060877,000344:
060878,000345:
060879,000346:
060880,000347:
End of include-file RESTARTS_ROUTINE.agc. Parent file is MAIN.agc