Source Code
![]() |
These source-code files are part of a reconstructed copy of Skylark 048, the
Block II Command Module (CM) Apollo Guidance Computer (AGC) software for the
Skylab-2, Skylab-3, Skylab-4, and Apollo-Soyuz Test Project missions.
They have been created via disassembly of binary dumps of the original core rope memory modules actually flown on Skylab-2, part numbers 2010802-541, 2010802-551, 2010802-561, 2010802-571, 2010802-581, and 2010802-591. Access to these modules was provided by the New Mexico Museum of Space History, who we are much indebted to. The source code for the Apollo 15, 16, and 17 software, Artemis 072, was used as a starting point. Heavy use was made of TRW 4900.5-244, Programmed Guidance Equations for Skylark Command Module Earth Orbital Program, dated 14 February 1972. This document contains pseudocode of essentially all of Skylark, using original program labels which have been copied for this source reconstruction. Since only binary dumps (rather than listings) of Skylark are available as source material, all comments and labels are approximate. They have been taken from the Programmed Guidance Equations or other AGC programs where possible, or, in some places, written from scratch to match what we believe would have been in the original listing. |
049923,000002: ## Copyright: Public domain. 049924,000003: ## Filename: LATITUDE_LONGITUDE_SUBROUTINES.agc 049925,000004: ## Purpose: A section of Skylark revision 048. 049926,000005: ## It is part of the source code for the Apollo Guidance Computer (AGC) 049927,000006: ## for Skylab-2, Skylab-3, Skylab-4, and ASTP. No original listings of 049928,000007: ## this software are available; instead, this file was created via 049929,000008: ## disassembly of dumps of the core rope modules actually flown on 049930,000009: ## Skylab-2. Access to these modules was provided by the New Mexico 049931,000010: ## Museum of Space History. 049932,000011: ## Assembler: yaYUL 049933,000012: ## Contact: Ron Burkey <info@sandroid.org>. 049934,000013: ## Website: www.ibiblio.org/apollo/index.html 049935,000014: ## Mod history: 2023-09-04 MAS Created from Artemis 072. 049936,000015: ## 2024-03-04 MAS Updated for Skylark 48. 049937,000016: 049938,000017: # SUBROUTINE TO CONVERT RAD VECTOR AT GIVEN TIME TO LAT,LONG AND ALT 049939,000018: 049940,000019: # CALLING SEQUENCE 049941,000020: 049942,000021: # L-1 CALL 049943,000022: # L LAT-LONG 049944,000023: 049945,000024: # SUBROUTINES USED 049946,000025: 049947,000026: # R-TO-RP, ARCTAN, SETGAMMA, SETRE 049948,000027: 049949,000028: # ERASABLE INIT. REQ. 049950,000029: 049951,000030: # AXO, -AYO, AZO, TEPHEM (SET AT LAUNCH TIME) 049952,000031: # ALPHAV = POSITION VECTOR METERS B-29 049953,000032: # MPAC -- TIME (CSECS B-28) 049954,000033: # ERADFLAG =1, TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS 049955,000034: 049956,000035: # OUTPUT 049957,000036: 049958,000037: # LATITUDE IN LAT (REVS. B-0) 049959,000038: # LONGITUDE IN LONG (REVS. B-0) 049960,000039: # ALTITUDE IN ALT METERS B-29 049961,000040: 049962,000041: 11,2000 SETLOC LATLONG 049963,000042: 11,2000 BANK 049964,000043: 049965,000044: 11,2461 COUNT* $$/LT-LG 049966,000045: 11,2461 E4,1453 EBANK= ALPHAV 049967,000046: 11,2461 40220 LAT-LONG STQ SETPD 049968,000047: 11,2462 02143 INCORPEX 049969,000048: 11,2463 00001 0D 049970,000049: 11,2464 24007 STOVL 6D # SAVE TIME IN 6-7D FOR R-TO-RP 049971,000050: 11,2465 02054 ALPHAV 049972,000051: 11,2466 51406 PUSH ABVAL # 0-5D= R FOR R-TO-RP 049973,000052: 11,2467 36167 STCALL ALPHAM # ABS. VALUE OF R FOR ALT FORMULA BELOW 049974,000053: 11,2470 55224 R-TO-RP # RP VECTOR CONVERTED FROM R B-29 049975,000054: 11,2471 77656 UNIT # UNIT RP B-1 049976,000055: 11,2472 36054 STCALL ALPHAV # U2= 1/2 SINL FOR SETRE SUBR BELOW 049977,000056: 11,2473 22645 SETRE # CALC RE METERS B-29 049978,000057: 11,2474 63545 DLOAD DSQ 049979,000058: 11,2475 02054 ALPHAV 049980,000059: 11,2476 63525 PDDL DSQ 049981,000060: 11,2477 02056 ALPHAV +2 049982,000061: 11,2500 75415 DAD SQRT 049983,000062: 11,2501 76405 DMP SL1R 049984,000063: 11,2502 22600 B2/A2 049985,000064: 11,2503 14021 STODL COSTH # COS(LAT) B-1 049986,000065: 11,2504 02060 ALPHAV +4 049987,000066: 11,2505 34023 STCALL SINTH # SIN(LAT) B-1 049988,000067: 11,2506 22605 ARCTAN 049989,000068: 11,2507 14742 STODL LAT # LAT B0 049990,000069: 11,2510 02054 ALPHAV 049991,000070: 11,2511 14021 STODL COSTH # COS(LONG) B-1 049992,000071: 11,2512 02056 ALPHAV +2 049993,000072: 11,2513 34023 STCALL SINTH # SIN(LONG) B-1 049994,000073: 11,2514 22605 ARCTAN 049995,000074: 11,2515 14744 STODL LONG # LONG. REVS B-0 IN RANGE -1/2 TO 1/2 049996,000075: 11,2516 02167 ALPHAM 049997,000076: 11,2517 77625 DSU # ALT= R-RE METERS B-29 049998,000077: 11,2520 02142 ERADM 049999,000078: 11,2521 34746 STCALL ALT # EXIT WITH ALT METERS B-29 050000,000079: 11,2522 02143 INCORPEX 050001,000080: 050002,000081: # SUBROUTINE TO CONVERT LAT,LONG,ALT AT GIVEN TIME TO RADIUS VECTOR 050003,000082: 050004,000083: # CALLING SEQUENCE 050005,000084: 050006,000085: # L-1 CALL 050007,000086: # L LALOTORV 050008,000087: 050009,000088: # SUBROUTINES USED 050010,000089: 050011,000090: # SETGAMMA, SETRE, RP-TO-R 050012,000091: 050013,000092: # ERASABLE INIT. REQ. 050014,000093: 050015,000094: # AXO, AYO, AZO, TEPHEM SET AT LAUNCH TIME 050016,000095: # LAT -- LATITUDE (REVS B0) 050017,000096: # LONG -- LONGITUDE (REVS B0) 050018,000097: # ALT -- ALTITUDE (METERS) B-29 050019,000098: # MPAC -- TIME (CSECS B-28) 050020,000099: # ERADFLAG =1 TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS 050021,000100: 050022,000101: # OUTPUT 050023,000102: 050024,000103: # R-VECTOR IN ALPHAV (METERS B-29) 050025,000104: 050026,000105: 11,2523 40220 LALOTORV STQ SETPD # LAT,LONG,ALT TO R VECTOR 050027,000106: 11,2524 02143 INCORPEX 050028,000107: 11,2525 00001 0D 050029,000108: 11,2526 00007 STORE 6D # 6-7D = TIME FOR RP-TO-R 050030,000109: 11,2527 73545 DLOAD SIN # COS(LONG)COS(LAT) IN MPAC 050031,000110: 11,2530 00742 LAT # UNIT RP = SIN(LONG)COS(LAT) 2-3D 050032,000111: 11,2531 65275 DMPR PDDL # PD 2 GAMMA*SIN(LAT) 0-1D 050033,000112: 11,2532 22600 B2/A2 050034,000113: 11,2533 00742 LAT # 0-1D = GAMMA*SIN(LAT) B-2 050035,000114: 11,2534 65346 COS PDDL # PD4 2-3D = COS(LAT) B-1 TEMPORARILY 050036,000115: 11,2535 00744 LONG 050037,000116: 11,2536 57356 SIN DMPR # PD 2 050038,000117: 11,2537 71525 PDDL COS # PD 4 2-3D = SIN(LONG)COS(LAT) B-2 050039,000118: 11,2540 00742 LAT 050040,000119: 11,2541 71525 PDDL COS # PD 6 4-5D = COS(LAT) B-1 TEMPORARILY 050041,000120: 11,2542 00744 LONG 050042,000121: 11,2543 55475 DMPR VDEF # PD4 MPAC = COS(LONG)COS(LAT) B-2 050043,000122: 11,2544 41456 UNIT PUSH # 0-5D = UNIT RP FOR RP-TO-R SUBR. 050044,000123: 11,2545 36054 STCALL ALPHAV # ALPHAV +4= SINL FOR SETRE SUBR. 050045,000124: 11,2546 22645 SETRE # RE METERS B-29 050046,000125: 11,2547 77624 CALLRPRT CALL 050047,000126: 11,2550 55213 RP-TO-R # EXIT WITH UNIT R VECTOR IN MPAC 050048,000127: 11,2551 16054 STODL ALPHAV 050049,000128: 11,2552 02142 ERADM 050050,000129: 11,2553 74215 DAD VXSC # (RE + ALT)(UNIT R) METERS B-30 050051,000130: 11,2554 00746 ALT 050052,000131: 11,2555 02054 ALPHAV 050053,000132: 11,2556 77772 VSL1 # R METERS B-29 050054,000133: 11,2557 36054 STCALL ALPHAV # EXIT WITH R IN METERS B-29 050055,000134: 11,2560 02143 INCORPEX 050056,000135: 050057,000136: # SUBROUTINE TO COMPUTE EARTH RADIUS 050058,000137: 050059,000138: # INPUT 050060,000139: 050061,000140: # 1/2 SIN LAT IN ALPHAV +4 050062,000141: 050063,000142: # OUTPUT 050064,000143: 050065,000144: # EARTH RADIUS IN ERADM AND MPAC (METERS B-29) 050066,000145: 050067,000146: 11,2561 63545 GETERAD DLOAD DSQ 050068,000147: 11,2562 02060 ALPHAV +4 # SIN**2(L) 050069,000148: 11,2563 44352 SL1 BDSU 050070,000149: 11,2564 15724 DP1/2 # COS**2(L) 050071,000150: 11,2565 44275 DMPR BDSU 050072,000151: 11,2566 22602 EE 050073,000152: 11,2567 15724 DP1/2 050074,000153: 11,2570 75465 BDDV SQRT 050075,000154: 11,2571 22576 B2XSC 050076,000155: 11,2572 77622 SR4R 050077,000156: 11,2573 02142 STORE ERADM 050078,000157: 11,2574 77616 RVQ 050079,000158: 050080,000159: # THE FOLLOWING CONSTANTS WERE COMPUTED WITH A=6378166, B=6356784 METERS 050081,000160: # B2XSC = B**2 SCALED B-51 050082,000161: # B2/A2 = B**2/A**2 SCALED B-1 050083,000162: # EE = (1-B**2/A**2) SCALED B-0 050084,000163: 050085,000164: 11,2575 00446 00305 B2XSC 2DEC .0179450689 # B**2 SCALED B-51 050086,000165: 11,2577 06,3723 DP1/2 = XUNIT 050087,000166: 11,2577 17711 05254 B2/A2 2DEC .9933064884 B-1 # GAMMA= B**2/A**2 B-1 050088,000167: 11,2601 00155 25250 EE 2DEC 6.6935116 E-3 # (1-B**2/A**2) B-0 050089,000168: 11,2603 00302 17755 ERAD 2DEC 6373338 B-29 # PAD RADIUS 050090,000169: 050091,000170: # ARCTAN SUBROUTINE 050092,000171: 050093,000172: # CALLING SEQUENCE 050094,000173: 050095,000174: # SIN THETA IN SINTH B-1 050096,000175: # COS THETA IN COSTH B-1 050097,000176: # CALL ARCTAN 050098,000177: 050099,000178: # OUTPUT 050100,000179: # ARCTAN THETA IN MPAC AND THETA B-0 IN RANGE -1/2 TO +1/2 050101,000180: 050102,000181: 11,2605 77600 ARCTAN BOV 050103,000182: 11,2606 22607 CLROVFLW 050104,000183: 11,2607 63545 CLROVFLW DLOAD DSQ 050105,000184: 11,2610 00023 SINTH 050106,000185: 11,2611 63525 PDDL DSQ 050107,000186: 11,2612 00021 COSTH 050108,000187: 11,2613 77615 DAD 050109,000188: 11,2614 75454 BZE SQRT 050110,000189: 11,2615 22633 ARCTANXX # ATAN=0/0 SET THETA=0 050111,000190: 11,2616 40065 BDDV BOV 050112,000191: 11,2617 00023 SINTH 050113,000192: 11,2620 22640 ATAN=90 050114,000193: 11,2621 67542 SR1 ASIN 050115,000194: 11,2622 00025 STORE THETA 050116,000195: 11,2623 50125 PDDL BMN 050117,000196: 11,2624 00021 COSTH 050118,000197: 11,2625 22627 NEGCOS 050119,000198: 11,2626 43545 DLOAD RVQ 050120,000199: 11,2627 57545 NEGCOS DLOAD DCOMP 050121,000200: 11,2630 43244 BPL DAD 050122,000201: 11,2631 22635 NEGOUT 050123,000202: 11,2632 15724 DP1/2 050124,000203: 11,2633 00025 ARCTANXX STORE THETA 050125,000204: 11,2634 77616 RVQ 050126,000205: 050127,000206: 11,2635 52025 NEGOUT DSU GOTO 050128,000207: 11,2636 15724 DP1/2 050129,000208: 11,2637 22633 ARCTANXX 050130,000209: 11,2640 75345 ATAN=90 DLOAD SIGN 050131,000210: 11,2641 33412 LODP1/4 050132,000211: 11,2642 00023 SINTH 050133,000212: 11,2643 00025 STORE THETA 050134,000213: 11,2644 77616 RVQ 050135,000214: 050136,000215: 11,2645 06,3725 2DZERO = DPZERO 050137,000216: 050138,000217: 050139,000218: # ..... SETRE SUBROUTINE ..... 050140,000219: # SUBROUTINE TO SET RE (EARTH RADIUS) 050141,000220: 050142,000221: # RE = RREF FOR FIXED EARTH RADIUS OR COMPUTED RF FOR FISCHER ELLIPSOID 050143,000222: 050144,000223: # CALLING SEQUENCE 050145,000224: # L CALL 050146,000225: # L+1 SETRE 050147,000226: 050148,000227: # SUBROUTINES USED 050149,000228: # GETERAD 050150,000229: 050151,000230: # INPUT 050152,000231: # ERADFLAG = 0 FOR FIXED RE, 1 FOR COMPUTED RE 050153,000232: # ALPHAV +4 = 1/2 SINL IF GETERAD IS CALLED 050154,000233: 050155,000234: # OUTPUT 050156,000235: # ERADM = ERAD OR COMPUTED RF FOR EARTH (METERS B-29) 050157,000236: 050158,000237: 11,2645 71220 SETRE STQ DLOAD 050159,000238: 11,2646 00051 SETREX 050160,000239: 11,2647 22604 ERAD 050161,000240: 11,2650 45014 BOFF CALL # ERADFLAG=0 FOR FIXED RE, 1 FOR COMPUTED 050162,000241: 11,2651 00742 ERADFLAG 050163,000242: 11,2652 22654 SETRXX 050164,000243: 11,2653 22561 GETERAD 050165,000244: 11,2654 36142 SETRXX STCALL ERADM # EXIT WITH RE OR RM METERS B-29 050166,000245: 11,2655 00051 SETREX 050167,000246: 11,2656 0000051 SETREX = S2 End of include-file LATITUDE_LONGITUDE_SUBROUTINES.agc. Parent file is MAIN.agc