Source Code
![]() |
These source-code files derive from a printout of Luminary 210 (Apollo 15-17
Lunar Module guidance computer program), from the personal library of
original AGC developer Don Eyles, digitally photographed at archive.org,
financially sponsored by Jim Lawton, and transcribed to source code by a
team of volunteers. This colorized, syntax-highlighted form was created
by assembling that transcribed source code. Note that the full page images
are available on the
Virtual AGC project page at archive.org, while reduced-size images
are presented at the VirtualAGC project website. Report or fix any
transcription errors at
the Virtual AGC project code repository. Notations on the program listing read, in part: GAP: ASSEMBLE REVISION 210 OF AGC PROGRAM LUMINARY BY NASA 2021112-161 17:11 MAR. 19,1971Note that the date is the date of the printout, not the date of the program revision. |
065526,000002: ## Copyright: Public domain.
065527,000003: ## Filename: SPS_BACK-UP_RCS_CONTROL.agc
065528,000004: ## Purpose: A section of Luminary revision 210.
065529,000005: ## It is part of the source code for the Lunar Module's (LM)
065530,000006: ## Apollo Guidance Computer (AGC) for Apollo 15-17.
065531,000007: ## This file is intended to be a faithful transcription, except
065532,000008: ## that the code format has been changed to conform to the
065533,000009: ## requirements of the yaYUL assembler rather than the
065534,000010: ## original YUL assembler.
065535,000011: ## Reference: pp. 1505-1508
065536,000012: ## Assembler: yaYUL
065537,000013: ## Contact: Ron Burkey <info@sandroid.org>.
065538,000014: ## Website: www.ibiblio.org/apollo/index.html
065539,000015: ## Mod history: 2016-11-17 JL Created from Luminary131 version.
065540,000016: ## 2016-12-12 MAS Transcribed.
065541,000017: ## 2016-12-26 RSB Comment-text proofed using ProoferComments
065542,000018: ## and corrected errors found.
065543,000019:
![]() |
Page 1505 |
065545,000021: # PROGRAM NAME: SPSRCS
065546,000022:
065547,000023: # AUTHOR: EDGAR M. OSHIKA (AC ELECTRONICS)
065548,000024:
065549,000025: # MODIFIED: TO RETURN TO ALL AXES VIA Q BY P.S.WEISSMAN, OCT 7, 1968
065550,000026:
065551,000027: # MODIFIED TO IMPROVE BENDING STABILITY BY G.KALAN,FEB.14,1969
065552,000028: # FUNCTIONAL DESCRIPTION:
065553,000029:
065554,000030: # THIS PROGRAM CONTROLS THE FIRING OF ALL RCS JETS IN THE DOCKED CONFIGURATION ACCORDING TO THE FOLLOWING PHASE
065555,000031: # PLANE LOGIC.
065556,000032:
065557,000033: # 1. JET SENSE TEST (SPSRCS)
065558,000034:
065559,000035: # IF JETS ARE FIRING NEGATIVELY,SET OLDSENSE NEGATIVE AND CONTINUE
065560,000036: # IF JETS ARE FIRING POSITIVELY,SET OLDSENSE POSITIVE AND CONTINUE
065561,000037: # IF JETS ARE NOT FIRING,SET OLDSENSE TO ZERO AND GO TO OUTER RATE LIMIT TEST
065562,000038:
065563,000039: # 2. RATE DEAD BAND TEST
065564,000040:
065565,000041: # IF JETS ARE FIRING NEGATIVELY AND RATE IS GREATER THAN TARGET RATE,LEAVE
065566,000042: # JETS ON AND GO TO INHIBITION LOGIC. OTHERWISE,CONTINUE.
065567,000043: # IF JETS ARE FIRING POSITIVELY AND RATE IS LESS THAN TARGET RATE,LEAVE
065568,000044: # JETS ON AND GO TO INHIBITION LOGIC. OTHERWISE,CONTINUE.
065569,000045:
065570,000046: # 3. OUTER RATE LIMIT TEST (SPSSTART)
065571,000047:
065572,000048: # IF MAGNITUDE OF EDOT IS GREATER THAN 1.73 DEG/SEC SET JET FIRING TIME
065573,000049: # TO REDUCE RATE AND GO TO INHIBITION LOGIC. OTHERWISE,CONTINUE.
065574,000050:
065575,000051: # 4. COAST ZONE TEST
065576,000052:
065577,000053: # IF STATE (E,EDOT) IS BELOW LINE E + 4 X EDOT > -1.4 DEG AND EDOT IS LESS THAN 1.30 DEG/SEC SET JET TIME POSI-
065578,000054: # TIVE AND CONTINUE. OTHERWISE,SET JET FIRING TIME TO ZERO AND CONTINUE.
065579,000055: # IF STATE IS ABOVE LINE E + 4X EDOT > +1.4 DEG AND EDOT IS GREATER THAN -1.30 DEG/SEC, SET JET TIME NEGATIVE
065580,000056: # AND CONTINUE. OTHERWISE,SET JET FIRING TIME TO ZERO AND CONTINUE.
065581,000057:
065582,000058: # 5. INHIBITION LOGIC
065583,000059:
065584,000060: # IF OLDSENSE IS NON-ZERO:
065585,000061: # A) RETURN IF JET TIME HAS SAME SIGN AS OLDSENSE
065586,000062: # B) SET INHIBITION COUNTER*AND RETURN IF JET TIME IS ZERO
065587,000063: # C) SET INHIBITION COUNTER,*SET JET TIME TO ZERO AND RETURN IF SIGN
065588,000064: # OF JET TIME IS OPPOSITE TO THAT OF OLDSENSE
065589,000065:
065590,000066: # IF OLDSENSE IS ZERO:
065591,000067: # A) RETURN IF INHIBITION COUNTER IS NOT POSITIVE
065592,000068: # B) SET JET TIME TO ZERO AND RETURN IF INHIBITION COUNTER IS POSITIVE
065593,000069: # *NOTE: INHIBITION COUNTERS CAN BE SET TO 4 OR 10 FOR THE P,AND UV AXES,
065594,000070: # RESPECTIVELY,IN SPSRCS. THEY ARE DECREMENTED BY ONE AT THE BEGINNING OF
![]() |
Page 1506 |
065596,000072: # EACH DAP PASS.
065597,000073:
065598,000074: # THE MINIMUM PULSE WIDTH OF THIS CONTROLLER IS DETERMINED BY THE REPETITION RATE AT WHICH THIS ROUTINE IS CALLED
065599,000075: # AND IS NOMINALLY 100 MS FOR ALL AXES IN DRIFTING FLIGHT. DURING POWERED FLIGHT THE MINIMUM IS 100 MS FOR THE
065600,000076: # P AXIS AND 200 MS FOR THE CONTROL OF THE U AND V AXES.
065601,000077:
065602,000078: # CALLING SEQUENCE:
065603,000079:
065604,000080: # INHINT
065605,000081: # TC IBNKCALL
065606,000082: # CADR SPSRCS
065607,000083:
065608,000084:
065609,000085: # EXIT:
065610,000086: # TC Q
065611,000087: # ALARM/ABORT MODE: NONE
065612,000088:
065613,000089: # SUBROUTINES CALLED: NONE
065614,000090:
065615,000091: # INPUT: E,EDOT
065616,000092: # TJP, TJV, TJU TJ MUST NOT BE NEGATIVE ZERO
065617,000093:
065618,000094: # OUTPUT: TJP, TJV, TJU
065619,000095:
065620,000096:
065621,000097: 21,3606 BANK 21
065622,000098: 21,2000 SETLOC DAPS4
065623,000099: 21,2000 BANK
065624,000100:
065625,000101: 21,3606 COUNT* $$/DAPBU
065626,000102:
065627,000103: 21,3606 E6,1525 EBANK= TJU
065628,000104: 21,3606 00632 RATELIM2 OCT 00632 # 1.125 DEG/SEC
065629,000105: 21,3607 34727 POSTHRST CA HALF
065630,000106:
065631,000107: 21,3610 51505 NDX AXISCTR
065632,000108: 21,3611 55525 TS TJU
065633,000109: 21,3612 11744 CCS OLDSENSE
065634,000110: 21,3613 13633 TCF POSCHECK # JETS FIRING POSITIVELY
065635,000111: 21,3614 13636 TCF CTRCHECK # JETS OFF. CHECK INHIBITION CTR
065636,000112: 21,3615 51505 NEGCHECK INDEX AXISCTR # JETS FIRING NEGATIVELY
065637,000113: 21,3616 41525 CS TJU
065638,000114: 21,3617 10000 CCS A
065639,000115: 21,3620 00002 TC Q # RETURN
065640,000116: 21,3621 13623 TCF +2
065641,000117: 21,3622 13623 TCF +1 # JETS COMMANDED OFF.SET CTR AND RETURN
065642,000118: 21,3623 51505 SETCTR INDEX AXISCTR # JET FIRING REVERSAL COMMANDED. SET CTR,
065643,000119: 21,3624 33645 CA UTIME # SET JET TIME TO ZERO,AND RETURN
![]() |
Page 1507 |
065645,000121: 21,3625 51505 INDEX AXISCTR
065646,000122: 21,3626 55767 TS UJETCTR
065647,000123: 21,3627 34746 ZAPTJ CA ZERO
065648,000124: 21,3630 51505 INDEX AXISCTR
065649,000125: 21,3631 55525 TS TJU
065650,000126: 21,3632 00002 TC Q
065651,000127: 21,3633 51505 POSCHECK INDEX AXISCTR
065652,000128: 21,3634 31525 CA TJU
065653,000129: 21,3635 13617 TCF NEGCHECK +2
065654,000130: 21,3636 51505 CTRCHECK INDEX AXISCTR # CHECK JET INHIBITION COUNTER
065655,000131: 21,3637 11767 CCS UJETCTR
065656,000132: 21,3640 13642 TCF +2
065657,000133: 21,3641 00002 TC Q # CTR IS NOT POSITIVE. RETURN
065658,000134: 21,3642 13627 TCF ZAPTJ # CTR IS POSITIVE.INHIBIT FIRINGS
065659,000135: 21,3643 00002 TC Q # CTR IS NOT POSITIVE.RETURN
065660,000136: 21,3644 00004 OCT 00004
065661,000137: 21,3645 00012 UTIME OCT 00012
065662,000138: 21,3646 00012 OCT 00012
065663,000139: 21,3647 44744 NEGFIRE CS ONE # JETS FIRING NEGATIVELY
065664,000140: 21,3650 55744 TS OLDSENSE
065665,000141: 21,3651 31427 CA EDOT
065666,000142: 21,3652 13656 TCF +4
065667,000143: 21,3653 34744 PLUSFIRE CA ONE
065668,000144: 21,3654 55744 TS OLDSENSE
065669,000145: 21,3655 41427 CS EDOT # RATE DEAD BAND TEST
065670,000146: 21,3656 22000 LXCH A
065671,000147: 21,3657 40111 CS DAPBOOLS # IF DRIFTBIT = 1, USE ZERO TARGET RATE
![]() |
A line is drawn immediately to the right of DRIFTBIT below. |
065673,000149: 21,3660 74735 MASK DRIFTBIT # IF DRIFTBIT = 0, USE 0.10 RATE TARGET
065674,000150: 21,3661 10000 CCS A
065675,000151: 21,3662 34760 CA RATEDB1
065676,000152: 21,3663 60001 AD L
065677,000153: 21,3664 00006 EXTEND
065678,000154: 21,3665 63675 BZMF SPSSTART
065679,000155: 21,3666 13612 TCF POSTHRST +3
065680,000156:
065681,000157: 21,3667 51505 SPSRCS INDEX AXISCTR # JET SENSE TEST
065682,000158: 21,3670 11525 CCS TJU
065683,000159: 21,3671 13653 TCF PLUSFIRE # JETS FIRING POSITIVELY
065684,000160: 21,3672 13674 TCF +2
065685,000161: 21,3673 13647 TCF NEGFIRE # JETS FIRING NEGATIVELY
065686,000162: 21,3674 55744 TS OLDSENSE # JETS OFF
065687,000163: 21,3675 31427 SPSSTART CA EDOT # OUTER RATE LIMIT TEST
065688,000164: 21,3676 00006 EXTEND
065689,000165: 21,3677 74757 MP RATELIM1
065690,000166: 21,3700 10000 CCS A
065691,000167: 21,3701 13720 TCF NEGTHRST # OUTER RATE LIMIT EXCEEDED
065692,000168: 21,3702 13704 TCF +2
065693,000169: 21,3703 13607 TCF POSTHRST # OUTER RATE LIMIT EXCEEDED
065694,000170: 21,3704 31427 CA EDOT # COAST ZONE TEST
065695,000171: 21,3705 61751 AD E
![]() |
Page 1508 |
065697,000173: 21,3706 00006 EXTEND
065698,000174: 21,3707 71411 MP DKDB # PAD LOADED DEADBAND. FRESHSTART: 1.4 DEG
065699,000175: 21,3710 00006 EXTEND
065700,000176: 21,3711 13726 BZF TJZERO
065701,000177:
065702,000178: 21,3712 00006 EXTEND
065703,000179: 21,3713 63722 BZMF +7
065704,000180: 21,3714 31427 CA EDOT
065705,000181: 21,3715 63606 AD RATELIM2
065706,000182: 21,3716 00006 EXTEND
065707,000183: 21,3717 63726 BZMF TJZERO
065708,000184: 21,3720 44727 NEGTHRST CS HALF
065709,000185: 21,3721 13610 TCF POSTHRST +1
065710,000186: 21,3722 43606 +7 CS RATELIM2
065711,000187: 21,3723 61427 AD EDOT
065712,000188: 21,3724 00006 EXTEND
065713,000189: 21,3725 63607 BZMF POSTHRST
065714,000190: 21,3726 34746 TJZERO CA ZERO
065715,000191: 21,3727 13610 TCF POSTHRST +1
065716,000192:
065717,000193:
065718,000194: 21,3730 4757 RATELIM1 = CALLCODE # = 00032, CORRESPONDING TO 1.73 DEG/SEC
065719,000195: 21,3730 4760 RATEDB1 = TBUILDFX # = 00045, CORRESPONDS TO 0.101 DEG/SEC
End of include-file SPS_BACK-UP_RCS_CONTROL.agc. Parent file is MAIN.agc