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