Source Code

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