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