Source Code
048909,000001: # Copyright: Public domain.
048910,000002: # Filename: INTERPRETER.agc
048911,000003: # Purpose: Part of the source code for Colossus 2A, AKA Comanche 055.
048912,000004: # It is part of the source code for the Command Module's (CM)
048913,000005: # Apollo Guidance Computer (AGC), for Apollo 11.
048914,000006: # Assembler: yaYUL
048915,000007: # Contact: Ron Burkey <info@sandroid.org>.
048916,000008: # Website: www.ibiblio.org/apollo.
048917,000009: # Pages: 1107-1199
048918,000010: # Mod history: 2009-05-08 RSB Adapted from the Luminary131/ file of the
048919,000011: # same name, using Comanche055 page images.
048920,000012: # 2009-05-20 RSB Corrections: P00D00 -> P00DOO, fixed a
048921,000013: # "Page N" reference.
048922,000014: # 2009-05-21 RSB Corrected definition of 5B10, which overflowed
048923,000015: # integer arithmetic.
048924,000016:
048925,000017: # This source code has been transcribed or otherwise adapted from digitized
048926,000018: # images of a hardcopy from the MIT Museum. The digitization was performed
048927,000019: # by Paul Fjeld, and arranged for by Deborah Douglas of the Museum. Many
048928,000020: # thanks to both. The images (with suitable reduction in storage size and
048929,000021: # consequent reduction in image quality as well) are available online at
048930,000022: # www.ibiblio.org/apollo. If for some reason you find that the images are
048931,000023: # illegible, contact me at info@sandroid.org about getting access to the
048932,000024: # (much) higher-quality images which Paul actually created.
048933,000025:
048934,000026: # Notations on the hardcopy document read, in part:
048935,000027:
048936,000028: # Assemble revision 055 of AGC program Comanche by NASA
048937,000029: # 2021113-051. 10:28 APR. 1, 1969
048938,000030:
048939,000031: # This AGC program shall also be referred to as
048940,000032: # Colossus 2A
048941,000033:
048942,000034: # Page 1107
048943,000035: # SECTION 1: DISPATCHER
048944,000036:
048945,000037: # ENTRY TO THE INTERPRETER. INTPRET SETS LOC TO THE FIRST INSTRUCTION, BANKSET TO THE BBANK OF THE
048946,000038: # OBJECT INTERPRETIVE PROGRAM, AND INTBIT15 TO THE BIT15 CONTENTS OF FBANK. INTERPRETIVE PROGRAMS MAY BE IN
048947,000039: # VIRTUALLY ALL BANKS PRESENT UNDER ANY SUPER-BANK SETTING, WITH THE RESTRICTION THAT PROGRAMS IN HIGH BANKS
048948,000040: # (BIT15 OF FBANK = 1) DO NOT REFER TO LOWBANKS, AND VICE-VERSA. THE INTERPRETER DOES NOT SWITCH SUPERBANKS.
048949,000041: # E-BANK SWITCHING OCCURS WHENEVER GENERAL ERASABLE (100-3777) IS ADDRESSED.
048950,000042:
048951,000043: 6006 BLOCK 03
048952,000044:
048953,000045: 6006 COUNT* $$/INTER
048954,000046: 6006 00003 INTPRET RELINT
048955,000047: 6007 00006 EXTEND # SET LOC TO THE WORD FOLLOWING THE TC.
048956,000048: 6010 22164 QXCH LOC
048957,000049: 6011 30006 +2 CA BBANK # INTERPRETIVE BRANCHES FINISH HERE.
048958,000050: 6012 54165 TS BANKSET
048959,000051: 6013 75001 MASK BIT15 # GET 15TH BIT FOR INDEXABLE ADDRESSES.
048960,000052: 6014 54115 TS INTBIT15
048961,000053:
048962,000054: 6015 54023 TS EDOP # MAKE SURE NO INSTRUCTIONS LEFT OVER
048963,000055:
048964,000056: 6016 16037 TCF NEWOPS # PICK UP OP CODE PAIR AND BEGIN.
048965,000057:
048966,000058: 6017 22006 INTRSM LXCH BBANK # RESUME SUSPENDED INTERPRETIVE JOB
048967,000059: 6020 16011 TCF INTPRET +3
048968,000060:
048969,000061: # DLOAD LOADS MPAC, MPAC +1, LEAVING ZERO IN MPAC +2.
048970,000062:
048971,000063: 6021 00006 DLOAD EXTEND
048972,000064: 6022 50116 INDEX ADDRWD
048973,000065: 6023 30001 DCA 0 # LOAD DP C(C(ADDRWD)) INT MPAC,MPAC +1
048974,000066: 6024 52155 SLOAD2 DXCH MPAC
048975,000067: 6025 35021 CAF ZERO # ZERO MPAC +2
048976,000068:
048977,000069: # Page 1108
048978,000070: # AT THE END OF MOST INSTRUCTIONS, CONTROL IS GIVEN TO DANZIG TO DISPATCH THE NEXT OPERATION.
048979,000071:
048980,000072: 6026 54156 TS MPAC +2 # AND DECLARE DP MODE
048981,000073:
048982,000074: 6027 54163 NEWMODE TS MODE # PROLOGUE FOR MODE-CHANGING INSTRUCTIONS.
048983,000075:
048984,000076: 6030 30165 DANZIG CA BANKSET # SET BBANK BEFORE TESTING NEWJOB SO THAT
048985,000077: 6031 54006 TS BBANK # IT MAY BE SAVED DIRECTLY BY CHANJOB.
048986,000078:
048987,000079: 6032 10023 NOIBNKSW CCS EDOP # SEE IF AN ORDER CODE IS LEFT OVER FROM
048988,000080: 6033 16046 TCF OPJUMP # THE LAST PAIR RETRIEVED. IF SO, EXECUTE.
048989,000081: # EDOP IS SET TO ZERO ON ITS RE-EDITIING.
048990,000082:
048991,000083: 6034 10067 CCS NEWJOB # SEE IF A JOB OF HIGHER PRIORITY IS
048992,000084: 6035 15170 TCF CHANG2 # PRESENT, AND IF SO, CHANGE JOBS.
048993,000085:
048994,000086: 6036 24164 INCR LOC # ADVANCE THE LOCATION COUNTER.
048995,000087:
048996,000088: # ITRACE (1) REFERS TO "NEWOPS"
048997,000089: 6037 50164 NEWOPS INDEX LOC # ENTRY TO BEGIN BY PICKING OP CODE PAIR.
048998,000090: 6040 30000 CA 0 # MAY BE AN OPCODE PAIR OR A STORE CODE.
048999,000091: 6041 10000 CCS A # TEST SIGN AND GET DABS(A).
049000,000092: 6042 16331 TCF DOSTORE # PROCESS STORE CODE.
049001,000093:
049002,000094: 6043 00177 LOW7 OCT 177
049003,000095:
049004,000096: 6044 54023 TS EDOP # OP CODE PAIR. LEAVE THE OTHER IN EDOP
049005,000097: 6045 76043 MASK LOW7 # WHERE CCS EDOP WILL HONOR IT NEXT.
049006,000098:
049007,000099: 6046 54020 OPJUMP TS CYR # LOWWD ENTERS HERE IF A RIGHT-HAND OP
049008,000100: 6047 10020 CCS CYR # CODE IS TO BE PROCESSED. TEST PREFICES.
049009,000101: 6050 16216 TCF OPJUMP2 # TEST SECOND PREFIX BIT.
049010,000102:
049011,000103: 6051 16712 TCF EXIT # +0 OP CODE IS EXIT
049012,000104:
049013,000105: # Page 1109
049014,000106: # PROCESS ADDRESSES WHICH MAY BE DIRECT, INDEXED, OR REFERENCE THE PUSHDOWN LIST.
049015,000107:
049016,000108: 6052 75017 ADDRESS MASK BIT1 # SEE IF ADDRESS IS INDEXED. CYR CONTAINED
049017,000109: 6053 10000 CCS A # 400XX, SO BIT 1 IS NOW AS IT WAS IN CYR.
049018,000110: 6054 16115 TCF INDEX # FORM INDEXED ADDRESS.
049019,000111:
049020,000112: 6055 50164 DIRADRES INDEX LOC # LOOK AHEAD TO NEXT WORD TO SEE IF
049021,000113: 6056 40001 OCT40001 CS 1 # ADDRESS IS GIVEN.
049022,000114: 6057 10000 CCS A
049023,000115: 6060 16164 TCF PUSHUP # IF NOT.
049024,000116:
049025,000117: 6061 77773 NEG4 DEC -4 B-14
049026,000118:
049027,000119: 6062 24164 INCR LOC # IF SO, TO SHOW WE PICKED UP A WORD.
049028,000120: 6063 54116 TS ADDRWD
049029,000121:
049030,000122: # Page 1110
049031,000123: # FINAL DIGESTION OF DIRECT ADDRESSES OF OP CODES WITH 01 PREFIX IS DONE HERE. IN EACH CASE, THE
049032,000124: # REQUIRED 12-BIT SUB-ADDRESS IS LEFT IN ADDRWD, WITH ANY REQUIRED E OR F BANK SWITCHING DONE. ADDRESSES LESS
049033,000125: # 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.
049034,000126:
049035,000127: 6064 66220 AD -ENDVAC # SEE IF ADDRESS RELATIVE TO WORK AREA.
049036,000128: 6065 10000 CCS A
049037,000129: 6066 67712 AD -ENDERAS # IF NOT, SEE IF IN GENERAL ERASABLE.
049038,000130: 6067 16074 TCF IERASTST
049039,000131:
049040,000132: 6070 30120 NETZERO CA FIXLOC # IF SO, LEAVE THE MODIFIED ADDRESS IN
049041,000133: 6071 26116 ADS ADDRWD # ADDRWD AND DISPATCH.
049042,000134: 6072 50020 ITR15 INDEX CYR # THIS INDEX MAKES THE NEXT INSTRUCTION
049043,000135: 6073 76242 7 INDJUMP -1 # TCF INDJUMP + OP, EDITING CYR.
049044,000136:
049045,000137: 6074 00006 IERASTST EXTEND
049046,000138: 6075 66105 BZMF GEADDR # GO PROCESS GENERAL-ERASABLE ADDRESS.
049047,000139:
049048,000140: 6076 75054 MASK LOW10 # FIXED BANK ADDRESS. RESTORE AND ADD B15.
049049,000141: 6077 65054 AD LOW10 # SWITCH BANKS AND LEAVE SUBADDRESS IN
049050,000142: 6100 56116 XCH ADDRWD # ADDRWD FOR OPERAND RETRIEVAL. (THIS
049051,000143: 6101 60115 AD INTBIT15 # METHOD PRECLUDES USE OF THE LAST
049052,000144: 6102 54004 TS FBANK # LOCATION IN EACH FBANK.)
049053,000145: 6103 50020 ITR12 INDEX CYR
049054,000146: 6104 76242 7 INDJUMP -1
049055,000147:
049056,000148: 6105 74373 GEADDR MASK LOW8
049057,000149: 6106 65051 AD OCT1400
049058,000150: 6107 56116 XCH ADDRWD
049059,000151: 6110 54003 TS EBANK
049060,000152: 6111 50020 ITR10 INDEX CYR
049061,000153: 6112 76242 7 INDJUMP -1
049062,000154:
049063,000155: # Page 1111
049064,000156: # THE FOLLOWING ROUTINE PROCESSES INTERPRETIVE INDEXED ADDRESSES. AN INTERPRETER INDEX REGISTER MAY
049065,000157: # CONTAIN THE ADDRESS OF ANY ERASABLE REGISTER (0-42 BEING RELATIVE TO THE VAC AREA) OR ANY INTERPRETIVE PROGRAM
049066,000158: # BANK, OR ANY INTEGER IN THAT RANGE.
049067,000159:
049068,000160: 6113 37702 DODLOAD* CAF DLOAD* # STODL* COMES HERE TO PROCESS LOAD ADR.
049069,000161: 6114 54020 TS CYR # (STOVL* ENTERS HERE).
049070,000162:
049071,000163: 6115 30120 INDEX CA FIXLOC # SET UP INDEX LOCATION.
049072,000164: 6116 54130 TS INDEXLOC
049073,000165: 6117 24164 INCR LOC # (ADDRESS ALWAYS GIVEN).
049074,000166: 6120 50164 INDEX LOC
049075,000167: 6121 40000 CS 0
049076,000168: 6122 10000 CCS A # INDEX 2 IF ADDRESS STORED COMPLEMENTED.
049077,000169: 6123 24130 INCR INDEXLOC
049078,000170: 6124 16125 NOOP
049079,000171:
049080,000172: 6125 54116 TS ADDRWD # 14 BIT ADDRESS TO ADDRWD.
049081,000173: 6126 77711 MASK HIGH4 # IF ADDRESS GREATER THAN 2K, ADD INTBIT15
049082,000174: 6127 00006 EXTEND
049083,000175: 6130 16133 BZF INDEX2
049084,000176: 6131 30115 CA INTBIT15
049085,000177: 6132 26116 ADS ADDRWD
049086,000178:
049087,000179: 6133 50130 INDEX2 INDEX INDEXLOC
049088,000180: 6134 40046 CS X1
049089,000181: 6135 26116 ADS ADDRWD # DO AUGMENT, IGNORING AND CORRECTING OVF.
049090,000182:
049091,000183: 6136 77713 MASK HIGH9 # SEE IF ADDRESS IS IN WORK AREA.
049092,000184: 6137 00006 EXTEND
049093,000185: 6140 16153 BZF INDWORK
049094,000186: 6141 77711 MASK HIGH4 # SEE IF IN FIXED BANK.
049095,000187: 6142 00006 EXTEND
049096,000188: 6143 16155 BZF INDERASE
049097,000189:
049098,000190: 6144 30116 CA ADDRWD # IN FIXED -- SWITCH BANKS AND CREATE
049099,000191: 6145 54004 TS FBANK # SUB-ADDRESS
049100,000192: 6146 75054 MASK LOW10
049101,000193: 6147 65005 AD 2K
049102,000194: 6150 54116 TS ADDRWD
049103,000195: 6151 50020 ITR11 INDEX CYR
049104,000196: 6152 36242 3 INDJUMP -1
049105,000197:
049106,000198: 6153 30120 INDWORK CA FIXLOC # MAKE ADDRWD RELATIVE TO WORK AREA.
049107,000199: 6154 16161 TCF ITR13 -1
049108,000200:
049109,000201: 6155 35051 INDERASE CA OCT1400
049110,000202: 6156 56116 XCH ADDRWD
049111,000203: 6157 54003 TS EBANK
049112,000204: 6160 74373 MASK LOW8
049113,000205: 6161 26116 -1 ADS ADDRWD
049114,000206: # Page 1112
049115,000207: 6162 50020 ITR13 INDEX CYR
049116,000208: 6163 36242 3 INDJUMP -1
049117,000209:
049118,000210: # Page 1113
049119,000211: # PUSH-UP ROUTINES. WHEN NO OPERAND ADDRESS IS GIVEN, THE APPROPRIATE OPERAND IS TAKEN FROM THE PUSH-DOWN
049120,000212: # LIST. IN MOST CASES THE MODE OF THE RESULT (VECTOR OR SCALAR) OF THE LAST ARTGHMETIC OPERATION PERFORMED
049121,000213: # IS THE SAME AS THE TYPE OF OPERAND DESIRED (ALL ADD/SUBTRACT ETC.). EXCEPTIONS TO THIS GENERAL RULE ARE LISTED
049122,000214: # BELOW (NOTE THAT IN EVERY CASE THE MODE REGISTER IS LEFT INTACT):
049123,000215:
049124,000216: # 1. VXSC AND V/SC WANT THE OPPOSITE TYPE OF OPERAND, E.G., IF THE LAST OPERATION YIELDED A VECTOR
049125,000217: # RESULT, VXSC WANTS A SCALAR.
049126,000218:
049127,000219: # 2. THE LOAD CODES SHOULD LOAD THE ACCUMULATOR INDEPENDENT OF THE RESULT OF THE LAST OPERATION. THIS
049128,000220: # INCLUDES VLOAD, DLOAD, TLOAD, PDDL, AND PDVL (NO PUSHUP WITH SLOAD).
049129,000221:
049130,000222: # 3. SOME ARITHMETIC OPERATIONS REQUIRE A STANDARD TYPE OF OPERAND REGARDLESS OF THE PREVIOUS OPERATION.
049131,000223: # THIS INCLUDES SIGN WANTING DP AND TAD REQUIRING TP.
049132,000224:
049133,000225: 6164 34374 PUSHUP CAF OCT23 # IF THE LOW 5 BITS OF CYR ARE LESS THAN
049134,000226: 6165 70020 MASK CYR # 20, THIS OP REQUIRES SPECIAL ATTENTION.
049135,000227: 6166 66171 AD -OCT10 # (NO -0).
049136,000228: 6167 10000 CCS A
049137,000229: 6170 16202 TCF REGUP # FOR ALL CODES GREATEER THAN OCT 7.
049138,000230:
049139,000231: 6171 77767 -OCT10 OCT -10
049140,000232:
049141,000233: 6172 66061 AD NEG4 # WE NOW HAVE 7 -- OP CODE (MOD4). SEE IF
049142,000234: 6173 10000 CCS A # THE OP CODE (MOD4) IS THREE (REVERSE).
049143,000235: 6174 50000 INDEX A # NO -- THE MODE IS DEFINITE. PICK UP THE
049144,000236: 6175 46213 CS NO.WDS
049145,000237: 6176 16204 TCF REGUP +2
049146,000238:
049147,000239: 6177 50163 INDEX MODE # FOR VXSC AND V/SC WE WANT THE REQUIRED
049148,000240: 6200 46211 CS REVCNT # PUSHLOC DECREMENT WITHOUT CHANGING THE
049149,000241: 6201 16204 TCF REGUP +2 # MODE AT THE IS TIME.
049150,000242:
049151,000243: 6202 50163 REGUP INDEX MODE # MOST ALL OP CODES PUSHUP HERE.
049152,000244: 6203 46213 CS NO.WDS
049153,000245: 6204 26166 +2 ADS PUSHLOC
049154,000246: 6205 54116 TS ADDRWD
049155,000247: 6206 50020 ITR14 INDEX CYR
049156,000248: 6207 76242 7 INDJUMP -1 # (THE INDEX MAKES THIS A TCF.)
049157,000249:
049158,000250: 6210 00002 OCT 2 # REVERSE PUSHUP DECREMENT. VECTOR TAKES 2
049159,000251: 6211 00006 REVCNT OCT 6 # WORDS, SCALAR TAKES 6.
049160,000252: 6212 00006 OCT 6
049161,000253: 6213 00002 NO.WDS OCT 2 # CONVENTIONAL DECREMENT IS 6 WORDS VECTOR
049162,000254: 6214 00003 OCTAL3 OCT 3 # 2 IN DP, AND 3 IN TP.
049163,000255: 6215 00006 OCT 6
049164,000256:
049165,000257: # Page 1114
049166,000258: # TEST THE SECOND PREFIX BIT TO SEE IF THIS IS A MISCELLANEOUS OR A UNARY/SHORT SHIFT OPERATION.
049167,000259:
049168,000260: 6216 10020 OPJUMP2 CCS CYR # TEST SECOND PREFIX BIT.
049169,000261: 6217 16232 TCF OPJUMP3 # TEST THIRD BIT TO SEE IF UNARY OR SHIFT
049170,000262:
049171,000263: 6220 77722 -ENDVAC DEC -45 B-14
049172,000264:
049173,000265: # THE FOLLOWING ROUTINE PROCESSES ADDRESSES OF SUFFIX CLASS 10. THEY ARE BASICALLY WORK AREA ADDRESSES
049174,000266: # IN THE RANGE 0-52, ERASABLE ECADR CONSTANTS FROM 100-3777, AND FCADRS ABOVE THAT. ALL 15 BITS ARE AVAILABLE
049175,000267: # IN CONTRAST TO SUFFIX 1, IN WHICH ONLY THE LOW ORDER 14 ARE AVAILABLE.
049176,000268:
049177,000269: 6221 24164 15BITADR INCR LOC # (ENTRY HERE FROM STCALL).
049178,000270: 6222 50164 INDEX LOC # PICK UP ADDRESS WORD.
049179,000271: 6223 30000 CA 0
049180,000272: 6224 54117 TS POLISH # WE MAY NEED A SUBADDRESS LATER.
049181,000273:
049182,000274: 6225 35055 CAF LOW7+2K # THESE INSTRUCTIONS ARE IN BANK 1.
049183,000275: 6226 54004 TS FBANK
049184,000276: 6227 70020 MASK CYR
049185,000277: 6230 50000 ITR7 INDEX A
049186,000278: 6231 16303 TCF MISCJUMP
049187,000279:
049188,000280: # Page 1115
049189,000281: # COMPLETE THE DISPATCHING OF UNARY AND SHORT SHIFT OPERATIONS.
049190,000282:
049191,000283: 6232 54004 OPJUMP3 TS FBANK # CALL IN BANK 0 (BIT5S 11-15 OF A ARE 0.)
049192,000284:
049193,000285: 6233 10020 CCS CYR # TEST THIRD PREFIX BIT.
049194,000286: 6234 50000 INDEX A # THE DECREMENTED UNARY CODE IS IN BITS
049195,000287: 6235 12000 TCF UNAJUMP # 1-4 OF A (ZERO, EXIT, HAS BEEN DETECTED)
049196,000288:
049197,000289: 6236 10163 CCS MODE # IT'S A SHORT SHIFT CODE. SEE IF PRESENT
049198,000290: 6237 12017 TCF SHORTT # SCALAR OR VECTOR.
049199,000291: 6240 12017 TCF SHORTT
049200,000292: 6241 12121 TCF SHORTV # CALLS THE APPROPRIATE ROUTINE.
049201,000293:
049202,000294: 6242 4364 FBANKMSK EQUALS BANKMASK
049203,000295: 6242 00122 LVBUF ADRES VBUF
049204,000296:
049205,000297: # Page 1116
049206,000298: # THE FOLLOWING IS THE JUMP TABLE FOR OP CODES WHICH MAY HAVE INDEXABLE ADDRESSES OR MAY PUSH UP.
049207,000299:
049208,000300: 6243 16454 INDJUMP TCF VLOAD # 00 -- LOAD MPAC WITH A VECTOR.
049209,000301: 6244 17040 TCF TAD # 01 -- TRIPLE PRECISION ADD TO MPAC.
049210,000302: 6245 17624 TCF SIGN # 02 -- COMPLEMENT MPAC (V OR SC) IF X NEG.
049211,000303: 6246 17350 TCF VXSC # 03 -- VECTOR TIMES SCALAR.
049212,000304: 6247 16652 TCF CGOTO # 04 -- COMPUTED GO TO.
049213,000305: 6250 16437 TCF TLOAD # 05 -- LOAD MPAC WITH TRIPLE PRECISION.
049214,000306: 6251 16021 TCF DLOAD # 06 -- LOAD MPAC WITH A DP SCALAR.
049215,000307: 6252 17573 TCF V/SC # 07 -- VECTOR DIVIDED BY A SCALAR.
049216,000308:
049217,000309: 6253 16450 TCF SLOAD # 10 -- LOAD MPAC IN SINGLE PRECISION.
049218,000310: 6254 16567 TCF SSP # 11 -- SET SINGLE PRECISION INTO X.
049219,000311: 6255 16472 TCF PDDL # 12 -- PUSH DOWN MPAC AND RE-LOAD IN DP.
049220,000312: 6256 17303 TCF MXV # 13 -- MATRIX POST-MULTIPLIED BY VECTOR.
049221,000313: 6257 16526 TCF PDVL # 14 -- PUSH DOWN AND VECTORLOAD.
049222,000314: 6260 16575 TCF CCALL # 15 -- COMPUTED CALL.
049223,000315: 6261 17306 TCF VXM # 16 -- MATRIX PRE-MULTIPLIED BY VECTOR.
049224,000316: 6262 17565 TCF TSLC # 17 -- NORMALIZE MPAC (SCALAR ONLY).
049225,000317:
049226,000318: 6263 17543 TCF DMPR # 20 -- DP MULTIPLY AND ROUND.
049227,000319: 6264 17546 TCF DDV # 21 -- DP DIVIDE BY.
049228,000320: 6265 17552 TCF BDDV # 22 -- DP DIVIDE INTO.
049229,000321: 6266 17570 TCF GSHIFT # 23 -- GENERAL SHIFT INSTRUCTION
049230,000322: 6267 16720 TCF VAD # 24 -- VECTOR ADD.
049231,000323: 6270 16716 TCF VSU # 25 -- VECTOR SUBTRACT.
049232,000324: 6271 17005 TCF BVSU # 26 -- VECTOR SUBTRACT FROM.
049233,000325: 6272 17300 TCF DOT # 27 -- VECTOR DOT PRODUCT.
049234,000326:
049235,000327: 6273 17427 TCF VXV # 30 -- VECTOR CROSS PRODUCT.
049236,000328: 6274 17374 TCF VPROJ # 31 -- VECTOR PROJECTION.
049237,000329: 6275 16754 TCF DSU # 32 -- DP SUBTRACT.
049238,000330: 6276 17031 TCF BDSU # 33 -- DP SUBTRACT FROM.
049239,000331: 6277 16744 TCF DAD # 34 -- DP ADD.
049240,000332: 6300 16300 TCF +0 # 35 -- AVAILABLE
049241,000333: 6301 17541 TCF DMP1 # 36 -- DP MULTIPLY.
049242,000334: 6302 17562 TCF SETPD # 37 -- SET PUSH DOWN POINTER (DIRECT ONLY)
049243,000335:
049244,000336: # CODES 10 AND 14 MUST NOT PUSH UP. CODE 04 MAY BE USED FOR VECTOR DECLARE BEFORE PUSHUP IF DESIRED.
049245,000337:
049246,000338: # Page 1117
049247,000339: # THE FOLLOWING JUMP TABLE APPLIES TO INDEX, BRANCH, AND MISCELLANEOUS INSTRUCTIONS.
049248,000340:
049249,000341: 6303 12371 MISCJUMP TCF AXT # 00 -- ADDRESS TO INDEX TRUE.
049250,000342: 6304 12376 TCF AXC # 01 -- ADDRESS TO INDEX COMPLEMENTED.
049251,000343: 6305 12401 TCF LXA # 02 -- LOAD INDEX FROM ERASABLE.
049252,000344: 6306 12405 TCF LXC # 03 -- LOAD INDEX FROM COMPLEMENT OF ERAS.
049253,000345: 6307 12411 TCF SXA # 04 -- STORE INDEX IN ERASABLE.
049254,000346: 6310 12417 TCF XCHX # 05 -- EXCHANGE INDEX WITH ERASABLE.
049255,000347: 6311 12433 TCF INCR # 06 -- INCREMENT INDEX REGISTER.
049256,000348: 6312 12442 TCF TIX # 07 -- TRANSFER ON INDEX.
049257,000349:
049258,000350: 6313 12425 TCF XAD # 10 -- INDEX REGISTER ADD FROM ERASABLE.
049259,000351: 6314 12436 TCF XSU # 11 -- INDEX SUBTRACT FROM ERASABLE.
049260,000352: 6315 12514 TCF BZE/GOTO # 12 -- BRANCH ZERO AND GOTO
049261,000353: 6316 12521 TCF BPL/BMN # 13 -- BRANCH PLUS AND BRANCH MINUS.
049262,000354: 6317 12474 TCF RTB/BHIZ # 14 -- RETURN TO BASIC AND BRANCH HI ZERO.
049263,000355: 6320 12534 TCF CALL/ITA # 15 -- CALL AND STORE QPRET.
049264,000356: 6321 12543 TCF SW/ # 16 -- SWITCH INSTRUCTIONS AND AVAILABLE.
049265,000357: 6322 12504 TCF BOV(B) # 17 -- BRANCH ON OVERFLOW TO BASIC OR INT.
049266,000358:
049267,000359: # Page 1118
049268,000360: # THE FOLLOWING JUMP TABLE APPLIES TO UNARY INSTRUCTIONS
049269,000361: 6323 COUNT* $$/INTER
049270,000362: 00,2000 BANK 0 # 00 -- EXIT -- DETECTED EARLIER.
049271,000363: 00,2000 13207 UNAJUMP TCF SQRT # 01 -- SQUARE ROOT.
049272,000364: 00,2001 13527 TCF SINE # 02 -- SIN.
049273,000365: 00,2002 13516 TCF COSINE # 03 -- COS.
049274,000366: 00,2003 13607 TCF ARCSIN # 04 -- ARC SIN.
049275,000367: 00,2004 13611 TCF ARCCOS # 05 -- ARC COS.
049276,000368: 00,2005 13174 TCF DSQ # 06 -- DP SQUARE.
049277,000369: 00,2006 12116 TCF ROUND # 07 -- ROUND TO DP.
049278,000370:
049279,000371: 00,2007 17637 TCF COMP # 10 -- COMPLEMENT VECTOR OR SCALAR
049280,000372: 00,2010 13232 TCF VDEF # 11 -- VECTOR DEFINE.
049281,000373: 00,2011 13023 TCF UNIT # 12 -- UNIT VECTOR.
049282,000374: 00,2012 13176 TCF ABVALABS # 13 -- LENGTH OF VECTOR OR MAG OF SCALAR.
049283,000375: 00,2013 13245 TCF VSQ # 14 -- SQUARE OF LENGTH OF VECTOR.
049284,000376: 00,2014 16323 TCF STADR # 15 -- PUSH UP ON STORE CODE.
049285,000377: 00,2015 13274 TCF RVQ # 16 -- RETURN VIA QPRET.
049286,000378: 00,2016 13247 TCF PUSH # 17 -- PUSH MPAC DOWN.
049287,000379:
049288,000380: # Page 1119
049289,000381: # SECTION 2 LOAD AND STORE PACKAGE.
049290,000382:
049291,000383: # A SET OF EIGHT STORE CODES IS PROVIDED AS THE PRIMARY METHOD OF STORING THE MULTI-PURPOSE
049292,000384: # ACCUMULATOR (MPAC). IF IN THE DANZIG SECTION LOC REFERS TO AN ALGEBRAICALLY POSITIVE WORD, IT IS TAKEN AS A
049293,000385: # STORE CODE WITH A CORRESPONDING ERASABLE ADDRESS. MOST OF THESE CODES ARE TWO ADDRESS, SPECIFYING THAT THE WORD
049294,000386: # FOLLOWING THE STORE CODE IS TO BE USED AS AN ADDRESS FROM WHICH TO RE-LOAD MPAC. FOUR OPTIONS ARE AVAILABLE:
049295,000387:
049296,000388: # 1. STORE STORE MPAC. THE E ADDRESS MAY BE INDEXED.
049297,000389: # 2. STODL STORE MPAC AND RE-LOAD IT IN DP WITH THE NEXT ADDRESS (THE LOAD MAY BE INDEXED).
049298,000390: # 3. STOVL STORE MPAC AND RE-LOAD A VECTOR (AS ABOVE).
049299,000391: # 4. STCALL STORE AND DO A CALL (BOTH ADDRESSES MUST BE DIRECT HERE).
049300,000392:
049301,000393: # STODL AND STOVL WILL TAKE FROM THE PUSH-DOWN LIST IF NO LOAD ADDRESS IS GIVEN.
049302,000394:
049303,000395: 6323 BLOCK 3
049304,000396:
049305,000397: 6323 COUNT 03/INTER
049306,000398:
049307,000399: 6323 30165 STADR CA BANKSET # THE STADR CODE (PUSHUP UP ON STORE
049308,000400: 6324 54004 TS FBANK # ADDRESS) ENTERS HERE.
049309,000401: 6325 24164 INCR LOC
049310,000402: 6326 50164 ITR1 INDEX LOC # THE STORECODE WAS STORED COMPLEMENTED TO
049311,000403: 6327 40000 CS 0 # MAKE IT LOOK LIKE AN OPCODE PAIR.
049312,000404: 6330 67716 AD NEGONE # (YUL CAN'T REMOVE 1 BECAUSE OF EARLY CCS)
049313,000405:
049314,000406: 6331 54116 DOSTORE TS ADDRWD
049315,000407: 6332 74372 MASK LOW11 # ENTRY FROM DISPATCHER. SAVE THE ARASABLE
049316,000408: 6333 56116 XCH ADDRWD # ADDRESS AND JUMP ON THE STORE CODE NO.
049317,000409: 6334 77671 MASK B12T14
049318,000410: 6335 00006 EXTEND
049319,000411: 6336 75013 MP BIT5 # EACH TRANSFER VECTOR ENTRY IS TWO WORDS.
049320,000412: 6337 50000 ITR0 INDEX A
049321,000413: 6340 16341 TCF STORJUMP
049322,000414:
049323,000415: # Page 1120
049324,000416: # STORE CODE JUMP TABLE. CALLS THE APPROPRIATE STORING ROUTINE AND EXITS TO DANZIG OR TO ADDRESS WITH
049325,000417: # A SUPPLIED OPERATION CODE.
049326,000418:
049327,000419: # STORE STORE,1 AND STORE,2 RETURN TO DANZIG, THUS RESETTING THE EBANK TO ITS STATE AT INTPRET.
049328,000420:
049329,000421: 6341 06371 STORJUMP TC STORE # STORE.
049330,000422: 6342 16030 TCF DANZIG # PICK UP NEW OP CODE(S).
049331,000423: 6343 06363 TC STORE,1
049332,000424: 6344 16030 TCF DANZIG
049333,000425: 6345 06366 TC STORE,2
049334,000426: 6346 16030 TCF DANZIG
049335,000427:
049336,000428: 6347 06371 TC STORE # STODL.
049337,000429: 6350 16427 TCF DODLOAD
049338,000430:
049339,000431: 6351 06371 TC STORE # STODL WITH INDEXED LOAD ADDRESS.
049340,000432: 6352 16113 TCF DODLOAD*
049341,000433:
049342,000434: 6353 06371 TC STORE # STOVL.
049343,000435: 6354 16432 TCF DOVLOAD
049344,000436:
049345,000437: 6355 06371 TC STORE # STOVL WITH INDEXED LOAD ADDRESS.
049346,000438: 6356 16435 TCF DOVLOAD*
049347,000439: 6357 06371 TC STORE # STOTC.
049348,000440: 6360 35030 CAF CALLCODE
049349,000441: 6361 54020 TS CYR
049350,000442: 6362 16221 TCF 15BITADR # GET A 15 BIT ADDRESS.
049351,000443:
049352,000444: # Page 1121
049353,000445: # STORE CODE ADDRESS PROCESSOR.
049354,000446:
049355,000447: 6363 50120 STORE,1 INDEX FIXLOC
049356,000448: 6364 40046 CS X1
049357,000449: 6365 16370 TCF PRESTORE
049358,000450:
049359,000451: 6366 50120 STORE,2 INDEX FIXLOC
049360,000452: 6367 40047 CS X2
049361,000453: 6370 26116 PRESTORE ADS ADDRWD # RESULTANT ADDRESS IS IN ERASABLE.
049362,000454:
049363,000455: 6371 40116 STORE CS ADDRWD
049364,000456: 6372 65034 AD DEC45
049365,000457: 6373 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
049366,000458: 6374 30120 CA FIXLOC # YES.
049367,000459: 6375 16402 TCF AHEAD5
049368,000460: 6376 35051 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
049369,000461: 6377 56116 XCH ADDRWD
049370,000462: 6400 54003 TS EBANK
049371,000463: 6401 74373 MASK LOW8
049372,000464: 6402 26116 AHEAD5 ADS ADDRWD
049373,000465:
049374,000466: # Page 1122
049375,000467: # STORING ROUTINES. STORE DP, TP, OR VECTOR AS INDICATED BY MODE.
049376,000468:
049377,000469: 6403 00006 STARTSTO EXTEND # MPAC,+1 MUST BE STORED IN ANY EVENT.
049378,000470: # ITRACE (5) REFERS TO "STARTSTO".
049379,000471: 6404 30155 DCA MPAC
049380,000472: 6405 50116 INDEX ADDRWD
049381,000473: 6406 52001 DXCH 0
049382,000474:
049383,000475: 6407 10163 CCS MODE
049384,000476: 6410 16423 TCF TSTORE
049385,000477: 6411 00002 TC Q
049386,000478:
049387,000479: 6412 00006 VSTORE EXTEND
049388,000480: 6413 30160 DCA MPAC +3
049389,000481: 6414 50116 INDEX ADDRWD
049390,000482: 6415 52003 DXCH 2
049391,000483:
049392,000484: 6416 00006 EXTEND
049393,000485: 6417 30162 DCA MPAC +5
049394,000486: 6420 50116 INDEX ADDRWD
049395,000487: 6421 52005 DXCH 4
049396,000488: 6422 00002 TC Q
049397,000489:
049398,000490: 6423 30156 TSTORE CA MPAC +2
049399,000491: 6424 50116 INDEX ADDRWD
049400,000492: 6425 54002 TS 2
049401,000493: 6426 00002 TC Q
049402,000494:
049403,000495: # Page 1123
049404,000496: # ROUTINES TO BEGIN PROCESSING OF THE SECOND ADDRESS ASSOCIATED WITH ALL STORE-TYPE CODES EXCEPT STORE
049405,000497: # ITSELF.
049406,000498:
049407,000499: 6427 37701 DODLOAD CAF DLOADCOD
049408,000500: 6430 54020 TS CYR
049409,000501: 6431 16055 TCF DIRADRES # GO GET A DIRECT ADDRESS.
049410,000502:
049411,000503: 6432 35001 DOVLOAD CAF VLOADCOD
049412,000504: 6433 54020 TS CYR
049413,000505: 6434 16055 TCF DIRADRES
049414,000506:
049415,000507: 6435 36056 DOVLOAD* CAF VLOAD*
049416,000508: 6436 16114 TCF DODLOAD* +1 # PROLOGUE TO INDEX ROUTINE.
049417,000509:
049418,000510: # Page 1124
049419,000511: # THE FOLLOWING LOAD INSTRUCTIONS ARE PROVIDED FOR LOADING THE MULTI-PURPOSE ACCUMULATOR MPAC.
049420,000512:
049421,000513: 6437 50116 TLOAD INDEX ADDRWD
049422,000514: 6440 30002 CA 2 # LOAD A TRIPLE PRECISION ARGUMENT INTO
049423,000515: 6441 54156 TS MPAC +2 # THE FIRST THREE MPAC REGISTERS, WITH THE
049424,000516: 6442 00006 EXTEND # CONTENTS OF THE OTHER FOUR IRRELEVANT.
049425,000517: 6443 50116 INDEX ADDRWD
049426,000518: 6444 30001 DCA 0
049427,000519: 6445 52155 DXCH MPAC
049428,000520: 6446 35017 TMODE CAF ONE
049429,000521: 6447 16027 TCF NEWMODE # DECLEARE TRIPLE PRECISION MODE.
049430,000522:
049431,000523: 6450 22007 SLOAD ZL # LOAD A SINGLE PRECISION NUMBER INTO
049432,000524: 6451 50116 INDEX ADDRWD # MPAC, SETTING MPAC+1,2 TO ZERO. THE
049433,000525: 6452 30000 CA 0 # CONTENTS OF THE REMAINING MPAC REGISTERS
049434,000526: 6453 16024 TCF SLOAD2 # ARE IRRELEVANT.
049435,000527:
049436,000528: 6454 00006 VLOAD EXTEND # LOAD A DOUBLE PRECISION VECTOR INTO
049437,000529: 6455 50116 INDEX ADDRWD # MPAC,+1, MPAC+3,4, AND MPAC+5,6. THE
049438,000530: 6456 30001 DCA 0 # CONTENTS OF MPAC +2 ARE IRRELEVANT.
049439,000531: 6457 52155 DXCH MPAC
049440,000532:
049441,000533: 6460 00006 ENDVLOAD EXTEND # PDVL COMES HERE TO FINISH UP FOR DP, TP.
049442,000534: 6461 50116 INDEX ADDRWD
049443,000535: 6462 30003 DCA 2
049444,000536: 6463 52160 DXCH MPAC +3
049445,000537:
049446,000538: 6464 00006 +4 EXTEND # TPDVL FINISHES HERE.
049447,000539: 6465 50116 INDEX ADDRWD
049448,000540: 6466 30005 DCA 4
049449,000541: 6467 52162 DXCH MPAC +5
049450,000542:
049451,000543: 6470 45017 VMODE CS ONE # DECLARE VECTOR MODE.
049452,000544: 6471 16027 TCF NEWMODE
049453,000545:
049454,000546: # Page 1125
049455,000547: # THE FOLLOWING INSTRUCTIONS ARE PROVIDED FOR STORING OPERANDS IN THE PUSHDOWN LIST:
049456,000548: # 1. PUSH PUSHDOWN AND NO LOAD.
049457,000549: # 2. PDDL PUSHDOWN AND DOUBLE PRECISION LOAD.
049458,000550: # 3. PDVL PUSHDOWN AND VECTOR LOAD.
049459,000551:
049460,000552: 6472 00006 PDDL EXTEND
049461,000553: 6473 50116 INDEX ADDRWD # LOAD MPAC,+1, PUSHING THE FORMER
049462,000554: 6474 30001 DCA 0 # CONTENTS DOWN.
049463,000555: 6475 52155 DXCH MPAC
049464,000556: 6476 50166 INDEX PUSHLOC
049465,000557: 6477 52001 DXCH 0
049466,000558:
049467,000559: 6500 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER APPRO-
049468,000560: 6501 36213 CAF NO.WDS # PRIATELY.
049469,000561: 6502 26166 ADS PUSHLOC
049470,000562:
049471,000563: 6503 10163 CCS MODE
049472,000564: 6504 16521 TCF ENDTPUSH
049473,000565: 6505 16517 TCF ENDDPUSH
049474,000566:
049475,000567: 6506 54163 TS MODE # NOW DP.
049476,000568: 6507 54156 ENDVPUSH TS MPAC +2
049477,000569: 6510 52160 DXCH MPAC +3 # PUSH DOWN THE REST OF THE VECTOR HERE.
049478,000570: 6511 50166 INDEX PUSHLOC
049479,000571: 6512 51775 DXCH 0 -4
049480,000572:
049481,000573: 6513 52162 DXCH MPAC +5
049482,000574: 6514 50166 INDEX PUSHLOC
049483,000575: 6515 51777 DXCH 0 -2
049484,000576:
049485,000577: 6516 16030 TCF DANZIG
049486,000578:
049487,000579: 6517 54156 ENDDPUSH TS MPAC +2 # SET MPAC +2 TO ZERO AND EXIT ON DP.
049488,000580: 6520 16030 TCF DANZIG
049489,000581:
049490,000582: 6521 54163 ENDTPUSH TS MODE
049491,000583: 6522 56156 XCH MPAC +2 # ON TRIPLE, SET MPAC +2 TO ZERO, PUSHING
049492,000584: 6523 50166 +2 INDEX PUSHLOC # DOWN THE OLD CONTENTS
049493,000585: 6524 53777 TS 0 -1
049494,000586: 6525 16030 TCF DANZIG
049495,000587:
049496,000588: # Page 1126
049497,000589: # PDVL -- PUSHDOWN AND VECTOR LOAD
049498,000590:
049499,000591: 6526 00006 PDVL EXTEND # RELOAD MPAC AND PUSH DOWN ITS CONTENTS.
049500,000592: 6527 50116 INDEX ADDRWD
049501,000593: 6530 30001 DCA 0
049502,000594: 6531 52155 DXCH MPAC
049503,000595: 6532 50166 INDEX PUSHLOC
049504,000596: 6533 52001 DXCH 0
049505,000597:
049506,000598: 6534 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER.
049507,000599: 6535 36213 CAF NO.WDS
049508,000600: 6536 26166 ADS PUSHLOC
049509,000601:
049510,000602: 6537 10163 CCS MODE # TEST PAST MODE.
049511,000603: 6540 16557 TCF TPDVL
049512,000604: 6541 16460 TCF ENDVLOAD # JUST LOAD LAST FOUR REGISTERS ON DP.
049513,000605:
049514,000606: 6542 00006 VPDVL EXTEND # PUSHDOWN AND RE-LOAD LAST TWO COMPONENTS
049515,000607: 6543 50116 INDEX ADDRWD
049516,000608: 6544 30003 DCA 2
049517,000609: 6545 52160 DXCH MPAC +3
049518,000610: 6546 50166 INDEX PUSHLOC
049519,000611: 6547 51775 DXCH 0 -4
049520,000612:
049521,000613: 6550 00006 EXTEND
049522,000614: 6551 50116 INDEX ADDRWD
049523,000615: 6552 30005 DCA 4
049524,000616: 6553 52162 DXCH MPAC +5
049525,000617: 6554 50166 INDEX PUSHLOC
049526,000618: 6555 51777 DXCH 0 -2
049527,000619:
049528,000620: 6556 16030 TCF DANZIG
049529,000621:
049530,000622: 6557 00006 TPDVL EXTEND # ON TP, WE MUST LOAD THE Y COMPONENT
049531,000623: 6560 50116 INDEX ADDRWD # BEFORE STORING MPAC +2 IN CASE THIS IS A
049532,000624: 6561 30003 DCA 2 # PUSHUP.
049533,000625: 6562 52160 DXCH MPAC +3
049534,000626:
049535,000627: 6563 30156 CA MPAC +2
049536,000628: 6564 50166 INDEX PUSHLOC # IN DP.
049537,000629: 6565 53777 TS 0 -1
049538,000630: 6566 16464 TCF ENDVLOAD +4
049539,000631:
049540,000632: # SSP (STORE SINGLE PRECISION) IS EXECUTED HERE.
049541,000633:
049542,000634: 6567 24164 SSP INCR LOC # PICK UP THE WORD FOLLOWING THE GIVEN
049543,000635: 6570 50164 INDEX LOC # ADDRESS AND STORE IT AT X.
049544,000636: 6571 30000 CA 0
049545,000637: 6572 50116 STORE1 INDEX ADDRWD # SOME INDEX AND MISCELLANEOUS OPS END
049546,000638: 6573 54000 TS 0 # HERE.
049547,000639: # Page 1127
049548,000640: 6574 16030 TCF DANZIG
049549,000641:
049550,000642: # Page 1128
049551,000643: # SEQUENCE CHANGING AND SUBROUTINE CALLING OPTIONS.
049552,000644:
049553,000645: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR SEQUENCING CHANGING, BRANCHING, AND CALLING SUBROUTINES:
049554,000646: # 1. GOTO GO TO.
049555,000647: # 2. CALL CALL SUBROUTINE SETTING QPRET.
049556,000648: # 3. CGOTO COMPUTED GO TO.
049557,000649: # 4. CCALL COMPUTED CALL.
049558,000650: # 7. BPL BRANCH IF MPAC POSITIVE OR ZERO.
049559,000651: # 8. BZE BRANCH IF MPAC ZERO.
049560,000652: # 9. BMN BRANCH IF MPAC NEGATIVE NON-ZERO.
049561,000653:
049562,000654: 6575 24164 CCALL INCR LOC # MAINTAIN LOC FOR QPRET COMPUTATION
049563,000655: 6576 50164 INDEX LOC
049564,000656: # Was CAF --- RSB 2009.
049565,000657: 6577 30000 CA 0 # GET BASE ADDRESS OF CADR LIST.
049566,000658: 6600 50116 INDEX ADDRWD
049567,000659: 6601 60000 AD 0 # ADD INCREMENT.
049568,000660: 6602 54004 TS FBANK # SELECT DESIRED CADR.
049569,000661: 6603 75054 MASK LOW10
049570,000662: 6604 50000 INDEX A
049571,000663: 6605 32000 CAF 10000
049572,000664: 6606 54117 TS POLISH
049573,000665:
049574,000666: 6607 30165 CALL CA BANKSET # FOR ANY OF THE CALL OPTIONS, MAKE UP THE
049575,000667: 6610 74364 MASK BANKMASK # ADDRESS OF THE NEXT OP-CODE PAIR/STORE
049576,000668: 6611 64364 AD BANKMASK # CODE AND LEAVE IT IN QPRET. NOTE THAT
049577,000669: 6612 60164 AD LOC # BANKMASK = -(2000 - 1).
049578,000670: 6613 50120 INDEX FIXLOC
049579,000671: 6614 54052 TS QPRET
049580,000672:
049581,000673: 6615 30117 GOTO CA POLISH # BASIC BRANCHING SEQUENCE.
049582,000674: 6616 77711 +1 MASK HIGH4
049583,000675: 6617 00006 EXTEND
049584,000676: 6620 16631 BZF GOTOERS # SEE IF ADDRESS POINTS TO FIXED OR ERAS.
049585,000677: 6621 30165 +4 CA BANKSET # SET EBANK PART OF BBANK. NEXT, SET UP
049586,000678: 6622 54006 TS BBANK # FBANK. THE COMBINATION IS PICKED UP &
049587,000679: 6623 30117 CA POLISH # PUT INTO BANKSET AT INTPRET +2.
049588,000680: 6624 54004 TS FBANK
049589,000681: 6625 75054 MASK LOW10
049590,000682: 6626 65005 AD 2K
049591,000683: 6627 54164 TS LOC
049592,000684: 6630 16011 TCF INTPRET +3
049593,000685:
049594,000686: 6631 E3,1400 EBANK= 1400 # SO YUL DOESN'T CUSS THE "CA 1400" BELOW.
049595,000687:
049596,000688: 6631 30117 GOTOERS CA POLISH # THE GIVEN ADDRESS IS IN ERASABLE -- SEE
049597,000689: 6632 66220 AD -ENDVAC # IF RELATIVE TO THE WORK ARA.
049598,000690: 6633 10000 CCS A
049599,000691: 6634 30117 CA POLISH # GENERAL ERASABLE.
049600,000692: 6635 16644 TCF GOTOGE
049601,000693:
049602,000694: # Page 1129
049603,000695: 6636 30120 CA FIXLOC # WORK AREA.
049604,000696: 6637 60117 AD POLISH
049605,000697: 6640 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
049606,000698: 6641 30000 CA 0 # THE BRANCH ADDRESS.
049607,000699: 6642 54117 TS POLISH
049608,000700: 6643 16616 TCF GOTO +1 # ALLOWS ARBITRARY INDIRECTNESS LEVELS.
049609,000701:
049610,000702: 6644 54003 GOTOGE TS EBANK
049611,000703: 6645 74373 MASK LOW8
049612,000704: 6646 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
049613,000705: 6647 31400 CA 1400 # THE BRANCH ADDRESS.
049614,000706: 6650 54117 TS POLISH
049615,000707: 6651 16616 TCF GOTO +1
049616,000708:
049617,000709: 6652 50164 CGOTO INDEX LOC # COMPUTED GO TO. PICK UP ADDRESS OF CADR
049618,000710: 6653 30001 CA 1 # LIST
049619,000711: 6654 50116 INDEX ADDRWD # ADD MODIFIER.
049620,000712: 6655 60000 AD 0
049621,000713: 6656 54004 TS FBANK # SELECT GOTO ADDRESS
049622,000714: 6657 75054 MASK LOW10
049623,000715: 6660 50000 INDEX A
049624,000716: 6661 32000 CA 10000
049625,000717: 6662 54117 TS POLISH
049626,000718: 6663 16616 TCF GOTO +1 # WITH ADDRESS IN A.
049627,000719:
049628,000720: 6664 30165 SWBRANCH CA BANKSET # SWITCH INSTRUCTIONS WHICH ELECT TO
049629,000721: 6665 54004 TS FBANK # BRANCH COME HERE TO DO SO.
049630,000722: 6666 50164 INDEX LOC
049631,000723: 6667 30001 CA 1
049632,000724: 6670 54117 TS POLISH
049633,000725: 6671 16616 TCF GOTO +1
049634,000726:
049635,000727: # Page 1130
049636,000728: # TRIPLE PRECISION BRANCHING ROUTINE. IF CALLING TC IS AT L, RETURN IS AS FOLLOWS:
049637,000729: # L+1 IF MPAC IS GREATER THAN ZERO.
049638,000730: # L+2 IF MPAC IS EQUAL TO +0 OR -0.
049639,000731: # L+3 IF MPAC IS LESS THAN ZERO.
049640,000732:
049641,000733: 6672 10154 BRANCH CCS MPAC
049642,000734: 6673 00002 TC Q
049643,000735: 6674 16676 TCF +2 # ON ZERO.
049644,000736: 6675 16710 TCF NEG
049645,000737:
049646,000738: 6676 10155 CCS MPAC +1
049647,000739: 6677 00002 TC Q
049648,000740: 6700 16702 TCF +2
049649,000741: 6701 16710 TCF NEG
049650,000742:
049651,000743: 6702 10156 CCS MPAC +2
049652,000744: 6703 00002 TC Q
049653,000745: 6704 16706 TCF +2
049654,000746: 6705 16710 TCF NEG
049655,000747:
049656,000748: 6706 50002 Q+1 INDEX Q
049657,000749: 6707 00001 TC 1
049658,000750:
049659,000751: 6710 50002 NEG INDEX Q # IF FIRST NON-ZERO REGISTER WAS NEGATIVE.
049660,000752: 6711 00002 TC 2
049661,000753:
049662,000754: 6712 6710 Q+2 = NEG
049663,000755:
049664,000756: # ITRACE (3) REFERS TO "EXIT".
049665,000757:
049666,000758: 6712 30165 EXIT CA BANKSET # RESTORE USER'S BANK SETTING, AND LEAVE
049667,000759: 6713 54006 TS BBANK # INTERPRETIVE MODE.
049668,000760: 6714 50164 INDEX LOC
049669,000761: 6715 00001 TC 1
049670,000762:
049671,000763: # Page 1131
049672,000764: # SECTION 3 -- ADD/SUBTRACT PACKAGE.
049673,000765:
049674,000766: # THE FOLLOWING OPERATIONS ARE PROVIDED FOR ADDING TO AND SUBTRACTING FROM THE MULTI-PURPOSE ACCUMULATOR
049675,000767: # MPAC:
049676,000768: # 1. DAD DOUBLE PRECISION ADD.
049677,000769: # 2. DSU DOUBLE PRECISION SUBTRACT.
049678,000770: # 3. BDSU DOUBLE PRECISION SUBTRACT FROM.
049679,000771: # 4. TAD TRIPLE PRECISION ADD.
049680,000772: # 5. VAD VECTOR ADD.
049681,000773: # 6. VSU VECTOR SUBTRACT.
049682,000774: # 7. BVSU VECTOR SUBTRACT FROM.
049683,000775: # THE INTERPRETIVE OVERFLOW INDICATOR OVFIND IS SET NON-ZERO IF OVERFLOW OCCURS IN ANY OF THE ABOVE.
049684,000776:
049685,000777: 6716 35001 VSU CAF BIT15 # CHANGES 0 TO DCS.
049686,000778: 6717 16721 TCF +2
049687,000779:
049688,000780: 6720 34371 VAD CAF PRIO30 # CHANGES 0 TO DCA.
049689,000781: 6721 26116 ADS ADDRWD
049690,000782: 6722 00006 EXTEND
049691,000783: 6723 50116 INDEX ADDRWD
049692,000784: 6724 00003 READ HISCALAR # DCA 2 OR DCS 2
049693,000785: 6725 20160 DAS MPAC +3
049694,000786: 6726 00006 EXTEND # CHECK OVERFLOW.
049695,000787: 6727 16731 BZF +2
049696,000788: 6730 06763 TC OVERFLWY
049697,000789:
049698,000790: 6731 00006 EXTEND
049699,000791: 6732 50116 INDEX ADDRWD
049700,000792: 6733 00005 READ CHAN5 # DCA 4 OR DCS 4
049701,000793: 6734 20162 DAS MPAC +5
049702,000794: 6735 00006 EXTEND
049703,000795: 6736 16740 BZF +2
049704,000796: 6737 06760 TC OVERFLWZ
049705,000797:
049706,000798: 6740 00006 EXTEND
049707,000799: 6741 50116 INDEX ADDRWD
049708,000800: 6742 00001 READ LCHAN # DCA 0 OR DCS 0
049709,000801: 6743 16747 TCF ENDVXV
049710,000802:
049711,000803: 6744 00006 DAD EXTEND
049712,000804: 6745 50116 INDEX ADDRWD
049713,000805: 6746 30001 DCA 0
049714,000806: 6747 20155 ENDVXV DAS MPAC # VXV FINISHES HERE.
049715,000807: 6750 00006 EXTEND
049716,000808: 6751 16030 BZF DANZIG
049717,000809:
049718,000810: # Page 1132
049719,000811: 6752 06766 SETOVF TC OVERFLOW
049720,000812: 6753 16030 TCF DANZIG
049721,000813:
049722,000814: # Page 1133
049723,000815: 6754 00006 DSU EXTEND
049724,000816: 6755 50116 INDEX ADDRWD
049725,000817: 6756 40001 DCS 0
049726,000818: 6757 16747 TCF ENDVXV
049727,000819:
049728,000820: 6760 54001 OVERFLWZ TS L # ENTRY FOR THIRD COMPONENT.
049729,000821: 6761 35022 CAF FIVE
049730,000822: 6762 16765 TCF +3
049731,000823:
049732,000824: 6763 54001 OVERFLWY TS L # ENTRY FOR SECOND COMPONENT.
049733,000825: 6764 36214 CAF THREE
049734,000826: 6765 56001 XCH L
049735,000827:
049736,000828: 6766 50000 OVERFLOW INDEX A # ENTRY FOR 1ST COMP OR DP (L=0).
049737,000829: 6767 45000 CS LIMITS # PICK UP POSMAX OR NEGMAX.
049738,000830: 6770 54130 TS BUF
049739,000831: 6771 00006 EXTEND
049740,000832: 6772 24000 AUG A
049741,000833: 6773 50001 INDEX L
049742,000834: 6774 26155 ADS MPAC +1
049743,000835: 6775 54007 TS 7
049744,000836: 6776 35021 CAF ZERO
049745,000837: 6777 60130 AD BUF
049746,000838: 7000 50001 INDEX L
049747,000839: 7001 26154 ADS MPAC
049748,000840: 7002 54007 TS 7
049749,000841: 7003 00002 TC Q # NO OVERFLOW EXIT.
049750,000842: 7004 17121 TCF SETOVF2 # SET OVFIND AND EXIT.
049751,000843:
049752,000844: 7005 00006 BVSU EXTEND
049753,000845: 7006 50116 INDEX ADDRWD
049754,000846: 7007 30003 DCA 2
049755,000847: 7010 52160 DXCH MPAC +3
049756,000848: 7011 00006 EXTEND
049757,000849: 7012 40001 DCOM
049758,000850: 7013 20160 DAS MPAC +3
049759,000851: 7014 00006 EXTEND
049760,000852: 7015 17017 BZF +2
049761,000853: 7016 06763 TC OVERFLWY
049762,000854:
049763,000855: 7017 00006 EXTEND
049764,000856: 7020 50116 INDEX ADDRWD
049765,000857: 7021 30005 DCA 4
049766,000858: 7022 52162 DXCH MPAC +5
049767,000859: 7023 00006 EXTEND
049768,000860: 7024 40001 DCOM
049769,000861: 7025 20162 DAS MPAC +5
049770,000862: 7026 00006 EXTEND
049771,000863: 7027 17031 BZF +2
049772,000864: 7030 06760 TC OVERFLWZ
049773,000865:
049774,000866: # Page 1134
049775,000867: 7031 00006 BDSU EXTEND
049776,000868: 7032 50116 INDEX ADDRWD
049777,000869: 7033 30001 DCA 0
049778,000870: 7034 52155 DXCH MPAC
049779,000871: 7035 00006 EXTEND
049780,000872: 7036 40001 DCOM
049781,000873: 7037 16747 TCF ENDVXV
049782,000874:
049783,000875: # Page 1135
049784,000876: # TRIPLE PRECISION ADD ROUTINE.
049785,000877:
049786,000878: 7040 00006 TAD EXTEND
049787,000879: 7041 50116 INDEX ADDRWD
049788,000880: 7042 30002 DCA 1 # ADD MINOR PARTS FIRST.
049789,000881: 7043 20156 DAS MPAC +1
049790,000882: 7044 50116 INDEX ADDRWD
049791,000883: 7045 60000 AD 0
049792,000884: 7046 60154 AD MPAC
049793,000885: 7047 54154 TS MPAC
049794,000886: 7050 16030 TCF DANZIG
049795,000887:
049796,000888: 7051 16752 TCF SETOVF # SET OVFIND IF SUCH OCCURS.
049797,000889:
049798,000890: # Page 1136
049799,000891: # ARITHMETIC SUBROUTINES REQUIRED IN FIXED-FIXED.
049800,000892: # 1. DMPSUB DOUBLE PRECISION MULTIPLY, MULTIPLY THE CONTENTS OF MPAC,+1 BY THE DP WORD WHOSE ADDRESS
049801,000893: # IS IN ADDRWD AND LEAVE A TRIPLE-PRECISION RESULT IN MPAC.
049802,000894: # 2. ROUNDSUB ROUND THE TRIPLE PRECISION CONTENTS OF MPAC TO DOUBLE PRECISION.
049803,000895: # 3. DOTSUB TAKE THE DOT PRODUCT OF THE VECTOR IN MPAC AND THE VECTOR WHOSE ADDRESS IS IN ADDRWD
049804,000896: # AND LEAVE THE TRIPLE PRECISION RESULT IN MPAC.
049805,000897: # 4. POLY USING THE CONTENTS OF MPAC AS A DP ARGUMENT, EVALUATE THE POLYNOMIAL WHOSE DEGREE AND
049806,000898: # COEFFICIENTS IMMEDIATELY FOLLOW THE TC POLY INSTRUCTION (SEE ROUTINE FOR DETAILS).
049807,000899:
049808,000900: 7052 50002 DMP INDEX Q # BASIC SUBROUTINE FOR USE BY PINBALL, ETC
049809,000901: # Was CAF --- RSB 2009.
049810,000902: 7053 30000 CA 0
049811,000903: 7054 24002 INCR Q
049812,000904: 7055 54116 -1 TS ADDRWD # (PROLOGUE FOR SETTING ADDRWD.)
049813,000905:
049814,000906: 7056 50116 DMPSUB INDEX ADDRWD # GET MINOR PART OF OPERAND AT C(ADDRWD).
049815,000907: 7057 30001 CA 1
049816,000908: 7060 54156 TS MPAC +2 # THIS WORKS FOR SQUARING MPAC AS WELL.
049817,000909: 7061 35021 CAF ZERO # SET MPAC +1 TO ZERO SO WE CAN ACCUMULATE
049818,000910: 7062 56155 XCH MPAC +1 # THE PARTIAL PRODUCTS WITH DAS
049819,000911: 7063 54135 TS MPTEMP # INSTRUCTIONS.
049820,000912: 7064 00006 EXTEND
049821,000913: 7065 70156 MP MPAC +2 # MINOR OF MPAC X MINOR OF C(ADDRWD).
049822,000914:
049823,000915: 7066 56156 XCH MPAC +2 # DISCARD MINOR PART OF ABOVE RESULT AND
049824,000916: 7067 00006 EXTEND # FORM MAJOR OF MPAC X MINOR OF C(ADDRWD).
049825,000917: 7070 70154 MP MPAC
049826,000918: 7071 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
049827,000919:
049828,000920: 7072 50116 INDEX ADDRWD # GET MAJOR PART OF ARGUMENT AT C(ADDRWD).
049829,000921: 7073 30000 CA 0
049830,000922: 7074 56135 XCH MPTEMP # SAVE AND BRING OUT MINOR OF MPAC.
049831,000923: 7075 00006 DMPSUB2 EXTEND
049832,000924: 7076 70135 MP MPTEMP # MAJOR OF C(ADDRWD) X MINOR OF MPAC.
049833,000925: 7077 20156 DAS MPAC +1 # ACCUMULATE, SETTING A TO NET OVERFLOW.
049834,000926:
049835,000927: 7100 56154 XCH MPAC # SETTING MPAC TO 0 OR +-1.
049836,000928: 7101 00006 EXTEND
049837,000929: 7102 70135 MP MPTEMP # MAJOR OF MPAC X MAJOR OF C(ADDRWD).
049838,000930: 7103 20155 DAS MPAC # GUARANTEED NO OVERFLOW.
049839,000931: 7104 00002 TC Q # 49 MCT = .573 MS. INCLUDING RETURN.
049840,000932:
049841,000933: # Page 1137
049842,000934: # ROUND MPAC TO DOUBLE PRECISION, SETTING OVFIND ON THE RARE EVENT OF OVERFLOW.
049843,000935:
049844,000936: 7105 35021 ROUNDSUB CAF ZERO # SET MPAC +2 = 0 FOR SCALARS AND CHANGE
049845,000937: 7106 54163 +1 TS MODE # MODE TO DP.
049846,000938:
049847,000939: 7107 56156 VROUND XCH MPAC +2 # BUT WE NEEDN'T TAKE THE TIME FOR VECTORS.
049848,000940: 7110 60000 DOUBLE
049849,000941: 7111 54001 TS L
049850,000942: 7112 00002 TC Q
049851,000943:
049852,000944: 7113 60155 AD MPAC +1 # ADD ROUDING BIT IF MPAC +2 WAS GREATER
049853,000945: 7114 54155 TS MPAC +1 # THAN .5 IN MAGNITUDE.
049854,000946: 7115 00002 TC Q
049855,000947:
049856,000948: 7116 60154 AD MPAC # PROPAGATE INTERFLOW.
049857,000949: 7117 54154 TS MPAC
049858,000950: 7120 00002 TC Q
049859,000951:
049860,000952: 7121 54121 SETOVF2 TS OVFIND # (RARE).
049861,000953: 7122 00002 TC Q
049862,000954:
049863,000955: # Page 1138
049864,000956: # THE DOT PRODUCT SUBROUTINE USUALLY FORMS THE DOT PRODUCT OF THE VECTOR IN MPAC WITH A STANDARD SIX
049865,000957: # REGISTER VECTOR WHOSE ADDRESS IS IN ADDRWD. IN THIS CASE C(DOTINC) ARE SET TO 2. VXM, HOWEVER, SETS C(DOTINC) TO
049866,000958: # 6 SO THAT DOTSUB DOTS MPAC WITH A COLUMN VECTOR OF THE MATRIX IN QUESTION IN THIS CASE.
049867,000959:
049868,000960: 7123 35016 PREDOT CAF TWO # PROLOGUE TO SET DOTINC TO 2.
049869,000961: 7124 54136 TS DOTINC
049870,000962:
049871,000963: 7125 00006 DOTSUB EXTEND
049872,000964: 7126 22137 QXCH DOTRET # SAVE RETURN
049873,000965: 7127 07056 TC DMPSUB # DOT X COMPONENTS.
049874,000966: 7130 52160 DXCH MPAC +3 # POSITION Y COMPONENT OF MPAC FOR
049875,000967: 7131 52155 DXCH MPAC # MULTIPLICATION WHILE SAVING RESULT IN
049876,000968: 7132 52131 DXCH BUF # THREE WORD BUFFER, BUF.
049877,000969: 7133 30156 CA MPAC +2
049878,000970: 7134 54132 TS BUF +2
049879,000971:
049880,000972: 7135 30136 CA DOTINC # ADVANCE ADDRWD TO Y COMPONENT OF
049881,000973: 7136 26116 ADS ADDRWD # OTHER ARGUMENT.
049882,000974: 7137 07056 TC DMPSUB
049883,000975: 7140 52156 DXCH MPAC +1 # ACCUMULATE PARTIAL PRODUCTS.
049884,000976: 7141 20132 DAS BUF +1
049885,000977: 7142 60154 AD MPAC
049886,000978: 7143 60130 AD BUF
049887,000979: 7144 54130 TS BUF
049888,000980: 7145 17147 TCF +2
049889,000981: 7146 54121 TS OVFIND # IF OVERFLOW OCCURS.
049890,000982:
049891,000983: 7147 52162 DXCH MPAC +5 # MULTIPLY Z COMPONENTS.
049892,000984: 7150 52155 DXCH MPAC
049893,000985: 7151 30136 CA DOTINC
049894,000986: 7152 26116 ADS ADDRWD
049895,000987: 7153 07056 TC DMPSUB
049896,000988: 7154 52132 ENDDOT DXCH BUF +1 # LEAVE FINAL ACCUMULATION IN MPAC.
049897,000989: 7155 20156 DAS MPAC +1
049898,000990: 7156 60154 AD MPAC
049899,000991: 7157 60130 AD BUF
049900,000992: 7160 54154 TS MPAC
049901,000993: 7161 00137 TC DOTRET
049902,000994:
049903,000995: 7162 06766 TC OVERFLOW # ON OVERFLOW HERE.
049904,000996: 7163 00137 TC DOTRET
049905,000997:
049906,000998: # Page 1139
049907,000999: # DOUBLE PRECISION POLYNOMIAL EVALUATOR
049908,001000: # N N-1
049909,001001: # THIS ROUTINE EVALUATES A X + A X + ... + A X + A LEAVING THE DP RESULT IN MPAC ON EXIT.
049910,001002: # N N-1 1 0
049911,001003:
049912,001004: # THE ROUTINE HAS TWO ENTRIES
049913,001005:
049914,001006: # 1 ENTRY THRU POWRSERS. THE COEFFICIENTS MAY BE EITHER IN FIXED OR ERASABLE E. THE CALL IS BY
049915,001007: # TC POWRSERS, AND THE RETURN IS TO LOC(TC POWRSERS)+1. THE ENTERING DATA MUST BE AS FOLLOWS:
049916,001008: # A SP LOC-3 ADDRESS FOR REFERENCING COEF TABLE
049917,001009: # L SP N-1 N IS THE DEGREE OF THE POWER SERIES
049918,001010: # MPAC DP X ARGUMENT
049919,001011: # LOC-2N DP A(0)
049920,001012: # ...
049921,001013: # LOC DP A(N)
049922,001014:
049923,001015: # 2. ENTRY THRU POLY. THE CALL TO POLY AND THE ENTERING DATA MUST BE AS FOLLOWS
049924,001016: # MPAC DP X ARGUMENT
049925,001017: # LOC TC POLY
049926,001018: # LOC+1 DP A(0)
049927,001019: # ...
049928,001020: # LOC+2N+2 DP A(N) RETURN IS TO LOC+2N+4
049929,001021:
049930,001022: 7164 00006 POWRSERS EXTEND
049931,001023: 7165 22141 QXCH POLYRET # RETURN ADDRESS
049932,001024: 7166 54117 TS POLISH # POWER SERIES ADDRESS
049933,001025: 7167 22140 LXCH POLYCNT # N-1 TO COUNTER
049934,001026: 7170 17201 TCF POLYCOM # SKIP SET UP BY POLY
049935,001027:
049936,001028: 7171 50002 POLY INDEX Q
049937,001029: # Was CAF --- RSB 2009.
049938,001030: 7172 30000 CA 0
049939,001031: 7173 54140 TS POLYCNT # N-1 TO COUNTER
049940,001032: 7174 60000 DOUBLE
049941,001033: 7175 60002 AD Q
049942,001034: 7176 54117 TS POLISH # L(A(N))-3 TO POLISH
049943,001035: 7177 65022 AD FIVE
049944,001036: 7200 54141 TS POLYRET # STORE RETURN ADDRESS
049945,001037:
049946,001038: 7201 36242 POLYCOM CAF LVBUF # INCOMING X WILL BE MOVED TO VBUF, SO
049947,001039: 7202 54116 TS ADDRWD # SET ADDRWD SO DMPSUB WILL MPY BY VBUF.
049948,001040:
049949,001041: 7203 00006 EXTEND
049950,001042: 7204 50117 INDEX POLISH
049951,001043: 7205 30004 DCA 3
049952,001044:
049953,001045: # Page 1140
049954,001046: 7206 52155 DXCH MPAC # LOAD A(N) INTO MPAC
049955,001047: 7207 52123 DXCH VBUF # SAVING X IN VBUF
049956,001048: 7210 17214 TCF POLY2
049957,001049:
049958,001050: 7211 54140 POLYLOOP TS POLYCNT # SAVE DECREMENTD LOOP COUNTER
049959,001051: 7212 45016 CS TWO
049960,001052: 7213 26117 ADS POLISH # REGRESS COEFFICIENT POINTER
049961,001053:
049962,001054: 7214 07056 POLY2 TC DMPSUB # MULTIPLY BY X
049963,001055: 7215 00006 EXTEND
049964,001056: 7216 50117 INDEX POLISH
049965,001057: 7217 30002 DCA 1 # ADD IN NEXT COEFFICIENT
049966,001058: 7220 20155 DAS MPAC # USER'S RESPONSIBILITY TO ASSURE NO OVFLOW
049967,001059:
049968,001060: 7221 10140 CCS POLYCNT
049969,001061: 7222 17211 TCF POLYLOOP
049970,001062: 7223 00141 TC POLYRET # RETURN CALLER
049971,001063:
049972,001064: # Page 1141
049973,001065: # MISCELLANEOUS MULTI-PRECISION ROUTINES REQUIRED IN FIXED-FIXED BUT NOT USED BY THE INTERPRETER.
049974,001066:
049975,001067: 7224 35021 DPAGREE CAF ZERO # DOUBLE PRECISION ENTRY --
049976,001068: 7225 54156 TS MPAC +2 # ZERO LOW-ORDER WORD
049977,001069:
049978,001070: 7226 22002 TPAGREE LXCH Q # FORCE SIGN AGREEMENT AMONG THE TRIPLE
049979,001071: 7227 06672 TC BRANCH # PRECISION CONTENTS OF MPAC. RETURNING
049980,001072: 7230 17234 TCF ARG+ # WITH SIGNUM OF THE INPUT IN A.
049981,001073: 7231 17254 TCF ARGZERO
049982,001074:
049983,001075: 7232 44777 CS POSMAX # IF NEGATIVE.
049984,001076: 7233 17235 TCF +2
049985,001077:
049986,001078: 7234 34777 ARG+ CAF POSMAX
049987,001079: 7235 54002 TS Q
049988,001080: 7236 00006 EXTEND
049989,001081: 7237 24000 AUG A # FORMS +-1.0.
049990,001082: 7240 60156 AD MPAC +2
049991,001083: 7241 54156 TS MPAC +2
049992,001084: 7242 35021 CAF ZERO
049993,001085: 7243 60002 AD Q
049994,001086: 7244 60155 AD MPAC +1
049995,001087: 7245 54155 TS MPAC +1
049996,001088: 7246 35021 CAF ZERO
049997,001089: 7247 60002 AD Q # Q STILL HAS POSMAX OR NEGMAX IN IT.
049998,001090: 7250 60154 AD MPAC
049999,001091: 7251 54154 ARGZERO2 TS MPAC # ALWAYS SKIPPING UNLESS ARGZERO.
050000,001092: 7252 54155 TS MPAC +1
050001,001093: 7253 00001 TC L # RETURN VIA L.
050002,001094:
050003,001095: 7254 54156 ARGZERO TS MPAC +2 # SET ALL THREE MPAC REGISTERS TO ZERO.
050004,001096: 7255 17251 TCF ARGZERO2
050005,001097:
050006,001098: # SHORTMP MULTIPLIES THE TP CONTENTS OF MPAC BY THE SINGLE PRECISION NUMBER ARRIVING IN A.
050007,001099:
050008,001100: 7256 54135 SHORTMP TS MPTEMP
050009,001101: 7257 00006 EXTEND
050010,001102: 7260 70156 MP MPAC +2
050011,001103: 7261 54156 TS MPAC +2
050012,001104: 7262 35021 SHORTMP2 CAF ZERO # SO SUBSEQUENT DAS WILL WORK.
050013,001105: 7263 56155 XCH MPAC +1
050014,001106: 7264 17075 TCF DMPSUB2
050015,001107:
050016,001108: # Page 1142
050017,001109: # DMPNSUB MULTIPLIES THE DP FRACTION ARRIVING IN MPAC BY THE SP
050018,001110: # INTEGER ARRIVING IN A. THE DP PRODUCT DEPARTS BOTH IN MPAC AND IN
050019,001111: # A AND L. NOTE THAT DMPNSUB NORMALLY INCREASES THE MAGNITUDE OF THE
050020,001112: # CONTENTS OF MPAC. THE CUSTOMER MUST INSURE THAT B(A) X B(MPAC,MPAC+1)
050021,001113: # AND B(A) X B(MPAC) ARE LESS THAN 1 IN MAGNITUDE, WHERE B, AS IS OBVIOUS,
050022,001114: # INDICATES THE ARRIVING CONTENTS.
050023,001115:
050024,001116: 7265 54135 DMPNSUB TS DMPNTEMP
050025,001117: 7266 00006 EXTEND
050026,001118: 7267 70155 MP MPAC +1
050027,001119: 7270 52155 DXCH MPAC # LOW PRODUCT TO MPAC, HIGH FACTOR TO A
050028,001120: 7271 00006 EXTEND
050029,001121: 7272 70135 MP DMPNTEMP
050030,001122: 7273 30001 CA L
050031,001123: 7274 26154 ADS MPAC # COMPLETING THE PRODUCT IN MPAC
050032,001124: 7275 00006 EXTEND
050033,001125: 7276 30155 DCA MPAC # BRINGING THE PRODUCT INTO A AND L
050034,001126: 7277 00002 TC Q
050035,001127:
050036,001128: # Page 1143
050037,001129: # MISCELLANEOUS VECTOR OPERATIONS. INCLUDED HERE ARE THE FOLLOWING.
050038,001130: # 1. DOT DP VECTOR DOT PRODUCT.
050039,001131: # 2. VXV DP VECTOR CROSS PRODUCT.
050040,001132: # 3. VXSC DP VECTOR TIMES SCALAR.
050041,001133: # 4. V/SC DP VECTOR DIVIDED BY SCALAR.
050042,001134: # 5. VPROJ DP VECTOR PROJECTION. ( (MPAC.X)MPAC ).
050043,001135: # 6. VXM DP VECTOR POST-MULTIPLIED BY MATRIX.
050044,001136: # 7. MXV DP VECTOR PRE-MULTIPLIED BY MATRIX.
050045,001137:
050046,001138: 7300 07123 DOT TC PREDOT # DO THE DOT PRODUCT AND EXIT, CHANGING
050047,001139: 7301 35021 DMODE CAF ZERO # THE MODE TO DP SCALAR.
050048,001140: 7302 16027 TCF NEWMODE
050049,001141:
050050,001142: 7303 35016 MXV CAF TWO # SET UP MATINC AND DOTINC FOR ROW
050051,001143: 7304 54140 TS MATINC # VECTORS.
050052,001144: 7305 17311 TCF VXM/MXV # GO TO COMMON PORTION.
050053,001145:
050054,001146: 7306 44377 VXM CS TEN # SET MATINC AND DOTINC TO REFER TO MATRIX
050055,001147: 7307 54140 TS MATINC # AS THREE COLUMN VECTORS.
050056,001148: 7310 36211 CAF SIX
050057,001149:
050058,001150: # Page 1144
050059,001151: # COMMON PORTION OF MXV AND VXM.
050060,001152:
050061,001153: 7311 54136 VXM/MXV TS DOTINC
050062,001154:
050063,001155: # ITRACE (2) REFERS TO "VXM/MXV".
050064,001156:
050065,001157: 7312 07501 TC MPACVBUF # SAVE VECTOR IN MPAC FOR FURTHER USE.
050066,001158:
050067,001159: 7313 07125 TC DOTSUB # GO DOT TO GET X COMPONENT OF ANSWER.
050068,001160: 7314 00006 EXTEND
050069,001161: 7315 30123 DCA VBUF # MOVE MPAC VECTOR BACK INTO MPAC, SAVING
050070,001162: 7316 52155 DXCH MPAC # NEW X COMPONENT IN BUF2.
050071,001163: 7317 52134 DXCH BUF2
050072,001164: 7320 00006 EXTEND
050073,001165: 7321 30125 DCA VBUF +2
050074,001166: 7322 52160 DXCH MPAC +3
050075,001167: 7323 00006 EXTEND
050076,001168: 7324 30127 DCA VBUF +4
050077,001169: 7325 52162 DXCH MPAC +5
050078,001170: 7326 30140 CA MATINC # INITIALIZE ADDRWD FOR NEXT DOT PRODUCT.
050079,001171: 7327 26116 ADS ADDRWD # FORMS HAS ADDRESS OF NEXT COLUMN(ROW).
050080,001172:
050081,001173: 7330 07125 TC DOTSUB
050082,001174: 7331 52123 DXCH VBUF # MORE GIVEN VECTOR BACK TO MPAC, SAVING Y
050083,001175: 7332 52155 DXCH MPAC # COMPONENT OF ANSWER IN VBUF +2.
050084,001176: 7333 52125 DXCH VBUF +2
050085,001177: 7334 52160 DXCH MPAC +3
050086,001178: 7335 52127 DXCH VBUF +4
050087,001179: 7336 52162 DXCH MPAC +5
050088,001180: 7337 30140 CA MATINC # FORM ADDRESS OF LAST COLUMN OR ROW.
050089,001181: 7340 26116 ADS ADDRWD
050090,001182:
050091,001183: 7341 07125 TC DOTSUB
050092,001184: 7342 52134 DXCH BUF2 # ANSWER NOW COMPLETE. PUT COMPONENTS INTO
050093,001185: 7343 52155 DXCH MPAC # PROPER MPAC REGISTERS.
050094,001186: 7344 52162 DXCH MPAC +5
050095,001187: 7345 52125 DXCH VBUF +2
050096,001188: 7346 52160 DXCH MPAC +3
050097,001189: 7347 16030 TCF DANZIG # EXIT.
050098,001190:
050099,001191: # Page 1145
050100,001192: # VXSC -- VECTOR TIMES SCALAR.
050101,001193:
050102,001194: 7350 10163 VXSC CCS MODE # TEST PRESENT MODE.
050103,001195: 7351 17377 TCF DVXSC # SEPARATE ROUTINE WHEN SCALAR IS IN MPAC.
050104,001196: 7352 17377 TCF DVXSC
050105,001197:
050106,001198: 7353 07056 VVXSC TC DMPSUB # COMPUTE X COMPONENT
050107,001199: 7354 07107 TC VROUND # AND ROUND IT.
050108,001200: 7355 52160 DXCH MPAC +3 # PUT Y COMPONENT INTO MPAC SAVING MPAC IN
050109,001201: 7356 52155 DXCH MPAC # MPAC +3.
050110,001202: 7357 52160 DXCH MPAC +3
050111,001203:
050112,001204: 7360 07056 TC DMPSUB # DO SAME FOR Y AND Z COMPONENTS.
050113,001205: 7361 07107 TC VROUND
050114,001206: 7362 52162 DXCH MPAC +5
050115,001207: 7363 52155 DXCH MPAC
050116,001208: 7364 52162 DXCH MPAC +5
050117,001209:
050118,001210: 7365 07056 TC DMPSUB
050119,001211: 7366 07107 TC VROUND
050120,001212: 7367 52155 VROTATEX DXCH MPAC # EXIT USED TO RESTORE MPAC AFTER THIS
050121,001213: 7370 52162 DXCH MPAC +5 # TYPE OF ROTATION. CALLED BY VECTOR SHIFT
050122,001214: 7371 52160 DXCH MPAC +3 # RIGHT, V/SC, ETC.
050123,001215: 7372 52155 DXCH MPAC
050124,001216: 7373 16030 TCF DANZIG
050125,001217:
050126,001218: # Page 1146
050127,001219: # DP VECTOR PROJECTION ROUTINE.
050128,001220:
050129,001221: 7374 07123 VPROJ TC PREDOT # (MPAC.X)MPAC IS COMPUTED AND LEFT IN
050130,001222: 7375 45015 CS FOUR # MPAC. DO DOT AND FALL INTO DVXSC.
050131,001223: 7376 26116 ADS ADDRWD
050132,001224:
050133,001225: # VXSC WHEN SCALAR ARRIVES IN MPAC AND VECTOR IS AT X.
050134,001226:
050135,001227: 7377 00006 DVXSC EXTEND # SAVE SCALAR IN MPAC +3 AND GET X
050136,001228: 7400 30155 DCA MPAC # COMPONENT OF ANWER.
050137,001229: 7401 52160 DXCH MPAC +3
050138,001230: 7402 07056 TC DMPSUB
050139,001231: 7403 07107 TC VROUND
050140,001232:
050141,001233: 7404 35016 CAF TWO # ADVANCE ADDRWD TO Y COMPONENT OF X.
050142,001234: 7405 26116 ADS ADDRWD
050143,001235: 7406 00006 EXTEND
050144,001236: 7407 30160 DCA MPAC +3 # PUT SCALAR BACK INTO MPAC AND SAVE
050145,001237: 7410 52155 DXCH MPAC # X RESULT IN MPAC +5.
050146,001238: 7411 52162 DXCH MPAC +5
050147,001239: 7412 07056 TC DMPSUB
050148,001240: 7413 07107 TC VROUND
050149,001241:
050150,001242: 7414 35016 CAF TWO
050151,001243: 7415 26116 ADS ADDRWD # TO Z COMPONENT.
050152,001244: 7416 52160 DXCH MPAC +3 # BRING SCALAR BACK, PUTTING Y RESULT IN
050153,001245: 7417 52155 DXCH MPAC # THE PROPER PLACE.
050154,001246: 7420 52160 DXCH MPAC +3
050155,001247: 7421 07056 TC DMPSUB
050156,001248: 7422 07107 TC VROUND
050157,001249:
050158,001250: 7423 52155 DXCH MPAC # PUT Z COMPONENT IN PROPER PLACE, ALSO
050159,001251: 7424 52162 DXCH MPAC +5 # POSITIONING X.
050160,001252: 7425 52155 DXCH MPAC
050161,001253:
050162,001254: 7426 16470 TCF VMODE # MODE HAS CHANGED TO VECTOR.
050163,001255:
050164,001256: # Page 1147
050165,001257: # VECTOR CROSS PRODUCT ROUTINE CALCULATES (X M -X M ,X M -X M ,X M -X M ) WHERE M IS THE VECTOR IN
050166,001258: # 3 2 2 3 1 3 3 1 2 1 1 2
050167,001259: # MPAC AND X THE VECTOR AT THE GIVEN ADDRESS.
050168,001260:
050169,001261: 7427 00006 VXV EXTEND
050170,001262: 7430 30162 DCA MPAC +5 # FORM UP M3X1, LEAVING M1 IN VBUF.
050171,001263: 7431 52155 DXCH MPAC
050172,001264: 7432 52123 DXCH VBUF
050173,001265: 7433 07056 TC DMPSUB # BY X1.
050174,001266:
050175,001267: 7434 00006 EXTEND
050176,001268: 7435 40160 DCS MPAC +3 # CALCULATE -X1M2, SAVING X1M3 IN VBUF +2.
050177,001269: 7436 52155 DXCH MPAC
050178,001270: 7437 52125 DXCH VBUF +2
050179,001271: 7440 07056 TC DMPSUB
050180,001272:
050181,001273: 7441 35016 CAF TWO # ADVANCE ADDRWD TO X2.
050182,001274: 7442 26116 ADS ADDRWD
050183,001275: 7443 00006 EXTEND
050184,001276: 7444 40162 DCS MPAC +5 # PREPARE TO GET -X2M3, SAVING -X1M2 IN
050185,001277: 7445 52155 DXCH MPAC # MPAC +5.
050186,001278: 7446 52162 DXCH MPAC +5
050187,001279: 7447 07056 TC DMPSUB
050188,001280:
050189,001281: 7450 00006 EXTEND
050190,001282: 7451 30123 DCA VBUF # GET X2M1, SAVING -X2M3 IN VBUF +4.
050191,001283: 7452 52155 DXCH MPAC
050192,001284: 7453 52127 DXCH VBUF +4
050193,001285: 7454 07056 TC DMPSUB
050194,001286:
050195,001287: 7455 35016 CAF TWO # ADVANCE ADDRWD TO X3.
050196,001288: 7456 26116 ADS ADDRWD
050197,001289: 7457 00006 EXTEND
050198,001290: 7460 40123 DCS VBUF # GET -X3M1, ADDING X2M1 TO MPAC +5 TO
050199,001291: 7461 52155 DXCH MPAC # COMPLETE THE Z COMPONENT OF THE ANSWER.
050200,001292: 7462 20162 DAS MPAC +5
050201,001293:
050202,001294: 7463 00006 EXTEND
050203,001295: 7464 17466 BZF +2
050204,001296: 7465 06760 TC OVERFLWZ
050205,001297:
050206,001298: 7466 07056 TC DMPSUB
050207,001299: 7467 52125 DXCH VBUF +2 # MOVE X1M3 TO MPAC +3 SETTING UP FOR X3M2
050208,001300: 7470 52160 DXCH MPAC +3 # AND ADD -X3M1 TO MPAC +3 TO COMPLETE THE
050209,001301: 7471 52155 DXCH MPAC # Y COMPONENT OF THE RESULT.
050210,001302: 7472 20160 DAS MPAC +3
050211,001303:
050212,001304: 7473 00006 EXTEND
050213,001305: 7474 17476 BZF +2
050214,001306: # Page 1148
050215,001307: 7475 06763 TC OVERFLWY
050216,001308:
050217,001309: 7476 07056 TC DMPSUB
050218,001310: 7477 52127 DXCH VBUF +4 # GO ADD -X2M3 TO X3M2 TO COMPLETE THE X
050219,001311: 7500 16747 TCF ENDVXV # COMPONENT (TAIL END OF DAD).
050220,001312:
050221,001313: # THE MPACVBUF SUBROUTINE SAVES THE VECTOR IN MPAC IN VBUF WITHOUT CLOBBERING MPAC.
050222,001314:
050223,001315: 7501 00006 MPACVBUF EXTEND # CALLED BY MXV, VXM, AND UNIT.
050224,001316: 7502 30155 DCA MPAC
050225,001317: 7503 52123 DXCH VBUF
050226,001318: 7504 00006 EXTEND
050227,001319: 7505 30160 DCA MPAC +3
050228,001320: 7506 52125 DXCH VBUF +2
050229,001321: 7507 00006 EXTEND
050230,001322: 7510 30162 DCA MPAC +5
050231,001323: 7511 52127 DXCH VBUF +4
050232,001324: 7512 00002 TC Q # RETURN TO CALLER.
050233,001325:
050234,001326: # DOUBLE PRECISION SIGN AGREE ROUTINE. ARRIVE WITH INPUT IN A+L. OUTPUT IS IN A + L.
050235,001327:
050236,001328: 7513 10000 ALSIGNAG CCS A # TEST UPPER PART.
050237,001329: 7514 17520 TCF UPPOS # IT IS POSITIVE
050238,001330: 7515 00002 TC Q # ZERO
050239,001331: 7516 17530 TCF UPNEG # NEGATIVE
050240,001332: 7517 00002 TC Q # ZERO
050241,001333:
050242,001334: 7520 56001 UPPOS XCH L # SAVE DECREMENTED UPPER PART.
050243,001335: 7521 65002 AD HALF
050244,001336: 7522 65002 AD HALF
050245,001337: 7523 54000 TS A # SKIPS ON OVERFLOW
050246,001338: 7524 17526 TCF +2
050247,001339: 7525 24001 INCR L # RESTORE UPPER TO ORIGINAL VALUE
050248,001340: 7526 56001 XCH L # SWAP A + L BANCK.
050249,001341: 7527 00002 TC Q
050250,001342:
050251,001343: 7530 56001 UPNEG XCH L # SAVE COMPLEMENTED + DECREMENTED UPPER PT
050252,001344: 7531 65001 AD NEGMAX
050253,001345: 7532 67716 AD NEGONE
050254,001346: 7533 54000 TS A
050255,001347: 7534 17536 TCF +2 # DON'T INCREMENT IF NO OVERFLOW.
050256,001348: 7535 24001 INCR L
050257,001349: 7536 56001 XCH L
050258,001350: 7537 40000 COM # MAKE NEGATIVE AGAIN.
050259,001351: 7540 00002 TC Q
050260,001352:
050261,001353: # Page 1149
050262,001354: # INTERPRETIVE INSTRUCTIONS WHOSE EXECUTION CONSISTS OF PRINCIPALLY CALLING SUBROUTINES.
050263,001355:
050264,001356: 7541 07056 DMP1 TC DMPSUB # DMP INSTRUCTIONS
050265,001357: 7542 16030 TCF DANZIG
050266,001358:
050267,001359: 7543 07056 DMPR TC DMPSUB
050268,001360: 7544 07106 TC ROUNDSUB +1 # (C(A) = +0).
050269,001361: 7545 16030 TCF DANZIG
050270,001362:
050271,001363: 7546 00006 DDV EXTEND
050272,001364: 7547 50116 INDEX ADDRWD # MOVE DIVIDENT INTO BUF.
050273,001365: 7550 30001 DCA 0
050274,001366: 7551 17556 TCF BDDV +4
050275,001367:
050276,001368: 7552 00006 BDDV EXTEND # MOVE DIVISOR INTO MPAC SAVING MPAC, THE
050277,001369: 7553 50116 INDEX ADDRWD # DIVIDEND, IN BUF.
050278,001370: 7554 30001 DCA 0
050279,001371: 7555 52155 DXCH MPAC
050280,001372: 7556 52131 +4 DXCH BUF
050281,001373: 7557 35021 CAF ZERO # DIVIDE ROUTINES IN BANK 0.
050282,001374: 7560 54004 TS FBANK
050283,001375: 7561 12353 TCF DDV/BDDV
050284,001376:
050285,001377: 7562 30116 SETPD CA ADDRWD # MUST SET TO WORK AREA, OR EBANK TROUBLE.
050286,001378: 7563 54166 TS PUSHLOC
050287,001379: 7564 16032 TCF NOIBNKSW # NO FBANK SWITCH REQUIRED.
050288,001380:
050289,001381: 7565 35021 TSLC CAF ZERO # SHIFTING ROUTINES LOCATED IN BANK 00.
050290,001382: 7566 54004 TS FBANK
050291,001383: 7567 12172 TCF TSLC2
050292,001384:
050293,001385: 7570 36043 GSHIFT CAF LOW7 # USED AS MASK AT GENSHIFT. THIS PROCESSES
050294,001386: 7571 54004 TS FBANK # ANY SHIFT INSTRUCTION (EXCEPT TSLC) WITH
050295,001387: 7572 12214 TCF GENSHIFT # AN ADDRESS (ROUTINES IN BANK 0).
050296,001388:
050297,001389: # Page 1150
050298,001390: # THE FOLLOWING IS THE PROLOGUE TO V/SC. IF THE PRESENT MODE IS VECTOR, IT SAVES THE SCALAR AT X IN BUF
050299,001391: # AND CALLS THE V/SC ROUTINE IN BANK 0. IF THE PRESENT MODE IS SCALAR, IT MOVES THE VECTOR AT X INTO MPAC, SAVING
050300,001392: # THE SCALAR IN MPAC IN BUF BEFORE CALLING THE V/SC ROUTINE IN BANK 0.
050301,001393:
050302,001394: 7573 10163 V/SC CCS MODE
050303,001395: 7574 17605 TCF DV/SC # MOVE VECTOR INTO MPAC.
050304,001396: 7575 17605 TCF DV/SC
050305,001397:
050306,001398: 7576 00006 VV/SC EXTEND
050307,001399: 7577 50116 INDEX ADDRWD
050308,001400: 7600 30001 DCA 0
050309,001401: 7601 52131 V/SC1 DXCH BUF # IN BOTH CASES, VECTOR IS NOW IN MPAC AND
050310,001402: 7602 35021 CAF ZERO # SCALAR IN BUF.
050311,001403: 7603 54004 TS FBANK
050312,001404: 7604 12654 TCF V/SC2
050313,001405:
050314,001406: 7605 00006 DV/SC EXTEND
050315,001407: 7606 50116 INDEX ADDRWD
050316,001408: 7607 30003 DCA 2
050317,001409: 7610 52160 DXCH MPAC +3
050318,001410: 7611 00006 EXTEND
050319,001411: 7612 50116 INDEX ADDRWD
050320,001412: 7613 30005 DCA 4
050321,001413: 7614 52162 DXCH MPAC +5
050322,001414:
050323,001415: 7615 45017 CS ONE # CHANGE MODE TO VECTOR.
050324,001416: 7616 54163 TS MODE
050325,001417:
050326,001418: 7617 00006 EXTEND
050327,001419: 7620 50116 INDEX ADDRWD
050328,001420: 7621 30001 DCA 0
050329,001421: 7622 52155 DXCH MPAC
050330,001422: 7623 17601 TCF V/SC1
050331,001423:
050332,001424: # Page 1151
050333,001425: # SIGN AND COMPLEMENT INSTRUCTIONS.
050334,001426:
050335,001427: 7624 50116 SIGN INDEX ADDRWD # CALL COMP INSTRUCTION IF WORD AT X IS
050336,001428: 7625 10000 CCS 0 # NEGATIVE NON-ZERO.
050337,001429: 7626 16030 TCF DANZIG
050338,001430: 7627 17631 TCF +2
050339,001431: 7630 17637 TCF COMP # DO THE COMPLEMENT.
050340,001432:
050341,001433: 7631 50116 INDEX ADDRWD
050342,001434: 7632 10001 CCSL CCS 1
050343,001435: 7633 16030 TCF DANZIG
050344,001436: 7634 16030 TCF DANZIG
050345,001437: 7635 17637 TCF COMP
050346,001438: 7636 16030 TCF DANZIG
050347,001439: 7637 00006 COMP EXTEND # COMPLEMENT DP MPAC IN EVERY CASE.
050348,001440: 7640 40155 DCS MPAC
050349,001441: 7641 52155 DXCH MPAC
050350,001442:
050351,001443: 7642 10163 CCS MODE # EITHER COMPLEMENT MPAC +3 OR THE REST OF
050352,001444: 7643 17654 TCF DCOMP # THE VECTOR ACCUMULATOR.
050353,001445: 7644 17654 TCF DCOMP
050354,001446:
050355,001447: 7645 00006 EXTEND # VECTOR COMPLEMENT.
050356,001448: 7646 40160 DCS MPAC +3
050357,001449: 7647 52160 DXCH MPAC +3
050358,001450: 7650 00006 EXTEND
050359,001451: 7651 40162 DCS MPAC +5
050360,001452: 7652 52162 DXCH MPAC +5
050361,001453: 7653 16030 TCF DANZIG
050362,001454:
050363,001455: 7654 40156 DCOMP CS MPAC +2
050364,001456: 7655 54156 TS MPAC +2
050365,001457: 7656 16030 TCF DANZIG
050366,001458:
050367,001459: # Page 1152
050368,001460: # THE FOLLOWING SHORT SHIFT CODES REQUIRE NO ADDRESS WORD:
050369,001461: # 1. SR1 TO SR4 SCALAR SHIFT RIGHT.
050370,001462: # 2. SR1R TO SR4R SCALAR SHIFT RIGHT AND ROUND.
050371,001463: # 3. SL1 TO SL4 SCALAR SHIFT LEFT.
050372,001464: # 4. SL1R TO SL4R SCALAR SHIFT LEFT AND ROUND.
050373,001465: # 5. VSR1 TO VSR8 VECTOR SHIFT RIGHT (ALWAYS ROUNDS).
050374,001466: # 6. VSL1 TO VSL8 VECTOR SHIFT LEFT (NEVER ROUNDS).
050375,001467: # THE FOLLOWING CODES REQUIRE AN ADDRESS WHICH MAY BE INDEXED:*
050376,001468: # 1. SR SCALAR SHIFT RIGHT.
050377,001469: # 2. SRR SCALAR SHIFT RIGHT AND ROUND.
050378,001470: # 3. SL SCALAR SHIFT LEFT.
050379,001471: # 4. SLR SCALAR SHIFT LEFT AND ROUND.
050380,001472: # 5. VSR VECTOR SHIFT RIGHT.
050381,001473: # 6. VSL VECTOR SHIFT LEFT.
050382,001474: # * IF THE ADDRESS IS INDEXED, AND THE INDEX MODIFICATION RESULTS IN A NEGATIVE SHIFT COUNT, A SHIFT OF THE
050383,001475: # ABSOLUTE VALUE OF THE COUNT IS DONE IN THE OPPOSITE DIRECTION.
050384,001476:
050385,001477: 00,2017 BANK 00
050386,001478:
050387,001479: 00,2017 COUNT 00/INTER
050388,001480:
050389,001481: 00,2017 36211 SHORTT CAF SIX # SCALAR SHORT SHIFTS COME HERE. THE SHIFT
050390,001482: 00,2020 70020 MASK CYR # COUNT-1 IS NOW IN BITS 2-3 OF CYR. THE
050391,001483: 00,2021 54021 TS SR # ROUNDING BIT IS IN BIT1 AT THIS POINT.
050392,001484:
050393,001485: 00,2022 10020 CCS CYR # SEE IF RIGHT OR LEFT SHIFT DESIRED.
050394,001486: 00,2023 12101 TCF TSSL # SHIFT LEFT.
050395,001487:
050396,001488: 00,2024 00024 SRDDV DEC 20 B-14 # MPTEMP SETTING FOR SR BEFORE DDV.
050397,001489:
050398,001490: 00,2025 50021 TSSR INDEX SR # GET SHIFTING BIT.
050399,001491: 00,2026 35002 CAF BIT14
050400,001492: 00,2027 54135 TS MPTEMP
050401,001493:
050402,001494: 00,2030 10020 CCS CYR # SEE IF A ROUND IS DESIRED.
050403,001495: 00,2031 02050 RIGHTR TC MPACSRND # YES -- SHIFT RIGHT AND ROUND.
050404,001496: 00,2032 16027 TCF NEWMODE # SET MODE TO DP (C(A) = 0).
050405,001497: 00,2033 30135 MPACSHR CA MPTEMP # DO A TRIPLE PRECISION SHIFT RIGHT.
050406,001498: 00,2034 00006 EXTEND
050407,001499: 00,2035 70156 MP MPAC +2
050408,001500: 00,2036 54156 +3 TS MPAC +2 # (EXIT FROM SQRT AND ABVAL).
050409,001501: 00,2037 30135 CA MPTEMP
050410,001502: 00,2040 00006 EXTEND
050411,001503: # Page 1153
050412,001504: 00,2041 70154 MP MPAC # SHIFT MAJOR PART INTO A,L AND PLACE IN
050413,001505: 00,2042 52155 DXCH MPAC # MPAC,+1.
050414,001506: 00,2043 30135 CA MPTEMP
050415,001507: 00,2044 00006 EXTEND
050416,001508: 00,2045 70001 MP L # ORIGINAL C(MPAC +1).
050417,001509: 00,2046 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
050418,001510: 00,2047 16030 TCF DANZIG
050419,001511:
050420,001512: # MPAC SHIFT RIGHT AND ROUND SUBROUTINES
050421,001513:
050422,001514: 00,2050 30156 MPACSRND CA MPAC +2 # WE HAVE TO DO ALL THREE MULTIPLIES SINCE
050423,001515: 00,2051 00006 EXTEND # MPAC +1 AND MPAC +2 MIGHT HAVE SIGN
050424,001516: 00,2052 70135 MP MPTEMP # DISAGREEMENT WITH A SHIFT RIGHT OF L.
050425,001517: 00,2053 56155 XCH MPAC +1
050426,001518: 00,2054 00006 EXTEND
050427,001519: 00,2055 70135 MP MPTEMP
050428,001520: 00,2056 56155 XCH MPAC +1 # TRIAL MINOR PART.
050429,001521: 00,2057 60001 AD L
050430,001522:
050431,001523: 00,2060 60000 VSHR2 DOUBLE # (FINISH VECTOR COMPONENT SHIFT RIGHT
050432,001524: 00,2061 54156 TS MPAC +2 # AND ROUND.)
050433,001525: 00,2062 12064 TCF +2
050434,001526: 00,2063 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
050435,001527:
050436,001528: 00,2064 35021 CAF ZERO
050437,001529: 00,2065 54156 TS MPAC +2
050438,001530: 00,2066 56154 XCH MPAC # SETTING TO ZERO SO FOLLOWING DAS WORKS.
050439,001531: 00,2067 00006 EXTEND
050440,001532: 00,2070 70135 MP MPTEMP
050441,001533: 00,2071 20155 DAS MPAC # AGAIN NO OVERFLOW.
050442,001534: 00,2072 00002 TC Q
050443,001535:
050444,001536: 00,2073 30135 VSHRRND CA MPTEMP # ENTRY TO SHIFT RIGHT AND ROUND MPAC WHEN
050445,001537: 00,2074 00006 EXTEND # MPAC CONTAINS A VECTOR COMPONENT.
050446,001538: 00,2075 70155 MP MPAC +1
050447,001539: 00,2076 54155 TS MPAC +1
050448,001540: 00,2077 56001 XCH L
050449,001541: 00,2100 12060 TCF VSHR2 # GO ADD ONE IF NECESSARY AND FINISH.
050450,001542:
050451,001543: # Page 1154
050452,001544: # ROUTINE FOR SHORT SCALAR SHIFT LEFT (AND MAYBE ROUND).
050453,001545:
050454,001546: 00,2101 30021 TSSL CA SR # GET SHIFT COUNT FOR SR.
050455,001547: 00,2102 54135 +1 TS MPTEMP
050456,001548:
050457,001549: 00,2103 00006 +2 EXTEND # ENTRY HERE FROM SL FOR SCALARS.
050458,001550: 00,2104 30156 DCA MPAC +1 # SHIFTING LEFT ONE PLACE AT A TIME IS
050459,001551: 00,2105 20156 DAS MPAC +1 # FASTER THAN DOING THE WHOLE SHIFT WITH
050460,001552: 00,2106 60154 AD MPAC # MULTIPLIES ASSUMING THAT FREQUENCY OF
050461,001553: 00,2107 60154 AD MPAC # SHIFT COUNTS GOES DOWN RAPIDLY AS A
050462,001554: 00,2110 54154 TS MPAC # FUNCTION OF THEIR MAGNITUDE.
050463,001555: 00,2111 12113 TCF +2
050464,001556: 00,2112 54121 TS OVFIND # OVERFLOW. (LEAVES OVERFLOW-CORRECTED
050465,001557: # RESULT ANYWAY).
050466,001558: 00,2113 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNT.
050467,001559: 00,2114 12102 TCF TSSL +1
050468,001560:
050469,001561: 00,2115 10020 CCS CYR # SEE IF ROUND WANTED.
050470,001562: 00,2116 07105 ROUND TC ROUNDSUB # YES -- ROUND AND EXIT.
050471,001563: 00,2117 16030 TCF DANZIG # SL LEAVES A ZERO IN CYR FOR NO ROUND.
050472,001564: 00,2120 16030 TCF DANZIG # NO -- EXIT IMMEDIATELY
050473,001565:
050474,001566: # Page 1155
050475,001567: # VECTOR SHIFTING ROUTINES.
050476,001568:
050477,001569: 00,2121 35023 SHORTV CAF LOW3 # SAVE 3 BIT SHIFT COUNT -- 1 WITHOUT
050478,001570: 00,2122 70020 MASK CYR # EDITING CYR.
050479,001571: 00,2123 54135 TS MPTEMP
050480,001572: 00,2124 10020 CCS CYR # SEE IF LEFT OR RIGHT SHIFT.
050481,001573: 00,2125 12145 TCF VSSL # VECTOR SHIFT LEFT.
050482,001574: 00,2126 00176 OCT176 OCT 176 # USED IN PROCESSED SHIFTS WITH - COUNT.
050483,001575:
050484,001576: 00,2127 50135 VSSR INDEX MPTEMP # (ENTRY FROM SR). PICK UP SHIFTING BIT.
050485,001577: 00,2130 35002 CAF BIT14 # MPTEMP CONTAINS THE SHIFT COUNT - 1.
050486,001578: 00,2131 54135 TS MPTEMP
050487,001579: 00,2132 02073 TC VSHRRND # SHIFT X COMPONENT.
050488,001580:
050489,001581: 00,2133 52155 DXCH MPAC # SWAP X AND Y COMPONENTS.
050490,001582: 00,2134 52160 DXCH MPAC +3
050491,001583: 00,2135 52155 DXCH MPAC
050492,001584: 00,2136 02073 TC VSHRRND # SHIFT Y COMPONENT.
050493,001585:
050494,001586: 00,2137 52155 DXCH MPAC # SWAP Y AND Z COMPONENTS.
050495,001587: 00,2140 52162 DXCH MPAC +5
050496,001588: 00,2141 52155 DXCH MPAC
050497,001589: 00,2142 02073 TC VSHRRND # SHIFT Z COMPONENT.
050498,001590:
050499,001591: 00,2143 17367 TCF VROTATEX # RESTORE COMPONENTS TO PROPER PLACES.
050500,001592:
050501,001593: # Page 1156
050502,001594: # VECTOR SHIFT LEFT -- DONE ONE PLACE AT A TIME.
050503,001595:
050504,001596: 00,2144 54135 -1 TS MPTEMP # SHIFTING LOOP.
050505,001597:
050506,001598: 00,2145 00006 VSSL EXTEND
050507,001599: 00,2146 30155 DCA MPAC
050508,001600: 00,2147 20155 DAS MPAC
050509,001601: 00,2150 00006 EXTEND
050510,001602: 00,2151 12153 BZF +2
050511,001603: 00,2152 06766 TC OVERFLOW
050512,001604:
050513,001605: 00,2153 00006 EXTEND
050514,001606: 00,2154 30160 DCA MPAC +3
050515,001607: 00,2155 20160 DAS MPAC +3
050516,001608: 00,2156 00006 EXTEND
050517,001609: 00,2157 12161 BZF +2
050518,001610: 00,2160 06763 TC OVERFLWY
050519,001611:
050520,001612: 00,2161 00006 EXTEND
050521,001613: 00,2162 30162 DCA MPAC +5
050522,001614: 00,2163 20162 DAS MPAC +5
050523,001615: 00,2164 00006 EXTEND
050524,001616: 00,2165 12167 BZF +2
050525,001617: 00,2166 06760 TC OVERFLWZ
050526,001618:
050527,001619: 00,2167 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNTER.
050528,001620: 00,2170 12144 TCF VSSL -1
050529,001621: 00,2171 16030 TCF DANZIG # EXIT.
050530,001622:
050531,001623: # Page 1157
050532,001624: # TSLC -- TRIPLE SHIFT LEFT AND COUNT. SHIFTS MPAC LEFT UNTIL GREATER THAN .5 IN MAGNITUDE, LEAVING
050533,001625: # THE COMPLEMENT OF THE NUMBER OF SHIFTS REQUIRED IN X.
050534,001626:
050535,001627: 00,2172 54135 TSLC2 TS MPTEMP # START BY ZEROING SHIFT COUNT (IN A NOW).
050536,001628: 00,2173 06672 TC BRANCH # EXIT WITH NO SHIFTING IF ARGUMENT ZERO.
050537,001629: 00,2174 12176 TCF +2
050538,001630: 00,2175 12212 TCF ENDTSLC # STORES ZERO SHIFT COUNT IN THIS CASE.
050539,001631:
050540,001632: 00,2176 07226 TC TPAGREE # MAY CAUSE UPSHIFT OF ONE EXTRA PLACE.
050541,001633:
050542,001634: 00,2177 30154 CA MPAC # BEGIN NORMALIZATION LOOP.
050543,001635: 00,2200 12207 TCF TSLCTEST
050544,001636:
050545,001637: 00,2201 24135 TSLCLOOP INCR MPTEMP # INCREMENT SHIFT COUNTER.
050546,001638: 00,2202 00006 EXTEND
050547,001639: 00,2203 30156 DCA MPAC +1
050548,001640: 00,2204 20156 DAS MPAC +1
050549,001641: 00,2205 60154 AD MPAC
050550,001642: 00,2206 26154 ADS MPAC
050551,001643: 00,2207 60000 TSLCTEST DOUBLE # SEE IF (ANOTHER) SHIFT IS REQUIRED
050552,001644: 00,2210 54000 OVSK
050553,001645: 00,2211 12201 TCF TSLCLOOP # YES -- INCREMENT COUNT AND SHIFT AGAIN.
050554,001646:
050555,001647: 00,2212 40135 ENDTSLC CS MPTEMP
050556,001648: 00,2213 16572 TCF STORE1 # STORE SHIFT COUNT AND RETURN TO DANZIG.
050557,001649:
050558,001650: # Page 1158
050559,001651: # THE FOLLOWING ROUTINE PROCESSES THE GENERAL SHIFT INSTRUCTIONS SR, SRR, SL, AND SLR.
050560,001652: # THE GIVEN ADDRESS IS DECODED AS FOLLOWS:
050561,001653: # BITS 1-7 SHIFT COUNT (SUBADDRESS) LESS THAN 125 DECIMAL.
050562,001654: # BIT 8 PSEUDO SIGN BIT (DETECTS CHANGE IN SIGN IN INDEXED SHIFTS).
050563,001655: # BIT 9 0 FOR LEFT SHIFT, AND 1 FOR RIGHT SHIFT.
050564,001656: # BIT 10 1 FOR TERMINAL ROUND ON SCALAR SHIFTS, 0 OTHERWISE
050565,001657: # BITS 11-13 0.
050566,001658: # BIT 14 1.
050567,001659: # BIT 15 0.
050568,001660: # THE ABOVE ENCODING IS DONE BY THE YUL SYSTEM.
050569,001661:
050570,001662: 00,2214 70116 GENSHIFT MASK ADDRWD # GET SHIFT COUNT, TESTING FOR ZERO.
050571,001663: 00,2215 10000 CCS A # (ARRIVES WITH C(A) = LOW7).
050572,001664: 00,2216 12224 TCF GENSHFT2 # IF NON-ZERO, PROCEED WITH DECREMENTED CT
050573,001665:
050574,001666: 00,2217 35006 CAF BIT10 # ZERO SHIFT COUNT. NO SHIFTS NEEDED BUT
050575,001667: 00,2220 70116 MASK ADDRWD # WE MIGHT HAVE TO ROUND MPAC ON SLR AND
050576,001668: 00,2221 10000 CCS A # SRR (SCALAR ONLY).
050577,001669: 00,2222 07105 TC ROUNDSUB
050578,001670: 00,2223 16030 TCF DANZIG
050579,001671:
050580,001672: 00,2224 54135 GENSHFT2 TS MPTEMP # DECREMENTED SHIFT COUNT TO MPTEMP.
050581,001673: 00,2225 35010 CAF BIT8 # TEST MEANING OF LOW SEVEN BIT COUNT IN
050582,001674: 00,2226 00006 EXTEND # MPTEMP NOW.
050583,001675: 00,2227 70116 MP ADDRWD
050584,001676: 00,2230 76214 MASK LOW2 # JUMPS ON SHIFT DIRECTION (BIT8) AND
050585,001677: 00,2231 50000 INDEX A
050586,001678: 00,2232 12233 TCF +1 # ORIGINAL SHIFT DIRECTION (BIT 9)
050587,001679: 00,2233 12332 TCF RIGHT- # NEGATIVE SHIFT COUNT FOR SL OR SLR.
050588,001680: 00,2234 12342 TCF LEFT # SL OR SLR.
050589,001681: 00,2235 12336 TCF LEFT- # NEGATIVE SHIFT COUNT WITH SR OR SRR.
050590,001682:
050591,001683: # Page 1159
050592,001684: # GENERAL SHIFT RIGHT
050593,001685:
050594,001686: 00,2236 10163 RIGHT CCS MODE # SET IF VECTOR OR SCALAR.
050595,001687: 00,2237 12277 TCF GENSCR
050596,001688: 00,2240 12277 TCF GENSCR
050597,001689:
050598,001690: 00,2241 30135 CA MPTEMP # SEE IF SHIFT COUNT LESS THAN 14D.
050599,001691: 00,2242 63730 VRIGHT2 AD NEG12
050600,001692: 00,2243 00006 EXTEND
050601,001693: 00,2244 62127 BZMF VSSR # IF SO, BRANCH AND SHIFT IMMEDIATELY.
050602,001694:
050603,001695: 00,2245 67716 AD NEGONE # IF NOT, REDUCE MPTEMP BY A TOTAL OF 14.
050604,001696: 00,2246 54135 TS MPTEMP # AND DO A SHIFT RIGHT AND ROUND BY 14.
050605,001697: 00,2247 35021 CAF ZERO # THE ROUND AT THIS STAGE MAY INTRODUCE A
050606,001698: 00,2250 54001 TS L # ONE BIT ERROR IN A SHIFT RIGHT 15D.
050607,001699: 00,2251 56154 XCH MPAC
050608,001700: 00,2252 56155 XCH MPAC +1
050609,001701: 00,2253 02272 TC SETROUND # X COMPONENT NOW SHIFTED, SO MAKE UP THE
050610,001702: 00,2254 20155 DAS MPAC # ROUNDING QUANTITY (0 IN A AND 0 OR +-1
050611,001703: # IN L).
050612,001704: 00,2255 56157 XCH MPAC +3 # REPEAT THE ABOVE PROCESS FOR Y AND Z/
050613,001705: 00,2256 56160 XCH MPAC +4
050614,001706: 00,2257 02272 TC SETROUND
050615,001707: 00,2260 20160 DAS MPAC +3 # NO OVERFLOW ON THESE ADDS.
050616,001708:
050617,001709: 00,2261 56161 XCH MPAC +5
050618,001710: 00,2262 56162 XCH MPAC +6
050619,001711: 00,2263 02272 TC SETROUND
050620,001712: 00,2264 20162 DAS MPAC +5
050621,001713:
050622,001714: 00,2265 10135 CCS MPTEMP # SEE IF DONE, DOING FINAL DECREMENT.
050623,001715: 00,2266 54135 TS MPTEMP
050624,001716: 00,2267 12242 TCF VRIGHT2
050625,001717: 00,2270 04604 BIASLO DEC .2974 B-1 # SQRT CONSTANT
050626,001718:
050627,001719: 00,2271 16030 TCF DANZIG
050628,001720:
050629,001721: 00,2272 60000 SETROUND DOUBLE # MAKES UP ROUNDING QUANTITY FROM ARRIVING
050630,001722: 00,2273 54156 TS MPAC +2 # C(A). L IS ZERO INITIALLY.
050631,001723: 00,2274 35021 CAF ZERO
050632,001724: 00,2275 56001 XCH L
050633,001725: 00,2276 00002 TC Q # RETURN AND DO THE DAS, RESETTING L TO 0.
050634,001726:
050635,001727: # Page 1160
050636,001728: # PROCESS SR AND SRR FOR SCALARS.
050637,001729:
050638,001730: 00,2277 30135 GENSCR CA MPTEMP # SEE IF THE ORIGINAL SHIFT COUNT WAS LESS
050639,001731: 00,2300 63730 +1 AD NEG12 # THAN 14D.
050640,001732: 00,2301 00006 EXTEND
050641,001733: 00,2302 62322 BZMF DOSSHFT # DO THE SHIFT IMMEDIATELY IF SO.
050642,001734:
050643,001735: 00,2303 67716 +4 AD NEGONE # IF NOT, DECREMENT SHIFT COUNT BY 14D AND
050644,001736: 00,2304 54135 TS MPTEMP # SHIFT MPAC RIGHT 14 PLACES.
050645,001737: 00,2305 35021 CAF ZERO
050646,001738: 00,2306 56154 XCH MPAC
050647,001739: 00,2307 56155 XCH MPAC +1
050648,001740: 00,2310 54156 TS MPAC +2
050649,001741: 00,2311 10135 CCS MPTEMP # SEE IF FINISHED, DO FINAL DECREMENT.
050650,001742: 00,2312 54135 TS MPTEMP
050651,001743: 00,2313 02300 TC GENSCR +1
050652,001744: 00,2314 22650 SLOPEHI DEC .5884 # SQRT CONSTANT.
050653,001745: 00,2315 35006 CAF BIT10 # FINISHED WITH SHIFT. SEE IF ROUND
050654,001746: 00,2316 70116 MASK ADDRWD # WANTED.
050655,001747: 00,2317 10000 CCS A
050656,001748: 00,2320 07105 TC ROUNDSUB
050657,001749: 00,2321 16030 TCF DANZIG # DO SO AND/OR EXIT.
050658,001750:
050659,001751: 00,2322 50135 DOSSHFT INDEX MPTEMP # PICK UP SHIFTING BIT.
050660,001752: 00,2323 35002 CAF BIT14
050661,001753: 00,2324 54135 TS MPTEMP
050662,001754: 00,2325 35006 CAF BIT10 # SEE IF TERMINAL ROUND DESIRED.
050663,001755: 00,2326 70116 MASK ADDRWD
050664,001756: 00,2327 10000 CCS A
050665,001757: 00,2330 12031 TCF RIGHTR # YES.
050666,001758: 00,2331 12033 TCF MPACSHR # JUST SHIFT RIGHT.
050667,001759:
050668,001760: # Page 1161
050669,001761: # PROCESS THE RIGHT- (SL(R) WITH A NEGATIVE COUNT), LEFT-, AND LEFT OPTIONS.
050670,001762:
050671,001763: 00,2332 40135 RIGHT- CS MPTEMP # GET ABSOLUTE VALUE - 1 OF SHIFT COUNT
050672,001764: 00,2333 62126 AD OCT176 # UNDERSTANDING THAT BIT8 (PSEUDO-SIGN)
050673,001765: 00,2334 54135 TS MPTEMP # WAS 1 INITIALLY.
050674,001766: 00,2335 12236 TCF RIGHT # DO NORMAL SHIFT RIGHT.
050675,001767:
050676,001768: 00,2336 42126 LEFT- CS OCT176 # SAME PROLOGUE TO LEFT FOR INDEXED RIGHT
050677,001769: 00,2337 60135 AD MPTEMP # SHIFT WHOSE NET SHIFT COUNT IS NEGATIVE
050678,001770: 00,2340 40000 COM
050679,001771: 00,2341 54135 TS MPTEMP
050680,001772:
050681,001773: 00,2342 10163 LEFT CCS MODE # SINCE LEFT SHIFTING IS DONE ONE PLACE AT
050682,001774: 00,2343 12346 TCF GENSCL # A TIME, NO COMPARISON WITH 14 NEED BE
050683,001775: 00,2344 12346 TCF GENSCL # DONE. FOR SCALARS, SEE IF TERMINAL ROUND
050684,001776: 00,2345 12145 TCF VSSL # DESIRED. FOR VECTORS, SHIFT IMMEDIATELY.
050685,001777:
050686,001778: 00,2346 40116 GENSCL CS ADDRWD # PUT ROUNDING BIT (BIT 10 OF ADDRWD) INTO
050687,001779: 00,2347 00006 EXTEND # BIT 15 OF CYR WHERE THE ROUNDING BIT OF
050688,001780: 00,2350 75012 MP BIT6 # A SHORT SHIFT LEFT WOULD BE
050689,001781: 00,2351 54020 TS CYR
050690,001782: 00,2352 12103 TCF TSSL +2 # DO THE SHIFT.
050691,001783:
050692,001784: # Page 1162
050693,001785: # SCALAR DIVISION INSTRUCTIONS, DDV AND BDDV, ARE EXECUTED HERE. AT THIS POINT, THE DIVIDEND IS IN MPAC
050694,001786: # AND THE DIVISOR IS IN BUF.
050695,001787:
050696,001788: 00,2353 45017 DDV/BDDV CS ONE # INITIALIZATION
050697,001789: 00,2354 54136 TS DVSIGN # +-1 FOR POSITIVE QUOTIENT -- -0 FOR NEG.
050698,001790: 00,2355 54137 TS DVNORMCT # DIVIDENT NORMALIZATION COUNT.
050699,001791: 00,2356 54140 TS MAXDVSW # NEAR-ONE DIVIDE FLAG.
050700,001792:
050701,001793: 00,2357 10130 CCS BUF # FORCE BUF POSITIVE WITH THE MAJOR PART
050702,001794: 00,2360 12516 TCF BUFPOS # NON-ZERO.
050703,001795: 00,2361 12363 TCF +2
050704,001796: 00,2362 12531 TCF BUFNEG
050705,001797:
050706,001798: 00,2363 54156 BUFZERO TS MPAC +2 # ZERO THIS.
050707,001799: 00,2364 07226 TC TPAGREE # FORCE SIGN AGREEMENT BEFORE OVERFLOW
050708,001800:
050709,001801: 00,2365 10154 CCS MPAC # TEST TO SEE IF MPAC NON-ZERO. (TOO BIG)
050710,001802: 00,2366 12414 TCF OVF+ # MAJOR PART OF DIVIDEND IS POSITIVE NON-0
050711,001803: 00,2367 12371 TCF +2
050712,001804: 00,2370 12413 TCF OVF+ -1 # MAJOR PART OF DIVIDEND IS NEG. NON-ZERO
050713,001805:
050714,001806: 00,2371 56131 XCH BUF +1 # SHIFT DIVIDENT AND DIVISOR LEFT 14
050715,001807: 00,2372 56130 XCH BUF
050716,001808: 00,2373 56155 XCH MPAC +1
050717,001809: 00,2374 56154 XCH MPAC
050718,001810: 00,2375 10130 CCS BUF # TRY AGAIN ON FORMER MINOR PART.
050719,001811: 00,2376 12422 TCF BUF+
050720,001812: 00,2377 12401 TCF +2 # OVERFLOW ON ZERO DIVISOR.
050721,001813: 00,2400 12416 TCF BUF-
050722,001814:
050723,001815: 00,2401 40154 CS MPAC # SIGN OF MPAC DETERMINES SIGN OF RESULT.
050724,001816: 00,2402 00006 SGNDVOVF EXTEND
050725,001817: 00,2403 62405 BZMF +2
050726,001818: 00,2404 24136 INCR DVSIGN # NEGMAX IN MPAC PERHAPS.
050727,001819: 00,2405 34777 DVOVF CAF POSMAX # ON DIVISION OVERFLOW OF ANY SORT, SET
050728,001820: 00,2406 54154 TS MPAC # SET DP MPAC TO +-POSMAX.
050729,001821: 00,2407 02630 TC FINALDV +3
050730,001822: 00,2410 35017 CAF ONE # SET OVEFLOW INDICATOR AND EXIT.
050731,001823: 00,2411 54121 TS OVFIND
050732,001824: 00,2412 06030 TC DANZIG
050733,001825:
050734,001826: 00,2413 24136 -1 INCR DVSIGN
050735,001827: 00,2414 40131 OVF+ CS BUF +1 # LOAD LOWER ORDER PART OF DIVISOR.
050736,001828: 00,2415 12402 TCF SGNDVOVF # GET SIGN OF RESULT.
050737,001829:
050738,001830: 00,2416 00006 BUF- EXTEND # IF BUF IS NEGATIVE, COMPLEMENT IT AND
050739,001831: 00,2417 40131 DCS BUF # MAINTAIN DVSIGN FOR FINAL QUOTIENT SIGN.
050740,001832: 00,2420 52131 DXCH BUF
050741,001833: 00,2421 24136 INCR DVSIGN # NOW -0.
050742,001834:
050743,001835: # Page 1163
050744,001836: 00,2422 10154 BUF+ CCS MPAC # FORCE MPAC POSITIVE, CHECKING FOR ZERO
050745,001837: 00,2423 12437 TCF MPAC+ # DIVIDEND IN THE PROCESS.
050746,001838: 00,2424 12426 TCF +2
050747,001839: 00,2425 12433 TCF MPAC-
050748,001840: 00,2426 10155 CCS MPAC +1
050749,001841: 00,2427 12437 TCF MPAC+
050750,001842: 00,2430 16030 TCF DANZIG # EXIT IMMEDIATELY ON ZERO DIVIDEND.
050751,001843: 00,2431 12433 TCF MPAC-
050752,001844: 00,2432 16030 TCF DANZIG
050753,001845:
050754,001846: 00,2433 00006 MPAC- EXTEND # FORCE MPAC POSITIVE AS BUF IN BUF-.
050755,001847: 00,2434 40155 DCS MPAC
050756,001848: 00,2435 52155 DXCH MPAC
050757,001849: 00,2436 24136 INCR DVSIGN # NOW +1 OR -0.
050758,001850:
050759,001851: # Page 1164
050760,001852: 00,2437 40154 MPAC+ CS MPAC # CHECK FOR DIVISION OVERFLOW. IF THE
050761,001853: 00,2440 67716 AD NEGONE # MAJOR PART OF THE DIVIDEND IS LESS THAN
050762,001854: 00,2441 60130 AD BUF # THE MAJOR PART OF THE DIVISOR BY AT
050763,001855: 00,2442 10000 CCS A # LEAST TWO, WE CAN PROCEED IMMEDIATELY
050764,001856: 00,2443 12505 TCF DVNORM # WITHOUT NORMALIZATION PRODUCING A DVMAX.
050765,001857: 00,2444 60001 -1/2+2 OCT 60001 # USED IN SQRTSUB.
050766,001858:
050767,001859: 00,2445 12446 TCF +1 # IF THE ABOVE DOES NOT HOLD, FORCE SIGN
050768,001860: 00,2446 35002 CAF HALF # AGREEMENT IN NUMERATOR AND DENOMINATOR
050769,001861: 00,2447 60000 DOUBLE # TO FACILITATE OVERFLOW AND NEAR-ONE
050770,001862: 00,2450 60155 AD MPAC +1 # CHECKING.
050771,001863: 00,2451 54155 TS MPAC +1
050772,001864: 00,2452 35021 CAF ZERO
050773,001865: 00,2453 64777 AD POSMAX
050774,001866: 00,2454 26154 ADS MPAC
050775,001867:
050776,001868: 00,2455 35002 CAF HALF # SAME FOR BUF.
050777,001869: 00,2456 60000 DOUBLE
050778,001870: 00,2457 60131 AD BUF +1
050779,001871: 00,2460 54131 TS BUF +1
050780,001872: 00,2461 35021 CAF ZERO
050781,001873: 00,2462 64777 AD POSMAX
050782,001874: 00,2463 26130 ADS BUF
050783,001875:
050784,001876: 00,2464 40154 CS MPAC # CHECK MAGNITUDE OF SIGN-CORRECTED
050785,001877: 00,2465 60130 AD BUF # OPERANDS.
050786,001878: 00,2466 10000 CCS A
050787,001879: 00,2467 12505 TCF DVNORM # DIVIDE OK -- WILL NOT BECOME MAXOV CASE.
050788,001880: 00,2470 00133 LBUF2 ADRES BUF2
050789,001881: 00,2471 12405 TCF DVOVF # DIVISOR NOT LESS THAN DIVIDEND -- OVF.
050790,001882:
050791,001883: 00,2472 54140 TS MAXDVSW # IF THE MAJOR PARTS OF THE DIVIDEND AND
050792,001884: 00,2473 40155 CS MPAC +1 # DIVISOR ARE EQUAL, A SPECIAL APPROXIMA-
050793,001885: 00,2474 60131 AD BUF +1 # TION IS USED (PROVIDED THE DIVISION IS
050794,001886: 00,2475 00006 EXTEND # POSSIBLE, OF COURSE).
050795,001887: 00,2476 62405 BZMF DVOVF
050796,001888: 00,2477 12505 TCF DVNORM # IF NO OVERFLOW.
050797,001889:
050798,001890: # Page 1165
050799,001891: 00,2500 00006 BUFNORM EXTEND # ADD -1 TO AUGMENT SHIFT COUNT AND SHIFT
050800,001892: 00,2501 24137 AUG DVNORMCT # LEFT ONE PLACE.
050801,001893: 00,2502 00006 EXTEND
050802,001894: 00,2503 30131 DCA BUF
050803,001895: 00,2504 20131 DAS BUF
050804,001896:
050805,001897: 00,2505 30130 DVNORM CA BUF # SEE IF DIVISOR NORMALIZED YET.
050806,001898: 00,2506 60000 DOUBLE
050807,001899: 00,2507 54000 OVSK
050808,001900: 00,2510 12500 TCF BUFNORM # NO -- SHIFT LEFT ONE AND TRY AGAIN.
050809,001901:
050810,001902: 00,2511 52155 DXCH MPAC # CALL DIVIDEND NORMALIZATION SEQUENCE
050811,001903: 00,2512 50137 INDEX DVNORMCT # PRIOR TO DOING THE DIVIDE.
050812,001904: 00,2513 02565 TC MAXTEST
050813,001905:
050814,001906: 00,2514 54156 TS MPAC +2 # RETURNS WITH DIVISION DONE AND C(A) = 0.
050815,001907: 00,2515 16030 TCF DANZIG
050816,001908:
050817,001909: 00,2516 10000 BUFPOS CCS A
050818,001910: 00,2517 12422 TCF BUF+ # TO BUF+ IF BUF IS GREATER THAN +1.
050819,001911:
050820,001912: 00,2520 40131 CS BUF +1 # IF BUF IS +1, FORCING SIGN AGREEMENT
050821,001913: 00,2521 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO.
050822,001914: 00,2522 62422 BZMF BUF+ # BRANCH IF SIGNS AGREE.
050823,001915:
050824,001916: 00,2523 35002 CA HALF # SIGNS DISAGREE. FORCE AGREEMENT.
050825,001917: 00,2524 60000 +6 DOUBLE
050826,001918: 00,2525 26131 ADS BUF +1
050827,001919: 00,2526 35021 CA ZERO
050828,001920: 00,2527 54130 TS BUF
050829,001921: 00,2530 12363 TCF BUFZERO
050830,001922:
050831,001923: 00,2531 10000 BUFNEG CCS A
050832,001924: 00,2532 12416 TCF BUF- # TO BUF- IF BUF IS LESS THAN -1.
050833,001925:
050834,001926: 00,2533 30131 CA BUF +1 # IF BUF IS -1, FORCING SIGN AGREEMENT
050835,001927: 00,2534 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO.
050836,001928: 00,2535 62416 BZMF BUF- # BRANCH IF SIGNS AGREE.
050837,001929:
050838,001930: 00,2536 45002 CS HALF # SIGNS DISAGREE. FORCE AGREEMENT.
050839,001931: 00,2537 12524 TCF BUFPOS +6
050840,001932:
050841,001933: # Page 1166
050842,001934: # THE FOLLOWING ARE PROLOGUES TO SHIFT THE DIVIDEND ARRIVING IN A AND L BEFORE THE DIVIDE.
050843,001935:
050844,001936: 00,2540 22021 -21D LXCH SR # SPECIAL PROLOGUE FOR UNIT WHEN THE
050845,001937: 00,2541 00006 EXTEND # LENGTH OF THE ARGUMENT WAS NOT LESS THAN
050846,001938: 00,2542 75002 MP HALF # .5. IN THIS CASE, EACH COMPONENT MUST BE
050847,001939: 00,2543 56001 XCH L # SHIFTED RIGHT ONE TO PRODUCE A HALF-UNIT
050848,001940: 00,2544 60021 AD SR # VECTOR.
050849,001941: 00,2545 56001 XCH L
050850,001942: 00,2546 12571 TCF GENDDV +1 # WITH DP DIVIDEND IN A,L.
050851,001943:
050852,001944: 00,2547 20001 DDOUBL # PROLOGUE WHICH NORMALIZES THE DIVIDEND
050853,001945: 00,2550 20001 DDOUBL # WHEN IT IS KNOWN THAT NO DIVISION
050854,001946: 00,2551 20001 DDOUBL # OVEFLOW WILL OCCUR.
050855,001947: 00,2552 20001 DDOUBL
050856,001948: 00,2553 20001 DDOUBL
050857,001949: 00,2554 20001 DDOUBL
050858,001950: 00,2555 20001 DDOUBL
050859,001951: 00,2556 20001 DDOUBL
050860,001952: 00,2557 20001 DDOUBL
050861,001953: 00,2560 20001 DDOUBL
050862,001954: 00,2561 20001 DDOUBL
050863,001955: 00,2562 20001 DDOUBL
050864,001956: 00,2563 20001 DDOUBL
050865,001957: 00,2564 52155 DXCH MPAC
050866,001958:
050867,001959: 00,2565 10140 MAXTEST CCS MAXDVSW # 0 IF MAJORS MIGHT BE =, -1 OTHERWISE.
050868,001960: 00,2566 06552 BIASHI DEC .4192 B-1 # SQRT CONSTANTS.
050869,001961:
050870,001962: 00,2567 12642 TCF MAXDV # CHECK TO SEE IF THAY ARE NOW EQUAL.
050871,001963:
050872,001964: # Page 1167
050873,001965: # THE FOLLOWING IS A GENERAL PURPOSE DOUBLE PRECISION DIVISION ROUTINE. IT DIVIDES MPAC BY BUF AND LEAVES
050874,001966: # THE RESULT IN MPAC. THE FOLLOWING CONDITIONS MUST BE SATISFIED:
050875,001967:
050876,001968: # 1. THE DIVISOR (BUF) MUST BE POSITIVE AND NOT LESS THAN .5.
050877,001969:
050878,001970: # 2. THE DIVIDEND (MPAC) MUST BE POSITIVE WITH THE MAJOR PART OF MPAC STRICTLY LESS THAN THAT OF BUF
050879,001971: # (A SPECIAL APPROXIMATION, MAXDV, IS USED WHEN THE MAJOR PARTS ARE EQUAL).
050880,001972:
050881,001973: # UNDERSTANDING THAT A/B = Q + S(R/B) WHERE S = 2(-14) AND Q AND R ARE QUOTIENT AND REMAINDER, RESPEC-
050882,001974: # TIVELY, THE FOLLOWING APPROXIMATION IS OBTAINED BY MULTIPLYING ABOVE AND BELOW BY C - SD AND NEGLECTING TERMS OF
050883,001975: # ORDER S-SQUARED (POSSIBLY INTRODUCING ERROR INTO THE LOW TWO BITS OF THE RESULT). SIGN AGREEMENT IS UNNECESSARY.
050884,001976:
050885,001977: # A + SB . (R - CD) A + SB
050886,001978: # ------ = Q + S(------) WHERE Q AND R ARE QUOTIENT AND REMAINDER OF ------ RESPECTIVELY.
050887,001979: # C + SD ( C } C
050888,001980:
050889,001981: 00,2570 52155 GENDDV DXCH MPAC # WE NEED A AND B ONLY FOR FIRST DV.
050890,001982: 00,2571 00006 +1 EXTEND # (SPECIAL UNIT PROLOGUE ENTERS HERE).
050891,001983: 00,2572 10130 DV BUF # A NOW CONTAINS Q AND L, R.
050892,001984: 00,2573 52155 DXCH MPAC
050893,001985:
050894,001986: 00,2574 40154 CS MPAC # FORM DIVIDEND FOR MINOR PART OF RESULT.
050895,001987: 00,2575 00006 EXTEND
050896,001988: 00,2576 70131 MP BUF +1
050897,001989: 00,2577 60155 AD MPAC +1 # OVERFLOW AT THIS POINT IS POSITIVE SINCE
050898,001990: 00,2600 54000 OVSK # R IS POSITIVE IN EVERY CASE.
050899,001991: 00,2601 12606 TCF +5
050900,001992:
050901,001993: 00,2602 00006 EXTEND # OVERFLOW CAN BE REMOVED BY SUBTRACTING C
050902,001994: 00,2603 60130 SU BUF # (BUF) ONCE SINCE R IS ALWAYS LESS THAN C
050903,001995: 00,2604 24154 INCR MPAC # IN THIS CASE. INCR COMPENSATES SUBTRACT.
050904,001996: 00,2605 12610 TCF +DOWN # (SINCE C(A) IS STILL POSITIVE).
050905,001997:
050906,001998: 00,2606 00006 +5 EXTEND # C(A) CAN BE MADE LESS THAN C IN MAGNI-
050907,001999: 00,2607 62620 BZMF -UP # TUDE BY DIMINISHING IT BY C (SINCE C IS
050908,002000: # NOT LESS THAN .5) UNLESS C(A) = 0.
050909,002001:
050910,002002: # Page 1168
050911,002003: 00,2610 00006 +DOWN EXTEND
050912,002004: 00,2611 60130 SU BUF # IF POSITIVE, REDUCE ONLY IF NECESSARY
050913,002005: 00,2612 00006 EXTEND # SINCE THE COMPENSATING INCR MIGHT CAUSE
050914,002006: 00,2613 12616 BZF +3 # OVERFLOW.
050915,002007: 00,2614 00006 EXTEND # DON'T SUBTRACT UNLESS RESULT IS POSITIVE
050916,002008: 00,2615 62624 BZMF ENDMAXDV # OR ZERO.
050917,002009:
050918,002010: 00,2616 24154 +3 INCR MPAC # KEEP SUBTRACT HERE AND COMPENSATE.
050919,002011: 00,2617 12625 TCF FINALDV
050920,002012:
050921,002013: 00,2620 00006 -UP EXTEND # IF ZERO, SET MINOR PART OF RESULT TO
050922,002014: 00,2621 12630 BZF FINALDV +3 # ZERO.
050923,002015:
050924,002016: 00,2622 00006 EXTEND # IF NEGATIVE, ADD C TO A, SUBTRACTING ONE
050925,002017: 00,2623 26154 DIM MPAC # TO COMPENSATE. DIM IS OK HERE SINCE THE
050926,002018: 00,2624 60130 ENDMAXDV AD BUF # MAJOR PART NEVER GOES NEGATIVE.
050927,002019:
050928,002020: # Page 1169
050929,002021: 00,2625 22007 FINALDV ZL # DO DV TO OBTAIN MINOR PART OF RESULT.
050930,002022: 00,2626 00006 EXTEND
050931,002023: 00,2627 10130 DV BUF
050932,002024: 00,2630 54155 +3 TS MPAC +1
050933,002025:
050934,002026: 00,2631 10136 CCS DVSIGN # LEAVE RESULT POSITIVE UNLESS C(DVSIGN).
050935,002027: 00,2632 00002 TC Q
050936,002028: 00,2633 00002 TC Q
050937,002029: 00,2634 00002 TC Q
050938,002030:
050939,002031: 00,2635 00006 EXTEND
050940,002032: 00,2636 40155 DCS MPAC
050941,002033: 00,2637 52155 DXCH MPAC
050942,002034: 00,2640 35021 CAF ZERO # SO WE ALWAYS RETURN WITH C(A) = 0.
050943,002035: 00,2641 00002 TC Q
050944,002036:
050945,002037: # Page 1170
050946,002038: # IF THE MAJOR PARTS OF THE DIVISOR AND DIVIDEND ARE EQUAL, BUT THE MINOR PARTS ARE SUCH THAT THE
050947,002039: # DIVIDEND IS STRICTLY LESS THAN THE DIVISOR IN MAGNITUDE, THE FOLLOWING APPROXIMATION IS USED. THE ASSUMPTIONS
050948,002040: # ARE THE SAME AS THE GENERAL ROUTINE WITH THE ADDITION THAT SIGN AGREEMENT IS NECESSARY (B, C, & D POSITIVE).
050949,002041:
050950,002042: # C + SB . (C + B - D)
050951,002043: # ------ = 37777 + S(---------)
050952,002044: # C + SD ( C )
050953,002045:
050954,002046: # THE DIVISION MAY BE PERFORMED IMMEDIATELY SINCE B IS STRICTLY LESS THAN D AND C IS NOT LESS THAN .5.
050955,002047:
050956,002048: 00,2642 40154 MAXDV CS MPAC # SEE IF MAXDV CASE STILL HOLDS AFTER
050957,002049: 00,2643 60130 AD BUF # NORMALIZATION.
050958,002050: 00,2644 00006 EXTEND
050959,002051: 00,2645 12647 BZF +2
050960,002052: 00,2646 12570 TCF GENDDV # MPAC NOW LESS THAN BUFF -- DIVIDE AS USUAL.
050961,002053:
050962,002054: 00,2647 34777 +2 CAF POSMAX # SET MAJOR PART OF RESULT.
050963,002055: 00,2650 54154 TS MPAC
050964,002056:
050965,002057: 00,2651 40131 CS BUF +1 # FORM DIVIDEND OF MINOR PART OF RESULT.
050966,002058: 00,2652 60155 AD MPAC +1
050967,002059: 00,2653 12624 TCF ENDMAXDV # GO ADD C AND DO DIVIDE, ATTACHING SIGN
050968,002060: # BEFORE EXITING.
050969,002061:
050970,002062: # Page 1171
050971,002063: # VECTOR DIVIDED BY SCALAR, V/SC, IS EXECUTED HERE. THE VECTOR IS NOW IN MPAC WITH SCALAR IN BUF.
050972,002064:
050973,002065: 00,2654 45017 V/SC2 CS ONE # INITIALIZE DIVIDEND NORMALIZATION COUNT
050974,002066: 00,2655 54137 TS DVNORMCT # AND DIVISION SIGN REGISTER.
050975,002067: 00,2656 54127 TS VBUF +5
050976,002068:
050977,002069: 00,2657 03010 TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR
050978,002070:
050979,002071: 00,2660 52131 DXCH BUF
050980,002072: 00,2661 07513 TC ALSIGNAG # SIGN AGREE BUF
050981,002073: 00,2662 52131 DXCH BUF
050982,002074: 00,2663 10130 CCS BUF # FORCE DIVISOR POSITIVE WITH MAJOR PART
050983,002075: 00,2664 12721 TCF /BUF+ # NON-ZERO (IF POSSIBLE).
050984,002076: 00,2665 12667 TCF +2
050985,002077: 00,2666 12715 TCF /BUF-
050986,002078:
050987,002079: 00,2667 56131 XCH BUF +1 # SHIFT VECTOR AND SCALAR LEFT 14.
050988,002080: 00,2670 56130 XCH BUF
050989,002081: 00,2671 56155 XCH MPAC +1
050990,002082: 00,2672 56154 XCH MPAC
050991,002083: 00,2673 00006 EXTEND # CHECK FOR OVERFLOW IN EACH CASE.
050992,002084: 00,2674 12676 BZF +2
050993,002085: 00,2675 12405 TCF DVOVF
050994,002086:
050995,002087: 00,2676 56160 XCH MPAC +4
050996,002088: 00,2677 56157 XCH MPAC +3
050997,002089: 00,2700 00006 EXTEND
050998,002090: 00,2701 12703 BZF +2
050999,002091: 00,2702 12405 TCF DVOVF
051000,002092:
051001,002093: 00,2703 56162 XCH MPAC +6
051002,002094: 00,2704 56161 XCH MPAC +5
051003,002095: 00,2705 00006 EXTEND
051004,002096: 00,2706 12710 BZF +2
051005,002097: 00,2707 12405 TCF DVOVF
051006,002098:
051007,002099: 00,2710 10130 CCS BUF
051008,002100: 00,2711 12721 TCF /BUF+
051009,002101: 00,2712 12405 TCF DVOVF # ZERO DIVISOR - OVERFLOW.
051010,002102: 00,2713 12715 TCF /BUF-
051011,002103: 00,2714 12405 TCF DVOVF
051012,002104:
051013,002105: 00,2715 00006 /BUF- EXTEND # ON NEGATIVE, COMPLEMENT BUF AND MAINTAIN
051014,002106: 00,2716 40131 DCS BUF # DVSIGN IN VBUF +5.
051015,002107: 00,2717 52131 DXCH BUF
051016,002108: 00,2720 24127 INCR VBUF +5
051017,002109:
051018,002110: # Page 1172
051019,002111: 00,2721 00006 /BUF+ EXTEND
051020,002112: 00,2722 30131 DCA BUF # LEAVE ABS(ORIG DIVISOR) IN BUF2
051021,002113: 00,2723 52134 DXCH BUF2 # FOR OVERFLOW TESTING
051022,002114: 00,2724 12732 TCF /NORM # NORMALIZE DIVISOR IN BUF.
051023,002115:
051024,002116: 00,2725 00006 /NORM2 EXTEND # IF LESS THAN .5, AUGMENT DVNORMCT AND
051025,002117: 00,2726 24137 AUG DVNORMCT # DOUBLE DIVISOR.
051026,002118: 00,2727 00006 EXTEND
051027,002119: 00,2730 30131 DCA BUF
051028,002120: 00,2731 20131 DAS BUF
051029,002121:
051030,002122: 00,2732 30130 /NORM CA BUF # SEE IF DIVISOR NORMALIZED.
051031,002123: 00,2733 60000 DOUBLE
051032,002124: 00,2734 54000 OVSK
051033,002125: 00,2735 12725 TCF /NORM2 # DOUBLE AND TRY AGAIN IF NOT.
051034,002126:
051035,002127: 00,2736 02750 TC V/SCDV # DO X COMPONENT DIVIDE.
051036,002128: 00,2737 52160 DXCH MPAC +3 # SUPPLY ARGUMENTS IN USUAL SEQUENCE.
051037,002129: 00,2740 52155 DXCH MPAC
051038,002130: 00,2741 52160 DXCH MPAC +3
051039,002131:
051040,002132: 00,2742 02750 TC V/SCDV # Y COMPONENT.
051041,002133: 00,2743 52162 DXCH MPAC +5
051042,002134: 00,2744 52155 DXCH MPAC
051043,002135: 00,2745 52162 DXCH MPAC +5
051044,002136:
051045,002137: 00,2746 02750 TC V/SCDV # Z COMPONENT.
051046,002138: 00,2747 17367 TCF VROTATEX # GO RE-ARRANGE COMPONENTS BEFORE EXIT.
051047,002139:
051048,002140: # Page 1173
051049,002141: # SUBROUTINE USED BY V/SC TO DIVIDE VECTOR COMPONENT IN MPAC,+1 BY THE SCALAR GIVEN IN BUF.
051050,002142:
051051,002143: 00,2750 30127 V/SCDV CA VBUF +5 # REFLECTS SIGN OF SCALAR.
051052,002144: 00,2751 54136 TS DVSIGN
051053,002145:
051054,002146: 00,2752 10154 CCS MPAC # FORCE MPAC POSITIVE, EXITING ON ZERO.
051055,002147: 00,2753 12767 TCF /MPAC+
051056,002148: 00,2754 12756 TCF +2
051057,002149: 00,2755 12763 TCF /MPAC-
051058,002150:
051059,002151: 00,2756 10155 CCS MPAC +1
051060,002152: 00,2757 12767 TCF /MPAC+
051061,002153: 00,2760 00002 TC Q
051062,002154: 00,2761 12763 TCF /MPAC-
051063,002155: 00,2762 00002 TC Q
051064,002156:
051065,002157: 00,2763 00006 /MPAC- EXTEND # USUAL COMPLEMENTING AND SETTING OF SIGN.
051066,002158: 00,2764 40155 DCS MPAC
051067,002159: 00,2765 52155 DXCH MPAC
051068,002160: 00,2766 24136 INCR DVSIGN
051069,002161:
051070,002162: 00,2767 45017 /MPAC+ CS ONE # INITIALIZE NEAR-ONE SWITCH.
051071,002163: 00,2770 54140 TS MAXDVSW
051072,002164:
051073,002165: 00,2771 40154 CS MPAC # CHECK POSSIBLE OVERFLOW.
051074,002166: 00,2772 60133 AD BUF2 # UNNORMALIZED INPUT DIVISOR.
051075,002167: 00,2773 10000 CCS A
051076,002168: 00,2774 13004 TCF DDVCALL # NOT NEAR-ONE
051077,002169: 00,2775 12777 TCF +2 # +0 IS JUST POSSIBLE
051078,002170: 00,2776 12405 TCF DVOVF # NO HOPE
051079,002171: 00,2777 54140 TS MAXDVSW # SIGNAL POSSIBLE NEAR-ONE CASE
051080,002172: 00,3000 40155 CS MPAC +1 # SEE IF DIVISION CAN BE DONE
051081,002173: 00,3001 60134 AD BUF2 +1
051082,002174: 00,3002 00006 EXTEND
051083,002175: 00,3003 62405 BZMF DVOVF
051084,002176:
051085,002177: 00,3004 52155 DDVCALL DXCH MPAC # CALL PRE-DIVIDE NORMALIZATION.
051086,002178: 00,3005 50137 INDEX DVNORMCT
051087,002179: 00,3006 12565 TCF MAXTEST
051088,002180:
051089,002181: # Page 1174
051090,002182: 00,3007 32506 SLOPELO DEC .8324
051091,002183:
051092,002184: 00,3010 56002 VECAGREE XCH Q # SAVE Q IN A
051093,002185: 00,3011 52155 DXCH MPAC
051094,002186: 00,3012 07513 TC ALSIGNAG # SIGNAGREE MPAC
051095,002187: 00,3013 52155 DXCH MPAC
051096,002188: 00,3014 52160 DXCH MPAC +3
051097,002189: 00,3015 07513 TC ALSIGNAG # SIGN AGREE MPAC +3
051098,002190: 00,3016 52160 DXCH MPAC +3
051099,002191: 00,3017 52162 DXCH MPAC +5
051100,002192: 00,3020 07513 TC ALSIGNAG # SIGNAGREE MPAC +5
051101,002193: 00,3021 52162 DXCH MPAC +5
051102,002194: 00,3022 00000 TC A
051103,002195:
051104,002196: # Page 1175
051105,002197: # THE FOLLOWING ROUTINE EXECUTES THE UNIT INSTRUCTION, WHICH TAKES THE UNIT OF THE VECTOR IN MPAC.
051106,002198:
051107,002199: 00,3023 03010 UNIT TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR
051108,002200: 00,3024 07501 TC MPACVBUF # SAVE ARGUMENT IN VBUF
051109,002201: 00,3025 35021 CAF ZERO # MUST SENSE OVERFLOW IN FOLLOWING DOT.
051110,002202: 00,3026 56121 XCH OVFIND
051111,002203: 00,3027 54141 TS TEM1
051112,002204: 00,3030 03317 TC VSQSUB # DOT MPAC WITH ITSELF.
051113,002205: 00,3031 30141 CA TEM1
051114,002206: 00,3032 56121 XCH OVFIND
051115,002207: 00,3033 00006 EXTEND
051116,002208: 00,3034 13036 BZF +2
051117,002209: 00,3035 12405 TCF DVOVF
051118,002210: 00,3036 00006 EXTEND
051119,002211: 00,3037 30155 DCA MPAC # LEAVE THE SQUARE OF THE LENGTH OF THE
051120,002212: 00,3040 50120 INDEX FIXLOC # ARGUMENT IN LVSQUARE.
051121,002213: 00,3041 52043 DXCH LVSQUARE
051122,002214:
051123,002215: 00,3042 03343 TC SQRTSUB # GO TAKE THE NORMALIZED SQUARE ROOT.
051124,002216:
051125,002217: 00,3043 10154 CCS MPAC # CHECK FOR UNIT OVERFLOW.
051126,002218: 00,3044 13051 TCF +5 # MPAC IS NOT LESS THAN .5 UNLESS
051127,002219: 00,3045 54001 TS L
051128,002220: 00,3046 50120 INDEX FIXLOC
051129,002221: 00,3047 52045 DXCH LV
051130,002222: 00,3050 12405 TCF DVOVF # INPUT TO SQRTSUB WAS 0.
051131,002223:
051132,002224: 00,3051 44333 CS FOURTEEN # SEE IF THE INPUT WAS SO SMALL THAT THE
051133,002225: 00,3052 60135 AD MPTEMP # FIRST TWO REGISTERS OF THE SQUARE WERE 0
051134,002226: 00,3053 10000 CCS A
051135,002227: 00,3054 40000 COM # IF SO, SAVE THE NEGATIVE OF THE SHIFT
051136,002228: 00,3055 13133 TCF SMALL # COUNT -15D.
051137,002229:
051138,002230: 00,3056 13065 TCF LARGE # (THIS IS USUALLY THE CASE.)
051139,002231:
051140,002232: 00,3057 45025 CS THIRTEEN # IF THE SHIFT COUNT WAS EXACTLY 14, SET
051141,002233: 00,3060 54135 TS MPTEMP # THE PRE-DIVIDE NORM COUNT TO -13D.
051142,002234:
051143,002235: 00,3061 30154 CA MPAC # SHIFT THE LENGTH RIGHT 14 BEFORE STORING
051144,002236: 00,3062 54001 SMALL2 TS L # (SMALL EXITS TO THIS POINT).
051145,002237: 00,3063 35021 CAF ZERO
051146,002238: 00,3064 13112 TCF LARGE2 # GO TO STORE LENGTH AND PROCEED.
051147,002239:
051148,002240: 00,3065 10135 LARGE CCS MPTEMP # MOST ALL CASES COME HERE.
051149,002241: 00,3066 13074 TCF LARGE3 # SEE IF NO NORMALIZATION WAS REQUIRED BY
051150,002242: 00,3067 42024 CS SRDDV # SQRT, AND IF SO, SET UP FOR A SHIFT
051151,002243: 00,3070 54135 TS MPTEMP # RIGHT 1 BEFORE DIVIDING TO PRODUCE
051152,002244: 00,3071 00006 EXTEND # THE DESIRED HALF UNIT VECTOR.
051153,002245: 00,3072 30155 DCA MPAC
051154,002246: # Page 1176
051155,002247: 00,3073 13112 TCF LARGE2
051156,002248:
051157,002249: # Page 1177
051158,002250: 00,3074 40000 LARGE3 COM # LEAVE NEGATIVE OF SHIFT COUNT-1 FOR
051159,002251: 00,3075 54135 TS MPTEMP # PREDIVIDE LEFT SHIFT.
051160,002252:
051161,002253: 00,3076 40000 COM # PICK UP REQUIRED SHIFTING BIT TO UNNORM-
051162,002254: 00,3077 50000 INDEX A # ALIZE THE SQRT RESULT.
051163,002255: 00,3100 35002 CAF BIT14
051164,002256: 00,3101 54130 TS BUF
051165,002257: 00,3102 00006 EXTEND
051166,002258: 00,3103 70155 MP MPAC +1
051167,002259: 00,3104 56130 XCH BUF
051168,002260: 00,3105 00006 EXTEND # (UNNORMALIZE THE SQRT FOR LV).
051169,002261: 00,3106 70154 MP MPAC
051170,002262: 00,3107 56001 XCH L
051171,002263: 00,3110 60130 AD BUF
051172,002264: 00,3111 56001 XCH L
051173,002265:
051174,002266: 00,3112 50120 LARGE2 INDEX FIXLOC
051175,002267: 00,3113 52045 DXCH LV # LENGTH NOW STORED IN WORK AREA.
051176,002268:
051177,002269: 00,3114 45017 CS ONE
051178,002270: 00,3115 54140 TS MAXDVSW # NO MAXDV CASES IN UNIT.
051179,002271:
051180,002272: 00,3116 52123 DXCH VBUF # PREPARE X COMPONENT FOR DIVIDE, SETTING
051181,002273: 00,3117 52155 DXCH MPAC # LENGTH OF VECTOR AS DIVISOR IN BUF.
051182,002274: 00,3120 52131 DXCH BUF
051183,002275: 00,3121 03151 TC UNITDV
051184,002276:
051185,002277: 00,3122 52125 DXCH VBUF +2 # DO Y AND Z IN USUAL FASHION SO WE CAN
051186,002278: 00,3123 52155 DXCH MPAC # EXIT THROUGH VROTATEX.
051187,002279: 00,3124 52160 DXCH MPAC +3
051188,002280: 00,3125 03151 TC UNITDV
051189,002281:
051190,002282: 00,3126 52127 DXCH VBUF +4
051191,002283: 00,3127 52155 DXCH MPAC
051192,002284: 00,3130 52162 DXCH MPAC +5
051193,002285: 00,3131 03151 TC UNITDV
051194,002286: 00,3132 17367 TCF VROTATEX # AND EXIT.
051195,002287:
051196,002288: # Page 1178
051197,002289: # IF THE LENGTH OF THE ARGUMENT VECTOR WAS LESS THAN 2(-28), EACH COMPONENT MUST BE SHIFTED LEFT AT LEAST
051198,002290: # 14 PLACES BEFORE TEH DIVIDE, NOTE THAT IN THIS CASE, THE MAJOR PART OF EACH COMPONENT IS ZERO.
051199,002291:
051200,002292: 00,3133 54135 SMALL TS MPTEMP # NEGATIVE OF PRE-DIVIDE SHIFT COUNT.
051201,002293:
051202,002294: 00,3134 35021 CAF ZERO # SHIFT EACH COMPONENT LEFT 14.
051203,002295: 00,3135 56123 XCH VBUF +1
051204,002296: 00,3136 56122 XCH VBUF
051205,002297: 00,3137 56125 XCH VBUF +3
051206,002298: 00,3140 56124 XCH VBUF +2
051207,002299: 00,3141 56127 XCH VBUF +5
051208,002300: 00,3142 56126 XCH VBUF +4
051209,002301:
051210,002302: 00,3143 40135 CS MPTEMP
051211,002303: 00,3144 50000 INDEX A
051212,002304: 00,3145 35002 CAF BIT14
051213,002305: 00,3146 00006 EXTEND
051214,002306: 00,3147 70154 MP MPAC
051215,002307: 00,3150 13062 TCF SMALL2
051216,002308:
051217,002309: 00,3151 5025 THIRTEEN = OCT15
051218,002310: 00,3151 4333 FOURTEEN = OCT16
051219,002311: 00,3151 4333 OCT16 = R1D1
051220,002312:
051221,002313: # Page 1179
051222,002314: # THE FOLLOWING ROUTINE SETS UP THE CALL TO THE DIVIDE ROUTINES.
051223,002315:
051224,002316: 00,3151 10154 UNITDV CCS MPAC # FORCE MPAC POSITIVE IF POSSIBLE, SETTING
051225,002317: 00,3152 13170 TCF UMPAC+ # DVSIGN ACCORDING TO THE SIGN OF MPAC
051226,002318: 00,3153 13155 TCF +2 # SINCE THE DIVISOR IS ALWAYS POSITIVE
051227,002319: 00,3154 13162 TCF UMPAC- # HERE.
051228,002320:
051229,002321: 00,3155 10155 CCS MPAC +1
051230,002322: 00,3156 13170 TCF UMPAC+
051231,002323: 00,3157 00002 TC Q # EXIT IMMEDIATELY ON ZERO.
051232,002324: 00,3160 13162 TCF UMPAC-
051233,002325: 00,3161 00002 TC Q
051234,002326:
051235,002327: 00,3162 45021 UMPAC- CS ZERO # IF NEGATIVE, SET -0 IN DVSIGN FOR FINAL
051236,002328: 00,3163 54136 TS DVSIGN # COMPLEMENT.
051237,002329: 00,3164 00006 EXTEND
051238,002330: 00,3165 40155 DCS MPAC # PICK UP ABSOLUTE VALUE OF ARG AND JUMP.
051239,002331: 00,3166 50135 INDEX MPTEMP
051240,002332: 00,3167 12564 TCF MAXTEST -1
051241,002333:
051242,002334: 00,3170 54136 UMPAC+ TS DVSIGN # SET DVSIGN FOR POSITIVE QUOTIENT.
051243,002335: 00,3171 52155 DXCH MPAC
051244,002336: 00,3172 50135 INDEX MPTEMP
051245,002337: 00,3173 12564 TCF MAXTEST -1
051246,002338:
051247,002339: # Page 1180
051248,002340: # MISCELLANEOUS UNARY OPERATIONS.
051249,002341:
051250,002342: 00,3174 03300 DSQ TC DSQSUB # SQUARE THE DP CONTENTS OF MPAC.
051251,002343: 00,3175 16030 TCF DANZIG
051252,002344:
051253,002345: 00,3176 10163 ABVALABS CCS MODE # ABVAL OR ABS INSTRUCTION.
051254,002346: 00,3177 13226 TCF ABS # DO ABS ON SCALAR.
051255,002347: 00,3200 13226 TCF ABS
051256,002348:
051257,002349: 00,3201 03317 ABVAL TC VSQSUB # DOT MPAC WITH ITSELF.
051258,002350: 00,3202 22163 LXCH MODE # MODE IS NOW DP (L ZERO AFTER DAS).
051259,002351:
051260,002352: 00,3203 00006 EXTEND # STORE SQUARE OF LENGTH IN WORK AREA.
051261,002353: 00,3204 30155 DCA MPAC
051262,002354: 00,3205 50120 INDEX FIXLOC
051263,002355: 00,3206 52043 DXCH LVSQUARE
051264,002356:
051265,002357: # Page 1181
051266,002358: # PROGRAM DESCRIPTION -- SUBROUTINE SQRT
051267,002359:
051268,002360: # FUNCTIONAL DESCRIPTION -- DOUBLE PRECISION SQUARE ROOT ROUTINE
051269,002361: # THIS PROGRAM TAKES THE SQUARE ROOT OF THE 27 OR 28 MOST SIGNIFICANT BITS IN THE TRIPLE PRECISION SET OF
051270,002362: # NUMBERS -- MPAC, MPAC+1, AND MPAC+2. THE ROOT IS RETURNED DOUBLE PRECISION IN MPAC AND MPAC+1.
051271,002363:
051272,002364: # WARNING -- THIS SUBROUTINE USES A TRIPLE PRECISION INPUT. THE PROGRAMMER MUST ASSURE THE CONTENTS OF MPAC+2
051273,002365: # ESPECIALLY IF THE CONTENTS OF MPAC IS SMALL OR ZERO. FOR DETAILS SEE STG MEMO NO.949.
051274,002366:
051275,002367: # CALLING SEQUENCE -- IN INTERPRETIVE MODE, I.E., FOLLOWING `TC INTPRET', `SQRT', NO ADDRESS IS ALLOWED.
051276,002368: # INPUT SCALING: THE BINARY POINT IS ASSUMED TO THE RIGHT OF BIT 15. THE ANSWER IS RETURNED WITH THE SAME SCALING.
051277,002369:
051278,002370: # SUBROUTINES -- GENSCR, MPACSHR, SQRTSUB, ABORT
051279,002371:
051280,002372: # ABORT EXIT MODE -- ABORTS ON NEGATIVE INPUT -1.2X10E-4 (77775 OCTAL) OR LESS.
051281,002373: # DISPLAYS ERROR CODE 1302
051282,002374: # TC ABORT
051283,002375: # OCT 1302
051284,002376:
051285,002377: # DEBRIS -- LOCATIONS BUF, MPTEMP, ADDRWD ARE USED
051286,002378:
051287,002379: 00,3207 03343 SQRT TC SQRTSUB # TAKE THE SQUARE ROOT OF MPAC.
051288,002380: 00,3210 10135 CCS MPTEMP # RETURNED NORMALIZED SQUARE ROOT. SEE IF
051289,002381: 00,3211 13213 TCF +2 # ANY UN-NORMALIZATION REQUIRED AND EXIT
051290,002382: 00,3212 16030 TCF DANZIG # IF NOT.
051291,002383:
051292,002384: 00,3213 63730 AD NEG12 # A RIGHT SHIFT OF MORE THAN 13 COULD BE
051293,002385: 00,3214 00006 EXTEND # REQUIRED IF INPUT WAS ZERO IN MPAC,+1.
051294,002386: 00,3215 63221 BZMF SQRTSHFT # GOES HERE IN MOST CASES.
051295,002387: 00,3216 22007 ZL # IF A LONG SHIFT IS REQUIRED, GO TO
051296,002388: 00,3217 22116 LXCH ADDRWD # GENERAL RIGHT SHIFT ROUTINES.
051297,002389: 00,3220 12303 TCF GENSCR +4 # ADDRWD WAS ZERO TO PREVENT ROUND.
051298,002390:
051299,002391: 00,3221 50135 SQRTSHFT INDEX MPTEMP # SELECT SHIFTING BIT AND EXIT THROUGH
051300,002392: 00,3222 35001 CAF BIT15 # SHIFT ROUTINES.
051301,002393: 00,3223 54135 TS MPTEMP
051302,002394: 00,3224 35021 CAF ZERO # TO ZERO MPAC +2 IN THE PROCESS.
051303,002395: 00,3225 12036 TCF MPACSHR +3
051304,002396:
051305,002397: 00,3226 06672 ABS TC BRANCH # TEST SIGN OF MPAC AND COMPLEMENT IF
051306,002398: 00,3227 16030 TCF DANZIG
051307,002399: 00,3230 16030 TCF DANZIG
051308,002400: 00,3231 17637 TCF COMP
051309,002401:
051310,002402: # Page 1182
051311,002403: 00,3232 45015 VDEF CS FOUR # VECTOR DEFINE -- ESSENTIALLY TREATS
051312,002404: 00,3233 26166 ADS PUSHLOC # SCALAR IN MPAC AS X COMPONENT, PUSHES UP
051313,002405: 00,3234 00006 EXTEND # FOR Y AND THEN AGAIN FOR Z.
051314,002406: 00,3235 50000 INDEX A
051315,002407: 00,3236 30003 DCA 2
051316,002408: 00,3237 52160 DXCH MPAC +3
051317,002409: 00,3240 00006 EXTEND
051318,002410: 00,3241 50166 INDEX PUSHLOC
051319,002411: 00,3242 30001 DCA 0
051320,002412: 00,3243 52162 DXCH MPAC +5
051321,002413: 00,3244 16470 TCF VMODE # MODE IS NON VECTOR.
051322,002414:
051323,002415: 00,3245 03317 VSQ TC VSQSUB # DOT MPAC WITH ITSELF.
051324,002416: 00,3246 17301 TCF DMODE # MODE IS NOW DP.
051325,002417:
051326,002418: 00,3247 00006 PUSH EXTEND # PUSH DOWN MPAC LEAVING IT LOADED.
051327,002419: 00,3250 30155 DCA MPAC
051328,002420: 00,3251 50166 INDEX PUSHLOC # PUSH DOWN FIRST TWO REGISTERS IN EACH
051329,002421: 00,3252 52001 DXCH 0
051330,002422:
051331,002423: 00,3253 50163 INDEX MODE # INCREMENT PUSHDOWN POINTER.
051332,002424: 00,3254 36213 CAF NO.WDS
051333,002425: 00,3255 26166 ADS PUSHLOC
051334,002426:
051335,002427: 00,3256 10163 CCS MODE
051336,002428: 00,3257 13272 TCF TPUSH # PUSH DOWN MPAC +2.
051337,002429: 00,3260 16030 TCF DANZIG # DONE FOR DP.
051338,002430:
051339,002431: 00,3261 00006 EXTEND # ON VECTOR, PUSH DOWN Y AND Z COMPONENTS.
051340,002432: 00,3262 30160 DCA MPAC +3
051341,002433: 00,3263 50166 INDEX PUSHLOC
051342,002434: 00,3264 51775 DXCH 0 -4
051343,002435: 00,3265 00006 EXTEND
051344,002436: 00,3266 30162 DCA MPAC +5
051345,002437: 00,3267 50166 INDEX PUSHLOC
051346,002438: 00,3270 51777 DXCH 0 -2
051347,002439: 00,3271 16030 TCF DANZIG
051348,002440:
051349,002441: 00,3272 30156 TPUSH CA MPAC +2
051350,002442: 00,3273 16523 TCF ENDTPUSH +2
051351,002443:
051352,002444: 00,3274 50120 RVQ INDEX FIXLOC # RVQ -- RETURN IVA QPRET.
051353,002445: 00,3275 30052 CA QPRET
051354,002446: 00,3276 54117 TS POLISH
051355,002447: 00,3277 16621 TCF GOTO +4 # (ASSUME QPRET POINTS TO FIXED ONLY.)
051356,002448:
051357,002449: # Page 1183
051358,002450: # THE FOLLOWING SUBROUTINES ARE USED IN SQUARING MPAC, IN BOTH THE SCALAR AND VECTOR SENSE. THEY ARE
051359,002451: # SPECIAL CASES OF DMPSUB AND DOTSUB, PUT IN TO SAVE SOME TIME.
051360,002452:
051361,002453: 00,3300 30155 DSQSUB CA MPAC +1 # SQUARES THE SCALAR CONTENTS OF MPAC.
051362,002454: 00,3301 00006 EXTEND
051363,002455: 00,3302 70000 SQUARE
051364,002456: 00,3303 54156 TS MPAC +2
051365,002457: 00,3304 35021 CAF ZERO # FORM 2(CROSS TERM).
051366,002458: 00,3305 56155 XCH MPAC +1
051367,002459: 00,3306 00006 EXTEND
051368,002460: 00,3307 70154 MP MPAC
051369,002461: 00,3310 20001 DDOUBL # AND MAYBE OVEFLOW.
051370,002462: 00,3311 20156 DAS MPAC +1 # AND SET A TO NET OVERFLOW.
051371,002463: 00,3312 56154 XCH MPAC
051372,002464: 00,3313 00006 EXTEND
051373,002465: 00,3314 70000 SQUARE
051374,002466: 00,3315 20155 DAS MPAC
051375,002467: 00,3316 00002 TC Q
051376,002468:
051377,002469: 00,3317 00006 VSQSUB EXTEND # DOTS THE VECTOR IN MPAC WITH ITSELF.
051378,002470: 00,3320 22137 QXCH DOTRET
051379,002471: 00,3321 03300 TC DSQSUB # SQUARE THE X COMPONENT.
051380,002472: 00,3322 52160 DXCH MPAC +3
051381,002473: 00,3323 52155 DXCH MPAC
051382,002474: 00,3324 52131 DXCH BUF # SO WE CAN END IN DOTSUB.
051383,002475: 00,3325 30156 CA MPAC +2
051384,002476: 00,3326 54132 TS BUF +2
051385,002477:
051386,002478: 00,3327 03300 TC DSQSUB # SQUARE Y COMPONENT.
051387,002479: 00,3330 52156 DXCH MPAC +1
051388,002480: 00,3331 20132 DAS BUF +1
051389,002481: 00,3332 60154 AD MPAC
051390,002482: 00,3333 60130 AD BUF
051391,002483: 00,3334 54130 TS BUF
051392,002484: 00,3335 13337 TCF +2
051393,002485: 00,3336 54121 TS OVFIND # IF OVERFLOW.
051394,002486:
051395,002487: 00,3337 52162 DXCH MPAC +5
051396,002488: 00,3340 52155 DXCH MPAC
051397,002489: 00,3341 03300 TC DSQSUB # SQUARE Z COMPONENT.
051398,002490: 00,3342 17154 TCF ENDDOT # END AS IN DOTSUB.
051399,002491:
051400,002492: # Page 1184
051401,002493: # DOUBLE PRECISION SQUARE ROOT ROUTINE. TAKE THE SQUARE ROOT OF THE TRIPLE PRECISION (MPAC +2 USED ONLY
051402,002494: # IN NORMALIZATION) CONTENTS OF MPAC AND LEAVE THE NORMALIZED RESULT IN MPAC (C(MPAC) GREATER THAN OR EQUAL TO
051403,002495: # .5). THE RIGHT SHIFT COUNT (TC UNNORMALIZE) IS LEFT IN MPTEMP.
051404,002496:
051405,002497: 00,3343 35021 SQRTSUB CAF ZERO # START BY ZEROING RIGHT SHIFT COUNT.
051406,002498: 00,3344 54135 TS MPTEMP
051407,002499:
051408,002500: 00,3345 10154 CCS MPAC # CHECK FOR POSITIVE ARGUMENT, SHIFTING
051409,002501: 00,3346 13404 TCF SMPAC+ # FIRST SIGNIFICANT MPAC REGISTER INTO
051410,002502: 00,3347 13351 TCF +2 # MPAC ITSELF.
051411,002503: 00,3350 13373 TCF SQRTNEG # SEE IF MAG OF ARGUMENT LESS THAN 10(-4).
051412,002504:
051413,002505: 00,3351 56156 XCH MPAC +2 # MPAC IS ZERO -- SHIFT LEFT 14.
051414,002506: 00,3352 56155 XCH MPAC +1
051415,002507: 00,3353 54154 TS MPAC
051416,002508: 00,3354 35023 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
051417,002509: 00,3355 54135 TS MPTEMP
051418,002510:
051419,002511: 00,3356 10154 CCS MPAC # SEE IF MPAC NOW PNZ.
051420,002512: 00,3357 13404 TCF SMPAC+
051421,002513: 00,3360 13362 TCF +2
051422,002514: 00,3361 13376 TCF ZEROANS # NEGATIVE BUT LESS THAN 10(-4) IN MAG.
051423,002515:
051424,002516: 00,3362 56155 XCH MPAC +1 # XERO -- SHIFT LEFT 14 AGAIN.
051425,002517: 00,3363 54154 TS MPAC
051426,002518: 00,3364 35023 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
051427,002519: 00,3365 26135 ADS MPTEMP
051428,002520:
051429,002521: 00,3366 10154 CCS MPAC
051430,002522: 00,3367 13404 TCF SMPAC+
051431,002523: 00,3370 00002 TC Q # SQRT(0) = 0.
051432,002524: 00,3371 13376 TCF ZEROANS
051433,002525: 00,3372 13452 TCF FIXROOT # DO NOT LEAVE SQRTSUB WITH -0 IN MPAC.
051434,002526:
051435,002527: 00,3373 10000 SQRTNEG CCS A # ARGUMENT IS NEGATIVE, BUT SEE IF SIGN-
051436,002528: 00,3374 13402 TCF SQRTABRT # CORRECTED ARGUMENT IS LESS THAN 10(-4)
051437,002529:
051438,002530: 00,3375 10155 CCS MPAC +1 # IN MAGNITUDE. IF SO, CALL ANSWER ZERO.
051439,002531: 00,3376 35021 ZEROANS CAF ZERO # FORCE ANSWER TO ZERO HERE.
051440,002532: 00,3377 13452 TCF FIXROOT
051441,002533: 00,3400 13402 TCF SQRTABRT
051442,002534: 00,3401 13452 TCF FIXROOT
051443,002535:
051444,002536: 00,3402 05721 SQRTABRT TC P00DOO
051445,002537: 00,3403 01302 OCT 1302
051446,002538:
051447,002539: # Page 1185
051448,002540: 00,3404 62444 SMPAC+ AD -1/2+2 # SEE IF ARGUMENT GREATER THAN OR EQUAL TO
051449,002541: 00,3405 00006 EXTEND # .5.
051450,002542: 00,3406 63455 BZMF SRTEST # IF SO, SEE IF LESS THAN .25.
051451,002543:
051452,002544: 00,3407 52155 DXCH MPAC # WE WILL TAKE THE SQUARE ROOT OF MPAC/2.
051453,002545: 00,3410 22021 LXCH SR # SHIFT RIGHT 1 AND GO TO THE SQRT ROUTINE
051454,002546: 00,3411 00006 EXTEND
051455,002547: 00,3412 75002 MP HALF
051456,002548: 00,3413 52155 DXCH MPAC
051457,002549: 00,3414 56021 XCH SR
051458,002550: 00,3415 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
051459,002551:
051460,002552: 00,3416 32314 ARGHI CAF SLOPEHI # ARGUMENT BETWEEN .25 AND .5, GET A
051461,002553: 00,3417 00006 EXTEND # LINEAR APPROXIMATION FOR THIS RANGE.
051462,002554: 00,3420 70154 MP MPAC
051463,002555: 00,3421 62566 AD BIASHI # X0/2 = (MPAC/2)(SLOPHI) + BIASHI/2.
051464,002556:
051465,002557: 00,3422 54130 +4 TS BUF # X0/2 (ARGLO ENTERS HERE).
051466,002558: 00,3423 30154 CA MPAC # SINGLE-PRECISION THROUGHOUT.
051467,002559: 00,3424 22007 ZL
051468,002560: 00,3425 00006 EXTEND
051469,002561: 00,3426 10130 DV BUF # (MPAC/2)/(X0/2)
051470,002562: 00,3427 00006 EXTEND
051471,002563: 00,3430 75002 MP HALF
051472,002564: 00,3431 26130 ADS BUF # X1 = X0/2 + .5(MPAX/2)/(X0/2)
051473,002565:
051474,002566: 00,3432 00006 EXTEND
051475,002567: 00,3433 75002 MP HALF # FORM UP X1/2.
051476,002568: 00,3434 52155 DXCH MPAC # SAVE AND BRING OUT ARGUMENT.
051477,002569: 00,3435 00006 EXTEND # TAKE DP QUOTIENT WITH X1.
051478,002570: 00,3436 10130 DV BUF
051479,002571: 00,3437 54131 TS BUF +1 # SAVE MAJOR PART OF QUOTIENT.
051480,002572: 00,3440 35021 CAF ZERO # FORM MINOR PART OF QUOTIENT USING
051481,002573: 00,3441 56001 XCH L # (REMAINDER,0).
051482,002574: 00,3442 00006 EXTEND
051483,002575: 00,3443 10130 DV BUF
051484,002576: 00,3444 54001 TS L # IN PREPARATION FOR DAS.
051485,002577: 00,3445 30131 CA BUF +1
051486,002578: 00,3446 20155 DAS MPAC # X2 = X1/2 + (MPAC/2)X1
051487,002579:
051488,002580: 00,3447 00006 EXTEND # OVERFLOWS IF ARG. NEAR POSMAX.
051489,002581: 00,3450 13454 BZF TCQBNK00
051490,002582: 00,3451 34777 CAF POSMAX
051491,002583: 00,3452 54154 FIXROOT TS MPAC
051492,002584: 00,3453 54155 TS MPAC +1
051493,002585: 00,3454 00002 TCQBNK00 TC Q # RETURN TO CALLER TO UNNORMALIZE, ETC.
051494,002586:
051495,002587: # Page 1186
051496,002588: 00,3455 65003 SRTEST AD QUARTER # ARGUMENT WAS LESS THAN .5, SEE IF LESS
051497,002589: 00,3456 00006 EXTEND # THAN .25.
051498,002590: 00,3457 63501 BZMF SQRTNORM # IF SO, BEGIN NORMALIZATION.
051499,002591:
051500,002592: 00,3460 52155 DXCH MPAC # IF BETWEEN .5 AND .25, SHIFT RIGHT 1 AND
051501,002593: 00,3461 22021 LXCH SR # START AT ARGLO.
051502,002594: 00,3462 00006 EXTEND
051503,002595: 00,3463 75002 MP HALF
051504,002596: 00,3464 52155 DXCH MPAC
051505,002597: 00,3465 56021 XCH SR
051506,002598: 00,3466 26155 ADS MPAC +1 # NO OVERFLOW.
051507,002599:
051508,002600: 00,3467 33007 ARGLO CAF SLOPELO # (NORMALIZED) ARGUMENT BETWEEN .125 AND
051509,002601: 00,3470 00006 EXTEND # .25
051510,002602: 00,3471 70154 MP MPAC
051511,002603: 00,3472 62270 AD BIASLO
051512,002604: 00,3473 13422 TCF ARGHI +4 # BEGIN SQUARE ROOT.
051513,002605:
051514,002606: 00,3474 00006 SQRTNM2 EXTEND # SHIFT LEFT 2 AND INCREMENT RIGHT SHIFT
051515,002607: 00,3475 30156 DCA MPAC +1 # COUNT (FOR TERMINAL UNNORMALIZATION).
051516,002608: 00,3476 20156 DAS MPAC +1
051517,002609: 00,3477 60154 AD MPAC
051518,002610: 00,3500 26154 ADS MPAC # (NO OVERFLOW).
051519,002611:
051520,002612: 00,3501 24135 SQRTNORM INCR MPTEMP # FIRST TIME THROUGH, JUST SHIFT LEFT 1
051521,002613: 00,3502 00006 EXTEND # (PUTS IN EFFECTIVE RIGHT SHIFT SINCE
051522,002614: 00,3503 30156 DCA MPAC +1 # WE WANT MPAC/2).
051523,002615: 00,3504 20156 DAS MPAC +1
051524,002616: 00,3505 60154 AD MPAC
051525,002617: 00,3506 26154 ADS MPAC # (AGAIN NO OVERFLOW).
051526,002618: 00,3507 60000 DOUBLE
051527,002619: 00,3510 54022 TS CYL
051528,002620:
051529,002621: 00,3511 10022 NORMTEST CCS CYL # SEE IF ARGUMENT NOW NORMALIZED AT
051530,002622: 00,3512 10022 CCS CYL # GREATER THAN .125.
051531,002623: 00,3513 13474 TCF SQRTNM2 # NO -- SHIFT LEFT 2 MORE AND TRY AGAIN.
051532,002624: 00,3514 13416 TCF ARGHI # YES -- NOW BETWEEN .5 AND .25.
051533,002625: 00,3515 13467 TCF ARGLO # ARGUMENT NOW BETWEEN .25 AND .125.
051534,002626:
051535,002627: # Page 1187
051536,002628: # TRIGONOMETRIC FUNCTION PACKAGE.
051537,002629: # THE FOLLOWING TRIGONOMETRIC FUNCTIONS ARE AVAIALABLE AS INTERPRETIVE OPERATIONS:
051538,002630: # 1. SIN COMPUTES (1/2)SINE(2 PI MPAC).
051539,002631: # 2. COS COMPUTES (1/2)COSINE(2 PI MPAC).
051540,002632: # 3. ASIN COMPUTES (1/2PI)ARCSINE(2 MPAC).
051541,002633: # 4. ACOS COMPUTES (1/2PI)ARCCOSINE(2 MPAC).
051542,002634:
051543,002635: # SIN-ASIN AND COS-ACOS ARE MUTUALLY INVERSE, I.E., SIN(ASIN(X)) = X.
051544,002636:
051545,002637: 00,3516 06672 COSINE TC BRANCH # FINDS COSINE USING THE IDENTITY
051546,002638: 00,3517 13522 TCF +3 # COS(X) = SIN(PI/2 - ABS(X)).
051547,002639: 00,3520 13525 TCF PRESINE
051548,002640: 00,3521 13525 TCF PRESINE
051549,002641:
051550,002642: 00,3522 00006 +3 EXTEND
051551,002643: 00,3523 40155 DCS MPAC
051552,002644: 00,3524 52155 DXCH MPAC
051553,002645:
051554,002646: 00,3525 35003 PRESINE CAF QUARTER # PI/2 SCALED.
051555,002647: 00,3526 26154 ADS MPAC
051556,002648:
051557,002649: 00,3527 52155 SINE DXCH MPAC # DOUBLE ARGUMENT.
051558,002650: 00,3530 20001 DDOUBL
051559,002651: 00,3531 54000 OVSK # SEE IF OVERFLOW PRESENT.
051560,002652: 00,3532 13535 TCF +3 # IF NOT, ARGUMENT OK AS IS.
051561,002653:
051562,002654: 00,3533 00006 EXTEND # IF SO, WE LOST (OR GAINED) PI, SO
051563,002655: 00,3534 40001 DCOM # COMPLEMENT MPAC USING THE IDENTITY
051564,002656: # SIN(X-(+)PI) = SIN(-X).
051565,002657: 00,3535 52155 +3 DXCH MPAC
051566,002658: 00,3536 30154 CA MPAC # SEE IF ARGUMENT GREATER THAN .5 IN
051567,002659: 00,3537 60000 DOUBLE # MAGNITUDE. IF SO, REDUCE IT TO LESS THAN
051568,002660: 00,3540 54001 TS L # .5 (+-PI/2 SCALED) AS FOLLOWS:
051569,002661: 00,3541 13552 TCF SN1
051570,002662:
051571,002663: 00,3542 50000 INDEX A # IF POSITIVE, FORM PI - X, IF NEGATIVE
051572,002664: 00,3543 35001 CAF NEG1/2 +1 # USE -PI -X.
051573,002665: 00,3544 60000 DOUBLE
051574,002666: 00,3545 00006 EXTEND
051575,002667: 00,3546 60154 SU MPAC # GUARANTEED NO OVERFLOW.
051576,002668: 00,3547 54154 TS MPAC
051577,002669: 00,3550 40155 CS MPAC +1
051578,002670: 00,3551 54155 TS MPAC +1
051579,002671:
051580,002672: # Page 1188
051581,002673: 00,3552 00006 SN1 EXTEND # SET UP TO EVALUATE HASTINGS POLYNOMIAL
051582,002674: 00,3553 30155 DCA MPAC
051583,002675: 00,3554 52134 DXCH BUF2
051584,002676: 00,3555 03300 TC DSQSUB # SQUARE MPAC.
051585,002677:
051586,002678: 00,3556 07171 TC POLY # EVALUATE FOURTH ORDER POLYNOMIAL.
051587,002679: 00,3557 00003 DEC 3 B-14
051588,002680: 00,3560 14441 37325 2DEC +.3926990796
051589,002681: 00,3562 53250 60764 2DEC -.6459637111
051590,002682: 00,3564 12146 21276 2DEC +.318758717
051591,002683: 00,3566 75466 71471 2DEC -.074780249
051592,002684: 00,3570 00236 32757 2DEC +.009694988
051593,002685:
051594,002686: 00,3572 32470 CAF LBUF2 # MULTIPLY BY ARGUMENT AND SHIFT LEFT 2.
051595,002687: 00,3573 07055 TC DMPSUB -1
051596,002688:
051597,002689: 00,3574 00006 EXTEND
051598,002690: 00,3575 30156 DCA MPAC +1
051599,002691: 00,3576 20156 DAS MPAC +1
051600,002692: 00,3577 60154 AD MPAC
051601,002693: 00,3600 26154 ADS MPAC # NEITHER SHIFT OVERFLOWS.
051602,002694: 00,3601 00006 EXTEND
051603,002695: 00,3602 30156 DCA MPAC +1
051604,002696: 00,3603 20156 DAS MPAC +1
051605,002697: 00,3604 60154 AD MPAC
051606,002698: 00,3605 26154 ADS MPAC
051607,002699: 00,3606 16030 TCF DANZIG
051608,002700:
051609,002701: # Page 1189
051610,002702: # ARCSIN/ARCCOS ROUTINE.
051611,002703:
051612,002704: 00,3607 33630 ARCSIN CAF LASINEX # COMPUTE ARCSIN BY USING THE IDENTITY
051613,002705: 00,3610 13612 TCF +2 # ARCSIN(X) = PI/2 - ARCCOS(X).
051614,002706:
051615,002707: 00,3611 33712 ARCCOS CAF LDANZIG # (EXITS IMMEDIATELY).
051616,002708: 00,3612 54136 TS ESCAPE
051617,002709: 00,3613 06672 TC BRANCH # TEST SIGN OF INPUT.
051618,002710: 00,3614 13624 TCF ACOSST # START IMMEDIATELY IF POSITIVE.
051619,002711: 00,3615 13726 TCF ACOSZERO # ARCCOS(0) = PI/2 = .25.
051620,002712: 00,3616 00006 EXTEND # IF NEGATIVE, USE THE IDENTITY
051621,002713: 00,3617 40155 DCS MPAC # ARCCOS(X) = PI - ARCCOS(-X), FORCING
051622,002714: 00,3620 52155 DXCH MPAC # ARGUMENT POSITIVE.
051623,002715: 00,3621 33731 CAF TCSUBTR # SET EXIT TO DO ABOVE BEFROE
051624,002716: 00,3622 56136 XCH ESCAPE # ARCSIN/ARCCOS CONSIDERATIONS.
051625,002717: 00,3623 54137 TS ESCAPE2
051626,002718:
051627,002719: 00,3624 45002 ACOSST CS HALF # TEST MAGNITUDE OF INPUT.
051628,002720: 00,3625 60154 AD MPAC
051629,002721: 00,3626 10000 CCS A
051630,002722: 00,3627 13720 TCF ACOSOVF # THIS IS PROBABLY AN OVERFLOW CASE.
051631,002723:
051632,002724: 00,3630 13706 LASINEX TCF ASINEX
051633,002725:
051634,002726: 00,3631 13641 TCF ACOSST2 # NO OVERFLOW -- PROCEED.
051635,002727:
051636,002728: 00,3632 10155 CCS MPAC +1 # IF MAJOR PART IS .5, CALL ANSWER 0
051637,002729: 00,3633 35021 CAF ZERO # UNLESS MINOR PART NEGATIVE.
051638,002730: 00,3634 13636 TCF ACOS=0
051639,002731:
051640,002732: 00,3635 13641 TCF ACOSST2
051641,002733:
051642,002734: 00,3636 54155 ACOS=0 TS MPAC +1
051643,002735: 00,3637 54154 TS MPAC
051644,002736: 00,3640 00136 TC ESCAPE
051645,002737:
051646,002738: 00,3641 00006 ACOSST2 EXTEND # NOW THAT ARGUMENT IS IN PROPER RANGE,
051647,002739: 00,3642 40155 DCS MPAC # BEGIN COMPUTATION. USE HASTINGS
051648,002740: 00,3643 65002 AD HALF # APPROXIMATION ARCCOS(X) = SQRT(1-X)P(X)
051649,002741: 00,3644 52155 DXCH MPAC # IN A SCALED VERSION WHERE P(X) IS A
051650,002742: 00,3645 52134 DXCH BUF2 # SEVENTH ORDER POLYNOMIAL.
051651,002743:
051652,002744: 00,3646 03343 TC SQRTSUB # RETURNS WITH NORMALIZED SQUARE ROOT.
051653,002745:
051654,002746: 00,3647 10135 CCS MPTEMP # SEE IF UN-NORMALIZATION REQUIRED.
051655,002747: 00,3650 13713 TCF ACOSSHR
051656,002748:
051657,002749: # Page 1190
051658,002750: 00,3651 52155 ACOS3 DXCH MPAC # SET UP FOR POLYNOMIAL EVALUATION.
051659,002751: 00,3652 52134 DXCH BUF2
051660,002752: 00,3653 52155 DXCH MPAC
051661,002753:
051662,002754: 00,3654 07171 TC POLY
051663,002755: 00,3655 00006 DEC 6 B-14
051664,002756: 00,3656 13240 23630 2DEC +.353553385 # COEFFICIENTS ARE C 2(+I)/PISQRT(2) WHERE
051665,002757: 00,3660 74721 47775 2DEC* -.0483017006 B+1* # I
051666,002758: 00,3662 02440 20237 2DEC* +.0200273085 B+2* # WEHRE C STANDS FOR ORIGINAL COEFFS.
051667,002759: 00,3664 75067 70742 2DEC* -.0112931863 B+3*
051668,002760: 00,3666 03436 26756 2DEC* +.00695311612 B+4*
051669,002761: 00,3670 74037 57640 2DEC* -.00384617957 B+5*
051670,002762: 00,3672 03046 07143 2DEC* +.001501297736 B+6*
051671,002763: 00,3674 76654 42244 2DEC* -.000284160334 B+7*
051672,002764:
051673,002765: 00,3676 32470 CAF LBUF2 # DO FINAL MULTIPLY AND GO TO ANY
051674,002766: 00,3677 07055 TC DMPSUB -1 # EPILOGUE SEQUENCES.
051675,002767: 00,3700 00136 TC ESCAPE
051676,002768:
051677,002769: 00,3701 00006 SUBTR EXTEND # EPILOGUE FOR NEGATIVE INPUTS TO ARCCOS.
051678,002770: 00,3702 40155 DCS MPAC
051679,002771: 00,3703 65002 AD HALF # FORMS PI - ARCCOS(-X) = ARCCOS(X).
051680,002772: 00,3704 52155 DXCH MPAC
051681,002773: 00,3705 00137 TC ESCAPE2 # GO TO POSSIBLE ARCSIN EPILOGUE.
051682,002774:
051683,002775: 00,3706 00006 ASINEX EXTEND
051684,002776: 00,3707 40155 DCS MPAC # ARCSIN EPILOGUE -- GET ARCSIN(X)
051685,002777: 00,3710 65003 AD QUARTER # = PI/2 - ARCCOS(X).
051686,002778: 00,3711 52155 DXCH MPAC
051687,002779: 00,3712 16030 LDANZIG TCF DANZIG
051688,002780:
051689,002781: # Page 1191
051690,002782: 00,3713 50000 ACOSSHR INDEX A # THE SHIFT RIGHT IS LESS THAN 14 SINCE
051691,002783: 00,3714 35002 CAF BIT14 # THE INPUT WAS NON-ZERO DP.
051692,002784: 00,3715 54135 TS MPTEMP
051693,002785: 00,3716 02073 TC VSHRRND # DP SHIFT RIGHT AND ROUND.
051694,002786: 00,3717 13651 TCF ACOS3 # PROCEED.
051695,002787:
051696,002788: 00,3720 00006 ACOSOVF EXTEND # IF MAJOR PART WAS ONLY 1 MORE THAN .5,
051697,002789: 00,3721 13636 BZF ACOS=0 # CALL ANSWER ZERO.
051698,002790:
051699,002791: 00,3722 05650 ACOSABRT TC ALARM # IF OVERFLOW, CALL ANSWER ZERO BUT
051700,002792: 00,3723 01301 OCT 1301 # SOUND AN ALARM.
051701,002793:
051702,002794: 00,3724 35021 CAF ZERO
051703,002795: 00,3725 13636 TCF ACOS=0
051704,002796:
051705,002797: 00,3726 35003 ACOSZERO CAF QUARTER # ACOS(0) = PI/2.
051706,002798: 00,3727 13637 TCF ACOS=0 +1 # SET MPAC AND EXIT VIA ESCAPE.
051707,002799:
051708,002800: 00,3730 77763 NEG12 DEC -12 B-14
051709,002801: 00,3731 13701 TCSUBTR TCF SUBTR
051710,002802:
051711,002803: # Page 1192
051712,002804: # THE FOLLOWING INSTRUCTIONS ARE AVAILABLE FOR SETTING, MODIFYING, AND BRANCHING ON INDEX REGISTERS:
051713,002805: # 1. AXT ADDRESS TO INDEX TRUE.
051714,002806: # 2. AXC ADDRESS TO INDEX COMPLEMENTED.
051715,002807: # 3. LXA LOAD INDEX FROM ERASABLE.
051716,002808: # 4. LXC LOAD INDEX COMPLEMENTED FROM ERASABLE.
051717,002809: # 5. SXA STORE INDEX IN ERASABLE.
051718,002810: # 6. XCHX EXCHANGE INDEX REGISTER WITH ERASABLE.
051719,002811: # 7. INCR INCREMENT INDEX REGISTER.
051720,002812: # 8. XAD ERASABLE ERASABLE ADD TO INDEX REGISTER.
051721,002813: # 9. XSU ERASABLE SUBTRACT FROM INDEX REGISTER.
051722,002814: # 10. TIX BRANCH ON INDEX REGISTER AND DECREMENT.
051723,002815:
051724,002816: 01,2371 BANK 01
051725,002817:
051726,002818: 01,2371 COUNT 01/INTER
051727,002819:
051728,002820: 01,2371 02466 AXT TC TAGSUB # SELECT APPROPRIATE INDEX REGISTER.
051729,002821: 01,2372 30117 CA POLISH
051730,002822: 01,2373 50130 XSTORE INDEX INDEXLOC # CONTAINS C(FIXLOC) OR C(FIXLOC)+1
051731,002823: 01,2374 54046 TS X1
051732,002824: 01,2375 16030 TCF DANZIG
051733,002825:
051734,002826: 01,2376 02466 AXC TC TAGSUB
051735,002827: 01,2377 40117 CS POLISH
051736,002828: 01,2400 02373 TC XSTORE
051737,002829:
051738,002830: 01,2401 02454 LXA TC 15ADRERS # LOAD INDEX REGISTER FROM ERASABLE.
051739,002831: 01,2402 50117 INDEX POLISH
051740,002832: 01,2403 30000 CA 0
051741,002833: 01,2404 12373 TCF XSTORE
051742,002834:
051743,002835: 01,2405 02454 LXC TC 15ADRERS # LOAD NDX REG FROM ERASABLE COMPLEMENTED.
051744,002836: 01,2406 50117 INDEX POLISH
051745,002837: 01,2407 40000 CS 0
051746,002838: 01,2410 12373 TCF XSTORE
051747,002839:
051748,002840: 01,2411 02454 SXA TC 15ADRERS # STORE INDEX REGISTER IN ERASABLE.
051749,002841: 01,2412 50130 INDEX INDEXLOC
051750,002842: 01,2413 30046 CA X1
051751,002843: 01,2414 50117 MSTORE1 INDEX POLISH
051752,002844: 01,2415 54000 TS 0
051753,002845: 01,2416 16030 TCF DANZIG
051754,002846:
051755,002847: # Page 1193
051756,002848: 01,2417 02454 XCHX TC 15ADRERS # EXCHANGE INDEX REGISTER WITH ERASABLE.
051757,002849: 01,2420 50117 INDEX POLISH
051758,002850: 01,2421 30000 CA 0
051759,002851: 01,2422 50130 INDEX INDEXLOC
051760,002852: 01,2423 56046 XCH X1
051761,002853: 01,2424 12414 TCF MSTORE1
051762,002854:
051763,002855: 01,2425 02454 XAD TC 15ADRERS # ADD ERASABLE TO INDEX REGISTER.
051764,002856: 01,2426 50117 INDEX POLISH
051765,002857: 01,2427 30000 CA 0
051766,002858: 01,2430 50130 XAD2 INDEX INDEXLOC
051767,002859: 01,2431 26046 ADS X1 # IGNORING OVERFLOWS.
051768,002860: 01,2432 16030 TCF DANZIG
051769,002861:
051770,002862: 01,2433 02466 INCR TC TAGSUB # INCREMENT INDEX REGISTER.
051771,002863: 01,2434 30117 CA POLISH
051772,002864: 01,2435 12430 TCF XAD2
051773,002865:
051774,002866: 01,2436 02454 XSU TC 15ADRERS # SUBTRACT ERASABLE FROM INDEX REGISTER.
051775,002867: 01,2437 50117 INDEX POLISH
051776,002868: 01,2440 40000 CS 0
051777,002869: 01,2441 12430 TCF XAD2
051778,002870:
051779,002871: 01,2442 02466 TIX TC TAGSUB # BRANCH AND DECREMENT ON INDEX.
051780,002872: 01,2443 50130 INDEX INDEXLOC
051781,002873: 01,2444 40050 CS S1
051782,002874: 01,2445 50130 INDEX INDEXLOC
051783,002875: 01,2446 60046 AD X1
051784,002876: 01,2447 00006 EXTEND # NO OPERATION IF DECREMENTED INDEX IS
051785,002877: 01,2450 66030 BZMF DANZIG # NEGATIVE OR ZERO.
051786,002878:
051787,002879: 01,2451 50130 DOTIXBR INDEX INDEXLOC
051788,002880: 01,2452 56046 XCH X1 # IGNORING OVERFLOWS.
051789,002881:
051790,002882: 01,2453 16615 TCF GOTO # DO THE BRANCH USING THE CADR IN POLISH.
051791,002883:
051792,002884: # Page 1194
051793,002885: # SUBROUTINE TO CONVERT AN ERASABLE ADDRESS (11 BITS) TO AN EBANK SETTING AND SUBADDRESS.
051794,002886:
051795,002887: 01,2454 40117 15ADRERS CS POLISH
051796,002888: 01,2455 65034 AD DEC45
051797,002889: 01,2456 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
051798,002890: 01,2457 30120 CA FIXLOC # YES. ADD FIXLOC. EBANK OK AS IS.
051799,002891: 01,2460 12465 TCF +5
051800,002892:
051801,002893: 01,2461 35051 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
051802,002894: 01,2462 56117 XCH POLISH
051803,002895: 01,2463 54003 TS EBANK
051804,002896: 01,2464 74373 MASK LOW8
051805,002897: 01,2465 26117 +5 ADS POLISH # FALL INTO TAGSUB, AND RETURN VIA Q.
051806,002898:
051807,002899: # SUBROUTINE WHICH SETS THE ADDRESS OF THE SPECIFIED INDEX IN INDEXLOC. (ACTUALLY, THE ADDRESS -38D.)
051808,002900:
051809,002901: 01,2466 30120 TAGSUB CA FIXLOC
051810,002902: 01,2467 54130 TS INDEXLOC
051811,002903:
051812,002904: 01,2470 10020 CCS CYR # BIT 15 SPECIFIES INDEX.
051813,002905: 01,2471 24130 INCR INDEXLOC # 0 MEANS USE X2.
051814,002906: 01,2472 00002 TC Q
051815,002907: 01,2473 00002 TC Q # 1 FOR X1.
051816,002908:
051817,002909: # Page 1195
051818,002910: # MISCELLANEOUS OPERATION CODES WITH DIRECT ADDRESSES. INCLUDED HERE ARE:
051819,002911: # 1. ITA STORE CPRET (RETURN ADDRESS) IN ERASABLE.
051820,002912: # 2. CALL CALL A SUBROUTINE, LEAVING RETURN IN QPRET.
051821,002913: # 3. RTB RETURN TO BASIC LANGUAGE AT THE GIVEN ADDRESS.
051822,002914: # 4. BHIZ BRANCH IF THE HIGHORDER OF MPAC IS ZERO (SINGLE PRECISION).
051823,002915: # 5. BOV BRANCH ON OVERFLOW.
051824,002916: # 6. GOTO SIMPLE SEQUENCE CHANGE.
051825,002917:
051826,002918: 01,2474 10020 RTB/BHIZ CCS CYR
051827,002919: 01,2475 30117 RTB CA POLISH
051828,002920: 01,2476 04665 TC SWCALL -1 # SO A "TC Q" FROM ROUTINE LEADS TO DANZIG
051829,002921:
051830,002922: 01,2477 10154 BHIZ CCS MPAC
051831,002923: 01,2500 16030 TCF DANZIG
051832,002924: 01,2501 16615 TCF GOTO
051833,002925: 01,2502 16030 TCF DANZIG
051834,002926: 01,2503 16615 TCF GOTO
051835,002927:
051836,002928: 01,2504 10121 BOV(B) CCS OVFIND # BRANCH ON OVERFLOW TO BASIC OR INTERP.
051837,002929: 01,2505 12507 TCF +2
051838,002930: 01,2506 16030 TCF DANZIG
051839,002931: 01,2507 54121 TS OVFIND
051840,002932: 01,2510 10020 CCS CYR
051841,002933: 01,2511 12475 TCF RTB # IF BASIC.
051842,002934: 01,2512 00360 B5TOBB OCT 360
051843,002935: 01,2513 16615 TCF GOTO
051844,002936:
051845,002937: # Page 1196
051846,002938: 01,2514 10020 BZE/GOTO CCS CYR # SEE WHICH OP-CODE IS DESIRED.
051847,002939: 01,2515 06672 TC BRANCH # DO BZE.
051848,002940: 01,2516 16030 TCF DANZIG
051849,002941: 01,2517 16615 TCF GOTO # DO GOTO.
051850,002942: 01,2520 16030 TCF DANZIG
051851,002943:
051852,002944: 01,2521 10020 BPL/BMN CCS CYR
051853,002945: 01,2522 12530 TCF BPL
051854,002946: 01,2523 5B10 # DEC 5 B+10 # SHIFTS OP CODE IN SWITCH INSTRUCTION ADR
051855,002947: 01,2523 12000 DEC 5 B-4 # RSB 2009
051856,002948:
051857,002949: 01,2524 06672 TC BRANCH # DO BMN
051858,002950: 01,2525 16030 TCF DANZIG
051859,002951: 01,2526 16030 TCF DANZIG
051860,002952: 01,2527 16615 TCF GOTO # ONLY IF NNZ.
051861,002953:
051862,002954: 01,2530 06672 BPL TC BRANCH
051863,002955: 01,2531 16615 TCF GOTO # IF POSITIVE OR ZERO.
051864,002956: 01,2532 16615 TCF GOTO
051865,002957: 01,2533 16030 TCF DANZIG
051866,002958:
051867,002959: 01,2534 10020 CALL/ITA CCS CYR
051868,002960: 01,2535 16607 TCF CALL
051869,002961:
051870,002962: 01,2536 05747 TC CCSHOLE
051871,002963: 01,2537 02454 TC 15ADRERS # STORE QPRET. (TAGSUB AFTER 15ADRERS IS
051872,002964: 01,2540 50120 INDEX FIXLOC # SLOW IN THIS CASE, BUT SAVES STORAGE.)
051873,002965: 01,2541 30052 CA QPRET
051874,002966: 01,2542 12414 TCF MSTORE1
051875,002967:
051876,002968: # Page 1197
051877,002969: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR ALTERING AND TESTING INTERPRETATIVE SWITCHES:
051878,002970: # 00 BONSET SET A SWITCH AND DO A GOTO IF IT WAS ON.
051879,002971: # 01 SETGO SET A SWITCH AND DO A GOTO.
051880,002972: # 02 BOFSET SET A SWITCH AND DOA GOTO IF IT WAS OFF
051881,002973: # 03 SET SET A SWITCH.
051882,002974: # 04 BONINV INVERT A SWITCH AND BRANCH IF IT WAS ON.
051883,002975: # 05 INVGO INVERT A SWITCH AND DO A GOTO.
051884,002976: # 06 BOFINV INVERT A SWITCH AND BRANCH IF IT WAS OFF
051885,002977: # 07 INVERT INVERT A SWITCH.
051886,002978: # 10 BONCLR CLEAR A SWITCH AND BRANCH IF IT WAS ON.
051887,002979: # 11 CLRGO CLEAR A SWITCH AND DO A GOTO.
051888,002980: # 12 BOFCLR CLEAR A SWITCH AND BRANCH IF IT WAS OFF.
051889,002981: # 13 CLEAR CLEAR A SWITCH.
051890,002982: # 14 BON BRANCH IF A SWITCH WAS ON.
051891,002983: # 16 BOFF BRANCH IF A SWITCH WAS OFF.
051892,002984: # THE ADDRESS SUPPLIED WITH THE SWITCH INSTRUCTION IS INTERPRETED AS FOLLOWS:
051893,002985: # BITS 1-4 SWITCH BIT NUMBER (1-15).
051894,002986: # BITS 5-8 SWITCH OPERATION NUMBER
051895,002987: # BITS 9- SWITCH WORD NUMBER (UP TO 64 SWITCH WORDS).
051896,002988: # THE ADDRESS ITSELF IS MADE UP BY THE YUL SYSTEM ASSEMBLER. THE BRANCH INSTRUCTIONS REQUIRE TWO
051897,002989: # ADDRESSES, THE SECOND TAKEN AS THE DIRECT (OR INDIRECT IF IN ERASABLE) ADDRESS OF THE BRANCH.
051898,002990:
051899,002991: 01,2543 35026 SWITCHES CAF LOW4 # LEAVE THE SWITCH BIT IN SWBIT.
051900,002992: 01,2544 70117 MASK POLISH
051901,002993: 01,2545 50000 INDEX A
051902,002994: 01,2546 35001 CAF BIT15 # (NUMBER FROM LEFT TO RIGHT.)
051903,002995: 01,2547 54131 TS SWBIT
051904,002996:
051905,002997: 01,2550 35011 CAF BIT7 # LEAVE THE SWITCH NUMBER IN SWWORD.
051906,002998: 01,2551 00006 EXTEND
051907,002999: 01,2552 70117 MP POLISH
051908,003000: 01,2553 54130 TS SWWORD
051909,003001:
051910,003002: 01,2554 00004 INHINT # DURING SWITCH CHANGE SO RUPT CAN USE TOO
051911,003003: 01,2555 50000 INDEX A # LEAVE THE SWITCH WORD ITSELF IN L.
051912,003004: 01,2556 30074 CA STATE
051913,003005: 01,2557 54002 TS Q # Q WILL BE USED AS A CHANNEL.
051914,003006: # Page 1198
051915,003007: 01,2560 35005 CAF BIT11
051916,003008: 01,2561 00006 EXTEND # DISPATCH SWITCH BIT OPERATION AS IN BITS
051917,003009: 01,2562 70117 MP POLISH # 7-8 OF POLISH.
051918,003010: 01,2563 72623 MASK B3TOB4 # GETS 4X2-BIT CODE.
051919,003011: 01,2564 50000 INDEX A
051920,003012: 01,2565 12566 TCF +1
051921,003013:
051922,003014: 01,2566 30131 +1 CA SWBIT # 00 -- SET SWITCH IN QUESTION.
051923,003015: 01,2567 00006 EXTEND
051924,003016: 01,2570 04002 ROR QCHAN
051925,003017: 01,2571 12600 TCF SWSTORE
051926,003018:
051927,003019: 01,2572 30131 +5 CA SWBIT # 01 -- INVERT SWITCH.
051928,003020: 01,2573 00006 EXTEND
051929,003021: 01,2574 06002 RXOR QCHAN
051930,003022: 01,2575 12600 TCF SWSTORE
051931,003023:
051932,003024: 01,2576 40131 +9D CS SWBIT # 10 -- CLEAR.
051933,003025: 01,2577 70002 MASK Q
051934,003026: 01,2600 50130 SWSTORE INDEX SWWORD
051935,003027: 01,2601 54074 TS STATE # NEW SWITCH WORD.
051936,003028:
051937,003029: # Page 1199
051938,003030: 01,2602 00003 +13D RELINT # 11 -- NOOP.
051939,003031: 01,2603 35003 CAF BIT13
051940,003032: 01,2604 00006 EXTEND # DISPATCH SEQUENCE CHANGING OR BRANCING
051941,003033: 01,2605 70117 MP POLISH # CODE.
051942,003034: 01,2606 72623 MASK B3TOB4
051943,003035: 01,2607 50000 INDEX A
051944,003036: 01,2610 12611 TCF +1 # ORIGINALLY STORED IN BITS 5-6
051945,003037:
051946,003038: 01,2611 40002 +1 CS Q # 00 -- BRANCH IF ON.
051947,003039: 01,2612 70131 TEST MASK SWBIT
051948,003040: 01,2613 10000 CCS A
051949,003041: 01,2614 12624 TCF SWSKIP
051950,003042:
051951,003043: 01,2615 16664 +5 TCF SWBRANCH # 01 -- GO TO.
051952,003044:
051953,003045: 01,2616 12624 TCF SWSKIP # HERE ONLY ON BIT 15.
051954,003046:
051955,003047: 01,2617 05747 TC CCSHOLE
051956,003048: 01,2620 05747 TC CCSHOLE
051957,003049:
051958,003050: 01,2621 30002 +9D CA Q # 10 -- BRANCH IF OFF.
051959,003051: 01,2622 12612 TCF TEST
051960,003052:
051961,003053: 01,2623 00014 B3TOB4 OCT 0014
051962,003054: 01,2624 24164 SWSKIP INCR LOC
051963,003055:
051964,003056: 01,2625 01,2543 SW/ EQUALS SWITCHES
051965,003057:
051966,003058: 01,2625 16030 +13D TCF DANZIG # 11 -- NOOP.
051967,003059:
End of include-file INTERPRETER.agc. Parent file is MAIN.agc