### FILE="Main.annotation"
## Copyright: Public domain.
## Filename: IMU_COMPENSATION_PACKAGE.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. 328-339
## Contact: Ron Burkey <info@sandroid.org>.
## Website: www.ibiblio.org/apollo/index.html
## Mod history: 05/10/03 RSB. Began transcribing.
## 05/14/05 RSB Corrected website reference above.
## 2016-12-30 RSB Backported BYRO->GYRO from Colossus 237.
## (There's lots more that needs to be backported,
## but I found this one particularly annoying.)
## 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-23 RSB Proofed comment text using octopus/ProoferComments.
## 2017-03-07 RSB Comment-text fixes noted in proofing Luminary 116.
## 2018-09-04 MAS Copied from Luminary 131 for Luminary 130.
## Page 328
BANK 7
SETLOC IMUCOMP
BANK
EBANK= NBDX
COUNT* $$/ICOMP
1/PIPA CAF LGCOMP # SAVE EBANK OF CALLING PROGRAM
XCH EBANK
TS MODE
CCS GCOMPSW # BYPASS IF GCOMPSW NEGATIVE
TCF +3
TCF +2
TCF IRIG1 # RETURN
1/PIPA1 CAF FOUR # PIPAZ, PIPAY, PIPAX
TS BUF +2
INDEX BUF +2
CA PIPASCF # (P.P.M.) X 2(-9)
EXTEND
INDEX BUF +2
MP DELVX # (PP) X 2(+14) NOW (PIPA PULSES) X 2(+5)
TS Q # SAVE MAJOR PART
CA L # MINOR PART
EXTEND
MP BIT6 # SCALE 2(+9) SHIFT RIGHT 9
INDEX BUF +2
TS DELVX +1 # FRACTIONAL PIPA PULSES SCALED 2(+14)
CA Q # MAJOR PART
EXTEND
MP BIT6 # SCALE 2(+9) SHIFT RIGHT 9
INDEX BUF +2
DAS DELVX # (PIPAI) + (PIPAI)(SFE)
INDEX BUF +2
CS PIPABIAS # (PIPA PULSES)/(CS) X 2(-3) *
EXTEND
MP 1/PIPADT # (CS) X 2(+8) NOW (PIPA PULSES) X 2(+5) *
EXTEND
MP BIT6 # SCALE 2(+9) SHIFT RIGHT 9 *
INDEX BUF +2
DAS DELVX # (PIPAI) + (PIPAI)(SFE) - (BIAS)(DELTAT)
CCS BUF +2 # PIPAZ, PIPAY, PIPAX
AD NEG1
TCF 1/PIPA1 +1
## Page 329
NOOP # LESS THAN ZERO IMPOSSIBLE
## Page 330
IRIGCOMP TS GCOMPSW # INDICATE COMMANDS 2 PULSES OR LESS.
TS BUF # INDEX COUNTER. IRIGX, IRIGY, IRIGZ.
TC IRIGX # COMPENSATE ACCELERATION TERMS
CS NBDX # (GYRO PULSES)/(CS) X 2(-5)
TC DRIFTSUB # -(NBOX)(DELTAT) (GYRO PULSES) X 2(+14)
TC IRIGY # COMPENSATE ACCELERATION TERMS
CS NBDY # (GYRO PULSES)/(CS) X 2(-5)
TC DRIFTSUB # -(NBDY)(DELTAT) (GYRO PULSES) X 2(+14)
TC IRIGZ # COMPENSATE ACCELERATION TERMS
CA NBDZ # (GYRO PULSES)/(CS) X 2(-5)
TC DRIFTSUB # +(NBDZ)(DELTAT) (GYRO PULSES) X 2(+14)
CCS GCOMPSW # ARE GYRO COMMANDS GREATER THAN 2 PULSES
TCF +2 # YES SEND OUT GYRO TORQUING COMMANDS.
TCF IRIG1 # NO RETURN
CA PRIO21 # PRIO GREATER THAN SERVICER
TC NOVAC # SEND OUT GYRO TORQUING COMMANDS.
EBANK= NBDX
2CADR 1/GYRO
RELINT
IRIG1 CA MODE # RESTORE CALLER S EBANK
TS EBANK
TCF SWRETURN
## Page 331
IRIGX EXTEND
QXCH MPAC +2 # SAVE Q
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)
# EXTEND ***
# DCS DELVZ *** (PIPA PULSES) X 2(+14)
# DXCH MPAC ***
# CA ADOAX *** (GYRO PULSES)/(PIPA PULSE) X 2(-6) *
# TC GCOMPSUB *** -(ADOAX)(PIPAZ) (GYRO PULSES) X 2(+14)
TC MPAC +2
IRIGY EXTEND
QXCH MPAC +2 # SAVE Q
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)
# EXTEND ***
# DCS DELVX *** (PIPA PULSES) X 2(+14)
# DXCH MPAC ***
# CA ADOAY *** (GYRO PULSES)/(PIPA PULSE) X 2(-6) *
# TC GCOMPSUB *** -(ADOAY)(PIPAX) (GYRO PULSES) X 2(+14)
TC MPAC +2
IRIGZ EXTEND
QXCH MPAC +2 # SAVE Q
EXTEND
DCS DELVY # (PIPA PULSES) X 2(+14)
DXCH MPAC
CA ADSRAZ # (GYRO PULSES)/(PIPA PULSE) X 2(-6) *
## Page 332
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)
# EXTEND ***
# DCS DELVX *** (PIPA PULSE) X 2(+14)
# DXCH MPAC ***
# CS ADOAZ *** (GYRO PULSES)/(PIPA PULSE) X 2(-6) *
# TC GCOMPSUB *** +(ADOAZ)(PIPAX) (GYRO PULSES) X 2(+14)
TC MPAC +2
## Page 333
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 334
DRIFTSUB 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 335
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 336
NBDONLY CCS GCOMPSW # BYPASS IF GCOMPSW NEGATIVE
TCF +3
TCF +2
TCF ENDOFJOB
INHINT
CCS FLAGWRD2 # PREREAD T3RUPT MAY COINCIDE
TCF ENDOFJOB
TCF ENDOFJOB
TCF +1
CA FLAGWRD8 # IF SURFACE FLAG IS SET, SET TEM1
MASK BIT8 # POSITIVE SO THAT THE ACCELERATION TERMS
TS TEM1 # WILL BE COMPENSATED.
EXTEND
BZF +3 # ARE WE ON THE SURFACE
TC IBNKCALL # ON THE SURFACE
CADR PIPASR +3 # READ PIPAS, BUT DO NOT SCALE THEM
CA TIME1 # (CS) X 2(+14)
XCH 1/PIPADT # PREVIOUS TIME
RELINT
COM
AD 1/PIPADT # PRESENT TIME - PREVIOUS TIME
NBD2 AD HALF # CORRECT FOR POSSIBLE TIME1 TICK
AD HALF
XCH L # IF TIME1 DID NOT TICK, REMOVE RESULTING
XCH L # OVERFLOW.
NBD3 EXTEND # C(A) = DELTAT (CS) X 2(+14)
MP BIT10 # SHIFT RIGHT 5
DXCH VBUF +2
CA ZERO
TS GCOMPSW # INDICATE COMMANDS 2 PULSES OR LESS.
TS BUF # INDEX X, Y, Z.
CCS TEM1 # IF SURFACE FLAG IS SET,
TC IRIGX # COMPENSATE ACCELERATION TERMS.
EXTEND
DCA VBUF +2
DXCH MPAC # DELTAT NOW SCALED (CS) X 2(+19)
CS NBDX # (GYRO PULSES)/(CS) X 2(-5)
TC FBIASSUB # -(NBOX)(DELTAT) (GYRO PULSES) X 2(+14)
CCS TEM1 # IF SURFACE FLAG IS SET,
TC IRIGY # COMPENSATE ACCELERATION TERMS.
## Page 337
EXTEND
DCS VBUF +2
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)
CCS TEM1 # IF SURFACE FLAG IS SET,
TC IRIGZ # COMPENSATE ACCELERATION TERMS
EXTEND
DCS VBUF +2
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 338
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 TC BANKCALL
CADR PIPUSE1
CCS GCOMPSW
TCF +3
TCF +2
TCF ENDOFJOB
CA FLAGWRD8 # IF SURFACE FLAG IS SET, SET TEM1
MASK SURFFBIT # POSITIVE SO THAT THE ACCELERATION TERMS
TS TEM1 # WILL BE COMPENSATED.
CAF PRIO31 # 2 SECONDS SCALED (CS) X 2(+8)
XCH 1/PIPADT
COM
AD PIPTIME +1
TCF NBD2
GCOMPZER CAF LGCOMP # ROUTINE TO ZERO GCOMP BEFORE FIRST
XCH EBANK # CALL TO 1/PIPA
TS MODE
CAF ZERO
TS GCOMPSW
TS GCOMP
TS GCOMP +1
TS GCOMP +2
TS GCOMP +3
TS GCOMP +4
## Page 339
TS GCOMP +5
TCF IRIG1 # RESTORE EBANK AND RETURN