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. |
033591,000002: ## Copyright: Public domain.
033592,000003: ## Filename: THROTTLE_CONTROL_ROUTINES.agc
033593,000004: ## Purpose: A section of Luminary revision 116.
033594,000005: ## It is part of the source code for the Lunar Module's (LM)
033595,000006: ## Apollo Guidance Computer (AGC) for Apollo 12.
033596,000007: ## This file is intended to be a faithful transcription, except
033597,000008: ## that the code format has been changed to conform to the
033598,000009: ## requirements of the yaYUL assembler rather than the
033599,000010: ## original YUL assembler.
033600,000011: ## Reference: pp. 786-790
033601,000012: ## Assembler: yaYUL
033602,000013: ## Contact: Ron Burkey <info@sandroid.org>.
033603,000014: ## Website: www.ibiblio.org/apollo/index.html
033604,000015: ## Mod history: 2017-01-22 MAS Created from Luminary 99.
033605,000016: ## 2017-03-01 HG Transcribed
033606,000017: ## 2017-03-14 RSB Proofed comment text via 3-way diff vs
033607,000018: ## Luminary 99 and 131. No problems were found,
033608,000019: ## but a ##-comment that wouldn't have been
033609,000020: ## displayed properly was fixed.
033610,000021: ## 2017-03-16 RSB Comment-text fixes identified in 5-way
033611,000022: ## side-by-side diff of Luminary 69/99/116/131/210.
033612,000023:
![]() |
Page 786 |
033614,000025: 31,2144 BANK 31
033615,000026:
033616,000027: 31,2000 SETLOC FTHROT
033617,000028:
033618,000029: 31,2000 BANK
033619,000030:
033620,000031: 31,2144 E7,1612 EBANK= PIF
033621,000032:
033622,000033: 31,2144 COUNT* $$/THROT
033623,000034: # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
033624,000035:
033625,000036: # HERE FC, DESIRED THRUST, AND FP, PRESENT THRUST, UNWEIGHTED, ARE COMPUTED.
033626,000037:
033627,000038:
033628,000039: 31,2144 31245 THROTTLE CA ABDELV # COMPUTE PRESENT ACCELERATION IN UNITS OF
033629,000040: 31,2145 00006 EXTEND # 2(-4) M/CS/CS, SAVING SERVICER TROUBLE
033630,000041: 31,2146 72345 MP /AF/CNST
033631,000042: 31,2147 00006 +3 EXTEND
033632,000043: 31,2150 23607 QXCH RTNHOLD
033633,000044: 31,2151 02326 AFDUMP TC MASSMULT
033634,000045: 31,2152 53470 DXCH FP # FP = PRESENT THRUST
033635,000046: 31,2153 00006 EXTEND
033636,000047: 31,2154 31464 DCA /AFC/
033637,000048: 31,2155 02326 TC MASSMULT
033638,000049: 31,2156 55615 TS FC # FC = THRUST DESIRED BY GUIDANCE
033639,000050: 31,2157 53466 DXCH FCODD # FCODD = WHAT IT IS GOING TO GET
033640,000051:
033641,000052:
033642,000053: # IF IT HAS BEEN LESS THAN 3 SECONDS SINCE THE LAST THROTTLING, AUGMENT FP USING THE FWEIGHT CALCULATED THEN.
033643,000054:
033644,000055:
033645,000056: 31,2160 41617 CS TTHROT # THIS CODING ASSUMES A FLATOUT WITHIN
033646,000057: 31,2161 60025 AD TIME1 # 80 SECONDS BEFORE FIRST THROTTLE CALL
033647,000058: 31,2162 74733 MASK POSMAX
033648,000059: 31,2163 40000 COM
033649,000060: 31,2164 65002 AD 3SECS
033650,000061: 31,2165 00006 EXTEND
033651,000062: 31,2166 62172 BZMF WHERETO # BRANCH IF (TIME1-TTHROT +1) > 3 SECONDS
033652,000063: 31,2167 00006 EXTEND
033653,000064: 31,2170 31611 DCA FWEIGHT
033654,000065: 31,2171 21470 DAS FP
033655,000066:
033656,000067:
033657,000068: # THIS LOGIC DETERMINES THE THROTTLING IN THE REGION 10% - 94%. THE MANUAL THROTTLE, NOMINALLY SET AT
033658,000069: # MINIMUM BY ASTRONAUT OR MISSION CONTROL PROGRAMS, PROVIDES THE LOWER BOUND. A STOP IN THE THROTTLE HARDWARE
033659,000070: # PROVIDES THE UPPER.
033660,000071:
033661,000072:
033662,000073: 31,2172 35014 WHERETO CA EBANK5 # INITIALIZE L*WCR*T AND H*GHCR*T FROM
033663,000074: 31,2173 54003 TS EBANK # PAD LOADED ERASABLES IN W-MATRIX
033664,000075:
![]() |
Page 787 |
033666,000077: 31,2174 E5,1506 EBANK= LOWCRIT
033667,000078: 31,2174 00006 EXTEND
033668,000079: 31,2175 31507 DCA LOWCRIT
033669,000080: 31,2176 52131 DXCH L*WCR*T
033670,000081: 31,2177 35016 CA EBANK7
033671,000082: 31,2200 54003 TS EBANK
033672,000083: 31,2201 E7,1612 EBANK= PIF
033673,000084: 31,2201 44755 CS ZERO # INITIALIZE PIFPSET
033674,000085: 31,2202 55606 TS PIFPSET
033675,000086: 31,2203 40131 CS H*GHCR*T
033676,000087: 31,2204 61620 AD FCOLD
033677,000088: 31,2205 00006 EXTEND
033678,000089: 31,2206 62220 BZMF LOWFCOLD # BRANCH IF FCOLD < OR = HIGHCRIT
033679,000090: 31,2207 40130 CS L*WCR*T
033680,000091: 31,2210 61465 AD FCODD
033681,000092: 31,2211 00006 EXTEND
033682,000093: 31,2212 62215 BZMF FCOMPSET # BRANCH IF FC < OR = LOWCRIT
033683,000094: 31,2213 31467 CA FP # SEE NOTE 1
033684,000095: 31,2214 12225 TCF FLATOUT1
033685,000096:
033686,000097: 31,2215 42002 FCOMPSET CS FMAXODD # SEE NOTE 2
033687,000098: 31,2216 61467 AD FP
033688,000099: 31,2217 12227 TCF FLATOUT2
033689,000100:
033690,000101: 31,2220 40131 LOWFCOLD CS H*GHCR*T
033691,000102: 31,2221 61465 AD FCODD
033692,000103: 31,2222 00006 EXTEND
033693,000104: 31,2223 62230 BZMF DOPIF # BRANCH IF FC < OR = HIGHCRIT
033694,000105:
033695,000106: 31,2224 32003 CA FMAXPOS # NO: THROTTLE-UP
033696,000107: 31,2225 53466 FLATOUT1 DXCH FCODD
033697,000108: 31,2226 34737 CA FEXTRA
033698,000109: 31,2227 55606 FLATOUT2 TS PIFPSET
033699,000110:
033700,000111: # NOTE 1 FC IS SET EQUAL TO FP SO PIF WILL BE ZERO. THIS IS DESIRABLE
033701,000112: # AS THERE IS ACTUALLY NO THROTTLE CHANGE.
033702,000113:
033703,000114: # NOTE2 HERE, SINCE WE ARE ABOUT TO RETURN TO THE THROTTLEABLE REGION
033704,000115: # (BELOW 55%) THE QUANTITY -(FMAXODD - FP) IS COMPUTED AND PUT
033705,000116: # INTO PIFPSET TO COMPENSATE FOR THE DIFFERENCE BETWEEN THE
033706,000117: # NUMBER OF BITS CORRESPONDING TO FULL THROTTLE (FMAXODD) AND THE
033707,000118: # NUMBER CORRESPONDING TO ACTUAL THRUST (FP). THUS THE TOTAL
033708,000119: # THROTTLE COMMAND PIF = FC - FP - (FMAXODD - FP) = FC - FMAXODD.
033709,000120:
033710,000121: 31,2230 03717 DOPIF TC FASTCHNG
033711,000122: 31,2231 00006 EXTEND
033712,000123: 31,2232 31466 DCA FCODD
033713,000124: 31,2233 55620 TS FCOLD
033714,000125: 31,2234 53613 DXCH PIF
033715,000126: 31,2235 00006 EXTEND
033716,000127:
![]() |
Page 788 |
033718,000129: 31,2236 41470 DCS FP
033719,000130: 31,2237 21613 DAS PIF # PIF = FC - FP, NEVER EQUALS +0
033720,000131:
033721,000132:
033722,000133: 31,2240 31612 DOIT CA PIF
033723,000134: 31,2241 61606 AD PIFPSET # ADD IN PIFPSET, WITHOUT CHANGING PIF
033724,000135: 31,2242 55614 TS PSEUDO55
![]() |
Note: The above statement has a blue check mark right after the operand |
033726,000137: 31,2243 54055 TS THRUST
033727,000138: 31,2244 34750 CAF BIT4
033728,000139: 31,2245 00006 EXTEND
033729,000140: 31,2246 05014 WOR CHAN14
033730,000141: 31,2247 30025 CA TIME1
033731,000142: 31,2250 55617 TS TTHROT
![]() |
Note: Three statements above are marked with a single light vertical pen mark to the right of the operands |
033733,000144:
033734,000145: # SINCE /AF/ IS NOT AN INSTANTANEOUS ACCELERATION, BUT RATHER AN "AVERAGE" OF THE ACCELERATION LEVELS DURING
033735,000146: # THE PRECEEDING PIPA INTERVAL, AND SINCE FP IS COMPUTED DIRECTLY FROM /AF/, FP IN ORDER TO CORRESPOND TO THE
033736,000147: # ACTUAL THRUST LEVEL AT THE END OF THE INTERVAL MUST BE WEIGHTED BY
033737,000148:
033738,000149: # PIF(PPROCESS + TL) PIF /PIF/
033739,000150: # FWEIGHT = ------------------ + -------------
033740,000151: # PGUID 2 PGUID FRATE
033741,000152:
033742,000153: # WHERE PPROCESS IS THE TIME BETWEEN PIPA READING AND THE START OF THROTTLING, PGUID IS THE GUIDANCE PERIOD, AND
033743,000154: # FRATE IS THE THROTTLING RATE (32 UNITS PER CENTISECOND). PGUID IS EITHER 1 OR 2 SECONDS. THE "TL" IN THE
033744,000155: # FIRST TERM REPRESENTS THE ENGINE'S RESPONSE LAG. HERE FWEIGHT IS COMPUTED FOR USE NEXT PASS.
033745,000156:
033746,000157: 31,2251 31762 CA THISTPIP +1 # INITIALIZE FWEIGHT COMP AS IF FOR P66
![]() |
Note: the complete comment for the above statement has a box drawn arround it using a blue pen. |
033748,000159: 31,2252 54130 TS BUF
033749,000160:
033750,000161: 31,2253 41010 CS MODREG # ARE WE IN FACT IN P66?
033751,000162: 31,2254 62433 AD DEC66
033752,000163: 31,2255 00006 EXTEND
033753,000164: 31,2256 12263 BZF FWCOMP # YES
033754,000165:
033755,000166: 31,2257 31234 CA PIPTIME +1 # NO: INITIALIZE FOR TWO SECOND PERIOD
033756,000167: 31,2260 54130 TS BUF
033757,000168: 31,2261 35003 CAF 4SECS
033758,000169: 31,2262 12264 TCF FWCOMP +1
033759,000170:
033760,000171: 31,2263 35000 FWCOMP CAF 2SECS
033761,000172: 31,2264 54002 +1 TS Q
033762,000173: 31,2265 00006 EXTEND
033763,000174: 31,2266 74746 MP BIT6
033764,000175: 31,2267 22131 LXCH BUF +1
033765,000176: 31,2270 40130 CS BUF # TIME OF LAST PIPA READING.
033766,000177: 31,2271 60025 AD TIME1
033767,000178: 31,2272 62004 AD THROTLAG # COMPENSATE FOR ENGINE RESPONSE LAG
033768,000179: 31,2273 74357 MASK LOW8 # MAKE SURE SMALL AND POSITIVE
033769,000180: 31,2274 22007 ZL
033770,000181: 31,2275 00006 EXTEND
033771,000182:
![]() |
Page 789 |
033773,000184: 31,2276 10002 DV Q
033774,000185: 31,2277 00006 EXTEND
033775,000186: 31,2300 71612 MP PIF
033776,000187: 31,2301 60000 DOUBLE
033777,000188: 31,2302 53611 DXCH FWEIGHT
033778,000189: 31,2303 11612 CCS PIF
033779,000190: 31,2304 64753 AD ONE
033780,000191: 31,2305 12307 TCF +2
033781,000192: 31,2306 64753 AD ONE
033782,000193: 31,2307 00006 EXTEND
033783,000194: 31,2310 71612 MP PIF
033784,000195: 31,2311 00006 EXTEND
033785,000196: 31,2312 10131 DV BUF +1
033786,000197: 31,2313 22007 ZL
033787,000198: 31,2314 21611 DAS FWEIGHT
033788,000199:
033789,000200:
033790,000201: 31,2315 01607 THDUMP TC RTNHOLD
033791,000202:
033792,000203:
033793,000204: # FLATOUT THROTTLES UP THE DESCENT ENGINE, AND IS CALLED AS A BASIC SUBROUTINE.
033794,000205:
033795,000206: 31,2316 34737 FLATOUT CAF BIT13 # 4096 PULSES
033796,000207: 31,2317 55606 WHATOUT TS PIFPSET # USE PIFPSET SO FWEIGHT WILL BE ZERO
033797,000208: 31,2320 44755 CS ZERO
033798,000209: 31,2321 55620 TS FCOLD
033799,000210: 31,2322 55612 TS PIF
033800,000211: 31,2323 00006 EXTEND
033801,000212: 31,2324 23607 QXCH RTNHOLD
033802,000213: 31,2325 12240 TCF DOIT
033803,000214:
033804,000215:
033805,000216: # MASSMULT SCALES ACCELERATION, ARRIVING IN A AND L IN UNITS OF 2(-4) M/CS/CS, TO FORCE IN PULSE UNITS.
033806,000217:
033807,000218: 31,2326 00006 MASSMULT EXTEND
033808,000219: 31,2327 22130 QXCH BUF
033809,000220: 31,2330 52155 DXCH MPAC
033810,000221: 31,2331 07106 TC DMP
033811,000222: 31,2332 01243 ADRES MASS
033812,000223: 31,2333 07106 TC DMP # LEAVES PROPERLY SCALED FORCE IM MPAC
033813,000224: 31,2334 02005 ADRES SCALEFAC
033814,000225: 31,2335 07262 TC TPAGREE
033815,000226: 31,2336 30154 CA MPAC
033816,000227: 31,2337 00006 EXTEND
033817,000228: 31,2340 12343 BZF +3
033818,000229: 31,2341 34733 CAF POSMAX
033819,000230: 31,2342 00130 TC BUF
033820,000231: 31,2343 52156 DXCH MPAC +1
033821,000232: 31,2344 00130 TC BUF
![]() |
Note: There is a small drawing in blue pen in the comment section of the above statements starting in the
line of statement CA MPAC. The drawing resembles a linear step function.
|
033825,000236: ##
![]() |
| | | ----| | / | | / | |----/ | | | | | |
033834,000245:
![]() |
Page 790 |
033836,000247: # CONSTANTS:-
033837,000248:
033838,000249: 31,2345 4737 FEXTRA = BIT13 # FEXT +5.13309020E+4
033839,000250:
033840,000251: 31,2345 04143 /AF/CNST DEC .13107
033841,000252:
033842,000253: # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
End of include-file THROTTLE_CONTROL_ROUTINES.agc. Parent file is MAIN.agc