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
PLANETARY_INERTIAL_ORIENTATION.agc
### FILE="Main.annotation"
## Copyright:   Public domain.
## Filename:    PLANETARY_INERTIAL_ORIENTATION.agc
## Purpose:     A section of Luminary revision 173.
##              It is part of the reconstructed source code for the second
##              (unflown) release of the flight software for the Lunar
##              Module's (LM) Apollo Guidance Computer (AGC) for Apollo 14.
##              The code has been recreated from a reconstructed copy of
##              Luminary 178, as well as Luminary memo 167 (revision 1).
##              It has been adapted such that the resulting bugger words
##              exactly match those specified for Luminary 173 in NASA
##              drawing 2021152N, which gives relatively high confidence
##              that the reconstruction is correct.
## Reference:   pp. 1131-1139
## Assembler:   yaYUL
## Contact:     Ron Burkey <info@sandroid.org>.
## Website:     www.ibiblio.org/apollo/index.html
## Mod history: 2019-09-18 MAS  Created from Luminary 178.

## Page 1131
# ..... RP-TO-R SUBROUTINE .....
# SUBROUTINE TO CONVERT RP (VECTOR IN PLANETARY COORDINATE SYSTEM,EITHER
#  EARTH-FIXED OR MOON-FIXED) TO R (SAME VECTOR IN THE BASIC REF. SYSTEM)

#  R=MT(T)*(RP+LPXRP)    MT = M MATRIX TRANSPOSE

# CALLING SEQUENCE
#  L       CALL
#  L+1            RP-TO-R

# SUBROUTINES USED
#  EARTHMX,MOONMX,EARTHL

#    ITEMS AVAILABLE FROM LAUNCH DATA
#     504LM= THE LIBRATION VECTOR L OF THE MOON AT TIME TIMSUBL,EXPRESSED
#     IN THE MOON-FIXED COORD. SYSTEM   RADIANS  B0
#       ITEMS NECESSARY FOR SUBR. USED (SEE DESCRIPTION OF SUBR.)

# INPUT
#  MPAC= 0 FOR EARTH,NON-ZERO FOR MOON
#  0-5D= RP VECTOR
#  6-7D= TIME

# OUTPUT
#  MPAC= R VECTOR METERS B-29 FOR EARTH, B-27 FOR MOON

                SETLOC  PLANTIN1
                BANK

                COUNT*  $$/LUROT

RP-TO-R         STQ     BHIZ
                        RPREXIT
                        RPTORA
                CALL                    # COMPUTE M MATRIX FOR MOON
                        MOONMX          # LP=LM FOR MOON  RADIANS B0
                VLOAD
                        504LM
RPTORB          VXV     VAD
                        504RPR
                        504RPR
                VXM     GOTO
                        MMATRIX         # MPAC=R=MT(T)*(RP+LPXRP)
                        RPRPXXXX        # RESET PUSHLOC TO 0 BEFORE EXITING
RPTORA          CALL                    # EARTH COMPUTATIONS
                        EARTHMX         # M MATRIX B-1
                CALL
                        EARTHL          # L VECTOR RADIANS B0
                MXV     VSL1            # LP=M(T)*L  RAD B-0
                        MMATRIX
## Page 1132
                GOTO
                        RPTORB
                SETLOC  PLANTIN
                BANK
                COUNT*  $$/LUROT

## Page 1133
# ..... R-TO-RP SUBROUTINE .....
# SUBROUTINE TO CONVERT R (VECTOR IN REFERENCE COORD. SYSTEM) TO RP
#  (VECTOR IN PLANETARY COORD SYSTEM) EITHER EARTH-FIXED OR MOON-FIXED

#  RP=M(T)*(R-LXR)

# CALLING SEQUENCE
#  L       CALL
#  L+1            R-TO-RP

# SUBROUTINES USED
#  EARTHMX,MOONMX,EARTHL

# INPUT
#  MPAC= 0 FOR EARTH,NON-ZERO FOR MOON
#  0-5D= R VECTOR
#  6-7D= TIME

#    ITEMS AVAILABLE FROM LAUNCH DATA
#     504LM= THE LIBRATION VECTOR L OF THE MOON AT TIME TIMSUBL,EXPRESSED
#     IN THE MOON-FIXED COORD. SYSTEM   RADIANS B0
#       ITEMS NECESSARY FOR SUBROUTINES USED (SEE DESCRIPTION OF SUBR.)

# OUTPUT
#  MPAC=RP VECTOR METERS B-29 FOR EARTH, B-27 FOR MOON

R-TO-RP         STQ     BHIZ
                        RPREXIT
                        RTORPA
                CALL
                        MOONMX
                VLOAD   VXM
                        504LM           # LP=LM
                        MMATRIX
                VSL1                    #  L=MT(T)*LP  RADIANS B0
RTORPB          VXV     BVSU
                        504RPR
                        504RPR
                MXV                     # M(T)*(R-LXR) B-2
                        MMATRIX
RPRPXXXX        VSL1    SETPD
                        0D
                GOTO
                        RPREXIT
RTORPA          CALL                    # EARTH COMPUTATIONS
                        EARTHMX
                CALL
                        EARTHL
                GOTO                    # MPAC=L=(-AX,-AY,0) RAD B-0
                        RTORPB

## Page 1134
# ..... MOONMX SUBROUTINE .....
# SUBROUTINE TO COMPUTE THE TRANSFORMATION MATRIX M FOR THE MOON

# CALLING SEQUENCE
#  L       CALL
#  L+1            MOONMX

# SUBROUTINES USED
#  NEWANGLE

# INPUT
#  6-7D= TIME
#    ITEMS AVAILABLE FROM LAUNCH DATA
#     BSUBO,BDOT
#     TIMSUBO,NODIO,NODDOT,FSUBO,FDOT
#     COSI= COS(I) B-1
#     SINI= SIN(I) B-1
#       I  IS THE ANGLE BETWEEN THE MEAN LUNAR EQUATORIAL PLANE AND THE
#       PLANE OF THE ECLIPTIC  (1 DEGREE  32.1 MINUTES)

# OUTPUT
#  MMATRIX= 3X3 M MATRIX B-1   (STORED IN VAC AREA)

MOONMX          STQ     SETPD
                        EARTHMXX
                        8D
                AXT,1                   # B REQUIRES SL 0, SL 5 IN NEWANGLE
                        5
                DLOAD   PDDL            # PD 10D            8-9D=BSUBO
                        BSUBO           #                   10-11D= BDOT
                        BDOT
                PUSH    CALL            # PD 12D
                        NEWANGLE        # EXIT WITH PD 8D AND MPAC= B  REVS B0
                PUSH    COS             # PD 10D
                STODL   COB             # PD 8D    COS(B) B-1
                SIN                     #          SIN(B) B-1
                STODL   SOB             #           SETUP INPUT FOR NEWANGLE
                        FSUBO           #                     8-9D=FSUBO
                PDDL    PUSH            # PD 10D THEN 12D   10-11D=FDOT
                        FDOT
                AXT,1   CALL            # F REQUIRES SL 1, SL 6 IN NEWANGLE
                        4
                        NEWANGLE        # EXIT WITH PD 8D AND MPAC= F REVS B0
                STODL   AVECTR +2       # SAVE F TEMP
                        NODIO           #                     8-9D=NODIO
                PDDL    PUSH            # PD 10D THEN 12D   10-11D=NODDOT
                        NODDOT          #                     MPAC=T
                AXT,1   CALL            # NODE REQUIRES SL 0, SL 5 IN NEWANGLE
                        5
                        NEWANGLE        # EXIT WITH PD 8D AND MPAC= NODI REVS B0
## Page 1135
                PUSH    COS             # PD 10D   8-9D= NODI  REVS  B0
                PUSH                    # PD 12D 10-11D= COS(NODI)  B-1
                STORE   AVECTR
                DMP     SL1R
                        COB             #                         COS(NODI)    B-1
                STODL   BVECTR +2       # PD 10D   20-25D=AVECTR= COB*SIN(NODI)
                DMP     SL1R            #                         SOB*SIN(NODI)
                        SOB
                STODL   BVECTR +4       # PD 8D
                SIN     PUSH            # PD 10D                 -SIN(NODI)   B-1
                DCOMP   GOTO            #          26-31D=BVECTR= COV*COS(NODI)
                        MOONMXA
                BANK    25
                SETLOC  PLANTIN3
                BANK
                COUNT*  $$/LUROT

MOONMXA         STODL   BVECTR          # PD 8D                    SOB*COS(NODI)
                        AVECTR +2       # MOVE F FROM TEMP LOC. TO 504F
                STODL   504F
                DMP     SL1R
                        COB
                STODL   AVECTR +2
                        SINNODI         # 8-9D=SIN(NODI)  B-1
                DMP     SL1R
                        SOB
                STODL   AVECTR +4       #                          0
                        HI6ZEROS        #         8-13D= CVECTR= -SOB  B-1
                PDDL    DCOMP           # PD 10D                  COB
                        SOB
                PDDL    PDVL            # PD 12D THEN PD 14D
                        COB
                        BVECTR
                VXSC    PDVL            # PD 20D         BVECTR*SINI  B-2
                        SINI
                        CVECTR
                VXSC    VAD             # PD 14D         CVECTR*COSI  B-2
                        COSI
                VSL1
                STOVL   MMATRIX +12D    # PD 8D  M2=BVECTR*SINI+CVECTR*COSI  B-1
                VXSC    PDVL            # PD 14D
                        SINI            #                CVECTR*SINI  B-2
                        BVECTR
                VXSC    VSU             # PD 8D          BVECTR*COSI  B-2
                        COSI
                VSL1    PDDL            # PD 14D
                        504F            # 8-13D=DVECTR=BVECTR*COSI-CVECTR*SINI B-1
                COS     VXSC
                        DVECTR
                PDDL    SIN             # PD 20D  14-19D= DVECTR*COSF  B-2
## Page 1136
                        504F
                VXSC    VSU             # PD 14D          AVECTR*SINF  B-2
                        AVECTR
                VSL1
                STODL   MMATRIX +6      # M1= AVECTR*SINF-DVECTR*COSF  B-1
                        504F
                SIN     VXSC            # PD 8D
                PDDL    COS             # PD 14D  8-13D=DVECTR*SINF B-2
                        504F
                VXSC    VAD             # PD 8D         AVECTR*COSF B-2
                        AVECTR
                VSL1    VCOMP
                STCALL  MMATRIX         # M0= -(AVECTR*COSF+DVECTR*SINF)  B-1
                        EARTHMXX
# COMPUTE X=X0+(XDOT)(T+T0)
# 8-9D= XO (REVS B-0),PUSHLOC SET AT 12D
# 10-11D=XDOT (REVS/CSEC) SCALED B+23 FOR WEARTH,B+28 FOR NODDOT AND BDOT
#                         AND B+27 FOR FDOT
#  X1=DIFFERENCE IN 23 AND SCALING OF XDOT,=0 FOR WEARTH,5 FOR NODDOT AND
#                                          BDOT AND 4 FOR FDOT
# 6-7D=T (CSEC B-28), TIMSUBO= (CSEC B-42 TRIPLE PREC.)

                BANK    24
                SETLOC  PLANTIN
                BANK

NEWANGLE        DLOAD   SR              # ENTER PD 12D
                        6D
                        14D
                TAD     TLOAD           # CHANGE MODE TO TP
                        TIMSUBO
                        MPAC
                STODL   TIMSUBM         # T+T0 CSEC B-42
                        TIMSUBM +1
                DMP                     # PD 10D  MULT BY XDOT IN 10-11D
                SL*     DAD             # PD 8D   ADD XO IN 8-9D AFTER SHIFTING
                        5,1             #         SUCH THAT SCALING IS B-0
                PUSH    SLOAD           # PD 10D SAVE PARTIAL (X0+XDOT*T) IN 8-9D
                        TIMSUBM
                SL      DMP
                        9D
                        10D             # XDOT
                SL*     DAD             # PD 8D   SHIFT SUCH THAT THIS PART OF X
                        10D,1           #         IS SCALED REVS/CSEC B-0
                BOV                     # TURN OFF OVERFLOW IF SET BY SHIFT
                        +1              # INSTRUCTION BEFORE EXITING
                RVQ                     # MPAC=X= X0+(XDOT)(T+T0)  REVS B0

## Page 1137
# ..... EARTHMX SUBROUTINE .....
# SUBROUTINE TO COMPUTE THE TRANSFORMATION MATRIX M FOR THE EARTH

# CALLING SEQUENCE
#  L       CALL
#  L+1            EARTHMX

# SUBROUTINES USED
#  NEWANGLE

# INPUT
#    INPUT AVAILABLE FROM LAUNCH DATA     AZO  REVS B-0
#                                         TEPHEM  CSEC B-42
#  6-7D= TIME CSEC B-28

# OUTPUT
#  MMATRIX= 3X3 M MATRIX B-1   (STORED IN VAC AREA)

                BANK    26
                SETLOC  PLANTIN1
                BANK
                COUNT*  $$/LUROT

EARTHMX         STQ     SETPD           # SET   8-9D=AZO
                        EARTHMXX
                        8D              # 10-11D=WEARTH
                AXT,1                   # FOR SL 5, AND SL 10  IN NEWANGLE
                        0
                DLOAD   PDDL            #   LEAVING PD SET AT 12D FOR NEWANGLE
                        AZO
                        WEARTH
                PUSH    CALL
                        NEWANGLE
                SETPD   PUSH            # 18-19D=504AZ
                        18D             #                    COS(AZ) SIN(AZ) 0
                COS     PDDL            # 20-37D=  MMATRIX= -SIN(AZ) COS(AZ) 0 B-1
                        504AZ           #                     0       0      1
                SIN     PDDL
                        HI6ZEROS
                PDDL    SIN
                        504AZ
                DCOMP   PDDL
                        504AZ
                COS     PDVL
                        HI6ZEROS
                PDDL    PUSH
                        HIDPHALF
                GOTO
                        EARTHMXX

## Page 1138
# ..... EARTHL SUBROUTINE .....
# SUBROUTINE TO COMPUTE L VECTOR FOR EARTH

# CALLING SEQUENCE
#  L       CALL
#  L+1            EARTHL

# INPUT
#  AXO,AYO SET AT LAUNCH TIME WITH AYO IMMEDIATELY FOLLOWING AXO IN CORE

# OUTPUT
#           -AX
#   MPAC=   -AY    RADIANS B-0
#             0

                BANK    06
                SETLOC  EARTHLOC
                BANK
                COUNT*  $$/LUROT

EARTHL          DLOAD   DCOMP
                        AXO
                STODL   504LPL
                        -AYO
                STODL   504LPL +2
                        LO6ZEROS
                STOVL   504LPL +4
                        504LPL
                RVQ

## Page 1139
# CONSTANTS AND ERASABLE ASSIGNMENTS
1B1             =       DP1/2           # 1  SCALED B-1
RPREXIT         =       S1              # R-TO-RP AND RP-TO-R SUBR EXIT
EARTHMXX        =       S2              # EARTHMX,MOONMX SUBR. EXITS
504RPR          =       0D              # 6 REGS  R OR RP VECTOR
SINNODI         =       8D              # 2       SIN(NODI)
DVECTR          =       8D              # 6       D VECTOR MOON
CVECTR          =       8D              # 6       C VECTR MOON
504AZ           =       18D             # 2      AZ
TIMSUBM         =       14D             # 3       TIME SUB M (MOON) T+T0 IN GETAZ
504LPL          =       14D             # 6       L OR LP VECTOR
AVECTR          =       20D             # 6       A VECTOR (MOON)
BVECTR          =       26D             # 6       B VECTOR (MOON)
MMATRIX         =       20D             # 18      M MATRIX
COB             =       32D             # 2       COS(B) B-1
SOB             =       34D             # 2       SIN(B) B-1
504F            =       6D              # 2       F(MOON)
back to top