Source Code
![]() |
This source code is very close to the Apollo Guidance Computer software for the
Apollo 13 Lunar module. This revision of the Luminary 131 program is from December
of 1969, whereas there was a later revision in January of 1970, and still another
revision in February, which is the code that flew on the mission.
As far as this transcription is concerned, it was originally from a copy made in 1991 of
a printout from the collection of AGC developer Don Eyles for collector David Craig.
It was subsequently scanned by Gary Neff, reprocessed for online
presentation at the now-discontinued History of Recent Science and Technology (HRST) website
of MIT's Dibner Institute (the full-quality scans being discarded in the process),
and finally transcribed by Ron Burkey for the Virtual AGC Project. Although a
high-quality replacement scan for a completely illegible page was later provided by Gary
Neff, the reduced legibility of the reprocessed HRST posting nevertheless caused many
errors to be introduced into the transcription. Accordingly, a second scan of the same physical
printout was made in 2017 for the Virtual AGC Project's collection at the Internet Archive,
and used to correct the transcription errors. All of the scanned materials mentioned,
as well as other Luminary 131 related material, are available online.
Don Eyles apprently made additional hand-written notes in printout between 1991 and 2017,
so the two scans are not identical in that respect. The page-headings in the printout read, in part:GAP: ASSEMBLE REVISION 131 OF AGC PROGRAM LUMINARY BY NASA 2021112-091 17:53 DEC. 19, 1969Note that the date is the date the printout was made, not the date on which the program revision was released, although these happen to be very close together. |
029747,000002: ## Copyright: Public domain.
029748,000003: ## Filename: R31.agc
029749,000004: ## Purpose: A section of Luminary 1C, revision 131.
029750,000005: ## It is part of the source code for the Lunar Module's (LM)
029751,000006: ## Apollo Guidance Computer (AGC) for Apollo 13.
029752,000007: ## This file is intended to be a faithful transcription, except
029753,000008: ## that the code format has been changed to conform to the
029754,000009: ## requirements of the yaYUL assembler rather than the
029755,000010: ## original YUL assembler.
029756,000011: ## Reference: pp. 705-710
029757,000012: ## Contact: Ron Burkey <info@sandroid.org>.
029758,000013: ## Website: www.ibiblio.org/apollo/index.html
029759,000014: ## Mod history: 05/24/03 RSB. Began transcribing.
029760,000015: ## 05/14/05 RSB Corrected website reference above.
029761,000016: ## 2017-01-06 RSB Page numbers now agree with those on the
029762,000017: ## original hardcopy, as opposed to the PDF page
029763,000018: ## numbers in 1701.pdf.
029764,000019: ## 2017-02-24 RSB Proofed comment text using octopus/ProoferComments.
029765,000020: ## 2017-03-09 RSB Comment-text fixes noted in proofing Luminary 116.
029766,000021:
![]() |
Page 705 |
029768,000023: 40,3737 BANK 40
029769,000024: 40,2000 SETLOC R31LOC
029770,000025: 40,2000 BANK
029771,000026:
029772,000027: 40,3737 COUNT* $$/R31
029773,000028:
029774,000029: 40,3737 35015 R31CALL CAF PRIO3
029775,000030: 40,3740 05105 TC FINDVAC
029776,000031: 40,3741 E7,1470 EBANK= SUBEXIT
029777,000032: 40,3741 03121 76067 2CADR V83CALL
029778,000033:
029779,000034: 40,3743 05221 DSPDELAY TC FIXDELAY
029780,000035: 40,3744 00144 DEC 100 B-14
029781,000036: 40,3745 31043 CA EXTVBACT
029782,000037: 40,3746 74740 MASK BIT12
029783,000038: 40,3747 00006 EXTEND
029784,000039: 40,3750 13743 BZF DSPDELAY
029785,000040:
029786,000041: 40,3751 35017 CAF PRIO5
029787,000042: 40,3752 05072 TC NOVAC
029788,000043: 40,3753 E7,1611 EBANK= TSTRT
029789,000044: 40,3753 03113 76067 2CADR DISPN5X
029790,000045:
029791,000046: 40,3755 15261 TCF TASKOVER
029792,000047:
029793,000048: 37,3113 BANK 37
029794,000049: 37,2000 SETLOC R31
029795,000050: 37,2000 BANK
029796,000051: 37,3113 COUNT* $$/R31
029797,000052:
029798,000053: 37,3113 33407 DISPN5X CAF V16N54
029799,000054: 37,3114 04616 TC BANKCALL
029800,000055: 37,3115 20334 CADR GOMARKF
029801,000056: 37,3116 05563 TC B5OFF
029802,000057: 37,3117 05563 TC B5OFF
029803,000058: 37,3120 13113 TCF DISPN5X
029804,000059:
029805,000060: 37,3121 40103 V83CALL CS FLAGWRD7 # TEST AVERAGE G FLAG
029806,000061: 37,3122 74747 MASK AVEGFBIT
029807,000062: 37,3123 00006 EXTEND
029808,000063: 37,3124 13377 BZF MUNG? # ON - TEST MUNFLAG
029809,000064:
029810,000065: 37,3125 40104 CS FLAGWRD8
029811,000066: 37,3126 74744 MASK SURFFBIT
029812,000067: 37,3127 00006 EXTEND
029813,000068: 37,3130 13403 BZF ONEBASE # ON SURFACE - BYPASS LEMPREC
029814,000069:
029815,000070: 37,3131 06042 TC INTPRET # EXTRAPOLATE BOTH STATE VECTORS
029816,000071: 37,3132 77634 RTB
![]() |
Page 706 |
029818,000073: 37,3133 21574 LOADTIME
029819,000074: 37,3134 34041 STCALL TDEC1
029820,000075: 37,3135 27056 LEMPREC # PRECISION BASE VECTOR FOR LM
029821,000076: 37,3136 77775 VLOAD
029822,000077: 37,3137 00017 RATT1
029823,000078: 37,3140 26170 STOVL BASETHP
029824,000079: 37,3141 00025 VATT1
029825,000080: 37,3142 16105 STODL BASETHV
029826,000081: 37,3143 00015 TAT
029827,000082: 37,3144 02114 DOCMBASE STORE BASETIME # PRECISION BASE VECTOR FOR CM
029828,000083: 37,3145 34041 STCALL TDEC1
029829,000084: 37,3146 27042 CSMPREC
029830,000085: 37,3147 77775 VLOAD
029831,000086: 37,3150 00017 RATT1
029832,000087: 37,3151 26140 STOVL BASEOTP
029833,000088: 37,3152 00025 VATT1
029834,000089: 37,3153 02120 STORE BASEOTV
029835,000090: 37,3154 77776 EXIT
029836,000091:
029837,000092: 37,3155 40103 REV83 CS FLAGWRD7
029838,000093: 37,3156 74747 MASK AVEGFBIT
029839,000094: 37,3157 00006 EXTEND
029840,000095: 37,3160 13326 BZF GETRVN # IF AVEGFLAG SET, USE RN,VN
029841,000096:
029842,000097: 37,3161 40104 CS FLAGWRD8
029843,000098: 37,3162 74744 MASK SURFFBIT
029844,000099: 37,3163 00006 EXTEND
029845,000100: 37,3164 13370 BZF R31SURF # IF ON SURFACE, USE LEMAREC
029846,000101:
029847,000102: 37,3165 06042 TC INTPRET # DO CONIC EXTRAPOLATION FOR BOTH VEHICLES
029848,000103: 37,3166 77634 RTB
029849,000104: 37,3167 21574 LOADTIME
029850,000105: 37,3170 34041 STCALL TDEC1
029851,000106: 37,3171 27410 INTSTALL
029852,000107: 37,3172 43175 VLOAD CLEAR
029853,000108: 37,3173 02170 BASETHP
029854,000109: 37,3174 00263 MOONFLAG
029855,000110: 37,3175 25535 STOVL RCV
029856,000111: 37,3176 02105 BASETHV
029857,000112: 37,3177 15543 STODL VCV
029858,000113: 37,3200 02114 BASETIME
029859,000114: 37,3201 43014 BOF SET # GET APPROPRIATE MOONFLAG SETTING
029860,000115: 37,3202 04344 MOONTHIS
029861,000116: 37,3203 77205 +2
029862,000117: 37,3204 00063 MOONFLAG
029863,000118: 37,3205 77614 SET
029864,000119: 37,3206 01473 INTYPFLG # CONIC EXTRAP.
029865,000120: 37,3207 35517 STCALL TET
029866,000121: 37,3210 27106 INTEGRVS # INTEGRATION --- AT LAST ---
029867,000122: 37,3211 77775 OTHCONIC VLOAD
![]() |
Page 707 |
029869,000124: 37,3212 00001 RATT
029870,000125: 37,3213 26207 STOVL RONE
029871,000126: 37,3214 00007 VATT
029872,000127: 37,3215 36215 STCALL VONE # GET SET FOR CONIC EXTRAP., OTHER.
029873,000128: 37,3216 27410 INTSTALL
029874,000129: 37,3217 71214 SET DLOAD
029875,000130: 37,3220 01473 INTYPFLG
029876,000131: 37,3221 00015 TAT
029877,000132: 37,3222 00041 OTHINT STORE TDEC1
029878,000133: 37,3223 43175 VLOAD CLEAR
029879,000134: 37,3224 02140 BASEOTP
029880,000135: 37,3225 00263 MOONFLAG
029881,000136: 37,3226 25535 STOVL RCV
029882,000137: 37,3227 02120 BASEOTV
029883,000138: 37,3230 15543 STODL VCV
029884,000139: 37,3231 02114 BASETIME
029885,000140: 37,3232 43014 BOF SET
029886,000141: 37,3233 04344 MOONTHIS
029887,000142: 37,3234 77236 +2
029888,000143: 37,3235 00063 MOONFLAG
029889,000144: 37,3236 35517 STCALL TET
029890,000145: 37,3237 27106 INTEGRVS
029891,000146: 37,3240 52375 COMPDISP VLOAD VSU
029892,000147: 37,3241 00001 RATT
029893,000148: 37,3242 02207 RONE
029894,000149: 37,3243 65234 RTB PDDL
029895,000150: 37,3244 21725 NORMUNX1 # UNIT(RANGE) TO PD 0-5
029896,000151: 37,3245 00045 36D
029897,000152: 37,3246 77657 SL* # RESCALE AFTER NORMUNIT
029898,000153: 37,3247 20201 0,1
029899,000154: 37,3250 26201 STOVL RANGE # SCALED 2(29)M
029900,000155: 37,3251 00007 VATT
029901,000156: 37,3252 50251 VSU DOT # (VCM-VLM).UNIT(LOS), PD=0
029902,000157: 37,3253 02215 VONE
029903,000158: 37,3254 77752 SL1 # SCALED 2(7)M/CS
029904,000159: 37,3255 26203 STOVL RRATE
029905,000160: 37,3256 02207 RONE
029906,000161: 37,3257 63256 UNIT PDVL # UNIT(R) TO PD 0-5
029907,000162: 37,3260 06516 UNITZ
029908,000163: 37,3261 77624 CALL
029909,000164: 37,3262 47663 CDU*NBSM
029910,000165: 37,3263 41505 VXM PUSH # UNIT(Z)/4 TO PD 6-11
029911,000166: 37,3264 01734 REFSMMAT
029912,000167: 37,3265 72431 VPROJ VSL2 # UNIT(P)=UNIT(UZ-(UZ)PROJ(UR))
029913,000168: 37,3266 00001 0D
029914,000169: 37,3267 53445 BVSU UNIT
029915,000170: 37,3270 00007 6D
029916,000171: 37,3271 47315 PDVL VXV # UNIT(P) TO PD 12-17
029917,000172: 37,3272 00001 0D # UNIT(RL)
029918,000173: 37,3273 02215 VONE
![]() |
Page 708 |
029920,000175: 37,3274 50235 VXV DOT # (UR * VL) * UR . U(P)
029921,000176: 37,3275 00001 0D
029922,000177: 37,3276 00015 12D
029923,000178: 37,3277 77715 PDVL # SIGN TO 12-13, LOAD U(P)
029924,000179: 37,3300 75241 DOT SIGN
029925,000180: 37,3301 00007 6D
029926,000181: 37,3302 00015 12D
029927,000182: 37,3303 65512 SL2 ACOS # ARCCOS(UP.UZ(SIGN))
029928,000183: 37,3304 26205 STOVL RTHETA
029929,000184: 37,3305 00001 0D
029930,000185: 37,3306 51041 DOT BPL # IF UR.UZ NEG,
029931,000186: 37,3307 00007 6D # RTHETA = 1 - RTHETA
029932,000187: 37,3310 77315 +5
029933,000188: 37,3311 45345 DLOAD DSU
029934,000189: 37,3312 06532 DPPOSMAX
029935,000190: 37,3313 02205 RTHETA
029936,000191: 37,3314 02205 STORE RTHETA
029937,000192: 37,3315 77776 EXIT
029938,000193:
029939,000194: 37,3316 34747 CA BIT5
029940,000195: 37,3317 71043 MASK EXTVBACT
029941,000196: 37,3320 00006 EXTEND # IF ANSWERED,
029942,000197: 37,3321 15472 BZF ENDEXT # TERMINATE
029943,000198:
029944,000199: 37,3322 41043 CS EXTVBACT
029945,000200: 37,3323 74740 MASK BIT12
029946,000201: 37,3324 27043 ADS EXTVBACT # SET BIT 12
029947,000202: 37,3325 13155 TCF REV83 # AND START AGAIN.
029948,000203:
029949,000204: 37,3326 37713 GETRVN CA PRIO22 # INHIBIT SERVICER
029950,000205: 37,3327 05146 TC PRIOCHNG
029951,000206: 37,3330 06042 TC INTPRET
029952,000207: 37,3331 40375 VLOAD SETPD
029953,000208: 37,3332 01220 RN # LM STATE VECTOR IN RN,VN
029954,000209: 37,3333 00001 0
029955,000210: 37,3334 26207 STOVL RONE
029956,000211: 37,3335 01226 VN
029957,000212: 37,3336 26215 STOVL VONE # LOAD R(CSM),V(CSM) IN CASE MUNFLAG SET
029958,000213: 37,3337 01726 V(CSM) # (TO INSURE TIME COMPATABILITY)
029959,000214: 37,3340 65315 PDVL PDDL
029960,000215: 37,3341 01720 R(CSM)
029961,000216: 37,3342 01234 PIPTIME
029962,000217: 37,3343 77776 EXIT
029963,000218: 37,3344 35015 CA PRIO3
029964,000219: 37,3345 05146 TC PRIOCHNG
029965,000220: 37,3346 06042 TC INTPRET
029966,000221: 37,3347 77214 BOFF VLOAD
029967,000222: 37,3350 03347 MUNFLAG
029968,000223: 37,3351 77363 GETRVN2 # IF MUNFLAG RESET, DO CM DELTA PRECISION
![]() |
Page 709 |
029970,000225: 37,3352 60505 VXM VSR4 # CHANGE TO REFERENCE SYSTEM AND RESCALE
029971,000226: 37,3353 01734 REFSMMAT
029972,000227: 37,3354 77715 PDVL # R TO PD 0-5
029973,000228: 37,3355 76505 VXM VSL1
029974,000229: 37,3356 01734 REFSMMAT
029975,000230: 37,3357 40206 PUSH SETPD # V TO PD 5-11
029976,000231: 37,3360 00001 0
029977,000232: 37,3361 77650 GOTO
029978,000233: 37,3362 77240 COMPDISP
029979,000234:
029980,000235: 37,3363 77624 GETRVN2 CALL
029981,000236: 37,3364 27410 INTSTALL
029982,000237: 37,3365 52014 CLEAR GOTO
029983,000238: 37,3366 01673 INTYPFLG # PREC EXTRAP FOR OTHER
029984,000239: 37,3367 77222 OTHINT
029985,000240: 37,3370 06042 R31SURF TC INTPRET
029986,000241: 37,3371 77634 RTB # LM IS ON SURFACE, SO PRECISION
029987,000242: 37,3372 21574 LOADTIME # INTEGRATION USES PLANETARY INERTIAL
029988,000243: 37,3373 34041 STCALL TDEC1 # ORIENTATION SUBROUTINE
029989,000244: 37,3374 27056 LEMPREC
029990,000245: 37,3375 77650 GOTO # DO CSM CONIC
029991,000246: 37,3376 77211 OTHCONIC
029992,000247: 37,3377 40102 MUNG? CS FLAGWRD6
029993,000248: 37,3400 74744 MASK MUNFLBIT
029994,000249: 37,3401 00006 EXTEND
029995,000250: 37,3402 13326 BZF GETRVN # IF MUNFLAG SET, CSM BASE NOT NEEDED
029996,000251:
029997,000252: 37,3403 06042 ONEBASE TC INTPRET # GET CSM BASE VECTOR
029998,000253: 37,3404 52034 RTB GOTO
029999,000254: 37,3405 21574 LOADTIME
030000,000255: 37,3406 77144 DOCMBASE
030001,000256:
030002,000257: 37,3407 04066 V16N54 VN 1654
030003,000258:
![]() |
Page 710
The original program listing had no source lines on this page. |
030006,000261:
End of include-file R31.agc. Parent file is MAIN.agc