Source Code
![]() |
These source-code files were from the printout at the MIT Museum, with many thanks
to Deborah Douglas, the Museum's Curator of Science and Technology, for releasing
it to us. The printout was digitally photographed by Paul Fjeld. A team of
volunteers transcribed the source code manually from these images or, where
appropriate, modified already-transcribed but similar source Luminary 131 (Apollo 13)
source code to agree with the images from the printout. 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:GAP: ASSEMBLE REVISION 001 OF AGC PROGRAM LMY99 BY NASA 2021112-061 16:27 JULY 14,1969Note that the date is the date of the printout, not the date of the program revision. |
055937,000002: ## Copyright: Public domain.
055938,000003: ## Filename: RESTARTS_ROUTINE.agc
055939,000004: ## Purpose: Part of the source code for Luminary 1A build 099.
055940,000005: ## It is part of the source code for the Lunar Module's (LM)
055941,000006: ## Apollo Guidance Computer (AGC), for Apollo 11.
055942,000007: ## Assembler: yaYUL
055943,000008: ## Contact: Onno Hommes <ohommes@cmu.edu>.
055944,000009: ## Website: www.ibiblio.org/apollo.
055945,000010: ## Pages: 1303-1309
055946,000011: ## Mod history: 2009-05-27 OH Transcribed from page images.
055947,000012: ## 2016-12-18 RSB Proofed text comments with octopus/ProoferComments
055948,000013: ## and corrected the errors found.
055949,000014: ## 2017-03-14 RSB Comment-text fixes noted in proofing Luminary 116.
055950,000015: ## 2017-03-16 RSB Comment-text fixes identified in 5-way
055951,000016: ## side-by-side diff of Luminary 69/99/116/131/210.
055952,000017:
055953,000018: ## This source code has been transcribed or otherwise adapted from
055954,000019: ## digitized images of a hardcopy from the MIT Museum. The digitization
055955,000020: ## was performed by Paul Fjeld, and arranged for by Deborah Douglas of
055956,000021: ## the Museum. Many thanks to both. The images (with suitable reduction
055957,000022: ## in storage size and consequent reduction in image quality as well) are
055958,000023: ## available online at www.ibiblio.org/apollo. If for some reason you
055959,000024: ## find that the images are illegible, contact me at info@sandroid.org
055960,000025: ## about getting access to the (much) higher-quality images which Paul
055961,000026: ## actually created.
055962,000027: ##
055963,000028: ## Notations on the hardcopy document read, in part:
055964,000029: ##
055965,000030: ## Assemble revision 001 of AGC program LMY99 by NASA 2021112-61
055966,000031: ## 16:27 JULY 14, 1969
055967,000032:
![]() |
Page 1303 |
055969,000034: 01,3526 BANK 01
055970,000035: 01,2000 SETLOC RESTART
055971,000036: 01,2000 BANK
055972,000037:
055973,000038: 01,3526 E3,1436 EBANK= PHSNAME1 # GOPROG MUST SWITCH TO THIS EBANK
055974,000039:
055975,000040: 01,3526 COUNT* $$/RSROU
055976,000041: 01,3526 30161 RESTARTS CA MPAC +5 # GET GROUP NUMBER -1
055977,000042: 01,3527 60000 DOUBLE # SAVE FOR INDEXING
055978,000043: 01,3530 54155 TS TEMP2G
055979,000044:
055980,000045: 01,3531 33770 CA PHS2CADR # SET UP EXIT IN CASE IT IS AN EVEN
055981,000046: 01,3532 54157 TS TEMPSWCH # TABLE PHASE
055982,000047:
055983,000048: 01,3533 33565 CA RTRNCADR # TO SAVE TIME ASSUME IT WILL GET NEXT
055984,000049: 01,3534 54707 TS GOLOC +2 # GROUP AFTER THIS
055985,000050:
055986,000051: 01,3535 30154 CA TEMPPHS
055987,000052: 01,3536 75007 MASK OCT1400
055988,000053: 01,3537 10000 CCS A # IS IT A VARIABLE OR TABLE RESTART
055989,000054: 01,3540 13551 TCF ITSAVAR # IT:S A VARIABLE RESTART
055990,000055:
055991,000056: 01,3541 10154 GETPART2 CCS TEMPPHS # IS IT AN X.1 RESTART
055992,000057: 01,3542 10000 CCS A
055993,000058: 01,3543 13651 TCF ITSATBL # NO, ITS A TABLE RESTART
055994,000059:
055995,000060: 01,3544 35024 CA PRIO14 # IT IS AN X.1 RESTART, THEREFORE START
055996,000061: 01,3545 05105 TC FINDVAC # THE DISPLAY RESTART JOB
055997,000062: 01,3546 E3,1400 EBANK= LST1
055998,000063: 01,3546 03037 20103 2CADR INITDSP
055999,000064:
056000,000065: 01,3550 03565 TC RTRNCADR # FINISHED WITH THIS GROUP, GET NEXT ONE
056001,000066:
056002,000067: 01,3551 75007 ITSAVAR MASK OCT1400 # IS IT TYPE B ?
056003,000068: 01,3552 10000 CCS A
056004,000069: 01,3553 13622 TCF ITSLIKEB # YES, IT IS TYPE B
056005,000070:
056006,000071: 01,3554 00006 EXTEND # STORE THE JOB (OR TASK) 2CADR FOR EXIT
056007,000072: 01,3555 50155 NDX TEMP2G
056008,000073: 01,3556 31437 DCA PHSNAME1
056009,000074: 01,3557 52706 DXCH GOLOC
056010,000075:
056011,000076: 01,3560 30154 CA TEMPPHS # SEE IF THIS IS A JOB, TASK, OR A LONGCAL
056012,000077: 01,3561 74757 MASK OCT7
056013,000078: 01,3562 67746 AD MINUS2
056014,000079: 01,3563 10000 CCS A
056015,000080: 01,3564 13734 TCF ITSLNGCL # ITS A LONGCALL
056016,000081:
056017,000082: 01,3565 04631 RTRNCADR TC SWRETURN # CANT GET HERE
![]() |
Page 1304 |
056019,000084: 01,3566 13570 TCF ITSAWAIT
056020,000085:
056021,000086: 01,3567 13635 TCF ITSAJOB # ITS A JOB
056022,000087:
056023,000088: 01,3570 33774 ITSAWAIT CA WTLTCADR # SET UP WAITLIST CALL
056024,000089: 01,3571 54704 TS GOLOC -1
056025,000090:
056026,000091: 01,3572 50155 NDX TEMP2G # DIRECTLY STORED
056027,000092: 01,3573 31054 CA PHSPRDT1
056028,000093: 01,3574 10000 TIMETEST CCS A # IS IT AN IMMEDIATE RESTART
056029,000094: 01,3575 24000 INCR A # NO,
056030,000095: 01,3576 13601 TCF FINDTIME # FIND OUT WHEN IT SHOULD BEGIN
056031,000096:
056032,000097: 01,3577 15436 TCF ITSINDIR # STORED INDIRECTLY
056033,000098:
056034,000099: 01,3600 13620 TCF IMEDIATE # IT WANTS AN IMMEDIATE RESTART
056035,000100:
056036,000101: # ***** THIS MUST BE IN FIXED FIXED *****
056037,000102:
056038,000103: 5436 BLOCK 02
056039,000104: 4000 SETLOC FFTAG2
056040,000105: 4000 BANK
056041,000106:
056042,000107: 5436 COUNT* $$/RSROU
056043,000108: 5436 22706 ITSINDIR LXCH GOLOC +1 # GET THE CORRECT E BANK IN CASE THIS IS
056044,000109: 5437 22006 LXCH BB # SWITCHED ERRASIBLE
056045,000110:
056046,000111: 5440 50000 NDX A # GET THE TIME INDIRECTLY
056047,000112: 5441 30001 CA 1
056048,000113:
056049,000114: 5442 22006 LXCH BB # RESTORE THE BB AND GOLOC
056050,000115: 5443 22706 LXCH GOLOC +1
056051,000116:
056052,000117: 5444 13601 TCF FINDTIME # FIND OUT WHEN IT SHOULD BEGIN
056053,000118:
056054,000119: # ***** YOU MAY RETURN TO SWITCHED FIXED *****
056055,000120:
056056,000121: 01,3601 BANK 01
056057,000122: 01,2000 SETLOC RESTART
056058,000123: 01,2000 BANK
056059,000124:
056060,000125: 01,3601 COUNT* $$/RSROU
056061,000126: 01,3601 40000 FINDTIME COM # MAKE NEGITIVE SINCE IT WILL BE SUBTRACTD
056062,000127: 01,3602 54001 TS L # AND SAVE
056063,000128: 01,3603 50155 NDX TEMP2G
056064,000129: 01,3604 41053 CS TBASE1
056065,000130: 01,3605 00006 EXTEND
056066,000131: 01,3606 60025 SU TIME1
056067,000132: 01,3607 10000 CCS A
056068,000133: 01,3610 40000 COM
![]() |
Page 1305 |
056070,000135: 01,3611 67731 AD OCT37776
056071,000136: 01,3612 64753 AD ONE
056072,000137: 01,3613 60001 AD L
056073,000138: 01,3614 10000 CCS A
056074,000139: 01,3615 34755 CA ZERO
056075,000140: 01,3616 13620 TCF +2
056076,000141: 01,3617 13620 TCF +1
056077,000142: 01,3620 64753 IMEDIATE AD ONE
056078,000143: 01,3621 00704 TC GOLOC -1
056079,000144: 01,3622 33565 ITSLIKEB CA RTRNCADR # TYPE B, SO STORE RETURN IN
056080,000145: 01,3623 54157 TS TEMPSWCH # TEMPSWCH IN CASE OF AN EVEN PHASE
056081,000146:
056082,000147: 01,3624 33771 CA PRT2CADR # SET UP EXIT TO GET TABLE PART OF THIS
056083,000148: 01,3625 54707 TS GOLOC +2 # VARIABLE TYPE OF PHASE
056084,000149:
056085,000150: 01,3626 30154 CA TEMPPHS # MAKE THE PHASE LOOK RIGHT FOR THE TABLE
056086,000151: 01,3627 76074 MASK OCT177 # PART OF THIS VARIABLE PHASE
056087,000152: 01,3630 54154 TS TEMPPHS
056088,000153:
056089,000154: 01,3631 00006 EXTEND
056090,000155: 01,3632 50155 NDX TEMP2G # OBTAIN THE JOB:S 2CADR
056091,000156: 01,3633 31437 DCA PHSNAME1
056092,000157: 01,3634 52706 DXCH GOLOC
056093,000158:
056094,000159: 01,3635 50155 ITSAJOB NDX TEMP2G # NOW ADD THE PRIORITY AND LET:S GO
056095,000160: 01,3636 31054 CA PHSPRDT1
056096,000161: 01,3637 54704 CHKNOVAC TS GOLOC -1 # SAVE PRIO UNTIL WE SEE IF ITS
056097,000162: 01,3640 00006 EXTEND # A FINDVAC OR A NOVAC
056098,000163: 01,3641 63645 BZMF ITSNOVAC
056099,000164:
056100,000165: 01,3642 33773 CAF FVACCADR # POSITIVE, SET UP FINDVAC CALL.
056101,000166: 01,3643 56704 XCH GOLOC -1 # PICK UP PRIO,
056102,000167: 01,3644 00704 TC GOLOC -1 # AND GO
056103,000168:
056104,000169: 01,3645 33775 ITSNOVAC CAF NOVACADR # NEGATIVE,
056105,000170: 01,3646 56704 XCH GOLOC -1 # SET UP NOVAC CALL,
056106,000171: 01,3647 40000 COM # CORRECT PRIO,
056107,000172: 01,3650 00704 TC GOLOC -1 # AND GO
056108,000173:
056109,000174: 01,3651 54020 ITSATBL TS CYR # FIND OUT IF THE PHASE IS ODD OR EVEN
056110,000175: 01,3652 10020 CCS CYR
056111,000176: 01,3653 13654 TCF +1 # IT:S EVEN
056112,000177: 01,3654 13752 TCF ITSEVEN
056113,000178:
056114,000179: 01,3655 33565 CA RTRNCADR # IN CASE THIS IS THE SECOND PART OF A
056115,000180: 01,3656 54707 TS GOLOC +2 # TYPE B RESTART, WE NEED PROPER EXIT
056116,000181:
056117,000182: 01,3657 30154 CA TEMPPHS # SET UP POINTER FOR FINDING OUR PLACE IN
056118,000183: 01,3660 54021 TS SR # THE RESTART TABLES
056119,000184: 01,3661 60021 AD SR
![]() |
Page 1306 |
056121,000186: 01,3662 50155 NDX TEMP2G
056122,000187: 01,3663 62003 AD SIZETAB +1
056123,000188: 01,3664 54156 TS POINTER
056124,000189:
056125,000190: 01,3665 00006 CONTBL2 EXTEND # FIND OUT WHAT:S IN THE TABLE
056126,000191: 01,3666 50156 NDX POINTER
056127,000192: 01,3667 32002 DCA CADRTAB # GET THE 2CADR
056128,000193:
056129,000194: 01,3670 22706 LXCH GOLOC +1 # STORE THE BB INFORMATION
056130,000195:
056131,000196: 01,3671 10000 CCS A # IS IT A JOB OR IS IT TIMED
056132,000197: 01,3672 24000 INCR A # POSITIVE, MUST BE A JOB
056133,000198: 01,3673 13746 TCF ITSAJOB2
056134,000199:
056135,000200: 01,3674 24000 INCR A # MUST BE EITHER A WAITLIST OR LONGCALL
056136,000201: 01,3675 54705 TS GOLOC # LET-S STORE THE CORRECT CADR
056137,000202:
056138,000203: 01,3676 33774 CA WTLTCADR # SET UP OUR EXIT TO WAITLIST
056139,000204: 01,3677 54704 TS GOLOC -1
056140,000205:
056141,000206: 01,3700 30706 CA GOLOC +1 # NOW FIND OUT IF IT IS A WAITLIST CALL
056142,000207: 01,3701 74742 MASK BIT10 # THIS SHOULD BE ONE IF WE HAVE -BB
056143,000208: 01,3702 10000 CCS A # FOR THAT MATTER SO SHOULD BE BITS 9,8,7,
056144,000209: # 6,5, AND LAST BUT NOT LEAST (PERHAPS NOT
056145,000210: # IN IMPORTANCE ANYWAY. BIT 4
056146,000211: 01,3703 13741 TCF ITSWTLST # IT IS A WAITLIST CALL
056147,000212:
056148,000213: 01,3704 50156 NDX POINTER # OBTAIN THE ORIGINAL DELTA T
056149,000214: 01,3705 32000 CA PRDTTAB # ADDRESS FOR THIS LONGCALL
056150,000215:
056151,000216: 01,3706 15445 TCF ITSLGCL1 # NOW GO GET THE DELTA TIME
056152,000217:
056153,000218: # ***** THIS MUST BE IN FIXED FIXED *****
056154,000219:
056155,000220: 5445 BLOCK 02
056156,000221: 4000 SETLOC FFTAG2
056157,000222: 4000 BANK
056158,000223:
056159,000224: 5445 COUNT* $$/RSROU
056160,000225: 5445 22706 ITSLGCL1 LXCH GOLOC +1 # OBTAIN THE CORRECT E BANK
056161,000226: 5446 22006 LXCH BB
056162,000227: 5447 22706 LXCH GOLOC +1 # AND PRESERVE OUR E AND F BANKS
056163,000228:
056164,000229: 5450 00006 EXTEND # GET THE DELTA TIME
056165,000230: 5451 50000 NDX A
056166,000231: 5452 30001 DCA 0
056167,000232:
056168,000233: 5453 22706 LXCH GOLOC +1 # RESTORE OUR E AND F BANK
056169,000234: 5454 22006 LXCH BB # RESTORE THE TASKS E AND F BANKS
056170,000235: 5455 22706 LXCH GOLOC +1 # AND PRESERVE OUR L
![]() |
Page 1307 |
056172,000237: 5456 13707 TCF ITSLGCL2 # NOW LET:S PROCESS THIS LONGCALL
056173,000238:
056174,000239: # ***** YOU MAY RETURN TO SWITCHED FIXED *****
056175,000240:
056176,000241: 01,3707 BANK 01
056177,000242: 01,2000 SETLOC RESTART
056178,000243: 01,2000 BANK
056179,000244:
056180,000245: 01,3707 COUNT* $$/RSROU
056181,000246: 01,3707 53154 ITSLGCL2 DXCH LONGTIME
056182,000247:
056183,000248: 01,3710 00006 EXTEND # CALCULATE TIME LEFT
056184,000249: 01,3711 40025 DCS TIME2
056185,000250: 01,3712 21154 DAS LONGTIME
056186,000251: 01,3713 00006 EXTEND
056187,000252: 01,3714 31152 DCA LONGBASE
056188,000253: 01,3715 21154 DAS LONGTIME
056189,000254:
056190,000255: 01,3716 11153 CCS LONGTIME # FIND OUT HOW THIS SHOULD BE RESTARTED
056191,000256: 01,3717 13727 TCF LONGCLCL
056192,000257: 01,3720 13722 TCF +2
056193,000258: 01,3721 13615 TCF IMEDIATE -3
056194,000259: 01,3722 11154 CCS LONGTIME +1
056195,000260: 01,3723 13727 TCF LONGCLCL
056196,000261: 01,3724 13725 NOOP # CAN:T GET HERE *********
056197,000262: 01,3725 13615 TCF IMEDIATE -3
056198,000263: 01,3726 13620 TCF IMEDIATE
056199,000264:
056200,000265: 01,3727 33772 LONGCLCL CA LGCLCADR # WE WILL GO TO LONGCALL
056201,000266: 01,3730 54704 TS GOLOC -1
056202,000267:
056203,000268: 01,3731 00006 EXTEND # PREPARE OUR ENTRY TO LONGCALL
056204,000269: 01,3732 31154 DCA LONGTIME
056205,000270: 01,3733 00704 TC GOLOC -1
056206,000271:
056207,000272: 01,3734 33774 ITSLNGCL CA WTLTCADR # ASSUME IT WILL GO TO WAITLIST
056208,000273: 01,3735 54704 TS GOLOC -1
056209,000274:
056210,000275: 01,3736 50155 NDX TEMP2G
056211,000276: 01,3737 41054 CS PHSPRDT1 # GET THE DELTA T ADDRESS
056212,000277:
056213,000278: 01,3740 15445 TCF ITSLGCL1 # NOW GET THE DELTA TIME
056214,000279:
056215,000280: 01,3741 40706 ITSWTLST CS GOLOC +1 # CORRECT THE BBCON INFORMATION
056216,000281: 01,3742 54706 TS GOLOC +1
056217,000282:
056218,000283: 01,3743 50156 NDX POINTER # GET THE DT AND FIND OUT IF IT WAS STORED
056219,000284: 01,3744 32000 CA PRDTTAB # DIRECTLY OR INDIRECTLY
056220,000285:
056221,000286: 01,3745 13574 TCF TIMETEST # FIND OUT HOW THE TIME IS STORED
056222,000287:
![]() |
Page 1308 |
056224,000289: 01,3746 56705 ITSAJOB2 XCH GOLOC # STORE THE CADR
056225,000290:
056226,000291: 01,3747 50156 NDX POINTER # ADD THE PRIORITY AND LET:S GO
056227,000292: 01,3750 32000 CA PRDTTAB
056228,000293:
056229,000294: 01,3751 13637 TCF CHKNOVAC
056230,000295:
056231,000296: 01,3752 30157 ITSEVEN CA TEMPSWCH # SET UP FOR EITHER THE SECOND PART OF THE
056232,000297: 01,3753 54707 TS GOLOC +2 # TABLE, OR A RETURN FOR THE NEXT GROUP
056233,000298:
056234,000299: 01,3754 50155 NDX TEMP2G # SET UP POINTER FOR OUR LOCATION WITHIN
056235,000300: 01,3755 32002 CA SIZETAB # THE TABLE
056236,000301: 01,3756 60154 AD TEMPPHS # THIS MAY LOOK BAD BUT LET:S SEE YOU DO
056237,000302: 01,3757 60154 AD TEMPPHS # BETTER IN TIME OR NUMBERR OF LOCATIONS
056238,000303: 01,3760 60154 AD TEMPPHS
056239,000304: 01,3761 54156 TS POINTER
056240,000305:
056241,000306: 01,3762 13665 TCF CONTBL2 # NOW PROCESS WHAT IS IN THE TABLE
056242,000307:
056243,000308: 01,3763 36245 PHSPART2 CA THREE # SET THE POINTER FOR THE SECOND HALF OF
056244,000309: 01,3764 26156 ADS POINTER # THE TABLE
056245,000310:
056246,000311: 01,3765 33565 CA RTRNCADR # THIS WILL BE OUR LAST TIME THROUGH THE
056247,000312: 01,3766 54707 TS GOLOC +2 # EVEN TABLE, SO AFTER IT GET THE NEXT
056248,000313: # GROUP
056249,000314: 01,3767 13665 TCF CONTBL2 # SO LET:S GET THE SECOND ENTRY IN THE TBL
056250,000315:
056251,000316: 01,3770 0154 TEMPPHS EQUALS MPAC
056252,000317: 01,3770 0155 TEMP2G EQUALS MPAC +1
056253,000318: 01,3770 0156 POINTER EQUALS MPAC +2
056254,000319: 01,3770 0157 TEMPSWCH EQUALS MPAC +3
056255,000320: 01,3770 0705 GOLOC EQUALS VAC5 +20D
056256,000321: 01,3770 7746 MINUS2 EQUALS NEG2
056257,000322: 01,3770 6074 OCT177 EQUALS LOW7
056258,000323:
056259,000324: 01,3770 03763 PHS2CADR GENADR PHSPART2
056260,000325: 01,3771 03541 PRT2CADR GENADR GETPART2
056261,000326: 01,3772 05277 LGCLCADR GENADR LONGCALL
056262,000327: 01,3773 05105 FVACCADR GENADR FINDVAC
056263,000328: 01,3774 05203 WTLTCADR GENADR WAITLIST
056264,000329: 01,3775 05072 NOVACADR GENADR NOVAC
056265,000330:
056266,000331:
End of include-file RESTARTS_ROUTINE.agc. Parent file is MAIN.agc