Apollo-11/Comanche055/LATITUDE_LONGITUDE_SUBROUTINES.agc

318 lines
7.0 KiB
Plaintext
Raw Normal View History

2016-07-07 08:47:26 +00:00
# Copyright: Public domain.
# Filename: LATITUDE_LONGITUDE_SUBROUTINES.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: 1236-1242
# Mod history: 2009-05-14 RSB Adapted from the Colossus249/ file of the
# same name, using Comanche055 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
2016-12-28 16:11:25 +00:00
# illegible, contact me at info@sandroid.org about getting access to the
2016-07-07 08:47:26 +00:00
# (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
2016-12-28 16:11:25 +00:00
# 2021113-051. 10:28 APR. 1, 1969
2016-07-07 08:47:26 +00:00
#
# This AGC program shall also be referred to as
# Colossus 2A
# Page 1236
# SUBROUTINE TO CONVERT RAD VECTOR AT GIVEN TIME TO LAT,LONG AND ALT
#
# CALLING SEQUENCE
#
2016-07-07 08:47:26 +00:00
# L-1 CALL
# L LAT-LONG
# SUBROUTINES USED
#
# R-TO-RP,ARCTAN,SETGAMMA,SETRE
2016-07-07 08:47:26 +00:00
# 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
2016-07-07 08:47:26 +00:00
# OUTPUT
#
2016-07-07 08:47:26 +00:00
# LATITUDE IN LAT (REVS. B-0)
# LONGITUDE IN LONG (REVS. B-0)
# ALTITUDE IN ALT METERS B-29
BANK 30
SETLOC LATLONG
BANK
COUNT 13/LT-LG
2016-12-28 16:11:25 +00:00
2016-07-07 08:47:26 +00:00
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
2016-07-07 08:47:26 +00:00
BOFF COS # USE COS(0) TO GET NON-ZERO IN MPAC
LUNAFLAG # 0=EARTH,1=MOON
2016-07-07 08:47:26 +00:00
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
2016-07-07 08:47:26 +00:00
SETRE # CALC RE METERS B-29
DLOAD DSQ
ALPHAV
PDDL DSQ
ALPHAV +2
# Page 1237
DAD SQRT
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 1238
# SUBROUTINE TO CONVERT LAT,LONG.ALT AT GIVEN TIME TO RADIUS VECTOR
# CALLING SEQUENCE
2016-07-07 08:47:26 +00:00
# L-1 CALL
# L LALOTORV
# SUBROUTINES USED
# SETGAMMA,SETRE,RP-TO-R
2016-07-07 08:47:26 +00:00
# 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)
2016-07-07 08:47:26 +00:00
# ERADFLAG =1 TO COMPUTE EARTH RADIUS, =0 FOR FIXED EARTH RADIUS
# LUNAFLAG=0 FOR EARTH,1 FOR MOON
2016-07-07 08:47:26 +00:00
# OUTPUT
# R-VECTOR IN ALPHAV (METERS B-29)
2016-07-07 08:47:26 +00:00
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
2016-07-07 08:47:26 +00:00
GAMRP
LAT # 0-1D = GAMMA*SIN(LAT) B-2
COS PDDL # PD4 2-3D=COS(LAT) B-1 TEMPORARILY
2016-07-07 08:47:26 +00:00
LONG
SIN DMPR # PD 2
PDDL COS # PD 4 2-3D=SIN(LONG)COS(LAT) B-2
2016-07-07 08:47:26 +00:00
LAT
PDDL COS # PD 6 4-5D=COS(LAT) B-1 TEMPORARILY
2016-07-07 08:47:26 +00:00
LONG
DMPR VDEF # PD4 MPAC= COS(LONG)COS(LAT) B-2
UNIT PUSH # 0-5D= UNIT RP FOR RP-TO-R SUBR.
2016-07-07 08:47:26 +00:00
STCALL ALPHAV # ALPHAV +4= SINL FOR SETRE SUBR.
SETRE # RE METERS B-29
DLOAD BOFF # SET MPAC=0 FOR EARTH,NON-ZERO FOR MOON
2016-07-07 08:47:26 +00:00
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 1239
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
2016-07-07 08:47:26 +00:00
# INPUT
2016-07-07 08:47:26 +00:00
# 1/2 SIN LAT IN ALPHAV +4
2016-07-07 08:47:26 +00:00
# OUTPUT
2016-07-07 08:47:26 +00:00
# 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
2016-07-07 08:47:26 +00:00
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
ERAD 2DEC 6373338 B-29 # PAD RADIUS
# Page 1240
# ARCTAN SUBROUTINE
2016-07-07 08:47:26 +00:00
# CALLING SEQUENCE
2016-07-07 08:47:26 +00:00
# SIN THETA IN SINTH B-1
# COS THETA IN COSTH B-1
# CALL ARCTAN
2016-07-07 08:47:26 +00:00
# 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
2016-07-07 08:47:26 +00:00
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 1241
# ***** SETGAMMA SUBROUTINE *****
# SUBROUTINE TO SET GAMMA FOR THE LAT-LONG AND LALOTORV SUBROUTINES
2016-07-07 08:47:26 +00:00
# GAMMA = B**2/A**2 FOR EARTH (B-1)
# GAMMA = 1 FOR MOON (B-1)
2016-07-07 08:47:26 +00:00
# CALLING SEQUENCE
# L CALL
# L+1 SETGAMMA
2016-07-07 08:47:26 +00:00
# INPUT
# LUNAFLAG=0 FOR EARTH,=1 FOR MOON
2016-07-07 08:47:26 +00:00
# OUTPUT
# GAMMA IN GAMRP (B-1)
2016-07-07 08:47:26 +00:00
SETGAMMA DLOAD BOFF # BRANCH FOR EARTH
B2/A2 # EARTH GAMMA
LUNAFLAG
SETGMEX
SLOAD
1B1 # MOON GAMMA
SETGMEX STORE GAMRP
RVQ
GAMRP = 8D
# Page 1242
# ***** 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
2016-07-07 08:47:26 +00:00
# CALLING SEQUENCE
# L CALL
# L+1 SETRE
2016-07-07 08:47:26 +00:00
# SUBROUTINES USED
# GETERAD
2016-07-07 08:47:26 +00:00
# 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
2016-07-07 08:47:26 +00:00
# OUTPUT
# ERADM= 504RM FOR MOON (METERS B-29)
# ERADM= ERAD OR COMPUTED RF FOR EARTH (METERS B-29)
2016-07-07 08:47:26 +00:00
SETRE STQ DLOAD
SETREX
504RM
BON DLOAD # BRANCH FOR MOON
LUNAFLAG
TSTRLSRM
ERAD
BOFF CALL # ERADFLAG=0 FOR FIXED RE,1 FOR COMPUTED
2016-07-07 08:47:26 +00:00
ERADFLAG
SETRXX
GETERAD
SETRXX STCALL ERADM # EXIT WITH RE OR RM METERS B-29
SETREX
TSTRLSRM BON VLOAD # ERADFLAG=0,SET R0=RLS
2016-07-07 08:47:26 +00:00
ERADFLAG # =1 R0=RM
SETRXX
RLS
ABVAL SR2R # SCALE FROM B-27 TO B-29
GOTO
SETRXX
SETREX = S2
504RM 2DEC 1738090 B-29 # METERS B-29 (MOON RADIUS)