Source Code

These source-code files are part of a reconstructed copy of Comanche 45, the second release, though not the final mission release, of the Apollo 10 Command Module (CM) Apollo Guidance Computer (AGC) software. Comanche 45 was preceded by Comanche 44 and followed by Comanche 45/2 (the flown release). The reconstruction is believed to be exactly accurate, but in the absence of an actual Apollo-era listing of Comanche 45, some explanation of the reconstruction process is needed to insure confidence in that accuracy.

The starting point was the source code of Comanche 44 (itself previously accurately reconstructed). Comanche 44 source code was then modified by incorporating changes known from contemporary documentation to have been made between revisions 44 and 45. The now-reconstructed Comanche 45 source code was verified by assembling it and checking that the assembled code had the expected known-correct memory-bank checksums. Note that page numbers in the reconstructed code tend to match those in the Comanche 55, the most-similar revision of Comanche for which we have access to an actual non-reconstructed hardcopy; the source code would likely have different page numbers in a contemporary Comanche 45 listing.

Annotations that were not present in the contemporary source code have been added to the reconstructed code to justify each change relative to Comanche 44. Here's a guide to the Apollo documentation referenced in those annotations:
There is also a detailed commentary about the reconstruction process.

Comments expected to have been present in the original source code are prefixed with a single '#' symbol, whereas comments added later are prefixed by "##" or "###". Report any errors noted by creating an issue report at the Virtual AGC Project's GitHub repository.

064068,000002:                                                                                                  ## Copyright:   Public domain.
064069,000003:                                                                                                  ## Filename:    RTB_OP_CODES.agc
064070,000004:                                                                                                  ## Purpose:     A section of Comanche revision 045.
064071,000005:                                                                                                  ##              It is part of the reconstructed source code for the
064072,000006:                                                                                                  ##              second release of the flight software for the Command
064073,000007:                                                                                                  ##              Module's (CM) Apollo Guidance Computer (AGC) for Apollo 10.
064074,000008:                                                                                                  ##              The code has been recreated from a copy of Comanche 055. It
064075,000009:                                                                                                  ##              has been adapted such that the resulting bugger words
064076,000010:                                                                                                  ##              exactly match those specified for Comanche 45 in NASA drawing
064077,000011:                                                                                                  ##              2021153D, which gives relatively high confidence that the
064078,000012:                                                                                                  ##              reconstruction is correct.
064079,000013:                                                                                                  ## Assembler:   yaYUL
064080,000014:                                                                                                  ## Contact:     Ron Burkey <info@sandroid.org>.
064081,000015:                                                                                                  ## Website:     www.ibiblio.org/apollo/index.html
064082,000016:                                                                                                  ## Mod history: 2020-12-06 MAS  Created from Comanche 44. Added a stub for the
064083,000017:                                                                                                  ##                              COM-4 anomaly fix.
064084,000018:                                                                                                  ##              2020-12-23 MAS  Implemented a fix for COM-4 that gives correct
064085,000019:                                                                                                  ##                              checksums, and renamed the function to the more
064086,000020:                                                                                                  ##                              mundane but more likely "S40.1A".
064087,000021: 

Page 1508

064089,000023: 22,3510                                           BANK     22                                    
064090,000024: 22,2000                                           SETLOC   RTBCODES                              
064091,000025: 22,2000                                           BANK                                           
064092,000026: 
064093,000027: 22,3510  E5,1713                                  EBANK=   XNB                                   
064094,000028: 22,3510                                           COUNT*   $$/RTB                                
064095,000029: 
064096,000030:                                                                                                  #  LOAD TIME2, TIME1 INTO MPAC:
064097,000031: 
064098,000032: 22,3510           00006        LOADTIME           EXTEND                                         
064099,000033: 22,3511           30025                           DCA      TIME2                                 
064100,000034: 22,3512           16024                           TCF      SLOAD2                                
064101,000035: 
064102,000036:                                                                                                  #  CONVERT THE SINGLE PRECISION 2'S COMPLEMENT NUMBER ARRIVING IN MPAC (SCALED IN HALF-REVOLUTIONS) TO A
064103,000037:                                                                                                  #  DP 1'S COMPLEMENT NUMBER SCALED IN REVOLUTIONS.
064104,000038: 
064105,000039: 22,3513           10154        CDULOGIC           CCS      MPAC                                  
064106,000040: 22,3514           35021                           CAF      ZERO                                  
064107,000041: 22,3515           13520                           TCF      +3                                    
064108,000042: 22,3516           13517                           NOOP                                           
064109,000043: 22,3517           45002                           CS       HALF                                  
064110,000044: 
064111,000045: 22,3520           54155                           TS       MPAC       +1                         
064112,000046: 22,3521           35021                           CAF      ZERO                                  
064113,000047: 22,3522           56154                           XCH      MPAC                                  
064114,000048: 22,3523           00006                           EXTEND                                         
064115,000049: 22,3524           75002                           MP       HALF                                  
064116,000050: 22,3525           20155                           DAS      MPAC                                  
064117,000051: 22,3526           16030                           TCF      DANZIG                                #  MODE IS ALREADY AT DOUBLE-PRECISION
064118,000052: 
064119,000053:                                                                                                  #  READ THE PIPS INTO MPAC WITHOUT CHANGING THEM:
064120,000054: 
064121,000055: 22,3527           00004        READPIPS           INHINT                                         
064122,000056: 22,3530           30037                           CA       PIPAX                                 
064123,000057: 22,3531           54154                           TS       MPAC                                  
064124,000058: 22,3532           30040                           CA       PIPAY                                 
064125,000059: 22,3533           54157                           TS       MPAC       +3                         
064126,000060: 22,3534           30041                           CA       PIPAZ                                 
064127,000061: 22,3535           00003                           RELINT                                         
064128,000062: 22,3536           54161                           TS       MPAC       +5                         
064129,000063: 
064130,000064: 22,3537           35021                           CAF      ZERO                                  
064131,000065: 22,3540           54155                           TS       MPAC       +1                         
064132,000066: 22,3541           54160                           TS       MPAC       +4                         
064133,000067: 22,3542           54162                           TS       MPAC       +6                         
064134,000068: 22,3543           16470        VECMODE            TCF      VMODE                                 
064135,000069: 
064136,000070:                                                                                                  #  FORCE TP SIGN AGREEMENT IN MPAC:
064137,000071: 
064138,000072: 22,3544           07226        SGNAGREE           TC       TPAGREE                               
064139,000073: 

Page 1509

064141,000075: 
064142,000076: 22,3545           16030                           TCF      DANZIG                                
064143,000077: 
064144,000078:                                                                                                  #  CONVERT THE DP 1'S COMPLEMENT ANGLE SCALED IN REVOLUTIONS TO A SINGLE PRECISION 2'S COMPLEMENT ANGLE
064145,000079:                                                                                                  #  SCALED IN HALF-REVOLUTIONS.
064146,000080: 
064147,000081: 22,3546           03576        1STO2S             TC       1TO2SUB                               
064148,000082: 22,3547           35021                           CAF      ZERO                                  
064149,000083: 22,3550           54155                           TS       MPAC       +1                         
064150,000084: 22,3551           16027                           TCF      NEWMODE                               
064151,000085: 
064152,000086:                                                                                                  #  DO 1STO2S ON A VECTOR OF ANGLES:
064153,000087: 
064154,000088: 22,3552           03576        V1STO2S            TC       1TO2SUB                               #  ANSWER ARRIVES IN A AND MPAC.
064155,000089: 
064156,000090: 22,3553           52162                           DXCH     MPAC       +5                         
064157,000091: 22,3554           52155                           DXCH     MPAC                                  
064158,000092: 22,3555           03576                           TC       1TO2SUB                               
064159,000093: 22,3556           54156                           TS       MPAC       +2                         
064160,000094: 
064161,000095: 22,3557           52160                           DXCH     MPAC       +3                         
064162,000096: 22,3560           52155                           DXCH     MPAC                                  
064163,000097: 22,3561           03576                           TC       1TO2SUB                               
064164,000098: 22,3562           54155                           TS       MPAC       +1                         
064165,000099: 
064166,000100: 22,3563           30161                           CA       MPAC       +5                         
064167,000101: 22,3564           54154                           TS       MPAC                                  
064168,000102: 
064169,000103: 22,3565           35017        TPMODE             CAF      ONE                                   #  MODE IS TP.
064170,000104: 22,3566           16027                           TCF      NEWMODE                               
064171,000105: 
064172,000106:                                                                                                  #  V1STO2S FOR 2 COMPONENT VECTOR. USED BY RR.
064173,000107: 
064174,000108: 22,3567           03576        2V1STO2S           TC       1TO2SUB                               
064175,000109: 22,3570           52160                           DXCH     MPAC       +3                         
064176,000110: 22,3571           52155                           DXCH     MPAC                                  
064177,000111: 22,3572           03576                           TC       1TO2SUB                               
064178,000112: 22,3573           54001                           TS       L                                     
064179,000113: 22,3574           30157                           CA       MPAC       +3                         
064180,000114: 22,3575           16024                           TCF      SLOAD2                                
064181,000115: 
064182,000116:                                                                                                  #  SUBROUTINE TO DO DOUBLING AND 1'S TO 2'S CONVERSION:
064183,000117: 
064184,000118: 22,3576           52155        1TO2SUB            DXCH     MPAC                                  #  FINAL MPAC +1 UNSPECIFIED.
064185,000119: 22,3577           20001                           DDOUBL                                         
064186,000120: 22,3600           10000                           CCS      A                                     
064187,000121: 22,3601           65017                           AD       ONE                                   
064188,000122: 22,3602           13604                           TCF      +2                                    
064189,000123: 22,3603           40000                           COM                                            #  THIS WAS REVERSE OF MSU.
064190,000124: 
064191,000125: 22,3604           54154                           TS       MPAC                                  #  AND SKIP ON OVERFLOW.

Page 1510

064193,000127: 22,3605           00002                           TC       Q                                     
064194,000128: 
064195,000129: 22,3606           50000                           INDEX    A                                     #  OVERFLOW UNCORRECT AND IN MSU.
064196,000130: 22,3607           35000                           CAF      LIMITS                                
064197,000131: 22,3610           26154                           ADS      MPAC                                  
064198,000132: 22,3611           00002                           TC       Q                                     
064199,000133: 

Page 1511

064201,000135:                                                                                                  #  SUBROUTINE TO INCREMENT CDUS
064202,000136: 
064203,000137: 22,3612           33625        INCRCDUS           CAF      LOCTHETA                              
064204,000138: 22,3613           54130                           TS       BUF                                   #  PLACE ADRES(THETA) IN BUF.
064205,000139: 22,3614           30154                           CAE      MPAC                                  #  INCREMENT IN 1S COMPL.
064206,000140: 22,3615           03626                           TC       CDUINC                                
064207,000141: 
064208,000142: 22,3616           24130                           INCR     BUF                                   
064209,000143: 22,3617           30157                           CAE      MPAC       +3                         
064210,000144: 22,3620           03626                           TC       CDUINC                                
064211,000145: 
064212,000146: 22,3621           24130                           INCR     BUF                                   
064213,000147: 22,3622           30161                           CAE      MPAC       +5                         
064214,000148: 22,3623           03626                           TC       CDUINC                                
064215,000149: 
064216,000150: 22,3624           13543                           TCF      VECMODE                               
064217,000151: 
064218,000152: 22,3625           01155        LOCTHETA           ADRES    THETAD                                
064219,000153: 
064220,000154:                                                                                                  #  THE FOLLOWING ROUTINE INCREMENTS IN 2S COMPLEMENT THE REGISTER WHOSE ADDRESS IS IN BUF BY THE 1S COMPL.
064221,000155:                                                                                                  #  QUANTITY FOUND IN TEM2.  THIS MAY BE USED TO INCREMENT DESIRED IMU AND OPTICS CDU ANGLES OR ANY OTHER 2S COMPL.
064222,000156:                                                                                                  #  (+0 UNEQUAL TO -0) QUANTITY.  MAY BE CALLED BY BANKCALL/SWCALL.
064223,000157: 
064224,000158: 22,3626           54142        CDUINC             TS       TEM2                                  #  1S COMPL. QUANT. ARRIVES IN ACC.  STORE IT
064225,000159: 22,3627           50130                           INDEX    BUF                                   
064226,000160: 22,3630           10000                           CCS      0                                     #  CHANGE 2S COMPL. ANGLE (IN BUF) INTO 1S
064227,000161: 22,3631           65017                           AD       ONE                                   
064228,000162: 22,3632           13636                           TCF      +4                                    
064229,000163: 22,3633           65017                           AD       ONE                                   
064230,000164: 22,3634           65017                           AD       ONE                                   #  OVERFLOW HERE IF 2S COMPL. IS 180 DEG.
064231,000165: 22,3635           40000                           COM                                            
064232,000166: 
064233,000167: 22,3636           60142                           AD       TEM2                                  #  SULT MOVES FROM 2ND TO 3D QUAD. (OR BACK)
064234,000168: 22,3637           10000                           CCS      A                                     #  BACK TO 2S COMPL.
064235,000169: 22,3640           65017                           AD       ONE                                   
064236,000170: 22,3641           13643                           TCF      +2                                    
064237,000171: 22,3642           40000                           COM                                            
064238,000172: 22,3643           54142                           TS       TEM2                                  #  STORE 14BIT QUANTITY WITH PRESENT SIGN
064239,000173: 22,3644           13650                           TCF      +4                                    
064240,000174: 22,3645           50000                           INDEX    A                                     #  SIGN.
064241,000175: 22,3646           35000                           CAF      LIMITS                                #  FIX IT, BY ADDING IN 37777 OR 40000
064242,000176: 22,3647           60142                           AD       TEM2                                  
064243,000177: 
064244,000178: 22,3650           50130                           INDEX    BUF                                   
064245,000179: 22,3651           54000                           TS       0                                     #  STORE NEW ANGLE IN 2S COMPLEMENT.
064246,000180: 22,3652           00002                           TC       Q                                     
064247,000181: 

Page 1512

064249,000183:                                                                                                  #  RTB TO TORQUE GYROS, EXCEPT FOR THE CALL TO IMUSTALL.  ECADR OF COMMANDS ARRIVES IN X1.
064250,000184: 
064251,000185: 22,3653           50120        PULSEIMU           INDEX    FIXLOC                                #  ADDRESS OF GYRO COMMANDS SHOULD BE IN X1
064252,000186: 22,3654           30046                           CA       X1                                    
064253,000187: 22,3655           04662                           TC       BANKCALL                              
064254,000188: 22,3656           17206                           CADR     IMUPULSE                              
064255,000189: 22,3657           16030                           TCF      DANZIG                                
064256,000190: 

Page 1513

064258,000192:                                                                                                  #  EACH ROUTINE TAKES A 3X3 MATRIX STORED IN DOUBLE PRECISION IN A FIXED AREA OF ERASABLE MEMORY AND REPLACES IT
064259,000193:                                                                                                  #  WITH THE TRANSPOSE MATRIX.  TRANSP1 USES LOCATIONS XNB+0,+1 THROUGH XNB+16D, 17D AND TRANSP2 USES LOCATIONS
064260,000194:                                                                                                  #  XNB1+0,+1 THROUGH XNB1+16D, 17D.  EACH MATRIX IS STORED BY ROWS.
064261,000195: 
064262,000196: 22,3660           02713        XNBEB              ECADR    XNB                                   
064263,000197: 22,3661           02554        XNB1EB             ECADR    XNB1                                  
064264,000198: 
064265,000199: 22,3662  E5,1713                                  EBANK=   XNB                                   
064266,000200: 
064267,000201: 22,3662           33660        TRANSP1            CAF      XNBEB                                 
064268,000202: 22,3663           54003                           TS       EBANK                                 
064269,000203: 22,3664           53716                           DXCH     XNB        +2                         
064270,000204: 22,3665           53722                           DXCH     XNB        +6                         
064271,000205: 22,3666           53716                           DXCH     XNB        +2                         
064272,000206: 
064273,000207: 22,3667           53720                           DXCH     XNB        +4                         
064274,000208: 22,3670           53730                           DXCH     XNB        +12D                       
064275,000209: 22,3671           53720                           DXCH     XNB        +4                         
064276,000210: 
064277,000211: 22,3672           53726                           DXCH     XNB        +10D                       
064278,000212: 22,3673           53732                           DXCH     XNB        +14D                       
064279,000213: 22,3674           53726                           DXCH     XNB        +10D                       
064280,000214: 22,3675           16030                           TCF      DANZIG                                
064281,000215: 22,3676  E5,1554                                  EBANK=   XNB1                                  
064282,000216: 
064283,000217: 22,3676           33661        TRANSP2            CAF      XNB1EB                                
064284,000218: 22,3677           54003                           TS       EBANK                                 
064285,000219: 22,3700           53557                           DXCH     XNB1       +2                         
064286,000220: 22,3701           53563                           DXCH     XNB1       +6                         
064287,000221: 22,3702           53557                           DXCH     XNB1       +2                         
064288,000222: 
064289,000223: 22,3703           53561                           DXCH     XNB1       +4                         
064290,000224: 22,3704           53571                           DXCH     XNB1       +12D                       
064291,000225: 22,3705           53561                           DXCH     XNB1       +4                         
064292,000226: 
064293,000227: 22,3706           53567                           DXCH     XNB1       +10D                       
064294,000228: 22,3707           53573                           DXCH     XNB1       +14D                       
064295,000229: 22,3710           53567                           DXCH     XNB1       +10D                       
064296,000230: 22,3711           16030                           TCF      DANZIG                                
064297,000231: 

Page 1514

064299,000233:                                                                                                  #  THE SUBROUTINE SIGNMPAC SETS C(MPAC, MPAC +1) TO SIGN(MPAC).
064300,000234:                                                                                                  #  FOR THIS, ONLY THE CONTENTS OF MPAC ARE EXAMINED.  ALSO +0 YIELDS POSMAX AND -0 YIELDS NEGMAX.
064301,000235: 
064302,000236:                                                                                                  #  ENTRY MAY BE BY EITHER OF THE FOLLOWING:
064303,000237:                                                                                                  #        1.      LIMIT THE SIZE OF MPAC ON INTERPRETIVE OVERFLOW:
064304,000238:                                                                                                  #                ENTRY:          BOVB
064305,000239:                                                                                                  #                                        SIGNMPAC
064306,000240:                                                                                                  #        2.      GENERATE IN MPAC THE SIGNUM FUNCTION OF MPAC:
064307,000241:                                                                                                  #                ENTRY:          RTB
064308,000242:                                                                                                  #                                        SIGNMPAC
064309,000243:                                                                                                  #  IN EITHER CASE, RETURN IS TO THE NEXT INTERPRETIVE INSTRUCTION IN THE CALLING SEQUENCE.
064310,000244: 
064311,000245: 22,3712           00006        SIGNMPAC           EXTEND                                         
064312,000246: 22,3713           34777                           DCA      DPOSMAX                               
064313,000247: 22,3714           52155                           DXCH     MPAC                                  
064314,000248: 22,3715           10000                           CCS      A                                     
064315,000249: 22,3716           35021        DPMODE             CAF      ZERO                                  #  SETS MPAC +2 TO ZERO IN THE PROCESS
064316,000250: 22,3717           16026                           TCF      SLOAD2     +2                         
064317,000251: 22,3720           13721                           TCF      +1                                    
064318,000252: 22,3721           00006                           EXTEND                                         
064319,000253: 22,3722           44777                           DCS      DPOSMAX                               
064320,000254: 22,3723           16024                           TCF      SLOAD2                                
064321,000255: 
064322,000256:                                                                                                  #  RTB OP CODE NORMUNIT IS LIKE INTERPRETIVE INSTRUCTION UNIT, EXCEPT THAT IT CAN BE DEPENDED ON NOT TO BLOW
064323,000257:                                                                                                  #  UP WHEN THE VECTOR BEING UNITIZED IS VERY SMALL -- IT WILL BLOW UP WHEN ALL COMPONENTS ARE ZERO.  IF NORMUNIT
064324,000258:                                                                                                  #  IS USED AND THE UPPER ORDER HALVES OF ALL COMPONENTS ARE ZERO, THE MAGNITUDE RETURNED IN 36D WILL BE TOO LARGE
064325,000259:                                                                                                  #  BY A FACTOR OF 2(13) AND THE SQUARED MAGNITUDE RETURNED AT 34D WILL BE TOO BIG BY A FACTOR OF 2(26).
064326,000260: 
064327,000261: 22,3724           35017        NORMUNX1           CAF      ONE                                   
064328,000262: 22,3725           13727                           TCF      NORMUNIT   +1                         
064329,000263: 22,3726           35021        NORMUNIT           CAF      ZERO                                  
064330,000264: 22,3727           60120                           AD       FIXLOC                                
064331,000265: 22,3730           54156                           TS       MPAC       +2                         
064332,000266: 22,3731           04662                           TC       BANKCALL                              #  GET SIGN AGREEMENT IN ALL COMPONENTS
064333,000267: 22,3732           01010                           CADR     VECAGREE                              
064334,000268: 22,3733           10154                           CCS      MPAC                                  
064335,000269: 22,3734           13770                           TCF      NOSHIFT                               
064336,000270: 22,3735           13737                           TCF      +2                                    
064337,000271: 22,3736           13770                           TCF      NOSHIFT                               
064338,000272: 22,3737           10157                           CCS      MPAC       +3                         
064339,000273: 22,3740           13770                           TCF      NOSHIFT                               
064340,000274: 22,3741           13743                           TCF      +2                                    
064341,000275: 22,3742           13770                           TCF      NOSHIFT                               
064342,000276: 22,3743           10161                           CCS      MPAC       +5                         
064343,000277: 22,3744           13770                           TCF      NOSHIFT                               
064344,000278: 22,3745           13747                           TCF      +2                                    
064345,000279: 22,3746           13770                           TCF      NOSHIFT                               

Page 1515

064347,000281: 22,3747           30155                           CA       MPAC       +1                         #  SHIFT ALL COMPONENTS LEFT 13
064348,000282: 22,3750           00006                           EXTEND                                         
064349,000283: 22,3751           75002                           MP       BIT14                                 
064350,000284: 22,3752           20155                           DAS      MPAC                                  #  DAS GAINS A LITTLE ACCURACY
064351,000285: 22,3753           30160                           CA       MPAC       +4                         
064352,000286: 22,3754           00006                           EXTEND                                         
064353,000287: 22,3755           75002                           MP       BIT14                                 
064354,000288: 22,3756           20160                           DAS      MPAC       +3                         
064355,000289: 22,3757           30162                           CA       MPAC       +6                         
064356,000290: 22,3760           00006                           EXTEND                                         
064357,000291: 22,3761           75002                           MP       BIT14                                 
064358,000292: 22,3762           20162                           DAS      MPAC       +5                         
064359,000293: 22,3763           35025                           CAF      THIRTEEN                              
064360,000294: 22,3764           50156                           INDEX    MPAC       +2                         
064361,000295: 22,3765           54045                           TS       37D                                   
064362,000296: 22,3766           04701        OFFTUNIT           TC       POSTJUMP                              
064363,000297: 22,3767           01024                           CADR     UNIT       +1                         #  SKIP THE "TC VECAGREE" DONE AT UNIT
064364,000298: 
064365,000299: 22,3770           35021        NOSHIFT            CAF      ZERO                                  
064366,000300: 22,3771           13764                           TCF      OFFTUNIT   -2                         
064367,000301: 
064368,000302:                                                                                                  #  RTB VECSGNAG ... FORCES SIGN AGREEMENT OF VECTOR IN MPAC.
064369,000303: 
064370,000304: 22,3772           04662        VECSGNAG           TC       BANKCALL                              
064371,000305: 22,3773           01010                           CADR     VECAGREE                              
064372,000306: 22,3774           06030                           TC       DANZIG                                
064373,000307: 

Page 1516

064375,000309: 

Reconstruction: From this point through the end of the RTB OP CODES log section, we have code in Comanche 45 that was not present in Comanche 44. This is the very end of memory-bank 16. It is part of the fix for the problem described in MIT Software Anomaly Report COM-4. This is discussed in detail in the related annotation in log section P40-P47.

064381,000315: 16,2000                                           SETLOC   MODCHG1                               
064382,000316: 16,2000                                           BANK                                           
064383,000317: 16,3715           51575        S40.1A             VLOAD    ABVAL                                 
064384,000318: 16,3716           03646                                    DELVSIN                               
064385,000319: 16,3717           27654                           STOVL    DELVSAB                               #  COMPUTE FOR P30/P40 INTERFACE
064386,000320: 16,3720           03640                                    VTIG                                  
064387,000321: 16,3721           77616                           RVQ                                            

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