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.

059230,000002:                                                                                                  ## Copyright:   Public domain.
059231,000003:                                                                                                  ## Filename:    SERVICE_ROUTINES.agc
059232,000004:                                                                                                  ## Purpose:     A section of Luminary revision 210.
059233,000005:                                                                                                  ##              It is part of the source code for the Lunar Module's (LM)
059234,000006:                                                                                                  ##              Apollo Guidance Computer (AGC) for Apollo 15-17.
059235,000007:                                                                                                  ##              This file is intended to be a faithful transcription, except
059236,000008:                                                                                                  ##              that the code format has been changed to conform to the
059237,000009:                                                                                                  ##              requirements of the yaYUL assembler rather than the
059238,000010:                                                                                                  ##              original YUL assembler.
059239,000011:                                                                                                  ## Reference:   pp. 1371-1377
059240,000012:                                                                                                  ## Assembler:   yaYUL
059241,000013:                                                                                                  ## Contact:     Ron Burkey <info@sandroid.org>.
059242,000014:                                                                                                  ## Website:     www.ibiblio.org/apollo/index.html
059243,000015:                                                                                                  ## Mod history: 2016-11-17 JL   Created from Luminary131 version.
059244,000016:                                                                                                  ##              2016-11-29 TB   Transcribed
059245,000017:                                                                                                  ##              2016-12-26 RSB  Comment-text proofed using ProoferComments
059246,000018:                                                                                                  ##                              and corrected errors found.
059247,000019: 

Page 1371

059249,000021: 10,3554                                           BANK     10                                    
059250,000022: 10,2000                                           SETLOC   DISPLAYS                              
059251,000023: 10,2000                                           BANK                                           
059252,000024: 10,3554                                           COUNT*   $$/DSPLA                              
059253,000025: 
059254,000026: 10,3554           00004        UPENT2             INHINT                                         
059255,000027: 10,3555           75652                           MASK     OCT77770                              
059256,000028: 10,3556           54001                           TS       L                                     
059257,000029: 10,3557           40100                           CS       FLAGWRD4                              
059258,000030: 10,3560           70001                           MASK     L                                     
059259,000031: 10,3561           26100                           ADS      FLAGWRD4                              
059260,000032: 10,3562           00003        JOIN               RELINT                                         
059261,000033: 10,3563           16760                           TCF      Q+1                                   
059262,000034: 
059263,000035: 10,3564           00004        DOWNENT2           INHINT                                         
059264,000036: 10,3565           75652                           MASK     OCT77770                              
059265,000037: 10,3566           40000                           COM                                            
059266,000038: 10,3567           70100                           MASK     FLAGWRD4                              
059267,000039: 10,3570           54100                           TS       FLAGWRD4                              
059268,000040: 10,3571           13562                           TCF      JOIN                                  
059269,000041: 
059270,000042: 10,3572     4750               OCT7               EQUALS   SEVEN                                 
059271,000043: 

Page 1372

059273,000045:                                                                                                  #  UPFLAG AND DOWNFLAG ARE ENTIRELY GENERAL FLAG SETTING AND CLEARING SUBROUTINES.  USING THEM, WHETHER OR
059274,000046:                                                                                                  #  NOT IN INTERRUPT, ONE MAY SET OR CLEAR ANY SINGLE, NAMED BIT IN ANY ERASABLE REGISTER, SUBJECT OF COURSE TO
059275,000047:                                                                                                  #  EBANK SETTING.  A "NAMED" BIT, AS THE WORD IS USED HERE, IS ANY BIT WITH A NAME FORMALLY ASSIGNED BY THE YUL
059276,000048:                                                                                                  #  ASSEMBLER.
059277,000049: 
059278,000050:                                                                                                  #  AT PRESENT THE ONLY NAMED BITS ARE THOSE IN THE FLAGWORDS.  ASSEMBLER CHANGES WILL MAKE IT POSSIBLE TO
059279,000051:                                                                                                  #  NAME ANY BIT IN ERASABLE MEMORY.
059280,000052: 
059281,000053:                                                                                                  #  CALLING SEQUENCES ARE AS FOLLOWS:-
059282,000054:                                                                                                  #                TC      UPFLAG                  TC      DOWNFLAG
059283,000055:                                                                                                  #                ADRES   NAME OF FLAG            ADRES   NAME OF FLAG
059284,000056: 
059285,000057:                                                                                                  #  RETURN IS TO THE LOCATION FOLLOWING THE "ADRES" ABOUT .58 MS AFTER THE "TC".
059286,000058: 
059287,000059:                                                                                                  #  UPON RETURN A CONTAINS THE CURRENT FLAGWRD SETTING.
059288,000060: 
059289,000061:    5506                                           BLOCK    02                                    
059290,000062:    4000                                           SETLOC   FFTAG1                                
059291,000063:    4000                                           BANK                                           
059292,000064:    5506                                           COUNT*   $$/FLAG                               
059293,000065: 
059294,000066:    5506           30002        UPFLAG             CA       Q                                     
059295,000067:    5507           05524                           TC       DEBIT                                 
059296,000068:    5510           40000                           COM                                            #  +(15 - BIT)
059297,000069:    5511           00006                           EXTEND                                         
059298,000070:    5512           04001                           ROR      LCHAN                                 #  SET BIT
059299,000071:    5513           50061        COMFLAG            INDEX    ITEMP1                                
059300,000072:    5514           54074                           TS       FLAGWRD0                              
059301,000073:    5515           22063                           LXCH     ITEMP3                                
059302,000074:    5516           00003                           RELINT                                         
059303,000075:    5517           00001                           TC       L                                     
059304,000076: 
059305,000077:    5520           30002        DOWNFLAG           CA       Q                                     
059306,000078:    5521           05524                           TC       DEBIT                                 
059307,000079:    5522           70001                           MASK     L                                     #  RESET BIT
059308,000080:    5523           15513                           TCF      COMFLAG                               
059309,000081: 
059310,000082:    5524           64744        DEBIT              AD       ONE                                   #  GET DE BITS
059311,000083:    5525           00004                           INHINT                                         
059312,000084:    5526           54063                           TS       ITEMP3                                
059313,000085:    5527           34753                           CA       LOW4                                  #  DEC15
059314,000086:    5530           54061                           TS       ITEMP1                                
059315,000087:    5531           50063                           INDEX    ITEMP3                                
059316,000088:    5532           27777                           CA       0          -1                         #  ADRES
059317,000089:    5533           54001                           TS       L                                     
059318,000090:    5534           34746                           CA       ZERO                                  
059319,000091: 

Page 1373

059321,000093:    5535           00006                           EXTEND                                         
059322,000094:    5536           10061                           DV       ITEMP1                                #  A = FLAGWRD, L = (15 - BIT)
059323,000095:    5537           52062                           DXCH     ITEMP1                                
059324,000096:    5540           50061                           INDEX    ITEMP1                                
059325,000097:    5541           30074                           CA       FLAGWRD0                              
059326,000098:    5542           54001                           TS       L                                     #  CURRENT STATE
059327,000099:    5543           50062                           INDEX    ITEMP2                                
059328,000100:    5544           44726                           CS       BIT15                                 #  -(15 - BIT)
059329,000101:    5545           00002                           TC       Q                                     
059330,000102: 

Page 1374

059332,000104:                                                                                                  #  DELAYJOB- A GENERAL ROUTINE TO DELAY A JOB A SPECIFIC AMOUNT OF TIME BEFORE PICKING UP AGAIN.
059333,000105: 
059334,000106:                                                                                                  #  ENTRANCE REQUIREMENTS...
059335,000107:                                                                                                  #                CAF     DT              DELAY JOB FOR DT CENTISECS
059336,000108:                                                                                                  #                TC      BANKCALL
059337,000109:                                                                                                  #                CADR    DELAYJOB
059338,000110: 
059339,000111: 06,3776                                           BANK     06                                    
059340,000112: 00,2000                                           SETLOC   DLAYJOB                               
059341,000113: 00,2000                                           BANK                                           
059342,000114: 
059343,000115:                                                                                                  #  THIS MUST REMAIN IN BANK 0 *****************************************
059344,000116: 
059345,000117: 00,3735                                           COUNT*   $$/DELAY                              
059346,000118: 00,3735           34771        2SECDELY           CAF      2SECS                                 
059347,000119: 00,3736           00004        DELAYJOB           INHINT                                         
059348,000120: 00,3737           54002                           TS       Q                                     #  STORE DELAY DT IN Q FOR DLY -1 IN
059349,000121: 
059350,000122: 00,3740           34743                           CAF      DELAYNUM                              #  WAITLIST
059351,000123: 00,3741           54070        DELLOOP            TS       RUPTREG1                              
059352,000124: 00,3742           50000                           INDEX    A                                     
059353,000125: 00,3743           31323                           CA       DELAYLOC                              #  IS THIS DELAYLOC AVAILABLE
059354,000126: 00,3744           00006                           EXTEND                                         
059355,000127: 00,3745           13753                           BZF      OK2DELAY                              #  YES
059356,000128: 
059357,000129: 00,3746           10070                           CCS      RUPTREG1                              #  NO, TRY NEXT DELAYLOC
059358,000130: 00,3747           13741                           TCF      DELLOOP                               
059359,000131: 
059360,000132: 00,3750           52134                           DXCH     BUF2                                  
059361,000133: 00,3751           05712                           TC       BAILOUT1                              #  NO AVAILABLE LOCS.
059362,000134: 00,3752           31104                           OCT      31104                                 
059363,000135: 
059364,000136: 00,3753           33773        OK2DELAY           CA       TCSLEEP                               #  SET WAITLIST IMMEDIATE RETURN
059365,000137: 00,3754           54061                           TS       WAITEXIT                              
059366,000138: 
059367,000139: 00,3755           30004                           CA       FBANK                                 
059368,000140: 00,3756           60070                           AD       RUPTREG1                              #  STORE BBANK FOR TASK CALL
059369,000141: 00,3757           54001                           TS       L                                     
059370,000142: 
059371,000143: 00,3760           33774                           CAF      WAKECAD                               #  STORE CADR FOR TASK CALL
059372,000144: 00,3761           15213                           TCF      DLY2       -1                         #  DLY IS IN WAITLIST ROUTINE
059373,000145: 
059374,000146: 00,3762           04636        TCGETCAD           TC       MAKECADR                              #  GET CALLERS FCADR
059375,000147: 
059376,000148: 00,3763           50070                           INDEX    RUPTREG1                              
059377,000149: 00,3764           55323                           TS       DELAYLOC                              #  SAVE DELAY CADRS
059378,000150: 
059379,000151: 00,3765           05124                           TC       JOBSLEEP                              
059380,000152: 
059381,000153: 00,3766           34746        WAKER              CAF      ZERO                                  
059382,000154: 00,3767           50006                           INDEX    BBANK                                 
059383,000155: 

Page 1375

059385,000157: 00,3770           57323                           XCH      DELAYLOC                              #  MAKE DELAYLOC AVAILABLE
059386,000158: 00,3771           05130                           TC       JOBWAKE                               
059387,000159: 
059388,000160: 00,3772           05263                           TC       TASKOVER                              
059389,000161: 
059390,000162: 00,3773           03760        TCSLEEP            GENADR   TCGETCAD   -2                         
059391,000163: 00,3774           03766        WAKECAD            GENADR   WAKER                                 
059392,000164: 

Page 1376

059394,000166:                                                                                                  #  GENTRAN, A BLOCK TRANSFER ROUTINE.
059395,000167:                                                                                                  #  WRITTEN BY D. EYLES
059396,000168:                                                                                                  #  MOD 1 BY KERNAN                               UTILITYM REV 17 11/18/67
059397,000169:                                                                                                  #  MOD 2 BY SCHULENBERG (REMOVE RELINT)  SKIPPER REV 4 2/28/68
059398,000170: 
059399,000171:                                                                                                  #  THIS ROUTINE IS USEFULL FOR TRANSFERING N CONSECUTIVE ERASABLE OR FIXED QUANTITIES TO SOME OTHER N
059400,000172:                                                                                                  #  CONSECUTIVE ERASABLE LOCATIONS.  IF BOTH BLOCKS OF DATA ARE IN SWITCHABLE EBANKS, THEY MUST BE IN THE SAME ONE.
059401,000173: 
059402,000174:                                                                                                  #  GENTRAN IS CALLABLE IN A JOB AS WELL AS A RUPT.  THE CALLING SEQUENCE IS:
059403,000175:                                                                                                  #        I       CA      N-1             # OF QUANTITIES MINUS ONE.
059404,000176:                                                                                                  #        I +1    TC      GENTRAN         IN FIXED-FIXED.
059405,000177:                                                                                                  #        I +2    ADRES   L               STARTING ADRES OF DATA TO BE MOVED.
059406,000178:                                                                                                  #        I +3    ADRES   M               STARTING ADRES OF DUPLICATION BLOCK.
059407,000179:                                                                                                  #        I +4                            RETURNS HERE.
059408,000180: 
059409,000181:                                                                                                  #  GENTRAN TAKES 25 MCT'S (300 MICROSECONDS) PER ITEM + 5 MCT'S (60 MICS) FOR ENTERING AND EXITING.
059410,000182:                                                                                                  #  A, L AND ITEMP1 ARE NOT PRESERVED.
059411,000183: 
059412,000184:    5546                                           BLOCK    02                                    
059413,000185:    4000                                           SETLOC   FFTAG4                                
059414,000186:    4000                                           BANK                                           
059415,000187: 
059416,000188:    5546     0061                                  EBANK=   ITEMP1                                
059417,000189: 
059418,000190:    5546                                           COUNT*   $$/TRAN                               
059419,000191: 
059420,000192:    5546           00004        GENTRAN            INHINT                                         
059421,000193:    5547           54061                           TS       ITEMP1                                #  SAVE N-1.
059422,000194:    5550           50002                           INDEX    Q                                     #  C(Q) = ADRES L.
059423,000195:    5551           60000                           AD       0                                     #  ADRES (L + N - 1).
059424,000196:    5552           50000                           INDEX    A                                     
059425,000197:    5553           30000                           CA       0                                     #  C(ABOVE).
059426,000198:    5554           54001                           TS       L                                     #  SAVE DATA.
059427,000199:    5555           30061                           CA       ITEMP1                                
059428,000200:    5556           50002                           INDEX    Q                                     
059429,000201:    5557           60001                           AD       1                                     #  ADRES (M + N - 1).
059430,000202:    5560           50000                           INDEX    A                                     
059431,000203:    5561           22000                           LXCH     0                                     #  STUFF IT.
059432,000204:    5562           10061                           CCS      ITEMP1                                #  LOOP UNTIL N-1 = 0.
059433,000205:    5563           15547                           TCF      GENTRAN    +1                         
059434,000206:    5564           16762                           TCF      Q+2                                   #  RETURN TO CALLER.
059435,000207: 

Page 1377

059437,000209:                                                                                                  #  B5OFF         ZERO BIT 5 OF EXTVBACT, WHICH IS SET BY TESTXACT.
059438,000210:                                                                                                  #  MAY BE USED AS NEEDED BY ANY EXTENDED VERB WHICH HAS DONE TESTXACT
059439,000211: 
059440,000212:    5565                                           COUNT*   $$/EXTVB                              
059441,000213: 
059442,000214:    5565           44740        B5OFF              CS       BIT5                                  
059443,000215:    5566           71043                           MASK     EXTVBACT                              
059444,000216:    5567           55043                           TS       EXTVBACT                              
059445,000217:    5570           05146                           TC       ENDOFJOB                              
059446,000218: 
059447,000219: 
059448,000220: 

End of include-file SERVICE_ROUTINES.agc.  Parent file is MAIN.agc