Source Code
![]() |
These source-code files were transcribed from scans made from Don Eyles's personal
copy of Luminary 069. They were scanned at archive.org's Boston
facility, and the scanning was sponsored by Onno Hommes. 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 prefixed with a single '#' symbol,
whereas comments added later are prefixed by "##" or "###". 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 Luminary 69 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:GAP: ASSEMBLE REVISION 069 OF AGC PROGRAM LUMINARY BY NASA 2021112-011 19:02 NOV. 25,1968Note that the date is the date of the printout, not the date of the program revision. |
063929,000002: ## Copyright: Public domain.
063930,000003: ## Filename: TRIM_GIMBAL_CONTROL_SYSTEM.agc
063931,000004: ## Purpose: The main source file for Luminary revision 069.
063932,000005: ## It is part of the source code for the original release
063933,000006: ## of the flight software for the Lunar Module's (LM) Apollo
063934,000007: ## Guidance Computer (AGC) for Apollo 10. The actual flown
063935,000008: ## version was Luminary 69 revision 2, which included a
063936,000009: ## newer lunar gravity model and only affected module 2.
063937,000010: ## This file is intended to be a faithful transcription, except
063938,000011: ## that the code format has been changed to conform to the
063939,000012: ## requirements of the yaYUL assembler rather than the
063940,000013: ## original YUL assembler.
063941,000014: ## Reference: pp. 1467-1478
063942,000015: ## Assembler: yaYUL
063943,000016: ## Contact: Ron Burkey <info@sandroid.org>.
063944,000017: ## Website: www.ibiblio.org/apollo/index.html
063945,000018: ## Mod history: 2016-12-13 MAS Created from Luminary 99.
063946,000019: ## 2016-12-18 MAS Updated from comment-proofed Luminary 99 version.
063947,000020: ## 2016-12-29 RRB Updated for Luminary 69.
063948,000021: ## 2017-01-21 HG Fix operand BIT 12 -> BIT12
063949,000022: ## NEGSUM -> NEGUSUM
063950,000023: ## 2017-01-23 Fix operator TC -> TCF
063951,000024: ## 2017-01-28 RSB Proofed comment text using octopus/prooferComments
063952,000025: ## and fixed errors found.
063953,000026:
![]() |
Page 1467 |
063955,000028: 21,3263 BANK 21
063956,000029: 21,3263 E6,1446 EBANK= QDIFF
063957,000030: 21,2000 SETLOC DAPS4
063958,000031: 21,2000 BANK
063959,000032:
063960,000033: 21,3263 COUNT* $$/DAPGT
063961,000034:
063962,000035: # CONTROL REACHES THIS POINT UNDER EITHER OF THE FOLLOWING TWO CONDITIONS ONCE THE DESCENT ENGINE AND THE DIGITAL
063963,000036: # AUTOPILOT ARE BOTH ON:
063964,000037: # A) THE TRIM GIMBAL CONTROL LAW WAS ON DURING THE PREVIOUS Q,R-AXIS TIME5 INTERRUPT (OR THE DAPIDLER
063965,000038: # INITIALIZATION WAS SET FOR TRIM GIMBAL CONTROL AND THIS IS THE FIRST PASS), OR
063966,000039: # B) THE Q,R-AXES RCS AUTOPILOT DETERMINED THAT THE VEHICLE WAS ENTERING (OR HAD JUST ENTERED) A COAST
063967,000040: # ZONE WITH A SMALL OFFSET ANGULAR ACCELERATION.
063968,000041: # GTS IS THE ENTRY TO THE GIMBAL TRIM SYSTEM FOR CONTROLLING ATTITUDE ERRORS AND RATES AS WELL AS ACCELERATIONS.
063969,000042:
063970,000043: 21,3263 37746 GTS CAF NEGONE # MAKE THE NEXT PASS THROUGH THE DAP BE
063971,000044: 21,3264 55627 TS COTROLER # THROUGH RCS CONTROL,
063972,000045: 21,3265 34751 CAF FOUR # AND ENSURE THAT IT IS NOT A SKIP.
063973,000046: 21,3266 55535 TS SKIPU
063974,000047: 21,3267 55536 TS SKIPV
063975,000048:
063976,000049: 21,3270 34752 CAF TWO
063977,000050: 21,3271 55631 TS INGTS # SET INDICATOR OF GTS CONTROL POSITIVE.
063978,000051: 21,3272 55630 TS QGIMTIMR # SET TIMERS TO 200 MSEC TO AVOID BOTH
063979,000052: 21,3273 55632 TS RGIMTIMR # RUNAWAY AND INTERFERENCE BY NULLING.
063980,000053:
063981,000054: # THE DRIVE SETTING ALGORITHM
063982,000055:
063983,000056: # DEL = SGN(OMEGA*K + ALPHA*ABS(ALPHA)/2).
063984,000057:
063985,000058: # NEGUSUM = ERROR.K(2) + DEL(OMEGA.K.DEL + ALPHA(2)/2)(3/2) + ALPHA(OMEGA.K.DEL + ALPHA(2)/3)
063986,000059:
063987,000060: # DRIVE = -SGN(NEGUSUM)
063988,000061:
063989,000062: 21,3274 30021 CA SR # SAVE THE SR. SHIFT IT LEFT TO CORRECT
063990,000063: 21,3275 60000 AD A # FOR THE RIGHT SHIFT DUE TO EDITING.
063991,000064: 21,3276 55476 TS SAVESR
063992,000065:
063993,000066: 21,3277 34752 GTSGO+DN CAF TWO # SET INDEXER FOR R-AXIS CALCULATIONS.
063994,000067: 21,3300 55746 TS QRCNTR
063995,000068: 21,3301 31541 CA AOSR
063996,000069: 21,3302 00006 EXTEND
063997,000070: 21,3303 74751 MP BIT3
063998,000071: 21,3304 31435 CA EDOTR
063999,000072: 21,3305 13314 TCF GTSQAXIS
064000,000073:
064001,000074: 21,3306 34755 GOQTRIMG CAF ZERO # SET INDEXER FOR Q-AXIS CALCULATIONS
064002,000075: 21,3307 55746 TS QRCNTR
![]() |
Page 1468 |
064004,000077: 21,3310 31537 CA AOSQ
064005,000078: 21,3311 00006 EXTEND
064006,000079: 21,3312 74751 MP BIT3
064007,000080: 21,3313 31434 CA EDOTQ
064008,000081: 21,3314 53744 GTSQAXIS DXCH WCENTRAL
064009,000082: 21,3315 00006 EXTEND
064010,000083: 21,3316 51746 INDEX QRCNTR # PICK UP K AND K(2) FOR THIS AXIS
064011,000084: 21,3317 31504 DCA KQ
064012,000085: 21,3320 53742 DXCH KCENTRAL
064013,000086:
064014,000087: 21,3321 51746 INDEX QRCNTR # QDIFF, RDIFF ARE STORED IN D.P.
064015,000088: 21,3322 31446 CAE QDIFF
064016,000089:
064017,000090: 21,3323 00006 ALGORTHM EXTEND # Q(R)DIFF IS THETA (ERROR) SCALED AT PI.
064018,000091: 21,3324 71742 MP K2CNTRAL # FORM K(2)*THETA IN D.P.
064019,000092: 21,3325 23735 LXCH K2THETA
064020,000093: 21,3326 00006 EXTEND # FORM K(2)*THETA*SF2 IN D.P.
064021,000094: 21,3327 74743 MP BIT9
064022,000095: 21,3330 53736 DXCH K2THETA
064023,000096: 21,3331 00006 EXTEND
064024,000097: 21,3332 74743 MP BIT9
064025,000098: 21,3333 27736 ADS K2THETA +1
064026,000099:
064027,000100: 21,3334 31743 CAE WCENTRAL # GET OMEGA
064028,000101: 21,3335 00006 EXTEND
064029,000102: 21,3336 71741 MP KCENTRAL # FORM K*OMEGA IN D.P.
064030,000103: 21,3337 23741 LXCH OMEGA.K
064031,000104: 21,3340 00006 EXTEND # FORM OMEGA*K*SF1 IN D.P.
064032,000105: 21,3341 74740 MP BIT12
064033,000106: 21,3342 53742 DXCH OMEGA.K
064034,000107: 21,3343 00006 EXTEND
064035,000108: 21,3344 74740 MP BIT12
064036,000109: 21,3345 27742 ADS OMEGA.K +1
064037,000110:
064038,000111: 21,3346 31744 CAE ACENTRAL # FORM ALPHA(2)/2 IN D.P.
064039,000112: 21,3347 00006 EXTEND
064040,000113: 21,3350 70000 SQUARE
064041,000114: 21,3351 53740 DXCH A2CNTRAL
064042,000115:
064043,000116: 21,3352 31744 CAE ACENTRAL # GET ALPHA*ABS(ALPHA)/2, IF ALPHA GREATER
064044,000117: # THAN 0. OTHERWISE TAKE NEGATIVE OF ABOVE
064045,000118: 21,3353 00006 EXTEND
064046,000119: 21,3354 63360 BZMF +4
064047,000120: 21,3355 00006 EXTEND
064048,000121: 21,3356 31740 DCA A2CNTRAL
064049,000122: 21,3357 13362 TCF +3
064050,000123: 21,3360 00006 EXTEND
064051,000124: 21,3361 41740 DCS A2CNTRAL
064052,000125: 21,3362 53750 DXCH FUNCTION # SAVE AS SGN(ALPHA)*ALPHA(2)/2
![]() |
Page 1469 |
064054,000127: 21,3363 00006 EXTEND
064055,000128: 21,3364 31742 DCA OMEGA.K
064056,000129: 21,3365 21750 DAS FUNCTION # FORM FUNCT1
064057,000130:
064058,000131: 21,3366 11747 CCS FUNCTION # DEL = +1 FOR FUNCT1 GREATER THAN ZERO.
064059,000132: 21,3367 13373 TCF POSFNCT1 # OTHERWISE DEL = -1
064060,000133: 21,3370 13372 TCF +2
064061,000134: 21,3371 13375 TCF NEGFNCT1
064062,000135:
064063,000136: 21,3372 11750 CCS FUNCTION +1 # USE LOW ORDER WORD SINCE HIGH IS ZERO
064064,000137: 21,3373 34753 POSFNCT1 CAF BIT1
064065,000138: 21,3374 13376 TCF +2
064066,000139: 21,3375 44753 NEGFNCT1 CS BIT1
064067,000140: 21,3376 55745 TS DEL
064068,000141:
064069,000142: 21,3377 11745 CCS DEL # MAKE OMEGA*K REALLY DEL*OMEGA*K
064070,000143: 21,3400 13405 TCF FUNCT2 # (NOTHING NEED BE DONE)
064071,000144: 21,3401 13405 TCF FUNCT2
064072,000145: 21,3402 00006 EXTEND
064073,000146: 21,3403 41742 DCS OMEGA.K
064074,000147: 21,3404 53742 DXCH OMEGA.K # CHANGE SIGN OF OMEGA*K
064075,000148:
064076,000149: 21,3405 00006 FUNCT2 EXTEND
064077,000150: 21,3406 31742 DCA OMEGA.K
064078,000151: 21,3407 53750 DXCH FUNCTION # DEL*OMEGA*K
064079,000152: 21,3410 00006 EXTEND
064080,000153: 21,3411 31740 DCA A2CNTRAL
064081,000154: 21,3412 21750 DAS FUNCTION # DEL*OMEGA*K + ALPHA(2)/2
064082,000155: 21,3413 31737 FUNCT3 CAE A2CNTRAL # CALCULATE (2/3)*ALPHA(2)/2 = ALPHA(2)/3
064083,000156: 21,3414 00006 EXTEND
064084,000157: 21,3415 73446 MP .66667
064085,000158: 21,3416 53740 DXCH A2CNTRAL
064086,000159: 21,3417 56001 XCH L
064087,000160: 21,3420 00006 EXTEND
064088,000161: 21,3421 73446 MP .66667
064089,000162: 21,3422 27740 ADS A2CNTRAL +1
064090,000163: 21,3423 54001 TS L
064091,000164: 21,3424 13426 TCF +2
064092,000165: 21,3425 27737 ADS A2CNTRAL
064093,000166: 21,3426 53742 DXCH OMEGA.K # DEL*OMEGA*K + ALPHA(2)/3 = G
064094,000167: 21,3427 21740 DAS A2CNTRAL
064095,000168: 21,3430 31737 CAE A2CNTRAL # G*ALPHA IN D.P.
064096,000169: 21,3431 00006 EXTEND
064097,000170: 21,3432 71744 MP ACENTRAL
064098,000171: 21,3433 53740 DXCH A2CNTRAL
064099,000172: 21,3434 56001 XCH L
064100,000173: 21,3435 00006 EXTEND
064101,000174: 21,3436 71744 MP ACENTRAL
064102,000175: 21,3437 27740 ADS A2CNTRAL +1
064103,000176: 21,3440 54001 TS L
![]() |
Page 1470 |
064105,000178: 21,3441 13443 TCF +2
064106,000179: 21,3442 27737 ADS A2CNTRAL
064107,000180:
064108,000181: 21,3443 53740 DXCH A2CNTRAL # FIRST AND THIRD TERMS
064109,000182: 21,3444 21736 DAS K2THETA # SUMMED IN D.P.
064110,000183:
064111,000184: 21,3445 13561 TCF RSTOFGTS
064112,000185:
064113,000186: 21,3446 25253 .66667 DEC .66667
064114,000187:
064115,000188: 16,3720 BANK 16
064116,000189: 16,3720 E6,1500 EBANK= NEGUQ
064117,000190: 16,2000 SETLOC DAPS1
064118,000191: 16,2000 BANK
064119,000192:
064120,000193: # THE WRCHN12 SUBROUTINE SETS BITS 9,10,11,12 OF CHANNEL 12 ON THE BASIS OF THE CONTENTS OF NEGUQ,NEGUR WHICH ARE
064121,000194: # THE NEGATIVES OF THE DESIRED ACCELERATION CHANGES. ACDT+C12 SETS Q(R)ACCDOT TO REFLECT THE NEW DRIVES.
064122,000195:
064123,000196: # WARNING: ACDT+C12 AND WRCHN12 MUST BE CALLED WITH INTERRUPT INHIBITED.
064124,000197:
064125,000198: 16,3720 07400 BGIM OCTAL 07400
064126,000199: 16,3721 0066 CHNL12 EQUALS ITEMP6
064127,000200: 16,3721 41500 ACDT+C12 CS NEGUQ
064128,000201: 16,3722 00006 EXTEND # GIMBAL DRIVE REQUESTS.
064129,000202: 16,3723 71507 MP ACCDOTQ
064130,000203: 16,3724 23510 LXCH QACCDOT
064131,000204: 16,3725 41502 CS NEGUR
064132,000205: 16,3726 00006 EXTEND
064133,000206: 16,3727 71511 MP ACCDOTR
064134,000207: 16,3730 23512 LXCH RACCDOT
064135,000208:
064136,000209: 16,3731 11500 CCS NEGUQ
064137,000210: 16,3732 34742 CAF BIT10
064138,000211: 16,3733 13735 TCF +2
064139,000212: 16,3734 34743 CAF BIT9
064140,000213: 16,3735 54066 TS CHNL12
064141,000214:
064142,000215: 16,3736 11502 CCS NEGUR
064143,000216: 16,3737 34740 CAF BIT12
064144,000217: 16,3740 13742 TCF +2
064145,000218: 16,3741 34741 CAF BIT11
064146,000219: 16,3742 26066 ADS CHNL12 # (STORED RESULT NOT USED AT PRESENT)
064147,000220:
064148,000221: 16,3743 43720 CS BGIM
064149,000222: 16,3744 00006 EXTEND
064150,000223: 16,3745 02012 RAND CHAN12
064151,000224: 16,3746 60066 AD CHNL12
064152,000225: 16,3747 00006 EXTEND
064153,000226: 16,3750 01012 WRITE CHAN12
![]() |
Page 1471 |
064155,000228: 16,3751 44747 CS CALLGMBL # TURN OFF REQUEST FOR ACDT+C12 EXECUTION.
064156,000229: 16,3752 71273 MASK RCSFLAGS
064157,000230: 16,3753 55273 TS RCSFLAGS
064158,000231:
064159,000232: 16,3754 00002 TC Q # RETURN TO CALLER.
064160,000233:
064161,000234: 21,3447 BANK 21
064162,000235: 21,3447 E6,1446 EBANK= QDIFF
064163,000236: 21,2000 SETLOC DAPS4
064164,000237: 21,2000 BANK
064165,000238:
![]() |
Page 1472 |
064167,000240: # SUBROUTINE TIMEGMBL: MOD 0, OCTOBER 1967, CRAIG WORK
064168,000241:
064169,000242: # TIMEGMBL COMPUTES THE DRIVE TIME NEEDED FOR THE TRIM GIMBAL TO POSITION THE DESCENT ENGINE NOZZLE SO AS TO NULL
064170,000243: # THE OFFSET ANGULAR ACCELERATION ABOUT THE Q (OR R) AXIS. INSTEAD OF USING AOSQ(R), TIMEGMBL USES .4*AOSQ(R),
064171,000244: # SCALED AT PI/8. FOR EACH AXIS, THE DRIVE TIME IS COMPUTED AS ABS(ALPHA/ACCDOT). A ZERO
064172,000245: # ALPHA OR ACCDOT OR A ZERO QUOTIENT TURNS OFF THE GIMBAL DRIVE IMMEDIATELY. OTHERWISE, THE GIMBAL IS TURNED ON
064173,000246: # DRIVING IN THE CORRECT DIRECTION. THE Q(R)GIMTIMR IS SET TO TERMINATE THE DRIVE AND Q(R)ACCDOT
064174,000247: # IS STORED TO REFLECT THE NEW ACCELERATION DERIVATIVE. NEGUQ(R) WILL CONTAIN +1,+0,-1 FOR A Q(R)ACCDOT VALUE
064175,000248: # WHICH IS NEGATIVE, ZERO, OR POSITIVE.
064176,000249:
064177,000250: # INPUTS: AOSQ,AOSR, SCALED AT P1/2, AND ACCDOTQ, ACCDOTR AT PI/2(7). PI/2(7).
064178,000251:
064179,000252: # OUTPUTS: NEW GIMBAL DRIVE BITS IN CHANNEL 12,NEGUQ,NEGUR,QACCDOT AND RACCDOT, THE LAST SCALED AT PI/2(7).
064180,000253: # Q(R)GIMTIMR WILL BE SET TO TIME AND TERMINATE GIMBAL DRIVE(S)
064181,000254:
064182,000255: # DEBRIS: A,L,Q, ITEMPS 2,3,6, RUPTREG2 AND ACDT+C12 DEBRIS.
064183,000256:
064184,000257: # EXITS: VIA TC Q.
064185,000258:
064186,000259: # ALARMS, ABORTS, : NONE
064187,000260:
064188,000261: # SUBROUTINES: ACDT+C12, IBNKCALL
064189,000262:
064190,000263: # WARNING: THIS SUBROUTINE WRITES INTO CHANNEL 12 AND USES THE ITEMPS. THEREFORE IT MAY ONLY BE CALLED WITH
064191,000264: # INTERRUPT INHIBITED.
064192,000265:
064193,000266: # ERASABLE STORAGE CONFIGURATION (NEEDED BY THE INDEXING METHODS):
064194,000267: # NEGUQ ERASE +2 NEGATIVE OF Q-AXIS GIMBAL DRIVE
064195,000268: # (SPWORD) EQUALS NEGUQ +1 ANY S.P. ERASABLE NUMBER, NOW THRSTCMD
064196,000269: # NEGUR EQUALS NEGUQ +2 NEGATIVE OF R-AXIS GIMBAL DRIVE
064197,000270:
064198,000271: # ACCDOTQ ERASE +2 Q-JERK TERM SCALED AT PI/2(7) RAD/SEC(3)
064199,000272: # (SPWORD) EQUALS ACCDOTQ +1 ANY S.P. ERASABLE NUMBER NOW QACCDOT
064200,000273: # ACCDOTR EQUALS ACCDOTQ +2 R-JERK TERM SCALED AT PI/2(7) RAD/SEC(3)
064201,000274: # ACCDOTQ, ACCDOTR ARE MAGNITUDES.
064202,000275: # AOSQ ERASE +4 Q-AXIS ACC., D.P. AT PI/2 R/SEC(2)
064203,000276: # AOSR EQUALS AOSQ +2 R-AXIS ACCELERATION SCALED AT PI/2 R/S2
064204,000277:
064205,000278: 21,3447 0066 QRNDXER EQUALS ITEMP6
064206,000279: 21,3447 23146 OCT23146 OCTAL 23146 # DECIMAL .6
064207,000280: 21,3450 0063 NZACCDOT EQUALS ITEMP3
064208,000281:
064209,000282: 21,3450 34753 TIMEGMBL CAF ONE # INITIALIZE ALLOWGTS.
064210,000283: 21,3451 55501 TS ALLOWGTS
064211,000284:
064212,000285: 21,3452 34752 CAF TWO # SET UP LOOP FOR R AXIS.
064213,000286: 21,3453 22002 LXCH Q # SAVE RETURN ADDRESS.
064214,000287: 21,3454 22071 LXCH RUPTREG2
![]() |
Page 1473 |
064216,000289: 21,3455 13457 TCF +2
064217,000290: 21,3456 34755 TIMQGMBL CAF ZERO # NOW DO THE Q-AXIS
064218,000291: 21,3457 54066 TS QRNDXER
064219,000292: 21,3460 50066 INDEX QRNDXER
064220,000293: 21,3461 31507 CA ACCDOTQ # ACCDOT IS PRESUMED TO BE AT PI/2(7).
064221,000294: 21,3462 00006 EXTEND
064222,000295: 21,3463 63533 BZMF TGOFFNOW # IS ACCDOT LESS THAN OR EQUAL TO 0?
064223,000296: 21,3464 54063 TS NZACCDOT # NO. STORE NON-ZERO, POSITIVE ACCDOT.
064224,000297:
064225,000298: 21,3465 50066 ALPHATRY INDEX QRNDXER
064226,000299: 21,3466 41537 CS AOSQ
064227,000300: 21,3467 00006 EXTEND
064228,000301: 21,3470 13533 BZF TGOFFNOW # IS ALPHA ZERO?
064229,000302:
064230,000303: 21,3471 54002 TS Q # SAVE A COPY OF -AOS.
064231,000304: 21,3472 00006 EXTEND # NO. RESCALE FOR TIMEGMBL USE.
064232,000305: 21,3473 73447 MP OCT23146 # OCTAL 23146 IS DECIMAL .6
064233,000306: 21,3474 60002 AD Q # -1.6*AOS AT PI/2 = -.4*AOS AT PI/8.
064234,000307: 21,3475 54001 TS L # WAS THERE OVERFLOW?
064235,000308: 21,3476 13503 TCF SETNEGU # NO. COMPUTE DRIVE TIME.
064236,000309:
064237,000310: 21,3477 40000 CS A # RECOVER -SGN(AOS) IN THE A REGISTER.
064238,000311: 21,3500 50066 INDEX QRNDXER # YES. START DRIVE WITHOUT WAITLIST.
064239,000312: 21,3501 57500 XCH NEGUQ
064240,000313: 21,3502 13537 TCF NOTALLOW # KNOCK DOWN THE ALLOWGTS FLAG.
064241,000314:
064242,000315: 21,3503 00006 SETNEGU EXTEND
064243,000316: 21,3504 63511 BZMF POSALPH
064244,000317:
064245,000318: 21,3505 40000 COM
064246,000319: 21,3506 54062 TS ITEMP2 # STORE -ABS(.4*AOS) SCALED AT PI/8.
064247,000320: 21,3507 44753 CS BIT1
064248,000321: 21,3510 13513 TCF POSALPH +2
064249,000322: 21,3511 54062 POSALPH TS ITEMP2 # STORE -ABS(.4*AOS) SCALED AT PI/8.
064250,000323: 21,3512 34753 CA BIT1
064251,000324: 21,3513 50066 +2 INDEX QRNDXER # SGN(AOS) INTO NEGU
064252,000325: 21,3514 55500 TS NEGUQ # STORE SGN(APLHA) AS NEGU
064253,000326:
064254,000327: 21,3515 30063 CA NZACCDOT
064255,000328: 21,3516 00006 EXTEND
064256,000329: 21,3517 74740 MP BIT12 # 2*ACCDOT, SCALED AT PI/8.
064257,000330: 21,3520 60062 AD ITEMP2 # -ABS(ALPHA) + 2*ACCDOT, AT PI/8.
064258,000331: 21,3521 00006 EXTEND
064259,000332: 21,3522 63537 BZMF NOTALLOW # IS DRIVE TIME MORE THAN TWO SECONDS?
064260,000333: 21,3523 40062 CS ITEMP2 # NO. COMPUTE DRIVE TIME.
064261,000334: 21,3524 00006 EXTEND # ABS(ALPHA) AT PI/8.
064262,000335: 21,3525 73560 MP OCT00240 # DECIMAL 10/1024
064263,000336: 21,3526 00006 EXTEND # QUOTIENT IS DRIVE TIME AT WAITLIST.
064264,000337: 21,3527 10063 DV NZACCDOT # ABS(ALPHA)/ACCDOT AT 2(14)/100
![]() |
Page 1474 |
064266,000339: 21,3530 00006 EXTEND
064267,000340: 21,3531 13533 BZF TGOFFNOW # DRIVE TIME MUST BE GREATER THAN ZERO.
064268,000341:
064269,000342: 21,3532 13545 TCF DRIVEON
064270,000343:
064271,000344: 21,3533 34755 TGOFFNOW CAF ZERO # TURN OFF GIMBAL NOW.
064272,000345: 21,3534 50066 INDEX QRNDXER
064273,000346: 21,3535 55500 TS NEGUQ
064274,000347:
064275,000348: 21,3536 13547 TCF DONEYET
064276,000349:
064277,000350: 21,3537 36010 NOTALLOW CAF OCT31
064278,000351: 21,3540 50066 INDEX QRNDXER
064279,000352: 21,3541 55630 TS QGIMTIMR
064280,000353: 21,3542 34755 CAF ZERO # DRIVE TIME IS MORE THAN 2 SECONDS, SO
064281,000354: 21,3543 55501 TS ALLOWGTS # DO NOT PERMIT FURTHER GTS ATTITUDE-RATE
064282,000355: # CONTROL UNTIL AOSTASK APPROVES.
064283,000356: 21,3544 13547 TCF DONEYET # NO WAITLIST CALL IS MADE.
064284,000357:
064285,000358: 21,3545 50066 DRIVEON INDEX QRNDXER
064286,000359: 21,3546 55630 TS QGIMTIMR # CHOOSE Q OR R AXIS.
064287,000360:
064288,000361: 21,3547 10066 DONEYET CCS QRNDXER
064289,000362: 21,3550 13456 TCF TIMQGMBL
064290,000363:
064291,000364: 21,3551 52073 DXCH RUPTREG3 # PROTECT IBNKCALL ERASABLES. ACDT+C12
064292,000365: 21,3552 52063 DXCH ITEMP2 # LEAVES ITEMPS2,3 ALONE.
064293,000366:
064294,000367: 21,3553 04674 TC IBNKCALL # TURN OF CHANNEL BITS, SET Q(R)ACCDOTS.
064295,000368: 21,3554 35721 CADR ACDT+C12
064296,000369:
064297,000370: 21,3555 52063 DXCH ITEMP2 # RESTORE ERASABLES FOR IBNKCALL.
064298,000371: 21,3556 52073 DXCH RUPTREG3
064299,000372:
064300,000373: 21,3557 00071 TC RUPTREG2 # RETURN TO CALLER.
064301,000374:
064302,000375: 21,3560 00240 OCT00240 OCTAL 00240 # DECIMAL 10/1024
064303,000376:
![]() |
Page 1475 |
064305,000378: # THE FOLLOWING SECTION IS A CONTINUATION OF THE TRIM GIMBAL CONTROL FROM THE LAST GTS ENTRY. THE QUANTITY NEGUSUM
064306,000379: # IS COMPUTED FOR EACH AXIS (Q,R), .707*DEL*FUNCTION(3/2) + K2THETA = NEGUSUM. NEW DRIVES ARE ENTERED TO CH 12.
064307,000380:
064308,000381: 21,3561 11747 RSTOFGTS CCS FUNCTION
064309,000382: 21,3562 13603 TCF GOODARG # FUNCTION IS POSITIVE. GET 3/2 POWER.
064310,000383: 21,3563 13565 TCF +2 # HIGH ORDER WORD IS ZERO. TRY THE LOWER.
064311,000384: 21,3564 13571 TCF ZEROOT # NEGATIVE. USE ZERO FOR 3/2 POWER.
064312,000385:
064313,000386: 21,3565 41750 CS FUNCTION +1 # IF ARG IS LESS THAN 2(-18), THEN THE 3/2
064314,000387: 21,3566 64741 AD BIT11 # POWER IS LESS THAN 2(-27). USE ZERO.
064315,000388: 21,3567 00006 EXTEND
064316,000389: 21,3570 63574 BZMF ZEROHIGH # BRANCH IF ARG NOT LESS THAN 2(-18).
064317,000390:
064318,000391: 21,3571 00006 ZEROOT EXTEND
064319,000392: 21,3572 34756 DCA ZERO
064320,000393: 21,3573 13714 TCF NEGUSUM
064321,000394:
064322,000395: 21,3574 34317 ZEROHIGH CA FOURTEEN # ARG LESS THAN 2(-14) MEANS 3/2 POWER
064323,000396: # WILL BE LESS THAN 2(-21).
064324,000397: 21,3575 55737 TS SHFTFLAG
064325,000398:
064326,000399: 21,3576 34752 CA TWO
064327,000400: 21,3577 55740 TS ININDEX # INITIALIZE THE SHIFT LOOP.
064328,000401:
064329,000402: # COLLECT THE 14 MOST SIGNIFICANT BITS OF
064330,000403: 21,3600 57750 XCH FUNCTION +1 # THE 28 INTO THE HIGH ORDER WORD.
064331,000404: 21,3601 57747 XCH FUNCTION
064332,000405: 21,3602 13616 TCF SCALLOOP
064333,000406: 21,3603 35742 GOODARG CA TWELVE
064334,000407: 21,3604 55740 TS ININDEX # INITIALIZE THE SHIFT LOOP.
064335,000408: 21,3605 34755 CA ZERO # THERE ARE SIGNIFICANT BITS IN THE HIGH
064336,000409: 21,3606 55737 TS SHFTFLAG # ORDER WORD, SO SET SHFTFLAG TO ZERO.
064337,000410:
064338,000411: 21,3607 13616 TCF SCALLOOP
064339,000412:
064340,000413: 21,3610 31747 SCALSTRT CA FUNCTION
064341,000414: 21,3611 13633 TCF SCALDONE
064342,000415:
064343,000416: 21,3612 37745 MULBUSH CA NEG2 # IF ARG IS NOT LESS THAN 1/4, INDEX IS
064344,000417: 21,3613 27740 ADS ININDEX # ZERO, INDICATING NO SHIFT NEEDED.
064345,000418: 21,3614 00006 EXTEND # BRANCH IF ARG IS NOT LESS THAN 1/4.
064346,000419: 21,3615 63610 BZMF SCALSTRT # OTHERWISE COMPARE ARG WITH A REFERENCE
064347,000420: # WHICH IS 4 TIMES LARGER THAN THE LAST.
064348,000421: 21,3616 41747 SCALLOOP CS FUNCTION
064349,000422: 21,3617 51740 INDEX ININDEX
064350,000423: 21,3620 64735 AD BIT15 # REFERENCE MAGNITUDE LESS OR EQUAL TO 1/4
064351,000424: 21,3621 00006 EXTEND
064352,000425: 21,3622 63612 BZMF MULBUSH # IF ARG IS NOT LESS THAN REFERENCE, GO
064353,000426: # AROUND THE MULBERRY BUSH ONCE MORE.
064354,000427: 21,3623 51740 INDEX ININDEX
![]() |
Page 1476 |
064356,000429: 21,3624 34735 CA BIT15 # THIS IS THE SCALE MAGNITUDE
064357,000430: 21,3625 56002 XCH Q # 2**(-ININDEX) IS THE SHIFT DIVISOR.
064358,000431: 21,3626 00006 EXTEND # RESCALE ARGUMENT.
064359,000432: 21,3627 31750 DCA FUNCTION
064360,000433: 21,3630 00006 EXTEND
064361,000434: 21,3631 10002 DV Q
064362,000435: 21,3632 55747 TS FUNCTION # ININDEX AND SHFTFLAG PRESERVE INFO FOR
064363,000436: # RESCALING AFTER ROOT PROCESS.
064364,000437: 21,3633 00006 SCALDONE EXTEND # AFTER 3/2 POWER IS TAKEN, SCALE FACTOR
064365,000438: 21,3634 74737 MP BIT13 # OF SQRT(1/2) WILL BE NEEDED, SO FACTOR
064366,000439: 21,3635 55743 TS HALFARG # OF 1/2 IS INCLUDED NOW, BEFORE SQRT.
064367,000440:
064368,000441: 21,3636 33761 CA STARTER # INITIAL GUESS FOR SQRT ALGORITHM.
064369,000442: 21,3637 03763 TC ROOTCYCL
064370,000443: 21,3640 03763 TC ROOTCYCL
064371,000444: 21,3641 03763 TC ROOTCYCL
064372,000445:
064373,000446: 21,3642 00006 EXTEND # SQRT(1/2)*SQRT(ARG) IN A.
064374,000447: 21,3643 71747 MP FUNCTION # SQRT(1/2)*ARG*SQRT(ARG) IN A,L.
064375,000448: 21,3644 53750 DXCH FUNCTION
064376,000449:
064377,000450: 21,3645 31737 DOSHIFT CA SHFTFLAG # HOW MANY SHIFT BITS ARE THERE?
064378,000451: 21,3646 61740 AD ININDEX # 2**(-ININDEX) WAS SHIFT DIVISOR.
064379,000452: 21,3647 54021 TS SR
064380,000453: 21,3650 60021 AD SR # THIS MANY SHIFTS ARE REQUIRED.
064381,000454: 21,3651 54002 SAVESHFT TS Q # Q BOUNDS ARE ZERO AND 24 (DECIMAL).
064382,000455: 21,3652 00006 EXTEND
064383,000456: 21,3653 63701 BZMF SUMNEGU # BRANCH IF SHIFTING IS UNNECESSARY.
064384,000457:
064385,000458: 21,3654 44317 CS FOURTEEN
064386,000459: 21,3655 60002 AD Q
064387,000460: 21,3656 00006 EXTEND # Q = 0(MOD 3), SO A REG IS NON-ZERO.
064388,000461: 21,3657 63664 BZMF MINISHIFT # BRANCH IF SMALL SHIFT SUFFICES.
064389,000462:
064390,000463: 21,3660 54002 MAXISHIFT TS Q # 14 BIT SHIFT RIGHT NOW.
064391,000464: 21,3661 34755 CA ZERO
064392,000465: 21,3662 57747 XCH FUNCTION
064393,000466: 21,3663 55750 TS FUNCTION +1
064394,000467:
064395,000468: 21,3664 50002 MINISHIFT INDEX Q # C(Q) ARE GREATER THAN ZERO.
064396,000469: 21,3665 34735 CA BIT15
064397,000470: 21,3666 54002 TS Q # 2**(-Q) WILL BE SHIFT MULTIPLIER.
064398,000471: 21,3667 00006 EXTEND
064399,000472: 21,3670 71750 MP FUNCTION +1
064400,000473: 21,3671 56001 XCH L
064401,000474: 21,3672 34755 CA ZERO
064402,000475: 21,3673 53750 DXCH FUNCTION # LOWER WORD SHIFTED NOW.
064403,000476: 21,3674 00006 EXTEND
064404,000477: 21,3675 63701 BZMF SUMNEGU # BRANCH IF UPPER WORD WAS ZERO.
![]() |
Page 1477 |
064406,000479: 21,3676 00006 EXTEND # SHIFT UPPER WORD.
064407,000480: 21,3677 70002 MP Q
064408,000481: 21,3700 21750 DAS FUNCTION # NO OVERFLOW POSSIBLE.
064409,000482:
064410,000483: 21,3701 41745 SUMNEGU CS DEL # INCLUDE DEL FACTOR IN PRODUCT TERM.
064411,000484: 21,3702 00006 EXTEND
064412,000485: 21,3703 63707 BZMF SUMTERMS
064413,000486:
064414,000487: 21,3704 00006 EXTEND # DEL FACTOR IS MINUS ONE.
064415,000488: 21,3705 41750 DCS FUNCTION
064416,000489: 21,3706 13713 TCF NEGUSUM -1 # NOW ADD IN THE K2THETA TERM.
064417,000490:
064418,000491: 21,3707 00006 SUMTERMS EXTEND
064419,000492: 21,3710 13714 BZF NEGUSUM # BRANCH IF DEL IS ZERO.
064420,000493:
064421,000494: 21,3711 00006 EXTEND # DEL FACTOR IS +1.
064422,000495: 21,3712 31750 DCA FUNCTION
064423,000496: 21,3713 21736 DAS K2THETA # NOW ADD IN THE K2THETA TERM.
064424,000497: 21,3714 11735 NEGUSUM CCS K2THETA # TEST SIGN OF HIGH ORDER PART.
064425,000498: 21,3715 13721 TCF NEGDRIVE
064426,000499: 21,3716 13720 TCF +2
064427,000500: 21,3717 13723 TCF POSDRIVE
064428,000501:
064429,000502: 21,3720 11736 CCS K2THETA +1 # SIGN TEST FOR LOW ORDER PART.
064430,000503: 21,3721 34753 NEGDRIVE CA BIT1
064431,000504: 21,3722 13724 TCF +2 # STOP GIMBAL DRIVE FOR A ZERO NEGUSUM.
064432,000505: 21,3723 44753 POSDRIVE CS BIT1
064433,000506: 21,3724 54001 TS L # SAVE FOR DRIVE REVERSAL TEST.
064434,000507: 21,3725 51746 INDEX QRCNTR
064435,000508: 21,3726 57500 XCH NEGUQ
064436,000509:
064437,000510: 21,3727 00006 EXTEND
064438,000511: 21,3730 70001 MP L # MULTIPLY OLD NEGU AND NEW NEGU.
064439,000512: 21,3731 10001 CCS L
064440,000513: 21,3732 13747 TCF LOUPE # NON-ZERO GIMBAL DRIVE BEING CONTINUED.
064441,000514:
064442,000515: 21,3733 13744 TCF ZEROLOUP # NO REVERSAL PROBLEM HERE.
064443,000516:
064444,000517: 21,3734 13736 TCF REVERSAL # NON-ZERO GIMBAL DRIVE BEING REVERSED.
064445,000518: 21,3735 13744 TCF ZEROLOUP # NO REVERSAL PROBLEM HERE.
064446,000519:
064447,000520: 21,3736 51746 REVERSAL INDEX QRCNTR # A ZERO-DRIVE PAUSE IS NEEDED HERE. ZERO
064448,000521: 21,3737 55510 TS QACCDOT # IS IN A REGISTER FROM CCS ON (-1).
064449,000522: 21,3740 51746 INDEX QRCNTR
064450,000523: 21,3741 43760 CS GMBLBITA
064451,000524: 21,3742 00006 EXTEND
064452,000525: 21,3743 03012 WAND CHAN12
064453,000526:
064454,000527: 21,3744 41273 ZEROLOUP CS RCSFLAGS # SET UP REQUEST FOR ACDT+C12 CALL.
064455,000528: 21,3745 74747 MASK CALLGMBL
![]() |
Page 1478 |
064457,000530: 21,3746 27273 ADS RCSFLAGS
064458,000531:
064459,000532: 21,3747 11746 LOUPE CCS QRCNTR # HAVE BOTH AXES BEEN PROCESSED?
064460,000533: 21,3750 13306 TCF GOQTRIMG # NO. DO Q AXIS NEXT.
064461,000534:
064462,000535: 21,3751 31476 CA SAVESR # RESTORE THE SR
064463,000536: 21,3752 54021 TS SR
064464,000537:
064465,000538: 21,3753 00006 GOCLOSE EXTEND # TERMINATE THE JASK.
064466,000539: 21,3754 33757 DCA CLOSEADR
064467,000540: 21,3755 52006 DTCB
064468,000541:
064469,000542: 21,3756 E6,1537 EBANK= AOSQ
064470,000543: 21,3756 03173 36106 CLOSEADR 2CADR CLOSEOUT # TERMINATE THE JASK.
064471,000544:
064472,000545: 21,3760 5742 TWELVE EQUALS OCT14
064473,000546: 21,3760 01400 GMBLBITA OCTAL 01400 # INDEXED WRT GMBLBITB DO NOT MOVE ******
064474,000547: 21,3761 20761 STARTER DEC .53033 # INITIAL VALUE FOR SQRT ALGORITHM.
064475,000548: 21,3762 06000 GMBLBITB OCTAL 06000 # INDEXED WRT GMBLBITA DO NOT MOVE ******
064476,000549:
064477,000550: # SUBROUTINE ROOTCYCL: BY CRAIG WORK,3 APRIL 68
064478,000551:
064479,000552: # ROOTCYCL IS A SUBROUTINE WHICH EXECUTES ONE NEWTON SQUARE ROOT ALGORITHM ITERATION. THE INITIAL GUESS AT THE
064480,000553: # SQUARE ROOT IS PRESUMED TO BE IN THE A REGISTER AND ONE-HALF THE SQUARE IS TAKEN FROM HALFARG. THE NEW APPROXI-
064481,000554: # MATION TO THE SQUARE ROOT IS RETURNED IN THE A REGISTER. DEBRIS: A,L,SR,SCRATCH. ROOTCYCL IS CALLED FROM
064482,000555: # LOCATION (LOC) BY A TC ROOTCYCL, AND RETURNS (TC Q) TO LOC +1.
064483,000556:
064484,000557: # WARNING: IF THE INITIAL GUESS IS NOT GREATER THAN THE SQUARE, DIVIDE OR ADD OVERFLOW IS A REAL POSSIBILITY.
064485,000558:
064486,000559: 21,3763 55742 ROOTCYCL TS SCRATCH # STORE X
064487,000560: 21,3764 54021 TS SR # X/2 NOW IN SR
064488,000561: 21,3765 31743 CA HALFARG # ARG/2 IN THE A REG
064489,000562: 21,3766 22007 ZL # PREPARE FOR DIVISION
064490,000563: 21,3767 00006 EXTEND
064491,000564: 21,3770 11742 DV SCRATCH # (ARG/X)/2
064492,000565: 21,3771 60021 AD SR # (X + ARG/X)/2 IN THE A REG
064493,000566: 21,3772 00002 TC Q
064494,000567:
064495,000568:
End of include-file TRIM_GIMBAL_CONTROL_SYSTEM.agc. Parent file is MAIN.agc