Source Code

053443,000001: # Copyright: Public domain. 053444,000002: # Filename: LATITUDE_LONGITUDE_SUBROUTINES.agc 053445,000003: # Purpose: Part of the source code for Colossus 2A, AKA Comanche 055. 053446,000004: # It is part of the source code for the Command Module's (CM) 053447,000005: # Apollo Guidance Computer (AGC), for Apollo 11. 053448,000006: # Assembler: yaYUL 053449,000007: # Contact: Ron Burkey <info@sandroid.org>. 053450,000008: # Website: www.ibiblio.org/apollo. 053451,000009: # Pages: 1236-1242 053452,000010: # Mod history: 2009-05-14 RSB Adapted from the Colossus249/ file of the 053453,000011: # same name, using Comanche055 page images. 053454,000012: 053455,000013: # This source code has been transcribed or otherwise adapted from digitized 053456,000014: # images of a hardcopy from the MIT Museum. The digitization was performed 053457,000015: # by Paul Fjeld, and arranged for by Deborah Douglas of the Museum. Many 053458,000016: # thanks to both. The images (with suitable reduction in storage size and 053459,000017: # consequent reduction in image quality as well) are available online at 053460,000018: # www.ibiblio.org/apollo. If for some reason you find that the images are 053461,000019: # illegible, contact me at info@sandroid.org about getting access to the 053462,000020: # (much) higher-quality images which Paul actually created. 053463,000021: 053464,000022: # Notations on the hardcopy document read, in part: 053465,000023: 053466,000024: # Assemble revision 055 of AGC program Comanche by NASA 053467,000025: # 2021113-051. 10:28 APR. 1, 1969 053468,000026: 053469,000027: # This AGC program shall also be referred to as 053470,000028: # Colossus 2A 053471,000029: 053472,000030: # Page 1236 053473,000031: # SUBROUTINE TO CONVERT RAD VECTOR AT GIVEN TIME TO LAT,LONG AND ALT 053474,000032: 053475,000033: # CALLING SEQUENCE 053476,000034: # L-1 CALL 053477,000035: # L LAT-LONG 053478,000036: 053479,000037: # SUBROUTINES USED 053480,000038: # R-TO-RP, ARCTAN, SETGAMMA, SETRE 053481,000039: 053482,000040: # ERASABLE INIT. REQ. 053483,000041: # AXO, -AYO, AZO, TEPHEM (SET AT LAUNCH TIME) 053484,000042: # ALPHAV = POSITION VECTOR METERS B-29 053485,000043: # MPAC -- TIME (CSECS B-28) 053486,000044: # ERADFLAG =1, TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS 053487,000045: # LUNAFLAG=0 FOR EARTH, 1 FOR MOON 053488,000046: 053489,000047: # OUTPUT 053490,000048: # LATITUDE IN LAT (REVS. B-0) 053491,000049: # LONGITUDE IN LONG (REVS. B-0) 053492,000050: # ALTITUDE IN ALT METERS B-29 053493,000051: 053494,000052: 30,3750 BANK 30 053495,000053: 13,2000 SETLOC LATLONG 053496,000054: 13,2000 BANK 053497,000055: 053498,000056: 13,2370 COUNT 13/LT-LG 053499,000057: 053500,000058: 13,2370 E4,1551 EBANK= ALPHAV 053501,000059: 13,2370 40220 LAT-LONG STQ SETPD 053502,000060: 13,2371 02242 INCORPEX 053503,000061: 13,2372 00001 0D 053504,000062: 13,2373 24007 STOVL 6D # SAVE TIME IN 6-7D FOR R-TO-RP 053505,000063: 13,2374 02152 ALPHAV 053506,000064: 13,2375 51406 PUSH ABVAL # 0-5D= R FOR R-TO-RP 053507,000065: 13,2376 16310 STODL ALPHAM # ABS. VALUE OF R FOR ALT FORMULA BELOW 053508,000066: 13,2377 11566 ZEROVEC # SET MPAC=0 FOR EARTH, NON-ZERO FOR MOON 053509,000067: 13,2400 71414 BOFF COS # USE COS(0) TO GET NON-ZERO IN MPAC 053510,000068: 13,2401 01743 LUNAFLAG # 0=EARTH, 1=MOON 053511,000069: 13,2402 26403 CALLRTRP 053512,000070: 13,2403 77624 CALLRTRP CALL 053513,000071: 13,2404 55371 R-TO-RP # RP VECTOR CONVERTED FROM R B-29 053514,000072: 13,2405 77656 UNIT # UNIT RP B-1 053515,000073: 13,2406 36152 STCALL ALPHAV # U2= 1/2 SINL FOR SETRE SUBR BELOW 053516,000074: 13,2407 26571 SETGAMMA # SET GAMMA=B2/A2 FOR EARTH, =1 FOR MOON 053517,000075: 13,2410 77624 CALL # SCALED B-1. 053518,000076: 13,2411 26601 SETRE # CALC RE METERS B-29 053519,000077: 13,2412 63545 DLOAD DSQ 053520,000078: 13,2413 02152 ALPHAV 053521,000079: 13,2414 63525 PDDL DSQ 053522,000080: 13,2415 02154 ALPHAV +2 053523,000081: # Page 1237 053524,000082: 13,2416 75415 DAD SQRT 053525,000083: 13,2417 76405 DMP SL1R 053526,000084: 13,2420 00011 GAMRP 053527,000085: 13,2421 14021 STODL COSTH # COS(LAT) B-1 053528,000086: 13,2422 02156 ALPHAV +4 053529,000087: 13,2423 34023 STCALL SINTH # SIN(LAT) B-1 053530,000088: 13,2424 26531 ARCTAN 053531,000089: 13,2425 15104 STODL LAT # LAT B0 053532,000090: 13,2426 02152 ALPHAV 053533,000091: 13,2427 14021 STODL COSTH # COS(LONG) B-1 053534,000092: 13,2430 02154 ALPHAV +2 053535,000093: 13,2431 34023 STCALL SINTH # SIN(LONG) B-1 053536,000094: 13,2432 26531 ARCTAN 053537,000095: 13,2433 15106 STODL LONG # LONG. REVS B-0 IN RANGE -1/2 TO 1/2 053538,000096: 13,2434 02310 ALPHAM 053539,000097: 13,2435 77625 DSU # ALT= R-RE METERS B-29 053540,000098: 13,2436 02241 ERADM 053541,000099: 13,2437 35110 STCALL ALT # EXIT WITH ALT METERS B-29 053542,000100: 13,2440 02242 INCORPEX 053543,000101: # Page 1238 053544,000102: # SUBROUTINE TO CONVERT LAT,LONG.ALT AT GIVEN TIME TO RADIUS VECTOR 053545,000103: 053546,000104: # CALLING SEQUENCE 053547,000105: # L-1 CALL 053548,000106: # L LALOTORV 053549,000107: 053550,000108: # SUBROUTINES USED 053551,000109: # SETGAMMA, SETRE, RP-TO-R 053552,000110: 053553,000111: # ERASABLE INIT. REQ. 053554,000112: # AXO, AYO, AZO, TEPHEM SET AT LAUNCH TIME 053555,000113: # LAT -- LATITUDE (REVS B0) 053556,000114: # LONG -- LONGITUDE (REVS B0) 053557,000115: # ALT -- ALTITUDE (METERS) B-29 053558,000116: # MPAC -- TIME (CSECS B-28) 053559,000117: # ERADFLAG =1 TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS 053560,000118: # LUNAFLAG=0 FOR EARTH, 1 FOR MOON 053561,000119: 053562,000120: # OUTPUT 053563,000121: # R-VECTOR IN ALPHAV (METERS B-29) 053564,000122: 053565,000123: 13,2441 40220 LALOTORV STQ SETPD # LAT,LONG,ALT TO R VECTOR 053566,000124: 13,2442 02242 INCORPEX 053567,000125: 13,2443 00001 0D 053568,000126: 13,2444 34007 STCALL 6D # 6-7D = TIME FOR RP-TO-R 053569,000127: 13,2445 26571 SETGAMMA # GAMMA = B2/A2 FOR EARTH, 1 FOR MOON B-1 053570,000128: 13,2446 73545 DLOAD SIN # COS(LONG)COS(LAT) IN MPAC 053571,000129: 13,2447 01104 LAT # UNIT RP = SIN(LONG)COS(LAT) 2-3D 053572,000130: 13,2450 65275 DMPR PDDL # PD 2 GAMMA*SIN(LAT) 0-1D 053573,000131: 13,2451 00011 GAMRP 053574,000132: 13,2452 01104 LAT # 0-1D = GAMMA*SIN(LAT) B-2 053575,000133: 13,2453 65346 COS PDDL # PD4 2-3D= COS(LAT) B-1 TEMPORARILY 053576,000134: 13,2454 01106 LONG 053577,000135: 13,2455 57356 SIN DMPR # PD 2 053578,000136: 13,2456 71525 PDDL COS # PD 4 2-3D= SIN(LONG)COS(LAT) B-2 053579,000137: 13,2457 01104 LAT 053580,000138: 13,2460 71525 PDDL COS # PD 6 4-5D= COS(LAT) B-1 TEMPORARILY 053581,000139: 13,2461 01106 LONG 053582,000140: 13,2462 55475 DMPR VDEF # PD4 MPAC = COS(LONG)COS(LAT) B-2 053583,000141: 13,2463 41456 UNIT PUSH # 0-5D = UNIT RP FOR RP-TO-R SUBR. 053584,000142: 13,2464 36152 STCALL ALPHAV # ALPHAV +4= SINL FOR SETRE SUBR. 053585,000143: 13,2465 26601 SETRE # RE METERS B-29 053586,000144: 13,2466 43145 DLOAD BOFF # SET MPAC = 0 FOR EARTH, NON-ZERO FOR MOON 053587,000145: 13,2467 11566 ZEROVEC 053588,000146: 13,2470 01743 LUNAFLAG 053589,000147: 13,2471 26473 CALLRPRT 053590,000148: 13,2472 77746 COS # USE COS(0) TO GET NON-ZERO IN MPAC 053591,000149: 13,2473 77624 CALLRPRT CALL 053592,000150: 13,2474 55344 RP-TO-R # EXIT WITH UNIT R VECTOR IN MPAC 053593,000151: 13,2475 16152 STODL ALPHAV 053594,000152: 13,2476 02241 ERADM 053595,000153: # Page 1239 053596,000154: 13,2477 74215 DAD VXSC # (RE + ALT)(UNIT R) METERS B-30 053597,000155: 13,2500 01110 ALT 053598,000156: 13,2501 02152 ALPHAV 053599,000157: 13,2502 77772 VSL1 # R METERS B-29 053600,000158: 13,2503 36152 STCALL ALPHAV # EXIT WITH R IN METERS B-29 053601,000159: 13,2504 02242 INCORPEX 053602,000160: 053603,000161: # SUBROUTINE TO COMPUTE EARTH RADIUS 053604,000162: 053605,000163: # INPUT 053606,000164: # 1/2 SIN LAT IN ALPHAV +4 053607,000165: 053608,000166: # OUTPUT 053609,000167: # EARTH RADIUS IN ERADM AND MPAC (METERS B-29) 053610,000168: 053611,000169: 13,2505 63545 GETERAD DLOAD DSQ 053612,000170: 13,2506 02156 ALPHAV +4 # SIN**2(L) 053613,000171: 13,2507 44352 SL1 BDSU 053614,000172: 13,2510 11564 DP1/2 # COS**2(L) 053615,000173: 13,2511 44275 DMPR BDSU 053616,000174: 13,2512 26526 EE 053617,000175: 13,2513 11564 DP1/2 053618,000176: 13,2514 75465 BDDV SQRT 053619,000177: 13,2515 26522 B2XSC 053620,000178: 13,2516 77622 SR4R 053621,000179: 13,2517 02241 STORE ERADM 053622,000180: 13,2520 77616 RVQ 053623,000181: 053624,000182: # THE FOLLOWING CONSTANTS WERE COMPUTED WITH A=6378166, B=6356784 METERS 053625,000183: # B2XSC = B**2 SCALED B-51 053626,000184: # B2/A2 = B**2/A**2 SCALED B-1 053627,000185: # EE = (1-B**2/A**2) SCALED B-0 053628,000186: 053629,000187: 13,2521 00446 00305 B2XSC 2DEC .0179450689 # B**2 SCALED B-51 053630,000188: 053631,000189: 13,2523 04,3563 DP1/2 = XUNIT 053632,000190: 13,2523 17711 05254 B2/A2 2DEC .9933064884 B-1 # GAMMA= B**2/A**2 B-1 053633,000191: 053634,000192: 13,2525 00155 25250 EE 2DEC 6.6935116 E-3 # (1-B**2/A**2) B-0 053635,000193: 053636,000194: 13,2527 00302 17755 ERAD 2DEC 6373338 B-29 # PAD RADIUS 053637,000195: 053638,000196: # Page 1240 053639,000197: # ARCTAN SUBROUTINE 053640,000198: 053641,000199: # CALLING SEQUENCE 053642,000200: # SIN THETA IN SINTH B-1 053643,000201: # COS THETA IN COSTH B-1 053644,000202: # CALL ARCTAN 053645,000203: 053646,000204: # OUTPUT 053647,000205: # ARCTAN THETA IN MPAC AND THETA B-0 IN RANGE -1/2 TO +1/2 053648,000206: 053649,000207: 13,2531 77600 ARCTAN BOV 053650,000208: 13,2532 26533 CLROVFLW 053651,000209: 13,2533 63545 CLROVFLW DLOAD DSQ 053652,000210: 13,2534 00023 SINTH 053653,000211: 13,2535 63525 PDDL DSQ 053654,000212: 13,2536 00021 COSTH 053655,000213: 13,2537 77615 DAD 053656,000214: 13,2540 75454 BZE SQRT 053657,000215: 13,2541 26557 ARCTANXX # ATAN=0/0. SET THETA=0 053658,000216: 13,2542 40065 BDDV BOV 053659,000217: 13,2543 00023 SINTH 053660,000218: 13,2544 26564 ATAN=90 053661,000219: 13,2545 67542 SR1 ASIN 053662,000220: 13,2546 00025 STORE THETA 053663,000221: 13,2547 50125 PDDL BMN 053664,000222: 13,2550 00021 COSTH 053665,000223: 13,2551 26553 NEGCOS 053666,000224: 13,2552 43545 DLOAD RVQ 053667,000225: 13,2553 57545 NEGCOS DLOAD DCOMP 053668,000226: 13,2554 43244 BPL DAD 053669,000227: 13,2555 26561 NEGOUT 053670,000228: 13,2556 11564 DP1/2 053671,000229: 13,2557 00025 ARCTANXX STORE THETA 053672,000230: 13,2560 77616 RVQ 053673,000231: 053674,000232: 13,2561 52025 NEGOUT DSU GOTO 053675,000233: 13,2562 11564 DP1/2 053676,000234: 13,2563 26557 ARCTANXX 053677,000235: 13,2564 75345 ATAN=90 DLOAD SIGN 053678,000236: 13,2565 11612 LODP1/4 053679,000237: 13,2566 00023 SINTH 053680,000238: 13,2567 00025 STORE THETA 053681,000239: 13,2570 77616 RVQ 053682,000240: 053683,000241: 13,2571 04,3565 2DZERO = DPZERO 053684,000242: 053685,000243: # Page 1241 053686,000244: # ***** SETGAMMA SUBROUTINE ***** 053687,000245: # SUBROUTINE TO SET GAMMA FOR THE LAT-LONG AND LALOTORV SUBROUTINES 053688,000246: 053689,000247: # GAMMA = B**2/A**2 FOR EARTH (B-1) 053690,000248: # GAMMA = 1 FOR MOON (B-1) 053691,000249: 053692,000250: # CALLING SEQUENCE 053693,000251: # L CALL 053694,000252: # L+1 SETGAMMA 053695,000253: 053696,000254: # INPUT 053697,000255: # LUNAFLAG=0 FOR EARTH, =1 FOR MOON 053698,000256: 053699,000257: # OUTPUT 053700,000258: # GAMMA IN GAMRP (B-1) 053701,000259: 053702,000260: 13,2571 43145 SETGAMMA DLOAD BOFF # BRANCH FOR EARTH 053703,000261: 13,2572 26524 B2/A2 # EARTH GAMMA 053704,000262: 13,2573 01743 LUNAFLAG 053705,000263: 13,2574 26577 SETGMEX 053706,000264: 13,2575 77735 SLOAD 053707,000265: 13,2576 11564 1B1 # MOON GAMMA 053708,000266: 13,2577 00011 SETGMEX STORE GAMRP 053709,000267: 13,2600 77616 RVQ 053710,000268: 13,2601 GAMRP = 8D 053711,000269: 053712,000270: # Page 1242 053713,000271: # ***** SETRE SUBROUTINE ***** 053714,000272: # SUBROUTINE TO SET RE (EARTH OR MOON RADIUS) 053715,000273: 053716,000274: # RE = RM FOR MOON 053717,000275: # RE = RREF FOR FIXED EARTH RADIUS OR COMPUTED RF FOR FISCHER ELLIPSOID 053718,000276: 053719,000277: # CALLING SEQUENCE 053720,000278: # L CALL 053721,000279: # L+1 SETRE 053722,000280: 053723,000281: # SUBROUTINES USED 053724,000282: # CETERAD 053725,000283: 053726,000284: # INPUT 053727,000285: # ERADFLAG = 0 FOR FIXED RE, 1 FOR COMPUTED RE 053728,000286: # ALPHAV +4 = 1/2 SINL IF GETERAD IS CALLED 053729,000287: # LUNAFLAG = 0 FOR EARTH, =1 FOR MOON 053730,000288: 053731,000289: # OUTPUT 053732,000290: # ERADM = 504RM FOR MOON (METERS B-29) 053733,000291: # ERADM = ERAD OR COMPUTED RE FOR EARTH (METERS B-29) 053734,000292: 053735,000293: 13,2601 71220 SETRE STQ DLOAD 053736,000294: 13,2602 00051 SETREX 053737,000295: 13,2603 26626 504RM 053738,000296: 13,2604 71214 BON DLOAD # BRANCH FOR MOON 053739,000297: 13,2605 01703 LUNAFLAG 053740,000298: 13,2606 26616 TSTRLSRM 053741,000299: 13,2607 26530 ERAD 053742,000300: 13,2610 45014 BOFF CALL # ERADFLAG=0 FOR FIXED RE, 1 FOR COMPUTED 053743,000301: 13,2611 00742 ERADFLAG 053744,000302: 13,2612 26614 SETRXX 053745,000303: 13,2613 26505 GETERAD 053746,000304: 13,2614 36241 SETRXX STCALL ERADM # EXIT WITH RE OR RM METERS B-29 053747,000305: 13,2615 00051 SETREX 053748,000306: 13,2616 77214 TSTRLSRM BON VLOAD # ERADFLAG=0, SET R0=RLS 053749,000307: 13,2617 00702 ERADFLAG # =1 R0=RM 053750,000308: 13,2620 26614 SETRXX 053751,000309: 13,2621 02026 RLS 053752,000310: 13,2622 64446 ABVAL SR2R # SCALE FROM B-27 TO B-29 053753,000311: 13,2623 77650 GOTO 053754,000312: 13,2624 26614 SETRXX 053755,000313: 13,2625 0000051 SETREX = S2 053756,000314: 13,2625 00065 01265 504RM 2DEC 1738090 B-29 # METERS B-29 (MOON RADIUS) 053757,000315: 053758,000316: 053759,000317: 053760,000318: End of include-file LATITUDE_LONGITUDE_SUBROUTINES.agc. Parent file is MAIN.agc