swh:1:snp:cdcd2bc43331a436e8c659ba93175ef7d7eb339b
Raw File
Tip revision: 4e5d304eb7cd5589b924ffb8b423b6f15511b35d authored by Ron Burkey on 20 October 2018, 17:47:00 UTC
The sample Block I AGC program TRIVIUM, found at the very end of one of
Tip revision: 4e5d304
IMU_COMPENSATION_PACKAGE.agc
### FILE="Main.annotation"
## Copyright:    Public domain.
## Filename:     IMU_COMPENSATION_PACKAGE.agc
## Purpose:      Part of the source code for Aurora (revision 12).
## Assembler:    yaYUL
## Contact:      Hartmuth Gutsche<hgutsche@xplornet.com>.
## Website:      https://www.ibiblio.org/apollo.
## Pages:        209-217
## Mod history:  2016-09-20 JL   Created.
##               2016-09-21 HG   Initial transcription from scans
##               2016-10-12 HG   Fix label VBU -> VBUF
##                                         GCOMPS -> GCOMPSW 
##		 2016-12-08 RSB	 Proofed comments with octopus/ProoferComments
##				 and fixed the errors found.

## This source code has been transcribed or otherwise adapted from
## digitized images of a hardcopy from the private collection of 
## Don Eyles.  The digitization was performed by archive.org.

## Notations on the hardcopy document read, in part:

##       473423A YUL SYSTEM FOR BLK2: REVISION 12 of PROGRAM AURORA BY DAP GROUP
##       NOV 10, 1966

##       [Note that this is the date the hardcopy was made, not the
##       date of the program revision or the assembly.]

## The scan images (with suitable reduction in storage size and consequent 
## reduction in image quality) are available online at 
##       https://www.ibiblio.org/apollo.  
## The original high-quality digital images are available at archive.org:
##       https://archive.org/details/aurora00dapg

## Page 209
                BANK    7
                EBANK=  NBDX
# PROGRAM DESCRIPTION- IMU COMPENSATION (LEM)                             DATE- 30 AUG 66
# MOD NO- 0                                                               LOG SECTION- IMU COMPENSATION PACKAGE
# MOD BY- GILBERT                                                         ASSEMBLY- SUNBURST REVISION 13 

# FUNCTIONAL DESCRIPTION
#       THE IMU COMPENSATION PACKAGE IS DESIGNED TO COMPENSATE FOR PIPA BIAS AND SCALE FACTOR ERROR AND AT THE
# SAME TIME ACCUMULATE GYRO TORQUING COMMANDS NECESSARY TO COMPENSATE FOR THE ASSOCIATED BIAS AND ACCELERATION-
# CAUSED GYRO DRIFTS. 1/PIPA MUST BE CALLED AT LEAST EVERY 2.55 SECONDS DUE TO SCALING CONSIDERATIONS.
# SPECIFICALLY, THE CORRECTION IS

#       PIPA  = (1 + SCALE FACTOR ERROR)PIPA  -  (BIAS)(DELTAT)
#           C                               I

# WHERE PIPA  IS THE COMPENSATED DATA OBTAINED FROM THE SAMPLED DATA PIPA
#           C                                                            I

# THE COMPENSATED DATA IS THEN USED TO COMPUTE THE IRIG TORQUING NECESSARY TO CANCEL THE NBD, ADIA, AND ADSRA
# GYRO COEFFICIENTS.
# SPECIFICALLY, THE COMPUTATIONS ARE

#       XIRIG     -(ADIAX)(PIPAX ) + (ADSRAX)(PIPAY ) - (NBDX)(DELTAT)  
#                               C                  C
#       YIRIG     -(ADIAY)(PIPAY ) + (ADSRAY)(PIPAZ ) - (NBDY)(DELTAT)
#                               C                  C  
#       ZIRIG     -(ADIAZ)(PIPAZ ) - (ADSRAZ)(PIPAY ) + (NBDZ)(DELTAT)
#                               C                  C

# THIS COMPENSATION IS SUMMED INTO THE GCOMP REGISTERS AND WHEN THE MAGNITUDE OF ANY IRIG COMMAND EXCEEDS 2
# PULSES, THE COMMANDS ARE SENT TO THE GYROS.

# DURING FREE-FALL PHASES OF A FLIGHT NBDX, NBDY, AND NBDZ ARE THE ONLY RELEVANT COEFFICIENTS. THESE BIAS TERMS
# WILL BE INTEGRATED BY ROUTINE NBDONLY APPROXIMATELY EVERY 81.93 SECONDS FOLLOWING AN EXECUTIVE CALL BY THE DUMMY
# TASK OF THE WAITLIST PROGRAM. NBDONLY IS ENABLED WHEN BIT 15 OF FLAGWRD2 IS SET TO INDICATE FREE-FALL. DURING
# THIS TIME 1/PIPA IS NOT CALLED.

# LASTBIAS IS CALLED VIA EXECUTIVE WHEN MAKING THE TRANSITION FROM FREE-FALL TO A PIPA READING MODE. THE NBD TERMS
# ARE COMPENSATED FOR FROM THE LAST NBDONLY CALL UP TO PIPA ZEROING. PREREAD WILL THEN ENABLE 1/PIPA AT ITS
# REGULAR INTERVAL. THE DRIFT FLAG MUST BE DOWN JUST PRIOR TO LASTBIAS. GYROCOMPASS NEVER CALLS LASTBIAS.

# SCALING CONSIDERATIONS
#                            UNITS              MAX. VALUE     INTERNAL UNITS AND SCALING

#        PIPA BIAS           (CM)/(SEC)(SEC)    3.125          (PIPA PULSES)/(CS) X 2(-5) 
#        PIPA SCALE FACTOR   P.P.M.             1953.125       (PPM) X 2(-9)
#        NBD                 MERU               128.74604      (GYRO PULSES)/(CS) X 2(-5) 
#        ADIA                (MERU)/(G)         630.36633      (GYRO PULSES)/(PIPA PULSE) X 2(-6)
#        ADSRA               (MERU)/(G)         630.36633      (GYRO PULSES)/(PIPA PULSE) X 2(-6)

## Page 210
# CONVERSION TABLE
#       1 PIPA PULSE = 1.00 (CM)/(SEC)(SEC)          1 ERU = 7.29209817 X 10(-5) (RAD)/(SEC)
#       1 ERU = 15.04104488 (ARCSEC)/(SEC)           1 (CM)/(SEC)(SEC) = .01 (PIPA PULSES)/(CS)
#       1 GYRO PULSE = .61798096 ARCSEC              1 MERU = .0024272592 (GYRO PULSES)/(CS)
#       1 G = 979.24 (CM)/(SEC)(SEC)  (AMR)          1 (MERU)/(G) = .000144787174 (GYRO PULSES)/(PIPA PULSE)

# REFERENCES
#       AGC PROGRAMMING MEMO NO. 12, I.S.S. MEMO NO. 247, I.S.S. MEMO NO. 328, I.S.S. MEMO NO. 339

# CALLING SEQUENCE 
#       L      TC     BANKCALL
#       L+1    CADR   1/PIPA
#       L+2                       RETURNS HERE

# NORMAL EXIT MODES
#       AT L+2 OF CALLING SEQUENCE

# ALARM OR ABORT MODES
#       ENDOFJOB

# ERASABLE INITIALIZATION REQUIRED (CONSECUTIVE LOCATIONS)
#       PBIASX    PIPAX BIAS
#       PIPASCFX  PIPAX SCALE FACTOR ERROR
#       PBIASY    PIPAY BIAS
#       PIPASCFY  PIPAY SCALE FACTOR ERROR
#       PBIASZ    PIPAZ BIAS
#       PIPASCFZ  PIPAZ SCALE FACTOR ERROR
#       NBDX      X IRIG BIAS DRIFT
#       NBDY      Y IRIG BIAS DRIFT
#       NDBZ      Z IRIG BIAS DRIFT
#       ADIAX     IRIG ACCELERATION SENSITIVE DRIFT ALONG THE X INPUT AXIS  
#       ADIAY     IRIG ACCELERATION SENSITIVE DRIFT ALONG THE Y INPUT AXIS 
#       ADIAZ     IRIG ACCELERATION SENSITIVE DRIFT ALONG THE Z INPUT AXIS
#       ADSRAX    IRIG ACCELERATION SENSITIVE DRIFT ALONG THE X SPIN REFERENCE AXIS      
#       ADSRAY    IRIG ACCELERATION SENSITIVE DRIFT ALONG THE Y SPIN REFERENCE AXIS  
#       ADSRAZ    IRIG ACCELERATION SENSITIVE DRIFT ALONG THE Z SPIN REFERENCE AXIS
#       GCOMP     GYRO COMPENSATION PULSES (SET = ZERO FOR 1ST PASS)

# INPUT
#       1/PIPADT - DELTA TIME SCALED AT (CS) X 2(+8)
#       DELVX, DELVY, DELVZ - PIPA READINGS IN THE MAJOR PARTS - MINOR PARTS IRRELEVANT 

# OUTPUT
#       DELVX, DELVY, DELVZ - PIPA COUNTS SCALED 2(+14) COMPENSATED FOR PIPA BIAS AND SCALE FACTOR ERROR
#       GCOMP - 3 DP LOCATIONS CONTAINING GYRO PULSES TO COMPENSATE FOR NBD, ADIA, AND ADSRA COEFFICIENTS

# DEBRIS
#       CENTRALS - A,L,Q
#       OTHER - BUF - BUF +2, VBUF - VBUF +2, GCOMPSW

## Page 211
1/PIPA          CAF     LGCOMP          # SAVE EBANK OF CALLING PROGRAM
                XCH     EBANK
                TS      MODE
                
                CAF     FOUR            # PIPAZ, PIPAY, PIPAX
                TS      BUF     +2
                
                INDEX   A
                CA      DELVX           # CONTAINS PREVIOUS PIPA READING
                TS      VBUF            # TEMPORARY - MINOR PARTS IRRELEVANT
                
                INDEX   BUF     +2
                CS      PIPABIAS        # (PIPA PULSES)/(CS) X 2(-5)             *
                EXTEND
                MP      1/PIPADT        # (CS) X 2(+8)  NOW (PIPA PULSES) X 2(+3)*
                EXTEND                  #                                        *
                MP      BIT4            # SCALE 2(-3)      SHIFT LEFT 3          *
                LXCH    VBUF    +1      # (PIPA PULSES) X 2(0)   FRACTIONAL PULSE*
                
                INDEX   BUF     +2
                CA      PIPASCF         # (P.P.M.) X 2(-9)
                EXTEND
                MP      VBUF            # (PIPA PULSES) X 2(+14)
                LXCH    VBUF    +2      # SAVE FOR FRACTIONAL COMPUTATION
                EXTEND
                MP      BIT6            # SCALE 2(+9)    NOW PIPA PULSES X 2(+14)
                DAS     VBUF            # (PIPAI) - (NBD)(DELTAT) - HI(PIPAI)(SFE)
                
                CA      VBUF    +2      # NOW MINOR PART
                EXTEND
                MP      BIT6            # SCALE 2(+9)     SHIFT RIGHT 9
                TS      L
                CAF     ZERO
                DAS     VBUF            # (PIPAI) - (NBD)(DELTAT) - (PIPAI)(SFE)
                
                EXTEND
                DCA     VBUF            # RESTORE COMPENSATED PIPA READING
                INDEX   BUF     +2
                DXCH    DELVX
                
                CCS     BUF     +2      # PIPAZ, PIPAY, PIPAX
                AD      NEG1
                TCF     1/PIPA  +4
                NOOP                    # LESS THAN ZERO IMPOSSIBLE
                
## Page 212                
IRIGCOMP        TS      GCOMPSW         # INDICATE COMMANDS 2 PULSES OR LESS
                TS      BUF             # INDEX COUNTER - IRIGX, IRIGY, IRIGZ
IRIGX           EXTEND
                DCS     DELVX           # (PIPA PULSES) X 2(+14)
                DXCH    MPAC            
                CA      ADIAX           # (GYRO PULSES)/(PIPA PULSE) X 2(-6)     *
                TC      GCOMPSUB        # -(ADIAX)(PIPAX)   (GYRO PULSES) X 2(+14)

                EXTEND
                DCS     DELVY           # (PIPA PULSES) X 2(+14)
                DXCH    MPAC
                CS      ADSRAX          # (GYRO PULSES)/(PIPA PULSE) X 2(-6)     *
                TC      GCOMPSUB        # +(ADSRAX)(PIPAY)  (GYRO PULSES) X 2(+14)
                
                CS      NBDX            # (GYRO PULSES)/(CS) X 2(-5)
                TC      DRIFSTUB        # -(NBDX)(DELTAT)   (GYRO PULSES) X 2(+14)
                
IRIGY           EXTEND
                DCS     DELVY           # (PIPA PULSES) X 2(+14)
                DXCH    MPAC            
                CA      ADIAY           # (GYRO PULSES)/(PIPA PULSE) X 2(-6)     *
                TC      GCOMPSUB        # -(ADIAY)(PIPAY)   (GYRO PULSES) X 2(+14)

                EXTEND
                DCS     DELVZ           # (PIPA PULSES) X 2(+14)
                DXCH    MPAC
                CS      ADSRAY          # (GYRO PULSES)/(PIPA PULSE) X 2(-6)     *
                TC      GCOMPSUB        # +(ADSRAY)(PIPAZ)  (GYRO PULSES) X 2(+14)
                
                CS      NBDY            # (GYRO PULSES)/(CS) X 2(-5)
                TC      DRIFSTUB        # -(NBDY)(DELTAT)   (GYRO PULSES) X 2(+14)
                
IRIGZ           EXTEND
                DCS     DELVY           # (PIPA PULSES) X 2(+14)
                DXCH    MPAC            
                CA      ADSRAZ          # (GYRO PULSES)/(PIPA PULSE) X 2(-6)     *
                TC      GCOMPSUB        # -(ADSRAZ)(PIPAY   (GYRO PULSES) X 2(+14)

                EXTEND
                DCS     DELVZ           # (PIPA PULSES) X 2(+14)
                DXCH    MPAC
                CA      ADIAZ           # (GYRO PULSES)/(PIPA PULSE) X 2(-6)     *
                TC      GCOMPSUB        # -(ADIAZ)(PIPAZ)   (GYRO PULSES) X 2(+14)
                
                CA      NBDZ            # (GYRO PULSES)/(CS) X 2(-5)
                TC      DRIFSTUB        # +(NBDZ)(DELTAT)   (GYRO PULSES) X 2(+14)
                
## Page 213
                CCS     GCOMPSW         # ARE GYRO COMMANDS GREATER THAN 2 PULSES
                TCF     +2              # YES
                TCF     IRIG1           # NO
                
                INHINT
                CAF     PRIO35          # SEND OUT GYRO TORQUING COMMANDS
                TC      NOVAC
                2CADR   1/GYRO
                RELINT
IRIG1           CA      MODE            # SET EBANK FOR RETURN
                TS      EBANK
                TCF     SWRETURN
                
                
                
                
                
                
GCOMPSUB        XCH     MPAC            # ADIA OR ADSRA COEFFICIENT ARRIVES IN A 
                EXTEND                  # C(MPAC) = (PIPA PULSES) X 2(+14)  
                MP      MPAC            # (GYRO PULSES)/(PIPA PULSE) X 2(-6)     *
                DXCH    VBUF            # NOW = (GYRO PULSES) X 2(+8)            *
                
                CA      MPAC    +1      # MINOR PART PIPA PULSES
                EXTEND
                MP      MPAC            # ADIA OR ADSRA
                TS      L
                CAF     ZERO
                DAS     VBUF            # NOW = (GYRO PULSES) X 2(+8)            *
                
                CA      VBUF            # PARTIAL RESULT - MAJOR
                EXTEND
                MP      BIT9            # SCALE 2(+6)      SHIFT RIGHT 6         *
                INDEX   BUF             # RESULT = (GYRO PULSES) X 2(+14)
                DAS     GCOMP           # HI(ADIA)(PIPAI)  OR  HI(ADSRA)(PIPAI)
                
                CA      VBUF    +1      # PARTIAL RESULT - MINOR
                EXTEND
                MP      BIT9            # SCALE 2(+6)      SHIFT RIGHT 6         *
                TS      L
                CAF     ZERO
                INDEX   BUF             # RESULT = (GYRO PULSES) X 2(+14)
                DAS     GCOMP           # (ADIA)(PIPAI)  OR  (ADSRA)(PIPAI)
                
                TC      Q
                
## Page 214
DRIFSTUB        EXTEND
                QXCH    BUF     +1
                
                EXTEND                  # C(A) = NBD    (GYRO PULSES)/(CS) X 2(-5)
                MP      1/PIPADT        # (CS) X 2(+8)   NOW (GYRO PULSES) X 2(+3)
                LXCH    MPAC    +1      # SAVE FOR FRACTIONAL COMPENSATION
                EXTEND
                MP      BIT4            # SCALE 2(+11)     SHIFT RIGHT 11
                INDEX   BUF
                DAS     GCOMP           # HI(NBD)(DELTAT)   (GYRO PULSES) X 2(+14)
                
                CA      MPAC    +1      # NOW MINOR PART
                EXTEND
                MP      BIT4            # SCALE 2(+11)     SHIFT RIGHT 11
                TS      L
                CAF     ZERO
                INDEX   BUF             # ADD IN FRACTIONAL COMPENSATION
                DAS     GCOMP           # (NBD)(DELTAT)     (GYRO PULSES) X 2(+14)

DRFTSUB2        CAF     TWO             # PIPAX, PIPAY, PIPAZ
                AD      BUF
                XCH     BUF
                INDEX   A
                CCS     GCOMP           # ARE GYRO COMMANDS 1 PULSE OR GREATER
                TCF     +2              # YES
                TC      BUF     +1      # NO
                
                MASK    COMPCHK         # DEC -1
                CCS     A               # ARE GYRO COMMANDS GREATER THAN 2 PULSES
                TS      GCOMPSW         # YES - SET GCOMPSW POSITIVE
                TC      BUF     +1      # NO
                
## Page 215
1/GYRO          CAF     FOUR            # PIPAZ, PIPAY, PIPAX
                TS      BUF     
                
                INDEX   BUF             # SCALE GYRO COMMANDS FOR IMUPULSE
                CA      GCOMP   +1      # FRACTIONAL PULSES
                EXTEND
                MP      BIT8            # SHIFT RIGHT 7
                INDEX   BUF
                TS      GCOMP   +1      # FRACTIONAL PULSES SCALED
                
                CAF     ZERO            # SET GCOMP = 0 FOR DAS INSTRUCTION
                INDEX   BUF     
                XCH     GCOMP           # GYRO PULSES
                EXTEND
                MP      BIT8            # SHIFT RIGHT 7
                INDEX   BUF
                DAS     GCOMP           # ADD THESE TO FRACTIONAL PULSES ABOVE
                
                CCS     BUF             # PIPAZ, PIPAY, PIPAX
                AD      NEG1
                TCF     1/GYRO  +1
LGCOMP          ECADR   GCOMP           # LESS THAN ZERO IMPOSSIBLE

                CAF     LGCOMP
                TC      BANKCALL
                CADR    IMUPULSE        # CALL GYRO TORQUING ROUTINE
                TC      BANKCALL
                CADR    IMUSTALL        # WAIT FOR PULSES TO GET OUT
                TCF     ENDOFJOB        # TEMPORARY
                
GCOMP1          CAF     FOUR            # PIPAZ, PIPAY, PIPAX
                TS      BUF
                
                INDEX   BUF             # RESCALE
                CA      GCOMP   +1
                EXTEND
                MP      BIT8            # SHIFT MINOR PART LEFT 7 - MAJOR PART = 0
                INDEX   BUF
                LXCH    GCOMP   +1      # BITS 8-14 OF MINOR PART WERE = 0
                
                CCS     BUF             # PIPAZ, PIPAY, PIPAX
                AD      NEG1
                TCF     GCOMP1  +1
COMPCHK         DEC     -1              # LESS THAN ZERO IMPOSSIBLE
                TCF     ENDOFJOB
                
## Page 216                
NBDONLY         CA      TIME1           # (CS) X 2(+14)
                XCH     1/PIPADT        # PREVIOUS TIME
                COM
                AD      1/PIPADT
NBD2            CCS     A               # CALCULATE ELAPSED TIME
                AD      ONE             # NO TIME1 OVERFLOW
                TCF     NBD3            # RESTORE TIME DIFFERENCE AND JUMP
                TCF     +2              # TIME1 OVERFLOW
                TCF     ENDOFJOB        # IF ELAPSED TIME = 0  (DIFFERENCE = -0)
                
                COM                     # CALCULATE ABSOLUTE DIFFERENCE
                AD      POSMAX  
                
NBD3            EXTEND                  # C(A) = DELTAT    (CS) X 2(+14)
                MP      BIT10           # SHIFT RIGHT 5
                DXCH    VBUF
                EXTEND
                DCA     VBUF
                DXCH    MPAC            # DELTAT NOW SCALED (CS) X 2(+19)
                
                CAF     ZERO
                TS      GCOMPSW         # INDICATE COMMANDS 2 PULSES OR LESS
                TS      BUF             # PIPAX, PIPAY, PIPAZ
                
                CS      NBDX            # (GYRO PULSES)/(CS) X 2(-5)
                TC      FBIASSUB        # -(NBDX)(DELTAT)    (GYRO PULSES) X 2(+14)
                
                EXTEND
                DCS     VBUF
                DXCH    MPAC            # DELTAT SCALED (CS) X 2(+19)
                CA      NBDY            # (GYRO PULSES)/(CS) X 2(-5)
                TC      FBIASSUB        # -(NBDY)(DELTAT)    (GYRO PULSES) X 2(+14)
                
                EXTEND
                DCS     VBUF
                DXCH    MPAC            # DELTAT SCALED (CS) X 2(+19)
                CS      NBDZ            # (GYRO PULSES)/(CS) X 2(-5)
                TC      FBIASSUB        # +(NBDZ)(DELTAT)    (GYRO PULSES) X 2 (+14)
                
                CCS     GCOMPSW         # ARE GYRO COMMANDS GREATER THAN 2 PULSES
                TCF     1/GYRO          # YES
                TCF     ENDOFJOB        # NO

## Page 217
FBIASSUB        XCH     Q
                TS      BUF     +1
                
                CA      Q               # NBD SCALED (GYRO PULSES)/(CS) X 2(-5)
                EXTEND
                MP      MPAC            # DELTAT SCALED (CS) X 2(+19)
                INDEX   BUF
                DAS     GCOMP           # HI(NBD)(DELTAT)    (GYRO PULSES) X 2(+14)
                
                CA      Q               # NOW FRACTIONAL PART
                EXTEND
                MP      MPAC    +1
                TS      L
                CAF     ZERO
                INDEX   BUF
                DAS     GCOMP           # (NBD)(DELTAT)     (GYRO PULSES) X 2(+14)
     
                TCF     DRFTSUB2        # CHECK MAGNITUDE OF COMPENSATION
                
                
                
                
                
LASTBIAS        XCH     1/PIPADT        # NEW 1/PIPADT VALUE SCALED (CS) X 2(+14)
                COM
                AD      MPAC            # C(TIME1) AT PIPAI = 0 SCALED 2(+14)
                TCF     NBD2
                
                
                
                
                
GCOMPZER        CAF     LGCOMP          # ROUTINE TO ZERO GCOMP BEFORE FIRST
                XCH     EBANK           # CALL TO 1/PIPA
                TS      MODE
                
                CAF     ZERO
                TS      GCOMP
                TS      GCOMP   +1
                TS      GCOMP   +2
                TS      GCOMP   +3
                TS      GCOMP   +4
                TS      GCOMP   +5
                
                CA      MODE
                TS      EBANK
                TCF     SWRETURN        # RETURN TO CALLER
back to top