Source Code

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