https://github.com/virtualagc/virtualagc
Revision 078c79d8734a9ed2860303a7c1662004284fe853 authored by Ron Burkey on 07 August 2022, 15:04:04 UTC, committed by Ron Burkey on 07 August 2022, 15:04:04 UTC
assembly listings from yaASM and yaLEMAP. Added some debugging messages
to 'make install'.  Tweaked debugging messages that VirtualAGC embeds in
'simulate'.  Verified buildability in Mint 21, 20, 19, 17, and verified
buildability using clang in Mint 17.
1 parent 6bb1acc
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
TIME_OF_FREE_FALL.agc
### FILE="Main.annotation"
## Copyright:	Public domain.
## Filename:	TIME_OF_FREE_FALL.agc
## Purpose:	Part of the source code for Colossus 2A, AKA Comanche 055.
##		It is part of the source code for the Command Module's (CM)
##		Apollo Guidance Computer (AGC), for Apollo 11.
## Assembler:	yaYUL
## Contact:	Ron Burkey <info@sandroid.org>.
## Website:	www.ibiblio.org/apollo.
## Pages:	1373-1388
## Mod history: 2009-05-10 SN   (Sergio Navarro). Started adapting
##				from the Colossus249/ file of the same
##				name, using Comanche055 page images.
##		2010-08-29 JL	Fixed indentation, whitespace.
##		2016-12-22 RSB	Proofed comment text using octopus/ProoferComments
##				and corrected the errors found.
##		2017-01-20 RSB	Fixed comment-text errors noted while diff'ing
##				vs Colossus 249.
##		2017-03-14 RSB	Comment-text fixes noted in proofing Luminary 116.

## 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 055 of AGC program Comanche by NASA
##    2021113-051.  10:28 APR. 1, 1969 
##
##    This AGC program shall also be referred to as
##            Colossus 2A

## Page 1373
# THE TFF SUBROUTINES MAY BE USED IN EITHER EARTH OR MOON CENTERED COORDINATES.  THE TFF ROUTINES NEVER
# KNOW WHICH ORIGIN APPLIES.  IT IS THE USER WHO KNOWS, AND WHO SUPPLIES RONE, VONE AND 1/SQRT(MU) AT THE
# APPROPRIATE SCALE LEVEL FOR THE PROPER PRIMARY BODY.
#
#	EARTH ORIGIN	POSITION	-29	METERS
#			VELOCITY	-7	METERS/CENTISECOND
#			1/SQRT(MU)	+17	SQRT(CS SQ/METERS CUBED)
#
#	MOON ORIGIN	POSITION	-27	METERS
#			VELOCITY	-5	METERS/CENTISECONDS
#			1/SQRT(MU)	+14	SQRT(CS SQ/METERS CUBED)
#
# ALL DATA PROVIDED TO AND RECEIVED FROM ANY TFF SUBROUTINE WILL BE AT ONE OF THE LEVELS ABOVE.  IN ALL CASES,
# THE FREE FALL TIME IS RETURNED IN CENTISECONDS AT (-28).  PROGRAM TFF/CONIC WILL GENERATE VONE/RTMU AND
# LEAVE IT IN VONE' AT (+10) IF EARTH ORIGIN AND (+9) IF MOON ORIGIN.
#
# THE USER MUST STORE THE STATE VECTOR IN RONE, VONE  AND MU IN THE FORM 1/SQRT(MU) IN TFF/RTMU
# AT THE PROPER SCALE BEFORE CALLING TFF/CONIC.  SINCE RONE, VONE ARE IN THE EXTENDED VERB STORAGE AREA,
# THE USER MUST ALSO LOCK OUT THE EXTENDED VERBS, AND RELEASE THEM WHEN FINISHED.
#
# PROGRAMS CALC/TFF AND CALC/TPER ASSUME THAT THE TERMINAL RADIUS IS LESS THAN THE PRESENT
# RADIUS.  THIS RESTRICTION CAN BE REMOVED BY A 15 W CODING CHANGE, BUT AT PRESENT IT IS NOT DEEMED NECESSARY.
#
# THE FOLLOWING ERASABLE QUANTITIES ARE USED BY THE TFF ROUTINES, AND ARE LOCATED IN THE PUSH LIST.
#
#					BELOW	E:  IS USED FOR EARTH ORIGIN SCALE
#						M:  IS USED FOR MOON  ORIGIN SCALE
#
#TFFSW		=	119D		BIT1	0 = CALCTFF		1 = CALCTPER
TFFDELQ		=	10D	#	Q2-Q1			E: (-16)  M: (-15)
RMAG1		=	12D	#	ABVAL(RN)  M		E: (-29)  M: (-27)
#RPER		=	14D		PERIGEE RADIUS  M	E: (-29)  M: (-27)
TFFQ1		=	14D	#	R.V / SQRT(MUE)		E: (-16)  M: (-15)
#SDELF/2				SIN(THETA) /2
CDELF/2		=	14D	#	COS(THETA) /2
#RAPO		=	16D		APOGEE RADIUS  M	E: (-29)  M: (-27)
NRTERM		=	16D	#	TERMINAL RADIUS  M	E: (-29+NR)
				#					  M: (-27+NR)
RTERM		=	18D	#	TERMINAL RADIUS  M	E: (-29)  M: (-27)
TFFVSQ		=	20D	#	-(V SQUARED/MU)  1/M	E: (20)   M: (18)
TFF1/ALF	=	22D	#	SEMI MAJ AXIS  M	E: (-22-2 NA)
				#					  M: (-20-2 NA)
TFFRTALF	=	24D	#	SQRT(ALFA)		E:(10+NA) M: (9+NA)
TFFALFA		=	26D	#	ALFA  1/M		E:(26-NR) M: (24-NR)
TFFNP		=	28D	#	SEMI LATUS RECTUM  M	E: (-38+2 NR)
				#					  M: (-36+2 NR)
TFF/RTMU	=	30D	#	1/SQRT(MU)		E: (17)   M: (14)
NRMAG		=	32D	#	PRESENT RADIUS  M	E: (-29+NR)
				#					  M: (-27+NR)
TFFX		=	34D     #
TFFTEM		=	36D	#	TEMPORARY
## Page 1374
#		REGISTERS S1, S2 ARE UNTOUCHED BY ANY TFF SUBROUTINE
#		INDEX REGISTERS X1, X2 ARE USED BY ALL TFF SUBROUTINES.  THEY ARE ESTAB-
#		LISHED IN TFF/CONIC AND MUST BE PRESERVED BETWEEN CALLS TO SUBSEQUENT
#		SUBROUTINES.
#		-NR				C(X1) = NORM COUNT OF RMAG
#		-NA				C(X2) = NORM COUNT OF SQRT(ABS(ALFA))

## Page 1375
# SUBROUTINE NAME:  TFFCONIC			DATE:  01.29.67
# MOD NO:  0					LOG SECTION:  TIME OF FREE FALL
# MOD BY:  RR BAIRNSFATHER
# MOD NO:  1	MOD BY:  RR BAIRNSFATHER	DATE: 11 APR 67
# MOD NO:  2	MOD BY:  RR BAIRNSFATHER	DATE: 21 NOV 67		ADD MOON MU.
# MOD NO:  3	MOD BY:  RR BAIRNSFATHER	DATE: 21 MAR 68		ACCEPT DIFFERENT EARTH/MOON SCALES
#
# FUNCTIONAL DESCRIPTION:  THIS SUBROUTINE IS CALLED TO COMPUTE THOSE CONIC PARAMETERS REQUIRED BY THE TFF
#	SUBROUTINES AND TO ESTABLISH THEM IN THE PUSH LIST AREA.  THE PARAMETERS ARE LISTED UNDER OUTPUT.
#	THE EQUATIONS ARE
#		-   -  -
#		H = RN*VN			ANGULAR MOMENTUM
#		      - -
#		LCP = H.H / MU			SEMI LATUS RECTUM
#		              -  -
#		ALFA = 2/RN - VN.VN / MU	RECIPROCAL SEMI MAJ AXIS, SIGNED
#
# 	AND ALFA IS POS FOR ELLIPTIC ORBITS
#	              0 FOR PARABOLIC ORBITS
#	            NEG FOR HYPERBOLIC ORBITS.
#	SUBROUTINE ALSO COMPUTES AND SAVES RMAG.
#
# CALLING SEQUENCE:
#	TFFCONIC EXPECTS CALLER TO ENTER WITH CORRECT GRAVITATIONAL CONSTANT IN MPAC, IN THE FORM
#	1/SQRT(MU).  PROGRAM WILL SAVE IN TFF/RTMU.  THE SCALE IS DETERMINED BY WHETHER EARTH OR MOON
#	ORIGIN IS USED.  THE CALLER MUST LOCK OUT THE EXTENDED VERBS BEFORE PROVIDING STATE VECTOR IN RONE,
#	VONE AT PROPER SCALE.  THE EXTENDED VERBS MUST BE RESTORED WHEN THE CALLER IS FINISHED USING THE
#	TFF ROUTINES.
#
#	ENTRY POINT TFFCONMU EXPECTS THAT TFF/RTMU IS ALREADY LOADED.
#
#	TO SPECIFY MU:	DLOAD	CALL		IF MU ALREADY STORED:		CALL
#				YOURMU		1/RTMU E:(17) M:(14)			TFFCONMU
#				TFFCONIC
#	PUSHLOC = PDL+0, ARBITRARY IF LEQ 18D
#
# SUBROUTINES CALLED:  NONE
#
# NORMAL EXIT MODES:  RVQ
#
# ALARMS:  NONE
#
# OUTPUT:	THE FOLLOWING ARE STORED IN THE PUSH LIST AREA.
#		RMAG1		E:(-29) M:(-27)		M  RN, PRESENT RADIUS LENGTH.
#		NRMAG		E:(-29+NR)		M  RMAG, NORMALIZED
#				M:(-27+NR)
#		X1					-NR, NORM COUNT
#		TFFNP		E:(-38+2NR)		M  LCP, SEMI LATUS RECTUM, WEIGHTED BY NR.  FOR VGAMCALC
#				M:(-36+2NR)
#		TFF/RTMU	E:(17) M:(14)		1/SQRT(MU)
#		TFFVSQ		E:(20) M:(18)		1/M  -(V SQ/MU):  PRESENT VELOCITY, NORMLIZED.  FOR VGAMCALC
#		TFFALFA		E:(26-NR)		1/M  ALFA, WEIGHTED BY NR
#				M:(24-NR)
#		TFFRTALF	E:(10+NA)		SQRT(ALFA), NORMALIZED
#				M:(9+NA)
## Page 1376
#		X2					-NA, NORM COUNT
#		TFF1/ALF	E:(-22-2NA)		SIGNED SEMI MAJ AXIS, WEIGHTED BY NA
#				M:(-20-2NA)
#		PUSHLOC AT PDL+0
#
#	THE FOLLOWING IS STORED IN GENERAL ERASABLE
#		VONE'		E:(10) M:(9)		V/RT(MU), NORMALIZED VELOCITY
#
# ERASABLE INITIALIZATION REQUIRED:
#		RONE		E:(-29) M:(-27)		M  STATE VECTOR		LEFT BY CALLER
#		VONE		E:(-7) M:(-5)		M/CS  STATE VECTOR	LEFT BY CALLER
#		TFF/RTMU	E:(17) M:(14)		1/RT(CS SQ/M CUBE)	IF ENTER VIA TFFCONMU.
#
# DEBRIS:	QPRET,	PDL+0 ... PDL+3

		BANK	33
		SETLOC	TOF-FF
		BANK

		COUNT*	$$/TFF

TFFCONIC	STORE	TFF/RTMU	# 1/SQRT(MU)	E:(17) M:(14)

TFFCONMU	VLOAD	UNIT		# COME HERE WITH TFFRTMU LOADED.
			RONE		# SAVED RN.  M  E:(-29) M:(-27)
		PDDL			# UR/2 TO PDL+0, +5
			36D		# MAGNITUDE
		STORE	RMAG1		# M  E:(-29) M:(-27)

		NORM
			X1		# -NR
		STOVL	NRMAG		# RMAG  M  E:(-29+NR) M:(-27+NR)
			VONE		# SAVED VN.  M/CS  E:(-7) M:(-5)
		VXSC
			TFF/RTMU	# E:(17) M:(14)
		STORE	VONE'		# VN/SQRT(MU)  E:(10) M:(9)

		VXSC	VXV
			NRMAG		# E:(-29+NR) M:(-27+NR)
					# UR/2 FROM PDL
		VSL1	VSQ		# BEFORE:  E:(-19+NR) M:(-18+NR)
		STODL	TFFNP		# LC P  M  E:(-38+2NR) M:(-36+2NR)
					# SAVE ALSO FOR VGAMCALC
			TFF1/4
		DDV	PDVL		# (2/RMAG)  1/M  E:(26-NR) M:(24-NR)
			NRMAG		# RMAG  M  E:(-29+NR) M:(-27+NR)
			VONE'		# SAVED VN.  E:(10) M:(9)
		VSQ	DCOMP		# KEEP MPAC+2 HONEST FOR SQRT.
		STORE	TFFVSQ		# -(V SQ/MU)  E:(20) M:(18)
					# SAVE FOR VGAMCALC
		SR*	DAD
## Page 1377
			0 -6,1		# GET -VSQ/MU  E:(26-NR) M:(24-NR)
		STADR
					# 2/RMAG  FROM PDL+2
		STORE	TFFALFA		# ALFA  1/M  E:(26-NR) M:(24-NR)
		SL*	PUSH		# TEMP SAVE ALFA  E:(20) M:(18)
			0 -6,1
		ABS	SQRT		# E:(10) M:(9)
		NORM
			X2		# X2 = -NA
		STORE	TFFRTALF	# SQRT( ABS(ALFA) )  E:(10+NA) M:(9+NA)
		DSQ	SIGN		# NOT SO ACCURATE, BUT OK
					# ALFA FROM PDL+2  E:(20) M:(18)
		BZE	BDDV		# SET 1/ALFA =0, TO SHOW SMALL ALFA
			+2
			TFF1/4
 +2		STORE	TFF1/ALF	# 1/ALFA  E:(-22-2NA) M:(-20-2NA)
DUMPCNIC	RVQ
					#			39 W
## Page 1378
# SUBROUTINE NAME:  TFFRP/RA			DATE: 01.17.67
# MOD NO:  0					LOG SECTION:  TIME OF FREE FALL
# MOD BY:  RR BAIRNSFATHER
# MOD NO:  1	MOD BY:  RR BAIRNSFATHER	DATE: 11 APR 67
# MOD NO:  2	MOD BY:  RR BAIRNSFATHER	DATE: 21 MAR 68		ACCEPT DIFFERENT EARTH/MOON SCALES
#									ALSO IMPROVE ACCURACY OF RAPO.
#
# FUNCTIONAL DESCRIPTION:  USED BY CALCTPER AND TFF DISPLAYS TO CALCULATE PERIGEE RADIUS AND ALSO
#	APOGEE RADIUS FOR A GENERAL CONIC.
#	PROGRAM GIVES PERIGEE RADIUS AS		APOGEE RADIUS IS GIVEN BY
#		RP = P/(1+E)				RA = (1+E) / ALFA
#	WHERE    2
#		E  = 1 - P ALFA
#	IF RA IS NEGATIVE OR SHOWS DIVIDE OVERFLOW, THEN RA = POSMAX BECAUSE
#		1. APOGEE RADIUS IS NOT MEANINGFUL FOR HYPERBOLA
#		2. APOGEE RADIUS IS NOT DEFINED FOR PARABOLA
#		3. APOGEE RADIUS EXCEEDS THE SCALING FOR ELLIPSE.
#
#	THIS SUBROUTINE REQUIRES THE SIGNED RECIPROCAL SEMI MAJ AXIS, ALFA, AND SEMI LATUS RECTUM AS DATA.
#
# CALLING SEQUENCE:	CALL
#				TFFRP/RA
#	PUSHLOC = PDL+0, ARBITRARY IF LEQ 10D
#	C(MPAC) UNSPECIFIED
#
# SUBROUTINES CALLED:	NONE
#
# NORMAL EXIT MODE:	RVQ
#	IF ELLIPSE, WITHIN NORMAL SCALING, RAPO IS CORRECT.
#	OTHERWISE, RAPO = POSMAX.
#
# ALARMS:	NONE
#
# OUTPUT:	STORED IN PUSH LIST AREA.  SCALE OF OUTPUT AGREES WITH DATA SUPPLIED TO TFF/CONIC.
#	RPER	E:(-29) M:(-27)		M	PERIGEE RADIUS		DESTROYED BY CALCTFF/CALCTPER, TFFTRIG.
#	RAPO	E:(-29) M:(-27)		M	APOGEE RADIUS		WILL BE DESTROYED BY CALCTFF/CALCTPER
#	PUSHLOC AT PDL+0
#
# ERASABLE INITIALIZATION REQUIRED:
#	TFFALFA	E:(26-NR)		M	1/SEMI MAJ AXIS	LEFT BY TFFCONIC
#		M:(24-NR)
#	TFFNP	E:(-38+2NR)		M	LC P, SEMI LATUS RECTUM	LEFT BY TFFCONIC
#		M:(-36+2NR)
#	X1				-NR, NORM COUNT OF RMAG		LEFT BY TFFCONIC
#	X2				-NA, NORM COUNT OF ALFA		LEFT BY TFFCONIC
#
# DEBRIS:	QPRET, PDL+0 ... PDL+1

## Page 1379
RAPO		=	16D		# APOGEE RADIUS  M  E:(-29) M:(-27)
RPER		=	14D		# PERIGEE RADIUS  M  E:(-29) M:(-27)

TFFRP/RA	DLOAD	DMP
			TFFALFA		# ALFA  1/M  E:(26-NR) M:(24-NR)
			TFFNP		# LC P  M E:(-38+2NR) M:(-36+2NR)
		SR*	DCOMP		# ALFA P (-12+NR)
			0 -8D,1		# ALFA P (-4)
		DAD	ABS		# (DCOMP GIVES VALID TP RESULT FOR SQRT)
					# (ABS PROTECTS SQRT IF E IS VERY NEAR 0)
			DP2(-4)
		SQRT	DAD		# E SQ = (1- P ALFA) (-4)
			TFF1/4
		PUSH	BDDV		# (1+E)  (-2)  TO PDL+0
			TFFNP		# LCP  M  E:(-38+2NR) M:(-36+2NR)
		SR*	SR*		# (DOES SR THEN SL TO AVOID OVFL)
			0,1		# X1=-NR
			0 -7,1		# (EFFECTIVE SL)
		STODL	RPER		# PERIGEE RADIUS  M  E:(-29) M:(-27)
					# (1+E)  (-2)  FROM PDL+0
		DMP	BOVB
			TFF1/ALF	# E:(-22-2NA) M:(-20-2NA)
			TCDANZIG	# CLEAR OVFIND, IF ON.
		BZE	SL*
			MAXRA		# SET POSMAX, IF ALFA=0
			0 -5,2		# -5+NA
		SL*	BOV
			0,2
			MAXRA		# SET POSMAX IF OVFL.
		BPL			# CONTINUE WITH VALID RAPO.
			+3
MAXRA		DLOAD			# RAPO CALC IS NOT VALID.  SET RAPO =
			NEARONE		# POSMAX AS A TAG.
 +3		STORE	RAPO		# APOGEE RADIUS  M  E:(-29) M:(-27)
DUMPRPRA	RVQ
					#			30 W
## Page 1380
# SUBROUTINE NAME:  CALCTPER / CALCTFF		DATE:  01.29.67
# MOD NO:  0					LOG SECTION:  TIME OF FREE FALL
# MOD BY:  RR BAIRNSFATHER
# MOD NO:  1	MOD BY:  RR BAIRNSFATHER	DATE: 21 MAR 67
# MOD NO:  2	MOD BY:  RR BAIRNSFATHER	DATE: 14 APR 67
# MOD NO:  3	MOD BY:  RR BAIRNSFATHER	DATE: 8 JUL 67		NEAR EARTH MUE AND NEG TFF (GONEPAST)
# MOD NO:  4	MOD BY:  RR BAIRNSFATHER	DATE: 21 NOV 67		ADD VARIABLE MU.
# MOD NO:  5	MOD BY:  RR BAIRNSFATHER	DATE: 21 MAR 68		ACCEPT DIFFERENT EARTH/MOON SCALES
#
# FUNCTIONAL DESCRIPTION:  PROGRAM CALCULATES THE FREE-FALL TIME OF FLIGHT FROM PRESENT POSITION RN AND
#	VELOCITY VN TO A RADIUS LENGTH SPECIFIED BY RTERM, SUPPLIED BY THE USER.  THE POSITION VECTOR
#	RN MAY BE ON EITHER SIDE OF THE CONIC, BUT RTERM IS CONSIDERED ON THE INBOUND SIDE.
#	THE EQUATIONS ARE
#
#		Q2 = -SQRT(RTERM (2-RTERM ALFA) - LCP)	(INBOUND SIDE))	LEQ +- LCE/SQRT(ALFA)
#		     -  -
#		Q1 = RN.VN / SQRT(MU)					LEQ +- LCE/SQRT(ALFA)
#
# 		Z = NUM / DEN						LEQ +- 1/SQRT(ALFA)
#
#	WHERE, IF INBOUND
#		NUM = RTERM -RN						LEQ +- 2 LCE/ALFA
#		DEN = Q2+Q1						LEQ +- 2 LCE/SQRT(ALFA)
#
# 	AND, IF OUTBOUND
#		NUM = Q2-Q1						LEQ +- 2 LCE/SQRT(ALFA)
#		DEN = 2 - ALFA (RTERM + RN).				LEQ +- 2 LCE
#
#	IF 	ALFA ZZ < 1.0		(FOR ALL CONICS EXCEPT ELLIPSES HAVING ABS(DEL ECC ANOM) G 90 DEG)
#	THEN	X = ALFA Z Z
#	AND	TFF = (RTERM +RN -2 ZZ T(X) ) Z/SQRT(MU)
#		EXCEPT 	IF ALFA PNZ, AND IF TFF NEG,
#		THEN	TFF = 2 PI /(ALFA SQRT(ALFA)) + TFF
#	OR	IF ALFA ZZ GEQ 1.0	(FOR ELLIPSES HAVING ABS(DEL ECC ANOM) GEQ 90 DEG)
#	THEN	X = 1/ALFA Z Z
#	AND	TFF = (PI/SQRT(ALFA) -Q2 +Q1 +2(X T(X) -1) /ALFA Z) /ALFA SQRT(MU)
#	WHERE	T(X) IS A POLYNOMIAL APPROXIMATION TO THE SERIES
#		             2      3             2
#		1/3 - X/5 + X /7 - X /9 ...	(X  < 1.0)
#
# CALLING SEQUENCE:	TIME TO RTERM			TIME TO PERIGEE
#			CALL				CALL
#				CALCTFF				CALCTPER
#			C(MPAC) = TERMNL RAD M		C(MPAC) = PERIGEE RAD M
#	FOR EITHER, E:(-29) M:(-27)
#	FOR EITHER, PUSHLOC = PDL+0, ARBITRARY IF LEQ 8D.
## Page 1381
#
# SUBROUTINES CALLED:	T(X), VIA RTB
#
# NORMAL EXIT MODE:	RVQ
#	HOWEVER, PROGRAM EXITS WITH ONE OF THE FOLLOWING VALUES FOR TFF (-28) CS IN MPAC.  USER MUST STORE.
#		A. TFF = FLIGHT TIME.  NORMAL CASE FOR POSITIVE FLIGHT TIME LESS THAN ONE ORBITAL PERIOD.
#		B. (THIS OPTION IS NO LONGER USED.)
#		C. TFF = POSMAX.  THIS INDICATES THAT THE CONIC FROM THE PRESENT POSITION WILL NOT RETURN TO
#		   THE SPECIFIED ALTITUDE.  ALSO INDICATES OUTBOUND PARABOLA OR HYPERBOLA.
#
# OUTPUT:	C(MPAC)		(-28) CS	TIME OF FLIGHT, OR TIME TO PERIGEE
#		TFFX		(0)		X,					LEFT FOR ENTRY DISPLAY TFF ROUTINES
#		NRTERM		E:(-29+NR) M	RTERM, WEIGHTED BY NR			LEFT FOR ENTRY DISPLAY TFF ROUTINES
#				M:(-27+NR)
#		TFFTEM		E:(-59+2NR)	LCP Z Z SGN(SDELF)			LEFT FOR ENTRY DISPLAY TFF ROUTINES
#				M:(-55+2NR)	LCP /ALFA SGN(SDELF)			LEFT FOR ENTRY DISPLAY TFF ROUTINES
#		NOTE:	TFFTEM = PDL 36D AND WILL BE DESTROYED BY .:UNIT:.
#		RMAG1		E:(-29) M:(-27)	PDL 12 NOT TOUCHED.
#		TFFQ1		E:(-16) M:(-15)	PDL 14D
#		TFFDELQ		E:(-16) M:(-15)	PDL 10D
#		PUSHLOC AT PDL+0
#
# ERASABLE INITIALIZATION REQUIRED:
#		RONE		E:(-29) M:(-27)	M  STATE VECTOR				LEFT BY USER
#		VONE'		E:(+10) M:(+9)	VN/SQRT(MU)				LEFT BY TFF/CONIC
#		RMAG1		E:(-29) M:(-27)	PRESENT RADIUS, M			LEFT BY TFFCONIC
#		C(MPAC)		E:(-29) M:(-27)	RTERM, TERMINAL RADIUS LENGTH, M	LEFT BY USER
#
#		THE FOLLOWING ARE STORED IN THE PUSH LIST AREA.
#		TFF/RTMU	E:(17) M:(14)	1/SQRT(MU)				LEFT BY TFFCONIC.
#		NRMAG		E:(-29+NR)	M  RMAG, NORMALIZED			LEFT BY TFFCONIC
#				M:(-27+NR)
#		X1				-NR, NORM COUNT				LEFT BY TFFCONIC
#		TFFNP		E:(-38+2NR)	M  LCP, SEMI LATUS RECTUM, WEIGHT NR	LEFT BY TFFCONIC
#				M:(-36+2NR)
#		TFFALFA		E:(26-NR)	1/M  ALFA, WEIGHT NR			LEFT BY TFFCONIC
#				M:(24-NR)
#		TFFRTALF	E:(10+NA)	SQRT(ALFA), NORMALIZED			LEFT BY TFFCONIC
#				M:(9+NA)
#		X2				-NA, NORM COUNT				LEFT BY TFFCONIC
#		TFF1/ALF	E:(-22-2NA)	SIGNED SEMIMAJ AXIS, WEIGHTED BY NA	LEFT BY TFFCONIC
#				M:(-20-2NA)
#
# DEBRIS:	QPRET, PDL+0 ... PDL+3
#		RTERM		E:(-29) M:(-27)	RTERM, TERMINAL RADIUS LENGTH
#		RAPO		E:(-29) M:(-27)	PDL 16D (=NRTERM)
#		RPER		E:(-29) M:(-27)	PDL 14D (=TFFQ1)

## Page 1382
CALCTPER	SETGO			# ENTER WITH RPER IN MPAC
			TFFSW
			+3
CALCTFF		CLEAR			# ENTER WITH RTERM IN MPAC
			TFFSW
 +3		STORE	RTERM		# E:(-29) M:(-27)
		SL*
			0,1		# X1=-NR
		STORE	NRTERM		# RTERM  E:(-29+NR) M:(-27+NR)
		DMP	BDSU
			TFFALFA		# ALFA  E:(26-NR) M:(24-NR)
			TFF1/4
		PUSH	DMP		# (2-ALFA RTERM)  (-3)  TO PDL+0
			NRTERM		# E:(-29+NR) M:(-27+NR)
		PDDL	SR*		# RTERM(2-ALFA RTERM) TO PDL+2
					# E:(-32+NR) M:(-30+NR)
			TFFNP		# LC P  E:(-38+2NR) M:(-36+2NR)
			0 -6,1		# X1 = -NR
		DCOMP	DAD		# DUE TO SHIFTS, KEEP PRECISION FOR SQRT
					# RTERM(2-ALFA RTERM) FROM PDL +2
					# E:(-32+NR) M:(-30+NR)
		SR*			# LEAVE  E:(-32) M:(-30)
			0,1		# X1 = -NR
		BOFF	DLOAD		# CHECK TFF /TPER SWITCH
			TFFSW
			+2		# IF TFF, CONTINUE
			TFFZEROS	# IF TPER, SET Q2 = 0
 +2		BMN	SQRT		# E:(-16) M:(-15)
			MAXTFF1		# NO FREE FALL CONIC TO RTERM FROM HERE
					# RESET PDL, SET TFF=POSMAX, AND EXIT.

		DCOMP	BOVB		# RT IS ON INBOUND SIDE.  ASSURE OVFIND=0
			TCDANZIG	# ANY PORT IN A STORM.
		STOVL	TFFTEM		# Q2  E:(-16) M:(-15)
			VONE'		# VN/SQRT(MU)  E:(10) M:(9)
		DOT	SL3
			RONE		# SAVED RN.  E:(-29) M:(-27)
		STORE	TFFQ1		# Q1, SAVE FOR GONEPAST TEST.
					# E:(-16) M:(-15)
		BMN	BDSU
			INBOUND		# USE ALTERNATE Z
			TFFTEM		# Q2  E:(-16) M:(-15)

# OUTBOUND Z CALC CONTINUES HERE

		STODL	TFFX		# NUM=Q2-Q1  E:(-16) M:(-15)
			TFFALFA		# ALFA  E:(26-NR) M:(24-NR)
		DMP	BDSU
## Page 1383
			NRMAG		# RMAG  E:(-29+NR) M:(-27+NR)
					# (2-RTERM ALFA)  (-3) FROM PDL+0
SAVEDEN		PUSH	ABS		# DEN TO PDL+0	E:(-3) OR (-16)
					#               M:(-3) OR (-15)
		DAD	BOV		# INDETERMINANCY TEST
			LIM(-22)	# =1.0-B(-22)
			TFFXTEST	# GO IF DEN >/= B(-22)
		DLOAD	PDDL		# SET DEN=0 OTHERWISE
			TFFZEROS
					# XCH ZERO WITH PDL+0
		DLOAD	DCOMP
			TFFALFA		# ALFA  E:(26-NR) M:(24-NR)
		BMN	DLOAD		# FOR TPER:  Z INDET AT DELE/2=0 AND 90.
			TFFEL1		# ASSUME 90, AND LEAVE 0 IN PDL: 1/Z=D/N

					# Z INDET. AT PERIGEE FOR PARAB OR HYPERB.
DUMPTFF1	RVQ			# RETURN TFF =0

# INBOUND Z CALC CONTINUES HERE

INBOUND		DLOAD			# RESET PDL+0
		DLOAD	DSU		# ALTERNATE Z CALC
			RTERM		# E:(-29) M:(-27)
			RMAG1		# E:(-29) M:(-27)
		STODL	TFFX		# NUM=RTERM-RN  E:(-29) M:(-27)
			TFFTEM		# Q2  E:(-16) M:(-15)
		DAD	GOTO
			TFFQ1		# Q1  E:(-16) M:(-15)
			SAVEDEN		# DEN = Q2+Q1  E:(-16) M:(-15)

TFFXTEST	DAD	PDDL		# (ABS(DEN) TO PDL+2))	E:(-3) OR (-16)
					#			M:(-3) OR (-15)
			DP(-22)		# RESTORE ABS(DEN) TO MPAC
			TFFX		# NUM  E:(-16) OR (-29)  M:(-15) OR (-27)
		DMP	SR*
			TFFRTALF	# SQRT(ALFA)  E:(10+NA) M:(9+NA)
			0 -3,2		# X2=-NA
		DDV			# C(MPAC) =NUM SQRT(ALFA)	E:(-3) OR (-16)
					#				M:(-3) OR (-15)
					# ABS(DEN) FROM PDL+2	E:(-3) OR (-16)
					#			M:(-3) OR (-15)
		DLOAD	BOV		# (THE DLOAD IS SHARED WITH TFFELL)
			TFFX		# NUM  E:(-16) OR (-29)  M:(-15) OR (-27)
			TFFELL		# USE EQN FOR DELE GEQ 90, LEQ -90

# OTHERWISE, CONTINUE FOR GENERAL CONIC FOR TFF EQN

		DDV	STADR
					# DEN FROM PDL+0	E:(-3) OR (-16)
					#			M:(-3) OR (-15)
		STORE	TFFTEM		# Z SAVE FOR SIGN OF SDELF.
## Page 1384
					# E:(-13) M:(-12)
		PUSH	DSQ		# Z TO PDL+0
		PUSH	DMP		# Z SQ TO PDL+2  E:(-26) M:(-24)
			TFFNP		# LC P  E:(-38+2NR) M:(-36+2NR)
		SL	SIGN
			5
			TFFTEM		# AFFIX SIGN FOR SDELF (ENTRY DISPLAY)
		STODL	TFFTEM		# P ZSQ  E:(-59+2NR) M:(-55+2NR)
					# (ARG IS USED IN TFF/TRIG)
					# ZSQ FROM PDL+2  E:(-26) M:(-24)
		PUSH	DMP		# RESTORE PUSH LOC
			TFFALFA		# ALFA  E:(26-NR) M:(24-NR)
		SL*
			0,1		# X1=-NR
		STORE	TFFX		# X
		RTB	DMP
			T(X)		# POLY
					# ZSQ FROM PDL+2  E:(-26) M:(-24)
		SR2	BDSU		# 2 ZSQ T(X)  E:(-29) M:(-27)
			RTERM		# RTERM  E:(-29) M:(-27)
		DAD	DMP
			RMAG1		# E:(-29) M:(-27)
					# Z FROM PDL+0  E:(-13) M:(-12)
		SR3	BPL		# TFF SQRT(MU)  E:(-45) M:(-42)
			ENDTFF		# (NO PUSH UP)
		PUSH	SIGN		# TFF SQRT(MU) TO PDL+0
			TFFQ1		# Q1 FOR GONEPAST TEST
		BPL	DLOAD		# GONE PAST ?
			NEGTFF		# YES. TFF < 0.
			TFF1/ALF	# 1/ALFA  E:(-22-2NA) M:(-20-2NA)
		DCOMP	BPL		# ALFA > 0 ?
			NEGTFF		# NO. TFF IS NEGATIVE.

# CORRECT FOR ORBITAL PERIOD.

		DCOMP			# YES.  CORRECT FOR ORB PERIOD.
		DMP	DDV
			PI/16		# 2 PI (-5)
			TFFRTALF	# SQRT(ALFA)  E:(10+NA) M:(9+NA)
		SL*	SL*
			0 -4,2		# X2=-NA
			0 -4,2
		SL*	DAD
			0,2
					# TFF SQRT(MU) FROM PDL+0	E:(-45) M:(-42)
ENDTFF		DMP	BOV		# TFF SQRT(MU) IN MPAC		E:(-45) M:(-42)
			TFF/RTMU	# E:(17) M:(14)
			MAXTFF		# SET POSMAX IF OVFL.

DUMPTFF2	RVQ			# RETURN TFF (-28) CS IN MPAC.

## Page 1385
NEGTFF		DLOAD
					# TFF SQRT(MU) FROM PDL+0, NEGATIVE.
		GOTO
			ENDTFF

MAXTFF1		DLOAD			# RESET PDL
MAXTFF		DLOAD	RVQ
			NEARONE

# TIME OF FLIGHT ELLIPSE WHEN DEL (ECCENTRIC ANOM) GEQ 90 AND LEQ -90.

					# NUM FROM TFFX.	E:(-16) OR (-29)
					#			M:(-15) OR (-27)
TFFELL		SL2			# NUM  E:(-14) OR (-27)  M:(-13) OR (-25)
		BDDV	PUSH		# TEMP SAVE D/N IN PDL+0
					# DEN FROM PDL+0  E:(-3)/( 16)  M:(-3)/(-15)
					# N/D TO PDL+0  E:(11) M:(10)
TFFEL1		DLOAD	DSU		# (ENTER WITH D/N=0 IN PDL+0)
			TFFTEM		# Q2  E:(-16) M:(-15)
			TFFQ1		# Q1  E:(-16) M:(-15)
		STODL	TFFDELQ		# Q2-Q1  E:(-16) M:(-15)
					# D/N FROM PDL+0
		STADR
		STORE	TFFTEM		# D/N  E:(11) M:(10)
		DMP	SL*
			TFF1/ALF	# 1/ALFA  E:(-22-2NA) M:(-20-2NA)
			0,2		# 1/ALFA Z  E:(-11-NA) M:(-10-NA)
		PUSH	DMP		# TO PDL+0
			TFFTEM		# 1/Z  E:(11) M:(10)
		SL*	BOVB
			0,2		# X2= -NA
			SIGNMPAC	# IN CASE X= 1.0, CONTINUE
		STORE	TFFX		# X=1/ALFA ZSQ
		RTB	DMP
			T(X)		# POLY
			TFFX
		SR3	DSU
			DP2(-3)
		DMP	PUSH		# 2(X T(X)-1) /Z ALFA	E:(-15-NA)
					#			M:(-14-NA)
					# 1/ALFA Z FROM PDL+0	E:(-11-NA)
					#			M:(-10-NA)
		DLOAD	DMP		# GET SIGN FOR SDELF
			TFFTEM		# 1/Z  E:(11) M:(10)
			RMAG1		# E:(-29) M:(-27)
		SL2	DAD
			TFFQ1		# Q1  E:(-16) M:(-15)
		STODL	TFFTEM		# (Q1+R 1/Z) =SGN OF SDELF  E:(-16) M:(-15
			TFFNP		# LC P  E:(-38+2NR) M:(-36+2NR)
		DMP	SL*		# CALC FOR ARG FOR TFF/TRIG.
## Page 1386
			TFF1/ALF	# 1/ALFA  E:(-22-2NA) M:(-20-2NA)
			1,2		# X2=-NA
		SIGN	SL*
			TFFTEM		# AFFIX SIGN FOR SDELF
			0,2
		STODL	TFFTEM		# P/ALFA  E:(-59+2NR) M:(-55+2NR)
					# (ARG FOR USE IN TFF/TRIG)
			TFF1/ALF	# 1/ALFA  E:(-22-2NA) M:(-20-2NA)
		SQRT	DMP
			PI/16		# PI (-4)
		DAD
					# 2(XT(X)-1)/Z ALFA FROM PDL	E:(-15-NA)
					#				M:(-14-NA)
		SL*	DSU
			0 -1,2
			TFFDELQ		# Q2-Q1  E:(-16) M:(-15)
		DMP	SL*
			TFF1/ALF	# 1/ALFA  E:(-22-2NA) M:(-20-2NA)
			0 -3,2
		SL*	GOTO
			0 -4,2
			ENDTFF		# TFF SQRT(MU) IN MPAC E:(-45) M:(-42)

## Page 1387
# PROGRAM NAME:  T(X)				DATE:  01.17.67
# MOD NO:  0					LOG SECTION:  TIME OF FREE FALL
# MOD BY:  RR BAIRNSFATHER
#
# FUNCTIONAL DESCRIPTION:  THE POLYNOMIAL T(X) IS USED BY TIME OF FLIGHT SUBROUTINES CALCTFF AND
#	CALCTPER TO APPROXIMATE THE SERIES
#		           2     3
#		1/3 -X/5 +X /7 -X /9 ...
#
#	WHERE	X = ALFA Z Z		IF ALFA Z Z LEQ 1
#		X = 1/(ALFA Z Z)	IF ALFA Z Z G 1
#
#	ALSO	X IS NEG FOR HYPERBOLIC ORBITS
#		X = 0 FOR PARABOLIC ORBITS
#		X IS POSITIVE FOR ELLIPTIC ORBITS
#
#	FOR FLIGHT 278, THE POLYNOMIAL T(X) IS FITTED OVER THE RANGE (0,+1) AND HAS A MAXIMUM
#	DEVIATION FROM THE SERIES OF 2 E-5       (T(X) IS A CHEBYCHEV TYPE FIT AND WAS OBTAINED USING
#	MAC PROGRAM AUTCURFIT294RRB AND IS VALID TO THE SAME TOLERANCE OVER THE RANGE (-.08,+1).)
#
# CALLING SEQUENCE:	RTB
#				T(X)
#	C(MPAC) = X
#
# SUBROUTINES CALLED:  NONE
#
# NORMAL EXIT MODE:  TC DANZIG
#
# ALARMS:  NONE
#
# OUTPUT:  C(MPAC) = T(X)
#
# ERASABLE INITIALIZATION REQUIRED:
#	C(MPAC) = X
#
# DEBRIS:  NONE

T(X)		TC	POLY
		DEC	4		# N-1
		2DEC	3.333333333 E-1
		2DEC*	-1.999819135 E-1*
		2DEC*	1.418148467 E-1*
		2DEC* 	-1.01310997 E-1*
		2DEC*	5.609004986 E-2*
		2DEC*	-1.536156925 E-2*

ENDT(X)		TC	DANZIG

TCDANZIG	=	ENDT(X)

## Page 1388
# TFF CONSTANTS

		BANK	32

		SETLOC	TOF-FF1
		BANK

#						NOTE _  NOTE _ ADJUSTED MUE FOR NEAR EARTH TRAJ.
#MUE		=	3.990815471 E10		M CUBE/CS SQ
#RTMUE		=	1.997702549 E5 B-18*	MODIFIED EARTH MU

1/RTMU		2DEC*	.5005750271 E-5 B17*	# MODIFIED EARTH MU

#						NOTE _  NOTE _ ADJUSTED MUE FOR NEAR EARTH TRAJ.
#MUM		=	4.902778 E8		M CUBE/CS SQ
#RTMUM		2DEC*	2.21422176 E4 B-18*
PI/16		2DEC	3.141592653 B-4
LIM(-22)	2OCT	3777737700		# 1.0 -B(-22)
DP(-22)		2OCT	0000000100		# B(-22)
DP2(-3)		2DEC	1 B-3
DP2(-4)		2DEC	1 B-4			# 1/16

# RPAD1		2DEC	6373338 B-29		M (-29) = 20909901.57 FT
RPAD1		=	RPAD

R300K		2DEC	6464778 B-29		# (-29) M
NEARONE		2DEC	.999999999
TFFZEROS	EQUALS	HI6ZEROS
TFF1/4		EQUALS	HIDP1/4
back to top