Source Code
![]() |
These source-code files were derived originally from the scan from MIT's Dibner Institute's
now-discontinued website titled "History of Recent Science and Technology", which
in turn was originally created by Gary Neff, though his high-quality scans were
unfortunately reduced in legibility when presented online.
The markings on the front of the
printout imply that it was the original AGC developer Norm Brodeur's copy.
A scan by Ron Burkey has superceded it, made from a more-legible copy from the collection of original
AGC developer Fred Martin. The source code was transcribed from
those images by Ron Burkey. 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:ASSEMBLE REVISION 249 OF AGC PROGRAM COLOSSUS BY NASA 2021111-041 20'35 OCT. 28,1968Note that the date is the date of the printout, not the date of the program revision. |
063939,000002: ## Copyright: Public domain.
063940,000003: ## Filename: RT8_OP_CODES.agc
063941,000004: ## Purpose: Part of the source code for Colossus, build 249.
063942,000005: ## It is part of the source code for the Command Module's (CM)
063943,000006: ## Apollo Guidance Computer (AGC), possibly for Apollo 8 and 9.
063944,000007: ## Assembler: yaYUL
063945,000008: ## Reference: Starts on p. 1498 of 1701.pdf.
063946,000009: ## Contact: Ron Burkey <info@sandroid.org>.
063947,000010: ## Website: www.ibiblio.org/apollo.
063948,000011: ## Mod history: 08/30/04 RSB. Adapted from corresponding Luminary131 file.
063949,000012: ##
063950,000013: ## The contents of the "Colossus249" files, in general, are transcribed
063951,000014: ## from a scanned document obtained from MIT's website,
063952,000015: ## http://hrst.mit.edu/hrs/apollo/public/archive/1701.pdf. Notations on this
063953,000016: ## document read, in part:
063954,000017: ##
063955,000018: ## Assemble revision 249 of AGC program Colossus by NASA
063956,000019: ## 2021111-041. October 28, 1968.
063957,000020: ##
063958,000021: ## This AGC program shall also be referred to as
063959,000022: ## Colossus 1A
063960,000023: ##
063961,000024: ## Prepared by
063962,000025: ## Massachusetts Institute of Technology
063963,000026: ## 75 Cambridge Parkway
063964,000027: ## Cambridge, Massachusetts
063965,000028: ## under NASA contract NAS 9-4065.
063966,000029: ##
063967,000030: ## Refer directly to the online document mentioned above for further information.
063968,000031: ## Please report any errors (relative to 1701.pdf) to info@sandroid.org.
063969,000032: ##
063970,000033: ## In some cases, where the source code for Luminary 131 overlaps that of
063971,000034: ## Colossus 249, this code is instead copied from the corresponding Luminary 131
063972,000035: ## source file, and then is proofed to incorporate any changes.
063973,000036:
![]() |
Page 1498 |
063975,000038: 22,3505 BANK 22
063976,000039: 22,2000 SETLOC RTBCODES
063977,000040: 22,2000 BANK
063978,000041:
063979,000042: 22,3505 E5,1713 EBANK= XNB
063980,000043: 22,3505 COUNT* $$/RTB
063981,000044:
063982,000045: # LOAD TIME2, TIME1 INTO MPAC:
063983,000046:
063984,000047: 22,3505 00006 LOADTIME EXTEND
063985,000048: 22,3506 30025 DCA TIME2
063986,000049: 22,3507 16024 TCF SLOAD2
063987,000050:
063988,000051: # CONVERT THE SINGLE PRECISION 2'S COMPLEMENT NUMBER ARRIVING IN MPAC (SCALED IN HALF-REVOLUTIONS) TO A
063989,000052: # DP 1'S COMPLEMENT NUMBER SCALED IN REVOLUTIONS.
063990,000053:
063991,000054: 22,3510 10154 CDULOGIC CCS MPAC
063992,000055: 22,3511 34714 CAF ZERO
063993,000056: 22,3512 13515 TCF +3
063994,000057: 22,3513 13514 NOOP
063995,000058: 22,3514 44675 CS HALF
063996,000059:
063997,000060: 22,3515 54155 TS MPAC +1
063998,000061: 22,3516 34714 CAF ZERO
063999,000062: 22,3517 56154 XCH MPAC
064000,000063: 22,3520 00006 EXTEND
064001,000064: 22,3521 74675 MP HALF
064002,000065: 22,3522 20155 DAS MPAC
064003,000066: 22,3523 16030 TCF DANZIG # MODE IS ALREADY AT DOUBLE-PRECISION
064004,000067:
064005,000068: # READ THE PIPS INTO MPAC WITHOUT CHANGING THEM:
064006,000069:
064007,000070: 22,3524 00004 READPIPS INHINT
064008,000071: 22,3525 30037 CA PIPAX
064009,000072: 22,3526 54154 TS MPAC
064010,000073: 22,3527 30040 CA PIPAY
064011,000074: 22,3530 54157 TS MPAC +3
064012,000075: 22,3531 30041 CA PIPAZ
064013,000076: 22,3532 00003 RELINT
064014,000077: 22,3533 54161 TS MPAC +5
064015,000078:
064016,000079: 22,3534 34714 CAF ZERO
064017,000080: 22,3535 54155 TS MPAC +1
064018,000081: 22,3536 54160 TS MPAC +4
064019,000082: 22,3537 54162 TS MPAC +6
064020,000083:
064021,000084: 22,3540 16470 VECMODE TCF VMODE
064022,000085:
064023,000086: # FORCE TP SIGN AGREEMENT IN MPAC:
064024,000087:
064025,000088: 22,3541 07226 SGNAGREE TC TPAGREE
![]() |
Page 1499 |
064027,000090: 22,3542 16030 TCF DANZIG
064028,000091:
064029,000092: # CONVERT THE DP 1'S COMPLEMENT ANGLE SCALED IN REVOLUTIONS TO A SINGLE PRECISION 2'S COMPLEMENT ANGLE
064030,000093: # SCALED IN HALF-REVOLUTIONS.
064031,000094:
064032,000095: 22,3543 03573 1STO2S TC 1TO2SUB
064033,000096: 22,3544 34714 CAF ZERO
064034,000097: 22,3545 54155 TS MPAC +1
064035,000098: 22,3546 16027 TCF NEWMODE
064036,000099:
064037,000100: # DO 1STO2S ON A VECTOR OF ANGLES:
064038,000101:
064039,000102: 22,3547 03573 V1STO2S TC 1TO2SUB # ANSWER ARRIVES IN A AND MPAC.
064040,000103:
064041,000104: 22,3550 52162 DXCH MPAC +5
064042,000105: 22,3551 52155 DXCH MPAC
064043,000106: 22,3552 03573 TC 1TO2SUB
064044,000107: 22,3553 54156 TS MPAC +2
064045,000108:
064046,000109: 22,3554 52160 DXCH MPAC +3
064047,000110: 22,3555 52155 DXCH MPAC
064048,000111: 22,3556 03573 TC 1TO2SUB
064049,000112: 22,3557 54155 TS MPAC +1
064050,000113:
064051,000114: 22,3560 30161 CA MPAC +5
064052,000115: 22,3561 54154 TS MPAC
064053,000116:
064054,000117: 22,3562 34712 TPMODE CAF ONE # MODE IS TP.
064055,000118: 22,3563 16027 TCF NEWMODE
064056,000119:
064057,000120: # V1STO2S FOR 2 COMPONENT VECTOR. USED BY RR.
064058,000121:
064059,000122: 22,3564 03573 2V1STO2S TC 1TO2SUB
064060,000123: 22,3565 52160 DXCH MPAC +3
064061,000124: 22,3566 52155 DXCH MPAC
064062,000125: 22,3567 03573 TC 1TO2SUB
064063,000126: 22,3570 54001 TS L
064064,000127: 22,3571 30157 CA MPAC +3
064065,000128: 22,3572 16024 TCF SLOAD2
064066,000129:
064067,000130: # SUBROUTINE TO DO DOUBLING AND 1'S TO 2'S CONVERSION:
064068,000131:
064069,000132: 22,3573 52155 1TO2SUB DXCH MPAC # FINAL MPAC +1 UNSPECIFIED.
064070,000133: 22,3574 20001 DDOUBL
064071,000134: 22,3575 10000 CCS A
064072,000135: 22,3576 64712 AD ONE
064073,000136: 22,3577 13601 TCF +2
064074,000137: 22,3600 40000 COM # THIS WAS REVERSE OF MSU.
064075,000138:
064076,000139: 22,3601 54154 TS MPAC # AND SKIP ON OVERFLOW.
![]() |
Page 1500 |
064078,000141: 22,3602 00002 TC Q
064079,000142:
064080,000143: 22,3603 50000 INDEX A # OVERFLOW UNCORRECT AND IN MSU.
064081,000144: 22,3604 34673 CAF LIMITS
064082,000145: 22,3605 26154 ADS MPAC
064083,000146: 22,3606 00002 TC Q
064084,000147:
![]() |
Page 1501 |
064086,000149: # SUBROUTINE TO INCREMENT CDUS
064087,000150:
064088,000151: 22,3607 33622 INCRCDUS CAF LOCTHETA
064089,000152: 22,3610 54130 TS BUF # PLACE ADRES(THETA) IN BUF.
064090,000153: 22,3611 30154 CAE MPAC # INCREMENT IN 1'S COMPL.
064091,000154: 22,3612 03623 TC CDUINC
064092,000155:
064093,000156: 22,3613 24130 INCR BUF
064094,000157: 22,3614 30157 CAE MPAC +3
064095,000158: 22,3615 03623 TC CDUINC
064096,000159:
064097,000160: 22,3616 24130 INCR BUF
064098,000161: 22,3617 30161 CAE MPAC +5
064099,000162: 22,3620 03623 TC CDUINC
064100,000163:
064101,000164: 22,3621 13540 TCF VECMODE
064102,000165:
064103,000166: 22,3622 01155 LOCTHETA ADRES THETAD
064104,000167:
064105,000168: # THE FOLLOWING ROUTINE INCREMENTS IN 2'S COMPLEMENT THE REGISTER WHOSE ADDRESS IS IN BUF BY THE 1'S COMPL.
064106,000169: # QUANTITY FOUND IN TEM2. THIS MAY BE USED TO INCRMENT DESIRED IMU AND OPTICS CDU ANGLES OR ANY OTHER 2'S COMPL.
064107,000170: # (+0 UNEQUAL TO -0) QUANTITY. MAY BE CALLED BY BANKCALL/SWCALL.
064108,000171:
064109,000172: 22,3623 54142 CDUINC TS TEM2 # 1'S COMPL. QUANT. ARRIVES IN ACC. STORE IT
064110,000173: 22,3624 50130 INDEX BUF
064111,000174: 22,3625 10000 CCS 0 # CHANGE 2'S COMPLE. ANGEL (IN BUF) INTO 1'S
064112,000175: 22,3626 64712 AD ONE
064113,000176: 22,3627 13633 TCF +4
064114,000177: 22,3630 64712 AD ONE
064115,000178: 22,3631 64712 AD ONE # OVEFLOW HERE IF 2'S COMPL. IS 180 DEG.
064116,000179: 22,3632 40000 COM
064117,000180:
064118,000181: 22,3633 60142 AD TEM2 # SULT MOVES FROM 2ND TO 3D QUAD. (OR BACK)
064119,000182: 22,3634 10000 CCS A # BACK TO 2'S COMPL.
064120,000183: 22,3635 64712 AD ONE
064121,000184: 22,3636 13640 TCF +2
064122,000185: 22,3637 40000 COM
064123,000186: 22,3640 54142 TS TEM2 # STORE 14-BIT QUANTITY WITH PRESENT SIGN
064124,000187: 22,3641 13645 TCF +4
064125,000188: 22,3642 50000 INDEX A # SIGN.
064126,000189: 22,3643 34673 CAF LIMITS # FIX IT, BY ADDING IN 37777 OR 40000
064127,000190: 22,3644 60142 AD TEM2
064128,000191:
064129,000192: 22,3645 50130 INDEX BUF
064130,000193: 22,3646 54000 TS 0 # STORE NEW ANGLE IN 2'S COMPLEMENT.
064131,000194: 22,3647 00002 TC Q
064132,000195:
![]() |
Page 1502 |
064134,000197: # RTB TO TORQUE GYROS, EXCEPT FOR THE CALL TO IMUSTALL. ECADR OF COMMANDS ARRIVES IN X1.
064135,000198:
064136,000199: 22,3650 50120 PULSEIMU INDEX FIXLOC # ADDRESS OF GYRO COMMANDS SHOULD BE IN X1
064137,000200: 22,3651 30046 CA X1
064138,000201: 22,3652 04555 TC BANKCALL
064139,000202: 22,3653 17125 CADR IMUPULSE
064140,000203: 22,3654 16030 TCF DANZIG
064141,000204:
![]() |
Page 1503 |
064143,000206: # EACH ROUTINE TAKES A 3X3 MATRIX STORED IN DOUBLE PRECISION IN A FIXED AREA OF ERASABLE MEMORY AND REPLACES IT
064144,000207: # WITH THE TRANSPOSE MATRIX. TRANSP1 USES LOCATIONS XNB+0,+1 THROUGH XNB+16D,+17D AND TRANSP2 USES LOCATIONS
064145,000208: # XNB1+0,+1 THROUGH XNB1+16D,+17D. EACH MATRIX IS STORED BY ROWS.
064146,000209:
064147,000210: 22,3655 02713 XNBEB ECADR XNB
064148,000211: 22,3656 02554 XNB1EB ECADR XNB1
064149,000212:
064150,000213: 22,3657 E5,1713 EBANK= XNB
064151,000214:
064152,000215: 22,3657 33655 TRANSP1 CAF XNBEB
064153,000216: 22,3660 54003 TS EBANK
064154,000217: 22,3661 53716 DXCH XNB +2
064155,000218: 22,3662 53722 DXCH XNB +6
064156,000219: 22,3663 53716 DXCH XNB +2
064157,000220:
064158,000221: 22,3664 53720 DXCH XNB +4
064159,000222: 22,3665 53730 DXCH XNB +12D
064160,000223: 22,3666 53720 DXCH XNB +4
064161,000224:
064162,000225: 22,3667 53726 DXCH XNB +10D
064163,000226: 22,3670 53732 DXCH XNB +14D
064164,000227: 22,3671 53726 DXCH XNB +10D
064165,000228: 22,3672 16030 TCF DANZIG
064166,000229: 22,3673 E5,1554 EBANK= XNB1
064167,000230:
064168,000231: 22,3673 33656 TRANSP2 CAF XNB1EB
064169,000232: 22,3674 54003 TS EBANK
064170,000233: 22,3675 53557 DXCH XNB1 +2
064171,000234: 22,3676 53563 DXCH XNB1 +6
064172,000235: 22,3677 53557 DXCH XNB1 +2
064173,000236:
064174,000237: 22,3700 53561 DXCH XNB1 +4
064175,000238: 22,3701 53571 DXCH XNB1 +12D
064176,000239: 22,3702 53561 DXCH XNB1 +4
064177,000240:
064178,000241: 22,3703 53567 DXCH XNB1 +10D
064179,000242: 22,3704 53573 DXCH XNB1 +14D
064180,000243: 22,3705 53567 DXCH XNB1 +10D
064181,000244: 22,3706 16030 TCF DANZIG
064182,000245:
![]() |
Page 1504 |
064184,000247: # THE SUBROUTINE SIGNMPAC SETS C(MPAC, MPAC +1) TO SIGN(MPAC).
064185,000248: # FOR THIS, ONLY THE CONTENTS OF MPAC ARE EXAMINED. ALSO +0 YIELDS POSMAX AND -0 YIELDS NEGMAX.
064186,000249:
064187,000250: # ENTRY MAY BE BY EITHER OF THE FOLLOWING:
064188,000251: # 1. LIMIT THE SIZE OF MPAC ON INTERPRETIVE OVERFLOW:
064189,000252: # ENTRY: BOVB
064190,000253: # SIGNMPAC
064191,000254: # 2. GENERATE IN MPAC THE SIGNUM FUNCTION OF MPAC:
064192,000255: # ENTRY: RTB
064193,000256: # SIGNMPAC
064194,000257: # IN EITHER CASE, RETURN IS TO TEH NEXT INTERPRETIVE INSTRUCTION IN THE CALLING SEQUENCE.
064195,000258:
064196,000259: 22,3707 00006 SIGNMPAC EXTEND
064197,000260: 22,3710 34672 DCA DPOSMAX
064198,000261: 22,3711 52155 DXCH MPAC
064199,000262: 22,3712 10000 CCS A
064200,000263: 22,3713 34714 DPMODE CAF ZERO # SETS MPAC +2 TO ZERO IN THE PROCESS
064201,000264: 22,3714 16026 TCF SLOAD2 +2
064202,000265: 22,3715 13716 TCF +1
064203,000266: 22,3716 00006 EXTEND
064204,000267: 22,3717 44672 DCS DPOSMAX
064205,000268: 22,3720 16024 TCF SLOAD2
064206,000269:
064207,000270: # RTB OP CODE NORMUNIT IS LIKE INTERPRETIVE INSTRUCTION UNIT, EXCEPT THAT IT CAN BE DEPENDED ON NOT TO BLOW
064208,000271: # UP WHEN THE VECTOR BEING UNITIZED IS VERY SAMLL -- IT WILL BLOW UP WHEN ALL COMPONENT ARE ZERO. IF NORMUNIT
064209,000272: # IS USED AND THE UPPER ORDER HALVES OF ALL COMPONENTS ARE ERO, THE MAGNITUDE RETURNS IN 36D WILL BE TOO LARGE
064210,000273: # BY A FACTOR OF 2(13) AND THE SQURED MAGNITUDE RETURNED ATE 34D WILL BE TOO BIG BY A FACTOR OF 2(26).
064211,000274:
064212,000275: 22,3721 34712 NORMUNX1 CAF ONE
064213,000276: 22,3722 13724 TCF NORMUNIT +1
064214,000277: 22,3723 34714 NORMUNIT CAF ZERO
064215,000278: 22,3724 60120 AD FIXLOC
064216,000279: 22,3725 54156 TS MPAC +2
064217,000280: 22,3726 04555 TC BANKCALL # GET SIGN AGREEMENT IN ALL COMPONENTS
064218,000281: 22,3727 01010 CADR VECAGREE
064219,000282: 22,3730 10154 CCS MPAC
064220,000283: 22,3731 13765 TCF NOSHIFT
064221,000284: 22,3732 13734 TCF +2
064222,000285: 22,3733 13765 TCF NOSHIFT
064223,000286: 22,3734 10157 CCS MPAC +3
064224,000287: 22,3735 13765 TCF NOSHIFT
064225,000288: 22,3736 13740 TCF +2
064226,000289: 22,3737 13765 TCF NOSHIFT
064227,000290: 22,3740 10161 CCS MPAC +5
064228,000291: 22,3741 13765 TCF NOSHIFT
064229,000292: 22,3742 13744 TCF +2
064230,000293: 22,3743 13765 TCF NOSHIFT
![]() |
Page 1505 |
064232,000295: 22,3744 30155 CA MPAC +1 # SHIFT ALL COMPONENTS LEFT 13
064233,000296: 22,3745 00006 EXTEND
064234,000297: 22,3746 74675 MP BIT14
064235,000298: 22,3747 20155 DAS MPAC # DAS GAINS A LITTLE ACCURACY
064236,000299: 22,3750 30160 CA MPAC +4
064237,000300: 22,3751 00006 EXTEND
064238,000301: 22,3752 74675 MP BIT14
064239,000302: 22,3753 20160 DAS MPAC +3
064240,000303: 22,3754 30162 CA MPAC +6
064241,000304: 22,3755 00006 EXTEND
064242,000305: 22,3756 74675 MP BIT14
064243,000306: 22,3757 20162 DAS MPAC +5
064244,000307: 22,3760 34720 CAF THIRTEEN
064245,000308: 22,3761 50156 INDEX MPAC +2
064246,000309: 22,3762 54045 TS 37D
064247,000310: 22,3763 04574 OFFTUNIT TC POSTJUMP
064248,000311: 22,3764 01024 CADR UNIT +1 # SKIP THE "TC VECAGREE" DONE AT UNIT
064249,000312:
064250,000313: 22,3765 34714 NOSHIFT CAF ZERO
064251,000314: 22,3766 13761 TCF OFFTUNIT -2
064252,000315:
064253,000316: # RTB VECSGNAG ... FORCES SIGN AGREEMENT OF VECTOR IN MPAC.
064254,000317:
064255,000318: 22,3767 04555 VECSGNAG TC BANKCALL
064256,000319: 22,3770 01010 CADR VECAGREE
064257,000320: 22,3771 06030 TC DANZIG
064258,000321:
064259,000322: # *** END OF SATRAP .007 ***
064260,000323:
064261,000324:
064262,000325:
064263,000326:
End of include-file RT8_OP_CODES.agc. Parent file is MAIN.agc