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,1971
Note 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