Source Code
![]() |
These source-code files derive from a printout of Luminary 116 (the Apollo 12
Lunar Module guidance computer program), from the personal library of
original AGC developer Don Eyles, digitally photographed at archive.org,
financially sponsored by Ron Burkey, and transcribed to source code by a
team of volunteers. This colorized, syntax-highlighted form was created
by assembling that transcribed source code. Note that the full page images
are available on the
Virtual AGC project page at archive.org, while reduced-size images
are presented at the VirtualAGC project website. Report or fix any
transcription errors at
the Virtual AGC project code repository. Notations on the program listing read, in part: GAP: ASSEMBLE REVISION 116 OF AGC PROGRAM LUMINARY BY NASA 2021112-071 19:09 AUG. 11,1969Note that the date is the date of the printout, not the date of the program revision. |
029860,000002: ## Copyright: Public domain.
029861,000003: ## Filename: R31.agc
029862,000004: ## Purpose: A section of Luminary revision 116.
029863,000005: ## It is part of the source code for the Lunar Module's (LM)
029864,000006: ## Apollo Guidance Computer (AGC) for Apollo 12.
029865,000007: ## This file is intended to be a faithful transcription, except
029866,000008: ## that the code format has been changed to conform to the
029867,000009: ## requirements of the yaYUL assembler rather than the
029868,000010: ## original YUL assembler.
029869,000011: ## Reference: pp. 703-708
029870,000012: ## Assembler: yaYUL
029871,000013: ## Contact: Ron Burkey <info@sandroid.org>.
029872,000014: ## Website: www.ibiblio.org/apollo/index.html
029873,000015: ## Mod history: 2017-01-22 MAS Created from Luminary 99.
029874,000016: ## 2017-03-09 RSB Transcribed, and then proofed comment-text using
029875,000017: ## 3-way diff vs Luminary 99 and Luminary 131.
029876,000018: ## (Admittedly, the former is more for detecting errors
029877,000019: ## in Luminary 99 than the other way around.)
029878,000020:
![]() |
Page 703 |
029880,000022: 40,3737 BANK 40
029881,000023: 40,2000 SETLOC R31LOC
029882,000024: 40,2000 BANK
029883,000025:
029884,000026: 40,3737 COUNT* $$/R31
029885,000027:
029886,000028: 40,3737 35015 R31CALL CAF PRIO3
029887,000029: 40,3740 05105 TC FINDVAC
029888,000030: 40,3741 E7,1470 EBANK= SUBEXIT
029889,000031: 40,3741 03121 76067 2CADR V83CALL
029890,000032:
029891,000033: 40,3743 05221 DSPDELAY TC FIXDELAY
029892,000034: 40,3744 00144 DEC 100 B-14
029893,000035: 40,3745 31043 CA EXTVBACT
029894,000036: 40,3746 74740 MASK BIT12
029895,000037: 40,3747 00006 EXTEND
029896,000038: 40,3750 13743 BZF DSPDELAY
029897,000039:
029898,000040: 40,3751 35017 CAF PRIO5
029899,000041: 40,3752 05072 TC NOVAC
029900,000042: 40,3753 E7,1611 EBANK= TSTRT
029901,000043: 40,3753 03113 76067 2CADR DISPN5X
029902,000044:
029903,000045: 40,3755 15261 TCF TASKOVER
029904,000046:
029905,000047: 37,3113 BANK 37
029906,000048: 37,2000 SETLOC R31
029907,000049: 37,2000 BANK
029908,000050: 37,3113 COUNT* $$/R31
029909,000051:
029910,000052: 37,3113 33407 DISPN5X CAF V16N54
029911,000053: 37,3114 04616 TC BANKCALL
029912,000054: 37,3115 20334 CADR GOMARKF
029913,000055: 37,3116 05563 TC B5OFF
029914,000056: 37,3117 05563 TC B5OFF
029915,000057: 37,3120 13113 TCF DISPN5X
029916,000058:
029917,000059: 37,3121 40103 V83CALL CS FLAGWRD7 # TEST AVERAGE G FLAG
029918,000060: 37,3122 74747 MASK AVEGFBIT
029919,000061: 37,3123 00006 EXTEND
029920,000062: 37,3124 13377 BZF MUNG? # ON - TEST MUNFLAG
029921,000063:
029922,000064: 37,3125 40104 CS FLAGWRD8
029923,000065: 37,3126 74744 MASK SURFFBIT
029924,000066: 37,3127 00006 EXTEND
029925,000067: 37,3130 13403 BZF ONEBASE # ON SURFACE - BYPASS LEMPREC
029926,000068:
029927,000069: 37,3131 06042 TC INTPRET # EXTRAPOLATE BOTH STATE VECTORS
029928,000070: 37,3132 77634 RTB
![]() |
Page 704 |
029930,000072: 37,3133 21574 LOADTIME
029931,000073: 37,3134 34041 STCALL TDEC1
029932,000074: 37,3135 27060 LEMPREC # PRECISION BASE VECTOR FOR LM
029933,000075: 37,3136 77775 VLOAD
029934,000076: 37,3137 00017 RATT1
029935,000077: 37,3140 26170 STOVL BASETHP
029936,000078: 37,3141 00025 VATT1
029937,000079: 37,3142 16105 STODL BASETHV
029938,000080: 37,3143 00015 TAT
029939,000081: 37,3144 02114 DOCMBASE STORE BASETIME # PRECISION BASE VECTOR FOR CM
029940,000082: 37,3145 34041 STCALL TDEC1
029941,000083: 37,3146 27044 CSMPREC
029942,000084: 37,3147 77775 VLOAD
029943,000085: 37,3150 00017 RATT1
029944,000086: 37,3151 26140 STOVL BASEOTP
029945,000087: 37,3152 00025 VATT1
029946,000088: 37,3153 02120 STORE BASEOTV
029947,000089: 37,3154 77776 EXIT
029948,000090:
029949,000091: 37,3155 40103 REV83 CS FLAGWRD7
029950,000092: 37,3156 74747 MASK AVEGFBIT
029951,000093: 37,3157 00006 EXTEND
029952,000094: 37,3160 13326 BZF GETRVN # IF AVEGFLAG SET, USE RN,VN
029953,000095:
029954,000096: 37,3161 40104 CS FLAGWRD8
029955,000097: 37,3162 74744 MASK SURFFBIT
029956,000098: 37,3163 00006 EXTEND
029957,000099: 37,3164 13370 BZF R31SURF # IF ON SURFACE, USE LEMAREC
029958,000100:
029959,000101: 37,3165 06042 TC INTPRET # DO CONIC EXTRAPOLATION FOR BOTH VEHICLES
029960,000102: 37,3166 77634 RTB
029961,000103: 37,3167 21574 LOADTIME
029962,000104: 37,3170 34041 STCALL TDEC1
029963,000105: 37,3171 27412 INTSTALL
029964,000106: 37,3172 43175 VLOAD CLEAR
029965,000107: 37,3173 02170 BASETHP
029966,000108: 37,3174 00263 MOONFLAG
029967,000109: 37,3175 25535 STOVL RCV
029968,000110: 37,3176 02105 BASETHV
029969,000111: 37,3177 15543 STODL VCV
029970,000112: 37,3200 02114 BASETIME
029971,000113: 37,3201 43014 BOF SET # GET APPROPRIATE MOONFLAG SETTING
029972,000114: 37,3202 04344 MOONTHIS
029973,000115: 37,3203 77205 +2
029974,000116: 37,3204 00063 MOONFLAG
029975,000117: 37,3205 77614 SET
029976,000118: 37,3206 01473 INTYPFLG # CONIC EXTRAP.
029977,000119: 37,3207 35517 STCALL TET
029978,000120: 37,3210 27110 INTEGRVS # INTEGRATION --- AT LAST ---
029979,000121: 37,3211 77775 OTHCONIC VLOAD
![]() |
Page 705 |
029981,000123: 37,3212 00001 RATT
029982,000124: 37,3213 26207 STOVL RONE
029983,000125: 37,3214 00007 VATT
029984,000126: 37,3215 36215 STCALL VONE # GET SET FOR CONIC EXTRAP., OTHER.
029985,000127: 37,3216 27412 INTSTALL
029986,000128: 37,3217 71214 SET DLOAD
029987,000129: 37,3220 01473 INTYPFLG
029988,000130: 37,3221 00015 TAT
029989,000131: 37,3222 00041 OTHINT STORE TDEC1
029990,000132: 37,3223 43175 VLOAD CLEAR
029991,000133: 37,3224 02140 BASEOTP
029992,000134: 37,3225 00263 MOONFLAG
029993,000135: 37,3226 25535 STOVL RCV
029994,000136: 37,3227 02120 BASEOTV
029995,000137: 37,3230 15543 STODL VCV
029996,000138: 37,3231 02114 BASETIME
029997,000139: 37,3232 43014 BOF SET
029998,000140: 37,3233 04344 MOONTHIS
029999,000141: 37,3234 77236 +2
030000,000142: 37,3235 00063 MOONFLAG
030001,000143: 37,3236 35517 STCALL TET
030002,000144: 37,3237 27110 INTEGRVS
030003,000145: 37,3240 52375 COMPDISP VLOAD VSU
030004,000146: 37,3241 00001 RATT
030005,000147: 37,3242 02207 RONE
030006,000148: 37,3243 65234 RTB PDDL
030007,000149: 37,3244 21725 NORMUNX1 # UNIT(RANGE) TO PD 0-5
030008,000150: 37,3245 00045 36D
030009,000151: 37,3246 77657 SL* # RESCALE AFTER NORMUNIT
030010,000152: 37,3247 20201 0,1
030011,000153: 37,3250 26201 STOVL RANGE # SCALED 2(29)M
030012,000154: 37,3251 00007 VATT
030013,000155: 37,3252 50251 VSU DOT # (VCM-VLM).UNIT(LOS), PD=0
030014,000156: 37,3253 02215 VONE
030015,000157: 37,3254 77752 SL1 # SCALED 2(7)M/CS
030016,000158: 37,3255 26203 STOVL RRATE
030017,000159: 37,3256 02207 RONE
030018,000160: 37,3257 63256 UNIT PDVL # UNIT(R) TO PD 0-5
030019,000161: 37,3260 06516 UNITZ
030020,000162: 37,3261 77624 CALL
030021,000163: 37,3262 47663 CDU*NBSM
030022,000164: 37,3263 41505 VXM PUSH # UNIT(Z)/4 TO PD 6-11
030023,000165: 37,3264 01734 REFSMMAT
030024,000166: 37,3265 72431 VPROJ VSL2 # UNIT(P)=UNIT(UZ-(UZ)PROJ(UR))
030025,000167: 37,3266 00001 0D
030026,000168: 37,3267 53445 BVSU UNIT
030027,000169: 37,3270 00007 6D
030028,000170: 37,3271 47315 PDVL VXV # UNIT(P) TO PD 12-17
030029,000171: 37,3272 00001 0D # UNIT(RL)
030030,000172: 37,3273 02215 VONE
![]() |
Page 706 |
030032,000174: 37,3274 50235 VXV DOT # (UR * VL) * UR . U(P)
030033,000175: 37,3275 00001 0D
030034,000176: 37,3276 00015 12D
030035,000177: 37,3277 77715 PDVL # SIGN TO 12-13, LOAD U(P)
030036,000178: 37,3300 75241 DOT SIGN
030037,000179: 37,3301 00007 6D
030038,000180: 37,3302 00015 12D
030039,000181: 37,3303 65512 SL2 ACOS # ARCCOS(UP.UZ(SIGN))
030040,000182: 37,3304 26205 STOVL RTHETA
030041,000183: 37,3305 00001 0D
030042,000184: 37,3306 51041 DOT BPL # IF UR.UZ NEG,
030043,000185: 37,3307 00007 6D # RTHETA = 1 - RTHETA
030044,000186: 37,3310 77315 +5
030045,000187: 37,3311 45345 DLOAD DSU
030046,000188: 37,3312 06532 DPPOSMAX
030047,000189: 37,3313 02205 RTHETA
030048,000190: 37,3314 02205 STORE RTHETA
030049,000191: 37,3315 77776 EXIT
030050,000192:
030051,000193: 37,3316 34747 CA BIT5
030052,000194: 37,3317 71043 MASK EXTVBACT
030053,000195: 37,3320 00006 EXTEND # IF ANSWERED,
030054,000196: 37,3321 15472 BZF ENDEXT # TERMINATE
030055,000197:
030056,000198: 37,3322 41043 CS EXTVBACT
030057,000199: 37,3323 74740 MASK BIT12
030058,000200: 37,3324 27043 ADS EXTVBACT # SET BIT 12
030059,000201: 37,3325 13155 TCF REV83 # AND START AGAIN.
030060,000202:
030061,000203: 37,3326 37713 GETRVN CA PRIO22 # INHIBIT SERVICER
030062,000204: 37,3327 05146 TC PRIOCHNG
030063,000205: 37,3330 06042 TC INTPRET
030064,000206: 37,3331 40375 VLOAD SETPD
030065,000207: 37,3332 01220 RN # LM STATE VECTOR IN RN,VN
030066,000208: 37,3333 00001 0
030067,000209: 37,3334 26207 STOVL RONE
030068,000210: 37,3335 01226 VN
030069,000211: 37,3336 26215 STOVL VONE # LOAD R(CSM),V(CSM) IN CASE MUNFLAG SET
030070,000212: 37,3337 01726 V(CSM) # (TO INSURE TIME COMPATABILITY)
030071,000213: 37,3340 65315 PDVL PDDL
030072,000214: 37,3341 01720 R(CSM)
030073,000215: 37,3342 01234 PIPTIME
030074,000216: 37,3343 77776 EXIT
030075,000217: 37,3344 35015 CA PRIO3
030076,000218: 37,3345 05146 TC PRIOCHNG
030077,000219: 37,3346 06042 TC INTPRET
030078,000220: 37,3347 77214 BOFF VLOAD
030079,000221: 37,3350 03347 MUNFLAG
030080,000222: 37,3351 77363 GETRVN2 # IF MUNFLAG RESET, DO CM DELTA PRECISION
![]() |
Page 707 |
030082,000224: 37,3352 60505 VXM VSR4 # CHANGE TO REFERENCE SYSTEM AND RESCALE
030083,000225: 37,3353 01734 REFSMMAT
030084,000226: 37,3354 77715 PDVL # R TO PD 0-5
030085,000227: 37,3355 76505 VXM VSL1
030086,000228: 37,3356 01734 REFSMMAT
030087,000229: 37,3357 40206 PUSH SETPD # V TO PD 5-11
030088,000230: 37,3360 00001 0
030089,000231: 37,3361 77650 GOTO
030090,000232: 37,3362 77240 COMPDISP
030091,000233:
030092,000234: 37,3363 77624 GETRVN2 CALL
030093,000235: 37,3364 27412 INTSTALL
030094,000236: 37,3365 52014 CLEAR GOTO
030095,000237: 37,3366 01673 INTYPFLG # PREC EXTRAP FOR OTHER
030096,000238: 37,3367 77222 OTHINT
030097,000239: 37,3370 06042 R31SURF TC INTPRET
030098,000240: 37,3371 77634 RTB # LM IS ON SURFACE, SO PRECISION
030099,000241: 37,3372 21574 LOADTIME # INTEGRATION USES PLANETARY INERTIAL
030100,000242: 37,3373 34041 STCALL TDEC1 # ORIENTATION SUBROUTINE
030101,000243: 37,3374 27060 LEMPREC
030102,000244: 37,3375 77650 GOTO # DO CSM CONIC
030103,000245: 37,3376 77211 OTHCONIC
030104,000246: 37,3377 40102 MUNG? CS FLAGWRD6
030105,000247: 37,3400 74744 MASK MUNFLBIT
030106,000248: 37,3401 00006 EXTEND
030107,000249: 37,3402 13326 BZF GETRVN # IF MUNFLAG SET, CSM BASE NOT NEEDED
030108,000250:
030109,000251: 37,3403 06042 ONEBASE TC INTPRET # GET CSM BASE VECTOR
030110,000252: 37,3404 52034 RTB GOTO
030111,000253: 37,3405 21574 LOADTIME
030112,000254: 37,3406 77144 DOCMBASE
030113,000255:
030114,000256: 37,3407 04066 V16N54 VN 1654
030115,000257:
![]() |
Page 708
This page is empty. |
030118,000260:
End of include-file R31.agc. Parent file is MAIN.agc