Source Code

043381,000001: # Copyright: Public domain. 043382,000002: # Filename: INTERPRETER.agc 043383,000003: # Purpose: Part of the source code for Luminary 1A build 099. 043384,000004: # It is part of the source code for the Lunar Module's (LM) 043385,000005: # Apollo Guidance Computer (AGC), for Apollo 11. 043386,000006: # Assembler: yaYUL 043387,000007: # Contact: Ron Burkey <info@sandroid.org>. 043388,000008: # Website: www.ibiblio.org/apollo. 043389,000009: # Pages: 1002-1094 043390,000010: # Mod history: 2009-05-25 RSB Adapted from the corresponding 043391,000011: # Luminary131 file, using page 043392,000012: # images from Luminary 1A. 043393,000013: 043394,000014: # This source code has been transcribed or otherwise adapted from 043395,000015: # digitized images of a hardcopy from the MIT Museum. The digitization 043396,000016: # was performed by Paul Fjeld, and arranged for by Deborah Douglas of 043397,000017: # the Museum. Many thanks to both. The images (with suitable reduction 043398,000018: # in storage size and consequent reduction in image quality as well) are 043399,000019: # available online at www.ibiblio.org/apollo. If for some reason you 043400,000020: # find that the images are illegible, contact me at info@sandroid.org 043401,000021: # about getting access to the (much) higher-quality images which Paul 043402,000022: # actually created. 043403,000023: 043404,000024: # Notations on the hardcopy document read, in part: 043405,000025: 043406,000026: # Assemble revision 001 of AGC program LMY99 by NASA 2021112-61 043407,000027: # 16:27 JULY 14, 1969 043408,000028: 043409,000029: # Page 1002 043410,000030: # SECTION 1: DISPATCHER 043411,000031: 043412,000032: # ENTRY TO THE INTERPRETER. INTPRET SETS LOC TO THE FIRST INSTRUCTION, BANKSET TO THE BBANK OF THE 043413,000033: # OBJECT INTERPRETIVE PROGRAM, AND INTBIT15 TO THE BIT15 CONTENTS OF FBANK. INTERPRETIVE PROGRAMS MAY BE IN 043414,000034: # VIRTUALLY ALL BANKS PRESENT UNDER ANY SUPER-BANK SETTING, WITH THE RESTRICTION THAT PROGRAMS IN HIGH BANKS 043415,000035: # (BIT15 OF FBANK = 1) DO NOT REFER TO LOWBANKS, AND VICE-VERSA. THE INTERPRETER DOES NOT SWITCH SUPERBANKS. 043416,000036: # E-BANK SWITCHING OCCURS WHENEVER GENERAL ERASABLE (100-3777) IS ADDRESSED. 043417,000037: 043418,000038: 6037 BLOCK 03 043419,000039: 043420,000040: 6037 COUNT* $$/INTER 043421,000041: 6037 00003 INTPRET RELINT 043422,000042: 6040 00006 EXTEND # SET LOC TO THE WORD FOLLOWING THE TC. 043423,000043: 6041 22164 QXCH LOC 043424,000044: 043425,000045: 6042 30006 +2 CA BBANK # INTERPRETIVE BRANCHES FINISH HERE. 043426,000046: 6043 54165 TS BANKSET 043427,000047: 6044 74735 MASK BIT15 # GET 15TH BIT FOR INDEXABLE ADDRESSES. 043428,000048: 6045 54115 TS INTBIT15 043429,000049: 043430,000050: 6046 54023 TS EDOP # MAKE SURE NO INSTRUCTIONS LEFT OVER 043431,000051: 043432,000052: 6047 16070 TCF NEWOPS # PICK UP OP CODE PAIR AND BEGIN. 043433,000053: 043434,000054: 6050 22006 INTRSM LXCH BBANK # RESUME SUSPENDED INTERPRETIVE JOB 043435,000055: 6051 16042 TCF INTPRET +3 043436,000056: 043437,000057: # DLOAD LOADS MPAC, MPAC +1, LEAVING ZERO IN MPAC +2. 043438,000058: 043439,000059: 6052 00006 DLOAD EXTEND 043440,000060: 6053 50116 INDEX ADDRWD 043441,000061: 6054 30001 DCA 0 # LOAD DP C(C(ADDRWD)) INT MPAC,MPAC +1 043442,000062: 6055 52155 SLOAD2 DXCH MPAC 043443,000063: 6056 34755 CAF ZERO # ZERO MPAC +2 043444,000064: 043445,000065: # Page 1003 043446,000066: # AT THE END OF MOST INSTRUCTIONS, CONTROL IS GIVEN TO DANZIG TO DISPATCH THE NEXT OPERATION. 043447,000067: 043448,000068: 6057 54156 TS MPAC +2 # AND DECLARE DP MODE 043449,000069: 043450,000070: 6060 54163 NEWMODE TS MODE # PROLOGUE FOR MODE-CHANGING INSTRUCTIONS. 043451,000071: 043452,000072: 6061 30165 DANZIG CA BANKSET # SET BBANK BEFORE TESTING NEWJOB SO THAT 043453,000073: 6062 54006 TS BBANK # IT MAY BE SAVED DIRECTLY BY CHANJOB. 043454,000074: 043455,000075: 6063 10023 NOIBNKSW CCS EDOP # SEE IF AN ORDER CODE IS LEFT OVER FROM 043456,000076: 6064 16077 TCF OPJUMP # THE LAST PAIR RETRIEVED. IF SO, EXECUTE. 043457,000077: # EDOP IS SET TO ZERO ON ITS RE-EDITIING. 043458,000078: 043459,000079: 6065 10067 CCS NEWJOB # SEE IF A JOB OF HIGHER PRIORITY IS 043460,000080: 6066 15126 TCF CHANG2 # PRESENT, AND IF SO, CHANGE JOBS. 043461,000081: 043462,000082: 6067 24164 INCR LOC # ADVANCE THE LOCATION COUNTER. 043463,000083: 043464,000084: # ITRACE (1) REFERS TO "NEWOPS" 043465,000085: 6070 50164 NEWOPS INDEX LOC # ENTRY TO BEGIN BY PICKING OP CODE PAIR. 043466,000086: 6071 30000 CA 0 # MAY BE AN OPCODE PAIR OR A STORE CODE. 043467,000087: 6072 10000 CCS A # TEST SIGN AND GET DABS(A). 043468,000088: 6073 16362 TCF DOSTORE # PROCESS STORE CODE. 043469,000089: 043470,000090: 6074 00177 LOW7 OCT 177 043471,000091: 043472,000092: 6075 54023 TS EDOP # OP CODE PAIR. LEAVE THE OTHER IN EDOP 043473,000093: 6076 76074 MASK LOW7 # WHERE CCS EDOP WILL HONOR IT NEXT. 043474,000094: 043475,000095: 6077 54020 OPJUMP TS CYR # LOWWD ENTERS HERE IF A RIGHT-HAND OP 043476,000096: 6100 10020 CCS CYR # CODE IS TO BE PROCESSED. TEST PREFICES. 043477,000097: 6101 16247 TCF OPJUMP2 # TEST SECOND PREFIX BIT. 043478,000098: 043479,000099: 6102 16743 TCF EXIT # +0 OP CODE IS EXIT 043480,000100: 043481,000101: # Page 1004 043482,000102: # PROCESS ADDRESSES WHICH MAY BE DIRECT, INDEXED, OR REFERENCE THE PUSHDOWN LIST. 043483,000103: 043484,000104: 6103 74753 ADDRESS MASK BIT1 # SEE IF ADDRESS IS INDEXED. CYR CONTAINED 043485,000105: 6104 10000 CCS A # 400XX, SO BIT 1 IS NOW AS IT WAS IN CYR. 043486,000106: 6105 16146 TCF INDEX # FORM INDEXED ADDRESS. 043487,000107: 043488,000108: 6106 50164 DIRADRES INDEX LOC # LOOK AHEAD TO NEXT WORD TO SEE IF 043489,000109: 6107 40001 OCT40001 CS 1 # ADDRESS IS GIVEN. 043490,000110: 6110 10000 CCS A 043491,000111: 6111 16215 TCF PUSHUP # IF NOT. 043492,000112: 043493,000113: 6112 77773 NEG4 DEC -4 B-14 043494,000114: 043495,000115: 6113 24164 INCR LOC # IF SO, TO SHOW WE PICKED UP A WORD. 043496,000116: 6114 54116 TS ADDRWD 043497,000117: 043498,000118: # Page 1005 043499,000119: # FINAL DIGESTION OF DIRECT ADDRESSES OF OP CODES WITH 01 PREFIX IS DONE HERE. IN EACH CASE, THE 043500,000120: # REQUIRED 12-BIT SUB-ADDRESS IS LEFT IN ADDRWD, WITH ANY REQUIRED E OR F BANK SWITCHING DONE. ADDRESSES LESS 043501,000121: # 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. 043502,000122: 043503,000123: 6115 66251 AD -ENDVAC # SEE IF ADDRESS RELATIVE TO WORK AREA. 043504,000124: 6116 10000 CCS A 043505,000125: 6117 67743 AD -ENDERAS # IF NOT, SEE IF IN GENERAL ERASABLE. 043506,000126: 6120 16125 TCF IERASTST 043507,000127: 043508,000128: 6121 30120 NETZERO CA FIXLOC # IF SO, LEAVE THE MODIFIED ADDRESS IN 043509,000129: 6122 26116 ADS ADDRWD # ADDRWD AND DISPATCH. 043510,000130: 6123 50020 ITR15 INDEX CYR # THIS INDEX MAKES THE NEXT INSTRUCTION 043511,000131: 6124 76273 7 INDJUMP -1 # TCF INDJUMP + OP, EDITING CYR. 043512,000132: 043513,000133: 6125 00006 IERASTST EXTEND 043514,000134: 6126 66136 BZMF GEADDR # GO PROCESS GENERAL-ERASABLE ADDRESS. 043515,000135: 043516,000136: 6127 75012 MASK LOW10 # FIXED BANK ADDRESS. RESTORE AND ADD B15. 043517,000137: 6130 65012 AD LOW10 # SWITCH BANKS AND LEAVE SUBADDRESS IN 043518,000138: 6131 56116 XCH ADDRWD # ADDRWD FOR OPERAND RETRIEVAL. (THIS 043519,000139: 6132 60115 AD INTBIT15 # METHOD PRECLUDES USE OF THE LAST 043520,000140: 6133 54004 TS FBANK # LOCATION IN EACH FBANK.) 043521,000141: 6134 50020 ITR12 INDEX CYR 043522,000142: 6135 76273 7 INDJUMP -1 043523,000143: 043524,000144: 6136 74357 GEADDR MASK LOW8 043525,000145: 6137 65007 AD OCT1400 043526,000146: 6140 56116 XCH ADDRWD 043527,000147: 6141 54003 TS EBANK 043528,000148: 6142 50020 ITR10 INDEX CYR 043529,000149: 6143 76273 7 INDJUMP -1 043530,000150: 043531,000151: # Page 1006 043532,000152: # THE FOLLOWING ROUTINE PROCESSES INTERPRETIVE INDEXED ADDRESSES. AN INTERPRETER INDEX REGISTER MAY 043533,000153: # CONTAIN THE ADDRESS OF ANY ERASABLE REGISTER (0-42 BEING RELATIVE TO THE VAC AREA) OR ANY INTERPRETIVE PROGRAM 043534,000154: # BANK, OR ANY INTEGER IN THAT RANGE. 043535,000155: 043536,000156: 6144 37733 DODLOAD* CAF DLOAD* # STODL* COMES HERE TO PROCESS LOAD ADR. 043537,000157: 6145 54020 TS CYR # (STOVL* ENTERS HERE). 043538,000158: 043539,000159: 6146 30120 INDEX CA FIXLOC # SET UP INDEX LOCATION. 043540,000160: 6147 54130 TS INDEXLOC 043541,000161: 6150 24164 INCR LOC # (ADDRESS ALWAYS GIVEN). 043542,000162: 6151 50164 INDEX LOC 043543,000163: 6152 40000 CS 0 043544,000164: 6153 10000 CCS A # INDEX 2 IF ADDRESS STORED COMPLEMENTED. 043545,000165: 6154 24130 INCR INDEXLOC 043546,000166: 6155 16156 NOOP 043547,000167: 043548,000168: 6156 54116 TS ADDRWD # 14 BIT ADDRESS TO ADDRWD. 043549,000169: 6157 77742 MASK HIGH4 # IF ADDRESS GREATER THAN 2K, ADD INTBIT15 043550,000170: 6160 00006 EXTEND 043551,000171: 6161 16164 BZF INDEX2 043552,000172: 6162 30115 CA INTBIT15 043553,000173: 6163 26116 ADS ADDRWD 043554,000174: 043555,000175: 6164 50130 INDEX2 INDEX INDEXLOC 043556,000176: 6165 40046 CS X1 043557,000177: 6166 26116 ADS ADDRWD # DO AUGMENT, IGNORING AND CORRECTING OVF. 043558,000178: 043559,000179: 6167 77744 MASK HIGH9 # SEE IF ADDRESS IS IN WORK AREA. 043560,000180: 6170 00006 EXTEND 043561,000181: 6171 16204 BZF INDWORK 043562,000182: 6172 77742 MASK HIGH4 # SEE IF IN FIXED BANK. 043563,000183: 6173 00006 EXTEND 043564,000184: 6174 16206 BZF INDERASE 043565,000185: 043566,000186: 6175 30116 CA ADDRWD # IN FIXED -- SWITCH BANKS AND CREATE 043567,000187: 6176 54004 TS FBANK # SUB-ADDRESS 043568,000188: 6177 75012 MASK LOW10 043569,000189: 6200 64741 AD 2K 043570,000190: 6201 54116 TS ADDRWD 043571,000191: 6202 50020 ITR11 INDEX CYR 043572,000192: 6203 36273 3 INDJUMP -1 043573,000193: 043574,000194: 6204 30120 INDWORK CA FIXLOC # MAKE ADDRWD RELATIVE TO WORK AREA. 043575,000195: 6205 16212 TCF ITR13 -1 043576,000196: 043577,000197: 6206 35007 INDERASE CA OCT1400 043578,000198: 6207 56116 XCH ADDRWD 043579,000199: 6210 54003 TS EBANK 043580,000200: 6211 74357 MASK LOW8 043581,000201: 6212 26116 -1 ADS ADDRWD 043582,000202: # Page 1007 043583,000203: 6213 50020 ITR13 INDEX CYR 043584,000204: 6214 36273 3 INDJUMP -1 043585,000205: 043586,000206: # Page 1008 043587,000207: # PUSH-UP ROUTINES. WHEN NO OPERAND ADDRESS IS GIVEN, THE APPROPRIATE OPERAND IS TAKEN FROM THE PUSH-DOWN 043588,000208: # LIST. IN MOST CASES THE MODE OF THE RESULT (VECTOR OR SCALAR) OF THE LAST ARITHMETIC OPERATION PERFORMED 043589,000209: # IS THE SAME AS THE TYPE OF OPERAND DESIRED (ALL ADD/SUBTRACT ETC.). EXCEPTIONS TO THIS GENERAL RULE ARE LISTED 043590,000210: # BELOW (NOTE THAT IN EVERY CASE THE MODE REGISTER IS LEFT INTACT): 043591,000211: 043592,000212: # 1. VXSC AND V/SC WANT THE OPPOSITE TYPE OF OPERAND, E.G., IF THE LAST OPERATION YIELDED A VECTOR 043593,000213: # RESULT, VXSC WANTS A SCALAR. 043594,000214: 043595,000215: # 2. THE LOAD CODES SHOULD LOAD THE ACCUMULATOR INDEPENDENT OF THE RESULT OF THE LAST OPERATION. THIS 043596,000216: # INCLUDES VLOAD, DLOAD, TLOAD, PDDL, AND PDVL (NO PUSHUP WITH SLOAD). 043597,000217: 043598,000218: # 3. SOME ARITHMETIC OPERATIONS REQUIRE A STANDARD TYPE OF OPERAND REGARDLESS OF THE PREVIOUS OPERATION. 043599,000219: # THIS INCLUDES SIGN WANTING DP AND TAD REQUIRING TP. 043600,000220: 043601,000221: 6215 34360 PUSHUP CAF OCT23 # IF THE LOW 5 BITS OF CYR ARE LESS THAN 043602,000222: 6216 70020 MASK CYR # 20, THIS OP REQUIRES SPECIAL ATTENTION. 043603,000223: 6217 66222 AD -OCT10 # (NO -0). 043604,000224: 6220 10000 CCS A 043605,000225: 6221 16233 TCF REGUP # FOR ALL CODES GREATEER THAN OCT 7. 043606,000226: 043607,000227: 6222 77767 -OCT10 OCT -10 043608,000228: 043609,000229: 6223 66112 AD NEG4 # WE NOW HAVE 7 -- OP CODE (MOD4). SEE IF 043610,000230: 6224 10000 CCS A # THE OP CODE (MOD4) IS THREE (REVERSE). 043611,000231: 6225 50000 INDEX A # NO -- THE MODE IS DEFINITE. PICK UP THE 043612,000232: 6226 46244 CS NO.WDS 043613,000233: 6227 16235 TCF REGUP +2 043614,000234: 043615,000235: 6230 50163 INDEX MODE # FOR VXSC AND V/SC WE WANT THE REQUIRED 043616,000236: 6231 46242 CS REVCNT # PUSHLOC DECREMENT WITHOUT CHANGING THE 043617,000237: 6232 16235 TCF REGUP +2 # MODE AT THIS TIME. 043618,000238: 043619,000239: 6233 50163 REGUP INDEX MODE # MOST ALL OP CODES PUSHUP HERE. 043620,000240: 6234 46244 CS NO.WDS 043621,000241: 6235 26166 +2 ADS PUSHLOC 043622,000242: 6236 54116 TS ADDRWD 043623,000243: 6237 50020 ITR14 INDEX CYR 043624,000244: 6240 76273 7 INDJUMP -1 # (THE INDEX MAKES THIS A TCF.) 043625,000245: 043626,000246: 6241 00002 OCT 2 # REVERSE PUSHUP DECREMENT. VECTOR TAKES 2 043627,000247: 6242 00006 REVCNT OCT 6 # WORDS, SCALAR TAKES 6. 043628,000248: 6243 00006 OCT 6 043629,000249: 6244 00002 NO.WDS OCT 2 # CONVENTIONAL DECREMENT IS 6 WORDS VECTOR 043630,000250: 6245 00003 OCTAL3 OCT 3 # 2 IN DP, AND 3 IN TP. 043631,000251: 6246 00006 OCT 6 043632,000252: 043633,000253: # Page 1009 043634,000254: # TEST THE SECOND PREFIX BIT TO SEE IF THIS IS A MISCELLANEOUS OR A UNARY/SHORT SHIFT OPERATION. 043635,000255: 043636,000256: 6247 10020 OPJUMP2 CCS CYR # TEST SECOND PREFIX BIT. 043637,000257: 6250 16263 TCF OPJUMP3 # TEST THIRD BIT TO SEE IF UNARY OR SHIFT 043638,000258: 043639,000259: 6251 77722 -ENDVAC DEC -45 B-14 043640,000260: 043641,000261: # THE FOLLOWING ROUTINE PROCESSES ADDRESSES OF SUFFIX CLASS 10. THEY ARE BASICALLY WORK AREA ADDRESSES 043642,000262: # IN THE RANGE 0-52, ERASABLE ECADR CONSTANTS FROM 100-3777, AND FCADRS ABOVE THAT. ALL 15 BITS ARE AVAILABLE 043643,000263: # IN CONTRAST TO SUFFIX 1, IN WHICH ONLY THE LOW ORDER 14 ARE AVAILABLE. 043644,000264: 043645,000265: 6252 24164 15BITADR INCR LOC # (ENTRY HERE FROM STCALL). 043646,000266: 6253 50164 INDEX LOC # PICK UP ADDRESS WORD. 043647,000267: 6254 30000 CA 0 043648,000268: 6255 54117 TS POLISH # WE MAY NEED A SUBADDRESS LATER. 043649,000269: 043650,000270: 6256 35013 CAF LOW7+2K # THESE INSTRUCTIONS ARE IN BANK 1. 043651,000271: 6257 54004 TS FBANK 043652,000272: 6260 70020 MASK CYR 043653,000273: 6261 50000 ITR7 INDEX A 043654,000274: 6262 16334 TCF MISCJUMP 043655,000275: 043656,000276: # Page 1010 043657,000277: # COMPLETE THE DISPATCHING OF UNARY AND SHORT SHIFT OPERATIONS. 043658,000278: 043659,000279: 6263 54004 OPJUMP3 TS FBANK # CALL IN BANK 0 (BIT5S 11-15 OF A ARE 0.) 043660,000280: # ITRACE (6) REFERS TO "OPJUMP3" 043661,000281: 6264 10020 CCS CYR # TEST THIRD PREFIX BIT. 043662,000282: 6265 50000 INDEX A # THE DECREMENTED UNARY CODE IS IN BITS 043663,000283: 6266 12000 TCF UNAJUMP # 1-4 OF A (ZERO, EXIT, HAS BEEN DETECTED) 043664,000284: 043665,000285: 6267 10163 CCS MODE # IT'S A SHORT SHIFT CODE. SEE IF PRESENT 043666,000286: 6270 12017 TCF SHORTT # SCALAR OR VECTOR. 043667,000287: 6271 12017 TCF SHORTT 043668,000288: 6272 12121 TCF SHORTV # CALLS THE APPROPRIATE ROUTINE. 043669,000289: 043670,000290: 6273 4350 FBANKMSK EQUALS BANKMASK 043671,000291: 6273 00122 LVBUF ADRES VBUF 043672,000292: 043673,000293: # Page 1011 043674,000294: # THE FOLLOWING IS THE JUMP TABLE FOR OP CODES WHICH MAY HAVE INDEXABLE ADDRESSES OR MAY PUSH UP. 043675,000295: 043676,000296: 6274 16505 INDJUMP TCF VLOAD # 00 -- LOAD MPAC WITH A VECTOR. 043677,000297: 6275 17071 TCF TAD # 01 -- TRIPLE PRECISION ADD TO MPAC. 043678,000298: 6276 17655 TCF SIGN # 02 -- COMPLEMENT MPAC (V OR SC) IF X NEG. 043679,000299: 6277 17401 TCF VXSC # 03 -- VECTOR TIMES SCALAR. 043680,000300: 6300 16703 TCF CGOTO # 04 -- COMPUTED GO TO. 043681,000301: 6301 16470 TCF TLOAD # 05 -- LOAD MPAC WITH TRIPLE PRECISION. 043682,000302: 6302 16052 TCF DLOAD # 06 -- LOAD MPAC WITH A DP SCALAR. 043683,000303: 6303 17624 TCF V/SC # 07 -- VECTOR DIVIDED BY A SCALAR. 043684,000304: 043685,000305: 6304 16501 TCF SLOAD # 10 -- LOAD MPACIN SINGLE PRECISION. 043686,000306: 6305 16620 TCF SSP # 11 -- SET SINGLE PRECISION INTO X. 043687,000307: 6306 16523 TCF PDDL # 12 -- PUSH DOWN MPAC AND RE-LOAD IN DP. 043688,000308: 6307 17334 TCF MXV # 13 -- MATRIX POST-MULTIPLIED BY VECTOR. 043689,000309: 6310 16557 TCF PDVL # 14 -- PUSH DOWN AND VECTOR LOAD. 043690,000310: 6311 16626 TCF CCALL # 15 -- COMPUTED CALL. 043691,000311: 6312 17337 TCF VXM # 16 -- MATRIX PRE-MULTIPLIED BY VECTOR. 043692,000312: 6313 17616 TCF TSLC # 17 -- NORMALIZE MPAC (SCALAR ONLY). 043693,000313: 043694,000314: 6314 17574 TCF DMPR # 20 -- DP MULTIPLY AND ROUND. 043695,000315: 6315 17577 TCF DDV # 21 -- DP DIVIDE BY. 043696,000316: 6316 17603 TCF BDDV # 22 -- DP DIVIDE INTO. 043697,000317: 6317 17621 TCF GSHIFT # 23 -- GENERAL SHIFT INSTRUCTION 043698,000318: 6320 16751 TCF VAD # 24 -- VECTOR ADD. 043699,000319: 6321 16747 TCF VSU # 25 -- VECTOR SUBTRACT. 043700,000320: 6322 17036 TCF BVSU # 26 -- VECTOR SUBTRACT FROM. 043701,000321: 6323 17331 TCF DOT # 27 -- VECTOR DOT PRODUCT. 043702,000322: 043703,000323: 6324 17460 TCF VXV # 30 -- VECTOR CROSS PRODUCT. 043704,000324: 6325 17425 TCF VPROJ # 31 -- VECTOR PROJECTION. 043705,000325: 6326 17005 TCF DSU # 32 -- DP SUBTRACT. 043706,000326: 6327 17062 TCF BDSU # 33 -- DP SUBTRACT FROM. 043707,000327: 6330 16775 TCF DAD # 34 -- DP ADD. 043708,000328: # In the following line, the hardcopy had no operand. I added the +0. RSB 2009 043709,000329: 6331 16331 TCF +0 # 35 -- AVAILABLE 043710,000330: 6332 17572 TCF DMP1 # 36 -- DP MULTIPLY. 043711,000331: 6333 17613 TCF SETPD # 37 -- SET PUSH DOWN POINTER (DIRECT ONLY) 043712,000332: 043713,000333: # CODES 10 AND 14 MUST NOT PUSH UP. CODE 04 MAY BE USED FOR VECTOR DECLARE BEFORE PUSHUP IF DESIRED. 043714,000334: 043715,000335: # Page 1012 043716,000336: # THE FOLLOWING JUMP TABLE APPLIES TO INDEX, BRANCH, AND MISCELLANEOUS INSTRUCTIONS. 043717,000337: 043718,000338: 6334 12344 MISCJUMP TCF AXT # 00 -- ADDRESS TO INDEX TRUE. 043719,000339: 6335 12351 TCF AXC # 01 -- ADDRESS TO INDEX COMPLEMENTED. 043720,000340: 6336 12354 TCF LXA # 02 -- LOAD INDEX FROM ERASABLE. 043721,000341: 6337 12360 TCF LXC # 03 -- LOAD INDEX FROM COMPLEMENT OF ERAS. 043722,000342: 6340 12364 TCF SXA # 04 -- STORE INDEX IN ERASABLE. 043723,000343: 6341 12372 TCF XCHX # 05 -- EXCHANGE INDEX WITH ERASABLE. 043724,000344: 6342 12406 TCF INCR # 06 -- INCREMENT INDEX REGISTER. 043725,000345: 6343 12415 TCF TIX # 07 -- TRANSFER ON INDEX. 043726,000346: 043727,000347: 6344 12400 TCF XAD # 10 -- INDEX REGISTER ADD FROM ERASABLE. 043728,000348: 6345 12411 TCF XSU # 11 -- INDEX SUBTRACT FROM ERASABLE. 043729,000349: 6346 12467 TCF BZE/GOTO # 12 -- BRANCH ZERO AND GOTO 043730,000350: 6347 12474 TCF BPL/BMN # 13 -- BRANCH PLUS AND BRANCH MINUS. 043731,000351: 6350 12447 TCF RTB/BHIZ # 14 -- RETURN TO BASIC AND BRANCH HI ZERO. 043732,000352: 6351 12507 TCF CALL/ITA # 15 -- CALL AND STORE QPRET. 043733,000353: 6352 12516 TCF SW/ # 16 -- SWITCH INSTRUCTIONS AND AVAILABLE. 043734,000354: 6353 12457 TCF BOV(B) # 17 -- BRANCH ON OVERFLOW TO BASIC OR INT. 043735,000355: 043736,000356: # Page 1013 043737,000357: # THE FOLLOWING JUMP TABLE APPLIES TO UNARY INSTRUCTIONS. 043738,000358: 043739,000359: 6354 COUNT* $$/INTER 043740,000360: 00,2000 BANK 0 # 00 -- EXIT -- DETECTED EARLIER. 043741,000361: 00,2000 13207 UNAJUMP TCF SQRT # 01 -- SQUARE ROOT. 043742,000362: 00,2001 13530 TCF SINE # 02 -- SIN. 043743,000363: 00,2002 13517 TCF COSINE # 03 -- COS. 043744,000364: 00,2003 13610 TCF ARCSIN # 04 -- ARC SIN. 043745,000365: 00,2004 13612 TCF ARCCOS # 05 -- ARC COS. 043746,000366: 00,2005 13174 TCF DSQ # 06 -- DP SQUARE. 043747,000367: 00,2006 12116 TCF ROUND # 07 -- ROUND TO DP. 043748,000368: 043749,000369: 00,2007 17670 TCF COMP # 10 -- COMPLEMENT VECTOR OR SCALAR 043750,000370: 00,2010 13232 TCF VDEF # 11 -- VECTOR DEFINE. 043751,000371: 00,2011 13023 TCF UNIT # 12 -- UNIT VECTOR. 043752,000372: 00,2012 13176 TCF ABVALABS # 13 -- LENGTH OF VECTOR OR MAG OF SCALAR. 043753,000373: 00,2013 13245 TCF VSQ # 14 -- SQUARE OF LENGTH OF VECTOR. 043754,000374: 00,2014 16354 TCF STADR # 15 -- PUSH UP ON STORE CODE. 043755,000375: 00,2015 13274 TCF RVQ # 16 -- RETURN VIA QPRET. 043756,000376: 00,2016 13247 TCF PUSH # 17 -- PUSH MPAC DOWN. 043757,000377: 043758,000378: # Page 1014 043759,000379: # SECTION 2 LOAD AND STORE PACKAGE. 043760,000380: 043761,000381: # A SET OF EIGHT STORE CODES IS PROVIDED AS THE PRIMARY METHOD OF STORING THE MULTI-PURPOSE 043762,000382: # ACCUMULATOR (MPAC). IF IN THE DANZIG SECTION LOC REFERS TO AN ALGEBRAICALLY POSITIVE WORD, IT IS TAKEN AS A 043763,000383: # STORE CODE WITH A CORRESPONDING ERASABLE ADDRESS. MOST OF THESE CODES ARE TWO ADDRESS, SPECIFYING THAT THE WORD 043764,000384: # FOLLOWING THE STORE CODE IS TO BE USED AS AN ADDRESS FROM WHICH TO RE-LOAD MPAC. FOUR OPTIONS ARE AVAILABLE: 043765,000385: 043766,000386: # 1. STORE STORE MPAC. THE E ADDRESS MAY BE INDEXED. 043767,000387: # 2. STODL STORE MPAC AND RE-LOAD IT IN DP WITH THE NEXT ADDRESS (THE LOAD MAY BE INDEXED). 043768,000388: # 3. STOVL STORE MPAC AND RE-LOAD A VECTOR (AS ABOVE). 043769,000389: # 4. STCALL STORE AND DO A CALL (BOTH ADDRESES MUST BE DIRECT HERE). 043770,000390: 043771,000391: # STODL AND STOVL WILL TAKE FROM THE PUSH-DOWN LIST IF NO LOAD ADDRESS IS GIVEN. 043772,000392: 043773,000393: 6354 BLOCK 3 043774,000394: 043775,000395: 6354 COUNT* $$/INTER 043776,000396: 6354 30165 STADR CA BANKSET # THE STADR CODE (PUSHUP UP ON STORE 043777,000397: 6355 54004 TS FBANK # ADDRESS) ENTERS HERE. 043778,000398: 6356 24164 INCR LOC 043779,000399: 6357 50164 ITR1 INDEX LOC # THE STORECODE WAS STORED COMPLEMENTED TO 043780,000400: 6360 40000 CS 0 # MAKE IT LOOK LIKE AN OPCODE PAIR. 043781,000401: 6361 67747 AD NEGONE # (YUL CAN'T REMOVE 1 BECAUSE OF EARLY CCS) 043782,000402: 043783,000403: 6362 54116 DOSTORE TS ADDRWD 043784,000404: 6363 74356 MASK LOW11 # ENTRY FROM DISPATCHER. SAVE THE ERASABLE 043785,000405: 6364 56116 XCH ADDRWD # ADDRESS AND JUMP ON THE STORE CODE NO. 043786,000406: 6365 77722 MASK B12T14 043787,000407: 6366 00006 EXTEND 043788,000408: 6367 74747 MP BIT5 # EACH TRANSFER VECTOR ENTRY IS TWO WORDS. 043789,000409: 6370 50000 INDEX A 043790,000410: 6371 16372 TCF STORJUMP 043791,000411: 043792,000412: # Page 1015 043793,000413: # STORE CODE JUMP TABLE. CALLS THE APPROPRIATE STORING ROUTINE AND EXITS TO DANZIG OR TO ADDRESS WITH 043794,000414: # A SUPPLIED OPERATION CODE. 043795,000415: 043796,000416: # STORE STORE,1 AND STORE,2 RETURN TO DANZIG, THUS RESETTING THE EBANK TO ITS STATE AT INTPRET. 043797,000417: 043798,000418: 6372 06422 STORJUMP TC STORE # STORE. 043799,000419: 6373 16061 TCF DANZIG # PICK UP NEW OP CODE(S). 043800,000420: 6374 06414 TC STORE,1 043801,000421: 6375 16061 TCF DANZIG 043802,000422: 6376 06417 TC STORE,2 043803,000423: 6377 16061 TCF DANZIG 043804,000424: 043805,000425: 6400 06422 TC STORE # STODL. 043806,000426: 6401 16460 TCF DODLOAD 043807,000427: 043808,000428: 6402 06422 TC STORE # STODL WITH INDEXED LOAD ADDRESS. 043809,000429: 6403 16144 TCF DODLOAD* 043810,000430: 043811,000431: 6404 06422 TC STORE # STOVL. 043812,000432: 6405 16463 TCF DOVLOAD 043813,000433: 043814,000434: 6406 06422 TC STORE # STOVL WITH INDEXED LOAD ADDRESS. 043815,000435: 6407 16466 TCF DOVLOAD* 043816,000436: 6410 06422 TC STORE # STOTC. 043817,000437: 6411 34766 CAF CALLCODE 043818,000438: 6412 54020 TS CYR 043819,000439: 6413 16252 TCF 15BITADR # GET A 15 BIT ADDRESS. 043820,000440: 043821,000441: # Page 1016 043822,000442: # STORE CODE ADDRESS PROCESSOR. 043823,000443: 043824,000444: 6414 50120 STORE,1 INDEX FIXLOC 043825,000445: 6415 40046 CS X1 043826,000446: 6416 16421 TCF PRESTORE 043827,000447: 043828,000448: 6417 50120 STORE,2 INDEX FIXLOC 043829,000449: 6420 40047 CS X2 043830,000450: 6421 26116 PRESTORE ADS ADDRWD # RESULTANT ADDRESS IS IN ERASABLE. 043831,000451: 043832,000452: 6422 40116 STORE CS ADDRWD 043833,000453: 6423 64772 AD DEC45 043834,000454: 6424 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA? 043835,000455: 6425 30120 CA FIXLOC # YES. 043836,000456: 6426 16433 TCF AHEAD5 043837,000457: 6427 35007 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS. 043838,000458: 6430 56116 XCH ADDRWD 043839,000459: 6431 54003 TS EBANK 043840,000460: 6432 74357 MASK LOW8 043841,000461: 6433 26116 AHEAD5 ADS ADDRWD 043842,000462: 043843,000463: # Page 1017 043844,000464: # STORING ROUTINES. STORE DP, TP, OR VECTOR AS INDICATED BY MODE. 043845,000465: 043846,000466: 6434 00006 STARTSTO EXTEND # MPAC,+1 MUST BE STORED IN ANY EVENT. 043847,000467: # ITRACE (5) REFERS TO "STARTSTO". 043848,000468: 6435 30155 DCA MPAC 043849,000469: 6436 50116 INDEX ADDRWD 043850,000470: 6437 52001 DXCH 0 043851,000471: 043852,000472: 6440 10163 CCS MODE 043853,000473: 6441 16454 TCF TSTORE 043854,000474: 6442 00002 TC Q 043855,000475: 043856,000476: 6443 00006 VSTORE EXTEND 043857,000477: 6444 30160 DCA MPAC +3 043858,000478: 6445 50116 INDEX ADDRWD 043859,000479: 6446 52003 DXCH 2 043860,000480: 043861,000481: 6447 00006 EXTEND 043862,000482: 6450 30162 DCA MPAC +5 043863,000483: 6451 50116 INDEX ADDRWD 043864,000484: 6452 52005 DXCH 4 043865,000485: 6453 00002 TC Q 043866,000486: 043867,000487: 6454 30156 TSTORE CA MPAC +2 043868,000488: 6455 50116 INDEX ADDRWD 043869,000489: 6456 54002 TS 2 043870,000490: 6457 00002 TC Q 043871,000491: 043872,000492: # Page 1018 043873,000493: # ROUTINES TO BEGIN PROCESSING OF THE SECOND ADDRES ASSOCIATED WITH ALL STORE-TYPE CODES EXCEPT STORE 043874,000494: # ITSELF. 043875,000495: 043876,000496: 6460 37732 DODLOAD CAF DLOADCOD 043877,000497: 6461 54020 TS CYR 043878,000498: 6462 16106 TCF DIRADRES # GO GET A DIRECT ADDRESS. 043879,000499: 043880,000500: 6463 34735 DOVLOAD CAF VLOADCOD 043881,000501: 6464 54020 TS CYR 043882,000502: 6465 16106 TCF DIRADRES 043883,000503: 043884,000504: 6466 36107 DOVLOAD* CAF VLOAD* 043885,000505: 6467 16145 TCF DODLOAD* +1 # PROLOGUE TO INDEX ROUTINE. 043886,000506: 043887,000507: # Page 1019 043888,000508: # THE FOLLOWING LOAD INSTRUCTIONS ARE PROVIDED FOR LOADING THE MULTI-PURPOSE ACCUMULATOR MPAC. 043889,000509: 043890,000510: 6470 50116 TLOAD INDEX ADDRWD 043891,000511: 6471 30002 CA 2 # LOAD A TRIPLE PRECISION ARGUMENT INTO 043892,000512: 6472 54156 TS MPAC +2 # THE FIRST THREE MPAC REGISTERS, WITH THE 043893,000513: 6473 00006 EXTEND # CONTENTS OF THE OTHER FOUR IRRELEVANT. 043894,000514: 6474 50116 INDEX ADDRWD 043895,000515: 6475 30001 DCA 0 043896,000516: 6476 52155 DXCH MPAC 043897,000517: 6477 34753 TMODE CAF ONE 043898,000518: 6500 16060 TCF NEWMODE # DECLARE TRIPLE PRECISION MODE. 043899,000519: 043900,000520: 6501 22007 SLOAD ZL # LOAD A SINGLE PRECISION NUMBER INTO 043901,000521: 6502 50116 INDEX ADDRWD # MPAC, SETTING MPAC+1,2 TO ZERO. THE 043902,000522: 6503 30000 CA 0 # CONTENTS OF THE REMAINING MPAC REGISTERS 043903,000523: 6504 16055 TCF SLOAD2 # ARE IRRELEVANT. 043904,000524: 043905,000525: 6505 00006 VLOAD EXTEND # LOAD A DOUBLE PRECISION VECTOR INTO 043906,000526: 6506 50116 INDEX ADDRWD # MPAC,+1, MPAC+3,4, AND MPAC+5,6. THE 043907,000527: 6507 30001 DCA 0 # CONTENTS OF MPAC +2 ARE IRRELEVANT. 043908,000528: 6510 52155 DXCH MPAC 043909,000529: 043910,000530: 6511 00006 ENDVLOAD EXTEND # PDVL COMES HERE TO FINISH UP FOR DP, TP. 043911,000531: 6512 50116 INDEX ADDRWD 043912,000532: 6513 30003 DCA 2 043913,000533: 6514 52160 DXCH MPAC +3 043914,000534: 043915,000535: 6515 00006 +4 EXTEND # TPDVL FINISHES HERE. 043916,000536: 6516 50116 INDEX ADDRWD 043917,000537: 6517 30005 DCA 4 043918,000538: 6520 52162 DXCH MPAC +5 043919,000539: 043920,000540: 6521 44753 VMODE CS ONE # DECLARE VECTOR MODE. 043921,000541: 6522 16060 TCF NEWMODE 043922,000542: 043923,000543: # Page 1020 043924,000544: # THE FOLLOWING INSTRUCTIONS ARE PROVIDED FOR STORING OPERANDS IN THE PUSHDOWN LIST: 043925,000545: # 1. PUSH PUSHDOWN AND NO LOAD. 043926,000546: # 2. PDDL PUSHDOWN AND DOUBLE PRECISION LOAD. 043927,000547: # 3. PDVL PUSHDOWN AND VECTOR LOAD. 043928,000548: 043929,000549: 6523 00006 PDDL EXTEND 043930,000550: 6524 50116 INDEX ADDRWD # LOAD MPAC,+1, PUSHING THE FORMER 043931,000551: 6525 30001 DCA 0 # CONTENTS DOWN. 043932,000552: 6526 52155 DXCH MPAC 043933,000553: 6527 50166 INDEX PUSHLOC 043934,000554: 6530 52001 DXCH 0 043935,000555: 043936,000556: 6531 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER APPRO- 043937,000557: 6532 36244 CAF NO.WDS # PRIATELY. 043938,000558: 6533 26166 ADS PUSHLOC 043939,000559: 043940,000560: 6534 10163 CCS MODE 043941,000561: 6535 16552 TCF ENDTPUSH 043942,000562: 6536 16550 TCF ENDDPUSH 043943,000563: 043944,000564: 6537 54163 TS MODE # NOW DP. 043945,000565: 6540 54156 ENDVPUSH TS MPAC +2 043946,000566: 6541 52160 DXCH MPAC +3 # PUSH DOWN THE REST OF THE VECTOR HERE. 043947,000567: 6542 50166 INDEX PUSHLOC 043948,000568: 6543 51775 DXCH 0 -4 043949,000569: 043950,000570: 6544 52162 DXCH MPAC +5 043951,000571: 6545 50166 INDEX PUSHLOC 043952,000572: 6546 51777 DXCH 0 -2 043953,000573: 043954,000574: 6547 16061 TCF DANZIG 043955,000575: 043956,000576: 6550 54156 ENDDPUSH TS MPAC +2 # SET MPAC +2 TO ZERO AND EXIT ON DP. 043957,000577: 6551 16061 TCF DANZIG 043958,000578: 043959,000579: 6552 54163 ENDTPUSH TS MODE 043960,000580: 6553 56156 XCH MPAC +2 # ON TRIPLE, SET MPAC +2 TO ZERO, PUSHING 043961,000581: 6554 50166 +2 INDEX PUSHLOC # DOWN THE OLD CONTENTS 043962,000582: 6555 53777 TS 0 -1 043963,000583: 6556 16061 TCF DANZIG 043964,000584: 043965,000585: # Page 1021 043966,000586: # PDVL -- PUSHDOWN AND VECTOR LOAD 043967,000587: 043968,000588: 6557 00006 PDVL EXTEND # RELOAD MPAC AND PUSH DOWN ITS CONTENTS. 043969,000589: 6560 50116 INDEX ADDRWD 043970,000590: 6561 30001 DCA 0 043971,000591: 6562 52155 DXCH MPAC 043972,000592: 6563 50166 INDEX PUSHLOC 043973,000593: 6564 52001 DXCH 0 043974,000594: 043975,000595: 6565 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER. 043976,000596: 6566 36244 CAF NO.WDS 043977,000597: 6567 26166 ADS PUSHLOC 043978,000598: 043979,000599: 6570 10163 CCS MODE # TEST PAST MODE. 043980,000600: 6571 16610 TCF TPDVL 043981,000601: 6572 16511 TCF ENDVLOAD # JUST LOAD LAST FOUR REGISTERS ON DP. 043982,000602: 043983,000603: 6573 00006 VPDVL EXTEND # PUSHDOWN AND RE-LOAD LAST TWO COMPONENTS 043984,000604: 6574 50116 INDEX ADDRWD 043985,000605: 6575 30003 DCA 2 043986,000606: 6576 52160 DXCH MPAC +3 043987,000607: 6577 50166 INDEX PUSHLOC 043988,000608: 6600 51775 DXCH 0 -4 043989,000609: 043990,000610: 6601 00006 EXTEND 043991,000611: 6602 50116 INDEX ADDRWD 043992,000612: 6603 30005 DCA 4 043993,000613: 6604 52162 DXCH MPAC +5 043994,000614: 6605 50166 INDEX PUSHLOC 043995,000615: 6606 51777 DXCH 0 -2 043996,000616: 043997,000617: 6607 16061 TCF DANZIG 043998,000618: 043999,000619: 6610 00006 TPDVL EXTEND # ON TP, WE MUST LOAD THE Y COMPONENT 044000,000620: 6611 50116 INDEX ADDRWD # BEFORE STORING MPAC +2 IN CASE THIS IS A 044001,000621: 6612 30003 DCA 2 # PUSHUP. 044002,000622: 6613 52160 DXCH MPAC +3 044003,000623: 044004,000624: 6614 30156 CA MPAC +2 044005,000625: 6615 50166 INDEX PUSHLOC # IN DP. 044006,000626: 6616 53777 TS 0 -1 044007,000627: 6617 16515 TCF ENDVLOAD +4 044008,000628: 044009,000629: # SSP (STORE SINGLE PRECISION) IS EXECUTED HERE. 044010,000630: 044011,000631: 6620 24164 SSP INCR LOC # PICK UP THE WORD FOLLOWING THE GIVEN 044012,000632: 6621 50164 INDEX LOC # ADDRESS AND STORE IT AT X. 044013,000633: 6622 30000 CA 0 044014,000634: 6623 50116 STORE1 INDEX ADDRWD # SOME INDEX AND MISCELLANEOUS OPS END 044015,000635: 6624 54000 TS 0 # HERE. 044016,000636: # Page 1022 044017,000637: 6625 16061 TCF DANZIG 044018,000638: 044019,000639: # Page 1023 044020,000640: # SEQUENCE CHANGING AND SUBROUTINE CALLING OPTIONS. 044021,000641: 044022,000642: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR SEQUENCING CHANGING, BRANCHING, AND CALLING SUBROUTINES: 044023,000643: # 1. GOTO GO TO. 044024,000644: # 2. CALL CALL SUBROUTINE SETTING QPRET. 044025,000645: # 3. CGOTO COMPUTED GO TO. 044026,000646: # 4. CCALL COMPUTED CALL. 044027,000647: # 7. BPL BRANCH IF MPAC POSITIVE OR ZERO. 044028,000648: # 8. BZE BRANCH IF MPAC ZERO. 044029,000649: # 9. BMN BRANCH IF MPAC NEGATIVE NON-ZERO. 044030,000650: 044031,000651: 6626 24164 CCALL INCR LOC # MAINTAIN LOC FOR QPRET COMPUTATION 044032,000652: 6627 50164 INDEX LOC 044033,000653: # Was CAF --- RSB 2009. 044034,000654: 6630 30000 CA 0 # GET BASE ADDRESS OF CADR LIST. 044035,000655: 6631 50116 INDEX ADDRWD 044036,000656: 6632 60000 AD 0 # ADD INCREMENT. 044037,000657: 6633 54004 TS FBANK # SELECT DESIRED CADR. 044038,000658: 6634 75012 MASK LOW10 044039,000659: 6635 50000 INDEX A 044040,000660: 6636 32000 CAF 10000 044041,000661: 6637 54117 TS POLISH 044042,000662: 044043,000663: 6640 30165 CALL CA BANKSET # FOR ANY OF THE CALL OPTIONS, MAKE UP THE 044044,000664: 6641 74350 MASK BANKMASK # ADDRESS OF THE NEXT OP-CODE PAIR/STORE 044045,000665: 6642 64350 AD BANKMASK # CODE AND LEAVE IT IN QPRET. NOTE THAT 044046,000666: 6643 60164 AD LOC # BANKMASK = -(2000 - 1). 044047,000667: 6644 50120 INDEX FIXLOC 044048,000668: 6645 54052 TS QPRET 044049,000669: 044050,000670: 6646 30117 GOTO CA POLISH # BASIC BRANCHING SEQUENCE. 044051,000671: 6647 77742 +1 MASK HIGH4 044052,000672: 6650 00006 EXTEND 044053,000673: 6651 16662 BZF GOTOERS # SEE IF ADDRESS POINTS TO FIXED OR ERAS. 044054,000674: 6652 30165 +4 CA BANKSET # SET EBANK PART OF BBANK. NEXT, SET UP 044055,000675: 6653 54006 TS BBANK # FBANK. THE COMBINATION IS PICKED UP & 044056,000676: 6654 30117 CA POLISH # PUT INTO BANKSET AT INTPRET +2. 044057,000677: 6655 54004 TS FBANK 044058,000678: 6656 75012 MASK LOW10 044059,000679: 6657 64741 AD 2K 044060,000680: 6660 54164 TS LOC 044061,000681: 6661 16042 TCF INTPRET +3 044062,000682: 044063,000683: 6662 E3,1400 EBANK= 1400 # SO YUL DOESN'T CUSS THE "CA 1400" BELOW. 044064,000684: 044065,000685: 6662 30117 GOTOERS CA POLISH # THE GIVEN ADDRESS IS IN ERASABLE -- SEE 044066,000686: 6663 66251 AD -ENDVAC # IF RELATIVE TO THE WORK ARA. 044067,000687: 6664 10000 CCS A 044068,000688: 6665 30117 CA POLISH # GENERAL ERASABLE. 044069,000689: 6666 16675 TCF GOTOGE 044070,000690: 044071,000691: # Page 1024 044072,000692: 6667 30120 CA FIXLOC # WORK AREA. 044073,000693: 6670 60117 AD POLISH 044074,000694: 6671 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF 044075,000695: 6672 30000 CA 0 # THE BRANCH ADDRESS. 044076,000696: 6673 54117 TS POLISH 044077,000697: 6674 16647 TCF GOTO +1 # ALLOWS ARBITRARY INDIRECTNESS LEVELS. 044078,000698: 044079,000699: 6675 54003 GOTOGE TS EBANK 044080,000700: 6676 74357 MASK LOW8 044081,000701: 6677 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF 044082,000702: 6700 31400 CA 1400 # THE BRANCH ADDRESS. 044083,000703: 6701 54117 TS POLISH 044084,000704: 6702 16647 TCF GOTO +1 044085,000705: 044086,000706: 6703 50164 CGOTO INDEX LOC # COMPUTED GO TO. PICK UP ADDRESS OF CADR 044087,000707: 6704 30001 CA 1 # LIST 044088,000708: 6705 50116 INDEX ADDRWD # ADD MODIFIER. 044089,000709: 6706 60000 AD 0 044090,000710: 6707 54004 TS FBANK # SELECT GOTO ADDRESS 044091,000711: 6710 75012 MASK LOW10 044092,000712: 6711 50000 INDEX A 044093,000713: 6712 32000 CA 10000 044094,000714: 6713 54117 TS POLISH 044095,000715: 6714 16647 TCF GOTO +1 # WITH ADDRESS IN A. 044096,000716: 044097,000717: 6715 30165 SWBRANCH CA BANKSET # SWITCH INSTRUCTIONS WHICH ELECT TO 044098,000718: 6716 54004 TS FBANK # BRANCH COME HERE TO DO SO. 044099,000719: 6717 50164 INDEX LOC 044100,000720: 6720 30001 CA 1 044101,000721: 6721 54117 TS POLISH 044102,000722: 6722 16647 TCF GOTO +1 044103,000723: 044104,000724: # Page 1025 044105,000725: # TRIPLE PRECISION BRANCHING ROUTINE. IF CALLING TC IS AT L, RETURN IS AS FOLLOWS: 044106,000726: # L+1 IF MPAC IS GREATER THAN ZERO. 044107,000727: # L+2 IF MPAC IS EQUAL TO +0 OR -0. 044108,000728: # L+3 IF MPAC IS LESS THAN ZERO. 044109,000729: 044110,000730: 6723 10154 BRANCH CCS MPAC 044111,000731: 6724 00002 TC Q 044112,000732: 6725 16727 TCF +2 # ON ZERO. 044113,000733: 6726 16741 TCF NEG 044114,000734: 044115,000735: 6727 10155 CCS MPAC +1 044116,000736: 6730 00002 TC Q 044117,000737: 6731 16733 TCF +2 044118,000738: 6732 16741 TCF NEG 044119,000739: 044120,000740: 6733 10156 CCS MPAC +2 044121,000741: 6734 00002 TC Q 044122,000742: 6735 16737 TCF +2 044123,000743: 6736 16741 TCF NEG 044124,000744: 044125,000745: 6737 50002 Q+1 INDEX Q 044126,000746: 6740 00001 TC 1 044127,000747: 044128,000748: 6741 50002 NEG INDEX Q # IF FIRST NON-ZERO REGISTER WAS NEGATIVE. 044129,000749: 6742 00002 TC 2 044130,000750: 044131,000751: 6743 6741 Q+2 = NEG 044132,000752: 044133,000753: # ITRACE (3) REFERS TO "EXIT". 044134,000754: 044135,000755: 6743 30165 EXIT CA BANKSET # RESTORE USER'S BANK SETTING, AND LEAVE 044136,000756: 6744 54006 TS BBANK # INTERPRETIVE MODE. 044137,000757: 6745 50164 INDEX LOC 044138,000758: 6746 00001 TC 1 044139,000759: 044140,000760: # Page 1026 044141,000761: # SECTION 3 -- ADD/SUBTRACT PACKAGE. 044142,000762: 044143,000763: # THE FOLLOWING OPERATIONS ARE PROVIDED FOR ADDING TO AND SUBTRACTING FROM THE MULTI-PURPOSE ACCUMULATOR 044144,000764: # MPAC: 044145,000765: # 1. DAD DOUBLE PRECISION ADD. 044146,000766: # 2. DSU DOUBLE PRECISION SUBTRACT. 044147,000767: # 3. BDSU DOUBLE PRECISION SUBTRACT FROM. 044148,000768: # 4. TAD TRIPLE PRECISION ADD. 044149,000769: # 5. VAD VECTOR ADD. 044150,000770: # 6. VSU VECTOR SUBTRACT. 044151,000771: # 7. BVSU VECTOR SUBTRACT FROM. 044152,000772: # THE INTERPRETIVE OVERFLOW INDICATOR OVFIND IS SET NON-ZERO IF OVERFLOW OCCURS IN ANY OF THE ABOVE. 044153,000773: 044154,000774: 6747 34735 VSU CAF BIT15 # CHANGES 0 TO DCS. 044155,000775: 6750 16752 TCF +2 044156,000776: 044157,000777: 6751 34355 VAD CAF PRIO30 # CHANGES 0 TO DCA. 044158,000778: 6752 26116 ADS ADDRWD 044159,000779: 6753 00006 EXTEND 044160,000780: 6754 50116 INDEX ADDRWD 044161,000781: 6755 00003 READ HISCALAR # DCA 2 OR DCS 2 044162,000782: 6756 20160 DAS MPAC +3 044163,000783: 6757 00006 EXTEND # CHECK OVERFLOW. 044164,000784: 6760 16762 BZF +2 044165,000785: 6761 07014 TC OVERFLWY 044166,000786: 044167,000787: 6762 00006 EXTEND 044168,000788: 6763 50116 INDEX ADDRWD 044169,000789: 6764 00005 READ CHAN5 # DCA 4 OR DCS 4 044170,000790: 6765 20162 DAS MPAC +5 044171,000791: 6766 00006 EXTEND 044172,000792: 6767 16771 BZF +2 044173,000793: 6770 07011 TC OVERFLWZ 044174,000794: 044175,000795: 6771 00006 EXTEND 044176,000796: 6772 50116 INDEX ADDRWD 044177,000797: 6773 00001 READ LCHAN # DCA 0 OR DCS 0 044178,000798: 6774 17000 TCF ENDVXV 044179,000799: 044180,000800: 6775 00006 DAD EXTEND 044181,000801: 6776 50116 INDEX ADDRWD 044182,000802: 6777 30001 DCA 0 044183,000803: 7000 20155 ENDVXV DAS MPAC # VXV FINISHES HERE. 044184,000804: 7001 00006 EXTEND 044185,000805: 7002 16061 BZF DANZIG 044186,000806: 044187,000807: # Page 1027 044188,000808: 7003 07017 SETOVF TC OVERFLOW 044189,000809: 7004 16061 TCF DANZIG 044190,000810: 044191,000811: # Page 1028 044192,000812: 7005 00006 DSU EXTEND 044193,000813: 7006 50116 INDEX ADDRWD 044194,000814: 7007 40001 DCS 0 044195,000815: 7010 17000 TCF ENDVXV 044196,000816: 044197,000817: 7011 54001 OVERFLWZ TS L # ENTRY FOR THIRD COMPONENT. 044198,000818: 7012 34756 CAF FIVE 044199,000819: 7013 17016 TCF +3 044200,000820: 044201,000821: 7014 54001 OVERFLWY TS L # ENTRY FOR SECOND COMPONENT. 044202,000822: 7015 36245 CAF THREE 044203,000823: 7016 56001 XCH L 044204,000824: 044205,000825: 7017 50000 OVERFLOW INDEX A # ENTRY FOR 1ST COMP OR DP (L=0). 044206,000826: 7020 44734 CS LIMITS # PICK UP POSMAX OR NEGMAX. 044207,000827: 7021 54130 TS BUF 044208,000828: 7022 00006 EXTEND 044209,000829: 7023 24000 AUG A # FORCE OVERFLOW. 044210,000830: 7024 50001 INDEX L 044211,000831: 7025 26155 ADS MPAC +1 044212,000832: 7026 54007 TS 7 044213,000833: 7027 34755 CAF ZERO 044214,000834: 7030 60130 AD BUF 044215,000835: 7031 50001 INDEX L 044216,000836: 7032 26154 ADS MPAC 044217,000837: 7033 54007 TS 7 044218,000838: 7034 00002 TC Q # NO OVERFLOW EXIT. 044219,000839: 7035 17152 TCF SETOVF2 # SET OVFIND AND EXIT. 044220,000840: 044221,000841: 7036 00006 BVSU EXTEND 044222,000842: 7037 50116 INDEX ADDRWD 044223,000843: 7040 30003 DCA 2 044224,000844: 7041 52160 DXCH MPAC +3 044225,000845: 7042 00006 EXTEND 044226,000846: 7043 40001 DCOM 044227,000847: 7044 20160 DAS MPAC +3 044228,000848: 7045 00006 EXTEND 044229,000849: 7046 17050 BZF +2 044230,000850: 7047 07014 TC OVERFLWY 044231,000851: 044232,000852: 7050 00006 EXTEND 044233,000853: 7051 50116 INDEX ADDRWD 044234,000854: 7052 30005 DCA 4 044235,000855: 7053 52162 DXCH MPAC +5 044236,000856: 7054 00006 EXTEND 044237,000857: 7055 40001 DCOM 044238,000858: 7056 20162 DAS MPAC +5 044239,000859: 7057 00006 EXTEND 044240,000860: 7060 17062 BZF +2 044241,000861: 7061 07011 TC OVERFLWZ 044242,000862: 044243,000863: # Page 1029 044244,000864: 7062 00006 BDSU EXTEND 044245,000865: 7063 50116 INDEX ADDRWD 044246,000866: 7064 30001 DCA 0 044247,000867: 7065 52155 DXCH MPAC 044248,000868: 7066 00006 EXTEND 044249,000869: 7067 40001 DCOM 044250,000870: 7070 17000 TCF ENDVXV 044251,000871: 044252,000872: # Page 1030 044253,000873: # TRIPLE PRECISION ADD ROUTINE. 044254,000874: 044255,000875: 7071 00006 TAD EXTEND 044256,000876: 7072 50116 INDEX ADDRWD 044257,000877: 7073 30002 DCA 1 # ADD MINOR PARTS FIRST. 044258,000878: 7074 20156 DAS MPAC +1 044259,000879: 7075 50116 INDEX ADDRWD 044260,000880: 7076 60000 AD 0 044261,000881: 7077 60154 AD MPAC 044262,000882: 7100 54154 TS MPAC 044263,000883: 7101 16061 TCF DANZIG 044264,000884: 044265,000885: 7102 17003 TCF SETOVF # SET OVFIND IF SUCH OCCURS. 044266,000886: 044267,000887: # Page 1031 044268,000888: # ARITHMETIC SUBROUTINES REQUIRED IN FIXED-FIXED. 044269,000889: # 1. DMPSUB DOUBLE PRECISION MULTIPLY, MULTIPLY THE CONTENTS OF MPAC,+1 BY THE DP WORD WHOSE ADDRESS 044270,000890: # IS IN ADDRWD AND LEAVE A TRIPLE-PRECISION RESULT IN MPAC. 044271,000891: # 2. ROUNDSUB ROUND THE TRIPLE PRECISION CONTENTS OF MPAC TO DOUBLE PRECISION. 044272,000892: # 3. DOTSUB TAKE THE DOT PRODUCT OF THE VECTOR IN MPAC AND THE VECTOR WHOSE ADDRESS IS IN ADDRWD 044273,000893: # AND LEAVE THE TRIPLE PRECISION RESULT IN MPAC. 044274,000894: # 4. POLY USING THE CONTENTS OF MPAC AS A DP ARGUMENT, EVALUATE THE POLYNOMIAL WHOSE DEGREE AND 044275,000895: # COEFFICIENTS IMMEDIATELY FOLLOW THE TC POLY INSTRUCTION (SEE ROUTINE FOR DETAILS). 044276,000896: 044277,000897: 7103 50002 DMP INDEX Q # BASIC SUBROUTINE FOR USE BY PINBALL, ETC 044278,000898: # Was CAF --- RSB 2009. 044279,000899: 7104 30000 CA 0 # ADRES OF ARGUMENT FOLLOWS TC DMP . 044280,000900: 7105 24002 INCR Q 044281,000901: 7106 54116 -1 TS ADDRWD # (PROLOGUE FOR SETTING ADDRWD.) 044282,000902: 044283,000903: 7107 50116 DMPSUB INDEX ADDRWD # GET MINOR PART OF OPERAND AT C(ADDRWD). 044284,000904: 7110 30001 CA 1 044285,000905: 7111 54156 TS MPAC +2 # THIS WORKS FOR SQUARING MPAC AS WELL. 044286,000906: 7112 34755 CAF ZERO # SET MPAC +1 TO ZERO SO WE CAN ACCUMULATE 044287,000907: 7113 56155 XCH MPAC +1 # THE PARTIAL PRODUCTS WITH DAS 044288,000908: 7114 54135 TS MPTEMP # INSTRUCTIONS. 044289,000909: 7115 00006 EXTEND 044290,000910: 7116 70156 MP MPAC +2 # MINOR OF MPAC X MINOR OF C(ADDRWD). 044291,000911: 044292,000912: 7117 56156 XCH MPAC +2 # DISCARD MINOR PART OF ABOVE RESULT AND 044293,000913: 7120 00006 EXTEND # FORM MAJOR OF MPAC X MINOR OF C(ADDRWD). 044294,000914: 7121 70154 MP MPAC 044295,000915: 7122 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW. 044296,000916: 044297,000917: 7123 50116 INDEX ADDRWD # GET MAJOR PART OF ARGUMENT AT C(ADDRWD). 044298,000918: 7124 30000 CA 0 044299,000919: 7125 56135 XCH MPTEMP # SAVE AND BRING OUT MINOR OF MPAC. 044300,000920: 7126 00006 DMPSUB2 EXTEND 044301,000921: 7127 70135 MP MPTEMP # MAJOR OF C(ADDRWD) X MINOR OF MPAC. 044302,000922: 7130 20156 DAS MPAC +1 # ACCUMULATE, SETTING A TO NET OVERFLOW. 044303,000923: 044304,000924: 7131 56154 XCH MPAC # SETTING MPAC TO 0 OR +-1. 044305,000925: 7132 00006 EXTEND 044306,000926: 7133 70135 MP MPTEMP # MAJOR OF MPAC X MAJOR OF C(ADDRWD). 044307,000927: 7134 20155 DAS MPAC # GUARANTEED NO OVERFLOW. 044308,000928: 7135 00002 TC Q # 49 MCT = .573 MS. INCLUDING RETURN. 044309,000929: 044310,000930: # Page 1032 044311,000931: # ROUND MPAC TO DOUBLE PRECISION, SETTING OVFIND ON THE RARE EVENT OF OVERFLOW. 044312,000932: 044313,000933: 7136 34755 ROUNDSUB CAF ZERO # SET MPAC +2 = 0 FOR SCALARS AND CHANGE 044314,000934: 7137 54163 +1 TS MODE # MODE TO DP. 044315,000935: 044316,000936: 7140 56156 VROUND XCH MPAC +2 # BUT WE NEEDN'T TAKE THE TIME FOR VECTORS. 044317,000937: 7141 60000 DOUBLE 044318,000938: 7142 54001 TS L 044319,000939: 7143 00002 TC Q 044320,000940: 044321,000941: 7144 60155 AD MPAC +1 # ADD ROUDING BIT IF MPAC +2 WAS GREATER 044322,000942: 7145 54155 TS MPAC +1 # THAN .5 IN MAGNITUDE. 044323,000943: 7146 00002 TC Q 044324,000944: 044325,000945: 7147 60154 AD MPAC # PROPAGATE INTERFLOW. 044326,000946: 7150 54154 TS MPAC 044327,000947: 7151 00002 TC Q 044328,000948: 044329,000949: 7152 54121 SETOVF2 TS OVFIND # (RARE). 044330,000950: 7153 00002 TC Q 044331,000951: 044332,000952: # Page 1033 044333,000953: # THE DOT PRODUCT SUBROUTINE USUALLY FORMS THE DOT PRODUCT OF THE VECTOR IN MPAC WITH A STANDARD SIX 044334,000954: # REGISTER VECTOR WHOSE ADDRESS IS IN ADDRWD. IN THIS CASE C(DOTINC) ARE SET TO 2. VXM, HOWEVER, SETS C(DOTINC) TO 044335,000955: # 6 SO THAT DOTSUB DOTS MPAC WITH A COLUMN VECTOR OF THE MATRIX IN QUESTION IN THIS CASE. 044336,000956: 044337,000957: 7154 34752 PREDOT CAF TWO # PROLOGUE TO SET DOTINC TO 2. 044338,000958: 7155 54136 TS DOTINC 044339,000959: 044340,000960: 7156 00006 DOTSUB EXTEND 044341,000961: 7157 22137 QXCH DOTRET # SAVE RETURN 044342,000962: 7160 07107 TC DMPSUB # DOT X COMPONENTS. 044343,000963: 7161 52160 DXCH MPAC +3 # POSITION Y COMPONENT OF MPAC FOR 044344,000964: 7162 52155 DXCH MPAC # MULTIPLICATION WHILE SAVING RESULT IN 044345,000965: 7163 52131 DXCH BUF # THREE WORD BUFFER, BUF. 044346,000966: 7164 30156 CA MPAC +2 044347,000967: 7165 54132 TS BUF +2 044348,000968: 044349,000969: 7166 30136 CA DOTINC # ADVANCE ADDRWD TO Y COMPONENT OF 044350,000970: 7167 26116 ADS ADDRWD # OTHER ARGUMENT. 044351,000971: 7170 07107 TC DMPSUB 044352,000972: 7171 52156 DXCH MPAC +1 # ACCUMULATE PARTIAL PRODUCTS. 044353,000973: 7172 20132 DAS BUF +1 044354,000974: 7173 60154 AD MPAC 044355,000975: 7174 60130 AD BUF 044356,000976: 7175 54130 TS BUF 044357,000977: 7176 17200 TCF +2 044358,000978: 7177 54121 TS OVFIND # IF OVERFLOW OCCURS. 044359,000979: 044360,000980: 7200 52162 DXCH MPAC +5 # MULTIPLY Z COMPONENTS. 044361,000981: 7201 52155 DXCH MPAC 044362,000982: 7202 30136 CA DOTINC 044363,000983: 7203 26116 ADS ADDRWD 044364,000984: 7204 07107 TC DMPSUB 044365,000985: 7205 52132 ENDDOT DXCH BUF +1 # LEAVE FINAL ACCUMULATION IN MPAC. 044366,000986: 7206 20156 DAS MPAC +1 044367,000987: 7207 60154 AD MPAC 044368,000988: 7210 60130 AD BUF 044369,000989: 7211 54154 TS MPAC 044370,000990: 7212 00137 TC DOTRET 044371,000991: 044372,000992: 7213 07017 TC OVERFLOW # ON OVERFLOW HERE. 044373,000993: 7214 00137 TC DOTRET 044374,000994: 044375,000995: # Page 1034 044376,000996: # DOUBLE PRECISION POLYNOMIAL EVALUATOR 044377,000997: # N N-1 044378,000998: # THIS ROUTINE EVALUATES A X + A X + ... + A X + A LEAVING THE DP RESULT IN MPAC ON EXIT. 044379,000999: # N N-1 1 0 044380,001000: 044381,001001: # THE ROUTINE HAS TWO ENTRIES 044382,001002: 044383,001003: # 1 ENTRY THRU POWRSERS. THE COEFFICIENTS MAY BE EITHER IN FIXED OR ERASABLE E. THE CALL IS BY 044384,001004: # TC POWRSERS, AND THE RETURN IS TO LOC(TC POWRSERS)+1. THE ENTERING DATA MUST BE AS FOLLOWS: 044385,001005: 044386,001006: # A SP LOC-3 # ADDRESS FOR REFERENCING COEF TABLE 044387,001007: # L SP N-1 # N IS THE DEGREE OF THE POWER SERIES 044388,001008: # MPAC DP X # ARGUMENT 044389,001009: # LOC-2N DP A(0) 044390,001010: # ... 044391,001011: # LOC DP A(N) 044392,001012: 044393,001013: # 2. ENTRY THRU POLY. THE CALL TO POLY AND THE ENTERING DATA MUST BE AS FOLLOWS 044394,001014: 044395,001015: # MPAC DP X # ARGUMENT 044396,001016: # LOC TC POLY 044397,001017: # LOC+1 SP N-1 044398,001018: # LOC+2 DP A(0) 044399,001019: # ... 044400,001020: # LOC+2N+2 DP A(N) # RETURN IS TO LOC+2N+4 044401,001021: 044402,001022: 7215 00006 POWRSERS EXTEND 044403,001023: 7216 22141 QXCH POLYRET # RETURN ADDRESS 044404,001024: 7217 54117 TS POLISH # POWER SERIES ADDRESS 044405,001025: 7220 22140 LXCH POLYCNT # N-1 TO COUNTER 044406,001026: 7221 17232 TCF POLYCOM # SKIP SET UP BY POLY 044407,001027: 044408,001028: 7222 50002 POLY INDEX Q 044409,001029: # Was CAF --- RSB 2009. 044410,001030: 7223 30000 CA 0 044411,001031: 7224 54140 TS POLYCNT # N-1 TO COUNTER 044412,001032: 7225 60000 DOUBLE 044413,001033: 7226 60002 AD Q 044414,001034: 7227 54117 TS POLISH # L(A(N))-3 TO POLISH 044415,001035: 7230 64756 AD FIVE 044416,001036: 7231 54141 TS POLYRET # STORE RETURN ADDRESS 044417,001037: 044418,001038: 7232 36273 POLYCOM CAF LVBUF # INCOMING X WILL BE MOVED TO VBUF, SO 044419,001039: 7233 54116 TS ADDRWD # SET ADDRWD SO DMPSUB WILL MPY BY VBUF. 044420,001040: 044421,001041: 7234 00006 EXTEND 044422,001042: 7235 50117 INDEX POLISH 044423,001043: 7236 30004 DCA 3 044424,001044: 044425,001045: # Page 1035 044426,001046: 7237 52155 DXCH MPAC # LOAD A(N) INTO MPAC 044427,001047: 7240 52123 DXCH VBUF # SAVING X IN VBUF 044428,001048: 7241 17245 TCF POLY2 044429,001049: 044430,001050: 7242 54140 POLYLOOP TS POLYCNT # SAVE DECREMENTD LOOP COUNTER 044431,001051: 7243 44752 CS TWO 044432,001052: 7244 26117 ADS POLISH # REGRESS COEFFICIENT POINTER 044433,001053: 044434,001054: 7245 07107 POLY2 TC DMPSUB # MULTIPLY BY X 044435,001055: 7246 00006 EXTEND 044436,001056: 7247 50117 INDEX POLISH 044437,001057: 7250 30002 DCA 1 # ADD IN NEXT COEFFICIENT 044438,001058: 7251 20155 DAS MPAC # USER'S RESPONSIBILITY TO ASSURE NO OVFLOW 044439,001059: 044440,001060: 7252 10140 CCS POLYCNT 044441,001061: 7253 17242 TCF POLYLOOP 044442,001062: 7254 00141 TC POLYRET # RETURN CALLER 044443,001063: 044444,001064: # Page 1036 044445,001065: # MISCELLANEOUS MULTI-PRECISION ROUTINES REQUIRED IN FIXED-FIXED BUT NOT USED BY THE INTERPRETER. 044446,001066: 044447,001067: 7255 34755 DPAGREE CAF ZERO # DOUBLE PRECISION ENTRY -- 044448,001068: 7256 54156 TS MPAC +2 # ZERO LOW-ORDER WORD 044449,001069: 044450,001070: 7257 22002 TPAGREE LXCH Q # FORCE SIGN AGREEMENT AMONG THE TRIPLE 044451,001071: 7260 06723 TC BRANCH # PRECISION CONTENTS OF MPAC. RETURNING 044452,001072: 7261 17265 TCF ARG+ # WITH SIGNUM OF THE INPUT IN A. 044453,001073: 7262 17305 TCF ARGZERO 044454,001074: 044455,001075: 7263 44733 CS POSMAX # IF NEGATIVE. 044456,001076: 7264 17266 TCF +2 044457,001077: 044458,001078: 7265 34733 ARG+ CAF POSMAX 044459,001079: 7266 54002 TS Q 044460,001080: 7267 00006 EXTEND 044461,001081: 7270 24000 AUG A # FORMS +-1.0. 044462,001082: 7271 60156 AD MPAC +2 044463,001083: 7272 54156 TS MPAC +2 044464,001084: 7273 34755 CAF ZERO 044465,001085: 7274 60002 AD Q 044466,001086: 7275 60155 AD MPAC +1 044467,001087: 7276 54155 TS MPAC +1 044468,001088: 7277 34755 CAF ZERO 044469,001089: 7300 60002 AD Q # Q STILL HAS POSMAX OR NEGMAX IN IT. 044470,001090: 7301 60154 AD MPAC 044471,001091: 7302 54154 ARGZERO2 TS MPAC # ALWAYS SKIPPING UNLESS ARGZERO. 044472,001092: 7303 54155 TS MPAC +1 044473,001093: 7304 00001 TC L # RETURN VIA L. 044474,001094: 044475,001095: 7305 54156 ARGZERO TS MPAC +2 # SET ALL THREE MPAC REGISTERS TO ZERO. 044476,001096: 7306 17302 TCF ARGZERO2 044477,001097: 044478,001098: # SHORTMP MULTIPLIES THE TP CONTENTS OF MPAC BY THE SINGLE PRECISION NUMBER ARRIVING IN A. 044479,001099: 044480,001100: 7307 54135 SHORTMP TS MPTEMP 044481,001101: 7310 00006 EXTEND 044482,001102: 7311 70156 MP MPAC +2 044483,001103: 7312 54156 TS MPAC +2 044484,001104: 7313 34755 SHORTMP2 CAF ZERO # SO SUBSEQUENT DAS WILL WORK. 044485,001105: 7314 56155 XCH MPAC +1 044486,001106: 7315 17126 TCF DMPSUB2 044487,001107: 044488,001108: # Page 1037 044489,001109: # DMPNSUB MULTIPLIES THE DP FRACTION ARRIVING IN MPAC BY THE SP 044490,001110: # INTEGER ARRIVING IN A. THE DP PRODUCT DEPARTS BOTH IN MPAC AND IN 044491,001111: # A AND L. NOTE THAT DMPNSUB NORMALLY INCREASES THE MAGNITUDE OF THE 044492,001112: # CONTENTS OF MPAC. THE CUSTOMER MUST INSURE THAT B(A) X B(MPAC,MPAC+1) 044493,001113: # AND B(A) X B(MPAC) ARE LESS THAN 1 IN MAGNITUDE, WHERE B, AS IS OBVIOUS, 044494,001114: # INDICATES THE ARRIVING CONTENTS. 044495,001115: 044496,001116: 7316 54135 DMPNSUB TS DMPNTEMP 044497,001117: 7317 00006 EXTEND 044498,001118: 7320 70155 MP MPAC +1 044499,001119: 7321 52155 DXCH MPAC # LOW PRODUCT TO MPAC, HIGH FACTOR TO A 044500,001120: 7322 00006 EXTEND 044501,001121: 7323 70135 MP DMPNTEMP 044502,001122: 7324 30001 CA L 044503,001123: 7325 26154 ADS MPAC # COMPLETING THE PRODUCT IN MPAC 044504,001124: 7326 00006 EXTEND 044505,001125: 7327 30155 DCA MPAC # BRINGING THE PRODUCT INTO A AND L 044506,001126: 7330 00002 TC Q 044507,001127: 044508,001128: # Page 1038 044509,001129: # MISCELLANEOUS VECTOR OPERATIONS. INCLUDED HERE ARE THE FOLLOWING. 044510,001130: # 1. DOT DP VECTOR DOT PRODUCT. 044511,001131: # 2. VXV DP VECTOR CROSS PRODUCT. 044512,001132: # 3. VXSC DP VECTOR TIMES SCALAR. 044513,001133: # 4. V/SC DP VECTOR DIVIDED BY SCALAR. 044514,001134: # 5. VPROJ DP VECTOR PROJECTION. ( (MPAC.X)MPAC ). 044515,001135: # 6. VXM DP VECTOR POST-MULTIPLIED BY MATRIX. 044516,001136: # 7. MXV DP VECTOR PRE-MULTIPLIED BY MATRIX. 044517,001137: 044518,001138: 7331 07154 DOT TC PREDOT # DO THE DOT PRODUCT AND EXIT, CHANGING 044519,001139: 7332 34755 DMODE CAF ZERO # THE MODE TO DP SCALAR. 044520,001140: 7333 16060 TCF NEWMODE 044521,001141: 044522,001142: 7334 34752 MXV CAF TWO # SET UP MATINC AND DOTINC FOR ROW 044523,001143: 7335 54140 TS MATINC # VECTORS. 044524,001144: 7336 17342 TCF VXM/MXV # GO TO COMMON PORTION. 044525,001145: 044526,001146: 7337 44363 VXM CS TEN # SET MATINC AND DOTINC TO REFER TO MATRIX 044527,001147: 7340 54140 TS MATINC # AS THREE COLUMN VECTORS. 044528,001148: 7341 36242 CAF SIX 044529,001149: 044530,001150: # Page 1039 044531,001151: # COMMON PORTION OF MXV AND VXM. 044532,001152: 044533,001153: 7342 54136 VXM/MXV TS DOTINC 044534,001154: # ITRACE (2) REFERS TO "VXM/MXV". 044535,001155: 7343 07532 TC MPACVBUF # SAVE VECTOR IN MPAC FOR FURTHER USE. 044536,001156: 044537,001157: 7344 07156 TC DOTSUB # GO DOT TO GET X COMPONENT OF ANSWER. 044538,001158: 7345 00006 EXTEND 044539,001159: 7346 30123 DCA VBUF # MOVE MPAC VECTOR BACK INTO MPAC, SAVING 044540,001160: 7347 52155 DXCH MPAC # NEW X COMPONENT IN BUF2. 044541,001161: 7350 52134 DXCH BUF2 044542,001162: 7351 00006 EXTEND 044543,001163: 7352 30125 DCA VBUF +2 044544,001164: 7353 52160 DXCH MPAC +3 044545,001165: 7354 00006 EXTEND 044546,001166: 7355 30127 DCA VBUF +4 044547,001167: 7356 52162 DXCH MPAC +5 044548,001168: 7357 30140 CA MATINC # INITIALIZE ADDRWD FOR NEXT DOT PRODUCT. 044549,001169: 7360 26116 ADS ADDRWD # FORMS HAS ADDRESS OF NEXT COLUMN(ROW). 044550,001170: 044551,001171: 7361 07156 TC DOTSUB 044552,001172: 7362 52123 DXCH VBUF # MORE GIVEN VECTOR BACK TO MPAC, SAVING Y 044553,001173: 7363 52155 DXCH MPAC # COMPONENT OF ANSWER IN VBUF +2. 044554,001174: 7364 52125 DXCH VBUF +2 044555,001175: 7365 52160 DXCH MPAC +3 044556,001176: 7366 52127 DXCH VBUF +4 044557,001177: 7367 52162 DXCH MPAC +5 044558,001178: 7370 30140 CA MATINC # FORM ADDRESS OF LAST COLUMN OR ROW. 044559,001179: 7371 26116 ADS ADDRWD 044560,001180: 044561,001181: 7372 07156 TC DOTSUB 044562,001182: 7373 52134 DXCH BUF2 # ANSWER NOW COMPLETE. PUT COMPONENTS INTO 044563,001183: 7374 52155 DXCH MPAC # PROPER MPAC REGISTERS. 044564,001184: 7375 52162 DXCH MPAC +5 044565,001185: 7376 52125 DXCH VBUF +2 044566,001186: 7377 52160 DXCH MPAC +3 044567,001187: 7400 16061 TCF DANZIG # EXIT. 044568,001188: 044569,001189: # Page 1040 044570,001190: # VXSC -- VECTOR TIMES SCALAR. 044571,001191: 044572,001192: 7401 10163 VXSC CCS MODE # TEST PRESENT MODE. 044573,001193: 7402 17430 TCF DVXSC # SEPARATE ROUTINE WHEN SCALAR IS IN MPAC. 044574,001194: 7403 17430 TCF DVXSC 044575,001195: 044576,001196: 7404 07107 VVXSC TC DMPSUB # COMPUTE X COMPONENT 044577,001197: 7405 07140 TC VROUND # AND ROUND IT. 044578,001198: 7406 52160 DXCH MPAC +3 # PUT Y COMPONENT INTO MPAC SAVING MPAC IN 044579,001199: 7407 52155 DXCH MPAC # MPAC +3. 044580,001200: 7410 52160 DXCH MPAC +3 044581,001201: 044582,001202: 7411 07107 TC DMPSUB # DO SAME FOR Y AND Z COMPONENTS. 044583,001203: 7412 07140 TC VROUND 044584,001204: 7413 52162 DXCH MPAC +5 044585,001205: 7414 52155 DXCH MPAC 044586,001206: 7415 52162 DXCH MPAC +5 044587,001207: 044588,001208: 7416 07107 TC DMPSUB 044589,001209: 7417 07140 TC VROUND 044590,001210: 7420 52155 VROTATEX DXCH MPAC # EXIT USED TO RESTORE MPAC AFTER THIS 044591,001211: 7421 52162 DXCH MPAC +5 # TYPE OF ROTATION. CALLED BY VECTOR SHIFT 044592,001212: 7422 52160 DXCH MPAC +3 # RIGHT, V/SC, ETC. 044593,001213: 7423 52155 DXCH MPAC 044594,001214: 7424 16061 TCF DANZIG 044595,001215: 044596,001216: # Page 1041 044597,001217: # DP VECTOR PROJECTION ROUTINE. 044598,001218: 044599,001219: 7425 07154 VPROJ TC PREDOT # (MPAC.X)MPAC IS COMPUTED AND LEFT IN 044600,001220: 7426 44751 CS FOUR # MPAC. DO DOT AND FALL INTO DVXSC. 044601,001221: 7427 26116 ADS ADDRWD 044602,001222: 044603,001223: # VXSC WHEN SCALAR ARRIVES IN MPAC AND VECTOR IS AT X. 044604,001224: 044605,001225: 7430 00006 DVXSC EXTEND # SAVE SCALAR IN MPAC +3 AND GET X 044606,001226: 7431 30155 DCA MPAC # COMPONENT OF ANSWER. 044607,001227: 7432 52160 DXCH MPAC +3 044608,001228: 7433 07107 TC DMPSUB 044609,001229: 7434 07140 TC VROUND 044610,001230: 044611,001231: 7435 34752 CAF TWO # ADVANCE ADDRWD TO Y COMPONENT OF X. 044612,001232: 7436 26116 ADS ADDRWD 044613,001233: 7437 00006 EXTEND 044614,001234: 7440 30160 DCA MPAC +3 # PUT SCALAR BACK INTO MPAC AND SAVE 044615,001235: 7441 52155 DXCH MPAC # X RESULT IN MPAC +5. 044616,001236: 7442 52162 DXCH MPAC +5 044617,001237: 7443 07107 TC DMPSUB 044618,001238: 7444 07140 TC VROUND 044619,001239: 044620,001240: 7445 34752 CAF TWO 044621,001241: 7446 26116 ADS ADDRWD # TO Z COMPONENT. 044622,001242: 7447 52160 DXCH MPAC +3 # BRING SCALAR BACK, PUTTING Y RESULT IN 044623,001243: 7450 52155 DXCH MPAC # THE PROPER PLACE. 044624,001244: 7451 52160 DXCH MPAC +3 044625,001245: 7452 07107 TC DMPSUB 044626,001246: 7453 07140 TC VROUND 044627,001247: 044628,001248: 7454 52155 DXCH MPAC # PUT Z COMPONENT IN PROPER PLACE, ALSO 044629,001249: 7455 52162 DXCH MPAC +5 # POSITIONING X. 044630,001250: 7456 52155 DXCH MPAC 044631,001251: 044632,001252: 7457 16521 TCF VMODE # MODE HAS CHANGED TO VECTOR. 044633,001253: 044634,001254: # Page 1042 044635,001255: # VECTOR CROSS PRODUCT ROUTINE CALCULATES (X M -X M ,X M -X M ,X M -X M ) WHERE M IS THE VECTOR IN 044636,001256: # 3 2 2 3 1 3 3 1 2 1 1 2 044637,001257: # MPAC AND X THE VECTOR AT THE GIVEN ADDRESS. 044638,001258: 044639,001259: 7460 00006 VXV EXTEND 044640,001260: 7461 30162 DCA MPAC +5 # FORM UP M3X1, LEAVING M1 IN VBUF. 044641,001261: 7462 52155 DXCH MPAC 044642,001262: 7463 52123 DXCH VBUF 044643,001263: 7464 07107 TC DMPSUB # BY X1. 044644,001264: 044645,001265: 7465 00006 EXTEND 044646,001266: 7466 40160 DCS MPAC +3 # CALCULATE -X1M2, SAVING X1M3 IN VBUF +2. 044647,001267: 7467 52155 DXCH MPAC 044648,001268: 7470 52125 DXCH VBUF +2 044649,001269: 7471 07107 TC DMPSUB 044650,001270: 044651,001271: 7472 34752 CAF TWO # ADVANCE ADDRWD TO X2. 044652,001272: 7473 26116 ADS ADDRWD 044653,001273: 7474 00006 EXTEND 044654,001274: 7475 40162 DCS MPAC +5 # PREPARE TO GET -X2M3, SAVING -X1M2 IN 044655,001275: 7476 52155 DXCH MPAC # MPAC +5. 044656,001276: 7477 52162 DXCH MPAC +5 044657,001277: 7500 07107 TC DMPSUB 044658,001278: 044659,001279: 7501 00006 EXTEND 044660,001280: 7502 30123 DCA VBUF # GET X2M1, SAVING -X2M3 IN VBUF +4. 044661,001281: 7503 52155 DXCH MPAC 044662,001282: 7504 52127 DXCH VBUF +4 044663,001283: 7505 07107 TC DMPSUB 044664,001284: 044665,001285: 7506 34752 CAF TWO # ADVANCE ADDRWD TO X3. 044666,001286: 7507 26116 ADS ADDRWD 044667,001287: 7510 00006 EXTEND 044668,001288: 7511 40123 DCS VBUF # GET -X3M1, ADDING X2M1 TO MPAC +5 TO 044669,001289: 7512 52155 DXCH MPAC # COMPLETE THE Z COMPONENT OF THE ANSWER. 044670,001290: 7513 20162 DAS MPAC +5 044671,001291: 044672,001292: 7514 00006 EXTEND 044673,001293: 7515 17517 BZF +2 044674,001294: 7516 07011 TC OVERFLWZ 044675,001295: 044676,001296: 7517 07107 TC DMPSUB 044677,001297: 7520 52125 DXCH VBUF +2 # MOVE X1M3 TO MPAC +3 SETTING UP FOR X3M2 044678,001298: 7521 52160 DXCH MPAC +3 # AND ADD -X3M1 TO MPAC +3 TO COMPLETE THE 044679,001299: 7522 52155 DXCH MPAC # Y COMPONENT OF THE RESULT. 044680,001300: 7523 20160 DAS MPAC +3 044681,001301: 044682,001302: 7524 00006 EXTEND 044683,001303: 7525 17527 BZF +2 044684,001304: # Page 1043 044685,001305: 7526 07014 TC OVERFLWY 044686,001306: 044687,001307: 7527 07107 TC DMPSUB 044688,001308: 7530 52127 DXCH VBUF +4 # GO ADD -X2M3 TO X3M2 TO COMPLETE THE X 044689,001309: 7531 17000 TCF ENDVXV # COMPONENT (TAIL END OF DAD). 044690,001310: 044691,001311: # THE MPACVBUF SUBROUTINE SAVES THE VECTOR IN MPAC IN VBUF WITHOUT CLOBBERING MPAC. 044692,001312: 044693,001313: 7532 00006 MPACVBUF EXTEND # CALLED BY MXV, VXM, AND UNIT. 044694,001314: 7533 30155 DCA MPAC 044695,001315: 7534 52123 DXCH VBUF 044696,001316: 7535 00006 EXTEND 044697,001317: 7536 30160 DCA MPAC +3 044698,001318: 7537 52125 DXCH VBUF +2 044699,001319: 7540 00006 EXTEND 044700,001320: 7541 30162 DCA MPAC +5 044701,001321: 7542 52127 DXCH VBUF +4 044702,001322: 7543 00002 TC Q # RETURN TO CALLER. 044703,001323: 044704,001324: # DOUBLE PRECISION SIGN AGREE ROUTINE. ARRIVE WITH INPUT IN A+L. OUTPUT IS IN A + L. 044705,001325: 044706,001326: 7544 10000 ALSIGNAG CCS A # TEST UPPER PART. 044707,001327: 7545 17551 TCF UPPOS # IT IS POSITIVE 044708,001328: 7546 00002 TC Q # ZERO 044709,001329: 7547 17561 TCF UPNEG # NEGATIVE 044710,001330: 7550 00002 TC Q # ZERO 044711,001331: 044712,001332: 7551 56001 UPPOS XCH L # SAVE DECREMENTED UPPER PART. 044713,001333: 7552 64736 AD HALF 044714,001334: 7553 64736 AD HALF 044715,001335: 7554 54000 TS A # SKIPS ON OVERFLOW 044716,001336: 7555 17557 TCF +2 044717,001337: 7556 24001 INCR L # RESTORE UPPER TO ORIGINAL VALUE 044718,001338: 7557 56001 XCH L # SWAP A + L BANCK. 044719,001339: 7560 00002 TC Q 044720,001340: 044721,001341: 7561 56001 UPNEG XCH L # SAVE COMPLEMENTED + DECREMENTED UPPER PT 044722,001342: 7562 64735 AD NEGMAX 044723,001343: 7563 67747 AD NEGONE 044724,001344: 7564 54000 TS A 044725,001345: 7565 17567 TCF +2 # DON'T INCREMENT IF NO OVERFLOW. 044726,001346: 7566 24001 INCR L 044727,001347: 7567 56001 XCH L 044728,001348: 7570 40000 COM # MAKE NEGATIVE AGAIN. 044729,001349: 7571 00002 TC Q 044730,001350: 044731,001351: # Page 1044 044732,001352: # INTERPRETIVE INSTRUCTIONS WHOSE EXECUTION CONSISTS OF PRINCIPALLY CALLING SUBROUTINES. 044733,001353: 044734,001354: 7572 07107 DMP1 TC DMPSUB # DMP INSTRUCTIONS 044735,001355: 7573 16061 TCF DANZIG 044736,001356: 044737,001357: 7574 07107 DMPR TC DMPSUB 044738,001358: 7575 07137 TC ROUNDSUB +1 # (C(A) = +0). 044739,001359: 7576 16061 TCF DANZIG 044740,001360: 044741,001361: 7577 00006 DDV EXTEND 044742,001362: 7600 50116 INDEX ADDRWD # MOVE DIVIDEND INTO BUF. 044743,001363: 7601 30001 DCA 0 044744,001364: 7602 17607 TCF BDDV +4 044745,001365: 044746,001366: 7603 00006 BDDV EXTEND # MOVE DIVISOR INTO MPAC SAVING MPAC, THE 044747,001367: 7604 50116 INDEX ADDRWD # DIVIDEND, IN BUF. 044748,001368: 7605 30001 DCA 0 044749,001369: 7606 52155 DXCH MPAC 044750,001370: 7607 52131 +4 DXCH BUF 044751,001371: 7610 34755 CAF ZERO # DIVIDE ROUTINES IN BANK 0. 044752,001372: 7611 54004 TS FBANK 044753,001373: 7612 12353 TCF DDV/BDDV 044754,001374: 044755,001375: 7613 30116 SETPD CA ADDRWD # MUST SET TO WORK AREA, OR EBANK TROUBLE. 044756,001376: 7614 54166 TS PUSHLOC 044757,001377: 7615 16063 TCF NOIBNKSW # NO FBANK SWITCH REQUIRED. 044758,001378: 044759,001379: 7616 34755 TSLC CAF ZERO # SHIFTING ROUTINES LOCATED IN BANK 00. 044760,001380: 7617 54004 TS FBANK 044761,001381: 7620 12172 TCF TSLC2 044762,001382: 044763,001383: 7621 36074 GSHIFT CAF LOW7 # USED AS MASK AT GENSHIFT. THIS PROCESSES 044764,001384: 7622 54004 TS FBANK # ANY SHIFT INSTRUCTION (EXCEPT TSLC) WITH 044765,001385: 7623 12214 TCF GENSHIFT # AN ADDRESS (ROUTINES IN BANK 0). 044766,001386: 044767,001387: # Page 1045 044768,001388: # THE FOLLOWING IS THE PROLOGUE TO V/SC. IF THE PRESENT MODE IS VECTOR, IT SAVES THE SCALAR AT X IN BUF 044769,001389: # AND CALLS THE V/SC ROUTINE IN BANK 0. IF THE PRESENT MODE IS SCALAR, IT MOVES THE VECTOR AT X INTO MPAC, SAVING 044770,001390: # THE SCALAR IN MPAC IN BUF BEFORE CALLING THE V/SC ROUTINE IN BANK 0. 044771,001391: 044772,001392: 7624 10163 V/SC CCS MODE 044773,001393: 7625 17636 TCF DV/SC # MOVE VECTOR INTO MPAC. 044774,001394: 7626 17636 TCF DV/SC 044775,001395: 044776,001396: 7627 00006 VV/SC EXTEND 044777,001397: 7630 50116 INDEX ADDRWD 044778,001398: 7631 30001 DCA 0 044779,001399: 7632 52131 V/SC1 DXCH BUF # IN BOTH CASES, VECTOR IS NOW IN MPAC AND 044780,001400: 7633 34755 CAF ZERO # SCALAR IN BUF. 044781,001401: 7634 54004 TS FBANK 044782,001402: 7635 12654 TCF V/SC2 044783,001403: 044784,001404: 7636 00006 DV/SC EXTEND 044785,001405: 7637 50116 INDEX ADDRWD 044786,001406: 7640 30003 DCA 2 044787,001407: 7641 52160 DXCH MPAC +3 044788,001408: 7642 00006 EXTEND 044789,001409: 7643 50116 INDEX ADDRWD 044790,001410: 7644 30005 DCA 4 044791,001411: 7645 52162 DXCH MPAC +5 044792,001412: 044793,001413: 7646 44753 CS ONE # CHANGE MODE TO VECTOR. 044794,001414: 7647 54163 TS MODE 044795,001415: 044796,001416: 7650 00006 EXTEND 044797,001417: 7651 50116 INDEX ADDRWD 044798,001418: 7652 30001 DCA 0 044799,001419: 7653 52155 DXCH MPAC 044800,001420: 7654 17632 TCF V/SC1 # FINISH PROLOGUE AT COMMON SECTION. 044801,001421: 044802,001422: # Page 1046 044803,001423: # SIGN AND COMPLEMENT INSTRUCTIONS. 044804,001424: 044805,001425: 7655 50116 SIGN INDEX ADDRWD # CALL COMP INSTRUCTION IF WORD AT X IS 044806,001426: 7656 10000 CCS 0 # NEGATIVE NON-ZERO. 044807,001427: 7657 16061 TCF DANZIG 044808,001428: 7660 17662 TCF +2 044809,001429: 7661 17670 TCF COMP # DO THE COMPLEMENT. 044810,001430: 044811,001431: 7662 50116 INDEX ADDRWD 044812,001432: 7663 10001 CCSL CCS 1 044813,001433: 7664 16061 TCF DANZIG 044814,001434: 7665 16061 TCF DANZIG 044815,001435: 7666 17670 TCF COMP 044816,001436: 7667 16061 TCF DANZIG 044817,001437: 7670 00006 COMP EXTEND # COMPLEMENT DP MPAC IN EVERY CASE. 044818,001438: 7671 40155 DCS MPAC 044819,001439: 7672 52155 DXCH MPAC 044820,001440: 044821,001441: 7673 10163 CCS MODE # EITHER COMPLEMENT MPAC +3 OR THE REST OF 044822,001442: 7674 17705 TCF DCOMP # THE VECTOR ACCUMULATOR. 044823,001443: 7675 17705 TCF DCOMP 044824,001444: 044825,001445: 7676 00006 EXTEND # VECTOR COMPLEMENT. 044826,001446: 7677 40160 DCS MPAC +3 044827,001447: 7700 52160 DXCH MPAC +3 044828,001448: 7701 00006 EXTEND 044829,001449: 7702 40162 DCS MPAC +5 044830,001450: 7703 52162 DXCH MPAC +5 044831,001451: 7704 16061 TCF DANZIG 044832,001452: 044833,001453: 7705 40156 DCOMP CS MPAC +2 044834,001454: 7706 54156 TS MPAC +2 044835,001455: 7707 16061 TCF DANZIG 044836,001456: 044837,001457: # Page 1047 044838,001458: # THE FOLLOWING SHORT SHIFT CODES REQUIRE NO ADDRESS WORD: 044839,001459: # 1. SR1 TO SR4 SCALAR SHIFT RIGHT. 044840,001460: # 2. SR1R TO SR4R SCALAR SHIFT RIGHT AND ROUND. 044841,001461: # 3. SL1 TO SL4 SCALAR SHIFT LEFT. 044842,001462: # 4. SL1R TO SL4R SCALAR SHIFT LEFT AND ROUND. 044843,001463: # 5. VSR1 TO VSR8 VECTOR SHIFT RIGHT (ALWAYS ROUNDS). 044844,001464: # 6. VSL1 TO VSL8 VECTOR SHIFT LEFT (NEVER ROUNDS). 044845,001465: # THE FOLLOWING CODES REQUIRE AND ADDRESS WHICH MAY BE INDEXED:* 044846,001466: # 1. SR SCALAR SHIFT RIGHT. 044847,001467: # 2. SRR SCALAR SHIFT RIGHT AND ROUND. 044848,001468: # 3. SL SCALAR SHIFT LEFT. 044849,001469: # 4. SLR SCALAR SHIFT LEFT AND ROUND. 044850,001470: # 5. VSR VECTOR SHIFT RIGHT. 044851,001471: # 6. VSL VECTOR SHIFT LEFT. 044852,001472: # * IF THE ADDRESS IS INDEXED, AND THE INDEX MODIFICATION RESULTS IN A NEGATIVE SHIFT COUNT, A SHIFT OF THE 044853,001473: # ABSOLUTE VALUE OF THE COUNT IS DONE IN THE OPPOSITE DIRECTION. 044854,001474: 044855,001475: 00,2017 BANK 00 044856,001476: 044857,001477: 00,2017 COUNT* $$/INTER 044858,001478: 00,2017 36242 SHORTT CAF SIX # SCALAR SHORT SHIFTS COME HERE. THE SHIFT 044859,001479: 00,2020 70020 MASK CYR # COUNT-1 IS NOW IN BITS 2-3 OF CYR. THE 044860,001480: 00,2021 54021 TS SR # ROUNDING BIT IS IN BIT1 AT THIS POINT. 044861,001481: 044862,001482: 00,2022 10020 CCS CYR # SEE IF RIGHT OR LEFT SHIFT DESIRED. 044863,001483: 00,2023 12101 TCF TSSL # SHIFT LEFT. 044864,001484: 044865,001485: 00,2024 00024 SRDDV DEC 20 B-14 # MPTEMP SETTING FOR SR BEFORE DDV. 044866,001486: 044867,001487: 00,2025 50021 TSSR INDEX SR # GET SHIFTING BIT. 044868,001488: 00,2026 34736 CAF BIT14 044869,001489: 00,2027 54135 TS MPTEMP 044870,001490: 044871,001491: 00,2030 10020 CCS CYR # SEE IF A ROUND IS DESIRED. 044872,001492: 00,2031 02050 RIGHTR TC MPACSRND # YES -- SHIFT RIGHT AND ROUND. 044873,001493: 00,2032 16060 TCF NEWMODE # SET MODE TO DP (C(A) = 0). 044874,001494: 00,2033 30135 MPACSHR CA MPTEMP # DO A TRIPLE PRECISION SHIFT RIGHT. 044875,001495: 00,2034 00006 EXTEND 044876,001496: 00,2035 70156 MP MPAC +2 044877,001497: 00,2036 54156 +3 TS MPAC +2 # (EXIT FROM SQRT AND ABVAL). 044878,001498: 00,2037 30135 CA MPTEMP 044879,001499: 00,2040 00006 EXTEND 044880,001500: 00,2041 70154 MP MPAC # SHIFT MAJOR PART INTO A,L AND PLACE IN 044881,001501: # Page 1048 044882,001502: 00,2042 52155 DXCH MPAC # MPAC,+1. 044883,001503: 00,2043 30135 CA MPTEMP 044884,001504: 00,2044 00006 EXTEND 044885,001505: 00,2045 70001 MP L # ORIGINAL C(MPAC +1). 044886,001506: 00,2046 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW. 044887,001507: 00,2047 16061 TCF DANZIG 044888,001508: 044889,001509: # MPAC SHIFT RIGHT AND ROUND SUBROUTINES 044890,001510: 044891,001511: 00,2050 30156 MPACSRND CA MPAC +2 # WE HAVE TO DO ALL THREE MULTIPLIES SINCE 044892,001512: 00,2051 00006 EXTEND # MPAC +1 AND MPAC +2 MIGHT HAVE SIGN 044893,001513: 00,2052 70135 MP MPTEMP # DISAGREEMENT WITH A SHIFT RIGHT OF L. 044894,001514: 00,2053 56155 XCH MPAC +1 044895,001515: 00,2054 00006 EXTEND 044896,001516: 00,2055 70135 MP MPTEMP 044897,001517: 00,2056 56155 XCH MPAC +1 # TRIAL MINOR PART. 044898,001518: 00,2057 60001 AD L 044899,001519: 044900,001520: 00,2060 60000 VSHR2 DOUBLE # (FINISH VECTOR COMPONENT SHIFT RIGHT 044901,001521: 00,2061 54156 TS MPAC +2 # AND ROUND.) 044902,001522: 00,2062 12064 TCF +2 044903,001523: 00,2063 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW. 044904,001524: 044905,001525: 00,2064 34755 CAF ZERO 044906,001526: 00,2065 54156 TS MPAC +2 044907,001527: 00,2066 56154 XCH MPAC # SETTING TO ZERO SO FOLLOWING DAS WORKS. 044908,001528: 00,2067 00006 EXTEND 044909,001529: 00,2070 70135 MP MPTEMP 044910,001530: 00,2071 20155 DAS MPAC # AGAIN NO OVERFLOW. 044911,001531: 00,2072 00002 TC Q 044912,001532: 044913,001533: 00,2073 30135 VSHRRND CA MPTEMP # ENTRY TO SHIFT RIGHT AND ROUND MPAC WHEN 044914,001534: 00,2074 00006 EXTEND # MPAC CONTAINS A VECTOR COMPONENT. 044915,001535: 00,2075 70155 MP MPAC +1 044916,001536: 00,2076 54155 TS MPAC +1 044917,001537: 00,2077 56001 XCH L 044918,001538: 00,2100 12060 TCF VSHR2 # GO ADD ONE IF NECESSARY AND FINISH. 044919,001539: 044920,001540: # Page 1049 044921,001541: # ROUTINE FOR SHORT SCALAR SHIFT LEFT (AND MAYBE ROUND). 044922,001542: 044923,001543: 00,2101 30021 TSSL CA SR # GET SHIFT COUNT FOR SR. 044924,001544: 00,2102 54135 +1 TS MPTEMP 044925,001545: 044926,001546: 00,2103 00006 +2 EXTEND # ENTRY HERE FROM SL FOR SCALARS. 044927,001547: 00,2104 30156 DCA MPAC +1 # SHIFTING LEFT ONE PLACE AT A TIME IS 044928,001548: 00,2105 20156 DAS MPAC +1 # FASTER THAN DOING THE WHOLE SHIFT WITH 044929,001549: 00,2106 60154 AD MPAC # MULTIPLIES ASSUMING THAT FREQUENCY OF 044930,001550: 00,2107 60154 AD MPAC # SHIFT COUNTS GOES DOWN RAPIDLY AS A 044931,001551: 00,2110 54154 TS MPAC # FUNCTION OF THEIR MAGNITUDE. 044932,001552: 00,2111 12113 TCF +2 044933,001553: 00,2112 54121 TS OVFIND # OVERFLOW. (LEAVES OVERFLOW-CORRECTED 044934,001554: # RESULT ANYWAY). 044935,001555: 00,2113 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNT. 044936,001556: 00,2114 12102 TCF TSSL +1 044937,001557: 044938,001558: 00,2115 10020 CCS CYR # SEE IF ROUND WANTED. 044939,001559: 00,2116 07136 ROUND TC ROUNDSUB # YES -- ROUND AND EXIT. 044940,001560: 00,2117 16061 TCF DANZIG # SL LEAVES A ZERO IN CYR FOR NO ROUND. 044941,001561: 00,2120 16061 TCF DANZIG # NO -- EXIT IMMEDIATELY 044942,001562: 044943,001563: # Page 1050 044944,001564: # VECTOR SHIFTING ROUTINES. 044945,001565: 044946,001566: 00,2121 34757 SHORTV CAF LOW3 # SAVE 3 BIT SHIFT COUNT -- 1 WITHOUT 044947,001567: 00,2122 70020 MASK CYR # EDITING CYR. 044948,001568: 00,2123 54135 TS MPTEMP 044949,001569: 00,2124 10020 CCS CYR # SEE IF LEFT OR RIGHT SHIFT. 044950,001570: 00,2125 12145 TCF VSSL # VECTOR SHIFT LEFT. 044951,001571: 00,2126 00176 OCT176 OCT 176 # USED IN PROCESSED SHIFTS WITH - COUNT. 044952,001572: 044953,001573: 00,2127 50135 VSSR INDEX MPTEMP # (ENTRY FROM SR). PICK UP SHIFTING BIT. 044954,001574: 00,2130 34736 CAF BIT14 # MPTEMP CONTAINS THE SHIFT COUNT - 1. 044955,001575: 00,2131 54135 TS MPTEMP 044956,001576: 00,2132 02073 TC VSHRRND # SHIFT X COMPONENT. 044957,001577: 044958,001578: 00,2133 52155 DXCH MPAC # SWAP X AND Y COMPONENTS. 044959,001579: 00,2134 52160 DXCH MPAC +3 044960,001580: 00,2135 52155 DXCH MPAC 044961,001581: 00,2136 02073 TC VSHRRND # SHIFT Y COMPONENT. 044962,001582: 044963,001583: 00,2137 52155 DXCH MPAC # SWAP Y AND Z COMPONENTS. 044964,001584: 00,2140 52162 DXCH MPAC +5 044965,001585: 00,2141 52155 DXCH MPAC 044966,001586: 00,2142 02073 TC VSHRRND # SHIFT Z COMPONENT. 044967,001587: 044968,001588: 00,2143 17420 TCF VROTATEX # RESTORE COMPONENTS TO PROPER PLACES. 044969,001589: 044970,001590: # Page 1051 044971,001591: # VECTOR SHIFT LEFT -- DONE ONE PLACE AT A TIME. 044972,001592: 044973,001593: 00,2144 54135 -1 TS MPTEMP # SHIFTING LOOP. 044974,001594: 044975,001595: 00,2145 00006 VSSL EXTEND 044976,001596: 00,2146 30155 DCA MPAC 044977,001597: 00,2147 20155 DAS MPAC 044978,001598: 00,2150 00006 EXTEND 044979,001599: 00,2151 12153 BZF +2 044980,001600: 00,2152 07017 TC OVERFLOW 044981,001601: 044982,001602: 00,2153 00006 EXTEND 044983,001603: 00,2154 30160 DCA MPAC +3 044984,001604: 00,2155 20160 DAS MPAC +3 044985,001605: 00,2156 00006 EXTEND 044986,001606: 00,2157 12161 BZF +2 044987,001607: 00,2160 07014 TC OVERFLWY 044988,001608: 044989,001609: 00,2161 00006 EXTEND 044990,001610: 00,2162 30162 DCA MPAC +5 044991,001611: 00,2163 20162 DAS MPAC +5 044992,001612: 00,2164 00006 EXTEND 044993,001613: 00,2165 12167 BZF +2 044994,001614: 00,2166 07011 TC OVERFLWZ 044995,001615: 044996,001616: 00,2167 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNTER. 044997,001617: 00,2170 12144 TCF VSSL -1 044998,001618: 00,2171 16061 TCF DANZIG # EXIT. 044999,001619: 045000,001620: # Page 1052 045001,001621: # TSLC -- TRIPLE SHIFT LEFT AND COUNT. SHIFTS MPAC LEFT UNTIL GREATER THAN .5 IN MAGNITUDE, LEAVING 045002,001622: # THE COMPLEMENT OF THE NUMBER OF SHIFTS REQUIRED IN X. 045003,001623: 045004,001624: 00,2172 54135 TSLC2 TS MPTEMP # START BY ZEROING SHIFT COUNT (IN A NOW). 045005,001625: 00,2173 06723 TC BRANCH # EXIT WITH NO SHIFTING IF ARGUMENT ZERO. 045006,001626: 00,2174 12176 TCF +2 045007,001627: 00,2175 12212 TCF ENDTSLC # STORES ZERO SHIFT COUNT IN THIS CASE. 045008,001628: 045009,001629: 00,2176 07257 TC TPAGREE # MAY CAUSE UPSHIFT OF ONE EXTRA PLACE. 045010,001630: 045011,001631: 00,2177 30154 CA MPAC # BEGIN NORMALIZATION LOOP. 045012,001632: 00,2200 12207 TCF TSLCTEST 045013,001633: 045014,001634: 00,2201 24135 TSLCLOOP INCR MPTEMP # INCREMENT SHIFT COUNTER. 045015,001635: 00,2202 00006 EXTEND 045016,001636: 00,2203 30156 DCA MPAC +1 045017,001637: 00,2204 20156 DAS MPAC +1 045018,001638: 00,2205 60154 AD MPAC 045019,001639: 00,2206 26154 ADS MPAC 045020,001640: 00,2207 60000 TSLCTEST DOUBLE # SEE IF (ANOTHER) SHIFT IS REQUIRED 045021,001641: 00,2210 54000 OVSK 045022,001642: 00,2211 12201 TCF TSLCLOOP # YES -- INCREMENT COUNT AND SHIFT AGAIN. 045023,001643: 045024,001644: 00,2212 40135 ENDTSLC CS MPTEMP 045025,001645: 00,2213 16623 TCF STORE1 # STORE SHIFT COUNT AND RETURN TO DANZIG. 045026,001646: 045027,001647: # Page 1053 045028,001648: # THE FOLLOWING ROUTINE PROCESSES THE GENERAL SHIFT INSTRUCTIONS SR, SRR, SL, AND SLR. 045029,001649: # THE GIVEN ADDRESS IS DECODED AS FOLLOWS: 045030,001650: # BITS 1-7 SHIFT COUNT (SUBADDRESS) LESS THAN 125 DECIMAL. 045031,001651: # BIT 8 PSEUDO SIGN BIT (DETECTS CHANGE IN SIGN IN INDEXED SHIFTS). 045032,001652: # BIT 9 0 FOR LEFT SHIFT, AND 1 FOR RIGHT SHIFT. 045033,001653: # BIT 10 1 FOR TERMINAL ROUND ON SCALAR SHIFTS, 0 OTHERWISE 045034,001654: # BITS 11-13 0. 045035,001655: # BIT 14 1. 045036,001656: # BIT 15 0. 045037,001657: # THE ABOVE ENCODING IS DONE BY THE YUL SYSTEM. 045038,001658: 045039,001659: 00,2214 70116 GENSHIFT MASK ADDRWD # GET SHIFT COUNT, TESTING FOR ZERO. 045040,001660: 00,2215 10000 CCS A # (ARRIVES WITH C(A) = LOW7). 045041,001661: 00,2216 12224 TCF GENSHFT2 # IF NON-ZERO, PROCEED WITH DECREMENTED CT 045042,001662: 045043,001663: 00,2217 34742 CAF BIT10 # ZERO SHIFT COUNT. NO SHIFTS NEEDED BUT 045044,001664: 00,2220 70116 MASK ADDRWD # WE MIGHT HAVE TO ROUND MPAC ON SLR AND 045045,001665: 00,2221 10000 CCS A # SRR (SCALAR ONLY). 045046,001666: 00,2222 07136 TC ROUNDSUB 045047,001667: 00,2223 16061 TCF DANZIG 045048,001668: 045049,001669: 00,2224 54135 GENSHFT2 TS MPTEMP # DECREMENTED SHIFT COUNT TO MPTEMP. 045050,001670: 00,2225 34744 CAF BIT8 # TEST MEANING OF LOW SEVEN BIT COUNT IN 045051,001671: 00,2226 00006 EXTEND # MPTEMP NOW. 045052,001672: 00,2227 70116 MP ADDRWD 045053,001673: 00,2230 76245 MASK LOW2 # JUMPS ON SHIFT DIRECTION (BIT8) AND 045054,001674: 00,2231 50000 INDEX A 045055,001675: 00,2232 12233 TCF +1 # ORIGINAL SHIFT DIRECTION (BIT 9) 045056,001676: 00,2233 12332 TCF RIGHT- # NEGATIVE SHIFT COUNT FOR SL OR SLR. 045057,001677: 00,2234 12342 TCF LEFT # SL OR SLR. 045058,001678: 00,2235 12336 TCF LEFT- # NEGATIVE SHIFT COUNT WITH SR OR SRR. 045059,001679: 045060,001680: # Page 1054 045061,001681: # GENERAL SHIFT RIGHT 045062,001682: 045063,001683: 00,2236 10163 RIGHT CCS MODE # SET IF VECTOR OR SCALAR. 045064,001684: 00,2237 12277 TCF GENSCR 045065,001685: 00,2240 12277 TCF GENSCR 045066,001686: 045067,001687: 00,2241 30135 CA MPTEMP # SEE IF SHIFT COUNT LESS THAN 14D. 045068,001688: 00,2242 63733 VRIGHT2 AD NEG12 045069,001689: 00,2243 00006 EXTEND 045070,001690: 00,2244 62127 BZMF VSSR # IF SO, BRANCH AND SHIFT IMMEDIATELY. 045071,001691: 045072,001692: 00,2245 67747 AD NEGONE # IF NOT, REDUCE MPTEMP BY A TOTAL OF 14. 045073,001693: 00,2246 54135 TS MPTEMP # AND DO A SHIFT RIGHT AND ROUND BY 14. 045074,001694: 00,2247 34755 CAF ZERO # THE ROUND AT THIS STAGE MAY INTRODUCE A 045075,001695: 00,2250 54001 TS L # ONE BIT ERROR IN A SHIFT RIGHT 15D. 045076,001696: 00,2251 56154 XCH MPAC 045077,001697: 00,2252 56155 XCH MPAC +1 045078,001698: 00,2253 02272 TC SETROUND # X COMPONENT NOW SHIFTED, SO MAKE UP THE 045079,001699: 00,2254 20155 DAS MPAC # ROUNDING QUANTITY (0 IN A AND 0 OR +-1 045080,001700: # IN L). 045081,001701: 00,2255 56157 XCH MPAC +3 # REPEAT THE ABOVE PROCESS FOR Y AND Z. 045082,001702: 00,2256 56160 XCH MPAC +4 045083,001703: 00,2257 02272 TC SETROUND 045084,001704: 00,2260 20160 DAS MPAC +3 # NO OVERFLOW ON THESE ADDS. 045085,001705: 045086,001706: 00,2261 56161 XCH MPAC +5 045087,001707: 00,2262 56162 XCH MPAC +6 045088,001708: 00,2263 02272 TC SETROUND 045089,001709: 00,2264 20162 DAS MPAC +5 045090,001710: 045091,001711: 00,2265 10135 CCS MPTEMP # SEE IF DONE, DOING FINAL DECREMENT. 045092,001712: 00,2266 54135 TS MPTEMP 045093,001713: 00,2267 12242 TCF VRIGHT2 045094,001714: 00,2270 04604 BIASLO DEC .2974 B-1 # SQRT CONSTANT 045095,001715: 045096,001716: 00,2271 16061 TCF DANZIG 045097,001717: 045098,001718: 00,2272 60000 SETROUND DOUBLE # MAKES UP ROUNDING QUANTITY FROM ARRIVING 045099,001719: 00,2273 54156 TS MPAC +2 # C(A). L IS ZERO INITIALLY. 045100,001720: 00,2274 34755 CAF ZERO 045101,001721: 00,2275 56001 XCH L 045102,001722: 00,2276 00002 TC Q # RETURN AND DO THE DAS, RESETTING L TO 0. 045103,001723: 045104,001724: # Page 1055 045105,001725: # PROCESS SR AND SRR FOR SCALARS. 045106,001726: 045107,001727: 00,2277 30135 GENSCR CA MPTEMP # SEE IF THE ORIGINAL SHIFT COUNT WAS LESS 045108,001728: 00,2300 63733 +1 AD NEG12 # THAN 14D. 045109,001729: 00,2301 00006 EXTEND 045110,001730: 00,2302 62322 BZMF DOSSHFT # DO THE SHIFT IMMEDIATELY IF SO. 045111,001731: 045112,001732: 00,2303 67747 +4 AD NEGONE # IF NOT, DECREMENT SHIFT COUNT BY 14D AND 045113,001733: 00,2304 54135 TS MPTEMP # SHIFT MPAC RIGHT 14 PLACES. 045114,001734: 00,2305 34755 CAF ZERO 045115,001735: 00,2306 56154 XCH MPAC 045116,001736: 00,2307 56155 XCH MPAC +1 045117,001737: 00,2310 54156 TS MPAC +2 045118,001738: 00,2311 10135 CCS MPTEMP # SEE IF FINISHED, DO FINAL DECREMENT. 045119,001739: 00,2312 54135 TS MPTEMP 045120,001740: 00,2313 02300 TC GENSCR +1 045121,001741: 00,2314 22650 SLOPEHI DEC .5884 # SQRT CONSTANT. 045122,001742: 00,2315 34742 CAF BIT10 # FINISHED WITH SHIFT. SEE IF ROUND 045123,001743: 00,2316 70116 MASK ADDRWD # WANTED. 045124,001744: 00,2317 10000 CCS A 045125,001745: 00,2320 07136 TC ROUNDSUB 045126,001746: 00,2321 16061 TCF DANZIG # DO SO AND/OR EXIT. 045127,001747: 045128,001748: 00,2322 50135 DOSSHFT INDEX MPTEMP # PICK UP SHIFTING BIT. 045129,001749: 00,2323 34736 CAF BIT14 045130,001750: 00,2324 54135 TS MPTEMP 045131,001751: 00,2325 34742 CAF BIT10 # SEE IF TERMINAL ROUND DESIRED. 045132,001752: 00,2326 70116 MASK ADDRWD 045133,001753: 00,2327 10000 CCS A 045134,001754: 00,2330 12031 TCF RIGHTR # YES. 045135,001755: 00,2331 12033 TCF MPACSHR # JUST SHIFT RIGHT. 045136,001756: 045137,001757: # Page 1056 045138,001758: # PROCESS THE RIGHT- (SL(R) WITH A NEGATIVE COUNT), LEFT-, AND LEFT OPTIONS. 045139,001759: 045140,001760: 00,2332 40135 RIGHT- CS MPTEMP # GET ABSOLUTE VALUE - 1 OF SHIFT COUNT 045141,001761: 00,2333 62126 AD OCT176 # UNDERSTANDING THAT BIT8 (PSEUDO-SIGN) 045142,001762: 00,2334 54135 TS MPTEMP # WAS 1 INITIALLY. 045143,001763: 00,2335 12236 TCF RIGHT # DO NORMAL SHIFT RIGHT. 045144,001764: 045145,001765: 00,2336 42126 LEFT- CS OCT176 # SAME PROLOGUE TO LEFT FOR INDEXED RIGHT 045146,001766: 00,2337 60135 AD MPTEMP # SHIFT WHOSE NET SHIFT COUNT IS NEGATIVE 045147,001767: 00,2340 40000 COM 045148,001768: 00,2341 54135 TS MPTEMP 045149,001769: 045150,001770: 00,2342 10163 LEFT CCS MODE # SINCE LEFT SHIFTING IS DONE ONE PLACE AT 045151,001771: 00,2343 12346 TCF GENSCL # A TIME, NO COMPARISON WITH 14 NEED BE 045152,001772: 00,2344 12346 TCF GENSCL # DONE. FOR SCALARS, SEE IF TERMINAL ROUND 045153,001773: 00,2345 12145 TCF VSSL # DESIRED. FOR VECTORS, SHIFT IMMEDIATELY. 045154,001774: 045155,001775: 00,2346 40116 GENSCL CS ADDRWD # PUT ROUNDING BIT (BIT 10 OF ADDRWD) INTO 045156,001776: 00,2347 00006 EXTEND # BIT 15 OF CYR WHERE THE ROUNDING BIT OF 045157,001777: 00,2350 74746 MP BIT6 # A SHORT SHIFT LEFT WOULD BE 045158,001778: 00,2351 54020 TS CYR 045159,001779: 00,2352 12103 TCF TSSL +2 # DO THE SHIFT. 045160,001780: 045161,001781: # Page 1057 045162,001782: # SCALAR DIVISION INSTRUCTIONS, DDV AND BDDV, ARE EXECUTED HERE. AT THIS POINT, THE DIVIDEND IS IN MPAC 045163,001783: # AND THE DIVISOR IS IN BUF. 045164,001784: 045165,001785: 00,2353 44753 DDV/BDDV CS ONE # INITIALIZATION 045166,001786: 00,2354 54136 TS DVSIGN # +-1 FOR POSITIVE QUOTIENT -- -0 FOR NEG. 045167,001787: 00,2355 54137 TS DVNORMCT # DIVIDENT NORMALIZATION COUNT. 045168,001788: 00,2356 54140 TS MAXDVSW # NEAR-ONE DIVIDE FLAG. 045169,001789: 045170,001790: 00,2357 10130 CCS BUF # FORCE BUF POSITIVE WITH THE MAJOR PART 045171,001791: 00,2360 12516 TCF BUFPOS # NON-ZERO. 045172,001792: 00,2361 12363 TCF +2 045173,001793: 00,2362 12531 TCF BUFNEG 045174,001794: 045175,001795: 00,2363 54156 BUFZERO TS MPAC +2 # ZERO THIS. 045176,001796: 00,2364 07257 TC TPAGREE # FORCE SIGN AGREEMENT BEFORE OVERFLOW 045177,001797: 045178,001798: 00,2365 10154 CCS MPAC # TEST TO SEE IF MPAC NON-ZERO. (TOO BIG) 045179,001799: 00,2366 12414 TCF OVF+ # MAJOR PART OF DIVIDEND IS POSITIVE NON-0 045180,001800: 00,2367 12371 TCF +2 045181,001801: 00,2370 12413 TCF OVF+ -1 # MAJOR PART OF DIVIDEND IS NEG. NON-ZERO 045182,001802: 045183,001803: 00,2371 56131 XCH BUF +1 # SHIFT DIVIDEND AND DIVISOR LEFT 14 045184,001804: 00,2372 56130 XCH BUF 045185,001805: 00,2373 56155 XCH MPAC +1 045186,001806: 00,2374 56154 XCH MPAC 045187,001807: 00,2375 10130 CCS BUF # TRY AGAIN ON FORMER MINOR PART. 045188,001808: 00,2376 12422 TCF BUF+ 045189,001809: 00,2377 12401 TCF +2 # OVERFLOW ON ZERO DIVISOR. 045190,001810: 00,2400 12416 TCF BUF- 045191,001811: 045192,001812: 00,2401 40154 CS MPAC # SIGN OF MPAC DETERMINES SIGN OF RESULT. 045193,001813: 00,2402 00006 SGNDVOVF EXTEND 045194,001814: 00,2403 62405 BZMF +2 045195,001815: 00,2404 24136 INCR DVSIGN # NEGMAX IN MPAC PERHAPS. 045196,001816: 00,2405 34733 DVOVF CAF POSMAX # ON DIVISION OVERFLOW OF ANY SORT, SET 045197,001817: 00,2406 54154 TS MPAC # SET DP MPAC TO +-POSMAX. 045198,001818: 00,2407 02630 TC FINALDV +3 045199,001819: 00,2410 34753 CAF ONE # SET OVERFLOW INDICATOR AND EXIT. 045200,001820: 00,2411 54121 TS OVFIND 045201,001821: 00,2412 06061 TC DANZIG 045202,001822: 045203,001823: 00,2413 24136 -1 INCR DVSIGN 045204,001824: 00,2414 40131 OVF+ CS BUF +1 # LOAD LOWER ORDER PART OF DIVISOR. 045205,001825: 00,2415 12402 TCF SGNDVOVF # GET SIGN OF RESULT. 045206,001826: 045207,001827: 00,2416 00006 BUF- EXTEND # IF BUF IS NEGATIVE, COMPLEMENT IT AND 045208,001828: 00,2417 40131 DCS BUF # MAINTAIN DVSIGN FOR FINAL QUOTIENT SIGN. 045209,001829: 00,2420 52131 DXCH BUF 045210,001830: 00,2421 24136 INCR DVSIGN # NOW -0. 045211,001831: 045212,001832: # Page 1058 045213,001833: 00,2422 10154 BUF+ CCS MPAC # FORCE MPAC POSITIVE, CHECKING FOR ZERO 045214,001834: 00,2423 12437 TCF MPAC+ # DIVIDEND IN THE PROCESS. 045215,001835: 00,2424 12426 TCF +2 045216,001836: 00,2425 12433 TCF MPAC- 045217,001837: 00,2426 10155 CCS MPAC +1 045218,001838: 00,2427 12437 TCF MPAC+ 045219,001839: 00,2430 16061 TCF DANZIG # EXIT IMMEDIATELY ON ZERO DIVIDEND. 045220,001840: 00,2431 12433 TCF MPAC- 045221,001841: 00,2432 16061 TCF DANZIG 045222,001842: 045223,001843: 00,2433 00006 MPAC- EXTEND # FORCE MPAC POSITIVE AS BUF IN BUF-. 045224,001844: 00,2434 40155 DCS MPAC 045225,001845: 00,2435 52155 DXCH MPAC 045226,001846: 00,2436 24136 INCR DVSIGN # NOW +1 OR -0. 045227,001847: 045228,001848: # Page 1059 045229,001849: 00,2437 40154 MPAC+ CS MPAC # CHECK FOR DIVISION OVERFLOW. IF THE 045230,001850: 00,2440 67747 AD NEGONE # MAJOR PART OF THE DIVIDEND IS LESS THAN 045231,001851: 00,2441 60130 AD BUF # THE MAJOR PART OF THE DIVISOR BY AT 045232,001852: 00,2442 10000 CCS A # LEAST TWO, WE CAN PROCEED IMMEDIATELY 045233,001853: 00,2443 12505 TCF DVNORM # WITHOUT NORMALIZATION PRODUCING A DVMAX. 045234,001854: 00,2444 60001 -1/2+2 OCT 60001 # USED IN SQRTSUB. 045235,001855: 045236,001856: 00,2445 12446 TCF +1 # IF THE ABOVE DOES NOT HOLD, FORCE SIGN 045237,001857: 00,2446 34736 CAF HALF # AGREEMENT IN NUMERATOR AND DENOMINATOR 045238,001858: 00,2447 60000 DOUBLE # TO FACILITATE OVERFLOW AND NEAR-ONE 045239,001859: 00,2450 60155 AD MPAC +1 # CHECKING. 045240,001860: 00,2451 54155 TS MPAC +1 045241,001861: 00,2452 34755 CAF ZERO 045242,001862: 00,2453 64733 AD POSMAX 045243,001863: 00,2454 26154 ADS MPAC 045244,001864: 045245,001865: 00,2455 34736 CAF HALF # SAME FOR BUF. 045246,001866: 00,2456 60000 DOUBLE 045247,001867: 00,2457 60131 AD BUF +1 045248,001868: 00,2460 54131 TS BUF +1 045249,001869: 00,2461 34755 CAF ZERO 045250,001870: 00,2462 64733 AD POSMAX 045251,001871: 00,2463 26130 ADS BUF 045252,001872: 045253,001873: 00,2464 40154 CS MPAC # CHECK MAGNITUDE OF SIGN-CORRECTED 045254,001874: 00,2465 60130 AD BUF # OPERANDS. 045255,001875: 00,2466 10000 CCS A 045256,001876: 00,2467 12505 TCF DVNORM # DIVIDE OK -- WILL NOT BECOME MAXOV CASE. 045257,001877: 00,2470 00133 LBUF2 ADRES BUF2 045258,001878: 00,2471 12405 TCF DVOVF # DIVISOR NOT LESS THAN DIVIDEND -- OVF. 045259,001879: 045260,001880: 00,2472 54140 TS MAXDVSW # IF THE MAJOR PARTS OF THE DIVIDEND AND 045261,001881: 00,2473 40155 CS MPAC +1 # DIVISOR ARE EQUAL, A SPECIAL APPROXIMA- 045262,001882: 00,2474 60131 AD BUF +1 # TION IS USED (PROVIDED THE DIVISION IS 045263,001883: 00,2475 00006 EXTEND # POSSIBLE, OF COURSE). 045264,001884: 00,2476 62405 BZMF DVOVF 045265,001885: 00,2477 12505 TCF DVNORM # IF NO OVERFLOW. 045266,001886: 045267,001887: # Page 1060 045268,001888: 00,2500 00006 BUFNORM EXTEND # ADD -1 TO AUGMENT SHIFT COUNT AND SHIFT 045269,001889: 00,2501 24137 AUG DVNORMCT # LEFT ONE PLACE. 045270,001890: 00,2502 00006 EXTEND 045271,001891: 00,2503 30131 DCA BUF 045272,001892: 00,2504 20131 DAS BUF 045273,001893: 045274,001894: 00,2505 30130 DVNORM CA BUF # SEE IF DIVISOR NORMALIZED YET. 045275,001895: 00,2506 60000 DOUBLE 045276,001896: 00,2507 54000 OVSK 045277,001897: 00,2510 12500 TCF BUFNORM # NO -- SHIFT LEFT ONE AND TRY AGAIN. 045278,001898: 045279,001899: 00,2511 52155 DXCH MPAC # CALL DIVIDEND NORMALIZATION SEQUENCE 045280,001900: 00,2512 50137 INDEX DVNORMCT # PRIOR TO DOING THE DIVIDE. 045281,001901: 00,2513 02565 TC MAXTEST 045282,001902: 045283,001903: 00,2514 54156 TS MPAC +2 # RETURNS WITH DIVISION DONE AND C(A) = 0. 045284,001904: 00,2515 16061 TCF DANZIG 045285,001905: 045286,001906: 00,2516 10000 BUFPOS CCS A 045287,001907: 00,2517 12422 TCF BUF+ # TO BUF+ IF BUF IS GREATER THAN +1. 045288,001908: 045289,001909: 00,2520 40131 CS BUF +1 # IF BUF IS +1, FORCING SIGN AGREEMENT 045290,001910: 00,2521 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO. 045291,001911: 00,2522 62422 BZMF BUF+ # BRANCH IF SIGNS AGREE. 045292,001912: 045293,001913: 00,2523 34736 CA HALF # SIGNS DISAGREE. FORCE AGREEMENT. 045294,001914: 00,2524 60000 +6 DOUBLE 045295,001915: 00,2525 26131 ADS BUF +1 045296,001916: 00,2526 34755 CA ZERO 045297,001917: 00,2527 54130 TS BUF 045298,001918: 00,2530 12363 TCF BUFZERO 045299,001919: 045300,001920: 00,2531 10000 BUFNEG CCS A 045301,001921: 00,2532 12416 TCF BUF- # TO BUF- IF BUF IS LESS THAN -1. 045302,001922: 045303,001923: 00,2533 30131 CA BUF +1 # IF BUF IS -1, FORCING SIGN AGREEMENT 045304,001924: 00,2534 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO. 045305,001925: 00,2535 62416 BZMF BUF- # BRANCH IF SIGNS AGREE. 045306,001926: 045307,001927: 00,2536 44736 CS HALF # SIGNS DISAGREE. FORCE AGREEMENT. 045308,001928: 00,2537 12524 TCF BUFPOS +6 045309,001929: 045310,001930: # Page 1061 045311,001931: # THE FOLLOWING ARE PROLOGUES TO SHIFT THE DIVIDEND ARRIVING IN A AND L BEFORE THE DIVIDE. 045312,001932: 045313,001933: 00,2540 22021 -21D LXCH SR # SPECIAL PROLOGUE FOR UNIT WHEN THE 045314,001934: 00,2541 00006 EXTEND # LENGTH OF THE ARGUMENT WAS NOT LESS THAN 045315,001935: 00,2542 74736 MP HALF # .5. IN THIS CASE, EACH COMPONENT MUST BE 045316,001936: 00,2543 56001 XCH L # SHIFTED RIGHT ONE TO PRODUCE A HALF-UNIT 045317,001937: 00,2544 60021 AD SR # VECTOR. 045318,001938: 00,2545 56001 XCH L 045319,001939: 00,2546 12571 TCF GENDDV +1 # WITH DP DIVIDEND IN A,L. 045320,001940: 045321,001941: 00,2547 20001 DDOUBL # PROLOGUE WHICH NORMALIZES THE DIVIDEND 045322,001942: 00,2550 20001 DDOUBL # WHEN IT IS KNOWN THAT NO DIVISION 045323,001943: 00,2551 20001 DDOUBL # OVEFLOW WILL OCCUR. 045324,001944: 00,2552 20001 DDOUBL 045325,001945: 00,2553 20001 DDOUBL 045326,001946: 00,2554 20001 DDOUBL 045327,001947: 00,2555 20001 DDOUBL 045328,001948: 00,2556 20001 DDOUBL 045329,001949: 00,2557 20001 DDOUBL 045330,001950: 00,2560 20001 DDOUBL 045331,001951: 00,2561 20001 DDOUBL 045332,001952: 00,2562 20001 DDOUBL 045333,001953: 00,2563 20001 DDOUBL 045334,001954: 00,2564 52155 DXCH MPAC 045335,001955: 045336,001956: 00,2565 10140 MAXTEST CCS MAXDVSW # 0 IF MAJORS MIGHT BE =, -1 OTHERWISE. 045337,001957: 00,2566 06552 BIASHI DEC .4192 B-1 # SQRT CONSTANTS. 045338,001958: 045339,001959: 00,2567 12642 TCF MAXDV # CHECK TO SEE IF THAY ARE NOW EQUAL. 045340,001960: 045341,001961: # Page 1062 045342,001962: # THE FOLLOWING IS A GENERAL PURPOSE DOUBLE PRECISION DIVISION ROUTINE. IT DIVIDES MPAC BY BUF AND LEAVES 045343,001963: # THE RESULT IN MPAC. THE FOLLOWING CONDITIONS MUST BE SATISFIED: 045344,001964: 045345,001965: # 1. THE DIVISOR (BUF) MUST BE POSITIVE AND NOT LESS THAN .5. 045346,001966: 045347,001967: # 2. THE DIVIDEND (MPAC) MUST BE POSITIVE WITH THE MAJOR PART OF MPAC STRICTLY LESS THAN THAT OF BUF 045348,001968: # (A SPECIAL APPROXIMATION, MAXDV, IS USED WHEN THE MAJOR PARTS ARE EQUAL). 045349,001969: 045350,001970: # UNDERSTANDING THAT A/B = Q + S(R/B) WHERE S = 2(-14) AND Q AND R ARE QUOTIENT AND REMAINDER, RESPEC- 045351,001971: # TIVELY, THE FOLLOWING APPROXIMATION IS OBTAINED BY MULTIPLYING ABOVE AND BELOW BY C - SD AND NEGLECTING TERMS OF 045352,001972: # ORDER S-SQUARED (POSSIBLY INTRODUCING ERROR INTO THE LOW TWO BITS OF THE RESULT). SIGN AGREEMENT IS UNNECESSARY. 045353,001973: 045354,001974: # A + SB . (R - QD) A + SB 045355,001975: # ------ = Q + S(------) WHERE Q AND R ARE QUOTIENT AND REMAINDER OF ------ RESPECTIVELY. 045356,001976: # C + SD ( C } C 045357,001977: 045358,001978: 00,2570 52155 GENDDV DXCH MPAC # WE NEED A AND B ONLY FOR FIRST DV. 045359,001979: 00,2571 00006 +1 EXTEND # (SPECIAL UNIT PROLOGUE ENTERS HERE). 045360,001980: 00,2572 10130 DV BUF # A NOW CONTAINS Q AND L, R. 045361,001981: 00,2573 52155 DXCH MPAC 045362,001982: 045363,001983: 00,2574 40154 CS MPAC # FORM DIVIDEND FOR MINOR PART OF RESULT. 045364,001984: 00,2575 00006 EXTEND 045365,001985: 00,2576 70131 MP BUF +1 045366,001986: 00,2577 60155 AD MPAC +1 # OVERFLOW AT THIS POINT IS POSITIVE SINCE 045367,001987: 00,2600 54000 OVSK # R IS POSITIVE IN EVERY CASE. 045368,001988: 00,2601 12606 TCF +5 045369,001989: 045370,001990: 00,2602 00006 EXTEND # OVERFLOW CAN BE REMOVED BY SUBTRACTING C 045371,001991: 00,2603 60130 SU BUF # (BUF) ONCE SINCE R IS ALWAYS LESS THAN C 045372,001992: 00,2604 24154 INCR MPAC # IN THIS CASE. INCR COMPENSATES SUBTRACT. 045373,001993: 00,2605 12610 TCF +DOWN # (SINCE C(A) IS STILL POSITIVE). 045374,001994: 045375,001995: 00,2606 00006 +5 EXTEND # C(A) CAN BE MADE LESS THAN C IN MAGNI- 045376,001996: 00,2607 62620 BZMF -UP # TUDE BY DIMINISHING IT BY C (SINCE C IS 045377,001997: # NOT LESS THAN .5) UNLESS C(A) = 0. 045378,001998: 045379,001999: # Page 1063 045380,002000: 00,2610 00006 +DOWN EXTEND 045381,002001: 00,2611 60130 SU BUF # IF POSITIVE, REDUCE ONLY IF NECESSARY 045382,002002: 00,2612 00006 EXTEND # SINCE THE COMPENSATING INCR MIGHT CAUSE 045383,002003: 00,2613 12616 BZF +3 # OVERFLOW. 045384,002004: 00,2614 00006 EXTEND # DON'T SUBTRACT UNLESS RESULT IS POSITIVE 045385,002005: 00,2615 62624 BZMF ENDMAXDV # OR ZERO. 045386,002006: 045387,002007: 00,2616 24154 +3 INCR MPAC # KEEP SUBTRACT HERE AND COMPENSATE. 045388,002008: 00,2617 12625 TCF FINALDV 045389,002009: 045390,002010: 00,2620 00006 -UP EXTEND # IF ZERO, SET MINOR PART OF RESULT TO 045391,002011: 00,2621 12630 BZF FINALDV +3 # ZERO. 045392,002012: 045393,002013: 00,2622 00006 EXTEND # IF NEGATIVE, ADD C TO A, SUBTRACTING ONE 045394,002014: 00,2623 26154 DIM MPAC # TO COMPENSATE. DIM IS OK HERE SINCE THE 045395,002015: 00,2624 60130 ENDMAXDV AD BUF # MAJOR PART NEVER GOES NEGATIVE. 045396,002016: 045397,002017: # Page 1064 045398,002018: 00,2625 22007 FINALDV ZL # DO DV TO OBTAIN MINOR PART OF RESULT. 045399,002019: 00,2626 00006 EXTEND 045400,002020: 00,2627 10130 DV BUF 045401,002021: 00,2630 54155 +3 TS MPAC +1 045402,002022: 045403,002023: 00,2631 10136 CCS DVSIGN # LEAVE RESULT POSITIVE UNLESS C(DVSIGN)= 045404,002024: 00,2632 00002 TC Q # -0. 045405,002025: 00,2633 00002 TC Q 045406,002026: 00,2634 00002 TC Q 045407,002027: 045408,002028: 00,2635 00006 EXTEND 045409,002029: 00,2636 40155 DCS MPAC 045410,002030: 00,2637 52155 DXCH MPAC 045411,002031: 00,2640 34755 CAF ZERO # SO WE ALWAYS RETURN WITH C(A) = 0. 045412,002032: 00,2641 00002 TC Q 045413,002033: 045414,002034: # Page 1065 045415,002035: # IF THE MAJOR PARTS OF THE DIVISOR AND DIVIDEND ARE EQUAL, BUT THE MINOR PARTS ARE SUCH THAT THE 045416,002036: # DIVIDEND IS STRICTLY LESS THAN THE DIVISOR IN MAGNITUDE, THE FOLLOWING APPROXIMATION IS USED. THE ASSUMPTIONS 045417,002037: # ARE THE SAME AS THE GENERAL ROUTINE WITH THE ADDITION THAT SIGN AGREEMENT IS NECESSARY (B, C, & D POSITIVE). 045418,002038: 045419,002039: # C + SB . (C + B - D) 045420,002040: # ------ = 37777 + S(---------) 045421,002041: # C + SD ( C ) 045422,002042: 045423,002043: # THE DIVISION MAY BE PERFORMED IMMEDIATELY SINCE B IS STRICTLY LESS THAN D AND C IS NOT LESS THAN .5. 045424,002044: 045425,002045: 00,2642 40154 MAXDV CS MPAC # SEE IF MAXDV CASE STILL HOLDS AFTER 045426,002046: 00,2643 60130 AD BUF # NORMALIZATION. 045427,002047: 00,2644 00006 EXTEND 045428,002048: 00,2645 12647 BZF +2 045429,002049: 00,2646 12570 TCF GENDDV # MPAC NOW LESS THAN BUFF -- DIVIDE AS USUAL. 045430,002050: 045431,002051: 00,2647 34733 +2 CAF POSMAX # SET MAJOR PART OF RESULT. 045432,002052: 00,2650 54154 TS MPAC 045433,002053: 045434,002054: 00,2651 40131 CS BUF +1 # FORM DIVIDEND OF MINOR PART OF RESULT. 045435,002055: 00,2652 60155 AD MPAC +1 045436,002056: 00,2653 12624 TCF ENDMAXDV # GO ADD C AND DO DIVIDE, ATTACHING SIGN 045437,002057: # BEFORE EXITING. 045438,002058: 045439,002059: # Page 1066 045440,002060: # VECTOR DIVIDED BY SCALAR, V/SC, IS EXECUTED HERE. THE VECTOR IS NOW IN MPAC WITH SCALAR IN BUF. 045441,002061: 045442,002062: 00,2654 44753 V/SC2 CS ONE # INITIALIZE DIVIDEND NORMALIZATION COUNT 045443,002063: 00,2655 54137 TS DVNORMCT # AND DIVISION SIGN REGISTER. 045444,002064: 00,2656 54127 TS VBUF +5 045445,002065: 045446,002066: 00,2657 03010 TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR 045447,002067: 045448,002068: 00,2660 52131 DXCH BUF 045449,002069: 00,2661 07544 TC ALSIGNAG # SIGN AGREE BUF 045450,002070: 00,2662 52131 DXCH BUF 045451,002071: 00,2663 10130 CCS BUF # FORCE DIVISOR POSITIVE WITH MAJOR PART 045452,002072: 00,2664 12721 TCF /BUF+ # NON-ZERO (IF POSSIBLE). 045453,002073: 00,2665 12667 TCF +2 045454,002074: 00,2666 12715 TCF /BUF- 045455,002075: 045456,002076: 00,2667 56131 XCH BUF +1 # SHIFT VECTOR AND SCALAR LEFT 14. 045457,002077: 00,2670 56130 XCH BUF 045458,002078: 00,2671 56155 XCH MPAC +1 045459,002079: 00,2672 56154 XCH MPAC 045460,002080: 00,2673 00006 EXTEND # CHECK FOR OVERFLOW IN EACH CASE. 045461,002081: 00,2674 12676 BZF +2 045462,002082: 00,2675 12405 TCF DVOVF 045463,002083: 045464,002084: 00,2676 56160 XCH MPAC +4 045465,002085: 00,2677 56157 XCH MPAC +3 045466,002086: 00,2700 00006 EXTEND 045467,002087: 00,2701 12703 BZF +2 045468,002088: 00,2702 12405 TCF DVOVF 045469,002089: 045470,002090: 00,2703 56162 XCH MPAC +6 045471,002091: 00,2704 56161 XCH MPAC +5 045472,002092: 00,2705 00006 EXTEND 045473,002093: 00,2706 12710 BZF +2 045474,002094: 00,2707 12405 TCF DVOVF 045475,002095: 045476,002096: 00,2710 10130 CCS BUF 045477,002097: 00,2711 12721 TCF /BUF+ 045478,002098: 00,2712 12405 TCF DVOVF # ZERO DIVISOR - OVERFLOW. 045479,002099: 00,2713 12715 TCF /BUF- 045480,002100: 00,2714 12405 TCF DVOVF 045481,002101: 045482,002102: 00,2715 00006 /BUF- EXTEND # ON NEGATIVE, COMPLEMENT BUF AND MAINTAIN 045483,002103: 00,2716 40131 DCS BUF # DVSIGN IN VBUF +5. 045484,002104: 00,2717 52131 DXCH BUF 045485,002105: 00,2720 24127 INCR VBUF +5 045486,002106: 045487,002107: # Page 1067 045488,002108: 00,2721 00006 /BUF+ EXTEND 045489,002109: 00,2722 30131 DCA BUF # LEAVE ABS(ORIG DIVISOR) IN BUF2 045490,002110: 00,2723 52134 DXCH BUF2 # FOR OVERFLOW TESTING 045491,002111: 00,2724 12732 TCF /NORM # NORMALIZE DIVISOR IN BUF. 045492,002112: 045493,002113: 00,2725 00006 /NORM2 EXTEND # IF LESS THAN .5, AUGMENT DVNORMCT AND 045494,002114: 00,2726 24137 AUG DVNORMCT # DOUBLE DIVISOR. 045495,002115: 00,2727 00006 EXTEND 045496,002116: 00,2730 30131 DCA BUF 045497,002117: 00,2731 20131 DAS BUF 045498,002118: 045499,002119: 00,2732 30130 /NORM CA BUF # SEE IF DIVISOR NORMALIZED. 045500,002120: 00,2733 60000 DOUBLE 045501,002121: 00,2734 54000 OVSK 045502,002122: 00,2735 12725 TCF /NORM2 # DOUBLE AND TRY AGAIN IF NOT. 045503,002123: 045504,002124: 00,2736 02750 TC V/SCDV # DO X COMPONENT DIVIDE. 045505,002125: 00,2737 52160 DXCH MPAC +3 # SUPPLY ARGUMENTS IN USUAL SEQUENCE. 045506,002126: 00,2740 52155 DXCH MPAC 045507,002127: 00,2741 52160 DXCH MPAC +3 045508,002128: 045509,002129: 00,2742 02750 TC V/SCDV # Y COMPONENT. 045510,002130: 00,2743 52162 DXCH MPAC +5 045511,002131: 00,2744 52155 DXCH MPAC 045512,002132: 00,2745 52162 DXCH MPAC +5 045513,002133: 045514,002134: 00,2746 02750 TC V/SCDV # Z COMPONENT. 045515,002135: 00,2747 17420 TCF VROTATEX # GO RE-ARRANGE COMPONENTS BEFORE EXIT. 045516,002136: 045517,002137: # Page 1068 045518,002138: # SUBROUTINE USED BY V/SC TO DIVIDE VECTOR COMPONENT IN MPAC,+1 BY THE SCALAR GIVEN IN BUF. 045519,002139: 045520,002140: 00,2750 30127 V/SCDV CA VBUF +5 # REFLECTS SIGN OF SCALAR. 045521,002141: 00,2751 54136 TS DVSIGN 045522,002142: 045523,002143: 00,2752 10154 CCS MPAC # FORCE MPAC POSITIVE, EXITING ON ZERO. 045524,002144: 00,2753 12767 TCF /MPAC+ 045525,002145: 00,2754 12756 TCF +2 045526,002146: 00,2755 12763 TCF /MPAC- 045527,002147: 045528,002148: 00,2756 10155 CCS MPAC +1 045529,002149: 00,2757 12767 TCF /MPAC+ 045530,002150: 00,2760 00002 TC Q 045531,002151: 00,2761 12763 TCF /MPAC- 045532,002152: 00,2762 00002 TC Q 045533,002153: 045534,002154: 00,2763 00006 /MPAC- EXTEND # USUAL COMPLEMENTING AND SETTING OF SIGN. 045535,002155: 00,2764 40155 DCS MPAC 045536,002156: 00,2765 52155 DXCH MPAC 045537,002157: 00,2766 24136 INCR DVSIGN 045538,002158: 045539,002159: 00,2767 44753 /MPAC+ CS ONE # INITIALIZE NEAR-ONE SWITCH. 045540,002160: 00,2770 54140 TS MAXDVSW 045541,002161: 045542,002162: 00,2771 40154 CS MPAC # CHECK POSSIBLE OVERFLOW. 045543,002163: 00,2772 60133 AD BUF2 # UNNORMALIZED INPUT DIVISOR. 045544,002164: 00,2773 10000 CCS A 045545,002165: 00,2774 13004 TCF DDVCALL # NOT NEAR-ONE 045546,002166: 00,2775 12777 TCF +2 # +0 IS JUST POSSIBLE 045547,002167: 00,2776 12405 TCF DVOVF # NO HOPE 045548,002168: 00,2777 54140 TS MAXDVSW # SIGNAL POSSIBLE NEAR-ONE CASE 045549,002169: 00,3000 40155 CS MPAC +1 # SEE IF DIVISION CAN BE DONE 045550,002170: 00,3001 60134 AD BUF2 +1 045551,002171: 00,3002 00006 EXTEND 045552,002172: 00,3003 62405 BZMF DVOVF 045553,002173: 045554,002174: 00,3004 52155 DDVCALL DXCH MPAC # CALL PRE-DIVIDE NORMALIZATION. 045555,002175: 00,3005 50137 INDEX DVNORMCT 045556,002176: 00,3006 12565 TCF MAXTEST 045557,002177: 045558,002178: # Page 1069 045559,002179: 00,3007 32506 SLOPELO DEC .8324 045560,002180: 045561,002181: 00,3010 56002 VECAGREE XCH Q # SAVE Q IN A 045562,002182: 00,3011 52155 DXCH MPAC 045563,002183: 00,3012 07544 TC ALSIGNAG # SIGNAGREE MPAC 045564,002184: 00,3013 52155 DXCH MPAC 045565,002185: 00,3014 52160 DXCH MPAC +3 045566,002186: 00,3015 07544 TC ALSIGNAG # SIGN AGREE MPAC +3 045567,002187: 00,3016 52160 DXCH MPAC +3 045568,002188: 00,3017 52162 DXCH MPAC +5 045569,002189: 00,3020 07544 TC ALSIGNAG # SIGNAGREE MPAC +5 045570,002190: 00,3021 52162 DXCH MPAC +5 045571,002191: 00,3022 00000 TC A 045572,002192: 045573,002193: # Page 1070 045574,002194: # THE FOLLOWING ROUTINE EXECUTES THE UNIT INSTRUCTION, WHICH TAKES THE UNIT OF THE VECTOR IN MPAC. 045575,002195: 045576,002196: 00,3023 03010 UNIT TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR 045577,002197: 00,3024 07532 TC MPACVBUF # SAVE ARGUMENT IN VBUF 045578,002198: 00,3025 34755 CAF ZERO # MUST SENSE OVERFLOW IN FOLLOWING DOT. 045579,002199: 00,3026 56121 XCH OVFIND 045580,002200: 00,3027 54141 TS TEM1 045581,002201: 00,3030 03317 TC VSQSUB # DOT MPAC WITH ITSELF. 045582,002202: 00,3031 30141 CA TEM1 045583,002203: 00,3032 56121 XCH OVFIND 045584,002204: 00,3033 00006 EXTEND 045585,002205: 00,3034 13036 BZF +2 045586,002206: 00,3035 12405 TCF DVOVF 045587,002207: 00,3036 00006 EXTEND 045588,002208: 00,3037 30155 DCA MPAC # LEAVE THE SQUARE OF THE LENGTH OF THE 045589,002209: 00,3040 50120 INDEX FIXLOC # ARGUMENT IN LVSQUARE. 045590,002210: 00,3041 52043 DXCH LVSQUARE 045591,002211: 045592,002212: 00,3042 03343 TC SQRTSUB # GO TAKE THE NORMALIZED SQUARE ROOT. 045593,002213: 045594,002214: 00,3043 10154 CCS MPAC # CHECK FOR UNIT OVERFLOW. 045595,002215: 00,3044 13051 TCF +5 # MPAC IS NOT LESS THAN .5 UNLESS 045596,002216: 00,3045 54001 TS L 045597,002217: 00,3046 50120 INDEX FIXLOC 045598,002218: 00,3047 52045 DXCH LV 045599,002219: 00,3050 12405 TCF DVOVF # INPUT TO SQRTSUB WAS 0. 045600,002220: 045601,002221: 00,3051 44317 CS FOURTEEN # SEE IF THE INPUT WAS SO SMALL THAT THE 045602,002222: 00,3052 60135 AD MPTEMP # FIRST TWO REGISTERS OF THE SQUARE WERE 0 045603,002223: 00,3053 10000 CCS A 045604,002224: 00,3054 40000 COM # IF SO, SAVE THE NEGATIVE OF THE SHIFT 045605,002225: 00,3055 13133 TCF SMALL # COUNT -15D. 045606,002226: 045607,002227: 00,3056 13065 TCF LARGE # (THIS IS USUALLY THE CASE.) 045608,002228: 045609,002229: 00,3057 44761 CS THIRTEEN # IF THE SHIFT COUNT WAS EXACTLY 14, SET 045610,002230: 00,3060 54135 TS MPTEMP # THE PRE-DIVIDE NORM COUNT TO -13D. 045611,002231: 045612,002232: 00,3061 30154 CA MPAC # SHIFT THE LENGTH RIGHT 14 BEFORE STORING 045613,002233: 00,3062 54001 SMALL2 TS L # (SMALL EXITS TO THIS POINT). 045614,002234: 00,3063 34755 CAF ZERO 045615,002235: 00,3064 13112 TCF LARGE2 # GO TO STORE LENGTH AND PROCEED. 045616,002236: 045617,002237: 00,3065 10135 LARGE CCS MPTEMP # MOST ALL CASES COME HERE. 045618,002238: 00,3066 13074 TCF LARGE3 # SEE IF NO NORMALIZATION WAS REQUIRED BY 045619,002239: 045620,002240: 00,3067 42024 CS SRDDV # SQRT, AND IF SO, SET UP FOR A SHIFT 045621,002241: 00,3070 54135 TS MPTEMP # RIGHT 1 BEFORE DIVIDING TO PRODUCE 045622,002242: 00,3071 00006 EXTEND # THE DESIRED HALF UNIT VECTOR. 045623,002243: 00,3072 30155 DCA MPAC 045624,002244: # Page 1071 045625,002245: 00,3073 13112 TCF LARGE2 045626,002246: 045627,002247: # Page 1072 045628,002248: 00,3074 40000 LARGE3 COM # LEAVE NEGATIVE OF SHIFT COUNT-1 FOR 045629,002249: 00,3075 54135 TS MPTEMP # PREDIVIDE LEFT SHIFT. 045630,002250: 045631,002251: 00,3076 40000 COM # PICK UP REQUIRED SHIFTING BIT TO UNNORM- 045632,002252: 00,3077 50000 INDEX A # ALIZE THE SQRT RESULT. 045633,002253: 00,3100 34736 CAF BIT14 045634,002254: 00,3101 54130 TS BUF 045635,002255: 00,3102 00006 EXTEND 045636,002256: 00,3103 70155 MP MPAC +1 045637,002257: 00,3104 56130 XCH BUF 045638,002258: 00,3105 00006 EXTEND # (UNNORMALIZE THE SQRT FOR LV). 045639,002259: 00,3106 70154 MP MPAC 045640,002260: 00,3107 56001 XCH L 045641,002261: 00,3110 60130 AD BUF 045642,002262: 00,3111 56001 XCH L 045643,002263: 045644,002264: 00,3112 50120 LARGE2 INDEX FIXLOC 045645,002265: 00,3113 52045 DXCH LV # LENGTH NOW STORED IN WORK AREA. 045646,002266: 045647,002267: 00,3114 44753 CS ONE 045648,002268: 00,3115 54140 TS MAXDVSW # NO MAXDV CASES IN UNIT. 045649,002269: 045650,002270: 00,3116 52123 DXCH VBUF # PREPARE X COMPONENT FOR DIVIDE, SETTING 045651,002271: 00,3117 52155 DXCH MPAC # LENGTH OF VECTOR AS DIVISOR IN BUF. 045652,002272: 00,3120 52131 DXCH BUF 045653,002273: 00,3121 03151 TC UNITDV 045654,002274: 045655,002275: 00,3122 52125 DXCH VBUF +2 # DO Y AND Z IN USUAL FASHION SO WE CAN 045656,002276: 00,3123 52155 DXCH MPAC # EXIT THROUGH VROTATEX. 045657,002277: 00,3124 52160 DXCH MPAC +3 045658,002278: 00,3125 03151 TC UNITDV 045659,002279: 045660,002280: 00,3126 52127 DXCH VBUF +4 045661,002281: 00,3127 52155 DXCH MPAC 045662,002282: 00,3130 52162 DXCH MPAC +5 045663,002283: 00,3131 03151 TC UNITDV 045664,002284: 00,3132 17420 TCF VROTATEX # AND EXIT. 045665,002285: 045666,002286: # Page 1073 045667,002287: # IF THE LENGTH OF THE ARGUMENT VECTOR WAS LESS THAN 2(-28), EACH COMPONENT MUST BE SHIFTED LEFT AT LEAST 045668,002288: # 14 PLACES BEFORE THE DIVIDE. NOTE THAT IN THIS CASE, THE MAJOR PART OF EACH COMPONENT IS ZERO. 045669,002289: 045670,002290: 00,3133 54135 SMALL TS MPTEMP # NEGATIVE OF PRE-DIVIDE SHIFT COUNT. 045671,002291: 045672,002292: 00,3134 34755 CAF ZERO # SHIFT EACH COMPONENT LEFT 14. 045673,002293: 00,3135 56123 XCH VBUF +1 045674,002294: 00,3136 56122 XCH VBUF 045675,002295: 00,3137 56125 XCH VBUF +3 045676,002296: 00,3140 56124 XCH VBUF +2 045677,002297: 00,3141 56127 XCH VBUF +5 045678,002298: 00,3142 56126 XCH VBUF +4 045679,002299: 045680,002300: 00,3143 40135 CS MPTEMP 045681,002301: 00,3144 50000 INDEX A 045682,002302: 00,3145 34736 CAF BIT14 045683,002303: 00,3146 00006 EXTEND 045684,002304: 00,3147 70154 MP MPAC 045685,002305: 00,3150 13062 TCF SMALL2 045686,002306: 045687,002307: 00,3151 4761 THIRTEEN = OCT15 045688,002308: 00,3151 4317 FOURTEEN = OCT16 045689,002309: 00,3151 4317 OCT16 = R1D1 045690,002310: 045691,002311: # Page 1074 045692,002312: # THE FOLLOWING ROUTINE SETS UP THE CALL TO THE DIVIDE ROUTINES. 045693,002313: 045694,002314: 00,3151 10154 UNITDV CCS MPAC # FORCE MPAC POSITIVE IF POSSIBLE, SETTING 045695,002315: 00,3152 13170 TCF UMPAC+ # DVSIGN ACCORDING TO THE SIGN OF MPAC 045696,002316: 00,3153 13155 TCF +2 # SINCE THE DIVISOR IS ALWAYS POSITIVE 045697,002317: 00,3154 13162 TCF UMPAC- # HERE. 045698,002318: 045699,002319: 00,3155 10155 CCS MPAC +1 045700,002320: 00,3156 13170 TCF UMPAC+ 045701,002321: 00,3157 00002 TC Q # EXIT IMMEDIATELY ON ZERO. 045702,002322: 00,3160 13162 TCF UMPAC- 045703,002323: 00,3161 00002 TC Q 045704,002324: 045705,002325: 00,3162 44755 UMPAC- CS ZERO # IF NEGATIVE, SET -0 IN DVSIGN FOR FINAL 045706,002326: 00,3163 54136 TS DVSIGN # COMPLEMENT. 045707,002327: 00,3164 00006 EXTEND 045708,002328: 00,3165 40155 DCS MPAC # PICK UP ABSOLUTE VALUE OF ARG AND JUMP. 045709,002329: 00,3166 50135 INDEX MPTEMP 045710,002330: 00,3167 12564 TCF MAXTEST -1 045711,002331: 045712,002332: 00,3170 54136 UMPAC+ TS DVSIGN # SET DVSIGN FOR POSITIVE QUOTIENT. 045713,002333: 00,3171 52155 DXCH MPAC 045714,002334: 00,3172 50135 INDEX MPTEMP 045715,002335: 00,3173 12564 TCF MAXTEST -1 045716,002336: 045717,002337: # Page 1075 045718,002338: # MISCELLANEOUS UNARY OPERATIONS. 045719,002339: 045720,002340: 00,3174 03300 DSQ TC DSQSUB # SQUARE THE DP CONTENTS OF MPAC. 045721,002341: 00,3175 16061 TCF DANZIG 045722,002342: 045723,002343: 00,3176 10163 ABVALABS CCS MODE # ABVAL OR ABS INSTRUCTION. 045724,002344: 00,3177 13226 TCF ABS # DO ABS ON SCALAR. 045725,002345: 00,3200 13226 TCF ABS 045726,002346: 045727,002347: 00,3201 03317 ABVAL TC VSQSUB # DOT MPAC WITH ITSELF. 045728,002348: 00,3202 22163 LXCH MODE # MODE IS NOW DP (L ZERO AFTER DAS). 045729,002349: 045730,002350: 00,3203 00006 EXTEND # STORE SQUARE OF LENGTH IN WORK AREA. 045731,002351: 00,3204 30155 DCA MPAC 045732,002352: 00,3205 50120 INDEX FIXLOC 045733,002353: 00,3206 52043 DXCH LVSQUARE 045734,002354: 045735,002355: # Page 1076 045736,002356: # PROGRAM DESCRIPTION -- SUBROUTINE SQRT 045737,002357: 045738,002358: # FUNCTIONAL DESCRIPTION -- DOUBLE PRECISION SQUARE ROOT ROUTINE 045739,002359: # THIS PROGRAM TAKES THE SQUARE ROOT OF THE 27 OR 28 MOST SIGNIFICANT BITS IN THE TRIPLE PRECISION SET OF 045740,002360: # NUMBERS -- MPAC, MPAC+1, AND MPAC+2. THE ROOT IS RETURNED DOUBLE PRECISION IN MPAC AND MPAC+1. 045741,002361: 045742,002362: # WARNING -- THIS SUBROUTINE USES A TRIPLE PRECISION INPUT. THE PROGRAMMER MUST ASSURE THE CONTENTS OF MPAC+2 045743,002363: # ESPECIALLY IF THE CONTENTS OF MPAC IS SMALL OR ZERO. FOR DETAILS SEE STG MEMO NO.949. 045744,002364: 045745,002365: # CALLING SEQUENCE -- IN INTERPRETIVE MODE, I.E., FOLLOWING `TC INTPRET', `SQRT', NO ADDRESS IS ALLOWED. 045746,002366: # INPUT SCALING: THE BINARY POINT IS ASSUMED TO THE RIGHT OF BIT 15. THE ANSWER IS RETURNED WITH THE SAME SCALING. 045747,002367: 045748,002368: # SUBROUTINES -- GENSCR, MPACSHR, SQRTSUB, ABORT 045749,002369: 045750,002370: # ABORT EXIT MODE -- ABORTS ON NEGATIVE INPUT -1.2X10E-4 (77775 OCTAL) OR LESS. 045751,002371: # DISPLAYS ERROR CODE 1302 045752,002372: # TC ABORT 045753,002373: # OCT 1302 045754,002374: 045755,002375: # DEBRIS -- LOCATIONS BUF, MPTEMP, ADDRWD ARE USED 045756,002376: 045757,002377: 00,3207 03343 SQRT TC SQRTSUB # TAKE THE SQUARE ROOT OF MPAC. 045758,002378: 00,3210 10135 CCS MPTEMP # RETURNED NORMALIZED SQUARE ROOT. SEE IF 045759,002379: 00,3211 13213 TCF +2 # ANY UN-NORMALIZATION REQUIRED AND EXIT 045760,002380: 00,3212 16061 TCF DANZIG # IF NOT. 045761,002381: 045762,002382: 00,3213 63733 AD NEG12 # A RIGHT SHIFT OF MORE THAN 13 COULD BE 045763,002383: 00,3214 00006 EXTEND # REQUIRED IF INPUT WAS ZERO IN MPAC,+1. 045764,002384: 00,3215 63221 BZMF SQRTSHFT # GOES HERE IN MOST CASES. 045765,002385: 00,3216 22007 ZL # IF A LONG SHIFT IS REQUIRED, GO TO 045766,002386: 00,3217 22116 LXCH ADDRWD # GENERAL RIGHT SHIFT ROUTINES. 045767,002387: 00,3220 12303 TCF GENSCR +4 # ADDRWD WAS ZERO TO PREVENT ROUND. 045768,002388: 045769,002389: 00,3221 50135 SQRTSHFT INDEX MPTEMP # SELECT SHIFTING BIT AND EXIT THROUGH 045770,002390: 00,3222 34735 CAF BIT15 # SHIFT ROUTINES. 045771,002391: 00,3223 54135 TS MPTEMP 045772,002392: 00,3224 34755 CAF ZERO # TO ZERO MPAC +2 IN THE PROCESS. 045773,002393: 00,3225 12036 TCF MPACSHR +3 045774,002394: 045775,002395: 00,3226 06723 ABS TC BRANCH # TEST SIGN OF MPAC AND COMPLEMENT IF 045776,002396: 00,3227 16061 TCF DANZIG 045777,002397: 00,3230 16061 TCF DANZIG 045778,002398: 00,3231 17670 TCF COMP 045779,002399: 045780,002400: # Page 1077 045781,002401: 00,3232 44751 VDEF CS FOUR # VECTOR DEFINE -- ESSENTIALLY TREATS 045782,002402: 00,3233 26166 ADS PUSHLOC # SCALAR IN MPAC AS X COMPONENT, PUSHES UP 045783,002403: 00,3234 00006 EXTEND # FOR Y AND THEN AGAIN FOR Z. 045784,002404: 00,3235 50000 INDEX A 045785,002405: 00,3236 30003 DCA 2 045786,002406: 00,3237 52160 DXCH MPAC +3 045787,002407: 00,3240 00006 EXTEND 045788,002408: 00,3241 50166 INDEX PUSHLOC 045789,002409: 00,3242 30001 DCA 0 045790,002410: 00,3243 52162 DXCH MPAC +5 045791,002411: 00,3244 16521 TCF VMODE # MODE IS NON VECTOR. 045792,002412: 045793,002413: 00,3245 03317 VSQ TC VSQSUB # DOT MPAC WITH ITSELF. 045794,002414: 00,3246 17332 TCF DMODE # MODE IS NOW DP. 045795,002415: 045796,002416: 00,3247 00006 PUSH EXTEND # PUSH DOWN MPAC LEAVING IT LOADED. 045797,002417: 00,3250 30155 DCA MPAC 045798,002418: 00,3251 50166 INDEX PUSHLOC # PUSH DOWN FIRST TWO REGISTERS IN EACH 045799,002419: 00,3252 52001 DXCH 0 045800,002420: 045801,002421: 00,3253 50163 INDEX MODE # INCREMENT PUSHDOWN POINTER. 045802,002422: 00,3254 36244 CAF NO.WDS 045803,002423: 00,3255 26166 ADS PUSHLOC 045804,002424: 045805,002425: 00,3256 10163 CCS MODE 045806,002426: 00,3257 13272 TCF TPUSH # PUSH DOWN MPAC +2. 045807,002427: 00,3260 16061 TCF DANZIG # DONE FOR DP. 045808,002428: 045809,002429: 00,3261 00006 EXTEND # ON VECTOR, PUSH DOWN Y AND Z COMPONENTS. 045810,002430: 00,3262 30160 DCA MPAC +3 045811,002431: 00,3263 50166 INDEX PUSHLOC 045812,002432: 00,3264 51775 DXCH 0 -4 045813,002433: 00,3265 00006 EXTEND 045814,002434: 00,3266 30162 DCA MPAC +5 045815,002435: 00,3267 50166 INDEX PUSHLOC 045816,002436: 00,3270 51777 DXCH 0 -2 045817,002437: 00,3271 16061 TCF DANZIG 045818,002438: 045819,002439: 00,3272 30156 TPUSH CA MPAC +2 045820,002440: 00,3273 16554 TCF ENDTPUSH +2 045821,002441: 045822,002442: 00,3274 50120 RVQ INDEX FIXLOC # RVQ -- RETURN IVA QPRET. 045823,002443: 00,3275 30052 CA QPRET 045824,002444: 00,3276 54117 TS POLISH 045825,002445: 00,3277 16652 TCF GOTO +4 # (ASSUME QPRET POINTS TO FIXED ONLY.) 045826,002446: 045827,002447: # Page 1078 045828,002448: # THE FOLLOWING SUBROUTINES ARE USED IN SQUARING MPAC, IN BOTH THE SCALAR AND VECTOR SENSE. THEY ARE 045829,002449: # SPECIAL CASES OF DMPSUB AND DOTSUB, PUT IN TO SAVE SOME TIME. 045830,002450: 045831,002451: 00,3300 30155 DSQSUB CA MPAC +1 # SQUARES THE SCALAR CONTENTS OF MPAC. 045832,002452: 00,3301 00006 EXTEND 045833,002453: 00,3302 70000 SQUARE 045834,002454: 00,3303 54156 TS MPAC +2 045835,002455: 00,3304 34755 CAF ZERO # FORM 2(CROSS TERM). 045836,002456: 00,3305 56155 XCH MPAC +1 045837,002457: 00,3306 00006 EXTEND 045838,002458: 00,3307 70154 MP MPAC 045839,002459: 00,3310 20001 DDOUBL # AND MAYBE OVEFLOW. 045840,002460: 00,3311 20156 DAS MPAC +1 # AND SET A TO NET OVERFLOW. 045841,002461: 00,3312 56154 XCH MPAC 045842,002462: 00,3313 00006 EXTEND 045843,002463: 00,3314 70000 SQUARE 045844,002464: 00,3315 20155 DAS MPAC 045845,002465: 00,3316 00002 TC Q 045846,002466: 045847,002467: 00,3317 00006 VSQSUB EXTEND # DOTS THE VECTOR IN MPAC WITH ITSELF. 045848,002468: 00,3320 22137 QXCH DOTRET 045849,002469: 00,3321 03300 TC DSQSUB # SQUARE THE X COMPONENT. 045850,002470: 00,3322 52160 DXCH MPAC +3 045851,002471: 00,3323 52155 DXCH MPAC 045852,002472: 00,3324 52131 DXCH BUF # SO WE CAN END IN DOTSUB. 045853,002473: 00,3325 30156 CA MPAC +2 045854,002474: 00,3326 54132 TS BUF +2 045855,002475: 045856,002476: 00,3327 03300 TC DSQSUB # SQUARE Y COMPONENT. 045857,002477: 00,3330 52156 DXCH MPAC +1 045858,002478: 00,3331 20132 DAS BUF +1 045859,002479: 00,3332 60154 AD MPAC 045860,002480: 00,3333 60130 AD BUF 045861,002481: 00,3334 54130 TS BUF 045862,002482: 00,3335 13337 TCF +2 045863,002483: 00,3336 54121 TS OVFIND # IF OVERFLOW. 045864,002484: 045865,002485: 00,3337 52162 DXCH MPAC +5 045866,002486: 00,3340 52155 DXCH MPAC 045867,002487: 00,3341 03300 TC DSQSUB # SQUARE Z COMPONENT. 045868,002488: 00,3342 17205 TCF ENDDOT # END AS IN DOTSUB. 045869,002489: 045870,002490: # Page 1079 045871,002491: # DOUBLE PRECISION SQUARE ROOT ROUTINE. TAKE THE SQUARE ROOT OF THE TRIPLE PRECISION (MPAC +2 USED ONLY 045872,002492: # IN NORMALIZATION) CONTENTS OF MPAC AND LEAVE THE NORMALIZED RESULT IN MPAC (C(MPAC) GREATER THAN OR EQUAL TO 045873,002493: # .5). THE RIGHT SHIFT COUNT (TC UNNORMALIZE) IS LEFT IN MPTEMP. 045874,002494: 045875,002495: 00,3343 34755 SQRTSUB CAF ZERO # START BY ZEROING RIGHT SHIFT COUNT. 045876,002496: 00,3344 54135 TS MPTEMP 045877,002497: 045878,002498: 00,3345 10154 CCS MPAC # CHECK FOR POSITIVE ARGUMENT, SHIFTING 045879,002499: 00,3346 13405 TCF SMPAC+ # FIRST SIGNIFICANT MPAC REGISTER INTO 045880,002500: 00,3347 13351 TCF +2 # MPAC ITSELF. 045881,002501: 00,3350 13373 TCF SQRTNEG # SEE IF MAG OF ARGUMENT LESS THAN 10(-4). 045882,002502: 045883,002503: 00,3351 56156 XCH MPAC +2 # MPAC IS ZERO -- SHIFT LEFT 14. 045884,002504: 00,3352 56155 XCH MPAC +1 045885,002505: 00,3353 54154 TS MPAC 045886,002506: 00,3354 34757 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER. 045887,002507: 00,3355 54135 TS MPTEMP 045888,002508: 045889,002509: 00,3356 10154 CCS MPAC # SEE IF MPAC NOW PNZ. 045890,002510: 00,3357 13405 TCF SMPAC+ 045891,002511: 00,3360 13362 TCF +2 045892,002512: 00,3361 13376 TCF ZEROANS # NEGATIVE BUT LESS THAN 10(-4) IN MAG. 045893,002513: 045894,002514: 00,3362 56155 XCH MPAC +1 # XERO -- SHIFT LEFT 14 AGAIN. 045895,002515: 00,3363 54154 TS MPAC 045896,002516: 00,3364 34757 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER. 045897,002517: 00,3365 26135 ADS MPTEMP 045898,002518: 045899,002519: 00,3366 10154 CCS MPAC 045900,002520: 00,3367 13405 TCF SMPAC+ 045901,002521: 00,3370 00002 TC Q # SQRT(0) = 0. 045902,002522: 00,3371 13376 TCF ZEROANS 045903,002523: 00,3372 13453 TCF FIXROOT # DO NOT LEAVE SQRTSUB WITH -0 IN MPAC. 045904,002524: 045905,002525: 00,3373 10000 SQRTNEG CCS A # ARGUMENT IS NEGATIVE, BUT SEE IF SIGN- 045906,002526: 00,3374 13402 TCF SQRTABRT # CORRECTED ARGUMENT IS LESS THAN 10(-4) 045907,002527: 045908,002528: 00,3375 10155 CCS MPAC +1 # IN MAGNITUDE. IF SO, CALL ANSWER ZERO. 045909,002529: 00,3376 34755 ZEROANS CAF ZERO # FORCE ANSWER TO ZERO HERE. 045910,002530: 00,3377 13453 TCF FIXROOT 045911,002531: 00,3400 13402 TCF SQRTABRT 045912,002532: 00,3401 13453 TCF FIXROOT 045913,002533: 045914,002534: 00,3402 52165 SQRTABRT DXCH LOC 045915,002535: 00,3403 05726 TC P00DOO1 045916,002536: 00,3404 01302 OCT 1302 045917,002537: 045918,002538: # Page 1080 045919,002539: 00,3405 62444 SMPAC+ AD -1/2+2 # SEE IF ARGUMENT GREATER THAN OR EQUAL TO 045920,002540: 00,3406 00006 EXTEND # .5. 045921,002541: 00,3407 63456 BZMF SRTEST # IF SO, SEE IF LESS THAN .25. 045922,002542: 045923,002543: 00,3410 52155 DXCH MPAC # WE WILL TAKE THE SQUARE ROOT OF MPAC/2. 045924,002544: 00,3411 22021 LXCH SR # SHIFT RIGHT 1 AND GO TO THE SQRT ROUTINE 045925,002545: 00,3412 00006 EXTEND 045926,002546: 00,3413 74736 MP HALF 045927,002547: 00,3414 52155 DXCH MPAC 045928,002548: 00,3415 56021 XCH SR 045929,002549: 00,3416 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW. 045930,002550: 045931,002551: 00,3417 32314 ARGHI CAF SLOPEHI # ARGUMENT BETWEEN .25 AND .5, GET A 045932,002552: 00,3420 00006 EXTEND # LINEAR APPROXIMATION FOR THIS RANGE. 045933,002553: 00,3421 70154 MP MPAC 045934,002554: 00,3422 62566 AD BIASHI # X0/2 = (MPAC/2)(SLOPHI) + BIASHI/2. 045935,002555: 045936,002556: 00,3423 54130 +4 TS BUF # X0/2 (ARGLO ENTERS HERE). 045937,002557: 00,3424 30154 CA MPAC # SINGLE-PRECISION THROUGHOUT. 045938,002558: 00,3425 22007 ZL 045939,002559: 00,3426 00006 EXTEND 045940,002560: 00,3427 10130 DV BUF # (MPAC/2)/(X0/2) 045941,002561: 00,3430 00006 EXTEND 045942,002562: 00,3431 74736 MP HALF 045943,002563: 00,3432 26130 ADS BUF # X1 = X0/2 + .5(MPAX/2)/(X0/2) 045944,002564: 045945,002565: 00,3433 00006 EXTEND 045946,002566: 00,3434 74736 MP HALF # FORM UP X1/2. 045947,002567: 00,3435 52155 DXCH MPAC # SAVE AND BRING OUT ARGUMENT. 045948,002568: 00,3436 00006 EXTEND # TAKE DP QUOTIENT WITH X1. 045949,002569: 00,3437 10130 DV BUF 045950,002570: 00,3440 54131 TS BUF +1 # SAVE MAJOR PART OF QUOTIENT. 045951,002571: 00,3441 34755 CAF ZERO # FORM MINOR PART OF QUOTIENT USING 045952,002572: 00,3442 56001 XCH L # (REMAINDER,0). 045953,002573: 00,3443 00006 EXTEND 045954,002574: 00,3444 10130 DV BUF 045955,002575: 00,3445 54001 TS L # IN PREPARATION FOR DAS. 045956,002576: 00,3446 30131 CA BUF +1 045957,002577: 00,3447 20155 DAS MPAC # X2 = X1/2 + (MPAC/2)X1 045958,002578: 045959,002579: 00,3450 00006 EXTEND # OVERFLOWS IF ARG. NEAR POSMAX. 045960,002580: 00,3451 13455 BZF TCQBNK00 045961,002581: 00,3452 34733 CAF POSMAX 045962,002582: 00,3453 54154 FIXROOT TS MPAC 045963,002583: 00,3454 54155 TS MPAC +1 045964,002584: 00,3455 00002 TCQBNK00 TC Q # RETURN TO CALLER TO UNNORMALIZE, ETC. 045965,002585: 045966,002586: # Page 1081 045967,002587: 00,3456 64737 SRTEST AD QUARTER # ARGUMENT WAS LESS THAN .5, SEE IF LESS 045968,002588: 00,3457 00006 EXTEND # THAN .25. 045969,002589: 00,3460 63502 BZMF SQRTNORM # IF SO, BEGIN NORMALIZATION. 045970,002590: 045971,002591: 00,3461 52155 DXCH MPAC # IF BETWEEN .5 AND .25, SHIFT RIGHT 1 AND 045972,002592: 00,3462 22021 LXCH SR # START AT ARGLO. 045973,002593: 00,3463 00006 EXTEND 045974,002594: 00,3464 74736 MP HALF 045975,002595: 00,3465 52155 DXCH MPAC 045976,002596: 00,3466 56021 XCH SR 045977,002597: 00,3467 26155 ADS MPAC +1 # NO OVERFLOW. 045978,002598: 045979,002599: 00,3470 33007 ARGLO CAF SLOPELO # (NORMALIZED) ARGUMENT BETWEEN .125 AND 045980,002600: 00,3471 00006 EXTEND # .25 045981,002601: 00,3472 70154 MP MPAC 045982,002602: 00,3473 62270 AD BIASLO 045983,002603: 00,3474 13423 TCF ARGHI +4 # BEGIN SQUARE ROOT. 045984,002604: 045985,002605: 00,3475 00006 SQRTNM2 EXTEND # SHIFT LEFT 2 AND INCREMENT RIGHT SHIFT 045986,002606: 00,3476 30156 DCA MPAC +1 # COUNT (FOR TERMINAL UNNORMALIZATION). 045987,002607: 00,3477 20156 DAS MPAC +1 045988,002608: 00,3500 60154 AD MPAC 045989,002609: 00,3501 26154 ADS MPAC # (NO OVERFLOW). 045990,002610: 045991,002611: 00,3502 24135 SQRTNORM INCR MPTEMP # FIRST TIME THROUGH, JUST SHIFT LEFT 1 045992,002612: 00,3503 00006 EXTEND # (PUTS IN EFFECTIVE RIGHT SHIFT SINCE 045993,002613: 00,3504 30156 DCA MPAC +1 # WE WANT MPAC/2). 045994,002614: 00,3505 20156 DAS MPAC +1 045995,002615: 00,3506 60154 AD MPAC 045996,002616: 00,3507 26154 ADS MPAC # (AGAIN NO OVERFLOW). 045997,002617: 00,3510 60000 DOUBLE 045998,002618: 00,3511 54022 TS CYL 045999,002619: 046000,002620: 00,3512 10022 NORMTEST CCS CYL # SEE IF ARGUMENT NOW NORMALIZED AT 046001,002621: 00,3513 10022 CCS CYL # GREATER THAN .125. 046002,002622: 00,3514 13475 TCF SQRTNM2 # NO -- SHIFT LEFT 2 MORE AND TRY AGAIN. 046003,002623: 00,3515 13417 TCF ARGHI # YES -- NOW BETWEEN .5 AND .25. 046004,002624: 00,3516 13470 TCF ARGLO # ARGUMENT NOW BETWEEN .25 AND .125. 046005,002625: 046006,002626: # Page 1082 046007,002627: # TRIGONOMETRIC FUNCTION PACKAGE. 046008,002628: # THE FOLLOWING TRIGONOMETRIC FUNCTIONS ARE AVAIALABLE AS INTERPRETIVE OPERATIONS: 046009,002629: # 1. SIN COMPUTES (1/2)SINE(2 PI MPAC). 046010,002630: # 2. COS COMPUTES (1/2)COSINE(2 PI MPAC). 046011,002631: # 3. ASIN COMPUTES (1/2PI)ARCSINE(2 MPAC). 046012,002632: # 4. ACOS COMPUTES (1/2PI)ARCCOSINE(2 MPAC). 046013,002633: 046014,002634: # SIN-ASIN AND COS-ACOS ARE MUTUALLY INVERSE, I.E., SIN(ASIN(X)) = X. 046015,002635: 046016,002636: 00,3517 06723 COSINE TC BRANCH # FINDS COSINE USING THE IDENTITY 046017,002637: 00,3520 13523 TCF +3 # COS(X) = SIN(PI/2 - ABS(X)). 046018,002638: 00,3521 13526 TCF PRESINE 046019,002639: 00,3522 13526 TCF PRESINE 046020,002640: 046021,002641: 00,3523 00006 +3 EXTEND 046022,002642: 00,3524 40155 DCS MPAC 046023,002643: 00,3525 52155 DXCH MPAC 046024,002644: 046025,002645: 00,3526 34737 PRESINE CAF QUARTER # PI/2 SCALED. 046026,002646: 00,3527 26154 ADS MPAC 046027,002647: 046028,002648: 00,3530 52155 SINE DXCH MPAC # DOUBLE ARGUMENT. 046029,002649: 00,3531 20001 DDOUBL 046030,002650: 00,3532 54000 OVSK # SEE IF OVERFLOW PRESENT. 046031,002651: 00,3533 13536 TCF +3 # IF NOT, ARGUMENT OK AS IS. 046032,002652: 046033,002653: 00,3534 00006 EXTEND # IF SO, WE LOST (OR GAINED) PI, SO 046034,002654: 00,3535 40001 DCOM # COMPLEMENT MPAC USING THE IDENTITY 046035,002655: # SIN(X-(+)PI) = SIN(-X). 046036,002656: 00,3536 52155 +3 DXCH MPAC 046037,002657: 00,3537 30154 CA MPAC # SEE IF ARGUMENT GREATER THAN .5 IN 046038,002658: 00,3540 60000 DOUBLE # MAGNITUDE. IF SO, REDUCE IT TO LESS THAN 046039,002659: 00,3541 54001 TS L # .5 (+-PI/2 SCALED) AS FOLLOWS: 046040,002660: 00,3542 13553 TCF SN1 046041,002661: 046042,002662: 00,3543 50000 INDEX A # IF POSITIVE, FORM PI - X, IF NEGATIVE 046043,002663: 00,3544 34735 CAF NEG1/2 +1 # USE -PI -X. 046044,002664: 00,3545 60000 DOUBLE 046045,002665: 00,3546 00006 EXTEND 046046,002666: 00,3547 60154 SU MPAC # GUARANTEED NO OVERFLOW. 046047,002667: 00,3550 54154 TS MPAC 046048,002668: 00,3551 40155 CS MPAC +1 046049,002669: 00,3552 54155 TS MPAC +1 046050,002670: 046051,002671: # Page 1083 046052,002672: 00,3553 00006 SN1 EXTEND # SET UP TO EVALUATE HASTINGS POLYNOMIAL 046053,002673: 00,3554 30155 DCA MPAC 046054,002674: 00,3555 52134 DXCH BUF2 046055,002675: 00,3556 03300 TC DSQSUB # SQUARE MPAC. 046056,002676: 046057,002677: 00,3557 07222 TC POLY # EVALUATE FOURTH ORDER POLYNOMIAL. 046058,002678: 00,3560 00003 DEC 3 B-14 046059,002679: 00,3561 14441 37325 2DEC +.3926990796 046060,002680: 046061,002681: 00,3563 53250 60764 2DEC -.6459637111 046062,002682: 046063,002683: 00,3565 12146 21276 2DEC +.318758717 046064,002684: 046065,002685: 00,3567 75466 71471 2DEC -.074780249 046066,002686: 046067,002687: 00,3571 00236 32757 2DEC +.009694988 046068,002688: 046069,002689: 00,3573 32470 CAF LBUF2 # MULTIPLY BY ARGUMENT AND SHIFT LEFT 2. 046070,002690: 00,3574 07106 TC DMPSUB -1 046071,002691: 046072,002692: 00,3575 00006 EXTEND 046073,002693: 00,3576 30156 DCA MPAC +1 046074,002694: 00,3577 20156 DAS MPAC +1 046075,002695: 00,3600 60154 AD MPAC 046076,002696: 00,3601 26154 ADS MPAC # NEITHER SHIFT OVERFLOWS. 046077,002697: 00,3602 00006 EXTEND 046078,002698: 00,3603 30156 DCA MPAC +1 046079,002699: 00,3604 20156 DAS MPAC +1 046080,002700: 00,3605 60154 AD MPAC 046081,002701: 00,3606 26154 ADS MPAC 046082,002702: 00,3607 16061 TCF DANZIG 046083,002703: 046084,002704: # Page 1084 046085,002705: # ARCSIN/ARCCOS ROUTINE. 046086,002706: 046087,002707: 00,3610 33631 ARCSIN CAF LASINEX # COMPUTE ARCSIN BY USING THE IDENTITY 046088,002708: 00,3611 13613 TCF +2 # ARCSIN(X) = PI/2 - ARCCOS(X). 046089,002709: 046090,002710: 00,3612 33713 ARCCOS CAF LDANZIG # (EXITS IMMEDIATELY). 046091,002711: 00,3613 54136 TS ESCAPE 046092,002712: 00,3614 06723 TC BRANCH # TEST SIGN OF INPUT. 046093,002713: 00,3615 13625 TCF ACOSST # START IMMEDIATELY IF POSITIVE. 046094,002714: 00,3616 13731 TCF ACOSZERO # ARCCOS(0) = PI/2 = .25. 046095,002715: 00,3617 00006 EXTEND # IF NEGATIVE, USE THE IDENTITY 046096,002716: 00,3620 40155 DCS MPAC # ARCCOS(X) = PI - ARCCOS(-X), FORCING 046097,002717: 00,3621 52155 DXCH MPAC # ARGUMENT POSITIVE. 046098,002718: 00,3622 33734 CAF TCSUBTR # SET EXIT TO DO ABOVE BEFORE 046099,002719: 00,3623 56136 XCH ESCAPE # ARCSIN/ARCCOS CONSIDERATIONS. 046100,002720: 00,3624 54137 TS ESCAPE2 046101,002721: 046102,002722: 00,3625 44736 ACOSST CS HALF # TEST MAGNITUDE OF INPUT. 046103,002723: 00,3626 60154 AD MPAC 046104,002724: 00,3627 10000 CCS A 046105,002725: 00,3630 13721 TCF ACOSOVF # THIS IS PROBABLY AN OVERFLOW CASE. 046106,002726: 046107,002727: 00,3631 13707 LASINEX TCF ASINEX 046108,002728: 046109,002729: 00,3632 13642 TCF ACOSST2 # NO OVERFLOW -- PROCEED. 046110,002730: 046111,002731: 00,3633 10155 CCS MPAC +1 # IF MAJOR PART IS .5, CALL ANSWER 0 046112,002732: 00,3634 34755 CAF ZERO # UNLESS MINOR PART NEGATIVE. 046113,002733: 00,3635 13637 TCF ACOS=0 046114,002734: 046115,002735: 00,3636 13642 TCF ACOSST2 046116,002736: 046117,002737: 00,3637 54155 ACOS=0 TS MPAC +1 046118,002738: 00,3640 54154 TS MPAC 046119,002739: 00,3641 00136 TC ESCAPE 046120,002740: 046121,002741: 00,3642 00006 ACOSST2 EXTEND # NOW THAT ARGUMENT IS IN PROPER RANGE, 046122,002742: 00,3643 40155 DCS MPAC # BEGIN COMPUTATION. USE HASTINGS 046123,002743: 00,3644 64736 AD HALF # APPROXIMATION ARCCOS(X) = SQRT(1-X)P(X) 046124,002744: 00,3645 52155 DXCH MPAC # IN A SCALED VERSION WHERE P(X) IS A 046125,002745: 00,3646 52134 DXCH BUF2 # SEVENTH ORDER POLYNOMIAL. 046126,002746: 046127,002747: 00,3647 03343 TC SQRTSUB # RETURNS WITH NORMALIZED SQUARE ROOT. 046128,002748: 046129,002749: 00,3650 10135 CCS MPTEMP # SEE IF UN-NORMALIZATION REQUIRED. 046130,002750: 00,3651 13714 TCF ACOSSHR # IF SO. 046131,002751: 046132,002752: # Page 1085 046133,002753: 00,3652 52155 ACOS3 DXCH MPAC # SET UP FOR POLYNOMIAL EVALUATION. 046134,002754: 00,3653 52134 DXCH BUF2 046135,002755: 00,3654 52155 DXCH MPAC 046136,002756: 046137,002757: 00,3655 07222 TC POLY 046138,002758: 00,3656 00006 DEC 6 B-14 046139,002759: 00,3657 13240 23630 2DEC +.353553385 # COEFFICIENTS ARE C 2(+I)/PISQRT(2) WHERE 046140,002760: 046141,002761: 00,3661 74721 47775 2DEC* -.0483017006 B+1* # I 046142,002762: 046143,002763: 00,3663 02440 20237 2DEC* +.0200273085 B+2* # WHERE C STANDS FOR ORIGINAL COEFFS. 046144,002764: 046145,002765: 00,3665 75067 70742 2DEC* -.0112931863 B+3* 046146,002766: 046147,002767: 00,3667 03436 26756 2DEC* +.00695311612 B+4* 046148,002768: 046149,002769: 00,3671 74037 57640 2DEC* -.00384617957 B+5* 046150,002770: 046151,002771: 00,3673 03046 07143 2DEC* +.001501297736 B+6* 046152,002772: 046153,002773: 00,3675 76654 42244 2DEC* -.000284160334 B+7* 046154,002774: 046155,002775: 046156,002776: 00,3677 32470 CAF LBUF2 # DO FINAL MULTIPLY AND GO TO ANY 046157,002777: 00,3700 07106 TC DMPSUB -1 # EPILOGUE SEQUENCES. 046158,002778: 00,3701 00136 TC ESCAPE 046159,002779: 046160,002780: 00,3702 00006 SUBTR EXTEND # EPILOGUE FOR NEGATIVE INPUTS TO ARCCOS. 046161,002781: 00,3703 40155 DCS MPAC 046162,002782: 00,3704 64736 AD HALF # FORMS PI - ARCCOS(-X) = ARCCOS(X). 046163,002783: 00,3705 52155 DXCH MPAC 046164,002784: 00,3706 00137 TC ESCAPE2 # GO TO POSSIBLE ARCSIN EPILOGUE. 046165,002785: 046166,002786: 00,3707 00006 ASINEX EXTEND 046167,002787: 00,3710 40155 DCS MPAC # ARCSIN EPILOGUE -- GET ARCSIN(X) 046168,002788: 00,3711 64737 AD QUARTER # = PI/2 - ARCCOS(X). 046169,002789: 00,3712 52155 DXCH MPAC 046170,002790: 00,3713 16061 LDANZIG TCF DANZIG 046171,002791: 046172,002792: # Page 1086 046173,002793: 00,3714 50000 ACOSSHR INDEX A # THE SHIFT RIGHT IS LESS THAN 14 SINCE 046174,002794: 00,3715 34736 CAF BIT14 # THE INPUT WAS NON-ZERO DP. 046175,002795: 00,3716 54135 TS MPTEMP 046176,002796: 00,3717 02073 TC VSHRRND # DP SHIFT RIGHT AND ROUND. 046177,002797: 00,3720 13652 TCF ACOS3 # PROCEED. 046178,002798: 046179,002799: 00,3721 00006 ACOSOVF EXTEND # IF MAJOR PART WAS ONLY 1 MORE THAN .5, 046180,002800: 00,3722 13637 BZF ACOS=0 # CALL ANSWER ZERO. 046181,002801: 046182,002802: 00,3723 00006 ACOSABRT EXTEND # IF OVERFLOW, CALL ANSWER ZERO BUT 046183,002803: 00,3724 30165 DCA LOC # SOUND AN ALARM. 046184,002804: 00,3725 05732 TC ALARM1 046185,002805: 00,3726 01301 OCT 1301 046186,002806: 046187,002807: 00,3727 34755 CAF ZERO 046188,002808: 00,3730 13637 TCF ACOS=0 046189,002809: 046190,002810: 00,3731 34737 ACOSZERO CAF QUARTER # ACOS(0) = PI/2. 046191,002811: 00,3732 13640 TCF ACOS=0 +1 # SET MPAC AND EXIT VIA ESCAPE. 046192,002812: 046193,002813: 00,3733 77763 NEG12 DEC -12 B-14 046194,002814: 00,3734 13702 TCSUBTR TCF SUBTR 046195,002815: 046196,002816: # Page 1087 046197,002817: # THE FOLLOWING INSTRUCTIONS ARE AVAILABLE FOR SETTING, MODIFYING, AND BRANCHING ON INDEX REGISTERS: 046198,002818: # 1. AXT ADDRESS TO INDEX TRUE. 046199,002819: # 2. AXC ADDRESS TO INDEX COMPLEMENTED. 046200,002820: # 3. LXA LOAD INDEX FROM ERASABLE. 046201,002821: # 4. LXC LOAD INDEX COMPLEMENTED FROM ERASABLE. 046202,002822: # 5. SXA STORE INDEX IN ERASABLE. 046203,002823: # 6. XCHX EXCHANGE INDEX REGISTER WITH ERASABLE. 046204,002824: # 7. INCR INCREMENT INDEX REGISTER. 046205,002825: # 8. XAD ERASABLE ADD TO INDEX REGISTER. 046206,002826: # 9. XSU ERASABLE SUBTRACT FROM INDEX REGISTER. 046207,002827: # 10. TIX BRANCH ON INDEX REGISTER AND DECREMENT. 046208,002828: 046209,002829: 01,2344 BANK 01 046210,002830: 046211,002831: 01,2344 COUNT* $$/INTER 046212,002832: 01,2344 02441 AXT TC TAGSUB # SELECT APPROPRIATE INDEX REGISTER. 046213,002833: 01,2345 30117 CA POLISH 046214,002834: 01,2346 50130 XSTORE INDEX INDEXLOC # CONTAINS C(FIXLOC) OR C(FIXLOC)+1 046215,002835: 01,2347 54046 TS X1 046216,002836: 01,2350 16061 TCF DANZIG 046217,002837: 046218,002838: 01,2351 02441 AXC TC TAGSUB 046219,002839: 01,2352 40117 CS POLISH 046220,002840: 01,2353 02346 TC XSTORE 046221,002841: 046222,002842: 01,2354 02427 LXA TC 15ADRERS # LOAD INDEX REGISTER FROM ERASABLE. 046223,002843: 01,2355 50117 INDEX POLISH 046224,002844: 01,2356 30000 CA 0 046225,002845: 01,2357 12346 TCF XSTORE 046226,002846: 046227,002847: 01,2360 02427 LXC TC 15ADRERS # LOAD NDX REG FROM ERASABLE COMPLEMENTED. 046228,002848: 01,2361 50117 INDEX POLISH 046229,002849: 01,2362 40000 CS 0 046230,002850: 01,2363 12346 TCF XSTORE 046231,002851: 046232,002852: 01,2364 02427 SXA TC 15ADRERS # STORE INDEX REGISTER IN ERASABLE. 046233,002853: 01,2365 50130 INDEX INDEXLOC 046234,002854: 01,2366 30046 CA X1 046235,002855: 01,2367 50117 MSTORE1 INDEX POLISH 046236,002856: 01,2370 54000 TS 0 046237,002857: 01,2371 16061 TCF DANZIG 046238,002858: 046239,002859: # Page 1088 046240,002860: 01,2372 02427 XCHX TC 15ADRERS # EXCHANGE INDEX REGISTER WITH ERASABLE. 046241,002861: 01,2373 50117 INDEX POLISH 046242,002862: 01,2374 30000 CA 0 046243,002863: 01,2375 50130 INDEX INDEXLOC 046244,002864: 01,2376 56046 XCH X1 046245,002865: 01,2377 12367 TCF MSTORE1 046246,002866: 046247,002867: 01,2400 02427 XAD TC 15ADRERS # ADD ERASABLE TO INDEX REGISTER. 046248,002868: 01,2401 50117 INDEX POLISH 046249,002869: 01,2402 30000 CA 0 046250,002870: 01,2403 50130 XAD2 INDEX INDEXLOC 046251,002871: 01,2404 26046 ADS X1 # IGNORING OVERFLOWS. 046252,002872: 01,2405 16061 TCF DANZIG 046253,002873: 046254,002874: 01,2406 02441 INCR TC TAGSUB # INCREMENT INDEX REGISTER. 046255,002875: 01,2407 30117 CA POLISH 046256,002876: 01,2410 12403 TCF XAD2 046257,002877: 046258,002878: 01,2411 02427 XSU TC 15ADRERS # SUBTRACT ERASABLE FROM INDEX REGISTER. 046259,002879: 01,2412 50117 INDEX POLISH 046260,002880: 01,2413 40000 CS 0 046261,002881: 01,2414 12403 TCF XAD2 046262,002882: 046263,002883: 01,2415 02441 TIX TC TAGSUB # BRANCH AND DECREMENT ON INDEX. 046264,002884: 01,2416 50130 INDEX INDEXLOC 046265,002885: 01,2417 40050 CS S1 046266,002886: 01,2420 50130 INDEX INDEXLOC 046267,002887: 01,2421 60046 AD X1 046268,002888: 01,2422 00006 EXTEND # NO OPERATION IF DECREMENTED INDEX IS 046269,002889: 01,2423 66061 BZMF DANZIG # NEGATIVE OR ZERO. 046270,002890: 046271,002891: 01,2424 50130 DOTIXBR INDEX INDEXLOC 046272,002892: 01,2425 56046 XCH X1 # IGNORING OVERFLOWS. 046273,002893: 046274,002894: 01,2426 16646 TCF GOTO # DO THE BRANCH USING THE CADR IN POLISH. 046275,002895: 046276,002896: # Page 1089 046277,002897: # SUBROUTINE TO CONVERT AN ERASABLE ADDRESS (11 BITS) TO AN EBANK SETTING AND SUBADDRESS. 046278,002898: 046279,002899: 01,2427 40117 15ADRERS CS POLISH 046280,002900: 01,2430 64772 AD DEC45 046281,002901: 01,2431 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA? 046282,002902: 01,2432 30120 CA FIXLOC # YES. ADD FIXLOC. EBANK OK AS IS. 046283,002903: 01,2433 12440 TCF +5 046284,002904: 046285,002905: 01,2434 35007 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS. 046286,002906: 01,2435 56117 XCH POLISH 046287,002907: 01,2436 54003 TS EBANK 046288,002908: 01,2437 74357 MASK LOW8 046289,002909: 01,2440 26117 +5 ADS POLISH # FALL INTO TAGSUB, AND RETURN VIA Q. 046290,002910: 046291,002911: # SUBROUTINE WHICH SETS THE ADDRESS OF THE SPECIFIED INDEX IN INDEXLOC. (ACTUALLY, THE ADDRESS -38D.) 046292,002912: 046293,002913: 01,2441 30120 TAGSUB CA FIXLOC 046294,002914: 01,2442 54130 TS INDEXLOC 046295,002915: 046296,002916: 01,2443 10020 CCS CYR # BIT 15 SPECIFIES INDEX. 046297,002917: 01,2444 24130 INCR INDEXLOC # 0 MEANS USE X2. 046298,002918: 01,2445 00002 TC Q 046299,002919: 01,2446 00002 TC Q # 1 FOR X1. 046300,002920: 046301,002921: # Page 1090 046302,002922: # MISCELLANEOUS OPERATION CODES WITH DIRECT ADDRESSES. INCLUDED HERE ARE: 046303,002923: # 1. ITA STORE CPRET (RETURN ADDRESS) IN ERASABLE. 046304,002924: # 2. CALL CALL A SUBROUTINE, LEAVING RETURN IN QPRET. 046305,002925: # 3. RTB RETURN TO BASIC LANGUAGE AT THE GIVEN ADDRESS. 046306,002926: # 4. BHIZ BRANCH IF THE HIGH ORDER OF MPAC IS ZERO (SINGLE PRECISION). 046307,002927: # 5. BOV BRANCH ON OVERFLOW. 046308,002928: # 6. GOTO SIMPLE SEQUENCE CHANGE. 046309,002929: 046310,002930: 01,2447 10020 RTB/BHIZ CCS CYR 046311,002931: 01,2450 30117 RTB CA POLISH 046312,002932: 01,2451 04621 TC SWCALL -1 # SO A "TC Q" FROM ROUTINE LEADS TO DANZIG 046313,002933: 046314,002934: 01,2452 10154 BHIZ CCS MPAC 046315,002935: 01,2453 16061 TCF DANZIG 046316,002936: 01,2454 16646 TCF GOTO 046317,002937: 01,2455 16061 TCF DANZIG 046318,002938: 01,2456 16646 TCF GOTO 046319,002939: 046320,002940: 01,2457 10121 BOV(B) CCS OVFIND # BRANCH ON OVERFLOW TO BASIC OR INTERP. 046321,002941: 01,2460 12462 TCF +2 046322,002942: 01,2461 16061 TCF DANZIG 046323,002943: 01,2462 54121 TS OVFIND 046324,002944: 01,2463 10020 CCS CYR 046325,002945: 01,2464 12450 TCF RTB # IF BASIC. 046326,002946: 01,2465 00360 B5TOBB OCT 360 046327,002947: 01,2466 16646 TCF GOTO 046328,002948: 046329,002949: # Page 1091 046330,002950: 01,2467 10020 BZE/GOTO CCS CYR # SEE WHICH OP-CODE IS DESIRED. 046331,002951: 01,2470 06723 TC BRANCH # DO BZE. 046332,002952: 01,2471 16061 TCF DANZIG 046333,002953: 01,2472 16646 TCF GOTO # DO GOTO. 046334,002954: 01,2473 16061 TCF DANZIG 046335,002955: 046336,002956: 01,2474 10020 BPL/BMN CCS CYR 046337,002957: 01,2475 12503 TCF BPL 046338,002958: 01,2476 5B10 # DEC 5 B+10 # SHIFTS OP CODE IN SWITCH INSTRUCTION ADR 046339,002959: 01,2476 12000 DEC 5 B-4 # RSB 2009. 046340,002960: 046341,002961: 01,2477 06723 TC BRANCH # DO BMN 046342,002962: 01,2500 16061 TCF DANZIG 046343,002963: 01,2501 16061 TCF DANZIG 046344,002964: 01,2502 16646 TCF GOTO # ONLY IF NNZ. 046345,002965: 046346,002966: 01,2503 06723 BPL TC BRANCH 046347,002967: 01,2504 16646 TCF GOTO # IF POSITIVE OR ZERO. 046348,002968: 01,2505 16646 TCF GOTO 046349,002969: 01,2506 16061 TCF DANZIG 046350,002970: 046351,002971: 01,2507 10020 CALL/ITA CCS CYR 046352,002972: 01,2510 16640 TCF CALL 046353,002973: 046354,002974: 01,2511 05705 TC CCSHOLE 046355,002975: 01,2512 02427 TC 15ADRERS # STORE QPRET. (TAGSUB AFTER 15ADRERS IS 046356,002976: 01,2513 50120 INDEX FIXLOC # SLOW IN THIS CASE, BUT SAVES STORAGE.) 046357,002977: 01,2514 30052 CA QPRET 046358,002978: 01,2515 12367 TCF MSTORE1 046359,002979: 046360,002980: # Page 1092 046361,002981: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR ALTERING AND TESTING INTERPRETATIVE SWITCHES: 046362,002982: 046363,002983: # 00 BONSET SET A SWITCH AND DO A GOTO IF IT WAS ON. 046364,002984: # 01 SETGO SET A SWITCH AND DO A GOTO. 046365,002985: # 02 BOFSET SET A SWITCH AND DOA GOTO IF IT WAS OFF 046366,002986: # 03 SET SET A SWITCH. 046367,002987: 046368,002988: # 04 BONINV INVERT A SWITCH AND BRANCH IF IT WAS ON. 046369,002989: # 05 INVGO INVERT A SWITCH AND DO A GOTO. 046370,002990: # 06 BOFINV INVERT A SWITCH AND BRANCH IF IT WAS OFF 046371,002991: # 07 INVERT INVERT A SWITCH. 046372,002992: 046373,002993: # 10 BONCLR CLEAR A SWITCH AND BRANCH IF IT WAS ON. 046374,002994: # 11 CLRGO CLEAR A SWITCH AND DO A GOTO. 046375,002995: # 12 BOFCLR CLEAR A SWITCH AND BRANCH IF IT WAS OFF. 046376,002996: # 13 CLEAR CLEAR A SWITCH. 046377,002997: 046378,002998: # 14 BON BRANCH IF A SWITCH WAS ON. 046379,002999: # 16 BOFF BRANCH IF A SWITCH WAS OFF. 046380,003000: 046381,003001: # THE ADDRESS SUPPLIED WITH THE SWITCH INSTRUCTION IS INTERPRETED AS FOLLOWS: 046382,003002: 046383,003003: # BITS 1-4 SWITCH BIT NUMBER (1-15). 046384,003004: # BITS 5-8 SWITCH OPERATION NUMBER 046385,003005: # BITS 9- SWITCH WORD NUMBER (UP TO 64 SWITCH WORDS). 046386,003006: 046387,003007: # THE ADDRESS ITSELF IS MADE UP BY THE YUL SYSTEM ASSEMBLER. THE BRANCH INSTRUCTIONS REQUIRE TWO 046388,003008: # ADDRESSES, THE SECOND TAKEN AS THE DIRECT (OR INDIRECT IF IN ERASABLE) ADDRESS OF THE BRANCH. 046389,003009: 046390,003010: 01,2516 34762 SWITCHES CAF LOW4 # LEAVE THE SWITCH BIT IN SWBIT. 046391,003011: 01,2517 70117 MASK POLISH 046392,003012: 01,2520 50000 INDEX A 046393,003013: 01,2521 34735 CAF BIT15 # (NUMBER FROM LEFT TO RIGHT.) 046394,003014: 01,2522 54131 TS SWBIT 046395,003015: 046396,003016: 01,2523 34745 CAF BIT7 # LEAVE THE SWITCH NUMBER IN SWWORD. 046397,003017: 01,2524 00006 EXTEND 046398,003018: 01,2525 70117 MP POLISH 046399,003019: 01,2526 54130 TS SWWORD 046400,003020: 046401,003021: 01,2527 00004 INHINT # DURING SWITCH CHANGE SO RUPT CAN USE TOO 046402,003022: 01,2530 50000 INDEX A # LEAVE THE SWITCH WORD ITSELF IN L. 046403,003023: 01,2531 30074 CA STATE 046404,003024: 01,2532 54002 TS Q # Q WILL BE USED AS A CHANNEL. 046405,003025: # Page 1093 046406,003026: 01,2533 34741 CAF BIT11 046407,003027: 01,2534 00006 EXTEND # DISPATCH SWITCH BIT OPERATION AS IN BITS 046408,003028: 01,2535 70117 MP POLISH # 7-8 OF POLISH. 046409,003029: 01,2536 72576 MASK B3TOB4 # GETS 4X2-BIT CODE. 046410,003030: 01,2537 50000 INDEX A 046411,003031: 01,2540 12541 TCF +1 046412,003032: 046413,003033: 01,2541 30131 +1 CA SWBIT # 00 -- SET SWITCH IN QUESTION. 046414,003034: 01,2542 00006 EXTEND 046415,003035: 01,2543 04002 ROR QCHAN 046416,003036: 01,2544 12553 TCF SWSTORE 046417,003037: 046418,003038: 01,2545 30131 +5 CA SWBIT # 01 -- INVERT SWITCH. 046419,003039: 01,2546 00006 EXTEND 046420,003040: 01,2547 06002 RXOR QCHAN 046421,003041: 01,2550 12553 TCF SWSTORE 046422,003042: 046423,003043: 01,2551 40131 +9D CS SWBIT # 10 -- CLEAR. 046424,003044: 01,2552 70002 MASK Q 046425,003045: 01,2553 50130 SWSTORE INDEX SWWORD 046426,003046: 01,2554 54074 TS STATE # NEW SWITCH WORD. 046427,003047: 046428,003048: # Page 1094 046429,003049: 01,2555 00003 +13D RELINT # 11 -- NOOP. 046430,003050: 01,2556 34737 CAF BIT13 046431,003051: 01,2557 00006 EXTEND # DISPATCH SEQUENCE CHANGING OR BRANCING 046432,003052: 01,2560 70117 MP POLISH # CODE. 046433,003053: 01,2561 72576 MASK B3TOB4 046434,003054: 01,2562 50000 INDEX A 046435,003055: 01,2563 12564 TCF +1 # ORIGINALLY STORED IN BITS 5-6 046436,003056: 046437,003057: 01,2564 40002 +1 CS Q # 00 -- BRANCH IF ON. 046438,003058: 01,2565 70131 TEST MASK SWBIT 046439,003059: 01,2566 10000 CCS A 046440,003060: 01,2567 12577 TCF SWSKIP 046441,003061: 046442,003062: 01,2570 16715 +5 TCF SWBRANCH # 01 -- GO TO. 046443,003063: 046444,003064: 01,2571 12577 TCF SWSKIP # HERE ONLY ON BIT 15. 046445,003065: 046446,003066: 01,2572 05705 TC CCSHOLE 046447,003067: 01,2573 05705 TC CCSHOLE 046448,003068: 046449,003069: 01,2574 30002 +9D CA Q # 10 -- BRANCH IF OFF. 046450,003070: 01,2575 12565 TCF TEST 046451,003071: 046452,003072: 01,2576 00014 B3TOB4 OCT 0014 046453,003073: 01,2577 24164 SWSKIP INCR LOC 046454,003074: 046455,003075: 01,2600 01,2516 SW/ EQUALS SWITCHES 046456,003076: 046457,003077: 01,2600 16061 +13D TCF DANZIG # 11 -- NOOP. 046458,003078: End of include-file INTERPRETER.agc. Parent file is MAIN.agc