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. |
037289,000002: ## Copyright: Public domain. 037290,000003: ## Filename: CM_BODY_ATTITUDE.agc 037291,000004: ## Purpose: A section of Skylark revision 048. 037292,000005: ## It is part of the source code for the Apollo Guidance Computer (AGC) 037293,000006: ## for Skylab-2, Skylab-3, Skylab-4, and ASTP. No original listings of 037294,000007: ## this software are available; instead, this file was created via 037295,000008: ## disassembly of dumps of the core rope modules actually flown on 037296,000009: ## Skylab-2. Access to these modules was provided by the New Mexico 037297,000010: ## Museum of Space History. 037298,000011: ## Assembler: yaYUL 037299,000012: ## Contact: Ron Burkey <info@sandroid.org>. 037300,000013: ## Website: www.ibiblio.org/apollo/index.html 037301,000014: ## Mod history: 2023-09-04 MAS Created from Artemis 072. 037302,000015: 037303,000016: 37,2000 SETLOC BODYATT 037304,000017: 37,2000 BANK 037305,000018: 037306,000019: 37,3265 COUNT* $$/CMBAT 037307,000020: # PDL 12D - 15D SAFE. 037308,000021: 037309,000022: # VALUES OF GIMBAL AND BODY ANGLES VALID AT PIP TIME ARE SAVED DURING READACCS. 037310,000023: 037311,000024: 37,3265 E7,1451 EBANK= RTINIT # LET INTERPRETER SET EB 037312,000025: 037313,000026: 37,3265 06006 CM/POSE TC INTPRET # COME HERE VIA AVEGEXIT. 037314,000027: 037315,000028: 37,3266 77201 SETPD VLOAD 037316,000029: 37,3267 00001 0 037317,000030: 37,3270 01030 VN # KVSCALE = (12800/ .3048) /2VS 037318,000031: 37,3271 63361 VXSC PDVL 037319,000032: 37,3272 37561 -KVSCALE # KVSCALE = .81491944 037320,000033: 37,3273 02031 UNITW # FULL UNIT VECTOR 037321,000034: 37,3274 74235 VXV VXSC # VREL = V - WE*R 037322,000035: 37,3275 02250 UNITR 037323,000036: 37,3276 15114 KWE 037324,000037: 37,3277 45455 VAD STADR 037325,000038: 37,3300 74251 STORE -VREL # SAVE FOR ENTRY GUIDANCE. REF COORDS 037326,000039: 037327,000040: 37,3301 72056 UNIT LXA,1 037328,000041: 37,3302 00044 36D # ABVAL( -VREL) TO X1 037329,000042: 37,3303 03542 STORE UXA/2 # -UVREL REF COORDS 037330,000043: 037331,000044: 37,3304 57435 VXV VCOMP 037332,000045: 37,3305 02250 UNITR # .5 UNIT REF COORDS 037333,000046: 37,3306 66256 UNIT SSP # THE FOLLOWING IS TO PROVIDE A STABLE 037334,000047: 37,3307 00051 S1 # UN FOR THE END OF THE TERMINAL PHASE. 037335,000048: 37,3310 00476 SPVQUIT DEC .019405 # 1000/ 2 VS 037336,000049: 37,3311 77300 TIX,1 VLOAD # IF V-VQUIT POS, BRANCH. 037337,000050: 37,3312 77314 CM/POSE2 # SAVE UYA IN OLDUYA 037338,000051: 37,3313 03534 OLDUYA # OTHERWISE CONTINUE TO USE OLDUYA. 037339,000052: 37,3314 03550 CM/POSE2 STORE UYA/2 # REF COORDS 037340,000053: 037341,000054: 37,3315 03534 STORE OLDUYA # RESTORE, OR SAVE AS CASE MAY BE. 037342,000055: 037343,000056: 37,3316 57435 VXV VCOMP 037344,000057: 37,3317 03542 UXA/2 # FINISH OBTAINING TRAJECTORY TRIAD. 037345,000058: 37,3320 77772 VSL1 037346,000059: 37,3321 03556 STORE UZA/2 # REF COORDS 037347,000060: 037348,000061: 37,3322 77751 TLOAD # PICK UP CDUX, CDUY, CDUZ CORRESPONDING 037349,000062: 37,3323 03321 AOG/PIP # TO PIPUP TIME IN 2S,C AND SAVE. 037350,000063: 37,3324 14031 CM/TRIO STODL 24D 037351,000064: 37,3325 00032 25D # AIG/PIP 037352,000065: 037353,000066: 37,3326 41434 RTB PUSH # TO PDL0 037354,000067: 37,3327 45566 CDULOGIC 037355,000068: 37,3330 77746 COS 037356,000069: 37,3331 17564 STODL UBX/2 # CI /2 037357,000070: # AIG/PIP FROM PDL 0 037358,000071: 37,3332 57556 SIN DCOMP 037359,000072: 37,3333 17570 STODL UBX/2 +4 # -SI /2 037360,000073: 37,3334 00033 26D # AMG/PIP 037361,000074: 37,3335 41434 RTB PUSH # TO PDL 0 037362,000075: 37,3336 45566 CDULOGIC 037363,000076: 37,3337 65356 SIN PDDL # XCH PDL 0. SAVE SM /2 037364,000077: 37,3340 65346 COS PDDL # CM /2 TO PDL 2 037365,000078: 37,3341 00001 0 # SM /2 037366,000079: 37,3342 74276 DCOMP VXSC 037367,000080: 37,3343 03564 UBX/2 037368,000081: 37,3344 77772 VSL1 # NOISE WONT OVFL. 037369,000082: 37,3345 17572 STODL UBY/2 # =(-SMCI, NOISE, SMSI)/2 037370,000083: 37,3346 00003 2 # CM /2 REPLACES NOISE 037371,000084: 37,3347 17574 STODL UBY/2 +2 # UBY/2=(-SMCI, CM, SMSI)/2 037372,000085: 37,3350 00031 24D # AOG/PIP 037373,000086: 37,3351 41434 RTB PUSH # TO PDL 4 037374,000087: 37,3352 45566 CDULOGIC 037375,000088: 37,3353 65356 SIN PDDL # XCH PDL 4. SAVE SO /2 037376,000089: 37,3354 74346 COS VXSC # CO /2 037377,000090: 37,3355 03572 UBY/2 037378,000091: 37,3356 17572 STODL UBY/2 # UBY/2=(-COSMCI, COCM, COSMSI)/4 037379,000092: 37,3357 00005 4D # SO /2 037380,000093: 37,3360 57405 DMP DCOMP 037381,000094: 37,3361 03570 UBX/2 +4 # -SI /2 037382,000095: 37,3362 77615 DAD 037383,000096: 37,3363 03572 UBY/2 # INCREMENT BY (SOSI /4) 037384,000097: 37,3364 17572 STODL UBY/2 037385,000098: # SO /2 FROM PDL 4 037386,000099: 37,3365 43205 DMP DAD 037387,000100: 37,3366 03564 UBX/2 # CI /2 037388,000101: 37,3367 03576 UBY/2 +4 037389,000102: 37,3370 27576 STOVL UBY/2 +4 # YB/4 PLATFORM COORDS 037390,000103: 037391,000104: # YB = (-COSMCI + SOSI , COCM , COSMSI + SOCI ) 037392,000105: 037393,000106: 37,3371 03572 UBY/2 037394,000107: 37,3372 72505 VXM VSL2 037395,000108: 37,3373 01720 REFSMMAT # .5 UNIT 037396,000109: 37,3374 17572 STODL UBY/2 # YB/2 DONE REF COORDS 037397,000110: 037398,000111: # CM /2 FROM PDL 2 037399,000112: 37,3375 76561 VXSC VSL1 037400,000113: 37,3376 03564 UBX/2 037401,000114: 37,3377 17564 STODL UBX/2 # =( CMCI, NOISE, -CMSI)/2 037402,000115: 37,3400 77626 STADR # SM /2 FROM PDL 0 037403,000116: 37,3401 50211 STOVL UBX/2 +2 # SM /2 REPLACES NOISE 037404,000117: 37,3402 03564 UBX/2 # XB/2 PLATFORM COORDS 037405,000118: 037406,000119: # XB = ( CMCI , SM , -CMSI ) 037407,000120: 037408,000121: 37,3403 76505 VXM VSL1 037409,000122: 37,3404 01720 REFSMMAT # .5 UNIT 037410,000123: 37,3405 03564 STORE UBX/2 # XB/2 DONE REF COORDS 037411,000124: 037412,000125: 37,3406 76435 VXV VSL1 037413,000126: 37,3407 03572 UBY/2 037414,000127: 37,3410 27600 STOVL UBZ/2 # ZB/2 DONE REF COORDS 037415,000128: 037416,000129: # EQUIVALENT TO 037417,000130: # ZB = ( SOSMCI + COSI , -SOCM , -SOSMSI + COCI) 037418,000131: 037419,000132: 37,3411 03542 UXA/2 # -UVREL/2 = -UVA/2 037420,000133: 37,3412 53435 VXV UNIT # GET UNIT(-UVREL*UBY)/2 = UL/2 037421,000134: 37,3413 03572 UBY/2 # YB/2 037422,000135: 37,3414 50206 PUSH DOT # UL/2 TO PDL 0,5 037423,000136: 37,3415 03556 UZA/2 # UNA/2 037424,000137: 37,3416 24021 STOVL COSTH # COS(ROLL)/4 037425,000138: 37,3417 00001 0 # UL/2 037426,000139: 037427,000140: 37,3420 77641 DOT 037428,000141: 37,3421 03550 UYA/2 037429,000142: 37,3422 34023 STCALL SINTH # -SIN(ROLL)/4 037430,000143: 37,3423 47250 ARCTRIG 037431,000144: 37,3424 24007 STOVL 6D # -(ROLL/180) /2 037432,000145: 37,3425 03572 UBY/2 037433,000146: 37,3426 72441 DOT SL1 # -UVA.UBY = -SIN(BETA) 037434,000147: 37,3427 03542 UXA/2 # -UVREL/2 037435,000148: 37,3430 77736 ARCSIN 037436,000149: 37,3431 24010 STOVL 7D # -(BETA/180) /2 037437,000150: 37,3432 03564 UBX/2 # XB/2 037438,000151: 37,3433 77641 DOT # UL.UBX = -SIN(ALFA) 037439,000152: 37,3434 00001 0 # UL/2 037440,000153: 37,3435 24023 STOVL SINTH # -SIN(ALFA)/4 037441,000154: 37,3436 77641 DOT # UL/2 FROM PDL 0 037442,000155: 37,3437 03600 UBZ/2 037443,000156: 37,3440 34021 STCALL COSTH # COS(ALFA)/4 037444,000157: 37,3441 47250 ARCTRIG 037445,000158: 37,3442 24011 STOVL 8D # -(ALFA/180) /2 037446,000159: 37,3443 02250 UNITR # UR/2 REF COORDS 037447,000160: 37,3444 72441 DOT SL1 037448,000161: 37,3445 03556 UZA/2 # MORE ACCURATE AT LARGE ARG. 037449,000162: 37,3446 77726 ARCCOS 037450,000163: 37,3447 00013 STORE 10D # (-GAMA/180)/2 037451,000164: 37,3450 77551 TLOAD EXIT # ANGLES IN MPAC IN THE ORDER 037452,000165: # -( (ROLL, BETA, ALFA) /180)/2 037453,000166: 37,3451 00007 6D # THESE VALUES CORRECT AT PIPUP TIME. 037454,000167: # SPACER 037455,000168: 037456,000169: # BASIC SUBROUTINE TO UPDATE ATTITUDE ANGLES 037457,000170: 037458,000171: 37,3452 E6,1712 EBANK= AOG 037459,000172: 037460,000173: 37,3452 04611 CM/ATUP TC E6SETTER 037461,000174: 037462,000175: 37,3453 50120 CMTR1 INDEX FIXLOC 037463,000176: 37,3454 40012 CS 10D # (GAMA/180)/2 037464,000177: 37,3455 57753 XCH GAMA 037465,000178: 37,3456 54001 TS L 037466,000179: 037467,000180: 37,3457 00004 INHINT 037468,000181: # MUST REMAIN INHINTED UNTIL UPDATE OF BODY 037469,000182: # ANGLES, SO THAT GAMDIFSW IS VALID FIRST PASS 037470,000183: # INDICATOR. 037471,000184: 037472,000185: 37,3460 40102 CS CM/FLAGS 037473,000186: 37,3461 74767 MASK GMDIFBIT # GAMDIFSW = 94D BIT11 INITLY= 037474,000187: 37,3462 00006 EXTEND # DONT CALC GAMA DOT UNTIL HAVE FORMD 037475,000188: # ONE DIFFERENCE. 037476,000189: 37,3463 13466 BZF DOGAMDOT # IS OK, GO ON. 037477,000190: 37,3464 26102 ADS CM/FLAGS # KNOW BIT IS 0 037478,000191: 37,3465 03501 TC NOGAMDOT # SET GAMDOT = 0 037479,000192: 037480,000193: 37,3466 40001 DOGAMDOT CS L 037481,000194: 37,3467 61753 AD GAMA # DEL GAMA/360= T GAMDOT/360 037482,000195: 37,3470 00006 EXTEND 037483,000196: 37,3471 73562 MP TCDU # TCDU = .1 SEC, T = 2 SEC. 037484,000197: 37,3472 55754 TS GAMDOT # GAMA DOT TCDU / 180 037485,000198: 037486,000199: 37,3473 00006 EXTEND # IGNORE GAMDOT IF LEQ .5 DEG/SEC 037487,000200: 37,3474 63476 BZMF +2 037488,000201: 37,3475 40000 COM 037489,000202: 37,3476 65004 AD FIVE 037490,000203: 37,3477 00006 EXTEND 037491,000204: 37,3500 63503 BZMF +3 # SET GAMDOT=+0 AS TAG IF TOO SMALL. 037492,000205: 037493,000206: 37,3501 35003 NOGAMDOT CA ZERO # COME HERE INHINTED. 037494,000207: 37,3502 55754 TS GAMDOT 037495,000208: # FOR NOW LEAVE IN 2S,C 037496,000209: # UPDATE ANGLES BY CORRECTING EUILER ANG 037497,000210: # FOR ACCRUED INCREMENT SINCE PIPUP 037498,000211: # R = R EUIL + R(NOW) -R(PIPUP) 037499,000212: 37,3503 40154 CS MPAC # GET (R EUL/180) /2 037500,000213: 37,3504 60000 DOUBLE # POSSIBLE OVERFLOW 037501,000214: 37,3505 03552 TC CORANGOV # CORRECT FOR OVFL IF ANY 037502,000215: 37,3506 00006 EXTEND 037503,000216: 37,3507 61723 SU ROLL/PIP # GET INCR SINCE PIPUP 037504,000217: 37,3510 61715 AD ROLL/180 # ONLY SINGLE OVFL POSSIBLE. 037505,000218: 37,3511 03552 TC CORANGOV # CORRECT FOR OVFL IF ANY 037506,000219: 37,3512 55772 TS TEMPROLL 037507,000220: 037508,000221: 37,3513 40156 CS MPAC +2 # GET (ALFA EUL/180) /2 037509,000222: 37,3514 60000 DOUBLE # SAME AS FOR ROLL. NEEDED FOR EXT ATM DAP 037510,000223: 37,3515 03552 TC CORANGOV # CORRECT FOR OVFL IF ANY 037511,000224: 37,3516 00006 EXTEND 037512,000225: 37,3517 61724 SU ALFA/PIP 037513,000226: 37,3520 61716 AD ALFA/180 037514,000227: 37,3521 03552 TC CORANGOV # CORRECT FOR OVFL IF ANY 037515,000228: 37,3522 55773 TS TEMPALFA 037516,000229: 037517,000230: 37,3523 40155 CS MPAC +1 # GET (BETA EUL/180) /2 037518,000231: 37,3524 60000 CMTR2 DOUBLE 037519,000232: 37,3525 00006 EXTEND 037520,000233: 37,3526 61725 SU BETA/PIP 037521,000234: 37,3527 61717 AD BETA/180 037522,000235: 37,3530 57774 XCH TEMPBETA # OVFL NOT EXPECTED. 037523,000236: 037524,000237: 37,3531 35037 CA EBANK3 037525,000238: 37,3532 54003 TS EBANK 037526,000239: 037527,000240: 37,3533 E3,1446 EBANK= PHSNAME5 037528,000241: 37,3533 00006 EXTEND 037529,000242: 37,3534 33564 DCA REPOSADR # THIS ASSUMES THAT THE TC PHASCHNG 037530,000243: 37,3535 53447 DXCH PHSNAME5 # IS NOT CHANGED IN OCT 10035 037531,000244: # SERVICER. 037532,000245: 037533,000246: 37,3536 04611 TC E6SETTER 037534,000247: 037535,000248: 37,3537 E6,1712 EBANK= AOG 037536,000249: 37,3537 00006 REDOPOSE EXTEND # RE-STARTS COME HERE 037537,000250: 37,3540 31773 DCA TEMPROLL 037538,000251: 37,3541 53716 DXCH ROLL/180 037539,000252: 37,3542 31774 CA TEMPBETA 037540,000253: 37,3543 55717 TS BETA/180 037541,000254: 037542,000255: 37,3544 06006 TC INTPRET # CANT TC DANZIG AFTER PHASCHNG. 037543,000256: 37,3545 51575 CM/POSE3 VLOAD ABVAL # RETURN FROM CM/ATUP. (RESTART) 037544,000257: 37,3546 01030 VN # 2(-7) M/CS 037545,000258: 37,3547 03723 STORE VMAGI # FOR DISPLAY ON CALL. 037546,000259: 037547,000260: 37,3550 77650 GOTO 037548,000261: 37,3551 03355 POSEXIT # ENDEXIT, STARTENT, OR SCALEPOP. 037549,000262: 037550,000263: 37,3552 54001 CORANGOV TS L 037551,000264: 37,3553 00002 TC Q 037552,000265: 37,3554 50000 INDEX A 037553,000266: 37,3555 34762 CA LIMITS 037554,000267: 37,3556 26001 ADS L 037555,000268: 37,3557 00002 TC Q # COSTS 2 MCT TO USE. SEE ANGOVCOR. 037556,000269: 037557,000270: 37,3560 45730 53410 -KVSCALE 2DEC -.81491944 # -12800/(2 VS .3048) 037558,000271: 37,3562 03146 TCDU DEC .1 # TCDU = .1 SEC. 037559,000272: 037560,000273: 37,3563 E6,1712 EBANK= AOG 037561,000274: 37,3563 03537 76066 REPOSADR 2CADR REDOPOSE End of include-file CM_BODY_ATTITUDE.agc. Parent file is MAIN.agc