swh:1:snp:92f3f585b9ae79620ad8c41a332d6329b31fd381
Tip revision: 078c79d8734a9ed2860303a7c1662004284fe853 authored by Ron Burkey on 07 August 2022, 15:04:04 UTC
Fixed a potential string-overflow bug in yaASM. Removed timestamps from
Fixed a potential string-overflow bug in yaASM. Removed timestamps from
Tip revision: 078c79d
Q,R-AXES_REACTION_CONTROL_SYSTEM_AUTOPILOT.agc
### FILE="Main.annotation"
## Copyright: Public domain.
## Filename: Q_R-AXES_REACTION_CONTROL_SYSTEM_AUTOPILOT.agc
## Purpose: A module for revision 0 of BURST120 (Sunburst). It
## is part of the source code for the Lunar Module's
## (LM) Apollo Guidance Computer (AGC) for Apollo 5.
## Assembler: yaYUL
## Contact: Ron Burkey <info@sandroid.org>.
## Website: www.ibiblio.org/apollo/index.html
## Mod history: 2016-09-30 RSB Created draft version.
## 2016-10-30 RSB Transcribed through page 537.
## 2016-10-31 RSB Transcribed. Boo!
## 2016-10-31 RSB Typos.
## 2016-11-01 RSB More typos.
## 2016-11-02 RSB More typos.
## 2016-12-05 RSB Comment-proofing with octopus/ProoferComments
## completed, changes made.
## 2021-05-30 ABS Added missing EBANK= statement.
## NETAPOSB -> NEGAPOSB
## Page 519
BANK 17
# THE FOLLOWING T5RUPT ENTRY BEGINS THE PROGRAM WHICH CONTROLS THE Q,R-AXIS ACTION OF THE LEM USING THE RCS JETS.
# THE NOMINAL TIME BETWEEN THE Q,R-AXIS RUPTS IS 100 MS (UNLESS THE TRIM GIMBAL CONTROL SYSTEM IS USED, IN WHICH
# CASE THIS PROGRAM IS IDLE).
EBANK= DT
NULLFILT 2CADR FILDUMMY
EBANK= DT
QRAXIS CAF MS20QR # RESET TIMER IMMEDIATELY - DT = 20 MS
TS TIME5
LXCH BANKRUPT # INTERRUPT LEAD IN (CONTINUED)
EXTEND
QXCH QRUPT
# SET UP A DUMMY KALMAN FILTER T5RUPT. (THIS MAY BE RESET TO THE KALMAN FILTER INITIALIZATION PASS, IF THE TRIM
# GIMBAL CONTROL SYSTEM SHOULD BE USED.)
EXTEND
DCA NULLFILT
# START CODING FOR MODULE 3 REMAKE, AUGUST 1967***START CODING FOR MODULE 3 REMAKE, AUGUST 1967*******************
## In the original printout, the following line actually ended with a 1/2 symbol (½)
## rather than a question mark.
INSERT17 TCF TRMCHECK # ARE EXTRAORDINARY GTS ENTRIES NEEDED?
# **END CODING FOR MODULE 3 REMAKE, AUGUST 1967*****END CODING FOR MODULE 3 REMAKE, AUGUST 1967*******************
# CALCULATE LEM BODY RATES FOR Q AND R AXES:
# THIS COMPUTATION IS VALID FOR BOTH ASCENT AND DESCENT SINCE THE OFFSET ACCELERATION TERM IS INCLUDED ALWAYS,
# BUT HAS VALUE ZERO IN DESCENT, AND SINCE THE WEIGHTING FACTORS ARE IN ERASABLE AND DISTINCT.
# FIRST, CONSTRUCT Y AND Z CDU INCREMENTS:
BODYRATE CAE CDUY # 2:S COMPLEMENT MEASUREMENT SCALED AT PI.
TS L # (SAVE FOR UPDATING OF OLDYFORQ)
EXTEND # FORM INCREMENT IN CDUY FOR LAST 100 MS
MSU OLDYFORQ # (100 MS OLD CDUY SAVED FROM LAST PASS)
LXCH OLDYFORQ # UPDATE OLDYFORQ WITH NEW CDUY VALUE
TS ITEMP1 # SAVE 1:S COMPLEMENT VALUE TEMPORARILY
CAE CDUZ # 2'S COMPLEMENT MEASUREMENT SCALED AT PI
TS L # (SAVE FOR UPDATING OF OLDZFORQ)
EXTEND # FORM INCREMENT IN CDUZ FOR LAST 100 MS
MSU OLDZFORQ # (100 MS OLD CDUZ SAVED FROM LAST PASS)
LXCH OLDZFORQ # UPDATE OLDZFORQ WITH NEW CDUZ VALUE
TS ITEMP2 # SAVE 1'S COMPLEMENT VALUE TEMPORARILY
## Page 520
# SECOND, TRANSFORM CPU INCREMENTS TO BODY-ANGLE INCREMENTS:
CAE M31 # MATRIX*VECTOR(WITH x COMPONENT ZERO)
EXTEND
MP ITEMP1 # M31 * ITEMP1 = M31 * DELTA CDUY
DXCH ITEMP4
CAE M32 # M32 * ITEMP2 = M32 * DELTA CDUZ
EXTEND
MP ITEMP2 # DELTAR = M31*(DEL CDUY) + M32*(DEL CDUZ)
DAS ITEMP4 # DOUBLE PRECISION R BODY ANGLE INCREMENT
CAF BIT9
TS Q
EXTEND
DCA ITEMP4
EXTEND
DV Q # RESCALE TO PI/64 AND
TS ITEMP4 # STORE AS SINGLE PRECISION
CAE M21 # MATRIX*VECTOR(WITH X COMPONENT ZERO)
EXTEND # CLOBBERS ITEMP2=DEL CDUZ, FOR EFFICIENCY
MP ITEMP1 # M21 * ITEMP1 = M21 * DELTA CDUY
DXCH ITEMP2 # M22 * ITEMP2 = M22 * DELTA CDUZ
EXTEND
MP M22 # DELTAQ = M21*(DEL CDUY) + M22*(DEL CDUZ)
DAS ITEMP2 # DOUBLE PRECISION Q-BODY-ANGLE INCREMENT
EXTEND
DCA ITEMP2
EXTEND
DV Q # RESCALE TO PI/64
# FINALLY, DERIVE Q AND R BODY ANGULAR RATES:
EXTEND # WFORQR IS K/(NOMINAL DT) SCALED AT 16
MP WFORQR # FORM WEIGHTED VALUE OF MEASURED DATA
XCH OMEGAQ # SAVE AND BEGIN TO WEIGHT VALUE OF OLD W
EXTEND # (1-K) IS SCALED AT 1 FOR EFFICIENT CALC
MP (1-K) # (K CHANGES EVERY 2 SECONDS IN ASCENT.)
AD JETRATEQ # WEIGHTED TERM DUE TO JET ACCELERATION
AD AOSQTERM # TERM DUE TO ASCENT OFFSET ACCELERATION
ADS OMEGAQ # TOTAL RATE ESTIMATE SCALED AT PI/4
CAE ITEMP4 # GET DELTAR
EXTEND # WFORQR IS K/(NOMINAL DT) SCALED AT 16
MP WFORQR # FORM WEIGHTED VALUE OF MEASURED DATA
XCH OMEGAR # SAVE AND BEGIN TO WEIGHT VALUE OF OLD W
EXTEND # (1-K) IS SCALED AT 1 FOR EFFICIENT CALC
MP (1-K) # (K CHANGES EVERY 2 SECONDS IN ASCENT.)
AD JETRATER # WEIGHTED TERM DUE TO JET ACCELERATION
AD AOSRTERM # TERM DUE TO ASCENT OFFSET ACCELERATION
ADS OMEGAR # TOTAL RATE ESTIMATE SCALED AT PI/4
## Page 521
TC QJUMPADR
SKIPQRAX CA NORMQADR
TS QJUMPADR # DO NOT JUMP NEXT TIME.
TCF CHKGIMBL # CHKGIMBL ATTEMPTS TO USE GTS.
NORMQADR GENADR NORMALQ
NORMALQ TCF ATTSTEER # NO RHC INPUTS ON 206.
# START CODING FOR MODULE 3 REMAKE, AUGUST 1967***START CODING FOR MODULE 3 REMAKE, AUGUST 1967*******************
TRMCHECK DXCH T5ADR # SET UP NEXT T5RUPT ADDRESS.
# CHECK IF TRIMCNTR HAS BEEN COUNTED DOWN TO ZERO, INDICATING THAT 20.0 SECONDS HAVE PASSED SINCE DPS ON AND
# CONTROL SHOULD BE TRANSFERRED TO GTS. THEN SEE IF A RECENT ENGINE-ON REQUIRES AN EARLY GTS ENTRY.
## In the original printout, the following line actually ended with a 1/2 symbol (½)
## rather than a question mark.
CCS TRIMCNTR # IS GTS NEEDED PRIOR TO THROTTLE-UP?
TCF CHKMNITR # NOT YET, BUT CHECK IF FIRST GTS DONE.
TC CCSHOLE # ILLEGAL VALUE OF TRIMCNTR.
TCF INSERT17 +1 # NOT ACTIVE, RETURN TO RCS CONTROL.
## In the original printout, the following line actually ended with a 1/2 symbol (½)
## rather than a question mark.
OKAYGTS CAF USEQRJTS # YES, IS GIMBAL SYSTEM USABLE?
MASK DAPBOOLS
EXTEND
BZF GOGIMBAL # USABLE. GO TO GTS.
TCF INSERT17 +1 # NOT USABLE. GO ON WITH RCS CONTROL.
## In the original printout, the following line actually ended with a 1/2 symbol (½)
## rather than a question mark.
CHKMNITR CCS GTSMNITR # IS AN IMMEDIATE (FIRST) GTS CALLED FOR?
TCF OKAYGTS # YES, CHECK IF GIMBAL SYSTEM USABLE.
TCF INSERT17 +1 # NO, RETURN TO RCS CONTROL.
GOGIMBAL CS THREE # RESET TIME5 COUNTER FROM 20 TO 50 MSEC.
ADS TIME5
CS BGIM24 # TURN OFF GIMBALS FOR BETTER FILTERING.
EXTEND
WAND 12
CS BIT1 # DEACTIVATE GIMBAL DRIVE TIMERS
TS QGIMTIMR
TS RGIMTIMR
CAF ZERO
EXTEND
WRITE 5 # TURN OFF ALL Q,R AXIS JETS.
EXTEND
DCA ADRGOGTS
DTCB
EBANK= DT
ADRGOGTS 2CADR GOTOGTS +2 # TIME5 COUNTER WAS ALREADY ADVANCED.
# *** THE FOLLOWING NEW CODING IS NOT BEING USED ***
## Page 522
# LEFT IN PLACE AS FILLER)))MAY BE WRITTEN OVER
TC CCSHOLE # FILLER
TC CCSHOLE # FILLER
TC CCSHOLE # FILLER
TC CCSHOLE # FILLER
TC CCSHOLE # FILLER
TC CCSHOLE # FILLER
TC CCSHOLE # FILLER
TC CCSHOLE # FILLER
TC CCSHOLE # FILLER
EBANK= NEGUR
RGIMADR 2CADR OFFGIMR
GETCNTR CAE FORCETRM # LOAD TRIMCNTR TO FORCE TRIM JUST BEFORE
TS TRIMCNTR # THE THROTTLE-UP.
CAF BIT1 # ENABLE MONITOR TO CALL GTS AS SOON AS
TS GTSMNITR # POSSIBLE.
CAE SIMPINIT # INITIALIZE SIMPCNTR. DECISECONDS.
TS SIMPCNTR
EXTEND # RETURN TO ORIGINAL CODING
DCA INSRTADR
DTCB
TC CCSHOLE # THIS IS A FILLER
EBANK= PERROR
INSRTADR 2CADR INSERT20 +1
17INSRT CS /TEMP1/ # COMPARE Q WITH THE GENADR OF SWRETURN
AD SWRETADR # TO SEE IF ENGINOFF WAS CALLED VIA
EXTEND # BANKCALL OR IBNKCALL.
BZF 17INSRTB # *BANKCALL - DO NOT DELAY*
EXTEND # *IBNKCALL - CHECK FURTHER*
READ 30
COM # SEE IF ENGINE IN QUESTION IS APS OR DPS.
MASK BIT2
EXTEND
BZF 17INSRTB # *DPS ENGINE - DO NOT DELAY*
CS MODREG # *APS ENGINE - CHECK FURTHER*
AD MP3MMODE
EXTEND # SEE IF THIS IS THE MP 3 SHORT APS BURN.
BZF 17INSRTB # *IT IS - DO NOT DELAY*
CS DVMNEXIT # *IT IS NOT - CHECK FOR A FORGET2 ENTRY*
AD KILLAVEG
EXTEND
## Page 523
BZF 17INSRTD # GENADRS MATCH - CHECK THE BBCONS.
17INSRTE EXTEND
DCS /TEMP3/
DXCH RUPTREG3 # PUT MINUS (ENGINEON TIME) IN RUPTREGS
DXCH /TEMP5/ # AND SAVE FORMER CONTENTS FOR ISWRETRN.
EXTEND # BLEND IN THE CURRENT TIME.
DCA TIME2
DAS RUPTREG3
CAF HALF # FORCE SIGN AGREEMENT.
DOUBLE
AD RUPTREG4
TS RUPTREG4
CAF ZERO
AD NEGONE
ADS RUPTREG3
CA RUPTREG3 # SEE IF BURN HAS BEEN LONGER THAN
EXTEND # 163.84 SECONDS.
BZF 17INSRTC # *LESS THAN 163.84 SECONDS*
17INSRTA EXTEND # *MORE THAN 163.84 SECONDS*
DCA /TEMP5/
DXCH RUPTREG3 # RESTORE RUPTREGS FOR ISWRETRN.
17INSRTF CAF NEGMAX # SET TMINAPS NEGATIVE TO INACTIVATE
TS TMINAPS # THE ENGINOFF DELAY LOGIC
17INSRTB CA /TEMP2/ # RESTORE CALLERS EBANK.
TS EBANK
TC POSTJUMP # RETURN TO THE ENGINOFF SEQUENCE.
CADR ENGINOFF +1
17INSRTC CS RUPTREG4 # CHECK LENGTH OF BURN AGAINST TMINAPS.
AD TMINAPS
EXTEND
BZMF 17INSRTA # BURN IS LONG ENOUTH - DO THE ENGINOFF.
TC WAITLIST # SUSPEND CURRENT MISSION PHASE AND SET
EBANK= TMINAPS # WAITLIST FOR RESUMPTION AT THE PROPER
2CADR 17INSRTA # TIME.
TC TASKOVER
17INSRTD CS DVMNEXIT +1
AD KILLAVEG +1
EXTEND
BZF 17INSRTF # BBCONS MATCH - DO NOT DELAY
## Page 524
TCF 17INSRTE
SWRETADR GENADR SWRETURN
MP3MMODE OCT 00071 # MAJOR MODE OF MISSION PHASE 3.
EBANK= LST1
KILLAVEG 2CADR AVEGKILL
# FOLLOWING CODING LEFT IN PLACE TO KEEP ADDRESSES CONSTANT.
# **END CODING FOR MODULE 3 REMAKE, AUGUST 1967*****END CODING FOR MODULE 3 REMAKE, AUGUST 1967*******************
NOQJETS TC CCSHOLE # LABEL PREVENTS ASSEMBLER CUSSES.
TCF XTRANS
TCF R-,CHKDB
TCF XTRANS
NEGQEROR AD -RATEDB
EXTEND
BZMF NOQJETS
CCS RRATEDIF
TCF R+Q-CHKR
TCF Q-NORJTS
TCF R-Q-CHKR
Q-NORJTS CS QRATEDIF
TS RATEDIF
AD -2JETLIM
EXTEND
BZMF 2JETS+Q
TCF 4JETS+Q
R+Q-CHKR AD -RATEDB
EXTEND
BZMF Q-NORJTS
TC EDOTVGEN
TCF 2-V.RATE
R-Q-CHKR AD -RATEDB
EXTEND
BZMF Q-NORJTS
TC EDOTUGEN
EXTEND
SU RRATEDIF
TCF 2+U.RATE
POSQEROR AD -RATEDB
EXTEND
## Page 525
BZMF NOQJETS
CCS RRATEDIF
TCF R+Q+CHKR
TCF Q+NORJTS
TCF R-Q+CHKR
Q+NORJTS CA QRATEDIF
TS RATEDIF
AD -2JETLIM
EXTEND
BZMF 2JETS-Q
TCF 4JETS-Q
R+Q+CHKR AD -RATEDB
EXTEND
BZMF Q+NORJTS
TC EDOTUGEN
TCF 2-U.RATE
R-Q+CHKR AD -RATEDB
EXTEND
BZMF Q+NORJTS
TC EDOTVGEN
TCF 2+V.RATE
R+,CHKDB AD -RATEDB
EXTEND
BZMF XTRANS
CA RRATEDIF
TS RATEDIF
AD -2JETLIM
EXTEND
BZMF 2JETS-R
TCF 4JETS-R
R-,CHKDB AD -RATEDB
EXTEND
BZMF XTRANS
CS RRATEDIF
TS RATEDIF
AD -2JETLIM
EXTEND
BZMF 2JETS+R
TCF 4JETS+R
RTJETIME CCS RATEDIF # SCALED AT PI/4 RADIANS/SECOND
AD ONE
TCF +2
AD ONE # ABS(RATEDIF)
## Page 526
EXTEND
MP 1/NJETAC # SCALED AT 2(8)/PI SECOND(2)/RADIANS
EXTEND
MP BIT4 # SCALED AT 2(3) SECONDS
CAE L
EXTEND
MP 25/32.QR # TJET NOW PROPERLY SCALED IN A
TS TQR # AT 2(4)16/25 SECONDS
TCF MNIMPTST
## Page 527
# DAP SECTION: XTRANS MOD. NO. 3 DATE: JANUARY 6, 1967.
# AUTHOR: JOHN S. BLISS (ADAMS ASSOCIATES)
# MODIFICATION BY: JONATHAN D. ADDELSTON (ADAMS ASSOCIATES)
# X-AXIS TRANSLATION LOGIC (IN THE ABSENSE OF Q,R-AXIS ROTATION) IS INITIATED IN THE "XTRANS" SECTION.
# XTRANS FIRST SETS ADDTLT6 AND ADDT6JTS TO ZERO FOR USE BY "JTLST" AND "T6JOB" WHEN THEY ARE CALLED. IT THEN
# CHECKS FOR PLUS OR MINUS X TRANSLATION REQUESTS FROM THE ASTRONAUT'S STICK. IF NONE IS REQUESTED IN THAT WAY,
# THE ULLAGE BIT OF DAPBOOLS IS CHECKED. (NOTE THAT THE ORDER OF THE TESTS ALLOWS THE ASTRONAUT TO OVERRIDE THE
# INTERNAL ULLAGE REQUEST.) IF NO TRANSLATION IS REQUESTED, ALL Q,R-AXIS JETS ARE TURNED OFF AND THE INTERRUPT
# IS TERMINATED.
# CALLING SEQUENCE: NONE SUBROUTINES CALLED: WRITEQR
# NORMAL EXIT: 1. IF NO TRANSLATION, RESUME.
# 2. IF TRANSLATION OR ULLAGE, +/-XTRAN
# ALARM/ABORT MODE: NONE.
# INPUT: ULLAGER/DAPBOOLS,BITS7,8/CHANNEL 31.
# OUTPUT: C(ANYTRANS) = NEGMAX FOR +X TRANSLATION.
# C(ANYTRANS) = POSMAX FOR -X TRANSLATION.
# C(TRANSNOW) = C(TRANSAVE) = +0.
# C(TRANONLY) = PNZ
# C(ADDTLT6), C(ADDT6JTS), C(TQR), C(TOFJTCHG) = 0.
# C(CHANNEL 5) = 0 IF NO X-TRANSLATION REQUESTED
# DEBRIS: A, L, Q
XTRANS CAF ZERO # PICK UP ZERO AND INITIALIZE
TS ADDTLT6
TS ADDT6JTS
TS TOFJTCHG
TS TQR # A ZERO OF JET TIME FOR THE TORQUE VECTOR
CAF BIT7 # IS PLUS X TRANSLATION DESIRED
EXTEND
RAND 31 # CHANNEL 31 BITS INVERTED
EXTEND
BZF +XORULGE # YES, +X
CAF BIT8 # NO, IS MINUS X TRANSLATION DESIRED
EXTEND
RAND 31 # CHANNEL 31 BITS INVERTED
## Page 528
EXTEND
BZF -XTRANS # YES, -X
CAF BIT6 # NO, IS ULLAGE(+X TRANSLATION) DESIRED
MASK DAPBOOLS
CCS A
TCF +XORULGE # YES, ULLAGE
CAF ZERO # SINCE NEITHER ROTATION NOR TRANSLATION
TC WRITEQR # ARE NEEDED, TURN OFF ALL Q,R-AXES JETS.
TCF RESUME
+XORULGE CAF NEGMAX # PLUS TRANSLATION OR ULLAGE DESIRED:
TCF +2 # LOAD NEGMAX IN A AND SKIP NEXT OPCODE TO
-XTRANS CAF POSMAX # -X TRANSLATION DESIRED, A = POSMAX, AND
TS ANYTRANS # LOAD ANYTRANS WITH A(NEG/POS MAX)
CAF ZERO # INITIALIZE TRANSNOW AND TRANSAVE WITH
TS TRANSNOW # ZERO FOR USE IN THE JET POLICY SELECTION
TS TRANSAVE # PROGRAM.
EXTEND # SET UP 2CADR FOR TRANSFER TO +/-XTRAN.
DCA JTPOLADR
TS TRANONLY # STORE POSITIVE, NON-ZERO S-REGISTER IN
DTCB # TRANONLY. AFTER +/-XTRAN, GO TO JTLST.
EBANK= JTSONNOW
JTPOLADR 2CADR +/-XTRAN # TRANSLATION ONLY ENTRY TO JET POLICY
## Page 529
# ALL Q,R AXES TQR COMPUTATIONS TERMINATE IN THIS PROGRAM WHICH PERFORMS A SERIES OF TESTS TO DETERMINE THE TRUE
# TIME THE JETS SHOULD BE ON. THESE TESTS ARE AS FOLLOWS ...
# 1. TEST THE ON TIME AGAINST THE 7.5 MS ELECTRICAL COMMAND (MIN).IF THE ON TIME IS LESS THAN THE MINIMUM
# WE BUG OUT TO XTRAN,WHERE X TRANSLATION IS DONE(IF NEEDED).
# 2. TEST THE ON TIME AGAINST 150 MS, IF TQR IS GREATER THAN 150MS ,THEN THE NEXT QR AXIS IS DONE IN 100 MS.
# IF TQR IS LESS THAN 150 MS, THEN THE NEXT QR AXIS IS DONE IN 200 MS. THAT IS A QR AXIS SKIP IS DONE.
# 3. WHEN TQR IS LESS THAN 150 MS THE PROGRAM GOES TO THE JET LIST PROGRAM WHERE THE T6 CLOCK IS SET UP.
# 4. BEFORE GOING TO THE JET LIST THE COMPUTED TIME HAS EITHER 7.5 MS ADDED OR 5MS SUBTRACTED-THE EXACT
# OPERATION BEING DECIDED BY WHETHER THE JETS WHICH ARE TO GO ON ARE OFF OR ARE ON RESPECTIVELY.
# 5. IF SOME OF THE JETS WHICH ARE TO GO ON ARE NOW ON AND SOME ARE OFF, THEN A ******* COMPUTATION CALLED
# NOTRANS DECIDES WHICH JETS GO OFF AT TQR AND WHICH GO OFF AT TQR+6.5MS. THIS 6.5 MS. IS STORED IN
# ADDTLT6. ADDTLT6 IS SET TO ZERO OTHERWISE.
NORMRETN TS TQR
MNIMPTST CS TQR # TEST FOR TQR GREATER THAN MIN. IMPULSE.
AD +T6TJMIN
EXTEND # CORRECT BRANCH.
BZMF TQRGTTMI # BRANCH FOR TQR = OR GREATER THAN MINIMP.
TCF XTRANS # SEE IF TRANSLATION IS DESIRED .
TQRGTTMI CAE TQR # HERE JETS ON FOR LONGER THAN GRUMANN
TS TOFJTCHG # MINIMUM IMPULSE SPECIFICATIONS.
AD -1.5CSP
EXTEND
BZMF DOQRSKIP
CAE JTSONNOW
TC WRITEQR
TCF RESUME
SKIPQRAD GENADR SKIPQRAX
# CHANGE JET ON AND OFF BITS TO ACCOUNT FOR THE PRESENT STATE OF THE
# CHANNEL. THE CHANGES ACCOUNT FOR PURE ROTATION ONLY- NOT TRANSLATION.
DOQRSKIP CA JTSONNOW
EXTEND
RAND 5 # MASK THE CHANNEL WITH THE DESIRED STATE.
FROMROOT EXTEND # ENTER HERE FROM DORUTDUM (IN K.E. BANK)
BZF NOQRON # A IS ZERO IF NO JETS TO GO ON ARE ON.
AD BIT15 # MAKE DIFFERENCE CORRESPOND TO A QR JET.
EXTEND
SU JTSONNOW # RESULT IS COMPLEMENT OF JET BITS WHICH
TS L # ARE TO BE ON FOR 6.5MS MORE THAN CALC.
EXTEND
BZF JTSAREON # A=0,THUS ALL JETS TO GO ON ARE NOW ON.
## Page 530
TRSLTMN2 CAE JTSATCHG
MASK POSMAX # REMOVE BIT15 FROM JTSATCHG.
EXTEND
BZF NOTRANS # IF JTSATCHG = 0 THEN NO TRANSLATION NOW.
CA 14-TQRMN
ADS TOFJTCHG # INSURE T GREATER THAN 14 MS.
TCF TOJTLST
NOTRANS CS L
AD BIT15 # MAKE JET BITS CORRESPOND TO QR AXIS.
XCH JTSATCHG # JTSONNOW - L = JETS ON AT TOFJTCHG.
TS ADDT6JTS # JTS ON AT TOFJTCHG +ONDELAY.
CA 14-TQRMN
TS ADDTLT6
TCF TOJTLST
NOQRON CA 14-TQRMN
ADS TOFJTCHG
TCF TOJTLST -2
JTSAREON CAE JTSATCHG
MASK POSMAX
EXTEND
BZF +2
TCF TOJTLST -2
CAF MCOMPTQR
ADS TOFJTCHG
EXTEND # TEST FOR COMPUTATION OF NEGATIVE OR ZERO
BZMF QUICKOFF # TOFJTCHG, IF SO, MAKE -0.
-2 CAF ZERO
TS ADDTLT6
TOJTLST CA SKIPQRAD
TS QJUMPADR
CAE JTSONNOW # TURN ON JETS TO GO ON NOW (EVEN IF ALL
TC WRITEQR # ARE ALREADY ON), AFTER TESTING FOR RISE.
EXTEND
DCA JTLSTADR
DTCB
QUICKOFF CS TOFJTCHG # SET TOFJTCHG TO -0 IN SHORTEST WAY.
TCF NOQRON +1
-1.5CSP DEC -0.01465
+T6TJMIN DEC +.00073
25/32.QR DEC 0.78125
MS20QR OCTAL 37776
MS30QR OCTAL 37775
MS50QR OCTAL 37773
16/32400 DEC 0.00049
BIT8,9 OCTAL 00600
MCOMPTQR DEC -16 # -10 MS SCALED AS TIME6.
14-TQRMN DEC 11
# START CODING FOR MODULE 3 REMAKE, AUGUST 1967***START CODING FOR MODULE 3 REMAKE, AUGUST 1967*******************
## Page 531
MINTADR GENADR CCSHOLE
# **END CODING FOR MODULE 3 REMAKE, AUGUST 1967*****END CODING FOR MODULE 3 REMAKE, AUGUST 1967*******************
-.88975 DEC -.88975
(1-K),QR DEC 0.50000 # K = 1/2
(1-KQ)/8 DEC 0.06250
-90MS DEC -.00879
+90MS DEC 0.00879
NEGCSP2 DEC -.00977
ALL+XJTS OCTAL 40252
2,10-OUT OCTAL 00201
+X,A OCTAL 40042
+X,B OCTAL 40210
1,9-OUT OCTAL 00104
-X,A OCTAL 40104
-X,B OCTAL 40021
EBANK= JTSONNOW
JTLSTADR 2CADR JTLST
RTJETADR GENADR RTJETIME
## Page 532
# Q,R-AXES ATTITUDE STEERING CALCULATIONS:
# (EXECUTED WHEN LGC IS IN AUTOMATIC SCSMODE OR IF SCSMODE IS ATTITUDE HOLD AND THE ROTATIONAL HAND CONTROLLER IS
# NEITHER OUT OF DETENT NOR IS THE RATE COMMAND BIT SET IN DAPBOOLS)
CHKGIMBL EXTEND
DCA TRYGTSAD # TRYGTS ATTEMPTS GTS CONTROL.
DXCH Z
TC CCSHOLE
BGIM24 OCTAL 07400
DESCADR GENADR TJETLAW
EBANK= DT
TRYGTSAD 2CADR TRYGTS # TRYGTS ATTEMPTS GTS CONTROL.
## Page 533
# "ATTSTEER" IS THE NOMINAL ENTRY POINT FOR REACTION CONTROL SYSTEM ATTITUDE STEERING
ATTSTEER EQUALS QERRCALC
QERRCALC CAE CDUY # Q-ERROR CALCULATION
EXTEND
MSU CDUYD # CDU ANGLE - ANGLE DESIRED (Y-AXIS)
TS ITEMP1 # SAVE FOR RERRCALC
EXTEND
MP M21 # (CDUY-CDUYD)*M21 SCALED AT PI RADIANS
XCH ER # SAVE FIRST TERM (OF TWO) IN OPP.AXIS REG
CAE CDUZ # SECOND TERM CALCULATION:
EXTEND
MSU CDUZD # CDU ANGLE -ANGLE DESIRED (Z-AXIS)
TS ITEMP2 # SAVE FOR RERRCALC
EXTEND
MP M22 # (CDUZ-CDUZD)*M22 SCALED AT PI RADIANS
ADS ER # SAVE SUM OF TERMS, NO OVERFLOW EVER
TS QERROR # SAVE QERROR FOR EIGHT-BALL DISPLAY
RERRCALC CAE ITEMP1 # R-ERROR CALCULATION:
EXTEND # CDU ANGLE -ANGLE DESIRED (Y-AXIS)
MP M31 # (CDUY-CDUYD)*M31 SCALED AT PI RADIANS
XCH E # SAVE FIRST TERM (OF TWO) IN OPP.AXIS REG
CAE ITEMP2 # SECOND TERM CALCULATION:
EXTEND # CDU ANGLE -ANGLE DESIRED (Z-AXIS)
MP M32 # (CDUZ-CDUZD)*M32 SCALED AT PI RADIANS
ADS E # SAVE SUM OF TERMS, NO OVERFLOW EVER
TS RERROR # SAVE R-ERROR FOR EIGHT-BALL DISPLAY
TCF STILLRCS
# THIS CODING IS ENTERED FROM BURGZERO, WHEN BOTH URGENCIES ARE ZERO. EXITS TO GTS IF POSSIBLE, XTRANS OTHERWISE
GIMBLTRY CAF USEQRJTS # IS JET USAGE MANDATORY.
MASK DAPBOOLS
CCS A
TCF XTRANS # YES. GO TO XTRANS.
EXTEND # ARE GIMBALS DRIVING?
READ 12
MASK BGIM24 # BITS 9,10,11,12 ARE GIMBAL DRIVE BITS.
CCS A
TCF XTRANS # YES. DRIVING. GO TO XTRANS.
EXTEND # NO. CHECK JETS.
READ 5 # ARE ANY Q,R JETS ON NOW.
# (CAN ONLY BE ROTATION JETS.)
EXTEND
BZF XTRANS # NO. GO TO XTRANS.
## Page 534
CAF ZERO # YES. TURN OFF JETS.
EXTEND
WRITE 5
EXTEND # NO. GO TO GTS.
DCA GOGTSADR
DXCH Z
EBANK= DT
GOGTSADR 2CADR GOTOGTS
# REMAINING CODING (HERE TO STILLRCS) STAYS IN TO KEEP ADDRESSES CONSTANT.
TC CCSHOLE # FILLER.
TCF STILLRCS # NO. SO USE RCS.
INDEX QRCNTR # YES. TRY THE ERROR MAGNITUDE.
CCS QDIFF # IS ERROR SMALL ENOUGH FOR GTS.
AD -XBND+1 # -1.4 DEG SCALED AT PI + 1 BIT
TCF +2
AD -XBND+1
EXTEND
BZMF +2 # IS ERROR LESS,EQUAL 1.4 DEG.
TCF STILLRCS # NO. USE RCS CONTROL.
CCS QRCNTR # THIS AXIS IS FINE. ARE BOTH DONE.
TC CCSHOLE # REMOVE REFERENCE TO ELIMINATED SYMBOL.
TC CCSHOLE # FILLER.
-RATLM+1 OCT 77512 # -.5 DEG/SEC SCALED AT PI/4 + 1 BIT
-XBND+1 OCT 77601 # -1.4 DEG SCALED AT PI, + 1 BIT.
# "STILLRCS" IS THE ENTRY POINT TO RCS ATTITUDE STERRING WHENEVER IT IS FOUND THAT THE TRIM GIMBAL CONTROL
# SYSTEM SHOULD NOT BE USED;
## Page 535
# Q,R-AXES RCS URGENCY FUNCTION LOGIC:
STILLRCS CCS DAPBOOLS # BRANCH TO SPS-BACKUP RCS CONTROL LOGIC.
TCF SPSBAKUP # WHEN BIT15/DAPBOOLS = 0.
NOOP
CAF DESCADR # SET JET SELECT LOGIC RETURN ADDRESS TO
TS TJETADR # THE Q,R-AXIS TJETLAW CALCULATION
TC T6JOBCHK # CHECK T6 CLOCK RUPT BEFORE SUBROUTINE
# CALCULATE THE RATE ERRORS SCALED AT PI/4 RADIANS/SECOND(2):
CS OMEGAQD
AD OMEGAQ # EDOTQ = OMEGAQ - OMEGAQD
TS EDOTQ
CS OMEGARD
AD OMEGAR # EDOTR = OMEGAR - OMEGARD
TS EDOTR
## Page 536
# Q,R-AXES URGENCY FUNCTION LOOP:
# SET UP LOOP TO DO R-AXIS, THEN Q-AXIS:
CAF ONE # 1: REFERS TO R-AXIS VARIABLES.
TS AXISCNTR # 0: REFERS TO Q-AXIS VARIABLES.
# PICK UP EDOT AND RESCALE FROM PI/4 TO PI/16 RADIANS/SECOND:
URGLOOP INDEX AXISCNTR # ERROR RATES ARE PRE-CALCULATED BY RATE
CAE EDOTQ # DERIVATION SCALED AT PI/4 RADIANS/SECOND
EXTEND # MULTIPLYING BY FOUR (BIT3) LEAVES EDOT
MP FOUR # AS C(L) IF EDOT LESS THAN 11.25 DEG/SEC.
EXTEND
BZF +2 # IF C(A) NON-ZERO, THEN EDOT GREATER THAN
TCF EDOTMAX # 11.25 DEG/SEC IN MAGNITUDE, SO LIMIT IT.
CCS L # INSURE NON-ZERO EDOT:
AD TWO # C(L) PNZ REMAINS UNCHANGED.
TCF +2 # C(L) NNZ REMAINS UNCHANGED.
COM # C(L) +0 BECOMES 77776.
AD NEG1 # C(L) -0 BECOMES 77776.
EDOTSTOR TS EDOT # SAVE NON-ZERO EDOT SCALED AT PI/16.
EXTEND # CALCULATE (EDOT)(EDOT):
SQUARE
TS EDOT(2) # SCALED AT PI(2)/2(+8) RAD(2)/SEC(2).
EXTEND # 0.5 +8 2
INDEX AXISCNTR # ------ SCALED AT 2 /PI SEC /RAD.
MP 1/ACCQ # ACCQ,R
EXTEND # DEADBAND = 5.0 OR 1.0 OR 0.3 DEGREES
SU DB # SCALED AT PI RADIANS.
TS FPQR # 0.5(1/ACC)EDOT(2)-DB SCALED AT PI RADS.
CAE EDOT(2) # SCALED AT PI(2)/2(8) RAD(2)/SEC(2).
EXTEND
INDEX AXISCNTR
MP 1/AMINQ # .5(1/ACCMIN) AT 2(8)/PI SEC(2)/RAD.
AD DB # DEADBAND SCALED AT PI RADIANS.
TS FPQRMIN # .5(1/ACCMIN)EDOT(2)+DB SCALED AT PI RAD.
CCS EDOT # EDOT TEST ON SIGN (NON-ZERO):
CAE E # ATTITUDE ERROR FOR THIS AXIS
TCF +2 # SCALED AT PI RADIANS.
TCF EDOTNEG
ADS FPQR # E+0.5(1/ACC)EDOT(2)-DB SCALED AT PI RAD.
FTEST CCS EDOT # EDOT GUARANTEED NOT +0 OR -0.
CCS FPQR # FPQR GUARANTEED NOT +0.
## Page 537
TCF QUICKURG # EDOT.G.+0, FPQR.G.+0.
CCS FPQR # EDOT.L.-0.
TCF FMINCALC # EDOT.L.-0,FPQR.G.+0/EDOT.G.+0,FPQR.L.-0.
TCF FMINCALC # EDOT.G.+0,FPQR.E.-0 (FROM FIRST CCS).
TCF QUICKURG # EDOT.L.-0,FPQR.L.-0.
QUICKURG CAE EDOT # EDOT.L.-0,FPQR.E.-0 (FROM 2ND CCS).
EXTEND # SCALE FROM PI/16 TO PI RADIANS/SECOND
MP BIT11 # TO HAVE SAME SCALING AS FPQR AFTER THE
AD FPQR # IMPLICIT MULT. OF FPQR BY 1/SEC.
TCF URGMULT # THIS URGENCY = (1/ACC)(FPQR+EDOT).
EDOTMAX CCS A # GUARANTEED NOT +0 OR -0.
CAF POSMAX
TCF EDOTSTOR # SET EDOT TO SIGNED MAXIMUM.
CS POSMAX
TCF EDOTSTOR # SCALED AT PI/16 RADIANS/SECOND.
EDOTNEG CS FPQR # SCALED AT PI RADIANS
AD E # ATTITUDE ERROR FOR THIS AXIS
TS FPQR # E-0.5(1/ACC)EDOT(2)+DB SCALED AT PI RAD.
TCF FTEST
FMINCALC CCS FPQR # NECESSARY RETEST ON FPQR;
CS FPQRMIN
TCF +2 # E-0.5(1/ACCMIN)EDOT(2)-DB
CAE FPQRMIN
AD E # E+0.5(1/ACCMIN)EDOT(2)+DB
TS FPQRMIN # SCALED AT PI RADIANS.
CCS EDOT # EDOT GUARANTEED NOT +0 OR -0.
CCS FPQRMIN # FPQRMIN GUARANTEED NOT +0 (CALL IT F).
TCF ZEROURG # EDOT.G.+0, F.G.+0.
CCS FPQRMIN # EDOT.L.-0.
TCF NORMURG # EDOT.L.-0, F.G.+0 / EDOT.G.+0, F.L.-0.
TCF NORMURG # EDOT.G.+0, F.E.-0 (FROM FIRST CCS).
TCF ZEROURG # EDOT.L.-0, F.L.-0.
ZEROURG EXTEND # EDOT.L.-0, F.E.-0 (FROM 2ND CCS).
DCA DPZEROY # THIS URGENCY IS ZERO.
DXCH URGENCYQ
TCF MOREURG # TEST FOR NEXT AXIS
NORMURG CAE FPQRMIN # THIS URGENCY IS FPQRMIN(1/ACC).
URGMULT EXTEND
INDEX AXISCNTR
MP 1/ACCQ
DXCH URGENCYQ # SAVE D.P. SCALED AT 2(+9).
MOREURG CCS AXISCNTR # TEST FOR END OF LOOP
TCF +2 # CONTINUE.
## Page 538
TCF URGSCALQ # FINISHED.
TS AXISCNTR # Q-AXIS
EXTEND
DCA URGENCYQ # SET URGENCYR
DXCH URGENCYR
DXCH E # SET ER,EDOT(2)R
DXCH ER
TS EQ # SET EQ
CAE EDOT
TS EDOT(R) # SET EDOT(R).
TCF URGLOOP # CONTINUE.
# SUFFICIENT TEST FOR URGENCY RESCALING:
URGSCALR CCS URGENCYR # IF ABVAL(URGENCYR) LESS THAN SCALE BOUND
AD SCALEBND
TCF +2 # THEN BOTH URGENCIES CAN BE RESCALED FROM
AD SCALEBND
EXTEND # 2(+9) TO 2(+4) SECONDS.
BZMF URGSCALE
TCF URGLIMS
# RESCALE BOTH URGENCIES FROM 2(+9) TO 2(+4) SECONDS:
URGSCALE CAE URGENCYQ # SHIFT D.P. URGENCYQ LEFT 5-PLACES TO
EXTEND # FORM S.P. URGENCYQ NOW SCALED AT 16 SECS
MP BIT6
LXCH URGENCYQ
CAE URGENCYQ +1
EXTEND
MP BIT6
ADS URGENCYQ
CAE URGENCYR # SHIFT D.P. URGENCYR LEFT 5-PLACES TO
EXTEND # FORM S.P. URGENCYR NOW SCALED AT 16 SECS
MP BIT6
LXCH URGENCYR
CAE URGENCYR +1
EXTEND
MP BIT6
ADS URGENCYR
CAE URGLM2 # SET URGENCY LIMIT FOR 2(+4) SCALING.
TCF URGFUDGE
SCALEBND OCTAL 77400 # -8 SECONDS SCALED AT 2(+9).
## Page 539
DPZEROY 2DEC 0
# NECESSARY TEST FOR URGENCY RESCALING:
URGSCALQ CCS URGENCYQ # IF ABVAL(URGENCYQ) LESS THAN SCALE BOUND
AD SCALEBND
TCF +2 # THEN TEST URGENCYR FOR RESCALABLE
AD SCALEBND
EXTEND # MAGNITUDE.
BZMF URGSCALR
URGLIMS CAE URGLM1 # SET URGENCY LIMIT FOR 2(+9) SCALING.
URGFUDGE TS URGLIMIT
# USE URGENCY FUNCTION CORRECTION FACTOR WHEN NECESSARY:
CCS AOSQ # IF C(AOSQ) ZERO OR IF C(URGENCYQ) ZERO,
CS URGENCYQ # THEN IT IS CLEARLY UNNECESSARY TO FUDGE.
TCF +2 # WHILE MAKING THIS TEST, WE CALCULATE
CAE URGENCYQ # -SIGN(AOSQ)(URGENCYQ) WHICH IF POSITIVE
EXTEND # INDICATES THAT WE ARE TRYING TO FIGHT
BZMF URGFUDG1 # THE EFFECT OF AOSQ, SO WE DO NOT FUDGE.
CAE URGRATQ # HERE WE KNOW THAT AOSQ WILL ACTUALLY
EXTEND # HELP THE RCS JETS MANEUVER FOR THIS AXIS
MP URGENCYQ # FOR THIS CSP, MULTIPLYING BY URGRATQ
TS URGENCYQ # REDUCES URGENCYQ APPROPRIATELY ENOUGH.
URGFUDG1 CCS AOSR # HERE WE DO THE SAME LOGIC FOR THE R-AXIS
CS URGENCYR # COMPUTATIONS AS WE DID FOR THE Q-AXIS AT
TCF +2 # URGFUDGE. RATHER THAN REPEAT THE ABOVE
CAE URGENCYR # COMMENTS, WE PROVIDE A BIT OF FURTHER
EXTEND # EXPLANATION; FIRST, ONLY A S.P. URGENCY
BZMF URGPLANE # IS SAVED IF WE DO THE FUDGE, SINCE ONLY
CAE URGRATR # S.P. URGENCIES ARE REFERENCED BELOW AND
EXTEND # NO D.P. ACCURACY IS NEEDED. SECOND, BY
MP URGENCYR # BY MULTIPLYING BY THE FUDGE RATIO DURING
TS URGENCYR # APS BURNS, WE PREVENT SOME RCS FIRINGS
# WHICH WOULD OVER-CORRECT DUE TO THE AOS.
URGPLANE CAE URGENCYQ # BEGIN URGENCY-PLANE COMPUTATIONS:
EXTEND
BZF BURGZERO # TEST FOR BOTH URGENCIES ZERO
EXTEND
MP -TAN22.5
AD URGENCYR
EXTEND
MP COS22.5
## Page 540
TS TERMA # UR.COS(22.5)-UQ.SIN(22.5)
CS URGENCYR
EXTEND
MP -TAN22.5
AD URGENCYQ
EXTEND
MP COS22.5
TS TERMB # UR.SIN(22.5)+UQ.COS(22.5)
A+B/A-B AD TERMA
TS A+B
A-B/ONLY CS TERMB
AD TERMA
TS A-B
# AXIS AND MODE SELECTION
CAE TERMB # B URGENCY TEST
EXTEND
BZMF NEGBURG
POSBURG CAE TERMA # A URGENCY TEST
EXTEND
BZMF NEGAPOSB
POSAPOSB CAE A-B
EXTEND
BZMF MINUSU # NEGATIVE U-AXIS SELECTED
2/4JET-R CAE 1/AMINR
TS .5ACCMNE
EXTEND
DCA ER
DXCH E
CAE EDOT(R)
TS EDOT
CAE URGLIMIT
AD URGENCYR
EXTEND
BZMF 2JETS-R
4JETS-R CS ONE
TCF POLTYPE # GO FIND BEST POLICY
2JETS-R CCS NJ-R
TCF 4JETS-R
CS TWO
TCF POLTYPE # GO FIND BEST POLICY
## Page 541
MINUSU CAE 1/AMINU
TS .5ACCMNE
CAE URGENCYQ
AD URGENCYR
AD URGLIMIT
EXTEND
BZMF 2JETS-U
2JETSM-U TC UXFORM
2-U.RATE CAF THREE
TCF POLTYPE # GO FIND BEST POLICY
2JETS-U CCS NJ-U
TCF 2JETSM-U
TC UXFORM
CAF TWO
TCF POLTYPE # GO FIND BEST POLICY
NEGAPOSB CAE A+B
EXTEND
BZMF PLUSV
2/4JET-Q CAE 1/AMINQ
TS .5ACCMNE
CAE URGLIMIT
AD URGENCYQ
EXTEND
BZMF 2JETS-Q
4JETS-Q CS FIVE
TCF POLTYPE # GO FIND BEST POLICY
2JETS-Q CCS NJ-Q
TCF 4JETS-Q
CS SIX
TCF POLTYPE # GO FIND BEST POLICY
PLUSV CAE 1/AMINV
TS .5ACCMNE
CS URGENCYR
AD URGENCYQ
AD URGLIMIT
EXTEND
BZMF 2JETS+V
2JETSM+V TC VXFORM
2+V.RATE CAF FIVE
TCF POLTYPE # GO FIND BEST POLICY
2JETS+V CCS NJ+V
## Page 542
TCF 2JETSM+V
TC VXFORM
CAF FOUR
TCF POLTYPE # GO FIND BEST POLICY
BURGZERO CAE URGENCYR # TEST FOR SECOND URGENCY ALSO ZERO
EXTEND
BZF GIMBLTRY # BOTH URGENCIES ZERO. TRY THE GTS.
EXTEND # TIME SAVING A+B CALCULATION
MP SIN22.5
TS TERMB # US.SIN(22.5)
CAE URGENCYR
EXTEND
MP COS22.5
TS TERMA # UR.COS(22.5)
TCF A-B/ONLY
COS22.5 DEC 0.92388 # COSINE OF 22.5 DEGREES
SIN22.5 DEC 0.38268 # SINE OF 22.5 DEGREES
-TAN22.5 DEC -.41421 # NEGATIVE OF TANGENT OF 22.5 DEGREES
NEGBURG CAE TERMA # A URGENCY TEST
EXTEND
BZMF NEGANEGB
POSANEGB CAE A+B
EXTEND
BZMF 2/4JET+Q
MINUSV CAE 1/AMINV
TS .5ACCMNE
CS URGENCYQ
AD URGENCYR
AD URGLIMIT
EXTEND
BZMF 2JETS-V
2JETSM-V TC VXFORM
2-V.RATE CAF SEVEN
TCF POLTYPE # GO FIND BEST POLICY
2JETS-V CCS NJ-V
TCF 2JETSM-V
TC VXFORM
CAF SIX
TCF POLTYPE # GO FIND BEST POLICY
NEGANEGB CAE A-B
EXTEND
## Page 543
BZMF 2/4JET+R
PLUSU CAE 1/AMINU
TS .5ACCMNE
CS URGLIMIT
AD URGENCYQ
AD URGENCYR
EXTEND
BZMF 2JETSM+U
2JETS+U CCS NJ+U
TCF 2JETSM+U
TC UXFORM
CAF ZERO
TCF POLTYPE # GO TO FIND BEST POLICY
2JETSM+U TC UXFORM
2+U.RATE CAF ONE
TCF POLTYPE # GO FIND BEST POLICY
2/4JET+R CAE 1/AMINR
TS .5ACCMNE
EXTEND
DCA ER
DXCH E
CAE EDOT(R)
TS EDOT
CS URGENCYR
AD URGLIMIT
EXTEND
BZMF 2JETS+R
4JETS+R CS THREE
TCF POLTYPE # GO FIND BEST POLICY
2JETS+R CCS NJ+R
TCF 4JETS+R
CS FOUR
TCF POLTYPE # GO FIND BEST POLICY
2/4JET+Q CAE 1/AMINQ
TS .5ACCMNE
CS URGENCYQ
AD URGLIMIT
EXTEND
BZMF 2JETS+Q
4JETS+Q CS SEVEN
TCF POLTYPE # GO FIND BEST POLICY
## Page 544
2JETS+Q CCS NJ+Q
TCF 4JETS+Q
CS EIGHT
# GENERALIZED CALLING SEQUENCE FOR ALL Q,R-AXES ROTATIONS (FROM BANK 17):
POLTYPE TS NETACNDX # SAVE INDEX INDICATING AXIS, DIRECTION,
EXTEND # AND NUMBER OF JETS REQUESTED (THIS SPEC-
DCA POLADR # IFIES THE "OPTIMAL" POLICY. TRANSFER
DTCB # ACROSS BANKS TO POLICY SELECTION ROUTINE
EBANK= JTSONNOW
POLADR 2CADR POLTYPEP # 2CADR OF JET POLICY SELECT ROUINTE.
## Page 545
# SUBROUTINES UXFORM AND VXFORM CALCULATE NEEDED VALUES FOR T-JET LAW
# (THEY GO OFF TO REDUCE RATE, IF NECESSARY, AND THEN DO NOT RETURN)
VXFORM CAE 1/2JETSV # GET INVERSE OF V-JET ACCELERATION
TS 1/NJETAC
CS EQ # COMPLEMENT FOR TRANSFORMATION
TS EQ
CS EDOTQ
TCF UVXFORM +1
UXFORM CAE 1/2JETSU # SET INVERSE OF U-JET ACCELERATION
TS 1/NJETAC
UVXFORM CAE EDOTQ # TRANSFORM ANGULAR RATE TO U/V-AXIS
AD EDOTR
EXTEND
MP .707
TS EDOT # SAVE FOR REDUCEUV
EXTEND
MP BIT3
EXTEND
BZF UVEDOT # BRANCH IF RESCALING SUCCESSFUL.
CCS A # LIMIT EDOT TO +/- 11.25 DEG/SEC.
CAF POSMAX
TCF UVEDOT1
CS POSMAX
TCF UVEDOT1
UVEDOT CAE L
UVEDOT1 TS EDOT # RATE ERROR SCALED AT PI/16.
EXTEND
SQUARE
TS EDOT(2) # SAVE RATE SQUARED SCALED AT PI(2)/2(8)
CAE EQ # TRANSFORM ATTITUDE ERROR TO U/V -AXIS
AD ER
EXTEND
MP .707
TS E
TC Q
-1.5CSPQ DEC -.00938
+TJMINT6 DEC +.00073
-TJMIN16 DEC -.00097
-TJMINQR EQUALS -TJMIN16
38.7MAT4 DEC 0.00242
-MS35AT4 DEC -.00219 # -35MS SCALED AT 4
## Page 546
MAXRATE DEC 0.88889 # 10 DEGREES/SECOND SCALED AT PI/16
MAXRATE2 DEC 0.79012 # 100 DEG(2)/SEC(2) SCALED AT PI(2)/2(8)
.6DEG/SC DEC 0.05333 # 6/10 DEGREES/SECOND SCALED AT PI/16
25/32QR DEC 0.78125
## Page 547
# THESE TWO SUBROUTINES TRANSFORM EDOTQ,EDOTR INTO THE U/V-AXIS (RESPECTIVELY) FOR THE RATE COMMAND MODE (ONLY).
# VALUE IS STORED IN EDOTGEN SCALED AT PI/4 RADIANS/SECOND.
BANK 17
EDOTUGEN CAE 1/2JETSU # FOR U-AXIS TRANSFORMATION
TS 1/NJETAC
CAE EDOTQ
TCF +4
EDOTVGEN CAE 1/2JETSV # FOR V-AXIS TRANSFORMATION
TS 1/NJETAC
CS EDOTQ
AD EDOTR
EXTEND
MP .707
TS RATEDIF
TC Q
.707 DEC 0.70711
SPSBAKUP EXTEND
DCA SPSRCSAD
DXCH Z
EBANK= DT
SPSRCSAD 2CADR SPSRCS
## Page 548
# *********TJETLAW************************************************************************************************
TJETLAW CS EDOT # TEST ON EDOT SIGN:
EXTEND
BZMF +4
TS EDOT # SIGNS OF E AND EDOT CHANGED IF EDOT NEG,
CS E # TO CONSIDER FUNCTIONS IN THE UPPER HALF
TS E # OF THE E-DOT PHASE PLANE.
CAE EDOT(2) # SCALED AT PI(2)/2(+8) RAD(2)/SEC(2)
EXTEND # 1/NETACC HAS BEEN SET FOR N-JETS WITH
MP 1/NETACC # IMPLICIT FACTOR OF (1/2).
AD E # ATTITUDE ERROR SCALED AT PI RADIANS.
EXTEND # DEADBAND VALUE SCALED AT PI RADIANS.
SU DB # E+.5EDOT/NETACC-DB
TS HDAP # SCALED AT PI RADIANS.
EXTEND
BZMF NEGHDAP
CAE EDOT # RATE ERROR; LIMITED TO +/- 11.25 DEG/SEC
EXTEND # SCALED AT PI/16 RADIANS/SECOND.
MP 1/NETACC # SCALED AT 2(+8)/PI SEC(2)/RAD: (ACC) (-1)
DDOUBL # SCALED AT 2(+4) SECONDS.
TS TERMA
AD -1.5CSPQ # (EDOT/NETACC)-1.5CSP SCALED AT 16 SECS.
EXTEND
BZMF +3
MAXTJET CAF BIT14 # (1/2) IS LIKE POSMAX AT THIS SCALING.
TCF NORMRETN # (OVERFLOW IS PREVENTED IN THIS WAY.)
CS HDAP # MINIMPDB-E-(EDOT(2)/NETACC)+DB
AD MINIMPDB # SCALED AT PI RADIANS.
EXTEND # (DURING APS BURNS, MINIMPDB = -DB.)
BZMF MAINBRCH
CAE TERMA # EDOT/NETACC-35MS SCALED AT 16 SECONDS.
AD -MS35AT4
EXTEND # COMPARE TIME-TO-GET-ZERO-RATE WITH 35MS.
BZMF INZONE4
AD 38.7MAT4 # TIME-TO-GET-ZERO-RATE + 1/2 MINIMP.
TCF TJETSCAL
INZONE4 CCS EDOT # IF EDOT IS EITHER 00001, 00000, 77777,
EXTEND # OR 77776 (IN OCTAL), THEN THIS CODING
BZF XTRANS # CAUSES A BRANCH TO XTRANS, NO ROTATION
EXTEND # JETS ARE FIRED. *** NOTE: IF THE EXTEND
## Page 549
BZF XTRANS # CODE IS SKIPPED, BZF EXECUTES LIKE TCF.
CAE NO.QJETS # IF NO Q-AXIS JETS THEN MUST HAVE R-AXIS.
EXTEND
BZF ROTRAXIS
CAE OMEGAQD # WITH Q-AXIS JETS, ZERO THE RATE ERROR.
TS OMEGAQ
CAE NO.RJETS # IF NO R-AXIS JETS, THEN Q-AXIS JETS WERE
EXTEND # ALREADY FOUND.
BZF DOTJMIN
ROTRAXIS CAE OMEGARD # WITH R-AXIS JETS, ZERO THE RATE ERROR.
TS OMEGAR
DOTJMIN CAF +TJMINT6 # USE MINIMUM IMPULSE DT FOR TQR.
TCF NORMRETN
NEGHDAP CAE EDOT(2) # RATE ERROR SQUARED SCALED AT PI(2)/2(8).
EXTEND
MP .5ACCMNE # .5(1/ACCMIN) AT 2(8)/PI SEC(2)/RAD.
AD E # ATTITUDE ERROR SCALED AT PI RADIANS
AD DB # DEADBANDS (2) SCALED AT PI RADIANS
AD DBMINIMP # (DURING APS BURNS DBMINIMP = 0.)
EXTEND
BZMF +2
TCF XTRANS # NO ROTATION JETS NEEDED.
+2 CS MAXRATE # 10 DEGREES/SECOND SCALED AT PI/16.
AD EDOT # EDOT-MAXRATE SCALED AT PI/16 RAD/SEC.
EXTEND
BZMF +2
TCF XTRANS
+2 CS EDOT # RATE ERROR SCALED AT PI/16 RAD/SEC.
EXTEND # (LIMITED TO +/- 11.25 DEG/SEC.)
MP 1/NETACC # SCALED AT 2(+8)/PI SEC(2)/RAD; (ACC):-1)
DDOUBL # SCALED AT 2(+4) SECONDS.
TS TERMA
CS HDAP # -E+(.5EDOT(2)/NETACC)+DB
AD E
AD E # TWICE ERROR NEGATES E OF HDAP(ABOVE)
AD MINIMPDB
MAINBRCH TS HDAP # -HDAP(ABOVE)+2E+DBMINIMP AT PI RADIANS.
CAE 1/NETACC # .5(1/NETACC+1/ACCMIN) SCALED AT 2(8)/PI.
## Page 550
ADS .5ACCMNE # .5ACCMNE NOW HOLDS DENOM.
EXTEND # DENOM(MAXRATE(2)).HDAP AT PI RADIANS.
MP MAXRATE2
AD HDAP
EXTEND
BZMF NOROOT
CAE 1/NETACC # SAVE (1/NETACC)(2)
DOUBLE
EXTEND
SQUARE
DXCH INVACCSQ
CAE HDAP # (HDAP)/(DENOM)
ZL
EXTEND
DV .5ACCMNE
TS QUOTTEMP
EXTEND # +(HDAP/DENOM)(1/NETACC)(2) AT 2(8) SECS.
MP INVACCSQ +1
TS INVACCSQ +1
CAF ZERO
XCH INVACCSQ
EXTEND
MP QUOTTEMP
DAS INVACCSQ
EXTEND # SAVE COPY OF ABOVE D.P. VALUE
DCA INVACCSQ
DXCH TERMB
CAF -1.5CSPQ # (1.5CSP-EDOT/NETACC) AT 16 SECS.
AD TERMA
EXTEND
SQUARE # (1.5CSP-EDOT/NETACC)(2) AT 256 SECS.
DAS INVACCSQ # (1.5CSP-EDOT/NETACC)(2) - TERMB
CAE INVACCSQ # CHECK HIGH ORDER PART, IF NON-ZERO.
EXTEND
BZF ONLYTST1
TCF ONLYTST1 +1
ONLYTST1 CAE INVACCSQ +1 # USE LOW ORDER PART, SINCE HIGH PART 0.
EXTEND
BZMF MAXTJET
CAF -TJMIN16 # -EDOT/NETACC-TJMIN SCALED AT 16.
AD TERMA
## Page 551
EXTEND
BZMF MAYNOJET
PREROOT CAF AFTRUTAD # THIS WILL CAUSE SQUARE ROOT TO BE TAKEN
TS T5ADR # ON THE NEXT T5RUPT.
EXTEND
READ 5
TS CH5TEMP
JETSON CAE JTSONNOW # TURN ON JETS AND END RUPT
TC WRITEQR
TCF RESUME
AFTRUTAD GENADR DORUTDUM
NOROOT CAF MAXRATE
AD .6DEG/SC # MAXRATE+DEL SCALED AT PI/16 RAD/SEC.
EXTEND
MP 1/NETACC # (MAXRATE+DEL)/NETACC
DDOUBL # SCALED AT 2(+4) SECONDS
TJSUM AD TERMA
TJETSCAL DOUBLE # NOW SCALED AT 2(+3) SECONDS.
EXTEND
MP 25/32QR # SCALED TO 16/25 2(+4) SECONDS AS TIME6.
TCF NORMRETN
MAYNOJET EXTEND # RE-INITIALIZE C(INVACCSQ,D.P.)
DCA TERMB # SINCE CLOBBERED ABOVE.
DXCH INVACCSQ
CAF -TJMIN16
AD TERMA # TERMA-TJMIN SCALED AT 2(+4) SECONDS.
EXTEND
SQUARE # SCALED AT 2(+8) SECONDS.
DAS INVACCSQ # FORM D.P. SUM.
CAE INVACCSQ # CHECK HIGH ORDER PART IF NON-ZERO.
EXTEND
BZF ONLYTST2
TCF ONLYTST2 +1
ONLYTST2 CAE INVACCSQ +1 # USE LOW ORDER PART, SINCE HIGH PART 0.
EXTEND
BZMF PREROOT
TCF DOTJMIN # FIRE FOR MINIMUM IMPULSE.
CHKSUM17 OCT 37777
## Page 552
# SUBROUTINE NAME: DAPSQRT MOD. NO. 0 DATE: DECEMBER 28, 1966
# AUTHOR: JONATHAN D. ADDELSTON (ADAMS ASSOCIATES)
# DAPSQRT IS A SUBROUTINE WHICH PERFORMS THE NECESSARY AND APPROPRIATE INTERFACE FUNCTIONS BETWEEN THE LM DAP AND
# THE PRESENT SPROOT SUBROUTINE IN MASTER. DAPSQRT EXPECTS A DOUBLE PRECISION ARGUMENT IN C(A,L) AND WILL SHIFT
# THAT QUANTITY SIX OR FOUR BITS TO THE LEFT TO FORM A MORE ACCURATE SINGLE PRECISION ARGUMENT FOR SPROOT (AND
# THEN SHIFT THE SINGLE PRECISION RESULT OF SPROOT THREE OR TWO BITS TO THE RIGHT IN ORDER TO MAINTAIN SCALING
# CONSISTENCY). DAPSQRT ALSO PERFORMS THE HERETOFORE NEGLECTED FUNCTION OF SAVING AND RESTORING THE CONTENTS OF
# THE SR (SHIFT-RIGHT) REGISTER WHICH MUST BE DONE BY ALL USERS OF SPROOT IN INTERRUPT.
# NOTE: IF ORIGINAL C(A) = 0, THEN THE SQUARE ROOT SINGLE PRECISION ARGUMENT IS C(L), AND THE RESULT FROM SPROOT
# IS SHIFTED LEFT SEVEN BITS.
# CALLING SEQUENCE:
# L TC IBNKCALL CALL IS ALWAYS FROM ANOTHER BANK.
# L +1 CADR DAPSQRT ENTER ROUTINE WITH C(A,L) = D.P. ARG.
# L +2 (RETURN) C(A) = BEST VALUE OF SQUARE ROOT.
# ALARM/ABORT MODE: NONE.
# SUBROUTINES CALLED: SPROOT AND T6JOBCHK.
# NORMAL EXIT MODE: RETURN TO L +2.
# OUTPUT: C(A) AT RETURN TO CALLER IS THE BEST SINGLE PRECISION SQUARE ROOT OF THE GIVEN DOUBLE PRECISION ARGUMENT
# ERASABLE INITIALIZATION REQUIRED: DOUBLE PRECISION ARGUMENT AS C(A,L).
# DEBRIS: ITEMP4, ITEMP5, ITEMP6 AND A,L,Q.
BANK 26
EBANK= FUNCTION
# SRTEMP ERASE SCRATCH CELLS FOR DAPSQRT
# SQRTTEMP ERASE SCRATCH CELLS FOR DAPSQRT
# SQRTTEMQ ERASE SCRATCH CELLS FOR DAPSQRT
DAPSQRT TS SQRTTEMP # SAVE C(A) PART OF DOUBLE PRECISION ARG.
EXTEND # SAVE C(Q) FOR RETURN TO LM DAP CALLER.
QXCH SQRTTEMQ
CAE SR # SAVE C(SR) SINCE ALL INTERRUPT PROGRAMS
DOUBLE # USING SPROOT MUST DO SO.
TS SRTEMP
## Page 553
TC T6JOBCHK # CHECK TIME6-RUPT BEFORE SPROOT.
CAE SQRTTEMP # RESTORE D.P. ARG. TO C(A,L), AND THEN
EXTEND # CHECK FOR C(A) = +0. IF SO, TAKE THE
BZF DAPSQRT3 # SQUARE ROOT OF C(L) AND POST-SHIFT.
MASK DAPHIGH7 # IF THIS MASK PRODUCES A WORD OF ZEROS,
EXTEND # C(D.P.ARG) WILL BE SHIFTED LEFT 6 BITS
BZF SQRTSL6 # WITHOUT OVERFLOWING BEFORE USING SPROOT.
MASK DAPHIGH5 # IF THIS MASK PRODUCES A WORD OF ZEROS,
EXTEND # C(D.P.ARG) WILL BE SHIFTED LEFT 4 BITS
BZF SQRTSL4 # WITHOUT OVERFLOWING BEFORE USING SPROOT.
CAE SQRTTEMP # GET UNSHIFTED S.P. ARGUMENT FOR SPROOT.
TC SPROOT # CALL SUBROUTINE IN FIXED-FIXED.
DAPSQRT1 LXCH SRTEMP # RESTORE C(SR).
LXCH SR
TC SQRTTEMQ # RETURN WITH SQUARE ROOT AS C(A).
SQRTSL6 CAF BIT9 # SET UP TO SHIFT D.P. ARG. LEFT 6 BITS
TS Q
CAF BIT12 # AND TO SHIFT SPROOT ANS. RIGHT 3 BITS.
TCF DAPSQRT2
SQRTSL4 CAF BIT11 # SET UP TO SHIFT D.P. ARG. LEFT 4 BITS
TS Q
CAF BIT13 # AND TO SHIFT SPROOT ANS. RIGHT 2 BITS.
DAPSQRT2 XCH SQRTTEMP # (RECONSTRUCT D.P. ARGUMENT.)
EXTEND # VARIABLE LEFT SHIFT (4 OR 6 BITS).
DV Q # (MAC HAS DIFFEQ, LM DAP HAS DV Q - PUN?)
DAPROOT TC SPROOT # CALL SUBROUTINE IN FIXED-FIXED
EXTEND # VARIABLE RIGHT SHIFT (2 OR 3 BITS).
MP SQRTTEMP
TCF DAPSQRT1 # RETURN SEQUENCE.
DAPSQRT3 CAF BIT8 # SET UP TO SHIFT SPROOT ANS. RIGHT 7 BITS
TS SQRTTEMP
CAE L # USE C(L) AS SPROOT ARGUMENT.
TCF DAPROOT
DAPHIGH7 OCTAL 77400
DAPHIGH5 OCTAL 76000