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. |
008537,000002: ## Copyright: Public domain.
008538,000003: ## Filename: RCS_FAILURE_MONITOR.agc
008539,000004: ## Purpose: A section of Luminary revision 210.
008540,000005: ## It is part of the source code for the Lunar Module's (LM)
008541,000006: ## Apollo Guidance Computer (AGC) for Apollo 15-17.
008542,000007: ## This file is intended to be a faithful transcription, except
008543,000008: ## that the code format has been changed to conform to the
008544,000009: ## requirements of the yaYUL assembler rather than the
008545,000010: ## original YUL assembler.
008546,000011: ## Reference: pp. 201-203
008547,000012: ## Assembler: yaYUL
008548,000013: ## Contact: Ron Burkey <info@sandroid.org>.
008549,000014: ## Website: www.ibiblio.org/apollo/index.html
008550,000015: ## Mod history: 2016-11-17 JL Created from Luminary131 version.
008551,000016: ## 2016-11-21 HG Transcribed
008552,000017: ## 2016-12-23 RSB Proofed comment text with octopus/ProoferComments
008553,000018: ## and fixed all errors found.
008554,000019:
![]() |
Page 201 |
008556,000021: # PROGRAM DESCRIPTION
008557,000022:
008558,000023: # AUTHOR: J S MILLER
008559,000024:
008560,000025: # MODIFIED 6 MARCH 1968 BY P S WEISSMAN TO SET UP JOB FOR 1/ACCS WHEN THE MASKS ARE CHANGED.
008561,000026:
008562,000027: # THIS ROUTINE IS ATTACHED TO T4RUPT, AND IS ENTERED EVERY 480 MS. ITS FUNCTION IS TO EXAMINE THE LOW 8 BITS
008563,000028: # OF CHANNEL 32 TO SEE IF ANY ISOLATION-VALVE CLOSURE BITS HAVE APPEARED OR DISAPPEARED (THE CREW IS WARNED OF JET
008564,000029: # FAILURES BY LAMPS LIT BY THE GRUMMAN FAILURE-DETECTION CIRCUITRY; THEY MAY RESPOND BY OPERATING SWITCHES WHICH
008565,000030: # ISOLATE PAIRS OF JETS FROM THE PROPELLANT TANKS AND SET BITS IN CHANNEL 32). IN THE EVENT THAT CHANNEL 32 BITS
008566,000031: # DIFFER FROM 'PVALVEST', THE RECORD OF ACTIONS TAKEN BY THIS ROUTINE, THE APPROPRIATE BITS IN 'CH5MASK' &
008567,000032: # 'CH6MASK', USED BY THE DAP JET-SELECTION LOGIC, ARE UPDATED, AS IS 'PVALVEST'. TO SPEED UP & SHORTEN THE
008568,000033: # ROUTINE, NO MORE THAN ONE CHANGE IS ACCEPTED PER ENTRY. THE HIGHEST-NUMBERED BIT IN CHANNEL 32 WHICH REQUIRES
008569,000034: # ACTION IS THE ONE PROCESSED.
008570,000035:
008571,000036: # THE CODING IN THE FAILURE MONITOR HAS BEEN WRITTEN SO AS TO HAVE ALMOST COMPLETE RESTART PROTECTION. FOR
008572,000037: # EXAMPLE, NO ASSUMPTION IS MADE WHEN SETTING A 'CH5MASK' BIT TO 1 THAT THE PREVIOUS STATE IS 0, ALTHOUGH IT OF
008573,000038: # COURSE SHOULD BE. ONE CASE WHICH MAY BE SEEN TO EVADE PROTECTION IS THE OCCURRENCE OF A RESTART AFTER UPDATING
008574,000039: # ONE OR BOTH DAP MASK-WORDS BUT BEFORE UPDATING 'PVALVEST', COUPLED WITH A CHANGE IN THE VALVE-BIT BACK TO ITS
008575,000040: # FORMER STATE. THE CONSEQUENCE OF THIS IS THAT THE NEXT ENTRY WOULD NOT SEE THE CHANGE INCOMPLETELY INCORP-
008576,000041: # ORATED BY THE LAST PASS (BECAUSE IT WENT AWAY AT JUST THE RIGHT TIME), BUT THE DAP MASK-WORDS WILL BE INCORRECT.
008577,000042: # THIS COMBINATION OF EVENTS SEEMS QUITE REMOTE, BUT NOT IMPOSSIBLE UNLESS THE CREW OPERATES THE SWITCHES AT HALF-
008578,000043: # SECOND INTERVALS OR LONGER. IN ANY EVENT, A DISAGREEMENT BETWEEN REALITY AND THE DAP MASKS WILL BE CURED IF
008579,000044: # THE MISINTERPRETED SWITCH IS REVERSED AND THEN RESTORED TO ITS CORRECT POSITION (SLOWLY).
008580,000045:
008581,000046: # CALLING SEQUENCE:
008582,000047:
008583,000048: # TCF RCSMONIT (IN INTERRUPT MODE, EVERY 480 MS.)
008584,000049:
008585,000050: # EXIT: TCF RCSMONEX (ALL PATHS EXIT VIA SUCH AN INSTRUCTION)
008586,000051: 06,3213 5272 RCSMONEX EQUALS RESUME
008587,000052:
008588,000053: # ERASABLE INITIALIZATION REQUIRED:
008589,000054:
008590,000055: # VIA FRESH START: PVALVEST = +0 (ALL JETS ENABLED)
008591,000056: # CH5MASK,CH6MASK = +0 (ALL JETS OK)
008592,000057:
008593,000058: # OUTPUT: CH5MASK & CH6MASK UPDATED (1'S WHERE JETS NOT TO BE USED, IN CHANNEL 5 & 6 FORMAT)
008594,000059: # PVALTEST UPDATED (1'S WHEN VALVE CLOSURES HAVE BEEN TRANSLATED INTO CH5MASK & CH6MASK; CHAN 32 FORMAT)
008595,000060: # JOB TO DO 1/ACCS.
008596,000061:
008597,000062: # DEBRIS: A, L, Q AND DEBRIS OF NOVAC.
008598,000063:
008599,000064: # SUBROUTINE CALLED: NOVAC.
008600,000065:
008601,000066: 06,3213 1257 EBANK= CH5MASK
008602,000067:
008603,000068: 23,2000 BANK 23
008604,000069: 06,2000 SETLOC RCSMONT
008605,000070: 06,2000 BANK
008606,000071:
![]() |
Page 202 |
008608,000073: 06,3213 COUNT* $$/T4RCS
008609,000074:
008610,000075: 06,3213 06,3213 RCSMONIT EQUALS RCSMON
008611,000076:
008612,000077: 06,3213 44746 RCSMON CS ZERO
008613,000078: 06,3214 00006 EXTEND
008614,000079: 06,3215 06032 RXOR CHAN32 # PICK UP + INVERT INVERTED CHANNEL 32.
008615,000080: 06,3216 74350 MASK LOW8 # KEEP JET-FAIL BITS ONLY.
008616,000081: 06,3217 54002 TS Q
008617,000082:
008618,000083: 06,3220 41273 CS PVALVEST # - -
008619,000084: 06,3221 70002 MASK Q # FORM PC + PC.
008620,000085: 06,3222 54001 TS L # (P = PREVIOUS ISOLATION VALVE STATE,
008621,000086: 06,3223 40002 CS Q # C = CURRENT VALVE STATE (CH 32)).
008622,000087: 06,3224 71273 MASK PVALVEST
008623,000088: 06,3225 26001 ADS L # RESULT NZ INDICATES ACTION REQUIRED.
008624,000089:
008625,000090: 06,3226 00006 EXTEND
008626,000091: 06,3227 15272 BZF RCSMONEX # QUIT IF NO ACTION REQUIRED.
008627,000092:
008628,000093: 06,3230 00006 EXTEND
008629,000094: 06,3231 74736 MP BIT7 # MOVE BITS 8 - 1 OF A TO 14 - 7 OF L.
008630,000095: 06,3232 56001 XCH L # ZERO TO L IN THE PROCESS.
008631,000096:
008632,000097: 06,3233 24001 -3 INCR L
008633,000098: 06,3234 60000 DOUBLE # BOUND TO GET OVERFLOW IN THIS LOOP,
008634,000099: 06,3235 54000 OVSK # SINCE WE ASSURED INITIAL NZ IN A.
008635,000100: 06,3236 13233 TCF -3
008636,000101:
008637,000102: 06,3237 50001 INDEX L
008638,000103: 06,3240 34734 CA BIT8 -1 # SAVE THE RELEVANT BIT (8 - 1).
008639,000104: 06,3241 54002 TS Q
008640,000105: 06,3242 71273 MASK PVALVEST # LOOK AT PREVIOUS VALVE STATE BIT.
008641,000106: 06,3243 10000 CCS A
008642,000107: 06,3244 13260 TCF VOPENED # THE VALVE HAS JUST BEEN OPENED.
008643,000108:
008644,000109: 06,3245 41257 CS CH5MASK # THE VALVE HAS JUST BEEN CLOSED.
008645,000110: 06,3246 50001 INDEX L
008646,000111: 06,3247 73277 MASK 5FAILTAB
008647,000112: 06,3250 27257 ADS CH5MASK # SET INHIBIT BIT FOR CHANNEL 5 JET.
008648,000113:
008649,000114: 06,3251 41260 CS CH6MASK
008650,000115: 06,3252 50001 INDEX L
008651,000116: 06,3253 73307 MASK 6FAILTAB
008652,000117: 06,3254 27260 ADS CH6MASK # SET INGIBIT BIT FOR CHANNEL 6 JET.
008653,000118:
008654,000119: 06,3255 30002 CA Q
008655,000120: 06,3256 27273 ADS PVALVEST # RECORD ACTION TAKEN.
008656,000121:
008657,000122: 06,3257 13273 TCF 1/ACCFIX # SET UP 1/ACCJOB AND EXIT.
008658,000123:
![]() |
Page 203 |
008660,000125: 06,3260 50001 VOPENED INDEX L # A VALVE HAS JUST BEEN OPENED.
008661,000126: 06,3261 43277 CS 5FAILTAB
008662,000127: 06,3262 71257 MASK CH5MASK
008663,000128: 06,3263 55257 TS CH5MASK # REMOVE INHIBIT BIT FOR CHANNEL 5 JET.
008664,000129:
008665,000130: 06,3264 50001 INDEX L
008666,000131: 06,3265 43307 CS 6FAILTAB
008667,000132: 06,3266 71260 MASK CH6MASK
008668,000133: 06,3267 55260 TS CH6MASK # REMOVE INHIBIT BIT FOR CHANNEL 6 JET.
008669,000134:
008670,000135: 06,3270 40002 CS Q
008671,000136: 06,3271 71273 MASK PVALVEST
008672,000137: 06,3272 55273 TS PVALVEST # RECORD ACTION TAKEN.
008673,000138:
008674,000139: 06,3273 37736 1/ACCFIX CAF PRIO27 # SET UP 1/ACCS SO THAT THE SWITCH CURVES
008675,000140: 06,3274 05063 TC NOVAC # FOR TJETLAW CAN BE MODIFIED IF CH5MASK
008676,000141: 06,3275 E6,1536 EBANK= AOSQ # HAS BEEN ALTERED.
008677,000142: 06,3275 03603 42106 2CADR 1/ACCJOB
008678,000143:
008679,000144: 06,3277 15272 TCF RCSMONEX # EXIT.
008680,000145:
008681,000146: 06,3300 5FAILTAB EQUALS -1 # CH 5 JET BIT CORRESPONDING TO CH 32 BIT:
008682,000147: 06,3300 00040 OCT 00040 # 8
008683,000148: 06,3301 00020 OCT 00020 # 7
008684,000149: 06,3302 00100 OCT 00100 # 6
008685,000150: 06,3303 00200 OCT 00200 # 5
008686,000151: 06,3304 00010 OCT 00010 # 4
008687,000152: 06,3305 00001 OCT 00001 # 3
008688,000153: 06,3306 00004 OCT 00004 # 2
008689,000154: 06,3307 00002 OCT 00002 # 1
008690,000155:
008691,000156: 06,3310 6FAILTAB EQUALS -1 # CH 6 JET BIT CORRESPONDING TO CH 32 BIT:
008692,000157: 06,3310 00010 OCT 00010 # 8
008693,000158: 06,3311 00020 OCT 00020 # 7
008694,000159: 06,3312 00004 OCT 00004 # 6
008695,000160: 06,3313 00200 OCT 00200 # 5
008696,000161: 06,3314 00001 OCT 00001 # 4
008697,000162: 06,3315 00002 OCT 00002 # 3
008698,000163: 06,3316 00040 OCT 00040 # 2
008699,000164: 06,3317 00100 OCT 00100 # 1
End of include-file RCS_FAILURE_MONITOR.agc. Parent file is MAIN.agc