Source Code

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