Source Code

047463,000001: # Copyright: Public domain. 047464,000002: # Filename: INTERPRETER.agc 047465,000003: # Purpose: Part of the source code for Colossus, build 249. 047466,000004: # It is part of the source code for the Command Module's (CM) 047467,000005: # Apollo Guidance Computer (AGC), possibly for Apollo 8 and 9. 047468,000006: # Assembler: yaYUL 047469,000007: # Reference: Starts on p. 1089 of 1701.pdf. 047470,000008: # Contact: Ron Burkey <info@sandroid.org>. 047471,000009: # Website: www.ibiblio.org/apollo. 047472,000010: # Mod history: 08/28/04 RSB. Adapted from corresponding Luminary 131 file. 047473,000011: 047474,000012: # The contents of the "Colossus249" files, in general, are transcribed 047475,000013: # from a scanned document obtained from MIT's website, 047476,000014: # http://hrst.mit.edu/hrs/apollo/public/archive/1701.pdf. Notations on this 047477,000015: # document read, in part: 047478,000016: 047479,000017: # Assemble revision 249 of AGC program Colossus by NASA 047480,000018: # 2021111-041. October 28, 1968. 047481,000019: 047482,000020: # This AGC program shall also be referred to as 047483,000021: # Colossus 1A 047484,000022: 047485,000023: # Prepared by 047486,000024: # Massachussets Institute of Technology 047487,000025: # 75 Cambridge Parkway 047488,000026: # Cambridge, Massachusetts 047489,000027: # under NASA contract NAS 9-4065. 047490,000028: 047491,000029: # Refer directly to the online document mentioned above for further information. 047492,000030: # Please report any errors (relative to 1701.pdf) to info@sandroid.org. 047493,000031: 047494,000032: # In some cases, where the source code for Luminary 131 overlaps that of 047495,000033: # Colossus 249, this code is instead copied from the corresponding Luminary 131 047496,000034: # source file, and then is proofed to incorporate any changes. 047497,000035: 047498,000036: # Page 1089 047499,000037: # SECTION 1: DISPATCHER 047500,000038: 047501,000039: # ENTRY TO THE INTERPRETER. INTPRET SETS LOC TO THE FIRST INSTRUCTION, BANKSET TO THE BBANK OF THE 047502,000040: # OBJECT INTERPRETIVE PROGRAM, AND INTBIT15 TO THE BIT15 CONTENTS OF FBANK. INTERPRETIVE PROGRAMS MAY BE IN 047503,000041: # VIRTUALLY ALL BANKS PRESENT UNDER ANY SUPER-BANK SETTING, WITH THE RESTRICTION THAT PROGRAMS IN HIGH BANKS 047504,000042: # (BIT15 OF FBANK = 1) DO NOT REFER TO LOWBANKS, AND VICE-VERSA. THE INTERPRETER DOES NOT SWITCH SUPERBANKS. 047505,000043: # E-BANK SWITCHING OCCURS WHENEVER GENERAL ERASABLE (100-3777) IS ADDRESSED. 047506,000044: 047507,000045: 6006 BLOCK 03 047508,000046: 047509,000047: 6006 COUNT 03/INTER 047510,000048: 047511,000049: 6006 00003 INTPRET RELINT 047512,000050: 6007 00006 EXTEND # SET LOC TO THE WORD FOLLOWING THE TC. 047513,000051: 6010 22164 QXCH LOC 047514,000052: 6011 30006 +2 CA BBANK # INTERPRETIVE BRANCHES FINISH HERE. 047515,000053: 6012 54165 TS BANKSET 047516,000054: 6013 74674 MASK BIT15 # GET 15TH BIT FOR INDEXABLE ADDRESSES. 047517,000055: 6014 54115 TS INTBIT15 047518,000056: 047519,000057: 6015 54023 TS EDOP # MAKE SURE NO INSTRUCTIONS LEFT OVER 047520,000058: 047521,000059: 6016 16037 TCF NEWOPS # PICK UP OP CODE PAIR AND BEGIN. 047522,000060: 6017 22006 INTRSM LXCH BBANK # RESUME SUSPENDED INTERPRETIVE JOB 047523,000061: 6020 16011 TCF INTPRET +3 047524,000062: 047525,000063: # DLOAD LOADS MPAC, MPAC +1, LEAVING ZERO IN MPAC +2. 047526,000064: 047527,000065: 6021 00006 DLOAD EXTEND 047528,000066: 6022 50116 INDEX ADDRWD 047529,000067: 6023 30001 DCA 0 # LOAD DP C(C(ADDRWD)) INT MPAC,MPAC +1 047530,000068: 6024 52155 SLOAD2 DXCH MPAC 047531,000069: 6025 34714 CAF ZERO # ZERO MPAC +2 047532,000070: 047533,000071: # Page 1090 047534,000072: # AT THE END OF MOST INSTRUCTIONS, CONTROL IS GIVEN TO DANZIG TO DISPATCH THE NEXT OPERATION. 047535,000073: 047536,000074: 6026 54156 TS MPAC +2 # AND DECLARE DP MODE 047537,000075: 047538,000076: 6027 54163 NEWMODE TS MODE # PROLOGUE FOR MODE-CHANGING INSTRUCTIONS. 047539,000077: 047540,000078: 6030 30165 DANZIG CA BANKSET # SET BBANK BEFORE TESTING NEWJOB SO THAT 047541,000079: 6031 54006 TS BBANK # IT MAY BE SAVED DIRECTLY BY CHANJOB. 047542,000080: 047543,000081: 6032 10023 NOIBNKSW CCS EDOP # SEE IF AN ORDER CODE IS LEFT OVER FROM 047544,000082: 6033 16046 TCF OPJUMP # THE LAST PAIR RETRIEVED. IF SO, EXECUTE. 047545,000083: # EDOP IS SET TO ZERO ON ITS RE-EDITIING. 047546,000084: 047547,000085: 6034 10067 CCS NEWJOB # SEE IF A JOB OF HIGHER PRIORITY IS 047548,000086: 6035 15063 TCF CHANG2 # PRESENT, AND IF SO, CHANGE JOBS. 047549,000087: 047550,000088: 6036 24164 INCR LOC # ADVANCE THE LOCATION COUNTER. 047551,000089: 047552,000090: # ITRACE (1) REFERS TO "NEWOPS" 047553,000091: 6037 50164 NEWOPS INDEX LOC # ENTRY TO BEGIN BY PICKING OP CODE PAIR. 047554,000092: 6040 30000 CA 0 # MAY BE AN OPCODE PAIR OR A STORE CODE. 047555,000093: 6041 10000 CCS A # TEST SIGN AND GET DABS(A). 047556,000094: 6042 16331 TCF DOSTORE # PROCESS STORE CODE. 047557,000095: 047558,000096: 6043 00177 LOW7 OCT 177 047559,000097: 047560,000098: 6044 54023 TS EDOP # OP CODE PAIR. LEAVE THE OTHER IN EDOP 047561,000099: 6045 76043 MASK LOW7 # WHERE CCS EDOP WILL HONOR IT NEXT. 047562,000100: 047563,000101: 6046 54020 OPJUMP TS CYR # LOWWD ENTERS HERE IF A RIGHT-HAND OP 047564,000102: 6047 10020 CCS CYR # CODE IS TO BE PROCESSED. TEST PREFICES. 047565,000103: 6050 16216 TCF OPJUMP2 # TEST SECOND PREFIX BIT. 047566,000104: 047567,000105: 6051 16712 TCF EXIT # +0 OP CODE IS EXIT 047568,000106: 047569,000107: # Page 1091 047570,000108: # PROCESS ADDRESSES WHICH MAY BE DIRECT, INDEXED, OR REFERENCE THE PUSHDOWN LIST. 047571,000109: 047572,000110: 6052 74712 ADDRESS MASK BIT1 # SEE IF ADDRESS IS INDEXED. CYR CONTAINED 047573,000111: 6053 10000 CCS A # 400XX, SO BIT 1 IS NOW AS IT WAS IN CYR. 047574,000112: 6054 16115 TCF INDEX # FORM INDEXED ADDRESS. 047575,000113: 047576,000114: 6055 50164 DIRADRES INDEX LOC # LOOK AHEAD TO NEXT WORD TO SEE IF 047577,000115: 6056 40001 OCT40001 CS 1 # ADDRESS IS GIVEN. 047578,000116: 6057 10000 CCS A 047579,000117: 6060 16164 TCF PUSHUP # IF NOT. 047580,000118: 047581,000119: 6061 77773 NEG4 DEC -4 B-14 047582,000120: 047583,000121: 6062 24164 INCR LOC # IF SO, TO SHOW WE PICKED UP A WORD. 047584,000122: 6063 54116 TS ADDRWD 047585,000123: 047586,000124: # Page 1092 047587,000125: # FINAL DIGESTION OF DIRECT ADDRESSES OF OP CODES WITH 01 PREFIX IS DONE HERE. IN EACH CASE, THE 047588,000126: # REQUIRED 12-BIT SUB-ADDRESS IS LEFT IN ADDRWD, WITH ANY REQUIRED E OR F BANK SWITCHING DONE. ADDRESSES LESS 047589,000127: # 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. 047590,000128: 047591,000129: 6064 66220 AD -ENDVAC # SEE IF ADDRESS RELATIVE TO WORK AREA. 047592,000130: 6065 10000 CCS A 047593,000131: 6066 67712 AD -ENDERAS # IF NOT, SEE IF IN GENERAL ERASABLE. 047594,000132: 6067 16074 TCF IERASTST 047595,000133: 047596,000134: 6070 30120 NETZERO CA FIXLOC # IF SO, LEAVE THE MODIFIED ADDRESS IN 047597,000135: 6071 26116 ADS ADDRWD # ADDRWD AND DISPATCH. 047598,000136: 6072 50020 ITR15 INDEX CYR # THIS INDEX MAKES THE NEXT INSTRUCTION 047599,000137: 6073 76242 7 INDJUMP -1 # TCF INDJUMP + OP, EDITING CYR. 047600,000138: 047601,000139: 6074 00006 IERASTST EXTEND 047602,000140: 6075 66105 BZMF GEADDR # GO PROCESS GENERAL-ERASABLE ADDRESS. 047603,000141: 047604,000142: 6076 74747 MASK LOW10 # FIXED BANK ADDRESS. RESTORE AND ADD B15. 047605,000143: 6077 64747 AD LOW10 # SWITCH BANKS AND LEAVE SUBADDRESS IN 047606,000144: 6100 56116 XCH ADDRWD # ADDRWD FOR OPERAND RETRIEVAL. (THIS 047607,000145: 6101 60115 AD INTBIT15 # METHOD PRECLUDES USE OF THE LAST 047608,000146: 6102 54004 TS FBANK # LOCATION IN EACH FBANK.) 047609,000147: 6103 50020 ITR12 INDEX CYR 047610,000148: 6104 76242 7 INDJUMP -1 047611,000149: 047612,000150: 6105 74373 GEADDR MASK LOW8 047613,000151: 6106 64744 AD OCT1400 047614,000152: 6107 56116 XCH ADDRWD 047615,000153: 6110 54003 TS EBANK 047616,000154: 6111 50020 ITR10 INDEX CYR 047617,000155: 6112 76242 7 INDJUMP -1 047618,000156: 047619,000157: # Page 1093 047620,000158: # THE FOLLOWING ROUTINE PROCESSES INTERPRETIVE INDEXED ADDRESSES. AN INTERPRETER INDEX REGISTER MAY 047621,000159: # CONTAIN THE ADDRESS OF ANY ERASABLE REGISTER (0-42 BEING RELATIVE TO THE VAC AREA) OR ANY INTERPRETIVE PROGRAM 047622,000160: # BANK, OR ANY INTEGER IN THAT RANGE. 047623,000161: 047624,000162: 6113 37702 DODLOAD* CAF DLOAD* # STODL* COMES HERE TO PROCESS LOAD ADR. 047625,000163: 6114 54020 TS CYR # (STOVL* ENTERS HERE). 047626,000164: 047627,000165: 6115 30120 INDEX CA FIXLOC # SET UP INDEX LOCATION. 047628,000166: 6116 54130 TS INDEXLOC 047629,000167: 6117 24164 INCR LOC # (ADDRESS ALWAYS GIVEN). 047630,000168: 6120 50164 INDEX LOC 047631,000169: 6121 40000 CS 0 047632,000170: 6122 10000 CCS A # INDEX 2 IF ADDRESS STORED COMPLEMENTED. 047633,000171: 6123 24130 INCR INDEXLOC 047634,000172: 6124 16125 NOOP 047635,000173: 047636,000174: 6125 54116 TS ADDRWD # 14 BIT ADDRESS TO ADDRWD. 047637,000175: 6126 77711 MASK HIGH4 # IF ADDRESS GREATER THAN 2K, ADD INTBIT15 047638,000176: 6127 00006 EXTEND 047639,000177: 6130 16133 BZF INDEX2 047640,000178: 6131 30115 CA INTBIT15 047641,000179: 6132 26116 ADS ADDRWD 047642,000180: 047643,000181: 6133 50130 INDEX2 INDEX INDEXLOC 047644,000182: 6134 40046 CS X1 047645,000183: 6135 26116 ADS ADDRWD # DO AUGMENT, IGNORING AND CORRECTING OVF. 047646,000184: 047647,000185: 6136 77713 MASK HIGH9 # SEE IF ADDRESS IS IN WORK AREA. 047648,000186: 6137 00006 EXTEND 047649,000187: 6140 16153 BZF INDWORK 047650,000188: 6141 77711 MASK HIGH4 # SEE IF IN FIXED BANK. 047651,000189: 6142 00006 EXTEND 047652,000190: 6143 16155 BZF INDERASE 047653,000191: 047654,000192: 6144 30116 CA ADDRWD # IN FIXED -- SWITCH BANKS AND CREATE 047655,000193: 6145 54004 TS FBANK # SUB-ADDRESS 047656,000194: 6146 74747 MASK LOW10 047657,000195: 6147 64700 AD 2K 047658,000196: 6150 54116 TS ADDRWD 047659,000197: 6151 50020 ITR11 INDEX CYR 047660,000198: 6152 36242 3 INDJUMP -1 047661,000199: 047662,000200: 6153 30120 INDWORK CA FIXLOC # MAKE ADDRWD RELATIVE TO WORK AREA. 047663,000201: 6154 16161 TCF ITR13 -1 047664,000202: 047665,000203: 6155 34744 INDERASE CA OCT1400 047666,000204: 6156 56116 XCH ADDRWD 047667,000205: 6157 54003 TS EBANK 047668,000206: 6160 74373 MASK LOW8 047669,000207: 6161 26116 -1 ADS ADDRWD 047670,000208: # Page 1094 047671,000209: 6162 50020 ITR13 INDEX CYR 047672,000210: 6163 36242 3 INDJUMP -1 047673,000211: 047674,000212: # Page 1095 047675,000213: # PUSH-UP ROUTINES. WHEN NO OPERAND ADDRESS IS GIVEN, THE APPROPRIATE OPERAND IS TAKEN FROM THE PUSH-DOWN 047676,000214: # LIST. IN MOST CASES THE MODE OF THE RESULT (VECTOR OR SCALAR) OF THE LAST ARTGHMETIC OPERATION PERFORMED 047677,000215: # IS THE SAME AS THE TYPE OF OPERAND DESIRED (ALL ADD/SUBTRACT ETC.). EXCEPTIONS TO THIS GENERAL RULE ARE LISTED 047678,000216: # BELOW (NOTE THAT IN EVERY CASE THE MODE REGISTER IS LEFT INTACT): 047679,000217: 047680,000218: # 1. VXSC AND V/SC WANT THE OPPOSITE TYPE OF OPERAND, E.G., IF THE LAST OPERATION YIELDED A VECTOR 047681,000219: # RESULT, VXSC WANTS A SCALAR. 047682,000220: 047683,000221: # 2. THE LOAD CODES SHOULD LOAD THE ACCUMULATOR INDEPENDENT OF THE RESULT OF THE LAST OPERATION. THIS 047684,000222: # INCLUDES VLOAD, DLOAD, TLOAD, PDDL, AND PDVL (NO PUSHUP WITH SLOAD). 047685,000223: 047686,000224: # 3. SOME ARITHMETIC OPERATIONS REQUIRE A STANDARD TYPE OF OPERAND REGARDLESS OF THE PREVIOUS OPERATION. 047687,000225: # THIS INCLUDES SIGN WANTING DP AND TAD REQUIRING TP. 047688,000226: 047689,000227: 6164 34374 PUSHUP CAF OCT23 # IF THE LOW 5 BITS OF CYR ARE LESS THAN 047690,000228: 6165 70020 MASK CYR # 20, THIS OP REQUIRES SPECIAL ATTENTION. 047691,000229: 6166 66171 AD -OCT10 # (NO -0). 047692,000230: 6167 10000 CCS A 047693,000231: 6170 16202 TCF REGUP # FOR ALL CODES GREATEER THAN OCT 7. 047694,000232: 047695,000233: 6171 77767 -OCT10 OCT -10 047696,000234: 047697,000235: 6172 66061 AD NEG4 # WE NOW HAVE 7 -- OP CODE (MOD4). SEE IF 047698,000236: 6173 10000 CCS A # THE OP CODE (MOD4) IS THREE (REVERSE). 047699,000237: 6174 50000 INDEX A # NO -- THE MODE IS DEFINITE. PICK UP THE 047700,000238: 6175 46213 CS NO.WDS 047701,000239: 6176 16204 TCF REGUP +2 047702,000240: 047703,000241: 6177 50163 INDEX MODE # FOR VXSC AND V/SC WE WANT THE REQUIRED 047704,000242: 6200 46211 CS REVCNT # PUSHLOC DECREMENT WITHOUT CHANGING THE 047705,000243: 6201 16204 TCF REGUP +2 # MODE AT THE IS TIME. 047706,000244: 047707,000245: 6202 50163 REGUP INDEX MODE # MOST ALL OP CODES PUSHUP HERE. 047708,000246: 6203 46213 CS NO.WDS 047709,000247: 6204 26166 +2 ADS PUSHLOC 047710,000248: 6205 54116 TS ADDRWD 047711,000249: 6206 50020 ITR14 INDEX CYR 047712,000250: 6207 76242 7 INDJUMP -1 # (THE INDEX MAKES THIS A TCF.) 047713,000251: 047714,000252: 6210 00002 OCT 2 # REVERSE PUSHUP DECREMENT. VECTOR TAKES 2 047715,000253: 6211 00006 REVCNT OCT 6 # WORDS, SCALAR TAKES 6. 047716,000254: 6212 00006 OCT 6 047717,000255: 6213 00002 NO.WDS OCT 2 # CONVENTIONAL DECREMENT IS 6 WORDS VECTOR 047718,000256: 6214 00003 OCTAL3 OCT 3 # 2 IN DP, AND 3 IN TP. 047719,000257: 6215 00006 OCT 6 047720,000258: 047721,000259: # Page 1096 047722,000260: # TEST THE SECOND PREFIX BIT TO SEE IF THIS IS A MISCELLANEOUS OR A UNARY/SHORT SHIFT OPERATION. 047723,000261: 047724,000262: 6216 10020 OPJUMP2 CCS CYR # TEST SECOND PREFIX BIT. 047725,000263: 6217 16232 TCF OPJUMP3 # TEST THIRD BIT TO SEE IF UNARY OR SHIFT 047726,000264: 047727,000265: 6220 77722 -ENDVAC DEC -45 B-14 047728,000266: 047729,000267: # THE FOLLOWING ROUTINE PROCESSES ADDRESSES OF SUFFIX CLASS 10. THEY ARE BASICALLY WORK AREA ADDRESSES 047730,000268: # IN THE RANGE 0-52, ERASABLE ECADR CONSTANTS FROM 100-3777, AND FCADRS ABOVE THAT. ALL 15 BITS ARE AVAILABLE 047731,000269: # IN CONTRAST TO SUFFIX 1, IN WHICH ONLY THE LOW ORDER 14 ARE AVAILABLE. 047732,000270: 047733,000271: 6221 24164 15BITADR INCR LOC # (ENTRY HERE FROM STCALL). 047734,000272: 6222 50164 INDEX LOC # PICK UP ADDRESS WORD. 047735,000273: 6223 30000 CA 0 047736,000274: 6224 54117 TS POLISH # WE MAY NEED A SUBADDRESS LATER. 047737,000275: 047738,000276: 6225 34750 CAF LOW7+2K # THESE INSTRUCTIONS ARE IN BANK 1. 047739,000277: 6226 54004 TS FBANK 047740,000278: 6227 70020 MASK CYR 047741,000279: 6230 50000 ITR7 INDEX A 047742,000280: 6231 16303 TCF MISCJUMP 047743,000281: 047744,000282: # Page 1097 047745,000283: # COMPLETE THE DISPATCHING OF UNARY AND SHORT SHIFT OPERATIONS. 047746,000284: 047747,000285: 6232 54004 OPJUMP3 TS FBANK # CALL IN BANK 0 (BIT5S 11-15 OF A ARE 0.) 047748,000286: 047749,000287: # ITRACE (6) REFERS TO "OPJUMP3A" 047750,000288: 6233 10020 CCS CYR # TEST THIRD PREFIX BIT. 047751,000289: 6234 50000 INDEX A # THE DECREMENTED UNARY CODE IS IN BITS 047752,000290: 6235 12000 TCF UNAJUMP # 1-4 OF A (ZERO, EXIT, HAS BEEN DETECTED) 047753,000291: 047754,000292: 6236 10163 CCS MODE # IT'S A SHORT SHIFT CODE. SEE IF PRESENT 047755,000293: 6237 12017 TCF SHORTT # SCALAR OR VECTOR. 047756,000294: 6240 12017 TCF SHORTT 047757,000295: 6241 12121 TCF SHORTV # CALLS THE APPROPRIATE ROUTINE. 047758,000296: 047759,000297: 6242 4364 FBANKMSK EQUALS BANKMASK 047760,000298: 6242 00122 LVBUF ADRES VBUF 047761,000299: 047762,000300: # Page 1098 047763,000301: # THE FOLLOWING IS THE JUMP TABLE FOR OP CODES WHICH MAY HAVE INDEXABLE ADDRESSES OR MAY PUSH UP. 047764,000302: 047765,000303: 6243 16454 INDJUMP TCF VLOAD # 00 -- LOAD MPAC WITH A VECTOR. 047766,000304: 6244 17040 TCF TAD # 01 -- TRIPLE PRECISION ADD TO MPAC. 047767,000305: 6245 17624 TCF SIGN # 02 -- COMPLEMENT MPAC (V OR SC) IF X NEG. 047768,000306: 6246 17350 TCF VXSC # 03 -- VECTOR TIMES SCALAR. 047769,000307: 6247 16652 TCF CGOTO # 04 -- COMPUTED GO TO. 047770,000308: 6250 16437 TCF TLOAD # 05 -- LOAD MPAC WITH TRIPLE PRECISION. 047771,000309: 6251 16021 TCF DLOAD # 06 -- LOAD MPAC WITH A DP SCALAR. 047772,000310: 6252 17573 TCF V/SC # 07 -- VECTOR DIVIDED BY A SCALAR. 047773,000311: 047774,000312: 6253 16450 TCF SLOAD # 10 -- LOAD MPAC IN SINGLE PRECISION. 047775,000313: 6254 16567 TCF SSP # 11 -- SET SINGLE PRECISION INTO X. 047776,000314: 6255 16472 TCF PDDL # 12 -- PUSH DOWN MPAC AND RE-LOAD IN DP. 047777,000315: 6256 17303 TCF MXV # 13 -- MATRIX POST-MULTIPLIED BY VECTOR. 047778,000316: 6257 16526 TCF PDVL # 14 -- PUSH DOWN AND VECTORLOAD. 047779,000317: 6260 16575 TCF CCALL # 15 -- COMPUTED CALL. 047780,000318: 6261 17306 TCF VXM # 16 -- MATRIX PRE-MULTIPLIED BY VECTOR. 047781,000319: 6262 17565 TCF TSLC # 17 -- NORMALIZE MPAC (SCALAR ONLY). 047782,000320: 047783,000321: 6263 17543 TCF DMPR # 20 -- DP MULTIPLY AND ROUND. 047784,000322: 6264 17546 TCF DDV # 21 -- DP DIVIDE BY. 047785,000323: 6265 17552 TCF BDDV # 22 -- DP DIVIDE INTO. 047786,000324: 6266 17570 TCF GSHIFT # 23 -- GENERAL SHIFT INSTRUCTION 047787,000325: 6267 16720 TCF VAD # 24 -- VECTOR ADD. 047788,000326: 6270 16716 TCF VSU # 25 -- VECTOR SUBTRACT. 047789,000327: 6271 17005 TCF BVSU # 26 -- VECTOR SUBTRACT FROM. 047790,000328: 6272 17300 TCF DOT # 27 -- VECTOR DOT PRODUCT. 047791,000329: 047792,000330: 6273 17427 TCF VXV # 30 -- VECTOR CROSS PRODUCT. 047793,000331: 6274 17374 TCF VPROJ # 31 -- VECTOR PROJECTION. 047794,000332: 6275 16754 TCF DSU # 32 -- DP SUBTRACT. 047795,000333: 6276 17031 TCF BDSU # 33 -- DP SUBTRACT FROM. 047796,000334: 6277 16744 TCF DAD # 34 -- DP ADD. 047797,000335: 6300 16300 TCF +0 # 35 -- AVAILABLE 047798,000336: 6301 17541 TCF DMP1 # 36 -- DP MULTIPLY. 047799,000337: 6302 17562 TCF SETPD # 37 -- SET PUSH DOWN POINTER (DIRECT ONLY) 047800,000338: 047801,000339: # CODES 10 AND 14 MUST NOT PUSH UP. CODE 04 MAY BE USED FOR VECTOR DECLARE BEFORE PUSHUP IF DESIRED. 047802,000340: 047803,000341: # Page 1099 047804,000342: # THE FOLLOWING JUMP TABLE APPLIES TO INDEX, BRANCH, AND MISCELLANEOUS INSTRUCTIONS. 047805,000343: 047806,000344: 6303 12371 MISCJUMP TCF AXT # 00 -- ADDRESS TO INDEX TRUE. 047807,000345: 6304 12376 TCF AXC # 01 -- ADDRESS TO INDEX COMPLEMENTED. 047808,000346: 6305 12401 TCF LXA # 02 -- LOAD INDEX FROM ERASABLE. 047809,000347: 6306 12405 TCF LXC # 03 -- LOAD INDEX FROM COMPLEMENT OF ERAS. 047810,000348: 6307 12411 TCF SXA # 04 -- STORE INDEX IN ERASABLE. 047811,000349: 6310 12417 TCF XCHX # 05 -- EXCHANGE INDEX WITH ERASABLE. 047812,000350: 6311 12433 TCF INCR # 06 -- INCREMENT INDEX REGISTER. 047813,000351: 6312 12442 TCF TIX # 07 -- TRANSFER ON INDEX. 047814,000352: 047815,000353: 6313 12425 TCF XAD # 10 -- INDEX REGISTER ADD FROM ERASABLE. 047816,000354: 6314 12436 TCF XSU # 11 -- INDEX SUBTRACT FROM ERASABLE. 047817,000355: 6315 12514 TCF BZE/GOTO # 12 -- BRANCH ZERO AND GOTO 047818,000356: 6316 12521 TCF BPL/BMN # 13 -- BRANCH PLUS AND BRANCH MINUS. 047819,000357: 6317 12474 TCF RTB/BHIZ # 14 -- RETURN TO BASIC AND BRANCH HI ZERO. 047820,000358: 6320 12534 TCF CALL/ITA # 15 -- CALL AND STORE QPRET. 047821,000359: 6321 12543 TCF SW/ # 16 -- SWITCH INSTRUCTIONS AND AVAILABLE. 047822,000360: 6322 12504 TCF BOV(B) # 17 -- BRANCH ON OVERFLOW TO BASIC OR INT. 047823,000361: 047824,000362: # Page 1100 047825,000363: # THE FOLLOWING JUMP TABLE APPLIES TO UNARY INSTRUCTIONS. 047826,000364: 047827,000365: 6323 COUNT 00/INTER 047828,000366: 047829,000367: 00,2000 BANK 0 # 00 -- EXIT -- DETECTED EARLIER. 047830,000368: 00,2000 13207 UNAJUMP TCF SQRT # 01 -- SQUARE ROOT. 047831,000369: 00,2001 13527 TCF SINE # 02 -- SIN. 047832,000370: 00,2002 13516 TCF COSINE # 03 -- COS. 047833,000371: 00,2003 13607 TCF ARCSIN # 04 -- ARC SIN. 047834,000372: 00,2004 13611 TCF ARCCOS # 05 -- ARC COS. 047835,000373: 00,2005 13174 TCF DSQ # 06 -- DP SQUARE. 047836,000374: 00,2006 12116 TCF ROUND # 07 -- ROUND TO DP. 047837,000375: 047838,000376: 00,2007 17637 TCF COMP # 10 -- COMPLEMENT VECTOR OR SCALAR 047839,000377: 00,2010 13232 TCF VDEF # 11 -- VECTOR DEFINE. 047840,000378: 00,2011 13023 TCF UNIT # 12 -- UNIT VECTOR. 047841,000379: 00,2012 13176 TCF ABVALABS # 13 -- LENGTH OF VECTOR OR MAG OF SCALAR. 047842,000380: 00,2013 13245 TCF VSQ # 14 -- SQUARE OF LENGTH OF VECTOR. 047843,000381: 00,2014 16323 TCF STADR # 15 -- PUSH UP ON STORE CODE. 047844,000382: 00,2015 13274 TCF RVQ # 16 -- RETURN VIA QPRET. 047845,000383: 00,2016 13247 TCF PUSH # 17 -- PUSH MPAC DOWN. 047846,000384: 047847,000385: # Page 1101 047848,000386: # SECTION 2 LOAD AND STORE PACKAGE. 047849,000387: 047850,000388: # A SET OF EIGHT STORE CODES IS PROVIDED AS THE PRIMARY METHOD OF STORING THE MULTI-PURPOSE 047851,000389: # ACCUMULATOR (MPAC). IF IN THE DANZIG SECTION LOC REFERS TO AN ALGEBRAICALLY POSITIVE WORD, IT IS TAKEN AS A 047852,000390: # STORE CODE WITH A CORRESPONDING ERASABLE ADDRESS. MOST OF THESE CODES ARE TWO ADDRESS, SPECIFYING THAT THE WORD 047853,000391: # FOLLOWING THE STORE CODE IS TO BE USED AS AN ADDRESS FROM WHICH TO RE-LOAD MPAC. FOUR OPTIONS ARE AVAILABLE: 047854,000392: 047855,000393: # 1. STORE STORE MPAC. THE E ADDRESS MAY BE INDEXED. 047856,000394: # 2. STODL STORE MPAC AND RE-LOAD IT IN DP WITH THE NEXT ADDRESS (THE LOAD MAY BE INDEXED). 047857,000395: # 3. STOVL STORE MPAC AND RE-LOAD A VECTOR (AS ABOVE). 047858,000396: # 4. STCALL STORE AND DO A CALL (BOTH ADDRESES MUST BE DIRECT HERE). 047859,000397: 047860,000398: # STODL AND STOVL WILL TAKE FROM THE PUSH-DOWN LIST IF NO LOAD ADDRESS IS GIVEN. 047861,000399: 047862,000400: 6323 BLOCK 3 047863,000401: 047864,000402: 6323 COUNT 03/INTER 047865,000403: 047866,000404: 6323 30165 STADR CA BANKSET # THE STADR CODE (PUSHUP UP ON STORE 047867,000405: 6324 54004 TS FBANK # ADDRESS) ENTERS HERE. 047868,000406: 6325 24164 INCR LOC 047869,000407: 6326 50164 ITR1 INDEX LOC # THE STORECODE WAS STORED COMPLEMENTED TO 047870,000408: 6327 40000 CS 0 # MAKE IT LOOK LIKE AN OPCODE PAIR. 047871,000409: 6330 67716 AD NEGONE # (YUL CAN'T REMOVE 1 BECAUSE OF EARLY CCS) 047872,000410: 047873,000411: 6331 54116 DOSTORE TS ADDRWD 047874,000412: 6332 74372 MASK LOW11 # ENTRY FROM DISPATCHER. SAVE THE ARASABLE 047875,000413: 6333 56116 XCH ADDRWD # ADDRESS AND JUMP ON THE STORE CODE NO. 047876,000414: 6334 77671 MASK B12T14 047877,000415: 6335 00006 EXTEND 047878,000416: 6336 74706 MP BIT5 # EACH TRANSFER VECTOR ENTRY IS TWO WORDS. 047879,000417: 6337 50000 ITR0 INDEX A 047880,000418: 6340 16341 TCF STORJUMP 047881,000419: 047882,000420: # Page 1102 047883,000421: # STORE CODE JUMP TABLE. CALLS THE APPROPRIATE STORING ROUTINE AND EXITS TO DANZIG OR TO ADDRESS WITH 047884,000422: # A SUPPLIED OPERATION CODE. 047885,000423: 047886,000424: # STORE STORE,1 AND STORE,2 RETURN TO DANZIG, THUS RESETTING THE EBANK TO ITS STATE AT INTPRET. 047887,000425: 047888,000426: 6341 06371 STORJUMP TC STORE # STORE. 047889,000427: 6342 16030 TCF DANZIG # PICK UP NEW OP CODE(S). 047890,000428: 6343 06363 TC STORE,1 047891,000429: 6344 16030 TCF DANZIG 047892,000430: 6345 06366 TC STORE,2 047893,000431: 6346 16030 TCF DANZIG 047894,000432: 047895,000433: 6347 06371 TC STORE # STODL. 047896,000434: 6350 16427 TCF DODLOAD 047897,000435: 047898,000436: 6351 06371 TC STORE # STODL WITH INDEXED LOAD ADDRESS. 047899,000437: 6352 16113 TCF DODLOAD* 047900,000438: 047901,000439: 6353 06371 TC STORE # STOVL. 047902,000440: 6354 16432 TCF DOVLOAD 047903,000441: 047904,000442: 6355 06371 TC STORE # STOVL WITH INDEXED LOAD ADDRESS. 047905,000443: 6356 16435 TCF DOVLOAD* 047906,000444: 6357 06371 TC STORE # STOTC. 047907,000445: 6360 34723 CAF CALLCODE 047908,000446: 6361 54020 TS CYR 047909,000447: 6362 16221 TCF 15BITADR # GET A 15 BIT ADDRESS. 047910,000448: 047911,000449: # Page 1103 047912,000450: # STORE CODE ADDRESS PROCESSOR. 047913,000451: 047914,000452: 6363 50120 STORE,1 INDEX FIXLOC 047915,000453: 6364 40046 CS X1 047916,000454: 6365 16370 TCF PRESTORE 047917,000455: 047918,000456: 6366 50120 STORE,2 INDEX FIXLOC 047919,000457: 6367 40047 CS X2 047920,000458: 6370 26116 PRESTORE ADS ADDRWD # RESULTANT ADDRESS IS IN ERASABLE. 047921,000459: 047922,000460: 6371 40116 STORE CS ADDRWD 047923,000461: 6372 64727 AD DEC45 047924,000462: 6373 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA? 047925,000463: 6374 30120 CA FIXLOC # YES. 047926,000464: 6375 16402 TCF AHEAD5 047927,000465: 6376 34744 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS. 047928,000466: 6377 56116 XCH ADDRWD 047929,000467: 6400 54003 TS EBANK 047930,000468: 6401 74373 MASK LOW8 047931,000469: 6402 26116 AHEAD5 ADS ADDRWD 047932,000470: 047933,000471: # Page 1104 047934,000472: # STORING ROUTINES. STORE DP, TP, OR VECTOR AS INDICATED BY MODE. 047935,000473: 047936,000474: 6403 00006 STARTSTO EXTEND # MPAC,+1 MUST BE STORED IN ANY EVENT. 047937,000475: # ITRACE (5) REFERS TO "STARTSTO". 047938,000476: 6404 30155 DCA MPAC 047939,000477: 6405 50116 INDEX ADDRWD 047940,000478: 6406 52001 DXCH 0 047941,000479: 047942,000480: 6407 10163 CCS MODE 047943,000481: 6410 16423 TCF TSTORE 047944,000482: 6411 00002 TC Q 047945,000483: 047946,000484: 6412 00006 VSTORE EXTEND 047947,000485: 6413 30160 DCA MPAC +3 047948,000486: 6414 50116 INDEX ADDRWD 047949,000487: 6415 52003 DXCH 2 047950,000488: 047951,000489: 6416 00006 EXTEND 047952,000490: 6417 30162 DCA MPAC +5 047953,000491: 6420 50116 INDEX ADDRWD 047954,000492: 6421 52005 DXCH 4 047955,000493: 6422 00002 TC Q 047956,000494: 047957,000495: 6423 30156 TSTORE CA MPAC +2 047958,000496: 6424 50116 INDEX ADDRWD 047959,000497: 6425 54002 TS 2 047960,000498: 6426 00002 TC Q 047961,000499: 047962,000500: # Page 1105 047963,000501: # ROUTINES TO BEGIN PROCESSING OF THE SECOND ADDRES ASSOCIATED WITH ALL STORE-TYPE CODES EXCEPT STORE 047964,000502: # ITSELF. 047965,000503: 047966,000504: 6427 37701 DODLOAD CAF DLOADCOD 047967,000505: 6430 54020 TS CYR 047968,000506: 6431 16055 TCF DIRADRES # GO GET A DIRECT ADDRESS. 047969,000507: 047970,000508: 6432 34674 DOVLOAD CAF VLOADCOD 047971,000509: 6433 54020 TS CYR 047972,000510: 6434 16055 TCF DIRADRES 047973,000511: 047974,000512: 6435 36056 DOVLOAD* CAF VLOAD* 047975,000513: 6436 16114 TCF DODLOAD* +1 # PROLOGUE TO INDEX ROUTINE. 047976,000514: 047977,000515: # Page 1106 047978,000516: # THE FOLLOWING LOAD INSTRUCTIONS ARE PROVIDED FOR LOADING THE MULTI-PURPOSE ACCUMULATOR MPAC. 047979,000517: 047980,000518: 6437 50116 TLOAD INDEX ADDRWD 047981,000519: 6440 30002 CA 2 # LOAD A TRIPLE PRECISION ARGUMENT INTO 047982,000520: 6441 54156 TS MPAC +2 # THE FIRST THREE MPAC REGISTERS, WITH THE 047983,000521: 6442 00006 EXTEND # CONTENTS OF THE OTHER FOUR IRRELEVANT. 047984,000522: 6443 50116 INDEX ADDRWD 047985,000523: 6444 30001 DCA 0 047986,000524: 6445 52155 DXCH MPAC 047987,000525: 6446 34712 TMODE CAF ONE 047988,000526: 6447 16027 TCF NEWMODE # DECLEARE TRIPLE PRECISION MODE. 047989,000527: 047990,000528: 6450 22007 SLOAD ZL # LOAD A SINGLE PRECISION NUMBER INTO 047991,000529: 6451 50116 INDEX ADDRWD # MPAC, SETTING MPAC+1,2 TO ZERO. THE 047992,000530: 6452 30000 CA 0 # CONTENTS OF THE REMAINING MPAC REGISTERS 047993,000531: 6453 16024 TCF SLOAD2 # ARE IRRELEVANT. 047994,000532: 047995,000533: 6454 00006 VLOAD EXTEND # LOAD A DOUBLE PRECISION VECTOR INTO 047996,000534: 6455 50116 INDEX ADDRWD # MPAC,+1, MPAC+3,4, AND MPAC+5,6. THE 047997,000535: 6456 30001 DCA 0 # CONTENTS OF MPAC +2 ARE IRRELEVANT. 047998,000536: 6457 52155 DXCH MPAC 047999,000537: 048000,000538: 6460 00006 ENDVLOAD EXTEND # PDVL COMES HERE TO FINISH UP FOR DP, TP. 048001,000539: 6461 50116 INDEX ADDRWD 048002,000540: 6462 30003 DCA 2 048003,000541: 6463 52160 DXCH MPAC +3 048004,000542: 048005,000543: 6464 00006 +4 EXTEND # TPDVL FINISHES HERE. 048006,000544: 6465 50116 INDEX ADDRWD 048007,000545: 6466 30005 DCA 4 048008,000546: 6467 52162 DXCH MPAC +5 048009,000547: 048010,000548: 6470 44712 VMODE CS ONE # DECLARE VECTOR MODE. 048011,000549: 6471 16027 TCF NEWMODE 048012,000550: 048013,000551: # Page 1107 048014,000552: # THE FOLLOWING INSTRUCTIONS ARE PROVIDED FOR STORING OPERANDS IN THE PUSHDOWN LIST: 048015,000553: # 1. PUSH PUSHDOWN AND NO LOAD. 048016,000554: # 2. PDDL PUSHDOWN AND DOUBLE PRECISION LOAD. 048017,000555: # 3. PDVL PUSHDOWN AND VECTOR LOAD. 048018,000556: 048019,000557: 6472 00006 PDDL EXTEND 048020,000558: 6473 50116 INDEX ADDRWD # LOAD MPAC,+1, PUSHING THE FORMER 048021,000559: 6474 30001 DCA 0 # CONTENTS DOWN. 048022,000560: 6475 52155 DXCH MPAC 048023,000561: 6476 50166 INDEX PUSHLOC 048024,000562: 6477 52001 DXCH 0 048025,000563: 048026,000564: 6500 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER APPRO- 048027,000565: 6501 36213 CAF NO.WDS # PRIATELY. 048028,000566: 6502 26166 ADS PUSHLOC 048029,000567: 048030,000568: 6503 10163 CCS MODE 048031,000569: 6504 16521 TCF ENDTPUSH 048032,000570: 6505 16517 TCF ENDDPUSH 048033,000571: 048034,000572: 6506 54163 TS MODE # NOW DP. 048035,000573: 6507 54156 ENDVPUSH TS MPAC +2 048036,000574: 6510 52160 DXCH MPAC +3 # PUSH DOWN THE REST OF THE VECTOR HERE. 048037,000575: 6511 50166 INDEX PUSHLOC 048038,000576: 6512 51775 DXCH 0 -4 048039,000577: 048040,000578: 6513 52162 DXCH MPAC +5 048041,000579: 6514 50166 INDEX PUSHLOC 048042,000580: 6515 51777 DXCH 0 -2 048043,000581: 048044,000582: 6516 16030 TCF DANZIG 048045,000583: 048046,000584: 6517 54156 ENDDPUSH TS MPAC +2 # SET MPAC +2 TO ZERO AND EXIT ON DP. 048047,000585: 6520 16030 TCF DANZIG 048048,000586: 048049,000587: 6521 54163 ENDTPUSH TS MODE 048050,000588: 6522 56156 XCH MPAC +2 # ON TRIPLE, SET MPAC +2 TO ZERO, PUSHING 048051,000589: 6523 50166 +2 INDEX PUSHLOC # DOWN THE OLD CONTENTS 048052,000590: 6524 53777 TS 0 -1 048053,000591: 6525 16030 TCF DANZIG 048054,000592: 048055,000593: # Page 1108 048056,000594: # PDVL -- PUSHDOWN AND VECTOR LOAD 048057,000595: 048058,000596: 6526 00006 PDVL EXTEND # RELOAD MPAC AND PUSH DOWN ITS CONTENTS. 048059,000597: 6527 50116 INDEX ADDRWD 048060,000598: 6530 30001 DCA 0 048061,000599: 6531 52155 DXCH MPAC 048062,000600: 6532 50166 INDEX PUSHLOC 048063,000601: 6533 52001 DXCH 0 048064,000602: 048065,000603: 6534 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER. 048066,000604: 6535 36213 CAF NO.WDS 048067,000605: 6536 26166 ADS PUSHLOC 048068,000606: 048069,000607: 6537 10163 CCS MODE # TEST PAST MODE. 048070,000608: 6540 16557 TCF TPDVL 048071,000609: 6541 16460 TCF ENDVLOAD # JUST LOAD LAST FOUR REGISTERS ON DP. 048072,000610: 048073,000611: 6542 00006 VPDVL EXTEND # PUSHDOWN AND RE-LOAD LAST TWO COMPONENTS 048074,000612: 6543 50116 INDEX ADDRWD 048075,000613: 6544 30003 DCA 2 048076,000614: 6545 52160 DXCH MPAC +3 048077,000615: 6546 50166 INDEX PUSHLOC 048078,000616: 6547 51775 DXCH 0 -4 048079,000617: 048080,000618: 6550 00006 EXTEND 048081,000619: 6551 50116 INDEX ADDRWD 048082,000620: 6552 30005 DCA 4 048083,000621: 6553 52162 DXCH MPAC +5 048084,000622: 6554 50166 INDEX PUSHLOC 048085,000623: 6555 51777 DXCH 0 -2 048086,000624: 048087,000625: 6556 16030 TCF DANZIG 048088,000626: 048089,000627: 6557 00006 TPDVL EXTEND # ON TP, WE MUST LOAD THE Y COMPONENT 048090,000628: 6560 50116 INDEX ADDRWD # BEFORE STORING MPAC +2 IN CASE THIS IS A 048091,000629: 6561 30003 DCA 2 # PUSHUP. 048092,000630: 6562 52160 DXCH MPAC +3 048093,000631: 048094,000632: 6563 30156 CA MPAC +2 048095,000633: 6564 50166 INDEX PUSHLOC # IN DP. 048096,000634: 6565 53777 TS 0 -1 048097,000635: 6566 16464 TCF ENDVLOAD +4 048098,000636: 048099,000637: # SSP (STORE SINGLE PRECISION) IS EXECUTED HERE. 048100,000638: 048101,000639: 6567 24164 SSP INCR LOC # PICK UP THE WORD FOLLOWING THE GIVEN 048102,000640: 6570 50164 INDEX LOC # ADDRESS AND STORE IT AT X. 048103,000641: 6571 30000 CA 0 048104,000642: 6572 50116 STORE1 INDEX ADDRWD # SOME INDEX AND MISCELLANEOUS OPS END 048105,000643: 6573 54000 TS 0 # HERE. 048106,000644: # Page 1109 048107,000645: 6574 16030 TCF DANZIG 048108,000646: 048109,000647: # Page 1110 048110,000648: # SEQUENCE CHANGING AND SUBROUTINE CALLING OPTIONS. 048111,000649: 048112,000650: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR SEQUENCING CHANGING, BRANCHING, AND CALLING SUBROUTINES: 048113,000651: # 1. GOTO GO TO. 048114,000652: # 2. CALL CALL SUBROUTINE SETTING QPRET. 048115,000653: # 3. CGOTO COMPUTED GO TO. 048116,000654: # 4. CCALL COMPUTED CALL. 048117,000655: # 7. BPL BRANCH IF MPAC POSITIVE OR ZERO. 048118,000656: # 8. BZE BRANCH IF MPAC ZERO. 048119,000657: # 9. BMN BRANCH IF MPAC NEGATIVE NON-ZERO. 048120,000658: 048121,000659: 6575 24164 CCALL INCR LOC # MAINTAIN LOC FOR QPRET COMPUTATION 048122,000660: 6576 50164 INDEX LOC 048123,000661: # Was CAF --- RSB 2004. 048124,000662: 6577 30000 CA 0 # GET BASE ADDRESS OF CADR LIST. 048125,000663: 6600 50116 INDEX ADDRWD 048126,000664: 6601 60000 AD 0 # ADD INCREMENT. 048127,000665: 6602 54004 TS FBANK # SELECT DESIRED CADR. 048128,000666: 6603 74747 MASK LOW10 048129,000667: 6604 50000 INDEX A 048130,000668: 6605 32000 CAF 10000 048131,000669: 6606 54117 TS POLISH 048132,000670: 048133,000671: 6607 30165 CALL CA BANKSET # FOR ANY OF THE CALL OPTIONS, MAKE UP THE 048134,000672: 6610 74364 MASK BANKMASK # ADDRESS OF THE NEXT OP-CODE PAIR/STORE 048135,000673: 6611 64364 AD BANKMASK # CODE AND LEAVE IT IN QPRET. NOTE THAT 048136,000674: 6612 60164 AD LOC # BANKMASK = -(2000 - 1). 048137,000675: 6613 50120 INDEX FIXLOC 048138,000676: 6614 54052 TS QPRET 048139,000677: 048140,000678: 6615 30117 GOTO CA POLISH # BASIC BRANCHING SEQUENCE. 048141,000679: 6616 77711 +1 MASK HIGH4 048142,000680: 6617 00006 EXTEND 048143,000681: 6620 16631 BZF GOTOERS # SEE IF ADDRESS POINTS TO FIXED OR ERAS. 048144,000682: 6621 30165 +4 CA BANKSET # SET EBANK PART OF BBANK. NEXT, SET UP 048145,000683: 6622 54006 TS BBANK # FBANK. THE COMBINATION IS PICKED UP & 048146,000684: 6623 30117 CA POLISH # PUT INTO BANKSET AT INTPRET +2. 048147,000685: 6624 54004 TS FBANK 048148,000686: 6625 74747 MASK LOW10 048149,000687: 6626 64700 AD 2K 048150,000688: 6627 54164 TS LOC 048151,000689: 6630 16011 TCF INTPRET +3 048152,000690: 048153,000691: 6631 E3,1400 EBANK= 1400 # SO YUL DOESN'T CUSS THE "CA 1400" BELOW. 048154,000692: 048155,000693: 6631 30117 GOTOERS CA POLISH # THE GIVEN ADDRESS IS IN ERASABLE -- SEE 048156,000694: 6632 66220 AD -ENDVAC # IF RELATIVE TO THE WORK ARA. 048157,000695: 6633 10000 CCS A 048158,000696: 6634 30117 CA POLISH # GENERAL ERASABLE. 048159,000697: 6635 16644 TCF GOTOGE 048160,000698: 048161,000699: # Page 1111 048162,000700: 6636 30120 CA FIXLOC # WORK AREA. 048163,000701: 6637 60117 AD POLISH 048164,000702: 6640 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF 048165,000703: 6641 30000 CA 0 # THE BRANCH ADDRESS. 048166,000704: 6642 54117 TS POLISH 048167,000705: 6643 16616 TCF GOTO +1 # ALLOWS ARBITRARY INDIRECTNESS LEVELS. 048168,000706: 048169,000707: 6644 54003 GOTOGE TS EBANK 048170,000708: 6645 74373 MASK LOW8 048171,000709: 6646 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF 048172,000710: 6647 31400 CA 1400 # THE BRANCH ADDRESS. 048173,000711: 6650 54117 TS POLISH 048174,000712: 6651 16616 TCF GOTO +1 048175,000713: 048176,000714: 6652 50164 CGOTO INDEX LOC # COMPUTED GO TO. PICK UP ADDRESS OF CADR 048177,000715: 6653 30001 CA 1 # LIST 048178,000716: 6654 50116 INDEX ADDRWD # ADD MODIFIER. 048179,000717: 6655 60000 AD 0 048180,000718: 6656 54004 TS FBANK # SELECT GOTO ADDRESS 048181,000719: 6657 74747 MASK LOW10 048182,000720: 6660 50000 INDEX A 048183,000721: 6661 32000 CA 10000 048184,000722: 6662 54117 TS POLISH 048185,000723: 6663 16616 TCF GOTO +1 # WITH ADDRESS IN A. 048186,000724: 048187,000725: 6664 30165 SWBRANCH CA BANKSET # SWITCH INSTRUCTIONS WHICH ELECT TO 048188,000726: 6665 54004 TS FBANK # BRANCH COME HERE TO DO SO. 048189,000727: 6666 50164 INDEX LOC 048190,000728: 6667 30001 CA 1 048191,000729: 6670 54117 TS POLISH 048192,000730: 6671 16616 TCF GOTO +1 048193,000731: 048194,000732: # Page 1112 048195,000733: # TRIPLE PRECISION BRANCHING ROUTINE. IF CALLING TC IS AT L, RETURN IS AS FOLLOWS: 048196,000734: # L+1 IF MPAC IS GREATER THAN ZERO. 048197,000735: # L+2 IF MPAC IS EQUAL TO +0 OR -0. 048198,000736: # L+3 IF MPAC IS LESS THAN ZERO. 048199,000737: 048200,000738: 6672 10154 BRANCH CCS MPAC 048201,000739: 6673 00002 TC Q 048202,000740: 6674 16676 TCF +2 # ON ZERO. 048203,000741: 6675 16710 TCF NEG 048204,000742: 048205,000743: 6676 10155 CCS MPAC +1 048206,000744: 6677 00002 TC Q 048207,000745: 6700 16702 TCF +2 048208,000746: 6701 16710 TCF NEG 048209,000747: 048210,000748: 6702 10156 CCS MPAC +2 048211,000749: 6703 00002 TC Q 048212,000750: 6704 16706 TCF +2 048213,000751: 6705 16710 TCF NEG 048214,000752: 048215,000753: 6706 50002 Q+1 INDEX Q 048216,000754: 6707 00001 TC 1 048217,000755: 048218,000756: 6710 50002 NEG INDEX Q # IF FIRST NON-ZERO REGISTER WAS NEGATIVE. 048219,000757: 6711 00002 TC 2 048220,000758: 6712 6710 Q+2 = NEG 048221,000759: 048222,000760: # ITRACE (3) REFERS TO "EXIT". 048223,000761: 048224,000762: 6712 30165 EXIT CA BANKSET # RESTORE USER'S BANK SETTING, AND LEAVE 048225,000763: 6713 54006 TS BBANK # INTERPRETIVE MODE. 048226,000764: 6714 50164 INDEX LOC 048227,000765: 6715 00001 TC 1 048228,000766: 048229,000767: # Page 1113 048230,000768: # SECTION 3 -- ADD/SUBTRACT PACKAGE. 048231,000769: 048232,000770: # THE FOLLOWING OPERATIONS ARE PROVIDED FOR ADDING TO AND SUBTRACTING FROM THE MULTI-PURPOSE ACCUMULATOR 048233,000771: # MPAC: 048234,000772: # 1. DAD DOUBLE PRECISION ADD. 048235,000773: # 2. DSU DOUBLE PRECISION SUBTRACT. 048236,000774: # 3. BDSU DOUBLE PRECISION SUBTRACT FROM. 048237,000775: # 4. TAD TRIPLE PRECISION ADD. 048238,000776: # 5. VAD VECTOR ADD. 048239,000777: # 6. VSU VECTOR SUBTRACT. 048240,000778: # 7. BVSU VECTOR SUBTRACT FROM. 048241,000779: # THE INTERPRETIVE OVERFLOW INDICATOR OVFIND IS SET NON-ZERO IF OVERFLOW OCCURS IN ANY OF THE ABOVE. 048242,000780: 048243,000781: 6716 34674 VSU CAF BIT15 # CHANGES 0 TO DCS. 048244,000782: 6717 16721 TCF +2 048245,000783: 048246,000784: 6720 34371 VAD CAF PRIO30 # CHANGES 0 TO DCA. 048247,000785: 6721 26116 ADS ADDRWD 048248,000786: 6722 00006 EXTEND 048249,000787: 6723 50116 INDEX ADDRWD 048250,000788: 6724 00003 READ HISCALAR # DCA 2 OR DCS 2 048251,000789: 6725 20160 DAS MPAC +3 048252,000790: 6726 00006 EXTEND # CHECK OVERFLOW. 048253,000791: 6727 16731 BZF +2 048254,000792: 6730 06763 TC OVERFLWY 048255,000793: 048256,000794: 6731 00006 EXTEND 048257,000795: 6732 50116 INDEX ADDRWD 048258,000796: 6733 00005 READ CHAN5 # DCA 4 OR DCS 4 048259,000797: 6734 20162 DAS MPAC +5 048260,000798: 6735 00006 EXTEND 048261,000799: 6736 16740 BZF +2 048262,000800: 6737 06760 TC OVERFLWZ 048263,000801: 048264,000802: 6740 00006 EXTEND 048265,000803: 6741 50116 INDEX ADDRWD 048266,000804: 6742 00001 READ LCHAN # DCA 0 OR DCS 0 048267,000805: 6743 16747 TCF ENDVXV 048268,000806: 048269,000807: 6744 00006 DAD EXTEND 048270,000808: 6745 50116 INDEX ADDRWD 048271,000809: 6746 30001 DCA 0 048272,000810: 6747 20155 ENDVXV DAS MPAC # VXV FINISHES HERE. 048273,000811: 6750 00006 EXTEND 048274,000812: 6751 16030 BZF DANZIG 048275,000813: 048276,000814: # Page 1114 048277,000815: 6752 06766 SETOVF TC OVERFLOW 048278,000816: 6753 16030 TCF DANZIG 048279,000817: 048280,000818: # Page 1115 048281,000819: 6754 00006 DSU EXTEND 048282,000820: 6755 50116 INDEX ADDRWD 048283,000821: 6756 40001 DCS 0 048284,000822: 6757 16747 TCF ENDVXV 048285,000823: 048286,000824: 6760 54001 OVERFLWZ TS L # ENTRY FOR THIRD COMPONENT. 048287,000825: 6761 34715 CAF FIVE 048288,000826: 6762 16765 TCF +3 048289,000827: 048290,000828: 6763 54001 OVERFLWY TS L # ENTRY FOR SECOND COMPONENT. 048291,000829: 6764 36214 CAF THREE 048292,000830: 6765 56001 XCH L 048293,000831: 048294,000832: 6766 50000 OVERFLOW INDEX A # ENTRY FOR 1ST COMP OR DP (L=0). 048295,000833: 6767 44673 CS LIMITS # PICK UP POSMAX OR NEGMAX. 048296,000834: 6770 54130 TS BUF 048297,000835: 6771 00006 EXTEND 048298,000836: 6772 24000 AUG A 048299,000837: 6773 50001 INDEX L 048300,000838: 6774 26155 ADS MPAC +1 048301,000839: 6775 54007 TS 7 048302,000840: 6776 34714 CAF ZERO 048303,000841: 6777 60130 AD BUF 048304,000842: 7000 50001 INDEX L 048305,000843: 7001 26154 ADS MPAC 048306,000844: 7002 54007 TS 7 048307,000845: 7003 00002 TC Q # NO OVERFLOW EXIT. 048308,000846: 7004 17121 TCF SETOVF2 # SET OVFIND AND EXIT. 048309,000847: 048310,000848: 7005 00006 BVSU EXTEND 048311,000849: 7006 50116 INDEX ADDRWD 048312,000850: 7007 30003 DCA 2 048313,000851: 7010 52160 DXCH MPAC +3 048314,000852: 7011 00006 EXTEND 048315,000853: 7012 40001 DCOM 048316,000854: 7013 20160 DAS MPAC +3 048317,000855: 7014 00006 EXTEND 048318,000856: 7015 17017 BZF +2 048319,000857: 7016 06763 TC OVERFLWY 048320,000858: 048321,000859: 7017 00006 EXTEND 048322,000860: 7020 50116 INDEX ADDRWD 048323,000861: 7021 30005 DCA 4 048324,000862: 7022 52162 DXCH MPAC +5 048325,000863: 7023 00006 EXTEND 048326,000864: 7024 40001 DCOM 048327,000865: 7025 20162 DAS MPAC +5 048328,000866: 7026 00006 EXTEND 048329,000867: 7027 17031 BZF +2 048330,000868: 7030 06760 TC OVERFLWZ 048331,000869: 048332,000870: # Page 1116 048333,000871: 7031 00006 BDSU EXTEND 048334,000872: 7032 50116 INDEX ADDRWD 048335,000873: 7033 30001 DCA 0 048336,000874: 7034 52155 DXCH MPAC 048337,000875: 7035 00006 EXTEND 048338,000876: 7036 40001 DCOM 048339,000877: 7037 16747 TCF ENDVXV 048340,000878: 048341,000879: # Page 1117 048342,000880: # TRIPLE PRECISION ADD ROUTINE. 048343,000881: 048344,000882: 7040 00006 TAD EXTEND 048345,000883: 7041 50116 INDEX ADDRWD 048346,000884: 7042 30002 DCA 1 # ADD MINOR PARTS FIRST. 048347,000885: 7043 20156 DAS MPAC +1 048348,000886: 7044 50116 INDEX ADDRWD 048349,000887: 7045 60000 AD 0 048350,000888: 7046 60154 AD MPAC 048351,000889: 7047 54154 TS MPAC 048352,000890: 7050 16030 TCF DANZIG 048353,000891: 048354,000892: 7051 16752 TCF SETOVF # SET OVFIND IF SUCH OCCURS. 048355,000893: 048356,000894: # Page 1118 048357,000895: # ARITHMETIC SUBROUTINES REQUIRED IN FIXED-FIXED. 048358,000896: # 1. DMPSUB DOUBLE PRECISION MULTIPLY, MULTIPLY THE CONTENTS OF MPAC,+1 BY THE DP WORD WHOSE ADDRESS 048359,000897: # IS IN ADDRWD AND LEAVE A TRIPLE-PRECISION RESULT IN MPAC. 048360,000898: # 2. ROUNDSUB ROUND THE TRIPLE PRECISION CONTENTS OF MPAC TO DOUBLE PRECISION. 048361,000899: # 3. DOTSUB TAKE THE DOT PRODUCT OF THE VECTOR IN MPAC AND THE VECTOR WHOSE ADDRESS IS IN ADDRWD 048362,000900: # AND LEAVE THE TRIPLE PRECISION RESULT IN MPAC. 048363,000901: # 4. POLY USING THE CONTENTS OF MPAC AS A DP ARGUMENT, EVALUATE THE POLYNOMIAL WHOSE DEGREE AND 048364,000902: # COEFFICIENTS IMMEDIATELY FOLLOW THE TC POLY INSTRUCTION (SEE ROUTINE FOR DETAILS). 048365,000903: 048366,000904: 7052 50002 DMP INDEX Q # BASIC SUBROUTINE FOR USE BY PINBALL, ETC 048367,000905: # Was CAF --- RSB 2004. 048368,000906: 7053 30000 CA 0 # ADRES OF ARGUMENT FOLLOWS TC DMP . 048369,000907: 7054 24002 INCR Q 048370,000908: 7055 54116 -1 TS ADDRWD # (PROLOGUE FOR SETTING ADDRWD.) 048371,000909: 048372,000910: 7056 50116 DMPSUB INDEX ADDRWD # GET MINOR PART OF OPERAND AT C(ADDRWD). 048373,000911: 7057 30001 CA 1 048374,000912: 7060 54156 TS MPAC +2 # THIS WORKS FOR SQUARING MPAC AS WELL. 048375,000913: 7061 34714 CAF ZERO # SET MPAC +1 TO ZERO SO WE CAN ACCUMULATE 048376,000914: 7062 56155 XCH MPAC +1 # THE PARTIAL PRODUCTS WITH DAS 048377,000915: 7063 54135 TS MPTEMP # INSTRUCTIONS. 048378,000916: 7064 00006 EXTEND 048379,000917: 7065 70156 MP MPAC +2 # MINOR OF MPAC X MINOR OF C(ADDRWD). 048380,000918: 048381,000919: 7066 56156 XCH MPAC +2 # DISCARD MINOR PART OF ABOVE RESULT AND 048382,000920: 7067 00006 EXTEND # FORM MAJOR OF MPAC X MINOR OF C(ADDRWD). 048383,000921: 7070 70154 MP MPAC 048384,000922: 7071 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW. 048385,000923: 048386,000924: 7072 50116 INDEX ADDRWD # GET MAJOR PART OF ARGUMENT AT C(ADDRWD). 048387,000925: 7073 30000 CA 0 048388,000926: 7074 56135 XCH MPTEMP # SAVE AND BRING OUT MINOR OF MPAC. 048389,000927: 7075 00006 DMPSUB2 EXTEND 048390,000928: 7076 70135 MP MPTEMP # MAJOR OF C(ADDRWD) X MINOR OF MPAC. 048391,000929: 7077 20156 DAS MPAC +1 # ACCUMULATE, SETTING A TO NET OVERFLOW. 048392,000930: 048393,000931: 7100 56154 XCH MPAC # SETTING MPAC TO 0 OR +-1. 048394,000932: 7101 00006 EXTEND 048395,000933: 7102 70135 MP MPTEMP # MAJOR OF MPAC X MAJOR OF C(ADDRWD). 048396,000934: 7103 20155 DAS MPAC # GUARANTEED NO OVERFLOW. 048397,000935: 7104 00002 TC Q # 49 MCT = .573 MS. INCLUDING RETURN. 048398,000936: 048399,000937: # Page 1119 048400,000938: # ROUND MPAC TO DOUBLE PRECISION, SETTING OVFIND ON THE RARE EVENT OF OVERFLOW. 048401,000939: 048402,000940: 7105 34714 ROUNDSUB CAF ZERO # SET MPAC +2 = 0 FOR SCALARS AND CHANGE 048403,000941: 7106 54163 +1 TS MODE # MODE TO DP. 048404,000942: 048405,000943: 7107 56156 VROUND XCH MPAC +2 # BUT WE NEEDN'T TAKE THE TIME FOR VECTORS. 048406,000944: 7110 60000 DOUBLE 048407,000945: 7111 54001 TS L 048408,000946: 7112 00002 TC Q 048409,000947: 048410,000948: 7113 60155 AD MPAC +1 # ADD ROUDING BIT IF MPAC +2 WAS GREATER 048411,000949: 7114 54155 TS MPAC +1 # THAN .5 IN MAGNITUDE. 048412,000950: 7115 00002 TC Q 048413,000951: 048414,000952: 7116 60154 AD MPAC # PROPAGATE INTERFLOW. 048415,000953: 7117 54154 TS MPAC 048416,000954: 7120 00002 TC Q 048417,000955: 048418,000956: 7121 54121 SETOVF2 TS OVFIND # (RARE). 048419,000957: 7122 00002 TC Q 048420,000958: 048421,000959: # Page 1120 048422,000960: # THE DOT PRODUCT SUBROUTINE USUALLY FORMS THE DOT PRODUCT OF THE VECTOR IN MPAC WITH A STANDARD SIX 048423,000961: # REGISTER VECTOR WHOSE ADDRESS IS IN ADDRWD. IN THIS CASE C(DOTINC) ARE SET TO 2. VXM, HOWEVER, SETS C(DOTINC) TO 048424,000962: # 6 SO THAT DOTSUB DOTS MPAC WITH A COLUMN VECTOR OF THE MATRIX IN QUESTION IN THIS CASE. 048425,000963: 048426,000964: 7123 34711 PREDOT CAF TWO # PROLOGUE TO SET DOTINC TO 2. 048427,000965: 7124 54136 TS DOTINC 048428,000966: 048429,000967: 7125 00006 DOTSUB EXTEND 048430,000968: 7126 22137 QXCH DOTRET # SAVE RETURN 048431,000969: 7127 07056 TC DMPSUB # DOT X COMPONENTS. 048432,000970: 7130 52160 DXCH MPAC +3 # POSITION Y COMPONENT OF MPAC FOR 048433,000971: 7131 52155 DXCH MPAC # MULTIPLICATION WHILE SAVING RESULT IN 048434,000972: 7132 52131 DXCH BUF # THREE WORD BUFFER, BUF. 048435,000973: 7133 30156 CA MPAC +2 048436,000974: 7134 54132 TS BUF +2 048437,000975: 048438,000976: 7135 30136 CA DOTINC # ADVANCE ADDRWD TO Y COMPONENT OF 048439,000977: 7136 26116 ADS ADDRWD # OTHER ARGUMENT. 048440,000978: 7137 07056 TC DMPSUB 048441,000979: 7140 52156 DXCH MPAC +1 # ACCUMULATE PARTIAL PRODUCTS. 048442,000980: 7141 20132 DAS BUF +1 048443,000981: 7142 60154 AD MPAC 048444,000982: 7143 60130 AD BUF 048445,000983: 7144 54130 TS BUF 048446,000984: 7145 17147 TCF +2 048447,000985: 7146 54121 TS OVFIND # IF OVERFLOW OCCURS. 048448,000986: 048449,000987: 7147 52162 DXCH MPAC +5 # MULTIPLY Z COMPONENTS. 048450,000988: 7150 52155 DXCH MPAC 048451,000989: 7151 30136 CA DOTINC 048452,000990: 7152 26116 ADS ADDRWD 048453,000991: 7153 07056 TC DMPSUB 048454,000992: 7154 52132 ENDDOT DXCH BUF +1 # LEAVE FINAL ACCUMULATION IN MPAC. 048455,000993: 7155 20156 DAS MPAC +1 048456,000994: 7156 60154 AD MPAC 048457,000995: 7157 60130 AD BUF 048458,000996: 7160 54154 TS MPAC 048459,000997: 7161 00137 TC DOTRET 048460,000998: 048461,000999: 7162 06766 TC OVERFLOW # ON OVERFLOW HERE. 048462,001000: 7163 00137 TC DOTRET 048463,001001: 048464,001002: # Page 1121 048465,001003: # DOUBLE PRECISION POLYNOMIAL EVALUATOR 048466,001004: # N N-1 048467,001005: # THIS ROUTINE EVALUATES A X + A X + ... + A X + A LEAVING THE DP RESULT IN MPAC ON EXIT. 048468,001006: # N N-1 1 0 048469,001007: 048470,001008: # THE ROUTINE HAS TWO ENTRIES 048471,001009: 048472,001010: # 1 ENTRY THRU POWRSERS. THE COEFFICIENTS MAY BE EITHER IN FIXED OR ERASABLE E. THE CALL IS BY 048473,001011: # TC POWRSERS, AND THE RETURN IS TO LOC(TC POWRSERS)+1. THE ENTERING DATA MUST BE AS FOLLOWS: 048474,001012: # A SP LOC-3 ADDRESS FOR REFERENCING COEF TABLE 048475,001013: # L SP N-1 N IS THE DEGREE OF THE POWER SERIES 048476,001014: # MPAC DP X ARGUMENT 048477,001015: # LOC-2N DP A(0) 048478,001016: # ... 048479,001017: # LOC DP A(N) 048480,001018: 048481,001019: # 2. ENTRY THRU POLY. THE CALL TO POLY AND THE ENTERING DATA MUST BE AS FOLLOWS 048482,001020: # MPAC DP X ARGUMENT 048483,001021: # LOC TC POLY 048484,001022: # LOC+1 DP A(0) 048485,001023: # ... 048486,001024: # LOC+2N+2 DP A(N) RETURN IS TO LOC+2N+4 048487,001025: 048488,001026: 7164 00006 POWRSERS EXTEND 048489,001027: 7165 22141 QXCH POLYRET # RETURN ADDRESS 048490,001028: 7166 54117 TS POLISH # POWER SERIES ADDRESS 048491,001029: 7167 22140 LXCH POLYCNT # N-1 TO COUNTER 048492,001030: 7170 17201 TCF POLYCOM # SKIP SET UP BY POLY 048493,001031: 048494,001032: 7171 50002 POLY INDEX Q 048495,001033: # Was CAF --- RSB 2004. 048496,001034: 7172 30000 CA 0 048497,001035: 7173 54140 TS POLYCNT # N-1 TO COUNTER 048498,001036: 7174 60000 DOUBLE 048499,001037: 7175 60002 AD Q 048500,001038: 7176 54117 TS POLISH # L(A(N))-3 TO POLISH 048501,001039: 7177 64715 AD FIVE 048502,001040: 7200 54141 TS POLYRET # STORE RETURN ADDRESS 048503,001041: 048504,001042: 7201 36242 POLYCOM CAF LVBUF # INCOMING X WILL BE MOVED TO VBUF, SO 048505,001043: 7202 54116 TS ADDRWD # SET ADDRWD SO DMPSUB WILL MPY BY VBUF. 048506,001044: 048507,001045: 7203 00006 EXTEND 048508,001046: 7204 50117 INDEX POLISH 048509,001047: 7205 30004 DCA 3 048510,001048: 048511,001049: # Page 1122 048512,001050: 7206 52155 DXCH MPAC # LOAD A(N) INTO MPAC 048513,001051: 7207 52123 DXCH VBUF # SAVING X IN VBUF 048514,001052: 7210 17214 TCF POLY2 048515,001053: 048516,001054: 7211 54140 POLYLOOP TS POLYCNT # SAVE DECREMENTD LOOP COUNTER 048517,001055: 7212 44711 CS TWO 048518,001056: 7213 26117 ADS POLISH # REGRESS COEFFICIENT POINTER 048519,001057: 048520,001058: 7214 07056 POLY2 TC DMPSUB # MULTIPLY BY X 048521,001059: 7215 00006 EXTEND 048522,001060: 7216 50117 INDEX POLISH 048523,001061: 7217 30002 DCA 1 # ADD IN NEXT COEFFICIENT 048524,001062: 7220 20155 DAS MPAC # USER'S RESPONSIBILITY TO ASSURE NO OVFLOW 048525,001063: 048526,001064: 7221 10140 CCS POLYCNT 048527,001065: 7222 17211 TCF POLYLOOP 048528,001066: 7223 00141 TC POLYRET # RETURN CALLER 048529,001067: 048530,001068: # Page 1123 048531,001069: # MISCELLANEOUS MULTI-PRECISION ROUTINES REQUIRED IN FIXED-FIXED BUT NOT USED BY THE INTERPRETER. 048532,001070: 048533,001071: 7224 34714 DPAGREE CAF ZERO # DOUBLE PRECISION ENTRY -- 048534,001072: 7225 54156 TS MPAC +2 # ZERO LOW-ORDER WORD 048535,001073: 048536,001074: 7226 22002 TPAGREE LXCH Q # FORCE SIGN AGREEMENT AMONG THE TRIPLE 048537,001075: 7227 06672 TC BRANCH # PRECISION CONTENTS OF MPAC. RETURNING 048538,001076: 7230 17234 TCF ARG+ # WITH SIGNUM OF THE INPUT IN A. 048539,001077: 7231 17254 TCF ARGZERO 048540,001078: 048541,001079: 7232 44672 CS POSMAX # IF NEGATIVE. 048542,001080: 7233 17235 TCF +2 048543,001081: 048544,001082: 7234 34672 ARG+ CAF POSMAX 048545,001083: 7235 54002 TS Q 048546,001084: 7236 00006 EXTEND 048547,001085: 7237 24000 AUG A # FORMS +-1.0. 048548,001086: 7240 60156 AD MPAC +2 048549,001087: 7241 54156 TS MPAC +2 048550,001088: 7242 34714 CAF ZERO 048551,001089: 7243 60002 AD Q 048552,001090: 7244 60155 AD MPAC +1 048553,001091: 7245 54155 TS MPAC +1 048554,001092: 7246 34714 CAF ZERO 048555,001093: 7247 60002 AD Q # Q STILL HAS POSMAX OR NEGMAX IN IT. 048556,001094: 7250 60154 AD MPAC 048557,001095: 7251 54154 ARGZERO2 TS MPAC # ALWAYS SKIPPING UNLESS ARGZERO. 048558,001096: 7252 54155 TS MPAC +1 048559,001097: 7253 00001 TC L # RETURN VIA L. 048560,001098: 048561,001099: 7254 54156 ARGZERO TS MPAC +2 # SET ALL THREE MPAC REGISTERS TO ZERO. 048562,001100: 7255 17251 TCF ARGZERO2 048563,001101: 048564,001102: # SHORTMP MULTIPLIES THE TP CONTENTS OF MPAC BY THE SINGLE PRECISION NUMBER ARRIVING IN A. 048565,001103: 048566,001104: 7256 54135 SHORTMP TS MPTEMP 048567,001105: 7257 00006 EXTEND 048568,001106: 7260 70156 MP MPAC +2 048569,001107: 7261 54156 TS MPAC +2 048570,001108: 7262 34714 SHORTMP2 CAF ZERO # SO SUBSEQUENT DAS WILL WORK. 048571,001109: 7263 56155 XCH MPAC +1 048572,001110: 7264 17075 TCF DMPSUB2 048573,001111: 048574,001112: # Page 1124 048575,001113: # DMPNSUB MULTIPLIES THE DP FRACTION ARRIVING IN MPAC BY THE SP 048576,001114: # INTEGER ARRIVING IN A. THE DP PRODUCT DEPARTS BOTH IN MPAC AND IN 048577,001115: # A AND L. NOTE THAT DMPNSUB NORMALLY INCREASES THE MAGNITUDE OF THE 048578,001116: # CONTENTS OF MPAC. THE CUSTOMER MUST INSURE THAT B(A) X B(MPAC,MPAC+1) 048579,001117: # AND B(A) X B(MPAC) ARE LESS THAN 1 IN MAGNITUDE, WHERE B, AS IS OBVIOUS, 048580,001118: # INDICATES THE ARRIVING CONTENTS. 048581,001119: 048582,001120: 7265 54135 DMPNSUB TS DMPNTEMP 048583,001121: 7266 00006 EXTEND 048584,001122: 7267 70155 MP MPAC +1 048585,001123: 7270 52155 DXCH MPAC # LOW PRODUCT TO MPAC, HIGH FACTOR TO A 048586,001124: 7271 00006 EXTEND 048587,001125: 7272 70135 MP DMPNTEMP 048588,001126: 7273 30001 CA L 048589,001127: 7274 26154 ADS MPAC # COMPLETING THE PRODUCT IN MPAC 048590,001128: 7275 00006 EXTEND 048591,001129: 7276 30155 DCA MPAC # BRINGING THE PRODUCT INTO A AND L 048592,001130: 7277 00002 TC Q 048593,001131: 048594,001132: # Page 1125 048595,001133: # MISCELLANEOUS VECTOR OPERATIONS. INCLUDED HERE ARE THE FOLLOWING. 048596,001134: # 1. DOT DP VECTOR DOT PRODUCT. 048597,001135: # 2. VXV DP VECTOR CROSS PRODUCT. 048598,001136: # 3. VXSC DP VECTOR TIMES SCALAR. 048599,001137: # 4. V/SC DP VECTOR DIVIDED BY SCALAR. 048600,001138: # 5. VPROJ DP VECTOR PROJECTION. ( (MPAC.X)MPAC ). 048601,001139: # 6. VXM DP VECTOR POST-MULTIPLIED BY MATRIX. 048602,001140: # 7. MXV DP VECTOR PRE-MULTIPLIED BY MATRIX. 048603,001141: 048604,001142: 7300 07123 DOT TC PREDOT # DO THE DOT PRODUCT AND EXIT, CHANGING 048605,001143: 7301 34714 DMODE CAF ZERO # THE MODE TO DP SCALAR. 048606,001144: 7302 16027 TCF NEWMODE 048607,001145: 048608,001146: 7303 34711 MXV CAF TWO # SET UP MATINC AND DOTINC FOR ROW 048609,001147: 7304 54140 TS MATINC # VECTORS. 048610,001148: 7305 17311 TCF VXM/MXV # GO TO COMMON PORTION. 048611,001149: 048612,001150: 7306 44377 VXM CS TEN # SET MATINC AND DOTINC TO REFER TO MATRIX 048613,001151: 7307 54140 TS MATINC # AS THREE COLUMN VECTORS. 048614,001152: 7310 36211 CAF SIX 048615,001153: 048616,001154: # Page 1126 048617,001155: # COMMON PORTION OF MXV AND VXM. 048618,001156: 048619,001157: 7311 54136 VXM/MXV TS DOTINC 048620,001158: 048621,001159: # ITRACE (2) REFERS TO "VXM/MXV". 048622,001160: 048623,001161: 7312 07501 TC MPACVBUF # SAVE VECTOR IN MPAC FOR FURTHER USE. 048624,001162: 048625,001163: 7313 07125 TC DOTSUB # GO DOT TO GET X COMPONENT OF ANSWER. 048626,001164: 7314 00006 EXTEND 048627,001165: 7315 30123 DCA VBUF # MOVE MPAC VECTOR BACK INTO MPAC, SAVING 048628,001166: 7316 52155 DXCH MPAC # NEW X COMPONENT IN BUF2. 048629,001167: 7317 52134 DXCH BUF2 048630,001168: 7320 00006 EXTEND 048631,001169: 7321 30125 DCA VBUF +2 048632,001170: 7322 52160 DXCH MPAC +3 048633,001171: 7323 00006 EXTEND 048634,001172: 7324 30127 DCA VBUF +4 048635,001173: 7325 52162 DXCH MPAC +5 048636,001174: 7326 30140 CA MATINC # INITIALIZE ADDRWD FOR NEXT DOT PRODUCT. 048637,001175: 7327 26116 ADS ADDRWD # FORMS HAS ADDRESS OF NEXT COLUMN(ROW). 048638,001176: 048639,001177: 7330 07125 TC DOTSUB 048640,001178: 7331 52123 DXCH VBUF # MORE GIVEN VECTOR BACK TO MPAC, SAVING Y 048641,001179: 7332 52155 DXCH MPAC # COMPONENT OF ANSWER IN VBUF +2. 048642,001180: 7333 52125 DXCH VBUF +2 048643,001181: 7334 52160 DXCH MPAC +3 048644,001182: 7335 52127 DXCH VBUF +4 048645,001183: 7336 52162 DXCH MPAC +5 048646,001184: 7337 30140 CA MATINC # FORM ADDRESS OF LAST COLUMN OR ROW. 048647,001185: 7340 26116 ADS ADDRWD 048648,001186: 048649,001187: 7341 07125 TC DOTSUB 048650,001188: 7342 52134 DXCH BUF2 # ANSWER NOW COMPLETE. PUT COMPONENTS INTO 048651,001189: 7343 52155 DXCH MPAC # PROPER MPAC REGISTERS. 048652,001190: 7344 52162 DXCH MPAC +5 048653,001191: 7345 52125 DXCH VBUF +2 048654,001192: 7346 52160 DXCH MPAC +3 048655,001193: 7347 16030 TCF DANZIG # EXIT. 048656,001194: 048657,001195: # Page 1127 048658,001196: # VXSC -- VECTOR TIMES SCALAR. 048659,001197: 048660,001198: 7350 10163 VXSC CCS MODE # TEST PRESENT MODE. 048661,001199: 7351 17377 TCF DVXSC # SEPARATE ROUTINE WHEN SCALAR IS IN MPAC. 048662,001200: 7352 17377 TCF DVXSC 048663,001201: 048664,001202: 7353 07056 VVXSC TC DMPSUB # COMPUTE X COMPONENT 048665,001203: 7354 07107 TC VROUND # AND ROUND IT. 048666,001204: 7355 52160 DXCH MPAC +3 # PUT Y COMPONENT INTO MPAC SAVING MPAC IN 048667,001205: 7356 52155 DXCH MPAC # MPAC +3. 048668,001206: 7357 52160 DXCH MPAC +3 048669,001207: 048670,001208: 7360 07056 TC DMPSUB # DO SAME FOR Y AND Z COMPONENTS. 048671,001209: 7361 07107 TC VROUND 048672,001210: 7362 52162 DXCH MPAC +5 048673,001211: 7363 52155 DXCH MPAC 048674,001212: 7364 52162 DXCH MPAC +5 048675,001213: 048676,001214: 7365 07056 TC DMPSUB 048677,001215: 7366 07107 TC VROUND 048678,001216: 7367 52155 VROTATEX DXCH MPAC # EXIT USED TO RESTORE MPAC AFTER THIS 048679,001217: 7370 52162 DXCH MPAC +5 # TYPE OF ROTATION. CALLED BY VECTOR SHIFT 048680,001218: 7371 52160 DXCH MPAC +3 # RIGHT, V/SC, ETC. 048681,001219: 7372 52155 DXCH MPAC 048682,001220: 7373 16030 TCF DANZIG 048683,001221: 048684,001222: # Page 1128 048685,001223: # DP VECTOR PROJECTION ROUTINE. 048686,001224: 048687,001225: 7374 07123 VPROJ TC PREDOT # (MPAC.X)MPAC IS COMPUTED AND LEFT IN 048688,001226: 7375 44710 CS FOUR # MPAC. DO DOT AND FALL INTO DVXSC. 048689,001227: 7376 26116 ADS ADDRWD 048690,001228: 048691,001229: # VXSC WHEN SCALAR ARRIVES IN MPAC AND VECTOR IS AT X. 048692,001230: 048693,001231: 7377 00006 DVXSC EXTEND # SAVE SCALAR IN MPAC +3 AND GET X 048694,001232: 7400 30155 DCA MPAC # COMPONENT OF ANWER. 048695,001233: 7401 52160 DXCH MPAC +3 048696,001234: 7402 07056 TC DMPSUB 048697,001235: 7403 07107 TC VROUND 048698,001236: 048699,001237: 7404 34711 CAF TWO # ADVANCE ADDRWD TO Y COMPONENT OF X. 048700,001238: 7405 26116 ADS ADDRWD 048701,001239: 7406 00006 EXTEND 048702,001240: 7407 30160 DCA MPAC +3 # PUT SCALAR BACK INTO MPAC AND SAVE 048703,001241: 7410 52155 DXCH MPAC # X RESULT IN MPAC +5. 048704,001242: 7411 52162 DXCH MPAC +5 048705,001243: 7412 07056 TC DMPSUB 048706,001244: 7413 07107 TC VROUND 048707,001245: 048708,001246: 7414 34711 CAF TWO 048709,001247: 7415 26116 ADS ADDRWD # TO Z COMPONENT. 048710,001248: 7416 52160 DXCH MPAC +3 # BRING SCALAR BACK, PUTTING Y RESULT IN 048711,001249: 7417 52155 DXCH MPAC # THE PROPER PLACE. 048712,001250: 7420 52160 DXCH MPAC +3 048713,001251: 7421 07056 TC DMPSUB 048714,001252: 7422 07107 TC VROUND 048715,001253: 048716,001254: 7423 52155 DXCH MPAC # PUT Z COMPONENT IN PROPER PLACE, ALSO 048717,001255: 7424 52162 DXCH MPAC +5 # POSITIONING X. 048718,001256: 7425 52155 DXCH MPAC 048719,001257: 048720,001258: 7426 16470 TCF VMODE # MODE HAS CHANGED TO VECTOR. 048721,001259: 048722,001260: # Page 1129 048723,001261: # THE VECTOR CROSS PRODUCT ROUTINE CALCULATES (X M -M M ,X M -X M ,X M -X M ) WHERE M IS THE VECTOR IN 048724,001262: # 3 2 2 3 1 3 3 1 2 1 1 2 048725,001263: # MPAC AND X THE VECTOR AT THE GIVEN ADDRESS. 048726,001264: 048727,001265: 7427 00006 VXV EXTEND 048728,001266: 7430 30162 DCA MPAC +5 # FORM UP M3X1, LEAVING M1 IN VBUF. 048729,001267: 7431 52155 DXCH MPAC 048730,001268: 7432 52123 DXCH VBUF 048731,001269: 7433 07056 TC DMPSUB # BY X1. 048732,001270: 048733,001271: 7434 00006 EXTEND 048734,001272: 7435 40160 DCS MPAC +3 # CALCULATE -X1M2, SAVING X1M3 IN VBUF +2. 048735,001273: 7436 52155 DXCH MPAC 048736,001274: 7437 52125 DXCH VBUF +2 048737,001275: 7440 07056 TC DMPSUB 048738,001276: 048739,001277: 7441 34711 CAF TWO # ADVANCE ADDRWD TO X2. 048740,001278: 7442 26116 ADS ADDRWD 048741,001279: 7443 00006 EXTEND 048742,001280: 7444 40162 DCS MPAC +5 # PREPARE TO GET -X2M3, SAVING -X1M2 IN 048743,001281: 7445 52155 DXCH MPAC # MPAC +5. 048744,001282: 7446 52162 DXCH MPAC +5 048745,001283: 7447 07056 TC DMPSUB 048746,001284: 048747,001285: 7450 00006 EXTEND 048748,001286: 7451 30123 DCA VBUF # GET X2M1, SAVING -X2M3 IN VBUF +4. 048749,001287: 7452 52155 DXCH MPAC 048750,001288: 7453 52127 DXCH VBUF +4 048751,001289: 7454 07056 TC DMPSUB 048752,001290: 048753,001291: 7455 34711 CAF TWO # ADVANCE ADDRWD TO X3. 048754,001292: 7456 26116 ADS ADDRWD 048755,001293: 7457 00006 EXTEND 048756,001294: 7460 40123 DCS VBUF # GET -X3M1, ADDING X2M1 TO MPAC +5 TO 048757,001295: 7461 52155 DXCH MPAC # COMPLETE THE Z COMPONENT OF THE ANSWER. 048758,001296: 7462 20162 DAS MPAC +5 048759,001297: 048760,001298: 7463 00006 EXTEND 048761,001299: 7464 17466 BZF +2 048762,001300: 7465 06760 TC OVERFLWZ 048763,001301: 048764,001302: 7466 07056 TC DMPSUB 048765,001303: 7467 52125 DXCH VBUF +2 # MOVE X1M3 TO MPAC +3 SETTING UP FOR X3M2 048766,001304: 7470 52160 DXCH MPAC +3 # AND ADD -X3M1 TO MPAC +3 TO COMPLETE THE 048767,001305: 7471 52155 DXCH MPAC # Y COMPONENT OF THE RESULT. 048768,001306: 7472 20160 DAS MPAC +3 048769,001307: 048770,001308: 7473 00006 EXTEND 048771,001309: 7474 17476 BZF +2 048772,001310: # Page 1130 048773,001311: 7475 06763 TC OVERFLWY 048774,001312: 048775,001313: 7476 07056 TC DMPSUB 048776,001314: 7477 52127 DXCH VBUF +4 # GO ADD -X2M3 TO X3M2 TO COMPLETE THE X 048777,001315: 7500 16747 TCF ENDVXV # COMPONENT (TAIL END OF DAD). 048778,001316: 048779,001317: # THE MPACVBUF SUBROUTINE SAVES THE VECTOR IN MPAC IN VBUF WITHOUT CLOBBERING MPAC. 048780,001318: 048781,001319: 7501 00006 MPACVBUF EXTEND # CALLED BY MXV, VXM, AND UNIT. 048782,001320: 7502 30155 DCA MPAC 048783,001321: 7503 52123 DXCH VBUF 048784,001322: 7504 00006 EXTEND 048785,001323: 7505 30160 DCA MPAC +3 048786,001324: 7506 52125 DXCH VBUF +2 048787,001325: 7507 00006 EXTEND 048788,001326: 7510 30162 DCA MPAC +5 048789,001327: 7511 52127 DXCH VBUF +4 048790,001328: 7512 00002 TC Q # RETURN TO CALLER. 048791,001329: 048792,001330: # DOUBLE PRECISION SIGN AGREE ROUTINE. ARRIVE WITH INPUT IN A+L. OUTPUT IS IN A + L. 048793,001331: 048794,001332: 7513 10000 ALSIGNAG CCS A # TEST UPPER PART. 048795,001333: 7514 17520 TCF UPPOS # IT IS POSITIVE 048796,001334: 7515 00002 TC Q # ZERO 048797,001335: 7516 17530 TCF UPNEG # NEGATIVE 048798,001336: 7517 00002 TC Q # ZERO 048799,001337: 048800,001338: 7520 56001 UPPOS XCH L # SAVE DECREMENTED UPPER PART. 048801,001339: 7521 64675 AD HALF 048802,001340: 7522 64675 AD HALF 048803,001341: 7523 54000 TS A # SKIPS ON OVERFLOW 048804,001342: 7524 17526 TCF +2 048805,001343: 7525 24001 INCR L # RESTORE UPPER TO ORIGINAL VALUE 048806,001344: 7526 56001 XCH L # SWAP A + L BANCK. 048807,001345: 7527 00002 TC Q 048808,001346: 048809,001347: 7530 56001 UPNEG XCH L # SAVE COMPLEMENTED + DECREMENTED UPPER PT 048810,001348: 7531 64674 AD NEGMAX 048811,001349: 7532 67716 AD NEGONE 048812,001350: 7533 54000 TS A 048813,001351: 7534 17536 TCF +2 # DON'T INCREMENT IF NO OVERFLOW. 048814,001352: 7535 24001 INCR L 048815,001353: 7536 56001 XCH L 048816,001354: 7537 40000 COM # MAKE NEGATIVE AGAIN. 048817,001355: 7540 00002 TC Q 048818,001356: 048819,001357: # Page 1131 048820,001358: # INTERPRETIVE INSTRUCTIONS WHOSE EXECUTION CONSISTS OF PRINCIPALLY CALLING SUBROUTINES. 048821,001359: 048822,001360: 7541 07056 DMP1 TC DMPSUB # DMP INSTRUCTIONS 048823,001361: 7542 16030 TCF DANZIG 048824,001362: 048825,001363: 7543 07056 DMPR TC DMPSUB 048826,001364: 7544 07106 TC ROUNDSUB +1 # (C(A) = +0). 048827,001365: 7545 16030 TCF DANZIG 048828,001366: 048829,001367: 7546 00006 DDV EXTEND 048830,001368: 7547 50116 INDEX ADDRWD # MOVE DIVIDENT INTO BUF. 048831,001369: 7550 30001 DCA 0 048832,001370: 7551 17556 TCF BDDV +4 048833,001371: 048834,001372: 7552 00006 BDDV EXTEND # MOVE DIVISOR INTO MPAC SAVING MPAC, THE 048835,001373: 7553 50116 INDEX ADDRWD # DIVIDEND, IN BUF. 048836,001374: 7554 30001 DCA 0 048837,001375: 7555 52155 DXCH MPAC 048838,001376: 7556 52131 +4 DXCH BUF 048839,001377: 7557 34714 CAF ZERO # DIVIDE ROUTINES IN BANK 0. 048840,001378: 7560 54004 TS FBANK 048841,001379: 7561 12353 TCF DDV/BDDV 048842,001380: 048843,001381: 7562 30116 SETPD CA ADDRWD # MUST SET TO WORK AREA, OR EBANK TROUBLE. 048844,001382: 7563 54166 TS PUSHLOC 048845,001383: 7564 16032 TCF NOIBNKSW # NO FBANK SWITCH REQUIRED. 048846,001384: 048847,001385: 7565 34714 TSLC CAF ZERO # SHIFTING ROUTINES LOCATED IN BANK 00. 048848,001386: 7566 54004 TS FBANK 048849,001387: 7567 12172 TCF TSLC2 048850,001388: 048851,001389: 7570 36043 GSHIFT CAF LOW7 # USED AS MASK AT GENSHIFT. THIS PROCESSES 048852,001390: 7571 54004 TS FBANK # ANY SHIFT INSTRUCTION (EXCEPT TSLC) WITH 048853,001391: 7572 12214 TCF GENSHIFT # AN ADDRESS (ROUTINES IN BANK 0). 048854,001392: 048855,001393: # Page 1132 048856,001394: # THE FOLLOWING IS THE PROLOGUE TO V/SC. IF THE PRESENT MODE IS VECTOR, IT SAVES THE SCALAR AT X IN BUF 048857,001395: # AND CALLES THE V/SC ROUTINE IN BANK 0. IF THE PRESENT MODE IS SCALAR, IT MOVES THE VECTOR AT X INTO MPAC, SAVING 048858,001396: # THE SCALAR IN MPAC IN BUF BEFORE CALLING THE V/SC ROUTINE IN BANK 0. 048859,001397: 048860,001398: 7573 10163 V/SC CCS MODE 048861,001399: 7574 17605 TCF DV/SC # MOVE VECTOR INTO MPAC. 048862,001400: 7575 17605 TCF DV/SC 048863,001401: 048864,001402: 7576 00006 VV/SC EXTEND 048865,001403: 7577 50116 INDEX ADDRWD 048866,001404: 7600 30001 DCA 0 048867,001405: 7601 52131 V/SC1 DXCH BUF # IN BOTH CASES, VECTOR IS NOW IN MPAC AND 048868,001406: 7602 34714 CAF ZERO # SCALAR IN BUF. 048869,001407: 7603 54004 TS FBANK 048870,001408: 7604 12654 TCF V/SC2 048871,001409: 048872,001410: 7605 00006 DV/SC EXTEND 048873,001411: 7606 50116 INDEX ADDRWD 048874,001412: 7607 30003 DCA 2 048875,001413: 7610 52160 DXCH MPAC +3 048876,001414: 7611 00006 EXTEND 048877,001415: 7612 50116 INDEX ADDRWD 048878,001416: 7613 30005 DCA 4 048879,001417: 7614 52162 DXCH MPAC +5 048880,001418: 048881,001419: 7615 44712 CS ONE # CHANGE MODE TO VECTOR. 048882,001420: 7616 54163 TS MODE 048883,001421: 048884,001422: 7617 00006 EXTEND 048885,001423: 7620 50116 INDEX ADDRWD 048886,001424: 7621 30001 DCA 0 048887,001425: 7622 52155 DXCH MPAC 048888,001426: 7623 17601 TCF V/SC1 048889,001427: 048890,001428: # Page 1133 048891,001429: # SIGN AND COMPLEMENT INSTRUCTIONS. 048892,001430: 048893,001431: 7624 50116 SIGN INDEX ADDRWD # CALL COMP INSTRUCTION IF WORD AT X IS 048894,001432: 7625 10000 CCS 0 # NEGATIVE NON-ZERO. 048895,001433: 7626 16030 TCF DANZIG 048896,001434: 7627 17631 TCF +2 048897,001435: 7630 17637 TCF COMP # DO THE COMPLEMENT. 048898,001436: 048899,001437: 7631 50116 INDEX ADDRWD 048900,001438: 7632 10001 CCSL CCS 1 048901,001439: 7633 16030 TCF DANZIG 048902,001440: 7634 16030 TCF DANZIG 048903,001441: 7635 17637 TCF COMP 048904,001442: 7636 16030 TCF DANZIG 048905,001443: 7637 00006 COMP EXTEND # COMPLEMENT DP MPAC IN EVERY CASE. 048906,001444: 7640 40155 DCS MPAC 048907,001445: 7641 52155 DXCH MPAC 048908,001446: 048909,001447: 7642 10163 CCS MODE # EITHER COMPLEMENT MPAC +3 OR THE REST OF 048910,001448: 7643 17654 TCF DCOMP # THE VECTOR ACCUMULATOR. 048911,001449: 7644 17654 TCF DCOMP 048912,001450: 048913,001451: 7645 00006 EXTEND # VECTOR COMPLEMENT. 048914,001452: 7646 40160 DCS MPAC +3 048915,001453: 7647 52160 DXCH MPAC +3 048916,001454: 7650 00006 EXTEND 048917,001455: 7651 40162 DCS MPAC +5 048918,001456: 7652 52162 DXCH MPAC +5 048919,001457: 7653 16030 TCF DANZIG 048920,001458: 048921,001459: 7654 40156 DCOMP CS MPAC +2 048922,001460: 7655 54156 TS MPAC +2 048923,001461: 7656 16030 TCF DANZIG 048924,001462: 048925,001463: # Page 1134 048926,001464: # THE FOLLOWING SHORT SHIFT CODES REQUIRE NO ADDRESS WORD: 048927,001465: # 1. SR1 TO SR4 SCALAR SHIFT RIGHT. 048928,001466: # 2. SR1R TO SR4R SCALAR SHIFT RIGHT AND ROUND. 048929,001467: # 3. SL1 TO SL4 SCALAR SHIFT LEFT. 048930,001468: # 4. SL1R TO SL4R SCALAR SHIFT LEFT AND ROUND. 048931,001469: # 5. VSR1 TO VSR8 VECTOR SHIFT RIGHT (ALWAYS ROUNDS). 048932,001470: # 6. VSL1 TO VSL8 VECTOR SHIFT LEFT (NEVER ROUNDS). 048933,001471: # THE FOLLOWING CODES REQUIRE AND ADDRESS WHICH MAY BE INDEXED:* 048934,001472: # 1. SR SCALAR SHIFT RIGHT. 048935,001473: # 2. SRR SCALAR SHIFT RIGHT AND ROUND. 048936,001474: # 3. SL SCALAR SHIFT LEFT. 048937,001475: # 4. SLR SCALAR SHIFT LEFT AND ROUND. 048938,001476: # 5. VSR VECTOR SHIFT RIGHT. 048939,001477: # 6. VSL VECTOR SHIFT LEFT. 048940,001478: # * IF THE ADDRESS IS INDEXED, AND THE INDEX MODIFICATION RESULTS IN A NEGATIVE SHIFT COUNT, A SHIFT OF THE 048941,001479: # ABSOLUTE VALUE OF THE COUNT IS DONE IN THE OPPOSITE DIRECTION. 048942,001480: 048943,001481: 00,2017 BANK 00 048944,001482: 048945,001483: 00,2017 COUNT 00/INTER 048946,001484: 048947,001485: 00,2017 36211 SHORTT CAF SIX # SCALAR SHORT SHIFTS COME HERE. THE SHIFT 048948,001486: 00,2020 70020 MASK CYR # COUNT-1 IS NOW IN BITS 2-3 OF CYR. THE 048949,001487: 00,2021 54021 TS SR # ROUNDING BIT IS IN BIT1 AT THIS POINT. 048950,001488: 048951,001489: 00,2022 10020 CCS CYR # SEE IF RIGHT OR LEFT SHIFT DESIRED. 048952,001490: 00,2023 12101 TCF TSSL # SHIFT LEFT. 048953,001491: 048954,001492: 00,2024 00024 SRDDV DEC 20 B-14 # MPTEMP SETTING FOR SR BEFORE DDV. 048955,001493: 048956,001494: 00,2025 50021 TSSR INDEX SR # GET SHIFTING BIT. 048957,001495: 00,2026 34675 CAF BIT14 048958,001496: 00,2027 54135 TS MPTEMP 048959,001497: 048960,001498: 00,2030 10020 CCS CYR # SEE IF A ROUND IS DESIRED. 048961,001499: 00,2031 02050 RIGHTR TC MPACSRND # YES -- SHIFT RIGHT AND ROUND. 048962,001500: 00,2032 16027 TCF NEWMODE # SET MODE TO DP (C(A) = 0). 048963,001501: 00,2033 30135 MPACSHR CA MPTEMP # DO A TRIPLE PRECISION SHIFT RIGHT. 048964,001502: 00,2034 00006 EXTEND 048965,001503: 00,2035 70156 MP MPAC +2 048966,001504: 00,2036 54156 +3 TS MPAC +2 # (EXIT FROM SQRT AND ABVAL). 048967,001505: 00,2037 30135 CA MPTEMP 048968,001506: 00,2040 00006 EXTEND 048969,001507: # Page 1135 048970,001508: 00,2041 70154 MP MPAC # SHIFT MAJOR PART INTO A,L AND PLACE IN 048971,001509: 00,2042 52155 DXCH MPAC # MPAC,+1. 048972,001510: 00,2043 30135 CA MPTEMP 048973,001511: 00,2044 00006 EXTEND 048974,001512: 00,2045 70001 MP L # ORIGINAL C(MPAC +1). 048975,001513: 00,2046 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW. 048976,001514: 00,2047 16030 TCF DANZIG 048977,001515: 048978,001516: # MPAC SHIFT RIGHT AND ROUND SUBROUTINES 048979,001517: 048980,001518: 00,2050 30156 MPACSRND CA MPAC +2 # WE HAVE TO DO ALL THREE MULTIPLIES SINCE 048981,001519: 00,2051 00006 EXTEND # MPAC +1 AND MPAC +2 MIGHT HAVE SIGN 048982,001520: 00,2052 70135 MP MPTEMP # DISAGREEMENT WITH A SHIFT RIGHT OF L. 048983,001521: 00,2053 56155 XCH MPAC +1 048984,001522: 00,2054 00006 EXTEND 048985,001523: 00,2055 70135 MP MPTEMP 048986,001524: 00,2056 56155 XCH MPAC +1 # TRIAL MINOR PART. 048987,001525: 00,2057 60001 AD L 048988,001526: 048989,001527: 00,2060 60000 VSHR2 DOUBLE # (FINISH VECTOR COMPONENT SHIFT RIGHT 048990,001528: 00,2061 54156 TS MPAC +2 # AND ROUND.) 048991,001529: 00,2062 12064 TCF +2 048992,001530: 00,2063 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW. 048993,001531: 048994,001532: 00,2064 34714 CAF ZERO 048995,001533: 00,2065 54156 TS MPAC +2 048996,001534: 00,2066 56154 XCH MPAC # SETTING TO ZERO SO FOLLOWING DAS WORKS. 048997,001535: 00,2067 00006 EXTEND 048998,001536: 00,2070 70135 MP MPTEMP 048999,001537: 00,2071 20155 DAS MPAC # AGAIN NO OVERFLOW. 049000,001538: 00,2072 00002 TC Q 049001,001539: 049002,001540: 00,2073 30135 VSHRRND CA MPTEMP # ENTRY TO SHIFT RIGHT AND ROUND MPAC WHEN 049003,001541: 00,2074 00006 EXTEND # MPAC CONTAINS A VECTOR COMPONENT. 049004,001542: 00,2075 70155 MP MPAC +1 049005,001543: 00,2076 54155 TS MPAC +1 049006,001544: 00,2077 56001 XCH L 049007,001545: 00,2100 12060 TCF VSHR2 # GO ADD ONE IF NECESSARY AND FINISH. 049008,001546: 049009,001547: # Page 1136 049010,001548: # ROUTINE FOR SHORT SCALAR SHIFT LEFT (AND MAYBE ROUND). 049011,001549: 049012,001550: 00,2101 30021 TSSL CA SR # GET SHIFT COUNT FOR SR. 049013,001551: 00,2102 54135 +1 TS MPTEMP 049014,001552: 049015,001553: 00,2103 00006 +2 EXTEND # ENTRY HERE FROM SL FOR SCALARS. 049016,001554: 00,2104 30156 DCA MPAC +1 # SHIFTING LEFT ONE PLACE AT A TIME IS 049017,001555: 00,2105 20156 DAS MPAC +1 # FASTER THAN DOING THE WHOLE SHIFT WITH 049018,001556: 00,2106 60154 AD MPAC # MULTIPLIES ASSUMING THAT FREQUENCY OF 049019,001557: 00,2107 60154 AD MPAC # SHIFT COUNTS GOES DOWN RAPIDLY AS A 049020,001558: 00,2110 54154 TS MPAC # FUNCTION OF THEIR MAGNITUDE. 049021,001559: 00,2111 12113 TCF +2 049022,001560: 00,2112 54121 TS OVFIND # OVERFLOW. (LEAVES OVERFLOW-CORRECTED 049023,001561: # RESULT ANYWAY). 049024,001562: 00,2113 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNT. 049025,001563: 00,2114 12102 TCF TSSL +1 049026,001564: 049027,001565: 00,2115 10020 CCS CYR # SEE IF ROUND WANTED. 049028,001566: 00,2116 07105 ROUND TC ROUNDSUB # YES -- ROUND AND EXIT. 049029,001567: 00,2117 16030 TCF DANZIG # SL LEAVES A ZERO IN CYR FOR NO ROUND. 049030,001568: 00,2120 16030 TCF DANZIG # NO -- EXIT IMMEDIATELY 049031,001569: 049032,001570: # Page 1137 049033,001571: # VECTOR SHIFTING ROUTINES. 049034,001572: 049035,001573: 00,2121 34716 SHORTV CAF LOW3 # SAVE 3 BIT SHIFT COUNT -- 1 WITHOUT 049036,001574: 00,2122 70020 MASK CYR # EDITING CYR. 049037,001575: 00,2123 54135 TS MPTEMP 049038,001576: 00,2124 10020 CCS CYR # SEE IF LEFT OR RIGHT SHIFT. 049039,001577: 00,2125 12145 TCF VSSL # VECTOR SHIFT LEFT. 049040,001578: 00,2126 00176 OCT176 OCT 176 # USED IN PROCESSED SHIFTS WITH - COUNT. 049041,001579: 049042,001580: 00,2127 50135 VSSR INDEX MPTEMP # (ENTRY FROM SR). PICK UP SHIFTING BIT. 049043,001581: 00,2130 34675 CAF BIT14 # MPTEMP CONTAINS THE SHIFT COUNT - 1. 049044,001582: 00,2131 54135 TS MPTEMP 049045,001583: 00,2132 02073 TC VSHRRND # SHIFT X COMPONENT. 049046,001584: 049047,001585: 00,2133 52155 DXCH MPAC # SWAP X AND Y COMPONENTS. 049048,001586: 00,2134 52160 DXCH MPAC +3 049049,001587: 00,2135 52155 DXCH MPAC 049050,001588: 00,2136 02073 TC VSHRRND # SHIFT Y COMPONENT. 049051,001589: 049052,001590: 00,2137 52155 DXCH MPAC # SWAP Y AND Z COMPONENTS. 049053,001591: 00,2140 52162 DXCH MPAC +5 049054,001592: 00,2141 52155 DXCH MPAC 049055,001593: 00,2142 02073 TC VSHRRND # SHIFT Z COMPONENT. 049056,001594: 049057,001595: 00,2143 17367 TCF VROTATEX # RESTORE COMPONENTS TO PROPER PLACES. 049058,001596: 049059,001597: # Page 1138 049060,001598: # VECTOR SHIFT LEFT -- DONE ONE PLACE AT A TIME. 049061,001599: 049062,001600: 00,2144 54135 -1 TS MPTEMP # SHIFTING LOOP. 049063,001601: 049064,001602: 00,2145 00006 VSSL EXTEND 049065,001603: 00,2146 30155 DCA MPAC 049066,001604: 00,2147 20155 DAS MPAC 049067,001605: 00,2150 00006 EXTEND 049068,001606: 00,2151 12153 BZF +2 049069,001607: 00,2152 06766 TC OVERFLOW 049070,001608: 049071,001609: 00,2153 00006 EXTEND 049072,001610: 00,2154 30160 DCA MPAC +3 049073,001611: 00,2155 20160 DAS MPAC +3 049074,001612: 00,2156 00006 EXTEND 049075,001613: 00,2157 12161 BZF +2 049076,001614: 00,2160 06763 TC OVERFLWY 049077,001615: 049078,001616: 00,2161 00006 EXTEND 049079,001617: 00,2162 30162 DCA MPAC +5 049080,001618: 00,2163 20162 DAS MPAC +5 049081,001619: 00,2164 00006 EXTEND 049082,001620: 00,2165 12167 BZF +2 049083,001621: 00,2166 06760 TC OVERFLWZ 049084,001622: 049085,001623: 00,2167 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNTER. 049086,001624: 00,2170 12144 TCF VSSL -1 049087,001625: 00,2171 16030 TCF DANZIG # EXIT. 049088,001626: 049089,001627: # Page 1139 049090,001628: # TSLC -- TRIPLE SHIFT LEFT AND COUNT. SHIFTS MPAC LEFT UNTIL GREATER THAN .5 IN MAGNITUDE, LEAVING 049091,001629: # THE COMPLEMENT OF THE NUMBER OF SHIFTS REQUIRED IN X. 049092,001630: 049093,001631: 00,2172 54135 TSLC2 TS MPTEMP # START BY ZEROING SHIFT COUNT (IN A NOW). 049094,001632: 00,2173 06672 TC BRANCH # EXIT WITH NO SHIFTING IF ARGUMENT ZERO. 049095,001633: 00,2174 12176 TCF +2 049096,001634: 00,2175 12212 TCF ENDTSLC # STORES ZERO SHIFT COUNT IN THIS CASE. 049097,001635: 049098,001636: 00,2176 07226 TC TPAGREE # MAY CAUSE UPSHIFT OF ONE EXTRA PLACE. 049099,001637: 049100,001638: 00,2177 30154 CA MPAC # BEGIN NORMALIZATION LOOP. 049101,001639: 00,2200 12207 TCF TSLCTEST 049102,001640: 049103,001641: 00,2201 24135 TSLCLOOP INCR MPTEMP # INCREMENT SHIFT COUNTER. 049104,001642: 00,2202 00006 EXTEND 049105,001643: 00,2203 30156 DCA MPAC +1 049106,001644: 00,2204 20156 DAS MPAC +1 049107,001645: 00,2205 60154 AD MPAC 049108,001646: 00,2206 26154 ADS MPAC 049109,001647: 00,2207 60000 TSLCTEST DOUBLE # SEE IF (ANOTHER) SHIFT IS REQUIRED 049110,001648: 00,2210 54000 OVSK 049111,001649: 00,2211 12201 TCF TSLCLOOP # YES -- INCREMENT COUNT AND SHIFT AGAIN. 049112,001650: 049113,001651: 00,2212 40135 ENDTSLC CS MPTEMP 049114,001652: 00,2213 16572 TCF STORE1 # STORE SHIFT COUNT AND RETURN TO DANZIG. 049115,001653: 049116,001654: # Page 1140 049117,001655: # THE FOLLOWING ROUTINE PROCESSES THE GENERAL SHIFT INSTRUCTIONS SR, SRR, SL, AND SLR. 049118,001656: # THE GIVEN ADDRESS IS DECODED AS FOLLOWS: 049119,001657: # BITS 1-7 SHIFT COUNT (SUBADDRESS) LESS THAN 125 DECIMAL. 049120,001658: # BIT 8 PSEUDO SIGN BIT (DETECTS CHANGE IN SIGN IN INDEXED SHIFTS). 049121,001659: # BIT 9 0 FOR LEFT SHIFT, AND 1 FOR RIGHT SHIFT. 049122,001660: # BIT 10 1 FOR TERMINAL ROUND ON SCALAR SHIFTS, 0 OTHERWISE 049123,001661: # BITS 11-13 0. 049124,001662: # BIT 14 1. 049125,001663: # BIT 15 0. 049126,001664: # THE ABOVE ENCODING IS DONE BY THE YUL SYSTEM. 049127,001665: 049128,001666: 00,2214 70116 GENSHIFT MASK ADDRWD # GET SHIFT COUNT, TESTING FOR ZERO. 049129,001667: 00,2215 10000 CCS A # (ARRIVES WITH C(A) = LOW7). 049130,001668: 00,2216 12224 TCF GENSHFT2 # IF NON-ZERO, PROCEED WITH DECREMENTED CT 049131,001669: 049132,001670: 00,2217 34701 CAF BIT10 # ZERO SHIFT COUNT. NO SHIFTS NEEDED BUT 049133,001671: 00,2220 70116 MASK ADDRWD # WE MIGHT HAVE TO ROUND MPAC ON SLR AND 049134,001672: 00,2221 10000 CCS A # SRR (SCALAR ONLY). 049135,001673: 00,2222 07105 TC ROUNDSUB 049136,001674: 00,2223 16030 TCF DANZIG 049137,001675: 049138,001676: 00,2224 54135 GENSHFT2 TS MPTEMP # DECREMENTED SHIFT COUNT TO MPTEMP. 049139,001677: 00,2225 34703 CAF BIT8 # TEST MEANING OF LOW SEVEN BIT COUNT IN 049140,001678: 00,2226 00006 EXTEND # MPTEMP NOW. 049141,001679: 00,2227 70116 MP ADDRWD 049142,001680: 00,2230 76214 MASK LOW2 # JUMPS ON SHIFT DIRECTION (BIT8) AND 049143,001681: 00,2231 50000 INDEX A 049144,001682: 00,2232 12233 TCF +1 # ORIGINAL SHIFT DIRECTION (BIT 9) 049145,001683: 00,2233 12332 TCF RIGHT- # NEGATIVE SHIFT COUNT FOR SL OR SLR. 049146,001684: 00,2234 12342 TCF LEFT # SL OR SLR. 049147,001685: 00,2235 12336 TCF LEFT- # NEGATIVE SHIFT COUNT WITH SR OR SRR. 049148,001686: 049149,001687: # Page 1141 049150,001688: # GENERAL SHIFT RIGHT 049151,001689: 049152,001690: 00,2236 10163 RIGHT CCS MODE # SET IF VECTOR OR SCALAR. 049153,001691: 00,2237 12277 TCF GENSCR 049154,001692: 00,2240 12277 TCF GENSCR 049155,001693: 049156,001694: 00,2241 30135 CA MPTEMP # SEE IF SHIFT COUNT LESS THAN 14D. 049157,001695: 00,2242 63730 VRIGHT2 AD NEG12 049158,001696: 00,2243 00006 EXTEND 049159,001697: 00,2244 62127 BZMF VSSR # IF SO, BRANCH AND SHIFT IMMEDIATELY. 049160,001698: 049161,001699: 00,2245 67716 AD NEGONE # IF NOT, REDUCE MPTEMP BY A TOTAL OF 14. 049162,001700: 00,2246 54135 TS MPTEMP # AND DO A SHIFT RIGHT AND ROUND BY 14. 049163,001701: 00,2247 34714 CAF ZERO # THE ROUND AT THIS STAGE MAY INTRODUCE A 049164,001702: 00,2250 54001 TS L # ONE BIT ERROR IN A SHIFT RIGHT 15D. 049165,001703: 00,2251 56154 XCH MPAC 049166,001704: 00,2252 56155 XCH MPAC +1 049167,001705: 00,2253 02272 TC SETROUND # X COMPONENT NOW SHIFTED, SO MAKE UP THE 049168,001706: 00,2254 20155 DAS MPAC # ROUNDING QUANTITY (0 IN A AND 0 OR +-1 049169,001707: # IN L). 049170,001708: 00,2255 56157 XCH MPAC +3 # REPEAT THE ABOVE PROCESS FOR Y AND Z/ 049171,001709: 00,2256 56160 XCH MPAC +4 049172,001710: 00,2257 02272 TC SETROUND 049173,001711: 00,2260 20160 DAS MPAC +3 # NO OVERFLOW ON THESE ADDS. 049174,001712: 049175,001713: 00,2261 56161 XCH MPAC +5 049176,001714: 00,2262 56162 XCH MPAC +6 049177,001715: 00,2263 02272 TC SETROUND 049178,001716: 00,2264 20162 DAS MPAC +5 049179,001717: 049180,001718: 00,2265 10135 CCS MPTEMP # SEE IF DONE, DOING FINAL DECREMENT. 049181,001719: 00,2266 54135 TS MPTEMP 049182,001720: 00,2267 12242 TCF VRIGHT2 049183,001721: 00,2270 04604 BIASLO DEC .2974 B-1 # SQRT CONSTANT 049184,001722: 049185,001723: 00,2271 16030 TCF DANZIG 049186,001724: 049187,001725: 00,2272 60000 SETROUND DOUBLE # MAKES UP ROUNDING QUANTITY FROM ARRIVING 049188,001726: 00,2273 54156 TS MPAC +2 # C(A). L IS ZERO INITIALLY. 049189,001727: 00,2274 34714 CAF ZERO 049190,001728: 00,2275 56001 XCH L 049191,001729: 00,2276 00002 TC Q # RETURN AND DO THE DAS, RESETTING L TO 0. 049192,001730: 049193,001731: # Page 1142 049194,001732: # PROCESS SR AND SRR FOR SCALARS. 049195,001733: 049196,001734: 00,2277 30135 GENSCR CA MPTEMP # SEE IF THE ORIGINAL SHIFT COUNT WAS LESS 049197,001735: 00,2300 63730 +1 AD NEG12 # THAN 14D. 049198,001736: 00,2301 00006 EXTEND 049199,001737: 00,2302 62322 BZMF DOSSHFT # DO THE SHIFT IMMEDIATELY IF SO. 049200,001738: 049201,001739: 00,2303 67716 +4 AD NEGONE # IF NOT, DECREMENT SHIFT COUNT BY 14D AND 049202,001740: 00,2304 54135 TS MPTEMP # SHIFT MPAC RIGHT 14 PLACES. 049203,001741: 00,2305 34714 CAF ZERO 049204,001742: 00,2306 56154 XCH MPAC 049205,001743: 00,2307 56155 XCH MPAC +1 049206,001744: 00,2310 54156 TS MPAC +2 049207,001745: 00,2311 10135 CCS MPTEMP # SEE IF FINISHED, DO FINAL DECREMENT. 049208,001746: 00,2312 54135 TS MPTEMP 049209,001747: 00,2313 02300 TC GENSCR +1 049210,001748: 00,2314 22650 SLOPEHI DEC .5884 # SQRT CONSTANT. 049211,001749: 00,2315 34701 CAF BIT10 # FINISHED WITH SHIFT. SEE IF ROUND 049212,001750: 00,2316 70116 MASK ADDRWD # WANTED. 049213,001751: 00,2317 10000 CCS A 049214,001752: 00,2320 07105 TC ROUNDSUB 049215,001753: 00,2321 16030 TCF DANZIG # DO SO AND/OR EXIT. 049216,001754: 049217,001755: 00,2322 50135 DOSSHFT INDEX MPTEMP # PICK UP SHIFTING BIT. 049218,001756: 00,2323 34675 CAF BIT14 049219,001757: 00,2324 54135 TS MPTEMP 049220,001758: 00,2325 34701 CAF BIT10 # SEE IF TERMINAL ROUND DESIRED. 049221,001759: 00,2326 70116 MASK ADDRWD 049222,001760: 00,2327 10000 CCS A 049223,001761: 00,2330 12031 TCF RIGHTR # YES. 049224,001762: 00,2331 12033 TCF MPACSHR # JUST SHIFT RIGHT. 049225,001763: 049226,001764: # Page 1143 049227,001765: # PROCESS THE RIGHT- (SL(R) WITH A NEGATIVE COUNT), LEFT-, AND LEFT OPTIONS. 049228,001766: 049229,001767: 00,2332 40135 RIGHT- CS MPTEMP # GET ABSOLUTE VALUE - 1 OF SHIFT COUNT 049230,001768: 00,2333 62126 AD OCT176 # UNDERSTANDING THAT BIT8 (PSEUDO-SIGN) 049231,001769: 00,2334 54135 TS MPTEMP # WAS 1 INITIALLY. 049232,001770: 00,2335 12236 TCF RIGHT # DO NORMAL SHIFT RIGHT. 049233,001771: 049234,001772: 00,2336 42126 LEFT- CS OCT176 # SAME PROLOGUE TO LEFT FOR INDEXED RIGHT 049235,001773: 00,2337 60135 AD MPTEMP # SHIFT WHOSE NET SHIFT COUNT IS NEGATIVE 049236,001774: 00,2340 40000 COM 049237,001775: 00,2341 54135 TS MPTEMP 049238,001776: 049239,001777: 00,2342 10163 LEFT CCS MODE # SINCE LEFT SHIFTING IS DONE ONE PLACE AT 049240,001778: 00,2343 12346 TCF GENSCL # A TIME, NO COMPARISON WITH 14 NEED BE 049241,001779: 00,2344 12346 TCF GENSCL # DONE. FOR SCALARS, SEE IF TERMINAL ROUND 049242,001780: 00,2345 12145 TCF VSSL # DESIRED. FOR VECTORS, SHIFT IMMEDIATELY. 049243,001781: 049244,001782: 00,2346 40116 GENSCL CS ADDRWD # PUT ROUNDING BIT (BIT 10 OF ADDRWD) INTO 049245,001783: 00,2347 00006 EXTEND # BIT 15 OF CYR WHERE THE ROUNDING BIT OF 049246,001784: 00,2350 74705 MP BIT6 # A SHORT SHIFT LEFT WOULD BE 049247,001785: 00,2351 54020 TS CYR 049248,001786: 00,2352 12103 TCF TSSL +2 # DO THE SHIFT. 049249,001787: 049250,001788: # Page 1144 049251,001789: # SCALAR DIVISION INSTRUCTIONS, DDV AND BDDV, ARE EXECUTED HERE. AT THIS POINT, THE DIVIDEND IS IN MPAC 049252,001790: # AND THE DIVISOR IS IN BUF. 049253,001791: 049254,001792: 00,2353 44712 DDV/BDDV CS ONE # INITIALIZATION 049255,001793: 00,2354 54136 TS DVSIGN # +-1 FOR POSITIVE QUOTIENT -- -0 FOR NEG. 049256,001794: 00,2355 54137 TS DVNORMCT # DIVIDENT NORMALIZATION COUNT. 049257,001795: 00,2356 54140 TS MAXDVSW # NEAR-ONE DIVIDE FLAG. 049258,001796: 049259,001797: 00,2357 10130 CCS BUF # FORCE BUF POSITIVE WITH THE MAJOR PART 049260,001798: 00,2360 12516 TCF BUFPOS # NON-ZERO. 049261,001799: 00,2361 12363 TCF +2 049262,001800: 00,2362 12531 TCF BUFNEG 049263,001801: 049264,001802: 00,2363 54156 BUFZERO TS MPAC +2 # ZERO THIS. 049265,001803: 00,2364 07226 TC TPAGREE # FORCE SIGN AGREEMENT BEFORE OVERFLOW 049266,001804: 049267,001805: 00,2365 10154 CCS MPAC # TEST TO SEE IF MPAC NON-ZERO. (TOO BIG) 049268,001806: 00,2366 12414 TCF OVF+ # MAJOR PART OF DIVIDEND IS POSITIVE NON-0 049269,001807: 00,2367 12371 TCF +2 049270,001808: 00,2370 12413 TCF OVF+ -1 # MAJOR PART OF DIVIDEND IS NEG. NON-ZERO 049271,001809: 049272,001810: 00,2371 56131 XCH BUF +1 # SHIFT DIVIDENT AND DIVISOR LEFT 14 049273,001811: 00,2372 56130 XCH BUF 049274,001812: 00,2373 56155 XCH MPAC +1 049275,001813: 00,2374 56154 XCH MPAC 049276,001814: 00,2375 10130 CCS BUF # TRY AGAIN ON FORMER MINOR PART. 049277,001815: 00,2376 12422 TCF BUF+ 049278,001816: 00,2377 12401 TCF +2 # OVERFLOW ON ZERO DIVISOR. 049279,001817: 00,2400 12416 TCF BUF- 049280,001818: 049281,001819: 00,2401 40154 CS MPAC # SIGN OF MPAC DETERMINES SIGN OF RESULT. 049282,001820: 00,2402 00006 SGNDVOVF EXTEND 049283,001821: 00,2403 62405 BZMF +2 049284,001822: 00,2404 24136 INCR DVSIGN # NEGMAX IN MPAC PERHAPS. 049285,001823: 00,2405 34672 DVOVF CAF POSMAX # ON DIVISION OVERFLOW OF ANY SORT, SET 049286,001824: 00,2406 54154 TS MPAC # SET DP MPAC TO +-POSMAX. 049287,001825: 00,2407 02630 TC FINALDV +3 049288,001826: 00,2410 34712 CAF ONE # SET OVEFLOW INDICATOR AND EXIT. 049289,001827: 00,2411 54121 TS OVFIND 049290,001828: 00,2412 06030 TC DANZIG 049291,001829: 049292,001830: 00,2413 24136 -1 INCR DVSIGN 049293,001831: 00,2414 40131 OVF+ CS BUF +1 # LOAD LOWER ORDER PART OF DIVISOR. 049294,001832: 00,2415 12402 TCF SGNDVOVF # GET SIGN OF RESULT. 049295,001833: 049296,001834: 00,2416 00006 BUF- EXTEND # IF BUF IS NEGATIVE, COMPLEMENT IT AND 049297,001835: 00,2417 40131 DCS BUF # MAINTAIN DVSIGN FOR FINAL QUOTIENT SIGN. 049298,001836: 00,2420 52131 DXCH BUF 049299,001837: 00,2421 24136 INCR DVSIGN # NOW -0. 049300,001838: 049301,001839: # Page 1145 049302,001840: 00,2422 10154 BUF+ CCS MPAC # FORCE MPAC POSITIVE, CHECKING FOR ZERO 049303,001841: 00,2423 12437 TCF MPAC+ # DIVIDEND IN THE PROCESS. 049304,001842: 00,2424 12426 TCF +2 049305,001843: 00,2425 12433 TCF MPAC- 049306,001844: 00,2426 10155 CCS MPAC +1 049307,001845: 00,2427 12437 TCF MPAC+ 049308,001846: 00,2430 16030 TCF DANZIG # EXIT IMMEDIATELY ON ZERO DIVIDEND. 049309,001847: 00,2431 12433 TCF MPAC- 049310,001848: 00,2432 16030 TCF DANZIG 049311,001849: 049312,001850: 00,2433 00006 MPAC- EXTEND # FORCE MPAC POSITIVE AS BUF IN BUF-. 049313,001851: 00,2434 40155 DCS MPAC 049314,001852: 00,2435 52155 DXCH MPAC 049315,001853: 00,2436 24136 INCR DVSIGN # NOW +1 OR -0. 049316,001854: 049317,001855: # Page 1146 049318,001856: 00,2437 40154 MPAC+ CS MPAC # CHECK FOR DIVISION OVERFLOW. IF THE 049319,001857: 00,2440 67716 AD NEGONE # MAJOR PART OF THE DIVIDEND IS LESS THAN 049320,001858: 00,2441 60130 AD BUF # THE MAJOR PART OF THE DIVISOR BY AT 049321,001859: 00,2442 10000 CCS A # LEAST TWO, WE CAN PROCEED IMMEDIATELY 049322,001860: 00,2443 12505 TCF DVNORM # WITHOUT NORMALIZATION PRODUCING A DVMAX. 049323,001861: 00,2444 60001 -1/2+2 OCT 60001 # USED IN SQRTSUB. 049324,001862: 049325,001863: 00,2445 12446 TCF +1 # IF THE ABOVE DOES NOT HOLD, FORCE SIGN 049326,001864: 00,2446 34675 CAF HALF # AGREEMENT IN NUMERATOR AND DENOMINATOR 049327,001865: 00,2447 60000 DOUBLE # TO FACILITATE OVERFLOW AND NEAR-ONE 049328,001866: 00,2450 60155 AD MPAC +1 # CHECKING. 049329,001867: 00,2451 54155 TS MPAC +1 049330,001868: 00,2452 34714 CAF ZERO 049331,001869: 00,2453 64672 AD POSMAX 049332,001870: 00,2454 26154 ADS MPAC 049333,001871: 049334,001872: 00,2455 34675 CAF HALF # SAME FOR BUF. 049335,001873: 00,2456 60000 DOUBLE 049336,001874: 00,2457 60131 AD BUF +1 049337,001875: 00,2460 54131 TS BUF +1 049338,001876: 00,2461 34714 CAF ZERO 049339,001877: 00,2462 64672 AD POSMAX 049340,001878: 00,2463 26130 ADS BUF 049341,001879: 049342,001880: 00,2464 40154 CS MPAC # CHECK MAGNITUDE OF SIGN-CORRECTED 049343,001881: 00,2465 60130 AD BUF # OPERANDS. 049344,001882: 00,2466 10000 CCS A 049345,001883: 00,2467 12505 TCF DVNORM # DIVIDE OK -- WILL NOT BECOME MAXOV CASE. 049346,001884: 00,2470 00133 LBUF2 ADRES BUF2 049347,001885: 00,2471 12405 TCF DVOVF # DIVISOR NOT LESS THAN DIVIDEND -- OVF. 049348,001886: 049349,001887: 00,2472 54140 TS MAXDVSW # IF THE MAJOR PARTS OF THE DIVIDEND AND 049350,001888: 00,2473 40155 CS MPAC +1 # DIVISOR ARE EQUAL, A SPECIAL APPROXIMA- 049351,001889: 00,2474 60131 AD BUF +1 # TION IS USED (PROVIDED THE DIVISION IS 049352,001890: 00,2475 00006 EXTEND # POSSIBLE, OF COURSE). 049353,001891: 00,2476 62405 BZMF DVOVF 049354,001892: 00,2477 12505 TCF DVNORM # IF NO OVERFLOW. 049355,001893: 049356,001894: # Page 1147 049357,001895: 00,2500 00006 BUFNORM EXTEND # ADD -1 TO AUGMENT SHIFT COUNT AND SHIFT 049358,001896: 00,2501 24137 AUG DVNORMCT # LEFT ONE PLACE. 049359,001897: 00,2502 00006 EXTEND 049360,001898: 00,2503 30131 DCA BUF 049361,001899: 00,2504 20131 DAS BUF 049362,001900: 049363,001901: 00,2505 30130 DVNORM CA BUF # SEE IF DIVISOR NORMALIZED YET. 049364,001902: 00,2506 60000 DOUBLE 049365,001903: 00,2507 54000 OVSK 049366,001904: 00,2510 12500 TCF BUFNORM # NO -- SHIFT LEFT ONE AND TRY AGAIN. 049367,001905: 049368,001906: 00,2511 52155 DXCH MPAC # CALL DIVIDEND NORMALIZATION SEQUENCE 049369,001907: 00,2512 50137 INDEX DVNORMCT # PRIOR TO DOING THE DIVIDE. 049370,001908: 00,2513 02565 TC MAXTEST 049371,001909: 049372,001910: 00,2514 54156 TS MPAC +2 # RETURNS WITH DIVISION DONE AND C(A) = 0. 049373,001911: 00,2515 16030 TCF DANZIG 049374,001912: 049375,001913: 00,2516 10000 BUFPOS CCS A 049376,001914: 00,2517 12422 TCF BUF+ # TO BUF+ IF BUF IS GREATER THAN +1. 049377,001915: 049378,001916: 00,2520 40131 CS BUF +1 # IF BUF IS +1, FORCING SIGN AGREEMENT 049379,001917: 00,2521 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO. 049380,001918: 00,2522 62422 BZMF BUF+ # BRANCH IF SIGNS AGREE. 049381,001919: 049382,001920: 00,2523 34675 CA HALF # SIGNS DISAGREE. FORCE AGREEMENT. 049383,001921: 00,2524 60000 +6 DOUBLE 049384,001922: 00,2525 26131 ADS BUF +1 049385,001923: 00,2526 34714 CA ZERO 049386,001924: 00,2527 54130 TS BUF 049387,001925: 00,2530 12363 TCF BUFZERO 049388,001926: 049389,001927: 00,2531 10000 BUFNEG CCS A 049390,001928: 00,2532 12416 TCF BUF- # TO BUF- IF BUF IS LESS THAN -1. 049391,001929: 049392,001930: 00,2533 30131 CA BUF +1 # IF BUF IS -1, FORCING SIGN AGREEMENT 049393,001931: 00,2534 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO. 049394,001932: 00,2535 62416 BZMF BUF- # BRANCH IF SIGNS AGREE. 049395,001933: 049396,001934: 00,2536 44675 CS HALF # SIGNS DISAGREE. FORCE AGREEMENT. 049397,001935: 00,2537 12524 TCF BUFPOS +6 049398,001936: 049399,001937: # Page 1148 049400,001938: # THE FOLLOWING ARE PROLOGUES TO SHIFT THE DIVIDEND ARRIVING IN A AND L BEFORE THE DIVIDE. 049401,001939: 049402,001940: 00,2540 22021 -21D LXCH SR # SPECIAL PROLOGUE FOR UNIT WHEN THE 049403,001941: 00,2541 00006 EXTEND # LENGTH OF THE ARGUMENT WAS NOT LESS THAN 049404,001942: 00,2542 74675 MP HALF # .5. IN THIS CASE, EACH COMPONENT MUST BE 049405,001943: 00,2543 56001 XCH L # SHIFTED RIGHT ONE TO PRODUCE A HALF-UNIT 049406,001944: 00,2544 60021 AD SR # VECTOR. 049407,001945: 00,2545 56001 XCH L 049408,001946: 00,2546 12571 TCF GENDDV +1 # WITH DP DIVIDEND IN A,L. 049409,001947: 049410,001948: 00,2547 20001 DDOUBL # PROLOGUE WHICH NORMALIZES THE DIVIDEND 049411,001949: 00,2550 20001 DDOUBL # WHEN IT IS KNOWN THAT NO DIVISION 049412,001950: 00,2551 20001 DDOUBL # OVEFLOW WILL OCCUR. 049413,001951: 00,2552 20001 DDOUBL 049414,001952: 00,2553 20001 DDOUBL 049415,001953: 00,2554 20001 DDOUBL 049416,001954: 00,2555 20001 DDOUBL 049417,001955: 00,2556 20001 DDOUBL 049418,001956: 00,2557 20001 DDOUBL 049419,001957: 00,2560 20001 DDOUBL 049420,001958: 00,2561 20001 DDOUBL 049421,001959: 00,2562 20001 DDOUBL 049422,001960: 00,2563 20001 DDOUBL 049423,001961: 00,2564 52155 DXCH MPAC 049424,001962: 049425,001963: 00,2565 10140 MAXTEST CCS MAXDVSW # 0 IF MAJORS MIGHT BE =, -1 OTHERWISE. 049426,001964: 00,2566 06552 BIASHI DEC .4192 B-1 # SQRT CONSTANTS. 049427,001965: 049428,001966: 00,2567 12642 TCF MAXDV # CHECK TO SEE IF THAY ARE NOW EQUAL. 049429,001967: 049430,001968: # Page 1149 049431,001969: # THE FOLLOWING IS A GENERAL PURPOSE DOUBLE PRECISION DIVISION ROUTINE. IT DIVIDES MPAC BY BUF AND LEAVES 049432,001970: # THE RESULT IN MPAC. THE FOLLOWING CONDITIONS MUST BE SATISFIED: 049433,001971: 049434,001972: # 1. THE DIVISOR (BUF) MUST BE POSITIVE AND NOT LESS THAN .5. 049435,001973: 049436,001974: # 2. THE DIVIDEND (MPAC) MUST BE POSITIVE WITH THE MAJOR PART OF MPAC STRICTLY LESS THAN THAT OF BUF 049437,001975: # (A SPECIAL APPROXIMATION, MAXDV, IS USED WHEN THE MAJOR PARTS ARE EQUAL). 049438,001976: 049439,001977: # UNDERSTANDING THAT A/B = Q + S(R/B) WHERE S = 2(-14) AND Q AND R ARE QUOTIENT AND REMAINDER, RESPEC- 049440,001978: # TIVELY, THE FOLLOWING APPROXIMATION IS OBTAINED BY MULTIPLYING ABOVE AND BELOW BY C - SD AND NEGLECTING TERMS OF 049441,001979: # ORDER S-SQUARED (POSSIBLY INTRODUCING ERROR INTO THE LOW TWO BITS OF THE RESULT). SIGN AGREEMENT IS UNNECESSARY. 049442,001980: 049443,001981: # A + SB . (R - CD) A + SB 049444,001982: # ------ = Q + S(------) WHERE Q AND R ARE QUOTIENT AND REMAINDER OF ------ RESPECTIVELY. 049445,001983: # C + SD ( C } C 049446,001984: 049447,001985: 00,2570 52155 GENDDV DXCH MPAC # WE NEED A AND B ONLY FOR FIRST DV. 049448,001986: 00,2571 00006 +1 EXTEND # (SPECIAL UNIT PROLOGUE ENTERS HERE). 049449,001987: 00,2572 10130 DV BUF # A NOW CONTAINS Q AND L, R. 049450,001988: 00,2573 52155 DXCH MPAC 049451,001989: 049452,001990: 00,2574 40154 CS MPAC # FORM DIVIDEND FOR MINOR PART OF RESULT. 049453,001991: 00,2575 00006 EXTEND 049454,001992: 00,2576 70131 MP BUF +1 049455,001993: 00,2577 60155 AD MPAC +1 # OVERFLOW AT THIS POINT IS POSITIVE SINCE 049456,001994: 00,2600 54000 OVSK # R IS POSITIVE IN EVERY CASE. 049457,001995: 00,2601 12606 TCF +5 049458,001996: 049459,001997: 00,2602 00006 EXTEND # OVERFLOW CAN BE REMOVED BY SUBTRACTING C 049460,001998: 00,2603 60130 SU BUF # (BUF) ONCE SINCE R IS ALWAYS LESS THAN C 049461,001999: 00,2604 24154 INCR MPAC # IN THIS CASE. INCR COMPENSATES SUBTRACT. 049462,002000: 00,2605 12610 TCF +DOWN # (SINCE C(A) IS STILL POSITIVE). 049463,002001: 049464,002002: 00,2606 00006 +5 EXTEND # C(A) CAN BE MADE LESS THAN C IN MAGNI- 049465,002003: 00,2607 62620 BZMF -UP # TUDE BY DIMINISHING IT BY C (SINCE C IS 049466,002004: # NOT LESS THAN .5) UNLESS C(A) = 0. 049467,002005: 049468,002006: # Page 1150 049469,002007: 00,2610 00006 +DOWN EXTEND 049470,002008: 00,2611 60130 SU BUF # IF POSITIVE, REDUCE ONLY IF NECESSARY 049471,002009: 00,2612 00006 EXTEND # SINCE THE COMPENSATING INCR MIGHT CAUSE 049472,002010: 00,2613 12616 BZF +3 # OVERFLOW. 049473,002011: 00,2614 00006 EXTEND # DON'T SUBTRACT UNLESS RESULT IS POSITIVE 049474,002012: 00,2615 62624 BZMF ENDMAXDV # OR ZERO. 049475,002013: 049476,002014: 00,2616 24154 +3 INCR MPAC # KEEP SUBTRACT HERE AND COMPENSATE. 049477,002015: 00,2617 12625 TCF FINALDV 049478,002016: 049479,002017: 00,2620 00006 -UP EXTEND # IF ZERO, SET MINOR PART OF RESULT TO 049480,002018: 00,2621 12630 BZF FINALDV +3 # ZERO. 049481,002019: 049482,002020: 00,2622 00006 EXTEND # IF NEGATIVE, ADD C TO A, SUBTRACTING ONE 049483,002021: 00,2623 26154 DIM MPAC # TO COMPENSATE. DIM IS OK HERE SINCE THE 049484,002022: 00,2624 60130 ENDMAXDV AD BUF # MAJOR PART NEVER GOES NEGATIVE. 049485,002023: 049486,002024: # Page 1151 049487,002025: 00,2625 22007 FINALDV ZL # DO DV TO OBTAIN MINOR PART OF RESULT. 049488,002026: 00,2626 00006 EXTEND 049489,002027: 00,2627 10130 DV BUF 049490,002028: 00,2630 54155 +3 TS MPAC +1 049491,002029: 049492,002030: 00,2631 10136 CCS DVSIGN # LEAVE RESULT POSITIVE UNLESS C(DVSIGN). 049493,002031: 00,2632 00002 TC Q 049494,002032: 00,2633 00002 TC Q 049495,002033: 00,2634 00002 TC Q 049496,002034: 049497,002035: 00,2635 00006 EXTEND 049498,002036: 00,2636 40155 DCS MPAC 049499,002037: 00,2637 52155 DXCH MPAC 049500,002038: 00,2640 34714 CAF ZERO # SO WE ALWAYS RETURN WITH C(A) = 0. 049501,002039: 00,2641 00002 TC Q 049502,002040: 049503,002041: # Page 1152 049504,002042: # IF THE MAJOR PARTS OF THE DIVISOR AND DIVIDEND ARE EQUAL, BUT THE MINOR PARTS ARE SUCH THAT THE 049505,002043: # DIVIDEND IS STRICTLY LESS THAN THE DIVISOR IN MAGNITUDE, THE FOLLOWING APPROXIMATION IS USED. THE ASSUMPTIONS 049506,002044: # ARE THE SAME AS THE GENERAL ROUTINE WITH THE ADDITION THAT SIGN AGREEMENT IS NECESSARY (B, C, & D POSITIVE). 049507,002045: 049508,002046: # C + SB . (C + B - D) 049509,002047: # ------ = 37777 + S(---------) 049510,002048: # C + SD ( C ) 049511,002049: 049512,002050: # THE DIVISION MAY BE PERFORMED IMMEDIATELY SINCE B IS STRICTLY LESS THAN D AND C IS NOT LESS THAN .5. 049513,002051: 049514,002052: 00,2642 40154 MAXDV CS MPAC # SEE IF MAXDV CASE STILL HOLDS AFTER 049515,002053: 00,2643 60130 AD BUF # NORMALIZATION. 049516,002054: 00,2644 00006 EXTEND 049517,002055: 00,2645 12647 BZF +2 049518,002056: 00,2646 12570 TCF GENDDV # MPAC NOW LESS THAN BUFF -- DIVIDE AS USUAL. 049519,002057: 049520,002058: 00,2647 34672 +2 CAF POSMAX # SET MAJOR PART OF RESULT. 049521,002059: 00,2650 54154 TS MPAC 049522,002060: 049523,002061: 00,2651 40131 CS BUF +1 # FORM DIVIDEND OF MINOR PART OF RESULT. 049524,002062: 00,2652 60155 AD MPAC +1 049525,002063: 00,2653 12624 TCF ENDMAXDV # GO ADD C AND DO DIVIDE, ATTACHING SIGN 049526,002064: # BEFORE EXITING. 049527,002065: 049528,002066: # Page 1153 049529,002067: # VECTOR DIVIDED BY SCALAR, V/SC, IS EXECUTED HERE. THE VECTOR IS NOW IN MPAC WITH SCALAR IN BUF. 049530,002068: 049531,002069: 00,2654 44712 V/SC2 CS ONE # INITIALIZE DIVIDEND NORMALIZATION COUNT 049532,002070: 00,2655 54137 TS DVNORMCT # AND DIVISION SIGN REGISTER. 049533,002071: 00,2656 54127 TS VBUF +5 049534,002072: 049535,002073: 00,2657 03010 TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR 049536,002074: 049537,002075: 00,2660 52131 DXCH BUF 049538,002076: 00,2661 07513 TC ALSIGNAG # SIGN AGREE BUF 049539,002077: 00,2662 52131 DXCH BUF 049540,002078: 00,2663 10130 CCS BUF # FORCE DIVISOR POSITIVE WITH MAJOR PART 049541,002079: 00,2664 12721 TCF /BUF+ # NON-ZERO (IF POSSIBLE). 049542,002080: 00,2665 12667 TCF +2 049543,002081: 00,2666 12715 TCF /BUF- 049544,002082: 049545,002083: 00,2667 56131 XCH BUF +1 # SHIFT VECTOR AND SCALAR LEFT 14. 049546,002084: 00,2670 56130 XCH BUF 049547,002085: 00,2671 56155 XCH MPAC +1 049548,002086: 00,2672 56154 XCH MPAC 049549,002087: 00,2673 00006 EXTEND # CHECK FOR OVERFLOW IN EACH CASE. 049550,002088: 00,2674 12676 BZF +2 049551,002089: 00,2675 12405 TCF DVOVF 049552,002090: 049553,002091: 00,2676 56160 XCH MPAC +4 049554,002092: 00,2677 56157 XCH MPAC +3 049555,002093: 00,2700 00006 EXTEND 049556,002094: 00,2701 12703 BZF +2 049557,002095: 00,2702 12405 TCF DVOVF 049558,002096: 049559,002097: 00,2703 56162 XCH MPAC +6 049560,002098: 00,2704 56161 XCH MPAC +5 049561,002099: 00,2705 00006 EXTEND 049562,002100: 00,2706 12710 BZF +2 049563,002101: 00,2707 12405 TCF DVOVF 049564,002102: 049565,002103: 00,2710 10130 CCS BUF 049566,002104: 00,2711 12721 TCF /BUF+ 049567,002105: 00,2712 12405 TCF DVOVF # ZERO DIVISOR - OVERFLOW. 049568,002106: 00,2713 12715 TCF /BUF- 049569,002107: 00,2714 12405 TCF DVOVF 049570,002108: 049571,002109: 00,2715 00006 /BUF- EXTEND # ON NEGATIVE, COMPLEMENT BUF AND MAINTAIN 049572,002110: 00,2716 40131 DCS BUF # DVSIGN IN VBUF +5. 049573,002111: 00,2717 52131 DXCH BUF 049574,002112: 00,2720 24127 INCR VBUF +5 049575,002113: 049576,002114: # Page 1154 049577,002115: 00,2721 00006 /BUF+ EXTEND 049578,002116: 00,2722 30131 DCA BUF # LEAVE ABS(ORIG DIVISOR) IN BUF2 049579,002117: 00,2723 52134 DXCH BUF2 # FOR OVERFLOW TESTING 049580,002118: 00,2724 12732 TCF /NORM # NORMALIZE DIVISOR IN BUF. 049581,002119: 049582,002120: 00,2725 00006 /NORM2 EXTEND # IF LESS THAN .5, AUGMENT DVNORMCT AND 049583,002121: 00,2726 24137 AUG DVNORMCT # DOUBLE DIVISOR. 049584,002122: 00,2727 00006 EXTEND 049585,002123: 00,2730 30131 DCA BUF 049586,002124: 00,2731 20131 DAS BUF 049587,002125: 049588,002126: 00,2732 30130 /NORM CA BUF # SEE IF DIVISOR NORMALIZED. 049589,002127: 00,2733 60000 DOUBLE 049590,002128: 00,2734 54000 OVSK 049591,002129: 00,2735 12725 TCF /NORM2 # DOUBLE AND TRY AGAIN IF NOT. 049592,002130: 049593,002131: 00,2736 02750 TC V/SCDV # DO X COMPONENT DIVIDE. 049594,002132: 00,2737 52160 DXCH MPAC +3 # SUPPLY ARGUMENTS IN USUAL SEQUENCE. 049595,002133: 00,2740 52155 DXCH MPAC 049596,002134: 00,2741 52160 DXCH MPAC +3 049597,002135: 049598,002136: 00,2742 02750 TC V/SCDV # Y COMPONENT. 049599,002137: 00,2743 52162 DXCH MPAC +5 049600,002138: 00,2744 52155 DXCH MPAC 049601,002139: 00,2745 52162 DXCH MPAC +5 049602,002140: 049603,002141: 00,2746 02750 TC V/SCDV # Z COMPONENT. 049604,002142: 00,2747 17367 TCF VROTATEX # GO RE-ARRANGE COMPONENTS BEFORE EXIT. 049605,002143: 049606,002144: # Page 1155 049607,002145: # SUBROUTINE USED BY V/SC TO DIVIDE VECTOR COMPONENT IN MPAC,+1 BY THE SCALAR GIVEN IN BUF. 049608,002146: 049609,002147: 00,2750 30127 V/SCDV CA VBUF +5 # REFLECTS SIGN OF SCALAR. 049610,002148: 00,2751 54136 TS DVSIGN 049611,002149: 049612,002150: 00,2752 10154 CCS MPAC # FORCE MPAC POSITIVE, EXITING ON ZERO. 049613,002151: 00,2753 12767 TCF /MPAC+ 049614,002152: 00,2754 12756 TCF +2 049615,002153: 00,2755 12763 TCF /MPAC- 049616,002154: 049617,002155: 00,2756 10155 CCS MPAC +1 049618,002156: 00,2757 12767 TCF /MPAC+ 049619,002157: 00,2760 00002 TC Q 049620,002158: 00,2761 12763 TCF /MPAC- 049621,002159: 00,2762 00002 TC Q 049622,002160: 049623,002161: 00,2763 00006 /MPAC- EXTEND # USUAL COMPLEMENTING AND SETTING OF SIGN. 049624,002162: 00,2764 40155 DCS MPAC 049625,002163: 00,2765 52155 DXCH MPAC 049626,002164: 00,2766 24136 INCR DVSIGN 049627,002165: 049628,002166: 00,2767 44712 /MPAC+ CS ONE # INITIALIZE NEAR-ONE SWITCH. 049629,002167: 00,2770 54140 TS MAXDVSW 049630,002168: 049631,002169: 00,2771 40154 CS MPAC # CHECK POSSIBLE OVERFLOW. 049632,002170: 00,2772 60133 AD BUF2 # UNNORMALIZED INPUT DIVISOR. 049633,002171: 00,2773 10000 CCS A 049634,002172: 00,2774 13004 TCF DDVCALL # NOT NEAR-ONE 049635,002173: 00,2775 12777 TCF +2 # +0 IS JUST POSSIBLE 049636,002174: 00,2776 12405 TCF DVOVF # NO HOPE 049637,002175: 00,2777 54140 TS MAXDVSW # SIGNAL POSSIBLE NEAR-ONE CASE 049638,002176: 00,3000 40155 CS MPAC +1 # SEE IF DIVISION CAN BE DONE 049639,002177: 00,3001 60134 AD BUF2 +1 049640,002178: 00,3002 00006 EXTEND 049641,002179: 00,3003 62405 BZMF DVOVF 049642,002180: 049643,002181: 00,3004 52155 DDVCALL DXCH MPAC # CALL PRE-DIVIDE NORMALIZATION. 049644,002182: 00,3005 50137 INDEX DVNORMCT 049645,002183: 00,3006 12565 TCF MAXTEST 049646,002184: 049647,002185: # Page 1156 049648,002186: 00,3007 32506 SLOPELO DEC .8324 049649,002187: 049650,002188: 00,3010 56002 VECAGREE XCH Q # SAVE Q IN A 049651,002189: 00,3011 52155 DXCH MPAC 049652,002190: 00,3012 07513 TC ALSIGNAG # SIGNAGREE MPAC 049653,002191: 00,3013 52155 DXCH MPAC 049654,002192: 00,3014 52160 DXCH MPAC +3 049655,002193: 00,3015 07513 TC ALSIGNAG # SIGN AGREE MPAC +3 049656,002194: 00,3016 52160 DXCH MPAC +3 049657,002195: 00,3017 52162 DXCH MPAC +5 049658,002196: 00,3020 07513 TC ALSIGNAG # SIGNAGREE MPAC +5 049659,002197: 00,3021 52162 DXCH MPAC +5 049660,002198: 00,3022 00000 TC A 049661,002199: 049662,002200: # Page 1157 049663,002201: # THE FOLLOWING ROUTINE EXECUTES THE UNIT INSTRUCTION, WHICH TAKES THE UNIT OF THE VECTOR IN MPAC. 049664,002202: 049665,002203: 00,3023 03010 UNIT TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR 049666,002204: 00,3024 07501 TC MPACVBUF # SAVE ARGUMENT IN VBUF 049667,002205: 00,3025 34714 CAF ZERO # MUST SENSE OVERFLOW IN FOLLOWING DOT. 049668,002206: 00,3026 56121 XCH OVFIND 049669,002207: 00,3027 54141 TS TEM1 049670,002208: 00,3030 03317 TC VSQSUB # DOT MPAC WITH ITSELF. 049671,002209: 00,3031 30141 CA TEM1 049672,002210: 00,3032 56121 XCH OVFIND 049673,002211: 00,3033 00006 EXTEND 049674,002212: 00,3034 13036 BZF +2 049675,002213: 00,3035 12405 TCF DVOVF 049676,002214: 00,3036 00006 EXTEND 049677,002215: 00,3037 30155 DCA MPAC # LEAVE THE SQUARE OF THE LENGTH OF THE 049678,002216: 00,3040 50120 INDEX FIXLOC # ARGUMENT IN LVSQUARE. 049679,002217: 00,3041 52043 DXCH LVSQUARE 049680,002218: 049681,002219: 00,3042 03343 TC SQRTSUB # GO TAKE THE NORMALIZED SQUARE ROOT. 049682,002220: 049683,002221: 00,3043 10154 CCS MPAC # CHECK FOR UNIT OVERFLOW. 049684,002222: 00,3044 13051 TCF +5 # MPAC IS NOT LESS THAN .5 UNLESS 049685,002223: 00,3045 54001 TS L 049686,002224: 00,3046 50120 INDEX FIXLOC 049687,002225: 00,3047 52045 DXCH LV 049688,002226: 00,3050 12405 TCF DVOVF # INPUT TO SQRTSUB WAS 0. 049689,002227: 049690,002228: 00,3051 44333 CS FOURTEEN # SEE IF THE INPUT WAS SO SMALL THAT THE 049691,002229: 00,3052 60135 AD MPTEMP # FIRST TWO REGISTERS OF THE SQUARE WERE 0 049692,002230: 00,3053 10000 CCS A 049693,002231: 00,3054 40000 COM # IF SO, SAVE THE NEGATIVE OF THE SHIFT 049694,002232: 00,3055 13133 TCF SMALL # COUNT -15D. 049695,002233: 049696,002234: 00,3056 13065 TCF LARGE # (THIS IS USUALLY THE CASE.) 049697,002235: 049698,002236: 00,3057 44720 CS THIRTEEN # IF THE SHIFT COUNT WAS EXACTLY 14, SET 049699,002237: 00,3060 54135 TS MPTEMP # THE PRE-DIVIDE NORM COUNT TO -13D. 049700,002238: 049701,002239: 00,3061 30154 CA MPAC # SHIFT THE LENGTH RIGHT 14 BEFORE STORING 049702,002240: 00,3062 54001 SMALL2 TS L # (SMALL EXITS TO THIS POINT). 049703,002241: 00,3063 34714 CAF ZERO 049704,002242: 00,3064 13112 TCF LARGE2 # GO TO STORE LENGTH AND PROCEED. 049705,002243: 049706,002244: 00,3065 10135 LARGE CCS MPTEMP # MOST ALL CASES COME HERE. 049707,002245: 00,3066 13074 TCF LARGE3 # SEE IF NO NORMALIZATION WAS REQUIRED BY 049708,002246: 00,3067 42024 CS SRDDV # SQRT, AND IF SO, SET UP FOR A SHIFT 049709,002247: 00,3070 54135 TS MPTEMP # RIGHT 1 BEFORE DIVIDING TO PRODUCE 049710,002248: 00,3071 00006 EXTEND # THE DESIRED HALF UNIT VECTOR. 049711,002249: 00,3072 30155 DCA MPAC 049712,002250: # Page 1158 049713,002251: 00,3073 13112 TCF LARGE2 049714,002252: 049715,002253: # Page 1159 049716,002254: 00,3074 40000 LARGE3 COM # LEAVE NEGATIVE OF SHIFT COUNT-1 FOR 049717,002255: 00,3075 54135 TS MPTEMP # PREDIVIDE LEFT SHIFT. 049718,002256: 049719,002257: 00,3076 40000 COM # PICK UP REQUIRED SHIFTING BIT TO UNNORM- 049720,002258: 00,3077 50000 INDEX A # ALIZE THE SQRT RESULT. 049721,002259: 00,3100 34675 CAF BIT14 049722,002260: 00,3101 54130 TS BUF 049723,002261: 00,3102 00006 EXTEND 049724,002262: 00,3103 70155 MP MPAC +1 049725,002263: 00,3104 56130 XCH BUF 049726,002264: 00,3105 00006 EXTEND # (UNNORMALIZE THE SQRT FOR LV). 049727,002265: 00,3106 70154 MP MPAC 049728,002266: 00,3107 56001 XCH L 049729,002267: 00,3110 60130 AD BUF 049730,002268: 00,3111 56001 XCH L 049731,002269: 049732,002270: 00,3112 50120 LARGE2 INDEX FIXLOC 049733,002271: 00,3113 52045 DXCH LV # LENGTH NOW STORED IN WORK AREA. 049734,002272: 049735,002273: 00,3114 44712 CS ONE 049736,002274: 00,3115 54140 TS MAXDVSW # NO MAXDV CASES IN UNIT. 049737,002275: 049738,002276: 00,3116 52123 DXCH VBUF # PREPARE X COMPONENT FOR DIVIDE, SETTING 049739,002277: 00,3117 52155 DXCH MPAC # LENGTH OF VECTOR AS DIVISOR IN BUF. 049740,002278: 00,3120 52131 DXCH BUF 049741,002279: 00,3121 03151 TC UNITDV 049742,002280: 049743,002281: 00,3122 52125 DXCH VBUF +2 # DO Y AND Z IN USUAL FASHION SO WE CAN 049744,002282: 00,3123 52155 DXCH MPAC # EXIT THROUGH VROTATEX. 049745,002283: 00,3124 52160 DXCH MPAC +3 049746,002284: 00,3125 03151 TC UNITDV 049747,002285: 049748,002286: 00,3126 52127 DXCH VBUF +4 049749,002287: 00,3127 52155 DXCH MPAC 049750,002288: 00,3130 52162 DXCH MPAC +5 049751,002289: 00,3131 03151 TC UNITDV 049752,002290: 00,3132 17367 TCF VROTATEX # AND EXIT. 049753,002291: 049754,002292: # Page 1160 049755,002293: # IF THE LENGTH OF THE ARGUMENT VECTOR WAS LESS THAN 2(-28), EACH COMPONENT MUST BE SHIFTED LEFT AT LEAST 049756,002294: # 14 PLACES BEFORE TEH DIVIDE, NOTE THAT IN THIS CASE, THE MAJOR PART OF EACH COMPONENT IS ZERO. 049757,002295: 049758,002296: 00,3133 54135 SMALL TS MPTEMP # NEGATIVE OF PRE-DIVIDE SHIFT COUNT. 049759,002297: 049760,002298: 00,3134 34714 CAF ZERO # SHIFT EACH COMPONENT LEFT 14. 049761,002299: 00,3135 56123 XCH VBUF +1 049762,002300: 00,3136 56122 XCH VBUF 049763,002301: 00,3137 56125 XCH VBUF +3 049764,002302: 00,3140 56124 XCH VBUF +2 049765,002303: 00,3141 56127 XCH VBUF +5 049766,002304: 00,3142 56126 XCH VBUF +4 049767,002305: 049768,002306: 00,3143 40135 CS MPTEMP 049769,002307: 00,3144 50000 INDEX A 049770,002308: 00,3145 34675 CAF BIT14 049771,002309: 00,3146 00006 EXTEND 049772,002310: 00,3147 70154 MP MPAC 049773,002311: 00,3150 13062 TCF SMALL2 049774,002312: 049775,002313: 00,3151 4720 THIRTEEN = OCT15 049776,002314: 00,3151 4333 FOURTEEN = OCT16 049777,002315: 00,3151 4333 OCT16 = R1D1 049778,002316: 049779,002317: # Page 1161 049780,002318: # THE FOLLOWING ROUTINE SETS UP THE CALL TO THE DIVIDE ROUTINES. 049781,002319: 049782,002320: 00,3151 10154 UNITDV CCS MPAC # FORCE MPAC POSITIVE IF POSSIBLE, SETTING 049783,002321: 00,3152 13170 TCF UMPAC+ # DVSIGN ACCORDING TO THE SIGN OF MPAC 049784,002322: 00,3153 13155 TCF +2 # SINCE THE DIVISOR IS ALWAYS POSITIVE 049785,002323: 00,3154 13162 TCF UMPAC- # HERE. 049786,002324: 049787,002325: 00,3155 10155 CCS MPAC +1 049788,002326: 00,3156 13170 TCF UMPAC+ 049789,002327: 00,3157 00002 TC Q # EXIT IMMEDIATELY ON ZERO. 049790,002328: 00,3160 13162 TCF UMPAC- 049791,002329: 00,3161 00002 TC Q 049792,002330: 049793,002331: 00,3162 44714 UMPAC- CS ZERO # IF NEGATIVE, SET -0 IN DVSIGN FOR FINAL 049794,002332: 00,3163 54136 TS DVSIGN # COMPLEMENT. 049795,002333: 00,3164 00006 EXTEND 049796,002334: 00,3165 40155 DCS MPAC # PICK UP ABSOLUTE VALUE OF ARG AND JUMP. 049797,002335: 00,3166 50135 INDEX MPTEMP 049798,002336: 00,3167 12564 TCF MAXTEST -1 049799,002337: 049800,002338: 00,3170 54136 UMPAC+ TS DVSIGN # SET DVSIGN FOR POSITIVE QUOTIENT. 049801,002339: 00,3171 52155 DXCH MPAC 049802,002340: 00,3172 50135 INDEX MPTEMP 049803,002341: 00,3173 12564 TCF MAXTEST -1 049804,002342: 049805,002343: # Page 1162 049806,002344: # MISCELLANEOUS UNARY OPERATIONS. 049807,002345: 049808,002346: 00,3174 03300 DSQ TC DSQSUB # SQUARE THE DP CONTENTS OF MPAC. 049809,002347: 00,3175 16030 TCF DANZIG 049810,002348: 049811,002349: 00,3176 10163 ABVALABS CCS MODE # ABVAL OR ABS INSTRUCTION. 049812,002350: 00,3177 13226 TCF ABS # DO ABS ON SCALAR. 049813,002351: 00,3200 13226 TCF ABS 049814,002352: 049815,002353: 00,3201 03317 ABVAL TC VSQSUB # DOT MPAC WITH ITSELF. 049816,002354: 00,3202 22163 LXCH MODE # MODE IS NOW DP (L ZERO AFTER DAS). 049817,002355: 049818,002356: 00,3203 00006 EXTEND # STORE SQUARE OF LENGTH IN WORK AREA. 049819,002357: 00,3204 30155 DCA MPAC 049820,002358: 00,3205 50120 INDEX FIXLOC 049821,002359: 00,3206 52043 DXCH LVSQUARE 049822,002360: 049823,002361: # Page 1163 049824,002362: # PROGRAM DESCRIPTION -- SUBROUTINE SQRT 049825,002363: 049826,002364: # FUNCTIONAL DESCRIPTION -- DOUBLE PRECISION SQUARE ROOT ROUTINE 049827,002365: # THIS PROGRAM TAKES THE SQUARE ROOT OF THE 27 OR 28 MOST SIGNIFICANT BITS IN THE TRIPLE PRECISION SET OF 049828,002366: # NUMBERS -- MPAC, MPAC+1, AND MPAC+2. THE ROOT IS RETURNED DOUBLE PRECISION IN MPAC AND MPAC+1. 049829,002367: 049830,002368: # WARNING -- THIS SUBROUTINE USES A TRIPLE PRECISION INPUT. THE PROGRAMMER MUST ASSURE THE CONTENTS OF MPAC+2 049831,002369: # ESPECIALLY IF THE CONTENTS OF MPAC IS SMALL OR ZERO. FOR DETAILS SEE STG MEMO NO.949. 049832,002370: 049833,002371: # CALLING SEQUENCE -- IN INTERPRETIVE MODE, I.E., FOLLOWING `TC INTPRET', `SQRT', NO ADDRESS IS ALLOWED. 049834,002372: # INPUT SCALING: THE BINARY POINT IS ASSUMED TO THE RIGHT OF BIT 15. THE ANSWER IS RETURNED WITH THE SAME SCALING. 049835,002373: 049836,002374: # SUBROUTINES -- GENSCR, MPACSHR, SQRTSUB, ABORT 049837,002375: 049838,002376: # ABORT EXIT MODE -- ABORTS ON NEGATIVE INPUT -1.2X10E-4 (77775 OCTAL) OR LESS. 049839,002377: # DISPLAYS ERROR CODE 1302 049840,002378: # TC ABORT 049841,002379: # OCT 1302 049842,002380: 049843,002381: # DEBRIS -- LOCATIONS BUF, MPTEMP, ADDRWD ARE USED 049844,002382: 049845,002383: 00,3207 03343 SQRT TC SQRTSUB # TAKE THE SQUARE ROOT OF MPAC. 049846,002384: 00,3210 10135 CCS MPTEMP # RETURNED NORMALIZED SQUARE ROOT. SEE IF 049847,002385: 00,3211 13213 TCF +2 # ANY UN-NORMALIZATION REQUIRED AND EXIT 049848,002386: 00,3212 16030 TCF DANZIG # IF NOT. 049849,002387: 049850,002388: 00,3213 63730 AD NEG12 # A RIGHT SHIFT OF MORE THAN 13 COULD BE 049851,002389: 00,3214 00006 EXTEND # REQUIRED IF INPUT WAS ZERO IN MPAC,+1. 049852,002390: 00,3215 63221 BZMF SQRTSHFT # GOES HERE IN MOST CASES. 049853,002391: 00,3216 22007 ZL # IF A LONG SHIFT IS REQUIRED, GO TO 049854,002392: 00,3217 22116 LXCH ADDRWD # GENERAL RIGHT SHIFT ROUTINES. 049855,002393: 00,3220 12303 TCF GENSCR +4 # ADDRWD WAS ZERO TO PREVENT ROUND. 049856,002394: 049857,002395: 00,3221 50135 SQRTSHFT INDEX MPTEMP # SELECT SHIFTING BIT AND EXIT THROUGH 049858,002396: 00,3222 34674 CAF BIT15 # SHIFT ROUTINES. 049859,002397: 00,3223 54135 TS MPTEMP 049860,002398: 00,3224 34714 CAF ZERO # TO ZERO MPAC +2 IN THE PROCESS. 049861,002399: 00,3225 12036 TCF MPACSHR +3 049862,002400: 049863,002401: 00,3226 06672 ABS TC BRANCH # TEST SIGN OF MPAC AND COMPLEMENT IF 049864,002402: 00,3227 16030 TCF DANZIG 049865,002403: 00,3230 16030 TCF DANZIG 049866,002404: 00,3231 17637 TCF COMP 049867,002405: 049868,002406: # Page 1164 049869,002407: 00,3232 44710 VDEF CS FOUR # VECTOR DEFINE -- ESSENTIALLY TREATS 049870,002408: 00,3233 26166 ADS PUSHLOC # SCALAR IN MPAC AS X COMPONENT, PUSHES UP 049871,002409: 00,3234 00006 EXTEND # FOR Y AND THEN AGAIN FOR Z. 049872,002410: 00,3235 50000 INDEX A 049873,002411: 00,3236 30003 DCA 2 049874,002412: 00,3237 52160 DXCH MPAC +3 049875,002413: 00,3240 00006 EXTEND 049876,002414: 00,3241 50166 INDEX PUSHLOC 049877,002415: 00,3242 30001 DCA 0 049878,002416: 00,3243 52162 DXCH MPAC +5 049879,002417: 00,3244 16470 TCF VMODE # MODE IS NON VECTOR. 049880,002418: 049881,002419: 00,3245 03317 VSQ TC VSQSUB # DOT MPAC WITH ITSELF. 049882,002420: 00,3246 17301 TCF DMODE # MODE IS NOW DP. 049883,002421: 049884,002422: 00,3247 00006 PUSH EXTEND # PUSH DOWN MPAC LEAVING IT LOADED. 049885,002423: 00,3250 30155 DCA MPAC 049886,002424: 00,3251 50166 INDEX PUSHLOC # PUSH DOWN FIRST TWO REGISTERS IN EACH 049887,002425: 00,3252 52001 DXCH 0 049888,002426: 049889,002427: 00,3253 50163 INDEX MODE # INCREMENT PUSHDOWN POINTER. 049890,002428: 00,3254 36213 CAF NO.WDS 049891,002429: 00,3255 26166 ADS PUSHLOC 049892,002430: 049893,002431: 00,3256 10163 CCS MODE 049894,002432: 00,3257 13272 TCF TPUSH # PUSH DOWN MPAC +2. 049895,002433: 00,3260 16030 TCF DANZIG # DONE FOR DP. 049896,002434: 049897,002435: 00,3261 00006 EXTEND # ON VECTOR, PUSH DOWN Y AND Z COMPONENTS. 049898,002436: 00,3262 30160 DCA MPAC +3 049899,002437: 00,3263 50166 INDEX PUSHLOC 049900,002438: 00,3264 51775 DXCH 0 -4 049901,002439: 00,3265 00006 EXTEND 049902,002440: 00,3266 30162 DCA MPAC +5 049903,002441: 00,3267 50166 INDEX PUSHLOC 049904,002442: 00,3270 51777 DXCH 0 -2 049905,002443: 00,3271 16030 TCF DANZIG 049906,002444: 049907,002445: 00,3272 30156 TPUSH CA MPAC +2 049908,002446: 00,3273 16523 TCF ENDTPUSH +2 049909,002447: 049910,002448: 00,3274 50120 RVQ INDEX FIXLOC # RVQ -- RETURN IVA QPRET. 049911,002449: 00,3275 30052 CA QPRET 049912,002450: 00,3276 54117 TS POLISH 049913,002451: 00,3277 16621 TCF GOTO +4 # (ASSUME QPRET POINTS TO FIXED ONLY.) 049914,002452: 049915,002453: # Page 1165 049916,002454: # THE FOLLOWING SUBROUTINES ARE USED IN SQUARING MPAC, IN BOTH THE SCALAR AND VECTOR SENSE. THEY ARE 049917,002455: # SPECIAL CASES OF DMPSUB AND DOTSUB, PUT IN TO SAVE SOME TIME. 049918,002456: 049919,002457: 00,3300 30155 DSQSUB CA MPAC +1 # SQUARES THE SCALAR CONTENTS OF MPAC. 049920,002458: 00,3301 00006 EXTEND 049921,002459: 00,3302 70000 SQUARE 049922,002460: 00,3303 54156 TS MPAC +2 049923,002461: 00,3304 34714 CAF ZERO # FORM 2(CROSS TERM). 049924,002462: 00,3305 56155 XCH MPAC +1 049925,002463: 00,3306 00006 EXTEND 049926,002464: 00,3307 70154 MP MPAC 049927,002465: 00,3310 20001 DDOUBL # AND MAYBE OVEFLOW. 049928,002466: 00,3311 20156 DAS MPAC +1 # AND SET A TO NET OVERFLOW. 049929,002467: 00,3312 56154 XCH MPAC 049930,002468: 00,3313 00006 EXTEND 049931,002469: 00,3314 70000 SQUARE 049932,002470: 00,3315 20155 DAS MPAC 049933,002471: 00,3316 00002 TC Q 049934,002472: 049935,002473: 00,3317 00006 VSQSUB EXTEND # DOTS THE VECTOR IN MPAC WITH ITSELF. 049936,002474: 00,3320 22137 QXCH DOTRET 049937,002475: 00,3321 03300 TC DSQSUB # SQUARE THE X COMPONENT. 049938,002476: 00,3322 52160 DXCH MPAC +3 049939,002477: 00,3323 52155 DXCH MPAC 049940,002478: 00,3324 52131 DXCH BUF # SO WE CAN END IN DOTSUB. 049941,002479: 00,3325 30156 CA MPAC +2 049942,002480: 00,3326 54132 TS BUF +2 049943,002481: 049944,002482: 00,3327 03300 TC DSQSUB # SQUARE Y COMPONENT. 049945,002483: 00,3330 52156 DXCH MPAC +1 049946,002484: 00,3331 20132 DAS BUF +1 049947,002485: 00,3332 60154 AD MPAC 049948,002486: 00,3333 60130 AD BUF 049949,002487: 00,3334 54130 TS BUF 049950,002488: 00,3335 13337 TCF +2 049951,002489: 00,3336 54121 TS OVFIND # IF OVERFLOW. 049952,002490: 049953,002491: 00,3337 52162 DXCH MPAC +5 049954,002492: 00,3340 52155 DXCH MPAC 049955,002493: 00,3341 03300 TC DSQSUB # SQUARE Z COMPONENT. 049956,002494: 00,3342 17154 TCF ENDDOT # END AS IN DOTSUB. 049957,002495: 049958,002496: # Page 1166 049959,002497: # DOUBLE PRECISION SQUARE ROOT ROUTINE. TAKE THE SQUARE ROOT OF THE TRIPLE PRECISION (MPAC +2 USED ONLY 049960,002498: # IN NORMALIZATION) CONTENTS OF MPAC AND LEAVE THE NORMALIZED RESULT IN MPAC (C(MPAC) GREATER THAN OR EQUAL TO 049961,002499: # .5). THE RIGHT SHIFT COUNT (TC UNNORMALIZE) IS LEFT IN MPTEMP. 049962,002500: 049963,002501: 00,3343 34714 SQRTSUB CAF ZERO # START BY ZEROING RIGHT SHIFT COUNT. 049964,002502: 00,3344 54135 TS MPTEMP 049965,002503: 049966,002504: 00,3345 10154 CCS MPAC # CHECK FOR POSITIVE ARGUMENT, SHIFTING 049967,002505: 00,3346 13404 TCF SMPAC+ # FIRST SIGNIFICANT MPAC REGISTER INTO 049968,002506: 00,3347 13351 TCF +2 # MPAC ITSELF. 049969,002507: 00,3350 13373 TCF SQRTNEG # SEE IF MAG OF ARGUMENT LESS THAN 10(-4). 049970,002508: 049971,002509: 00,3351 56156 XCH MPAC +2 # MPAC IS ZERO -- SHIFT LEFT 14. 049972,002510: 00,3352 56155 XCH MPAC +1 049973,002511: 00,3353 54154 TS MPAC 049974,002512: 00,3354 34716 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER. 049975,002513: 00,3355 54135 TS MPTEMP 049976,002514: 049977,002515: 00,3356 10154 CCS MPAC # SEE IF MPAC NOW PNZ. 049978,002516: 00,3357 13404 TCF SMPAC+ 049979,002517: 00,3360 13362 TCF +2 049980,002518: 00,3361 13376 TCF ZEROANS # NEGATIVE BUT LESS THAN 10(-4) IN MAG. 049981,002519: 049982,002520: 00,3362 56155 XCH MPAC +1 # XERO -- SHIFT LEFT 14 AGAIN. 049983,002521: 00,3363 54154 TS MPAC 049984,002522: 00,3364 34716 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER. 049985,002523: 00,3365 26135 ADS MPTEMP 049986,002524: 049987,002525: 00,3366 10154 CCS MPAC 049988,002526: 00,3367 13404 TCF SMPAC+ 049989,002527: 00,3370 00002 TC Q # SQRT(0) = 0. 049990,002528: 00,3371 13376 TCF ZEROANS 049991,002529: 00,3372 13452 TCF FIXROOT # DO NOT LEAVE SQRTSUB WITH -0 IN MPAC. 049992,002530: 049993,002531: 00,3373 10000 SQRTNEG CCS A # ARGUMENT IS NEGATIVE, BUT SEE IF SIGN- 049994,002532: 00,3374 13402 TCF SQRTABRT # CORRECTED ARGUMENT IS LESS THAN 10(-4) 049995,002533: 049996,002534: 00,3375 10155 CCS MPAC +1 # IN MAGNITUDE. IF SO, CALL ANSWER ZERO. 049997,002535: 00,3376 34714 ZEROANS CAF ZERO # FORCE ANSWER TO ZERO HERE. 049998,002536: 00,3377 13452 TCF FIXROOT 049999,002537: 00,3400 13402 TCF SQRTABRT 050000,002538: 00,3401 13452 TCF FIXROOT 050001,002539: 050002,002540: 00,3402 05622 SQRTABRT TC P00DOO 050003,002541: 00,3403 01302 OCT 01302 050004,002542: 050005,002543: # Page 1167 050006,002544: 00,3404 62444 SMPAC+ AD -1/2+2 # SEE IF ARGUMENT GREATER THAN OR EQUAL TO 050007,002545: 00,3405 00006 EXTEND # .5. 050008,002546: 00,3406 63455 BZMF SRTEST # IF SO, SEE IF LESS THAN .25. 050009,002547: 050010,002548: 00,3407 52155 DXCH MPAC # WE WILL TAKE THE SQUARE ROOT OF MPAC/2. 050011,002549: 00,3410 22021 LXCH SR # SHIFT RIGHT 1 AND GO TO THE SQRT ROUTINE 050012,002550: 00,3411 00006 EXTEND 050013,002551: 00,3412 74675 MP HALF 050014,002552: 00,3413 52155 DXCH MPAC 050015,002553: 00,3414 56021 XCH SR 050016,002554: 00,3415 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW. 050017,002555: 050018,002556: 00,3416 32314 ARGHI CAF SLOPEHI # ARGUMENT BETWEEN .25 AND .5, GET A 050019,002557: 00,3417 00006 EXTEND # LINEAR APPROXIMATION FOR THIS RANGE. 050020,002558: 00,3420 70154 MP MPAC 050021,002559: 00,3421 62566 AD BIASHI # X0/2 = (MPAC/2)(SLOPHI) + BIASHI/2. 050022,002560: 050023,002561: 00,3422 54130 +4 TS BUF # X0/2 (ARGLO ENTERS HERE). 050024,002562: 00,3423 30154 CA MPAC # SINGLE-PRECISION THROUGHOUT. 050025,002563: 00,3424 22007 ZL 050026,002564: 00,3425 00006 EXTEND 050027,002565: 00,3426 10130 DV BUF # (MPAC/2)/(X0/2) 050028,002566: 00,3427 00006 EXTEND 050029,002567: 00,3430 74675 MP HALF 050030,002568: 00,3431 26130 ADS BUF # X1 = X0/2 + .5(MPAX/2)/(X0/2) 050031,002569: 050032,002570: 00,3432 00006 EXTEND 050033,002571: 00,3433 74675 MP HALF # FORM UP X1/2. 050034,002572: 00,3434 52155 DXCH MPAC # SAVE AND BRING OUT ARGUMENT. 050035,002573: 00,3435 00006 EXTEND # TAKE DP QUOTIENT WITH X1. 050036,002574: 00,3436 10130 DV BUF 050037,002575: 00,3437 54131 TS BUF +1 # SAVE MAJOR PART OF QUOTIENT. 050038,002576: 00,3440 34714 CAF ZERO # FORM MINOR PART OF QUOTIENT USING 050039,002577: 00,3441 56001 XCH L # (REMAINDER,0). 050040,002578: 00,3442 00006 EXTEND 050041,002579: 00,3443 10130 DV BUF 050042,002580: 00,3444 54001 TS L # IN PREPARATION FOR DAS. 050043,002581: 00,3445 30131 CA BUF +1 050044,002582: 00,3446 20155 DAS MPAC # X2 = X1/2 + (MPAC/2)X1 050045,002583: 050046,002584: 00,3447 00006 EXTEND # OVERFLOWS IF ARG. NEAR POSMAX. 050047,002585: 00,3450 13454 BZF TCQBNK00 050048,002586: 00,3451 34672 CAF POSMAX 050049,002587: 00,3452 54154 FIXROOT TS MPAC 050050,002588: 00,3453 54155 TS MPAC +1 050051,002589: 00,3454 00002 TCQBNK00 TC Q # RETURN TO CALLER TO UNNORMALIZE, ETC. 050052,002590: 050053,002591: # Page 1168 050054,002592: 00,3455 64676 SRTEST AD QUARTER # ARGUMENT WAS LESS THAN .5, SEE IF LESS 050055,002593: 00,3456 00006 EXTEND # THAN .25. 050056,002594: 00,3457 63501 BZMF SQRTNORM # IF SO, BEGIN NORMALIZATION. 050057,002595: 050058,002596: 00,3460 52155 DXCH MPAC # IF BETWEEN .5 AND .25, SHIFT RIGHT 1 AND 050059,002597: 00,3461 22021 LXCH SR # START AT ARGLO. 050060,002598: 00,3462 00006 EXTEND 050061,002599: 00,3463 74675 MP HALF 050062,002600: 00,3464 52155 DXCH MPAC 050063,002601: 00,3465 56021 XCH SR 050064,002602: 00,3466 26155 ADS MPAC +1 # NO OVERFLOW. 050065,002603: 050066,002604: 00,3467 33007 ARGLO CAF SLOPELO # (NORMALIZED) ARGUMENT BETWEEN .125 AND 050067,002605: 00,3470 00006 EXTEND # .25 050068,002606: 00,3471 70154 MP MPAC 050069,002607: 00,3472 62270 AD BIASLO 050070,002608: 00,3473 13422 TCF ARGHI +4 # BEGIN SQUARE ROOT. 050071,002609: 050072,002610: 00,3474 00006 SQRTNM2 EXTEND # SHIFT LEFT 2 AND INCREMENT RIGHT SHIFT 050073,002611: 00,3475 30156 DCA MPAC +1 # COUNT (FOR TERMINAL UNNORMALIZATION). 050074,002612: 00,3476 20156 DAS MPAC +1 050075,002613: 00,3477 60154 AD MPAC 050076,002614: 00,3500 26154 ADS MPAC # (NO OVERFLOW). 050077,002615: 050078,002616: 00,3501 24135 SQRTNORM INCR MPTEMP # FIRST TIME THROUGH, JUST SHIFT LEFT 1 050079,002617: 00,3502 00006 EXTEND # (PUTS IN EFFECTIVE RIGHT SHIFT SINCE 050080,002618: 00,3503 30156 DCA MPAC +1 # WE WANT MPAC/2). 050081,002619: 00,3504 20156 DAS MPAC +1 050082,002620: 00,3505 60154 AD MPAC 050083,002621: 00,3506 26154 ADS MPAC # (AGAIN NO OVERFLOW). 050084,002622: 00,3507 60000 DOUBLE 050085,002623: 00,3510 54022 TS CYL 050086,002624: 050087,002625: 00,3511 10022 NORMTEST CCS CYL # SEE IF ARGUMENT NOW NORMALIZED AT 050088,002626: 00,3512 10022 CCS CYL # GREATER THAN .125. 050089,002627: 00,3513 13474 TCF SQRTNM2 # NO -- SHIFT LEFT 2 MORE AND TRY AGAIN. 050090,002628: 00,3514 13416 TCF ARGHI # YES -- NOW BETWEEN .5 AND .25. 050091,002629: 00,3515 13467 TCF ARGLO # ARGUMENT NOW BETWEEN .25 AND .125. 050092,002630: 050093,002631: # Page 1169 050094,002632: # TRIGONOMETRIC FUNCTION PACKAGE. 050095,002633: # THE FOLLOWING TRIGONOMETRIC FUNCTIONS ARE AVAIALABLE AS INTERPRETIVE OPERATIONS: 050096,002634: # 1. SIN COMPUTES (1/2)SINE(2 PI MPAC). 050097,002635: # 2. COS COMPUTES (1/2)COSINE(2 PI MPAC). 050098,002636: # 3. ASIN COMPUTES (1/2PI)ARCSINE(2 MPAC). 050099,002637: # 4. ACOS COMPUTES (1/2PI)ARCCOSINE(2 MPAC). 050100,002638: 050101,002639: # SIN-ASIN AND COS-ACOS ARE MUTUALLY INVERSE, I.E., SIN(ASIN(X)) = X. 050102,002640: 050103,002641: 00,3516 06672 COSINE TC BRANCH # FINDS COSINE USING THE IDENTITY 050104,002642: 00,3517 13522 TCF +3 # COS(X) = SIN(PI/2 - ABS(X)). 050105,002643: 00,3520 13525 TCF PRESINE 050106,002644: 00,3521 13525 TCF PRESINE 050107,002645: 050108,002646: 00,3522 00006 +3 EXTEND 050109,002647: 00,3523 40155 DCS MPAC 050110,002648: 00,3524 52155 DXCH MPAC 050111,002649: 050112,002650: 00,3525 34676 PRESINE CAF QUARTER # PI/2 SCALED. 050113,002651: 00,3526 26154 ADS MPAC 050114,002652: 050115,002653: 00,3527 52155 SINE DXCH MPAC # DOUBLE ARGUMENT. 050116,002654: 00,3530 20001 DDOUBL 050117,002655: 00,3531 54000 OVSK # SEE IF OVERFLOW PRESENT. 050118,002656: 00,3532 13535 TCF +3 # IF NOT, ARGUMENT OK AS IS. 050119,002657: 050120,002658: 00,3533 00006 EXTEND # IF SO, WE LOST (OR GAINED) PI, SO 050121,002659: 00,3534 40001 DCOM # COMPLEMENT MPAC USING THE IDENTITY 050122,002660: # SIN(X-(+)PI) = SIN(-X). 050123,002661: 00,3535 52155 +3 DXCH MPAC 050124,002662: 00,3536 30154 CA MPAC # SEE IF ARGUMENT GREATER THAN .5 IN 050125,002663: 00,3537 60000 DOUBLE # MAGNITUDE. IF SO, REDUCE IT TO LESS THAN 050126,002664: 00,3540 54001 TS L # .5 (+-PI/2 SCALED) AS FOLLOWS: 050127,002665: 00,3541 13552 TCF SN1 050128,002666: 050129,002667: 00,3542 50000 INDEX A # IF POSITIVE, FORM PI - X, IF NEGATIVE 050130,002668: 00,3543 34674 CAF NEG1/2 +1 # USE -PI -X. 050131,002669: 00,3544 60000 DOUBLE 050132,002670: 00,3545 00006 EXTEND 050133,002671: 00,3546 60154 SU MPAC # GUARANTEED NO OVERFLOW. 050134,002672: 00,3547 54154 TS MPAC 050135,002673: 00,3550 40155 CS MPAC +1 050136,002674: 00,3551 54155 TS MPAC +1 050137,002675: 050138,002676: # Page 1170 050139,002677: 00,3552 00006 SN1 EXTEND # SET UP TO EVALUATE HASTINGS POLYNOMIAL 050140,002678: 00,3553 30155 DCA MPAC 050141,002679: 00,3554 52134 DXCH BUF2 050142,002680: 00,3555 03300 TC DSQSUB # SQUARE MPAC. 050143,002681: 050144,002682: 00,3556 07171 TC POLY # EVALUATE FOURTH ORDER POLYNOMIAL. 050145,002683: 00,3557 00003 DEC 3 B-14 050146,002684: 00,3560 14441 37325 2DEC +.3926990796 050147,002685: 00,3562 53250 60764 2DEC -.6459637111 050148,002686: 00,3564 12146 21276 2DEC +.318758717 050149,002687: 00,3566 75466 71471 2DEC -.074780249 050150,002688: 00,3570 00236 32757 2DEC +.009694988 050151,002689: 050152,002690: 00,3572 32470 CAF LBUF2 # MULTIPLY BY ARGUMENT AND SHIFT LEFT 2. 050153,002691: 00,3573 07055 TC DMPSUB -1 050154,002692: 050155,002693: 00,3574 00006 EXTEND 050156,002694: 00,3575 30156 DCA MPAC +1 050157,002695: 00,3576 20156 DAS MPAC +1 050158,002696: 00,3577 60154 AD MPAC 050159,002697: 00,3600 26154 ADS MPAC # NEITHER SHIFT OVERFLOWS. 050160,002698: 00,3601 00006 EXTEND 050161,002699: 00,3602 30156 DCA MPAC +1 050162,002700: 00,3603 20156 DAS MPAC +1 050163,002701: 00,3604 60154 AD MPAC 050164,002702: 00,3605 26154 ADS MPAC 050165,002703: 00,3606 16030 TCF DANZIG 050166,002704: 050167,002705: # Page 1171 050168,002706: # ARCSIN/ARCCOS ROUTINE. 050169,002707: 050170,002708: 00,3607 33630 ARCSIN CAF LASINEX # COMPUTE ARCSIN BY USING THE IDENTITY 050171,002709: 00,3610 13612 TCF +2 # ARCSIN(X) = PI/2 - ARCCOS(X). 050172,002710: 050173,002711: 00,3611 33712 ARCCOS CAF LDANZIG # (EXITS IMMEDIATELY). 050174,002712: 00,3612 54136 TS ESCAPE 050175,002713: 00,3613 06672 TC BRANCH # TEST SIGN OF INPUT. 050176,002714: 00,3614 13624 TCF ACOSST # START IMMEDIATELY IF POSITIVE. 050177,002715: 00,3615 13726 TCF ACOSZERO # ARCCOS(0) = PI/2 = .25. 050178,002716: 00,3616 00006 EXTEND # IF NEGATIVE, USE THE IDENTITY 050179,002717: 00,3617 40155 DCS MPAC # ARCCOS(X) = PI - ARCCOS(-X), FORCING 050180,002718: 00,3620 52155 DXCH MPAC # ARGUMENT POSITIVE. 050181,002719: 00,3621 33731 CAF TCSUBTR # SET EXIT TO DO ABOVE BEFROE 050182,002720: 00,3622 56136 XCH ESCAPE # ARCSIN/ARCCOS CONSIDERATIONS. 050183,002721: 00,3623 54137 TS ESCAPE2 050184,002722: 050185,002723: 00,3624 44675 ACOSST CS HALF # TEST MAGNITUDE OF INPUT. 050186,002724: 00,3625 60154 AD MPAC 050187,002725: 00,3626 10000 CCS A 050188,002726: 00,3627 13720 TCF ACOSOVF # THIS IS PROBABLY AN OVERFLOW CASE. 050189,002727: 050190,002728: 00,3630 13706 LASINEX TCF ASINEX 050191,002729: 050192,002730: 00,3631 13641 TCF ACOSST2 # NO OVERFLOW -- PROCEED. 050193,002731: 050194,002732: 00,3632 10155 CCS MPAC +1 # IF MAJOR PART IS .5, CALL ANSWER 0 050195,002733: 00,3633 34714 CAF ZERO # UNLESS MINOR PART NEGATIVE. 050196,002734: 00,3634 13636 TCF ACOS=0 050197,002735: 050198,002736: 00,3635 13641 TCF ACOSST2 050199,002737: 050200,002738: 00,3636 54155 ACOS=0 TS MPAC +1 050201,002739: 00,3637 54154 TS MPAC 050202,002740: 00,3640 00136 TC ESCAPE 050203,002741: 050204,002742: 00,3641 00006 ACOSST2 EXTEND # NOW THAT ARGUMENT IS IN PROPER RANGE, 050205,002743: 00,3642 40155 DCS MPAC # BEGIN COMPUTATION. USE HASTINGS 050206,002744: 00,3643 64675 AD HALF # APPROXIMATION ARCCOS(X) = SQRT(1-X)P(X) 050207,002745: 00,3644 52155 DXCH MPAC # IN A SCALED VERSION WHERE P(X) IS A 050208,002746: 00,3645 52134 DXCH BUF2 # SEVENTH ORDER POLYNOMIAL. 050209,002747: 050210,002748: 00,3646 03343 TC SQRTSUB # RETURNS WITH NORMALIZED SQUARE ROOT. 050211,002749: 050212,002750: 00,3647 10135 CCS MPTEMP # SEE IF UN-NORMALIZATION REQUIRED. 050213,002751: 00,3650 13713 TCF ACOSSHR 050214,002752: 050215,002753: # Page 1172 050216,002754: 00,3651 52155 ACOS3 DXCH MPAC # SET UP FOR POLYNOMIAL EVALUATION. 050217,002755: 00,3652 52134 DXCH BUF2 050218,002756: 00,3653 52155 DXCH MPAC 050219,002757: 050220,002758: 00,3654 07171 TC POLY 050221,002759: 00,3655 00006 DEC 6 B-14 050222,002760: 00,3656 13240 23630 2DEC +.353553385 # COEFFICIENTS ARE C 2(+I)/PISQRT(2) WHERE 050223,002761: 00,3660 74721 47775 2DEC* -.0483017006 B+1* # I 050224,002762: 00,3662 02440 20237 2DEC* +.0200273085 B+2* # WEHRE C STANDS FOR ORIGINAL COEFFS. 050225,002763: 00,3664 75067 70742 2DEC* -.0112931863 B+3* 050226,002764: 00,3666 03436 26756 2DEC* +.00695311612 B+4* 050227,002765: 00,3670 74037 57640 2DEC* -.00384617957 B+5* 050228,002766: 00,3672 03046 07143 2DEC* +.001501297736 B+6* 050229,002767: 00,3674 76654 42244 2DEC* -.000284160334 B+7* 050230,002768: 050231,002769: 00,3676 32470 CAF LBUF2 # DO FINAL MULTIPLY AND GO TO ANY 050232,002770: 00,3677 07055 TC DMPSUB -1 # EPILOGUE SEQUENCES. 050233,002771: 00,3700 00136 TC ESCAPE 050234,002772: 050235,002773: 00,3701 00006 SUBTR EXTEND # EPILOGUE FOR NEGATIVE INPUTS TO ARCCOS. 050236,002774: 00,3702 40155 DCS MPAC 050237,002775: 00,3703 64675 AD HALF # FORMS PI - ARCCOS(-X) = ARCCOS(X). 050238,002776: 00,3704 52155 DXCH MPAC 050239,002777: 00,3705 00137 TC ESCAPE2 # GO TO POSSIBLE ARCSIN EPILOGUE. 050240,002778: 050241,002779: 00,3706 00006 ASINEX EXTEND 050242,002780: 00,3707 40155 DCS MPAC # ARCSIN EPILOGUE -- GET ARCSIN(X) 050243,002781: 00,3710 64676 AD QUARTER # = PI/2 - ARCCOS(X). 050244,002782: 00,3711 52155 DXCH MPAC 050245,002783: 00,3712 16030 LDANZIG TCF DANZIG 050246,002784: 050247,002785: # Page 1173 050248,002786: 00,3713 50000 ACOSSHR INDEX A # THE SHIFT RIGHT IS LESS THAN 14 SINCE 050249,002787: 00,3714 34675 CAF BIT14 # THE INPUT WAS NON-ZERO DP. 050250,002788: 00,3715 54135 TS MPTEMP 050251,002789: 00,3716 02073 TC VSHRRND # DP SHIFT RIGHT AND ROUND. 050252,002790: 00,3717 13651 TCF ACOS3 # PROCEED. 050253,002791: 050254,002792: 00,3720 00006 ACOSOVF EXTEND # IF MAJOR PART WAS ONLY 1 MORE THAN .5, 050255,002793: 00,3721 13636 BZF ACOS=0 # CALL ANSWER ZERO. 050256,002794: 050257,002795: 00,3722 05537 ACOSABRT TC ALARM # IF OVERFLOW, CALL ANSWER ZERO BUT 050258,002796: 00,3723 01301 OCT 1301 # SOUND AN ALARM. 050259,002797: 050260,002798: 00,3724 34714 CAF ZERO 050261,002799: 00,3725 13636 TCF ACOS=0 050262,002800: 050263,002801: 00,3726 34676 ACOSZERO CAF QUARTER # ACOS(0) = PI/2. 050264,002802: 00,3727 13637 TCF ACOS=0 +1 # SET MPAC AND EXIT VIA ESCAPE. 050265,002803: 050266,002804: 00,3730 77763 NEG12 DEC -12 B-14 050267,002805: 00,3731 13701 TCSUBTR TCF SUBTR 050268,002806: 050269,002807: # Page 1174 050270,002808: # THE FOLLOWING INSTRUCTIONS ARE AVAILABLE FOR SETTING, MODIFYING, AND BRANCHING ON INDEX REGISTERS: 050271,002809: # 1. AXT ADDRESS TO INDEX TRUE. 050272,002810: # 2. AXC ADDRESS TO INDEX COMPLEMENTED. 050273,002811: # 3. LXA LOAD INDEX FROM ERASABLE. 050274,002812: # 4. LXC LOAD INDEX COMPLEMENTED FROM ERASABLE. 050275,002813: # 5. SCA STORE INDEX IN ERASABLE. 050276,002814: # 6. XCHX EXCHANGE INDEX REGISTER WITH ERASABLE. 050277,002815: # 7. INCR INCREMENT INDEX REGISTER. 050278,002816: # 8. XAD ERASABLE ERASABLE ADD TO INDEX REGISTER. 050279,002817: # 9. XSU ERASABLE SUBTRACT FROM INDEX REGISTER. 050280,002818: # 10. TIX BRANCH ON INDEX REGISTER AND DECREMENT. 050281,002819: 050282,002820: 01,2371 BANK 01 050283,002821: 050284,002822: 01,2371 COUNT 01/INTER 050285,002823: 050286,002824: 01,2371 02466 AXT TC TAGSUB # SELECT APPROPRIATE INDEX REGISTER. 050287,002825: 01,2372 30117 CA POLISH 050288,002826: 01,2373 50130 XSTORE INDEX INDEXLOC # CONTAINS C(FIXLOC) OR C(FIXLOC)+1 050289,002827: 01,2374 54046 TS X1 050290,002828: 01,2375 16030 TCF DANZIG 050291,002829: 050292,002830: 01,2376 02466 AXC TC TAGSUB 050293,002831: 01,2377 40117 CS POLISH 050294,002832: 01,2400 02373 TC XSTORE 050295,002833: 050296,002834: 01,2401 02454 LXA TC 15ADRERS # LOAD INDEX REGISTER FROM ERASABLE. 050297,002835: 01,2402 50117 INDEX POLISH 050298,002836: 01,2403 30000 CA 0 050299,002837: 01,2404 12373 TCF XSTORE 050300,002838: 050301,002839: 01,2405 02454 LXC TC 15ADRERS # LOAD NDX REG FROM ERASABLE COMPLEMENTED. 050302,002840: 01,2406 50117 INDEX POLISH 050303,002841: 01,2407 40000 CS 0 050304,002842: 01,2410 12373 TCF XSTORE 050305,002843: 050306,002844: 01,2411 02454 SXA TC 15ADRERS # STORE INDEX REGISTER IN ERASABLE. 050307,002845: 01,2412 50130 INDEX INDEXLOC 050308,002846: 01,2413 30046 CA X1 050309,002847: 01,2414 50117 MSTORE1 INDEX POLISH 050310,002848: 01,2415 54000 TS 0 050311,002849: 01,2416 16030 TCF DANZIG 050312,002850: 050313,002851: # Page 1175 050314,002852: 01,2417 02454 XCHX TC 15ADRERS # EXCHANGE INDEX REGISTER WITH ERASABLE. 050315,002853: 01,2420 50117 INDEX POLISH 050316,002854: 01,2421 30000 CA 0 050317,002855: 01,2422 50130 INDEX INDEXLOC 050318,002856: 01,2423 56046 XCH X1 050319,002857: 01,2424 12414 TCF MSTORE1 050320,002858: 050321,002859: 01,2425 02454 XAD TC 15ADRERS # ADD ERASABLE TO INDEX REGISTER. 050322,002860: 01,2426 50117 INDEX POLISH 050323,002861: 01,2427 30000 CA 0 050324,002862: 01,2430 50130 XAD2 INDEX INDEXLOC 050325,002863: 01,2431 26046 ADS X1 # IGNORING OVERFLOWS. 050326,002864: 01,2432 16030 TCF DANZIG 050327,002865: 050328,002866: 01,2433 02466 INCR TC TAGSUB # INCREMENT INDEX REGISTER. 050329,002867: 01,2434 30117 CA POLISH 050330,002868: 01,2435 12430 TCF XAD2 050331,002869: 050332,002870: 01,2436 02454 XSU TC 15ADRERS # SUBTRACT ERASABLE FROM INDEX REGISTER. 050333,002871: 01,2437 50117 INDEX POLISH 050334,002872: 01,2440 40000 CS 0 050335,002873: 01,2441 12430 TCF XAD2 050336,002874: 050337,002875: 01,2442 02466 TIX TC TAGSUB # BRANCH AND DECREMENT ON INDEX. 050338,002876: 01,2443 50130 INDEX INDEXLOC 050339,002877: 01,2444 40050 CS S1 050340,002878: 01,2445 50130 INDEX INDEXLOC 050341,002879: 01,2446 60046 AD X1 050342,002880: 01,2447 00006 EXTEND # NO OPERATION IF DECREMENTED INDEX IS 050343,002881: 01,2450 66030 BZMF DANZIG # NEGATIVE OR ZERO. 050344,002882: 050345,002883: 01,2451 50130 DOTIXBR INDEX INDEXLOC 050346,002884: 01,2452 56046 XCH X1 # IGNORING OVERFLOWS. 050347,002885: 050348,002886: 01,2453 16615 TCF GOTO # DO THE BRANCH USING THE CADR IN POLISH. 050349,002887: 050350,002888: # Page 1176 050351,002889: # SUBROUTINE TO CONVERT AN ERASABLE ADDRESS (11 BITS) TO AN EBANK SETTING AND SUBADDRESS. 050352,002890: 050353,002891: 01,2454 40117 15ADRERS CS POLISH 050354,002892: 01,2455 64727 AD DEC45 050355,002893: 01,2456 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA? 050356,002894: 01,2457 30120 CA FIXLOC # YES. ADD FIXLOC. EBANK OK AS IS. 050357,002895: 01,2460 12465 TCF +5 050358,002896: 050359,002897: 01,2461 34744 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS. 050360,002898: 01,2462 56117 XCH POLISH 050361,002899: 01,2463 54003 TS EBANK 050362,002900: 01,2464 74373 MASK LOW8 050363,002901: 01,2465 26117 +5 ADS POLISH # FALL INTO TAGSUB, AND RETURN VIA Q. 050364,002902: 050365,002903: # SUBROUTINE WHICH SETS THE ADDRESS OF THE SPECIFIED INDEX IN INDEXLOC. (ACTUALLY, THE ADDRESS -38D.) 050366,002904: 050367,002905: 01,2466 30120 TAGSUB CA FIXLOC 050368,002906: 01,2467 54130 TS INDEXLOC 050369,002907: 050370,002908: 01,2470 10020 CCS CYR # BIT 15 SPECIFIES INDEX. 050371,002909: 01,2471 24130 INCR INDEXLOC # 0 MEANS USE X2. 050372,002910: 01,2472 00002 TC Q 050373,002911: 01,2473 00002 TC Q # 1 FOR X1. 050374,002912: 050375,002913: # Page 1177 050376,002914: # MISCELLANEOUS OPERATION CODES WITH DIRECT ADDRESSES. INCLUDED HERE ARE: 050377,002915: # 1. ITA STORE CPRET (RETURN ADDRESS) IN ERASABLE. 050378,002916: # 2. CALL CALL A SUBROUTINE, LEAVING RETURN IN QPRET. 050379,002917: # 3. RTB RETURN TO BASIC LANGUAGE AT THE GIVEN ADDRESS. 050380,002918: # 4. BHIZ BRANCH IF THE HIGHORDER OF MPAC IS ZERO (SINGLE PRECISION). 050381,002919: # 5. BOV BRANCH ON OVERFLOW. 050382,002920: # 6. GOTO SIMPLE SEQUENCE CHANGE. 050383,002921: 050384,002922: 01,2474 10020 RTB/BHIZ CCS CYR 050385,002923: 01,2475 30117 RTB CA POLISH 050386,002924: 01,2476 04560 TC SWCALL -1 # SO A "TC Q" FROM ROUTINE LEADS TO DANZIG 050387,002925: 050388,002926: 01,2477 10154 BHIZ CCS MPAC 050389,002927: 01,2500 16030 TCF DANZIG 050390,002928: 01,2501 16615 TCF GOTO 050391,002929: 01,2502 16030 TCF DANZIG 050392,002930: 01,2503 16615 TCF GOTO 050393,002931: 050394,002932: 01,2504 10121 BOV(B) CCS OVFIND # BRANCH ON OVERFLOW TO BASIC OR INTERP. 050395,002933: 01,2505 12507 TCF +2 050396,002934: 01,2506 16030 TCF DANZIG 050397,002935: 01,2507 54121 TS OVFIND 050398,002936: 01,2510 10020 CCS CYR 050399,002937: 01,2511 12475 TCF RTB # IF BASIC. 050400,002938: 01,2512 00360 B5TOBB OCT 360 050401,002939: 01,2513 16615 TCF GOTO 050402,002940: 050403,002941: # Page 1178 050404,002942: 01,2514 10020 BZE/GOTO CCS CYR # SEE WHICH OP-CODE IS DESIRED. 050405,002943: 01,2515 06672 TC BRANCH # DO BZE. 050406,002944: 01,2516 16030 TCF DANZIG 050407,002945: 01,2517 16615 TCF GOTO # DO GOTO. 050408,002946: 01,2520 16030 TCF DANZIG 050409,002947: 050410,002948: 01,2521 10020 BPL/BMN CCS CYR 050411,002949: 01,2522 12530 TCF BPL 050412,002950: 01,2523 5B10 # DEC 5 B+10 # SHIFTS OP CODE IN SWITCH INSTRUCTION ADR 050413,002951: 01,2523 12000 DEC 5 B-4 # RSB 2004. 050414,002952: 050415,002953: 01,2524 06672 TC BRANCH # DO BMN 050416,002954: 01,2525 16030 TCF DANZIG 050417,002955: 01,2526 16030 TCF DANZIG 050418,002956: 01,2527 16615 TCF GOTO # ONLY IF NNZ. 050419,002957: 050420,002958: 01,2530 06672 BPL TC BRANCH 050421,002959: 01,2531 16615 TCF GOTO # IF POSITIVE OR ZERO. 050422,002960: 01,2532 16615 TCF GOTO 050423,002961: 01,2533 16030 TCF DANZIG 050424,002962: 050425,002963: 01,2534 10020 CALL/ITA CCS CYR 050426,002964: 01,2535 16607 TCF CALL 050427,002965: 050428,002966: 01,2536 05640 TC CCSHOLE 050429,002967: 01,2537 02454 TC 15ADRERS # STORE QPRET. (TAGSUB AFTER 15ADRERS IS 050430,002968: 01,2540 50120 INDEX FIXLOC # SLOW IN THIS CASE, BUT SAVES STORAGE.) 050431,002969: 01,2541 30052 CA QPRET 050432,002970: 01,2542 12414 TCF MSTORE1 050433,002971: 050434,002972: # Page 1179 050435,002973: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR ALTERING AND TESTING INTERPRETATIVE SWITCHES: 050436,002974: # 00 BONSET SET A SWITCH AND DO A GOTO IF IT WAS ON. 050437,002975: # 01 SETGO SET A SWITCH AND DO A GOTO. 050438,002976: # 02 BOFSET SET A SWITCH AND DOA GOTO IF IT WAS OFF 050439,002977: # 03 SET SET A SWITCH. 050440,002978: # 04 BONINV INVERT A SWITCH AND BRANCH IF IT WAS ON. 050441,002979: # 05 INVGO INVERT A SWITCH AND DO A GOTO. 050442,002980: # 06 BOFINV INVERT A SWITCH AND BRANCH IF IT WAS OFF 050443,002981: # 07 INVERT INVERT A SWITCH. 050444,002982: # 10 BONCLR CLEAR A SWITCH AND BRANCH IF IT WAS ON. 050445,002983: # 11 CLRGO CLEAR A SWITCH AND DO A GOTO. 050446,002984: # 12 BOFCLR CLEAR A SWITCH AND BRANCH IF IT WAS OFF. 050447,002985: # 13 CLEAR CLEAR A SWITCH. 050448,002986: # 14 BON BRANCH IF A SWITCH WAS ON. 050449,002987: # 16 BOFF BRANCH IF A SWITCH WAS OFF. 050450,002988: # THE ADDRESS SUPPLIED WITH THE SWITCH INSTRUCTION IS INTERPRETED AS FOLLOWS: 050451,002989: # BITS 1-4 SWITCH BIT NUMBER (1-15). 050452,002990: # BITS 5-8 SWITCH OPERATION NUMBER 050453,002991: # BITS 9- SWITCH WORD NUMBER (UP TO 64 SWITCH WORDS). 050454,002992: # THE ADDRESS ITSELF IS MADE UP BY THE YUL SYSTEM ASSEMBLER. THE BRANCH INSTRUCTIONS REQUIRE TWO 050455,002993: # ADDRESSES, THE SECOND TAKEN AS THE DIRECT (OR INDIRECT IF IN ERASABLE) ADDRESS OF THE BRANCH. 050456,002994: 050457,002995: 01,2543 34721 SWITCHES CAF LOW4 # LEAVE THE SWITCH BIT IN SWBIT. 050458,002996: 01,2544 70117 MASK POLISH 050459,002997: 01,2545 50000 INDEX A 050460,002998: 01,2546 34674 CAF BIT15 # (NUMBER FROM LEFT TO RIGHT.) 050461,002999: 01,2547 54131 TS SWBIT 050462,003000: 050463,003001: 01,2550 34704 CAF BIT7 # LEAVE THE SWITCH NUMBER IN SWWORD. 050464,003002: 01,2551 00006 EXTEND 050465,003003: 01,2552 70117 MP POLISH 050466,003004: 01,2553 54130 TS SWWORD 050467,003005: 050468,003006: 01,2554 00004 INHINT # DURING SWITCH CHANGE SO RUPT CAN USE TOO 050469,003007: 01,2555 50000 INDEX A # LEAVE THE SWITCH WORD ITSELF IN L. 050470,003008: 01,2556 30074 CA STATE 050471,003009: 01,2557 54002 TS Q # Q WILL BE USED AS A CHANNEL. 050472,003010: # Page 1180 050473,003011: 01,2560 34700 CAF BIT11 050474,003012: 01,2561 00006 EXTEND # DISPATCH SWITCH BIT OPERATION AS IN BITS 050475,003013: 01,2562 70117 MP POLISH # 7-8 OF POLISH. 050476,003014: 01,2563 72623 MASK B3TOB4 # GETS 4X2-BIT CODE. 050477,003015: 01,2564 50000 INDEX A 050478,003016: 01,2565 12566 TCF +1 050479,003017: 050480,003018: 01,2566 30131 +1 CA SWBIT # 00 -- SET SWITCH IN QUESTION. 050481,003019: 01,2567 00006 EXTEND 050482,003020: 01,2570 04002 ROR QCHAN 050483,003021: 01,2571 12600 TCF SWSTORE 050484,003022: 050485,003023: 01,2572 30131 +5 CA SWBIT # 01 -- INVERT SWITCH. 050486,003024: 01,2573 00006 EXTEND 050487,003025: 01,2574 06002 RXOR QCHAN 050488,003026: 01,2575 12600 TCF SWSTORE 050489,003027: 050490,003028: 01,2576 40131 +9D CS SWBIT # 10 -- CLEAR. 050491,003029: 01,2577 70002 MASK Q 050492,003030: 01,2600 50130 SWSTORE INDEX SWWORD 050493,003031: 01,2601 54074 TS STATE # NEW SWITCH WORD. 050494,003032: 050495,003033: # Page 1181 050496,003034: 01,2602 00003 +13D RELINT # 11 -- NOOP. 050497,003035: 01,2603 34676 CAF BIT13 050498,003036: 01,2604 00006 EXTEND # DISPATCH SEQUENCE CHANGING OR BRANCING 050499,003037: 01,2605 70117 MP POLISH # CODE. 050500,003038: 01,2606 72623 MASK B3TOB4 050501,003039: 01,2607 50000 INDEX A 050502,003040: 01,2610 12611 TCF +1 # ORIGINALLY STORED IN BITS 5-6 050503,003041: 050504,003042: 01,2611 40002 +1 CS Q # 00 -- BRANCH IF ON. 050505,003043: 01,2612 70131 TEST MASK SWBIT 050506,003044: 01,2613 10000 CCS A 050507,003045: 01,2614 12624 TCF SWSKIP 050508,003046: 050509,003047: 01,2615 16664 +5 TCF SWBRANCH # 01 -- GO TO. 050510,003048: 050511,003049: 01,2616 12624 TCF SWSKIP # HERE ONLY ON BIT 15. 050512,003050: 050513,003051: 01,2617 05640 TC CCSHOLE 050514,003052: 01,2620 05640 TC CCSHOLE 050515,003053: 050516,003054: 01,2621 30002 +9D CA Q # 10 -- BRANCH IF OFF. 050517,003055: 01,2622 12612 TCF TEST 050518,003056: 050519,003057: 01,2623 00014 B3TOB4 OCT 0014 050520,003058: 01,2624 24164 SWSKIP INCR LOC 050521,003059: 050522,003060: 01,2625 01,2543 SW/ EQUALS SWITCHES 050523,003061: 050524,003062: 01,2625 16030 +13D TCF DANZIG # 11 -- NOOP. 050525,003063: 050526,003064: 050527,003065: End of include-file INTERPRETER.agc. Parent file is MAIN.agc