Source Code
![]() |
These source-code files were derived from scans of the
Colossus 237 (Apollo 8 Command Module) program listing from the private collection of original
AGC developer Fred Martin. Scanning was by Ron Burkey. Pre-existing Colossus 249
(Apollo 9 CM) source files were used as a template, and changes between Colossus 249
and Colossus 237 were manually transcribed by a team of volunteers. 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, 1968Note that the date is the date of the printout, not the date of the program revision. |
062624,000002: ## Copyright: Public domain.
062625,000003: ## Filename: RTB_OP_CODES.agc
062626,000004: ## Purpose: Part of the source code for Colossus build 237.
062627,000005: ## This is for the Command Module's (CM) Apollo Guidance
062628,000006: ## Computer (AGC), for Apollo 8.
062629,000007: ## Assembler: yaYUL
062630,000008: ## Contact: Jim Lawton <jim DOT lawton AT gmail DOT com>
062631,000009: ## Website: www.ibiblio.org/apollo/index.html
062632,000010: ## Page Scans: www.ibiblio.org/apollo/ScansForConversion/Colossus237/
062633,000011: ## Mod history: 2011-04-17 JL Adapted from corresponding Colossus 249 file.
062634,000012: ## 2017-01-01 RSB Proofed comment text using octopus/ProoferComments,
062635,000013: ## and fixed errors found.
062636,000014:
![]() |
Page 1472 |
062638,000016: 22,3505 BANK 22
062639,000017: 22,2000 SETLOC RTBCODES
062640,000018: 22,2000 BANK
062641,000019:
062642,000020: 22,3505 E5,1713 EBANK= XNB
062643,000021: 22,3505 COUNT* $$/RTB
062644,000022:
062645,000023: # LOAD TIME2, TIME1 INTO MPAC:
062646,000024:
062647,000025: 22,3505 00006 LOADTIME EXTEND
062648,000026: 22,3506 30025 DCA TIME2
062649,000027: 22,3507 16024 TCF SLOAD2
062650,000028:
062651,000029: # CONVERT THE SINGLE PRECISION 2'S COMPLEMENT NUMBER ARRIVING IN MPAC (SCALED IN HALF-REVOLUTIONS) TO A
062652,000030: # DP 1'S COMPLEMENT NUMBER SCALED IN REVOLUTIONS.
062653,000031:
062654,000032: 22,3510 10154 CDULOGIC CCS MPAC
062655,000033: 22,3511 34714 CAF ZERO
062656,000034: 22,3512 13515 TCF +3
062657,000035: 22,3513 13514 NOOP
062658,000036: 22,3514 44675 CS HALF
062659,000037:
062660,000038: 22,3515 54155 TS MPAC +1
062661,000039: 22,3516 34714 CAF ZERO
062662,000040: 22,3517 56154 XCH MPAC
062663,000041: 22,3520 00006 EXTEND
062664,000042: 22,3521 74675 MP HALF
062665,000043: 22,3522 20155 DAS MPAC
062666,000044: 22,3523 16030 TCF DANZIG # MODE IS ALREADY AT DOUBLE-PRECISION
062667,000045:
062668,000046: # READ THE PIPS INTO MPAC WITHOUT CHANGING THEM:
062669,000047:
062670,000048: 22,3524 00004 READPIPS INHINT
062671,000049: 22,3525 30037 CA PIPAX
062672,000050: 22,3526 54154 TS MPAC
062673,000051: 22,3527 30040 CA PIPAY
062674,000052: 22,3530 54157 TS MPAC +3
062675,000053: 22,3531 30041 CA PIPAZ
062676,000054: 22,3532 00003 RELINT
062677,000055: 22,3533 54161 TS MPAC +5
062678,000056:
062679,000057: 22,3534 34714 CAF ZERO
062680,000058: 22,3535 54155 TS MPAC +1
062681,000059: 22,3536 54160 TS MPAC +4
062682,000060: 22,3537 54162 TS MPAC +6
062683,000061:
062684,000062: 22,3540 16470 VECMODE TCF VMODE
062685,000063: # FORCE TP SIGN AGREEMENT IN MPAC:
062686,000064:
062687,000065: 22,3541 07226 SGNAGREE TC TPAGREE
![]() |
Page 1473 |
062689,000067: 22,3542 16030 TCF DANZIG
062690,000068:
062691,000069: # CONVERT THE DP 1'S COMPLEMENT ANGLE SCALED IN REVOLUTIONS TO A SINGLE PRECISION 2'S COMPLEMENT ANGLE
062692,000070: # SCALED IN HALF-REVOLUTIONS.
062693,000071:
062694,000072: 22,3543 03573 1STO2S TC 1TO2SUB
062695,000073: 22,3544 34714 CAF ZERO
062696,000074: 22,3545 54155 TS MPAC +1
062697,000075: 22,3546 16027 TCF NEWMODE
062698,000076:
062699,000077: # DO 1STO2S ON A VECTOR OF ANGLES:
062700,000078:
062701,000079: 22,3547 03573 V1STO2S TC 1TO2SUB # ANSWER ARRIVES IN A AND MPAC.
062702,000080:
062703,000081: 22,3550 52162 DXCH MPAC +5
062704,000082: 22,3551 52155 DXCH MPAC
062705,000083: 22,3552 03573 TC 1TO2SUB
062706,000084: 22,3553 54156 TS MPAC +2
062707,000085:
062708,000086: 22,3554 52160 DXCH MPAC +3
062709,000087: 22,3555 52155 DXCH MPAC
062710,000088: 22,3556 03573 TC 1TO2SUB
062711,000089: 22,3557 54155 TS MPAC +1
062712,000090:
062713,000091: 22,3560 30161 CA MPAC +5
062714,000092: 22,3561 54154 TS MPAC
062715,000093:
062716,000094: 22,3562 34712 TPMODE CAF ONE # MODE IS TP.
062717,000095: 22,3563 16027 TCF NEWMODE
062718,000096:
062719,000097: # V1STO2S FOR 2 COMPONENT VECTOR. USED BY RR.
062720,000098:
062721,000099: 22,3564 03573 2V1STO2S TC 1TO2SUB
062722,000100: 22,3565 52160 DXCH MPAC +3
062723,000101: 22,3566 52155 DXCH MPAC
062724,000102: 22,3567 03573 TC 1TO2SUB
062725,000103: 22,3570 54001 TS L
062726,000104: 22,3571 30157 CA MPAC +3
062727,000105: 22,3572 16024 TCF SLOAD2
062728,000106:
062729,000107: # SUBROUTINE TO DO DOUBLING AND 1'S TO 2'S CONVERSION:
062730,000108:
062731,000109: 22,3573 52155 1TO2SUB DXCH MPAC # FINAL MPAC +1 UNSPECIFIED.
062732,000110: 22,3574 20001 DDOUBL
062733,000111: 22,3575 10000 CCS A
062734,000112: 22,3576 64712 AD ONE
062735,000113: 22,3577 13601 TCF +2
062736,000114: 22,3600 40000 COM # THIS WAS REVERSE OF MSU.
062737,000115:
062738,000116: 22,3601 54154 TS MPAC # AND SKIP ON OVERFLOW.
![]() |
Page 1474 |
062740,000118: 22,3602 00002 TC Q
062741,000119:
062742,000120: 22,3603 50000 INDEX A # OVERFLOW UNCORRECT AND IN MSU.
062743,000121: 22,3604 34673 CAF LIMITS
062744,000122: 22,3605 26154 ADS MPAC
062745,000123: 22,3606 00002 TC Q
062746,000124:
![]() |
Page 1475 |
062748,000126: # SUBROUTINE TO INCREMENT CDUS
062749,000127: 22,3607 33622 INCRCDUS CAF LOCTHETA
062750,000128: 22,3610 54130 TS BUF # PLACE ADRES(THETA) IN BUF.
062751,000129: 22,3611 30154 CAE MPAC # INCREMENT IN 1S COMPL.
062752,000130: 22,3612 03623 TC CDUINC
062753,000131:
062754,000132: 22,3613 24130 INCR BUF
062755,000133: 22,3614 30157 CAE MPAC +3
062756,000134: 22,3615 03623 TC CDUINC
062757,000135:
062758,000136: 22,3616 24130 INCR BUF
062759,000137: 22,3617 30161 CAE MPAC +5
062760,000138: 22,3620 03623 TC CDUINC
062761,000139:
062762,000140: 22,3621 13540 TCF VECMODE
062763,000141:
062764,000142: 22,3622 01155 LOCTHETA ADRES THETAD
062765,000143:
062766,000144: # THE FOLLOWING ROUTINE INCREMENTS IN 2S COMPLEMENT THE REGISTER WHOSE ADDRESS IS IN BUF BY THE 1S COMPL.
062767,000145: # QUANTITY FOUND IN TEM2. THIS MAY BE USED TO INCREMENT DESIRED IMU AND OPTICS CDU ANGLES OR ANY OTHER 2S COMPL.
062768,000146: # (+0 UNEQUAL TO -0) QUANTITY. MAY BE CALLED BY BANKCALL/SWCALL.
062769,000147:
062770,000148: 22,3623 54142 CDUINC TS TEM2 # 1S COMPL.QUANT. ARRIVES IN ACC. STORE IT
062771,000149: 22,3624 50130 INDEX BUF
062772,000150: 22,3625 10000 CCS 0 # CHANGE 2S COMPL. ANGLE(IN BUF) INTO 1S
062773,000151: 22,3626 64712 AD ONE
062774,000152: 22,3627 13633 TCF +4
062775,000153: 22,3630 64712 AD ONE
062776,000154: 22,3631 64712 AD ONE # OVERFLOW HERE IF 2S COMPL. IS 180 DEG.
062777,000155: 22,3632 40000 COM
062778,000156:
062779,000157: 22,3633 60142 AD TEM2 # SULT MOVES FROM 2ND TO 3D QUAD.(OR BACK)
062780,000158: 22,3634 10000 CCS A # BACK TO 2S COMPL.
062781,000159: 22,3635 64712 AD ONE
062782,000160: 22,3636 13640 TCF +2
062783,000161: 22,3637 40000 COM
062784,000162: 22,3640 54142 TS TEM2 # STORE 14BIT QUANTITY WITH PRESENT SIGN
062785,000163: 22,3641 13645 TCF +4
062786,000164: 22,3642 50000 INDEX A # SIGN.
062787,000165: 22,3643 34673 CAF LIMITS # FIX IT,BY ADDING IN 37777 OR 40000
062788,000166: 22,3644 60142 AD TEM2
062789,000167:
062790,000168: 22,3645 50130 INDEX BUF
062791,000169: 22,3646 54000 TS 0 # STORE NEW ANGLE IN 2S COMPLEMENT.
062792,000170: 22,3647 00002 TC Q
062793,000171:
![]() |
Page 1476 |
062795,000173: # RTB TO TORQUE GYROS, EXCEPT FOR THE CALL TO IMUSTALL. ECADR OF COMMANDS ARRIVES IN X1.
062796,000174:
062797,000175: 22,3650 50120 PULSEIMU INDEX FIXLOC # ADDRESS OF GYRO COMMANDS SHOULD BE IN X1
062798,000176: 22,3651 30046 CA X1
062799,000177: 22,3652 04555 TC BANKCALL
062800,000178: 22,3653 17125 CADR IMUPULSE
062801,000179: 22,3654 16030 TCF DANZIG
062802,000180:
![]() |
Page 1477 |
062804,000182: # EACH ROUTINE TAKES A 3X3 MATRIX STORED IN DOUBLE PRECISION IN A FIXED AREA OF ERASABLE MEMORY AND REPLACES IT
062805,000183: # WITH THE TRANSPOSE MATRIX. TRANSP1 USES LOCATIONS XNB+0,+1 THROUGH XNB+16D, 17D AND TRANSP2 USES LOCATIONS
062806,000184: # XNB1+0,+1 THROUGH XNB1+16D, 17D. EACH MATRIX IS STORED BY ROWS.
062807,000185:
062808,000186: 22,3655 02713 XNBEB ECADR XNB
062809,000187: 22,3656 02554 XNB1EB ECADR XNB1
062810,000188:
062811,000189: 22,3657 E5,1713 EBANK= XNB
062812,000190:
062813,000191: 22,3657 33655 TRANSP1 CAF XNBEB
062814,000192: 22,3660 54003 TS EBANK
062815,000193: 22,3661 53716 DXCH XNB +2
062816,000194: 22,3662 53722 DXCH XNB +6
062817,000195: 22,3663 53716 DXCH XNB +2
062818,000196:
062819,000197: 22,3664 53720 DXCH XNB +4
062820,000198: 22,3665 53730 DXCH XNB +12D
062821,000199: 22,3666 53720 DXCH XNB +4
062822,000200:
062823,000201: 22,3667 53726 DXCH XNB +10D
062824,000202: 22,3670 53732 DXCH XNB +14D
062825,000203: 22,3671 53726 DXCH XNB +10D
062826,000204: 22,3672 16030 TCF DANZIG
062827,000205:
062828,000206:
062829,000207: 22,3673 E5,1554 EBANK= XNB1
062830,000208:
062831,000209: 22,3673 33656 TRANSP2 CAF XNB1EB
062832,000210: 22,3674 54003 TS EBANK
062833,000211: 22,3675 53557 DXCH XNB1 +2
062834,000212: 22,3676 53563 DXCH XNB1 +6
062835,000213: 22,3677 53557 DXCH XNB1 +2
062836,000214:
062837,000215: 22,3700 53561 DXCH XNB1 +4
062838,000216: 22,3701 53571 DXCH XNB1 +12D
062839,000217: 22,3702 53561 DXCH XNB1 +4
062840,000218:
062841,000219: 22,3703 53567 DXCH XNB1 +10D
062842,000220: 22,3704 53573 DXCH XNB1 +14D
062843,000221: 22,3705 53567 DXCH XNB1 +10D
062844,000222: 22,3706 16030 TCF DANZIG
062845,000223:
![]() |
Page 1478 |
062847,000225: # THE SUBROUTINE SIGNMPAC SETS C(MPAC, MPAC +1) TO SIGN(MPAC).
062848,000226: # FOR THIS, ONLY THE CONTENTS OF MPAC ARE EXAMINED. ALSO +0 YIELDS POSMAX AND -0 YIELDS NEGMAX.
062849,000227:
062850,000228: # ENTRY MAY BE BY EITHER OF THE FOLLOWING:
062851,000229:
062852,000230: # 1. LIMIT THE SIZE OF MPAC ON INTERPRETIVE OVERFLOW:
062853,000231: # ENTRY: BOVB
062854,000232: # SIGNMPAC
062855,000233:
062856,000234: # 2. GENERATE IN MPAC THE SIGNUM FUNCTION OF MPAC:
062857,000235: # ENTRY: RTB
062858,000236: # SIGNMPAC
062859,000237:
062860,000238: # IN EITHER CASE, RETURN IS TO THE NEXT INTERPRETIVE INSTRUCTION IN THE CALLING SEQUENCE.
062861,000239:
062862,000240: 22,3707 00006 SIGNMPAC EXTEND
062863,000241: 22,3710 34672 DCA DPOSMAX
062864,000242: 22,3711 52155 DXCH MPAC
062865,000243: 22,3712 10000 CCS A
062866,000244: 22,3713 34714 DPMODE CAF ZERO # SETS MPAC +2 TO ZERO IN THE PROCESS
062867,000245: 22,3714 16026 TCF SLOAD2 +2
062868,000246: 22,3715 13716 TCF +1
062869,000247: 22,3716 00006 EXTEND
062870,000248: 22,3717 44672 DCS DPOSMAX
062871,000249: 22,3720 16024 TCF SLOAD2
062872,000250:
062873,000251: # RTB OP CODE NORMUNIT IS LIKE INTERPRETIVE INSTRUCTION UNIT, EXCEPT THAT IT CAN BE DEPENDED ON NOT TO BLOW
062874,000252: # UP WHEN THE VECTOR BEING UNITIZED IS VERY SMALL -- IT WILL BLOW UP WHEN ALL COMPONENTS ARE ZERO. IF NORMUNIT
062875,000253: # IS USED AND THE UPPER ORDER HALVES OF ALL COMPONENTS ARE ZERO, THE MAGNITUDE RETURNED IN 36D WILL BE TOO LARGE
062876,000254: # BY A FACTOR OF 2(13) AND THE SQUARED MAGNITUDE RETURNED AT 34D WILL BE TOO BIG BY A FACTOR OF 2(26).
062877,000255:
062878,000256: 22,3721 34712 NORMUNX1 CAF ONE
062879,000257: 22,3722 13724 TCF NORMUNIT +1
062880,000258: 22,3723 34714 NORMUNIT CAF ZERO
062881,000259: 22,3724 60120 AD FIXLOC
062882,000260: 22,3725 54156 TS MPAC +2
062883,000261: 22,3726 04555 TC BANKCALL # GET SIGN AGREEMENT IN ALL COMPONENTS
062884,000262: 22,3727 01010 CADR VECAGREE
062885,000263: 22,3730 10154 CCS MPAC
062886,000264: 22,3731 13765 TCF NOSHIFT
062887,000265: 22,3732 13734 TCF +2
062888,000266: 22,3733 13765 TCF NOSHIFT
062889,000267: 22,3734 10157 CCS MPAC +3
062890,000268: 22,3735 13765 TCF NOSHIFT
062891,000269: 22,3736 13740 TCF +2
062892,000270: 22,3737 13765 TCF NOSHIFT
062893,000271: 22,3740 10161 CCS MPAC +5
062894,000272: 22,3741 13765 TCF NOSHIFT
062895,000273: 22,3742 13744 TCF +2
062896,000274: 22,3743 13765 TCF NOSHIFT
![]() |
Page 1479 |
062898,000276: 22,3744 30155 CA MPAC +1 # SHIFT ALL COMPONENTS LEFT 13
062899,000277: 22,3745 00006 EXTEND
062900,000278: 22,3746 74675 MP BIT14
062901,000279: 22,3747 20155 DAS MPAC # DAS GAINS A LITTLE ACCURACY
062902,000280: 22,3750 30160 CA MPAC +4
062903,000281: 22,3751 00006 EXTEND
062904,000282: 22,3752 74675 MP BIT14
062905,000283: 22,3753 20160 DAS MPAC +3
062906,000284: 22,3754 30162 CA MPAC +6
062907,000285: 22,3755 00006 EXTEND
062908,000286: 22,3756 74675 MP BIT14
062909,000287: 22,3757 20162 DAS MPAC +5
062910,000288: 22,3760 34720 CAF THIRTEEN
062911,000289: 22,3761 50156 INDEX MPAC +2
062912,000290: 22,3762 54045 TS 37D
062913,000291: 22,3763 04574 OFFTUNIT TC POSTJUMP
062914,000292: 22,3764 01024 CADR UNIT +1 # SKIP THE "TC VECAGREE" DONE AT UNIT
062915,000293:
062916,000294:
062917,000295: 22,3765 34714 NOSHIFT CAF ZERO
062918,000296: 22,3766 13761 TCF OFFTUNIT -2
062919,000297:
062920,000298:
062921,000299: # RTB VECSGNAG ...FORCES SIGN AGREEMENT OF VECTOR IN MPAC.
062922,000300:
062923,000301: 22,3767 04555 VECSGNAG TC BANKCALL
062924,000302: 22,3770 01010 CADR VECAGREE
062925,000303: 22,3771 06030 TC DANZIG
End of include-file RTB_OP_CODES.agc. Parent file is MAIN.agc