Source Code
|
These source-code files are part of a reconstructed copy of LUM69 Revision 2, the
flown Apollo 10 Lunar Module (LM) Apollo Guidance Computer (AGC) software.
The reconstruction began with source code of Luminary 69 revision 0 previously transcribed from a digitized copy of that program. The code was then updated by back-porting the R-2 lunar potential model from previously-transcribed source code of Luminary 99. These required changes were described in the original Luminary memos 75 and 78. The reconstructed code was verified by matching memory-bank checksums to those listed in drawing 2021152G. Note that page numbers in the reconstructed code match those on the Luminary 069 printout, although the added code would likely have changed page numbers for a real LUM69 Revision 2 listing. Comments from the original source code are prefixed with a single '#' symbol, whereas comments added later are prefixed by "##" or "###". Report any errors noted by creating an issue report at the Virtual AGC project's GitHub repository. |
063404,000002: ## Copyright: Public domain.
063405,000003: ## Filename: TRIM_GIMBAL_CONTROL_SYSTEM.agc
063406,000004: ## Purpose: A section of LUM69 revision 2.
063407,000005: ## It is part of the reconstructed source code for the flown
063408,000006: ## version of the flight software for the Lunar Module's (LM)
063409,000007: ## Apollo Guidance Computer (AGC) for Apollo 10. The code has
063410,000008: ## been recreated from a copy of Luminary revsion 069, using
063411,000009: ## changes present in Luminary 099 which were described in
063412,000010: ## Luminary memos 75 and 78. The code has been adapted such
063413,000011: ## that the resulting bugger words exactly match those specified
063414,000012: ## for LUM69 revision 2 in NASA drawing 2021152B, which gives
063415,000013: ## relatively high confidence that the reconstruction is correct.
063416,000014: ## Reference: pp. 1467-1478
063417,000015: ## Assembler: yaYUL
063418,000016: ## Contact: Ron Burkey <info@sandroid.org>.
063419,000017: ## Website: www.ibiblio.org/apollo/index.html
063420,000018: ## Mod history: 2019-07-27 MAS Created from Luminary 69.
063421,000019:
|
Page 1467 |
063423,000021: 21,3263 BANK 21
063424,000022: 21,3263 E6,1446 EBANK= QDIFF
063425,000023: 21,2000 SETLOC DAPS4
063426,000024: 21,2000 BANK
063427,000025:
063428,000026: 21,3263 COUNT* $$/DAPGT
063429,000027:
063430,000028: # CONTROL REACHES THIS POINT UNDER EITHER OF THE FOLLOWING TWO CONDITIONS ONCE THE DESCENT ENGINE AND THE DIGITAL
063431,000029: # AUTOPILOT ARE BOTH ON:
063432,000030: # A) THE TRIM GIMBAL CONTROL LAW WAS ON DURING THE PREVIOUS Q,R-AXIS TIME5 INTERRUPT (OR THE DAPIDLER
063433,000031: # INITIALIZATION WAS SET FOR TRIM GIMBAL CONTROL AND THIS IS THE FIRST PASS), OR
063434,000032: # B) THE Q,R-AXES RCS AUTOPILOT DETERMINED THAT THE VEHICLE WAS ENTERING (OR HAD JUST ENTERED) A COAST
063435,000033: # ZONE WITH A SMALL OFFSET ANGULAR ACCELERATION.
063436,000034: # GTS IS THE ENTRY TO THE GIMBAL TRIM SYSTEM FOR CONTROLLING ATTITUDE ERRORS AND RATES AS WELL AS ACCELERATIONS.
063437,000035:
063438,000036: 21,3263 37746 GTS CAF NEGONE # MAKE THE NEXT PASS THROUGH THE DAP BE
063439,000037: 21,3264 55627 TS COTROLER # THROUGH RCS CONTROL,
063440,000038: 21,3265 34751 CAF FOUR # AND ENSURE THAT IT IS NOT A SKIP.
063441,000039: 21,3266 55535 TS SKIPU
063442,000040: 21,3267 55536 TS SKIPV
063443,000041:
063444,000042: 21,3270 34752 CAF TWO
063445,000043: 21,3271 55631 TS INGTS # SET INDICATOR OF GTS CONTROL POSITIVE.
063446,000044: 21,3272 55630 TS QGIMTIMR # SET TIMERS TO 200 MSEC TO AVOID BOTH
063447,000045: 21,3273 55632 TS RGIMTIMR # RUNAWAY AND INTERFERENCE BY NULLING.
063448,000046:
063449,000047: # THE DRIVE SETTING ALGORITHM
063450,000048:
063451,000049: # DEL = SGN(OMEGA*K + ALPHA*ABS(ALPHA)/2).
063452,000050:
063453,000051: # NEGUSUM = ERROR.K(2) + DEL(OMEGA.K.DEL + ALPHA(2)/2)(3/2) + ALPHA(OMEGA.K.DEL + ALPHA(2)/3)
063454,000052:
063455,000053: # DRIVE = -SGN(NEGUSUM)
063456,000054:
063457,000055: 21,3274 30021 CA SR # SAVE THE SR. SHIFT IT LEFT TO CORRECT
063458,000056: 21,3275 60000 AD A # FOR THE RIGHT SHIFT DUE TO EDITING.
063459,000057: 21,3276 55476 TS SAVESR
063460,000058:
063461,000059: 21,3277 34752 GTSGO+DN CAF TWO # SET INDEXER FOR R-AXIS CALCULATIONS.
063462,000060: 21,3300 55746 TS QRCNTR
063463,000061: 21,3301 31541 CA AOSR
063464,000062: 21,3302 00006 EXTEND
063465,000063: 21,3303 74751 MP BIT3
063466,000064: 21,3304 31435 CA EDOTR
063467,000065: 21,3305 13314 TCF GTSQAXIS
063468,000066:
063469,000067: 21,3306 34755 GOQTRIMG CAF ZERO # SET INDEXER FOR Q-AXIS CALCULATIONS
063470,000068: 21,3307 55746 TS QRCNTR
|
Page 1468 |
063472,000070: 21,3310 31537 CA AOSQ
063473,000071: 21,3311 00006 EXTEND
063474,000072: 21,3312 74751 MP BIT3
063475,000073: 21,3313 31434 CA EDOTQ
063476,000074: 21,3314 53744 GTSQAXIS DXCH WCENTRAL
063477,000075: 21,3315 00006 EXTEND
063478,000076: 21,3316 51746 INDEX QRCNTR # PICK UP K AND K(2) FOR THIS AXIS
063479,000077: 21,3317 31504 DCA KQ
063480,000078: 21,3320 53742 DXCH KCENTRAL
063481,000079:
063482,000080: 21,3321 51746 INDEX QRCNTR # QDIFF, RDIFF ARE STORED IN D.P.
063483,000081: 21,3322 31446 CAE QDIFF
063484,000082:
063485,000083: 21,3323 00006 ALGORTHM EXTEND # Q(R)DIFF IS THETA (ERROR) SCALED AT PI.
063486,000084: 21,3324 71742 MP K2CNTRAL # FORM K(2)*THETA IN D.P.
063487,000085: 21,3325 23735 LXCH K2THETA
063488,000086: 21,3326 00006 EXTEND # FORM K(2)*THETA*SF2 IN D.P.
063489,000087: 21,3327 74743 MP BIT9
063490,000088: 21,3330 53736 DXCH K2THETA
063491,000089: 21,3331 00006 EXTEND
063492,000090: 21,3332 74743 MP BIT9
063493,000091: 21,3333 27736 ADS K2THETA +1
063494,000092:
063495,000093: 21,3334 31743 CAE WCENTRAL # GET OMEGA
063496,000094: 21,3335 00006 EXTEND
063497,000095: 21,3336 71741 MP KCENTRAL # FORM K*OMEGA IN D.P.
063498,000096: 21,3337 23741 LXCH OMEGA.K
063499,000097: 21,3340 00006 EXTEND # FORM OMEGA*K*SF1 IN D.P.
063500,000098: 21,3341 74740 MP BIT12
063501,000099: 21,3342 53742 DXCH OMEGA.K
063502,000100: 21,3343 00006 EXTEND
063503,000101: 21,3344 74740 MP BIT12
063504,000102: 21,3345 27742 ADS OMEGA.K +1
063505,000103:
063506,000104: 21,3346 31744 CAE ACENTRAL # FORM ALPHA(2)/2 IN D.P.
063507,000105: 21,3347 00006 EXTEND
063508,000106: 21,3350 70000 SQUARE
063509,000107: 21,3351 53740 DXCH A2CNTRAL
063510,000108:
063511,000109: 21,3352 31744 CAE ACENTRAL # GET ALPHA*ABS(ALPHA)/2, IF ALPHA GREATER
063512,000110: # THAN 0. OTHERWISE TAKE NEGATIVE OF ABOVE
063513,000111: 21,3353 00006 EXTEND
063514,000112: 21,3354 63360 BZMF +4
063515,000113: 21,3355 00006 EXTEND
063516,000114: 21,3356 31740 DCA A2CNTRAL
063517,000115: 21,3357 13362 TCF +3
063518,000116: 21,3360 00006 EXTEND
063519,000117: 21,3361 41740 DCS A2CNTRAL
063520,000118: 21,3362 53750 DXCH FUNCTION # SAVE AS SGN(ALPHA)*ALPHA(2)/2
|
Page 1469 |
063522,000120: 21,3363 00006 EXTEND
063523,000121: 21,3364 31742 DCA OMEGA.K
063524,000122: 21,3365 21750 DAS FUNCTION # FORM FUNCT1
063525,000123:
063526,000124: 21,3366 11747 CCS FUNCTION # DEL = +1 FOR FUNCT1 GREATER THAN ZERO.
063527,000125: 21,3367 13373 TCF POSFNCT1 # OTHERWISE DEL = -1
063528,000126: 21,3370 13372 TCF +2
063529,000127: 21,3371 13375 TCF NEGFNCT1
063530,000128:
063531,000129: 21,3372 11750 CCS FUNCTION +1 # USE LOW ORDER WORD SINCE HIGH IS ZERO
063532,000130: 21,3373 34753 POSFNCT1 CAF BIT1
063533,000131: 21,3374 13376 TCF +2
063534,000132: 21,3375 44753 NEGFNCT1 CS BIT1
063535,000133: 21,3376 55745 TS DEL
063536,000134:
063537,000135: 21,3377 11745 CCS DEL # MAKE OMEGA*K REALLY DEL*OMEGA*K
063538,000136: 21,3400 13405 TCF FUNCT2 # (NOTHING NEED BE DONE)
063539,000137: 21,3401 13405 TCF FUNCT2
063540,000138: 21,3402 00006 EXTEND
063541,000139: 21,3403 41742 DCS OMEGA.K
063542,000140: 21,3404 53742 DXCH OMEGA.K # CHANGE SIGN OF OMEGA*K
063543,000141:
063544,000142: 21,3405 00006 FUNCT2 EXTEND
063545,000143: 21,3406 31742 DCA OMEGA.K
063546,000144: 21,3407 53750 DXCH FUNCTION # DEL*OMEGA*K
063547,000145: 21,3410 00006 EXTEND
063548,000146: 21,3411 31740 DCA A2CNTRAL
063549,000147: 21,3412 21750 DAS FUNCTION # DEL*OMEGA*K + ALPHA(2)/2
063550,000148: 21,3413 31737 FUNCT3 CAE A2CNTRAL # CALCULATE (2/3)*ALPHA(2)/2 = ALPHA(2)/3
063551,000149: 21,3414 00006 EXTEND
063552,000150: 21,3415 73446 MP .66667
063553,000151: 21,3416 53740 DXCH A2CNTRAL
063554,000152: 21,3417 56001 XCH L
063555,000153: 21,3420 00006 EXTEND
063556,000154: 21,3421 73446 MP .66667
063557,000155: 21,3422 27740 ADS A2CNTRAL +1
063558,000156: 21,3423 54001 TS L
063559,000157: 21,3424 13426 TCF +2
063560,000158: 21,3425 27737 ADS A2CNTRAL
063561,000159: 21,3426 53742 DXCH OMEGA.K # DEL*OMEGA*K + ALPHA(2)/3 = G
063562,000160: 21,3427 21740 DAS A2CNTRAL
063563,000161: 21,3430 31737 CAE A2CNTRAL # G*ALPHA IN D.P.
063564,000162: 21,3431 00006 EXTEND
063565,000163: 21,3432 71744 MP ACENTRAL
063566,000164: 21,3433 53740 DXCH A2CNTRAL
063567,000165: 21,3434 56001 XCH L
063568,000166: 21,3435 00006 EXTEND
063569,000167: 21,3436 71744 MP ACENTRAL
063570,000168: 21,3437 27740 ADS A2CNTRAL +1
063571,000169: 21,3440 54001 TS L
|
Page 1470 |
063573,000171: 21,3441 13443 TCF +2
063574,000172: 21,3442 27737 ADS A2CNTRAL
063575,000173:
063576,000174: 21,3443 53740 DXCH A2CNTRAL # FIRST AND THIRD TERMS
063577,000175: 21,3444 21736 DAS K2THETA # SUMMED IN D.P.
063578,000176:
063579,000177: 21,3445 13561 TCF RSTOFGTS
063580,000178:
063581,000179: 21,3446 25253 .66667 DEC .66667
063582,000180:
063583,000181: 16,3720 BANK 16
063584,000182: 16,3720 E6,1500 EBANK= NEGUQ
063585,000183: 16,2000 SETLOC DAPS1
063586,000184: 16,2000 BANK
063587,000185:
063588,000186: # THE WRCHN12 SUBROUTINE SETS BITS 9,10,11,12 OF CHANNEL 12 ON THE BASIS OF THE CONTENTS OF NEGUQ,NEGUR WHICH ARE
063589,000187: # THE NEGATIVES OF THE DESIRED ACCELERATION CHANGES. ACDT+C12 SETS Q(R)ACCDOT TO REFLECT THE NEW DRIVES.
063590,000188:
063591,000189: # WARNING: ACDT+C12 AND WRCHN12 MUST BE CALLED WITH INTERRUPT INHIBITED.
063592,000190:
063593,000191: 16,3720 07400 BGIM OCTAL 07400
063594,000192: 16,3721 0066 CHNL12 EQUALS ITEMP6
063595,000193: 16,3721 41500 ACDT+C12 CS NEGUQ
063596,000194: 16,3722 00006 EXTEND # GIMBAL DRIVE REQUESTS.
063597,000195: 16,3723 71507 MP ACCDOTQ
063598,000196: 16,3724 23510 LXCH QACCDOT
063599,000197: 16,3725 41502 CS NEGUR
063600,000198: 16,3726 00006 EXTEND
063601,000199: 16,3727 71511 MP ACCDOTR
063602,000200: 16,3730 23512 LXCH RACCDOT
063603,000201:
063604,000202: 16,3731 11500 CCS NEGUQ
063605,000203: 16,3732 34742 CAF BIT10
063606,000204: 16,3733 13735 TCF +2
063607,000205: 16,3734 34743 CAF BIT9
063608,000206: 16,3735 54066 TS CHNL12
063609,000207:
063610,000208: 16,3736 11502 CCS NEGUR
063611,000209: 16,3737 34740 CAF BIT12
063612,000210: 16,3740 13742 TCF +2
063613,000211: 16,3741 34741 CAF BIT11
063614,000212: 16,3742 26066 ADS CHNL12 # (STORED RESULT NOT USED AT PRESENT)
063615,000213:
063616,000214: 16,3743 43720 CS BGIM
063617,000215: 16,3744 00006 EXTEND
063618,000216: 16,3745 02012 RAND CHAN12
063619,000217: 16,3746 60066 AD CHNL12
063620,000218: 16,3747 00006 EXTEND
063621,000219: 16,3750 01012 WRITE CHAN12
|
Page 1471 |
063623,000221: 16,3751 44747 CS CALLGMBL # TURN OFF REQUEST FOR ACDT+C12 EXECUTION.
063624,000222: 16,3752 71273 MASK RCSFLAGS
063625,000223: 16,3753 55273 TS RCSFLAGS
063626,000224:
063627,000225: 16,3754 00002 TC Q # RETURN TO CALLER.
063628,000226:
063629,000227: 21,3447 BANK 21
063630,000228: 21,3447 E6,1446 EBANK= QDIFF
063631,000229: 21,2000 SETLOC DAPS4
063632,000230: 21,2000 BANK
063633,000231:
|
Page 1472 |
063635,000233: # SUBROUTINE TIMEGMBL: MOD 0, OCTOBER 1967, CRAIG WORK
063636,000234:
063637,000235: # TIMEGMBL COMPUTES THE DRIVE TIME NEEDED FOR THE TRIM GIMBAL TO POSITION THE DESCENT ENGINE NOZZLE SO AS TO NULL
063638,000236: # THE OFFSET ANGULAR ACCELERATION ABOUT THE Q (OR R) AXIS. INSTEAD OF USING AOSQ(R), TIMEGMBL USES .4*AOSQ(R),
063639,000237: # SCALED AT PI/8. FOR EACH AXIS, THE DRIVE TIME IS COMPUTED AS ABS(ALPHA/ACCDOT). A ZERO
063640,000238: # ALPHA OR ACCDOT OR A ZERO QUOTIENT TURNS OFF THE GIMBAL DRIVE IMMEDIATELY. OTHERWISE, THE GIMBAL IS TURNED ON
063641,000239: # DRIVING IN THE CORRECT DIRECTION. THE Q(R)GIMTIMR IS SET TO TERMINATE THE DRIVE AND Q(R)ACCDOT
063642,000240: # IS STORED TO REFLECT THE NEW ACCELERATION DERIVATIVE. NEGUQ(R) WILL CONTAIN +1,+0,-1 FOR A Q(R)ACCDOT VALUE
063643,000241: # WHICH IS NEGATIVE, ZERO, OR POSITIVE.
063644,000242:
063645,000243: # INPUTS: AOSQ,AOSR, SCALED AT P1/2, AND ACCDOTQ, ACCDOTR AT PI/2(7). PI/2(7).
063646,000244:
063647,000245: # OUTPUTS: NEW GIMBAL DRIVE BITS IN CHANNEL 12,NEGUQ,NEGUR,QACCDOT AND RACCDOT, THE LAST SCALED AT PI/2(7).
063648,000246: # Q(R)GIMTIMR WILL BE SET TO TIME AND TERMINATE GIMBAL DRIVE(S)
063649,000247:
063650,000248: # DEBRIS: A,L,Q, ITEMPS 2,3,6, RUPTREG2 AND ACDT+C12 DEBRIS.
063651,000249:
063652,000250: # EXITS: VIA TC Q.
063653,000251:
063654,000252: # ALARMS, ABORTS, : NONE
063655,000253:
063656,000254: # SUBROUTINES: ACDT+C12, IBNKCALL
063657,000255:
063658,000256: # WARNING: THIS SUBROUTINE WRITES INTO CHANNEL 12 AND USES THE ITEMPS. THEREFORE IT MAY ONLY BE CALLED WITH
063659,000257: # INTERRUPT INHIBITED.
063660,000258:
063661,000259: # ERASABLE STORAGE CONFIGURATION (NEEDED BY THE INDEXING METHODS):
063662,000260: # NEGUQ ERASE +2 NEGATIVE OF Q-AXIS GIMBAL DRIVE
063663,000261: # (SPWORD) EQUALS NEGUQ +1 ANY S.P. ERASABLE NUMBER, NOW THRSTCMD
063664,000262: # NEGUR EQUALS NEGUQ +2 NEGATIVE OF R-AXIS GIMBAL DRIVE
063665,000263:
063666,000264: # ACCDOTQ ERASE +2 Q-JERK TERM SCALED AT PI/2(7) RAD/SEC(3)
063667,000265: # (SPWORD) EQUALS ACCDOTQ +1 ANY S.P. ERASABLE NUMBER NOW QACCDOT
063668,000266: # ACCDOTR EQUALS ACCDOTQ +2 R-JERK TERM SCALED AT PI/2(7) RAD/SEC(3)
063669,000267: # ACCDOTQ, ACCDOTR ARE MAGNITUDES.
063670,000268: # AOSQ ERASE +4 Q-AXIS ACC., D.P. AT PI/2 R/SEC(2)
063671,000269: # AOSR EQUALS AOSQ +2 R-AXIS ACCELERATION SCALED AT PI/2 R/S2
063672,000270:
063673,000271: 21,3447 0066 QRNDXER EQUALS ITEMP6
063674,000272: 21,3447 23146 OCT23146 OCTAL 23146 # DECIMAL .6
063675,000273: 21,3450 0063 NZACCDOT EQUALS ITEMP3
063676,000274:
063677,000275: 21,3450 34753 TIMEGMBL CAF ONE # INITIALIZE ALLOWGTS.
063678,000276: 21,3451 55501 TS ALLOWGTS
063679,000277:
063680,000278: 21,3452 34752 CAF TWO # SET UP LOOP FOR R AXIS.
063681,000279: 21,3453 22002 LXCH Q # SAVE RETURN ADDRESS.
063682,000280: 21,3454 22071 LXCH RUPTREG2
|
Page 1473 |
063684,000282: 21,3455 13457 TCF +2
063685,000283: 21,3456 34755 TIMQGMBL CAF ZERO # NOW DO THE Q-AXIS
063686,000284: 21,3457 54066 TS QRNDXER
063687,000285: 21,3460 50066 INDEX QRNDXER
063688,000286: 21,3461 31507 CA ACCDOTQ # ACCDOT IS PRESUMED TO BE AT PI/2(7).
063689,000287: 21,3462 00006 EXTEND
063690,000288: 21,3463 63533 BZMF TGOFFNOW # IS ACCDOT LESS THAN OR EQUAL TO 0?
063691,000289: 21,3464 54063 TS NZACCDOT # NO. STORE NON-ZERO, POSITIVE ACCDOT.
063692,000290:
063693,000291: 21,3465 50066 ALPHATRY INDEX QRNDXER
063694,000292: 21,3466 41537 CS AOSQ
063695,000293: 21,3467 00006 EXTEND
063696,000294: 21,3470 13533 BZF TGOFFNOW # IS ALPHA ZERO?
063697,000295:
063698,000296: 21,3471 54002 TS Q # SAVE A COPY OF -AOS.
063699,000297: 21,3472 00006 EXTEND # NO. RESCALE FOR TIMEGMBL USE.
063700,000298: 21,3473 73447 MP OCT23146 # OCTAL 23146 IS DECIMAL .6
063701,000299: 21,3474 60002 AD Q # -1.6*AOS AT PI/2 = -.4*AOS AT PI/8.
063702,000300: 21,3475 54001 TS L # WAS THERE OVERFLOW?
063703,000301: 21,3476 13503 TCF SETNEGU # NO. COMPUTE DRIVE TIME.
063704,000302:
063705,000303: 21,3477 40000 CS A # RECOVER -SGN(AOS) IN THE A REGISTER.
063706,000304: 21,3500 50066 INDEX QRNDXER # YES. START DRIVE WITHOUT WAITLIST.
063707,000305: 21,3501 57500 XCH NEGUQ
063708,000306: 21,3502 13537 TCF NOTALLOW # KNOCK DOWN THE ALLOWGTS FLAG.
063709,000307:
063710,000308: 21,3503 00006 SETNEGU EXTEND
063711,000309: 21,3504 63511 BZMF POSALPH
063712,000310:
063713,000311: 21,3505 40000 COM
063714,000312: 21,3506 54062 TS ITEMP2 # STORE -ABS(.4*AOS) SCALED AT PI/8.
063715,000313: 21,3507 44753 CS BIT1
063716,000314: 21,3510 13513 TCF POSALPH +2
063717,000315: 21,3511 54062 POSALPH TS ITEMP2 # STORE -ABS(.4*AOS) SCALED AT PI/8.
063718,000316: 21,3512 34753 CA BIT1
063719,000317: 21,3513 50066 +2 INDEX QRNDXER # SGN(AOS) INTO NEGU
063720,000318: 21,3514 55500 TS NEGUQ # STORE SGN(APLHA) AS NEGU
063721,000319:
063722,000320: 21,3515 30063 CA NZACCDOT
063723,000321: 21,3516 00006 EXTEND
063724,000322: 21,3517 74740 MP BIT12 # 2*ACCDOT, SCALED AT PI/8.
063725,000323: 21,3520 60062 AD ITEMP2 # -ABS(ALPHA) + 2*ACCDOT, AT PI/8.
063726,000324: 21,3521 00006 EXTEND
063727,000325: 21,3522 63537 BZMF NOTALLOW # IS DRIVE TIME MORE THAN TWO SECONDS?
063728,000326: 21,3523 40062 CS ITEMP2 # NO. COMPUTE DRIVE TIME.
063729,000327: 21,3524 00006 EXTEND # ABS(ALPHA) AT PI/8.
063730,000328: 21,3525 73560 MP OCT00240 # DECIMAL 10/1024
063731,000329: 21,3526 00006 EXTEND # QUOTIENT IS DRIVE TIME AT WAITLIST.
063732,000330: 21,3527 10063 DV NZACCDOT # ABS(ALPHA)/ACCDOT AT 2(14)/100
|
Page 1474 |
063734,000332: 21,3530 00006 EXTEND
063735,000333: 21,3531 13533 BZF TGOFFNOW # DRIVE TIME MUST BE GREATER THAN ZERO.
063736,000334:
063737,000335: 21,3532 13545 TCF DRIVEON
063738,000336:
063739,000337: 21,3533 34755 TGOFFNOW CAF ZERO # TURN OFF GIMBAL NOW.
063740,000338: 21,3534 50066 INDEX QRNDXER
063741,000339: 21,3535 55500 TS NEGUQ
063742,000340:
063743,000341: 21,3536 13547 TCF DONEYET
063744,000342:
063745,000343: 21,3537 36010 NOTALLOW CAF OCT31
063746,000344: 21,3540 50066 INDEX QRNDXER
063747,000345: 21,3541 55630 TS QGIMTIMR
063748,000346: 21,3542 34755 CAF ZERO # DRIVE TIME IS MORE THAN 2 SECONDS, SO
063749,000347: 21,3543 55501 TS ALLOWGTS # DO NOT PERMIT FURTHER GTS ATTITUDE-RATE
063750,000348: # CONTROL UNTIL AOSTASK APPROVES.
063751,000349: 21,3544 13547 TCF DONEYET # NO WAITLIST CALL IS MADE.
063752,000350:
063753,000351: 21,3545 50066 DRIVEON INDEX QRNDXER
063754,000352: 21,3546 55630 TS QGIMTIMR # CHOOSE Q OR R AXIS.
063755,000353:
063756,000354: 21,3547 10066 DONEYET CCS QRNDXER
063757,000355: 21,3550 13456 TCF TIMQGMBL
063758,000356:
063759,000357: 21,3551 52073 DXCH RUPTREG3 # PROTECT IBNKCALL ERASABLES. ACDT+C12
063760,000358: 21,3552 52063 DXCH ITEMP2 # LEAVES ITEMPS2,3 ALONE.
063761,000359:
063762,000360: 21,3553 04674 TC IBNKCALL # TURN OF CHANNEL BITS, SET Q(R)ACCDOTS.
063763,000361: 21,3554 35721 CADR ACDT+C12
063764,000362:
063765,000363: 21,3555 52063 DXCH ITEMP2 # RESTORE ERASABLES FOR IBNKCALL.
063766,000364: 21,3556 52073 DXCH RUPTREG3
063767,000365:
063768,000366: 21,3557 00071 TC RUPTREG2 # RETURN TO CALLER.
063769,000367:
063770,000368: 21,3560 00240 OCT00240 OCTAL 00240 # DECIMAL 10/1024
063771,000369:
|
Page 1475 |
063773,000371: # THE FOLLOWING SECTION IS A CONTINUATION OF THE TRIM GIMBAL CONTROL FROM THE LAST GTS ENTRY. THE QUANTITY NEGUSUM
063774,000372: # IS COMPUTED FOR EACH AXIS (Q,R), .707*DEL*FUNCTION(3/2) + K2THETA = NEGUSUM. NEW DRIVES ARE ENTERED TO CH 12.
063775,000373:
063776,000374: 21,3561 11747 RSTOFGTS CCS FUNCTION
063777,000375: 21,3562 13603 TCF GOODARG # FUNCTION IS POSITIVE. GET 3/2 POWER.
063778,000376: 21,3563 13565 TCF +2 # HIGH ORDER WORD IS ZERO. TRY THE LOWER.
063779,000377: 21,3564 13571 TCF ZEROOT # NEGATIVE. USE ZERO FOR 3/2 POWER.
063780,000378:
063781,000379: 21,3565 41750 CS FUNCTION +1 # IF ARG IS LESS THAN 2(-18), THEN THE 3/2
063782,000380: 21,3566 64741 AD BIT11 # POWER IS LESS THAN 2(-27). USE ZERO.
063783,000381: 21,3567 00006 EXTEND
063784,000382: 21,3570 63574 BZMF ZEROHIGH # BRANCH IF ARG NOT LESS THAN 2(-18).
063785,000383:
063786,000384: 21,3571 00006 ZEROOT EXTEND
063787,000385: 21,3572 34756 DCA ZERO
063788,000386: 21,3573 13714 TCF NEGUSUM
063789,000387:
063790,000388: 21,3574 34317 ZEROHIGH CA FOURTEEN # ARG LESS THAN 2(-14) MEANS 3/2 POWER
063791,000389: # WILL BE LESS THAN 2(-21).
063792,000390: 21,3575 55737 TS SHFTFLAG
063793,000391:
063794,000392: 21,3576 34752 CA TWO
063795,000393: 21,3577 55740 TS ININDEX # INITIALIZE THE SHIFT LOOP.
063796,000394:
063797,000395: # COLLECT THE 14 MOST SIGNIFICANT BITS OF
063798,000396: 21,3600 57750 XCH FUNCTION +1 # THE 28 INTO THE HIGH ORDER WORD.
063799,000397: 21,3601 57747 XCH FUNCTION
063800,000398: 21,3602 13616 TCF SCALLOOP
063801,000399: 21,3603 35742 GOODARG CA TWELVE
063802,000400: 21,3604 55740 TS ININDEX # INITIALIZE THE SHIFT LOOP.
063803,000401: 21,3605 34755 CA ZERO # THERE ARE SIGNIFICANT BITS IN THE HIGH
063804,000402: 21,3606 55737 TS SHFTFLAG # ORDER WORD, SO SET SHFTFLAG TO ZERO.
063805,000403:
063806,000404: 21,3607 13616 TCF SCALLOOP
063807,000405:
063808,000406: 21,3610 31747 SCALSTRT CA FUNCTION
063809,000407: 21,3611 13633 TCF SCALDONE
063810,000408:
063811,000409: 21,3612 37745 MULBUSH CA NEG2 # IF ARG IS NOT LESS THAN 1/4, INDEX IS
063812,000410: 21,3613 27740 ADS ININDEX # ZERO, INDICATING NO SHIFT NEEDED.
063813,000411: 21,3614 00006 EXTEND # BRANCH IF ARG IS NOT LESS THAN 1/4.
063814,000412: 21,3615 63610 BZMF SCALSTRT # OTHERWISE COMPARE ARG WITH A REFERENCE
063815,000413: # WHICH IS 4 TIMES LARGER THAN THE LAST.
063816,000414: 21,3616 41747 SCALLOOP CS FUNCTION
063817,000415: 21,3617 51740 INDEX ININDEX
063818,000416: 21,3620 64735 AD BIT15 # REFERENCE MAGNITUDE LESS OR EQUAL TO 1/4
063819,000417: 21,3621 00006 EXTEND
063820,000418: 21,3622 63612 BZMF MULBUSH # IF ARG IS NOT LESS THAN REFERENCE, GO
063821,000419: # AROUND THE MULBERRY BUSH ONCE MORE.
063822,000420: 21,3623 51740 INDEX ININDEX
|
Page 1476 |
063824,000422: 21,3624 34735 CA BIT15 # THIS IS THE SCALE MAGNITUDE
063825,000423: 21,3625 56002 XCH Q # 2**(-ININDEX) IS THE SHIFT DIVISOR.
063826,000424: 21,3626 00006 EXTEND # RESCALE ARGUMENT.
063827,000425: 21,3627 31750 DCA FUNCTION
063828,000426: 21,3630 00006 EXTEND
063829,000427: 21,3631 10002 DV Q
063830,000428: 21,3632 55747 TS FUNCTION # ININDEX AND SHFTFLAG PRESERVE INFO FOR
063831,000429: # RESCALING AFTER ROOT PROCESS.
063832,000430: 21,3633 00006 SCALDONE EXTEND # AFTER 3/2 POWER IS TAKEN, SCALE FACTOR
063833,000431: 21,3634 74737 MP BIT13 # OF SQRT(1/2) WILL BE NEEDED, SO FACTOR
063834,000432: 21,3635 55743 TS HALFARG # OF 1/2 IS INCLUDED NOW, BEFORE SQRT.
063835,000433:
063836,000434: 21,3636 33761 CA STARTER # INITIAL GUESS FOR SQRT ALGORITHM.
063837,000435: 21,3637 03763 TC ROOTCYCL
063838,000436: 21,3640 03763 TC ROOTCYCL
063839,000437: 21,3641 03763 TC ROOTCYCL
063840,000438:
063841,000439: 21,3642 00006 EXTEND # SQRT(1/2)*SQRT(ARG) IN A.
063842,000440: 21,3643 71747 MP FUNCTION # SQRT(1/2)*ARG*SQRT(ARG) IN A,L.
063843,000441: 21,3644 53750 DXCH FUNCTION
063844,000442:
063845,000443: 21,3645 31737 DOSHIFT CA SHFTFLAG # HOW MANY SHIFT BITS ARE THERE?
063846,000444: 21,3646 61740 AD ININDEX # 2**(-ININDEX) WAS SHIFT DIVISOR.
063847,000445: 21,3647 54021 TS SR
063848,000446: 21,3650 60021 AD SR # THIS MANY SHIFTS ARE REQUIRED.
063849,000447: 21,3651 54002 SAVESHFT TS Q # Q BOUNDS ARE ZERO AND 24 (DECIMAL).
063850,000448: 21,3652 00006 EXTEND
063851,000449: 21,3653 63701 BZMF SUMNEGU # BRANCH IF SHIFTING IS UNNECESSARY.
063852,000450:
063853,000451: 21,3654 44317 CS FOURTEEN
063854,000452: 21,3655 60002 AD Q
063855,000453: 21,3656 00006 EXTEND # Q = 0(MOD 3), SO A REG IS NON-ZERO.
063856,000454: 21,3657 63664 BZMF MINISHIFT # BRANCH IF SMALL SHIFT SUFFICES.
063857,000455:
063858,000456: 21,3660 54002 MAXISHIFT TS Q # 14 BIT SHIFT RIGHT NOW.
063859,000457: 21,3661 34755 CA ZERO
063860,000458: 21,3662 57747 XCH FUNCTION
063861,000459: 21,3663 55750 TS FUNCTION +1
063862,000460:
063863,000461: 21,3664 50002 MINISHIFT INDEX Q # C(Q) ARE GREATER THAN ZERO.
063864,000462: 21,3665 34735 CA BIT15
063865,000463: 21,3666 54002 TS Q # 2**(-Q) WILL BE SHIFT MULTIPLIER.
063866,000464: 21,3667 00006 EXTEND
063867,000465: 21,3670 71750 MP FUNCTION +1
063868,000466: 21,3671 56001 XCH L
063869,000467: 21,3672 34755 CA ZERO
063870,000468: 21,3673 53750 DXCH FUNCTION # LOWER WORD SHIFTED NOW.
063871,000469: 21,3674 00006 EXTEND
063872,000470: 21,3675 63701 BZMF SUMNEGU # BRANCH IF UPPER WORD WAS ZERO.
|
Page 1477 |
063874,000472: 21,3676 00006 EXTEND # SHIFT UPPER WORD.
063875,000473: 21,3677 70002 MP Q
063876,000474: 21,3700 21750 DAS FUNCTION # NO OVERFLOW POSSIBLE.
063877,000475:
063878,000476: 21,3701 41745 SUMNEGU CS DEL # INCLUDE DEL FACTOR IN PRODUCT TERM.
063879,000477: 21,3702 00006 EXTEND
063880,000478: 21,3703 63707 BZMF SUMTERMS
063881,000479:
063882,000480: 21,3704 00006 EXTEND # DEL FACTOR IS MINUS ONE.
063883,000481: 21,3705 41750 DCS FUNCTION
063884,000482: 21,3706 13713 TCF NEGUSUM -1 # NOW ADD IN THE K2THETA TERM.
063885,000483:
063886,000484: 21,3707 00006 SUMTERMS EXTEND
063887,000485: 21,3710 13714 BZF NEGUSUM # BRANCH IF DEL IS ZERO.
063888,000486:
063889,000487: 21,3711 00006 EXTEND # DEL FACTOR IS +1.
063890,000488: 21,3712 31750 DCA FUNCTION
063891,000489: 21,3713 21736 DAS K2THETA # NOW ADD IN THE K2THETA TERM.
063892,000490: 21,3714 11735 NEGUSUM CCS K2THETA # TEST SIGN OF HIGH ORDER PART.
063893,000491: 21,3715 13721 TCF NEGDRIVE
063894,000492: 21,3716 13720 TCF +2
063895,000493: 21,3717 13723 TCF POSDRIVE
063896,000494:
063897,000495: 21,3720 11736 CCS K2THETA +1 # SIGN TEST FOR LOW ORDER PART.
063898,000496: 21,3721 34753 NEGDRIVE CA BIT1
063899,000497: 21,3722 13724 TCF +2 # STOP GIMBAL DRIVE FOR A ZERO NEGUSUM.
063900,000498: 21,3723 44753 POSDRIVE CS BIT1
063901,000499: 21,3724 54001 TS L # SAVE FOR DRIVE REVERSAL TEST.
063902,000500: 21,3725 51746 INDEX QRCNTR
063903,000501: 21,3726 57500 XCH NEGUQ
063904,000502:
063905,000503: 21,3727 00006 EXTEND
063906,000504: 21,3730 70001 MP L # MULTIPLY OLD NEGU AND NEW NEGU.
063907,000505: 21,3731 10001 CCS L
063908,000506: 21,3732 13747 TCF LOUPE # NON-ZERO GIMBAL DRIVE BEING CONTINUED.
063909,000507:
063910,000508: 21,3733 13744 TCF ZEROLOUP # NO REVERSAL PROBLEM HERE.
063911,000509:
063912,000510: 21,3734 13736 TCF REVERSAL # NON-ZERO GIMBAL DRIVE BEING REVERSED.
063913,000511: 21,3735 13744 TCF ZEROLOUP # NO REVERSAL PROBLEM HERE.
063914,000512:
063915,000513: 21,3736 51746 REVERSAL INDEX QRCNTR # A ZERO-DRIVE PAUSE IS NEEDED HERE. ZERO
063916,000514: 21,3737 55510 TS QACCDOT # IS IN A REGISTER FROM CCS ON (-1).
063917,000515: 21,3740 51746 INDEX QRCNTR
063918,000516: 21,3741 43760 CS GMBLBITA
063919,000517: 21,3742 00006 EXTEND
063920,000518: 21,3743 03012 WAND CHAN12
063921,000519:
063922,000520: 21,3744 41273 ZEROLOUP CS RCSFLAGS # SET UP REQUEST FOR ACDT+C12 CALL.
063923,000521: 21,3745 74747 MASK CALLGMBL
|
Page 1478 |
063925,000523: 21,3746 27273 ADS RCSFLAGS
063926,000524:
063927,000525: 21,3747 11746 LOUPE CCS QRCNTR # HAVE BOTH AXES BEEN PROCESSED?
063928,000526: 21,3750 13306 TCF GOQTRIMG # NO. DO Q AXIS NEXT.
063929,000527:
063930,000528: 21,3751 31476 CA SAVESR # RESTORE THE SR
063931,000529: 21,3752 54021 TS SR
063932,000530:
063933,000531: 21,3753 00006 GOCLOSE EXTEND # TERMINATE THE JASK.
063934,000532: 21,3754 33757 DCA CLOSEADR
063935,000533: 21,3755 52006 DTCB
063936,000534:
063937,000535: 21,3756 E6,1537 EBANK= AOSQ
063938,000536: 21,3756 03173 36106 CLOSEADR 2CADR CLOSEOUT # TERMINATE THE JASK.
063939,000537:
063940,000538: 21,3760 5742 TWELVE EQUALS OCT14
063941,000539: 21,3760 01400 GMBLBITA OCTAL 01400 # INDEXED WRT GMBLBITB DO NOT MOVE ******
063942,000540: 21,3761 20761 STARTER DEC .53033 # INITIAL VALUE FOR SQRT ALGORITHM.
063943,000541: 21,3762 06000 GMBLBITB OCTAL 06000 # INDEXED WRT GMBLBITA DO NOT MOVE ******
063944,000542:
063945,000543: # SUBROUTINE ROOTCYCL: BY CRAIG WORK,3 APRIL 68
063946,000544:
063947,000545: # ROOTCYCL IS A SUBROUTINE WHICH EXECUTES ONE NEWTON SQUARE ROOT ALGORITHM ITERATION. THE INITIAL GUESS AT THE
063948,000546: # SQUARE ROOT IS PRESUMED TO BE IN THE A REGISTER AND ONE-HALF THE SQUARE IS TAKEN FROM HALFARG. THE NEW APPROXI-
063949,000547: # MATION TO THE SQUARE ROOT IS RETURNED IN THE A REGISTER. DEBRIS: A,L,SR,SCRATCH. ROOTCYCL IS CALLED FROM
063950,000548: # LOCATION (LOC) BY A TC ROOTCYCL, AND RETURNS (TC Q) TO LOC +1.
063951,000549:
063952,000550: # WARNING: IF THE INITIAL GUESS IS NOT GREATER THAN THE SQUARE, DIVIDE OR ADD OVERFLOW IS A REAL POSSIBILITY.
063953,000551:
063954,000552: 21,3763 55742 ROOTCYCL TS SCRATCH # STORE X
063955,000553: 21,3764 54021 TS SR # X/2 NOW IN SR
063956,000554: 21,3765 31743 CA HALFARG # ARG/2 IN THE A REG
063957,000555: 21,3766 22007 ZL # PREPARE FOR DIVISION
063958,000556: 21,3767 00006 EXTEND
063959,000557: 21,3770 11742 DV SCRATCH # (ARG/X)/2
063960,000558: 21,3771 60021 AD SR # (X + ARG/X)/2 IN THE A REG
063961,000559: 21,3772 00002 TC Q
063962,000560:
063963,000561:
End of include-file TRIM_GIMBAL_CONTROL_SYSTEM.agc. Parent file is MAIN.agc