Source Code
047944,000001: # Copyright: Public domain.
047945,000002: # Filename: LATITUDE_LONGITUDE_SUBROUTINES.agc
047946,000003: # Purpose: Part of the source code for Luminary 1A build 099.
047947,000004: # It is part of the source code for the Lunar Module's (LM)
047948,000005: # Apollo Guidance Computer (AGC), for Apollo 11.
047949,000006:
047950,000007: # Assembler: yaYUL
047951,000008: # Contact: Jim Lawton <jim.lawton@gmail.com>
047952,000009: # Website: www.ibiblio.org/apollo.
047953,000010: # Pages: 1133-1139
047954,000011: # Mod history: 2009-05-28 JVL Updated from page images.
047955,000012:
047956,000013: # This source code has been transcribed or otherwise adapted from digitized
047957,000014: # images of a hardcopy from the MIT Museum. The digitization was performed
047958,000015: # by Paul Fjeld, and arranged for by Deborah Douglas of the Museum. Many
047959,000016: # thanks to both. The images (with suitable reduction in storage size and
047960,000017: # consequent reduction in image quality as well) are available online at
047961,000018: # www.ibiblio.org/apollo. If for some reason you find that the images are
047962,000019: # illegible, contact me at info@sandroid.org about getting access to the
047963,000020: # (much) higher-quality images which Paul actually created.
047964,000021:
047965,000022: # Notations on the hardcopy document read, in part:
047966,000023:
047967,000024: # Assemble revision 001 of AGC program LMY99 by NASA 2021112-061
047968,000025: # 16:27 JULY 14, 1969
047969,000026:
047970,000027: # Page 1133
047971,000028: # SUBROUTINE TO CONVERT RAD VECTOR AT GIVEN TIME TO LAT,LONG AND ALT
047972,000029:
047973,000030: # CALLING SEQUENCE
047974,000031: # L-1 CALL
047975,000032: # L LAT-LONG
047976,000033:
047977,000034: # SUBROUTINES USED
047978,000035: # R-TO-RP, ARCTAN, SFTGAMMA, SETRE
047979,000036:
047980,000037: # ERASABLE INIT. REQ.
047981,000038: # AXO, -AYO, AZO, TEPHEM (SET AT LAUNCH TIME)
047982,000039: # ALPHAV = POSITION VECTOR METERS B-29
047983,000040: # MPAC -- TIME (CSECS B-28)
047984,000041: # ERADFLAG =1, TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS
047985,000042: # LUNAFLAG=0 FOR EARTH, 1 FOR MOON
047986,000043:
047987,000044: # OUTPUT
047988,000045: # LATITUDE IN LAT (REVS. B-0)
047989,000046: # LONGITUDE IN LONG (REVS. B-0)
047990,000047: # ALTITUDE IN ALT METERS B-29
047991,000048:
047992,000049: 30,3775 BANK 30
047993,000050: 13,2000 SETLOC LATLONG
047994,000051: 13,2000 BANK
047995,000052:
047996,000053: 13,2351 COUNT* $$/LT-LG
047997,000054: 13,2351 E4,1431 EBANK= ALPHAV
047998,000055: 13,2351 40220 LAT-LONG STQ SETPD
047999,000056: 13,2352 03674 INCORPEX
048000,000057: 13,2353 00001 0D
048001,000058: 13,2354 24007 STOVL 6D # SAVE TIME IN 6-7D FOR R-TO-RP
048002,000059: 13,2355 02032 ALPHAV
048003,000060: 13,2356 51406 PUSH ABVAL # 0-5D= R FOR R-TO-RP
048004,000061: 13,2357 16070 STODL ALPHAM # ABS. VALUE OF R FOR ALT FORMULA BELOW
048005,000062: 13,2360 24007 ZEROVEC # SET MPAC=0 FOR EARTH, NON-ZERO FOR MOON
048006,000063: 13,2361 71414 BOFF COS # USE COS(0) TO GET NON-ZERO IN MPAC
048007,000064: 13,2362 01743 LUNAFLAG # 0=EARTH, 1=MOON
048008,000065: 13,2363 26364 CALLRTRP
048009,000066: 13,2364 77624 CALLRTRP CALL
048010,000067: 13,2365 51670 R-TO-RP # RP VECTOR CONVERTED FROM R B-29
048011,000068: 13,2366 77656 UNIT # UNIT RP B-1
048012,000069: 13,2367 36032 STCALL ALPHAV # U2= 1/2 SINL FOR SETRE SUBR BELOW
048013,000070: 13,2370 26550 SETGAMMA # SET GAMMA=B2/A2 FOR EARTH, =1 FOR MOON
048014,000071: 13,2371 77624 CALL # SCALED B-1
048015,000072: 13,2372 26560 SETRE # CALC RE METERS B-29
048016,000073: 13,2373 63545 DLOAD DSQ
048017,000074: 13,2374 02032 ALPHAV
048018,000075: 13,2375 63525 PDDL DSQ
048019,000076: 13,2376 02034 ALPHAV +2
048020,000077: 13,2377 75415 DAD SQRT
048021,000078: # Page 1134
048022,000079: 13,2400 76405 DMP SL1R
048023,000080: 13,2401 00011 GAMRP
048024,000081: 13,2402 14021 STODL COSTH # COS(LAT) B-1
048025,000082: 13,2403 02036 ALPHAV +4
048026,000083: 13,2404 34023 STCALL SINTH # SIN(LAT) B-1
048027,000084: 13,2405 26510 ARCTAN
048028,000085: 13,2406 15121 STODL LAT # LAT B0
048029,000086: 13,2407 02032 ALPHAV
048030,000087: 13,2410 14021 STODL COSTH # COS(LONG) B-1
048031,000088: 13,2411 02034 ALPHAV +2
048032,000089: 13,2412 34023 STCALL SINTH # SIN(LONG) B-1
048033,000090: 13,2413 26510 ARCTAN
048034,000091: 13,2414 15123 STODL LONG # LONG. REVS B-0 IN RANGE -1/2 TO 1/2
048035,000092: 13,2415 02070 ALPHAM
048036,000093: 13,2416 77625 DSU # ALT= R-RE METERS B-29
048037,000094: 13,2417 03673 ERADM
048038,000095: 13,2420 35125 STCALL ALT # EXIT WITH ALT METERS B-29
048039,000096: 13,2421 03674 INCORPEX
048040,000097: # Page 1135
048041,000098: # SUBROUTINE TO CONVERT LAT,LONG.ALT AT GIVEN TIME TO RADIUS VECTOR
048042,000099:
048043,000100: # CALLING SEQUENCE
048044,000101: # L-1 CALL
048045,000102: # L LALOTORV
048046,000103:
048047,000104: # SUBROUTINES USED
048048,000105: # SETGAMMA, SETRE, RP-TO-R
048049,000106:
048050,000107: # ERASABLE INIT. REQ.
048051,000108: # AXO, AYO, AZO, TEPHEM SET AT LAUNCH TIME
048052,000109: # LAT -- LATITUDE (REVS B0)
048053,000110: # LONG -- LONGITUDE (REVS B0)
048054,000111: # ALT -- ALTITUDE (METERS) B-29
048055,000112: # MPAC -- TIME (CSECS B-28)
048056,000113: # ERADFLAG =1 TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS
048057,000114: # LUNAFLAG=0 FOR EARTH, 1 FOR MOON
048058,000115:
048059,000116: # OUTPUT
048060,000117: # R-VECTOR IN ALPHAV (METERS B-29)
048061,000118:
048062,000119: 13,2422 40220 LALOTORV STQ SETPD # LAT,LONG,ALT TO R VECTOR
048063,000120: 13,2423 03674 INCORPEX
048064,000121: 13,2424 00001 0D
048065,000122: 13,2425 34007 STCALL 6D # 6-7D= TIME FOR RP-TO-R
048066,000123: 13,2426 26550 SETGAMMA # GAMMA=B2/A2 FOR EARTH, 1 FOR MOON B-1
048067,000124: 13,2427 73545 DLOAD SIN # COS(LONG)COS(LAT) IN MPAC
048068,000125: 13,2430 01121 LAT # UNIT RP = SIN(LONG)COS(LAT) 2-3D
048069,000126: 13,2431 65275 DMPR PDDL # PD 2 GAMMA*SIN(LAT) 0-1D
048070,000127: 13,2432 00011 GAMRP
048071,000128: 13,2433 01121 LAT # 0-1D = GAMMA*SIN(LAT) B-2
048072,000129: 13,2434 65346 COS PDDL # PD4 2-3D = COS(LAT) B-1 TEMPORARILY
048073,000130: 13,2435 01123 LONG
048074,000131: 13,2436 57356 SIN DMPR # PD 2
048075,000132: 13,2437 71525 PDDL COS # PD 4 2-3D = SIN(LONG)COS(LAT) B-2
048076,000133: 13,2440 01121 LAT
048077,000134: 13,2441 71525 PDDL COS # PD 6 4-5D = COS(LAT) B-1 TEMPORARILY
048078,000135: 13,2442 01123 LONG
048079,000136: 13,2443 55475 DMPR VDEF # PD 4 MPAC = COS(LONG)COS(LAT) B-2
048080,000137: 13,2444 41456 UNIT PUSH # 0-5D= UNIT RP FOR RP-TO-R SUBR.
048081,000138: 13,2445 36032 STCALL ALPHAV # ALPHAV +4= SINL FOR SETRE SUBR.
048082,000139: 13,2446 26560 SETRE # RE METERS B-29
048083,000140: 13,2447 43145 DLOAD BOFF # SET MPAC=0 FOR EARTH, NON-ZERO FOR MOON
048084,000141: 13,2450 24007 ZEROVEC
048085,000142: 13,2451 01743 LUNAFLAG
048086,000143: 13,2452 26454 CALLRPRT
048087,000144: 13,2453 77746 COS # USE COS(0) TO GET NON-ZERO IN MPAC
048088,000145: 13,2454 77624 CALLRPRT CALL
048089,000146: 13,2455 55716 RP-TO-R # EXIT WITH UNIT R VECTOR IN MPAC
048090,000147: 13,2456 16032 STODL ALPHAV
048091,000148: 13,2457 03673 ERADM
048092,000149: # Page 1136
048093,000150: 13,2460 74215 DAD VXSC # (RE + ALT)(UNIT R) METERS B-30
048094,000151: 13,2461 01125 ALT
048095,000152: 13,2462 02032 ALPHAV
048096,000153: 13,2463 77772 VSL1 # R METERS B-29
048097,000154: 13,2464 36032 STCALL ALPHAV # EXIT WITH R IN METERS B-29
048098,000155: 13,2465 03674 INCORPEX
048099,000156:
048100,000157: # SUBROUTINE TO COMPUTE EARTH RADIUS
048101,000158:
048102,000159: # INPUT
048103,000160: # 1/2 SIN LAT IN ALPHAV +4
048104,000161:
048105,000162: # OUTPUT
048106,000163: # EARTH RADIUS IN ERADM AND MPAC (METERS B-29)
048107,000164:
048108,000165: 13,2466 63545 GETERAD DLOAD DSQ
048109,000166: 13,2467 02036 ALPHAV +4 # SIN**2(L)
048110,000167: 13,2470 44352 SL1 BDSU
048111,000168: 13,2471 24005 DP1/2 # COS**2(L)
048112,000169: 13,2472 44275 DMPR BDSU
048113,000170: 13,2473 26507 EE
048114,000171: 13,2474 24005 DP1/2
048115,000172: 13,2475 75465 BDDV SQRT
048116,000173: 13,2476 26503 B2XSC
048117,000174: 13,2477 77622 SR4R
048118,000175: 13,2500 03673 STORE ERADM
048119,000176: 13,2501 77616 RVQ
048120,000177:
048121,000178: # THE FOLLOWING CONSTANTS WERE COMPUTED WITH A=6378166, B=6356784 METERS
048122,000179: # B2XSC = B**2 SCALED B-51
048123,000180: # B2/A2 = B**2/A**2 SCALED B-1
048124,000181: # EE = (1-B**2/A**2) SCALED B-0
048125,000182:
048126,000183: 13,2502 00446 00305 B2XSC 2DEC .0179450689 # B**2 SCALED B-51
048127,000184: 13,2504 12,2004 DP1/2 = XUNIT
048128,000185: 13,2504 17711 05254 B2/A2 2DEC .9933064884 B-1 # GAMMA= B**2/A**2 B-1
048129,000186: 13,2506 00155 25250 EE 2DEC 6.6935116 E-3 # (1-B**2/A**2) B-0
048130,000187:
048131,000188: # Page 1137
048132,000189: # ARCTAN SUBROUTINE
048133,000190:
048134,000191: # CALLING SEQUENCE
048135,000192: # SIN THETA IN SINTH B-1
048136,000193: # COS THETA IN COSTH B-1
048137,000194: # CALL ARCTAN
048138,000195:
048139,000196: # OUTPUT
048140,000197: # ARCTAN THETA IN MPAC AND THETA B-0 IN RANGE -1/2 TO +1/2
048141,000198:
048142,000199: 13,2510 77600 ARCTAN BOV
048143,000200: 13,2511 26512 CLROVFLW
048144,000201: 13,2512 63545 CLROVFLW DLOAD DSQ
048145,000202: 13,2513 00023 SINTH
048146,000203: 13,2514 63525 PDDL DSQ
048147,000204: 13,2515 00021 COSTH
048148,000205: 13,2516 77615 DAD
048149,000206: 13,2517 75454 BZE SQRT
048150,000207: 13,2520 26536 ARCTANXX # ATAN=0/0 SET THETA=0
048151,000208: 13,2521 40065 BDDV BOV
048152,000209: 13,2522 00023 SINTH
048153,000210: 13,2523 26543 ATAN=90
048154,000211: 13,2524 67542 SR1 ASIN
048155,000212: 13,2525 00025 STORE THETA
048156,000213: 13,2526 50125 PDDL BMN
048157,000214: 13,2527 00021 COSTH
048158,000215: 13,2530 26532 NEGCOS
048159,000216: 13,2531 43545 DLOAD RVQ
048160,000217: 13,2532 57545 NEGCOS DLOAD DCOMP
048161,000218: 13,2533 43244 BPL DAD
048162,000219: 13,2534 26540 NEGOUT
048163,000220: 13,2535 24005 DP1/2
048164,000221: 13,2536 00025 ARCTANXX STORE THETA
048165,000222: 13,2537 77616 RVQ
048166,000223:
048167,000224: 13,2540 52025 NEGOUT DSU GOTO
048168,000225: 13,2541 24005 DP1/2
048169,000226: 13,2542 26536 ARCTANXX
048170,000227: 13,2543 75345 ATAN=90 DLOAD SIGN
048171,000228: 13,2544 11037 LODP1/4
048172,000229: 13,2545 00023 SINTH
048173,000230: 13,2546 00025 STORE THETA
048174,000231: 13,2547 77616 RVQ
048175,000232:
048176,000233: 13,2550 12,2006 2DZERO = DPZERO
048177,000234:
048178,000235: # Page 1138
048179,000236: # ***** SETGAMMA SUBROUTINE *****
048180,000237: # SUBROUTINE TO SET GAMMA FOR THE LAT-LONG AND LALOTORV SUBROUTINES
048181,000238:
048182,000239: # GAMMA = B**2/A**2 FOR EARTH (B-1)
048183,000240: # GAMMA = 1 FOR MOON (B-1)
048184,000241:
048185,000242: # CALLING SEQUENCE
048186,000243: # L CALL
048187,000244: # L+1 SETGAMMA
048188,000245:
048189,000246: # INPUT
048190,000247: # LUNAFLAG=0 FOR EARTH, =1 FOR MOON
048191,000248:
048192,000249: # OUTPUT
048193,000250: # GAMMA IN GAMRP (B-1)
048194,000251:
048195,000252: 13,2550 43145 SETGAMMA DLOAD BOFF # BRANCH FOR EARTH
048196,000253: 13,2551 26505 B2/A2 # EARTH GAMMA
048197,000254: 13,2552 01743 LUNAFLAG
048198,000255: 13,2553 26556 SETGMEX
048199,000256: 13,2554 77735 SLOAD
048200,000257: 13,2555 24005 1B1 # MOON GAMMA
048201,000258: 13,2556 00011 SETGMEX STORE GAMRP
048202,000259: 13,2557 77616 RVQ
048203,000260: 13,2560 GAMRP = 8D
048204,000261:
048205,000262: # Page 1139
048206,000263: # ***** SETRE SUBROUTINE *****
048207,000264: # SUBROUTINE TO SET RE (EARTH OR MOON RADIUS)
048208,000265:
048209,000266: # RE = RM FOR MOON
048210,000267: # RE = RREF FOR FIXED EARTH RADIUS OR COMPUTED RF FOR FISCHER ELLIPSOID
048211,000268:
048212,000269: # CALLING SEQUENCE
048213,000270: # L CALL
048214,000271: # L+1 SETRE
048215,000272:
048216,000273: # SUBROUTINES USED
048217,000274: # GETERAD
048218,000275:
048219,000276: # INPUT
048220,000277: # ERADFLAG = 0 FOR FIXED RE, 1 FOR COMPUTED RE
048221,000278: # ALPHAV +4 = 1/2 SINL IF GETERAD IS CALLED
048222,000279: # LUNAFLAG = 0 FOR EARTH, =1 FOR MOON
048223,000280:
048224,000281: # OUTPUT
048225,000282: # ERADM = 504RM FOR MOON (METERS B-29)
048226,000283: # ERADM = ERAD OR COMPUTED RE FOR EARTH (METERS B-29)
048227,000284:
048228,000285: 13,2560 71220 SETRE STQ DLOAD
048229,000286: 13,2561 00051 SETREX
048230,000287: 13,2562 10003 504RM
048231,000288: 13,2563 71214 BON DLOAD # BRANCH FOR MOON
048232,000289: 13,2564 01703 LUNAFLAG
048233,000290: 13,2565 26575 TSTRLSRM
048234,000291: 13,2566 10001 ERAD
048235,000292: 13,2567 45014 BOFF CALL # ERADFLAG=0 FOR FIXED RE, 1 FOR COMPUTED
048236,000293: 13,2570 00742 ERADFLAG
048237,000294: 13,2571 26573 SETRXX
048238,000295: 13,2572 26466 GETERAD
048239,000296: 13,2573 37673 SETRXX STCALL ERADM # EXIT WITH RE OR RM METERS B-29
048240,000297: 13,2574 00051 SETREX
048241,000298: 13,2575 77214 TSTRLSRM BON VLOAD # ERADFLAG=0, SET R0=RLS
048242,000299: 13,2576 00702 ERADFLAG # =1 R0=RM
048243,000300: 13,2577 26573 SETRXX
048244,000301: 13,2600 02023 RLS
048245,000302: 13,2601 64446 ABVAL SR2R # SCALE FROM B-27 TO B-29
048246,000303: 13,2602 77650 GOTO
048247,000304: 13,2603 26573 SETRXX
048248,000305: 13,2604 0000051 SETREX = S2
048249,000306:
048250,000307:
End of include-file LATITUDE_LONGITUDE_SUBROUTINES.agc. Parent file is MAIN.agc