Source Code

052062,000001: # Copyright: Public domain. 052063,000002: # Filename: LATITUDE_LONGITUDE_SUBROUTINES.agc 052064,000003: # Purpose: Part of the source code for Colossus, build 249. 052065,000004: # It is part of the source code for the Command Module's (CM) 052066,000005: # Apollo Guidance Computer (AGC), possibly for Apollo 8 and 9. 052067,000006: # Assembler: yaYUL 052068,000007: # Reference: Begins on p. 1218 of 1701.pdf. 052069,000008: # Contact: Ron Burkey <info@sandroid.org>. 052070,000009: # Website: www.ibiblio.org/apollo. 052071,000010: # Mod history: 08/28/04 RSB. Adapted from corresponding Luminary131 file. 052072,000011: # 2010-10-25 JL Indentation fix. 052073,000012: 052074,000013: # The contents of the "Colossus249" files, in general, are transcribed 052075,000014: # from a scanned document obtained from MIT's website, 052076,000015: # http://hrst.mit.edu/hrs/apollo/public/archive/1701.pdf. Notations on this 052077,000016: # document read, in part: 052078,000017: 052079,000018: # Assemble revision 249 of AGC program Colossus by NASA 052080,000019: # 2021111-041. October 28, 1968. 052081,000020: 052082,000021: # This AGC program shall also be referred to as 052083,000022: # Colossus 1A 052084,000023: 052085,000024: # Prepared by 052086,000025: # Massachusetts Institute of Technology 052087,000026: # 75 Cambridge Parkway 052088,000027: # Cambridge, Massachusetts 052089,000028: # under NASA contract NAS 9-4065. 052090,000029: 052091,000030: # Refer directly to the online document mentioned above for further information. 052092,000031: # Please report any errors (relative to 1701.pdf) to info@sandroid.org. 052093,000032: 052094,000033: # In some cases, where the source code for Luminary 131 overlaps that of 052095,000034: # Colossus 249, this code is instead copied from the corresponding Luminary 131 052096,000035: # source file, and then is proofed to incorporate any changes. 052097,000036: 052098,000037: # Page 1218 052099,000038: # SUBROUTINE TO CONVERT RAD VECTOR AT GIVEN TIME TO LAT,LONG AND ALT 052100,000039: 052101,000040: # CALLING SEQUENCE 052102,000041: # L-1 CALL 052103,000042: # L LAT-LONG 052104,000043: 052105,000044: # SUBROUTINES USED 052106,000045: # R-TO-RP, ARCTAN, SFTGAMMA, SETRE 052107,000046: 052108,000047: # ERASABLE INIT. REQ. 052109,000048: # AXO, -AYO, AZO, TEPHEM (SET AT LAUNCH TIME) 052110,000049: # ALPHAV = POSITION VECTOR METERS B-29 052111,000050: # MPAC -- TIME (CSECS B-28) 052112,000051: # ERADFLAG =1, TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS 052113,000052: # LUNAFLAG=0 FOR EARTH, 1 FOR MOON 052114,000053: 052115,000054: # OUTPUT 052116,000055: # LATITUDE IN LAT (REVS. B-0) 052117,000056: # LONGITUDE IN LONG (REVS. B-0) 052118,000057: # ALTITUDE IN ALT METERS B-29 052119,000058: 052120,000059: 30,3776 BANK 30 052121,000060: 13,2000 SETLOC LATLONG 052122,000061: 13,2000 BANK 052123,000062: 052124,000063: 13,2322 COUNT 13/LT-LG 052125,000064: 052126,000065: 13,2322 E4,1551 EBANK= ALPHAV 052127,000066: 13,2322 40220 LAT-LONG STQ SETPD 052128,000067: 13,2323 02242 INCORPEX 052129,000068: 13,2324 00001 0D 052130,000069: 13,2325 24007 STOVL 6D # SAVE TIME IN 6-7D FOR R-TO-RP 052131,000070: 13,2326 02152 ALPHAV 052132,000071: 13,2327 51406 PUSH ABVAL # 0-5D= R FOR R-TO-RP 052133,000072: 13,2330 16310 STODL ALPHAM # ABS. VALUE OF R FOR ALT FORMULA BELOW 052134,000073: 13,2331 11456 ZEROVEC # SET MPAC=0 FOR EARTH, NON-ZERO FOR MOON 052135,000074: 13,2332 71414 BOFF COS # USE COS(0) TO GET NON-ZERO IN MPAC 052136,000075: 13,2333 01743 LUNAFLAG # 0=EARTH, 1=MOON 052137,000076: 13,2334 26335 CALLRTRP 052138,000077: 13,2335 77624 CALLRTRP CALL 052139,000078: 13,2336 55366 R-TO-RP # RP VECTOR CONVERTED FROM R B-29 052140,000079: 13,2337 77656 UNIT # UNIT RP B-1 052141,000080: 13,2340 36152 STCALL ALPHAV # U2= 1/2 CINL FOR SETRE SUBR BELOW 052142,000081: 13,2341 26523 SETGAMMA # SET GAMMA=B2/A2 FOR EARTH, =1 FOR MOON 052143,000082: 13,2342 77624 CALL # SCALED B-1. 052144,000083: 13,2343 26533 SETRE # CALC RE METERS B-29 052145,000084: 13,2344 63545 DLOAD DSQ 052146,000085: 13,2345 02152 ALPHAV 052147,000086: 13,2346 63525 PDDL DSQ 052148,000087: 13,2347 02154 ALPHAV +2 052149,000088: # Page 1219 052150,000089: 13,2350 75415 DAD SQRT 052151,000090: 13,2351 76405 DMP SL1R 052152,000091: 13,2352 00011 GAMRP 052153,000092: 13,2353 14021 STODL COSTH # COS(LAT) B-1 052154,000093: 13,2354 02156 ALPHAV +4 052155,000094: 13,2355 34023 STCALL SINTH # SIN(LAT) B-1 052156,000095: 13,2356 26463 ARCTAN 052157,000096: 13,2357 15104 STODL LAT # LAT B0 052158,000097: 13,2360 02152 ALPHAV 052159,000098: 13,2361 14021 STODL COSTH # COS(LONG) B-1 052160,000099: 13,2362 02154 ALPHAV +2 052161,000100: 13,2363 34023 STCALL SINTH # SIN(LONG) B-1 052162,000101: 13,2364 26463 ARCTAN 052163,000102: 13,2365 15106 STODL LONG # LONG. REVS B-0 IN RANGE -1/2 TO 1/2 052164,000103: 13,2366 02310 ALPHAM 052165,000104: 13,2367 77625 DSU # ALT= R-RE METERS B-29 052166,000105: 13,2370 02241 ERADM 052167,000106: 13,2371 35110 STCALL ALT # EXIT WITH ALT METERS B-29 052168,000107: 13,2372 02242 INCORPEX 052169,000108: # Page 1220 052170,000109: # SUBROUTINE TO CONVERT LAT,LONG.ALT AT GIVEN TIME TO RADIUS VECTOR 052171,000110: 052172,000111: # CALLING SEQUENCE 052173,000112: # L-1 CALL 052174,000113: # L LALOTORV 052175,000114: 052176,000115: # SUBROUTINES USED 052177,000116: # SETGAMMA, SETRE, RP-TO-R 052178,000117: 052179,000118: # ERASABLE INIT. REQ. 052180,000119: # AXO, AYO, AZO, TEPHEM SET AT LAUNCH TIME 052181,000120: # LAT -- LATITUDE (REVS B0) 052182,000121: # LONG -- LONGITUDE (REVS B0) 052183,000122: # ALT -- ALTITUDE (METERS) B-29 052184,000123: # MPAC -- TIME (CSECS B-28) 052185,000124: # ERADFLAG =1 TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS 052186,000125: # LUNAFLAG=0 FOR EARTH, 1 FOR MOON 052187,000126: 052188,000127: # OUTPUT 052189,000128: # R-VECTOR IN ALPHAV (METERS B-29) 052190,000129: 052191,000130: 13,2373 40220 LALOTORV STQ SETPD # LAT,LONG,ALT TO R VECTOR 052192,000131: 13,2374 02242 INCORPEX 052193,000132: 13,2375 00001 0D 052194,000133: 13,2376 34007 STCALL 6D # 6-7D= TIME FOR RP-TO-R 052195,000134: 13,2377 26523 SETGAMMA # GAMMA=B2/A2 FOR EARTH, 1 FOR MOON B-1 052196,000135: 13,2400 73545 DLOAD SIN # COS(LONG)COS(LAT) IN MPAC 052197,000136: 13,2401 01104 LAT # UNIT RP = SIN(LONG)COS(LAT) 2-3D 052198,000137: 13,2402 65275 DMPR PDDL # PD 2 GAMMA*SIN(LAT) 0-1D 052199,000138: 13,2403 00011 GAMRP 052200,000139: 13,2404 01104 LAT # 0-1D= GAMMA*SIN(LAT) B-2 052201,000140: 13,2405 65346 COS PDDL # PD4 2-3D= COS(LAT) B-1 TEMPORARILY 052202,000141: 13,2406 01106 LONG 052203,000142: 13,2407 57356 SIN DMPR # PD 2 052204,000143: 13,2410 71525 PDDL COS # PD 4 2-3D = SIN(LONG)COS(LAT) B-2 052205,000144: 13,2411 01104 LAT 052206,000145: 13,2412 71525 PDDL COS # PD 6 4-5D = COS(LAT) B-1 TEMPORARILY 052207,000146: 13,2413 01106 LONG 052208,000147: 13,2414 55475 DMPR VDEF # PD4 MPAC= COS(LONG)COS(LAT) B-2 052209,000148: 13,2415 41456 UNIT PUSH # 0-5D= UNIT RP FOR RP-TO-R SUBR. 052210,000149: 13,2416 36152 STCALL ALPHAV # ALPHAV +4= SINL FOR SETRE SUBR. 052211,000150: 13,2417 26533 SETRE # RE METERS B-29 052212,000151: 13,2420 43145 DLOAD BOFF # SET MPAC=0 FOR EARTH, NON-ZERO IN MPAC 052213,000152: 13,2421 11456 ZEROVEC 052214,000153: 13,2422 01743 LUNAFLAG 052215,000154: 13,2423 26425 CALLRPRT 052216,000155: 13,2424 77746 COS # USE COS(0) TO GET NON-ZERO IN MPAC 052217,000156: 13,2425 77624 CALLRPRT CALL 052218,000157: 13,2426 55341 RP-TO-R # EXIT WITH UNIT R VECTOR IN MPAC 052219,000158: 13,2427 16152 STODL ALPHAV 052220,000159: 13,2430 02241 ERADM 052221,000160: # Page 1221 052222,000161: 13,2431 74215 DAD VXSC # (RE + ALT)(UNIT R) METERS B-30 052223,000162: 13,2432 01110 ALT 052224,000163: 13,2433 02152 ALPHAV 052225,000164: 13,2434 77772 VSL1 # R METERS B-29 052226,000165: 13,2435 36152 STCALL ALPHAV # EXIT WITH R IN METERS B-29 052227,000166: 13,2436 02242 INCORPEX 052228,000167: 052229,000168: # SUBROUTINE TO COMPUTE EARTH RADIUS 052230,000169: 052231,000170: # INPUT 052232,000171: # 1/2 SIN LAT IN ALPHAV +4 052233,000172: 052234,000173: # OUTPUT 052235,000174: # EARTH RADIUS IN ERADM AND MPAC (METERS B-29) 052236,000175: 052237,000176: 13,2437 63545 GETERAD DLOAD DSQ 052238,000177: 13,2440 02156 ALPHAV +4 # SIN**2(L) 052239,000178: 13,2441 44352 SL1 BDSU 052240,000179: 13,2442 11454 DP1/2 # COS**2(L) 052241,000180: 13,2443 44275 DMPR BDSU 052242,000181: 13,2444 26460 EE 052243,000182: 13,2445 11454 DP1/2 052244,000183: 13,2446 75465 BDDV SQRT 052245,000184: 13,2447 26454 B2XSC 052246,000185: 13,2450 77622 SR4R 052247,000186: 13,2451 02241 STORE ERADM 052248,000187: 13,2452 77616 RVQ 052249,000188: 052250,000189: # THE FOLLOWING CONSTANTS WERE COMPUTED WITH A=6378166, B=6356784 METERS 052251,000190: # B2XSC = B**2 SCALED B-51 052252,000191: # B2/A2 = B**2/A**2 SCALED B-1 052253,000192: # EE = (1-B**2/A**2) SCALED B-0 052254,000193: 052255,000194: 13,2453 00446 00305 B2XSC 2DEC .0179450689 # B**2 SCALED B-51 052256,000195: 13,2455 04,3453 DP1/2 = XUNIT 052257,000196: 13,2455 17711 05254 B2/A2 2DEC .9933064884 B-1 # GAMMA= B**2/A**2 B-1 052258,000197: 13,2457 00155 25250 EE 2DEC 6.6935116 E-3 # (1-B**2/A**2) B-0 052259,000198: 13,2461 00302 17755 ERAD 2DEC 6373338 B-29 # PAD RADIUS 052260,000199: 052261,000200: # Page 1222 052262,000201: # ARCTAN SUBROUTINE 052263,000202: 052264,000203: # CALLING SEQUENCE 052265,000204: # SIN THETA IN SINTH B-1 052266,000205: # COS THETA IN COSTH B-1 052267,000206: # CALL ARCTAN 052268,000207: 052269,000208: # OUTPUT 052270,000209: # ARCTAN THETA IN MPAC AND THETA B-0 IN RANGE -1/2 TO +1/2 052271,000210: 052272,000211: 13,2463 77600 ARCTAN BOV 052273,000212: 13,2464 26465 CLROVFLW 052274,000213: 13,2465 63545 CLROVFLW DLOAD DSQ 052275,000214: 13,2466 00023 SINTH 052276,000215: 13,2467 63525 PDDL DSQ 052277,000216: 13,2470 00021 COSTH 052278,000217: 13,2471 77615 DAD 052279,000218: 13,2472 75454 BZE SQRT 052280,000219: 13,2473 26511 ARCTANXX # ATAN=0/0. SET THETA=0 052281,000220: 13,2474 40065 BDDV BOV 052282,000221: 13,2475 00023 SINTH 052283,000222: 13,2476 26516 ATAN=90 052284,000223: 13,2477 67542 SR1 ASIN 052285,000224: 13,2500 00025 STORE THETA 052286,000225: 13,2501 50125 PDDL BMN 052287,000226: 13,2502 00021 COSTH 052288,000227: 13,2503 26505 NEGCOS 052289,000228: 13,2504 43545 DLOAD RVQ 052290,000229: 13,2505 57545 NEGCOS DLOAD DCOMP 052291,000230: 13,2506 43244 BPL DAD 052292,000231: 13,2507 26513 NEGOUT 052293,000232: 13,2510 11454 DP1/2 052294,000233: 13,2511 00025 ARCTANXX STORE THETA 052295,000234: 13,2512 77616 RVQ 052296,000235: 052297,000236: 13,2513 52025 NEGOUT DSU GOTO 052298,000237: 13,2514 11454 DP1/2 052299,000238: 13,2515 26511 ARCTANXX 052300,000239: 13,2516 75345 ATAN=90 DLOAD SIGN 052301,000240: 13,2517 11502 LODP1/4 052302,000241: 13,2520 00023 SINTH 052303,000242: 13,2521 00025 STORE THETA 052304,000243: 13,2522 77616 RVQ 052305,000244: 052306,000245: 13,2523 04,3455 2DZERO = DPZERO 052307,000246: 052308,000247: # Page 1223 052309,000248: # ***** SETGAMMA SUBROUTINE ***** 052310,000249: # SUBROUTINE TO SET GAMMA FOR THE LAT-LONG AND LALOTORV SUBROUTINES 052311,000250: 052312,000251: # GAMMA = B**2/A**2 FOR EARTH (B-1) 052313,000252: # GAMMA = 1 FOR MOON (B-1) 052314,000253: 052315,000254: # CALLING SEQUENCE 052316,000255: # L CALL 052317,000256: # L+1 SETGAMMA 052318,000257: 052319,000258: # INPUT 052320,000259: # LUNAFLAG=0 FOR EARTH, =1 FOR MOON 052321,000260: 052322,000261: # OUTPUT 052323,000262: # GAMMA IN GAMRP (B-1) 052324,000263: 052325,000264: 13,2523 43145 SETGAMMA DLOAD BOFF # BRANCH FOR EARTH 052326,000265: 13,2524 26456 B2/A2 # EARTH GAMMA 052327,000266: 13,2525 01743 LUNAFLAG 052328,000267: 13,2526 26531 SETGMEX 052329,000268: 13,2527 77735 SLOAD 052330,000269: 13,2530 11454 1B1 # MOON GAMMA 052331,000270: 13,2531 00011 SETGMEX STORE GAMRP 052332,000271: 13,2532 77616 RVQ 052333,000272: 13,2533 GAMRP = 8D 052334,000273: 052335,000274: # Page 1224 052336,000275: # ***** SETRE SUBROUTINE ***** 052337,000276: # SUBROUTINE TO SET RE (EARTH OR MOON RADIUS) 052338,000277: 052339,000278: # RE = RM FOR MOON 052340,000279: # RE = RREF FOR FIXED EARTH RADIUS OR COMPUTED RF FOR FISCHER ELLIPSOID 052341,000280: 052342,000281: # CALLING SEQUENCE 052343,000282: # L CALL 052344,000283: # L+1 SETRE 052345,000284: 052346,000285: # SUBROUTINES USED 052347,000286: # CETERAD 052348,000287: 052349,000288: # INPUT 052350,000289: # ERADFLAG = 0 FOR FIXED RE, 1 FOR COMPUTED RE 052351,000290: # ALPHAV +4 = 1/2 SINL IF GETERAD IS CALLED 052352,000291: # LUNAFLAG = 0 FOR EARTH, =1 FOR MOON 052353,000292: 052354,000293: # OUTPUT 052355,000294: # ERADM = 504RM FOR MOON (METERS B-29) 052356,000295: # ERADM = ERAD OR COMPUTED RE FOR EARTH (METERS B-29) 052357,000296: 052358,000297: 13,2533 71220 SETRE STQ DLOAD 052359,000298: 13,2534 00051 SETREX 052360,000299: 13,2535 26560 504RM 052361,000300: 13,2536 71214 BON DLOAD # BRANCH FOR MOON 052362,000301: 13,2537 01703 LUNAFLAG 052363,000302: 13,2540 26550 TSTRLSRM 052364,000303: 13,2541 26462 ERAD 052365,000304: 13,2542 45014 BOFF CALL # ERADFLAG=0 FOR FIXED RE, 1 FOR COMPUTED 052366,000305: 13,2543 00742 ERADFLAG 052367,000306: 13,2544 26546 SETRXX 052368,000307: 13,2545 26437 GETERAD 052369,000308: 13,2546 36241 SETRXX STCALL ERADM # EXIT WITH RE OR RM METERS B-29 052370,000309: 13,2547 00051 SETREX 052371,000310: 13,2550 77214 TSTRLSRM BON VLOAD # ERADFLAG=0, SET R0=RLS 052372,000311: 13,2551 00702 ERADFLAG # =1 40=RM 052373,000312: 13,2552 26546 SETRXX 052374,000313: 13,2553 02026 RLS 052375,000314: 13,2554 64446 ABVAL SR2R # SCALE FROM B-27 TO B-29 052376,000315: 13,2555 77650 GOTO 052377,000316: 13,2556 26546 SETRXX 052378,000317: 13,2557 0000051 SETREX = S2 052379,000318: 13,2557 00065 01265 504RM 2DEC 1738090 B-29 # METERS B-29 (MOON RADIUS) 052380,000319: 052381,000320: 052382,000321: 052383,000322: End of include-file LATITUDE_LONGITUDE_SUBROUTINES.agc. Parent file is MAIN.agc