Source Code

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