swh:1:snp:63e2d142f91fc04ec33789d9d7bb85f3bef72e05
Raw File
Tip revision: 66d8e606a8d996ded60bc81d5edf319142a5fad9 authored by Ron Burkey on 04 October 2021, 11:49:55 UTC
Merge branch 'master' of https://github.com/virtualagc/virtualagc
Tip revision: 66d8e60
LATITUDE_LONGITUDE_SUBROUTINES.agc
### FILE="Main.annotation"
## Copyright:	Public domain.
## Filename:	LATITUDE_LONGITUDE_SUBROUTINES.agc
## Purpose:	A section of the reconstructed source code for Luminary 130.
##		This was the original program released for the Apollo 13 LM,
##		although several more revisions would follow. It has been
##		reconstructed from a listing of Luminary 131, from which it
##		differs on only two lines in P70-P71. The difference is
##		described in detail in Luminary memo #129, which was used
##		to perform the reconstruction. This file is intended to be a
##		faithful reconstruction, except that the code format has been
##		changed to conform to the requirements of the yaYUL assembler
##		rather than the original YUL assembler.
## Reference:	pp. 1127-1133
## Contact:	Ron Burkey <info@sandroid.org>.
## Website:	www.ibiblio.org/apollo/index.html
## Mod history:	05/31/03 RSB.	Began transcribing.
##		05/14/05 RSB	Corrected website reference above.
##		2011-01-05 JL	Fixed indentation of RVQ instruction.
##		2017-01-06 RSB	Page numbers now agree with those on the
##				original harcopy, as opposed to the PDF page
##				numbers in 1701.pdf.
##		2017-02-05 RSB	Back-ported comment corrections 
##				identified while proofing Artemis 072.
##		2017-02-27 RSB	Proofed comment text using octopus/ProoferComments.
##		2017-03-13 RSB	Comment-text fixes noted in proofing Luminary 116.
##		2017-03-15 RSB	Comment-text fixes identified in 5-way
##				side-by-side diff of Luminary 69/99/116/131/210.
##		2018-09-04 MAS	Copied from Luminary 131 for Luminary 130.

## Page 1127
# SUBROUTINE TO CONVERT RAD VECTOR AT GIVEN TIME TO LAT,LONG AND ALT
#
# CALLING SEQUENCE
#	L-1	CALL
#	L		LAT-LONG
#
# SUBROUTINES USED
#	R-TO-RP, ARCTAN, SETGAMMA, SETRE
#
# ERASABLE INIT. REQ.
#	AXO, -AYO, AZO, TEPHEM (SET AT LAUNCH TIME)
#	ALPHAV = POSITION VECTOR METERS B-29
#	MPAC -- TIME (CSECS B-28)
#	ERADFLAG =1, TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS
#	LUNAFLAG=0 FOR EARTH, 1 FOR MOON
#
# OUTPUT
#	LATITUDE IN LAT 	(REVS. B-0)
#	LONGITUDE IN LONG	(REVS. B-0)
#	ALTITUDE IN ALT METERS	B-29

		BANK	30
		SETLOC	LATLONG
		BANK

		COUNT*	$$/LT-LG
		EBANK=	ALPHAV
LAT-LONG	STQ	SETPD
			INCORPEX
			0D
		STOVL	6D		# SAVE TIME IN 6-7D FOR R-TO-RP
			ALPHAV
		PUSH	ABVAL		# 0-5D= R FOR R-TO-RP
		STODL	ALPHAM		# ABS. VALUE OF R FOR ALT FORMULA BELOW
			ZEROVEC		# SET MPAC=0 FOR EARTH, NON-ZERO FOR MOON
		BOFF	COS		# USE COS(0) TO GET NON-ZERO IN MPAC
			LUNAFLAG	# 0=EARTH, 1=MOON
			CALLRTRP
CALLRTRP	CALL
			R-TO-RP		# RP VECTOR CONVERTED FROM R B-29
		UNIT			# UNIT RP B-1
		STCALL	ALPHAV		# U2= 1/2 SINL FOR SETRE SUBR BELOW
			SETGAMMA	#	SET GAMMA=B2/A2 FOR EARTH, =1 FOR MOON
		CALL			#	SCALED B-1
			SETRE		# CALC RE METERS B-29
		DLOAD	DSQ
			ALPHAV
		PDDL	DSQ
			ALPHAV +2
		DAD	SQRT
## Page 1128
		DMP	SL1R
			GAMRP
		STODL	COSTH		# COS(LAT) B-1
			ALPHAV +4
		STCALL	SINTH		# SIN(LAT) B-1
			ARCTAN
		STODL	LAT		# LAT B0
			ALPHAV
		STODL	COSTH		# COS(LONG) B-1
			ALPHAV +2
		STCALL	SINTH		# SIN(LONG) B-1
			ARCTAN
		STODL	LONG		# LONG. REVS B-0 IN RANGE -1/2 TO 1/2
			ALPHAM
		DSU			# ALT= R-RE METERS B-29
			ERADM
		STCALL	ALT		# EXIT WITH ALT METERS B-29
			INCORPEX
## Page 1129
# SUBROUTINE TO CONVERT LAT,LONG,ALT AT GIVEN TIME TO RADIUS VECTOR
#
# CALLING SEQUENCE
#	L-1	CALL
#	L		LALOTORV
#
# SUBROUTINES USED
#	SETGAMMA, SETRE, RP-TO-R
#
# ERASABLE INIT. REQ.
#	AXO, AYO, AZO, TEPHEM SET AT LAUNCH TIME
#	LAT -- LATITUDE 	(REVS B0)
#	LONG -- LONGITUDE	(REVS B0)
#	ALT -- ALTITUDE		(METERS) B-29
#	MPAC -- TIME		(CSECS B-28)
#	ERADFLAG =1 TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS
#	LUNAFLAG=0 FOR EARTH, 1 FOR MOON
#
# OUTPUT
#	R-VECTOR IN ALPHAV 	(METERS B-29)

LALOTORV	STQ	SETPD		# LAT,LONG,ALT TO R VECTOR
			INCORPEX
			0D
		STCALL	6D		# 6-7D= TIME FOR RP-TO-R
			SETGAMMA	# GAMMA=B2/A2 FOR EARTH, 1 FOR MOON B-1
		DLOAD	SIN		#           COS(LONG)COS(LAT) IN MPAC
			LAT		# UNIT RP = SIN(LONG)COS(LAT)    2-3D
		DMPR	PDDL		# PD 2      GAMMA*SIN(LAT)       0-1D
			GAMRP
			LAT		#     0-1D= GAMMA*SIN(LAT) B-2
		COS	PDDL		# PD4 2-3D= COS(LAT) B-1 TEMPORARILY
			LONG
		SIN	DMPR		# PD 2
		PDDL	COS		# PD 4 2-3D = SIN(LONG)COS(LAT) B-2
			LAT
		PDDL	COS		# PD 6 4-5D = COS(LAT) B-1 TEMPORARILY
			LONG
		DMPR	VDEF		# PD4 MPAC= COS(LONG)COS(LAT) B-2
		UNIT	PUSH		# 0-5D= UNIT RP FOR RP-TO-R SUBR.
		STCALL	ALPHAV		# ALPHAV +4= SINL FOR SETRE SUBR.
			SETRE		# RE METERS B-29
		DLOAD	BOFF		# SET MPAC=0 FOR EARTH, NON-ZERO FOR MOON
			ZEROVEC
			LUNAFLAG
			CALLRPRT
		COS			# USE COS(0) TO GET NON-ZERO IN MPAC
CALLRPRT	CALL
			RP-TO-R		# EXIT WITH UNIT R VECTOR IN MPAC
		STODL	ALPHAV
			ERADM
## Page 1130
		DAD	VXSC		# (RE + ALT)(UNIT R) METERS B-30
			ALT
			ALPHAV
		VSL1			# R METERS B-29
		STCALL	ALPHAV		# EXIT WITH R IN METERS B-29
			INCORPEX

# SUBROUTINE TO COMPUTE EARTH RADIUS
#
# INPUT
#	1/2 SIN LAT IN ALPHAV +4
#
# OUTPUT
#	EARTH RADIUS IN ERADM AND MPAC (METERS B-29)

GETERAD		DLOAD	DSQ
			ALPHAV +4	# SIN**2(L)
		SL1	BDSU
			DP1/2		# COS**2(L)
		DMPR	BDSU
			EE
			DP1/2
		BDDV	SQRT
			B2XSC
		SR4R
		STORE	ERADM
		RVQ

# THE FOLLOWING CONSTANTS WERE COMPUTED WITH A=6378166, B=6356784 METERS
# B2XSC = B**2 SCALED B-51
# B2/A2 = B**2/A**2 SCALED B-1
# EE = (1-B**2/A**2) SCALED B-0

B2XSC		2DEC	.0179450689	# B**2 SCALED B-51
DP1/2		=	XUNIT
B2/A2		2DEC	.9933064884 B-1	# GAMMA= B**2/A**2 B-1
EE		2DEC	6.6935116 E-3	# (1-B**2/A**2) B-0

## Page 1131
# ARCTAN SUBROUTINE
#
# CALLING SEQUENCE
#	SIN THETA IN SINTH B-1
#	COS THETA IN COSTH B-1
#	CALL ARCTAN
#
# OUTPUT
#	ARCTAN THETA IN MPAC AND THETA B-0 IN RANGE -1/2 TO +1/2

ARCTAN		BOV
			CLROVFLW
CLROVFLW	DLOAD	DSQ
			SINTH
		PDDL	DSQ
			COSTH
		DAD
		BZE	SQRT
			ARCTANXX	# ATAN=0/0  SET THETA=0
		BDDV	BOV
			SINTH
			ATAN=90
		SR1	ASIN
		STORE	THETA
		PDDL	BMN
			COSTH
			NEGCOS
		DLOAD	RVQ
NEGCOS		DLOAD	DCOMP
		BPL	DAD
			NEGOUT
			DP1/2
ARCTANXX	STORE	THETA
		RVQ

NEGOUT		DSU	GOTO
			DP1/2
			ARCTANXX
ATAN=90		DLOAD	SIGN
			LODP1/4
			SINTH
		STORE	THETA
		RVQ

2DZERO		=	DPZERO

## Page 1132
# ..... SETGAMMA SUBROUTINE .....
# SUBROUTINE TO SET GAMMA FOR THE LAT-LONG AND LALOTORV SUBROUTINES
#
# GAMMA = B**2/A**2 FOR EARTH (B-1)
# GAMMA = 1 FOR MOON (B-1)
#
# CALLING SEQUENCE
#	L	CALL
#	L+1		SETGAMMA
#
# INPUT
#	LUNAFLAG=0 FOR EARTH, =1 FOR MOON
#
# OUTPUT
#	GAMMA IN GAMRP (B-1)

SETGAMMA	DLOAD	BOFF		# BRANCH FOR EARTH
			B2/A2		# EARTH GAMMA
			LUNAFLAG
			SETGMEX
		SLOAD
			1B1		# MOON GAMMA
SETGMEX		STORE	GAMRP
		RVQ
GAMRP		=	8D

## Page 1133
# ..... SETRE SUBROUTINE .....
# SUBROUTINE TO SET RE (EARTH OR MOON RADIUS)
#
#	RE = RM FOR MOON
#	RE = RREF FOR FIXED EARTH RADIUS OR COMPUTED RF FOR FISCHER ELLIPSOID
#
# CALLING SEQUENCE
#	L	CALL
#	L+1		SETRE
#
# SUBROUTINES USED
#	GETERAD
#
# INPUT
#	ERADFLAG = 0 FOR FIXED RE, 1 FOR COMPUTED RE
#	ALPHAV +4 = 1/2 SINL IF GETERAD IS CALLED
#	LUNAFLAG = 0 FOR EARTH, =1 FOR MOON
#
# OUTPUT
#	ERADM = 504RM FOR MOON (METERS B-29)
#	ERADM = ERAD OR COMPUTED RF FOR EARTH (METERS B-29)

SETRE		STQ	DLOAD
			SETREX
			504RM
		BON	DLOAD		# BRANCH FOR MOON
			LUNAFLAG
			TSTRLSRM
			ERAD
		BOFF	CALL		# ERADFLAG=0 FOR FIXED RE, 1 FOR COMPUTED
			ERADFLAG
			SETRXX
			GETERAD
SETRXX		STCALL	ERADM		# EXIT WITH RE OR RM METERS B-29
			SETREX
TSTRLSRM	BON	VLOAD		# ERADFLAG=0, SET R0=RLS
			ERADFLAG	#         =1      R0=RM
			SETRXX
			RLS
		ABVAL	SR2R		# SCALE FROM B-27 TO B-29
		GOTO
			SETRXX
SETREX		=	S2


back to top