Source Code
![]() |
These source-code files were obtained by digitally photographing the
Colossus 237 program listing from the private collection of original
AGC developer Fred Martin, and then modifying pre-existing Colossus 249
(Apollo 9) source files to incorporate changes. Note that the page images
presented online are of reduced quality, and that additional 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 237 OF AGC PROGRAM COLOSSUS BY NASA 2021111-031 1:17 AUG. 24, 1968 |
062250,000002: # Copyright: Public domain.
062251,000003: # Filename: RTB_OP_CODES.agc
062252,000004: # Purpose: Part of the source code for Colossus build 237.
062253,000005: # This is for the Command Module's (CM) Apollo Guidance
062254,000006: # Computer (AGC), we believe for Apollo 8.
062255,000007: # Assembler: yaYUL
062256,000008: # Contact: Jim Lawton <jim DOT lawton AT gmail DOT com>
062257,000009: # Website: www.ibiblio.org/apollo/index.html
062258,000010: # Page scans: www.ibiblio.org/apollo/ScansForConversion/Colossus237/
062259,000011: # Mod history: 2011-04-17 JL Adapted from corresponding Colossus 249 file.
062260,000012:
062261,000013: # # Page 1472
062262,000014: 22,3505 BANK 22
062263,000015: 22,2000 SETLOC RTBCODES
062264,000016: 22,2000 BANK
062265,000017:
062266,000018: 22,3505 0002713 EBANK= XNB
062267,000019: 22,3505 COUNT* $$/RTB
062268,000020:
062269,000021: # LOAD TIME2, TIME1 INTO MPAC:
062270,000022:
062271,000023: 22,3505 00006 LOADTIME EXTEND
062272,000024: 22,3506 30025 DCA TIME2
062273,000025: 22,3507 16024 TCF SLOAD2
062274,000026:
062275,000027: # CONVERT THE SINGLE PRECISION 2'S COMPLEMENT NUMBER ARRIVING IN MPAC (SCALED IN HALF-REVOLUTIONS) TO A
062276,000028: # DP 1'S COMPLEMENT NUMBER SCALED IN REVOLUTIONS.
062277,000029:
062278,000030: 22,3510 10154 CDULOGIC CCS MPAC
062279,000031: 22,3511 34714 CAF ZERO
062280,000032: 22,3512 13515 TCF +3
062281,000033: 22,3513 13514 NOOP
062282,000034: 22,3514 44675 CS HALF
062283,000035:
062284,000036: 22,3515 54155 TS MPAC +1
062285,000037: 22,3516 34714 CAF ZERO
062286,000038: 22,3517 56154 XCH MPAC
062287,000039: 22,3520 00006 EXTEND
062288,000040: 22,3521 74675 MP HALF
062289,000041: 22,3522 20155 DAS MPAC
062290,000042: 22,3523 16030 TCF DANZIG # MODE IS ALREADY AT DOUBLE-PRECISION
062291,000043:
062292,000044: # READ THE PIPS INTO MPAC WITHOUT CHANGING THEM:
062293,000045:
062294,000046: 22,3524 00004 READPIPS INHINT
062295,000047: 22,3525 30037 CA PIPAX
062296,000048: 22,3526 54154 TS MPAC
062297,000049: 22,3527 30040 CA PIPAY
062298,000050: 22,3530 54157 TS MPAC +3
062299,000051: 22,3531 30041 CA PIPAZ
062300,000052: 22,3532 00003 RELINT
062301,000053: 22,3533 54161 TS MPAC +5
062302,000054:
062303,000055: 22,3534 34714 CAF ZERO
062304,000056: 22,3535 54155 TS MPAC +1
062305,000057: 22,3536 54160 TS MPAC +4
062306,000058: 22,3537 54162 TS MPAC +6
062307,000059:
062308,000060: 22,3540 16470 VECMODE TCF VMODE
062309,000061: # FORCE TP SIGN AGREEMENT IN MPAC:
062310,000062:
062311,000063: 22,3541 07226 SGNAGREE TC TPAGREE
062312,000064: # # Page 1473
062313,000065: 22,3542 16030 TCF DANZIG
062314,000066:
062315,000067: # CONVERT THE DP 1'S COMPLEMENT ANGLE SCALED IN REVOLUTIONS TO A SINGLE PRECISION 2'S COMPLEMENT ANGLE
062316,000068: # SCALED IN HALF-REVOLUTIONS.
062317,000069:
062318,000070: 22,3543 03573 1STO2S TC 1TO2SUB
062319,000071: 22,3544 34714 CAF ZERO
062320,000072: 22,3545 54155 TS MPAC +1
062321,000073: 22,3546 16027 TCF NEWMODE
062322,000074:
062323,000075: # DO 1STO2S ON A VECTOR OF ANGLES:
062324,000076:
062325,000077: 22,3547 03573 V1STO2S TC 1TO2SUB # ANSWER ARRIVES IN A AND MPAC.
062326,000078:
062327,000079: 22,3550 52162 DXCH MPAC +5
062328,000080: 22,3551 52155 DXCH MPAC
062329,000081: 22,3552 03573 TC 1TO2SUB
062330,000082: 22,3553 54156 TS MPAC +2
062331,000083:
062332,000084: 22,3554 52160 DXCH MPAC +3
062333,000085: 22,3555 52155 DXCH MPAC
062334,000086: 22,3556 03573 TC 1TO2SUB
062335,000087: 22,3557 54155 TS MPAC +1
062336,000088:
062337,000089: 22,3560 30161 CA MPAC +5
062338,000090: 22,3561 54154 TS MPAC
062339,000091:
062340,000092: 22,3562 34712 TPMODE CAF ONE # MODE IS TP.
062341,000093: 22,3563 16027 TCF NEWMODE
062342,000094:
062343,000095: # V1STO2S FOR 2 COMPONENT VECTOR. USED BY RR.
062344,000096:
062345,000097: 22,3564 03573 2V1STO2S TC 1TO2SUB
062346,000098: 22,3565 52160 DXCH MPAC +3
062347,000099: 22,3566 52155 DXCH MPAC
062348,000100: 22,3567 03573 TC 1TO2SUB
062349,000101: 22,3570 54001 TS L
062350,000102: 22,3571 30157 CA MPAC +3
062351,000103: 22,3572 16024 TCF SLOAD2
062352,000104:
062353,000105: # SUBROUTINE TO DO DOUBLING AND 1'S TO 2'S CONVERSION:
062354,000106:
062355,000107: 22,3573 52155 1TO2SUB DXCH MPAC # FINAL MPAC +1 UNSPECIFIED.
062356,000108: 22,3574 20001 DDOUBL
062357,000109: 22,3575 10000 CCS A
062358,000110: 22,3576 64712 AD ONE
062359,000111: 22,3577 13601 TCF +2
062360,000112: 22,3600 40000 COM # THIS WAS REVERSE OF MSU.
062361,000113:
062362,000114: 22,3601 54154 TS MPAC # AND SKIP ON OVERFLOW.
062363,000115: # # Page 1474
062364,000116: 22,3602 00002 TC Q
062365,000117:
062366,000118: 22,3603 50000 INDEX A # OVERFLOW UNCORRECT AND IN MSU.
062367,000119: 22,3604 34673 CAF LIMITS
062368,000120: 22,3605 26154 ADS MPAC
062369,000121: 22,3606 00002 TC Q
062370,000122:
062371,000123: # # Page 1475
062372,000124: # SUBROUTINE TO INCREMENT CDUS
062373,000125: 22,3607 33622 INCRCDUS CAF LOCTHETA
062374,000126: 22,3610 54130 TS BUF # PLACE ADRES(THETA) IN BUF.
062375,000127: 22,3611 30154 CAE MPAC # INCREMENT IN 1S COMPL.
062376,000128: 22,3612 03623 TC CDUINC
062377,000129:
062378,000130: 22,3613 24130 INCR BUF
062379,000131: 22,3614 30157 CAE MPAC +3
062380,000132: 22,3615 03623 TC CDUINC
062381,000133:
062382,000134: 22,3616 24130 INCR BUF
062383,000135: 22,3617 30161 CAE MPAC +5
062384,000136: 22,3620 03623 TC CDUINC
062385,000137:
062386,000138: 22,3621 13540 TCF VECMODE
062387,000139:
062388,000140: 22,3622 01155 LOCTHETA ADRES THETAD
062389,000141:
062390,000142: # THE FOLLOWING ROUTINE INCREMENTS IN 2S COMPLEMENT THE REGISTER WHOSE ADDRESS IS IN BUF BY THE 1S COMPL.
062391,000143: # QUANTITY FOUND IN TEM2. THIS MAY BE USED TO INCREMENT DESIRED IMU AND OPTICS CDU ANGLES OR ANY OTHER 2S COMPL.
062392,000144: # (+0 UNEQUAL TO -0) QUANTITY. MAY BE CALLED BY BANKCALL/SWCALL.
062393,000145:
062394,000146: 22,3623 54142 CDUINC TS TEM2 # 1S COMPL.QUANT. ARRIVES IN ACC. STORE IT
062395,000147: 22,3624 50130 INDEX BUF
062396,000148: 22,3625 10000 CCS 0 # CHANGE 2S COMPLE. ANGLE(IN BUF) INTO 1S
062397,000149: 22,3626 64712 AD ONE
062398,000150: 22,3627 13633 TCF +4
062399,000151: 22,3630 64712 AD ONE
062400,000152: 22,3631 64712 AD ONE # OVEFLOW HERE IF 2S COMPL. IS 180 DEG.
062401,000153: 22,3632 40000 COM
062402,000154:
062403,000155: 22,3633 60142 AD TEM2 # SULT MOVES FROM 2ND TO 3D QUAD.(OR BACK)
062404,000156: 22,3634 10000 CCS A # BACK TO 2S COMPL.
062405,000157: 22,3635 64712 AD ONE
062406,000158: 22,3636 13640 TCF +2
062407,000159: 22,3637 40000 COM
062408,000160: 22,3640 54142 TS TEM2 # STORE 14BIT QUANTITY WITH PRESENT SIGN
062409,000161: 22,3641 13645 TCF +4
062410,000162: 22,3642 50000 INDEX A # SIGN.
062411,000163: 22,3643 34673 CAF LIMITS # FIX IT,BY ADDING IN 37777 OR 40000
062412,000164: 22,3644 60142 AD TEM2
062413,000165:
062414,000166: 22,3645 50130 INDEX BUF
062415,000167: 22,3646 54000 TS 0 # STORE NEW ANGLE IN 2S COMPLEMENT.
062416,000168: 22,3647 00002 TC Q
062417,000169:
062418,000170: # # Page 1476
062419,000171: # RTB TO TORQUE GYROS, EXCEPT FOR THE CALL TO IMUSTALL. ECADR OF COMMANDS ARRIVES IN X1.
062420,000172:
062421,000173: 22,3650 50120 PULSEIMU INDEX FIXLOC # ADDRESS OF GYRO COMMANDS SHOULD BE IN X1
062422,000174: 22,3651 30046 CA X1
062423,000175: 22,3652 04555 TC BANKCALL
062424,000176: 22,3653 17125 CADR IMUPULSE
062425,000177: 22,3654 16030 TCF DANZIG
062426,000178:
062427,000179: # # Page 1477
062428,000180: # EACH ROUTINE TAKES A 3X3 MATRIX STORED IN DOUBLE PRECISION IN A FIXED AREA OF ERASABLE MEMORY AND REPLACES IT
062429,000181: # WITH THE TRANSPOSE MATRIX. TRANSP1 USES LOCATIONS XNB+0,+1 THROUGH XNB+16D, 17D AND TRANSP2 USES LOCATIONS
062430,000182: # XNB1+0,+1 THROUGH XNB1+16D, 17D. EACH MATRIX IS STORED BY ROWS.
062431,000183:
062432,000184: 22,3655 02713 XNBEB ECADR XNB
062433,000185: 22,3656 02554 XNB1EB ECADR XNB1
062434,000186:
062435,000187: 22,3657 0002713 EBANK= XNB
062436,000188:
062437,000189: 22,3657 33655 TRANSP1 CAF XNBEB
062438,000190: 22,3660 54003 TS EBANK
062439,000191: 22,3661 53716 DXCH XNB +2
062440,000192: 22,3662 53722 DXCH XNB +6
062441,000193: 22,3663 53716 DXCH XNB +2
062442,000194:
062443,000195: 22,3664 53720 DXCH XNB +4
062444,000196: 22,3665 53730 DXCH XNB +12D
062445,000197: 22,3666 53720 DXCH XNB +4
062446,000198:
062447,000199: 22,3667 53726 DXCH XNB +10D
062448,000200: 22,3670 53732 DXCH XNB +14D
062449,000201: 22,3671 53726 DXCH XNB +10D
062450,000202: 22,3672 16030 TCF DANZIG
062451,000203:
062452,000204:
062453,000205: 22,3673 0002554 EBANK= XNB1
062454,000206:
062455,000207: 22,3673 33656 TRANSP2 CAF XNB1EB
062456,000208: 22,3674 54003 TS EBANK
062457,000209: 22,3675 53557 DXCH XNB1 +2
062458,000210: 22,3676 53563 DXCH XNB1 +6
062459,000211: 22,3677 53557 DXCH XNB1 +2
062460,000212:
062461,000213: 22,3700 53561 DXCH XNB1 +4
062462,000214: 22,3701 53571 DXCH XNB1 +12D
062463,000215: 22,3702 53561 DXCH XNB1 +4
062464,000216:
062465,000217: 22,3703 53567 DXCH XNB1 +10D
062466,000218: 22,3704 53573 DXCH XNB1 +14D
062467,000219: 22,3705 53567 DXCH XNB1 +10D
062468,000220: 22,3706 16030 TCF DANZIG
062469,000221:
062470,000222: # # Page 1478
062471,000223: # THE SUBROUTINE SIGNMPAC SETS C(MPAC, MPAC +1) TO SIGN(MPAC).
062472,000224: # FOR THIS, ONLY THE CONTENTS OF MPAC ARE EXAMINED. ALSO +0 YIELDS POSMAX AND -0 YIELDS NEGMAX.
062473,000225:
062474,000226: # ENTRY MAY BE BY EITHER OF THE FOLLOWING:
062475,000227:
062476,000228: # 1. LIMIT THE SIZE OF MPAC ON INTERPRETIVE OVERFLOW:
062477,000229: # ENTRY: BOVB
062478,000230: # SIGNMPAC
062479,000231:
062480,000232: # 2. GENERATE IN MPAC THE SIGNUM FUNCTION OF MPAC:
062481,000233: # ENTRY: RTB
062482,000234: # SIGNMPAC
062483,000235:
062484,000236: # IN EITHER CASE, RETURN IS TO THE NEXT INTERPRETIVE INSTRUCTION IN THE CALLING SEQUENCE.
062485,000237:
062486,000238: 22,3707 00006 SIGNMPAC EXTEND
062487,000239: 22,3710 34672 DCA DPOSMAX
062488,000240: 22,3711 52155 DXCH MPAC
062489,000241: 22,3712 10000 CCS A
062490,000242: 22,3713 34714 DPMODE CAF ZERO # SETS MPAC +2 TO ZERO IN THE PROCESS
062491,000243: 22,3714 16026 TCF SLOAD2 +2
062492,000244: 22,3715 13716 TCF +1
062493,000245: 22,3716 00006 EXTEND
062494,000246: 22,3717 44672 DCS DPOSMAX
062495,000247: 22,3720 16024 TCF SLOAD2
062496,000248:
062497,000249: # RTB OP CODE NORMUNIT IS LIKE INTERPRETIVE INSTRUCTION UNIT, EXCEPT THAT IT CAN BE DEPENDED ON NOT TO BLOW
062498,000250: # UP WHEN THE VECTOR BEING UNITIZED IS VERY SAMLL -- IT WILL BLOW UP WHEN ALL COMPONENTS ARE ZERO. IF NORMUNIT
062499,000251: # IS USED AND THE UPPER ORDER HALVES OF ALL COMPONENTS ARE ZERO, THE MAGNITUDE RETURNED IN 36D WILL BE TOO LARGE
062500,000252: # BY A FACTOR OF 2(13) AND THE SQUARED MAGNITUDE RETURNED AT 34D WILL BE TOO BIG BY A FACTOR OF 2(26).
062501,000253:
062502,000254: 22,3721 34712 NORMUNX1 CAF ONE
062503,000255: 22,3722 13724 TCF NORMUNIT +1
062504,000256: 22,3723 34714 NORMUNIT CAF ZERO
062505,000257: 22,3724 60120 AD FIXLOC
062506,000258: 22,3725 54156 TS MPAC +2
062507,000259: 22,3726 04555 TC BANKCALL # GET SIGN AGREEMENT IN ALL COMPONENTS
062508,000260: 22,3727 01010 CADR VECAGREE
062509,000261: 22,3730 10154 CCS MPAC
062510,000262: 22,3731 13765 TCF NOSHIFT
062511,000263: 22,3732 13734 TCF +2
062512,000264: 22,3733 13765 TCF NOSHIFT
062513,000265: 22,3734 10157 CCS MPAC +3
062514,000266: 22,3735 13765 TCF NOSHIFT
062515,000267: 22,3736 13740 TCF +2
062516,000268: 22,3737 13765 TCF NOSHIFT
062517,000269: 22,3740 10161 CCS MPAC +5
062518,000270: 22,3741 13765 TCF NOSHIFT
062519,000271: 22,3742 13744 TCF +2
062520,000272: 22,3743 13765 TCF NOSHIFT
062521,000273: # # Page 1479
062522,000274: 22,3744 30155 CA MPAC +1 # SHIFT ALL COMPONENTS LEFT 13
062523,000275: 22,3745 00006 EXTEND
062524,000276: 22,3746 74675 MP BIT14
062525,000277: 22,3747 20155 DAS MPAC # DAS GAINS A LITTLE ACCURACY
062526,000278: 22,3750 30160 CA MPAC +4
062527,000279: 22,3751 00006 EXTEND
062528,000280: 22,3752 74675 MP BIT14
062529,000281: 22,3753 20160 DAS MPAC +3
062530,000282: 22,3754 30162 CA MPAC +6
062531,000283: 22,3755 00006 EXTEND
062532,000284: 22,3756 74675 MP BIT14
062533,000285: 22,3757 20162 DAS MPAC +5
062534,000286: 22,3760 34720 CAF THIRTEEN
062535,000287: 22,3761 50156 INDEX MPAC +2
062536,000288: 22,3762 54045 TS 37D
062537,000289: 22,3763 04574 OFFTUNIT TC POSTJUMP
062538,000290: 22,3764 01024 CADR UNIT +1 # SKIP THE "TC VECAGREE" DONE AT UNIT
062539,000291:
062540,000292:
062541,000293: 22,3765 34714 NOSHIFT CAF ZERO
062542,000294: 22,3766 13761 TCF OFFTUNIT -2
062543,000295:
062544,000296:
062545,000297: # RTB VECSGNAG ...FORCES SIGN AGREEMENT OF VECTOR IN MPAC.
062546,000298:
062547,000299: 22,3767 04555 VECSGNAG TC BANKCALL
062548,000300: 22,3770 01010 CADR VECAGREE
062549,000301: 22,3771 06030 TC DANZIG
End of include-file RTB_OP_CODES.agc. Parent file is MAIN.agc