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
IMU_COMPENSATION_PACKAGE.agc
### FILE="Main.annotation"
## 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.
##		2010-08-24 JL	Fixed page 306 number.
##		2016-12-10 RSB	Proofed comments with octopus/ProoferComments
##				and fixed the errors found.
##		2017-01-14 RSB	Fixed comment-text errors located while 
##				diff'ing against Colossus 249.
##
## 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)(SFE)
		
		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	DELVZ		***	(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(-5)
		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 PULSE) 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 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)	 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	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		# 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)
## Page 305		
		CCS	GCOMPSW		# ARE GYRO COMMANDS GREATER THAN 2 PULSES
		TCF	1/GYRO		# YES
		TCF	ENDOFJOB	# NO

## Page 306
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	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
		
back to top