Source Code

046591,000001: # Copyright: Public domain. 046592,000002: # Filename: LATITUDE_LONGITUDE_SUBROUTINES.agc 046593,000003: # Purpose: A section of Luminary 1C, revision 131. 046594,000004: # It is part of the source code for the Lunar Module's (LM) 046595,000005: # Apollo Guidance Computer (AGC) for Apollo 13 and Apollo 14. 046596,000006: # This file is intended to be a faithful transcription, except 046597,000007: # that the code format has been changed to conform to the 046598,000008: # requirements of the yaYUL assembler rather than the 046599,000009: # original YUL assembler. 046600,000010: # Reference: pp. 1132-1138 of 1729.pdf. 046601,000011: # Contact: Ron Burkey <info@sandroid.org>. 046602,000012: # Website: www.ibiblio.org/apollo/index.html 046603,000013: # Mod history: 05/31/03 RSB. Began transcribing. 046604,000014: # 05/14/05 RSB Corrected website reference above. 046605,000015: 046606,000016: # Page 1132 046607,000017: # SUBROUTINE TO CONVERT RAD VECTOR AT GIVEN TIME TO LAT,LONG AND ALT 046608,000018: 046609,000019: # CALLING SEQUENCE 046610,000020: # L-1 CALL 046611,000021: # L LAT-LONG 046612,000022: 046613,000023: # SUBROUTINES USED 046614,000024: # R-TO-RP, ARCTAN, SFTGAMMA, SETRE 046615,000025: 046616,000026: # ERASABLE INIT. REQ. 046617,000027: # AXO, -AYO, AZO, TEPHEM (SET AT LAUNCH TIME) 046618,000028: # ALPHAV = POSITION VECTOR METERS B-29 046619,000029: # MPAC -- TIME (CSECS B-28) 046620,000030: # ERADFLAG =1, TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS 046621,000031: # LUNAFLAG=0 FOR EARTH, 1 FOR MOON 046622,000032: 046623,000033: # OUTPUT 046624,000034: # LATITUDE IN LAT (REVS. B-0) 046625,000035: # LONGITUDE IN LONG (REVS. B-0) 046626,000036: # ALTITUDE IN ALT METERS B-29 046627,000037: 046628,000038: 30,3766 BANK 30 046629,000039: 13,2000 SETLOC LATLONG 046630,000040: 13,2000 BANK 046631,000041: 046632,000042: 13,2347 COUNT* $$/LT-LG 046633,000043: 13,2347 E4,1431 EBANK= ALPHAV 046634,000044: 13,2347 40220 LAT-LONG STQ SETPD 046635,000045: 13,2350 03674 INCORPEX 046636,000046: 13,2351 00001 0D 046637,000047: 13,2352 24007 STOVL 6D # SAVE TIME IN 6-7D FOR R-TO-RP 046638,000048: 13,2353 02032 ALPHAV 046639,000049: 13,2354 51406 PUSH ABVAL # 0-5D= R FOR R-TO-RP 046640,000050: 13,2355 16070 STODL ALPHAM # ABS. VALUE OF R FOR ALT FORMULA BELOW 046641,000051: 13,2356 24007 ZEROVEC # SET MPAC=0 FOR EARTH, NON-ZERO FOR MOON 046642,000052: 13,2357 71414 BOFF COS # USE COS(0) TO GET NON-ZERO IN MPAC 046643,000053: 13,2360 01743 LUNAFLAG # 0=EARTH, 1=MOON 046644,000054: 13,2361 26362 CALLRTRP 046645,000055: 13,2362 77624 CALLRTRP CALL 046646,000056: 13,2363 51700 R-TO-RP # RP VECTOR CONVERTED FROM R B-29 046647,000057: 13,2364 77656 UNIT # UNIT RP B-1 046648,000058: 13,2365 36032 STCALL ALPHAV # U2= 1/2 CINL FOR SETRE SUBR BELOW 046649,000059: 13,2366 26546 SETGAMMA # SET GAMMA=B2/A2 FOR EARTH, =1 FOR MOON 046650,000060: 13,2367 77624 CALL # SCALED B-1. 046651,000061: 13,2370 26556 SETRE # CALC RE METERS B-29 046652,000062: 13,2371 63545 DLOAD DSQ 046653,000063: 13,2372 02032 ALPHAV 046654,000064: 13,2373 63525 PDDL DSQ 046655,000065: 13,2374 02034 ALPHAV +2 046656,000066: 13,2375 75415 DAD SQRT 046657,000067: # Page 1133 046658,000068: 13,2376 76405 DMP SL1R 046659,000069: 13,2377 00011 GAMRP 046660,000070: 13,2400 14021 STODL COSTH # COS(LAT) B-1 046661,000071: 13,2401 02036 ALPHAV +4 046662,000072: 13,2402 34023 STCALL SINTH # SIN(LAT) B-1 046663,000073: 13,2403 26506 ARCTAN 046664,000074: 13,2404 15120 STODL LAT # LAT B0 046665,000075: 13,2405 02032 ALPHAV 046666,000076: 13,2406 14021 STODL COSTH # COS(LONG) B-1 046667,000077: 13,2407 02034 ALPHAV +2 046668,000078: 13,2410 34023 STCALL SINTH # SIN(LONG) B-1 046669,000079: 13,2411 26506 ARCTAN 046670,000080: 13,2412 15122 STODL LONG # LONG. REVS B-0 IN RANGE -1/2 TO 1/2 046671,000081: 13,2413 02070 ALPHAM 046672,000082: 13,2414 77625 DSU # ALT= R-RE METERS B-29 046673,000083: 13,2415 03673 ERADM 046674,000084: 13,2416 35124 STCALL ALT # EXIT WITH ALT METERS B-29 046675,000085: 13,2417 03674 INCORPEX 046676,000086: # Page 1134 046677,000087: # SUBROUTINE TO CONVERT LAT,LONG.ALT AT GIVEN TIME TO RADIUS VECTOR 046678,000088: 046679,000089: # CALLING SEQUENCE 046680,000090: # L-1 CALL 046681,000091: # L LALOTORV 046682,000092: 046683,000093: # SUBROUTINES USED 046684,000094: # SETGAMMA, SETRE, RP-TO-R 046685,000095: 046686,000096: # ERASABLE INIT. REQ. 046687,000097: # AXO, AYO, AZO, TEPHEM SET AT LAUNCH TIME 046688,000098: # LAT -- LATITUDE (REVS B0) 046689,000099: # LONG -- LONGITUDE (REVS B0) 046690,000100: # ALT -- ALTITUDE (METERS) B-29 046691,000101: # MPAC -- TIME (CSECS B-28) 046692,000102: # ERADFLAG =1 TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS 046693,000103: # LUNAFLAG=0 FOR EARTH, 1 FOR MOON 046694,000104: 046695,000105: # OUTPUT 046696,000106: # R-VECTOR IN ALPHAV (METERS B-29) 046697,000107: 046698,000108: 13,2420 40220 LALOTORV STQ SETPD # LAT,LONG,ALT TO R VECTOR 046699,000109: 13,2421 03674 INCORPEX 046700,000110: 13,2422 00001 0D 046701,000111: 13,2423 34007 STCALL 6D # 6-7D= TIME FOR RP-TO-R 046702,000112: 13,2424 26546 SETGAMMA # GAMMA=B2/A2 FOR EARTH, 1 FOR MOON B-1 046703,000113: 13,2425 73545 DLOAD SIN # COS(LONG)COS(LAT) IN MPAC 046704,000114: 13,2426 01120 LAT # UNIT RP = SIN(LONG)COS(LAT) 2-3D 046705,000115: 13,2427 65275 DMPR PDDL # PD 2 GAMMA*SIN(LAT) 0-1D 046706,000116: 13,2430 00011 GAMRP 046707,000117: 13,2431 01120 LAT # 0-1D= GAMMA*SIN(LAT) B-2 046708,000118: 13,2432 65346 COS PDDL # PD4 2-3D= COS(LAT) B-1 TEMPORARILY 046709,000119: 13,2433 01122 LONG 046710,000120: 13,2434 57356 SIN DMPR # PD 2 046711,000121: 13,2435 71525 PDDL COS # PD 4 2-3D = SIN(LONG)COS(LAT) B-2 046712,000122: 13,2436 01120 LAT 046713,000123: 13,2437 71525 PDDL COS # PD 6 4-5D = COS(LAT) B-1 TEMPORARILY 046714,000124: 13,2440 01122 LONG 046715,000125: 13,2441 55475 DMPR VDEF # PD4 MPAC= COS(LONG)COS(LAT) B-2 046716,000126: 13,2442 41456 UNIT PUSH # 0-5D= UNIT RP FOR RP-TO-R SUBR. 046717,000127: 13,2443 36032 STCALL ALPHAV # ALPHAV +4= SINL FOR SETRE SUBR. 046718,000128: 13,2444 26556 SETRE # RE METERS B-29 046719,000129: 13,2445 43145 DLOAD BOFF # SET MPAC=0 FOR EARTH, NON-ZERO IN MPAC 046720,000130: 13,2446 24007 ZEROVEC 046721,000131: 13,2447 01743 LUNAFLAG 046722,000132: 13,2450 26452 CALLRPRT 046723,000133: 13,2451 77746 COS # USE COS(0) TO GET NON-ZERO IN MPAC 046724,000134: 13,2452 77624 CALLRPRT CALL 046725,000135: 13,2453 55716 RP-TO-R # EXIT WITH UNIT R VECTOR IN MPAC 046726,000136: 13,2454 16032 STODL ALPHAV 046727,000137: 13,2455 03673 ERADM 046728,000138: # Page 1135 046729,000139: 13,2456 74215 DAD VXSC # (RE + ALT)(UNIT R) METERS B-30 046730,000140: 13,2457 01124 ALT 046731,000141: 13,2460 02032 ALPHAV 046732,000142: 13,2461 77772 VSL1 # R METERS B-29 046733,000143: 13,2462 36032 STCALL ALPHAV # EXIT WITH R IN METERS B-29 046734,000144: 13,2463 03674 INCORPEX 046735,000145: 046736,000146: # SUBROUTINE TO COMPUTE EARTH RADIUS 046737,000147: 046738,000148: # INPUT 046739,000149: # 1/2 SIN LAT IN ALPHAV +4 046740,000150: 046741,000151: # OUTPUT 046742,000152: # EARTH RADIUS IN ERADM AND MPAC (METERS B-29) 046743,000153: 046744,000154: 13,2464 63545 GETERAD DLOAD DSQ 046745,000155: 13,2465 02036 ALPHAV +4 # SIN**2(L) 046746,000156: 13,2466 44352 SL1 BDSU 046747,000157: 13,2467 24005 DP1/2 # COS**2(L) 046748,000158: 13,2470 44275 DMPR BDSU 046749,000159: 13,2471 26505 EE 046750,000160: 13,2472 24005 DP1/2 046751,000161: 13,2473 75465 BDDV SQRT 046752,000162: 13,2474 26501 B2XSC 046753,000163: 13,2475 77622 SR4R 046754,000164: 13,2476 03673 STORE ERADM 046755,000165: 13,2477 77616 RVQ 046756,000166: 046757,000167: # THE FOLLOWING CONSTANTS WERE COMPUTED WITH A=6378166, B=6356784 METERS 046758,000168: # B2XSC = B**2 SCALED B-51 046759,000169: # B2/A2 = B**2/A**2 SCALED B-1 046760,000170: # EE = (1-B**2/A**2) SCALED B-0 046761,000171: 046762,000172: 13,2500 00446 00305 B2XSC 2DEC .0179450689 # B**2 SCALED B-51 046763,000173: 13,2502 12,2004 DP1/2 = XUNIT 046764,000174: 13,2502 17711 05254 B2/A2 2DEC .9933064884 B-1 # GAMMA= B**2/A**2 B-1 046765,000175: 13,2504 00155 25250 EE 2DEC 6.6935116 E-3 # (1-B**2/A**2) B-0 046766,000176: 046767,000177: # Page 1136 046768,000178: # ARCTAN SUBROUTINE 046769,000179: 046770,000180: # CALLING SEQUENCE 046771,000181: # SIN THETA IN SINTH B-1 046772,000182: # COS THETA IN COSTH B-1 046773,000183: # CALL ARCTAN 046774,000184: 046775,000185: # OUTPUT 046776,000186: # ARCTAN THETA IN MPAC AND THETA B-0 IN RANGE -1/2 TO +1/2 046777,000187: 046778,000188: 13,2506 77600 ARCTAN BOV 046779,000189: 13,2507 26510 CLROVFLW 046780,000190: 13,2510 63545 CLROVFLW DLOAD DSQ 046781,000191: 13,2511 00023 SINTH 046782,000192: 13,2512 63525 PDDL DSQ 046783,000193: 13,2513 00021 COSTH 046784,000194: 13,2514 77615 DAD 046785,000195: 13,2515 75454 BZE SQRT 046786,000196: 13,2516 26534 ARCTANXX # ATAN=0/0. SET THETA=0 046787,000197: 13,2517 40065 BDDV BOV 046788,000198: 13,2520 00023 SINTH 046789,000199: 13,2521 26541 ATAN=90 046790,000200: 13,2522 67542 SR1 ASIN 046791,000201: 13,2523 00025 STORE THETA 046792,000202: 13,2524 50125 PDDL BMN 046793,000203: 13,2525 00021 COSTH 046794,000204: 13,2526 26530 NEGCOS 046795,000205: 13,2527 43545 DLOAD RVQ 046796,000206: 13,2530 57545 NEGCOS DLOAD DCOMP 046797,000207: 13,2531 43244 BPL DAD 046798,000208: 13,2532 26536 NEGOUT 046799,000209: 13,2533 24005 DP1/2 046800,000210: 13,2534 00025 ARCTANXX STORE THETA 046801,000211: 13,2535 77616 RVQ 046802,000212: 046803,000213: 13,2536 52025 NEGOUT DSU GOTO 046804,000214: 13,2537 24005 DP1/2 046805,000215: 13,2540 26534 ARCTANXX 046806,000216: 13,2541 75345 ATAN=90 DLOAD SIGN 046807,000217: 13,2542 11003 LODP1/4 046808,000218: 13,2543 00023 SINTH 046809,000219: 13,2544 00025 STORE THETA 046810,000220: 13,2545 77616 RVQ 046811,000221: 046812,000222: 13,2546 12,2006 2DZERO = DPZERO 046813,000223: 046814,000224: # Page 1137 046815,000225: # ***** SETGAMMA SUBROUTINE ***** 046816,000226: # SUBROUTINE TO SET GAMMA FOR THE LAT-LONG AND LALOTORV SUBROUTINES 046817,000227: 046818,000228: # GAMMA = B**2/A**2 FOR EARTH (B-1) 046819,000229: # GAMMA = 1 FOR MOON (B-1) 046820,000230: 046821,000231: # CALLING SEQUENCE 046822,000232: # L CALL 046823,000233: # L+1 SETGAMMA 046824,000234: 046825,000235: # INPUT 046826,000236: # LUNAFLAG=0 FOR EARTH, =1 FOR MOON 046827,000237: 046828,000238: # OUTPUT 046829,000239: # GAMMA IN GAMRP (B-1) 046830,000240: 046831,000241: 13,2546 43145 SETGAMMA DLOAD BOFF # BRANCH FOR EARTH 046832,000242: 13,2547 26503 B2/A2 # EARTH GAMMA 046833,000243: 13,2550 01743 LUNAFLAG 046834,000244: 13,2551 26554 SETGMEX 046835,000245: 13,2552 77735 SLOAD 046836,000246: 13,2553 24005 1B1 # MOON GAMMA 046837,000247: 13,2554 00011 SETGMEX STORE GAMRP 046838,000248: 13,2555 77616 RVQ 046839,000249: 13,2556 GAMRP = 8D 046840,000250: 046841,000251: # Page 1138 046842,000252: # ***** SETRE SUBROUTINE ***** 046843,000253: # SUBROUTINE TO SET RE (EARTH OR MOON RADIUS) 046844,000254: 046845,000255: # RE = RM FOR MOON 046846,000256: # RE = RREF FOR FIXED EARTH RADIUS OR COMPUTED RF FOR FISCHER ELLIPSOID 046847,000257: 046848,000258: # CALLING SEQUENCE 046849,000259: # L CALL 046850,000260: # L+1 SETRE 046851,000261: 046852,000262: # SUBROUTINES USED 046853,000263: # CETERAD 046854,000264: 046855,000265: # INPUT 046856,000266: # ERADFLAG = 0 FOR FIXED RE, 1 FOR COMPUTED RE 046857,000267: # ALPHAV +4 = 1/2 SINL IF GETERAD IS CALLED 046858,000268: # LUNAFLAG = 0 FOR EARTH, =1 FOR MOON 046859,000269: 046860,000270: # OUTPUT 046861,000271: # ERADM = 504RM FOR MOON (METERS B-29) 046862,000272: # ERADM = ERAD OR COMPUTED RE FOR EARTH (METERS B-29) 046863,000273: 046864,000274: 13,2556 71220 SETRE STQ DLOAD 046865,000275: 13,2557 00051 SETREX 046866,000276: 13,2560 10003 504RM 046867,000277: 13,2561 71214 BON DLOAD # BRANCH FOR MOON 046868,000278: 13,2562 01703 LUNAFLAG 046869,000279: 13,2563 26573 TSTRLSRM 046870,000280: 13,2564 10001 ERAD 046871,000281: 13,2565 45014 BOFF CALL # ERADFLAG=0 FOR FIXED RE, 1 FOR COMPUTED 046872,000282: 13,2566 00742 ERADFLAG 046873,000283: 13,2567 26571 SETRXX 046874,000284: 13,2570 26464 GETERAD 046875,000285: 13,2571 37673 SETRXX STCALL ERADM # EXIT WITH RE OR RM METERS B-29 046876,000286: 13,2572 00051 SETREX 046877,000287: 13,2573 77214 TSTRLSRM BON VLOAD # ERADFLAG=0, SET R0=RLS 046878,000288: 13,2574 00702 ERADFLAG # =1 40=RM 046879,000289: 13,2575 26571 SETRXX 046880,000290: 13,2576 02023 RLS 046881,000291: 13,2577 64446 ABVAL SR2R # SCALE FROM B-27 TO B-29 046882,000292: 13,2600 77650 GOTO 046883,000293: 13,2601 26571 SETRXX 046884,000294: 13,2602 0000051 SETREX = S2 046885,000295: 046886,000296: End of include-file LATITUDE_LONGITUDE_SUBROUTINES.agc. Parent file is MAIN.agc