Source Code
![]() |
These source-code files were transcribed from scans made from Don Eyles's personal
copy of Luminary 069. They were scanned at archive.org's Boston
facility, and the scanning was sponsored by Onno Hommes. The code was transcribed
from these scans by a team of volunteers who are referenced in the program
comments. Comments from the original source code are prefixed with a single '#' symbol,
whereas comments added later are prefixed by "##" or "###". In some cases, where
similar code blocks exist in previously-transcribed AGC programs (primarily
Luminary 99, from Apollo 11) those code blocks were used as a starting point and
then corrected to agree with the Luminary 69 scans. The full scans are available
at the Virtual AGC
project's collection at archive.org, while more-convenient reduced-size (but reduced-quality)
images are available at
the main Virtual AGC website. Report any errors noted by creating an
issue report at the Virtual AGC
project's GitHub repository. Notations on the program listing read, in part:GAP: ASSEMBLE REVISION 069 OF AGC PROGRAM LUMINARY BY NASA 2021112-011 19:02 NOV. 25,1968Note that the date is the date of the printout, not the date of the program revision. |
035017,000002: ## Copyright: Public domain.
035018,000003: ## Filename: THROTTLE_CONTROL_ROUTINES.agc
035019,000004: ## Purpose: The main source file for Luminary revision 069.
035020,000005: ## It is part of the source code for the original release
035021,000006: ## of the flight software for the Lunar Module's (LM) Apollo
035022,000007: ## Guidance Computer (AGC) for Apollo 10. The actual flown
035023,000008: ## version was Luminary 69 revision 2, which included a
035024,000009: ## newer lunar gravity model and only affected module 2.
035025,000010: ## This file is intended to be a faithful transcription, except
035026,000011: ## that the code format has been changed to conform to the
035027,000012: ## requirements of the yaYUL assembler rather than the
035028,000013: ## original YUL assembler.
035029,000014: ## Reference: pp. 797-801
035030,000015: ## Assembler: yaYUL
035031,000016: ## Contact: Ron Burkey <info@sandroid.org>.
035032,000017: ## Website: www.ibiblio.org/apollo/index.html
035033,000018: ## Mod history: 2016-12-13 MAS Created from Luminary 99.
035034,000019: ## 2016-12-18 MAS Updated from comment-proofed Luminary 99 version.
035035,000020: ## 2017-01-06 RRB Updated for Luminary 69.
035036,000021: ## 2017-01-07 HG Fix operand FLGWRD6 -> FLAGWRD6
035037,000022: ## 2017-01-23 HG Add missing sequence of statements CA H*GHCR*T
035038,000023: ## TS FCODD
035039,000024: ## TCF DOPIF
035040,000025: ## Fix operator CS -> CA
035041,000026: ## 2017-01-28 RSB Proofed comment text using octopus/prooferComments
035042,000027: ## and fixed errors found.
035043,000028:
![]() |
Page 797 |
035045,000030:
035046,000031: 31,2247 BANK 31
035047,000032: 31,2000 SETLOC FTHROT
035048,000033: 31,2000 BANK
035049,000034: 31,2247 E7,1610 EBANK= PIF
035050,000035: 31,2247 COUNT* $$/THROT
035051,000036:
035052,000037: # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
035053,000038: # HERE FC, DESIRED THRUST, AND FP, PRESENT THRUST, UNWEIGHTED, ARE COMPUTED.
035054,000039:
035055,000040: 31,2247 31246 THROTTLE CA ABDELV # COMPUTE PRESENT ACCELERATION IN UNITS OF
035056,000041: 31,2250 00006 EXTEND # 2(-4) M/CS/CS, SAVING SERVICER TROUBLE
035057,000042: 31,2251 72444 MP /AF/CNST
035058,000043: 31,2252 00006 +3 EXTEND
035059,000044: 31,2253 23605 QXCH RTNHOLD
035060,000045: 31,2254 02425 AFDUMP TC MASSMULT
035061,000046: 31,2255 53563 DXCH FP # FP = PRESENT THRUST
035062,000047: 31,2256 00006 EXTEND
035063,000048: 31,2257 31574 DCA /AFC/
035064,000049: 31,2260 02425 TC MASSMULT
035065,000050: 31,2261 55613 TS FC # FC = THRUST DESIRED BY GUIDANCE
035066,000051: 31,2262 53561 DXCH FCODD # FCODD = WHAT IT IS GOING TO GET
035067,000052:
035068,000053: # IF IT HAS BEEN LESS THAN 3 SECONDS SINCE THE LAST THROTTLING, AUGMENT FP USING THE FWEIGHT CALCULATED THEN.
035069,000054:
035070,000055: 31,2263 41615 CS TTHROT # THIS CODING ASSUMES A FLATOUT WITHIN
035071,000056: 31,2264 60025 AD TIME1 # 80 SECONDS BEFORE FIRST THROTTLE CALL
035072,000057: 31,2265 74733 MASK POSMAX
035073,000058: 31,2266 40000 COM
035074,000059: 31,2267 65002 AD 3SECS
035075,000060: 31,2270 00006 EXTEND
035076,000061: 31,2271 62275 BZMF WHERETO # BRANCH IF (TIME1-TTHROT +1) > 3 SECONDS
035077,000062: 31,2272 00006 EXTEND
035078,000063: 31,2273 31607 DCA FWEIGHT
035079,000064: 31,2274 21563 DAS FP
035080,000065:
035081,000066: # THIS LOGIC DETERMINES THE THROTTLING IN THE REGION 10% - 94%. THE MANUAL THROTTLE, NOMINALLY SET AT
035082,000067: # MINIMUM BY ASTRONAUT OR MISSION CONTROL PROGRAMS, PROVIDES THE LOWER BOUND. A STOP IN THE THROTTLE HARDWARE
035083,000068: # PROVIDES THE UPPER.
035084,000069:
035085,000070: 31,2275 35014 WHERETO CA EBANK5 # INITIALIZE L*WCR*T AND H*GHCR*T FROM
035086,000071: 31,2276 54003 TS EBANK # PAD LOADED ERASABLES IN W-MATRIX
![]() |
Page 798 |
035088,000073: 31,2277 E5,1476 EBANK= LOWCRIT
035089,000074: 31,2277 00006 EXTEND
035090,000075: 31,2300 31477 DCA LOWCRIT
035091,000076: 31,2301 52131 DXCH L*WCR*T
035092,000077: 31,2302 35016 CA EBANK7
035093,000078: 31,2303 54003 TS EBANK
035094,000079: 31,2304 E7,1610 EBANK= PIF
035095,000080: 31,2304 44755 CS ZERO # INITIALIZE PIFPSET
035096,000081: 31,2305 55604 TS PIFPSET
035097,000082: 31,2306 40131 CS H*GHCR*T
035098,000083: 31,2307 61616 AD FCOLD
035099,000084: 31,2310 00006 EXTEND
035100,000085: 31,2311 62323 BZMF LOWFCOLD # BRANCH IF FCOLD < OR = HIGHCRIT
035101,000086: 31,2312 40130 CS L*WCR*T
035102,000087: 31,2313 61560 AD FCODD
035103,000088: 31,2314 00006 EXTEND
035104,000089: 31,2315 62320 BZMF FCOMPSET # BRANCH IF FC < OR = LOWCRIT
035105,000090: 31,2316 31562 CA FP # SEE NOTE 1
035106,000091: 31,2317 12337 TCF FLATOUT1
035107,000092:
035108,000093: 31,2320 42002 FCOMPSET CS FMAXODD # SEE NOTE 2
035109,000094: 31,2321 61562 AD FP
035110,000095: 31,2322 12341 TCF FLATOUT2
035111,000096:
035112,000097: 31,2323 40131 LOWFCOLD CS H*GHCR*T
035113,000098: 31,2324 61560 AD FCODD
035114,000099: 31,2325 00006 EXTEND
035115,000100: 31,2326 62342 BZMF DOPIF # BRANCH IF FC < OR = HIGHCRIT
035116,000101:
035117,000102: 31,2327 30102 CA FLAGWRD6 # IS POUTFLAG SET?
035118,000103: 31,2330 74745 MASK POUTBIT
035119,000104: 31,2331 00006 EXTEND
035120,000105: 31,2332 12336 BZF FLATOUT1 -1
035121,000106:
035122,000107: 31,2333 30131 CA H*GHCR*T # YES: THROTTLE-UP ONLY TO HIGHCRIT
035123,000108: 31,2334 55560 TS FCODD
035124,000109: 31,2335 12342 TCF DOPIF
035125,000110:
035126,000111: 31,2336 32003 CA FMAXPOS # NO: THROTTLE-UP
035127,000112: 31,2337 53561 FLATOUT1 DXCH FCODD
035128,000113: 31,2340 34737 CA FEXTRA
035129,000114: 31,2341 55604 FLATOUT2 TS PIFPSET
035130,000115:
035131,000116: # NOTE 1 FC IS SET EQUAL TO FP SO PIF WILL BE ZERO. THIS IS DESIRABLE
035132,000117: # AS THERE IS ACTUALLY NO THROTTLE CHANGE.
035133,000118:
035134,000119: # NOTE2 HERE, SINCE WE ARE ABOUT TO RETURN TO THE THROTTLEABLE REGION
035135,000120: # (BELOW 55%) THE QUANTITY -(FMAXODD-FP) IS COMPUTED AND PUT
035136,000121: # INTO PIFPSET TO COMPENSATE FOR THE DIFFERENCE BETWEEN THE
035137,000122: # NUMBER OF BITS CORRESPONDING TO FULL THROTTLE (FMAXODD) AND THE
![]() |
Page 799 |
035139,000124: # NUMBER CORRESPONDING TO ACTUAL THRUST (FP). THUS THE TOTAL
035140,000125: # THROTTLE COMMAND PIF = FC - FP - (FMAXODD - FP) = FC - FMAXODD.
035141,000126:
035142,000127: 31,2342 03721 DOPIF TC FASTCHNG # RESTART PROTECTION
035143,000128: 31,2343 00006 EXTEND
035144,000129: 31,2344 31561 DCA FCODD
035145,000130: 31,2345 55616 TS FCOLD
035146,000131: 31,2346 53611 DXCH PIF
035147,000132: 31,2347 00006 EXTEND
035148,000133: 31,2350 41563 DCS FP
035149,000134: 31,2351 21611 DAS PIF # PIF = FC - FP, NEVER EQUALS +0
035150,000135:
035151,000136: 31,2352 31610 DOIT CA PIF
035152,000137: 31,2353 61604 AD PIFPSET # ADD IN PIFPSET, WITHOUT CHANGING PIF
035153,000138: 31,2354 55612 TS PSEUDO55
035154,000139: 31,2355 54055 TS THRUST
035155,000140: 31,2356 34750 CAF BIT4
035156,000141: 31,2357 00006 EXTEND
035157,000142: 31,2360 05014 WOR CHAN14
035158,000143: 31,2361 30025 CA TIME1
035159,000144: 31,2362 55615 TS TTHROT
035160,000145:
035161,000146: # SINCE /AF/ IS NOT AN INSTANTANEOUS ACCELERATION, BUT RATHER AN "AVERAGE" OF THE ACCELERATION LEVELS DURING
035162,000147: # THE PRECEEDING PIPA INTERVAL, AND SINCE FP IS COMPUTED DIRECTLY FROM /AF/, FP IN ORDER TO CORRESPOND TO THE
035163,000148: # ACTUAL THRUST LEVEL AT THE END OF THE INTERVAL MUST BE WEIGHTED BY
035164,000149:
035165,000150: # PIF(PPROCESS + TL) PIF /PIF/
035166,000151: # FWEIGHT = ------------------ + -------------
035167,000152: # PGUID 2 PGUID FRATE
035168,000153:
035169,000154: # WHERE PPROCESS IS THE TIME BETWEEN PIPA READING AND THE START OF THROTTLING, PGUID IS THE GUIDANCE PERIOD, AND
035170,000155: # FRATE IS THE THROTTLING RATE (32 UNITS PER CENTISECOND). PGUID IS ASSUMED TO BE 2 SECONDS. THE "TL" IN THE
035171,000156: # FIRST TERM REPRESENTS THE ENGINE'S RESPONSE LAG. HERE FWEIGHT IS COMPUTED FOR USE NEXT PASS.
035172,000157:
035173,000158: 31,2363 35003 CA 4SECS
035174,000159: 31,2364 54002 TS Q
035175,000160: 31,2365 41235 CS PIPTIME +1 # TIME OF LAST PIPA READING
035176,000161: 31,2366 60025 AD TIME1
035177,000162: 31,2367 62004 AD THROTLAG # COMPENSATE FOR ENGINE RESPONSE LAG
035178,000163: 31,2370 74357 MASK LOW8 # MAKE SURE SMALL AND POSITIVE
035179,000164: 31,2371 22007 ZL
035180,000165: 31,2372 00006 EXTEND
035181,000166: 31,2373 10002 DV Q
035182,000167: 31,2374 00006 EXTEND
035183,000168: 31,2375 71610 MP PIF
035184,000169: 31,2376 60000 DOUBLE
035185,000170: 31,2377 53607 DXCH FWEIGHT
035186,000171: 31,2400 37715 CA 2.PG.FRT
035187,000172: 31,2401 54002 TS Q
![]() |
Page 800 |
035189,000174: 31,2402 11610 CCS PIF
035190,000175: 31,2403 64753 AD ONE
035191,000176: 31,2404 12406 TCF +2
035192,000177: 31,2405 64753 AD ONE
035193,000178: 31,2406 00006 EXTEND
035194,000179: 31,2407 71610 MP PIF
035195,000180: 31,2410 00006 EXTEND
035196,000181: 31,2411 10002 DV Q
035197,000182: 31,2412 22007 ZL
035198,000183: 31,2413 21607 DAS FWEIGHT
035199,000184:
035200,000185: 31,2414 01605 THDUMP TC RTNHOLD
035201,000186:
035202,000187: # FLATOUT THROTTLES UP THE DESCENT ENGINE, AND IS CALLED AS A BASIC SUBROUTINE.
035203,000188:
035204,000189: 31,2415 34737 FLATOUT CAF BIT13 # 4096 PULSES
035205,000190: 31,2416 55604 WHATOUT TS PIFPSET # USE PIFPSET SO FWEIGHT WILL BE ZERO
035206,000191: 31,2417 44755 CS ZERO
035207,000192: 31,2420 55616 TS FCOLD
035208,000193: 31,2421 55610 TS PIF
035209,000194: 31,2422 00006 EXTEND
035210,000195: 31,2423 23605 QXCH RTNHOLD
035211,000196: 31,2424 12352 TCF DOIT
035212,000197:
035213,000198: # MASSMULT SCALES ACCELERATION, ARRIVING IN A AND L IN UNITS OF 2(-4) M/CS/CS, TO FORCE IN PULSE UNITS.
035214,000199:
035215,000200: 31,2425 00006 MASSMULT EXTEND
035216,000201: 31,2426 22130 QXCH BUF
035217,000202: 31,2427 00006 EXTEND
035218,000203: 31,2430 71244 MP MASS # LEAVES ODDLY SCALED FORCE IN A AND L
035219,000204: 31,2431 52155 DXCH MPAC
035220,000205: 31,2432 07102 TC DMP # LEAVES PROPERLY SCALED FORCE IM MPAC
035221,000206: 31,2433 02005 ADRES SCALEFAC
035222,000207: 31,2434 07256 TC TPAGREE
035223,000208: 31,2435 30154 CA MPAC
035224,000209: 31,2436 00006 EXTEND
035225,000210: 31,2437 12442 BZF +3
035226,000211: 31,2440 34733 CAF POSMAX
035227,000212: 31,2441 00130 TC BUF
035228,000213: 31,2442 52156 DXCH MPAC +1
035229,000214: 31,2443 00130 TC BUF
035230,000215:
035231,000216: # CONSTANTS:-
035232,000217:
035233,000218: 31,2444 4737 FEXTRA = BIT13
![]() |
Page 801 |
035235,000220: 31,2444 7715 2.PG.FRT = PRIO31 # DECIMAL 12800
035236,000221: 31,2444 04143 /AF/CNST DEC .13107
035237,000222:
035238,000223: # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
End of include-file THROTTLE_CONTROL_ROUTINES.agc. Parent file is MAIN.agc