Source Code
These source-code files were from the printout at the MIT Museum, with many thanks
to Deborah Douglas, the Museum's Curator of Science and Technology, for releasing
it to us. The printout was digitally photographed by Paul Fjeld. A team of
volunteers transcribed the source code manually from these images or, where
appropriate, modified already-transcribed but similar source Colossus 249 (Apollo 9)
source code to agree with the images from the printout. Note that the page images
presented online are of reduced quality, and that higher-quality images
are available. Report any conversion errors or legibility
problems in page images to info@sandroid.org.
Notations on the program listing read, in part:GAP: ASSEMBLE REVISION 055 OF AGC PROGRAM COMANCHE BY NASA 2021113-051 10:28 APR. 1,1969Note that the date is the date of the printout, not the date of the program revision. |
065309,000002: ## Copyright: Public domain.
065310,000003: ## Filename: RT8_OP_CODES.agc
065311,000004: ## Purpose: Part of the source code for Comanche, build 055. It
065312,000005: ## is part of the source code for the Command Module's
065313,000006: ## (CM) Apollo Guidance Computer (AGC), Apollo 11.
065314,000007: ## Assembler: yaYUL
065315,000008: ## Reference: pp. 1508-1516
065316,000009: ## Contact: Ron Burkey <info@sandroid.org>
065317,000010: ## Website: http://www.ibiblio.org/apollo.
065318,000011: ## Mod history: 2009-05-07 RSB Adapted from Colossus249/RT8_OP_CODES.agc
065319,000012: ## and page images.
065320,000013: ## 2009-05-07 RSB Oops! Left out the entire last page before.
065321,000014: ##
065322,000015: ## The contents of the "Comanche055" files, in general, are transcribed
065323,000016: ## from scanned documents.
065324,000017: ##
065325,000018: ## Assemble revision 055 of AGC program Comanche by NASA
065326,000019: ## 2021113-051. April 1, 1969.
065327,000020: ##
065328,000021: ## This AGC program shall also be referred to as Colossus 2A
065329,000022: ##
065330,000023: ## Prepared by
065331,000024: ## Massachusetts Institute of Technology
065332,000025: ## 75 Cambridge Parkway
065333,000026: ## Cambridge, Massachusetts
065334,000027: ##
065335,000028: ## under NASA contract NAS 9-4065.
065336,000029: ##
065337,000030: ## Refer directly to the online document mentioned above for further
065338,000031: ## information. Please report any errors to info@sandroid.org.
065339,000032:
Page 1508 |
065341,000034: 22,3510 BANK 22
065342,000035: 22,2000 SETLOC RTBCODES
065343,000036: 22,2000 BANK
065344,000037:
065345,000038: 22,3510 E5,1713 EBANK= XNB
065346,000039: 22,3510 COUNT* $$/RTB
065347,000040:
065348,000041: # LOAD TIME2, TIME1 INTO MPAC:
065349,000042:
065350,000043: 22,3510 00006 LOADTIME EXTEND
065351,000044: 22,3511 30025 DCA TIME2
065352,000045: 22,3512 16024 TCF SLOAD2
065353,000046:
065354,000047: # CONVERT THE SINGLE PRECISION 2'S COMPLEMENT NUMBER ARRIVING IN MPAC (SCALED IN HALF-REVOLUTIONS) TO A
065355,000048: # DP 1'S COMPLEMENT NUMBER SCALED IN REVOLUTIONS.
065356,000049:
065357,000050: 22,3513 10154 CDULOGIC CCS MPAC
065358,000051: 22,3514 35021 CAF ZERO
065359,000052: 22,3515 13520 TCF +3
065360,000053: 22,3516 13517 NOOP
065361,000054: 22,3517 45002 CS HALF
065362,000055:
065363,000056: 22,3520 54155 TS MPAC +1
065364,000057: 22,3521 35021 CAF ZERO
065365,000058: 22,3522 56154 XCH MPAC
065366,000059: 22,3523 00006 EXTEND
065367,000060: 22,3524 75002 MP HALF
065368,000061: 22,3525 20155 DAS MPAC
065369,000062: 22,3526 16030 TCF DANZIG # MODE IS ALREADY AT DOUBLE-PRECISION
065370,000063:
065371,000064: # READ THE PIPS INTO MPAC WITHOUT CHANGING THEM:
065372,000065:
065373,000066: 22,3527 00004 READPIPS INHINT
065374,000067: 22,3530 30037 CA PIPAX
065375,000068: 22,3531 54154 TS MPAC
065376,000069: 22,3532 30040 CA PIPAY
065377,000070: 22,3533 54157 TS MPAC +3
065378,000071: 22,3534 30041 CA PIPAZ
065379,000072: 22,3535 00003 RELINT
065380,000073: 22,3536 54161 TS MPAC +5
065381,000074:
065382,000075: 22,3537 35021 CAF ZERO
065383,000076: 22,3540 54155 TS MPAC +1
065384,000077: 22,3541 54160 TS MPAC +4
065385,000078: 22,3542 54162 TS MPAC +6
065386,000079: 22,3543 16470 VECMODE TCF VMODE
065387,000080:
065388,000081: # FORCE TP SIGN AGREEMENT IN MPAC:
065389,000082:
065390,000083: 22,3544 07226 SGNAGREE TC TPAGREE
065391,000084:
Page 1509 |
065393,000086:
065394,000087: 22,3545 16030 TCF DANZIG
065395,000088:
065396,000089: # CONVERT THE DP 1'S COMPLEMENT ANGLE SCALED IN REVOLUTIONS TO A SINGLE PRECISION 2'S COMPLEMENT ANGLE
065397,000090: # SCALED IN HALF-REVOLUTIONS.
065398,000091:
065399,000092: 22,3546 03576 1STO2S TC 1TO2SUB
065400,000093: 22,3547 35021 CAF ZERO
065401,000094: 22,3550 54155 TS MPAC +1
065402,000095: 22,3551 16027 TCF NEWMODE
065403,000096:
065404,000097: # DO 1STO2S ON A VECTOR OF ANGLES:
065405,000098:
065406,000099: 22,3552 03576 V1STO2S TC 1TO2SUB # ANSWER ARRIVES IN A AND MPAC.
065407,000100:
065408,000101: 22,3553 52162 DXCH MPAC +5
065409,000102: 22,3554 52155 DXCH MPAC
065410,000103: 22,3555 03576 TC 1TO2SUB
065411,000104: 22,3556 54156 TS MPAC +2
065412,000105:
065413,000106: 22,3557 52160 DXCH MPAC +3
065414,000107: 22,3560 52155 DXCH MPAC
065415,000108: 22,3561 03576 TC 1TO2SUB
065416,000109: 22,3562 54155 TS MPAC +1
065417,000110:
065418,000111: 22,3563 30161 CA MPAC +5
065419,000112: 22,3564 54154 TS MPAC
065420,000113:
065421,000114: 22,3565 35017 TPMODE CAF ONE # MODE IS TP.
065422,000115: 22,3566 16027 TCF NEWMODE
065423,000116:
065424,000117: # V1STO2S FOR 2 COMPONENT VECTOR. USED BY RR.
065425,000118:
065426,000119: 22,3567 03576 2V1STO2S TC 1TO2SUB
065427,000120: 22,3570 52160 DXCH MPAC +3
065428,000121: 22,3571 52155 DXCH MPAC
065429,000122: 22,3572 03576 TC 1TO2SUB
065430,000123: 22,3573 54001 TS L
065431,000124: 22,3574 30157 CA MPAC +3
065432,000125: 22,3575 16024 TCF SLOAD2
065433,000126:
065434,000127: # SUBROUTINE TO DO DOUBLING AND 1'S TO 2'S CONVERSION:
065435,000128:
065436,000129: 22,3576 52155 1TO2SUB DXCH MPAC # FINAL MPAC +1 UNSPECIFIED.
065437,000130: 22,3577 20001 DDOUBL
065438,000131: 22,3600 10000 CCS A
065439,000132: 22,3601 65017 AD ONE
065440,000133: 22,3602 13604 TCF +2
065441,000134: 22,3603 40000 COM # THIS WAS REVERSE OF MSU.
065442,000135:
065443,000136: 22,3604 54154 TS MPAC # AND SKIP ON OVERFLOW.
Page 1510 |
065445,000138: 22,3605 00002 TC Q
065446,000139:
065447,000140: 22,3606 50000 INDEX A # OVERFLOW UNCORRECT AND IN MSU.
065448,000141: 22,3607 35000 CAF LIMITS
065449,000142: 22,3610 26154 ADS MPAC
065450,000143: 22,3611 00002 TC Q
065451,000144:
Page 1511 |
065453,000146: # SUBROUTINE TO INCREMENT CDUS
065454,000147:
065455,000148: 22,3612 33625 INCRCDUS CAF LOCTHETA
065456,000149: 22,3613 54130 TS BUF # PLACE ADRES(THETA) IN BUF.
065457,000150: 22,3614 30154 CAE MPAC # INCREMENT IN 1'S COMPL.
065458,000151: 22,3615 03626 TC CDUINC
065459,000152:
065460,000153: 22,3616 24130 INCR BUF
065461,000154: 22,3617 30157 CAE MPAC +3
065462,000155: 22,3620 03626 TC CDUINC
065463,000156:
065464,000157: 22,3621 24130 INCR BUF
065465,000158: 22,3622 30161 CAE MPAC +5
065466,000159: 22,3623 03626 TC CDUINC
065467,000160:
065468,000161: 22,3624 13543 TCF VECMODE
065469,000162:
065470,000163: 22,3625 01155 LOCTHETA ADRES THETAD
065471,000164:
065472,000165: # THE FOLLOWING ROUTINE INCREMENTS IN 2'S COMPLEMENT THE REGISTER WHOSE ADDRESS IS IN BUF BY THE 1'S COMPL.
065473,000166: # QUANTITY FOUND IN TEM2. THIS MAY BE USED TO INCRMENT DESIRED IMU AND OPTICS CDU ANGLES OR ANY OTHER 2'S COMPL.
065474,000167: # (+0 UNEQUAL TO -0) QUANTITY. MAY BE CALLED BY BANKCALL/SWCALL.
065475,000168:
065476,000169: 22,3626 54142 CDUINC TS TEM2 # 1'S COMPL. QUANT. ARRIVES IN ACC. STORE IT
065477,000170: 22,3627 50130 INDEX BUF
065478,000171: 22,3630 10000 CCS 0 # CHANGE 2'S COMPLE. ANGEL (IN BUF) INTO 1'S
065479,000172: 22,3631 65017 AD ONE
065480,000173: 22,3632 13636 TCF +4
065481,000174: 22,3633 65017 AD ONE
065482,000175: 22,3634 65017 AD ONE # OVEFLOW HERE IF 2'S COMPL. IS 180 DEG.
065483,000176: 22,3635 40000 COM
065484,000177:
065485,000178: 22,3636 60142 AD TEM2 # SULT MOVES FROM 2ND TO 3D QUAD. (OR BACK)
065486,000179: 22,3637 10000 CCS A # BACK TO 2'S COMPL.
065487,000180: 22,3640 65017 AD ONE
065488,000181: 22,3641 13643 TCF +2
065489,000182: 22,3642 40000 COM
065490,000183: 22,3643 54142 TS TEM2 # STORE 14-BIT QUANTITY WITH PRESENT SIGN
065491,000184: 22,3644 13650 TCF +4
065492,000185: 22,3645 50000 INDEX A # SIGN.
065493,000186: 22,3646 35000 CAF LIMITS # FIX IT, BY ADDING IN 37777 OR 40000
065494,000187: 22,3647 60142 AD TEM2
065495,000188:
065496,000189: 22,3650 50130 INDEX BUF
065497,000190: 22,3651 54000 TS 0 # STORE NEW ANGLE IN 2'S COMPLEMENT.
065498,000191: 22,3652 00002 TC Q
065499,000192:
Page 1512 |
065501,000194: # RTB TO TORQUE GYROS, EXCEPT FOR THE CALL TO IMUSTALL. ECADR OF COMMANDS ARRIVES IN X1.
065502,000195:
065503,000196: 22,3653 50120 PULSEIMU INDEX FIXLOC # ADDRESS OF GYRO COMMANDS SHOULD BE IN X1
065504,000197: 22,3654 30046 CA X1
065505,000198: 22,3655 04662 TC BANKCALL
065506,000199: 22,3656 17206 CADR IMUPULSE
065507,000200: 22,3657 16030 TCF DANZIG
065508,000201:
Page 1513 |
065510,000203: # EACH ROUTINE TAKES A 3X3 MATRIX STORED IN DOUBLE PRECISION IN A FIXED AREA OF ERASABLE MEMORY AND REPLACES IT
065511,000204: # WITH THE TRANSPOSE MATRIX. TRANSP1 USES LOCATIONS XNB+0,+1 THROUGH XNB+16D,+17D AND TRANSP2 USES LOCATIONS
065512,000205: # XNB1+0,+1 THROUGH XNB1+16D,+17D. EACH MATRIX IS STORED BY ROWS.
065513,000206:
065514,000207: 22,3660 02713 XNBEB ECADR XNB
065515,000208: 22,3661 02554 XNB1EB ECADR XNB1
065516,000209:
065517,000210: 22,3662 E5,1713 EBANK= XNB
065518,000211:
065519,000212: 22,3662 33660 TRANSP1 CAF XNBEB
065520,000213: 22,3663 54003 TS EBANK
065521,000214: 22,3664 53716 DXCH XNB +2
065522,000215: 22,3665 53722 DXCH XNB +6
065523,000216: 22,3666 53716 DXCH XNB +2
065524,000217:
065525,000218: 22,3667 53720 DXCH XNB +4
065526,000219: 22,3670 53730 DXCH XNB +12D
065527,000220: 22,3671 53720 DXCH XNB +4
065528,000221:
065529,000222: 22,3672 53726 DXCH XNB +10D
065530,000223: 22,3673 53732 DXCH XNB +14D
065531,000224: 22,3674 53726 DXCH XNB +10D
065532,000225: 22,3675 16030 TCF DANZIG
065533,000226: 22,3676 E5,1554 EBANK= XNB1
065534,000227:
065535,000228: 22,3676 33661 TRANSP2 CAF XNB1EB
065536,000229: 22,3677 54003 TS EBANK
065537,000230: 22,3700 53557 DXCH XNB1 +2
065538,000231: 22,3701 53563 DXCH XNB1 +6
065539,000232: 22,3702 53557 DXCH XNB1 +2
065540,000233:
065541,000234: 22,3703 53561 DXCH XNB1 +4
065542,000235: 22,3704 53571 DXCH XNB1 +12D
065543,000236: 22,3705 53561 DXCH XNB1 +4
065544,000237:
065545,000238: 22,3706 53567 DXCH XNB1 +10D
065546,000239: 22,3707 53573 DXCH XNB1 +14D
065547,000240: 22,3710 53567 DXCH XNB1 +10D
065548,000241: 22,3711 16030 TCF DANZIG
065549,000242:
Page 1514 |
065551,000244: # THE SUBROUTINE SIGNMPAC SETS C(MPAC, MPAC +1) TO SIGN(MPAC).
065552,000245: # FOR THIS, ONLY THE CONTENTS OF MPAC ARE EXAMINED. ALSO +0 YIELDS POSMAX AND -0 YIELDS NEGMAX.
065553,000246:
065554,000247: # ENTRY MAY BE BY EITHER OF THE FOLLOWING:
065555,000248: # 1. LIMIT THE SIZE OF MPAC ON INTERPRETIVE OVERFLOW:
065556,000249: # ENTRY: BOVB
065557,000250: # SIGNMPAC
065558,000251: # 2. GENERATE IN MPAC THE SIGNUM FUNCTION OF MPAC:
065559,000252: # ENTRY: RTB
065560,000253: # SIGNMPAC
065561,000254: # IN EITHER CASE, RETURN IS TO TEH NEXT INTERPRETIVE INSTRUCTION IN THE CALLING SEQUENCE.
065562,000255:
065563,000256: 22,3712 00006 SIGNMPAC EXTEND
065564,000257: 22,3713 34777 DCA DPOSMAX
065565,000258: 22,3714 52155 DXCH MPAC
065566,000259: 22,3715 10000 CCS A
065567,000260: 22,3716 35021 DPMODE CAF ZERO # SETS MPAC +2 TO ZERO IN THE PROCESS
065568,000261: 22,3717 16026 TCF SLOAD2 +2
065569,000262: 22,3720 13721 TCF +1
065570,000263: 22,3721 00006 EXTEND
065571,000264: 22,3722 44777 DCS DPOSMAX
065572,000265: 22,3723 16024 TCF SLOAD2
065573,000266:
065574,000267: # RTB OP CODE NORMUNIT IS LIKE INTERPRETIVE INSTRUCTION UNIT, EXCEPT THAT IT CAN BE DEPENDED ON NOT TO BLOW
065575,000268: # UP WHEN THE VECTOR BEING UNITIZED IS VERY SAMLL -- IT WILL BLOW UP WHEN ALL COMPONENT ARE ZERO. IF NORMUNIT
065576,000269: # IS USED AND THE UPPER ORDER HALVES OF ALL COMPONENTS ARE ZERO, THE MAGNITUDE RETURNS IN 36D WILL BE TOO LARGE
065577,000270: # BY A FACTOR OF 2(13) AND THE SQURED MAGNITUDE RETURNED AT 34D WILL BE TOO BIG BY A FACTOR OF 2(26).
065578,000271:
065579,000272: 22,3724 35017 NORMUNX1 CAF ONE
065580,000273: 22,3725 13727 TCF NORMUNIT +1
065581,000274: 22,3726 35021 NORMUNIT CAF ZERO
065582,000275: 22,3727 60120 AD FIXLOC
065583,000276: 22,3730 54156 TS MPAC +2
065584,000277: 22,3731 04662 TC BANKCALL # GET SIGN AGREEMENT IN ALL COMPONENTS
065585,000278: 22,3732 01010 CADR VECAGREE
065586,000279: 22,3733 10154 CCS MPAC
065587,000280: 22,3734 13770 TCF NOSHIFT
065588,000281: 22,3735 13737 TCF +2
065589,000282: 22,3736 13770 TCF NOSHIFT
065590,000283: 22,3737 10157 CCS MPAC +3
065591,000284: 22,3740 13770 TCF NOSHIFT
065592,000285: 22,3741 13743 TCF +2
065593,000286: 22,3742 13770 TCF NOSHIFT
065594,000287: 22,3743 10161 CCS MPAC +5
065595,000288: 22,3744 13770 TCF NOSHIFT
065596,000289: 22,3745 13747 TCF +2
065597,000290: 22,3746 13770 TCF NOSHIFT
Page 1515 |
065599,000292: 22,3747 30155 CA MPAC +1 # SHIFT ALL COMPONENTS LEFT 13
065600,000293: 22,3750 00006 EXTEND
065601,000294: 22,3751 75002 MP BIT14
065602,000295: 22,3752 20155 DAS MPAC # DAS GAINS A LITTLE ACCURACY
065603,000296: 22,3753 30160 CA MPAC +4
065604,000297: 22,3754 00006 EXTEND
065605,000298: 22,3755 75002 MP BIT14
065606,000299: 22,3756 20160 DAS MPAC +3
065607,000300: 22,3757 30162 CA MPAC +6
065608,000301: 22,3760 00006 EXTEND
065609,000302: 22,3761 75002 MP BIT14
065610,000303: 22,3762 20162 DAS MPAC +5
065611,000304: 22,3763 35025 CAF THIRTEEN
065612,000305: 22,3764 50156 INDEX MPAC +2
065613,000306: 22,3765 54045 TS 37D
065614,000307: 22,3766 04701 OFFTUNIT TC POSTJUMP
065615,000308: 22,3767 01024 CADR UNIT +1 # SKIP THE "TC VECAGREE" DONE AT UNIT
065616,000309:
065617,000310: 22,3770 35021 NOSHIFT CAF ZERO
065618,000311: 22,3771 13764 TCF OFFTUNIT -2
065619,000312:
065620,000313: # RTB VECSGNAG ... FORCES SIGN AGREEMENT OF VECTOR IN MPAC.
065621,000314:
065622,000315: 22,3772 04662 VECSGNAG TC BANKCALL
065623,000316: 22,3773 01010 CADR VECAGREE
065624,000317: 22,3774 06030 TC DANZIG
065625,000318:
Page 1516 |
065627,000320: # MODULE CHANGE FOR NEW LUNAR GRAVITY MODEL
065628,000321: 13,2000 SETLOC MODCHG3
065629,000322: 13,2000 BANK
065630,000323: 13,3770 71214 QUALITY1 BOF DLOAD
065631,000324: 13,3771 00343 MOONFLAG
065632,000325: 13,3772 23220 NBRANCH
065633,000326: 13,3773 00017 URPV
065634,000327: 13,3774 52116 DSQ GOTO
065635,000328: 13,3775 25754 QUALITY2
065636,000329: 12,2000 SETLOC MODCHG2
065637,000330: 12,2000 BANK
065638,000331: 12,3754 63525 QUALITY2 PDDL DSQ # SQUARE INTO 2D, B2
065639,000332: 12,3755 00021 URPV +2 # Y COMPONENT, B1
065640,000333: 12,3756 77625 DSU
065641,000334: 12,3757 74205 DMP VXSC # 5(Y**2-X**2)UR
065642,000335: 12,3760 27755 5/8 # CONSTANT, 5B3
065643,000336: 12,3761 00017 URPV # VECTOR, RESULT MAXIMUM IS 5, SCALING
065644,000337: # HERE B6
065645,000338: 12,3762 65332 VSL3 PDDL # STORE SCALED B3 IN 2D, 4D, 6D FOR XYZ
065646,000339: 12,3763 00017 URPV # X COMPONENT, B1
065647,000340: 12,3764 43342 SR1 DAD # 2 X X COMPONENT FOR B3 SCALING
065648,000341: 12,3765 00003 2D # ADD TO VECTOR X COMPONENT OF ANSWER.
065649,000342: # SAME AS MULTIPLYING BY UNITX. MAX IS 7.
065650,000343: 12,3766 14003 STODL 2D
065651,000344: 12,3767 00021 URPV +2 # Y COMPONENT, B1
065652,000345: 12,3770 44342 SR1 BDSU # 2 X Y COMPONENT FOR B3 SCALING
065653,000346: 12,3771 00005 4D # SUBTRACT FROM VECTOR Y COMPONENT OF
065654,000347: # ANSWER, SAME AS MULTIPLYING BY UNITY.
065655,000348: # MAX IS 7.
065656,000349: 12,3772 00005 STORE 4D # 2D HAS VECTOR, B3.
065657,000350: 12,3773 74335 SLOAD VXSC # MULTIPLY COEFFICIENT TIMES VECTOR IN 2D
065658,000351: 12,3774 01777 E3J22R2M
065659,000352: 12,3775 43525 PDDL RVQ # J22 TERM X R**4 IN 2D, SCALED B61
065660,000353: 12,3776 00023 COSPHI/2 # SAME AS URPV +4, Z COMPONENT
065661,000354:
065662,000355: # *** END OF CHIEFTAN.028 ***
065663,000356:
End of include-file RT8_OP_CODES.agc. Parent file is MAIN.agc