Source Code
These source-code files are part of a reconstructed copy of Luminary 163, the
first (unflown) release of the Apollo 14 Lunar Module (LM) Apollo Guidance
Computer (AGC) software.
The reconstruction began with reconstructed source code for Luminary 173. Changes between revision 163 and 173 were backed out, as described by Luminary memos 157 and 158. The reconstruction was verified by matching memory-bank checksums to those listed in drawing 2021152N. Note that page numbers in the reconstructed code match those for the baseline log section mentioned in each file's changelog; the page numbers for a real Luminary 163 listing would be different. Comments from the original source code are prefixed with a single '#' symbol, whereas comments added later are prefixed by "##" or "###". Report any errors noted by creating an issue report at the Virtual AGC project's GitHub repository. |
047576,000002: ## Copyright: Public domain.
047577,000003: ## Filename: LATITUDE_LONGITUDE_SUBROUTINES.agc
047578,000004: ## Purpose: A section of Luminary revision 163.
047579,000005: ## It is part of the reconstructed source code for the first
047580,000006: ## (unflown) release of the flight software for the Lunar
047581,000007: ## Module's (LM) Apollo Guidance Computer (AGC) for Apollo 14.
047582,000008: ## The code has been recreated from a reconstructed copy of
047583,000009: ## Luminary 173, as well as Luminary memos 157 amd 158.
047584,000010: ## It has been adapted such that the resulting bugger words
047585,000011: ## exactly match those specified for Luminary 163 in NASA
047586,000012: ## drawing 2021152N, which gives relatively high confidence
047587,000013: ## that the reconstruction is correct.
047588,000014: ## Reference: pp. 1124-1130
047589,000015: ## Assembler: yaYUL
047590,000016: ## Contact: Ron Burkey <info@sandroid.org>.
047591,000017: ## Website: www.ibiblio.org/apollo/index.html
047592,000018: ## Mod history: 2019-08-21 MAS Created from Luminary 173.
047593,000019:
Page 1124 |
047595,000021: # SUBROUTINE TO CONVERT RAD VECTOR AT GIVEN TIME TO LAT,LONG AND ALT
047596,000022:
047597,000023: # CALLING SEQUENCE
047598,000024:
047599,000025: # L-1 CALL
047600,000026: # L LAT-LONG
047601,000027: # SUBROUTINES USED
047602,000028:
047603,000029: # R-TO-RP,ARCTAN,SETGAMMA,SETRE
047604,000030: # ERASABLE INIT. REQ.
047605,000031:
047606,000032: # AXO,-AYO,AZO,TEPHEM (SET AT LAUNCH TIME)
047607,000033: # ALPHAV = POSITION VECTOR METERS B-29
047608,000034: # MPAC-- TIME (CSECS B-28)
047609,000035: # ERADFLAG =1, TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS
047610,000036: # LUNAFLAG=0 FOR EARTH,1 FOR MOON
047611,000037: # OUTPUT
047612,000038:
047613,000039: # LATITUDE IN LAT (REVS. B-0)
047614,000040: # LONGITUDE IN LONG (REVS. B-0)
047615,000041: # ALTITUDE IN ALT METERS B-29
047616,000042: 30,3760 BANK 30
047617,000043: 13,2000 SETLOC LATLONG
047618,000044: 13,2000 BANK
047619,000045:
047620,000046: 13,2347 COUNT* $$/LT-LG
047621,000047: 13,2347 E4,1431 EBANK= ALPHAV
047622,000048: 13,2347 40220 LAT-LONG STQ SETPD
047623,000049: 13,2350 03674 INCORPEX
047624,000050: 13,2351 00001 0D
047625,000051: 13,2352 24007 STOVL 6D # SAVE TIME IN 6-7D FOR R-TO-RP
047626,000052: 13,2353 02032 ALPHAV
047627,000053: 13,2354 51406 PUSH ABVAL # 0-5D= R FOR R-TO-RP
047628,000054: 13,2355 16070 STODL ALPHAM # ABS. VALUE OF R FOR ALT FORMULA BELOW
047629,000055: 13,2356 24007 ZEROVEC # SET MPAC=0 FOR EARTH,NON-ZERO FOR MOON
047630,000056: 13,2357 71414 BOFF COS # USE COS(0) TO GET NON-ZERO IN MPAC
047631,000057: 13,2360 01743 LUNAFLAG # 0=EARTH,1=MOON
047632,000058: 13,2361 26362 CALLRTRP
047633,000059: 13,2362 77624 CALLRTRP CALL
047634,000060: 13,2363 51632 R-TO-RP # RP VECTOR CONVERTED FROM R B-29
047635,000061: 13,2364 77656 UNIT # UNIT RP B-1
047636,000062: 13,2365 36032 STCALL ALPHAV # U2= 1/2 SINL FOR SETRE SUBR BELOW
047637,000063: 13,2366 26546 SETGAMMA # SET GAMMA=B2/A2 FOR EARTH,=1 FOR MOON
047638,000064: 13,2367 77624 CALL # SCALED B-1
047639,000065: 13,2370 26556 SETRE # CALC RE METERS B-29
047640,000066: 13,2371 63545 DLOAD DSQ
047641,000067: 13,2372 02032 ALPHAV
047642,000068: 13,2373 63525 PDDL DSQ
047643,000069: 13,2374 02034 ALPHAV +2
047644,000070: 13,2375 75415 DAD SQRT
Page 1125 |
047646,000072: 13,2376 76405 DMP SL1R
047647,000073: 13,2377 00011 GAMRP
047648,000074: 13,2400 14021 STODL COSTH # COS(LAT) B-1
047649,000075: 13,2401 02036 ALPHAV +4
047650,000076: 13,2402 34023 STCALL SINTH # SIN(LAT) B-1
047651,000077: 13,2403 26506 ARCTAN
047652,000078: 13,2404 15120 STODL LAT # LAT B0
047653,000079: 13,2405 02032 ALPHAV
047654,000080: 13,2406 14021 STODL COSTH # COS(LONG) B-1
047655,000081: 13,2407 02034 ALPHAV +2
047656,000082: 13,2410 34023 STCALL SINTH # SIN(LONG) B-1
047657,000083: 13,2411 26506 ARCTAN
047658,000084: 13,2412 15122 STODL LONG # LONG. REVS B-0 IN RANGE -1/2 TO 1/2
047659,000085: 13,2413 02070 ALPHAM
047660,000086: 13,2414 77625 DSU # ALT= R-RE METERS B-29
047661,000087: 13,2415 03673 ERADM
047662,000088: 13,2416 35124 STCALL ALT # EXIT WITH ALT METERS B-29
047663,000089: 13,2417 03674 INCORPEX
047664,000090:
Page 1126 |
047666,000092: # SUBROUTINE TO CONVERT LAT,LONG,ALT AT GIVEN TIME TO RADIUS VECTOR
047667,000093: # CALLING SEQUENCE
047668,000094:
047669,000095: # L-1 CALL
047670,000096: # L LALOTORV
047671,000097: # SUBROUTINES USED
047672,000098:
047673,000099: # SETGAMMA,SETRE,RP-TO-R
047674,000100: # ERASABLE INIT. REQ.
047675,000101:
047676,000102: # AXO,AYO,AZO,TEPHEM SET AT LAUNCH TIME
047677,000103: # LAT-- LATITUDE (REVS B0)
047678,000104: # LONG-- LONGITUDE (REVS B0)
047679,000105: # ALT--ALTITUDE (METERS) B-29
047680,000106: # MPAC-- TIME (CSECS B-28)
047681,000107: # ERADFLAG =1 TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS
047682,000108: # LUNAFLAG=0 FOR EARTH,1 FOR MOON
047683,000109: # OUTPUT
047684,000110:
047685,000111: # R-VECTOR IN ALPHAV (METERS B-29)
047686,000112: 13,2420 40220 LALOTORV STQ SETPD # LAT,LONG,ALT TO R VECTOR
047687,000113: 13,2421 03674 INCORPEX
047688,000114: 13,2422 00001 0D
047689,000115: 13,2423 34007 STCALL 6D # 6-7D= TIME FOR RP-TO-R
047690,000116: 13,2424 26546 SETGAMMA # GAMMA=B2/A2 FOR EARTH,1 FOR MOON B-1
047691,000117: 13,2425 73545 DLOAD SIN # COS(LONG)COS(LAT) IN MPAC
047692,000118: 13,2426 01120 LAT # UNIT RP= SIN(LONG)COS(LAT) 2-3D
047693,000119: 13,2427 65275 DMPR PDDL # PD 2 GAMMA*SIN(LAT) 0-1D
047694,000120: 13,2430 00011 GAMRP
047695,000121: 13,2431 01120 LAT # 0-1D= GAMMA*SIN(LAT) B-2
047696,000122: 13,2432 65346 COS PDDL # PD4 2-3D=COS(LAT) B-1 TEMPORARILY
047697,000123: 13,2433 01122 LONG
047698,000124: 13,2434 57356 SIN DMPR # PD 2
047699,000125: 13,2435 71525 PDDL COS # PD 4 2-3D=SIN(LONG)COS(LAT) B-2
047700,000126: 13,2436 01120 LAT
047701,000127: 13,2437 71525 PDDL COS # PD 6 4-5D=COS(LAT) B-1 TEMPORARILY
047702,000128: 13,2440 01122 LONG
047703,000129: 13,2441 55475 DMPR VDEF # PD 4 MPAC= COS(LONG)COS(LAT) B-2
047704,000130: 13,2442 41456 UNIT PUSH # 0-5D= UNIT RP FOR RP-TO-R SUBR.
047705,000131: 13,2443 36032 STCALL ALPHAV # ALPHAV +4= SINL FOR SETRE SUBR.
047706,000132: 13,2444 26556 SETRE # RE METERS B-29
047707,000133: 13,2445 43145 DLOAD BOFF # SET MPAC=0 FOR EARTH,NON-ZERO FOR MOON
047708,000134: 13,2446 24007 ZEROVEC
047709,000135: 13,2447 01743 LUNAFLAG
047710,000136: 13,2450 26452 CALLRPRT
047711,000137: 13,2451 77746 COS # USE COS(0) TO GET NON-ZERO IN MPAC
047712,000138: 13,2452 77624 CALLRPRT CALL
047713,000139: 13,2453 55720 RP-TO-R # EXIT WITH UNIT R VECTOR IN MPAC
047714,000140: 13,2454 16032 STODL ALPHAV
047715,000141: 13,2455 03673 ERADM
Page 1127 |
047717,000143: 13,2456 74215 DAD VXSC # (RE + ALT)(UNIT R) METERS B-30
047718,000144: 13,2457 01124 ALT
047719,000145: 13,2460 02032 ALPHAV
047720,000146: 13,2461 77772 VSL1 # R METERS B-29
047721,000147: 13,2462 36032 STCALL ALPHAV # EXIT WITH R IN METERS B-29
047722,000148: 13,2463 03674 INCORPEX
047723,000149: # SUBROUTINE TO COMPUTE EARTH RADIUS
047724,000150:
047725,000151: # INPUT
047726,000152:
047727,000153: # 1/2 SIN LAT IN ALPHAV +4
047728,000154:
047729,000155: # OUTPUT
047730,000156:
047731,000157: # EARTH RADIUS IN ERADM AND MPAC (METERS B-29)
047732,000158:
047733,000159: 13,2464 63545 GETERAD DLOAD DSQ
047734,000160: 13,2465 02036 ALPHAV +4 # SIN**2(L)
047735,000161: 13,2466 44352 SL1 BDSU
047736,000162: 13,2467 24005 DP1/2 # COS**2(L)
047737,000163: 13,2470 44275 DMPR BDSU
047738,000164: 13,2471 26505 EE
047739,000165: 13,2472 24005 DP1/2
047740,000166: 13,2473 75465 BDDV SQRT
047741,000167: 13,2474 26501 B2XSC
047742,000168: 13,2475 77622 SR4R
047743,000169: 13,2476 03673 STORE ERADM
047744,000170: 13,2477 77616 RVQ
047745,000171:
047746,000172: # THE FOLLOWING CONSTANTS WERE COMPUTED WITH A=6378166,B=6356784 METERS
047747,000173: # B2XSC= B**2 SCALED B-51
047748,000174: # B2/A2= B**2/A**2 SCALED B-1
047749,000175: # EE=(1-B**2/A**2) SCALED B-0
047750,000176: 13,2500 00446 00305 B2XSC 2DEC .0179450689 # B**2 SCALED B-51
047751,000177:
047752,000178: 13,2502 12,2004 DP1/2 = XUNIT
047753,000179: 13,2502 17711 05254 B2/A2 2DEC .9933064884 B-1 # GAMMA= B**2/A**2 B-1
047754,000180:
047755,000181: 13,2504 00155 25250 EE 2DEC 6.6935116 E-3 # (1-B**2/A**2) B-0
047756,000182:
Page 1128 |
047758,000184: # ARCTAN SUBROUTINE
047759,000185:
047760,000186:
047761,000187: # CALLING SEQUENCE
047762,000188:
047763,000189: # SIN THETA IN SINTH B-1
047764,000190: # COS THETA IN COSTH B-1
047765,000191: # CALL ARCTAN
047766,000192:
047767,000193: # OUTPUT
047768,000194: # ARCTAN THETA IN MPAC AND THETA B-0 IN RANGE -1/2 TO +1/2
047769,000195:
047770,000196:
047771,000197: 13,2506 77600 ARCTAN BOV
047772,000198: 13,2507 26510 CLROVFLW
047773,000199: 13,2510 63545 CLROVFLW DLOAD DSQ
047774,000200: 13,2511 00023 SINTH
047775,000201: 13,2512 63525 PDDL DSQ
047776,000202: 13,2513 00021 COSTH
047777,000203: 13,2514 77615 DAD
047778,000204: 13,2515 75454 BZE SQRT
047779,000205: 13,2516 26534 ARCTANXX # ATAN=0/0 SET THETA=0
047780,000206: 13,2517 40065 BDDV BOV
047781,000207: 13,2520 00023 SINTH
047782,000208: 13,2521 26541 ATAN=90
047783,000209: 13,2522 67542 SR1 ASIN
047784,000210: 13,2523 00025 STORE THETA
047785,000211: 13,2524 50125 PDDL BMN
047786,000212: 13,2525 00021 COSTH
047787,000213: 13,2526 26530 NEGCOS
047788,000214: 13,2527 43545 DLOAD RVQ
047789,000215: 13,2530 57545 NEGCOS DLOAD DCOMP
047790,000216: 13,2531 43244 BPL DAD
047791,000217: 13,2532 26536 NEGOUT
047792,000218: 13,2533 24005 DP1/2
047793,000219: 13,2534 00025 ARCTANXX STORE THETA
047794,000220: 13,2535 77616 RVQ
047795,000221:
047796,000222: 13,2536 52025 NEGOUT DSU GOTO
047797,000223: 13,2537 24005 DP1/2
047798,000224: 13,2540 26534 ARCTANXX
047799,000225: 13,2541 75345 ATAN=90 DLOAD SIGN
047800,000226: 13,2542 11011 LODP1/4
047801,000227: 13,2543 00023 SINTH
047802,000228: 13,2544 00025 STORE THETA
047803,000229: 13,2545 77616 RVQ
047804,000230:
047805,000231: 13,2546 12,2006 2DZERO = DPZERO
047806,000232:
Page 1129 |
047808,000234: # ..... SETGAMMA SUBROUTINE .....
047809,000235: # SUBROUTINE TO SET GAMMA FOR THE LAT-LONG AND LALOTORV SUBROUTINES
047810,000236:
047811,000237: # GAMMA = B**2/A**2 FOR EARTH (B-1)
047812,000238: # GAMMA = 1 FOR MOON (B-1)
047813,000239:
047814,000240: # CALLING SEQUENCE
047815,000241: # L CALL
047816,000242: # L+1 SETGAMMA
047817,000243:
047818,000244: # INPUT
047819,000245: # LUNAFLAG=0 FOR EARTH,=1 FOR MOON
047820,000246:
047821,000247: # OUTPUT
047822,000248: # GAMMA IN GAMRP (B-1)
047823,000249:
047824,000250: 13,2546 43145 SETGAMMA DLOAD BOFF # BRANCH FOR EARTH
047825,000251: 13,2547 26503 B2/A2 # EARTH GAMMA
047826,000252: 13,2550 01743 LUNAFLAG
047827,000253: 13,2551 26554 SETGMEX
047828,000254: 13,2552 77735 SLOAD
047829,000255: 13,2553 24005 1B1 # MOON GAMMA
047830,000256: 13,2554 00011 SETGMEX STORE GAMRP
047831,000257: 13,2555 77616 RVQ
047832,000258: 13,2556 GAMRP = 8D
047833,000259:
Page 1130 |
047835,000261: # .....SETRE SUBROUTINE .....
047836,000262: # SUBROUTINE TO SET RE (EARTH OR MOON RADIUS)
047837,000263:
047838,000264: # RE= RM FOR MOON
047839,000265: # RE= RREF FOR FIXED EARTH RADIUS OR COMPUTED RF FOR FISCHER ELLIPSOID
047840,000266:
047841,000267: # CALLING SEQUENCE
047842,000268: # L CALL
047843,000269: # L+1 SETRE
047844,000270:
047845,000271: # SUBROUTINES USED
047846,000272: # GETERAD
047847,000273:
047848,000274: # INPUT
047849,000275: # ERADFLAG=0 FOR FIXED RE, 1 FOR COMPUTED RE
047850,000276: # ALPHAV +4= 1/2 SINL IF GETERAD IS CALLED
047851,000277: # LUNAFLAG=0 FOR EARTH,=1 FOR MOON
047852,000278:
047853,000279: # OUTPUT
047854,000280: # ERADM= 504RM FOR MOON (METERS B-29)
047855,000281: # ERADM= ERAD OR COMPUTED RF FOR EARTH (METERS B-29)
047856,000282:
047857,000283: 13,2556 71220 SETRE STQ DLOAD
047858,000284: 13,2557 00051 SETREX
047859,000285: 13,2560 10003 504RM
047860,000286: 13,2561 71214 BON DLOAD # BRANCH FOR MOON
047861,000287: 13,2562 01703 LUNAFLAG
047862,000288: 13,2563 26573 TSTRLSRM
047863,000289: 13,2564 10001 ERAD
047864,000290: 13,2565 45014 BOFF CALL # ERADFLAG=0 FOR FIXED RE,1 FOR COMPUTED
047865,000291: 13,2566 00742 ERADFLAG
047866,000292: 13,2567 26571 SETRXX
047867,000293: 13,2570 26464 GETERAD
047868,000294: 13,2571 37673 SETRXX STCALL ERADM # EXIT WITH RE OR RM METERS B-29
047869,000295: 13,2572 00051 SETREX
047870,000296: 13,2573 77214 TSTRLSRM BON VLOAD # ERADFLAG=0,SET R0=RLS
047871,000297: 13,2574 00702 ERADFLAG # =1 R0=RM
047872,000298: 13,2575 26571 SETRXX
047873,000299: 13,2576 02021 RLS
047874,000300: 13,2577 64446 ABVAL SR2R # SCALE FROM B-27 TO B-29
047875,000301: 13,2600 77650 GOTO
047876,000302: 13,2601 26571 SETRXX
047877,000303: 13,2602 0000051 SETREX = S2
End of include-file LATITUDE_LONGITUDE_SUBROUTINES.agc. Parent file is MAIN.agc