Source Code
![]() |
These source-code files were transcribed from a printout in Don Eyles's personal
collection, scanned by archive.org, and financially sponsored by Peter McDermott.
A team of volunteers performed the transcription and proof-reading. The scanned
page images are available at
the Virtual AGC Project website, as well as higher-quality (but much larger)
images at
the Virtual AGC Project's collection in the Internet Archive. Report any problems by creating
"issues" at
the Virtual AGC Project's GitHub Repository. Notations on the program listing read, in part: YUL SYSTEM FOR AGC: NEW PROGRAM SHEPATIN BY EYLES DEC 13, 1966 THIS PROGRAM WAS ASSEMBLED AS A VERSION OF REVISION 37 OF PROGRAM SUNBURST BY LEM GROUPNote that the date is the date of the printout, not the date of the program revision. |
027664,000002: ## Copyright: Public domain.
027665,000003: ## Filename: GIMBAL_LOCK_AVOIDANCE.agc
027666,000004: ## Purpose: A section of Sunburst revision 37, or Shepatin revision 0.
027667,000005: ## It is part of an early development version of the software
027668,000006: ## for Apollo Guidance Computer (AGC) on the unmanned Lunar
027669,000007: ## Module (LM) flight Apollo 5. Sunburst 37 was the program
027670,000008: ## upon which Don Eyles's offline development program Shepatin
027671,000009: ## was based; the listing herein transcribed was actually for
027672,000010: ## the equivalent revision 0 of Shepatin.
027673,000011: ## This file is intended to be a faithful transcription, except
027674,000012: ## that the code format has been changed to conform to the
027675,000013: ## requirements of the yaYUL assembler rather than the
027676,000014: ## original YUL assembler.
027677,000015: ## Reference: pp. 620-626
027678,000016: ## Assembler: yaYUL
027679,000017: ## Contact: Ron Burkey <info@sandroid.org>.
027680,000018: ## Website: www.ibiblio.org/apollo/index.html
027681,000019: ## Mod history: 2017-05-24 MAS Created from Sunburst 120.
027682,000020: ## 2017-06-13 RSB Transcribed.
027683,000021: ## 2017-06-22 RSB Proofed comment text with
027684,000022: ## octopus/ProoferComments.
027685,000023:
![]() |
Page 620 |
027687,000025: # DETECTING GIMBAL LOCK
027688,000026: 34,3024 51545 LOCSKIRT DLOAD ABS
027689,000027: 34,3025 01624 COF
027690,000028: 34,3026 51025 DSU BPL # IF (ABS(COF )-CNGL) POS, GO TO NOGIMLOC
027691,000029: 34,3027 30442 CNGL # 0
027692,000030: 34,3030 71455 NOGIMLOC
027693,000031: 34,3031 41345 DLOAD DMP
027694,000032: 34,3032 01624 COF
027695,000033: 34,3033 01630 COF +4
027696,000034: 34,3034 65352 SL1 PDDL
027697,000035: 34,3035 01624 COF
027698,000036:
027699,000037: 34,3036 72405 DMP SL1
027700,000038: 34,3037 01626 COF +2
027701,000039: 34,3040 63525 PDDL DSQ
027702,000040: 34,3041 01624 COF
027703,000041: 34,3042 55552 SL1 VDEF # 2
027704,000042: 34,3043 01602 STORE K1 # V1 = (COF , COF COF , COF COF ) $2
027705,000043: 34,3044 53276 VCOMP VAD # 0 0 1 0 2
027706,000044: 34,3045 30414 HALFA # -
027707,000045: 34,3046 15610 STODL K2 # V2 = ((1-V1 ), -V1 , -V1 ) $2
027708,000046: 34,3047 01626 COF +2 # 0 1 2
027709,000047: 34,3050 65276 DCOMP PDDL
027710,000048: 34,3051 01630 COF +4
027711,000049:
027712,000050: 34,3052 55525 PDDL VDEF # -
027713,000051: 34,3053 30416 NIL # V3 = (0, COF , -COF )
027714,000052: 34,3054 25616 STOVL K3 # 2 1
027715,000053: 34,3055 01544 MIS +6 # - -
027716,000054: 34,3056 01635 STORE IG # IG = MIS $2
027717,000055: 34,3057 76521 MXV VSL1 # 3
027718,000056: 34,3060 01602 K1 # - - - -
027719,000057: 34,3061 15602 STODL P21 # (P21, D21, G21) = (V1, V2, V3) IG $2
027720,000058: 34,3062 01606 G21
027721,000059: 34,3063 65316 DSQ PDDL
027722,000060: 34,3064 01604 D21
027723,000061: 34,3065 43316 DSQ DAD
027724,000062: 34,3066 77766 SQRT # 2 2
027725,000063: 34,3067 01647 STORE RAD # RAD = SQRT(D21 D21 + G21 G21)
027726,000064: 34,3070 50025 DSU BMN
027727,000065: 34,3071 30440 SNGLCD # IF (RAD-SNGLCD) NEG, GO TO NOGIMLOC
027728,000066: 34,3072 71455 NOGIMLOC
027729,000067: 34,3073 51145 DLOAD BPL
027730,000068: 34,3074 01606 G21
027731,000069: 34,3075 71104 OKG21
027732,000070: 34,3076 57575 VLOAD VCOMP # IF G21 IS NEG ...
027733,000071: 34,3077 01635 IG # - -
027734,000072: 34,3100 15635 STODL IG # IG =-IG, RAD =-RAD
027735,000073: 34,3101 01647 RAD
027736,000074: 34,3102 77676 DCOMP
027737,000075: 34,3103 01647 STORE RAD
027738,000076:
![]() |
Page 621 |
027740,000078: 34,3104 43345 OKG21 DLOAD DAD # IF G21 IS POS....
027741,000079: 34,3105 01602 P21
027742,000080: 34,3106 01647 RAD # IF (ABS(P21+RAD)-SD) NEG, GO NOGIMLOC
027743,000081: 34,3107 51400 BOV ABS
027744,000082: 34,3110 71114 CBMCALC
027745,000083: 34,3111 50025 DSU BMN # CBM = D21/RAD $2
027746,000084: 34,3112 30430 SD
027747,000085: 34,3113 71455 NOGIMLOC
027748,000086:
027749,000087: 34,3114 70545 CBMCALC DLOAD SR1
027750,000088: 34,3115 01604 D21
027751,000089: 34,3116 44271 DDV BDSU
027752,000090: 34,3117 01647 RAD
027753,000091: 34,3120 01645 CAM
027754,000092: 34,3121 71244 BPL DLOAD
027755,000093: 34,3122 71455 NOGIMLOC
027756,000094: 34,3123 01574 MFI +12D
027757,000095: 34,3124 65325 PDDL PDDL
027758,000096: 34,3125 01566 MFI +6
027759,000097: 34,3126 01560 MFI # -
027760,000098: 34,3127 76466 VDEF VSL1 # OGF = (MFI , MFI , MFI ) $2
027761,000099: 34,3130 15616 STODL OGF # 0 3 6
027762,000100: 34,3131 01616 OGF
027763,000101: 34,3132 50015 DAD BMN
027764,000102: 34,3133 30442 CNGL # IF ((OGF ) + CNGL) NEG, GO TO ALTE
027765,000103: 34,3134 71152 ALTE # 0
027766,000104: 34,3135 47375 VLOAD VXV
027767,000105: 34,3136 30414 HALFA
027768,000106: 34,3137 01616 OGF
027769,000107: 34,3140 77656 UNIT
027770,000108: 34,3141 25560 STOVL E1 # E1 = UNIT(OGI X OGF)
027771,000109: 34,3142 01616 OGF
027772,000110:
027773,000111: 34,3143 53455 VAD UNIT
027774,000112: 34,3144 30414 HALFA
027775,000113: 34,3145 77650 GOTO
027776,000114: 34,3146 71166 STORE2 # E2 = UNIT(OGI X OGF)
027777,000115: 34,3147 52175 SETE1 VLOAD GOTO
027778,000116: 34,3150 30420 NIL +2
027779,000117: 34,3151 71157 STOREE1 # E1 = (0,0,1)
027780,000118: 34,3152 47375 ALTE VLOAD VXV
027781,000119: 34,3153 30414 HALFA
027782,000120: 34,3154 01616 OGF
027783,000121: 34,3155 40056 UNIT BOV
027784,000122: 34,3156 71147 SETE1
027785,000123: 34,3157 01560 STOREE1 STORE E1
027786,000124: 34,3160 77635 VXV
027787,000125: 34,3161 30414 HALFA
027788,000126: 34,3162 47315 PDVL VXV
027789,000127: 34,3163 01616 OGF
027790,000128: 34,3164 01560 E1
027791,000129: 34,3165 53455 VAD UNIT # E2 = UNIT(E1 X OGI + OGF X E1)
027792,000130:
![]() |
Page 622 |
027794,000132: 34,3166 77626 STORE2 STADR # - - -
027795,000133: 34,3167 76211 STORE E2 # E2 = UNIT(OGI + OGF) $2
027796,000134: 34,3170 50201 SETPD DOT
027797,000135: 34,3171 00001 0
027798,000136: 34,3172 01635 IG # - -
027799,000137: 34,3173 41552 SL1 PUSH # PD0 K2 $2
027800,000138: 34,3174 72516 DSQ SL1
027801,000139: 34,3175 50315 PDVL DOT # PD2 (K2 K2) $2
027802,000140: 34,3176 01560 E1
027803,000141: 34,3177 01635 IG
027804,000142: 34,3200 41552 SL1 PUSH # PD4 K1 $2
027805,000143: 34,3201 72516 DSQ SL1
027806,000144: 34,3202 45325 PDDL DSU # PD6 (K1 K1) $2
027807,000145: 34,3203 30436 K4SQ # = COS(D)COS(D) $2
027808,000146:
027809,000147: 34,3204 00007 6
027810,000148: 34,3205 63406 PUSH DSQ # PD8 D1 $2
027811,000149: 34,3206 41325 PDDL DMP # PD10 (D1 D1) $4
027812,000150: 34,3207 01566 E2 # (K5)
027813,000151: 34,3210 30432 K3S1 # SIN(D) $1
027814,000152: 34,3211 62405 DMP SL2
027815,000153: 34,3212 00001 0 # K2
027816,000154: 34,3213 63525 PDDL DSQ # PD12 2 K2 K3 K5 $2
027817,000155: 34,3214 01566 E2
027818,000156: 34,3215 44352 SL1 BDSU # K5K5 $2 PUSH UP 2 K2 K3 K5 $2
027819,000157: 34,3216 43225 DSU DAD
027820,000158: 34,3217 00003 2
027821,000159: 34,3220 00007 6
027822,000160: 34,3221 63406 PUSH DSQ # PD12 D2 $2
027823,000161: 34,3222 41325 PDDL DMP # PD14 (D2 D2) $4
027824,000162: 34,3223 01566 E2
027825,000163: 34,3224 30432 K3S1
027826,000164: 34,3225 41421 BDSU PUSH
027827,000165: 34,3226 00001 0 # PD16 B1 $2
027828,000166: 34,3227 77605 DMP
027829,000167: 34,3230 00005 4 # B1 K1 $4
027830,000168: 34,3231 41552 SL1 PUSH # PD18 B1 K1 $2
027831,000169: 34,3232 65316 DSQ PDDL # PD22 B1 B1 K1 K1 $4
027832,000170:
027833,000171: 34,3233 00011 8D
027834,000172: 34,3234 41405 DMP PUSH # PD22 D1 D2 $4
027835,000173: 34,3235 00015 12D
027836,000174: 34,3236 45221 BDSU DSU
027837,000175: 34,3237 00025 20D
027838,000176: 34,3240 00013 10D # RSQ $4
027839,000177: 34,3241 41366 SQRT DMP
027840,000178: 34,3242 00023 18D
027841,000179: 34,3243 70525 PDDL SR1 # PD24 RADICAL $8
027842,000180: 34,3244 00017 14D
027843,000181: 34,3245 72525 PDDL SL1 # PD26 (D2 D2) $8
027844,000182: 34,3246 00025 20D # 4(B1 B1 K1 K1) $8
027845,000183: 34,3247 77615 DAD # PUSH UP FOR (D2 D2) $8
![]() |
Page 623 |
027847,000185: 34,3250 70525 PDDL SR1 # PD26 DENOMR (D2 D2)
027848,000186: 34,3251 00027 22D
027849,000187: 34,3252 41421 BDSU PUSH # PD28 NUM
027850,000188: 34,3253 00025 20D
027851,000189: 34,3254 56215 DAD DDV # NUM
027852,000190: 34,3255 00031 24D # + RADICAL
027853,000191: 34,3256 00033 26D # DENOM
027854,000192: 34,3257 60404 BOVB SR2
027855,000193: 34,3260 70445 SIGNMPAC
027856,000194: 34,3261 01610 STORE C2SQP # $4
027857,000195: 34,3262 77766 SQRT
027858,000196: 34,3263 15614 STODL C2PP # $2
027859,000197: 34,3264 00031 24D # NUM
027860,000198: 34,3265 56221 BDSU DDV # PUSH UP FOR NUM, DENOM
027861,000199: 34,3266 60404 BOVB SR2
027862,000200: 34,3267 70445 SIGNMPAC
027863,000201: 34,3270 01612 STORE C2SQM # $4
027864,000202: 34,3271 77766 SQRT
027865,000203: 34,3272 15616 STODL C2MP # $2
027866,000204:
027867,000205: 34,3273 30426 QUARTA # 1 $4
027868,000206: 34,3274 75425 DSU SQRT
027869,000207: 34,3275 01610 C2SQP
027870,000208: 34,3276 15620 STODL C1PP # $2
027871,000209: 34,3277 30426 QUARTA
027872,000210: 34,3300 75425 DSU SQRT
027873,000211: 34,3301 01612 C2SQM
027874,000212: 34,3302 01622 STORE C1MP # $2
027875,000213: 34,3303 66370 AXT,1 SSP
027876,000214: 34,3304 00004 4
027877,000215: 34,3305 00051 S1
027878,000216: 34,3306 00002 2
027879,000217: 34,3307 71201 NORM SETPD DLOAD
027880,000218: 34,3310 00023 18D
027881,000219: 34,3311 00021 16D # B1 $2
027882,000220: 34,3312 65203 DMP* PDDL # PD18 = -Q $4
027883,000221: 34,3313 01620 C2PP +4,1
027884,000222: 34,3314 01566 E2
027885,000223: 34,3315 40716 DSQ DMP*
027886,000224: 34,3316 01614 C2SQP +4,1
027887,000225: 34,3317 44312 SL2 BDSU
027888,000226: 34,3320 30426 QUARTA
027889,000227: 34,3321 41366 SQRT DMP
027890,000228:
027891,000229: 34,3322 30434 K4 # PD20 = -R $4
027892,000230: 34,3323 40725 PDDL DMP*
027893,000231: 34,3324 00005 4 # K1 $2
027894,000232: 34,3325 01624 C1PP +4,1
027895,000233: 34,3326 65246 ABS PDDL # PD22 AC1 $4
027896,000234: 34,3327 00023 18D # -Q
027897,000235: 34,3330 57415 DAD DCOMP
027898,000236: 34,3331 00025 20D # -R
![]() |
Page 624 |
027900,000238: 34,3332 45325 PDDL DSU # PD24 ANSW1 = Q + R $4
027901,000239: 34,3333 00023 18D # -Q
027902,000240:
027903,000241: 34,3334 00025 20D # +R
027904,000242: 34,3335 41476 DCOMP PUSH # PD26 ANSW2 = Q - R $4
027905,000243: 34,3336 45246 ABS DSU
027906,000244: 34,3337 00027 22D # AC1
027907,000245: 34,3340 65246 ABS PDDL # PD28 ABS(ABS(ANSW2) -AC1)
027908,000246: 34,3341 00031 24D # ANSW1
027909,000247: 34,3342 45246 ABS DSU
027910,000248: 34,3343 00027 22D # AC1
027911,000249: 34,3344 45246 ABS DSU # ABS(ABS(ANSW1)-AC1)
027912,000250: 34,3345 71244 BPL DLOAD
027913,000251: 34,3346 71371 CKSGNAN2
027914,000252: 34,3347 00031 24D # ANSW1
027915,000253: 34,3350 71244 SIGNANSW BPL DLOAD
027916,000254: 34,3351 71363 SAMEASK1
027917,000255: 34,3352 00005 4 # K1
027918,000256: 34,3353 70640 BMN DLOAD*
027919,000257: 34,3354 71360 OKC2
027920,000258: 34,3355 01620 C2PP +4,1
027921,000259: 34,3356 77676 OPPSGNC2 DCOMP
027922,000260: 34,3357 05620 STORE C2PP +4,1
027923,000261: 34,3360 52100 OKC2 TIX,1 GOTO
027924,000262: 34,3361 71307 NORM
027925,000263: 34,3362 71374 OUTCYCLE
027926,000264: 34,3363 51145 SAMEASK1 DLOAD BPL
027927,000265: 34,3364 00005 4 # K1
027928,000266: 34,3365 71360 OKC2
027929,000267: 34,3366 52143 DLOAD* GOTO
027930,000268: 34,3367 01620 C2PP +4,1
027931,000269: 34,3370 71356 OPPSGNC2
027932,000270: 34,3371 52145 CKSGNAN2 DLOAD GOTO
027933,000271: 34,3372 00033 26D # ANSW2
027934,000272: 34,3373 71350 SIGNANSW
027935,000273: 34,3374 77201 OUTCYCLE SETPD VLOAD
027936,000274: 34,3375 00001 0
027937,000275: 34,3376 01624 COF # - -
027938,000276: 34,3377 63241 DOT PDVL # PD0 U1 = COF.E1
027939,000277: 34,3400 01560 E1
027940,000278: 34,3401 01624 COF # - -
027941,000279: 34,3402 41441 DOT PUSH # PD2 U2 = COF.E2
027942,000280: 34,3403 01566 E2
027943,000281: # PICK THE NEW U WHICH IS CLOSEST TO THE OLD U
027944,000282: 34,3404 41370 AXT,1 DMP
027945,000283: 34,3405 00000 0
027946,000284: 34,3406 01614 C2PP
027947,000285: 34,3407 41325 PDDL DMP # PD4 U2 C2(0)
027948,000286: 34,3410 01620 C1PP
027949,000287: 34,3411 00001 0 # U1 C1(0)
027950,000288:
027951,000289: 34,3412 51415 DAD ABS
![]() |
Page 625 |
027953,000291: 34,3413 41325 PDDL DMP # PD4 ABS(U1 C1(0) + U2 C2(0))
027954,000292: 34,3414 00003 2
027955,000293: 34,3415 01616 C2MP
027956,000294: 34,3416 41325 PDDL DMP # PD6 U2 C2(1)
027957,000295: 34,3417 00001 0
027958,000296: 34,3420 01622 C1MP # PUSH UP U2 C2(1)
027959,000297: 34,3421 51415 DAD ABS # ABS(U1 C1(1) + U2 C2(1))
027960,000298: 34,3422 77625 DSU # PUSH UP 4
027961,000299:
027962,000300: 34,3423 74040 BMN AXC,1
027963,000301: 34,3424 71426 JZERO
027964,000302: 34,3425 00002 2
027965,000303: 34,3426 74343 JZERO DLOAD* VXSC
027966,000304: 34,3427 01620 C1PP,1
027967,000305: 34,3430 01560 E1
027968,000306: 34,3431 74323 PDDL* VXSC
027969,000307: 34,3432 01614 C2PP,1
027970,000308: 34,3433 01566 E2
027971,000309: 34,3434 77655 VAD
027972,000310: 34,3435 77656 UNIT # NEW COF - -
027973,000311: 34,3436 01624 STORE COF # COF = C1 E1 + C2 E2
027974,000312: # NEW MANEUVER ANGLE IS
027975,000313: 34,3437 63545 DLOAD DSQ
027976,000314: 34,3440 01624 COF
027977,000315: 34,3441 44352 SL1 BDSU # 2
027978,000316: 34,3442 30414 HALFA # (1 - COF ) $2
027979,000317: 34,3443 63525 PDDL DSQ # 0
027980,000318: 34,3444 01566 E2
027981,000319: 34,3445 56221 BDSU DDV # 2
027982,000320: 34,3446 30426 QUARTA # (1 - K5 ) $4
027983,000321: 34,3447 75542 SR1 SQRT
027984,000322: 34,3450 72536 ARCSIN SL1
027985,000323:
027986,000324: 34,3451 01643 STORE AM
027987,000325: 34,3452 77614 CLRGO # STATE SWITCH NO. 31
027988,000326: 34,3453 01221 31D # 0(OFF) = MANEUVER WENT THRU GIMBAL LOCK
027989,000327: 34,3454 71457 WCALC # 1(ON) = MANEUVER DID NOT GO THRU GIMLOCK
027990,000328: 34,3455 77614 NOGIMLOC SET
027991,000329: 34,3456 01061 31D
027992,000330: 34,3457 70740 WCALC LXC,1 DLOAD*
027993,000331: 34,3460 01652 RATEINDX # CHOOSE THE DESIRED MANEUVER RATE
027994,000332: 34,3461 31503 ARATE,1 # FROM A LIST OF FOUR
027995,000333: 34,3462 45002 SR4 CALL # COMPUTE THE INCREMENTAL ROTATION MATRIX
027996,000334: 34,3463 70603 DELCOMP # DEL CORRESPONDING TO A 1 SEC ROTATION
027997,000335: # ABOUT COF
027998,000336: 34,3464 74343 DLOAD* VXSC
027999,000337: 34,3465 31503 ARATE,1
028000,000338: 34,3466 01624 COF
028001,000339: 34,3467 15635 STODL BRATE # COMPONENT MANEUVER RATES 45 DEG/SEC
028002,000340: 34,3470 01643 AM
028003,000341: 34,3471 55605 DMP DDV*
028004,000342: 34,3472 31513 ANGLTIME
![]() |
Page 626 |
028006,000344: 34,3473 31503 ARATE,1
028007,000345: 34,3474 77661 SR
028008,000346: 34,3475 20606 5
028009,000347: 34,3476 01645 STORE TM # MANEUVER EXECUTION TIME SCALED AS T2
028010,000348: 34,3477 77614 SETGO # STATE SWITCH NO. 32
028011,000349: 34,3500 01022 32D # 0(OFF) = CONTINUE MANEUVER
028012,000350: 34,3501 71515 NEWDELHI +1 # 1(ON) = START MANEUVER
028013,000351:
028014,000352:
028015,000353: # THE FOUR SELECTABLE FREE FALL MANEUVER RATES SELECTED BY
028016,000354: # LOADING RATEINDX WITH 0,2,4,6, RESPECTIVELY
028017,000355:
028018,000356:
028019,000357: 34,3502 00554 02660 ARATE 2DEC .0222222222 # =.5 DEG/SEC $ 22.5DEG/SEC
028020,000358:
028021,000359: 34,3504 02660 13301 2DEC .0888888888 # = 2 DEG/SEC $ 22.5DEG/SEC
028022,000360:
028023,000361: 34,3506 07070 34344 2DEC .2222222222 # = 5 DEG/SEC $ 22.5DEG/SEC
028024,000362:
028025,000363: 34,3510 16161 30707 2DEC .4444444444 # =10 DEG/SEC $ 22.5DEG/SEC
028026,000364:
028027,000365: 34,3512 00003 04000 ANGLTIME 2DEC .0001907349 # = 100B-19 FUDGE FACTOR TO CONVERT
028028,000366: # 34,3513 04000 0 MANEUVER ANGLE TO MANEUVER TIME
End of include-file GIMBAL_LOCK_AVOIDANCE.agc. Parent file is MAIN.agc