mirror of
				https://github.com/chrislgarry/Apollo-11.git
				synced 2025-10-26 04:16:18 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			744 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			744 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # Copyright:	Public domain.
 | |
| # Filename:	FINDCDUW--GUIDAP_INTERFACE.agc
 | |
| # Purpose: 	Part of the source code for Luminary 1A build 099.
 | |
| #		It is part of the source code for the Lunar Module's (LM)
 | |
| #		Apollo Guidance Computer (AGC), for Apollo 11.
 | |
| # Assembler:	yaYUL
 | |
| # Contact:	Hartmuth Gutsche <hgutsche@xplornet.com>.
 | |
| # Website:	www.ibiblio.org/apollo.
 | |
| # Pages:	908-925
 | |
| # Mod history:	2009-05-28 HG	Transcribed from page images.
 | |
| #
 | |
| # This source code has been transcribed or otherwise adapted from
 | |
| # digitized images of a hardcopy from the MIT Museum.  The digitization
 | |
| # was performed by Paul Fjeld, and arranged for by Deborah Douglas of
 | |
| # the Museum.  Many thanks to both.  The images (with suitable reduction
 | |
| # in storage size and consequent reduction in image quality as well) are
 | |
| # available online at www.ibiblio.org/apollo.  If for some reason you
 | |
| # find that the images are illegible, contact me at info@sandroid.org
 | |
| # about getting access to the (much) higher-quality images which Paul
 | |
| # actually created.
 | |
| #
 | |
| # Notations on the hardcopy document read, in part:
 | |
| #
 | |
| #	Assemble revision 001 of AGC program LMY99 by NASA 2021112-061
 | |
| #	16:27 JULY 14, 1969
 | |
| 
 | |
| # Page 908
 | |
| # PROGRAM NAME:  FINDCDUW
 | |
| # MOD NUMBER:  1	68-07-15
 | |
| # MOD AUTHOR:  KLUMPP
 | |
| #
 | |
| # OBJECTS OF MOD:	1.	TO SUPPLY COMMANDED GIMBAL ANGLES FOR NOUN 22.
 | |
| #			2.	TO MAINTAIN CORRECT AND CURRENT THRUST
 | |
| #				DIRECTION DATA IN ALL MODES.  THIS IS DONE BY
 | |
| #				FETCHING FOR THE THRUST DIRECTION FILTER THE
 | |
| #				CDUD'S IN PNGCS-AUTO, THE CDU'S IN ALL OTHER
 | |
| #				MODES.
 | |
| #			3.	TO SUBSTITUDE A STOPRATE FOR THE NORMAL
 | |
| #				AUTOPILOT COMMANDS WHENEVER
 | |
| #				1) NOT IN PNGCS-AUTO, OR
 | |
| #				2) ENGINE IS OFF.
 | |
| #
 | |
| # FUNCTIONAL DESCRIPTION:
 | |
| #
 | |
| # FINDCDUW PROVIDES THE INTERFACES BETWEEN THE VARIOUS POWERED FLITE GUIDANCE PROGRAMS
 | |
| # AND THE DIGITAL AUTOPILOT.  THE INPUTS TO FINDCDUW ARE THE THRUST COMMAND VECTOR
 | |
| # AND THE WINDOW COMMAND VECTOR, AND THE OUTPUTS ARE THE GIMBAL ANGLE
 | |
| # INCREMENTS, THE COMMANDED ATTITUDE ANGLE RATES, AND THE COMMANDED
 | |
| # ATTITUDE LAG ANGLES (WHICH ACCOUNT FOR THE ANGLES BY WHICH THE BODY WILL
 | |
| # LAG BEHIND A RAMP COMMAND IN ATTITUDE ANGLE DUE TO THE FINITE ANGULAR
 | |
| # ACCELERATIONS AVAILABLE).
 | |
| #
 | |
| # FINDCDUW ALIGNS THE ESTIMATED THRUST VECTOR FROM THE THRUST DIRECTION
 | |
| # FILTER WITH THE THRUST COMMAND VECTOR, AND, WHEN XDVINHIB SET,
 | |
| # ALIGNS THE +Z HALF OF THE LM ZX PLANE WITH THE WINDOW COMMAND VECTOR.
 | |
| #
 | |
| # Page 909
 | |
| # SPECIFICATIONS:
 | |
| #
 | |
| # INITIALIZATION:	A SINGLE INTERPRETIVE CALL TO INITCDUW IS REQUIRED
 | |
| #			BEFORE EACH GUIDED MANEUVER USING FINDCDUW.
 | |
| #
 | |
| # CALL:			INTERPRETIVE CALL TO FINDCDUW WITH THE THRUST COMMAND
 | |
| #			VECTOR IN MPAC.  INTERPRETIVE CALL TO FINDCDUW -2 WITH
 | |
| #			THE THRUST COMMAND VECTOR IN UNFC/2 AND NOT IN MPAC.
 | |
| #
 | |
| # RETURNS:		NORMAL INTERPRETIVE IN ALL CASES
 | |
| #			1.	NORMALLY ALL AUTOPILOT CMDS ARE ISSUED.
 | |
| #			2.	IF NOT PNGCS AUTO, DO STOPRATE AND RETURN
 | |
| #				WITHOUT ISSUING AUTOPILOT CMDS.
 | |
| #			3.	IF ENGINE OFF, DO STOPRATE AND RETURN WITHOUT
 | |
| #				ISSUING AUTOPILOT CMDS.
 | |
| #
 | |
| # ALARMS:		00401	IF INPUTS DETERMINE AN ATTITUDE IN GIMBAL LOCK.
 | |
| #				FINDCDUW DRIVES CDUXD AND CDUYD TO THE RQD VALUES,
 | |
| #				BUT DRIVES CDUZD ONLY TO THE GIMBAL LOCK CONE.
 | |
| #
 | |
| #			00402	IF UNFC/2 OR UNWC/2 PRODUCE OVERFLOW WHEN
 | |
| #				UNITIZED USING NORMUNIT.  FINDCDUW ISSUES
 | |
| #				STOPRATE AS ONLY INPUT TO AUTOPILOT.
 | |
| #
 | |
| # INPUTS:		UNFC/2		THRUST COMMAND VECTOR, NEED NOT BE SEMI-UNIT.
 | |
| #			UNWC/2		WINDOW COMMAND VECTOR, NEED NOT BE SEMI-UNIT.
 | |
| #			OGABIAS		POSSIBLE BIAS FOR OUTER GIMBAL ANGLE (ZEROED IN INITCDUW), UNITS OF PI.
 | |
| #			XOVINHIB	FLAG DENOTING X AXIS OVERRIDE INHIBITED.
 | |
| #			CSMDOCKD	FLAG DENOTING CSM DOCKED.
 | |
| #			STEERSW		FLAG DENOTING INSUFF THRUST FOR THRUST DIR FLTR.
 | |
| #
 | |
| # OUTPUTS:		DELCDUX,Y,Z
 | |
| #			OMEGAPD,+1,+2
 | |
| #			DELPEROR,+1,+2
 | |
| #			CPHI,+1,+2 FOR NOUN22
 | |
| #
 | |
| # DEBRIS:		FINDCDUW DESTROYS SINCDUX,Y,Z AND COSCDUX,Y,Z BY
 | |
| #			WRITING INTO THESE LOCATIONS THE SINES AND COSINES
 | |
| #			OF THE CDUD'S IN PNGCS-AUTO, OF THE CDU'S OTHERWISE.
 | |
| 
 | |
| # Page 910
 | |
| # INITIALIZATION FOR FINDCDUW
 | |
| 
 | |
| 		BANK	30
 | |
| 		SETLOC	FCDUW
 | |
| 		BANK
 | |
| 
 | |
| 		EBANK=	ECDUW
 | |
| 		COUNT*	$$/FCDUW
 | |
| 
 | |
| INITCDUW	VLOAD
 | |
| 			UNITX
 | |
| 		STORE	UNFV/2
 | |
| 		STORE	UNWC/2
 | |
| 		RVQ
 | |
| 
 | |
| # FINDCDUW PRELIMINARIES
 | |
| 
 | |
| 		VLOAD			# FINDCDUW -2:  ENTRY WHEN UNFC/2 PRE-STORD
 | |
| 			UNFC/2		# INPUT VECTORS NEED NOT BE SEMI-UNIT
 | |
| FINDCDUW	BOV	SETPD		# FINDCDUW: ENTRY WHEN UNFC/2 IN MPAC
 | |
| 			FINDCDUW	# INTERPRETER NOW INITIALIZED
 | |
| 			22		# LOCS 0 THRU 21 FOR DIRECTION COSINE MAT
 | |
| 		STQ	EXIT
 | |
| 			QCDUWUSR	# SAVE RETURN ADDRESS
 | |
| 
 | |
| # MORE HAUSKEEPING
 | |
| 		CA	ECDUWL
 | |
| 		XCH	EBANK		# SET EBANK
 | |
| 		TS	ECDUWUSR	# SAVE USER'S EBANK
 | |
| 
 | |
| 		CA	DAPBOOLS
 | |
| 		MASK	CSMDOCKD	# CSMDOCKD MUST NOT BE BIT15
 | |
| 		CCS	A
 | |
| 		CA	ONE		# INDEX IF CSM DOCKED
 | |
| 		TS	NDXCDUW
 | |
| 
 | |
| 		CA	XOVINHIB	# XOVINHIB MUST NOT BE BIT15
 | |
| 		TS	FLPAUTNO	# SET TO POS-NON-ZERO FLAG PNGCS AUTO NOT
 | |
| 
 | |
| 		MASK	DAPBOOLS
 | |
| 		TS	FLAGOODW	# FLAG0ODW = ANY PNZ NUMBER IF XOV INHIBTD
 | |
| 
 | |
| # Page 911
 | |
| # FETCH BASIC DATA
 | |
| 		INHINT			# RELINT AT PAUTNO (TC INTPRET)
 | |
| 
 | |
| 		CA	CDUX		# FETCH CDUX,CDUY,CDUZ IN ALL CASES, BUT
 | |
| 		TS	CDUSPOTX	#	REPLACE BELOW IF PNGCS AUTO
 | |
| 		CA	CDUY
 | |
| 		TS	CDUSPOTY
 | |
| 		CA	CDUZ
 | |
| 		TS	CDUSPOTZ
 | |
| 
 | |
| 		CA	BIT10		# PNGCS CONTROL BIT
 | |
| 		EXTEND
 | |
| 		RAND	CHAN30
 | |
| 		CCS	A
 | |
| 		TCF	PAUTNO		# NOT PNGCS (BITS INVERTED)
 | |
| 
 | |
| 		CA	BIT14		# AUTO MODE BIT
 | |
| 		EXTEND
 | |
| 		RAND	CHAN31
 | |
| 		CCS	A
 | |
| 		TCF	PAUTNO		# NOT AUTO (BITS INVERTED)
 | |
| 
 | |
| 		TS	FLPAUTNO	# RESET FLAG PNGCS AUTO NOT
 | |
| 
 | |
| 		CA	CDUXD		# PNGCS AUTO:  FETCH CDUXD,CDUYD,CDUZD
 | |
| 		TS	CDUSPOTX
 | |
| 		CA	CDUYD
 | |
| 		TS	CDUSPOTY
 | |
| 		CA	CDUZD
 | |
| 		TS	CDUSPOTZ
 | |
| 
 | |
| # Page 912
 | |
| # FETCH INPUTS
 | |
| PAUTNO		TC	INTPRET		# ENTERING THRUST CMD STILL IN MPAC
 | |
| 		RTB
 | |
| 			NORMUNIT
 | |
| 		STOVL	UNX/2		# SEMI-UNIT THRUST CMD AS INITIAL UNX/2
 | |
| 			UNWC/2
 | |
| 		RTB	RTB
 | |
| 			NORMUNIT
 | |
| 			QUICTRIG	# ALWAYS RQD TO OBTAIN TRIGS OF CDUD'S
 | |
| 		STOVL	UNZ/2		# SEMI-UNIT WINDOW CMD AS INITIAL UNZ/2
 | |
| 			DELV
 | |
| 		BOVB	UNIT
 | |
| 			NOATTCNT	# AT LEAST ONE ENTERING CMD VCT ZERO
 | |
| 		BOV	CALL
 | |
| 			AFTRFLTR	# IF UNIT DELV OVERFLOWS SKIP FILTER
 | |
| 			*SMNB*		# YIELDS UNIT(DELV) IN VEH COORDS FOR FLTR
 | |
| 
 | |
| # THRUST DIRECTION FILTER
 | |
| 
 | |
| 		EXIT
 | |
| 
 | |
| 		CA	UNFVY/2		# FOR RESTARTS, UNFV/2 ALWAYS INTACT, MPAC
 | |
| 		LXCH	MPAC	+3	# 	RENEWD AFTER RETURN FROM CALLER,
 | |
| 		TC	FLTRSUB		#	TWO FILTER UPDATES MAY BE DONE.
 | |
| 		TS	UNFVY/2		# UNFV/2 NEED NOT BE EXACTLY SEMI-UNIT.
 | |
| 
 | |
| 		CA	UNFVZ/2
 | |
| 		LXCH	MPAC +5
 | |
| 		TC	FLTRSUB
 | |
| 		TS	UNFVZ/2
 | |
| 
 | |
| 		TC	INTPRET		# COMPLETES FILTER
 | |
| 
 | |
| # Page 913
 | |
| # FIND A SUITABLE WINDOW POINTING VECTOR
 | |
| 
 | |
| AFTRFLTR	SLOAD	BHIZ		# IF XOV NOT INHIBITED, GO FETCH ZNB
 | |
| 			FLAGOODW
 | |
| 			FETCHZNB
 | |
| 		VLOAD	CALL
 | |
| 			UNZ/2
 | |
| 			UNWCTEST
 | |
| 
 | |
| FETCHZNB	VLOAD
 | |
| 			ZNBPIP
 | |
| 		STCALL	UNZ/2
 | |
| 			UNWCTEST
 | |
| 
 | |
| 		VLOAD	VCOMP		# Z AND -X CAN'T BOTH PARALLEL UNFC/2
 | |
| 			XNBPIP
 | |
| 		STORE	UNZ/2
 | |
| 
 | |
| # COMPUTE THE REQUIRED DIRECTION COSINE MATRIX
 | |
| 
 | |
| DCMCL		VLOAD	VXV
 | |
| 			UNZ/2
 | |
| 			UNX/2
 | |
| 		UNIT	PUSH		# UNY/2 FIRST ITERATION
 | |
| 		VXV	VSL1
 | |
| 			UNX/2
 | |
| 		STORE	UNZ/2		# -UNZ/2 FIRST ITERATION
 | |
| 		VXSC	PDVL		# EXCHANGE -UNFVZ/2 UNZ/2 FOR UNY/2
 | |
| 			UNFVZ/2		# MUST BE SMALL
 | |
| 		VXSC	BVSU		# YIELDS -UNFVY/2 UNY/2-UNFVZ/2 UNZ/2
 | |
| 			UNFVY/2		# MUST BE SMALL
 | |
| 		VSL1	VAD
 | |
| 			UNX/2
 | |
| 		UNIT			# TOTALLY ELIMINATES THRUST POINTING ERROR
 | |
| 		STORE	UNX/2		# UNX/2
 | |
| 		VXV	VSL1
 | |
| 			UNZ/2		# -UNZ/2 WAS STORED HERE REMEMBER
 | |
| 		STORE	UNY/2		# UNY/2
 | |
| 		VCOMP	VXV
 | |
| 			UNX/2
 | |
| 		VSL1
 | |
| 		STORE	UNZ/2		# UNZ/2
 | |
| 
 | |
| # Page 914
 | |
| # COMPUTES THE REQUIRED GIMBAL ANGLES
 | |
| 
 | |
| 		CALL
 | |
| 			NB2CDUSP	# YIELDS THE RQD GIMBAL ANGLES, 2'S, PI
 | |
| 		EXIT
 | |
| 
 | |
| # LIMIT THE MIDDLE GIMBAL ANGLE & COMPUTE THE UNLIMITED GIMBAL ANGLE CHGS
 | |
| 
 | |
| 		CA	MPAC +2		# LIMIT THE MGA
 | |
| 		TS	L		# CAN'T LXCH:  NEED UNLIMITED MGA FOR ALARM
 | |
| 		CA	CDUZDLIM
 | |
| 		TC	LIMITSUB	# YIELDS LIMITED MGA.  1 BIT ERROR POSSIBLE
 | |
| 		XCH	MPAC +2		# 	BECAUSE USING 2'S COMP.  WHO CARES?
 | |
| 		EXTEND
 | |
| 		MSU	MPAC +2		# THIS BETTER YIELD ZERO
 | |
| 		EXTEND
 | |
| 		BZF	+2
 | |
| 		TCF	ALARMMGA
 | |
| 
 | |
| MGARET		INHINT			# RELINT AT TC INTPRET AFTER TCQCDUW
 | |
| 
 | |
| 		ZL
 | |
| 		CA	TWO
 | |
| DELGMBLP	TS	TEM2
 | |
| 
 | |
| 		CA	L		# TO PREVENT FALSE STARTS ABOUT X, ZERO
 | |
| 		EXTEND			#	FLAGOODW IF DELGMBZ OR Y TOO BIG.
 | |
| 		SQUARE
 | |
| 		AD	HI5		# WITHIN 1 BIT OF -(45 DEG SQUARED)
 | |
| 		EXTEND
 | |
| 		BZMF	+3
 | |
| 		CA	ZERO
 | |
| 		TS	FLAGOODW
 | |
| 
 | |
| 		INDEX	TEM2
 | |
| 		CA	MPAC
 | |
| 		INDEX	TEM2
 | |
| 		TS	CPHI		# OUTPUTS TO NOUN22
 | |
| 		EXTEND
 | |
| 		INDEX	TEM2
 | |
| 		MSU	CDUXD		# NO MATTER THAT THESE SLIGHTLY DIFFERENT
 | |
| 		COM			# FROM WHEN WE INITIALLY FETCHED THEM
 | |
| 		INDEX	TEM2
 | |
| 		TS	-DELGMB		# -UNLIMITED GIMBAL ANGLE CHGS, 1'S, PI
 | |
| 		TS	L		# FOR PRECEDING TEST ON NEXT LOOP PASS
 | |
| 		CCS	TEM2
 | |
| 		TCF	DELGMBLP
 | |
| 
 | |
| # Page 915
 | |
| # BRANCHES TO NOATTCNT
 | |
| 		CCS	FLPAUTNO
 | |
| 		TCF	NOATTCNT +2	# NO PNGCS AUTO
 | |
| 
 | |
| 		CA	FLAGWRD5
 | |
| 		MASK	ENGONBIT
 | |
| 		EXTEND
 | |
| 		BZF	NOATTCNT +2	# ENGINE NOT ON
 | |
| 
 | |
| # Page 916
 | |
| # LIMIT THE ATTITUDE ANGLE CHANGES
 | |
| #
 | |
| # THIS SECTION LIMITS THE ATTITUDE ANGLE CHANGES ABOUT A SET OF ORTHOGONAL VEHICLE AXES X,YPRIME,ZPRIME,
 | |
| # THESE AXES COINCIDE WITH THE COMMANDED VEHICLE AXES IF AND ONLY IF CDUXD IS ZERO.  THE PRIME SYSTEM IS
 | |
| # THE COMMANDED VEHICLE SYSTEM ROTATED ABOUT THE X AXIS TO BRING THE Z AXIS INTO ALIGNMENT WITH THE MIDDLE GIMBAL
 | |
| # AXIS.  ATTITUDE ANGLE CHANGES IN THE PRIME SYSTEM ARE RELATED TO SMALL GIMBAL ANGLE CHANGES BY:
 | |
| #
 | |
| #	[   -DELATTX    ]   [ 1     SIN(CDUZD)     0 ] [ -DELGMBX ]
 | |
| #	[               ]   [                        ] [          ]
 | |
| #	[ -DELATTYPRIME ] = [ 0     COS(CDUZD)     0 ] [ -DELGMBY ]
 | |
| #	[               ]   [                        ] [          ]
 | |
| #	[ -DELATTZPRIME ]   [ 0         0          1 ] [ -DELGMBZ ]
 | |
| 
 | |
| 		LXCH	-DELGMB +2	# SAME AS -DELATTZPRIME UNLIMITED
 | |
| 		INDEX	NDXCDUW
 | |
| 		CA	DAZMAX
 | |
| 		TC	LIMITSUB
 | |
| 		TS	-DELGMB +2	# -DELGMBZ
 | |
| 
 | |
| 		CA	-DELGMB +1
 | |
| 		EXTEND
 | |
| 		MP	COSCDUZ		# YIELDS -DELATTYPRIME/2 UNLIMITED
 | |
| 		TS	L
 | |
| 		INDEX	NDXCDUW
 | |
| 		CA	DAY/2MAX
 | |
| 		TC	LIMITSUB
 | |
| 		EXTEND
 | |
| 		DV	COSCDUZ
 | |
| 		XCH	-DELGMB +1	# -DELGMBY, FETCHING UNLIMITED VALUE
 | |
| 
 | |
| 		EXTEND
 | |
| 		MP	SINCDUZ
 | |
| 		DDOUBL
 | |
| 		COM
 | |
| 		EXTEND			# YIELDS +DELATTX UNLIMITD, MAG < 180 DEG.
 | |
| 		MSU	-DELGMB		#	BASED ON UNLIMITED DELGMBV.
 | |
| 		TS	L		#	ONE BIT ERROR IF OPERANDS IN MSU
 | |
| 		INDEX	NDXCDUW		#	OF MIXED SIGNS.  WHO CARES?
 | |
| 		CA	DAXMAX
 | |
| 		TC	LIMITSUB
 | |
| 		TS	-DELGMB		# SAVE LIMITED +DELATTX
 | |
| 		CCS	FLAGOODW
 | |
| 		CS	-DELGMB		# FETCH IT BACK CHGING SIGN IF WINDOW GOOD
 | |
| 		TS	-DELGMB		# OTHERWISE USE ZERO FOR -DELATTX
 | |
| 		CS	-DELGMB +1
 | |
| 		EXTEND
 | |
| 		MP	SINCDUZ
 | |
| 		DDOUBL			# YIELDS -CNTRIB TO -DELATTX FROM -DELGMBY
 | |
| 		ADS	-DELGMB		# -DELGMBX.  NO OVERFLOW SINCE LIMITED TO
 | |
| 					# 20DEG(1+SIN(70DEG)/COS(70DEG)) < 180DEG
 | |
| 
 | |
| # Page 917
 | |
| # COMPUTE COMMANDED ATTITUDE RATES
 | |
| #
 | |
| #	[ OMEGAPD ]   [ -2         -4 SINCDUZ              +0    ] [ -DELGMBZ ]
 | |
| #	[         ]   [                                          ] [          ]
 | |
| #	[ OMEGAQD ] = [ +0     -8 COSCDUZ COSCDUX     -4 SINCDUX ] [ -DELGMBY ]
 | |
| #	[         ]   [                                          ] [          ]
 | |
| #	[ OMEGARD ]   [ +0     +8 COSCDUZ SINCDUX     -4 COSCDUX ] [ -DELGMBZ ]
 | |
| #
 | |
| # ATTITUDE ANGLE RATES IN UNITS OF PI/4 RAD/SEC = K TRIG FCNS IN UNITS OF 2 X GIMBAL ANGLE RATES IN UNITS OF
 | |
| # PI/2 RAD/SEC.  THE CONSTANTS ARE BASED ON DELGMB BEING THE GIMBAL ANGLE CHANGES IN UNITS OF PI RADIANS,
 | |
| # AND 2 SECONDS BEING THE COMPUTATION PERIOD (THE PERIOD BETWEEN SUCCESSIVE PASSES THRU FINDCDUW).
 | |
| 
 | |
| 		CS	-DELGMB
 | |
| 		TS	OMEGAPD
 | |
| 		CS	-DELGMB +1
 | |
| 		EXTEND
 | |
| 		MP	SINCDUZ
 | |
| 		DDOUBL
 | |
| 		ADS	OMEGAPD
 | |
| 		ADS	OMEGAPD
 | |
| 
 | |
| 		CS	-DELGMB +1
 | |
| 		EXTEND
 | |
| 		MP	COSCDUX
 | |
| 		DDOUBL
 | |
| 		EXTEND
 | |
| 		MP	COSCDUZ
 | |
| 		TS	OMEGAQD
 | |
| 		CS	-DELGMB +2
 | |
| 		EXTEND
 | |
| 		MP	SINCDUX
 | |
| 		ADS	OMEGAQD
 | |
| 		ADS	OMEGAQD
 | |
| 		ADS	OMEGAQD
 | |
| 
 | |
| 		CA	-DELGMB +1
 | |
| 		EXTEND
 | |
| 		MP	SINCDUX
 | |
| 		DDOUBL
 | |
| 		EXTEND
 | |
| 		MP	COSCDUZ
 | |
| 		TS	OMEGARD
 | |
| 		CS	-DELGMB +2
 | |
| 		EXTEND
 | |
| 		MP	COSCDUX
 | |
| 		ADS	OMEGARD
 | |
| 		ADS	OMEGARD
 | |
| 		ADS	OMEGARD
 | |
| 
 | |
| # Page 918
 | |
| # FINAL TRANSFER
 | |
| 
 | |
| 		CA	TWO
 | |
| CDUWXFR		TS	TEM2
 | |
| 		INDEX	TEM2
 | |
| 		CA	-DELGMB
 | |
| 		EXTEND
 | |
| 		MP	DT/DELT		# RATIO OF DAP INTERVAL TO CDUW INTERVAL
 | |
| 		TC	ONESTO2S
 | |
| 		INDEX	TEM2
 | |
| 		TS	DELCDUX		# ANGLE INTERFACE
 | |
| 
 | |
| 		INDEX	TEM2
 | |
| 		CCS	OMEGAPD
 | |
| 		AD	ONE
 | |
| 		TCF	+2
 | |
| 		AD	ONE
 | |
| 		EXTEND			# WE NOW HAVE ABS(OMEGAPD,QD,RD)
 | |
| 		INDEX	TEM2
 | |
| 		MP	OMEGAPD
 | |
| 		EXTEND
 | |
| 		MP	BIT11		# 1/16
 | |
| 		EXTEND
 | |
| 		INDEX	TEM2		#                  2
 | |
| 		DV	1JACC		# UNITS PI/4 RAD/SEC
 | |
| 		TS	L
 | |
| 		CA	DELERLIM
 | |
| 		TC	LIMITSUB
 | |
| 		INDEX	TEM2
 | |
| 		TS	DELPEROR	# LAG ANGLE = OMEGA ABS(OMEGA)/2 ACCEL
 | |
| 		CCS	TEM2
 | |
| 		TCF	CDUWXFR
 | |
| 
 | |
| # HAUSKEEPING AND RETURN
 | |
| 
 | |
| TCQCDUW		CA	ECDUWUSR
 | |
| 		TS	EBANK		# RETURN USER'S EBANK
 | |
| 
 | |
| 		TC	INTPRET
 | |
| 		SETPD	GOTO
 | |
| 			0
 | |
| 			QCDUWUSR	# NORMAL AND ABNORMAL RETURN TO USER
 | |
| 
 | |
| # Page 919
 | |
| # THRUST VECTOR FILTER SUBROUTINE
 | |
| 
 | |
| FLTRSUB		EXTEND
 | |
| 		QXCH	TEM2
 | |
| 		TS	TEM3		# SAVE ORIGINAL OFFSET
 | |
| 		COM			# ONE MCT, NO WDS, CAN BE SAVED IF NEG OF
 | |
| 		AD	L		#	ORIG OFFSET ARRIVES IN A, BUT IT'S
 | |
| 		EXTEND			# 	NOT WORTH THE INCREASED OBSCURITY.
 | |
| 		INDEX	NDXCDUW
 | |
| 		MP	GAINFLTR
 | |
| 		TS	L		# INCR TO OFFSET, UNLIMITED
 | |
| 		CA	DUNFVLIM	# SAME LIMIT FOR Y AND Z
 | |
| 		TC	LIMITSUB	# YIELDS INCR TO OFFSET, LIMITED
 | |
| 		AD	TEM3		# ORIGINAL OFFSET
 | |
| 		TS	L		# TOTAL OFFSET, UNLIMITED
 | |
| 		CA	UNFVLIM		# SAME LIMIT FOR Y AND Z
 | |
| 		TC	LIMITSUB	# YIELDS TOTAL OFFSET, LIMITED
 | |
| 		TC	TEM2
 | |
| 
 | |
| # SUBR TO TEST THE ANGLE BETWEEN THE PROPOSED WINDOW AND THRUST CMD VCTS
 | |
| 
 | |
| UNWCTEST 	DOT	DSQ
 | |
| 			UNX/2
 | |
| 		DSU	BMN
 | |
| 			DOTSWFMX
 | |
| 			DCMCL
 | |
| 		SSP	RVQ		# RVQ FOR ALT CHOICE IF DOT MAGN TOO LARGE
 | |
| 			FLAGOODW	# 	ZEROING WINDOW GOOD FLAG
 | |
| 			0
 | |
| 
 | |
| # Page 920
 | |
| # NB2CDUSP RETURNS THE 2'S COMPLEMENT, PI, SP CDU ANGLES X,Y,Z IN MPAC,+1,+2 GIVEN THE MATRIX WHOSE ROW VECTORS
 | |
| # ARE THE SEMI-UNIT NAV BASE VECTORS X,Y,X EXPRESSED IN STABLE MEMBER COORDINATES, LOCATED AT 0 IN THE PUSH LIST.
 | |
| # NB2CDUSP USES THE ARCTRGSP WHICH HAS A MAXIMUM ERROR OF +-4 BITS.
 | |
| 
 | |
| NB2CDUSP	DLOAD	DSQ
 | |
| 			2
 | |
| 		BDSU	BPL
 | |
| 			DP1/4TH
 | |
| 			+3
 | |
| 		DLOAD
 | |
| 			ZEROVECS	# IN CASE SIN WAS SLIGHTLY > 1/2
 | |
| 		SQRT	EXIT		# YIELDS COS(CDUZ) IN UNITS OF 2
 | |
| 
 | |
| 		EXTEND
 | |
| 		DCA	MPAC
 | |
| 		DDOUBL
 | |
| 		TS	TEM5
 | |
| 		TCF	+3
 | |
| 		CA	POSMAX		# OVERFLOW.  FETCH POSMAX, MPAC ALWAYS POS
 | |
| 		TS	TEM5		# COS(CDUZ) IN TEM5, UNITS 1
 | |
| 
 | |
| 		INDEX	FIXLOC
 | |
| 		CA	2
 | |
| 		LXCH	MPAC
 | |
| 		TC	ARCTRGSP
 | |
| 		TS	MPAC +2		# CDUZ
 | |
| 
 | |
| 		CA	ZERO
 | |
| 		TC	DVBYCOSM
 | |
| 		CA	FOUR
 | |
| 		TC	DVBYCOSM
 | |
| 		CS	TEM1
 | |
| 		TC	ARCTRGSP
 | |
| 		TS	MPAC +1		# CDUY
 | |
| 
 | |
| 		CA	BIT4
 | |
| 		TC	DVBYCOSM
 | |
| 		CA	16OCT
 | |
| 		TC	DVBYCOSM
 | |
| 		CS	TEM1
 | |
| 		TC	ARCTRGSP
 | |
| 		TS	MPAC		# CDUX
 | |
| 
 | |
| 		TC	INTPRET
 | |
| 		RVQ
 | |
| 
 | |
| 16OCT		OCT	16
 | |
| 
 | |
| # Page 921
 | |
| # THE ELEMENTS OF THE NAV BASE MATRIX WHICH WE MUST DIVIDE BY COS(MGA)
 | |
| # ALREADY CONTAIN COS(MGA)/2 AS A FACTOR. THEREFORE THE QUOTIENT SHOULD
 | |
| # ORDINARILY NEVER EXCEED 1/2 IN MAGNITUDE.  BUT IF THE MGA IS NEAR PI/2
 | |
| # THEN COS(MGA) IS NEAR ZERO, AND THERE MAY BE SOME CHAFF IN THE OTHER
 | |
| # ELEMENTS OF THE MATRIX WHICH WOULD PRODUCE CHAOS UNDER DIVISION.
 | |
| # BEFORE DIVIDING WE MAKE SURE COS(MGA) IS AT LEAST ONE BIT LARGER
 | |
| # THAN THE MAGNITUDE OF THE HIGH ORDER PART OF THE OPERAND.
 | |
| #
 | |
| # IF ONE OR MORE DIVIDES CANNOT BE PERFORMED, THIS MEANS THAT THE
 | |
| # REQUIRED MGA IS VERY NEARLY +-PI/2 AND THEREFORE THE OTHER GIMBAL
 | |
| # ANGLES ARE INDETERMINATE.  THE INNER AND OUTER GIMBAL ANGLES RETURNED
 | |
| # IN THIS CASE WILL BE RANDOM MULTIPLES OF PI/2.
 | |
| 
 | |
| DVBYCOSM	AD	FIXLOC
 | |
| 		TS	ADDRWD		# ADRES OF OPERAND
 | |
| 
 | |
| 		INDEX	ADDRWD		# FETCH NEG ABS OF OPERAND, AD TEM5, AND
 | |
| 		CA	0		#	SKIP DIVIDE IF RESULT NEG OR ZERO
 | |
| 		EXTEND
 | |
| 		BZMF	+2
 | |
| 		COM
 | |
| 		AD	TEM5		# C(A) ZERO OR NEG, C(TEM5) ZERO OR POS
 | |
| 		EXTEND
 | |
| 		BZMF	TSL&TCQ		# DIFFERENCE ALWAYS SMALL IF BRANCH
 | |
| 
 | |
| 		EXTEND			# TEM5 EXCEEDS ABS HIGH ORDER PART OF
 | |
| 		INDEX	ADDRWD		#	OPERAND BY AT LEAST ONE BIT.
 | |
| 		DCA	0		#	THEREFORE IT EXCEEDS THE DP OPERAND
 | |
| 		EXTEND			# 	AND DIVISION WILL ALWAYS SUCCEED.
 | |
| 		DV	TEM5
 | |
| TSL&TCQ		TS	L
 | |
| 		LXCH	TEM1
 | |
| 		TC	Q
 | |
| 
 | |
| # Page 922
 | |
| # ARCTRGSP RETURNS THE 2'S COMPLEMENT, PI, SP ANGLE IN THE A REGISTER GIVEN ITS SINE IN A AND ITS COSINE IN L IN
 | |
| # UNITS OF 2.  THE RESULT IS AN UNAMBIGUOUS ANGLE ANYWHERE IN THE CIRCLE, WITH A MAXIMUM ERROR OF +-4 BITS.
 | |
| # THE ERROR IS PRODUCED BY THE SUBROUTINE SPARCSIN WHICH IS USED ONLY IN THE REGION +-45 DEGREES.
 | |
| 
 | |
| ARCTRGSP	EXTEND
 | |
| 		BZF	SINZERO		# TO AVOID DIVIDING BY ZERO
 | |
| 
 | |
| 		EXTEND
 | |
| 		QXCH	TEM4
 | |
| 		TS	TEM2
 | |
| 		CA	L
 | |
| 		TS	TEM3
 | |
| 		CA	ZERO
 | |
| 		EXTEND
 | |
| 		DV	TEM2
 | |
| 		EXTEND
 | |
| 		BZF	USECOS
 | |
| 
 | |
| 		CCS	TEM3		# SIN IS SMALLER OR EQUAL
 | |
| 		CA	ZERO
 | |
| 		TCF	+4
 | |
| 		CS	TEM2		# IF COS NEG, REVERSE SIGN OF SIN,
 | |
| 		TS	TEM2		#	ANGLE = PI-ARCSIN(SIN)
 | |
| 		CA	NEGMAX		# PICK UP PI, 2'S COMPLEMENT
 | |
| 		TS	TEM3		# WE NO LONGER NEED COS
 | |
| 		CA	TEM2
 | |
| 		TC	SPARCSIN -1
 | |
| 		TC	ONESTO2S
 | |
| 		EXTEND
 | |
| 		MSU	TEM3
 | |
| 1TO2&TCQ	TC	ONESTO2S
 | |
| 		TC	TEM4
 | |
| 
 | |
| USECOS		CS	TEM3		# COS IS SMALLER
 | |
| 		TC	SPARCSIN -1	# ANGLE = SIGN(SIN)(FI/2-ARCSIN(COS))
 | |
| 		AD	HALF
 | |
| 		TS	TEM3		# WE NO LONGER NEED COS
 | |
| 		CCS	TEM2
 | |
| 		CA	TEM3
 | |
| 		TCF	1TO2&TCQ
 | |
| 		CS	TEM3
 | |
| 		TCF	1TO2&TCQ
 | |
| 
 | |
| SINZERO		CCS	L
 | |
| 		CA	ZERO
 | |
| 		TC	Q
 | |
| 		CA	NEGMAX		# PI, 2'S COMP
 | |
| 		TC	Q
 | |
| 
 | |
| # Page 923
 | |
| # SPARCSIN TAKES AN ARGUMENT SCALED UNITY IN A AND RETURNS AN ANGLE SCALED
 | |
| # 180 DEGREES IN A.  IT HAS BEEN UNIT TESTED IN THE REGION +-.94 (+-70
 | |
| # DEGREES) AND THE MAXIMUM ERROR IS +-5 BITS WITH AN AVERAGE TIME OF
 | |
| # 450 MICROSECONDS.  SPARCSIN -1 TAKES THE ARGUMENT SCALED TWO.  (BOB CRISP)
 | |
| 
 | |
| 		DOUBLE
 | |
| SPARCSIN	TS	SR
 | |
| 		TCF	+4
 | |
| 		INDEX	A
 | |
| 		CS	LIMITS
 | |
| 		TS	SR
 | |
| 		EXTEND
 | |
| 		MP	A
 | |
| 		TS	TEM1
 | |
| 		EXTEND
 | |
| 		MP	DPL9
 | |
| 		AD	DPL7
 | |
| 		EXTEND
 | |
| 		MP	TEM1
 | |
| 		AD	DPL5
 | |
| 		EXTEND
 | |
| 		MP	TEM1
 | |
| 		AD	DPL3
 | |
| 		EXTEND
 | |
| 		MP	TEM1
 | |
| 		AD	DPL1
 | |
| 		EXTEND
 | |
| 		MP	SR
 | |
| 		TC	Q
 | |
| DPL1		DEC	10502
 | |
| DPL3		DEC	432
 | |
| DPL5		DEC	7300
 | |
| DPL7		DEC	-11803
 | |
| DPL9		DEC	8397
 | |
| 
 | |
| # Page 924
 | |
| # LIMITSUB LIMITS THE MAGNITUDE OF THE POSITIVE OR NEGATIVE VARIABLE
 | |
| # ARRIVING IN L TO THE POSITIVE LIMIT ARRIVING IN A.
 | |
| # THE SIGNED LIMITED VARIABLE IS RETURNED IN A.
 | |
| #
 | |
| # VERSION COUTESY HUGH BLAIR-SMITH
 | |
| 
 | |
| LIMITSUB	TS	TEM1
 | |
| 		CA	ZERO
 | |
| 		EXTEND
 | |
| 		DV	TEM1
 | |
| 		CCS	A
 | |
| 		LXCH	TEM1
 | |
| 		TCF	+2
 | |
| 		TCF	+3
 | |
| 		CA	L
 | |
| 		TC	Q
 | |
| 		CS	TEM1
 | |
| 		TC	Q
 | |
| 
 | |
| # SUBROUTINE TO CONVERT 1'S COMP SP TO 2'S COMP
 | |
| 
 | |
| ONESTO2S	CCS	A
 | |
| 		AD	ONE
 | |
| 		TC	Q
 | |
| 		CS	A
 | |
| 		TC	Q
 | |
| 
 | |
| # NO ATTITUDE CONTROL
 | |
| 
 | |
| NOATTCNT	TC	ALARM
 | |
| 		OCT	00402		# NO ATTITUDE CONTROL
 | |
| 
 | |
|  +2		INHINT			# COME HERE FOR NOATTCNT WITHOUT ALARM
 | |
|  		TC	IBNKCALL	# RELINT AT TC INTPRET AFTER TCQCDUW
 | |
| 		FCADR	STOPRATE
 | |
| 		TCF	TCQCDUW		# RETURN TO USER SKIPPING AUTOPILOT CMDS
 | |
| 
 | |
| # MIDDLE GIMBAL ANGLE ALARM
 | |
| 
 | |
| ALARMMGA	TC	ALARM
 | |
| 		OCT	00401
 | |
| 		TCF	MGARET
 | |
| 
 | |
| # Page 925
 | |
| #******************************************************************
 | |
| # CONSTANTS
 | |
| #******************************************************************
 | |
| 
 | |
| # ADDRESS CONSTANTS
 | |
| 
 | |
| ECDUWL		ECADR	ECDUW
 | |
| 
 | |
| # THRUST DIRECTION FILTER CONSTANTS
 | |
| 
 | |
| GAINFLTR	DEC	.2		# GAIN FILTER SANS CSM
 | |
| 		DEC	.1		# GAIN FILTER WITH CSM
 | |
| 
 | |
| DUNFVLIM	DEC	.007 B-1	# 7 MR MAX CHG IN F DIR IN VEH IN 2 SECS.
 | |
| 					# THIS DOES NOT ALLOW FOR S/C ROT RATE.
 | |
| 
 | |
| UNFVLIM		DEC	.129 B-1	# 129 MR MAX THRUST OFFSET.  105 MR TRAVEL
 | |
| 					# +10MR DEFL+5MR MECH MOUNT+9MR ABLATION.
 | |
| 
 | |
| # CONSTANT RELATED TO GIMBAL ANGLE COMPUTATIONS
 | |
| 
 | |
| DOTSWFMX	DEC	.93302 B-4	# LIM COLNRTY OF UNWC/2 & UNFC/2 TO 85 DEG
 | |
| 					# LOWER PART COMES FROM NEXT CONSTANT
 | |
| 
 | |
| DAXMAX		DEC	.11111111111	# DELATTX LIM TO 20 DEG IN 2 SECS, 1'S, PI
 | |
| 		DEC	.0111111111	# 2 DEG WHEN CSM DOCKED
 | |
| 
 | |
| DAY/2MAX	DEC	.05555555555	# LIKEWISE FOR DELATTY
 | |
| 		DEC	.0055555555
 | |
| 
 | |
| DAZMAX		=	DAXMAX		# LIKEWISE FOR DELATTZ
 | |
| 
 | |
| CDUZDLIM	DEC	.3888888888	# 70 DEG LIMIT FOR MGA, 1'S, PI
 | |
| 
 | |
| # CONSTANTS FOR DATA TRANSFER
 | |
| 
 | |
| DT/DELT		DEC	.05		# .1 SEC/2 SEC WHICH IS THE AUTOPILOT
 | |
| 					# CONTROL SAMPLE PERIOD/COMPUTATION PERIOD
 | |
| 
 | |
| DELERLIM	=	DAY/2MAX	# 	0 DEG LIMIT FOR LAG ANGLES, 1'S, PI
 | |
| 
 | |
| # *** END OF FLY	.132 ***
 |