371 lines
9.2 KiB
ArmAsm
371 lines
9.2 KiB
ArmAsm
# Copyright: Public domain.
|
|
# Filename: IMU_COMPENSATION_PACKAGE.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: 297-306
|
|
# Mod history: 2009-05-08 RSB Adapted from the Colossus249/ file of the
|
|
# same name, using Comanche055 page images/
|
|
# 2009-05-21 RSB In IRIGZ, PRIO17 corrected to PRIO21.
|
|
#
|
|
# 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
|
|
# illegible, contact me at info@sandroid.org about getting access to the
|
|
# (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
|
|
# 2021113-051. 10:28 APR. 1, 1969
|
|
#
|
|
# This AGC program shall also be referred to as
|
|
# Colossus 2A
|
|
|
|
# Page 297
|
|
BANK 7
|
|
SETLOC IMUCOMP
|
|
BANK
|
|
EBANK= NBDX
|
|
|
|
COUNT 06/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
|
|
|
|
INHINT # ASSURE COMPLETE COMPENSATION OF DELV'S
|
|
# FOR DOWNLINK.
|
|
|
|
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)(SF)
|
|
|
|
INDEX BUF +2
|
|
CS PIPABIAS # (PIPA PULSES)/(CS) X 2(-8) *
|
|
EXTEND
|
|
MP 1/PIPADT # (CS) X 2(+8) NOW (PIPA PULSES) X 2(+0) *
|
|
EXTEND
|
|
MP BIT1 # SCALE 2(+14) SHIFT RIGHT 14 *
|
|
INDEX BUF +2
|
|
DAS DELVX # (PIPAI) + (PIPAI)(SFE) - (BIAS)(DELTAT)
|
|
|
|
CCS BUF +2 # PIPAZ, PIPAY, PIPAX
|
|
# Page 298
|
|
AD NEG1
|
|
TCF 1/PIPA1 +1
|
|
NOOP # LESS THAN ZERO IMPOSSIBLE
|
|
RELINT
|
|
# Page 299
|
|
|
|
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(-3) *
|
|
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(-3) *
|
|
TC GCOMPSUB # -(ADSRAX)(PIPAY) (GYRO PULSES) X 2(+14)
|
|
|
|
# EXTEND # ***
|
|
# DCS DELVY # *** (PIPA PULSES) X 2(+14)
|
|
# DXCH MPAC # ***
|
|
# CA ADOAX # *** (GYRO PULSES)/(PIPA PULSE) X 2(-3) *
|
|
# TC GCOMPSUB # *** -(ADOAX)(PIPAZ) (GYRO PULSES) X 2(+14)
|
|
|
|
CS NBDX # (GYRO PULSES)/(CS) X 2(-3)
|
|
TC DRIFTSUB # -(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(-3) *
|
|
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(-3) *
|
|
TC GCOMPSUB # +(ADSRAY)(PIPAZ) (GYRO PULSES) X 2(+14)
|
|
|
|
# EXTEND # ***
|
|
# DCS DELVX # *** (PIPA PULSES) X 2(+14)
|
|
# DXCH MPAC # ***
|
|
# CA ADOAY # *** (GYRO PULSES)/(PIPA PULS) X 2(-3) *
|
|
# TC GCOMPSUB # *** -(ADOAY)(/PIPAX) (GYRO PULSES) X 2(+14)
|
|
|
|
CS NBDY # (GYRO PULSES)/(CS) X 2(-5)
|
|
TC DRIFTSUB # -(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(-3) *
|
|
# Page 300
|
|
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(-3) *
|
|
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(-3) *
|
|
# TC GCOMPSUB # *** +(ADOAZ)(PIPAX) (GYRO PULSES) X 2(+14)
|
|
|
|
CA NBDZ # (GYRO PULSES)/(CS) X 2(-5)
|
|
TC DRIFTSUB # +(NBDZ)(DELTAT) (GYRO PULSES) X 2(+14)
|
|
|
|
# Page 301
|
|
CCS GCOMPSW # ARE GYRO COMMANDS GREATER THAN 2 PULSES
|
|
TCF +2 # YES
|
|
TCF IRIG1 # NO
|
|
|
|
CA PRIO21 # HIGHER THAN SERVICER -- LESS THAN PRELAUNCH
|
|
TC NOVAC
|
|
EBANK= NBDX
|
|
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(-3) *
|
|
DXCH VBUF # NOW = (GYRO PULSES) X 2(+11) *
|
|
|
|
CA MPAC +1 # MINOR PART OF PIPA PULSES
|
|
EXTEND
|
|
MP MPAC # ADIA OR ADSRA
|
|
TS L
|
|
CAF ZERO
|
|
DAS VBUF # NOW = (GYRO PULSES) X 2(+11) *
|
|
|
|
CA VBUF # PARTIAL RESULT -- MAJOR
|
|
EXTEND
|
|
MP BIT12 # SCALE 2(+3) SHIFT RIGHT 3 *
|
|
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 BIT12 # SCALE 2(+3) SHIFT RIGHT 3 *
|
|
TS L
|
|
CAF ZERO
|
|
INDEX BUF # RESULT = (GYRO PULSES) X 2(+14)
|
|
DAS GCOMP # (ADIA)(PIPAI) OR (ADSRA)(PIPAI)
|
|
|
|
TC Q
|
|
|
|
# Page 302
|
|
DRIFTSUB EXTEND
|
|
QXCH BUF +1
|
|
|
|
EXTEND # C(A) = NBD (GYRO PULSES)/(CS) X 2(-5)
|
|
MP 1/PIPADT # (CS) X 2(+8) NO (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 NEGONE
|
|
CCS A # ARE GYRO COMMANDS GREATER THAN 2 PULSES
|
|
TS GCOMPSW # YES -- SET GCOMPSW POSITIVE
|
|
TC BUF +1 # NO
|
|
|
|
# Page 303
|
|
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
|
|
|
|
V06N30S VN 0630
|
|
TCF ENDOFJOB
|
|
|
|
# Page 304
|
|
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 TIME1 # (CS) X 2(+14)
|
|
XCH 1/PIPADT # PREVIOUS TIME
|
|
RELINT
|
|
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 # INDEX X, Y, Z.
|
|
|
|
CS NBDX # (GYRO PULSES)/(CS) X 2(-5)
|
|
TC FBIASSUB # -(NBOX)(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)
|
|
# Page 305
|
|
CCS GCOMPSW # ARE GYRO COMMANDS GREATER THAN 2 PULSES
|
|
TCF 1/GYRO # YES
|
|
TCF ENDOFJOB # NO
|
|
|
|
# Page 303
|
|
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 # NO 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 PIPUSE
|
|
|
|
CCS GCOMPSW # BYPASS IF GCOMPSW NEGATIVE
|
|
TCF +3
|
|
TCF +2
|
|
TCF ENDOFJOB
|
|
|
|
CAF PRIO31 # 2 SECONDS SCALED (CS) X 2(+8)
|
|
XCH 1/PIPADT
|
|
COM
|
|
AD PIPTIME1 +1 # TIME AT PIPA1 =0
|
|
TCF NBD2
|
|
|