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