Source Code

042132,000001: # Copyright: Public domain. 042133,000002: # Filename: INTERPRETER.agc 042134,000003: # Purpose: A section of Luminary 1C, revision 131. 042135,000004: # It is part of the source code for the Lunar Module's (LM) 042136,000005: # Apollo Guidance Computer (AGC) for Apollo 13 and Apollo 14. 042137,000006: # This file is intended to be a faithful transcription, except 042138,000007: # that the code format has been changed to conform to the 042139,000008: # requirements of the yaYUL assembler rather than the 042140,000009: # original YUL assembler. 042141,000010: # Reference: pp. 1001-1093 of 1729.pdf. 042142,000011: # Contact: Ron Burkey <info@sandroid.org>. 042143,000012: # Website: www.ibiblio.org/apollo/index.html 042144,000013: # Mod history: 05/06/03 RSB. Began transcribing. 042145,000014: # 11/24/03 RSB. Made some obvious corrections to the comments. 042146,000015: # 05/14/05 RSB. Corrected website reference above. 042147,000016: 042148,000017: # Page 1001 042149,000018: # SECTION 1: DISPATCHER 042150,000019: 042151,000020: # ENTRY TO THE INTERPRETER. INTPRET SETS LOC TO THE FIRST INSTRUCTION, BANKSET TO THE BBANK OF THE 042152,000021: # OBJECT INTERPRETIVE PROGRAM, AND INTBIT15 TO THE BIT15 CONTENTS OF FBANK. INTERPRETIVE PROGRAMS MAY BE IN 042153,000022: # VIRTUALLY ALL BANKS PRESENT UNDER ANY SUPER-BANK SETTING, WITH THE RESTRICTION THAT PROGRAMS IN HIGH BANKS 042154,000023: # (BIT15 OF FBANK = 1) DO NOT REFER TO LOWBANKS, AND VICE-VERSA. THE INTERPRETER DOES NOT SWITCH SUPERBANKS. 042155,000024: # E-BANK SWITCHING OCCURS WHENEVER GENERAL ERASABLE (100-3777) IS ADDRESSED. 042156,000025: 042157,000026: 6042 BLOCK 03 042158,000027: 042159,000028: 6042 COUNT* $$/INTER 042160,000029: 6042 00003 INTPRET RELINT 042161,000030: 6043 00006 EXTEND # SET LOC TO THE WORD FOLLOWING THE TC. 042162,000031: 6044 22164 QXCH LOC 042163,000032: 6045 30006 +2 CA BBANK # INTERPRETIVE BRANCHES FINISH HERE. 042164,000033: 6046 54165 TS BANKSET 042165,000034: 6047 74735 MASK BIT15 # GET 15TH BIT FOR INDEXABLE ADDRESSES. 042166,000035: 6050 54115 TS INTBIT15 042167,000036: 042168,000037: 6051 54023 TS EDOP # MAKE SURE NO INSTRUCTIONS LEFT OVER 042169,000038: 042170,000039: 6052 16073 TCF NEWOPS # PICK UP OP CODE PAIR AND BEGIN. 042171,000040: 042172,000041: 6053 22006 INTRSM LXCH BBANK # RESUME SUSPENDED INTERPRETIVE JOB 042173,000042: 6054 16045 TCF INTPRET +3 042174,000043: 042175,000044: # DLOAD LOADS MPAC, MPAC +1, LEAVING ZERO IN MPAC +2. 042176,000045: 042177,000046: 6055 00006 DLOAD EXTEND 042178,000047: 6056 50116 INDEX ADDRWD 042179,000048: 6057 30001 DCA 0 # LOAD DP C(C(ADDRWD)) INT MPAC,MPAC +1 042180,000049: 6060 52155 SLOAD2 DXCH MPAC 042181,000050: 6061 34755 CAF ZERO # ZERO MPAC +2 042182,000051: 042183,000052: # Page 1002 042184,000053: # AT THE END OF MOST INSTRUCTIONS, CONTROL IS GIVEN TO DANZIG TO DISPATCH THE NEXT OPERATION. 042185,000054: 042186,000055: 6062 54156 TS MPAC +2 # AND DECLARE DP MODE 042187,000056: 042188,000057: 6063 54163 NEWMODE TS MODE # PROLOGUE FOR MODE-CHANGING INSTRUCTIONS. 042189,000058: 042190,000059: 6064 30165 DANZIG CA BANKSET # SET BBANK BEFORE TESTING NEWJOB SO THAT 042191,000060: 6065 54006 TS BBANK # IT MAY BE SAVED DIRECTLY BY CHANJOB. 042192,000061: 042193,000062: 6066 10023 NOIBNKSW CCS EDOP # SEE IF AN ORDER CODE IS LEFT OVER FROM 042194,000063: 6067 16102 TCF OPJUMP # THE LAST PAIR RETRIEVED. IF SO, EXECUTE. 042195,000064: # EDOP IS SET TO ZERO ON ITS RE-EDITIING. 042196,000065: 042197,000066: 6070 10067 CCS NEWJOB # SEE IF A JOB OF HIGHER PRIORITY IS 042198,000067: 6071 15126 TCF CHANG2 # PRESENT, AND IF SO, CHANGE JOBS. 042199,000068: 042200,000069: 6072 24164 INCR LOC # ADVANCE THE LOCATION COUNTER. 042201,000070: 042202,000071: # ITRACE (1) REFERS TO "NEWOPS" 042203,000072: 6073 50164 NEWOPS INDEX LOC # ENTRY TO BEGIN BY PICKING OP CODE PAIR. 042204,000073: 6074 30000 CA 0 # MAY BE AN OPCODE PAIR OR A STORE CODE. 042205,000074: 6075 10000 CCS A # TEST SIGN AND GET DABS(A). 042206,000075: 6076 16365 TCF DOSTORE # PROCESS STORE CODE. 042207,000076: 042208,000077: 6077 00177 LOW7 OCT 177 042209,000078: 042210,000079: 6100 54023 TS EDOP # OP CODE PAIR. LEAVE THE OTHER IN EDOP 042211,000080: 6101 76077 MASK LOW7 # WHERE CCS EDOP WILL HONOR IT NEXT. 042212,000081: 042213,000082: 6102 54020 OPJUMP TS CYR # LOWWD ENTERS HERE IF A RIGHT-HAND OP 042214,000083: 6103 10020 CCS CYR # CODE IS TO BE PROCESSED. TEST PREFICES. 042215,000084: 6104 16252 TCF OPJUMP2 # TEST SECOND PREFIX BIT. 042216,000085: 042217,000086: 6105 16746 TCF EXIT # +0 OP CODE IS EXIT 042218,000087: 042219,000088: # Page 1003 042220,000089: # PROCESS ADDRESSES WHICH MAY BE DIRECT, INDEXED, OR REFERENCE THE PUSHDOWN LIST. 042221,000090: 042222,000091: 6106 74753 ADDRESS MASK BIT1 # SEE IF ADDRESS IS INDEXED. CYR CONTAINED 042223,000092: 6107 10000 CCS A # 400XX, SO BIT 1 IS NOW AS IT WAS IN CYR. 042224,000093: 6110 16151 TCF INDEX # FORM INDEXED ADDRESS. 042225,000094: 042226,000095: 6111 50164 DIRADRES INDEX LOC # LOOK AHEAD TO NEXT WORD TO SEE IF 042227,000096: 6112 40001 OCT40001 CS 1 # ADDRESS IS GIVEN. 042228,000097: 6113 10000 CCS A 042229,000098: 6114 16220 TCF PUSHUP # IF NOT. 042230,000099: 042231,000100: 6115 77773 NEG4 DEC -4 B-14 042232,000101: 042233,000102: 6116 24164 INCR LOC # IF SO, TO SHOW WE PICKED UP A WORD. 042234,000103: 6117 54116 TS ADDRWD 042235,000104: 042236,000105: # Page 1004 042237,000106: # FINAL DIGESTION OF DIRECT ADDRESSES OF OP CODES WITH 01 PREFIX IS DONE HERE. IN EACH CASE, THE 042238,000107: # REQUIRED 12-BIT SUB-ADDRESS IS LEFT IN ADDRWD, WITH ANY REQUIRED E OR F BANK SWITCHING DONE. ADDRESSES LESS 042239,000108: # THAN 45D ARE TAKEN TO BE RELATIVE TO THE WORK AREA. THE OP CODE IS NOW IN BITS 1-5 OF CYR WITH BIT 14 = 1. 042240,000109: 042241,000110: 6120 66254 AD -ENDVAC # SEE IF ADDRESS RELATIVE TO WORK AREA. 042242,000111: 6121 10000 CCS A 042243,000112: 6122 67746 AD -ENDERAS # IF NOT, SEE IF IN GENERAL ERASABLE. 042244,000113: 6123 16130 TCF IERASTST 042245,000114: 042246,000115: 6124 30120 NETZERO CA FIXLOC # IF SO, LEAVE THE MODIFIED ADDRESS IN 042247,000116: 6125 26116 ADS ADDRWD # ADDRWD AND DISPATCH. 042248,000117: 6126 50020 ITR15 INDEX CYR # THIS INDEX MAKES THE NEXT INSTRUCTION 042249,000118: 6127 76276 7 INDJUMP -1 # TCF INDJUMP + OP, EDITING CYR. 042250,000119: 042251,000120: 6130 00006 IERASTST EXTEND 042252,000121: 6131 66141 BZMF GEADDR # GO PROCESS GENERAL-ERASABLE ADDRESS. 042253,000122: 042254,000123: 6132 75012 MASK LOW10 # FIXED BANK ADDRESS. RESTORE AND ADD B15. 042255,000124: 6133 65012 AD LOW10 # SWITCH BANKS AND LEAVE SUBADDRESS IN 042256,000125: 6134 56116 XCH ADDRWD # ADDRWD FOR OPERAND RETRIEVAL. (THIS 042257,000126: 6135 60115 AD INTBIT15 # METHOD PRECLUDES USE OF THE LAST 042258,000127: 6136 54004 TS FBANK # LOCATION IN EACH FBANK.) 042259,000128: 6137 50020 ITR12 INDEX CYR 042260,000129: 6140 76276 7 INDJUMP -1 042261,000130: 042262,000131: 6141 74357 GEADDR MASK LOW8 042263,000132: 6142 65007 AD OCT1400 042264,000133: 6143 56116 XCH ADDRWD 042265,000134: 6144 54003 TS EBANK 042266,000135: 6145 50020 ITR10 INDEX CYR 042267,000136: 6146 76276 7 INDJUMP -1 042268,000137: 042269,000138: # Page 1005 042270,000139: # THE FOLLOWING ROUTINE PROCESSES INTERPRETIVE INDEXED ADDRESSES. AN INTERPRETER INDEX REGISTER MAY 042271,000140: # CONTAIN THE ADDRESS OF ANY ERASABLE REGISTER (0-42 BEING RELATIVE TO THE VAC AREA) OR ANY INTERPRETIVE PROGRAM 042272,000141: # BANK, OR ANY INTEGER IN THAT RANGE. 042273,000142: 042274,000143: 6147 37736 DODLOAD* CAF DLOAD* # STODL* COMES HERE TO PROCESS LOAD ADR. 042275,000144: 6150 54020 TS CYR # (STOVL* ENTERS HERE). 042276,000145: 042277,000146: 6151 30120 INDEX CA FIXLOC # SET UP INDEX LOCATION. 042278,000147: 6152 54130 TS INDEXLOC 042279,000148: 6153 24164 INCR LOC # (ADDRESS ALWAYS GIVEN). 042280,000149: 6154 50164 INDEX LOC 042281,000150: 6155 40000 CS 0 042282,000151: 6156 10000 CCS A # INDEX 2 IF ADDRESS STORED COMPLEMENTED. 042283,000152: 6157 24130 INCR INDEXLOC 042284,000153: 6160 16161 NOOP 042285,000154: 042286,000155: 6161 54116 TS ADDRWD # 14 BIT ADDRESS TO ADDRWD. 042287,000156: 6162 77745 MASK HIGH4 # IF ADDRESS GREATER THAN 2K, ADD INTBIT15 042288,000157: 6163 00006 EXTEND 042289,000158: 6164 16167 BZF INDEX2 042290,000159: 6165 30115 CA INTBIT15 042291,000160: 6166 26116 ADS ADDRWD 042292,000161: 042293,000162: 6167 50130 INDEX2 INDEX INDEXLOC 042294,000163: 6170 40046 CS X1 042295,000164: 6171 26116 ADS ADDRWD # DO AUGMENT, IGNORING AND CORRECTING OVF. 042296,000165: 042297,000166: 6172 77747 MASK HIGH9 # SEE IF ADDRESS IS IN WORK AREA. 042298,000167: 6173 00006 EXTEND 042299,000168: 6174 16207 BZF INDWORK 042300,000169: 6175 77745 MASK HIGH4 # SEE IF IN FIXED BANK. 042301,000170: 6176 00006 EXTEND 042302,000171: 6177 16211 BZF INDERASE 042303,000172: 042304,000173: 6200 30116 CA ADDRWD # IN FIXED -- SWITCH BANKS AND CREATE 042305,000174: 6201 54004 TS FBANK # SUB-ADDRESS 042306,000175: 6202 75012 MASK LOW10 042307,000176: 6203 64741 AD 2K 042308,000177: 6204 54116 TS ADDRWD 042309,000178: 6205 50020 ITR11 INDEX CYR 042310,000179: 6206 36276 3 INDJUMP -1 042311,000180: 042312,000181: 6207 30120 INDWORK CA FIXLOC # MAKE ADDRWD RELATIVE TO WORK AREA. 042313,000182: 6210 16215 TCF ITR13 -1 042314,000183: 042315,000184: 6211 35007 INDERASE CA OCT1400 042316,000185: 6212 56116 XCH ADDRWD 042317,000186: 6213 54003 TS EBANK 042318,000187: 6214 74357 MASK LOW8 042319,000188: 6215 26116 -1 ADS ADDRWD 042320,000189: # Page 1006 042321,000190: 6216 50020 ITR13 INDEX CYR 042322,000191: 6217 36276 3 INDJUMP -1 042323,000192: 042324,000193: # Page 1007 042325,000194: # PUSH-UP ROUTINES. WHEN NO OPERAND ADDRESS IS GIVEN, THE APPROPRIATE OPERAND IS TAKEN FROM THE PUSH-DOWN 042326,000195: # LIST. IN MOST CASES THE MODE OF THE RESULT (VECTOR OR SCALAR) OF THE LAST ARTGHMETIC OPERATION PERFORMED 042327,000196: # IS THE SAME AS THE TYPE OF OPERAND DESIRED (ALL ADD/SUBTRACT ETC.). EXCEPTIONS TO THIS GENERAL RULE ARE LISTED 042328,000197: # BELOW (NOTE THAT IN EVERY CASE THE MODE REGISTER IS LEFT INTACT): 042329,000198: 042330,000199: # 1. VXSC AND V/SC WANT THE OPPOSITE TYPE OF OPERAND, E.G., IF THE LAST OPERATION YIELDED A VECTOR 042331,000200: # RESULT, VXSC WANTS A SCALAR. 042332,000201: 042333,000202: # 2. THE LOAD CODES SHOULD LOAD THE ACCUMULATOR INDEPENDENT OF THE RESULT OF THE LAST OPERATION. THIS 042334,000203: # INCLUDES VLOAD, DLOAD, TLOAD, PDDL, AND PDVL (NO PUSHUP WITH SLOAD). 042335,000204: 042336,000205: # 3. SOME ARITHMETIC OPERATIONS REQUIRE A STANDARD TYPE OF OPERAND REGARDLESS OF THE PREVIOUS OPERATION. 042337,000206: # THIS INCLUDES SIGN WANTING DP AND TAD REQUIRING TP. 042338,000207: 042339,000208: 6220 34360 PUSHUP CAF OCT23 # IF THE LOW 5 BITS OF CYR ARE LESS THAN 042340,000209: 6221 70020 MASK CYR # 20, THIS OP REQUIRES SPECIAL ATTENTION. 042341,000210: 6222 66225 AD -OCT10 # (NO -0). 042342,000211: 6223 10000 CCS A 042343,000212: 6224 16236 TCF REGUP # FOR ALL CODES GREATEER THAN OCT 7. 042344,000213: 042345,000214: 6225 77767 -OCT10 OCT -10 042346,000215: 042347,000216: 6226 66115 AD NEG4 # WE NOW HAVE 7 -- OP CODE (MOD4). SEE IF 042348,000217: 6227 10000 CCS A # THE OP CODE (MOD4) IS THREE (REVERSE). 042349,000218: 6230 50000 INDEX A # NO -- THE MODE IS DEFINITE. PICK UP THE 042350,000219: 6231 46247 CS NO.WDS 042351,000220: 6232 16240 TCF REGUP +2 042352,000221: 042353,000222: 6233 50163 INDEX MODE # FOR VXSC AND V/SC WE WANT THE REQUIRED 042354,000223: 6234 46245 CS REVCNT # PUSHLOC DECREMENT WITHOUT CHANGING THE 042355,000224: 6235 16240 TCF REGUP +2 # MODE AT THE IS TIME. 042356,000225: 042357,000226: 6236 50163 REGUP INDEX MODE # MOST ALL OP CODES PUSHUP HERE. 042358,000227: 6237 46247 CS NO.WDS 042359,000228: 6240 26166 +2 ADS PUSHLOC 042360,000229: 6241 54116 TS ADDRWD 042361,000230: 6242 50020 ITR14 INDEX CYR 042362,000231: 6243 76276 7 INDJUMP -1 # (THE INDEX MAKES THIS A TCF.) 042363,000232: 042364,000233: 6244 00002 OCT 2 # REVERSE PUSHUP DECREMENT. VECTOR TAKES 2 042365,000234: 6245 00006 REVCNT OCT 6 # WORDS, SCALAR TAKES 6. 042366,000235: 6246 00006 OCT 6 042367,000236: 6247 00002 NO.WDS OCT 2 # CONVENTIONAL DECREMENT IS 6 WORDS VECTOR 042368,000237: 6250 00003 OCTAL3 OCT 3 # 2 IN DP, AND 3 IN TP. 042369,000238: 6251 00006 OCT 6 042370,000239: 042371,000240: # Page 1008 042372,000241: # TEST THE SECOND PREFIX BIT TO SEE IF THIS IS A MISCELLANEOUS OR A UNARY/SHORT SHIFT OPERATION. 042373,000242: 042374,000243: 6252 10020 OPJUMP2 CCS CYR # TEST SECOND PREFIX BIT. 042375,000244: 6253 16266 TCF OPJUMP3 # TEST THIRD BIT TO SEE IF UNARY OR SHIFT 042376,000245: 042377,000246: 6254 77722 -ENDVAC DEC -45 B-14 042378,000247: 042379,000248: # THE FOLLOWING ROUTINE PROCESSES ADDRESSES OF SUFFIX CLASS 10. THEY ARE BASICALLY WORK AREA ADDRESSES 042380,000249: # IN THE RANGE 0-52, ERASABLE ECADR CONSTANTS FROM 100-3777, AND FCADRS ABOVE THAT. ALL 15 BITS ARE AVAILABLE 042381,000250: # IN CONTRAST TO SUFFIX 1, IN WHICH ONLY THE LOW ORDER 14 ARE AVAILABLE. 042382,000251: 042383,000252: 6255 24164 15BITADR INCR LOC # (ENTRY HERE FROM STCALL). 042384,000253: 6256 50164 INDEX LOC # PICK UP ADDRESS WORD. 042385,000254: 6257 30000 CA 0 042386,000255: 6260 54117 TS POLISH # WE MAY NEED A SUBADDRESS LATER. 042387,000256: 042388,000257: 6261 35013 CAF LOW7+2K # THESE INSTRUCTIONS ARE IN BANK 1. 042389,000258: 6262 54004 TS FBANK 042390,000259: 6263 70020 MASK CYR 042391,000260: 6264 50000 ITR7 INDEX A 042392,000261: 6265 16337 TCF MISCJUMP 042393,000262: 042394,000263: # Page 1009 042395,000264: # COMPLETE THE DISPATCHING OF UNARY AND SHORT SHIFT OPERATIONS. 042396,000265: 042397,000266: 6266 54004 OPJUMP3 TS FBANK # CALL IN BANK 0 (BIT5S 11-15 OF A ARE 0.) 042398,000267: 042399,000268: 6267 10020 CCS CYR # TEST THIRD PREFIX BIT. 042400,000269: 6270 50000 INDEX A # THE DECREMENTED UNARY CODE IS IN BITS 042401,000270: 6271 12000 TCF UNAJUMP # 1-4 OF A (ZERO, EXIT, HAS BEEN DETECTED) 042402,000271: 042403,000272: 6272 10163 CCS MODE # IT'S A SHORT SHIFT CODE. SEE IF PRESENT 042404,000273: 6273 12017 TCF SHORTT # SCALAR OR VECTOR. 042405,000274: 6274 12017 TCF SHORTT 042406,000275: 6275 12121 TCF SHORTV # CALLS THE APPROPRIATE ROUTINE. 042407,000276: 042408,000277: 6276 4350 FBANKMSK EQUALS BANKMASK 042409,000278: 6276 00122 LVBUF ADRES VBUF 042410,000279: 042411,000280: # Page 1010 042412,000281: # THE FOLLOWING IS THE JUMP TABLE FOR OP CODES WHICH MAY HAVE INDEXABLE ADDRESSES OR MAY PUSH UP. 042413,000282: 042414,000283: 6277 16510 INDJUMP TCF VLOAD # 00 -- LOAD MPAC WITH A VECTOR. 042415,000284: 6300 17074 TCF TAD # 01 -- TRIPLE PRECISION ADD TO MPAC. 042416,000285: 6301 17660 TCF SIGN # 02 -- COMPLEMENT MPAC (V OR SC) IF X NEG. 042417,000286: 6302 17404 TCF VXSC # 03 -- VECTOR TIMES SCALAR. 042418,000287: 6303 16706 TCF CGOTO # 04 -- COMPUTED GO TO. 042419,000288: 6304 16473 TCF TLOAD # 05 -- LOAD MPAC WITH TRIPLE PRECISION. 042420,000289: 6305 16055 TCF DLOAD # 06 -- LOAD MPAC WITH A DP SCALAR. 042421,000290: 6306 17627 TCF V/SC # 07 -- VECTOR DIVIDED BY A SCALAR. 042422,000291: 042423,000292: 6307 16504 TCF SLOAD # 10 -- LOAD MPACIN SINGLE PRECISION. 042424,000293: 6310 16623 TCF SSP # 11 -- SET SINGLE PRECISION INTO X. 042425,000294: 6311 16526 TCF PDDL # 12 -- PUSH DOWN MPAC AND RE-LOAD IN DP. 042426,000295: 6312 17337 TCF MXV # 13 -- MATRIX POST-MULTIPLIED BY VECTOR. 042427,000296: 6313 16562 TCF PDVL # 14 -- PUSH DOWN AND VECTORLOAD. 042428,000297: 6314 16631 TCF CCALL # 15 -- COMPUTED CALL. 042429,000298: 6315 17342 TCF VXM # 16 -- MATRIX PRE-MULTIPLIED BY VECTOR. 042430,000299: 6316 17621 TCF TSLC # 17 -- NORMALIZE MPAC (SCALAR ONLY). 042431,000300: 042432,000301: 6317 17577 TCF DMPR # 20 -- DP MULTIPLY AND ROUND. 042433,000302: 6320 17602 TCF DDV # 21 -- DP DIVIDE BY. 042434,000303: 6321 17606 TCF BDDV # 22 -- DP DIVIDE INTO. 042435,000304: 6322 17624 TCF GSHIFT # 23 -- GENERAL SHIFT INSTRUCTION 042436,000305: 6323 16754 TCF VAD # 24 -- VECTOR ADD. 042437,000306: 6324 16752 TCF VSU # 25 -- VECTOR SUBTRACT. 042438,000307: 6325 17041 TCF BVSU # 26 -- VECTOR SUBTRACT FROM. 042439,000308: 6326 17334 TCF DOT # 27 -- VECTOR DOT PRODUCT. 042440,000309: 042441,000310: 6327 17463 TCF VXV # 30 -- VECTOR CROSS PRODUCT. 042442,000311: 6330 17430 TCF VPROJ # 31 -- VECTOR PROJECTION. 042443,000312: 6331 17010 TCF DSU # 32 -- DP SUBTRACT. 042444,000313: 6332 17065 TCF BDSU # 33 -- DP SUBTRACT FROM. 042445,000314: 6333 17000 TCF DAD # 34 -- DP ADD. 042446,000315: 6334 16334 TCF +0 # 35 -- AVAILABLE 042447,000316: 6335 17575 TCF DMP1 # 36 -- DP MULTIPLY. 042448,000317: 6336 17616 TCF SETPD # 37 -- SET PUSH DOWN POINTER (DIRECT ONLY) 042449,000318: 042450,000319: # CODES 10 AND 14 MUST NOT PUSH UP. CODE 04 MAY BE USED FOR VECTOR DECLARE BEFORE PUSHUP IF DESIRED. 042451,000320: 042452,000321: # Page 1011 042453,000322: # THE FOLLOWING JUMP TABLE APPLIES TO INDEX, BRANCH, AND MISCELLANEOUS INSTRUCTIONS. 042454,000323: 042455,000324: 6337 12345 MISCJUMP TCF AXT # 00 -- ADDRESS TO INDEX TRUE. 042456,000325: 6340 12352 TCF AXC # 01 -- ADDRESS TO INDEX COMPLEMENTED. 042457,000326: 6341 12355 TCF LXA # 02 -- LOAD INDEX FROM ERASABLE. 042458,000327: 6342 12361 TCF LXC # 03 -- LOAD INDEX FROM COMPLEMENT OF ERAS. 042459,000328: 6343 12365 TCF SXA # 04 -- STORE INDEX IN ERASABLE. 042460,000329: 6344 12373 TCF XCHX # 05 -- EXCHANGE INDEX WITH ERASABLE. 042461,000330: 6345 12407 TCF INCR # 06 -- INCREMENT INDEX REGISTER. 042462,000331: 6346 12416 TCF TIX # 07 -- TRANSFER ON INDEX. 042463,000332: 042464,000333: 6347 12401 TCF XAD # 10 -- INDEX REGISTER ADD FROM ERASABLE. 042465,000334: 6350 12412 TCF XSU # 11 -- INDEX SUBTRACT FROM ERASABLE. 042466,000335: 6351 12470 TCF BZE/GOTO # 12 -- BRANCH ZERO AND GOTO 042467,000336: 6352 12475 TCF BPL/BMN # 13 -- BRANCH PLUS AND BRANCH MINUS. 042468,000337: 6353 12450 TCF RTB/BHIZ # 14 -- RETURN TO BASIC AND BRANCH HI ZERO. 042469,000338: 6354 12510 TCF CALL/ITA # 15 -- CALL AND STORE QPRET. 042470,000339: 6355 12517 TCF SW/ # 16 -- SWITCH INSTRUCTIONS AND AVAILABLE. 042471,000340: 6356 12460 TCF BOV(B) # 17 -- BRANCH ON OVERFLOW TO BASIC OR INT. 042472,000341: 042473,000342: # Page 1012 042474,000343: 6357 COUNT* $$/INTER 042475,000344: 00,2000 BANK 0 # 00 -- EXIT -- DETECTED EARLIER. 042476,000345: 00,2000 13207 UNAJUMP TCF SQRT # 01 -- SQUARE ROOT. 042477,000346: 00,2001 13530 TCF SINE # 02 -- SIN. 042478,000347: 00,2002 13517 TCF COSINE # 03 -- COS. 042479,000348: 00,2003 13610 TCF ARCSIN # 04 -- ARC SIN. 042480,000349: 00,2004 13612 TCF ARCCOS # 05 -- ARC COS. 042481,000350: 00,2005 13174 TCF DSQ # 06 -- DP SQUARE. 042482,000351: 00,2006 12116 TCF ROUND # 07 -- ROUND TO DP. 042483,000352: 042484,000353: 00,2007 17673 TCF COMP # 10 -- COMPLEMENT VECTOR OR SCALAR 042485,000354: 00,2010 13232 TCF VDEF # 11 -- VECTOR DEFINE. 042486,000355: 00,2011 13023 TCF UNIT # 12 -- UNIT VECTOR. 042487,000356: 00,2012 13176 TCF ABVALABS # 13 -- LENGTH OF VECTOR OR MAG OF SCALAR. 042488,000357: 00,2013 13245 TCF VSQ # 14 -- SQUARE OF LENGTH OF VECTOR. 042489,000358: 00,2014 16357 TCF STADR # 15 -- PUSH UP ON STORE CODE. 042490,000359: 00,2015 13274 TCF RVQ # 16 -- RETURN VIA QPRET. 042491,000360: 00,2016 13247 TCF PUSH # 17 -- PUSH MPAC DOWN. 042492,000361: 042493,000362: # Page 1013 042494,000363: # SECTION 2 LOAD AND STORE PACKAGE. 042495,000364: 042496,000365: # A SET OF EIGHT STORE CODES IS PROVIDED AS THE PRIMARY METHOD OF STORING THE MULTI-PURPOSE 042497,000366: # ACCUMULATOR (MPAC). IF IN THE DANZIG SECTION LOC REFERS TO AN ALGEBRAICALLY POSITIVE WORD, IT IS TAKEN AS A 042498,000367: # STORE CODE WITH A CORRESPONDING ERASABLE ADDRESS. MOST OF THESE CODES ARE TWO ADDRESS, SPECIFYING THAT THE WORD 042499,000368: # FOLLOWING THE STORE CODE IS TO BE USED AS AN ADDRESS FROM WHICH TO RE-LOAD MPAC. FOUR OPTIONS ARE AVAILABLE: 042500,000369: 042501,000370: # 1. STORE STORE MPAC. THE E ADDRESS MAY BE INDEXED. 042502,000371: # 2. STODL STORE MPAC AND RE-LOAD IT IN DP WITH THE NEXT ADDRESS (THE LOAD MAY BE INDEXED). 042503,000372: # 3. STOVL STORE MPAC AND RE-LOAD A VECTOR (AS ABOVE). 042504,000373: # 4. STCALL STORE AND DO A CALL (BOTH ADDRESES MUST BE DIRECT HERE). 042505,000374: 042506,000375: # STODL AND STOVL WILL TAKE FROM THE PUSH-DOWN LIST IF NO LOAD ADDRESS IS GIVEN. 042507,000376: 042508,000377: 6357 BLOCK 3 042509,000378: 042510,000379: 6357 COUNT* $$/INTER 042511,000380: 6357 30165 STADR CA BANKSET # THE STADR CODE (PUSHUP UP ON STORE 042512,000381: 6360 54004 TS FBANK # ADDRESS) ENTERS HERE. 042513,000382: 6361 24164 INCR LOC 042514,000383: 6362 50164 ITR1 INDEX LOC # THE STORECODE WAS STORED COMPLEMENTED TO 042515,000384: 6363 40000 CS 0 # MAKE IT LOOK LIKE AN OPCODE PAIR. 042516,000385: 6364 67752 AD NEGONE # (YUL CAN'T REMOVE 1 BECAUSE OF EARLY CCS) 042517,000386: 042518,000387: 6365 54116 DOSTORE TS ADDRWD 042519,000388: 6366 74356 MASK LOW11 # ENTRY FROM DISPATCHER. SAVE THE ARASABLE 042520,000389: 6367 56116 XCH ADDRWD # ADDRESS AND JUMP ON THE STORE CODE NO. 042521,000390: 6370 77725 MASK B12T14 042522,000391: 6371 00006 EXTEND 042523,000392: 6372 74747 MP BIT5 # EACH TRANSFER VECTOR ENTRY IS TWO WORDS. 042524,000393: 6373 50000 INDEX A 042525,000394: 6374 16375 TCF STORJUMP 042526,000395: 042527,000396: # Page 1014 042528,000397: # STORE CODE JUMP TABLE. CALLS THE APPROPRIATE STORING ROUTINE AND EXITS TO DANZIG OR TO ADDRESS WITH 042529,000398: # A SUPPLIED OPERATION CODE. 042530,000399: 042531,000400: # STORE STORE,1 AND STORE,2 RETURN TO DANZIG, THUS RESETTING THE EBANK TO ITS STATE AT INTPRET. 042532,000401: 042533,000402: 6375 06425 STORJUMP TC STORE # STORE. 042534,000403: 6376 16064 TCF DANZIG # PICK UP NEW OP CODE(S). 042535,000404: 6377 06417 TC STORE,1 042536,000405: 6400 16064 TCF DANZIG 042537,000406: 6401 06422 TC STORE,2 042538,000407: 6402 16064 TCF DANZIG 042539,000408: 042540,000409: 6403 06425 TC STORE # STODL. 042541,000410: 6404 16463 TCF DODLOAD 042542,000411: 042543,000412: 6405 06425 TC STORE # STODL WITH INDEXED LOAD ADDRESS. 042544,000413: 6406 16147 TCF DODLOAD* 042545,000414: 042546,000415: 6407 06425 TC STORE # STOVL. 042547,000416: 6410 16466 TCF DOVLOAD 042548,000417: 042549,000418: 6411 06425 TC STORE # STOVL WITH INDEXED LOAD ADDRESS. 042550,000419: 6412 16471 TCF DOVLOAD* 042551,000420: 6413 06425 TC STORE # STOTC. 042552,000421: 6414 34766 CAF CALLCODE 042553,000422: 6415 54020 TS CYR 042554,000423: 6416 16255 TCF 15BITADR # GET A 15 BIT ADDRESS. 042555,000424: 042556,000425: # Page 1015 042557,000426: # STORE CODE ADDRESS PROCESSOR. 042558,000427: 042559,000428: 6417 50120 STORE,1 INDEX FIXLOC 042560,000429: 6420 40046 CS X1 042561,000430: 6421 16424 TCF PRESTORE 042562,000431: 042563,000432: 6422 50120 STORE,2 INDEX FIXLOC 042564,000433: 6423 40047 CS X2 042565,000434: 6424 26116 PRESTORE ADS ADDRWD # RESULTANT ADDRESS IS IN ERASABLE. 042566,000435: 042567,000436: 6425 40116 STORE CS ADDRWD 042568,000437: 6426 64772 AD DEC45 042569,000438: 6427 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA? 042570,000439: 6430 30120 CA FIXLOC # YES. 042571,000440: 6431 16436 TCF AHEAD5 042572,000441: 6432 35007 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS. 042573,000442: 6433 56116 XCH ADDRWD 042574,000443: 6434 54003 TS EBANK 042575,000444: 6435 74357 MASK LOW8 042576,000445: 6436 26116 AHEAD5 ADS ADDRWD 042577,000446: 042578,000447: # Page 1016 042579,000448: # STORING ROUTINES. STORE DP, TP, OR VECTOR AS INDICATED BY MODE. 042580,000449: 042581,000450: 6437 00006 STARTSTO EXTEND # MPAC,+1 MUST BE STORED IN ANY EVENT. 042582,000451: # ITRACE (5) REFERS TO "STARTSTO". 042583,000452: 6440 30155 DCA MPAC 042584,000453: 6441 50116 INDEX ADDRWD 042585,000454: 6442 52001 DXCH 0 042586,000455: 042587,000456: 6443 10163 CCS MODE 042588,000457: 6444 16457 TCF TSTORE 042589,000458: 6445 00002 TC Q 042590,000459: 042591,000460: 6446 00006 VSTORE EXTEND 042592,000461: 6447 30160 DCA MPAC +3 042593,000462: 6450 50116 INDEX ADDRWD 042594,000463: 6451 52003 DXCH 2 042595,000464: 042596,000465: 6452 00006 EXTEND 042597,000466: 6453 30162 DCA MPAC +5 042598,000467: 6454 50116 INDEX ADDRWD 042599,000468: 6455 52005 DXCH 4 042600,000469: 6456 00002 TC Q 042601,000470: 042602,000471: 6457 30156 TSTORE CA MPAC +2 042603,000472: 6460 50116 INDEX ADDRWD 042604,000473: 6461 54002 TS 2 042605,000474: 6462 00002 TC Q 042606,000475: 042607,000476: # Page 1017 042608,000477: # ROUTINES TO BEGIN PROCESSING OF THE SECOND ADDRES ASSOCIATED WITH ALL STORE-TYPE CODES EXCEPT STORE 042609,000478: # ITSELF. 042610,000479: 042611,000480: 6463 37735 DODLOAD CAF DLOADCOD 042612,000481: 6464 54020 TS CYR 042613,000482: 6465 16111 TCF DIRADRES # GO GET A DIRECT ADDRESS. 042614,000483: 042615,000484: 6466 34735 DOVLOAD CAF VLOADCOD 042616,000485: 6467 54020 TS CYR 042617,000486: 6470 16111 TCF DIRADRES 042618,000487: 042619,000488: 6471 36112 DOVLOAD* CAF VLOAD* 042620,000489: 6472 16150 TCF DODLOAD* +1 # PROLOGUE TO INDEX ROUTINE. 042621,000490: 042622,000491: # Page 1018 042623,000492: # THE FOLLOWING LOAD INSTRUCTIONS ARE PROVIDED FOR LOADING THE MULTI-PURPOSE ACCUMULATOR MPAC. 042624,000493: 042625,000494: 6473 50116 TLOAD INDEX ADDRWD 042626,000495: 6474 30002 CA 2 # LOAD A TRIPLE PRECISION ARGUMENT INTO 042627,000496: 6475 54156 TS MPAC +2 # THE FIRST THREE MPAC REGISTERS, WITH THE 042628,000497: 6476 00006 EXTEND # CONTENTS OF THE OTHER FOUR IRRELEVANT. 042629,000498: 6477 50116 INDEX ADDRWD 042630,000499: 6500 30001 DCA 0 042631,000500: 6501 52155 DXCH MPAC 042632,000501: 6502 34753 TMODE CAF ONE 042633,000502: 6503 16063 TCF NEWMODE # DECLEARE TRIPLE PRECISION MODE. 042634,000503: 042635,000504: 6504 22007 SLOAD ZL # LOAD A SINGLE PRECISION NUMBER INTO 042636,000505: 6505 50116 INDEX ADDRWD # MPAC, SETTING MPAC+1,2 TO ZERO. THE 042637,000506: 6506 30000 CA 0 # CONTENTS OF THE REMAINING MPAC REGISTERS 042638,000507: 6507 16060 TCF SLOAD2 # ARE IRRELEVANT. 042639,000508: 042640,000509: 6510 00006 VLOAD EXTEND # LOAD A DOUBLE PRECISION VECTOR INTO 042641,000510: 6511 50116 INDEX ADDRWD # MPAC,+1, MPAC+3,4, AND MPAC+5,6. THE 042642,000511: 6512 30001 DCA 0 # CONTENTS OF MPAC +2 ARE IRRELEVANT. 042643,000512: 6513 52155 DXCH MPAC 042644,000513: 042645,000514: 6514 00006 ENDVLOAD EXTEND # PDVL COMES HERE TO FINISH UP FOR DP, TP. 042646,000515: 6515 50116 INDEX ADDRWD 042647,000516: 6516 30003 DCA 2 042648,000517: 6517 52160 DXCH MPAC +3 042649,000518: 042650,000519: 6520 00006 +4 EXTEND # TPDVL FINISHES HERE. 042651,000520: 6521 50116 INDEX ADDRWD 042652,000521: 6522 30005 DCA 4 042653,000522: 6523 52162 DXCH MPAC +5 042654,000523: 042655,000524: 6524 44753 VMODE CS ONE # DECLARE VECTOR MODE. 042656,000525: 6525 16063 TCF NEWMODE 042657,000526: 042658,000527: # Page 1019 042659,000528: # THE FOLLOWING INSTRUCTIONS ARE PROVIDED FOR STORING OPERANDS IN THE PUSHDOWN LIST: 042660,000529: # 1. PUSH PUSHDOWN AND NO LOAD. 042661,000530: # 2. PDDL PUSHDOWN AND DOUBLE PRECISION LOAD. 042662,000531: # 3. PDVL PUSHDOWN AND VECTOR LOAD. 042663,000532: 042664,000533: 6526 00006 PDDL EXTEND 042665,000534: 6527 50116 INDEX ADDRWD # LOAD MPAC,+1, PUSHING THE FORMER 042666,000535: 6530 30001 DCA 0 # CONTENTS DOWN. 042667,000536: 6531 52155 DXCH MPAC 042668,000537: 6532 50166 INDEX PUSHLOC 042669,000538: 6533 52001 DXCH 0 042670,000539: 042671,000540: 6534 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER APPRO- 042672,000541: 6535 36247 CAF NO.WDS # PRIATELY. 042673,000542: 6536 26166 ADS PUSHLOC 042674,000543: 042675,000544: 6537 10163 CCS MODE 042676,000545: 6540 16555 TCF ENDTPUSH 042677,000546: 6541 16553 TCF ENDDPUSH 042678,000547: 042679,000548: 6542 54163 TS MODE # NOW DP. 042680,000549: 6543 54156 ENDVPUSH TS MPAC +2 042681,000550: 6544 52160 DXCH MPAC +3 # PUSH DOWN THE REST OF THE VECTOR HERE. 042682,000551: 6545 50166 INDEX PUSHLOC 042683,000552: 6546 51775 DXCH 0 -4 042684,000553: 042685,000554: 6547 52162 DXCH MPAC +5 042686,000555: 6550 50166 INDEX PUSHLOC 042687,000556: 6551 51777 DXCH 0 -2 042688,000557: 042689,000558: 6552 16064 TCF DANZIG 042690,000559: 042691,000560: 6553 54156 ENDDPUSH TS MPAC +2 # SET MPAC +2 TO ZERO AND EXIT ON DP. 042692,000561: 6554 16064 TCF DANZIG 042693,000562: 042694,000563: 6555 54163 ENDTPUSH TS MODE 042695,000564: 6556 56156 XCH MPAC +2 # ON TRIPLE, SET MPAC +2 TO ZERO, PUSHING 042696,000565: 6557 50166 +2 INDEX PUSHLOC # DOWN THE OLD CONTENTS 042697,000566: 6560 53777 TS 0 -1 042698,000567: 6561 16064 TCF DANZIG 042699,000568: 042700,000569: # Page 1020 042701,000570: # PDVL -- PUSHDOWN AND VECTOR LOAD 042702,000571: 042703,000572: 6562 00006 PDVL EXTEND # RELOAD MPAC AND PUSH DOWN ITS CONTENTS. 042704,000573: 6563 50116 INDEX ADDRWD 042705,000574: 6564 30001 DCA 0 042706,000575: 6565 52155 DXCH MPAC 042707,000576: 6566 50166 INDEX PUSHLOC 042708,000577: 6567 52001 DXCH 0 042709,000578: 042710,000579: 6570 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER. 042711,000580: 6571 36247 CAF NO.WDS 042712,000581: 6572 26166 ADS PUSHLOC 042713,000582: 042714,000583: 6573 10163 CCS MODE # TEST PAST MODE. 042715,000584: 6574 16613 TCF TPDVL 042716,000585: 6575 16514 TCF ENDVLOAD # JUST LOAD LAST FOUR REGISTERS ON DP. 042717,000586: 042718,000587: 6576 00006 VPDVL EXTEND # PUSHDOWN AND RE-LOAD LAST TWO COMPONENTS 042719,000588: 6577 50116 INDEX ADDRWD 042720,000589: 6600 30003 DCA 2 042721,000590: 6601 52160 DXCH MPAC +3 042722,000591: 6602 50166 INDEX PUSHLOC 042723,000592: 6603 51775 DXCH 0 -4 042724,000593: 042725,000594: 6604 00006 EXTEND 042726,000595: 6605 50116 INDEX ADDRWD 042727,000596: 6606 30005 DCA 4 042728,000597: 6607 52162 DXCH MPAC +5 042729,000598: 6610 50166 INDEX PUSHLOC 042730,000599: 6611 51777 DXCH 0 -2 042731,000600: 042732,000601: 6612 16064 TCF DANZIG 042733,000602: 042734,000603: 6613 00006 TPDVL EXTEND # ON TP, WE MUST LOAD THE Y COMPONENT 042735,000604: 6614 50116 INDEX ADDRWD # BEFORE STORING MPAC +2 IN CASE THIS IS A 042736,000605: 6615 30003 DCA 2 # PUSHUP. 042737,000606: 6616 52160 DXCH MPAC +3 042738,000607: 042739,000608: 6617 30156 CA MPAC +2 042740,000609: 6620 50166 INDEX PUSHLOC # IN DP. 042741,000610: 6621 53777 TS 0 -1 042742,000611: 6622 16520 TCF ENDVLOAD +4 042743,000612: 042744,000613: # SSP (STORE SINGLE PRECISION) IS EXECUTED HERE. 042745,000614: 042746,000615: 6623 24164 SSP INCR LOC # PICK UP THE WORD FOLLOWING THE GIVEN 042747,000616: 6624 50164 INDEX LOC # ADDRESS AND STORE IT AT X. 042748,000617: 6625 30000 CA 0 042749,000618: 6626 50116 STORE1 INDEX ADDRWD # SOME INDEX AND MISCELLANEOUS OPS END 042750,000619: 6627 54000 TS 0 # HERE. 042751,000620: # Page 1021 042752,000621: 6630 16064 TCF DANZIG 042753,000622: 042754,000623: # Page 1022 042755,000624: # SEQUENCE CHANGING AND SUBROUTINE CALLING OPTIONS. 042756,000625: 042757,000626: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR SEQUENCING CHANGING, BRANCHING, AND CALLING SUBROUTINES: 042758,000627: # 1. GOTO GO TO. 042759,000628: # 2. CALL CALL SUBROUTINE SETTING QPRET. 042760,000629: # 3. CGOTO COMPUTED GO TO. 042761,000630: # 4. CCALL COMPUTED CALL. 042762,000631: # 7. BPL BRANCH IF MPAC POSITIVE OR ZERO. 042763,000632: # 8. BZE BRANCH IF MPAC ZERO. 042764,000633: # 9. BMN BRANCH IF MPAC NEGATIVE NON-ZERO. 042765,000634: 042766,000635: 6631 24164 CCALL INCR LOC # MAINTAIN LOC FOR QPRET COMPUTATION 042767,000636: 6632 50164 INDEX LOC 042768,000637: # Was CAF --- RSB 2004. 042769,000638: 6633 30000 CA 0 # GET BASE ADDRESS OF CADR LIST. 042770,000639: 6634 50116 INDEX ADDRWD 042771,000640: 6635 60000 AD 0 # ADD INCREMENT. 042772,000641: 6636 54004 TS FBANK # SELECT DESIRED CADR. 042773,000642: 6637 75012 MASK LOW10 042774,000643: 6640 50000 INDEX A 042775,000644: 6641 32000 CAF 10000 042776,000645: 6642 54117 TS POLISH 042777,000646: 042778,000647: 6643 30165 CALL CA BANKSET # FOR ANY OF THE CALL OPTIONS, MAKE UP THE 042779,000648: 6644 74350 MASK BANKMASK # ADDRESS OF THE NEXT OP-CODE PAIR/STORE 042780,000649: 6645 64350 AD BANKMASK # CODE AND LEAVE IT IN QPRET. NOTE THAT 042781,000650: 6646 60164 AD LOC # BANKMASK = -(2000 - 1). 042782,000651: 6647 50120 INDEX FIXLOC 042783,000652: 6650 54052 TS QPRET 042784,000653: 042785,000654: 6651 30117 GOTO CA POLISH # BASIC BRANCHING SEQUENCE. 042786,000655: 6652 77745 +1 MASK HIGH4 042787,000656: 6653 00006 EXTEND 042788,000657: 6654 16665 BZF GOTOERS # SEE IF ADDRESS POINTS TO FIXED OR ERAS. 042789,000658: 6655 30165 +4 CA BANKSET # SET EBANK PART OF BBANK. NEXT, SET UP 042790,000659: 6656 54006 TS BBANK # FBANK. THE COMBINATION IS PICKED UP & 042791,000660: 6657 30117 CA POLISH # PUT INTO BANKSET AT INTPRET +2. 042792,000661: 6660 54004 TS FBANK 042793,000662: 6661 75012 MASK LOW10 042794,000663: 6662 64741 AD 2K 042795,000664: 6663 54164 TS LOC 042796,000665: 6664 16045 TCF INTPRET +3 042797,000666: 042798,000667: 6665 E3,1400 EBANK= 1400 # SO YUL DOESN'T CUSS THE "CA 1400" BELOW. 042799,000668: 042800,000669: 6665 30117 GOTOERS CA POLISH # THE GIVEN ADDRESS IS IN ERASABLE -- SEE 042801,000670: 6666 66254 AD -ENDVAC # IF RELATIVE TO THE WORK ARA. 042802,000671: 6667 10000 CCS A 042803,000672: 6670 30117 CA POLISH # GENERAL ERASABLE. 042804,000673: 6671 16700 TCF GOTOGE 042805,000674: 042806,000675: # Page 1023 042807,000676: 6672 30120 CA FIXLOC # WORK AREA. 042808,000677: 6673 60117 AD POLISH 042809,000678: 6674 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF 042810,000679: 6675 30000 CA 0 # THE BRANCH ADDRESS. 042811,000680: 6676 54117 TS POLISH 042812,000681: 6677 16652 TCF GOTO +1 # ALLOWS ARBITRARY INDIRECTNESS LEVELS. 042813,000682: 042814,000683: 6700 54003 GOTOGE TS EBANK 042815,000684: 6701 74357 MASK LOW8 042816,000685: 6702 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF 042817,000686: 6703 31400 CA 1400 # THE BRANCH ADDRESS. 042818,000687: 6704 54117 TS POLISH 042819,000688: 6705 16652 TCF GOTO +1 042820,000689: 042821,000690: 6706 50164 CGOTO INDEX LOC # COMPUTED GO TO. PICK UP ADDRESS OF CADR 042822,000691: 6707 30001 CA 1 # LIST 042823,000692: 6710 50116 INDEX ADDRWD # ADD MODIFIER. 042824,000693: 6711 60000 AD 0 042825,000694: 6712 54004 TS FBANK # SELECT GOTO ADDRESS 042826,000695: 6713 75012 MASK LOW10 042827,000696: 6714 50000 INDEX A 042828,000697: 6715 32000 CA 10000 042829,000698: 6716 54117 TS POLISH 042830,000699: 6717 16652 TCF GOTO +1 # WITH ADDRESS IN A. 042831,000700: 042832,000701: 6720 30165 SWBRANCH CA BANKSET # SWITCH INSTRUCTIONS WHICH ELECT TO 042833,000702: 6721 54004 TS FBANK # BRANCH COME HERE TO DO SO. 042834,000703: 6722 50164 INDEX LOC 042835,000704: 6723 30001 CA 1 042836,000705: 6724 54117 TS POLISH 042837,000706: 6725 16652 TCF GOTO +1 042838,000707: 042839,000708: # Page 1024 042840,000709: # TRIPLE PRECISION BRANCHING ROUTINE. IF CALLING TC IS AT L, RETURN IS AS FOLLOWS: 042841,000710: # L+1 IF MPAC IS GREATER THAN ZERO. 042842,000711: # L+2 IF MPAC IS EQUAL TO +0 OR -0. 042843,000712: # L+3 IF MPAC IS LESS THAN ZERO. 042844,000713: 042845,000714: 6726 10154 BRANCH CCS MPAC 042846,000715: 6727 00002 TC Q 042847,000716: 6730 16732 TCF +2 # ON ZERO. 042848,000717: 6731 16744 TCF NEG 042849,000718: 042850,000719: 6732 10155 CCS MPAC +1 042851,000720: 6733 00002 TC Q 042852,000721: 6734 16736 TCF +2 042853,000722: 6735 16744 TCF NEG 042854,000723: 042855,000724: 6736 10156 CCS MPAC +2 042856,000725: 6737 00002 TC Q 042857,000726: 6740 16742 TCF +2 042858,000727: 6741 16744 TCF NEG 042859,000728: 042860,000729: 6742 50002 Q+1 INDEX Q 042861,000730: 6743 00001 TC 1 042862,000731: 042863,000732: 6744 50002 NEG INDEX Q # IF FIRST NON-ZERO REGISTER WAS NEGATIVE. 042864,000733: 6745 00002 TC 2 042865,000734: 042866,000735: 6746 6744 Q+2 = NEG 042867,000736: 042868,000737: # ITRACE (3) REFERS TO "EXIT". 042869,000738: 042870,000739: 6746 30165 EXIT CA BANKSET # RESTORE USER'S BANK SETTING, AND LEAVE 042871,000740: 6747 54006 TS BBANK # INTERPRETIVE MODE. 042872,000741: 6750 50164 INDEX LOC 042873,000742: 6751 00001 TC 1 042874,000743: 042875,000744: # Page 1025 042876,000745: # SECTION 3 -- ADD/SUBTRACT PACKAGE. 042877,000746: 042878,000747: # THE FOLLOWING OPERATIONS ARE PROVIDED FOR ADDING TO AND SUBTRACTING FROM THE MULTI-PURPOSE ACCUMULATOR 042879,000748: # MPAC: 042880,000749: # 1. DAD DOUBLE PRECISION ADD. 042881,000750: # 2. DSU DOUBLE PRECISION SUBTRACT. 042882,000751: # 3. BDSU DOUBLE PRECISION SUBTRACT FROM. 042883,000752: # 4. TAD TRIPLE PRECISION ADD. 042884,000753: # 5. VAD VECTOR ADD. 042885,000754: # 6. VSU VECTOR SUBTRACT. 042886,000755: # 7. BVSU VECTOR SUBTRACT FROM. 042887,000756: # THE INTERPRETIVE OVERFLOW INDICATOR OVFIND IS SET NON-ZERO IF OVERFLOW OCCURS IN ANY OF THE ABOVE. 042888,000757: 042889,000758: 6752 34735 VSU CAF BIT15 # CHANGES 0 TO DCS. 042890,000759: 6753 16755 TCF +2 042891,000760: 042892,000761: 6754 34355 VAD CAF PRIO30 # CHANGES 0 TO DCA. 042893,000762: 6755 26116 ADS ADDRWD 042894,000763: 6756 00006 EXTEND 042895,000764: 6757 50116 INDEX ADDRWD 042896,000765: 6760 00003 READ HISCALAR # DCA 2 OR DCS 2 042897,000766: 6761 20160 DAS MPAC +3 042898,000767: 6762 00006 EXTEND # CHECK OVERFLOW. 042899,000768: 6763 16765 BZF +2 042900,000769: 6764 07017 TC OVERFLWY 042901,000770: 042902,000771: 6765 00006 EXTEND 042903,000772: 6766 50116 INDEX ADDRWD 042904,000773: 6767 00005 READ CHAN5 # DCA 4 OR DCS 4 042905,000774: 6770 20162 DAS MPAC +5 042906,000775: 6771 00006 EXTEND 042907,000776: 6772 16774 BZF +2 042908,000777: 6773 07014 TC OVERFLWZ 042909,000778: 042910,000779: 6774 00006 EXTEND 042911,000780: 6775 50116 INDEX ADDRWD 042912,000781: 6776 00001 READ LCHAN # DCA 0 OR DCS 0 042913,000782: 6777 17003 TCF ENDVXV 042914,000783: 042915,000784: 7000 00006 DAD EXTEND 042916,000785: 7001 50116 INDEX ADDRWD 042917,000786: 7002 30001 DCA 0 042918,000787: 7003 20155 ENDVXV DAS MPAC # VXV FINISHES HERE. 042919,000788: 7004 00006 EXTEND 042920,000789: 7005 16064 BZF DANZIG 042921,000790: 042922,000791: # Page 1026 042923,000792: 7006 07022 SETOVF TC OVERFLOW 042924,000793: 7007 16064 TCF DANZIG 042925,000794: 042926,000795: # Page 1027 042927,000796: 7010 00006 DSU EXTEND 042928,000797: 7011 50116 INDEX ADDRWD 042929,000798: 7012 40001 DCS 0 042930,000799: 7013 17003 TCF ENDVXV 042931,000800: 042932,000801: 7014 54001 OVERFLWZ TS L # ENTRY FOR THIRD COMPONENT. 042933,000802: 7015 34756 CAF FIVE 042934,000803: 7016 17021 TCF +3 042935,000804: 042936,000805: 7017 54001 OVERFLWY TS L # ENTRY FOR SECOND COMPONENT. 042937,000806: 7020 36250 CAF THREE 042938,000807: 7021 56001 XCH L 042939,000808: 042940,000809: 7022 50000 OVERFLOW INDEX A # ENTRY FOR 1ST COMP OR DP (L=0). 042941,000810: 7023 44734 CS LIMITS # PICK UP POSMAX OR NEGMAX. 042942,000811: 7024 54130 TS BUF 042943,000812: 7025 00006 EXTEND 042944,000813: 7026 24000 AUG A 042945,000814: 7027 50001 INDEX L 042946,000815: 7030 26155 ADS MPAC +1 042947,000816: 7031 54007 TS 7 042948,000817: 7032 34755 CAF ZERO 042949,000818: 7033 60130 AD BUF 042950,000819: 7034 50001 INDEX L 042951,000820: 7035 26154 ADS MPAC 042952,000821: 7036 54007 TS 7 042953,000822: 7037 00002 TC Q # NO OVERFLOW EXIT. 042954,000823: 7040 17155 TCF SETOVF2 # SET OVFIND AND EXIT. 042955,000824: 042956,000825: 7041 00006 BVSU EXTEND 042957,000826: 7042 50116 INDEX ADDRWD 042958,000827: 7043 30003 DCA 2 042959,000828: 7044 52160 DXCH MPAC +3 042960,000829: 7045 00006 EXTEND 042961,000830: 7046 40001 DCOM 042962,000831: 7047 20160 DAS MPAC +3 042963,000832: 7050 00006 EXTEND 042964,000833: 7051 17053 BZF +2 042965,000834: 7052 07017 TC OVERFLWY 042966,000835: 042967,000836: 7053 00006 EXTEND 042968,000837: 7054 50116 INDEX ADDRWD 042969,000838: 7055 30005 DCA 4 042970,000839: 7056 52162 DXCH MPAC +5 042971,000840: 7057 00006 EXTEND 042972,000841: 7060 40001 DCOM 042973,000842: 7061 20162 DAS MPAC +5 042974,000843: 7062 00006 EXTEND 042975,000844: 7063 17065 BZF +2 042976,000845: 7064 07014 TC OVERFLWZ 042977,000846: 042978,000847: # Page 1028 042979,000848: 7065 00006 BDSU EXTEND 042980,000849: 7066 50116 INDEX ADDRWD 042981,000850: 7067 30001 DCA 0 042982,000851: 7070 52155 DXCH MPAC 042983,000852: 7071 00006 EXTEND 042984,000853: 7072 40001 DCOM 042985,000854: 7073 17003 TCF ENDVXV 042986,000855: 042987,000856: # Page 1029 042988,000857: # TRIPLE PRECISION ADD ROUTINE. 042989,000858: 042990,000859: 7074 00006 TAD EXTEND 042991,000860: 7075 50116 INDEX ADDRWD 042992,000861: 7076 30002 DCA 1 # ADD MINOR PARTS FIRST. 042993,000862: 7077 20156 DAS MPAC +1 042994,000863: 7100 50116 INDEX ADDRWD 042995,000864: 7101 60000 AD 0 042996,000865: 7102 60154 AD MPAC 042997,000866: 7103 54154 TS MPAC 042998,000867: 7104 16064 TCF DANZIG 042999,000868: 043000,000869: 7105 17006 TCF SETOVF # SET OVFIND IF SUCH OCCURS. 043001,000870: 043002,000871: # Page 1030 043003,000872: # ARITHMETIC SUBROUTINES REQUIRED IN FIXED-FIXED. 043004,000873: # 1. DMPSUB DOUBLE PRECISION MULTIPLY, MULTIPLY THE CONTENTS OF MPAC,+1 BY THE DP WORD WHOSE ADDRESS 043005,000874: # IS IN ADDRWD AND LEAVE A TRIPLE-PRECISION RESULT IN MPAC. 043006,000875: # 2. ROUNDSUB ROUND THE TRIPLE PRECISION CONTENTS OF MPAC TO DOUBLE PRECISION. 043007,000876: # 3. DOTSUB TAKE THE DOT PRODUCT OF THE VECTOR IN MPAC AND THE VECTOR WHOSE ADDRESS IS IN ADDRWD 043008,000877: # AND LEAVE THE TRIPLE PRECISION RESULT IN MPAC. 043009,000878: # 4. POLY USING THE CONTENTS OF MPAC AS A DP ARGUMENT, EVALUATE THE POLYNOMIAL WHOSE DEGREE AND 043010,000879: # COEFFICIENTS IMMEDIATELY FOLLOW THE TC POLY INSTRUCTION (SEE ROUTINE FOR DETAILS). 043011,000880: 043012,000881: 7106 50002 DMP INDEX Q # BASIC SUBROUTINE FOR USE BY PINBALL, ETC 043013,000882: # Was CAF --- RSB 2004. 043014,000883: 7107 30000 CA 0 043015,000884: 7110 24002 INCR Q 043016,000885: 7111 54116 -1 TS ADDRWD # (PROLOGUE FOR SETTING ADDRWD.) 043017,000886: 043018,000887: 7112 50116 DMPSUB INDEX ADDRWD # GET MINOR PART OF OPERAND AT C(ADDRWD). 043019,000888: 7113 30001 CA 1 043020,000889: 7114 54156 TS MPAC +2 # THIS WORKS FOR SQUARING MPAC AS WELL. 043021,000890: 7115 34755 CAF ZERO # SET MPAC +1 TO ZERO SO WE CAN ACCUMULATE 043022,000891: 7116 56155 XCH MPAC +1 # THE PARTIAL PRODUCTS WITH DAS 043023,000892: 7117 54135 TS MPTEMP # INSTRUCTIONS. 043024,000893: 7120 00006 EXTEND 043025,000894: 7121 70156 MP MPAC +2 # MINOR OF MPAC X MINOR OF C(ADDRWD). 043026,000895: 043027,000896: 7122 56156 XCH MPAC +2 # DISCARD MINOR PART OF ABOVE RESULT AND 043028,000897: 7123 00006 EXTEND # FORM MAJOR OF MPAC X MINOR OF C(ADDRWD). 043029,000898: 7124 70154 MP MPAC 043030,000899: 7125 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW. 043031,000900: 043032,000901: 7126 50116 INDEX ADDRWD # GET MAJOR PART OF ARGUMENT AT C(ADDRWD). 043033,000902: 7127 30000 CA 0 043034,000903: 7130 56135 XCH MPTEMP # SAVE AND BRING OUT MINOR OF MPAC. 043035,000904: 7131 00006 DMPSUB2 EXTEND 043036,000905: 7132 70135 MP MPTEMP # MAJOR OF C(ADDRWD) X MINOR OF MPAC. 043037,000906: 7133 20156 DAS MPAC +1 # ACCUMULATE, SETTING A TO NET OVERFLOW. 043038,000907: 043039,000908: 7134 56154 XCH MPAC # SETTING MPAC TO 0 OR +-1. 043040,000909: 7135 00006 EXTEND 043041,000910: 7136 70135 MP MPTEMP # MAJOR OF MPAC X MAJOR OF C(ADDRWD). 043042,000911: 7137 20155 DAS MPAC # GUARANTEED NO OVERFLOW. 043043,000912: 7140 00002 TC Q # 49 MCT = .573 MS. INCLUDING RETURN. 043044,000913: 043045,000914: # Page 1031 043046,000915: # ROUND MPAC TO DOUBLE PRECISION, SETTING OVFIND ON THE RARE EVENT OF OVERFLOW. 043047,000916: 043048,000917: 7141 34755 ROUNDSUB CAF ZERO # SET MPAC +2 = 0 FOR SCALARS AND CHANGE 043049,000918: 7142 54163 +1 TS MODE # MODE TO DP. 043050,000919: 043051,000920: 7143 56156 VROUND XCH MPAC +2 # BUT WE NEEDN'T TAKE THE TIME FOR VECTORS. 043052,000921: 7144 60000 DOUBLE 043053,000922: 7145 54001 TS L 043054,000923: 7146 00002 TC Q 043055,000924: 043056,000925: 7147 60155 AD MPAC +1 # ADD ROUDING BIT IF MPAC +2 WAS GREATER 043057,000926: 7150 54155 TS MPAC +1 # THAN .5 IN MAGNITUDE. 043058,000927: 7151 00002 TC Q 043059,000928: 043060,000929: 7152 60154 AD MPAC # PROPAGATE INTERFLOW. 043061,000930: 7153 54154 TS MPAC 043062,000931: 7154 00002 TC Q 043063,000932: 043064,000933: 7155 54121 SETOVF2 TS OVFIND # (RARE). 043065,000934: 7156 00002 TC Q 043066,000935: 043067,000936: # Page 1032 043068,000937: # THE DOT PRODUCT SUBROUTINE USUALLY FORMS THE DOT PRODUCT OF THE VECTOR IN MPAC WITH A STANDARD SIX 043069,000938: # REGISTER VECTOR WHOSE ADDRESS IS IN ADDRWD. IN THIS CASE C(DOTINC) ARE SET TO 2. VXM, HOWEVER, SETS C(DOTINC) TO 043070,000939: # 6 SO THAT DOTSUB DOTS MPAC WITH A COLUMN VECTOR OF THE MATRIX IN QUESTION IN THIS CASE. 043071,000940: 043072,000941: 7157 34752 PREDOT CAF TWO # PROLOGUE TO SET DOTINC TO 2. 043073,000942: 7160 54136 TS DOTINC 043074,000943: 043075,000944: 7161 00006 DOTSUB EXTEND 043076,000945: 7162 22137 QXCH DOTRET # SAVE RETURN 043077,000946: 7163 07112 TC DMPSUB # DOT X COMPONENTS. 043078,000947: 7164 52160 DXCH MPAC +3 # POSITION Y COMPONENT OF MPAC FOR 043079,000948: 7165 52155 DXCH MPAC # MULTIPLICATION WHILE SAVING RESULT IN 043080,000949: 7166 52131 DXCH BUF # THREE WORD BUFFER, BUF. 043081,000950: 7167 30156 CA MPAC +2 043082,000951: 7170 54132 TS BUF +2 043083,000952: 043084,000953: 7171 30136 CA DOTINC # ADVANCE ADDRWD TO Y COMPONENT OF 043085,000954: 7172 26116 ADS ADDRWD # OTHER ARGUMENT. 043086,000955: 7173 07112 TC DMPSUB 043087,000956: 7174 52156 DXCH MPAC +1 # ACCUMULATE PARTIAL PRODUCTS. 043088,000957: 7175 20132 DAS BUF +1 043089,000958: 7176 60154 AD MPAC 043090,000959: 7177 60130 AD BUF 043091,000960: 7200 54130 TS BUF 043092,000961: 7201 17203 TCF +2 043093,000962: 7202 54121 TS OVFIND # IF OVERFLOW OCCURS. 043094,000963: 043095,000964: 7203 52162 DXCH MPAC +5 # MULTIPLY Z COMPONENTS. 043096,000965: 7204 52155 DXCH MPAC 043097,000966: 7205 30136 CA DOTINC 043098,000967: 7206 26116 ADS ADDRWD 043099,000968: 7207 07112 TC DMPSUB 043100,000969: 7210 52132 ENDDOT DXCH BUF +1 # LEAVE FINAL ACCUMULATION IN MPAC. 043101,000970: 7211 20156 DAS MPAC +1 043102,000971: 7212 60154 AD MPAC 043103,000972: 7213 60130 AD BUF 043104,000973: 7214 54154 TS MPAC 043105,000974: 7215 00137 TC DOTRET 043106,000975: 043107,000976: 7216 07022 TC OVERFLOW # ON OVERFLOW HERE. 043108,000977: 7217 00137 TC DOTRET 043109,000978: 043110,000979: # Page 1033 043111,000980: # DOUBLE PRECISION POLYNOMIAL EVALUATOR 043112,000981: # N N-1 043113,000982: # THIS ROUTINE EVALUATES A X + A X + ... + A X + A LEAVING THE DP RESULT IN MPAC ON EXIT. 043114,000983: # N N-1 1 0 043115,000984: 043116,000985: # THE ROUTINE HAS TWO ENTRIES 043117,000986: 043118,000987: # 1 ENTRY THRU POWRSERS. THE COEFFICIENTS MAY BE EITHER IN FIXED OR ERASABLE E. THE CALL IS BY 043119,000988: # TC POWRSERS, AND THE RETURN IS TO LOC(TC POWRSERS)+1. THE ENTERING DATA MUST BE AS FOLLOWS: 043120,000989: # A SP LOC-3 ADDRESS FOR REFERENCING COEF TABLE 043121,000990: # L SP N-1 N IS THE DEGREE OF THE POWER SERIES 043122,000991: # MPAC DP X ARGUMENT 043123,000992: # LOC-2N DP A(0) 043124,000993: # ... 043125,000994: # LOC DP A(N) 043126,000995: 043127,000996: # 2. ENTRY THRU POLY. THE CALL TO POLY AND THE ENTERING DATA MUST BE AS FOLLOWS 043128,000997: # MPAC DP X ARGUMENT 043129,000998: # LOC TC POLY 043130,000999: # LOC+1 DP A(0) 043131,001000: # ... 043132,001001: # LOC+2N+2 DP A(N) RETURN IS TO LOC+2N+4 043133,001002: 043134,001003: 7220 00006 POWRSERS EXTEND 043135,001004: 7221 22141 QXCH POLYRET # RETURN ADDRESS 043136,001005: 7222 54117 TS POLISH # POWER SERIES ADDRESS 043137,001006: 7223 22140 LXCH POLYCNT # N-1 TO COUNTER 043138,001007: 7224 17235 TCF POLYCOM # SKIP SET UP BY POLY 043139,001008: 043140,001009: 7225 50002 POLY INDEX Q 043141,001010: # Was CAF --- RSB 2004. 043142,001011: 7226 30000 CA 0 043143,001012: 7227 54140 TS POLYCNT # N-1 TO COUNTER 043144,001013: 7230 60000 DOUBLE 043145,001014: 7231 60002 AD Q 043146,001015: 7232 54117 TS POLISH # L(A(N))-3 TO POLISH 043147,001016: 7233 64756 AD FIVE 043148,001017: 7234 54141 TS POLYRET # STORE RETURN ADDRESS 043149,001018: 043150,001019: 7235 36276 POLYCOM CAF LVBUF # INCOMING X WILL BE MOVED TO VBUF, SO 043151,001020: 7236 54116 TS ADDRWD # SET ADDRWD SO DMPSUB WILL MPY BY VBUF. 043152,001021: 043153,001022: 7237 00006 EXTEND 043154,001023: 7240 50117 INDEX POLISH 043155,001024: 7241 30004 DCA 3 043156,001025: 043157,001026: # Page 1034 043158,001027: 7242 52155 DXCH MPAC # LOAD A(N) INTO MPAC 043159,001028: 7243 52123 DXCH VBUF # SAVING X IN VBUF 043160,001029: 7244 17250 TCF POLY2 043161,001030: 043162,001031: 7245 54140 POLYLOOP TS POLYCNT # SAVE DECREMENTD LOOP COUNTER 043163,001032: 7246 44752 CS TWO 043164,001033: 7247 26117 ADS POLISH # REGRESS COEFFICIENT POINTER 043165,001034: 043166,001035: 7250 07112 POLY2 TC DMPSUB # MULTIPLY BY X 043167,001036: 7251 00006 EXTEND 043168,001037: 7252 50117 INDEX POLISH 043169,001038: 7253 30002 DCA 1 # ADD IN NEXT COEFFICIENT 043170,001039: 7254 20155 DAS MPAC # USER'S RESPONSIBILITY TO ASSURE NO OVFLOW 043171,001040: 043172,001041: 7255 10140 CCS POLYCNT 043173,001042: 7256 17245 TCF POLYLOOP 043174,001043: 7257 00141 TC POLYRET # RETURN CALLER 043175,001044: 043176,001045: # Page 1035 043177,001046: # MISCELLANEOUS MULTI-PRECISION ROUTINES REQUIRED IN FIXED-FIXED BUT NOT USED BY THE INTERPRETER. 043178,001047: 043179,001048: 7260 34755 DPAGREE CAF ZERO # DOUBLE PRECISION ENTRY -- 043180,001049: 7261 54156 TS MPAC +2 # ZERO LOW-ORDER WORD 043181,001050: 043182,001051: 7262 22002 TPAGREE LXCH Q # FORCE SIGN AGREEMENT AMONG THE TRIPLE 043183,001052: 7263 06726 TC BRANCH # PRECISION CONTENTS OF MPAC. RETURNING 043184,001053: 7264 17270 TCF ARG+ # WITH SIGNUM OF THE INPUT IN A. 043185,001054: 7265 17310 TCF ARGZERO 043186,001055: 043187,001056: 7266 44733 CS POSMAX # IF NEGATIVE. 043188,001057: 7267 17271 TCF +2 043189,001058: 043190,001059: 7270 34733 ARG+ CAF POSMAX 043191,001060: 7271 54002 TS Q 043192,001061: 7272 00006 EXTEND 043193,001062: 7273 24000 AUG A # FORMS +-1.0. 043194,001063: 7274 60156 AD MPAC +2 043195,001064: 7275 54156 TS MPAC +2 043196,001065: 7276 34755 CAF ZERO 043197,001066: 7277 60002 AD Q 043198,001067: 7300 60155 AD MPAC +1 043199,001068: 7301 54155 TS MPAC +1 043200,001069: 7302 34755 CAF ZERO 043201,001070: 7303 60002 AD Q # Q STILL HAS POSMAX OR NEGMAX IN IT. 043202,001071: 7304 60154 AD MPAC 043203,001072: 7305 54154 ARGZERO2 TS MPAC # ALWAYS SKIPPING UNLESS ARGZERO. 043204,001073: 7306 54155 TS MPAC +1 043205,001074: 7307 00001 TC L # RETURN VIA L. 043206,001075: 043207,001076: 7310 54156 ARGZERO TS MPAC +2 # SET ALL THREE MPAC REGISTERS TO ZERO. 043208,001077: 7311 17305 TCF ARGZERO2 043209,001078: 043210,001079: # SHORTMP MULTIPLIES THE TP CONTENTS OF MPAC BY THE SINGLE PRECISION NUMBER ARRIVING IN A. 043211,001080: 043212,001081: 7312 54135 SHORTMP TS MPTEMP 043213,001082: 7313 00006 EXTEND 043214,001083: 7314 70156 MP MPAC +2 043215,001084: 7315 54156 TS MPAC +2 043216,001085: 7316 34755 SHORTMP2 CAF ZERO # SO SUBSEQUENT DAS WILL WORK. 043217,001086: 7317 56155 XCH MPAC +1 043218,001087: 7320 17131 TCF DMPSUB2 043219,001088: 043220,001089: # Page 1036 043221,001090: # DMPNSUB MULTIPLIES THE DP FRACTION ARRIVING IN MPAC BY THE SP 043222,001091: # INTEGER ARRIVING IN A. THE DP PRODUCT DEPARTS BOTH IN MPAC AND IN 043223,001092: # A AND L. NOTE THAT DMPNSUB NORMALLY INCREASES THE MAGNITUDE OF THE 043224,001093: # CONTENTS OF MPAC. THE CUSTOMER MUST INSURE THAT B(A) X B(MPAC,MPAC+1) 043225,001094: # AND B(A) X B(MPAC) ARE LESS THAN 1 IN MAGNITUDE, WHERE B, AS IS OBVIOUS, 043226,001095: # INDICATES THE ARRIVING CONTENTS. 043227,001096: 043228,001097: 7321 54135 DMPNSUB TS DMPNTEMP 043229,001098: 7322 00006 EXTEND 043230,001099: 7323 70155 MP MPAC +1 043231,001100: 7324 52155 DXCH MPAC # LOW PRODUCT TO MPAC, HIGH FACTOR TO A 043232,001101: 7325 00006 EXTEND 043233,001102: 7326 70135 MP DMPNTEMP 043234,001103: 7327 30001 CA L 043235,001104: 7330 26154 ADS MPAC # COMPLETING THE PRODUCT IN MPAC 043236,001105: 7331 00006 EXTEND 043237,001106: 7332 30155 DCA MPAC # BRINGING THE PRODUCT INTO A AND L 043238,001107: 7333 00002 TC Q 043239,001108: 043240,001109: # Page 1037 043241,001110: # MISCELLANEOUS VECTOR OPERATIONS. INCLUDED HERE ARE THE FOLLOWING. 043242,001111: # 1. DOT DP VECTOR DOT PRODUCT. 043243,001112: # 2. VXV DP VECTOR CROSS PRODUCT. 043244,001113: # 3. VXSC DP VECTOR TIMES SCALAR. 043245,001114: # 4. V/SC DP VECTOR DIVIDED BY SCALAR. 043246,001115: # 5. VPROJ DP VECTOR PROJECTION. ( (MPAC.X)MPAC ). 043247,001116: # 6. VXM DP VECTOR POST-MULTIPLIED BY MATRIX. 043248,001117: # 7. MXV DP VECTOR PRE-MULTIPLIED BY MATRIX. 043249,001118: 043250,001119: 7334 07157 DOT TC PREDOT # DO THE DOT PRODUCT AND EXIT, CHANGING 043251,001120: 7335 34755 DMODE CAF ZERO # THE MODE TO DP SCALAR. 043252,001121: 7336 16063 TCF NEWMODE 043253,001122: 043254,001123: 7337 34752 MXV CAF TWO # SET UP MATINC AND DOTINC FOR ROW 043255,001124: 7340 54140 TS MATINC # VECTORS. 043256,001125: 7341 17345 TCF VXM/MXV # GO TO COMMON PORTION. 043257,001126: 043258,001127: 7342 44363 VXM CS TEN # SET MATINC AND DOTINC TO REFER TO MATRIX 043259,001128: 7343 54140 TS MATINC # AS THREE COLUMN VECTORS. 043260,001129: 7344 36245 CAF SIX 043261,001130: 043262,001131: # Page 1038 043263,001132: # COMMON PORTION OF MXV AND VXM. 043264,001133: 043265,001134: 7345 54136 VXM/MXV TS DOTINC 043266,001135: 043267,001136: # ITRACE (2) REFERS TO "VXM/MXV". 043268,001137: 043269,001138: 7346 07535 TC MPACVBUF # SAVE VECTOR IN MPAC FOR FURTHER USE. 043270,001139: 043271,001140: 7347 07161 TC DOTSUB # GO DOT TO GET X COMPONENT OF ANSWER. 043272,001141: 7350 00006 EXTEND 043273,001142: 7351 30123 DCA VBUF # MOVE MPAC VECTOR BACK INTO MPAC, SAVING 043274,001143: 7352 52155 DXCH MPAC # NEW X COMPONENT IN BUF2. 043275,001144: 7353 52134 DXCH BUF2 043276,001145: 7354 00006 EXTEND 043277,001146: 7355 30125 DCA VBUF +2 043278,001147: 7356 52160 DXCH MPAC +3 043279,001148: 7357 00006 EXTEND 043280,001149: 7360 30127 DCA VBUF +4 043281,001150: 7361 52162 DXCH MPAC +5 043282,001151: 7362 30140 CA MATINC # INITIALIZE ADDRWD FOR NEXT DOT PRODUCT. 043283,001152: 7363 26116 ADS ADDRWD # FORMS HAS ADDRESS OF NEXT COLUMN(ROW). 043284,001153: 043285,001154: 7364 07161 TC DOTSUB 043286,001155: 7365 52123 DXCH VBUF # MORE GIVEN VECTOR BACK TO MPAC, SAVING Y 043287,001156: 7366 52155 DXCH MPAC # COMPONENT OF ANSWER IN VBUF +2. 043288,001157: 7367 52125 DXCH VBUF +2 043289,001158: 7370 52160 DXCH MPAC +3 043290,001159: 7371 52127 DXCH VBUF +4 043291,001160: 7372 52162 DXCH MPAC +5 043292,001161: 7373 30140 CA MATINC # FORM ADDRESS OF LAST COLUMN OR ROW. 043293,001162: 7374 26116 ADS ADDRWD 043294,001163: 043295,001164: 7375 07161 TC DOTSUB 043296,001165: 7376 52134 DXCH BUF2 # ANSWER NOW COMPLETE. PUT COMPONENTS INTO 043297,001166: 7377 52155 DXCH MPAC # PROPER MPAC REGISTERS. 043298,001167: 7400 52162 DXCH MPAC +5 043299,001168: 7401 52125 DXCH VBUF +2 043300,001169: 7402 52160 DXCH MPAC +3 043301,001170: 7403 16064 TCF DANZIG # EXIT. 043302,001171: 043303,001172: # Page 1039 043304,001173: # VXSC -- VECTOR TIMES SCALAR. 043305,001174: 043306,001175: 7404 10163 VXSC CCS MODE # TEST PRESENT MODE. 043307,001176: 7405 17433 TCF DVXSC # SEPARATE ROUTINE WHEN SCALAR IS IN MPAC. 043308,001177: 7406 17433 TCF DVXSC 043309,001178: 043310,001179: 7407 07112 VVXSC TC DMPSUB # COMPUTE X COMPONENT 043311,001180: 7410 07143 TC VROUND # AND ROUND IT. 043312,001181: 7411 52160 DXCH MPAC +3 # PUT Y COMPONENT INTO MPAC SAVING MPAC IN 043313,001182: 7412 52155 DXCH MPAC # MPAC +3. 043314,001183: 7413 52160 DXCH MPAC +3 043315,001184: 043316,001185: 7414 07112 TC DMPSUB # DO SAME FOR Y AND Z COMPONENTS. 043317,001186: 7415 07143 TC VROUND 043318,001187: 7416 52162 DXCH MPAC +5 043319,001188: 7417 52155 DXCH MPAC 043320,001189: 7420 52162 DXCH MPAC +5 043321,001190: 043322,001191: 7421 07112 TC DMPSUB 043323,001192: 7422 07143 TC VROUND 043324,001193: 7423 52155 VROTATEX DXCH MPAC # EXIT USED TO RESTORE MPAC AFTER THIS 043325,001194: 7424 52162 DXCH MPAC +5 # TYPE OF ROTATION. CALLED BY VECTOR SHIFT 043326,001195: 7425 52160 DXCH MPAC +3 # RIGHT, V/SC, ETC. 043327,001196: 7426 52155 DXCH MPAC 043328,001197: 7427 16064 TCF DANZIG 043329,001198: 043330,001199: # Page 1040 043331,001200: # DP VECTOR PROJECTION ROUTINE. 043332,001201: 043333,001202: 7430 07157 VPROJ TC PREDOT # (MPAC.X)MPAC IS COMPUTED AND LEFT IN 043334,001203: 7431 44751 CS FOUR # MPAC. DO DOT AND FALL INTO DVXSC. 043335,001204: 7432 26116 ADS ADDRWD 043336,001205: 043337,001206: # VXSC WHEN SCALAR ARRIVES IN MPAC AND VECTOR IS AT X. 043338,001207: 043339,001208: 7433 00006 DVXSC EXTEND # SAVE SCALAR IN MPAC +3 AND GET X 043340,001209: 7434 30155 DCA MPAC # COMPONENT OF ANWER. 043341,001210: 7435 52160 DXCH MPAC +3 043342,001211: 7436 07112 TC DMPSUB 043343,001212: 7437 07143 TC VROUND 043344,001213: 043345,001214: 7440 34752 CAF TWO # ADVANCE ADDRWD TO Y COMPONENT OF X. 043346,001215: 7441 26116 ADS ADDRWD 043347,001216: 7442 00006 EXTEND 043348,001217: 7443 30160 DCA MPAC +3 # PUT SCALAR BACK INTO MPAC AND SAVE 043349,001218: 7444 52155 DXCH MPAC # X RESULT IN MPAC +5. 043350,001219: 7445 52162 DXCH MPAC +5 043351,001220: 7446 07112 TC DMPSUB 043352,001221: 7447 07143 TC VROUND 043353,001222: 043354,001223: 7450 34752 CAF TWO 043355,001224: 7451 26116 ADS ADDRWD # TO Z COMPONENT. 043356,001225: 7452 52160 DXCH MPAC +3 # BRING SCALAR BACK, PUTTING Y RESULT IN 043357,001226: 7453 52155 DXCH MPAC # THE PROPER PLACE. 043358,001227: 7454 52160 DXCH MPAC +3 043359,001228: 7455 07112 TC DMPSUB 043360,001229: 7456 07143 TC VROUND 043361,001230: 043362,001231: 7457 52155 DXCH MPAC # PUT Z COMPONENT IN PROPER PLACE, ALSO 043363,001232: 7460 52162 DXCH MPAC +5 # POSITIONING X. 043364,001233: 7461 52155 DXCH MPAC 043365,001234: 043366,001235: 7462 16524 TCF VMODE # MODE HAS CHANGED TO VECTOR. 043367,001236: 043368,001237: # Page 1041 043369,001238: # VECTOR CROSS PRODUCT ROUTINE CALCULATES (X M -M M ,X M -X M ,X M -X M ) WHERE M IS THE VECTOR IN 043370,001239: # 3 2 2 3 1 3 3 1 2 1 1 2 043371,001240: # MPAC AND X THE VECTOR AT THE GIVEN ADDRESS. 043372,001241: 043373,001242: 7463 00006 VXV EXTEND 043374,001243: 7464 30162 DCA MPAC +5 # FORM UP M3X1, LEAVING M1 IN VBUF. 043375,001244: 7465 52155 DXCH MPAC 043376,001245: 7466 52123 DXCH VBUF 043377,001246: 7467 07112 TC DMPSUB # BY X1. 043378,001247: 043379,001248: 7470 00006 EXTEND 043380,001249: 7471 40160 DCS MPAC +3 # CALCULATE -X1M2, SAVING X1M3 IN VBUF +2. 043381,001250: 7472 52155 DXCH MPAC 043382,001251: 7473 52125 DXCH VBUF +2 043383,001252: 7474 07112 TC DMPSUB 043384,001253: 043385,001254: 7475 34752 CAF TWO # ADVANCE ADDRWD TO X2. 043386,001255: 7476 26116 ADS ADDRWD 043387,001256: 7477 00006 EXTEND 043388,001257: 7500 40162 DCS MPAC +5 # PREPARE TO GET -X2M3, SAVING -X1M2 IN 043389,001258: 7501 52155 DXCH MPAC # MPAC +5. 043390,001259: 7502 52162 DXCH MPAC +5 043391,001260: 7503 07112 TC DMPSUB 043392,001261: 043393,001262: 7504 00006 EXTEND 043394,001263: 7505 30123 DCA VBUF # GET X2M1, SAVING -X2M3 IN VBUF +4. 043395,001264: 7506 52155 DXCH MPAC 043396,001265: 7507 52127 DXCH VBUF +4 043397,001266: 7510 07112 TC DMPSUB 043398,001267: 043399,001268: 7511 34752 CAF TWO # ADVANCE ADDRWD TO X3. 043400,001269: 7512 26116 ADS ADDRWD 043401,001270: 7513 00006 EXTEND 043402,001271: 7514 40123 DCS VBUF # GET -X3M1, ADDING X2M1 TO MPAC +5 TO 043403,001272: 7515 52155 DXCH MPAC # COMPLETE THE Z COMPONENT OF THE ANSWER. 043404,001273: 7516 20162 DAS MPAC +5 043405,001274: 043406,001275: 7517 00006 EXTEND 043407,001276: 7520 17522 BZF +2 043408,001277: 7521 07014 TC OVERFLWZ 043409,001278: 043410,001279: 7522 07112 TC DMPSUB 043411,001280: 7523 52125 DXCH VBUF +2 # MOVE X1M3 TO MPAC +3 SETTING UP FOR X3M2 043412,001281: 7524 52160 DXCH MPAC +3 # AND ADD -X3M1 TO MPAC +3 TO COMPLETE THE 043413,001282: 7525 52155 DXCH MPAC # Y COMPONENT OF THE RESULT. 043414,001283: 7526 20160 DAS MPAC +3 043415,001284: 043416,001285: 7527 00006 EXTEND 043417,001286: 7530 17532 BZF +2 043418,001287: # Page 1042 043419,001288: 7531 07017 TC OVERFLWY 043420,001289: 043421,001290: 7532 07112 TC DMPSUB 043422,001291: 7533 52127 DXCH VBUF +4 # GO ADD -X2M3 TO X3M2 TO COMPLETE THE X 043423,001292: 7534 17003 TCF ENDVXV # COMPONENT (TAIL END OF DAD). 043424,001293: 043425,001294: # THE MPACVBUF SUBROUTINE SAVES THE VECTOR IN MPAC IN VBUF WITHOUT CLOBBERING MPAC. 043426,001295: 043427,001296: 7535 00006 MPACVBUF EXTEND # CALLED BY MXV, VXM, AND UNIT. 043428,001297: 7536 30155 DCA MPAC 043429,001298: 7537 52123 DXCH VBUF 043430,001299: 7540 00006 EXTEND 043431,001300: 7541 30160 DCA MPAC +3 043432,001301: 7542 52125 DXCH VBUF +2 043433,001302: 7543 00006 EXTEND 043434,001303: 7544 30162 DCA MPAC +5 043435,001304: 7545 52127 DXCH VBUF +4 043436,001305: 7546 00002 TC Q # RETURN TO CALLER. 043437,001306: 043438,001307: # DOUBLE PRECISION SIGN AGREE ROUTINE. ARRIVE WITH INPUT IN A+L. OUTPUT IS IN A + L. 043439,001308: 043440,001309: 7547 10000 ALSIGNAG CCS A # TEST UPPER PART. 043441,001310: 7550 17554 TCF UPPOS # IT IS POSITIVE 043442,001311: 7551 00002 TC Q # ZERO 043443,001312: 7552 17564 TCF UPNEG # NEGATIVE 043444,001313: 7553 00002 TC Q # ZERO 043445,001314: 043446,001315: 7554 56001 UPPOS XCH L # SAVE DECREMENTED UPPER PART. 043447,001316: 7555 64736 AD HALF 043448,001317: 7556 64736 AD HALF 043449,001318: 7557 54000 TS A # SKIPS ON OVERFLOW 043450,001319: 7560 17562 TCF +2 043451,001320: 7561 24001 INCR L # RESTORE UPPER TO ORIGINAL VALUE 043452,001321: 7562 56001 XCH L # SWAP A + L BANCK. 043453,001322: 7563 00002 TC Q 043454,001323: 043455,001324: 7564 56001 UPNEG XCH L # SAVE COMPLEMENTED + DECREMENTED UPPER PT 043456,001325: 7565 64735 AD NEGMAX 043457,001326: 7566 67752 AD NEGONE 043458,001327: 7567 54000 TS A 043459,001328: 7570 17572 TCF +2 # DON'T INCREMENT IF NO OVERFLOW. 043460,001329: 7571 24001 INCR L 043461,001330: 7572 56001 XCH L 043462,001331: 7573 40000 COM # MAKE NEGATIVE AGAIN. 043463,001332: 7574 00002 TC Q 043464,001333: 043465,001334: # Page 1043 043466,001335: # INTERPRETIVE INSTRUCTIONS WHOSE EXECUTION CONSISTS OF PRINCIPALLY CALLING SUBROUTINES. 043467,001336: 043468,001337: 7575 07112 DMP1 TC DMPSUB # DMP INSTRUCTIONS 043469,001338: 7576 16064 TCF DANZIG 043470,001339: 043471,001340: 7577 07112 DMPR TC DMPSUB 043472,001341: 7600 07142 TC ROUNDSUB +1 # (C(A) = +0). 043473,001342: 7601 16064 TCF DANZIG 043474,001343: 043475,001344: 7602 00006 DDV EXTEND 043476,001345: 7603 50116 INDEX ADDRWD # MOVE DIVIDENT INTO BUF. 043477,001346: 7604 30001 DCA 0 043478,001347: 7605 17612 TCF BDDV +4 043479,001348: 043480,001349: 7606 00006 BDDV EXTEND # MOVE DIVISOR INTO MPAC SAVING MPAC, THE 043481,001350: 7607 50116 INDEX ADDRWD # DIVIDEND, IN BUF. 043482,001351: 7610 30001 DCA 0 043483,001352: 7611 52155 DXCH MPAC 043484,001353: 7612 52131 +4 DXCH BUF 043485,001354: 7613 34755 CAF ZERO # DIVIDE ROUTINES IN BANK 0. 043486,001355: 7614 54004 TS FBANK 043487,001356: 7615 12353 TCF DDV/BDDV 043488,001357: 043489,001358: 7616 30116 SETPD CA ADDRWD # MUST SET TO WORK AREA, OR EBANK TROUBLE. 043490,001359: 7617 54166 TS PUSHLOC 043491,001360: 7620 16066 TCF NOIBNKSW # NO FBANK SWITCH REQUIRED. 043492,001361: 043493,001362: 7621 34755 TSLC CAF ZERO # SHIFTING ROUTINES LOCATED IN BANK 00. 043494,001363: 7622 54004 TS FBANK 043495,001364: 7623 12172 TCF TSLC2 043496,001365: 043497,001366: 7624 36077 GSHIFT CAF LOW7 # USED AS MASK AT GENSHIFT. THIS PROCESSES 043498,001367: 7625 54004 TS FBANK # ANY SHIFT INSTRUCTION (EXCEPT TSLC) WITH 043499,001368: 7626 12214 TCF GENSHIFT # AN ADDRESS (ROUTINES IN BANK 0). 043500,001369: 043501,001370: # Page 1044 043502,001371: # THE FOLLOWING IS THE PROLOGUE TO V/SC. IF THE PRESENT MODE IS VECTOR, IT SAVES THE SCALAR AT X IN BUF 043503,001372: # AND CALLES THE V/SC ROUTINE IN BANK 0. IF THE PRESENT MODE IS SCALAR, IT MOVES THE VECTOR AT X INTO MPAC, SAVING 043504,001373: # THE SCALAR IN MPAC IN BUF BEFORE CALLING THE V/SC ROUTINE IN BANK 0. 043505,001374: 043506,001375: 7627 10163 V/SC CCS MODE 043507,001376: 7630 17641 TCF DV/SC # MOVE VECTOR INTO MPAC. 043508,001377: 7631 17641 TCF DV/SC 043509,001378: 043510,001379: 7632 00006 VV/SC EXTEND 043511,001380: 7633 50116 INDEX ADDRWD 043512,001381: 7634 30001 DCA 0 043513,001382: 7635 52131 V/SC1 DXCH BUF # IN BOTH CASES, VECTOR IS NOW IN MPAC AND 043514,001383: 7636 34755 CAF ZERO # SCALAR IN BUF. 043515,001384: 7637 54004 TS FBANK 043516,001385: 7640 12654 TCF V/SC2 043517,001386: 043518,001387: 7641 00006 DV/SC EXTEND 043519,001388: 7642 50116 INDEX ADDRWD 043520,001389: 7643 30003 DCA 2 043521,001390: 7644 52160 DXCH MPAC +3 043522,001391: 7645 00006 EXTEND 043523,001392: 7646 50116 INDEX ADDRWD 043524,001393: 7647 30005 DCA 4 043525,001394: 7650 52162 DXCH MPAC +5 043526,001395: 043527,001396: 7651 44753 CS ONE # CHANGE MODE TO VECTOR. 043528,001397: 7652 54163 TS MODE 043529,001398: 043530,001399: 7653 00006 EXTEND 043531,001400: 7654 50116 INDEX ADDRWD 043532,001401: 7655 30001 DCA 0 043533,001402: 7656 52155 DXCH MPAC 043534,001403: 7657 17635 TCF V/SC1 043535,001404: 043536,001405: # Page 1045 043537,001406: # SIGN AND COMPLEMENT INSTRUCTIONS. 043538,001407: 043539,001408: 7660 50116 SIGN INDEX ADDRWD # CALL COMP INSTRUCTION IF WORD AT X IS 043540,001409: 7661 10000 CCS 0 # NEGATIVE NON-ZERO. 043541,001410: 7662 16064 TCF DANZIG 043542,001411: 7663 17665 TCF +2 043543,001412: 7664 17673 TCF COMP # DO THE COMPLEMENT. 043544,001413: 043545,001414: 7665 50116 INDEX ADDRWD 043546,001415: 7666 10001 CCSL CCS 1 043547,001416: 7667 16064 TCF DANZIG 043548,001417: 7670 16064 TCF DANZIG 043549,001418: 7671 17673 TCF COMP 043550,001419: 7672 16064 TCF DANZIG 043551,001420: 7673 00006 COMP EXTEND # COMPLEMENT DP MPAC IN EVERY CASE. 043552,001421: 7674 40155 DCS MPAC 043553,001422: 7675 52155 DXCH MPAC 043554,001423: 043555,001424: 7676 10163 CCS MODE # EITHER COMPLEMENT MPAC +3 OR THE REST OF 043556,001425: 7677 17710 TCF DCOMP # THE VECTOR ACCUMULATOR. 043557,001426: 7700 17710 TCF DCOMP 043558,001427: 043559,001428: 7701 00006 EXTEND # VECTOR COMPLEMENT. 043560,001429: 7702 40160 DCS MPAC +3 043561,001430: 7703 52160 DXCH MPAC +3 043562,001431: 7704 00006 EXTEND 043563,001432: 7705 40162 DCS MPAC +5 043564,001433: 7706 52162 DXCH MPAC +5 043565,001434: 7707 16064 TCF DANZIG 043566,001435: 043567,001436: 7710 40156 DCOMP CS MPAC +2 043568,001437: 7711 54156 TS MPAC +2 043569,001438: 7712 16064 TCF DANZIG 043570,001439: 043571,001440: # Page 1046 043572,001441: # THE FOLLOWING SHORT SHIFT CODES REQUIRE NO ADDRESS WORD: 043573,001442: # 1. SR1 TO SR4 SCALAR SHIFT RIGHT. 043574,001443: # 2. SR1R TO SR4R SCALAR SHIFT RIGHT AND ROUND. 043575,001444: # 3. SL1 TO SL4 SCALAR SHIFT LEFT. 043576,001445: # 4. SL1R TO SL4R SCALAR SHIFT LEFT AND ROUND. 043577,001446: # 5. VSR1 TO VSR8 VECTOR SHIFT RIGHT (ALWAYS ROUNDS). 043578,001447: # 6. VSL1 TO VSL8 VECTOR SHIFT LEFT (NEVER ROUNDS). 043579,001448: # THE FOLLOWING CODES REQUIRE AND ADDRESS WHICH MAY BE INDEXED:* 043580,001449: # 1. SR SCALAR SHIFT RIGHT. 043581,001450: # 2. SRR SCALAR SHIFT RIGHT AND ROUND. 043582,001451: # 3. SL SCALAR SHIFT LEFT. 043583,001452: # 4. SLR SCALAR SHIFT LEFT AND ROUND. 043584,001453: # 5. VSR VECTOR SHIFT RIGHT. 043585,001454: # 6. VSL VECTOR SHIFT LEFT. 043586,001455: # * IF THE ADDRESS IS INDEXED, AND THE INDEX MODIFICATION RESULTS IN A NEGATIVE SHIFT COUNT, A SHIFT OF THE 043587,001456: # ABSOLUTE VALUE OF THE COUNT IS DONE IN THE OPPOSITE DIRECTION. 043588,001457: 043589,001458: 00,2017 BANK 00 043590,001459: 043591,001460: 00,2017 COUNT* $$/INTER 043592,001461: 00,2017 36245 SHORTT CAF SIX # SCALAR SHORT SHIFTS COME HERE. THE SHIFT 043593,001462: 00,2020 70020 MASK CYR # COUNT-1 IS NOW IN BITS 2-3 OF CYR. THE 043594,001463: 00,2021 54021 TS SR # ROUNDING BIT IS IN BIT1 AT THIS POINT. 043595,001464: 043596,001465: 00,2022 10020 CCS CYR # SEE IF RIGHT OR LEFT SHIFT DESIRED. 043597,001466: 00,2023 12101 TCF TSSL # SHIFT LEFT. 043598,001467: 043599,001468: 00,2024 00024 SRDDV DEC 20 B-14 # MPTEMP SETTING FOR SR BEFORE DDV. 043600,001469: 043601,001470: 00,2025 50021 TSSR INDEX SR # GET SHIFTING BIT. 043602,001471: 00,2026 34736 CAF BIT14 043603,001472: 00,2027 54135 TS MPTEMP 043604,001473: 043605,001474: 00,2030 10020 CCS CYR # SEE IF A ROUND IS DESIRED. 043606,001475: 00,2031 02050 RIGHTR TC MPACSRND # YES -- SHIFT RIGHT AND ROUND. 043607,001476: 00,2032 16063 TCF NEWMODE # SET MODE TO DP (C(A) = 0). 043608,001477: 00,2033 30135 MPACSHR CA MPTEMP # DO A TRIPLE PRECISION SHIFT RIGHT. 043609,001478: 00,2034 00006 EXTEND 043610,001479: 00,2035 70156 MP MPAC +2 043611,001480: 00,2036 54156 +3 TS MPAC +2 # (EXIT FROM SQRT AND ABVAL). 043612,001481: 00,2037 30135 CA MPTEMP 043613,001482: 00,2040 00006 EXTEND 043614,001483: 00,2041 70154 MP MPAC # SHIFT MAJOR PART INTO A,L AND PLACE IN 043615,001484: # Page 1047 043616,001485: 00,2042 52155 DXCH MPAC # MPAC,+1. 043617,001486: 00,2043 30135 CA MPTEMP 043618,001487: 00,2044 00006 EXTEND 043619,001488: 00,2045 70001 MP L # ORIGINAL C(MPAC +1). 043620,001489: 00,2046 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW. 043621,001490: 00,2047 16064 TCF DANZIG 043622,001491: 043623,001492: # MPAC SHIFT RIGHT AND ROUND SUBROUTINES 043624,001493: 043625,001494: 00,2050 30156 MPACSRND CA MPAC +2 # WE HAVE TO DO ALL THREE MULTIPLIES SINCE 043626,001495: 00,2051 00006 EXTEND # MPAC +1 AND MPAC +2 MIGHT HAVE SIGN 043627,001496: 00,2052 70135 MP MPTEMP # DISAGREEMENT WITH A SHIFT RIGHT OF L. 043628,001497: 00,2053 56155 XCH MPAC +1 043629,001498: 00,2054 00006 EXTEND 043630,001499: 00,2055 70135 MP MPTEMP 043631,001500: 00,2056 56155 XCH MPAC +1 # TRIAL MINOR PART. 043632,001501: 00,2057 60001 AD L 043633,001502: 043634,001503: 00,2060 60000 VSHR2 DOUBLE # (FINISH VECTOR COMPONENT SHIFT RIGHT 043635,001504: 00,2061 54156 TS MPAC +2 # AND ROUND.) 043636,001505: 00,2062 12064 TCF +2 043637,001506: 00,2063 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW. 043638,001507: 043639,001508: 00,2064 34755 CAF ZERO 043640,001509: 00,2065 54156 TS MPAC +2 043641,001510: 00,2066 56154 XCH MPAC # SETTING TO ZERO SO FOLLOWING DAS WORKS. 043642,001511: 00,2067 00006 EXTEND 043643,001512: 00,2070 70135 MP MPTEMP 043644,001513: 00,2071 20155 DAS MPAC # AGAIN NO OVERFLOW. 043645,001514: 00,2072 00002 TC Q 043646,001515: 043647,001516: 00,2073 30135 VSHRRND CA MPTEMP # ENTRY TO SHIFT RIGHT AND ROUND MPAC WHEN 043648,001517: 00,2074 00006 EXTEND # MPAC CONTAINS A VECTOR COMPONENT. 043649,001518: 00,2075 70155 MP MPAC +1 043650,001519: 00,2076 54155 TS MPAC +1 043651,001520: 00,2077 56001 XCH L 043652,001521: 00,2100 12060 TCF VSHR2 # GO ADD ONE IF NECESSARY AND FINISH. 043653,001522: 043654,001523: # Page 1048 043655,001524: # ROUTINE FOR SHORT SCALAR SHIFT LEFT (AND MAYBE ROUND). 043656,001525: 043657,001526: 00,2101 30021 TSSL CA SR # GET SHIFT COUNT FOR SR. 043658,001527: 00,2102 54135 +1 TS MPTEMP 043659,001528: 043660,001529: 00,2103 00006 +2 EXTEND # ENTRY HERE FROM SL FOR SCALARS. 043661,001530: 00,2104 30156 DCA MPAC +1 # SHIFTING LEFT ONE PLACE AT A TIME IS 043662,001531: 00,2105 20156 DAS MPAC +1 # FASTER THAN DOING THE WHOLE SHIFT WITH 043663,001532: 00,2106 60154 AD MPAC # MULTIPLIES ASSUMING THAT FREQUENCY OF 043664,001533: 00,2107 60154 AD MPAC # SHIFT COUNTS GOES DOWN RAPIDLY AS A 043665,001534: 00,2110 54154 TS MPAC # FUNCTION OF THEIR MAGNITUDE. 043666,001535: 00,2111 12113 TCF +2 043667,001536: 00,2112 54121 TS OVFIND # OVERFLOW. (LEAVES OVERFLOW-CORRECTED 043668,001537: # RESULT ANYWAY). 043669,001538: 00,2113 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNT. 043670,001539: 00,2114 12102 TCF TSSL +1 043671,001540: 043672,001541: 00,2115 10020 CCS CYR # SEE IF ROUND WANTED. 043673,001542: 00,2116 07141 ROUND TC ROUNDSUB # YES -- ROUND AND EXIT. 043674,001543: 00,2117 16064 TCF DANZIG # SL LEAVES A ZERO IN CYR FOR NO ROUND. 043675,001544: 00,2120 16064 TCF DANZIG # NO -- EXIT IMMEDIATELY 043676,001545: 043677,001546: # Page 1049 043678,001547: # VECTOR SHIFTING ROUTINES. 043679,001548: 043680,001549: 00,2121 34757 SHORTV CAF LOW3 # SAVE 3 BIT SHIFT COUNT -- 1 WITHOUT 043681,001550: 00,2122 70020 MASK CYR # EDITING CYR. 043682,001551: 00,2123 54135 TS MPTEMP 043683,001552: 00,2124 10020 CCS CYR # SEE IF LEFT OR RIGHT SHIFT. 043684,001553: 00,2125 12145 TCF VSSL # VECTOR SHIFT LEFT. 043685,001554: 00,2126 00176 OCT176 OCT 176 # USED IN PROCESSED SHIFTS WITH - COUNT. 043686,001555: 043687,001556: 00,2127 50135 VSSR INDEX MPTEMP # (ENTRY FROM SR). PICK UP SHIFTING BIT. 043688,001557: 00,2130 34736 CAF BIT14 # MPTEMP CONTAINS THE SHIFT COUNT - 1. 043689,001558: 00,2131 54135 TS MPTEMP 043690,001559: 00,2132 02073 TC VSHRRND # SHIFT X COMPONENT. 043691,001560: 043692,001561: 00,2133 52155 DXCH MPAC # SWAP X AND Y COMPONENTS. 043693,001562: 00,2134 52160 DXCH MPAC +3 043694,001563: 00,2135 52155 DXCH MPAC 043695,001564: 00,2136 02073 TC VSHRRND # SHIFT Y COMPONENT. 043696,001565: 043697,001566: 00,2137 52155 DXCH MPAC # SWAP Y AND Z COMPONENTS. 043698,001567: 00,2140 52162 DXCH MPAC +5 043699,001568: 00,2141 52155 DXCH MPAC 043700,001569: 00,2142 02073 TC VSHRRND # SHIFT Z COMPONENT. 043701,001570: 043702,001571: 00,2143 17423 TCF VROTATEX # RESTORE COMPONENTS TO PROPER PLACES. 043703,001572: 043704,001573: # Page 1050 043705,001574: # VECTOR SHIFT LEFT -- DONE ONE PLACE AT A TIME. 043706,001575: 043707,001576: 00,2144 54135 -1 TS MPTEMP # SHIFTING LOOP. 043708,001577: 043709,001578: 00,2145 00006 VSSL EXTEND 043710,001579: 00,2146 30155 DCA MPAC 043711,001580: 00,2147 20155 DAS MPAC 043712,001581: 00,2150 00006 EXTEND 043713,001582: 00,2151 12153 BZF +2 043714,001583: 00,2152 07022 TC OVERFLOW 043715,001584: 043716,001585: 00,2153 00006 EXTEND 043717,001586: 00,2154 30160 DCA MPAC +3 043718,001587: 00,2155 20160 DAS MPAC +3 043719,001588: 00,2156 00006 EXTEND 043720,001589: 00,2157 12161 BZF +2 043721,001590: 00,2160 07017 TC OVERFLWY 043722,001591: 043723,001592: 00,2161 00006 EXTEND 043724,001593: 00,2162 30162 DCA MPAC +5 043725,001594: 00,2163 20162 DAS MPAC +5 043726,001595: 00,2164 00006 EXTEND 043727,001596: 00,2165 12167 BZF +2 043728,001597: 00,2166 07014 TC OVERFLWZ 043729,001598: 043730,001599: 00,2167 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNTER. 043731,001600: 00,2170 12144 TCF VSSL -1 043732,001601: 00,2171 16064 TCF DANZIG # EXIT. 043733,001602: 043734,001603: # Page 1051 043735,001604: # TSLC -- TRIPLE SHIFT LEFT AND COUNT. SHIFTS MPAC LEFT UNTIL GREATER THAN .5 IN MAGNITUDE, LEAVING 043736,001605: # THE COMPLEMENT OF THE NUMBER OF SHIFTS REQUIRED IN X. 043737,001606: 043738,001607: 00,2172 54135 TSLC2 TS MPTEMP # START BY ZEROING SHIFT COUNT (IN A NOW). 043739,001608: 00,2173 06726 TC BRANCH # EXIT WITH NO SHIFTING IF ARGUMENT ZERO. 043740,001609: 00,2174 12176 TCF +2 043741,001610: 00,2175 12212 TCF ENDTSLC # STORES ZERO SHIFT COUNT IN THIS CASE. 043742,001611: 043743,001612: 00,2176 07262 TC TPAGREE # MAY CAUSE UPSHIFT OF ONE EXTRA PLACE. 043744,001613: 043745,001614: 00,2177 30154 CA MPAC # BEGIN NORMALIZATION LOOP. 043746,001615: 00,2200 12207 TCF TSLCTEST 043747,001616: 043748,001617: 00,2201 24135 TSLCLOOP INCR MPTEMP # INCREMENT SHIFT COUNTER. 043749,001618: 00,2202 00006 EXTEND 043750,001619: 00,2203 30156 DCA MPAC +1 043751,001620: 00,2204 20156 DAS MPAC +1 043752,001621: 00,2205 60154 AD MPAC 043753,001622: 00,2206 26154 ADS MPAC 043754,001623: 00,2207 60000 TSLCTEST DOUBLE # SEE IF (ANOTHER) SHIFT IS REQUIRED 043755,001624: 00,2210 54000 OVSK 043756,001625: 00,2211 12201 TCF TSLCLOOP # YES -- INCREMENT COUNT AND SHIFT AGAIN. 043757,001626: 043758,001627: 00,2212 40135 ENDTSLC CS MPTEMP 043759,001628: 00,2213 16626 TCF STORE1 # STORE SHIFT COUNT AND RETURN TO DANZIG. 043760,001629: 043761,001630: # Page 1052 043762,001631: # THE FOLLOWING ROUTINE PROCESSES THE GENERAL SHIFT INSTRUCTIONS SR, SRR, SL, AND SLR. 043763,001632: # THE GIVEN ADDRESS IS DECODED AS FOLLOWS: 043764,001633: # BITS 1-7 SHIFT COUNT (SUBADDRESS) LESS THAN 125 DECIMAL. 043765,001634: # BIT 8 PSEUDO SIGN BIT (DETECTS CHANGE IN SIGN IN INDEXED SHIFTS). 043766,001635: # BIT 9 0 FOR LEFT SHIFT, AND 1 FOR RIGHT SHIFT. 043767,001636: # BIT 10 1 FOR TERMINAL ROUND ON SCALAR SHIFTS, 0 OTHERWISE 043768,001637: # BITS 11-13 0. 043769,001638: # BIT 14 1. 043770,001639: # BIT 15 0. 043771,001640: # THE ABOVE ENCODING IS DONE BY THE YUL SYSTEM. 043772,001641: 043773,001642: 00,2214 70116 GENSHIFT MASK ADDRWD # GET SHIFT COUNT, TESTING FOR ZERO. 043774,001643: 00,2215 10000 CCS A # (ARRIVES WITH C(A) = LOW7). 043775,001644: 00,2216 12224 TCF GENSHFT2 # IF NON-ZERO, PROCEED WITH DECREMENTED CT 043776,001645: 043777,001646: 00,2217 34742 CAF BIT10 # ZERO SHIFT COUNT. NO SHIFTS NEEDED BUT 043778,001647: 00,2220 70116 MASK ADDRWD # WE MIGHT HAVE TO ROUND MPAC ON SLR AND 043779,001648: 00,2221 10000 CCS A # SRR (SCALAR ONLY). 043780,001649: 00,2222 07141 TC ROUNDSUB 043781,001650: 00,2223 16064 TCF DANZIG 043782,001651: 043783,001652: 00,2224 54135 GENSHFT2 TS MPTEMP # DECREMENTED SHIFT COUNT TO MPTEMP. 043784,001653: 00,2225 34744 CAF BIT8 # TEST MEANING OF LOW SEVEN BIT COUNT IN 043785,001654: 00,2226 00006 EXTEND # MPTEMP NOW. 043786,001655: 00,2227 70116 MP ADDRWD 043787,001656: 00,2230 76250 MASK LOW2 # JUMPS ON SHIFT DIRECTION (BIT8) AND 043788,001657: 00,2231 50000 INDEX A 043789,001658: 00,2232 12233 TCF +1 # ORIGINAL SHIFT DIRECTION (BIT 9) 043790,001659: 00,2233 12332 TCF RIGHT- # NEGATIVE SHIFT COUNT FOR SL OR SLR. 043791,001660: 00,2234 12342 TCF LEFT # SL OR SLR. 043792,001661: 00,2235 12336 TCF LEFT- # NEGATIVE SHIFT COUNT WITH SR OR SRR. 043793,001662: 043794,001663: # Page 1053 043795,001664: # GENERAL SHIFT RIGHT 043796,001665: 043797,001666: 00,2236 10163 RIGHT CCS MODE # SET IF VECTOR OR SCALAR. 043798,001667: 00,2237 12277 TCF GENSCR 043799,001668: 00,2240 12277 TCF GENSCR 043800,001669: 043801,001670: 00,2241 30135 CA MPTEMP # SEE IF SHIFT COUNT LESS THAN 14D. 043802,001671: 00,2242 63733 VRIGHT2 AD NEG12 043803,001672: 00,2243 00006 EXTEND 043804,001673: 00,2244 62127 BZMF VSSR # IF SO, BRANCH AND SHIFT IMMEDIATELY. 043805,001674: 043806,001675: 00,2245 67752 AD NEGONE # IF NOT, REDUCE MPTEMP BY A TOTAL OF 14. 043807,001676: 00,2246 54135 TS MPTEMP # AND DO A SHIFT RIGHT AND ROUND BY 14. 043808,001677: 00,2247 34755 CAF ZERO # THE ROUND AT THIS STAGE MAY INTRODUCE A 043809,001678: 00,2250 54001 TS L # ONE BIT ERROR IN A SHIFT RIGHT 15D. 043810,001679: 00,2251 56154 XCH MPAC 043811,001680: 00,2252 56155 XCH MPAC +1 043812,001681: 00,2253 02272 TC SETROUND # X COMPONENT NOW SHIFTED, SO MAKE UP THE 043813,001682: 00,2254 20155 DAS MPAC # ROUNDING QUANTITY (0 IN A AND 0 OR +-1 043814,001683: # IN L). 043815,001684: 00,2255 56157 XCH MPAC +3 # REPEAT THE ABOVE PROCESS FOR Y AND Z/ 043816,001685: 00,2256 56160 XCH MPAC +4 043817,001686: 00,2257 02272 TC SETROUND 043818,001687: 00,2260 20160 DAS MPAC +3 # NO OVERFLOW ON THESE ADDS. 043819,001688: 043820,001689: 00,2261 56161 XCH MPAC +5 043821,001690: 00,2262 56162 XCH MPAC +6 043822,001691: 00,2263 02272 TC SETROUND 043823,001692: 00,2264 20162 DAS MPAC +5 043824,001693: 043825,001694: 00,2265 10135 CCS MPTEMP # SEE IF DONE, DOING FINAL DECREMENT. 043826,001695: 00,2266 54135 TS MPTEMP 043827,001696: 00,2267 12242 TCF VRIGHT2 043828,001697: 00,2270 04604 BIASLO DEC .2974 B-1 # SQRT CONSTANT 043829,001698: 043830,001699: 00,2271 16064 TCF DANZIG 043831,001700: 043832,001701: 00,2272 60000 SETROUND DOUBLE # MAKES UP ROUNDING QUANTITY FROM ARRIVING 043833,001702: 00,2273 54156 TS MPAC +2 # C(A). L IS ZERO INITIALLY. 043834,001703: 00,2274 34755 CAF ZERO 043835,001704: 00,2275 56001 XCH L 043836,001705: 00,2276 00002 TC Q # RETURN AND DO THE DAS, RESETTING L TO 0. 043837,001706: 043838,001707: # Page 1054 043839,001708: # PROCESS SR AND SRR FOR SCALARS. 043840,001709: 043841,001710: 00,2277 30135 GENSCR CA MPTEMP # SEE IF THE ORIGINAL SHIFT COUNT WAS LESS 043842,001711: 00,2300 63733 +1 AD NEG12 # THAN 14D. 043843,001712: 00,2301 00006 EXTEND 043844,001713: 00,2302 62322 BZMF DOSSHFT # DO THE SHIFT IMMEDIATELY IF SO. 043845,001714: 043846,001715: 00,2303 67752 +4 AD NEGONE # IF NOT, DECREMENT SHIFT COUNT BY 14D AND 043847,001716: 00,2304 54135 TS MPTEMP # SHIFT MPAC RIGHT 14 PLACES. 043848,001717: 00,2305 34755 CAF ZERO 043849,001718: 00,2306 56154 XCH MPAC 043850,001719: 00,2307 56155 XCH MPAC +1 043851,001720: 00,2310 54156 TS MPAC +2 043852,001721: 00,2311 10135 CCS MPTEMP # SEE IF FINISHED, DO FINAL DECREMENT. 043853,001722: 00,2312 54135 TS MPTEMP 043854,001723: 00,2313 02300 TC GENSCR +1 043855,001724: 00,2314 22650 SLOPEHI DEC .5884 # SQRT CONSTANT. 043856,001725: 00,2315 34742 CAF BIT10 # FINISHED WITH SHIFT. SEE IF ROUND 043857,001726: 00,2316 70116 MASK ADDRWD # WANTED. 043858,001727: 00,2317 10000 CCS A 043859,001728: 00,2320 07141 TC ROUNDSUB 043860,001729: 00,2321 16064 TCF DANZIG # DO SO AND/OR EXIT. 043861,001730: 043862,001731: 00,2322 50135 DOSSHFT INDEX MPTEMP # PICK UP SHIFTING BIT. 043863,001732: 00,2323 34736 CAF BIT14 043864,001733: 00,2324 54135 TS MPTEMP 043865,001734: 00,2325 34742 CAF BIT10 # SEE IF TERMINAL ROUND DESIRED. 043866,001735: 00,2326 70116 MASK ADDRWD 043867,001736: 00,2327 10000 CCS A 043868,001737: 00,2330 12031 TCF RIGHTR # YES. 043869,001738: 00,2331 12033 TCF MPACSHR # JUST SHIFT RIGHT. 043870,001739: 043871,001740: # Page 1055 043872,001741: # PROCESS THE RIGHT- (SL(R) WITH A NEGATIVE COUNT), LEFT-, AND LEFT OPTIONS. 043873,001742: 043874,001743: 00,2332 40135 RIGHT- CS MPTEMP # GET ABSOLUTE VALUE - 1 OF SHIFT COUNT 043875,001744: 00,2333 62126 AD OCT176 # UNDERSTANDING THAT BIT8 (PSEUDO-SIGN) 043876,001745: 00,2334 54135 TS MPTEMP # WAS 1 INITIALLY. 043877,001746: 00,2335 12236 TCF RIGHT # DO NORMAL SHIFT RIGHT. 043878,001747: 043879,001748: 00,2336 42126 LEFT- CS OCT176 # SAME PROLOGUE TO LEFT FOR INDEXED RIGHT 043880,001749: 00,2337 60135 AD MPTEMP # SHIFT WHOSE NET SHIFT COUNT IS NEGATIVE 043881,001750: 00,2340 40000 COM 043882,001751: 00,2341 54135 TS MPTEMP 043883,001752: 043884,001753: 00,2342 10163 LEFT CCS MODE # SINCE LEFT SHIFTING IS DONE ONE PLACE AT 043885,001754: 00,2343 12346 TCF GENSCL # A TIME, NO COMPARISON WITH 14 NEED BE 043886,001755: 00,2344 12346 TCF GENSCL # DONE. FOR SCALARS, SEE IF TERMINAL ROUND 043887,001756: 00,2345 12145 TCF VSSL # DESIRED. FOR VECTORS, SHIFT IMMEDIATELY. 043888,001757: 043889,001758: 00,2346 40116 GENSCL CS ADDRWD # PUT ROUNDING BIT (BIT 10 OF ADDRWD) INTO 043890,001759: 00,2347 00006 EXTEND # BIT 15 OF CYR WHERE THE ROUNDING BIT OF 043891,001760: 00,2350 74746 MP BIT6 # A SHORT SHIFT LEFT WOULD BE 043892,001761: 00,2351 54020 TS CYR 043893,001762: 00,2352 12103 TCF TSSL +2 # DO THE SHIFT. 043894,001763: 043895,001764: # Page 1056 043896,001765: # SCALAR DIVISION INSTRUCTIONS, DDV AND BDDV, ARE EXECUTED HERE. AT THIS POINT, THE DIVIDEND IS IN MPAC 043897,001766: # AND THE DIVISOR IS IN BUF. 043898,001767: 043899,001768: 00,2353 44753 DDV/BDDV CS ONE # INITIALIZATION 043900,001769: 00,2354 54136 TS DVSIGN # +-1 FOR POSITIVE QUOTIENT -- -0 FOR NEG. 043901,001770: 00,2355 54137 TS DVNORMCT # DIVIDENT NORMALIZATION COUNT. 043902,001771: 00,2356 54140 TS MAXDVSW # NEAR-ONE DIVIDE FLAG. 043903,001772: 043904,001773: 00,2357 10130 CCS BUF # FORCE BUF POSITIVE WITH THE MAJOR PART 043905,001774: 00,2360 12516 TCF BUFPOS # NON-ZERO. 043906,001775: 00,2361 12363 TCF +2 043907,001776: 00,2362 12531 TCF BUFNEG 043908,001777: 043909,001778: 00,2363 54156 BUFZERO TS MPAC +2 # ZERO THIS. 043910,001779: 00,2364 07262 TC TPAGREE # FORCE SIGN AGREEMENT BEFORE OVERFLOW 043911,001780: 043912,001781: 00,2365 10154 CCS MPAC # TEST TO SEE IF MPAC NON-ZERO. (TOO BIG) 043913,001782: 00,2366 12414 TCF OVF+ # MAJOR PART OF DIVIDEND IS POSITIVE NON-0 043914,001783: 00,2367 12371 TCF +2 043915,001784: 00,2370 12413 TCF OVF+ -1 # MAJOR PART OF DIVIDEND IS NEG. NON-ZERO 043916,001785: 043917,001786: 00,2371 56131 XCH BUF +1 # SHIFT DIVIDENT AND DIVISOR LEFT 14 043918,001787: 00,2372 56130 XCH BUF 043919,001788: 00,2373 56155 XCH MPAC +1 043920,001789: 00,2374 56154 XCH MPAC 043921,001790: 00,2375 10130 CCS BUF # TRY AGAIN ON FORMER MINOR PART. 043922,001791: 00,2376 12422 TCF BUF+ 043923,001792: 00,2377 12401 TCF +2 # OVERFLOW ON ZERO DIVISOR. 043924,001793: 00,2400 12416 TCF BUF- 043925,001794: 043926,001795: 00,2401 40154 CS MPAC # SIGN OF MPAC DETERMINES SIGN OF RESULT. 043927,001796: 00,2402 00006 SGNDVOVF EXTEND 043928,001797: 00,2403 62405 BZMF +2 043929,001798: 00,2404 24136 INCR DVSIGN # NEGMAX IN MPAC PERHAPS. 043930,001799: 00,2405 34733 DVOVF CAF POSMAX # ON DIVISION OVERFLOW OF ANY SORT, SET 043931,001800: 00,2406 54154 TS MPAC # SET DP MPAC TO +-POSMAX. 043932,001801: 00,2407 02630 TC FINALDV +3 043933,001802: 00,2410 34753 CAF ONE # SET OVEFLOW INDICATOR AND EXIT. 043934,001803: 00,2411 54121 TS OVFIND 043935,001804: 00,2412 06064 TC DANZIG 043936,001805: 043937,001806: 00,2413 24136 -1 INCR DVSIGN 043938,001807: 00,2414 40131 OVF+ CS BUF +1 # LOAD LOWER ORDER PART OF DIVISOR. 043939,001808: 00,2415 12402 TCF SGNDVOVF # GET SIGN OF RESULT. 043940,001809: 043941,001810: 00,2416 00006 BUF- EXTEND # IF BUF IS NEGATIVE, COMPLEMENT IT AND 043942,001811: 00,2417 40131 DCS BUF # MAINTAIN DVSIGN FOR FINAL QUOTIENT SIGN. 043943,001812: 00,2420 52131 DXCH BUF 043944,001813: 00,2421 24136 INCR DVSIGN # NOW -0. 043945,001814: 043946,001815: # Page 1057 043947,001816: 00,2422 10154 BUF+ CCS MPAC # FORCE MPAC POSITIVE, CHECKING FOR ZERO 043948,001817: 00,2423 12437 TCF MPAC+ # DIVIDEND IN THE PROCESS. 043949,001818: 00,2424 12426 TCF +2 043950,001819: 00,2425 12433 TCF MPAC- 043951,001820: 00,2426 10155 CCS MPAC +1 043952,001821: 00,2427 12437 TCF MPAC+ 043953,001822: 00,2430 16064 TCF DANZIG # EXIT IMMEDIATELY ON ZERO DIVIDEND. 043954,001823: 00,2431 12433 TCF MPAC- 043955,001824: 00,2432 16064 TCF DANZIG 043956,001825: 043957,001826: 00,2433 00006 MPAC- EXTEND # FORCE MPAC POSITIVE AS BUF IN BUF-. 043958,001827: 00,2434 40155 DCS MPAC 043959,001828: 00,2435 52155 DXCH MPAC 043960,001829: 00,2436 24136 INCR DVSIGN # NOW +1 OR -0. 043961,001830: 043962,001831: # Page 1058 043963,001832: 00,2437 40154 MPAC+ CS MPAC # CHECK FOR DIVISION OVERFLOW. IF THE 043964,001833: 00,2440 67752 AD NEGONE # MAJOR PART OF THE DIVIDEND IS LESS THAN 043965,001834: 00,2441 60130 AD BUF # THE MAJOR PART OF THE DIVISOR BY AT 043966,001835: 00,2442 10000 CCS A # LEAST TWO, WE CAN PROCEED IMMEDIATELY 043967,001836: 00,2443 12505 TCF DVNORM # WITHOUT NORMALIZATION PRODUCING A DVMAX. 043968,001837: 00,2444 60001 -1/2+2 OCT 60001 # USED IN SQRTSUB. 043969,001838: 043970,001839: 00,2445 12446 TCF +1 # IF THE ABOVE DOES NOT HOLD, FORCE SIGN 043971,001840: 00,2446 34736 CAF HALF # AGREEMENT IN NUMERATOR AND DENOMINATOR 043972,001841: 00,2447 60000 DOUBLE # TO FACILITATE OVERFLOW AND NEAR-ONE 043973,001842: 00,2450 60155 AD MPAC +1 # CHECKING. 043974,001843: 00,2451 54155 TS MPAC +1 043975,001844: 00,2452 34755 CAF ZERO 043976,001845: 00,2453 64733 AD POSMAX 043977,001846: 00,2454 26154 ADS MPAC 043978,001847: 043979,001848: 00,2455 34736 CAF HALF # SAME FOR BUF. 043980,001849: 00,2456 60000 DOUBLE 043981,001850: 00,2457 60131 AD BUF +1 043982,001851: 00,2460 54131 TS BUF +1 043983,001852: 00,2461 34755 CAF ZERO 043984,001853: 00,2462 64733 AD POSMAX 043985,001854: 00,2463 26130 ADS BUF 043986,001855: 043987,001856: 00,2464 40154 CS MPAC # CHECK MAGNITUDE OF SIGN-CORRECTED 043988,001857: 00,2465 60130 AD BUF # OPERANDS. 043989,001858: 00,2466 10000 CCS A 043990,001859: 00,2467 12505 TCF DVNORM # DIVIDE OK -- WILL NOT BECOME MAXOV CASE. 043991,001860: 00,2470 00133 LBUF2 ADRES BUF2 043992,001861: 00,2471 12405 TCF DVOVF # DIVISOR NOT LESS THAN DIVIDEND -- OVF. 043993,001862: 043994,001863: 00,2472 54140 TS MAXDVSW # IF THE MAJOR PARTS OF THE DIVIDEND AND 043995,001864: 00,2473 40155 CS MPAC +1 # DIVISOR ARE EQUAL, A SPECIAL APPROXIMA- 043996,001865: 00,2474 60131 AD BUF +1 # TION IS USED (PROVIDED THE DIVISION IS 043997,001866: 00,2475 00006 EXTEND # POSSIBLE, OF COURSE). 043998,001867: 00,2476 62405 BZMF DVOVF 043999,001868: 00,2477 12505 TCF DVNORM # IF NO OVERFLOW. 044000,001869: 044001,001870: # Page 1059 044002,001871: 00,2500 00006 BUFNORM EXTEND # ADD -1 TO AUGMENT SHIFT COUNT AND SHIFT 044003,001872: 00,2501 24137 AUG DVNORMCT # LEFT ONE PLACE. 044004,001873: 00,2502 00006 EXTEND 044005,001874: 00,2503 30131 DCA BUF 044006,001875: 00,2504 20131 DAS BUF 044007,001876: 044008,001877: 00,2505 30130 DVNORM CA BUF # SEE IF DIVISOR NORMALIZED YET. 044009,001878: 00,2506 60000 DOUBLE 044010,001879: 00,2507 54000 OVSK 044011,001880: 00,2510 12500 TCF BUFNORM # NO -- SHIFT LEFT ONE AND TRY AGAIN. 044012,001881: 044013,001882: 00,2511 52155 DXCH MPAC # CALL DIVIDEND NORMALIZATION SEQUENCE 044014,001883: 00,2512 50137 INDEX DVNORMCT # PRIOR TO DOING THE DIVIDE. 044015,001884: 00,2513 02565 TC MAXTEST 044016,001885: 044017,001886: 00,2514 54156 TS MPAC +2 # RETURNS WITH DIVISION DONE AND C(A) = 0. 044018,001887: 00,2515 16064 TCF DANZIG 044019,001888: 044020,001889: 00,2516 10000 BUFPOS CCS A 044021,001890: 00,2517 12422 TCF BUF+ # TO BUF+ IF BUF IS GREATER THAN +1. 044022,001891: 044023,001892: 00,2520 40131 CS BUF +1 # IF BUF IS +1, FORCING SIGN AGREEMENT 044024,001893: 00,2521 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO. 044025,001894: 00,2522 62422 BZMF BUF+ # BRANCH IF SIGNS AGREE. 044026,001895: 044027,001896: 00,2523 34736 CA HALF # SIGNS DISAGREE. FORCE AGREEMENT. 044028,001897: 00,2524 60000 +6 DOUBLE 044029,001898: 00,2525 26131 ADS BUF +1 044030,001899: 00,2526 34755 CA ZERO 044031,001900: 00,2527 54130 TS BUF 044032,001901: 00,2530 12363 TCF BUFZERO 044033,001902: 044034,001903: 00,2531 10000 BUFNEG CCS A 044035,001904: 00,2532 12416 TCF BUF- # TO BUF- IF BUF IS LESS THAN -1. 044036,001905: 044037,001906: 00,2533 30131 CA BUF +1 # IF BUF IS -1, FORCING SIGN AGREEMENT 044038,001907: 00,2534 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO. 044039,001908: 00,2535 62416 BZMF BUF- # BRANCH IF SIGNS AGREE. 044040,001909: 044041,001910: 00,2536 44736 CS HALF # SIGNS DISAGREE. FORCE AGREEMENT. 044042,001911: 00,2537 12524 TCF BUFPOS +6 044043,001912: 044044,001913: # Page 1060 044045,001914: # THE FOLLOWING ARE PROLOGUES TO SHIFT THE DIVIDEND ARRIVING IN A AND L BEFORE THE DIVIDE. 044046,001915: 044047,001916: 00,2540 22021 -21D LXCH SR # SPECIAL PROLOGUE FOR UNIT WHEN THE 044048,001917: 00,2541 00006 EXTEND # LENGTH OF THE ARGUMENT WAS NOT LESS THAN 044049,001918: 00,2542 74736 MP HALF # .5. IN THIS CASE, EACH COMPONENT MUST BE 044050,001919: 00,2543 56001 XCH L # SHIFTED RIGHT ONE TO PRODUCE A HALF-UNIT 044051,001920: 00,2544 60021 AD SR # VECTOR. 044052,001921: 00,2545 56001 XCH L 044053,001922: 00,2546 12571 TCF GENDDV +1 # WITH DP DIVIDEND IN A,L. 044054,001923: 044055,001924: 00,2547 20001 DDOUBL # PROLOGUE WHICH NORMALIZES THE DIVIDEND 044056,001925: 00,2550 20001 DDOUBL # WHEN IT IS KNOWN THAT NO DIVISION 044057,001926: 00,2551 20001 DDOUBL # OVEFLOW WILL OCCUR. 044058,001927: 00,2552 20001 DDOUBL 044059,001928: 00,2553 20001 DDOUBL 044060,001929: 00,2554 20001 DDOUBL 044061,001930: 00,2555 20001 DDOUBL 044062,001931: 00,2556 20001 DDOUBL 044063,001932: 00,2557 20001 DDOUBL 044064,001933: 00,2560 20001 DDOUBL 044065,001934: 00,2561 20001 DDOUBL 044066,001935: 00,2562 20001 DDOUBL 044067,001936: 00,2563 20001 DDOUBL 044068,001937: 00,2564 52155 DXCH MPAC 044069,001938: 044070,001939: 00,2565 10140 MAXTEST CCS MAXDVSW # 0 IF MAJORS MIGHT BE =, -1 OTHERWISE. 044071,001940: 00,2566 06552 BIASHI DEC .4192 B-1 # SQRT CONSTANTS. 044072,001941: 044073,001942: 00,2567 12642 TCF MAXDV # CHECK TO SEE IF THAY ARE NOW EQUAL. 044074,001943: 044075,001944: # Page 1061 044076,001945: # THE FOLLOWING IS A GENERAL PURPOSE DOUBLE PRECISION DIVISION ROUTINE. IT DIVIDES MPAC BY BUF AND LEAVES 044077,001946: # THE RESULT IN MPAC. THE FOLLOWING CONDITIONS MUST BE SATISFIED: 044078,001947: 044079,001948: # 1. THE DIVISOR (BUF) MUST BE POSITIVE AND NOT LESS THAN .5. 044080,001949: 044081,001950: # 2. THE DIVIDEND (MPAC) MUST BE POSITIVE WITH THE MAJOR PART OF MPAC STRICTLY LESS THAN THAT OF BUF 044082,001951: # (A SPECIAL APPROXIMATION, MAXDV, IS USED WHEN THE MAJOR PARTS ARE EQUAL). 044083,001952: 044084,001953: # UNDERSTANDING THAT A/B = Q + S(R/B) WHERE S = 2(-14) AND Q AND R ARE QUOTIENT AND REMAINDER, RESPEC- 044085,001954: # TIVELY, THE FOLLOWING APPROXIMATION IS OBTAINED BY MULTIPLYING ABOVE AND BELOW BY C - SD AND NEGLECTING TERMS OF 044086,001955: # ORDER S-SQUARED (POSSIBLY INTRODUCING ERROR INTO THE LOW TWO BITS OF THE RESULT). SIGN AGREEMENT IS UNNECESSARY. 044087,001956: 044088,001957: # A + SB . (R - CD) A + SB 044089,001958: # ------ = Q + S(------) WHERE Q AND R ARE QUOTIENT AND REMAINDER OF ------ RESPECTIVELY. 044090,001959: # C + SD ( C } C 044091,001960: 044092,001961: 00,2570 52155 GENDDV DXCH MPAC # WE NEED A AND B ONLY FOR FIRST DV. 044093,001962: 00,2571 00006 +1 EXTEND # (SPECIAL UNIT PROLOGUE ENTERS HERE). 044094,001963: 00,2572 10130 DV BUF # A NOW CONTAINS Q AND L, R. 044095,001964: 00,2573 52155 DXCH MPAC 044096,001965: 044097,001966: 00,2574 40154 CS MPAC # FORM DIVIDEND FOR MINOR PART OF RESULT. 044098,001967: 00,2575 00006 EXTEND 044099,001968: 00,2576 70131 MP BUF +1 044100,001969: 00,2577 60155 AD MPAC +1 # OVERFLOW AT THIS POINT IS POSITIVE SINCE 044101,001970: 00,2600 54000 OVSK # R IS POSITIVE IN EVERY CASE. 044102,001971: 00,2601 12606 TCF +5 044103,001972: 044104,001973: 00,2602 00006 EXTEND # OVERFLOW CAN BE REMOVED BY SUBTRACTING C 044105,001974: 00,2603 60130 SU BUF # (BUF) ONCE SINCE R IS ALWAYS LESS THAN C 044106,001975: 00,2604 24154 INCR MPAC # IN THIS CASE. INCR COMPENSATES SUBTRACT. 044107,001976: 00,2605 12610 TCF +DOWN # (SINCE C(A) IS STILL POSITIVE). 044108,001977: 044109,001978: 00,2606 00006 +5 EXTEND # C(A) CAN BE MADE LESS THAN C IN MAGNI- 044110,001979: 00,2607 62620 BZMF -UP # TUDE BY DIMINISHING IT BY C (SINCE C IS 044111,001980: # NOT LESS THAN .5) UNLESS C(A) = 0. 044112,001981: 044113,001982: # Page 1062 044114,001983: 00,2610 00006 +DOWN EXTEND 044115,001984: 00,2611 60130 SU BUF # IF POSITIVE, REDUCE ONLY IF NECESSARY 044116,001985: 00,2612 00006 EXTEND # SINCE THE COMPENSATING INCR MIGHT CAUSE 044117,001986: 00,2613 12616 BZF +3 # OVERFLOW. 044118,001987: 00,2614 00006 EXTEND # DON'T SUBTRACT UNLESS RESULT IS POSITIVE 044119,001988: 00,2615 62624 BZMF ENDMAXDV # OR ZERO. 044120,001989: 044121,001990: 00,2616 24154 +3 INCR MPAC # KEEP SUBTRACT HERE AND COMPENSATE. 044122,001991: 00,2617 12625 TCF FINALDV 044123,001992: 044124,001993: 00,2620 00006 -UP EXTEND # IF ZERO, SET MINOR PART OF RESULT TO 044125,001994: 00,2621 12630 BZF FINALDV +3 # ZERO. 044126,001995: 044127,001996: 00,2622 00006 EXTEND # IF NEGATIVE, ADD C TO A, SUBTRACTING ONE 044128,001997: 00,2623 26154 DIM MPAC # TO COMPENSATE. DIM IS OK HERE SINCE THE 044129,001998: 00,2624 60130 ENDMAXDV AD BUF # MAJOR PART NEVER GOES NEGATIVE. 044130,001999: 044131,002000: # Page 1063 044132,002001: 00,2625 22007 FINALDV ZL # DO DV TO OBTAIN MINOR PART OF RESULT. 044133,002002: 00,2626 00006 EXTEND 044134,002003: 00,2627 10130 DV BUF 044135,002004: 00,2630 54155 +3 TS MPAC +1 044136,002005: 044137,002006: 00,2631 10136 CCS DVSIGN # LEAVE RESULT POSITIVE UNLESS C(DVSIGN). 044138,002007: 00,2632 00002 TC Q 044139,002008: 00,2633 00002 TC Q 044140,002009: 00,2634 00002 TC Q 044141,002010: 044142,002011: 00,2635 00006 EXTEND 044143,002012: 00,2636 40155 DCS MPAC 044144,002013: 00,2637 52155 DXCH MPAC 044145,002014: 00,2640 34755 CAF ZERO # SO WE ALWAYS RETURN WITH C(A) = 0. 044146,002015: 00,2641 00002 TC Q 044147,002016: 044148,002017: # Page 1064 044149,002018: # IF THE MAJOR PARTS OF THE DIVISOR AND DIVIDEND ARE EQUAL, BUT THE MINOR PARTS ARE SUCH THAT THE 044150,002019: # DIVIDEND IS STRICTLY LESS THAN THE DIVISOR IN MAGNITUDE, THE FOLLOWING APPROXIMATION IS USED. THE ASSUMPTIONS 044151,002020: # ARE THE SAME AS THE GENERAL ROUTINE WITH THE ADDITION THAT SIGN AGREEMENT IS NECESSARY (B, C, & D POSITIVE). 044152,002021: 044153,002022: # C + SB . (C + B - D) 044154,002023: # ------ = 37777 + S(---------) 044155,002024: # C + SD ( C ) 044156,002025: 044157,002026: # THE DIVISION MAY BE PERFORMED IMMEDIATELY SINCE B IS STRICTLY LESS THAN D AND C IS NOT LESS THAN .5. 044158,002027: 044159,002028: 00,2642 40154 MAXDV CS MPAC # SEE IF MAXDV CASE STILL HOLDS AFTER 044160,002029: 00,2643 60130 AD BUF # NORMALIZATION. 044161,002030: 00,2644 00006 EXTEND 044162,002031: 00,2645 12647 BZF +2 044163,002032: 00,2646 12570 TCF GENDDV # MPAC NOW LESS THAN BUFF -- DIVIDE AS USUAL. 044164,002033: 044165,002034: 00,2647 34733 +2 CAF POSMAX # SET MAJOR PART OF RESULT. 044166,002035: 00,2650 54154 TS MPAC 044167,002036: 044168,002037: 00,2651 40131 CS BUF +1 # FORM DIVIDEND OF MINOR PART OF RESULT. 044169,002038: 00,2652 60155 AD MPAC +1 044170,002039: 00,2653 12624 TCF ENDMAXDV # GO ADD C AND DO DIVIDE, ATTACHING SIGN 044171,002040: # BEFORE EXITING. 044172,002041: 044173,002042: # Page 1065 044174,002043: # VECTOR DIVIDED BY SCALAR, V/SC, IS EXECUTED HERE. THE VECTOR IS NOW IN MPAC WITH SCALAR IN BUF. 044175,002044: 044176,002045: 00,2654 44753 V/SC2 CS ONE # INITIALIZE DIVIDEND NORMALIZATION COUNT 044177,002046: 00,2655 54137 TS DVNORMCT # AND DIVISION SIGN REGISTER. 044178,002047: 00,2656 54127 TS VBUF +5 044179,002048: 044180,002049: 00,2657 03010 TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR 044181,002050: 044182,002051: 00,2660 52131 DXCH BUF 044183,002052: 00,2661 07547 TC ALSIGNAG # SIGN AGREE BUF 044184,002053: 00,2662 52131 DXCH BUF 044185,002054: 00,2663 10130 CCS BUF # FORCE DIVISOR POSITIVE WITH MAJOR PART 044186,002055: 00,2664 12721 TCF /BUF+ # NON-ZERO (IF POSSIBLE). 044187,002056: 00,2665 12667 TCF +2 044188,002057: 00,2666 12715 TCF /BUF- 044189,002058: 044190,002059: 00,2667 56131 XCH BUF +1 # SHIFT VECTOR AND SCALAR LEFT 14. 044191,002060: 00,2670 56130 XCH BUF 044192,002061: 00,2671 56155 XCH MPAC +1 044193,002062: 00,2672 56154 XCH MPAC 044194,002063: 00,2673 00006 EXTEND # CHECK FOR OVERFLOW IN EACH CASE. 044195,002064: 00,2674 12676 BZF +2 044196,002065: 00,2675 12405 TCF DVOVF 044197,002066: 044198,002067: 00,2676 56160 XCH MPAC +4 044199,002068: 00,2677 56157 XCH MPAC +3 044200,002069: 00,2700 00006 EXTEND 044201,002070: 00,2701 12703 BZF +2 044202,002071: 00,2702 12405 TCF DVOVF 044203,002072: 044204,002073: 00,2703 56162 XCH MPAC +6 044205,002074: 00,2704 56161 XCH MPAC +5 044206,002075: 00,2705 00006 EXTEND 044207,002076: 00,2706 12710 BZF +2 044208,002077: 00,2707 12405 TCF DVOVF 044209,002078: 044210,002079: 00,2710 10130 CCS BUF 044211,002080: 00,2711 12721 TCF /BUF+ 044212,002081: 00,2712 12405 TCF DVOVF # ZERO DIVISOR - OVERFLOW. 044213,002082: 00,2713 12715 TCF /BUF- 044214,002083: 00,2714 12405 TCF DVOVF 044215,002084: 044216,002085: 00,2715 00006 /BUF- EXTEND # ON NEGATIVE, COMPLEMENT BUF AND MAINTAIN 044217,002086: 00,2716 40131 DCS BUF # DVSIGN IN VBUF +5. 044218,002087: 00,2717 52131 DXCH BUF 044219,002088: 00,2720 24127 INCR VBUF +5 044220,002089: 044221,002090: # Page 1066 044222,002091: 00,2721 00006 /BUF+ EXTEND 044223,002092: 00,2722 30131 DCA BUF # LEAVE ABS(ORIG DIVISOR) IN BUF2 044224,002093: 00,2723 52134 DXCH BUF2 # FOR OVERFLOW TESTING 044225,002094: 00,2724 12732 TCF /NORM # NORMALIZE DIVISOR IN BUF. 044226,002095: 044227,002096: 00,2725 00006 /NORM2 EXTEND # IF LESS THAN .5, AUGMENT DVNORMCT AND 044228,002097: 00,2726 24137 AUG DVNORMCT # DOUBLE DIVISOR. 044229,002098: 00,2727 00006 EXTEND 044230,002099: 00,2730 30131 DCA BUF 044231,002100: 00,2731 20131 DAS BUF 044232,002101: 044233,002102: 00,2732 30130 /NORM CA BUF # SEE IF DIVISOR NORMALIZED. 044234,002103: 00,2733 60000 DOUBLE 044235,002104: 00,2734 54000 OVSK 044236,002105: 00,2735 12725 TCF /NORM2 # DOUBLE AND TRY AGAIN IF NOT. 044237,002106: 044238,002107: 00,2736 02750 TC V/SCDV # DO X COMPONENT DIVIDE. 044239,002108: 00,2737 52160 DXCH MPAC +3 # SUPPLY ARGUMENTS IN USUAL SEQUENCE. 044240,002109: 00,2740 52155 DXCH MPAC 044241,002110: 00,2741 52160 DXCH MPAC +3 044242,002111: 044243,002112: 00,2742 02750 TC V/SCDV # Y COMPONENT. 044244,002113: 00,2743 52162 DXCH MPAC +5 044245,002114: 00,2744 52155 DXCH MPAC 044246,002115: 00,2745 52162 DXCH MPAC +5 044247,002116: 044248,002117: 00,2746 02750 TC V/SCDV # Z COMPONENT. 044249,002118: 00,2747 17423 TCF VROTATEX # GO RE-ARRANGE COMPONENTS BEFORE EXIT. 044250,002119: 044251,002120: # Page 1067 044252,002121: # SUBROUTINE USED BY V/SC TO DIVIDE VECTOR COMPONENT IN MPAC,+1 BY THE SCALAR GIVEN IN BUF. 044253,002122: 044254,002123: 00,2750 30127 V/SCDV CA VBUF +5 # REFLECTS SIGN OF SCALAR. 044255,002124: 00,2751 54136 TS DVSIGN 044256,002125: 044257,002126: 00,2752 10154 CCS MPAC # FORCE MPAC POSITIVE, EXITING ON ZERO. 044258,002127: 00,2753 12767 TCF /MPAC+ 044259,002128: 00,2754 12756 TCF +2 044260,002129: 00,2755 12763 TCF /MPAC- 044261,002130: 044262,002131: 00,2756 10155 CCS MPAC +1 044263,002132: 00,2757 12767 TCF /MPAC+ 044264,002133: 00,2760 00002 TC Q 044265,002134: 00,2761 12763 TCF /MPAC- 044266,002135: 00,2762 00002 TC Q 044267,002136: 044268,002137: 00,2763 00006 /MPAC- EXTEND # USUAL COMPLEMENTING AND SETTING OF SIGN. 044269,002138: 00,2764 40155 DCS MPAC 044270,002139: 00,2765 52155 DXCH MPAC 044271,002140: 00,2766 24136 INCR DVSIGN 044272,002141: 044273,002142: 00,2767 44753 /MPAC+ CS ONE # INITIALIZE NEAR-ONE SWITCH. 044274,002143: 00,2770 54140 TS MAXDVSW 044275,002144: 044276,002145: 00,2771 40154 CS MPAC # CHECK POSSIBLE OVERFLOW. 044277,002146: 00,2772 60133 AD BUF2 # UNNORMALIZED INPUT DIVISOR. 044278,002147: 00,2773 10000 CCS A 044279,002148: 00,2774 13004 TCF DDVCALL # NOT NEAR-ONE 044280,002149: 00,2775 12777 TCF +2 # +0 IS JUST POSSIBLE 044281,002150: 00,2776 12405 TCF DVOVF # NO HOPE 044282,002151: 00,2777 54140 TS MAXDVSW # SIGNAL POSSIBLE NEAR-ONE CASE 044283,002152: 00,3000 40155 CS MPAC +1 # SEE IF DIVISION CAN BE DONE 044284,002153: 00,3001 60134 AD BUF2 +1 044285,002154: 00,3002 00006 EXTEND 044286,002155: 00,3003 62405 BZMF DVOVF 044287,002156: 044288,002157: 00,3004 52155 DDVCALL DXCH MPAC # CALL PRE-DIVIDE NORMALIZATION. 044289,002158: 00,3005 50137 INDEX DVNORMCT 044290,002159: 00,3006 12565 TCF MAXTEST 044291,002160: 044292,002161: # Page 1068 044293,002162: 00,3007 32506 SLOPELO DEC .8324 044294,002163: 044295,002164: 00,3010 56002 VECAGREE XCH Q # SAVE Q IN A 044296,002165: 00,3011 52155 DXCH MPAC 044297,002166: 00,3012 07547 TC ALSIGNAG # SIGNAGREE MPAC 044298,002167: 00,3013 52155 DXCH MPAC 044299,002168: 00,3014 52160 DXCH MPAC +3 044300,002169: 00,3015 07547 TC ALSIGNAG # SIGN AGREE MPAC +3 044301,002170: 00,3016 52160 DXCH MPAC +3 044302,002171: 00,3017 52162 DXCH MPAC +5 044303,002172: 00,3020 07547 TC ALSIGNAG # SIGNAGREE MPAC +5 044304,002173: 00,3021 52162 DXCH MPAC +5 044305,002174: 00,3022 00000 TC A 044306,002175: 044307,002176: # Page 1069 044308,002177: # THE FOLLOWING ROUTINE EXECUTES THE UNIT INSTRUCTION, WHICH TAKES THE UNIT OF THE VECTOR IN MPAC. 044309,002178: 044310,002179: 00,3023 03010 UNIT TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR 044311,002180: 00,3024 07535 TC MPACVBUF # SAVE ARGUMENT IN VBUF 044312,002181: 00,3025 34755 CAF ZERO # MUST SENSE OVERFLOW IN FOLLOWING DOT. 044313,002182: 00,3026 56121 XCH OVFIND 044314,002183: 00,3027 54141 TS TEM1 044315,002184: 00,3030 03317 TC VSQSUB # DOT MPAC WITH ITSELF. 044316,002185: 00,3031 30141 CA TEM1 044317,002186: 00,3032 56121 XCH OVFIND 044318,002187: 00,3033 00006 EXTEND 044319,002188: 00,3034 13036 BZF +2 044320,002189: 00,3035 12405 TCF DVOVF 044321,002190: 00,3036 00006 EXTEND 044322,002191: 00,3037 30155 DCA MPAC # LEAVE THE SQUARE OF THE LENGTH OF THE 044323,002192: 00,3040 50120 INDEX FIXLOC # ARGUMENT IN LVSQUARE. 044324,002193: 00,3041 52043 DXCH LVSQUARE 044325,002194: 044326,002195: 00,3042 03343 TC SQRTSUB # GO TAKE THE NORMALIZED SQUARE ROOT. 044327,002196: 044328,002197: 00,3043 10154 CCS MPAC # CHECK FOR UNIT OVERFLOW. 044329,002198: 00,3044 13051 TCF +5 # MPAC IS NOT LESS THAN .5 UNLESS 044330,002199: 00,3045 54001 TS L 044331,002200: 00,3046 50120 INDEX FIXLOC 044332,002201: 00,3047 52045 DXCH LV 044333,002202: 00,3050 12405 TCF DVOVF # INPUT TO SQRTSUB WAS 0. 044334,002203: 044335,002204: 00,3051 44317 CS FOURTEEN # SEE IF THE INPUT WAS SO SMALL THAT THE 044336,002205: 00,3052 60135 AD MPTEMP # FIRST TWO REGISTERS OF THE SQUARE WERE 0 044337,002206: 00,3053 10000 CCS A 044338,002207: 00,3054 40000 COM # IF SO, SAVE THE NEGATIVE OF THE SHIFT 044339,002208: 00,3055 13133 TCF SMALL # COUNT -15D. 044340,002209: 044341,002210: 00,3056 13065 TCF LARGE # (THIS IS USUALLY THE CASE.) 044342,002211: 044343,002212: 00,3057 44761 CS THIRTEEN # IF THE SHIFT COUNT WAS EXACTLY 14, SET 044344,002213: 00,3060 54135 TS MPTEMP # THE PRE-DIVIDE NORM COUNT TO -13D. 044345,002214: 044346,002215: 00,3061 30154 CA MPAC # SHIFT THE LENGTH RIGHT 14 BEFORE STORING 044347,002216: 00,3062 54001 SMALL2 TS L # (SMALL EXITS TO THIS POINT). 044348,002217: 00,3063 34755 CAF ZERO 044349,002218: 00,3064 13112 TCF LARGE2 # GO TO STORE LENGTH AND PROCEED. 044350,002219: 044351,002220: 00,3065 10135 LARGE CCS MPTEMP # MOST ALL CASES COME HERE. 044352,002221: 00,3066 13074 TCF LARGE3 # SEE IF NO NORMALIZATION WAS REQUIRED BY 044353,002222: 00,3067 42024 CS SRDDV # SQRT, AND IF SO, SET UP FOR A SHIFT 044354,002223: 00,3070 54135 TS MPTEMP # RIGHT 1 BEFORE DIVIDING TO PRODUCE 044355,002224: 00,3071 00006 EXTEND # THE DESIRED HALF UNIT VECTOR. 044356,002225: 00,3072 30155 DCA MPAC 044357,002226: # Page 1070 044358,002227: 00,3073 13112 TCF LARGE2 044359,002228: 044360,002229: # Page 1071 044361,002230: 00,3074 40000 LARGE3 COM # LEAVE NEGATIVE OF SHIFT COUNT-1 FOR 044362,002231: 00,3075 54135 TS MPTEMP # PREDIVIDE LEFT SHIFT. 044363,002232: 044364,002233: 00,3076 40000 COM # PICK UP REQUIRED SHIFTING BIT TO UNNORM- 044365,002234: 00,3077 50000 INDEX A # ALIZE THE SQRT RESULT. 044366,002235: 00,3100 34736 CAF BIT14 044367,002236: 00,3101 54130 TS BUF 044368,002237: 00,3102 00006 EXTEND 044369,002238: 00,3103 70155 MP MPAC +1 044370,002239: 00,3104 56130 XCH BUF 044371,002240: 00,3105 00006 EXTEND # (UNNORMALIZE THE SQRT FOR LV). 044372,002241: 00,3106 70154 MP MPAC 044373,002242: 00,3107 56001 XCH L 044374,002243: 00,3110 60130 AD BUF 044375,002244: 00,3111 56001 XCH L 044376,002245: 044377,002246: 00,3112 50120 LARGE2 INDEX FIXLOC 044378,002247: 00,3113 52045 DXCH LV # LENGTH NOW STORED IN WORK AREA. 044379,002248: 044380,002249: 00,3114 44753 CS ONE 044381,002250: 00,3115 54140 TS MAXDVSW # NO MAXDV CASES IN UNIT. 044382,002251: 044383,002252: 00,3116 52123 DXCH VBUF # PREPARE X COMPONENT FOR DIVIDE, SETTING 044384,002253: 00,3117 52155 DXCH MPAC # LENGTH OF VECTOR AS DIVISOR IN BUF. 044385,002254: 00,3120 52131 DXCH BUF 044386,002255: 00,3121 03151 TC UNITDV 044387,002256: 044388,002257: 00,3122 52125 DXCH VBUF +2 # DO Y AND Z IN USUAL FASHION SO WE CAN 044389,002258: 00,3123 52155 DXCH MPAC # EXIT THROUGH VROTATEX. 044390,002259: 00,3124 52160 DXCH MPAC +3 044391,002260: 00,3125 03151 TC UNITDV 044392,002261: 044393,002262: 00,3126 52127 DXCH VBUF +4 044394,002263: 00,3127 52155 DXCH MPAC 044395,002264: 00,3130 52162 DXCH MPAC +5 044396,002265: 00,3131 03151 TC UNITDV 044397,002266: 00,3132 17423 TCF VROTATEX # AND EXIT. 044398,002267: 044399,002268: # Page 1072 044400,002269: # IF THE LENGTH OF THE ARGUMENT VECTOR WAS LESS THAN 2(-28), EACH COMPONENT MUST BE SHIFTED LEFT AT LEAST 044401,002270: # 14 PLACES BEFORE TEH DIVIDE, NOTE THAT IN THIS CASE, THE MAJOR PART OF EACH COMPONENT IS ZERO. 044402,002271: 044403,002272: 00,3133 54135 SMALL TS MPTEMP # NEGATIVE OF PRE-DIVIDE SHIFT COUNT. 044404,002273: 044405,002274: 00,3134 34755 CAF ZERO # SHIFT EACH COMPONENT LEFT 14. 044406,002275: 00,3135 56123 XCH VBUF +1 044407,002276: 00,3136 56122 XCH VBUF 044408,002277: 00,3137 56125 XCH VBUF +3 044409,002278: 00,3140 56124 XCH VBUF +2 044410,002279: 00,3141 56127 XCH VBUF +5 044411,002280: 00,3142 56126 XCH VBUF +4 044412,002281: 044413,002282: 00,3143 40135 CS MPTEMP 044414,002283: 00,3144 50000 INDEX A 044415,002284: 00,3145 34736 CAF BIT14 044416,002285: 00,3146 00006 EXTEND 044417,002286: 00,3147 70154 MP MPAC 044418,002287: 00,3150 13062 TCF SMALL2 044419,002288: 044420,002289: 00,3151 4761 THIRTEEN = OCT15 044421,002290: 00,3151 4317 FOURTEEN = OCT16 044422,002291: 00,3151 4317 OCT16 = R1D1 044423,002292: 044424,002293: # Page 1073 044425,002294: # THE FOLLOWING ROUTINE SETS UP THE CALL TO THE DIVIDE ROUTINES. 044426,002295: 044427,002296: 00,3151 10154 UNITDV CCS MPAC # FORCE MPAC POSITIVE IF POSSIBLE, SETTING 044428,002297: 00,3152 13170 TCF UMPAC+ # DVSIGN ACCORDING TO THE SIGN OF MPAC 044429,002298: 00,3153 13155 TCF +2 # SINCE THE DIVISOR IS ALWAYS POSITIVE 044430,002299: 00,3154 13162 TCF UMPAC- # HERE. 044431,002300: 044432,002301: 00,3155 10155 CCS MPAC +1 044433,002302: 00,3156 13170 TCF UMPAC+ 044434,002303: 00,3157 00002 TC Q # EXIT IMMEDIATELY ON ZERO. 044435,002304: 00,3160 13162 TCF UMPAC- 044436,002305: 00,3161 00002 TC Q 044437,002306: 044438,002307: 00,3162 44755 UMPAC- CS ZERO # IF NEGATIVE, SET -0 IN DVSIGN FOR FINAL 044439,002308: 00,3163 54136 TS DVSIGN # COMPLEMENT. 044440,002309: 00,3164 00006 EXTEND 044441,002310: 00,3165 40155 DCS MPAC # PICK UP ABSOLUTE VALUE OF ARG AND JUMP. 044442,002311: 00,3166 50135 INDEX MPTEMP 044443,002312: 00,3167 12564 TCF MAXTEST -1 044444,002313: 044445,002314: 00,3170 54136 UMPAC+ TS DVSIGN # SET DVSIGN FOR POSITIVE QUOTIENT. 044446,002315: 00,3171 52155 DXCH MPAC 044447,002316: 00,3172 50135 INDEX MPTEMP 044448,002317: 00,3173 12564 TCF MAXTEST -1 044449,002318: 044450,002319: # Page 1074 044451,002320: # MISCELLANEOUS UNARY OPERATIONS. 044452,002321: 044453,002322: 00,3174 03300 DSQ TC DSQSUB # SQUARE THE DP CONTENTS OF MPAC. 044454,002323: 00,3175 16064 TCF DANZIG 044455,002324: 044456,002325: 00,3176 10163 ABVALABS CCS MODE # ABVAL OR ABS INSTRUCTION. 044457,002326: 00,3177 13226 TCF ABS # DO ABS ON SCALAR. 044458,002327: 00,3200 13226 TCF ABS 044459,002328: 044460,002329: 00,3201 03317 ABVAL TC VSQSUB # DOT MPAC WITH ITSELF. 044461,002330: 00,3202 22163 LXCH MODE # MODE IS NOW DP (L ZERO AFTER DAS). 044462,002331: 044463,002332: 00,3203 00006 EXTEND # STORE SQUARE OF LENGTH IN WORK AREA. 044464,002333: 00,3204 30155 DCA MPAC 044465,002334: 00,3205 50120 INDEX FIXLOC 044466,002335: 00,3206 52043 DXCH LVSQUARE 044467,002336: 044468,002337: # Page 1075 044469,002338: # PROGRAM DESCRIPTION -- SUBROUTINE SQRT 044470,002339: 044471,002340: # FUNCTIONAL DESCRIPTION -- DOUBLE PRECISION SQUARE ROOT ROUTINE 044472,002341: # THIS PROGRAM TAKES THE SQUARE ROOT OF THE 27 OR 28 MOST SIGNIFICANT BITS IN THE TRIPLE PRECISION SET OF 044473,002342: # NUMBERS -- MPAC, MPAC+1, AND MPAC+2. THE ROOT IS RETURNED DOUBLE PRECISION IN MPAC AND MPAC+1. 044474,002343: 044475,002344: # WARNING -- THIS SUBROUTINE USES A TRIPLE PRECISION INPUT. THE PROGRAMMER MUST ASSURE THE CONTENTS OF MPAC+2 044476,002345: # ESPECIALLY IF THE CONTENTS OF MPAC IS SMALL OR ZERO. FOR DETAILS SEE STG MEMO NO.949. 044477,002346: 044478,002347: # CALLING SEQUENCE -- IN INTERPRETIVE MODE, I.E., FOLLOWING `TC INTPRET', `SQRT', NO ADDRESS IS ALLOWED. 044479,002348: # INPUT SCALING: THE BINARY POINT IS ASSUMED TO THE RIGHT OF BIT 15. THE ANSWER IS RETURNED WITH THE SAME SCALING. 044480,002349: 044481,002350: # SUBROUTINES -- GENSCR, MPACSHR, SQRTSUB, ABORT 044482,002351: 044483,002352: # ABORT EXIT MODE -- ABORTS ON NEGATIVE INPUT -1.2X10E-4 (77775 OCTAL) OR LESS. 044484,002353: # DISPLAYS ERROR CODE 1302 044485,002354: # TC ABORT 044486,002355: # OCT 1302 044487,002356: 044488,002357: # DEBRIS -- LOCATIONS BUF, MPTEMP, ADDRWD ARE USED 044489,002358: 044490,002359: 00,3207 03343 SQRT TC SQRTSUB # TAKE THE SQUARE ROOT OF MPAC. 044491,002360: 00,3210 10135 CCS MPTEMP # RETURNED NORMALIZED SQUARE ROOT. SEE IF 044492,002361: 00,3211 13213 TCF +2 # ANY UN-NORMALIZATION REQUIRED AND EXIT 044493,002362: 00,3212 16064 TCF DANZIG # IF NOT. 044494,002363: 044495,002364: 00,3213 63733 AD NEG12 # A RIGHT SHIFT OF MORE THAN 13 COULD BE 044496,002365: 00,3214 00006 EXTEND # REQUIRED IF INPUT WAS ZERO IN MPAC,+1. 044497,002366: 00,3215 63221 BZMF SQRTSHFT # GOES HERE IN MOST CASES. 044498,002367: 00,3216 22007 ZL # IF A LONG SHIFT IS REQUIRED, GO TO 044499,002368: 00,3217 22116 LXCH ADDRWD # GENERAL RIGHT SHIFT ROUTINES. 044500,002369: 00,3220 12303 TCF GENSCR +4 # ADDRWD WAS ZERO TO PREVENT ROUND. 044501,002370: 044502,002371: 00,3221 50135 SQRTSHFT INDEX MPTEMP # SELECT SHIFTING BIT AND EXIT THROUGH 044503,002372: 00,3222 34735 CAF BIT15 # SHIFT ROUTINES. 044504,002373: 00,3223 54135 TS MPTEMP 044505,002374: 00,3224 34755 CAF ZERO # TO ZERO MPAC +2 IN THE PROCESS. 044506,002375: 00,3225 12036 TCF MPACSHR +3 044507,002376: 044508,002377: 00,3226 06726 ABS TC BRANCH # TEST SIGN OF MPAC AND COMPLEMENT IF 044509,002378: 00,3227 16064 TCF DANZIG 044510,002379: 00,3230 16064 TCF DANZIG 044511,002380: 00,3231 17673 TCF COMP 044512,002381: 044513,002382: # Page 1076 044514,002383: 00,3232 44751 VDEF CS FOUR # VECTOR DEFINE -- ESSENTIALLY TREATS 044515,002384: 00,3233 26166 ADS PUSHLOC # SCALAR IN MPAC AS X COMPONENT, PUSHES UP 044516,002385: 00,3234 00006 EXTEND # FOR Y AND THEN AGAIN FOR Z. 044517,002386: 00,3235 50000 INDEX A 044518,002387: 00,3236 30003 DCA 2 044519,002388: 00,3237 52160 DXCH MPAC +3 044520,002389: 00,3240 00006 EXTEND 044521,002390: 00,3241 50166 INDEX PUSHLOC 044522,002391: 00,3242 30001 DCA 0 044523,002392: 00,3243 52162 DXCH MPAC +5 044524,002393: 00,3244 16524 TCF VMODE # MODE IS NON VECTOR. 044525,002394: 044526,002395: 00,3245 03317 VSQ TC VSQSUB # DOT MPAC WITH ITSELF. 044527,002396: 00,3246 17335 TCF DMODE # MODE IS NOW DP. 044528,002397: 044529,002398: 00,3247 00006 PUSH EXTEND # PUSH DOWN MPAC LEAVING IT LOADED. 044530,002399: 00,3250 30155 DCA MPAC 044531,002400: 00,3251 50166 INDEX PUSHLOC # PUSH DOWN FIRST TWO REGISTERS IN EACH 044532,002401: 00,3252 52001 DXCH 0 044533,002402: 044534,002403: 00,3253 50163 INDEX MODE # INCREMENT PUSHDOWN POINTER. 044535,002404: 00,3254 36247 CAF NO.WDS 044536,002405: 00,3255 26166 ADS PUSHLOC 044537,002406: 044538,002407: 00,3256 10163 CCS MODE 044539,002408: 00,3257 13272 TCF TPUSH # PUSH DOWN MPAC +2. 044540,002409: 00,3260 16064 TCF DANZIG # DONE FOR DP. 044541,002410: 044542,002411: 00,3261 00006 EXTEND # ON VECTOR, PUSH DOWN Y AND Z COMPONENTS. 044543,002412: 00,3262 30160 DCA MPAC +3 044544,002413: 00,3263 50166 INDEX PUSHLOC 044545,002414: 00,3264 51775 DXCH 0 -4 044546,002415: 00,3265 00006 EXTEND 044547,002416: 00,3266 30162 DCA MPAC +5 044548,002417: 00,3267 50166 INDEX PUSHLOC 044549,002418: 00,3270 51777 DXCH 0 -2 044550,002419: 00,3271 16064 TCF DANZIG 044551,002420: 044552,002421: 00,3272 30156 TPUSH CA MPAC +2 044553,002422: 00,3273 16557 TCF ENDTPUSH +2 044554,002423: 044555,002424: 00,3274 50120 RVQ INDEX FIXLOC # RVQ -- RETURN IVA QPRET. 044556,002425: 00,3275 30052 CA QPRET 044557,002426: 00,3276 54117 TS POLISH 044558,002427: 00,3277 16655 TCF GOTO +4 # (ASSUME QPRET POINTS TO FIXED ONLY.) 044559,002428: 044560,002429: # Page 1077 044561,002430: # THE FOLLOWING SUBROUTINES ARE USED IN SQUARING MPAC, IN BOTH THE SCALAR AND VECTOR SENSE. THEY ARE 044562,002431: # SPECIAL CASES OF DMPSUB AND DOTSUB, PUT IN TO SAVE SOME TIME. 044563,002432: 044564,002433: 00,3300 30155 DSQSUB CA MPAC +1 # SQUARES THE SCALAR CONTENTS OF MPAC. 044565,002434: 00,3301 00006 EXTEND 044566,002435: 00,3302 70000 SQUARE 044567,002436: 00,3303 54156 TS MPAC +2 044568,002437: 00,3304 34755 CAF ZERO # FORM 2(CROSS TERM). 044569,002438: 00,3305 56155 XCH MPAC +1 044570,002439: 00,3306 00006 EXTEND 044571,002440: 00,3307 70154 MP MPAC 044572,002441: 00,3310 20001 DDOUBL # AND MAYBE OVEFLOW. 044573,002442: 00,3311 20156 DAS MPAC +1 # AND SET A TO NET OVERFLOW. 044574,002443: 00,3312 56154 XCH MPAC 044575,002444: 00,3313 00006 EXTEND 044576,002445: 00,3314 70000 SQUARE 044577,002446: 00,3315 20155 DAS MPAC 044578,002447: 00,3316 00002 TC Q 044579,002448: 044580,002449: 00,3317 00006 VSQSUB EXTEND # DOTS THE VECTOR IN MPAC WITH ITSELF. 044581,002450: 00,3320 22137 QXCH DOTRET 044582,002451: 00,3321 03300 TC DSQSUB # SQUARE THE X COMPONENT. 044583,002452: 00,3322 52160 DXCH MPAC +3 044584,002453: 00,3323 52155 DXCH MPAC 044585,002454: 00,3324 52131 DXCH BUF # SO WE CAN END IN DOTSUB. 044586,002455: 00,3325 30156 CA MPAC +2 044587,002456: 00,3326 54132 TS BUF +2 044588,002457: 044589,002458: 00,3327 03300 TC DSQSUB # SQUARE Y COMPONENT. 044590,002459: 00,3330 52156 DXCH MPAC +1 044591,002460: 00,3331 20132 DAS BUF +1 044592,002461: 00,3332 60154 AD MPAC 044593,002462: 00,3333 60130 AD BUF 044594,002463: 00,3334 54130 TS BUF 044595,002464: 00,3335 13337 TCF +2 044596,002465: 00,3336 54121 TS OVFIND # IF OVERFLOW. 044597,002466: 044598,002467: 00,3337 52162 DXCH MPAC +5 044599,002468: 00,3340 52155 DXCH MPAC 044600,002469: 00,3341 03300 TC DSQSUB # SQUARE Z COMPONENT. 044601,002470: 00,3342 17210 TCF ENDDOT # END AS IN DOTSUB. 044602,002471: 044603,002472: # Page 1078 044604,002473: # DOUBLE PRECISION SQUARE ROOT ROUTINE. TAKE THE SQUARE ROOT OF THE TRIPLE PRECISION (MPAC +2 USED ONLY 044605,002474: # IN NORMALIZATION) CONTENTS OF MPAC AND LEAVE THE NORMALIZED RESULT IN MPAC (C(MPAC) GREATER THAN OR EQUAL TO 044606,002475: # .5). THE RIGHT SHIFT COUNT (TC UNNORMALIZE) IS LEFT IN MPTEMP. 044607,002476: 044608,002477: 00,3343 34755 SQRTSUB CAF ZERO # START BY ZEROING RIGHT SHIFT COUNT. 044609,002478: 00,3344 54135 TS MPTEMP 044610,002479: 044611,002480: 00,3345 10154 CCS MPAC # CHECK FOR POSITIVE ARGUMENT, SHIFTING 044612,002481: 00,3346 13405 TCF SMPAC+ # FIRST SIGNIFICANT MPAC REGISTER INTO 044613,002482: 00,3347 13351 TCF +2 # MPAC ITSELF. 044614,002483: 00,3350 13373 TCF SQRTNEG # SEE IF MAG OF ARGUMENT LESS THAN 10(-4). 044615,002484: 044616,002485: 00,3351 56156 XCH MPAC +2 # MPAC IS ZERO -- SHIFT LEFT 14. 044617,002486: 00,3352 56155 XCH MPAC +1 044618,002487: 00,3353 54154 TS MPAC 044619,002488: 00,3354 34757 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER. 044620,002489: 00,3355 54135 TS MPTEMP 044621,002490: 044622,002491: 00,3356 10154 CCS MPAC # SEE IF MPAC NOW PNZ. 044623,002492: 00,3357 13405 TCF SMPAC+ 044624,002493: 00,3360 13362 TCF +2 044625,002494: 00,3361 13376 TCF ZEROANS # NEGATIVE BUT LESS THAN 10(-4) IN MAG. 044626,002495: 044627,002496: 00,3362 56155 XCH MPAC +1 # XERO -- SHIFT LEFT 14 AGAIN. 044628,002497: 00,3363 54154 TS MPAC 044629,002498: 00,3364 34757 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER. 044630,002499: 00,3365 26135 ADS MPTEMP 044631,002500: 044632,002501: 00,3366 10154 CCS MPAC 044633,002502: 00,3367 13405 TCF SMPAC+ 044634,002503: 00,3370 00002 TC Q # SQRT(0) = 0. 044635,002504: 00,3371 13376 TCF ZEROANS 044636,002505: 00,3372 13453 TCF FIXROOT # DO NOT LEAVE SQRTSUB WITH -0 IN MPAC. 044637,002506: 044638,002507: 00,3373 10000 SQRTNEG CCS A # ARGUMENT IS NEGATIVE, BUT SEE IF SIGN- 044639,002508: 00,3374 13402 TCF SQRTABRT # CORRECTED ARGUMENT IS LESS THAN 10(-4) 044640,002509: 044641,002510: 00,3375 10155 CCS MPAC +1 # IN MAGNITUDE. IF SO, CALL ANSWER ZERO. 044642,002511: 00,3376 34755 ZEROANS CAF ZERO # FORCE ANSWER TO ZERO HERE. 044643,002512: 00,3377 13453 TCF FIXROOT 044644,002513: 00,3400 13402 TCF SQRTABRT 044645,002514: 00,3401 13453 TCF FIXROOT 044646,002515: 044647,002516: 00,3402 52165 SQRTABRT DXCH LOC 044648,002517: 00,3403 05716 TC P00DOO1 044649,002518: 00,3404 21302 OCT 21302 044650,002519: 044651,002520: 00,3405 62444 SMPAC+ AD -1/2+2 # SEE IF ARGUMENT GREATER THAN OR EQUAL TO 044652,002521: # Page 1079 044653,002522: 00,3406 00006 EXTEND # .5. 044654,002523: 00,3407 63456 BZMF SRTEST # IF SO, SEE IF LESS THAN .25. 044655,002524: 044656,002525: 00,3410 52155 DXCH MPAC # WE WILL TAKE THE SQUARE ROOT OF MPAC/2. 044657,002526: 00,3411 22021 LXCH SR # SHIFT RIGHT 1 AND GO TO THE SQRT ROUTINE 044658,002527: 00,3412 00006 EXTEND 044659,002528: 00,3413 74736 MP HALF 044660,002529: 00,3414 52155 DXCH MPAC 044661,002530: 00,3415 56021 XCH SR 044662,002531: 00,3416 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW. 044663,002532: 044664,002533: 00,3417 32314 ARGHI CAF SLOPEHI # ARGUMENT BETWEEN .25 AND .5, GET A 044665,002534: 00,3420 00006 EXTEND # LINEAR APPROXIMATION FOR THIS RANGE. 044666,002535: 00,3421 70154 MP MPAC 044667,002536: 00,3422 62566 AD BIASHI # X0/2 = (MPAC/2)(SLOPHI) + BIASHI/2. 044668,002537: 044669,002538: 00,3423 54130 +4 TS BUF # X0/2 (ARGLO ENTERS HERE). 044670,002539: 00,3424 30154 CA MPAC # SINGLE-PRECISION THROUGHOUT. 044671,002540: 00,3425 22007 ZL 044672,002541: 00,3426 00006 EXTEND 044673,002542: 00,3427 10130 DV BUF # (MPAC/2)/(X0/2) 044674,002543: 00,3430 00006 EXTEND 044675,002544: 00,3431 74736 MP HALF 044676,002545: 00,3432 26130 ADS BUF # X1 = X0/2 + .5(MPAX/2)/(X0/2) 044677,002546: 044678,002547: 00,3433 00006 EXTEND 044679,002548: 00,3434 74736 MP HALF # FORM UP X1/2. 044680,002549: 00,3435 52155 DXCH MPAC # SAVE AND BRING OUT ARGUMENT. 044681,002550: 00,3436 00006 EXTEND # TAKE DP QUOTIENT WITH X1. 044682,002551: 00,3437 10130 DV BUF 044683,002552: 00,3440 54131 TS BUF +1 # SAVE MAJOR PART OF QUOTIENT. 044684,002553: 00,3441 34755 CAF ZERO # FORM MINOR PART OF QUOTIENT USING 044685,002554: 00,3442 56001 XCH L # (REMAINDER,0). 044686,002555: 00,3443 00006 EXTEND 044687,002556: 00,3444 10130 DV BUF 044688,002557: 00,3445 54001 TS L # IN PREPARATION FOR DAS. 044689,002558: 00,3446 30131 CA BUF +1 044690,002559: 00,3447 20155 DAS MPAC # X2 = X1/2 + (MPAC/2)X1 044691,002560: 044692,002561: 00,3450 00006 EXTEND # OVERFLOWS IF ARG. NEAR POSMAX. 044693,002562: 00,3451 13455 BZF TCQBNK00 044694,002563: 00,3452 34733 CAF POSMAX 044695,002564: 00,3453 54154 FIXROOT TS MPAC 044696,002565: 00,3454 54155 TS MPAC +1 044697,002566: 00,3455 00002 TCQBNK00 TC Q # RETURN TO CALLER TO UNNORMALIZE, ETC. 044698,002567: 044699,002568: # Page 1080 044700,002569: 00,3456 64737 SRTEST AD QUARTER # ARGUMENT WAS LESS THAN .5, SEE IF LESS 044701,002570: 00,3457 00006 EXTEND # THAN .25. 044702,002571: 00,3460 63502 BZMF SQRTNORM # IF SO, BEGIN NORMALIZATION. 044703,002572: 044704,002573: 00,3461 52155 DXCH MPAC # IF BETWEEN .5 AND .25, SHIFT RIGHT 1 AND 044705,002574: 00,3462 22021 LXCH SR # START AT ARGLO. 044706,002575: 00,3463 00006 EXTEND 044707,002576: 00,3464 74736 MP HALF 044708,002577: 00,3465 52155 DXCH MPAC 044709,002578: 00,3466 56021 XCH SR 044710,002579: 00,3467 26155 ADS MPAC +1 # NO OVERFLOW. 044711,002580: 044712,002581: 00,3470 33007 ARGLO CAF SLOPELO # (NORMALIZED) ARGUMENT BETWEEN .125 AND 044713,002582: 00,3471 00006 EXTEND # .25 044714,002583: 00,3472 70154 MP MPAC 044715,002584: 00,3473 62270 AD BIASLO 044716,002585: 00,3474 13423 TCF ARGHI +4 # BEGIN SQUARE ROOT. 044717,002586: 044718,002587: 00,3475 00006 SQRTNM2 EXTEND # SHIFT LEFT 2 AND INCREMENT RIGHT SHIFT 044719,002588: 00,3476 30156 DCA MPAC +1 # COUNT (FOR TERMINAL UNNORMALIZATION). 044720,002589: 00,3477 20156 DAS MPAC +1 044721,002590: 00,3500 60154 AD MPAC 044722,002591: 00,3501 26154 ADS MPAC # (NO OVERFLOW). 044723,002592: 044724,002593: 00,3502 24135 SQRTNORM INCR MPTEMP # FIRST TIME THROUGH, JUST SHIFT LEFT 1 044725,002594: 00,3503 00006 EXTEND # (PUTS IN EFFECTIVE RIGHT SHIFT SINCE 044726,002595: 00,3504 30156 DCA MPAC +1 # WE WANT MPAC/2). 044727,002596: 00,3505 20156 DAS MPAC +1 044728,002597: 00,3506 60154 AD MPAC 044729,002598: 00,3507 26154 ADS MPAC # (AGAIN NO OVERFLOW). 044730,002599: 00,3510 60000 DOUBLE 044731,002600: 00,3511 54022 TS CYL 044732,002601: 044733,002602: 00,3512 10022 NORMTEST CCS CYL # SEE IF ARGUMENT NOW NORMALIZED AT 044734,002603: 00,3513 10022 CCS CYL # GREATER THAN .125. 044735,002604: 00,3514 13475 TCF SQRTNM2 # NO -- SHIFT LEFT 2 MORE AND TRY AGAIN. 044736,002605: 00,3515 13417 TCF ARGHI # YES -- NOW BETWEEN .5 AND .25. 044737,002606: 00,3516 13470 TCF ARGLO # ARGUMENT NOW BETWEEN .25 AND .125. 044738,002607: 044739,002608: # Page 1081 044740,002609: # TRIGONOMETRIC FUNCTION PACKAGE. 044741,002610: # THE FOLLOWING TRIGONOMETRIC FUNCTIONS ARE AVAIALABLE AS INTERPRETIVE OPERATIONS: 044742,002611: # 1. SIN COMPUTES (1/2)SINE(2 PI MPAC). 044743,002612: # 2. COS COMPUTES (1/2)COSINE(2 PI MPAC). 044744,002613: # 3. ASIN COMPUTES (1/2PI)ARCSINE(2 MPAC). 044745,002614: # 4. ACOS COMPUTES (1/2PI)ARCCOSINE(2 MPAC). 044746,002615: 044747,002616: # SIN-ASIN AND COS-ACOS ARE MUTUALLY INVERSE, I.E., SIN(ASIN(X)) = X. 044748,002617: 044749,002618: 00,3517 06726 COSINE TC BRANCH # FINDS COSINE USING THE IDENTITY 044750,002619: 00,3520 13523 TCF +3 # COS(X) = SIN(PI/2 - ABS(X)). 044751,002620: 00,3521 13526 TCF PRESINE 044752,002621: 00,3522 13526 TCF PRESINE 044753,002622: 044754,002623: 00,3523 00006 +3 EXTEND 044755,002624: 00,3524 40155 DCS MPAC 044756,002625: 00,3525 52155 DXCH MPAC 044757,002626: 044758,002627: 00,3526 34737 PRESINE CAF QUARTER # PI/2 SCALED. 044759,002628: 00,3527 26154 ADS MPAC 044760,002629: 044761,002630: 00,3530 52155 SINE DXCH MPAC # DOUBLE ARGUMENT. 044762,002631: 00,3531 20001 DDOUBL 044763,002632: 00,3532 54000 OVSK # SEE IF OVERFLOW PRESENT. 044764,002633: 00,3533 13536 TCF +3 # IF NOT, ARGUMENT OK AS IS. 044765,002634: 044766,002635: 00,3534 00006 EXTEND # IF SO, WE LOST (OR GAINED) PI, SO 044767,002636: 00,3535 40001 DCOM # COMPLEMENT MPAC USING THE IDENTITY 044768,002637: # SIN(X-(+)PI) = SIN(-X). 044769,002638: 00,3536 52155 +3 DXCH MPAC 044770,002639: 00,3537 30154 CA MPAC # SEE IF ARGUMENT GREATER THAN .5 IN 044771,002640: 00,3540 60000 DOUBLE # MAGNITUDE. IF SO, REDUCE IT TO LESS THAN 044772,002641: 00,3541 54001 TS L # .5 (+-PI/2 SCALED) AS FOLLOWS: 044773,002642: 00,3542 13553 TCF SN1 044774,002643: 044775,002644: 00,3543 50000 INDEX A # IF POSITIVE, FORM PI - X, IF NEGATIVE 044776,002645: 00,3544 34735 CAF NEG1/2 +1 # USE -PI -X. 044777,002646: 00,3545 60000 DOUBLE 044778,002647: 00,3546 00006 EXTEND 044779,002648: 00,3547 60154 SU MPAC # GUARANTEED NO OVERFLOW. 044780,002649: 00,3550 54154 TS MPAC 044781,002650: 00,3551 40155 CS MPAC +1 044782,002651: 00,3552 54155 TS MPAC +1 044783,002652: 044784,002653: # Page 1082 044785,002654: 00,3553 00006 SN1 EXTEND # SET UP TO EVALUATE HASTINGS POLYNOMIAL 044786,002655: 00,3554 30155 DCA MPAC 044787,002656: 00,3555 52134 DXCH BUF2 044788,002657: 00,3556 03300 TC DSQSUB # SQUARE MPAC. 044789,002658: 044790,002659: 00,3557 07225 TC POLY # EVALUATE FOURTH ORDER POLYNOMIAL. 044791,002660: 00,3560 00003 DEC 3 B-14 044792,002661: 00,3561 14441 37325 2DEC +.3926990796 044793,002662: 00,3563 53250 60764 2DEC -.6459637111 044794,002663: 00,3565 12146 21276 2DEC +.318758717 044795,002664: 00,3567 75466 71471 2DEC -.074780249 044796,002665: 00,3571 00236 32757 2DEC +.009694988 044797,002666: 044798,002667: 00,3573 32470 CAF LBUF2 # MULTIPLY BY ARGUMENT AND SHIFT LEFT 2. 044799,002668: 00,3574 07111 TC DMPSUB -1 044800,002669: 044801,002670: 00,3575 00006 EXTEND 044802,002671: 00,3576 30156 DCA MPAC +1 044803,002672: 00,3577 20156 DAS MPAC +1 044804,002673: 00,3600 60154 AD MPAC 044805,002674: 00,3601 26154 ADS MPAC # NEITHER SHIFT OVERFLOWS. 044806,002675: 00,3602 00006 EXTEND 044807,002676: 00,3603 30156 DCA MPAC +1 044808,002677: 00,3604 20156 DAS MPAC +1 044809,002678: 00,3605 60154 AD MPAC 044810,002679: 00,3606 26154 ADS MPAC 044811,002680: 00,3607 16064 TCF DANZIG 044812,002681: 044813,002682: # Page 1083 044814,002683: # ARCSIN/ARCCOS ROUTINE. 044815,002684: 044816,002685: 00,3610 33631 ARCSIN CAF LASINEX # COMPUTE ARCSIN BY USING THE IDENTITY 044817,002686: 00,3611 13613 TCF +2 # ARCSIN(X) = PI/2 - ARCCOS(X). 044818,002687: 044819,002688: 00,3612 33713 ARCCOS CAF LDANZIG # (EXITS IMMEDIATELY). 044820,002689: 00,3613 54136 TS ESCAPE 044821,002690: 00,3614 06726 TC BRANCH # TEST SIGN OF INPUT. 044822,002691: 00,3615 13625 TCF ACOSST # START IMMEDIATELY IF POSITIVE. 044823,002692: 00,3616 13731 TCF ACOSZERO # ARCCOS(0) = PI/2 = .25. 044824,002693: 00,3617 00006 EXTEND # IF NEGATIVE, USE THE IDENTITY 044825,002694: 00,3620 40155 DCS MPAC # ARCCOS(X) = PI - ARCCOS(-X), FORCING 044826,002695: 00,3621 52155 DXCH MPAC # ARGUMENT POSITIVE. 044827,002696: 00,3622 33734 CAF TCSUBTR # SET EXIT TO DO ABOVE BEFROE 044828,002697: 00,3623 56136 XCH ESCAPE # ARCSIN/ARCCOS CONSIDERATIONS. 044829,002698: 00,3624 54137 TS ESCAPE2 044830,002699: 044831,002700: 00,3625 44736 ACOSST CS HALF # TEST MAGNITUDE OF INPUT. 044832,002701: 00,3626 60154 AD MPAC 044833,002702: 00,3627 10000 CCS A 044834,002703: 00,3630 13721 TCF ACOSOVF # THIS IS PROBABLY AN OVERFLOW CASE. 044835,002704: 044836,002705: 00,3631 13707 LASINEX TCF ASINEX 044837,002706: 044838,002707: 00,3632 13642 TCF ACOSST2 # NO OVERFLOW -- PROCEED. 044839,002708: 044840,002709: 00,3633 10155 CCS MPAC +1 # IF MAJOR PART IS .5, CALL ANSWER 0 044841,002710: 00,3634 34755 CAF ZERO # UNLESS MINOR PART NEGATIVE. 044842,002711: 00,3635 13637 TCF ACOS=0 044843,002712: 044844,002713: 00,3636 13642 TCF ACOSST2 044845,002714: 044846,002715: 00,3637 54155 ACOS=0 TS MPAC +1 044847,002716: 00,3640 54154 TS MPAC 044848,002717: 00,3641 00136 TC ESCAPE 044849,002718: 044850,002719: 00,3642 00006 ACOSST2 EXTEND # NOW THAT ARGUMENT IS IN PROPER RANGE, 044851,002720: 00,3643 40155 DCS MPAC # BEGIN COMPUTATION. USE HASTINGS 044852,002721: 00,3644 64736 AD HALF # APPROXIMATION ARCCOS(X) = SQRT(1-X)P(X) 044853,002722: 00,3645 52155 DXCH MPAC # IN A SCALED VERSION WHERE P(X) IS A 044854,002723: 00,3646 52134 DXCH BUF2 # SEVENTH ORDER POLYNOMIAL. 044855,002724: 044856,002725: 00,3647 03343 TC SQRTSUB # RETURNS WITH NORMALIZED SQUARE ROOT. 044857,002726: 044858,002727: 00,3650 10135 CCS MPTEMP # SEE IF UN-NORMALIZATION REQUIRED. 044859,002728: 00,3651 13714 TCF ACOSSHR 044860,002729: 044861,002730: # Page 1084 044862,002731: 00,3652 52155 ACOS3 DXCH MPAC # SET UP FOR POLYNOMIAL EVALUATION. 044863,002732: 00,3653 52134 DXCH BUF2 044864,002733: 00,3654 52155 DXCH MPAC 044865,002734: 044866,002735: 00,3655 07225 TC POLY 044867,002736: 00,3656 00006 DEC 6 B-14 044868,002737: 00,3657 13240 23630 2DEC +.353553385 # COEFFICIENTS ARE C 2(+I)/PISQRT(2) WHERE 044869,002738: 00,3661 74721 47775 2DEC* -.0483017006 B+1* # I 044870,002739: 00,3663 02440 20237 2DEC* +.0200273085 B+2* # WEHRE C STANDS FOR ORIGINAL COEFFS. 044871,002740: 00,3665 75067 70742 2DEC* -.0112931863 B+3* 044872,002741: 00,3667 03436 26756 2DEC* +.00695311612 B+4* 044873,002742: 00,3671 74037 57640 2DEC* -.00384617957 B+5* 044874,002743: 00,3673 03046 07143 2DEC* +.001501297736 B+6* 044875,002744: 00,3675 76654 42244 2DEC* -.000284160334 B+7* 044876,002745: 044877,002746: 00,3677 32470 CAF LBUF2 # DO FINAL MULTIPLY AND GO TO ANY 044878,002747: 00,3700 07111 TC DMPSUB -1 # EPILOGUE SEQUENCES. 044879,002748: 00,3701 00136 TC ESCAPE 044880,002749: 044881,002750: 00,3702 00006 SUBTR EXTEND # EPILOGUE FOR NEGATIVE INPUTS TO ARCCOS. 044882,002751: 00,3703 40155 DCS MPAC 044883,002752: 00,3704 64736 AD HALF # FORMS PI - ARCCOS(-X) = ARCCOS(X). 044884,002753: 00,3705 52155 DXCH MPAC 044885,002754: 00,3706 00137 TC ESCAPE2 # GO TO POSSIBLE ARCSIN EPILOGUE. 044886,002755: 044887,002756: 00,3707 00006 ASINEX EXTEND 044888,002757: 00,3710 40155 DCS MPAC # ARCSIN EPILOGUE -- GET ARCSIN(X) 044889,002758: 00,3711 64737 AD QUARTER # = PI/2 - ARCCOS(X). 044890,002759: 00,3712 52155 DXCH MPAC 044891,002760: 00,3713 16064 LDANZIG TCF DANZIG 044892,002761: 044893,002762: # Page 1085 044894,002763: 00,3714 50000 ACOSSHR INDEX A # THE SHIFT RIGHT IS LESS THAN 14 SINCE 044895,002764: 00,3715 34736 CAF BIT14 # THE INPUT WAS NON-ZERO DP. 044896,002765: 00,3716 54135 TS MPTEMP 044897,002766: 00,3717 02073 TC VSHRRND # DP SHIFT RIGHT AND ROUND. 044898,002767: 00,3720 13652 TCF ACOS3 # PROCEED. 044899,002768: 044900,002769: 00,3721 00006 ACOSOVF EXTEND # IF MAJOR PART WAS ONLY 1 MORE THAN .5, 044901,002770: 00,3722 13637 BZF ACOS=0 # CALL ANSWER ZERO. 044902,002771: 044903,002772: 00,3723 00006 ACOSABRT EXTEND # IF OVERFLOW, CALL ANSWER ZERO BUT 044904,002773: 00,3724 30165 DCA LOC # SOUND AN ALARM. 044905,002774: 00,3725 05722 TC ALARM1 044906,002775: 00,3726 01301 OCT 1301 044907,002776: 044908,002777: 00,3727 34755 CAF ZERO 044909,002778: 00,3730 13637 TCF ACOS=0 044910,002779: 044911,002780: 00,3731 34737 ACOSZERO CAF QUARTER # ACOS(0) = PI/2. 044912,002781: 00,3732 13640 TCF ACOS=0 +1 # SET MPAC AND EXIT VIA ESCAPE. 044913,002782: 044914,002783: 00,3733 77763 NEG12 DEC -12 B-14 044915,002784: 00,3734 13702 TCSUBTR TCF SUBTR 044916,002785: 044917,002786: # Page 1086 044918,002787: # THE FOLLOWING INSTRUCTIONS ARE AVAILABLE FOR SETTING, MODIFYING, AND BRANCHING ON INDEX REGISTERS: 044919,002788: # 1. AXT ADDRESS TO INDEX TRUE. 044920,002789: # 2. AXC ADDRESS TO INDEX COMPLEMENTED. 044921,002790: # 3. LXA LOAD INDEX FROM ERASABLE. 044922,002791: # 4. LXC LOAD INDEX COMPLEMENTED FROM ERASABLE. 044923,002792: # 5. SCA STORE INDEX IN ERASABLE. 044924,002793: # 6. XCHX EXCHANGE INDEX REGISTER WITH ERASABLE. 044925,002794: # 7. INCR INCREMENT INDEX REGISTER. 044926,002795: # 8. XAD ERASABLE ERASABLE ADD TO INDEX REGISTER. 044927,002796: # 9. XSU ERASABLE SUBTRACT FROM INDEX REGISTER. 044928,002797: # 10. TIX BRANCH ON INDEX REGISTER AND DECREMENT. 044929,002798: 044930,002799: 01,2345 BANK 01 044931,002800: 044932,002801: 01,2345 COUNT* $$/INTER 044933,002802: 01,2345 02442 AXT TC TAGSUB # SELECT APPROPRIATE INDEX REGISTER. 044934,002803: 01,2346 30117 CA POLISH 044935,002804: 01,2347 50130 XSTORE INDEX INDEXLOC # CONTAINS C(FIXLOC) OR C(FIXLOC)+1 044936,002805: 01,2350 54046 TS X1 044937,002806: 01,2351 16064 TCF DANZIG 044938,002807: 044939,002808: 01,2352 02442 AXC TC TAGSUB 044940,002809: 01,2353 40117 CS POLISH 044941,002810: 01,2354 02347 TC XSTORE 044942,002811: 044943,002812: 01,2355 02430 LXA TC 15ADRERS # LOAD INDEX REGISTER FROM ERASABLE. 044944,002813: 01,2356 50117 INDEX POLISH 044945,002814: 01,2357 30000 CA 0 044946,002815: 01,2360 12347 TCF XSTORE 044947,002816: 044948,002817: 01,2361 02430 LXC TC 15ADRERS # LOAD NDX REG FROM ERASABLE COMPLEMENTED. 044949,002818: 01,2362 50117 INDEX POLISH 044950,002819: 01,2363 40000 CS 0 044951,002820: 01,2364 12347 TCF XSTORE 044952,002821: 044953,002822: 01,2365 02430 SXA TC 15ADRERS # STORE INDEX REGISTER IN ERASABLE. 044954,002823: 01,2366 50130 INDEX INDEXLOC 044955,002824: 01,2367 30046 CA X1 044956,002825: 01,2370 50117 MSTORE1 INDEX POLISH 044957,002826: 01,2371 54000 TS 0 044958,002827: 01,2372 16064 TCF DANZIG 044959,002828: 044960,002829: # Page 1087 044961,002830: 01,2373 02430 XCHX TC 15ADRERS # EXCHANGE INDEX REGISTER WITH ERASABLE. 044962,002831: 01,2374 50117 INDEX POLISH 044963,002832: 01,2375 30000 CA 0 044964,002833: 01,2376 50130 INDEX INDEXLOC 044965,002834: 01,2377 56046 XCH X1 044966,002835: 01,2400 12370 TCF MSTORE1 044967,002836: 044968,002837: 01,2401 02430 XAD TC 15ADRERS # ADD ERASABLE TO INDEX REGISTER. 044969,002838: 01,2402 50117 INDEX POLISH 044970,002839: 01,2403 30000 CA 0 044971,002840: 01,2404 50130 XAD2 INDEX INDEXLOC 044972,002841: 01,2405 26046 ADS X1 # IGNORING OVERFLOWS. 044973,002842: 01,2406 16064 TCF DANZIG 044974,002843: 044975,002844: 01,2407 02442 INCR TC TAGSUB # INCREMENT INDEX REGISTER. 044976,002845: 01,2410 30117 CA POLISH 044977,002846: 01,2411 12404 TCF XAD2 044978,002847: 044979,002848: 01,2412 02430 XSU TC 15ADRERS # SUBTRACT ERASABLE FROM INDEX REGISTER. 044980,002849: 01,2413 50117 INDEX POLISH 044981,002850: 01,2414 40000 CS 0 044982,002851: 01,2415 12404 TCF XAD2 044983,002852: 044984,002853: 01,2416 02442 TIX TC TAGSUB # BRANCH AND DECREMENT ON INDEX. 044985,002854: 01,2417 50130 INDEX INDEXLOC 044986,002855: 01,2420 40050 CS S1 044987,002856: 01,2421 50130 INDEX INDEXLOC 044988,002857: 01,2422 60046 AD X1 044989,002858: 01,2423 00006 EXTEND # NO OPERATION IF DECREMENTED INDEX IS 044990,002859: 01,2424 66064 BZMF DANZIG # NEGATIVE OR ZERO. 044991,002860: 044992,002861: 01,2425 50130 DOTIXBR INDEX INDEXLOC 044993,002862: 01,2426 56046 XCH X1 # IGNORING OVERFLOWS. 044994,002863: 044995,002864: 01,2427 16651 TCF GOTO # DO THE BRANCH USING THE CADR IN POLISH. 044996,002865: 044997,002866: # Page 1088 044998,002867: # SUBROUTINE TO CONVERT AN ERASABLE ADDRESS (11 BITS) TO AN EBANK SETTING AND SUBADDRESS. 044999,002868: 045000,002869: 01,2430 40117 15ADRERS CS POLISH 045001,002870: 01,2431 64772 AD DEC45 045002,002871: 01,2432 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA? 045003,002872: 01,2433 30120 CA FIXLOC # YES. ADD FIXLOC. EBANK OK AS IS. 045004,002873: 01,2434 12441 TCF +5 045005,002874: 045006,002875: 01,2435 35007 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS. 045007,002876: 01,2436 56117 XCH POLISH 045008,002877: 01,2437 54003 TS EBANK 045009,002878: 01,2440 74357 MASK LOW8 045010,002879: 01,2441 26117 +5 ADS POLISH # FALL INTO TAGSUB, AND RETURN VIA Q. 045011,002880: 045012,002881: # SUBROUTINE WHICH SETS THE ADDRESS OF THE SPECIFIED INDEX IN INDEXLOC. (ACTUALLY, THE ADDRESS -38D.) 045013,002882: 045014,002883: 01,2442 30120 TAGSUB CA FIXLOC 045015,002884: 01,2443 54130 TS INDEXLOC 045016,002885: 045017,002886: 01,2444 10020 CCS CYR # BIT 15 SPECIFIES INDEX. 045018,002887: 01,2445 24130 INCR INDEXLOC # 0 MEANS USE X2. 045019,002888: 01,2446 00002 TC Q 045020,002889: 01,2447 00002 TC Q # 1 FOR X1. 045021,002890: 045022,002891: # Page 1089 045023,002892: # MISCELLANEOUS OPERATION CODES WITH DIRECT ADDRESSES. INCLUDED HERE ARE: 045024,002893: # 1. ITA STORE CPRET (RETURN ADDRESS) IN ERASABLE. 045025,002894: # 2. CALL CALL A SUBROUTINE, LEAVING RETURN IN QPRET. 045026,002895: # 3. RTB RETURN TO BASIC LANGUAGE AT THE GIVEN ADDRESS. 045027,002896: # 4. BHIZ BRANCH IF THE HIGHORDER OF MPAC IS ZERO (SINGLE PRECISION). 045028,002897: # 5. BOV BRANCH ON OVERFLOW. 045029,002898: # 6. GOTO SIMPLE SEQUENCE CHANGE. 045030,002899: 045031,002900: 01,2450 10020 RTB/BHIZ CCS CYR 045032,002901: 01,2451 30117 RTB CA POLISH 045033,002902: 01,2452 04621 TC SWCALL -1 # SO A "TC Q" FROM ROUTINE LEADS TO DANZIG 045034,002903: 045035,002904: 01,2453 10154 BHIZ CCS MPAC 045036,002905: 01,2454 16064 TCF DANZIG 045037,002906: 01,2455 16651 TCF GOTO 045038,002907: 01,2456 16064 TCF DANZIG 045039,002908: 01,2457 16651 TCF GOTO 045040,002909: 045041,002910: 01,2460 10121 BOV(B) CCS OVFIND # BRANCH ON OVERFLOW TO BASIC OR INTERP. 045042,002911: 01,2461 12463 TCF +2 045043,002912: 01,2462 16064 TCF DANZIG 045044,002913: 01,2463 54121 TS OVFIND 045045,002914: 01,2464 10020 CCS CYR 045046,002915: 01,2465 12451 TCF RTB # IF BASIC. 045047,002916: 01,2466 00360 B5TOBB OCT 360 045048,002917: 01,2467 16651 TCF GOTO 045049,002918: 045050,002919: # Page 1090 045051,002920: 01,2470 10020 BZE/GOTO CCS CYR # SEE WHICH OP-CODE IS DESIRED. 045052,002921: 01,2471 06726 TC BRANCH # DO BZE. 045053,002922: 01,2472 16064 TCF DANZIG 045054,002923: 01,2473 16651 TCF GOTO # DO GOTO. 045055,002924: 01,2474 16064 TCF DANZIG 045056,002925: 045057,002926: 01,2475 10020 BPL/BMN CCS CYR 045058,002927: 01,2476 12504 TCF BPL 045059,002928: 01,2477 5B10 # DEC 5 B+10 # SHIFTS OP CODE IN SWITCH INSTRUCTION ADR 045060,002929: 01,2477 12000 DEC 5 B-4 # RSB 2004. 045061,002930: 045062,002931: 01,2500 06726 TC BRANCH # DO BMN 045063,002932: 01,2501 16064 TCF DANZIG 045064,002933: 01,2502 16064 TCF DANZIG 045065,002934: 01,2503 16651 TCF GOTO # ONLY IF NNZ. 045066,002935: 045067,002936: 01,2504 06726 BPL TC BRANCH 045068,002937: 01,2505 16651 TCF GOTO # IF POSITIVE OR ZERO. 045069,002938: 01,2506 16651 TCF GOTO 045070,002939: 01,2507 16064 TCF DANZIG 045071,002940: 045072,002941: 01,2510 10020 CALL/ITA CCS CYR 045073,002942: 01,2511 16643 TCF CALL 045074,002943: 045075,002944: 01,2512 05675 TC CCSHOLE 045076,002945: 01,2513 02430 TC 15ADRERS # STORE QPRET. (TAGSUB AFTER 15ADRERS IS 045077,002946: 01,2514 50120 INDEX FIXLOC # SLOW IN THIS CASE, BUT SAVES STORAGE.) 045078,002947: 01,2515 30052 CA QPRET 045079,002948: 01,2516 12370 TCF MSTORE1 045080,002949: 045081,002950: # Page 1091 045082,002951: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR ALTERING AND TESTING INTERPRETATIVE SWITCHES: 045083,002952: # 00 BONSET SET A SWITCH AND DO A GOTO IF IT WAS ON. 045084,002953: # 01 SETGO SET A SWITCH AND DO A GOTO. 045085,002954: # 02 BOFSET SET A SWITCH AND DOA GOTO IF IT WAS OFF 045086,002955: # 03 SET SET A SWITCH. 045087,002956: # 04 BONINV INVERT A SWITCH AND BRANCH IF IT WAS ON. 045088,002957: # 05 INVGO INVERT A SWITCH AND DO A GOTO. 045089,002958: # 06 BOFINV INVERT A SWITCH AND BRANCH IF IT WAS OFF 045090,002959: # 07 INVERT INVERT A SWITCH. 045091,002960: # 10 BONCLR CLEAR A SWITCH AND BRANCH IF IT WAS ON. 045092,002961: # 11 CLRGO CLEAR A SWITCH AND DO A GOTO. 045093,002962: # 12 BOFCLR CLEAR A SWITCH AND BRANCH IF IT WAS OFF. 045094,002963: # 13 CLEAR CLEAR A SWITCH. 045095,002964: # 14 BON BRANCH IF A SWITCH WAS ON. 045096,002965: # 16 BOFF BRANCH IF A SWITCH WAS OFF. 045097,002966: # THE ADDRESS SUPPLIED WITH THE SWITCH INSTRUCTION IS INTERPRETED AS FOLLOWS: 045098,002967: # BITS 1-4 SWITCH BIT NUMBER (1-15). 045099,002968: # BITS 5-8 SWITCH OPERATION NUMBER 045100,002969: # BITS 9- SWITCH WORD NUMBER (UP TO 64 SWITCH WORDS). 045101,002970: # THE ADDRESS ITSELF IS MADE UP BY THE YUL SYSTEM ASSEMBLER. THE BRANCH INSTRUCTIONS REQUIRE TWO 045102,002971: # ADDRESSES, THE SECOND TAKEN AS THE DIRECT (OR INDIRECT IF IN ERASABLE) ADDRESS OF THE BRANCH. 045103,002972: 045104,002973: 01,2517 34762 SWITCHES CAF LOW4 # LEAVE THE SWITCH BIT IN SWBIT. 045105,002974: 01,2520 70117 MASK POLISH 045106,002975: 01,2521 50000 INDEX A 045107,002976: 01,2522 34735 CAF BIT15 # (NUMBER FROM LEFT TO RIGHT.) 045108,002977: 01,2523 54131 TS SWBIT 045109,002978: 045110,002979: 01,2524 34745 CAF BIT7 # LEAVE THE SWITCH NUMBER IN SWWORD. 045111,002980: 01,2525 00006 EXTEND 045112,002981: 01,2526 70117 MP POLISH 045113,002982: 01,2527 54130 TS SWWORD 045114,002983: 045115,002984: 01,2530 00004 INHINT # DURING SWITCH CHANGE SO RUPT CAN USE TOO 045116,002985: 01,2531 50000 INDEX A # LEAVE THE SWITCH WORD ITSELF IN L. 045117,002986: 01,2532 30074 CA STATE 045118,002987: 01,2533 54002 TS Q # Q WILL BE USED AS A CHANNEL. 045119,002988: # Page 1092 045120,002989: 01,2534 34741 CAF BIT11 045121,002990: 01,2535 00006 EXTEND # DISPATCH SWITCH BIT OPERATION AS IN BITS 045122,002991: 01,2536 70117 MP POLISH # 7-8 OF POLISH. 045123,002992: 01,2537 72577 MASK B3TOB4 # GETS 4X2-BIT CODE. 045124,002993: 01,2540 50000 INDEX A 045125,002994: 01,2541 12542 TCF +1 045126,002995: 045127,002996: 01,2542 30131 +1 CA SWBIT # 00 -- SET SWITCH IN QUESTION. 045128,002997: 01,2543 00006 EXTEND 045129,002998: 01,2544 04002 ROR QCHAN 045130,002999: 01,2545 12554 TCF SWSTORE 045131,003000: 045132,003001: 01,2546 30131 +5 CA SWBIT # 01 -- INVERT SWITCH. 045133,003002: 01,2547 00006 EXTEND 045134,003003: 01,2550 06002 RXOR QCHAN 045135,003004: 01,2551 12554 TCF SWSTORE 045136,003005: 045137,003006: 01,2552 40131 +9D CS SWBIT # 10 -- CLEAR. 045138,003007: 01,2553 70002 MASK Q 045139,003008: 01,2554 50130 SWSTORE INDEX SWWORD 045140,003009: 01,2555 54074 TS STATE # NEW SWITCH WORD. 045141,003010: 045142,003011: # Page 1093 045143,003012: 01,2556 00003 +13D RELINT # 11 -- NOOP. 045144,003013: 01,2557 34737 CAF BIT13 045145,003014: 01,2560 00006 EXTEND # DISPATCH SEQUENCE CHANGING OR BRANCING 045146,003015: 01,2561 70117 MP POLISH # CODE. 045147,003016: 01,2562 72577 MASK B3TOB4 045148,003017: 01,2563 50000 INDEX A 045149,003018: 01,2564 12565 TCF +1 # ORIGINALLY STORED IN BITS 5-6 045150,003019: 045151,003020: 01,2565 40002 +1 CS Q # 00 -- BRANCH IF ON. 045152,003021: 01,2566 70131 TEST MASK SWBIT 045153,003022: 01,2567 10000 CCS A 045154,003023: 01,2570 12600 TCF SWSKIP 045155,003024: 045156,003025: 01,2571 16720 +5 TCF SWBRANCH # 01 -- GO TO. 045157,003026: 045158,003027: 01,2572 12600 TCF SWSKIP # HERE ONLY ON BIT 15. 045159,003028: 045160,003029: 01,2573 05675 TC CCSHOLE 045161,003030: 01,2574 05675 TC CCSHOLE 045162,003031: 045163,003032: 01,2575 30002 +9D CA Q # 10 -- BRANCH IF OFF. 045164,003033: 01,2576 12566 TCF TEST 045165,003034: 045166,003035: 01,2577 00014 B3TOB4 OCT 0014 045167,003036: 01,2600 24164 SWSKIP INCR LOC 045168,003037: 045169,003038: 01,2601 01,2517 SW/ EQUALS SWITCHES 045170,003039: 045171,003040: 01,2601 16064 +13D TCF DANZIG # 11 -- NOOP. 045172,003041: End of include-file INTERPRETER.agc. Parent file is MAIN.agc