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