swh:1:snp:92f3f585b9ae79620ad8c41a332d6329b31fd381
Raw File
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
Tip revision: 078c79d
P-AXIS_REACTION_CONTROL_SYSTEM_AUTOPILOT.agc
### FILE="Main.annotation"
## Copyright:	Public domain.
## Filename:	P-AXIS_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-24 RSB	Transcribed through page 504.
##		2016-10-28 RSB	Finished transcribing.
##		2016-10-31 RSB	Typos.
##		2016-11-01 RSB	More typos.
##		2016-12-05 RSB	Comment-proofing with octopus/ProoferComments
##				completed, changes made.
##		2021-05-30 ABS	Added missing BANK and EBANK= statements.

## Page 492
                BANK            16
                EBANK=          DT

# THE FOLLOWING T5RUPT ENTRY BEGINS THE PROGRAM WHICH CONTROLS THE P-AXIS ACTION OF THE LEM USING THE RCS JETS.
# THE NOMINAL TIME BETWEEN THE P-AXIS RUPTS IS 100 MS IN ALL NON-IDLING MODES OF THE DAP.

PAXIS           CAF             TWENTYMS                        # RESET TIMER IMMEDIATELY - DT= 20 MS
                TS              TIME5

                LXCH            BANKRUPT                        # INTERRUPT LEAD IN (CONTINUED)
                EXTEND                                          
                QXCH            QRUPT                           

# CHECK TO SEE IF DAP IS STILL IN USE:

		TC		CHEKBITS			# RETURN IS TO I+1 IF DAP SHOULD STAY ON.

# WHILE DAP IS ON, SET UP EITHER A KALMAN FILTER RUPT OR A DUMMY FILTER RUPT BY SETTING UP T5ADR FROM ERASABLE.

                EXTEND                                          # T5ADR IS SET TO EITHER FILTER OR
                DCA             PFILTADR                        # DUMMYFIL IN A BLIND MANNER SINCE
                						# PFILTADR IS SET UP ELSEWHERE

# START CODING FOR MODULE 3 REMAKE, AUGUST 1967***START CODING FOR MODULE 3 REMAKE, AUGUST 1967*******************

INSRT16A	TCF		PAXISCNT			# GO DECREMENT COUNTERS.

# **END CODING FOR MODULE 3 REMAKE, AUGUST 1967*****END CODING FOR MODULE 3 REMAKE, AUGUST 1967*******************

# ***** KALCMANU-DAP AND "RATE-HOLD"-DAP INTERFACE *****

# THE FOLLOWING SECTION IS EXECUTED EVERY 100 MS (10 TIMES A SECOND) WITHIN THE P-AXIS REACTION CONTROL SYSTEM
# AUTOPILOT (WHENEVER THE DAP IS IN OPERATION).

                CAF             TWO                             # SET UP LOOP TO DO Z,Y,X CDU AXES:
KALCLOOP        TS              QRCNTR

                INDEX           QRCNTR                          # KALCMANU AND RATE-HOLD USE THIS SECTI
                CAE             CDUXD                           # TO PERFORM THEIR INDEPENDENT FUNCTION
                EXTEND                                          # BOTH PROCEDURES SET UP THE DELCUD'S
                INDEX           QRCNTR                          # TO HAVE THE NEGATIVE VALUE OF THE
                MSU             DELCDUX                         # DESIRED CDU CHANGE FOR EACH 100 MS CS
                CCS             A                               # DURING THE MANEUVER (OR MODE).  EACH
                AD              ONE                             # STORED AT PI RADIANS IN 2'S COMPLEMEN
                TCF             +2                              # SINCE THE MODULAR SUBTRACT YIELDS THE
                COM                                             # NEW CDUD VALUE IN 1'S COMPLEMENT, THE
                INDEX           QRCNTR                          # CCS SECTION IS NEEDED FOR 1'S TO 2'S
                TS              CDUXD                           # CONVERSION OF DESIRED CDU ANGLES.

                CCS             QRCNTR                          # (THIS MAKES THE LOOP DO ALL THREE
## Page 493
                TCF             KALCLOOP                        # AXES.  A = QRCNTR. DO NEXT DELCDU.
# DO P AXIS RATE DERIVATION AND CONTROL LAW.
# DERIVE DELTA P.

		CA		ZERO
		TS		ITEMP1
		CAE		TP
		AD		NEGCSP1
		EXTEND
		BZMF		DOTORQUE
		TS		ITEMP1
		CA		CSPAT1P
		TCF		SCALEDTP
DOTORQUE	CA		TP
		EXTEND
		MP		BIT5
		CAE		L
		EXTEND
		MP		16/25
SCALEDTP	TS		TP
		EXTEND
		MP		WFORP
		AD		(1-K)/8
		EXTEND
		MP		TP
		EXTEND
		MP		BIT4
		CA		1JACC
		EXTEND
		MP		L
		EXTEND
		MP		NO.PJETS
		LXCH		JETRATE
		CA		ITEMP1
		TS		TP
		
		CAE		CDUX
		TS		L
		EXTEND
		MSU		OLDXFORP			# SCALED AT PI
		LXCH		OLDXFORP
		ZL
		DXCH		DELTAP
		CAF		BIT9
		TS		Q
		CA		CDUY
		TS		L
		EXTEND
		MSU		OLDYFORP			# SCALED AT PI
		LXCH		OLDYFORP
## Page 494
		EXTEND
		MP		M11				# M11 SCALED AT 1
		DAS		DELTAP
		EXTEND
		DCA		DELTAP
		EXTEND
		DV		Q				#  NOW SCALED AT PI/64
		EXTEND
		MP		WFORP				# SCALED AT 2(4)=16, RESULT IN A AT PI/4.
		XCH		OMEGAP				# W*DELTAP IN OMEGAP LOC. OLD OMEGAP IN A.
		EXTEND
		MP		(1-K)				# SCALED AT 1
		AD		JETRATE				# RATE DUE TO JETS TORQUING.
		ADS		OMEGAP				# PRATE= WFORP*DELTAP+ALPHA*LAST-PRATE+TPF
PAXFILT         TC              PJUMPADR
SKIPPAXS        CA              VISNORMQ
                TS              PJUMPADR
                TCF             RESUME
                
CHKVISFZ        TC		T6JOBCHK			# CHECK FOR T6 RUPT.

		TCF		PURGENCY			# NO RHC INPUTS ON 206
		
# START CODING FOR MODULE 3 REMAKE, AUGUST 1967***START CODING FOR MODULE 3 REMAKE, AUGUST 1967*******************

# FROM P-AXIS-
#    1. COUNT DOWN GIMBAL DRIVE TIMES.
#    2. END DRIVES WHEN APPROPRIATE.
#    3. COUNT DOWN TIME FOR FORCED GTS JUST BEFORE THROTTLE-UP.

PAXISCNT	DXCH		T5ADR				#  (PRESERVE OLD CODING)

		CCS		SIMPCNTR			# COUNT DOWN SIMPCNTR TO +0.  DECISECONDS
		TS		SIMPCNTR
		
		CCS		QGIMTIMR			# Q-AXIS GIMBAL DRIVE TIMER-
		TCF		DECQTIMR			#   POSITIVE- COUNTING DOWN
		TCF		TURNOFFQ			#   POS ZERO- DRIVE SHOULD BE ENDED
CHKRTIMR	CCS		RGIMTIMR			#   NEGATIVE- INACTIVE
		TCF		DECRTIMR			#   NEG ZERO- IMPOSSIBLE
		TCF		TURNOFFR			# REPEATED FOR R-AXIS (ABOVE).
		
CKTRMCTR	CCS		TRIMCNTR			# COUNT DOWN FOR FORCED GTS ENTRY.
		TCF		+4				#   POSITIVE- COUNTING DOWN
		TC		CCSHOLE				#   POS ZERO-IMPOSSIBLE
		TCF		CHKSMART			#   NEGATIVE- INACTIVE- RETURN
		TCF		CHKSMART			#   NEG ZERO- THIS VALUE UNTIL DRIVE DONE.
		CAF		NEGONE
		ADS		TRIMCNTR			# COUNT TRIMCNTR DOWN TO NEG ZERO.
		TCF		CHKSMART

## Page 495
DECQTIMR	TS		QGIMTIMR			# COUNT QGIMTIMR DOWN TO POS ZERO.
		TCF		CHKRTIMR
DECRTIMR	TS		RGIMTIMR			# COUNT RGIMTIMR DOWN TO POS ZERO.
		TCF		CKTRMCTR

TURNOFFQ	TS		NEGUQ				# REWRITE GIMBAL-DRIVE BITS TO HALT 0.
		TS		QACCDOT
		CS		QGIMBITS
		EXTEND
		WAND		12
		CAF		NEGMAX
		TS		QGIMTIMR			# DEACITIVATE TIMER.
		TCF		CHKRTIMR
TURNOFFR	TS		NEGUR				# REWRITE GIMBAL DRIVE BITS TO HALT R.
		TS		RACCDOT
		CS		RGIMBITS
		EXTEND
		WAND		12
		CAF		NEGMAX
		TS		RGIMTIMR			# DEACTIVATE TIMER.
		TCF		CKTRMCTR
QGIMBITS	OCTAL		01400
RGIMBITS	OCTAL		06000

# FROM STARTDAP- RESTART PROTECT THE CHANNEL 11 ENGINE-ON BIT AND THE CHANNEL 12 GIMBAL-DRIVE BITS.

PROTCTOR	TS		(1-K)/8				#   (OLD CODING)

		CAE		FLAGWRD1
		MASK		ENGINBIT
		EXTEND
		BZF		INSRT16B	+1		# RETURN TO STARTDAP IF ENGINE SHOULD BE
								#   OFF.
		CAF		BIT13				# OTHERWISE-
		EXTEND
		WOR		11				# RESET ENGINE-ON BIT.
		CS		QGIMTIMR
		EXTEND
		BZMF		+3				# BRANCH IF Q-DRIVE TIMER ACTIVE.
		CAF		ZERO				# OTHERWISE ZERO NEGUQ.
		TS		NEGUQ
		CS		RGIMTIMR			# REPEAT FOR R-DRIVE.
		EXTEND
		BZMF		+3
		CAF		ZERO
		TS		NEGUR
		TC		IBNKCALL			# SET UP DRIVES ACCORDING TO NEGUS.
		FCADR		WRCHN12
		TCF		INSRT16B	+1		# RETURN TO OLD CODING.

## Page 496
NODAPNO		CAF		ULLAGER
		MASK		DAPBOOLS
		EXTEND
		BZF		ZEROFIVE
		CS		PHASENUM			# ULLAGE BIT IS SET.PROTECT MP7 +X COMMAND
		AD		SEVEN
		EXTEND
		BZF		PROTCT+X
		TCF		LEAVASIS			# THIS IS NOT MP7. THIS IS NOT COLD PURGE.
PROTCT+X	CAF		+XJETS
TWINEXIT	EXTEND
		WRITE		5
		
LEAVASIS	CAF		MS30P
		TS		TIME5
		TCF		RESUME

ZEROFIVE	CAF		ZERO
		TCF		TWINEXIT
		
+XJETS		OCT		00252

ADDLT5ID	EXTEND						# (ARRIVE WITH BIT 11 IN A, FROM T5IDLERI)
		RAND		DSALMOUT
		CCS		A
		TCF		MORET5ID			# SMARTJOB IS ALREADY RUNNING.  NO ACTION.
		
		CCS		SMODE				# NOT RUNNING.  SEE IF SELFCHECK WANTED.
		TCF		MORET5ID			# SELFCHECK IS ON, SO DON'T RUN SMARTJOB.
		TCF		GETSMART			# SELFCHECK IS OFF, SO START SMARTJOB.
		TCF		MORET5ID			# SELFCHECK IS ON, SO DON'T RUN SMARTJOB.
		TCF		MORET5ID			# SELFCHECK IS ON, SO DON'T RUN SMARTJOB.
		
GETSMART	CAF		PRIO1
		TC		NOVAC
		EBANK=		SMARTFLG
		2CADR		SMARTJOB
		
		CAF		BIT11				# SET THE SMARTJOB-RUNNING FLAG.
		EXTEND
		WOR		DSALMOUT
		
MORET5ID	CAF		GODAPGO
		MASK		DAPBOOLS
		EXTEND						# NODAPNO WILL STOP COLD FIRE PURGE AND
		BZF		NODAPNO				# RESTART-PROTECT MP 7 +X TRANSLATION.
		
		TCF		DAPIDLEI			# GODAPGO IS ON, SO RUN DAPIDLER NOW.
		
## Page 497
# SMARTJOB IS A DUMMYJOB-LIKE FUNCTION DESIGNED TO ABSORB IDLE TIME.  IT CAUSES THE COMPUTER-ACTIVITY LAMP TO
# REMAIN ON, AND PREVENTS THE EXISTENCE OF A JOB SLEEPING IN TH ELOWEST NUMBERED CORE SET.  IT IS PREVENTED FROM
# STARTING, OR MADE TO TERMINATE IF ALREADY RUNNING, BY MAKING SMARTFLG CONTAIN ANY NEGATIVE VALUE OR ZERO, OR
# BY MAKING SMODE (THE SELFCHECK CONTROL REGISTER) UNEQUAL TO +0.

SMARTJOB	CCS		NEWJOB				# ANY HIGHER PRIORITY JOB WAITING?
		TC		CHANG1				# YES.  GO DO IT.
		
		CA		SMARTFLG			# NO.  SHOULD SMARTJOB TERMINATE?
		EXTEND
		BZMF		STOPSMRT			# YES.   GO KILL IT.
		
		CCS		SMODE				# MAYBE NOT.  SEE IF SELFCHECK WANTED.
		TCF		STOPSMRT			# WANTED.  TERMINATE SMARTJOB.
		TCF		SMARTJOB			# NOT WANTED.  CONTINUE SMARTJOB.
		NOOP						# WANTED.  TERMINATE SMARTJOB.
STOPSMRT	CS		BIT11				# TERMINATE SMARTJOB.
		EXTEND						# FIRST, TURN THE SMARTJOB-RUNNING FLAG
		WAND		DSALMOUT			# OFF.
		
		TCF		ENDOFJOB			# THEN KILL JOB.
		
CHKSMART	CA		SMARTFLG			# IS SMARTJOB DESIRED?
		EXTEND
		BZMF		INSRT16A	+1		# NO.  TAKE NO ACTION.
		
		CAF		BIT11				# YES.  SEE IF IT IS ALREADY RUNNING.
		EXTEND
		RAND		DSALMOUT
		CCS		A
		TCF		INSRT16A	+1		# SMARTJOB IS ALREADY RUNNING.  NO ACTION.
		
		CCS		SMODE				# NOT RUNNING.  SEE IF SELFCHECK WANTED.
		TCF		INSRT16A	+1		# SELFCHECK IS ON, SO DON'T RUN SMARTJOB.
		TCF		SETSMART			# SELFCHECK IS OFF, SO START SMARTJOB.
		TCF		INSRT16A	+1		# SELFCHECK IS ON, SO DON'T RUN SMARTJOB.
		TCF		INSRT16A	+1		# DITTO.
		
SETSMART	CAF		PRIO1
		TC		NOVAC
		EBANK=		SMARTFLG
		2CADR		SMARTJOB

		CAF		BIT11				# SET THE SMARTJOB-RUNNING FLAG.
		EXTEND
		WOR		DSALMOUT
		
		TCF		INSRT16A	+1		# RETURN TO PAXIS.

# **END CODING FOR MODULE 3 REMAKE, AUGUST 1967**** END CODING FOR MODULE 3 REMAKE, AUGUST 1967*******************

## Page 498
# THE FOLLOWING CODING IS LEFT IN PLACE TO PRESERVE ADDRESSES.

		EXTEND
		MP		BIT3				# ENOUGH FOR 4 JETS
		CAE		L
		EXTEND
		MP		25/32				# A CONTAINS TJET SCALED AT 2EXP(4)(16/25)
		TS		TP
		TS		TOFJTCHG
		
		CAE		PRATEDIF			# TEST WHETHER 2 OR 4 JETS TO BE USED BY
		AD		-2JETLIM			# COMPARING DELTA RATE WITH 2 JET LIMIT
		EXTEND
		BZMF		+4				# IF NEGATIVE, 2 JETS ARE ENOUGH
		
		CAF		POSMAX				# POSITIVE, NON-ZERO.  PUT POSMAX IN NJET
		TS		NJET
		TCF		PJETSLEC			# AND GO SELECT GOOD POLICY
		
		CAF		NEGMAX				# 2 JETS, PUT NEGMAX IN NJET.
		TS		NJET
		CAE		TP				# DOUBLE TP.
		DOUBLE
		TS		TP				# AND GO CHECK MINIMUM IMPULSE
		
# ........................................................................ 
# CHECK RATE COMMAND ON TIME AGAINST MINIMUM IMPULSE
                TS              TOFJTCHG
                AD              -TJMINT6
                EXTEND                                          #   AS TP. TEST JET TIME. IS IT GREATER OR
                BZMF            JETSOFF                         # LESS THAN A MINIMUM IMPULSE
# ........................................................................ 

## Page 499
# PROGRAM NAME: PJETSLEC			DATE: DECEMBER 9, 1966

# MODIFICATION 2 TO SUNBURST REVISION 58 ON DECEMBER 30, 1966 BY JOHN BLISS(ADAMS ASSOCIATES) RM 7-286, X183

# LOG SECTION: P-AXIS REACTION CONTROL SYSTEM AUTOPILOT -- FIRST PUT INTO SUNBURST(III) REVISION 29


# FUNCTIONAL DESCRIPTION:

#     THE OBJECT OF PJETSLEC IS TO CHOOSE THE BEST JET POLICY WHOSE NECESSARY JETS HAVE NOT BEEN RECORDED AS
# FAILED IN THE CH6MASK REGISTER.  THE CONDITIONS ON SELECTION ARE THE NUMBER OF JETS REQUESTED(2 OR 4), THE
# SENSE OF P-AXIS ROTATION REQUIRED(+/-), AND ALTERNATING USE OF DIAGONAL FORCE-COUPLED PAIRS OF JETS.

#     PJETSLEC FIRST READS CHANNEL 6 TO SEE IF THE JETS ARE CURRENTLY FIRING.  IF THEY ARE OFF, THE DIAGONAL JETS
# ARE SWITCHED TO COMPLY WITH THE ALTERNATION CONDITION, AS THERE IS NO DANGER OF SWITCHING ONE OFF AND THE OTHER
# ON IN RAPID SUCCESSION.  AFTER SWITCHING THE DIAGONALS, OR IF THE JETS ARE ON, 6.5 MS IS ADDED TO THE JET
# FIRING TIME, TOFJTCHG, TO ALLOW FOR DELAY IN TURNING ON THE JETS OR IN CASE THE CURRENT POLICY HAS SUFFERED A
# JET FAILURE AND JUST BE REPLACED.  HOWEVER, IF THE SAME JET POLICY IS SELECTED, THE FACT WILL BE DETECTED BEFORE
# THE POLICY IS WRITTEN INTO CHANNEL 6, THE UNNECESSARY 6.5MS DELAY TIME WILL BE DEDUCTED FROM TOFJTCHG.  THE TIME
# OF CALCULATION, 5MS, IS SUBTRACTED AT THE SAME TIME IN THE COMBINED CONSTANT, -COM-6.5 = -11.5MS.  NOTE THAT IN
# CASE JET FAILURE REQUIRES SELECTION OF A NEW POLICY, TOFJTCHG IS NOT MODIFIED BY -5MS, AND SO THERE WILL BE AN
# OVERSHOOT OF 5MS OF JET FIRING.

#     NEXT, THE SENSE OF P-AXIS ROTATION(ROLL) IS TESTED, TO DETERMINE WHICH SET OF JET POLICIES MUST BE INDEXED.

#     IF THE P-AXIS IS +, REL = 7, IF -, REL = 0,.  NJET IS TESTED NEXT; IF POSMAX, 4 JETS DESIRED, REL = REL + 6,
# CTR = 6.  IF NEGMAX, 2 JETS DESIRED, REL = REL + 5, CTR = 5.  IF 4 JETS DESIRED, GO TO POLICY TESTING LOOP
# WITHOUT TESTING TO SEE WHICH DIAGONAL PAIR IS PREFERRED THIS TIME.

#     IF 2 JETS ARE DESIRED, SEE WHETHER NO. 2 PAIR IS PREFERRED.  IF IT IS, TEST IT FIRST AND USE IT IF IT'S OK.
# IF IT HAS FAILED, GO TO THE TEST LOOP TO TEST THE POLICIES IN ORDER.  IF NO. 1 POLICY IS PREFERRED, GO DIRECTLY
# TO THE TEST LOOP.

#     THE TEST LOOP USES REL TO PICK UP THE NEXT POLICY IN PPOLTABL AND CTR TO KEEP TRACK OF THE NUMBER OF
# POLICIES(1-7) TESTED.  WHEN A GOOD POLICY IS FOUND, IT IS WRITTEN INTO CHANNEL 6, OTHERWISE THE NEXT POLICY IS
# TRIED.  IF NO GOOD POLICIES ARE FOUND, CONTROL GOES TO ABORTJET TO TURN OFF THE JETS AND THE DAP.

#     WHEN A GOOD POLICY IS FOUND, CONTROL TRANSFERS TO WRITEPOL.  THERE, THE SELECTED POLICY IS COMPARED TO THE
# CURRENT POLICY IN CHANNEL 6.  IF THEY ARE NOT THE SAME, EITHER THE JETS HAVE NOT BEEN ON, OR A JET FAILED IN THE
# CURRENT POLICY.  IN EITHER CASE, TOFJTCHG HAS ALREADY BEEN INCREASED BY THE 6.5MS JET FIRE DELAY.  AS DESCRIBED
# ABOVE, HOWEVER, THE EFFECT OF THE OLD POLICY FIRING DURING THE COMPUTATION IS NOT TAKEN INTO ACCOUNT.  THIS IS
# CONSIDERED SAFER, SINCE OTHERWISE, A TOFJTCHG ALREADY CALCULATED NEAR THE MINIMUM IMPULSE TIME MIGHT BE REDUCED
# TO LESS THAN 14MS AND THE RESULT WOULD BE THE EXPLOSION OF THE JETS.

#     IF THE JET POLICY IS THE SAME AS THE LAST ONE, THE 6.5MS DELAY TIME IS DEDUCTED FROM TOFJTCHG, AND IN ANY
# CASE, THE POLICY IS WRITTEN INTO CHANNEL 6, +/-2/4 IS STORED IN NO-PJETS, AND BIT9 IS PUT INTO JTSATCHG TO CAUSE
# THE P-AXIS JETS TO BE TURNED OFF ON THE NEXT T6RUPT.  CONTROL THEN TRANSFERS TO SKIPTEST.

# CALLING SEQUENCES: NONE                       SUBROUTINES CALLED:

## Page 500
#						WRITEP - WRITES C(A). THE
#						SELECTED JET POLICY, INTO
#						CHANNEL 6

# NORMAL EXIT MODES:                           	ALARM OR ABORT EXIT MODES:

#     TCF SKIPTEST                                       EXTEND
#							 DCA    ABORTADR
#							 DTCB

# 							 EBANK= JTSONNOW
#						ABORTADR 2CADR  ABORTJET

#						THIS SEQUENCE IS FOLLOWED
#						IF NONE OF THE POLICIES IS
#						WITHOUT JET FAILURES

# ERASABLE INITIALIZATION REQUIRED

#     TP	=  ) TIME PERIOD OF JET FIRING
#     TOFJTCHG	=  ) AT T6 SCALING, 625 MICROSECONDS PER BIT
#     NJET	=  37777, 40000, DEPENDING ON WHETHER 4 OR 2 JETS DESIRED
#     TJETSIGN	= +/-00001, DEPENDING ON DESIRED SENSE OF P-AXIS ROTATION
#     CH6MASK	=  BITS 1-8 INDICATE WHETHER CORRESPONDING JETS HAVE FAILED - BIT ON IS FAILURE, BIT OFF IS OK.
#     DAPBOOLS,BIT5(AORBSYST) =0/1, DEPENDING UPON WHETHER DIAGONAL 1 OR DIAGONAL 2 WAS PREFERRED DURING LAST PASS

# OUTPUT:

#     CHANNEL 6 - CONTAINS SELECTED JET POLICY UNLESS NONE IS AVAILABLE
#     NO.PJETS	- +/-2/4, SENSE OF P-AXIS ROTATION AND NUMBER OF JETS USED
#		  BY POLICY ACTUALLY SELECTED(MAY NOT = 4 IF 4 JETS RE-
#		  QUESTED BUT ONE OR MORE JETS FAILED)
#     TOFJTCHG	- MODIFIED BY -5MS OR +6.5MS OR NEITHER, DEPENDING ON WHETHER THE JETS WERE ON, AND WHETHER THE
#		  NEW POLICY IS A CHANGE FROM THE OLD OR NOT.
#     DAPBOOLS, BIT5(AORBSYST) = 1/0, IF THE INPUT VALUE WAS 0/1, UNLESS JETS WERE ON WHEN PJETSLEC STARTED.

#     JTSATCHG	- = BIT9, UNLESS NO POLICIES AVAILABLE

#     NJET, TP, TJETSIGN, AND CH6MASK NOT CHANGED BY PJETSLEC

#     REL AND CTR ARE LEFT AT THEIR LAST VALUES WHEN THE GOOD POLICY WAS
#     FOUND

# DEBRIS:

#     REL = ITEMP5
#     CTR = ITEMP6
#     A,L,Q

PJETSLEC	EXTEND	 					# BEGIN JET SELECT ROUTINE BY SEEING WHE-
## Page 501
		READ		6				# THER THE JETS ARE TURNED ON(CHANNEL 6
		CCS		A				# NON-ZERO)
		TCF		ADDELAY				# JETS ON, DON'T SWITCH DIAGONALS.
		
		CAF		AORBSYST			# JETS NOT ON NOW, START BY SWITCHING BIT5
		LXCH		DAPBOOLS			# IN DAPBOOLS
		EXTEND						# BIT5 ON - DIAGONAL JETS 15, 7 AND 8, 16
		RXOR		L
		TS		DAPBOOLS			# BIT5 OFF - DIAGONAL JETS 4, 12 AND 3, 11
		
ADDELAY		CAF		14-TJMIN			# ADD DELAY TIME BECAUSE JETS USUALLY OFF
		ADS		TOFJTCHG			# AND EASIER IF JET POLICY NOW HAS FAILED.
		
		CAF		ZERO				# BEFORE TESTING P-AXIS SIGN.
		TS		REL				# INITIALIZE ADDRESSING INDEX AT ZERO
		CCS		TJETSIGN			# TEST DIRECTION OF P-AXIS ROTATION(ROLL)
		CAF		SEVEN				# IF POSITIVE, GET POLICY FROM LOWER SEVEN
		ADS		REL				# LOCATIONS OF TABLE
		
		CCS		NJET				# SET IF 4-JET POLICY IS REQUESTED
		CAF		SIX				# IT IS, PICK UP 6 FOR REL AND CTR
		TCF		FOURJETS			# AND GO STORE THEM
		CAF		FIVE				# 2 JETS ONLY REQUESTED, PICK UP 5, STORE
		TS		CTR				# IN CTR AND ADD TO REL.
		ADS		REL
		CS		DAPBOOLS			# CHECK BIT5 IN DAPBOOLS TO SEE WHICH PAIR
		MASK		AORBSYST			# OF DIAGONAL JETS SHOULD BE USED NEXT
		CCS		A
		TCF		TESTPOL				# FIRST PAIR, SO GO TO TESTING LOOP NOW
		
		EXTEND						# SECOND PAIR, DECREMENT REL TO 4 OR 11.
		DIM		REL
		INDEX		REL				# PICK UP SECOND DIAGONAL PAIR FROM POLICY
		CAF		PPOLTABL
		MASK		CH6MASK				# TABLE AND COMPARE WITH FAILURE BITS
		EXTEND
		BZF		WRITEPOL			# THE JETS ARE GOOD, GO WRITE IN CHANNEL
		
		INCR		REL				# THE JET(S) HAVE FAILED FOR THIS POLICY,
		TCF		TESTPOL				# RESTORE REL AND DO TEST POLICY LOOP
		
FOURJETS	ADS		REL				# COME HERE TO SET REL AND CTR FOR 4-JET
		CAF		SIX				#         ****ADS STINKS****
		TS		CTR				# POLICY REQUESTED.  ALSO, SET CTR -1 HERE
		
TESTPOL		INDEX		REL				# PICK UP NEXT POLICY AS LOCATED RELATIVE
		CAF		PPOLTABL			# TO PPOLTABL BY REL.
		MASK		CH6MASK				# COMPARE WITH FAILURE BITS
		EXTEND		
		BZF		WRITEPOL			# THE JETS ARE GOOD, WRITE IN THE CHANNEL
## Page 502
		EXTEND						# THE JET(S) HAVE FAILED FOR THIS POLICY
		DIM		REL				# DECREMENT THE INDEX.
		CCS		CTR				# SEE IF ALL POLICIES HAVE BEEN TESTED.
		TCF		TESTPOL	-1			# CTR NOT ZERO, A = CTR -1, DO LOOP AGAIN
		EXTEND						# CTR ZERO, ALL ALLOWABLE POLICIES FAILED
		DCA		ABORTADR			# PICK UP 2CADR OF ABORTJET
		DTCB						# AND GO THERE

WRITEPOL	INDEX		REL				# A GOOD POLICY IS FOUND, PICK IT UP AND
		CAF		PPOLTABL	
		EXTEND						# BEFORE WRITING IT, CHECK TO SEE IF THE
		RXOR		6				# SAME POLICY IS CURRENTLY IN CHANNEL 6.
		EXTEND
		BZF		SAMEJETS			# SAME POLICY, GO ADJUST TOFJTCHG
OK2WRITE	INDEX		REL				# DIFFERENT POLICY(CHANNEL 6 WAS ZERO OF A
		CAF		PPOLTABL			# JET FAILED IN LAST POLICY).  GET POLICY,
		TC		WRITEP				# GO WRITE IT IN CHANNEL 6 AND RETURN
		
		CCS		A				# THE POLICY IS STILL IN A, TEST NUMBER OF
		CAF		TWO
		TCF		+2				# JETS(BIT15 ON FOR 4-JET POLICIES) AND
		CAF		FOUR
		EXTEND						# MULTIPLY BY TJETSIGN(+/-1) TO GET +/-2,4
		MP		TJETSIGN
		LXCH		NO.PJETS			# IN L, WHICH IS THEN STORED IN NO-PJETS
		
		CAF		BIT9				# TURN OFF P-AXIS JETS AFTER T6RJPT
		TS		JTSATCHG
		
		TCF		SKIPTEST			# CHECK FOR SKIP.PERHAPS TO DO JETLIST
		
SAMEJETS	CAF		-COM-6.5			# COME HERE TO ADJUST TOFJTCHG BY FACTOR
		ADS		TOFJTCHG			# OF 11.5MS(COMP TIME + MINIMP DELAY) WHEN
		TCF		OK2WRITE			# CURRENT JET POLICY IS TO BE MAINTAINED.
		
		EBANK=		JTSONNOW			# WOULD YOU BELIEVE, EBANK = 6
ABORTADR	2CADR		ABORTJET			# WHERE TO GO WHEN ALL JET POLICIES FAIL
# ................................................................................................................

# TABLE OF P-AXIS JET POLICIES IS ASSEMBLED HERE TO BE ADDRESSED BY RELATIVE INDEX FROM BASE ADDRESS PPOLTABLE

#				CHANNEL 6 BITS		  	  INDEX				   JETS ON

PPOLTABL	OCTAL		00202				# REL=0      -P NON-FORCE COUPLE 4- 16, 3
		OCTAL		00210				# REL=1	     -P NON-FORCE COUPLE 3- 11, 16
		OCTAL		00050				# REL=2	     -P NON-FORCE COUPLE 2- 8, 11
		OCTAL		00042				# REL=3	     -P NON-FORCE COUPLE 1- 3, 8
		OCTAL		00240  				# REL=4	     NUMBER TWO FORCE COUPLE- 8, 16
		OCTAL		00012				# REL=5      -P 2-JET FORCE COUPLE- 3, 11
## Page 503
		OCTAL		40252				# REL=6      -P 4-JET POLICY- 3, 8, 11, 16
		
		OCTAL		00101				# REL=7	     +P NON-FORCE COUPLE 4- 7, 4
		OCTAL		00021				# REL=8D     +P NON-FORCE COUPLE 3- 12, 7
		OCTAL		00024				# REL=9D     +P NON-FORCE COUPLE 2- 15, 12
		OCTAL		00104				# REL=10D    +P NON-FORCE COUPLE 1- 4, 15
		OCTAL		00005				# REL=11D    NUMBER TWO FORCE COUPLE- 15, 7
		OCTAL		00120				# REL=12D    +P 2-JET FORCE COUPLE- 4, 12
		OCTAL		40125				# REL=13D    +P 4-JET POLICY- 4, 15, 12, 7

# ................................................................................................................

JETSOFF		CAF		ZERO
		TS		TP
		TS		TOFJTCHG
		TC		WRITEP				# TURN ON P JETS USING T6JOB SUBROUTINE
		TCF		RESUME
# P-AXIS URGENCY FUNCTION CALCULATION

# (NOTE -- M13 = 1 IDENTICALLY IMPLIES NULL MULTIPLICATION.)

PURGENCY	CA		CDUY				# P-ERROR CALCULATION
		EXTEND
		MSU		CDUYD				# CDU VALUE - ANGLE DESIRED (Y-AXIS)
		EXTEND
		MP		M11				# (CDUY-CDUYD)M11 SCALED AT PI RADIANS
		XCH		E				# SAVE FIRST TERM (OF TWO)
		CA		CDUX				# THIRD COMPONENT
		EXTEND
		MSU		CDUXD				# CDU VALUE - ANGLE DESIRED (X-AXIS)
#		EXTEND
#		MP		M13
		ADS		E				# SAVE SUM OF TERMS, NO OVERFLOW EVR
		
		TS		PERROR				# SAVE P ERROR FOR DISPLAY
		
		CS		OMEGAPD				# THIS CODING IS COMMON TO BOTH LM DAP AND
		AD		OMEGAP				# SPS-BACKUP MODE.
		TS		EDOTP				# EDOTP = OMEGAP - OMEGAPD AT PI/4 RAD/SEC
		
## Page 504
# P-AXIS SPS BACK-UP TEST AND SPS BACK-UP CONTROL LOGIC:

		CAE		DAPBOOLS			# BIT15 = 0 FOR SPS BACK-UP
		EXTEND
		BZMF		NOBACKUP			# DAPBOOLS IS NEVER +0.
		
# SPS BACK-UP CONTROL LOGIC:

		CAF		SLOPEMP
		EXTEND
		MP		E
		AD		EDOTP
		EXTEND
		BZMF		PLUSDP
		
		CAF		NEGDP
		
GCOMPER		TS		ITEMP3
		CAE		EDOTP
		EXTEND
		MP		ACONSTP
		CCS		A
		TCF		LIMPRATE
		TCF		+2
		TCF		LIMPRATE
		LXCH		A
		EXTEND
		SQUARE
LIMSQP		AD		E
		AD		NEGDP
		EXTEND
		BZMF		JETSOFF
		CAF		50MS/625
		TS		TP
		TS		TOFJTCHG
		CAF		NEGMAX
		TS		NJET
		CCS		ITEMP3
		CAF		BIT1
		TCF		+2
		CS		BIT1
		TS		TJETSIGN
		TCF		PJETSLEC
PLUSDP		CS		E
		XCH		E
		CS		EDOTP
		XCH		EDOTP
		CS		NEGDP
		TCF		GCOMPER
LIMPRATE	CAF		QUARTER
## Page 505
		TCF		LIMSQP
50MS/625	OCTAL		00120				# TJET = 50 MS IN SPS BACKUP MODE
NEGDP		DEC		-0.00555
SLOPEMP		EQUALS		POSMAX
ACONSTP		OCTAL		00007

## Page 506
# CONTINUATION OF P-AXIS RCS AUTOPILOT:

NOBACKUP	CAF		BIT14
		TS		SIGNTAG				# INDICATES EDOT POSITIVE FOR TIME BEING
		CCS		EDOTP
		TCF		SCALEDOT
		TCF		PTJETLAW
		TCF		REFLECT
		TCF		PTJETLAW
REFLECT		TS		EDOT
		CS		BIT14
		TS		SIGNTAG				# INDICATES EDOT REALLY NEGATIVE
		CS		PERROR
		TS		E
		CAE		EDOT				# EDOT SCALED AT 45 DEG/SEC
SCALEDOT	AD		BIT1
		EXTEND
		MP		BIT3
		EXTEND
		BZF		PTJETLAW	-1
		CAF		POSMAX
		TCF		PTJETLAW
		CAE		L				# EDOT NOW SCALED AT 11.25 DEG/SEC
PTJETLAW	TS		EDOT
		EXTEND
		MP		EDOT
		TS		EDOT(2)
		CAF		NEGONE
		TS		TJETSIGN
		CAF		NEGMAX
		TS		NJET				# INDICATES 2 JETS ONLY FOR TIME BEING
		CAE		EDOT(2)
		EXTEND
		MP		1/2JTSP
		EXTEND
		MP		BIT14
		AD		E
		EXTEND
		SU		DB
		TS		FCT1
		EXTEND
		BZMF		5,6,7,8
		AD		-5DEG+1
		EXTEND						# IN ERROR BY OVER 5 DEG  WITH THE
		BZMF		+5				#   RATE IN THE OTHER DIRECTION
		CS		EDOT
		AD		HULLSLIM			# 0.5 DEG/SEC SCALED AT 11.25 DEG/SEC
		EXTEND
		BZMF		MULTIJET
		CAE		EDOT
		
## Page 507
		EXTEND
		MP		1/2JTSP
		TS		TERMA
		CS		1.5CSP16
		AD		TERMA
		EXTEND
		BZMF		+3
MAXPTJET	CAF		BIT14
		TCF		FINDSIGN
		CS		FCT1
		AD		DBMNMPAX
		EXTEND
		BZMF		PMBR
		CAE		TERMA
		AD		-35AT16
		EXTEND
		BZMF		ZONE4
		AD		38.7AT16
		TCF		SCALTJET
MULTIJET	CAF		POSMAX
		TS		NJET
		TCF		MAXPTJET
5,6,7,8		CAE		EDOT(2)
		EXTEND
		MP		.5ACCMIN
		AD		E
		AD		DB
		AD		DBMNMPAX
		EXTEND
		BZMF		+2
ZONE5		TCF		JETSOFF
 +2		CS		RATEMAX
 		AD		EDOT
 		EXTEND
 		BZMF		ZONES6,7
ZONE8		TCF		JETSOFF
ZONES6,7	CAF		BIT1
		TS		TJETSIGN
		CS		EDOT
		EXTEND
		MP		1/2JTSP
		TS		TERMA
		CS		FCT1
		AD		E
		AD		E
		AD		DBMNMPAX
PMBR		TS		FCT1				# FCT1 NOW HOLDS -FCT5 OR -FCT2
		CAE		1/2JTSP
		EXTEND
		MP		BIT14
		
## Page 508
		AD		.5ACCMIN
		TS		DENOM
		EXTEND
		MP		RATEMAX2
		AD		FCT1
		EXTEND
		BZMF		MISSROOT
		CAE		1/2JTSP
		EXTEND
		MP		1/2JTSP				# (1/2JTSP)(1/2JTSP) SCALED AT 2(16)/PI(2)
		DXCH		RUPTREG3			# DP PRODUCT STORED IN RUPTREG3,RUPTREG4
		CAE		FCT1				# SCALED AT PI
		ZL
		EXTEND
		DV		DENOM				# (FCT1/DENOM) IN A SCALED AT PI(2)/2(8).
		TS		RUPTREG2			# (FCT1/DENOM) STORED IN RUPTREG2
		EXTEND
		MP		RUPTREG4			# (FCT1/DENOM)(LOWER PART OF (1/2JTSP)(2))
		TS		RUPTREG4			# IS STORED IN RUPTREG4
		CAF		ZERO
		XCH		RUPTREG3
		EXTEND
		MP		RUPTREG2			# PRODUCT OF SP FCT1/DENOM AND DP
		DAS		RUPTREG3			# (1/2JSP)(2) IS STORED DP IN RUPTREG3 AND
		EXTEND						# RUPTREG4 AT A SCALING OF 2(8). PRODUCT
		DCA		RUPTREG3			# IS ALSO STORED IN ITEMP3 AND ITEMP4.
		DXCH		ITEMP3
		CS		1.5CSP16
		AD		TERMA				# SCALED AT 2(4)
		EXTEND
		SQUARE						# (TERMA-1.5CSP)(2) IN A,L SCALED AT 2(8)
		DAS		RUPTREG3			# DP EXPRESSION STORED IN RUPTREG3 AND
		CAE		RUPTREG3			# RUPTREG4. IF NEG, TP EXCEEDS 1.5CSP.
		EXTEND
		BZF		TESTONL1			# IF RUPTREG3 ZERO,MUST TEST ON RUPTREG4
		TCF		TESTONL1	+1
		
TESTONL1	CAE		RUPTREG4
		EXTEND
		BZMF		MAXPTJET
		
MINTJCHK	CS		PTJMINT6			# 11.5 MS SCALED AT 16. (4MS ADDED TO TMIN
		AD		TERMA				# TO PREVENT COMPUTED TP LESS THAN TMIN)
		EXTEND
		BZMF		LASTTEST			# LASTTEST TESTS FOR TP LESS THAN MIN IMP.
ROOTNEXT	EXTEND
		DCS		ITEMP3				# DP NUMBER SCALED AT 2(8) TO BE ENTERED
		TC		IBNKCALL			# SQUARE ROOT SUBROUTINE CALL.
		CADR		DAPSQRT
SUMTJ		AD		TERMA

## Page 509
SCALTJET	DOUBLE
		EXTEND
		MP		25/32
		TCF		FINDSIGN
MISSROOT	CAF		RATEMAX+			# RATEMAX+ = RATEMAX+0.6DEGREES/SECOND
		EXTEND
		MP		1/2JTSP
		TCF		SUMTJ
LASTTEST	EXTEND
		DCA		ITEMP3
		DXCH		RUPTREG3
		CS		PTJMINT6			# 11.5 MS SCALED AT 16
		AD		TERMA
		EXTEND
		SQUARE
		DAS		RUPTREG3			# DP EXPRESSION STORED IN RUPTREG3 AND
		CAE		RUPTREG3			# RUPTREG4. IF POS, TP LESS THAN MIN IMP
		EXTEND
		BZF		TESTONL2			# IF RUPTREG3 ZERO, MUST TEST ON RUPTREG4
		TCF		TESTONL2	+1
ZONE4		CAE		EDOT				# IF EDOT IS ZERO IN ZONE4, NO JETS FIRED
		EXTEND
		BZF		JETSOFF
		CAE		SIGNTAG
		EXTEND
		BZMF		+3
		CS		.1DPS
		TCF		+2
		CA		.1DPS
		AD		OMEGAPD
		TS		OMEGAP
		CAF		PTJMINT6
FINDSIGN	TS		TP
		CAE		SIGNTAG				# NEVER ZERO
		EXTEND
		BZMF		+2				# EQUIVALENT TO BRANCH ON MINUS
		TCF		+3
		CS		TJETSIGN
		TS		TJETSIGN
		CAE		TP				# LOAD TOFJTCHG
		TS		TOFJTCHG
		TCF		PJETSLEC			# AND GO SELECT GOOD POLICY
		
TESTONL2	CAE		RUPTREG4
		EXTEND
		BZMF		ROOTNEXT
		TCF		JETSOFF
# TORQUE VECTOR RECONSTRUCTION FOR THE P-AXIS

SKIPTEST	CS		TOFJTCHG			# COME HERE FROM PJETSLEC TO TEST P SKIP
## Page 510
		AD		+1.5CSP				# USE 150 MS. TO TEST FOR A PAXIS SKIP.
		EXTEND
		BZMF		RESUME				# TP GREATER THAN 150MS THEN DO NORMAL P.
		CA		PSKIPADR			# SET UP A P AXIS SKIP.
		TS		PJUMPADR			# GOES TO JTLST FROM HERE
		
## Page 511
# PROGRAM NAME   JTLST

# WRITTEN BY  DICK GRAN ( GAEC - CALL LR-5-1331 AREA CODE 516 )

# THIS PROGRAM IN CONJUNCTION WITH T6-RUPT PROGRAMS ALLOWS JETS TO BE
# TURNED OFF AT THE COMPUTED OFF TIME. THIS TASK IS ACCOMPLISHED BY USING
# A JET LIST WHICH IS SET UP AS FOLLOWS ....

#                 JET OFF TIMES    DESIRED JETS AT THIS TIME

#		    TIME6	   T6NEXTJT
#		    T6NEXT	   T6NEXTJT +1
#		    T6NEXT +1	   T6NEXTJT +2

# THESE LOCATIONS RECEIVE THE JET ON TIMES SCALED AS T6 (.625 MS/BIT). AS
# AN EXAMPLE OF HOW THE PROGRAM WORKS, CONSIDER THE FOLLOWING PROBLEM...
#     50 MS AGO A P AXIS JET COMPUTATION DECIDED JETS 12 AND 15 SHOULD BE
#     ON FOR 120 MS. AFTER 120 MS IT WAS FURTHER DECIDED THAT JETS 12,15
#     16 AND 3  SHOULD BE ON UNTIL THE NEXT P AXIS COMPUTATION (WHICH
#     OCCURS IN 200 MS AFTER THE LAST P AXIS JET COMPUTATION). AT THE 
#     CURRENT TIME THE QR AXES COMPUTES THAT JET 2 SHOULD BE ON FOR 65 MS
#     AND JET 9 SHOULD BE ON FOR 72.5 MS. AFTER 72.5 MS NO FURTHER QR JETS
#     SHOULD BE ON. THIS SEQUENCE OF JETS CORRESPONDS TO A +P ROTATION
#     WITH A SIMULTANEOUS +Y AND -Z TRANSLATION AND ALSO A -V (DIAGONAL)
#     ROTATION ABOUT THE Y AND Z AXES . NOTE JET 9 IS ON LONGER THAN JET 2
#     WHICH WOULD BE THE CASE IF THE Q-R JETS HAD BEEN ON BEFORE. IN THIS
#     CASE, THE FOLLOWING SEQUENCE OF EVENTS OCCURRED AT THE P AXIS
#     COMPUTATION .....

#   	   1) CHANNEL 6 WAS LOADED WITH OCTAL 24 TO TURN ON JETS 12 AND 15

#          2) TIME 6 WAS LOADED WITH 120 MS

#	   3) T6NEXT WAS LOADED WITH +0 ( THIS INDICATES THE CONTENTS OF 
#	       T6NEXT ARE NOT TO BE USED IN THE T6JOB PROGRAM)

#	   4) T6NEXTJT WAS LOADED WITH OCTAL 226 TO CAUSE JETS 3,12,15
#	       AND 16 TO GO ON WHEN T6 HAS BEEN DECREMENTED TO -0.

# 	   5) THE T6 CLOCK WAS TURNED ON TO BEGIN COUNTING DOWN TIME 6

#     AT THE QR AXES JET LIST COMPUTATION, THE T6 CLOCK AS BEEN REDUCED
#     TO 70 MS (120-50) THEREFORE THE FOLLOWING OCCURS ....

#          1) CHANNEL 5 IS LOADED WITH OCTAL 40022 TO TURN ON JETS 2 AND
#	       9. ( THIS IS PERFORMED IN THE SECTION CALLED RATE)

#	   2) THE BANK IS SWITCHED FROM THE QR BANK TO THE P BANK (WHERE
#	       THE JET LIST IS STORED) AS FOLLOWS ....
#		      DCA   JTLSTADR
## Page 512
#		      DTCB             ( IN THE QR AXES ONLY)

#          3) THE DESIRED JET ON TIME FOR JET 2 IS COMPARED WITH T6.

#          4) SINCE T6 IS GREATER THAN THE DESIRED JET ON TIME FOR JET 2,
#	       T6 IS CHANGED TO 65 MS AND T6NEXT  IS LOADED WITH 5 MS.
#	       ( THE DIFFERENCE BETWEEN JET ON TIME AND T6)

#	   5) T6NEXTJT IS CHANGED TO OCTAL 40020 , AND THE FORMER CONTENTS
#	       OF T6NEXTJT IS PLACED IN T6NEXTJT +1. THIS CAUSES JET 9 TO
#	       REMAIN ON AND JET 2 TO BE TURNED OFF WHEN T6 IS DECREMENTED
#	       TO ZERO. IT ALSO ASSIGNS THE P AXIS JET CODE TO THE
#	       TIME IN T6NEXT.

#	   6) THE CONTENTS OF T6NEXT (5MS) IS COMPARED WITH THE
#	       DIFFERENCE BETWEEN THE TWO QR AXIS JET ON TIMES. SINCE HERE
#	       THE DIFFERENCE IS 7.5 MS WHICH IS GREATER THAN THE CONTENTS
#	       OF T6NEXT (5MS), THE ADDITIONAL QR AXIS RUPT OCCURS AFTER
#	       THE RUPT STORED IN T6NEXT. THUS 2.5 MS (7.5 - 5) IS STORED
#	       IN T6NEXT +1

#	   7) T6NEXTJT +2 IS MADE EQUAL TO THE JETS WHICH ARE TO BE ON
#	       AFTER THE 75 MS HAS ELAPSED (IN THE CASE HERE IT IS ZERO)

#     THUS FOR THE EXAMPLE CONSIDERED THE JET LIST IS ....

#          JET TIMES               JET CODES
#    TIME6     = 65MS.	    T6NEXTJT    = 40020     SIGN IS NEGATIVE TO
#    T6NEXT    =  5 MS.     T6NEXTJT +1 = 00226	       INDICATES Q-R AXIS
#    T6NEXT +1 =2.5 MS.	    T6NEXTJT +2=, 40000        JETS,POSITIVE TO
#						       INDICATE P JETS.
#    CHANNEL 6 = 00024
#    CHANNEL 5 = 00022   SIGN IS LOST ONCE THE JET CODE IS LOADED

# THIS EXAMPLE AND THE CODING SHOULD ALLOW ONE TO UNDERSTAND THE JET LIST.
#   ONE FURTHER COMMENT IS IN ORDER - IF THE JET ON TIMES EXCEED 150 MS,
#   THE JETS ARE TURNED ON AND THE JET LIST IS NOT ENTERED. IN 100 MS
#   A NEW JET ON TIME IS COMPUTED WHICH WILL RESET THE JETS IF NEEDED.
#   WHEN THE JET ON TIME IS LESS THAN 150MS, THE JET LIST IS LOADED AS
#   DISCUSSED ABOVE AND THE TJET COMPUTATION IS SKIPPED NEXT TIME, THAT IS
#   THE AXIS IS NOT REPEATED AGAIN UNTIL 200 MS HAS ELAPSED. THIS INSURES
#   THAT WHEN A NEW JET TIME IS COMPUTED THE JET LIST WILL NOT HAVE
#   A TIME STORED WHICH CORRESPONDS TO THE AXIS JUST COMPLETED.

JTLST           CCS             TIME6                           #  TEST CURRENT STATE OF T6.
                TCF             T6ONNOW                         #  IF T6 IS + THEN CLOCK IS ON.
                TCF             T6OFFNOW                        #  IF T6 IS + ZERO THEN T6 MUST BE OFF
                TCF             T6ONNOW                         #    SINCE ALL DINC S LEAD TO MINUS ZERO.
                TC              T6JOB                           # WE ARE IN THE UNIQUE STATE WHICH SAYS
                TCF             JTLST                           #   A T6 INTERRUPT IS WAITING.DO T6 JOB.

## Page 513
T6OFFNOW        CA              TOFJTCHG
                TS              TIME6                           # WE ARE HERE IF T6 CLOCK IS OFF.
                CA              BIT15
                EXTEND                                          # TURN CLOCK PULSE FOR T6 ON AND LOAD T6.
                WOR             13
                CA              JTSATCHG
                TS              T6NEXTJT
                CA              ZERO
                XCH             ADDTLT6                         # SET UP NEXT T6 INTERRUPT AFTER THE
                TS              T6NEXT                          #   CURRENT ONE IS COMPLETE. ADDTLT6 MAY
                CA              ZERO                            #   BE ZERO IN WHICH CASE NO MORE T6.
                XCH             ADDT6JTS
                TS              T6NEXTJT        +1
                TCF             RESUME
T6ONNOW         CCS             T6NEXT                          # HERE IF T6 IS NOW ON. SEE IF T6NEXT IS
                TCF             T6NXT=+                         #   ZERO OR NOT.
                CS              TOFJTCHG                        # T6NEXT IS NEVER NEGATIVE.
                AD              TIME6                           # A CONTAINS T6 - TJET.
                CCS             A                               # TEST SIGN OF A (SAVING THE DIFFERENCE).
                AD              ONE
                TCF             JTSFIRST                        # TJET IS LESS THAN T6.
                NOOP                                            # IF DIFFERENCE I SNEGATIVE OR ZERO
                AD              ONE                             #   WE ADD 1 SO ZERO CAN NEVER BE IN LIST.
                TS              T6NEXT
                CA              JTSATCHG
                TS              T6NEXTJT        +1              # BEGIN SETTING UP JETS IN THE JET LIST.
                CA              ZERO
                XCH             ADDTLT6
                TS              T6NEXT          +1
                CA              ZERO
                XCH             ADDT6JTS
                TS              T6NEXTJT        +2
                TCF             RESUME
JTSFIRST        TS              T6NEXT                          # HERE IF TJET IS LESS THAN T6.
                CA              TOFJTCHG
                TS              TIME6                           # SWITCH T6 AND TJET)
                CA              JTSATCHG
                XCH             T6NEXTJT                        # BEGIN SWITCHING JET WORDS IN JET LIST.
                TS              T6NEXTJT        +1
                CS              ADDTLT6
                EXTEND
                BZF             RESUME                          # SEE IF AN ADDITIONAL (QR) JET TIME IS
                AD              T6NEXT                          #   REQUIRED.
                CCS             A                               # IF AN ADDITIONAL T6 IS NEEDEN, COMPARE
                AD              ONE                             #   IT WITH THE CONTENTS OF T6NEXT.
                TCF             +11
                NOOP
                AD              ONE
                TS              T6NEXT          +1
                CA              ZERO
## Page 514
                TS              ADDTLT6
                XCH             ADDT6JTS
                TS              T6NEXTJT        +2
                TCF             RESUME
 +11            TS              T6NEXT          +1
                CA              ZERO
                XCH             ADDTLT6
                TS              T6NEXT
                CA              ZERO
                XCH             ADDT6JTS
                XCH             T6NEXTJT        +1
                TS              T6NEXTJT        +2
                TCF             RESUME
T6NXT=+         CS              TOFJTCHG
                AD              TIME6
                AD              T6NEXT
                CCS             A
                AD              ONE
                TCF             +7
                NOOP
                AD              ONE
                TS              T6NEXT          +1
                CA              JTSATCHG
                TS              T6NEXTJT        +2
                TCF             RESUME
 +7             TS              L
                CS              TOFJTCHG
                AD              TIME6
                CCS             A
                AD              ONE
                TCF             JTSB4T6
                NOOP
                AD              ONE
                TS              T6NEXT
                CA              L
                TS              T6NEXT          +1
                CA              JTSATCHG
                TCF             +7
JTSB4T6         XCH             T6NEXT
                TS              T6NEXT          +1
                CA              TOFJTCHG
                TS              TIME6
                CA              JTSATCHG
                XCH             T6NEXTJT
 +7             XCH             T6NEXTJT        +1
                XCH             T6NEXTJT        +2
                TCF             RESUME
# T-JET LAW FIXED CONSTANTS

RATEMAX+	DEC		0.94222
## Page 515
RATEMAX		DEC		0.88889
RATEMAX2	DEC		0.79012
-35AT16		DEC		-0.00219
-5DEG+1		DEC		-.02772				# -5 DEGREES + CCSBIT SCALED AT PI RADIANS
38.7AT16	DEC		0.00242
TMINAT16	DEC		0.00047
PTJMINT6	DEC		0.00073
.1DPS		DEC		0.00222
+1.5CSP         DEC             +0.01465
1.5CSP16	DEC		0.00938
-COM-6.5	DEC		-.00122				# -SUM OF 5MS COMP TIME AND 6.5MS DELAY
14-TJMIN        DEC             11
NEGCSP1         DEC             -.00977
MS30P           OCTAL           37775
0.88975         DEC             0.88975
16/25           DEC             0.64000
-DRATEDB        OCTAL           77555                           # -0.4 DEG/SEC SCALED AT PI/4 RADIANS/SEC
-D2JTLIM        OCTAL           77001                           # -1.4 DEG/SEC SCALED AT PI/4
-A2JTLIM        OCTAL           76447                           # -2.0 DEG/SEC SCALED AT PI/4
-ARATEDB        OCTAL           77223                           # -1.0 DEG/SEC SCALED AT PI/4
25/32           DEC             .78125
-TJMINT6        OCTAL           77764				# -(7.5 MS) + 1 BIT(FOR BZMF), T6 SCALING
DAPLOW6         OCT             00077
BITS8,9         OCTAL           00600
UPM             DEC             -.2                             # TEMPORARY ESTIMATE
CSPAT1P		DEC		0.10000				# 100 MS AT 1.
PSKIPADR        GENADR          SKIPPAXS
JETLWADR        CADR            TJETLAW


SETIDLE         LXCH            BANKRUPT                        # FIRST T5RUPT AFTER FRESH START COMES
		EXTEND
		QXCH		QRUPT
		CAF		T5IDADR				# HERE.  T5IDLER IS STARTED IN 1 SEC.
                TS              T5ADR
                CAF             1SECRUPT
                TS              TIME5
                TC		IBNKCALL
                FCADR		STOPRATE
                TC		IBNKCALL
                FCADR		ALLCOAST
                CAF		DBWIDE
                TS		DB
                CAF		NEGONE
                TS		AOSCOUNT			# MAKES APS CODING INACTIVE
                TCF		RESUME
                
T5IDLER		LXCH		BANKRUPT			# LOOKS FOR GODAPGO TO START THE DAP.
# START CODING FOR MODULE 3 REMAKE, AUGUST 1967***START CODING FOR MODULE 3 REMAKE, AUGUST 1967*******************
## Page 516
T5IDLERI	EXTEND
		QXCH		QRUPT
		
		CA		SMARTFLG			# IS SMARTJOB DESIRED?
		EXTEND
		BZMF		MORET5ID			# NO.  TAKE NO ACTION.
		
		CAF		BIT11				# YES.  SEE IF IT IS ALREADY RUNNING.
		TCF		ADDLT5ID			# GO TO ADDITIONAL CODING.

# **END CODING FOR MODULE 3 REMAKE, AUGUST 1967*****END CODING FOR MODULE 3 REMAKE, AUGUST 1967********************
                
1SECRUPT        OCTAL           37634                           # 1 SECOND SCALED AS TIME5 (100 PULSES)

DBWIDE		DEC		0.02778
		EBANK=		AOSQTERM
T5IDADR		2CADR		T5IDLER

# DUMMY FILTER RUPT AFTER P-AXIS RUPT.
		EBANK=		AOSQTERM
DUMMYFIL	CAF		MS30P				# RESET TIMER IMMEDIATELY - DT = 30 MS
		TS		TIME5
		LXCH		BANKRUPT			# INTERRUPT LEAD-IN (CONTINUED).
		
		EXTEND						# SET UP QRAXIS RUPT.
		DCA		DFQRAXIS
		DXCH		T5ADR
		
# INCREMENT AOSTERM IN DESCENT MODE TO IMPROVE RATE DERIVATION DURING QRAXIS CONTROL.

		CAF		BIT2				# STAGE BIT IS ONE FOR DESCENT.
		EXTEND
		RAND		30				# READ STAGE BIT
		EXTEND
		BZF		CHKAPS				# NOT IN DESCENT. HOW ABOUT APS BURN.
		CS		FLAGWRD1			# SEE IF ENGINE IS OFF.
		MASK		ENGINBIT			# READ COMPLEMENT OF ENGINE-ON FLAG.
		NOOP
		EXTEND
		BZF		DLOOPBGN			# ZERO WHEN ENGINE IS NOT OFF.
		
		CAF		ZERO				# YES.  ENGINE IS OFF.
		TS		AOSQTERM
		TS		AOSRTERM
		TCF		NOQRSM				# RESUME.
DLOOPBGN	CAF		BIT1				# FIRST THE R-AXIS, THEN THE Q-AXIS.
DLOOP		TS		ITEMP1
		DOUBLE
		TS		ITEMP2
		INDEX		ITEMP1		
## Page 517
		CA		PITCHBTS
		EXTEND
		RAND		12				# IS PITCH(ROLL) GIMBAL MOVING.
		EXTEND
		BZF		DLOOPCHK			# ZERO WHEN GIMBAL IS NOT MOVING.
		
# FORM ACCDOT*CSP(2)*(1-.5*K) SCALED AT PI/4.  THIS IS THE INCREMENT TO BE ADDED TO THE OFFSET ACCELERATION TERM.

		CS		(1-K)				# (1-K) SCALED AT 1.  CS TO COMPENSATE FOR
								# INVERTED SIGN OF QACCDOT.
		EXTEND
		MP		BIT9				# .5*(1-K) , SCALED AT 2(5).
		AD		NEGBIT9				# (1.-.5*K) SCALED AT 2(5).
		EXTEND
		MP		CSPSQ				# CSP(2)*(1.-.5*K) AT 2(5)
		EXTEND
		INDEX		ITEMP2				# SELECT THE AXIS .
		MP		QACCDOT				# QACCDOT AT PI/2(7).
		INDEX		ITEMP1
		ADS		AOSQTERM			# ADD INCREMENT SCALED AT PI/4.
DLOOPCHK	CCS		ITEMP1
		TCF		DLOOP				# R-AXIS DONE.  NOW DO THE Q-AXIS.
		TCF		NOQRSM				# RESUME.
CHKAPS		CCS		AOSCOUNT			# 4 WAY BRANCH EXPLOITED
		TCF		DECCOUNT			# COUNTING DOWN FOR AOSTASK
		TCF		AOSNEXT				# TIME TO DO AOSTASK
		TCF		NOQRSM				# AOSCOUNT NOT IN USE.INACTIVE AOSTASK.
		TS		SUMRATEQ			# MINUS ZERO PUT IN AOSCOUNT BY APSENGON.
		TS		SUMRATER
		TS		SAVRATEQ
		TS		SAVRATER
		TS		KCOEFCTR
		CS		OMEGAQ				# RECORD -(OLD OMEGA) FOR BOTH AXES FOR
		TS		OLDWFORQ
		CS		OMEGAR				# THE FIRST PASS OF AOSTASK.
		TS		OLDWFORR
		CS		DAPBOOLS
		MASK		APSGOING
		ADS		DAPBOOLS
		CAF		19DECIML
		
DECCOUNT	TS		AOSCOUNT
		TCF		NOQRSM
		
AOSNEXT		CAF		19DECIML
		TS		AOSCOUNT
		EXTEND
		DCA		TOAOSTSK
		DTCF

## Page 518
TOAOSTSK	2FCADR		AOSTASK

19DECIML	DEC		19
PITCHBTS	OCT		01400				# PITCH GIMBAL BITS  (9,10).
		OCT		06000				# ROLL GIMBAL BITS,  (11,12).
CSPSQ		OCT		00243				# .01 SCALED AT 1, FOR CSP(2).
TWENTYMS	OCT		37776				# 20 MS FOR T5.
		EBANK=		QERROR
DFQRAXIS	2CADR		QRAXIS

HULLSLIM	DEC		0.04444				# 0.5 DEG/SEC SCALED AT 11.25 DEG/SEC
NEGBIT9		OCT		-400
CHKSUM16	OCT		37777
back to top