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