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