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