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