Source Code
![]() |
These source-code files were transcribed from scans made from Don Eyles's personal
copy of BURST120 (SUNBURST 120). They were scanned at archive.org's Boston
facility, and the scanning was sponsored by Mike Stewart. The code was transcribed
from these scans by a team of volunteers who are referenced in the program
comments. Comments from the original source code are in ALL-CAPS, whereas
comments added later in transcription are in Mixed-Case. In some cases, where
similar code blocks exist in previously-transcribed AGC programs (primarily
Luminary 99, from Apollo 11) those code blocks were used as a starting point and
then corrected to agree with the BURST120 scans. The full scans are available
at the Virtual AGC
project's collection at archive.org, while more-convenient reduced-size (but reduced-quality)
images are available at
the main Virtual AGC website. Report any errors noted by creating an
issue report at the Virtual AGC
project's GitHub repository. Notations on the program listing read, in part:YUL SYSTEM FOR AGC: REVISION 0 OF PROGRAM BURST120 BY NASA 2021106-031 DEC 7, 1967 THIS LISTING IS A COPY OF A VERSION OF THE PROGRAM INTENDED FOR USE IN THE ON-BOARD PRIMARY GUIDANCE COMPUTER IN THE UNMANNED FLIGHT OF APOLLO LUNAR MODULE 1 --- THE AS206 MISSION.Note that the date is the date of the printout, not the date of the program revision. |
027885,000002: ## Copyright: Public domain.
027886,000003: ## Filename: GIMBAL_LOCK_AVOIDANCE.agc
027887,000004: ## Purpose: A module for revision 0 of BURST120 (Sunburst). It
027888,000005: ## is part of the source code for the Lunar Module's
027889,000006: ## (LM) Apollo Guidance Computer (AGC) for Apollo 5.
027890,000007: ## Assembler: yaYUL
027891,000008: ## Contact: Ron Burkey <info@sandroid.org>.
027892,000009: ## Website: www.ibiblio.org/apollo/index.html
027893,000010: ## Mod history: 2016-09-30 RSB Created draft version.
027894,000011: ## 2016-10-22 MAS Transcribed.
027895,000012: ## 2016-10-31 RSB Typos.
027896,000013: ## 2016-11-01 RSB More typos.
027897,000014: ## 2016-12-06 RSB Comments proofed using octopus/ProoferComments,
027898,000015: ## changes made.
027899,000016:
![]() |
Page 661 |
027901,000018: # DETECTING GIMBAL LOCK
027902,000019: 34,3006 51545 LOCSKIRT DLOAD ABS
027903,000020: 34,3007 01624 COF
027904,000021: 34,3010 51025 DSU BPL # IF (ABS(COF )-CNGL) POS, GO TO NOGIMLOC
027905,000022: 34,3011 30442 CNGL # 0
027906,000023: 34,3012 71437 NOGIMLOC
027907,000024: 34,3013 41345 DLOAD DMP
027908,000025: 34,3014 01624 COF
027909,000026: 34,3015 01630 COF +4
027910,000027: 34,3016 65352 SL1 PDDL
027911,000028: 34,3017 01624 COF
027912,000029: 34,3020 72405 DMP SL1
027913,000030: 34,3021 01626 COF +2
027914,000031: 34,3022 63525 PDDL DSQ
027915,000032: 34,3023 01624 COF
027916,000033: 34,3024 55552 SL1 VDEF # 2
027917,000034: 34,3025 01602 STORE K1 # V1 = (COF , COF COF , COF COF ) $2
027918,000035: 34,3026 53276 VCOMP VAD # 0 0 1 0 2
027919,000036: 34,3027 30414 HALFA # -
027920,000037: 34,3030 15610 STODL K2 # V2 = ((1-V1 ), -V1 , -V1 ) $2
027921,000038: 34,3031 01626 COF +2 # 0 1 2
027922,000039: 34,3032 65276 DCOMP PDDL
027923,000040: 34,3033 01630 COF +4
027924,000041: 34,3034 55525 PDDL VDEF # -
027925,000042: 34,3035 30416 NIL # V3 = (0, COF , -COF )
027926,000043: 34,3036 25616 STOVL K3 # 2 1
027927,000044: 34,3037 01544 MIS +6 # - -
027928,000045: 34,3040 01635 STORE IG # IG = MIS $2
027929,000046: 34,3041 76521 MXV VSL1 # 3
027930,000047: 34,3042 01602 K1 # - - - -
027931,000048: 34,3043 15602 STODL P21 # (P21, D21, G21) = (V1, V2, V3) TG $2
027932,000049: 34,3044 01606 G21
027933,000050: 34,3045 65316 DSQ PDDL
027934,000051: 34,3046 01604 D21
027935,000052: 34,3047 43316 DSQ DAD
027936,000053: 34,3050 77766 SQRT # 2 2
027937,000054: 34,3051 01647 STORE RAD # RAD = SQRT(D21 D21 + G21 G21)
027938,000055: 34,3052 50025 DSU BMN
027939,000056: 34,3053 30440 SNGLCD # IF (RAD-SNGLCD) NEG, GO TO NOGIMLOC
027940,000057: 34,3054 71437 NOGIMLOC
027941,000058: 34,3055 51145 DLOAD BPL
027942,000059: 34,3056 01606 G21
027943,000060: 34,3057 71066 OKG21
027944,000061: 34,3060 57575 VLOAD VCOMP # IF G21 IS NEG ...
027945,000062: 34,3061 01635 IG # - -
027946,000063: 34,3062 15635 STODL IG # IG =-IG, RAD =-RAD
027947,000064: 34,3063 01647 RAD
027948,000065: 34,3064 77676 DCOMP
027949,000066: 34,3065 01647 STORE RAD
027950,000067:
![]() |
Page 662 |
027952,000069: 34,3066 43345 OKG21 DLOAD DAD # IF G21 IS POS....
027953,000070: 34,3067 01602 P21
027954,000071: 34,3070 01647 RAD # IF (ABS(P21+RAD)-SD) NEG, GO NOGIMLOC
027955,000072: 34,3071 51400 BOV ABS
027956,000073: 34,3072 71076 CBMCALC
027957,000074: 34,3073 50025 DSU BMN # CBM = D21/RAD $2
027958,000075: 34,3074 30430 SD
027959,000076: 34,3075 71437 NOGIMLOC
027960,000077: 34,3076 70545 CBMCALC DLOAD SR1
027961,000078: 34,3077 01604 D21
027962,000079: 34,3100 44271 DDV BDSU
027963,000080: 34,3101 01647 RAD
027964,000081: 34,3102 01645 CAM
027965,000082: 34,3103 71244 BPL DLOAD
027966,000083: 34,3104 71437 NOGIMLOC
027967,000084: 34,3105 01574 MFI +12D
027968,000085: 34,3106 65325 PDDL PDDL
027969,000086: 34,3107 01566 MFI +6
027970,000087: 34,3110 01560 MFI # -
027971,000088: 34,3111 76466 VDEF VSL1 # OGF = (MFI , MFI , MFI ) $2
027972,000089: 34,3112 15616 STODL OGF # 0 3 6
027973,000090: 34,3113 01616 OGF
027974,000091: 34,3114 50015 DAD BMN
027975,000092: 34,3115 30442 CNGL # IF ((OGF ) + CNGL) NEG, GO TO ALTE
027976,000093: 34,3116 71134 ALTE # 0
027977,000094: 34,3117 47375 VLOAD VXV
027978,000095: 34,3120 30414 HALFA
027979,000096: 34,3121 01616 OGF
027980,000097: 34,3122 77656 UNIT
027981,000098: 34,3123 25560 STOVL E1 # E1 = UNIT(OGI X OGF)
027982,000099: 34,3124 01616 OGF
027983,000100: 34,3125 53455 VAD UNIT
027984,000101: 34,3126 30414 HALFA
027985,000102: 34,3127 77650 GOTO
027986,000103: 34,3130 71150 STORE2 # E2 = UNIT(OGI X OGF)
027987,000104: 34,3131 52175 SETE1 VLOAD GOTO
027988,000105: 34,3132 30420 NIL +2
027989,000106: 34,3133 71141 STOREE1 # E1 = (0,0,1)
027990,000107: 34,3134 47375 ALTE VLOAD VXV
027991,000108: 34,3135 30414 HALFA
027992,000109: 34,3136 01616 OGF
027993,000110: 34,3137 40056 UNIT BOV
027994,000111: 34,3140 71131 SETE1
027995,000112: 34,3141 01560 STOREE1 STORE E1
027996,000113: 34,3142 77635 VXV
027997,000114: 34,3143 30414 HALFA
027998,000115: 34,3144 47315 PDVL VXV
027999,000116: 34,3145 01616 OGF
028000,000117: 34,3146 01560 E1
028001,000118: 34,3147 53455 VAD UNIT # E2 = UNIT(E1 X OGI + OGF X E1)
028002,000119:
![]() |
Page 663 |
028004,000121: 34,3150 77626 STORE2 STADR # - - -
028005,000122: 34,3151 76211 STORE E2 # E2 = UNIT(OGI + OGF) $2
028006,000123: 34,3152 50201 SETPD DOT
028007,000124: 34,3153 00001 0
028008,000125: 34,3154 01635 IG # - -
028009,000126: 34,3155 41552 SL1 PUSH # PD0 K2 $2
028010,000127: 34,3156 72516 DSQ SL1
028011,000128: 34,3157 50315 PDVL DOT # PD2 (K2 K2) $2
028012,000129: 34,3160 01560 E1
028013,000130: 34,3161 01635 IG
028014,000131: 34,3162 41552 SL1 PUSH # PD4 K1 $2
028015,000132: 34,3163 72516 DSQ SL1
028016,000133: 34,3164 45325 PDDL DSU # PD6 (K1 K1) $2
028017,000134: 34,3165 30436 K4SQ # = COS(D)COS(D) $2
028018,000135: 34,3166 00007 6
028019,000136: 34,3167 63406 PUSH DSQ # PD8 D1 $2
028020,000137: 34,3170 41325 PDDL DMP # PD10 (D1 D1) $4
028021,000138: 34,3171 01566 E2 # (K5)
028022,000139: 34,3172 30432 K3S1 # SIN(D) $1
028023,000140: 34,3173 62405 DMP SL2
028024,000141: 34,3174 00001 0 # K2
028025,000142: 34,3175 63525 PDDL DSQ # PD12 2 K2 K3 K5 $2
028026,000143: 34,3176 01566 E2
028027,000144: 34,3177 44352 SL1 BDSU # K5K5 $2 PUSH UP 2 K2 K3 K5 $2
028028,000145: 34,3200 43225 DSU DAD
028029,000146: 34,3201 00003 2
028030,000147: 34,3202 00007 6
028031,000148: 34,3203 63406 PUSH DSQ # PD12 D2 $2
028032,000149: 34,3204 41325 PDDL DMP # PD14 (D2 D2) $4
028033,000150: 34,3205 01566 E2
028034,000151: 34,3206 30432 K3S1
028035,000152: 34,3207 41421 BDSU PUSH
028036,000153: 34,3210 00001 0 # PD16 B1 $2
028037,000154: 34,3211 77605 DMP
028038,000155: 34,3212 00005 4 # B1 K1 $4
028039,000156: 34,3213 41552 SL1 PUSH # PD18 B1 K1 $2
028040,000157: 34,3214 65316 DSQ PDDL # PD22 B1 B1 K1 K1 $4
028041,000158: 34,3215 00011 8D
028042,000159: 34,3216 41405 DMP PUSH # PD22 D1 D2 $4
028043,000160: 34,3217 00015 12D
028044,000161: 34,3220 45221 BDSU DSU
028045,000162: 34,3221 00025 20D
028046,000163: 34,3222 00013 10D # RSQ $4
028047,000164: 34,3223 41366 SQRT DMP
028048,000165: 34,3224 00023 18D
028049,000166: 34,3225 70525 PDDL SR1 # PD24 RADICAL $8
028050,000167: 34,3226 00017 14D
028051,000168: 34,3227 72525 PDDL SL1 # PD26 (D2 D2) $8
028052,000169: 34,3230 00025 20D # 4(B1 B1 K1 K1) $8
028053,000170: 34,3231 77615 DAD # PUSH UP FOR (D2 D2) $8
![]() |
Page 664 |
028055,000172: 34,3232 70525 PDDL SR1 # PD26 DENOMR (D2 D2)
028056,000173: 34,3233 00027 22D
028057,000174: 34,3234 41421 BDSU PUSH # PD28 NUM
028058,000175: 34,3235 00025 20D
028059,000176: 34,3236 56215 DAD DDV # NUM
028060,000177: 34,3237 00031 24D # + RADICAL
028061,000178: 34,3240 00033 26D # DENOM
028062,000179: 34,3241 60404 BOVB SR2
028063,000180: 34,3242 73501 SIGNMPAC
028064,000181: 34,3243 01610 STORE C2SQP # $4
028065,000182: 34,3244 77766 SQRT
028066,000183: 34,3245 15614 STODL C2PP # $2
028067,000184: 34,3246 00031 24D # NUM
028068,000185: 34,3247 56221 BDSU DDV # PUSH UP FOR NUM, DENOM
028069,000186: 34,3250 60404 BOVB SR2
028070,000187: 34,3251 73501 SIGNMPAC
028071,000188: 34,3252 01612 STORE C2SQM # $4
028072,000189: 34,3253 77766 SQRT
028073,000190: 34,3254 15616 STODL C2MP # $2
028074,000191: 34,3255 30426 QUARTA # 1 $4
028075,000192: 34,3256 75425 DSU SQRT
028076,000193: 34,3257 01610 C2SQP
028077,000194: 34,3260 15620 STODL C1PP # $2
028078,000195: 34,3261 30426 QUARTA
028079,000196: 34,3262 75425 DSU SQRT
028080,000197: 34,3263 01612 C2SQM
028081,000198: 34,3264 01622 STORE C1MP # $2
028082,000199: 34,3265 66370 AXT,1 SSP
028083,000200: 34,3266 00004 4
028084,000201: 34,3267 00051 S1
028085,000202: 34,3270 00002 2
028086,000203: 34,3271 71201 NORM SETPD DLOAD
028087,000204: 34,3272 00023 18D
028088,000205: 34,3273 00021 16D # B1 $2
028089,000206: 34,3274 65203 DMP* PDDL # PD18 = -Q $4
028090,000207: 34,3275 01620 C2PP +4,1
028091,000208: 34,3276 01566 E2
028092,000209: 34,3277 40716 DSQ DMP*
028093,000210: 34,3300 01614 C2SQP +4,1
028094,000211: 34,3301 44312 SL2 BDSU
028095,000212: 34,3302 30426 QUARTA
028096,000213: 34,3303 41366 SQRT DMP
028097,000214: 34,3304 30434 K4 # PD20 = -R $4
028098,000215: 34,3305 40725 PDDL DMP*
028099,000216: 34,3306 00005 4 # K1 $2
028100,000217: 34,3307 01624 C1PP +4,1
028101,000218: 34,3310 65246 ABS PDDL # PD22 AC1 $4
028102,000219: 34,3311 00023 18D # -Q
028103,000220: 34,3312 57415 DAD DCOMP
028104,000221: 34,3313 00025 20D # -R
![]() |
Page 665 |
028106,000223: 34,3314 45325 PDDL DSU # PD24 ANSW1 = Q + R $4
028107,000224: 34,3315 00023 18D # -Q
028108,000225: 34,3316 00025 20D # +R
028109,000226: 34,3317 41476 DCOMP PUSH # PD26 ANSW2 = Q - R $4
028110,000227: 34,3320 45246 ABS DSU
028111,000228: 34,3321 00027 22D # AC1
028112,000229: 34,3322 65246 ABS PDDL # PD28 ABS(ABS(ANSW2) -AC1)
028113,000230: 34,3323 00031 24D # ANSW1
028114,000231: 34,3324 45246 ABS DSU
028115,000232: 34,3325 00027 22D # AC1
028116,000233: 34,3326 45246 ABS DSU # ABS(ABS(ANSW1)-AC1)
028117,000234: 34,3327 71244 BPL DLOAD
028118,000235: 34,3330 71353 CKSGNAN2
028119,000236: 34,3331 00031 24D # ANSW1
028120,000237: 34,3332 71244 SIGNANSW BPL DLOAD
028121,000238: 34,3333 71345 SAMEASK1
028122,000239: 34,3334 00005 4 # K1
028123,000240: 34,3335 70640 BMN DLOAD*
028124,000241: 34,3336 71342 OKC2
028125,000242: 34,3337 01620 C2PP +4,1
028126,000243: 34,3340 77676 OPPSGNC2 DCOMP
028127,000244: 34,3341 05620 STORE C2PP +4,1
028128,000245: 34,3342 52100 OKC2 TIX,1 GOTO
028129,000246: 34,3343 71271 NORM
028130,000247: 34,3344 71356 OUTCYCLE
028131,000248: 34,3345 51145 SAMEASK1 DLOAD BPL
028132,000249: 34,3346 00005 4 # K1
028133,000250: 34,3347 71342 OKC2
028134,000251: 34,3350 52143 DLOAD* GOTO
028135,000252: 34,3351 01620 C2PP +4,1
028136,000253: 34,3352 71340 OPPSGNC2
028137,000254: 34,3353 52145 CKSGNAN2 DLOAD GOTO
028138,000255: 34,3354 00033 26D # ANSW2
028139,000256: 34,3355 71332 SIGNANSW
028140,000257: 34,3356 77201 OUTCYCLE SETPD VLOAD
028141,000258: 34,3357 00001 0
028142,000259: 34,3360 01624 COF # - -
028143,000260: 34,3361 63241 DOT PDVL # PD0 U1 = COF.E1
028144,000261: 34,3362 01560 E1
028145,000262: 34,3363 01624 COF # - -
028146,000263: 34,3364 41441 DOT PUSH # PD2 U2 = COF.E2
028147,000264: 34,3365 01566 E2
028148,000265: # PICK THE NEW U WHICH IS CLOSEST TO THE OLD U
028149,000266: 34,3366 41370 AXT,1 DMP
028150,000267: 34,3367 00000 0
028151,000268: 34,3370 01614 C2PP
028152,000269: 34,3371 41325 PDDL DMP # PD4 U2 C2(0)
028153,000270: 34,3372 01620 C1PP
028154,000271: 34,3373 00001 0 # U1 C1(0)
028155,000272: 34,3374 51415 DAD ABS
![]() |
Page 666 |
028157,000274: 34,3375 41325 PDDL DMP # PD4 ABS(U1 C1(0) + U2 C2(0))
028158,000275: 34,3376 00003 2
028159,000276: 34,3377 01616 C2MP
028160,000277: 34,3400 41325 PDDL DMP # PD6 U2 C2(1)
028161,000278: 34,3401 00001 0
028162,000279: 34,3402 01622 C1MP # PUSH UP U2 C2(1)
028163,000280: 34,3403 51415 DAD ABS # ABS(U1 C1(1) + U2 C2(1))
028164,000281: 34,3404 77625 DSU # PUSH UP 4
028165,000282: 34,3405 74040 BMN AXC,1
028166,000283: 34,3406 71410 JZERO
028167,000284: 34,3407 00002 2
028168,000285: 34,3410 74343 JZERO DLOAD* VXSC
028169,000286: 34,3411 01620 C1PP,1
028170,000287: 34,3412 01560 E1
028171,000288: 34,3413 74323 PDDL* VXSC
028172,000289: 34,3414 01614 C2PP,1
028173,000290: 34,3415 01566 E2
028174,000291: 34,3416 77655 VAD
028175,000292: 34,3417 77656 UNIT # NEW COF - -
028176,000293: 34,3420 01624 STORE COF # COF = C1 E1 + C2 E2
028177,000294: # NEW MANEUVER ANGLE IS
028178,000295: 34,3421 63545 DLOAD DSQ
028179,000296: 34,3422 01624 COF
028180,000297: 34,3423 44352 SL1 BDSU # 2
028181,000298: 34,3424 30414 HALFA # (1 - COF ) $2
028182,000299: 34,3425 63525 PDDL DSQ # 0
028183,000300: 34,3426 01566 E2
028184,000301: 34,3427 56221 BDSU DDV # 2
028185,000302: 34,3430 30426 QUARTA # (1 - K5 ) $4
028186,000303: 34,3431 75542 SR1 SQRT
028187,000304: 34,3432 72536 ARCSIN SL1
028188,000305: 34,3433 01643 STORE AM
028189,000306: 34,3434 77614 CLRGO # STATE SWITCH NO. 31
028190,000307: 34,3435 01221 31D # 0(OFF) = MANEUVER WENT THRU GIMBAL LOCK
028191,000308: 34,3436 71441 WCALC # 1(ON) = MANEUVER DID NOT GO THRU GIMLOCK
028192,000309: 34,3437 77614 NOGIMLOC SET
028193,000310: 34,3440 01061 31D
028194,000311: 34,3441 70740 WCALC LXC,1 DLOAD*
028195,000312: 34,3442 01652 RATEINDX # CHOOSE THE DESIRED MANEUVER RATE
028196,000313: 34,3443 31465 ARATE,1 # FROM A LIST OF FOUR
028197,000314: 34,3444 45002 SR4 CALL # COMPUTE THE INCREMENTAL ROTATION MATRIX
028198,000315: 34,3445 70564 DELCOMP # DEL CORRESPONDING TO A 1 SEC ROTATION
028199,000316: # ABOUT COF
028200,000317: 34,3446 74343 DLOAD* VXSC
028201,000318: 34,3447 31465 ARATE,1
028202,000319: 34,3450 01624 COF
028203,000320: 34,3451 15635 STODL BRATE # COMPONENT MANEUVER RATES 45 DEG/SEC
028204,000321: 34,3452 01643 AM
028205,000322: 34,3453 55605 DMP DDV*
028206,000323: 34,3454 31475 ANGLTIME
![]() |
Page 667 |
028208,000325: 34,3455 31465 ARATE,1
028209,000326: 34,3456 77661 SR
028210,000327: 34,3457 20606 5
028211,000328: 34,3460 01645 STORE TM # MANEUVER EXECUTION TIME SCALED AS T2
028212,000329: 34,3461 77614 SETGO # STATE SWITCH NO. 32
028213,000330: 34,3462 01022 32D # 0(OFF) = CONTINUE MANEUVER
028214,000331: 34,3463 71477 NEWDELHI +1 # 1(ON) = START MANEUVER
028215,000332:
028216,000333:
028217,000334: # THE FOUR SELECTABLE FREE FALL MANEUVER RATES SELECTED BY
028218,000335: # LOADING RATEINDX WITH 0,2,4,6, RESPECTIVELY
028219,000336:
028220,000337:
028221,000338: 34,3464 00554 02660 ARATE 2DEC .0222222222 # =.5 DEG/SEC $ 22.5DEG/SEC
028222,000339:
028223,000340: 34,3466 02660 13301 2DEC .0888888888 # = 2 DEG/SEC $ 22.5DEG/SEC
028224,000341:
028225,000342: 34,3470 07070 34344 2DEC .2222222222 # = 5 DEG/SEC $ 22.5DEG/SEC
028226,000343:
028227,000344: 34,3472 16161 30707 2DEC .4444444444 # =10 DEG/SEC $ 22.5DEG/SEC
028228,000345:
028229,000346: 34,3474 00003 04000 ANGLTIME 2DEC .0001907349 # = 100B-19 FUDGE FACTOR TO CONVERT
028230,000347: # MANEUVER ANGLE TO MANEUVER TIME
End of include-file GIMBAL_LOCK_AVOIDANCE.agc. Parent file is MAIN.agc