Source Code
These source-code files were transcribed from a printout in Don Eyles's personal
collection, scanned by archive.org, and financially sponsored by Peter McDermott.
A team of volunteers performed the transcription and proof-reading. The scanned
page images are available at
the Virtual AGC Project website, as well as higher-quality (but much larger)
images at
the Virtual AGC Project's collection in the Internet Archive. Report any problems by creating
"issues" at
the Virtual AGC Project's GitHub Repository. Notations on the program listing read, in part: YUL SYSTEM FOR AGC: NEW PROGRAM SHEPATIN BY EYLES DEC 13, 1966 THIS PROGRAM WAS ASSEMBLED AS A VERSION OF REVISION 37 OF PROGRAM SUNBURST BY LEM GROUPNote that the date is the date of the printout, not the date of the program revision. |
040494,000002: ## Copyright: Public domain.
040495,000003: ## Filename: INTERPRETER.agc
040496,000004: ## Purpose: A section of Sunburst revision 37, or Shepatin revision 0.
040497,000005: ## It is part of an early development version of the software
040498,000006: ## for Apollo Guidance Computer (AGC) on the unmanned Lunar
040499,000007: ## Module (LM) flight Apollo 5. Sunburst 37 was the program
040500,000008: ## upon which Don Eyles's offline development program Shepatin
040501,000009: ## was based; the listing herein transcribed was actually for
040502,000010: ## the equivalent revision 0 of Shepatin.
040503,000011: ## This file is intended to be a faithful transcription, except
040504,000012: ## that the code format has been changed to conform to the
040505,000013: ## requirements of the yaYUL assembler rather than the
040506,000014: ## original YUL assembler.
040507,000015: ## Reference: pp. 893-984
040508,000016: ## Assembler: yaYUL
040509,000017: ## Contact: Ron Burkey <info@sandroid.org>.
040510,000018: ## Website: www.ibiblio.org/apollo/index.html
040511,000019: ## Mod history: 2017-05-24 MAS Created from Sunburst 120.
040512,000020: ## 2017-06-12 MAS Began updating for Sunburst 37.
040513,000021: ## 2017-06-13 MAS Completed updates for Sunburst 37.
040514,000022: ## 2017-06-15 HG Fix opcode TC -> TCF
040515,000023: ## 2017-06-23 RSB Proofed comment text with
040516,000024: ## octopus/ProoferComments.
040517,000025: ## 2021-05-30 ABS B5TOBB -> B5TOB8
040518,000026:
Page 893 |
040520,000028: # SECTION 1 DISPATCHER
040521,000029:
040522,000030: # ENTRY TO THE INTERPRETER. INTPRET SETS LOC TO THE FIRST INSTRUCTION, BANKSET TO THE BBANK OF THE
040523,000031: # OBJECT INTERPRETIVE PROGRAM, AND INTBIT15 TO THE BIT15 CONTENTS OF FBANK. INTERPRETIVE PROGRAMS MAY BE IN
040524,000032: # VIRTUALLY ALL BANKS PRESENT UNDER ANY SUPER-BANK SETTING, WITH THE RESTRICTION THAT PROGRAMS IN HIGH BANKS
040525,000033: # (BIT15 OF FBANK = 1) DO NOT REFER TO LOWBANKS, AND VICE-VERSA. THE INTERPRETER DOES NOT SWITCH SUPERBANKS.
040526,000034: # E-BANK SWITCHING OCCURS WHENEVER GENERAL ERASABLE (100 - 3777) IS ADDRESSED.
040527,000035:
040528,000036:
040529,000037:
040530,000038: 6103 BLOCK 03
040531,000039:
040532,000040: 6103 00006 INTPRET EXTEND # SET LOC TO THE WORD FOLLOWING THE TC.
040533,000041: 6104 22154 QXCH LOC
040534,000042:
040535,000043: 6105 30006 +2 CA BBANK # INTERPRETIVE BRANCHES FINISH HERE.
040536,000044: 6106 54155 TS BANKSET
040537,000045: 6107 77737 MASK BIT15 # GET 15TH BIT FOR INDEXABLE ADDRESSES.
040538,000046: 6110 54105 TS INTBIT15
040539,000047:
040540,000048:
040541,000049: 6111 16124 TCF NEWOPS # PICK UP OP CODE PAIR AND BEGIN.
040542,000050:
040543,000051:
040544,000052:
040545,000053: 6112 22006 INTRSM LXCH BBANK # RESUME SUSPENDED INTERPRETIVE JOB
040546,000054: 6113 16105 TCF INTPRET +2
040547,000055:
Page 894 |
040549,000057: # AT THE END OF MOST INSTRUCTIONS, CONTROL IS GIVEN TO DANZIG TO DISPATCH THE NEXT OPERATION.
040550,000058:
040551,000059: 6114 54153 NEWMODE TS MODE # PROLOGUE FOR MODE-CHANGING INSTRUCTIONS.
040552,000060:
040553,000061: 6115 30155 DANZIG CA BANKSET # SET BBANK BEFORE TESTING NEWJOB SO THAT
040554,000062: 6116 54006 TS BBANK # IT MAY BE SAVED DIRECTLY BY CHANJOB.
040555,000063:
040556,000064: 6117 10023 NOIBNKSW CCS EDOP # SEE IF AN ORDER CODE IS LEFT OVER FROM
040557,000065: 6120 16133 TCF OPJUMP # THE LAST PAIR RETRIEVED. IF SO, EXECUTE.
040558,000066: # EDOP IS SET TO ZERO ON ITS RE-EDITING.
040559,000067:
040560,000068: 6121 10067 CCS NEWJOB # SEE IF A JOB OF HIGHER PRIORITY IS
040561,000069: 6122 15556 TCF CHANG2 # PRESENT, AND IF SO, CHANGE JOBS.
040562,000070:
040563,000071:
040564,000072: 6123 24154 INCR LOC # ADVANCE THE LOCATION COUNTER.
040565,000073: # ITRACE (1) REFERS TO "NEWOPS".
040566,000074: 6124 50154 NEWOPS INDEX LOC # ENTRY TO BEGIN BY PICKING OP CODE PAIR.
040567,000075: 6125 30000 CA 0 # MAY BE AN OPCODE PAIR OR A STORE CODE.
040568,000076: 6126 10000 CCS A # TEST SIGN AND GET DABS(A).
040569,000077: 6127 16421 TCF DOSTORE # PROCESS STORE CODE.
040570,000078:
040571,000079: 6130 00177 LOW7 OCT 177
040572,000080:
040573,000081: 6131 54023 TS EDOP # OP CODE PAIR. LEAVE THE OTHER IN EDOP
040574,000082:
040575,000083: 6132 76130 MASK LOW7 # WHERE CCS EDOP WILL HONOR IT NEXT.
040576,000084:
040577,000085: 6133 54020 OPJUMP TS CYR # LOWWD ENTERS HERE IF A RIGHT-HAND OP
040578,000086: 6134 10020 CCS CYR # CODE IS TO BE PROCESSED. TEST PREFICES.
040579,000087: 6135 16303 TCF OPJUMP2 # TEST SECOND PREFIX BIT.
040580,000088:
040581,000089: 6136 17012 TCF EXIT # +0 OP CODE IS EXIT.
040582,000090:
Page 895 |
040584,000092: # PROCESS ADDRESSES WHICH MAY BE DIRECT, INDEXED, OR REFERENCE THE PUSHDOWN LIST.
040585,000093:
040586,000094: 6137 77755 ADDRESS MASK BIT1 # SEE IF ADDRESS IS INDEXED. CYR CONTAINED
040587,000095: 6140 10000 CCS A # 400XX, SO BIT 1 IS NOW AS IT WAS IN CYR.
040588,000096: 6141 16202 TCF INDEX # FORM INDEXED ADDRESS.
040589,000097:
040590,000098:
040591,000099: 6142 50154 DIRADRES INDEX LOC # LOOK AHEAD TO NEXT WORD TO SEE IF
040592,000100: 6143 40001 OCT40001 CS 1 # ADDRESS IS GIVEN.
040593,000101: 6144 10000 CCS A
040594,000102: 6145 16251 TCF PUSHUP # IF NOT.
040595,000103:
040596,000104: 6146 77773 NEG4 DEC -4 B-14
040597,000105:
040598,000106: 6147 24154 INCR LOC # IF SO, TO SHOW WE PICKED UP A WORD.
040599,000107: 6150 54106 TS ADDRWD
040600,000108:
Page 896 |
040602,000110: # FINAL DIGESTION OF DIRECT ADDRESSES OF OP CODES WITH 01 PREFIX IS DONE HERE. IN EACH CASE, THE
040603,000111: # REQUIRED 12-BIT SUB-ADDRESS IS LEFT IN ADDRWD, WITH ANY REQUIRED E OR F BANK SWITCHING DONE. ADDRESSES LESS
040604,000112:
040605,000113: # 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.
040606,000114:
040607,000115:
040608,000116: 6151 66305 AD -ENDVAC # SEE IF ADDRESS RELATIVE TO WORK AREA.
040609,000117: 6152 10000 CCS A
040610,000118: 6153 66332 AD -ENDERAS # IF NOT, SEE IF IN GENERAL ERASABLE.
040611,000119: 6154 16161 TCF IERASTST
040612,000120:
040613,000121: 6155 30110 NETZERO CA FIXLOC # IF SO, LEAVE THE MODIFIED ADDRESS IN
040614,000122:
040615,000123: 6156 26106 ADS ADDRWD # ADDRWD AND DISPATCH.
040616,000124: 6157 50020 ITR15 INDEX CYR # THIS INDEX MAKES THE NEXT INSTRUCTION
040617,000125: 6160 76332 7 INDJUMP -1 # TCF INDJUMP + OP, EDITING CYR.
040618,000126:
040619,000127: 6161 00006 IERASTST EXTEND
040620,000128: 6162 66172 BZMF GEADDR # GO PROCESS GENERAL-ERASABLE ADDRESS.
040621,000129:
040622,000130: 6163 75356 MASK LOW10 # FIXED BANK ADDRESS. RESTORE AND ADD B15.
040623,000131: 6164 65356 AD LOW10 # SWITCH BANKS AND LEAVE SUBADDRESS IN
040624,000132: 6165 56106 XCH ADDRWD # ADDRWD FOR OPERAND RETRIEVAL. (THIS
040625,000133: 6166 60105 AD INTBIT15 # METHOD PRECLUDES USE OF THE LAST
040626,000134: 6167 54004 TS FBANK # LOCATION IN EACH FBANK.)
040627,000135:
040628,000136: 6170 50020 ITR12 INDEX CYR
040629,000137: 6171 76332 7 INDJUMP -1
040630,000138:
040631,000139: 6172 74553 GEADDR MASK LOW8
040632,000140: 6173 65370 AD OCT1400
040633,000141: 6174 56106 XCH ADDRWD
040634,000142: 6175 54003 TS EBANK
040635,000143: 6176 50020 ITR10 INDEX CYR
040636,000144: 6177 76332 7 INDJUMP -1
040637,000145:
Page 897 |
040639,000147: # THE FOLLOWING ROUTINE PROCESSES INTERPRETIVE INDEXED ADDRESSES. AN INTERPRETER INDEX REGISTER MAY
040640,000148: # CONTAIN THE ADDRESS OF ANY ERASABLE REGISTER (0-42 BEING RELATIVE TO THE VAC AREA) OR ANY INTERPRETIVE PROGRAM
040641,000149: # BANK, OR ANY INTEGER IN THAT RANGE.
040642,000150:
040643,000151: 6200 35364 DODLOAD* CAF DLOAD* # STODL* COMES HERE TO PROCESS LOAD ADR.
040644,000152: 6201 54020 TS CYR # (STOVL* ENTERS HERE).
040645,000153:
040646,000154: 6202 30110 INDEX CA FIXLOC # SET UP INDEX LOCATION.
040647,000155:
040648,000156: 6203 54120 TS INDEXLOC
040649,000157: 6204 24154 INCR LOC # (ADDRESS ALWAYS GIVEN).
040650,000158: 6205 50154 INDEX LOC
040651,000159: 6206 40000 CS 0
040652,000160: 6207 10000 CCS A # INDEX 2 IF ADDRESS STORED COMPLEMENTED.
040653,000161: 6210 24120 INCR INDEXLOC
040654,000162: 6211 16212 NOOP
040655,000163:
040656,000164: 6212 54106 TS ADDRWD # 14 BIT ADDRESS TO ADDRWD.
040657,000165: 6213 75367 MASK HIGH4 # IF ADDRESS GREATER THAN 2K, ADD INTBIT15
040658,000166:
040659,000167: 6214 00006 EXTEND
040660,000168: 6215 16220 BZF INDEX2
040661,000169: 6216 30105 CA INTBIT15
040662,000170: 6217 26106 ADS ADDRWD
040663,000171:
040664,000172: 6220 50120 INDEX2 INDEX INDEXLOC
040665,000173: 6221 40046 CS X1
040666,000174: 6222 26106 ADS ADDRWD # DO AUGMENT, IGNORING AND CORRECTING OVF.
040667,000175:
040668,000176: 6223 76330 MASK HIGH9 # SEE IF ADDRESS IS IN WORK AREA.
040669,000177: 6224 00006 EXTEND
040670,000178: 6225 16240 BZF INDWORK
040671,000179:
040672,000180: 6226 75367 MASK HIGH4 # SEE IF IN FIXED BANK.
040673,000181: 6227 00006 EXTEND
040674,000182: 6230 16242 BZF INDERASE
040675,000183:
040676,000184: 6231 30106 CA ADDRWD # IN FIXED - SWITCH BANKS AND CREATE
040677,000185: 6232 54004 TS FBANK # SUB-ADDRESS.
040678,000186: 6233 75356 MASK LOW10
040679,000187: 6234 67743 AD 2K
040680,000188: 6235 54106 TS ADDRWD
040681,000189: 6236 50020 ITR11 INDEX CYR
040682,000190:
040683,000191: 6237 36332 3 INDJUMP -1
040684,000192:
040685,000193: 6240 30110 INDWORK CA FIXLOC # MAKE ADDRWD RELATIVE TO WORK AREA.
040686,000194: 6241 16246 TCF ITR13 -1
040687,000195:
040688,000196: 6242 35370 INDERASE CA OCT1400
040689,000197: 6243 56106 XCH ADDRWD
040690,000198: 6244 54003 TS EBANK
040691,000199: 6245 74553 MASK LOW8
040692,000200: 6246 26106 -1 ADS ADDRWD
Page 898 |
040694,000202: 6247 50020 ITR13 INDEX CYR
040695,000203:
040696,000204: 6250 36332 3 INDJUMP -1
040697,000205:
Page 899 |
040699,000207: # PUSH-UP ROUTINES. WHEN NO OPERAND ADDRESS IS GIVEN, THE APPROPRIATE OPERAND IS TAKEN FROM THE PUSH-DOWN
040700,000208: # LIST. IN MOST CASES THE MODE OF THE RESULT (VECTOR OR SCALAR) OF THE LAST ARITHMETIC OPERATION PERFORMED
040701,000209: # IS THE SAME AS THE TYPE OF OPERAND DESIRED (ALL ADD/SUBTRACT ETC.). EXCEPTIONS TO THIS GENERAL RULE ARE LISTED
040702,000210: # BELOW (NOTE THAT IN EVERY CASE THE MODE REGISTER IS LEFT INTACT):
040703,000211:
040704,000212: # 1. VXSC AND V/SC WANT THE OPPOSITE TYPE OF OPERAND, E.G., IF THE LAST OPERATION YIELDED A VECTOR
040705,000213:
040706,000214: # RESULT, VXSC WANTS A SCALAR.
040707,000215:
040708,000216: # 2. THE LOAD CODES SHOULD LOAD THE ACCUMULATOR INDEPENDENT OF THE RESULT OF THE LAST OPERATION. THIS
040709,000217: # INCLUDES VLOAD, DLOAD, TLOAD, PDDL, AND PDVL (NO PUSHUP WITH SLOAD).
040710,000218:
040711,000219: # 3. SOME ARITHMETIC OPERATIONS REQUIRE A STANDARD TYPE OF OPERAND REGARDLESS OF THE PREVIOUS OPERATION.
040712,000220: # THIS INCLUDES SIGN WANTING DP AND TAD REQUIRING TP.
040713,000221:
040714,000222: 6251 34554 PUSHUP CAF OCT23 # IF THE LOW 5 BITS OF CYR ARE LESS THAN
040715,000223: 6252 70020 MASK CYR # 20, THIS OP REQUIRES SPECIAL ATTENTION.
040716,000224: 6253 66256 AD -OCT10 # (NO -0).
040717,000225: 6254 10000 CCS A
040718,000226:
040719,000227: 6255 16267 TCF REGUP # FOR ALL CODES GREATER THAN OCT 7.
040720,000228:
040721,000229: 6256 77767 -OCT10 OCT -10
040722,000230:
040723,000231: 6257 66146 AD NEG4 # WE NOW HAVE 7 - OP CODE(MOD4). SEE IF
040724,000232: 6260 10000 CCS A # THE OP CODE (MOD4) IS THREE (REVERSE).
040725,000233: 6261 50000 INDEX A # NO - THE MODE IS DEFINITE. PICK UP THE
040726,000234: 6262 46300 CS NO.WDS
040727,000235: 6263 16271 TCF REGUP +2
040728,000236:
040729,000237:
040730,000238: 6264 50153 INDEX MODE # FOR VXSC AND V/SC WE WANT THE REQUIRED
040731,000239: 6265 46276 CS REVCNT # PUSHLOC DECREMENT WITHOUT CHANGING THE
040732,000240: 6266 16271 TCF REGUP +2 # MODE AT THIS TIME.
040733,000241:
040734,000242: 6267 50153 REGUP INDEX MODE # MOST ALL OP CODES PUSHUP HERE.
040735,000243: 6270 46300 CS NO.WDS
040736,000244: 6271 26156 +2 ADS PUSHLOC
040737,000245: 6272 54106 TS ADDRWD
040738,000246: 6273 50020 ITR14 INDEX CYR
040739,000247: 6274 76332 7 INDJUMP -1 # (THE INDEX MAKES THIS A TCF.)
040740,000248:
040741,000249: 6275 00002 OCT 2 # REVERSE PUSHUP DECREMENT. VECTOR TAKES 2
040742,000250:
040743,000251: 6276 00006 REVCNT OCT 6 # WORDS, SCALAR TAKES 6.
040744,000252: 6277 00006 OCT 6
040745,000253: 6300 00002 NO.WDS OCT 2 # CONVENTIONAL DECREMENT IS 6 WORDS VECTOR
040746,000254: 6301 00003 OCTAL3 OCT 3 # 2 IN DP, AND 3 IN TP.
040747,000255: 6302 00006 OCT 6
040748,000256:
Page 900 |
040750,000258: # TEST THE SECOND PREFIX BIT TO SEE IF THIS IS A MISCELLANEOUS OR A UNARY/SHORT SHIFT OPERATION.
040751,000259:
040752,000260: 6303 10020 OPJUMP2 CCS CYR # TEST SECOND PREFIX BIT.
040753,000261: 6304 16317 TCF OPJUMP3 # TEST THIRD BIT TO SEE IF UNARY OR SHIFT.
040754,000262:
040755,000263: 6305 77722 -ENDVAC DEC -45 B-14
040756,000264:
040757,000265: # THE FOLLOWING ROUTINE PROCESSES ADDRESSES OF SUFFIX CLASS 10. THEY ARE BASICALLY WORK AREA ADDRESSES
040758,000266: # IN THE RANGE 0 - 52, ERASABLE ECADR CONSTANTS FROM 100 - 3777, AND FCADRS ABOVE THAT. ALL 15 BITS ARE AVAILABLE
040759,000267: # IN CONTRAST TO SUFFIX 1, IN WHICH ONLY THE LOW ORDER 14 ARE AVAILABLE.
040760,000268:
040761,000269: 6306 24154 15BITADR INCR LOC # (ENTRY HERE FROM STCALL).
040762,000270:
040763,000271: 6307 50154 INDEX LOC # PICK UP ADDRESS WORD.
040764,000272: 6310 30000 CA 0
040765,000273: 6311 54107 TS POLISH # WE MAY NEED A SUBADDRESS LATER.
040766,000274:
040767,000275: 6312 36327 CAF LOW7+2K # THESE INSTRUCTIONS ARE IN BANK 1.
040768,000276: 6313 54004 TS FBANK
040769,000277: 6314 70020 MASK CYR
040770,000278: 6315 50000 ITR7 INDEX A
040771,000279: 6316 16373 TCF MISCJUMP
040772,000280:
Page 901 |
040774,000282: # COMPLETE THE DISPATCHING OF UNARY AND SHORT SHIFT OPERATIONS.
040775,000283:
040776,000284: 6317 54004 OPJUMP3 TS FBANK # CALL IN BANK 0 (BIT5 11-15 OF A ARE 0.)
040777,000285: # ITRACE (6) REFERS TO "OPJUMP3".
040778,000286: 6320 10020 CCS CYR # TEST THIRD PREFIX BIT.
040779,000287: 6321 50000 INDEX A # THE DECREMENTED UNARY CODE IS IN BITS
040780,000288: 6322 12000 TCF UNAJUMP # 1-4 OF A (ZERO, EXIT, HAS BEEN DETECTED)
040781,000289:
040782,000290:
040783,000291: 6323 10153 CCS MODE # ITS A SHORT SHIFT CODE. SEE IF PRESENT
040784,000292: 6324 12017 TCF SHORTT # SCALAR OR VECTOR.
040785,000293: 6325 12017 TCF SHORTT
040786,000294: 6326 12121 TCF SHORTV # CALLS THE APPROPRIATE ROUTINE.
040787,000295:
040788,000296:
040789,000297:
040790,000298: 6327 4554 OCT23 = VD1
040791,000299: 6327 02177 LOW7+2K OCT 2177 # OP CODE MASK + BANK 1 FBANK SETTING.
040792,000300: 6330 77700 HIGH9 OCT 77700
040793,000301:
040794,000302: 6331 76000 BANKMASK OCT 76000 # FBANK MASK.
040795,000303: 6332 6331 FBANKMSK EQUALS BANKMASK
040796,000304: 6332 5673 B12T14 = PRIO34 # USED IN PROCESSING STORE CODES.
040797,000305: 6332 74056 -ENDERAS DEC -2001 B-14 # = -(2047 - 45 - 1)
040798,000306:
Page 902 |
040800,000308: # THE FOLLOWING IS THE JUMP TABLE FOR OP CODES WHICH MAY HAVE INDEXABLE ADDRESSES OR MAY PUSH UP.
040801,000309:
040802,000310: 6333 16554 INDJUMP TCF VLOAD # 00 - LOAD MPAC WITH A VECTOR.
040803,000311: 6334 17133 TCF TAD # 01 - TRIPLE PRECISION ADD TO MPAC.
040804,000312: 6335 17701 TCF SIGN # 02 - COMPLEMENT MPAC (V OR SC) IF X NEG.
040805,000313: 6336 17452 TCF VXSC # 03 - VECTOR TIMES SCALAR.
040806,000314: 6337 16752 TCF CGOTO # 04 - COMPUTED GO TO.
040807,000315: 6340 16537 TCF TLOAD # 05 - LOAD MPAC WITH TRIPLE PRECISION.
040808,000316: 6341 16530 TCF DLOAD # 06 - LOAD MPAC WITH A DP SCALAR.
040809,000317: 6342 17650 TCF V/SC # 07 - VECTOR DIVIDED BY SCALAR.
040810,000318:
040811,000319: 6343 16550 TCF SLOAD # 10 - LOAD MPAC IN SINGLE PRECISION.
040812,000320: 6344 16667 TCF SSP # 11 - SET SINGLE PRECISION INTO X.
040813,000321:
040814,000322: 6345 16572 TCF PDDL # 12 - PUSH DOWN MPAC AND RE-LOAD IN DP.
040815,000323: 6346 17405 TCF MXV # 13 - MATRIX POST-MULTIPLIED BY VECTOR.
040816,000324: 6347 16626 TCF PDVL # 14 - PUSH DOWN AND VECTOR LOAD.
040817,000325: 6350 16675 TCF CCALL # 15 - COMPUTED CALL.
040818,000326: 6351 17410 TCF VXM # 16 - MATRIX PRE-MULTIPLIED BY VECTOR.
040819,000327: 6352 17642 TCF TSLC # 17 - NORMALIZE MPAC (SCALAR ONLY).
040820,000328:
040821,000329: 6353 17620 TCF DMPR # 20 - DP MULTIPLY AND ROUND.
040822,000330: 6354 17623 TCF DDV # 21 - DP DIVIDE BY.
040823,000331: 6355 17627 TCF BDDV # 22 - DP DIVIDE INTO.
040824,000332:
040825,000333: 6356 17645 TCF GSHIFT # 23 - GENERAL SHIFT INSTRUCTION.
040826,000334: 6357 17016 TCF VAD # 24 - VECTOR ADD.
040827,000335: 6360 17044 TCF VSU # 25 - VECTOR SUBTRACT.
040828,000336: 6361 17074 TCF BVSU # 26 - VECTOR SUBTRACT FROM.
040829,000337: 6362 17402 TCF DOT # 27 - VECTOR DOT PRODUCT.
040830,000338:
040831,000339: 6363 17532 TCF VXV # 30 - VECTOR CROSS PRODUCT.
040832,000340: 6364 17476 TCF VPROJ # 31 - VECTOR PROJECTION.
040833,000341: 6365 17062 TCF DSU # 32 - DP SUBTRACT.
040834,000342: 6366 17120 TCF BDSU # 33 - DP SUBTRACT FROM.
040835,000343: 6367 17034 TCF DAD # 34 - DP ADD.
040836,000344: 6370 16370 TCF +0 # 35 - AVAILABLE
040837,000345:
040838,000346: 6371 17616 TCF DMP1 # 36 - DP MULTIPLY.
040839,000347: 6372 17637 TCF SETPD # 37 - SET PUSH DOWN POINTER (DIRECT ONLY)
040840,000348:
040841,000349: # CODES 10 AND 14 MUST NOT PUSH UP. CODE 04 MAY BE USED FOR VECTOR DECLARE BEFORE PUSHUP IF DESIRED.
040842,000350:
Page 903 |
040844,000352: # THE FOLLOWING JUMP TABLE APPLIES TO INDEX, BRANCH, AND MISCELLANEOUS INSTRUCTIONS.
040845,000353:
040846,000354: 6373 12557 MISCJUMP TCF AXT # 00 - ADDRESS TO INDEX TRUE.
040847,000355: 6374 12564 TCF AXC # 01 - ADDRESS TO INDEX COMPLEMENTED.
040848,000356: 6375 12567 TCF LXA # 02 - LOAD INDEX FROM ERASABLE.
040849,000357: 6376 12573 TCF LXC # 03 - LOAD INDEX FROM COMPLEMENT OF ERAS.
040850,000358:
040851,000359: 6377 12577 TCF SXA # 04 - STORE INDEX IN ERASABLE.
040852,000360: 6400 12605 TCF XCHX # 05 - EXCHANGE INDEX WITH ERASABLE.
040853,000361: 6401 12621 TCF INCR # 06 - INCREMENT INDEX REGISTER.
040854,000362: 6402 12630 TCF TIX # 07 - TRANSFER ON INDEX.
040855,000363:
040856,000364: 6403 12613 TCF XAD # 10 - INDEX REGISTER ADD FROM ERASABLE.
040857,000365: 6404 12624 TCF XSU # 11 - INDEX SUBTRACT FROM ERASABLE.
040858,000366: 6405 12702 TCF BZE/GOTO # 12 - BRANCH ZERO AND GOTO.
040859,000367: 6406 12707 TCF BPL/BMN # 13 - BRANCH PLUS AND BRANCH MINUS.
040860,000368: 6407 12662 TCF RTB/BHIZ # 14 - RETURN TO BASIC AND BRANCH HI ZERO.
040861,000369: 6410 12722 TCF CALL/ITA # 15 - CALL AND STORE QPRET.
040862,000370: 6411 12731 TCF SW/ # 16 - SWITCH INSTRUCTIONS AND AVAILABLE.
040863,000371:
040864,000372: 6412 12672 TCF BOV(B) # 17 - BRANCH ON OVERFLOW TO BASIC OR INT.
040865,000373:
Page 904 |
040867,000375: # THE FOLLOWING JUMP TABLE APPIES TO UNARY INSTRUCTIONS.
040868,000376:
040869,000377:
040870,000378: 00,2000 BANK 0 # 00 - EXIT - DETECTED EARLIER.
040871,000379: 00,2000 13155 UNAJUMP TCF SQRT # 01 - SQUARE ROOT.
040872,000380: 00,2001 13477 TCF SINE # 02 - SIN.
040873,000381: 00,2002 13466 TCF COSINE # 03 - COS.
040874,000382: 00,2003 13557 TCF ARCSIN # 04 - ARC SIN.
040875,000383: 00,2004 13561 TCF ARCCOS # 05 - ARC COS.
040876,000384: 00,2005 13142 TCF DSQ # 06 - DP SQUARE.
040877,000385: 00,2006 12116 TCF ROUND # 07 - ROUND TO DP.
040878,000386:
040879,000387: 00,2007 17714 TCF COMP # 10 - COMPLEMENT VECTOR OR SCALAR.
040880,000388:
040881,000389: 00,2010 13200 TCF VDEF # 11 - VECTOR DEFINE.
040882,000390: 00,2011 12770 TCF UNIT # 12 - UNIT VECTOR.
040883,000391: 00,2012 13144 TCF ABVALABS # 13 - LENGTH OF VECTOR OR MAG OF SCALAR.
040884,000392: 00,2013 13214 TCF VSQ # 14 - SQUARE OF LENGTH OF VECTOR.
040885,000393: 00,2014 16413 TCF STADR # 15 - PUSH UP ON STORE CODE.
040886,000394: 00,2015 13244 TCF RVQ # 16 - RETURN VIA QPRET.
040887,000395: 00,2016 13217 TCF PUSH # 17 - PUSH MPAC DOWN.
040888,000396:
Page 905 |
040890,000398: # SECTION 2 LOAD AND STORE PACKAGE.
040891,000399:
040892,000400: # A SET OF EIGHT STORE CODES IS PROVIDED AS THE PRIMARY METHOD OF STORING THE MULTI-PURPOSE
040893,000401: # ACCUMULATOR (MPAC). IF IN THE DANZIG SECTION LOC REFERS TO AN ALGEBRAICALLY POSITIVE WORD, IT IS TAKEN AS A
040894,000402: # STORE CODE WITH A CORRESPONDING ERASABLE ADDRESS. MOST OF THESE CODES ARE TWO ADDRESS, SPECIFYING THAT THE WORD
040895,000403: # FOLLOWING THE STORE CODE IS TO BE USED AS AN ADDRESS FROM WHICH TO RE-LOAD MPAC. FOUR OPTIONS ARE AVAILABLE:
040896,000404:
040897,000405: # 1. STORE STORE MPAC. THE E ADDRESS MAY BE INDEXED.
040898,000406:
040899,000407: # 2. STODL STORE MPAC AND RE-LOAD IT IN DP WITH THE NEXT ADDRESS (THE LOAD MAY BE INDEXED).
040900,000408: # 3. STOVL STORE MPAC AND RE-LOAD A VECTOR (AS ABOVE).
040901,000409: # 4. STCALL STORE AND DO A CALL (BOTH ADDRESSES MUST BE DIRECT HERE).
040902,000410:
040903,000411: # STODL AND STOVL WILL TAKE FROM THE PUSH-DOWN LIST IF NO LOAD ADDRESS IS GIVEN.
040904,000412:
040905,000413:
040906,000414:
040907,000415: 6413 BLOCK 3
040908,000416:
040909,000417: 6413 30155 STADR CA BANKSET # THE STADR CODE (PUSHUP UP ON STORE
040910,000418: 6414 54004 TS FBANK # ADDRESS) ENTERS HERE.
040911,000419: 6415 24154 INCR LOC
040912,000420: 6416 50154 ITR1 INDEX LOC # THE STORECODE WAS STORED COMPLEMENTED TO
040913,000421: 6417 40000 CS 0 # MAKE IT LOOK LIKE AN OPCODE PAIR.
040914,000422: 6420 67763 AD NEGONE # (YUL CANT REMOVE 1 BECAUSE OF EARLY CCS)
040915,000423:
040916,000424: 6421 54106 DOSTORE TS ADDRWD
040917,000425: 6422 74552 MASK LOW11 # ENTRY FROM DISPATCHER. SAVE THE ERASABLE
040918,000426: 6423 56106 XCH ADDRWD # ADDRESS AND JUMP ON THE STORE CODE NO.
040919,000427: 6424 75673 MASK B12T14
040920,000428: 6425 00006 EXTEND
040921,000429: 6426 77751 MP BIT5 # EACH TRANSFER VECTOR ENTRY IS TWO WORDS.
040922,000430:
040923,000431: 6427 54023 TS EDOP # MAYBE 2ND OP WAS LEFT OVER FROM BRANCH
040924,000432: 6430 50000 ITR0 INDEX A
040925,000433: 6431 16432 TCF STORJUMP
040926,000434:
Page 906 |
040928,000436: # STORE CODE JUMP TABLE. CALLS THE APPROPRIATE STORING ROUTINE AND EXITS TO DANZIG OR TO ADDRESS WITH
040929,000437:
040930,000438: # A SUPPLIED OPERATION CODE.
040931,000439:
040932,000440: 6432 06462 STORJUMP TC STORE # STORE.
040933,000441: 6433 16123 TCF NEWOPS -1 # PICK UP NEW OP CODE(S).
040934,000442: 6434 06454 TC STORE,1
040935,000443: 6435 16123 TCF NEWOPS -1
040936,000444: 6436 06457 TC STORE,2
040937,000445: 6437 16123 TCF NEWOPS -1
040938,000446:
040939,000447: 6440 06462 TC STORE # STODL.
040940,000448: 6441 16520 TCF DODLOAD
040941,000449:
040942,000450: 6442 06462 TC STORE # STODL WITH INDEXED LOAD ADDRESS.
040943,000451: 6443 16200 TCF DODLOAD*
040944,000452:
040945,000453: 6444 06462 TC STORE # STOVL.
040946,000454: 6445 16523 TCF DOVLOAD
040947,000455:
040948,000456: 6446 06462 TC STORE # STOVL WITH INDEXED LOAD ADDRESS.
040949,000457: 6447 16526 TCF DOVLOAD*
040950,000458: 6450 06462 TC STORE # STOTC.
040951,000459: 6451 35362 CAF CALLCODE
040952,000460:
040953,000461: 6452 54020 TS CYR
040954,000462: 6453 16306 TCF 15BITADR # GET A 15 BIT ADDRESS.
040955,000463:
Page 907 |
040957,000465: # STORE CODE ADDRESS PROCESSOR.
040958,000466:
040959,000467: 6454 50110 STORE,1 INDEX FIXLOC
040960,000468: 6455 40046 CS X1
040961,000469: 6456 16461 TCF PRESTORE
040962,000470:
040963,000471:
040964,000472: 6457 50110 STORE,2 INDEX FIXLOC
040965,000473: 6460 40047 CS X2
040966,000474: 6461 26106 PRESTORE ADS ADDRWD # RESULTANT ADDRESS IS IN ERASABLE.
040967,000475:
040968,000476: 6462 40106 STORE CS ADDRWD
040969,000477: 6463 65371 AD DEC45
040970,000478: 6464 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
040971,000479: 6465 30110 CA FIXLOC # YES.
040972,000480: 6466 16473 TCF AHEAD5
040973,000481: 6467 35370 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
040974,000482: 6470 56106 XCH ADDRWD
040975,000483: 6471 54003 TS EBANK
040976,000484:
040977,000485: 6472 74553 MASK LOW8
040978,000486: 6473 26106 AHEAD5 ADS ADDRWD
040979,000487:
Page 908 |
040981,000489: # STORING ROUTINES. STORE DP, TP, OR VECTOR AS INDICATED BY MODE.
040982,000490:
040983,000491:
040984,000492: 6474 00006 STARTSTO EXTEND # MPAC,+1 MUST BE STORED IN ANY EVENT.
040985,000493: # ITRACE (5) REFERS TO "STARTSTO".
040986,000494: 6475 30145 DCA MPAC
040987,000495: 6476 50106 INDEX ADDRWD
040988,000496: 6477 52001 DXCH 0
040989,000497:
040990,000498: 6500 10153 CCS MODE
040991,000499: 6501 16514 TCF TSTORE
040992,000500: 6502 00002 TC Q
040993,000501:
040994,000502: 6503 00006 VSTORE EXTEND
040995,000503: 6504 30150 DCA MPAC +3
040996,000504: 6505 50106 INDEX ADDRWD
040997,000505: 6506 52003 DXCH 2
040998,000506:
040999,000507: 6507 00006 EXTEND
041000,000508: 6510 30152 DCA MPAC +5
041001,000509: 6511 50106 INDEX ADDRWD
041002,000510: 6512 52005 DXCH 4
041003,000511: 6513 00002 TC Q
041004,000512:
041005,000513: 6514 30146 TSTORE CA MPAC +2
041006,000514: 6515 50106 INDEX ADDRWD
041007,000515:
041008,000516: 6516 54002 TS 2
041009,000517: 6517 00002 TC Q
041010,000518:
Page 909 |
041012,000520: # ROUTINES TO BEGIN PROCESSING OF THE SECOND ADDRESS ASSOCIATED WITH ALL STORE-TYPE CODES EXCEPT STORE
041013,000521: # ITSELF.
041014,000522:
041015,000523: 6520 35363 DODLOAD CAF DLOADCOD
041016,000524: 6521 54020 TS CYR
041017,000525: 6522 16142 TCF DIRADRES # GO GET A DIRECT ADDRESS.
041018,000526:
041019,000527: 6523 37737 DOVLOAD CAF VLOADCOD
041020,000528:
041021,000529: 6524 54020 TS CYR
041022,000530: 6525 16142 TCF DIRADRES
041023,000531:
041024,000532: 6526 36143 DOVLOAD* CAF VLOAD*
041025,000533: 6527 16201 TCF DODLOAD* +1 # PROLOGUE TO INDEX ROUTINE.
041026,000534:
Page 910 |
041028,000536: # THE FOLLOWING LOAD INSTRUCTIONS ARE PROVIDED FOR LOADING THE MULTI-PURPOSE ACCUMULATOR MPAC.
041029,000537:
041030,000538: 6530 00006 DLOAD EXTEND
041031,000539: 6531 50106 INDEX ADDRWD
041032,000540: 6532 30001 DCA 0 # PICK UP DP ARGUMENT AND LEAVE IT IN
041033,000541: 6533 52145 SLOAD2 DXCH MPAC # MPAC,+1, SETTING MPAC +2 TO ZERO. THE
041034,000542: 6534 37761 CAF ZERO # CONTENTS OF THE OTHER FOUR REGISTERS OF
041035,000543: 6535 54146 TS MPAC +2 # MPAC ARE IRRELEVANT.
041036,000544: 6536 16114 TCF NEWMODE # DECLARE DOUBLE PRECISION MODE.
041037,000545:
041038,000546: 6537 50106 TLOAD INDEX ADDRWD
041039,000547: 6540 30002 CA 2 # LOAD A TRIPLE PRECISION ARGUMENT INTO
041040,000548: 6541 54146 TS MPAC +2 # THE FIRST THREE MPAC REGISTERS, WITH THE
041041,000549: 6542 00006 EXTEND # CONTENTS OF THE OTHER FOUR IRRELEVANT.
041042,000550:
041043,000551: 6543 50106 INDEX ADDRWD
041044,000552: 6544 30001 DCA 0
041045,000553: 6545 52145 DXCH MPAC
041046,000554: 6546 37755 CAF ONE
041047,000555: 6547 16114 TCF NEWMODE # DECLARE TRIPLE PRECISION MODE.
041048,000556:
041049,000557: 6550 22007 SLOAD ZL # LOAD A SINGLE PRECISION NUMBER INTO
041050,000558: 6551 50106 INDEX ADDRWD # MPAC, SETTING MPAC+1,2 TO ZERO. THE
041051,000559: 6552 30000 CA 0 # CONTENTS OF THE REMAINING MPAC REGISTERS
041052,000560: 6553 16533 TCF SLOAD2 # ARE IRRELEVANT.
041053,000561:
041054,000562: 6554 00006 VLOAD EXTEND # LOAD A DOUBLE PRECISION VECTOR INTO
041055,000563: 6555 50106 INDEX ADDRWD # MPAC,+1, MPAC+3,4, AND MPAC+5,6. THE
041056,000564: 6556 30001 DCA 0 # CONTENTS OF MPAC +2 ARE IRRELEVANT.
041057,000565: 6557 52145 DXCH MPAC
041058,000566:
041059,000567: 6560 00006 ENDVLOAD EXTEND # PDVL COMES HERE TO FINISH UP FOR DP, TP.
041060,000568: 6561 50106 INDEX ADDRWD
041061,000569: 6562 30003 DCA 2
041062,000570: 6563 52150 DXCH MPAC +3
041063,000571:
041064,000572: 6564 00006 +4 EXTEND # TPDVL FINISHES HERE.
041065,000573: 6565 50106 INDEX ADDRWD
041066,000574:
041067,000575: 6566 30005 DCA 4
041068,000576: 6567 52152 DXCH MPAC +5
041069,000577:
041070,000578: 6570 47755 CS ONE # DECLARE VECTOR MODE.
041071,000579: 6571 16114 TCF NEWMODE
041072,000580:
Page 911 |
041074,000582: # THE FOLLOWING INSTRUCTIONS ARE PROVIDED FOR STORING OPERANDS IN THE PUSHDOWN LIST:
041075,000583:
041076,000584: # 1. PUSH PUSHDOWN AND NO LOAD.
041077,000585: # 2. PDDL PUSHDOWN AND DOUBLE PRECISION LOAD.
041078,000586: # 3. PDVL PUSHDOWN AND VECTOR LOAD.
041079,000587:
041080,000588: 6572 00006 PDDL EXTEND
041081,000589: 6573 50106 INDEX ADDRWD # LOAD MPAC,+1, PUSHING THE FORMER
041082,000590: 6574 30001 DCA 0 # CONTENTS DOWN.
041083,000591: 6575 52145 DXCH MPAC
041084,000592: 6576 50156 INDEX PUSHLOC
041085,000593: 6577 52001 DXCH 0
041086,000594:
041087,000595: 6600 50153 INDEX MODE # ADVANCE THE PUSHDOWN POINTER APPRO-
041088,000596: 6601 36300 CAF NO.WDS # PRIATELY.
041089,000597: 6602 26156 ADS PUSHLOC
041090,000598:
041091,000599: 6603 10153 CCS MODE
041092,000600: 6604 16621 TCF ENDTPUSH
041093,000601:
041094,000602: 6605 16617 TCF ENDDPUSH
041095,000603:
041096,000604: 6606 54153 TS MODE # NOW DP.
041097,000605: 6607 54146 ENDVPUSH TS MPAC +2
041098,000606: 6610 52150 DXCH MPAC +3 # PUSH DOWN THE REST OF THE VECTOR HERE.
041099,000607: 6611 50156 INDEX PUSHLOC
041100,000608: 6612 51775 DXCH 0 -4
041101,000609:
041102,000610: 6613 52152 DXCH MPAC +5
041103,000611: 6614 50156 INDEX PUSHLOC
041104,000612:
041105,000613: 6615 51777 DXCH 0 -2
041106,000614:
041107,000615: 6616 16115 TCF DANZIG
041108,000616:
041109,000617: 6617 54146 ENDDPUSH TS MPAC +2 # SET MPAC +2 TO ZERO AND EXIT ON DP.
041110,000618: 6620 16115 TCF DANZIG
041111,000619:
041112,000620: 6621 54153 ENDTPUSH TS MODE
041113,000621: 6622 56146 XCH MPAC +2 # ON TRIPLE, SET MPAC +2 TO ZERO, PUSHING
041114,000622: 6623 50156 +2 INDEX PUSHLOC # DOWN THE OLD CONTENTS
041115,000623: 6624 53777 TS 0 -1
041116,000624: 6625 16115 TCF DANZIG
041117,000625:
Page 912 |
041119,000627: # PDVL - PUSHDOWN AND VECTOR LOAD.
041120,000628:
041121,000629:
041122,000630: 6626 00006 PDVL EXTEND # RELOAD MPAC AND PUSH DOWN ITS CONTENTS.
041123,000631: 6627 50106 INDEX ADDRWD
041124,000632: 6630 30001 DCA 0
041125,000633: 6631 52145 DXCH MPAC
041126,000634: 6632 50156 INDEX PUSHLOC
041127,000635: 6633 52001 DXCH 0
041128,000636:
041129,000637: 6634 50153 INDEX MODE # ADVANCE THE PUSHDOWN POINTER.
041130,000638: 6635 36300 CAF NO.WDS
041131,000639: 6636 26156 ADS PUSHLOC
041132,000640:
041133,000641: 6637 10153 CCS MODE # TEST PAST MODE.
041134,000642: 6640 16657 TCF TPDVL
041135,000643: 6641 16560 TCF ENDVLOAD # JUST LOAD LAST FOUR REGISTERS ON DP.
041136,000644:
041137,000645: 6642 00006 VPDVL EXTEND # PUSHDOWN AND RE-LOAD LAST TWO COMPONENTS
041138,000646: 6643 50106 INDEX ADDRWD
041139,000647: 6644 30003 DCA 2
041140,000648: 6645 52150 DXCH MPAC +3
041141,000649: 6646 50156 INDEX PUSHLOC
041142,000650: 6647 51775 DXCH 0 -4
041143,000651:
041144,000652: 6650 00006 EXTEND
041145,000653:
041146,000654: 6651 50106 INDEX ADDRWD
041147,000655: 6652 30005 DCA 4
041148,000656: 6653 52152 DXCH MPAC +5
041149,000657: 6654 50156 INDEX PUSHLOC
041150,000658: 6655 51777 DXCH 0 -2
041151,000659:
041152,000660: 6656 16115 TCF DANZIG
041153,000661:
041154,000662: 6657 00006 TPDVL EXTEND # ON TP, WE MUST LOAD THE Y COMPONENT
041155,000663: 6660 50106 INDEX ADDRWD # BEFORE STORING MPAC +2 INCASE THIS IS A
041156,000664:
041157,000665: 6661 30003 DCA 2 # PUSHUP.
041158,000666: 6662 52150 DXCH MPAC +3
041159,000667:
041160,000668: 6663 30146 CA MPAC +2
041161,000669: 6664 50156 INDEX PUSHLOC # IN DP.
041162,000670: 6665 53777 TS 0 -1
041163,000671: 6666 16564 TCF ENDVLOAD +4
041164,000672:
041165,000673: # SSP (STORE SINGLE PRECISION) IS EXECUTED HERE.
041166,000674:
041167,000675: 6667 24154 SSP INCR LOC # PICK UP THE WORD FOLLOWING THE GIVEN
041168,000676: 6670 50154 INDEX LOC # ADDRESS AND STORE IT AT X.
041169,000677:
041170,000678: 6671 30000 CA 0
041171,000679: 6672 50106 STORE1 INDEX ADDRWD # SOME INDEX AND MISCELLANEOUS OPS END
041172,000680: 6673 54000 TS 0 # HERE.
Page 913 |
041174,000682: 6674 16115 TCF DANZIG
041175,000683:
Page 914 |
041177,000685: # SEQUENCE CHANGING AND SUBROUTINE CALLING OPTIONS.
041178,000686:
041179,000687: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR SEQUENCING CHANGING, BRANCHING, AND CALLING SUBROUTINES:
041180,000688:
041181,000689: # 1. GOTO GO TO.
041182,000690: # 2. CALL CALL SUBROUTINE SETTING QPRET.
041183,000691: # 3. CGOTO COMPUTED GO TO.
041184,000692: # 4. CCALL COMPUTED CALL.
041185,000693: # 7. BPL BRANCH IF MPAC POSITIVE OR ZERO.
041186,000694: # 8. BZE BRANCH IF MPAC ZERO.
041187,000695: # 9. BMN BRANCH IF MPAC NEGATIVE NON-ZERO.
041188,000696:
041189,000697: 6675 24154 CCALL INCR LOC # MAINTAIN LOC FOR QPRET COMPUTATION.
041190,000698: 6676 50154 INDEX LOC
041191,000699:
041192,000700: 6677 30000 CAF 0 # GET BASE ADDRESS OF CADR LIST.
041193,000701: 6700 50106 INDEX ADDRWD
041194,000702: 6701 60000 AD 0 # ADD INCREMENT.
041195,000703: 6702 54004 TS FBANK # SELECT DESIRED CADR.
041196,000704: 6703 75356 MASK LOW10
041197,000705: 6704 50000 INDEX A
041198,000706: 6705 32000 CAF 10000
041199,000707: 6706 54107 TS POLISH
041200,000708:
041201,000709: 6707 30155 CALL CA BANKSET # FOR ANY OF THE CALL OPTIONS, MAKE UP THE
041202,000710:
041203,000711: 6710 76331 MASK BANKMASK # ADDRESS OF THE NEXT OP-CODE PAIR/STORE
041204,000712: 6711 66331 AD BANKMASK # CODE AND LEAVE IT IN QPRET. NOTE THAT
041205,000713: 6712 60154 AD LOC # BANKMASK = -(2000 - 1).
041206,000714: 6713 50110 INDEX FIXLOC
041207,000715: 6714 54052 TS QPRET
041208,000716:
041209,000717: 6715 30107 GOTO CA POLISH # BASIC BRANCHING SEQUENCE.
041210,000718: 6716 75367 +1 MASK HIGH4
041211,000719: 6717 00006 EXTEND
041212,000720: 6720 16731 BZF GOTOERS # SEE IF ADDRESS POINTS TO FIXED OR ERAS.
041213,000721: 6721 30155 +4 CA BANKSET # SET EBANK PART OF BBANK. NEXT, SET UP
041214,000722: 6722 54006 TS BBANK # FBANK. THE COMBINATION IS PICKED UP &
041215,000723:
041216,000724: 6723 30107 CA POLISH # PUT INTO BANKSET AT INTPRET +2.
041217,000725: 6724 54004 TS FBANK
041218,000726: 6725 75356 MASK LOW10
041219,000727: 6726 67743 AD 2K
041220,000728: 6727 54154 TS LOC
041221,000729: 6730 16105 TCF INTPRET +2
041222,000730:
Page 915 |
041224,000732: 6731 E3,1400 EBANK= 1400 # SO YUL DOESN'T CUSS THE "CA 1400" BELOW.
041225,000733:
041226,000734: 6731 30107 GOTOERS CA POLISH # THE GIVEN ADDRESS IS IN ERASABLE - SEE
041227,000735: 6732 66305 AD -ENDVAC # IF RELATIVE TO THE WORK AREA.
041228,000736: 6733 10000 CCS A
041229,000737: 6734 30107 CA POLISH # GENERAL ERASABLE.
041230,000738:
041231,000739: 6735 16744 TCF GOTOGE
041232,000740:
041233,000741: 6736 30110 CA FIXLOC # WORK AREA.
041234,000742: 6737 60107 AD POLISH
041235,000743: 6740 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
041236,000744: 6741 30000 CA 0 # THE BRANCH ADDRESS.
041237,000745: 6742 54107 TS POLISH
041238,000746: 6743 16716 TCF GOTO +1 # ALLOWS ARBITRARY INDIRECTNESS LEVELS.
041239,000747:
041240,000748: 6744 54003 GOTOGE TS EBANK
041241,000749: 6745 74553 MASK LOW8
041242,000750: 6746 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
041243,000751:
041244,000752: 6747 31400 CA 1400 # THE BRANCH ADDRESS.
041245,000753: 6750 54107 TS POLISH
041246,000754: 6751 16716 TCF GOTO +1
041247,000755:
041248,000756: 6752 50154 CGOTO INDEX LOC # COMPUTED GO TO. PICK UP ADDRESS OF CADR
041249,000757: 6753 30001 CA 1 # LIST.
041250,000758: 6754 50106 INDEX ADDRWD # ADD MODIFIER.
041251,000759: 6755 60000 AD 0
041252,000760: 6756 54004 TS FBANK # SELECT GOTO ADDRESS.
041253,000761: 6757 75356 MASK LOW10
041254,000762:
041255,000763: 6760 50000 INDEX A
041256,000764: 6761 32000 CA 10000
041257,000765: 6762 54107 TS POLISH
041258,000766: 6763 16716 TCF GOTO +1 # WITH ADDRESS IN A.
041259,000767:
041260,000768: 6764 30155 SWBRANCH CA BANKSET # SWITCH INSTRUCTIONS WHICH ELECT TO
041261,000769: 6765 54004 TS FBANK # BRANCH COME HERE TO DO SO.
041262,000770: 6766 50154 INDEX LOC
041263,000771: 6767 30001 CA 1
041264,000772: 6770 54107 TS POLISH
041265,000773: 6771 16716 TCF GOTO +1
041266,000774:
Page 916 |
041268,000776: # TRIPLE PRECISION BRANCHING ROUTINE. IF CALLING TC IS AT L, RETURN IS AS FOLLOWS:
041269,000777:
041270,000778:
041271,000779: # L+1 IF MPAC IS GREATER THAN ZERO.
041272,000780: # L+2 IF MPAC IS EQUAL TO +0 OR -0.
041273,000781: # L+3 IF MPAC IS LESS THAN ZERO.
041274,000782:
041275,000783:
041276,000784: 6772 10144 BRANCH CCS MPAC
041277,000785: 6773 00002 TC Q
041278,000786: 6774 16776 TCF +2 # ON ZERO.
041279,000787: 6775 17010 TCF NEG
041280,000788:
041281,000789:
041282,000790: 6776 10145 CCS MPAC +1
041283,000791: 6777 00002 TC Q
041284,000792: 7000 17002 TCF +2
041285,000793: 7001 17010 TCF NEG
041286,000794:
041287,000795: 7002 10146 CCS MPAC +2
041288,000796: 7003 00002 TC Q
041289,000797: 7004 17006 TCF +2
041290,000798: 7005 17010 TCF NEG
041291,000799:
041292,000800: 7006 50002 Q+1 INDEX Q
041293,000801:
041294,000802: 7007 00001 TC 1
041295,000803:
041296,000804: 7010 50002 NEG INDEX Q # IF FIRST NON-ZERO REGISTER WAS NEGATIVE.
041297,000805: 7011 00002 TC 2
041298,000806:
041299,000807:
041300,000808:
041301,000809: 7012 7010 Q+2 = NEG
041302,000810:
041303,000811: # ITRACE (3) REFERS TO "EXIT".
041304,000812:
041305,000813: 7012 30155 EXIT CA BANKSET # RESTORE USER'S BANK SETTING, AND LEAVE
041306,000814: 7013 54006 TS BBANK # INTERPRETIVE MODE.
041307,000815: 7014 50154 INDEX LOC
041308,000816: 7015 10001 TCF 1
041309,000817:
Page 917 |
041311,000819: # SECTION 3 - ADD/SUBTRACT PACKAGE.
041312,000820:
041313,000821: # THE FOLLOWING OPERATIONS ARE PROVIDED FOR ADDING TO AND SUBTRACTING FROM THE MULTI-PURPOSE ACCUMULATOR
041314,000822: # MPAC:
041315,000823:
041316,000824: # 1. DAD DOUBLE PRECISION ADD.
041317,000825: # 2. DSU DOUBLE PRECISION SUBTRACT.
041318,000826: # 3. BDSU DOUBLE PRECISION SUBTRACT FROM.
041319,000827:
041320,000828:
041321,000829: # 4. TAD TRIPLE PRECISION ADD.
041322,000830:
041323,000831: # 5. VAD VECTOR ADD.
041324,000832: # 6. VSU VECTOR SUBTRACT.
041325,000833: # 7. BVSU VECTOR SUBTRACT FROM.
041326,000834:
041327,000835: # THE INTERPRETIVE OVERFLOW INDICATOR OVFIND IS SET NON-ZERO IF OVERFLOW OCCURS IN ANY OF THE ABOVE.
041328,000836:
041329,000837:
041330,000838:
041331,000839: 7016 00006 VAD EXTEND
041332,000840: 7017 50106 INDEX ADDRWD
041333,000841: 7020 30003 DCA 2
041334,000842: 7021 20150 DAS MPAC +3
041335,000843: 7022 00006 EXTEND # CHECK OVERFLOW.
041336,000844: 7023 17025 BZF +2
041337,000845: 7024 07072 TC OVERFLOW
041338,000846:
041339,000847: 7025 00006 EXTEND
041340,000848: 7026 50106 INDEX ADDRWD
041341,000849: 7027 30005 DCA 4
041342,000850: 7030 20152 DAS MPAC +5
041343,000851:
041344,000852: 7031 00006 EXTEND
041345,000853: 7032 17034 BZF +2
041346,000854: 7033 07072 TC OVERFLOW
041347,000855:
041348,000856: 7034 00006 DAD EXTEND
041349,000857: 7035 50106 INDEX ADDRWD
041350,000858: 7036 30001 DCA 0
041351,000859: 7037 20145 ENDVXV DAS MPAC # VXV FINISHES HERE.
041352,000860: 7040 00006 EXTEND
041353,000861: 7041 16115 BZF DANZIG
041354,000862:
041355,000863: 7042 07072 TC OVERFLOW
041356,000864: 7043 16115 TCF DANZIG
041357,000865:
Page 918 |
041359,000867: 7044 00006 VSU EXTEND
041360,000868:
041361,000869: 7045 50106 INDEX ADDRWD
041362,000870: 7046 40003 DCS 2
041363,000871: 7047 20150 DAS MPAC +3
041364,000872: 7050 00006 EXTEND
041365,000873: 7051 17053 BZF +2
041366,000874: 7052 07072 TC OVERFLOW
041367,000875:
041368,000876: 7053 00006 EXTEND
041369,000877: 7054 50106 INDEX ADDRWD
041370,000878: 7055 40005 DCS 4
041371,000879: 7056 20152 DAS MPAC +5
041372,000880: 7057 00006 EXTEND
041373,000881:
041374,000882: 7060 17062 BZF +2
041375,000883: 7061 07072 TC OVERFLOW
041376,000884:
041377,000885: 7062 00006 DSU EXTEND
041378,000886: 7063 50106 INDEX ADDRWD
041379,000887: 7064 40001 DCS 0
041380,000888: 7065 20145 DAS MPAC
041381,000889: 7066 00006 EXTEND
041382,000890: 7067 16115 BZF DANZIG
041383,000891: 7070 07072 TC OVERFLOW
041384,000892:
041385,000893: 7071 16115 TCF DANZIG
041386,000894:
041387,000895: 7072 37755 OVERFLOW CAF ONE # SUBROUTINE TO TURN OVFIND ON.
041388,000896: 7073 17215 TCF SETOVF2
041389,000897:
Page 919 |
041391,000899: 7074 00006 BVSU EXTEND
041392,000900: 7075 50106 INDEX ADDRWD
041393,000901: 7076 30003 DCA 2
041394,000902: 7077 52150 DXCH MPAC +3
041395,000903: 7100 00006 EXTEND
041396,000904: 7101 40001 DCOM
041397,000905:
041398,000906: 7102 20150 DAS MPAC +3
041399,000907: 7103 00006 EXTEND
041400,000908: 7104 17106 BZF +2
041401,000909: 7105 07072 TC OVERFLOW
041402,000910:
041403,000911: 7106 00006 EXTEND
041404,000912: 7107 50106 INDEX ADDRWD
041405,000913: 7110 30005 DCA 4
041406,000914: 7111 52152 DXCH MPAC +5
041407,000915: 7112 00006 EXTEND
041408,000916: 7113 40001 DCOM
041409,000917: 7114 20152 DAS MPAC +5
041410,000918:
041411,000919: 7115 00006 EXTEND
041412,000920: 7116 17120 BZF +2
041413,000921: 7117 07072 TC OVERFLOW
041414,000922:
041415,000923: 7120 00006 BDSU EXTEND
041416,000924: 7121 50106 INDEX ADDRWD
041417,000925: 7122 30001 DCA 0
041418,000926: 7123 52145 DXCH MPAC
041419,000927: 7124 00006 EXTEND
041420,000928: 7125 40001 DCOM
041421,000929:
041422,000930: 7126 20145 DAS MPAC
041423,000931: 7127 00006 EXTEND
041424,000932: 7130 16115 BZF DANZIG
041425,000933: 7131 07072 TC OVERFLOW
041426,000934: 7132 16115 TCF DANZIG
041427,000935:
Page 920 |
041429,000937: # TRIPLE PRECISION ADD ROUTINE.
041430,000938:
041431,000939:
041432,000940: 7133 00006 TAD EXTEND
041433,000941: 7134 50106 INDEX ADDRWD
041434,000942: 7135 30002 DCA 1 # ADD MINOR PARTS FIRST.
041435,000943: 7136 20146 DAS MPAC +1
041436,000944: 7137 50106 INDEX ADDRWD
041437,000945: 7140 60000 AD 0
041438,000946: 7141 60144 AD MPAC
041439,000947: 7142 54144 TS MPAC
041440,000948: 7143 16115 TCF DANZIG
041441,000949:
041442,000950: 7144 54111 SETOVF TS OVFIND # SET OVFIND IF SUCH OCCURS.
041443,000951: 7145 16115 TCF DANZIG
041444,000952:
Page 921 |
041446,000954: # ARITHMETIC SUBROUTINES REQUIRED IN FIXED-FIXED.
041447,000955:
041448,000956: # 1. DMPSUB DOUBLE PRECISION MULTIPLY. MULTIPLY THE CONTENTS OF MPAC,+1 BY THE DP WORD WHOSE ADDRESS
041449,000957: # IS IN ADDRWD AND LEAVE A TRIPLE PRECISION RESULT IN MPAC.
041450,000958: # 2. ROUNDSUB ROUND THE TRIPLE PRECISON CONTENTS OF MPAC TO DOUBLE PRECISION.
041451,000959: # 3. DOTSUB TAKE THE DOT PRODUCT OF THE VECTOR IN MPAC AND THE VECTOR WHOSE ADDRESS IS IN ADDRWD
041452,000960: # AND LEAVE THE TRIPLE PRECISION RESULT IN MPAC.
041453,000961: # 4. POLY USING THE CONTENTS OF MPAC AS A DP ARGUMENT, EVALUATE THE POLYNOMIAL WHOSE DEGREE AND
041454,000962:
041455,000963: # COEFFICIENTS IMMEDIATELY FOLLOW THE TC POLY INSTRUCTION (SEE ROUTINE FOR DETAILS.)
041456,000964:
041457,000965:
041458,000966:
041459,000967: 7146 50002 DMP INDEX Q # BASIC SUBROUTINE FOR USE BY PINBALL, ETC
041460,000968: 7147 30000 CAF 0 # ADRES OF ARGUMENT FOLLOWS TC DMP .
041461,000969: 7150 24002 INCR Q
041462,000970: 7151 54106 -1 TS ADDRWD # (PROLOGUE FOR SETTING ADDRWD.)
041463,000971:
041464,000972: 7152 50106 DMPSUB INDEX ADDRWD # GET MINOR PART OF OPERAND AT C(ADDRWD).
041465,000973:
041466,000974: 7153 30001 CA 1
041467,000975: 7154 54146 TS MPAC +2 # THIS WORKS FOR SQUARING MPAC AS WELL.
041468,000976: 7155 37761 CAF ZERO # SET MPAC +1 TO ZERO SO WE CAN ACCUMULATE
041469,000977: 7156 56145 XCH MPAC +1 # THE PARTIAL PRODUCTS WITH DAS
041470,000978: 7157 54125 TS MPTEMP # INSTRUCTIONS.
041471,000979: 7160 00006 EXTEND
041472,000980: 7161 70146 MP MPAC +2 # MINOR OF MPAC X MINOR OF C(ADDRWD).
041473,000981:
041474,000982: 7162 56146 XCH MPAC +2 # DISCARD MINOR PART OF ABOVE RESULT AND
041475,000983: 7163 00006 EXTEND # FORM MAJOR OF MPAC X MINOR OF C(ADDRWD).
041476,000984: 7164 70144 MP MPAC
041477,000985: 7165 20146 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
041478,000986:
041479,000987: 7166 50106 INDEX ADDRWD # GET MAJOR PART OF ARGUMENT AT C(ADDRWD).
041480,000988: 7167 30000 CA 0
041481,000989: 7170 56125 XCH MPTEMP # SAVE AND BRING OUT MINOR OF MPAC.
041482,000990: 7171 00006 EXTEND
041483,000991: 7172 70125 MP MPTEMP # MAJOR OF C(ADDRWD) X MINOR OF MPAC.
041484,000992: 7173 20146 DAS MPAC +1 # ACCUMULATE, SETTING A TO NET OVERFLOW.
041485,000993:
041486,000994: 7174 56144 XCH MPAC # SETTING MPAC TO 0 OR +-1.
041487,000995: 7175 00006 EXTEND
041488,000996:
041489,000997: 7176 70125 MP MPTEMP # MAJOR OF MPAC X MAJOR OF C(ADDRWD).
041490,000998: 7177 20145 DAS MPAC # GUARANTEED NO OVERFLOW.
041491,000999: 7200 00002 TC Q # 49 MCT = .573 MS. INCLUDING RETURN.
041492,001000:
Page 922 |
041494,001002: # ROUND MPAC TO DOUBLE PRECISION, SETTING OVFIND ON THE RARE EVENT OF OVERFLOW.
041495,001003:
041496,001004: 7201 37761 ROUNDSUB CAF ZERO # SET MPAC +2 = 0 FOR SCALARS AND CHANGE
041497,001005: 7202 54153 +1 TS MODE # MODE TO DP.
041498,001006:
041499,001007: 7203 56146 VROUND XCH MPAC +2 # BUT WE NEEDNT TAKE THE TIME FOR VECTORS.
041500,001008: 7204 60000 DOUBLE
041501,001009: 7205 54001 TS L
041502,001010: 7206 00002 TC Q
041503,001011:
041504,001012: 7207 60145 AD MPAC +1 # ADD ROUNDING BIT IF MPAC +2 WAS GREATER
041505,001013: 7210 54145 TS MPAC +1 # THAN .5 IN MAGNITUDE.
041506,001014: 7211 00002 TC Q
041507,001015:
041508,001016:
041509,001017: 7212 60144 AD MPAC # PROPAGATE INTERFLOW.
041510,001018: 7213 54144 TS MPAC
041511,001019: 7214 00002 TC Q
041512,001020:
041513,001021: 7215 54111 SETOVF2 TS OVFIND # (RARE).
041514,001022: 7216 00002 TC Q
041515,001023:
Page 923 |
041517,001025: # THE DOT PRODUCT SUBROUTINE USUALLY FORMS THE DOT PRODUCT OF THE VECTOR IN MPAC WITH A STANDARD SIX
041518,001026: # REGISTER VECTOR WHOSE ADDRESS IS IN ADDRWD. IN THIS CASE C(DOTINC) ARE SET TO 2. VXM, HOWEVER, SETS C(DOTINC) TO
041519,001027: # 6 SO THAT DOTSUB DOTS MPAC WITH A COLUMN VECTOR OF THE MATRIX IN QUESTION IN THIS CASE.
041520,001028:
041521,001029:
041522,001030:
041523,001031: 7217 37754 PREDOT CAF TWO # PROLOGUE TO SET DOTINC TO 2.
041524,001032: 7220 54126 TS DOTINC
041525,001033:
041526,001034: 7221 00006 DOTSUB EXTEND
041527,001035: 7222 22127 QXCH DOTRET # SAVE RETURN.
041528,001036: 7223 07152 TC DMPSUB # DOT X COMPONENTS.
041529,001037: 7224 52150 DXCH MPAC +3 # POSITION Y COMPONENT OF MPAC FOR
041530,001038: 7225 52145 DXCH MPAC # MULTIPLICATION WHILE SAVING RESULT IN
041531,001039: 7226 52121 DXCH BUF # THREE WORD BUFFER, BUF.
041532,001040: 7227 30146 CA MPAC +2
041533,001041: 7230 54122 TS BUF +2
041534,001042:
041535,001043: 7231 30126 CA DOTINC # ADVANCE ADDRWD TO Y COMPONENT OF
041536,001044:
041537,001045: 7232 26106 ADS ADDRWD # OTHER ARGUMENT.
041538,001046: 7233 07152 TC DMPSUB
041539,001047: 7234 52146 DXCH MPAC +1 # ACCUMULATE PARTIAL PRODUCTS.
041540,001048: 7235 20122 DAS BUF +1
041541,001049: 7236 60144 AD MPAC
041542,001050: 7237 60120 AD BUF
041543,001051: 7240 54120 TS BUF
041544,001052: 7241 17243 TCF +2
041545,001053: 7242 54111 TS OVFIND # IF OVERFLOW OCCURS.
041546,001054:
041547,001055: 7243 52152 DXCH MPAC +5 # MULTIPLY Z COMPONENTS.
041548,001056: 7244 52145 DXCH MPAC
041549,001057: 7245 30126 CA DOTINC
041550,001058: 7246 26106 ADS ADDRWD
041551,001059: 7247 07152 TC DMPSUB
041552,001060: 7250 52122 ENDDOT DXCH BUF +1 # LEAVE FINAL ACCUMULATION IN MPAC.
041553,001061: 7251 20146 DAS MPAC +1
041554,001062: 7252 60144 AD MPAC
041555,001063: 7253 60120 AD BUF
041556,001064: 7254 54144 TS MPAC
041557,001065: 7255 00127 TC DOTRET
041558,001066:
041559,001067: 7256 54111 TS OVFIND # ON OVERFLOW HERE.
041560,001068:
041561,001069: 7257 00127 TC DOTRET
041562,001070:
Page 924 |
041564,001072: # DOUBLE PRECISION POLYNOMIAL EVALUATOR
041565,001073:
041566,001074:
041567,001075: # N N-1
041568,001076: # THIS ROUTINE EVALUATES A X + A X + ... + A X + A LEAVING THE DP RESULT IN MPAC ON EXIT.
041569,001077: # N N-1 1 0
041570,001078:
041571,001079: # THE ROUTINE HAS TWO ENTRIES
041572,001080:
041573,001081: # 1. ENTRY THRU POWRSERS. THE COEFFICIENTS MAY BE EITHER IN FIXED OR ERASABLE, THE CALL IS BY
041574,001082: # TC POWRSERS, AND THE RETURN IS TO LOC(TC POWRSERS)+1. THE ENTERING DATA MUST BE AS FOLLOWS
041575,001083:
041576,001084: # A SP LOC-3 ADDRESS FOR REFERENCING COEF TABLE
041577,001085:
041578,001086: # L SP N-1 N IS THE DEGREE OF THE POWER SERIES
041579,001087: # MPAC DP X ARGUMENT
041580,001088:
041581,001089: # LOC-2N DP A(0)
041582,001090: # ...
041583,001091: # LOC DP A(N)
041584,001092:
041585,001093: # 2. ENTRY THRU POLY. THE CALL TO POLY AND THE ENTERING DATA MUST BE AS FOLLOWS
041586,001094:
041587,001095: # MPAC DP X ARGUMENT
041588,001096:
041589,001097: # LOC TC POLY
041590,001098:
041591,001099: # LOC+1 SP N-1
041592,001100: # LOC+2 DP A(0)
041593,001101: # ...
041594,001102: # LOC+2N+2 DP A(N) RETURN IS TO LOC+2N+4
041595,001103:
041596,001104: 7260 00006 POWRSERS EXTEND
041597,001105: 7261 22131 QXCH POLYRET # RETURN ADDRESS
041598,001106: 7262 54107 TS POLISH # POWER SERIES ADDRESS
041599,001107: 7263 22130 LXCH POLYCNT # N-1 TO COUNTER
041600,001108: 7264 17275 TCF POLYCOM # SKIP SET UP BY POLY
041601,001109:
041602,001110: 7265 50002 POLY INDEX Q
041603,001111: 7266 30000 CAF 0
041604,001112: 7267 54130 TS POLYCNT # N-1 TO COUNTER
041605,001113: 7270 60000 DOUBLE
041606,001114: 7271 60002 AD Q
041607,001115: 7272 54107 TS POLISH # L(A(N))-3 TO POLISH
041608,001116: 7273 67760 AD FIVE
041609,001117: 7274 54131 TS POLYRET # STORE RETURN ADDRESS
041610,001118:
041611,001119: 7275 35365 POLYCOM CAF LVBUF # INCOMING X WILL BE MOVED TO VBUF, SO
041612,001120: 7276 54106 TS ADDRWD # SET ADDRWD SO DMPSUB WILL MPY BY VBUF.
041613,001121:
041614,001122:
041615,001123: 7277 00006 EXTEND
041616,001124: 7300 50107 INDEX POLISH
041617,001125: 7301 30004 DCA 3
041618,001126:
Page 925 |
041620,001128: 7302 52145 DXCH MPAC # LOAD A(N) INTO MPAC,
041621,001129: 7303 52113 DXCH VBUF # SAVING X IN VBUF
041622,001130: 7304 17310 TCF POLY2
041623,001131:
041624,001132: 7305 54130 POLYLOOP TS POLYCNT # SAVE DECREMENTED LOOP COUNTER
041625,001133: 7306 47754 CS TWO
041626,001134: 7307 26107 ADS POLISH # REGRESS COEFFICIENT POINTER
041627,001135:
041628,001136:
041629,001137: 7310 07152 POLY2 TC DMPSUB # MULTIPLY BY X
041630,001138: 7311 00006 EXTEND
041631,001139: 7312 50107 INDEX POLISH
041632,001140: 7313 30002 DCA 1 # ADD IN NEXT COEFFICIENT
041633,001141: 7314 20145 DAS MPAC # USERS RESPONSIBILITY TO ASSURE NO OVFLOW
041634,001142:
041635,001143: 7315 10130 CCS POLYCNT
041636,001144: 7316 17305 TCF POLYLOOP
041637,001145: 7317 00131 TC POLYRET # RETURN CALLER
041638,001146:
Page 926 |
041640,001148: # MISCELLANEOUS MULTI-PRECISION ROUTINES REQUIRED IN FIXED-FIXED BUT NOT USED BY THE INTERPRETER.
041641,001149:
041642,001150: 7320 00006 TPAGREE EXTEND # FORCE SIGN AGREEMENT AMONG THE TRIPLE-
041643,001151: 7321 22120 QXCH BUF # PRECISION CONTENTS OF MPAC, RETURNING
041644,001152: 7322 06772 TC BRANCH # WITH THE SIGNUM OF THE INPUT IN A.
041645,001153: 7323 17327 TCF ARG+
041646,001154: 7324 17347 TCF ARGZERO
041647,001155:
041648,001156: 7325 47735 CS POSMAX # IF NEGATIVE.
041649,001157: 7326 17330 TCF +2
041650,001158:
041651,001159: 7327 37735 ARG+ CAF POSMAX
041652,001160: 7330 54121 +2 TS BUF +1
041653,001161: 7331 00006 EXTEND
041654,001162:
041655,001163: 7332 24000 AUG A # FORMS +-1.0.
041656,001164: 7333 60146 AD MPAC +2
041657,001165: 7334 54146 TS MPAC +2
041658,001166: 7335 37761 CAF ZERO
041659,001167: 7336 60121 AD BUF +1
041660,001168: 7337 60145 AD MPAC +1
041661,001169: 7340 54145 TS MPAC +1
041662,001170: 7341 37761 CAF ZERO
041663,001171: 7342 60121 AD BUF +1
041664,001172: 7343 60144 AD MPAC
041665,001173:
041666,001174: 7344 54144 ARGZERO2 TS MPAC # ALWAYS SKIPPING UNLESS ARGZERO.
041667,001175: 7345 54145 TS MPAC +1
041668,001176: 7346 00120 TC BUF # RETURN.
041669,001177:
041670,001178: 7347 54146 ARGZERO TS MPAC +2 # SET ALL THREE MPAC REGISTERS TO ZERO.
041671,001179: 7350 17344 TCF ARGZERO2
041672,001180:
041673,001181: # SHORTMP MULTIPLIES THE TP CONTENTS OF MPAC BY THE SINGLE PRECISION NUMBER ARRIVING IN A.
041674,001182:
041675,001183: 7351 54125 SHORTMP TS MPTEMP
041676,001184: 7352 00006 EXTEND
041677,001185: 7353 70146 MP MPAC +2
041678,001186:
041679,001187: 7354 54146 TS MPAC +2
041680,001188: 7355 37761 CAF ZERO # SO SUBSEQUENT DAS WILL WORK.
041681,001189: 7356 56145 XCH MPAC +1
041682,001190: 7357 00006 EXTEND
041683,001191: 7360 70125 MP MPTEMP
041684,001192: 7361 20146 DAS MPAC +1
041685,001193: 7362 56144 XCH MPAC # SETTING MPAC TO 0.
041686,001194: 7363 00006 EXTEND
041687,001195: 7364 70125 MP MPTEMP
041688,001196: 7365 20145 DAS MPAC
041689,001197:
041690,001198: 7366 00002 TC Q
041691,001199:
Page 927 |
041693,001201: # DMPNSUB MULTIPLIES THE DP FRACTION ARRIVING IN MPAC BY THE SP
041694,001202: # INTEGER ARRIVING IN A. THE DP PRODUCT DEPARTS BOTH IN MPAC AND IN
041695,001203: # A AND L. NOTE THAT DMPNSUB NORMALLY INCREASES THE MAGNITUDE OF THE
041696,001204: # CONTENTS OF MPAC. THE CUSTOMER MUST INSURE THAT B(A) X B(MPAC,MPAC+1)
041697,001205: # AND B(A) X B(MPAC) ARE LESS THAN 1 IN MAGNITUDE, WHERE B, AS IS OBVIOUS,
041698,001206: # INDICATES THE ARRIVING CONTENTS.
041699,001207:
041700,001208:
041701,001209: 7367 54125 DMPNSUB TS DMPNTEMP
041702,001210: 7370 00006 EXTEND
041703,001211: 7371 70145 MP MPAC +1
041704,001212: 7372 52145 DXCH MPAC # LOW PRODUCT TO MPAC, HIGH FACTOR TO A
041705,001213: 7373 00006 EXTEND
041706,001214: 7374 70125 MP DMPNTEMP
041707,001215: 7375 30001 CA L
041708,001216: 7376 26144 ADS MPAC # COMPLETING THE PRODUCT IN MPAC
041709,001217: 7377 00006 EXTEND
041710,001218: 7400 30145 DCA MPAC # BRINGING THE PRODUCT INTO A AND L
041711,001219: 7401 00002 TC Q
041712,001220:
Page 928 |
041714,001222: # MISCELLANEOUS VECTOR OPERATIONS. INCLUDED HERE ARE THE FOLLOWING:
041715,001223:
041716,001224:
041717,001225: # 1. DOT DP VECTOR DOT PRODUCT.
041718,001226: # 2. VXV DP VECTOR CROSS PRODUCT.
041719,001227: # 3. VXSC DP VECTOR TIMES SCALAR.
041720,001228: # 4. V/SC DP VECTOR DIVIDED BY SCALAR.
041721,001229: # 5. VPROJ DP VECTOR PROJECTION. ( (MPAC.X)MPAC ).
041722,001230: # 6. VXM DP VECTOR POST-MULTIPLIED BY MATRIX.
041723,001231: # 7. MXV DP VECTOR PRE-MULTIPLIED BY MATRIX.
041724,001232:
041725,001233:
041726,001234:
041727,001235: 7402 07217 DOT TC PREDOT # DO THE DOT PRODUCT AND EXIT, CHANGING
041728,001236: 7403 37761 CAF ZERO # THE MODE TO DP SCALAR.
041729,001237: 7404 16114 TCF NEWMODE
041730,001238:
041731,001239:
041732,001240:
041733,001241: 7405 37754 MXV CAF TWO # SET UP MATINC AND DOTINC FOR ROW
041734,001242: 7406 54130 TS MATINC # VECTORS.
041735,001243: 7407 17413 TCF VXM/MXV # GO TO COMMON PORTION.
041736,001244:
041737,001245: 7410 44557 VXM CS TEN # SET MATINC AND DOTINC TO REFER TO MATRIX
041738,001246: 7411 54130 TS MATINC # AS THREE COLUMN VECTORS.
041739,001247: 7412 36276 CAF SIX
041740,001248:
Page 929 |
041742,001250: # COMMON PORTION OF MXV AND VXM.
041743,001251:
041744,001252: 7413 54126 VXM/MXV TS DOTINC
041745,001253: # ITRACE (2) REFERS TO "VXM/MXV".
041746,001254: 7414 07604 TC MPACVBUF # SAVE VECTOR IN MPAC FOR FURTHER USE.
041747,001255:
041748,001256: 7415 07221 TC DOTSUB # GO DOT TO GET X COMPONENT OF ANSWER.
041749,001257: 7416 00006 EXTEND
041750,001258:
041751,001259: 7417 30113 DCA VBUF # MOVE MPAC VECTOR BACK INTO MPAC, SAVING
041752,001260: 7420 52145 DXCH MPAC # NEW X COMPONENT IN BUF2.
041753,001261: 7421 52124 DXCH BUF2
041754,001262: 7422 00006 EXTEND
041755,001263: 7423 30115 DCA VBUF +2
041756,001264: 7424 52150 DXCH MPAC +3
041757,001265: 7425 00006 EXTEND
041758,001266: 7426 30117 DCA VBUF +4
041759,001267: 7427 52152 DXCH MPAC +5
041760,001268: 7430 30130 CA MATINC # INITIALIZE ADDRWD FOR NEXT DOT PRODUCT.
041761,001269:
041762,001270: 7431 26106 ADS ADDRWD # FORMS BASE ADDRESS OF NEXT COLUMN(ROW).
041763,001271:
041764,001272: 7432 07221 TC DOTSUB
041765,001273: 7433 52113 DXCH VBUF # MOVE GIVEN VECTOR BACK TO MPAC, SAVING Y
041766,001274: 7434 52145 DXCH MPAC # COMPONENT OF ANSWER IN VBUF +2.
041767,001275: 7435 52115 DXCH VBUF +2
041768,001276: 7436 52150 DXCH MPAC +3
041769,001277: 7437 52117 DXCH VBUF +4
041770,001278: 7440 52152 DXCH MPAC +5
041771,001279: 7441 30130 CA MATINC # FORM ADDRESS OF LAST COLUMN OR ROW.
041772,001280: 7442 26106 ADS ADDRWD
041773,001281:
041774,001282: 7443 07221 TC DOTSUB
041775,001283: 7444 52124 DXCH BUF2 # ANSWER NOW COMPLETE. PUT COMPONENTS INTO
041776,001284: 7445 52145 DXCH MPAC # PROPER MPAC REGISTERS.
041777,001285: 7446 52152 DXCH MPAC +5
041778,001286: 7447 52115 DXCH VBUF +2
041779,001287: 7450 52150 DXCH MPAC +3
041780,001288: 7451 16115 TCF DANZIG # EXIT.
041781,001289:
Page 930 |
041783,001291: # VXSC - VECTOR TIMES SCALAR.
041784,001292:
041785,001293: 7452 10153 VXSC CCS MODE # TEST PRESENT MODE.
041786,001294: 7453 17501 TCF DVXSC # SEPARATE ROUTINE WHEN SCALAR IS IN MPAC.
041787,001295: 7454 17501 TCF DVXSC
041788,001296:
041789,001297: 7455 07152 VVXSC TC DMPSUB # COMPUTE X COMPONENT
041790,001298: 7456 07203 TC VROUND # AND ROUND IT.
041791,001299: 7457 52150 DXCH MPAC +3 # PUT Y COMPONENT INTO MPAC SAVING MPAC IN
041792,001300: 7460 52145 DXCH MPAC # MPAC +3.
041793,001301: 7461 52150 DXCH MPAC +3
041794,001302:
041795,001303: 7462 07152 TC DMPSUB # DO SAME FOR Y AND Z COMPONENTS.
041796,001304: 7463 07203 TC VROUND
041797,001305:
041798,001306: 7464 52152 DXCH MPAC +5
041799,001307: 7465 52145 DXCH MPAC
041800,001308: 7466 52152 DXCH MPAC +5
041801,001309:
041802,001310: 7467 07152 TC DMPSUB
041803,001311: 7470 07203 TC VROUND
041804,001312: 7471 52145 VROTATEX DXCH MPAC # EXIT USED TO RESTORE MPAC AFTER THIS
041805,001313: 7472 52152 DXCH MPAC +5 # TYPE OF ROTATION. CALLED BY VECTOR SHIFT
041806,001314: 7473 52150 DXCH MPAC +3 # RIGHT, V/SC, ETC.
041807,001315: 7474 52145 DXCH MPAC
041808,001316:
041809,001317: 7475 16115 TCF DANZIG
041810,001318:
Page 931 |
041812,001320: # DP VECTOR PROJECTION ROUTINE.
041813,001321:
041814,001322: 7476 07217 VPROJ TC PREDOT # (MPAC.X)MPAC IS COMPUTED AND LEFT IN
041815,001323: 7477 47753 CS FOUR # MPAC. DO DOT AND FALL INTO DVXSC.
041816,001324: 7500 26106 ADS ADDRWD
041817,001325:
041818,001326: # VXSC WHEN SCALAR ARRIVES IN MPAC AND VECTOR IS AT X.
041819,001327:
041820,001328: 7501 00006 DVXSC EXTEND # SAVE SCALAR IN MPAC +3 AND GET X
041821,001329: 7502 30145 DCA MPAC # COMPONENT OF ANSWER.
041822,001330: 7503 52150 DXCH MPAC +3
041823,001331: 7504 07152 TC DMPSUB
041824,001332: 7505 07203 TC VROUND
041825,001333:
041826,001334: 7506 37754 CAF TWO # ADVANCE ADDRWD TO Y COMPONENT OF X.
041827,001335: 7507 26106 ADS ADDRWD
041828,001336: 7510 00006 EXTEND
041829,001337: 7511 30150 DCA MPAC +3 # PUT SCALAR BACK INTO MPAC AND SAVE
041830,001338: 7512 52145 DXCH MPAC # X RESULT IN MPAC +5.
041831,001339:
041832,001340: 7513 52152 DXCH MPAC +5
041833,001341: 7514 07152 TC DMPSUB
041834,001342: 7515 07203 TC VROUND
041835,001343:
041836,001344: 7516 37754 CAF TWO
041837,001345: 7517 26106 ADS ADDRWD # TO Z COMPONENT.
041838,001346: 7520 52150 DXCH MPAC +3 # BRING SCALAR BACK, PUTTING Y RESULT IN
041839,001347: 7521 52145 DXCH MPAC # THE PROPER PLACE.
041840,001348: 7522 52150 DXCH MPAC +3
041841,001349: 7523 07152 TC DMPSUB
041842,001350:
041843,001351: 7524 07203 TC VROUND
041844,001352:
041845,001353: 7525 52145 DXCH MPAC # PUT Z COMPONENT IN PROPER PLACE, ALSO
041846,001354: 7526 52152 DXCH MPAC +5 # POSITIONING X.
041847,001355: 7527 52145 DXCH MPAC
041848,001356:
041849,001357: 7530 47755 CS ONE # MODE HAS CHANGED TO VECTOR.
041850,001358: 7531 16114 TCF NEWMODE
041851,001359:
Page 932 |
041853,001361: # THE VECTOR CROSS PRODUCT ROUTINE CALCULATES (X M -X M ,X M -X M ,X M -X M ) WHERE M IS THE VECTOR IN
041854,001362: # 3 2 2 3 1 3 3 1 2 1 1 2
041855,001363:
041856,001364: # MPAC AND X THE VECTOR AT THE GIVEN ADDRESS.
041857,001365:
041858,001366:
041859,001367:
041860,001368: 7532 00006 VXV EXTEND
041861,001369: 7533 30152 DCA MPAC +5 # FORM UP M3X1, LEAVING M1 IN VBUF.
041862,001370: 7534 52145 DXCH MPAC
041863,001371: 7535 52113 DXCH VBUF
041864,001372: 7536 07152 TC DMPSUB # BY X1.
041865,001373:
041866,001374: 7537 00006 EXTEND
041867,001375: 7540 40150 DCS MPAC +3 # CALCULATE -X1M2, SAVING X1M3 IN VBUF +2.
041868,001376: 7541 52145 DXCH MPAC
041869,001377: 7542 52115 DXCH VBUF +2
041870,001378: 7543 07152 TC DMPSUB
041871,001379:
041872,001380: 7544 37754 CAF TWO # ADVANCE ADDRWD TO X2.
041873,001381: 7545 26106 ADS ADDRWD
041874,001382: 7546 00006 EXTEND
041875,001383: 7547 40152 DCS MPAC +5 # PREPARE TO GET -X2M3, SAVING -X1M2 IN
041876,001384: 7550 52145 DXCH MPAC # MPAC +5.
041877,001385: 7551 52152 DXCH MPAC +5
041878,001386: 7552 07152 TC DMPSUB
041879,001387:
041880,001388:
041881,001389: 7553 00006 EXTEND
041882,001390: 7554 30113 DCA VBUF # GET X2M1, SAVING -X2M3 IN VBUF +4.
041883,001391: 7555 52145 DXCH MPAC
041884,001392: 7556 52117 DXCH VBUF +4
041885,001393: 7557 07152 TC DMPSUB
041886,001394:
041887,001395: 7560 37754 CAF TWO # ADVANCE ADDRWD TO X3.
041888,001396: 7561 26106 ADS ADDRWD
041889,001397: 7562 00006 EXTEND
041890,001398:
041891,001399: 7563 40113 DCS VBUF # GET -X3M1, ADDING X2M1 TO MPAC +5 TO
041892,001400: 7564 52145 DXCH MPAC # COMPLETE THE Z COMPONENT OF THE ANSWER.
041893,001401: 7565 20152 DAS MPAC +5
041894,001402:
041895,001403: 7566 00006 EXTEND
041896,001404: 7567 17571 BZF +2
041897,001405: 7570 07072 TC OVERFLOW
Page 933 |
041899,001407: 7571 07152 TC DMPSUB
041900,001408: 7572 52115 DXCH VBUF +2 # MOVE X1M3 TO MPAC +3 SETTING UP FOR X3M2
041901,001409: 7573 52150 DXCH MPAC +3 # AND ADD -X3M1 TO MPAC +3 TO COMPLETE THE
041902,001410: 7574 52145 DXCH MPAC # Y COMPONENT OF THE RESULT.
041903,001411: 7575 20150 DAS MPAC +3
041904,001412:
041905,001413: 7576 00006 EXTEND
041906,001414: 7577 17601 BZF +2
041907,001415:
041908,001416: 7600 07072 TC OVERFLOW
041909,001417:
041910,001418: 7601 07152 TC DMPSUB
041911,001419: 7602 52117 DXCH VBUF +4 # GO ADD -X2M3 TO X3M2 TO COMPLETE THE X
041912,001420: 7603 17037 TCF ENDVXV # COMPONENT (TAIL END OF DAD).
041913,001421:
041914,001422: # THE MPACVBUF SUBROUTINE SAVES THE VECTOR IN MPAC IN VBUF WITHOUT CLOBBERING MPAC.
041915,001423:
041916,001424: 7604 00006 MPACVBUF EXTEND # CALLED BY MXV, VXM, AND UNIT.
041917,001425: 7605 30145 DCA MPAC
041918,001426:
041919,001427: 7606 52113 DXCH VBUF
041920,001428: 7607 00006 EXTEND
041921,001429: 7610 30150 DCA MPAC +3
041922,001430: 7611 52115 DXCH VBUF +2
041923,001431: 7612 00006 EXTEND
041924,001432: 7613 30152 DCA MPAC +5
041925,001433: 7614 52117 DXCH VBUF +4
041926,001434: 7615 00002 TC Q # RETURN TO CALLER.
041927,001435:
Page 934 |
041929,001437: # INTERPRETIVE INSTRUCTIONS WHOSE EXECUTION CONSISTS OF PRINCIPALLY CALLING SUBROUTINES.
041930,001438:
041931,001439: 7616 07152 DMP1 TC DMPSUB # DMP INSTRUCTION.
041932,001440: 7617 16115 TCF DANZIG
041933,001441:
041934,001442: 7620 07152 DMPR TC DMPSUB
041935,001443: 7621 07202 TC ROUNDSUB +1 # (C(A) = +0).
041936,001444: 7622 16115 TCF DANZIG
041937,001445:
041938,001446: 7623 00006 DDV EXTEND
041939,001447: 7624 50106 INDEX ADDRWD # MOVE DIVIDEND INTO BUF.
041940,001448: 7625 30001 DCA 0
041941,001449: 7626 17633 TCF BDDV +4
041942,001450:
041943,001451:
041944,001452: 7627 00006 BDDV EXTEND # MOVE DIVISOR INTO MPAC SAVING MPAC, THE
041945,001453: 7630 50106 INDEX ADDRWD # DIVIDEND, IN BUF.
041946,001454: 7631 30001 DCA 0
041947,001455: 7632 52145 DXCH MPAC
041948,001456: 7633 52121 +4 DXCH BUF
041949,001457: 7634 37761 CAF ZERO # DIVIDE ROUTINES IN BANK 0.
041950,001458: 7635 54004 TS FBANK
041951,001459: 7636 12352 TCF DDV/BDDV
041952,001460:
041953,001461: 7637 30106 SETPD CA ADDRWD # MUST SET TO WORK AREA, OR EBANK TROUBLE.
041954,001462:
041955,001463: 7640 54156 TS PUSHLOC
041956,001464: 7641 16117 TCF NOIBNKSW # NO FBANK SWITCH REQUIRED.
041957,001465:
041958,001466: 7642 37761 TSLC CAF ZERO # SHIFTING ROUTINES LOCATED IN BANK 00.
041959,001467: 7643 54004 TS FBANK
041960,001468: 7644 12172 TCF TSLC2
041961,001469:
041962,001470: 7645 36130 GSHIFT CAF LOW7 # USED AS MASK AT GENSHIFT. THIS PROCESSES
041963,001471: 7646 54004 TS FBANK # ANY SHIFT INSTRUCTION (EXCEPT TSLC) WITH
041964,001472: 7647 12214 TCF GENSHIFT # AN ADDRESS (ROUTINES IN BANK 0).
041965,001473:
Page 935 |
041967,001475: # THE FOLLOWING IS THE PROLOGUE TO V/SC. IF THE PRESENT MODE IS VECTOR, IT SAVES THE SCALAR AT X IN BUF
041968,001476: # AND CALLS THE V/SC ROUTINE IN BANK 0. IF THE PRESENT MODE IS SCALAR, IT MOVES THE VECTOR AT X INTO MPAC, SAVING
041969,001477: # THE SCALAR IN MPAC IN BUF BEFORE CALLING THE V/SC ROUTINE IN BANK 0.
041970,001478:
041971,001479:
041972,001480:
041973,001481: 7650 10153 V/SC CCS MODE
041974,001482: 7651 17662 TCF DV/SC # MOVE VECTOR INTO MPAC.
041975,001483: 7652 17662 TCF DV/SC
041976,001484:
041977,001485: 7653 00006 VV/SC EXTEND
041978,001486: 7654 50106 INDEX ADDRWD
041979,001487: 7655 30001 DCA 0
041980,001488: 7656 52121 V/SC1 DXCH BUF # IN BOTH CASES, VECTOR IS NOW IN MPAC AND
041981,001489: 7657 37761 CAF ZERO # SCALAR IN BUF.
041982,001490: 7660 54004 TS FBANK
041983,001491: 7661 12616 TCF V/SC2
041984,001492:
041985,001493: 7662 00006 DV/SC EXTEND
041986,001494:
041987,001495: 7663 50106 INDEX ADDRWD
041988,001496: 7664 30003 DCA 2
041989,001497: 7665 52150 DXCH MPAC +3
041990,001498: 7666 00006 EXTEND
041991,001499: 7667 50106 INDEX ADDRWD
041992,001500: 7670 30005 DCA 4
041993,001501: 7671 52152 DXCH MPAC +5
041994,001502:
041995,001503: 7672 47755 CS ONE # CHANGE MODE TO VECTOR.
041996,001504: 7673 54153 TS MODE
041997,001505:
041998,001506: 7674 00006 EXTEND
041999,001507: 7675 50106 INDEX ADDRWD
042000,001508: 7676 30001 DCA 0
042001,001509: 7677 52145 DXCH MPAC
042002,001510: 7700 17656 TCF V/SC1 # FINISH PROLOGUE AT COMMON SECTION.
042003,001511:
Page 936 |
042005,001513: # SIGN AND COMPLEMENT INSTRUCTIONS.
042006,001514:
042007,001515:
042008,001516: 7701 50106 SIGN INDEX ADDRWD # CALL COMP INSTRUCTION IF WORD AT X IS
042009,001517: 7702 10000 CCS 0 # NEGATIVE NON-ZERO.
042010,001518: 7703 16115 TCF DANZIG
042011,001519: 7704 17706 TCF +2
042012,001520: 7705 17714 TCF COMP # DO THE COMPLEMENT.
042013,001521:
042014,001522: 7706 50106 INDEX ADDRWD
042015,001523: 7707 10001 CCS 1
042016,001524: 7710 16115 TCF DANZIG
042017,001525: 7711 16115 TCF DANZIG
042018,001526:
042019,001527: 7712 17714 TCF COMP
042020,001528: 7713 16115 TCF DANZIG
042021,001529: 7714 00006 COMP EXTEND # COMPLEMENT DP MPAC IN EVERY CASE.
042022,001530: 7715 40145 DCS MPAC
042023,001531: 7716 52145 DXCH MPAC
042024,001532:
042025,001533: 7717 10153 CCS MODE # EITHER COMPLEMENT MPAC +3 OR THE REST OF
042026,001534: 7720 17731 TCF DCOMP # THE VECTOR ACCUMULATOR.
042027,001535: 7721 17731 TCF DCOMP
042028,001536:
042029,001537: 7722 00006 EXTEND # VECTOR COMPLEMENT.
042030,001538: 7723 40150 DCS MPAC +3
042031,001539:
042032,001540: 7724 52150 DXCH MPAC +3
042033,001541: 7725 00006 EXTEND
042034,001542: 7726 40152 DCS MPAC +5
042035,001543: 7727 52152 DXCH MPAC +5
042036,001544: 7730 16115 TCF DANZIG
042037,001545:
042038,001546: 7731 40146 DCOMP CS MPAC +2
042039,001547: 7732 54146 TS MPAC +2
042040,001548: 7733 16115 TCF DANZIG
042041,001549:
Page 937 |
042043,001551: # CONSTANTS REQUIRED IN FIXED-FIXED.
042044,001552: 7734 37777 DPOSMAX OCT 37777
042045,001553: 7735 37777 POSMAX OCT 37777
042046,001554: 7736 7736 LIMITS EQUALS POSMAX +1
042047,001555: 7736 57777 NEG1/2 OCT -20000 # MUST BE TWO LOCATIONS AHEAD OF POS1/2.
042048,001556:
042049,001557: 7737 40000 BIT15 OCT 40000 # BIT TABLE FOLLOWS.
042050,001558:
042051,001559: 7740 20000 BIT14 OCT 20000
042052,001560: 7741 10000 BIT13 OCT 10000
042053,001561: 7742 04000 BIT12 OCT 04000
042054,001562: 7743 02000 BIT11 OCT 02000
042055,001563: 7744 01000 BIT10 OCT 01000
042056,001564: 7745 00400 BIT9 OCT 00400
042057,001565: 7746 00200 BIT8 OCT 00200
042058,001566: 7747 00100 BIT7 OCT 00100
042059,001567: 7750 00040 BIT6 OCT 00040
042060,001568: 7751 00020 BIT5 OCT 00020
042061,001569:
042062,001570: 7752 00010 BIT4 OCT 00010
042063,001571: 7753 00004 BIT3 OCT 00004
042064,001572: 7754 00002 BIT2 OCT 00002
042065,001573: 7755 00001 BIT1 OCT 00001
042066,001574:
042067,001575: 7756 7737 NEGMAX EQUALS BIT15
042068,001576: 7756 7740 HALF EQUALS BIT14
042069,001577: 7756 7740 POS1/2 EQUALS HALF
042070,001578: 7756 7741 QUARTER EQUALS BIT13
042071,001579: 7756 7743 2K EQUALS BIT11
042072,001580: 7756 00013 ELEVEN DEC 11 B-14
042073,001581: 7757 7756 NOUTCON = ELEVEN
042074,001582:
042075,001583: 7757 4557 TEN = BINCON
042076,001584: 7757 4517 NINE = R2D1
042077,001585: 7757 7752 EIGHT EQUALS BIT4
042078,001586: 7757 00007 SEVEN OCT 7
042079,001587: 7760 6276 SIX EQUALS REVCNT
042080,001588: 7760 00005 FIVE OCT 5
042081,001589: 7761 7753 FOUR EQUALS BIT3
042082,001590: 7761 6301 THREE EQUALS OCTAL3
042083,001591: 7761 7754 TWO EQUALS BIT2
042084,001592: 7761 7755 ONE EQUALS BIT1
042085,001593:
042086,001594: 7761 00000 ZERO OCT 0
042087,001595: 7762 77777 NEG0 OCT 77777
042088,001596: 7763 77776 NEGONE DEC -1 B-14
042089,001597:
042090,001598: 7764 7763 NEG1 = NEGONE
042091,001599: 7764 7763 MINUS1 EQUALS NEG1
042092,001600:
042093,001601: 5355 BLOCK 02
042094,001602:
042095,001603: 5355 77775 NEG2 OCT 77775
Page 938 |
042097,001605: 5356 01777 LOW10 OCT 1777
042098,001606:
042099,001607: 5357 77774 NEG3 DEC -3 B-14
042100,001608: 5360 00777 LOW9 OCT 777
042101,001609: 5361 00017 LOW4 OCT 17
042102,001610: 5362 7757 LOW3 EQUALS SEVEN
042103,001611: 5362 6301 LOW2 EQUALS THREE
042104,001612:
042105,001613: 5362 00032 CALLCODE OCT 00032
042106,001614: 5363 40014 DLOADCOD OCT 40014
042107,001615: 5364 7737 VLOADCOD EQUALS BIT15
042108,001616: 5364 40015 DLOAD* OCT 40015
042109,001617: 5365 6143 VLOAD* EQUALS OCT40001
042110,001618: 5365 00112 LVBUF ADRES VBUF
042111,001619:
042112,001620: 5366 5226 BIT13-14 = PRIO30
042113,001621: # THERE ARE FOUR POSSIBLE SETTINGS FOR CHANNEL 07 (WNACTV) FOR ACCESSING THE EVENTUALLY THREE AND ONE-HALF
042114,001622: # PRESENTLY ONE AND ONE-HALF SUPERBANKS.
042115,001623:
042116,001624: 5366 00060 SUPER011 OCT 60 # BITS FOR SUPERBNK SETTING 011
042117,001625: 5367 7747 SUPER100 EQUALS BIT7 # BITS FOR SUPERBNK SETTING 100
042118,001626: # (LAST 4K OF ROPE)
042119,001627: # SUPER101 OCT 120 BITS FOR SUPERBNK SETTING 101
042120,001628: # (FIRST 8K OF ACM)
042121,001629: # SUPER110 OCT 140 BITS FOR SUPERBNK SETTING 110
042122,001630:
042123,001631: # (LAST 8K OF ACM)
042124,001632: 5367 74000 HIGH4 OCT 74000
042125,001633: 5370 01400 OCT1400 OCT 01400
042126,001634: 5371 00055 DEC45 DEC 45 B-14
042127,001635:
Page 939 |
042129,001637: # THE FOLLOWING SHORT SHIFT CODES REQUIRE NO ADDRESS WORD:
042130,001638:
042131,001639: # 1. SR1 TO SR4 SCALAR SHIFT RIGHT.
042132,001640: # 2. SR1R TO SR4R SCALAR SHIFT RIGHT AND ROUND.
042133,001641: # 3. SL1 TO SL4 SCALAR SHIFT LEFT.
042134,001642: # 4. SL1R TO SL4R SCALAR SHIFT LEFT AND ROUND.
042135,001643:
042136,001644: # 5. VSR1 TO VSR8 VECTOR SHIFT RIGHT (ALWAYS ROUNDS).
042137,001645: # 6. VSL1 TO VSL8 VECTOR SHIFT LEFT (NEVER ROUNDS).
042138,001646:
042139,001647: # THE FOLLOWING CODES REQUIRE AN ADDRESS WHICH MAY BE INDEXED:*
042140,001648:
042141,001649: # 1. SR SCALAR SHIFT RIGHT.
042142,001650: # 2. SRR SCALAR SHIFT RIGHT AND ROUND.
042143,001651: # 3. SL SCALAR SHIFT LEFT.
042144,001652: # 4. SLR SCALAR SHIFT LEFT AND ROUND.
042145,001653:
042146,001654: # 5. VSR VECTOR SHIFT RIGHT.
042147,001655: # 6. VSL VECTOR SHIFT LEFT.
042148,001656:
042149,001657:
042150,001658: # * IF THE ADDRESS IS INDEXED, AND THE INDEX MODIFICATION RESULTS IN A NEGATIVE SHIFT COUNT, A SHIFT OF THE
042151,001659: # ABSOLUTE VALUE OF THE COUNT IS DONE IN THE OPPOSITE DIRECTION.
042152,001660:
042153,001661:
042154,001662:
042155,001663: 00,2017 BANK 00
042156,001664:
042157,001665: 00,2017 36276 SHORTT CAF SIX # SCALAR SHORT SHIFTS COME HERE. THE SHIFT
042158,001666: 00,2020 70020 MASK CYR # COUNT-1 IS NOW IN BITS 2-3 OF CYR. THE
042159,001667:
042160,001668: 00,2021 54021 TS SR # ROUNDING BIT IS IN BIT1 AT THIS POINT.
042161,001669:
042162,001670: 00,2022 10020 CCS CYR # SEE IF RIGHT OR LEFT SHIFT DESIRED.
042163,001671: 00,2023 12101 TCF TSSL # SHIFT LEFT.
042164,001672:
042165,001673: 00,2024 00024 SRDDV DEC 20 B-14 # MPTEMP SETTING FOR SR BEFORE DDV.
042166,001674:
042167,001675: 00,2025 50021 TSSR INDEX SR # GET SHIFTING BIT.
042168,001676: 00,2026 37740 CAF BIT14
042169,001677: 00,2027 54125 TS MPTEMP
042170,001678:
042171,001679: 00,2030 10020 CCS CYR # SEE IF A ROUND IS DESIRED.
042172,001680:
042173,001681: 00,2031 02050 RIGHTR TC MPACSRND # YES - SHIFT RIGHT AND ROUND.
042174,001682: 00,2032 16114 TCF NEWMODE # SET MODE TO DP (C(A) = 0).
042175,001683: 00,2033 30125 MPACSHR CA MPTEMP # DO A TRIPLE PRECISION SHIFT RIGHT.
042176,001684: 00,2034 00006 EXTEND
042177,001685: 00,2035 70146 MP MPAC +2
042178,001686: 00,2036 54146 +3 TS MPAC +2 # (EXIT FROM SQRT AND ABVAL).
042179,001687: 00,2037 30125 CA MPTEMP
042180,001688: 00,2040 00006 EXTEND
042181,001689: 00,2041 70144 MP MPAC # SHIFT MAJOR PART INTO A,L AND PLACE IN
Page 940 |
042183,001691: 00,2042 52145 DXCH MPAC # MPAC,+1.
042184,001692: 00,2043 30125 CA MPTEMP
042185,001693:
042186,001694: 00,2044 00006 EXTEND
042187,001695: 00,2045 70001 MP L # ORIGINAL C(MPAC +1).
042188,001696: 00,2046 20146 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
042189,001697: 00,2047 16115 TCF DANZIG
042190,001698:
042191,001699: # MPAC SHIFT RIGHT AND ROUND SUBROUTINES.
042192,001700:
042193,001701: 00,2050 30146 MPACSRND CA MPAC +2 # WE HAVE TO DO ALL THREE MULTIPLIES SINCE
042194,001702: 00,2051 00006 EXTEND # MPAC +1 AND MPAC +2 MIGHT HAVE SIGN
042195,001703: 00,2052 70125 MP MPTEMP # DISAGREEMENT WITH A SHIFT RIGHT OF 1.
042196,001704:
042197,001705: 00,2053 56145 XCH MPAC +1
042198,001706: 00,2054 00006 EXTEND
042199,001707: 00,2055 70125 MP MPTEMP
042200,001708: 00,2056 56145 XCH MPAC +1 # TRIAL MINOR PART.
042201,001709: 00,2057 60001 AD L
042202,001710:
042203,001711: 00,2060 60000 VSHR2 DOUBLE # (FINISH VECTOR COMPONENT SHIFT RIGHT
042204,001712: 00,2061 54146 TS MPAC +2 # AND ROUND.
042205,001713: 00,2062 12064 TCF +2
042206,001714: 00,2063 26145 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
042207,001715:
042208,001716: 00,2064 37761 CAF ZERO
042209,001717:
042210,001718: 00,2065 54146 TS MPAC +2
042211,001719: 00,2066 56144 XCH MPAC # SETTING TO ZERO SO FOLLOWING DAS WORKS.
042212,001720: 00,2067 00006 EXTEND
042213,001721: 00,2070 70125 MP MPTEMP
042214,001722: 00,2071 20145 DAS MPAC # AGAIN NO OVERFLOW.
042215,001723: 00,2072 00002 TC Q
042216,001724:
042217,001725: 00,2073 30125 VSHRRND CA MPTEMP # ENTRY TO SHIFT RIGHT AND ROUND MPAC WHEN
042218,001726: 00,2074 00006 EXTEND # MPAC CONTAINS A VECTOR COMPONENT.
042219,001727: 00,2075 70145 MP MPAC +1
042220,001728:
042221,001729: 00,2076 54145 TS MPAC +1
042222,001730: 00,2077 56001 XCH L
042223,001731: 00,2100 12060 TCF VSHR2 # GO ADD ONE IF NECESSARY AND FINISH.
042224,001732:
Page 941 |
042226,001734: # ROUTINE FOR SHORT SCALAR SHIFT LEFT (AND MAYBE ROUND).
042227,001735:
042228,001736: 00,2101 30021 TSSL CA SR # GET SHIFT COUNT FOR SR.
042229,001737: 00,2102 54125 +1 TS MPTEMP
042230,001738:
042231,001739: 00,2103 00006 +2 EXTEND # ENTRY HERE FROM SL FOR SCALARS.
042232,001740: 00,2104 30146 DCA MPAC +1 # SHIFTING LEFT ONE PLACE AT A TIME IS
042233,001741: 00,2105 20146 DAS MPAC +1 # FASTER THAN DOING THE WHOLE SHIFT WITH
042234,001742:
042235,001743: 00,2106 60144 AD MPAC # MULTIPLIES ASSUMING THAT FREQUENCY OF
042236,001744: 00,2107 60144 AD MPAC # SHIFT COUNTS GOES DOWN RAPIDLY AS A
042237,001745: 00,2110 54144 TS MPAC # FUNCTION OF THEIR MAGNITUDE.
042238,001746: 00,2111 12113 TCF +2
042239,001747: 00,2112 54111 TS OVFIND # OVERFLOW. (LEAVES OVERFLOW-CORRECTED
042240,001748: # RESULT ANYWAY).
042241,001749: 00,2113 10125 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNT.
042242,001750: 00,2114 12102 TCF TSSL +1
042243,001751:
042244,001752: 00,2115 10020 CCS CYR # SEE IF ROUND WANTED.
042245,001753:
042246,001754: 00,2116 07201 ROUND TC ROUNDSUB # YES - ROUND AND EXIT.
042247,001755: 00,2117 16115 TCF DANZIG # SL LEAVES A ZERO IN CYR FOR NO ROUND.
042248,001756: 00,2120 16115 TCF DANZIG # NO - EXIT IMMEDIATL
042249,001757:
Page 942 |
042251,001759: # VECTOR SHIFTING ROUTINES.
042252,001760:
042253,001761: 00,2121 37757 SHORTV CAF LOW3 # SAVE 3 BIT SHIFT COUNT - 1 WITHOUT
042254,001762: 00,2122 70020 MASK CYR # EDITING CYR.
042255,001763: 00,2123 54125 TS MPTEMP
042256,001764: 00,2124 10020 CCS CYR # SEE IF LEFT OR RIGHT SHIFT.
042257,001765: 00,2125 12145 TCF VSSL # VECTOR SHIFT LEFT.
042258,001766: 00,2126 00176 OCT176 OCT 176 # USED IN PROCESSED SHIFTS WITH - COUNT.
042259,001767:
042260,001768: 00,2127 50125 VSSR INDEX MPTEMP # (ENTRY FROM SR). PICK UP SHIFTING BIT.
042261,001769: 00,2130 37740 CAF BIT14 # MPTEMP CONTAINS THE SHIFT COUNT - 1.
042262,001770: 00,2131 54125 TS MPTEMP
042263,001771: 00,2132 02073 TC VSHRRND # SHIFT X COMPONENT.
042264,001772:
042265,001773:
042266,001774: 00,2133 52145 DXCH MPAC # SWAP X AND Y COMPONENTS.
042267,001775: 00,2134 52150 DXCH MPAC +3
042268,001776: 00,2135 52145 DXCH MPAC
042269,001777: 00,2136 02073 TC VSHRRND # SHIFT Y COMPONENT.
042270,001778:
042271,001779: 00,2137 52145 DXCH MPAC # SWAP Y AND Z COMPONENTS.
042272,001780: 00,2140 52152 DXCH MPAC +5
042273,001781: 00,2141 52145 DXCH MPAC
042274,001782: 00,2142 02073 TC VSHRRND # SHIFT Z COMPONENT.
042275,001783:
042276,001784: 00,2143 17471 TCF VROTATEX # RESTORE COMPONENTS TO PROPER PLACES.
042277,001785:
Page 943 |
042279,001787: # VECTOR SHIFT LEFT - DONE ONE PLACE AT A TIME.
042280,001788:
042281,001789: 00,2144 54125 -1 TS MPTEMP # SHIFTING LOOP.
042282,001790:
042283,001791: 00,2145 00006 VSSL EXTEND
042284,001792: 00,2146 30145 DCA MPAC
042285,001793:
042286,001794: 00,2147 20145 DAS MPAC
042287,001795: 00,2150 00006 EXTEND
042288,001796: 00,2151 12153 BZF +2
042289,001797: 00,2152 07072 TC OVERFLOW
042290,001798:
042291,001799: 00,2153 00006 EXTEND
042292,001800: 00,2154 30150 DCA MPAC +3
042293,001801: 00,2155 20150 DAS MPAC +3
042294,001802: 00,2156 00006 EXTEND
042295,001803: 00,2157 12161 BZF +2
042296,001804: 00,2160 07072 TC OVERFLOW
042297,001805:
042298,001806:
042299,001807: 00,2161 00006 EXTEND
042300,001808: 00,2162 30152 DCA MPAC +5
042301,001809: 00,2163 20152 DAS MPAC +5
042302,001810: 00,2164 00006 EXTEND
042303,001811: 00,2165 12167 BZF +2
042304,001812: 00,2166 07072 TC OVERFLOW
042305,001813:
042306,001814: 00,2167 10125 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNTER.
042307,001815: 00,2170 12144 TCF VSSL -1
042308,001816: 00,2171 16115 TCF DANZIG # EXIT.
042309,001817:
Page 944 |
042311,001819: # TSLC - TRIPLE SHIFT LEFT AND COUNT. SHIFTS MPAC LEFT UNTIL GREATER THAN .5 IN MAGNITUDE, LEAVING
042312,001820: # THE COMPLEMENT OF THE NUMBER OF SHIFTS REQUIRED IN X.
042313,001821:
042314,001822:
042315,001823: 00,2172 54125 TSLC2 TS MPTEMP # START BY ZEROING SHIFT COUNT (IN A NOW).
042316,001824: 00,2173 06772 TC BRANCH # EXIT WITH NO SHIFTING IF ARGUMENT ZERO.
042317,001825: 00,2174 12176 TCF +2
042318,001826: 00,2175 12212 TCF ENDTSLC # STORES ZERO SHIFT COUNT IN THIS CASE.
042319,001827:
042320,001828: 00,2176 07320 TC TPAGREE # MAY CAUSE UPSHIFT OF ONE EXTRA PLACE.
042321,001829:
042322,001830: 00,2177 30144 CA MPAC # BEGIN NORMALIZATION LOOP.
042323,001831: 00,2200 12207 TCF TSLCTEST
042324,001832:
042325,001833: 00,2201 24125 TSLCLOOP INCR MPTEMP # INCREMENT SHIFT COUNTER.
042326,001834: 00,2202 00006 EXTEND
042327,001835: 00,2203 30146 DCA MPAC +1
042328,001836: 00,2204 20146 DAS MPAC +1
042329,001837: 00,2205 60144 AD MPAC
042330,001838: 00,2206 26144 ADS MPAC
042331,001839: 00,2207 60000 TSLCTEST DOUBLE # SEE IF (ANOTHER) SHIFT IS REQUIRED.
042332,001840: 00,2210 54000 OVSK
042333,001841: 00,2211 12201 TCF TSLCLOOP # YES - INCREMENT COUNT AND SHIFT AGAIN.
042334,001842:
042335,001843: 00,2212 40125 ENDTSLC CS MPTEMP
042336,001844: 00,2213 16672 TCF STORE1 # STORE SHIFT COUNT AND RETURN TO DANZIG.
042337,001845:
Page 945 |
042339,001847: # THE FOLLOWING ROUTINES PROCESSES THE GENERAL SHIFT INSTRUCTIONS SR, SRR, SL, AND SLR.
042340,001848: # THE GIVEN ADDRESS IS DECODED AS FOLLOWS:
042341,001849:
042342,001850: # BITS 1-7 SHIFT COUNT (SUBADDRESS) LESS THAN 125 DECIMAL.
042343,001851: # BIT 8 PSEUDO SIGN BIT (DETECTS CHANGE IN SIGN IN INDEXED SHIFTS).
042344,001852: # BIT 9 0 FOR LEFT SHIFT, AND 1 FOR RIGHT SHIFT.
042345,001853: # BIT 10 1 FOR TERMINAL ROUND ON SCALAR SHIFTS, 0 OTHERWISE.
042346,001854: # BITS 11-13 0.
042347,001855:
042348,001856: # BIT 14 1.
042349,001857: # BIT 15 0.
042350,001858:
042351,001859: # THE ABOVE ENCODING IS DONE BY THE YUL SYSTEM.
042352,001860:
042353,001861:
042354,001862:
042355,001863: 00,2214 70106 GENSHIFT MASK ADDRWD # GET SHIFT COUNT, TESTING FOR ZERO.
042356,001864: 00,2215 10000 CCS A # (ARRIVES WITH C(A) = LOW7).
042357,001865: 00,2216 12224 TCF GENSHFT2 # IF NON-ZERO, PROCEED WITH DECREMENTED CT
042358,001866:
042359,001867: 00,2217 37744 CAF BIT10 # ZERO SHIFT COUNT. NO SHIFTS NEEDED BUT
042360,001868: 00,2220 70106 MASK ADDRWD # WE MIGHT HAVE TO ROUND MPAC ON SLR AND
042361,001869: 00,2221 10000 CCS A # SRR (SCALAR ONLY).
042362,001870: 00,2222 07201 TC ROUNDSUB
042363,001871: 00,2223 16115 TCF DANZIG
042364,001872:
042365,001873: 00,2224 54125 GENSHFT2 TS MPTEMP # DECREMENTED SHIFT COUNT TO MPTEMP.
042366,001874: 00,2225 37746 CAF BIT8 # TEST MEANING OF LOW SEVEN BIT COUNT IN
042367,001875: 00,2226 00006 EXTEND # MPTEMP NOW.
042368,001876: 00,2227 70106 MP ADDRWD
042369,001877: 00,2230 76301 MASK LOW2 # JUMPS ON SHIFT DIRECTION (BIT8) AND
042370,001878: 00,2231 50000 INDEX A
042371,001879:
042372,001880: 00,2232 12233 TCF +1 # ORIGINAL SHIFT DIRECTION (BIT 9).
042373,001881: 00,2233 12332 TCF RIGHT- # NEGATIVE SHIFT COUNT FOR SL OR SLR.
042374,001882: 00,2234 12341 TCF LEFT # SL OR SLR.
042375,001883: 00,2235 12336 TCF LEFT- # NEGATIVE SHIFT COUNT WITH SR OR SRR.
042376,001884:
Page 946 |
042378,001886: # GENERAL SHIFT RIGHT.
042379,001887:
042380,001888: 00,2236 10153 RIGHT CCS MODE # SEE IF VECTOR OR SCALAR.
042381,001889: 00,2237 12277 TCF GENSCR
042382,001890: 00,2240 12277 TCF GENSCR
042383,001891:
042384,001892: 00,2241 30125 CA MPTEMP # SEE IF SHIFT COUNT LESS THAN 14D.
042385,001893: 00,2242 63676 VRIGHT2 AD NEG12
042386,001894: 00,2243 00006 EXTEND
042387,001895: 00,2244 62127 BZMF VSSR # IF SO, BRANCH AND SHIFT IMMEDIATELY.
042388,001896:
042389,001897: 00,2245 67763 AD NEGONE # IF NOT, REDUCE MPTEMP BY A TOTAL OF 14,
042390,001898: 00,2246 54125 TS MPTEMP # AND DO A SHIFT RIGHT AND ROUND BY 14.
042391,001899: 00,2247 37761 CAF ZERO # THE ROUND AT THIS STAGE MAY INTRODUCE A
042392,001900:
042393,001901: 00,2250 54001 TS L # ONE BIT ERROR IN A SHIFT RIGHT 15D.
042394,001902: 00,2251 56144 XCH MPAC
042395,001903: 00,2252 56145 XCH MPAC +1
042396,001904: 00,2253 02272 TC SETROUND # X COMPONENT NOW SHIFTED, SO MAKE UP THE
042397,001905: 00,2254 20145 DAS MPAC # ROUNDING QUANTITY (0 IN A AND 0 OR +-1
042398,001906: # IN L).
042399,001907: 00,2255 56147 XCH MPAC +3 # REPEAT THE ABOVE PROCESS FOR Y AND Z.
042400,001908: 00,2256 56150 XCH MPAC +4
042401,001909: 00,2257 02272 TC SETROUND
042402,001910: 00,2260 20150 DAS MPAC +3 # NO OVERFLOW ON THESE ADDS.
042403,001911:
042404,001912:
042405,001913: 00,2261 56151 XCH MPAC +5
042406,001914: 00,2262 56152 XCH MPAC +6
042407,001915: 00,2263 02272 TC SETROUND
042408,001916: 00,2264 20152 DAS MPAC +5
042409,001917:
042410,001918: 00,2265 10125 CCS MPTEMP # SEE IF DONE, DOING FINAL DECREMENT.
042411,001919: 00,2266 54125 TS MPTEMP
042412,001920: 00,2267 12242 TCF VRIGHT2
042413,001921: 00,2270 04604 BIASLO DEC .2974 B-1 # SQRT CONSTANT
042414,001922:
042415,001923: 00,2271 16115 TCF DANZIG
042416,001924:
042417,001925:
042418,001926:
042419,001927: 00,2272 60000 SETROUND DOUBLE # MAKES UP ROUNDING QUANTITY FROM ARRIVING
042420,001928: 00,2273 54146 TS MPAC +2 # C(A). L IS ZERO INITIALLY.
042421,001929: 00,2274 37761 CAF ZERO
042422,001930: 00,2275 56001 XCH L
042423,001931: 00,2276 00002 TC Q # RETURN AND DO THE DAS, RESETTING L TO 0.
042424,001932:
Page 947 |
042426,001934: # PROCESS SR AND SRR FOR SCALARS.
042427,001935:
042428,001936: 00,2277 30125 GENSCR CA MPTEMP # SEE IF THE ORIGINAL SHIFT COUNT WAS LESS
042429,001937: 00,2300 63676 +1 AD NEG12 # THAN 14D.
042430,001938: 00,2301 00006 EXTEND
042431,001939: 00,2302 62322 BZMF DOSSHFT # DO THE SHIFT IMMEDIATELY IF SO.
042432,001940:
042433,001941: 00,2303 67763 +4 AD NEGONE # IF NOT, DECREMENT SHIFT COUNT BY 14D AND
042434,001942: 00,2304 54125 TS MPTEMP # SHIFT MPAC RIGHT 14 PLACES.
042435,001943: 00,2305 37761 CAF ZERO
042436,001944: 00,2306 56144 XCH MPAC
042437,001945: 00,2307 56145 XCH MPAC +1
042438,001946: 00,2310 54146 TS MPAC +2
042439,001947: 00,2311 10125 CCS MPTEMP # SEE IF FINISHED, DO FINAL DECREMENT.
042440,001948: 00,2312 54125 TS MPTEMP
042441,001949: 00,2313 02300 TC GENSCR +1
042442,001950: 00,2314 22650 SLOPEHI DEC .5884 # SQRT CONSTANT.
042443,001951: 00,2315 37744 CAF BIT10 # FINISHED WITH SHIFT. SEE IF ROUND
042444,001952: 00,2316 70106 MASK ADDRWD # WANTED.
042445,001953:
042446,001954: 00,2317 10000 CCS A
042447,001955: 00,2320 07201 TC ROUNDSUB
042448,001956: 00,2321 16115 TCF DANZIG # DO SO AND/OR EXIT.
042449,001957:
042450,001958: 00,2322 50125 DOSSHFT INDEX MPTEMP # PICK UP SHIFTING BIT.
042451,001959: 00,2323 37740 CAF BIT14
042452,001960: 00,2324 54125 TS MPTEMP
042453,001961: 00,2325 37744 CAF BIT10 # SEE IF TERMINAL ROUND DESIRED.
042454,001962: 00,2326 70106 MASK ADDRWD
042455,001963: 00,2327 10000 CCS A
042456,001964:
042457,001965: 00,2330 12031 TCF RIGHTR # YES.
042458,001966: 00,2331 12033 TCF MPACSHR # JUST SHIFT RIGHT.
042459,001967:
Page 948 |
042461,001969: # PROCESS THE RIGHT- (SL(R) WITH A NEGATIVE COUNT), LEFT-, AND LEFT OPTIONS.
042462,001970:
042463,001971:
042464,001972: 00,2332 40125 RIGHT- CS MPTEMP # GET ABSOLUTE VALUE - 1 OF SHIFT COUNT
042465,001973: 00,2333 62126 AD OCT176 # UNDERSTANDING THAT BIT8 (PSEUDO-SIGN)
042466,001974: 00,2334 54125 TS MPTEMP # WAS 1 INITIALLY.
042467,001975: 00,2335 12236 TCF RIGHT # DO NORMAL SHIFT RIGHT.
042468,001976:
042469,001977: 00,2336 40125 LEFT- CS MPTEMP # SAME PROLOGUE TO LEFT FOR INDEXED RIGHT
042470,001978: 00,2337 62126 AD OCT176 # SHIFTS WHOSE NET SHIFT COUNT IS NEGATIVE
042471,001979: 00,2340 54125 TS MPTEMP
042472,001980:
042473,001981: 00,2341 10153 LEFT CCS MODE # SINCE LEFT SHIFTING IS SONE ONE PLACE AT
042474,001982:
042475,001983: 00,2342 12345 TCF GENSCL # A TIME, NO COMPARISON WITH 14 NEED BE
042476,001984: 00,2343 12345 TCF GENSCL # DONE. FOR SCALARS, SEE IF TERMINAL ROUND
042477,001985: 00,2344 12145 TCF VSSL # DESIRED. FOR VECTORS, SHIFT IMMEDIATELY.
042478,001986:
042479,001987: 00,2345 37750 GENSCL CAF BIT6 # PUT ROUNDING BIT (BIT10 OF ADDRWD) INTO
042480,001988: 00,2346 00006 EXTEND # BIT 15 OF CYR WHERE THE ROUNDING BIT OF
042481,001989: 00,2347 70106 MP ADDRWD # A SHORT SHIFT LEFT WOULD BE.
042482,001990: 00,2350 54020 TS CYR
042483,001991: 00,2351 12103 TCF TSSL +2 # DO THE SHIFT.
042484,001992:
Page 949 |
042486,001994: # SCALAR DIVISION INSTRUCTIONS, DDV AND BDDV, ARE EXECUTED HERE. AT THIS POINT, THE DIVIDEND IS IN MPAC
042487,001995: # AND THE DIVISOR IN BUF.
042488,001996:
042489,001997: 00,2352 47755 DDV/BDDV CS ONE # INITIALIZATION.
042490,001998: 00,2353 54126 TS DVSIGN # +-1 FOR POSITIVE QUOTIENT - -0 FOR NEG.
042491,001999: 00,2354 54127 TS DVNORMCT # DIVIDEND NORMALIZATION COUNT.
042492,002000: 00,2355 54130 TS MAXDVSW # NEAR-ONE DIVIDE FLAG.
042493,002001:
042494,002002:
042495,002003: 00,2356 10120 CCS BUF # FORCE BUF POSITIVE WITH THE MAJOR PART
042496,002004: 00,2357 12406 TCF BUF+ # NON-ZERO.
042497,002005: 00,2360 12362 TCF +2
042498,002006: 00,2361 12402 TCF BUF-
042499,002007:
042500,002008: 00,2362 56121 XCH BUF +1 # SHIFT DIVIDEND AND DIVISOR LEFT 14.
042501,002009: 00,2363 56120 XCH BUF
042502,002010: 00,2364 56145 XCH MPAC +1
042503,002011: 00,2365 56144 XCH MPAC
042504,002012: 00,2366 00006 EXTEND # CHECK FOR OVERFLOW.
042505,002013:
042506,002014: 00,2367 12371 BZF +2
042507,002015: 00,2370 12375 TCF DVOVF
042508,002016:
042509,002017: 00,2371 10120 CCS BUF # TRY AGAIN ON FORMER MINOR PART.
042510,002018: 00,2372 12406 TCF BUF+
042511,002019: 00,2373 12375 TCF DVOVF # OVERFLOW ON ZERO DIVISOR.
042512,002020: 00,2374 12402 TCF BUF-
042513,002021:
042514,002022: 00,2375 37735 DVOVF CAF POSMAX # ON DIVISION OVERFLOW OF ANY SORT, SET
042515,002023: 00,2376 54144 TS MPAC # SET DP MPAC TO +-POSMAX.
042516,002024: 00,2377 02572 TC FINALDV +3
042517,002025: 00,2400 37755 CAF ONE # SET OVERFLOW INDICATOR AND EXIT.
042518,002026:
042519,002027: 00,2401 17144 TCF SETOVF
042520,002028:
042521,002029: 00,2402 00006 BUF- EXTEND # IF BUF IS NEGATIVE, COMPLEMENT IT AND
042522,002030: 00,2403 40121 DCS BUF # MAINTAIN DVSIGN FOR FINAL QUOTIENT SIGN.
042523,002031: 00,2404 52121 DXCH BUF
042524,002032: 00,2405 24126 INCR DVSIGN # NOW -0.
042525,002033:
042526,002034: 00,2406 10144 BUF+ CCS MPAC # FORCE MPAC POSITIVE, CHECKING FOR ZERO
042527,002035: 00,2407 12423 TCF MPAC+ # DIVIDEND IN THE PROCESS.
042528,002036: 00,2410 12412 TCF +2
042529,002037:
042530,002038: 00,2411 12417 TCF MPAC-
042531,002039: 00,2412 10145 CCS MPAC +1
042532,002040: 00,2413 12423 TCF MPAC+
042533,002041: 00,2414 16115 TCF DANZIG # EXIT IMMEDIATELY ON ZERO DIVIDEND.
042534,002042: 00,2415 12417 TCF MPAC-
042535,002043: 00,2416 16115 TCF DANZIG
042536,002044:
042537,002045: 00,2417 00006 MPAC- EXTEND # FORCE MPAC POSITIVE AS BUF IN BUF-.
042538,002046: 00,2420 40145 DCS MPAC
042539,002047: 00,2421 52145 DXCH MPAC
Page 950 |
042541,002049: 00,2422 24126 INCR DVSIGN # NOW +1 OR -0.
042542,002050:
Page 951 |
042544,002052: 00,2423 40144 MPAC+ CS MPAC # CHECK FOR DIVISION OVERFLOW. IF THE
042545,002053: 00,2424 67763 AD NEGONE # MAJOR PART OF THE DIVIDEND IS LESS THAN
042546,002054: 00,2425 60120 AD BUF # THE MAJOR PART OF THE DIVISOR BY AT
042547,002055: 00,2426 10000 CCS A # LEAST TWO, WE CAN PROCEED IMMEDIATELY
042548,002056: 00,2427 12471 TCF DVNORM # WITHOUT NORMALIZATION PRODUCING A DVMAX.
042549,002057: 00,2430 60001 -1/2+2 OCT 60001 # USED IN SQRTSUB.
042550,002058:
042551,002059: 00,2431 12432 TCF +1 # IF THE ABOVE DOES NOT HOLD, FORCE SIGN
042552,002060: 00,2432 37740 CAF HALF # AGREEMENT IN NUMERATOR AND DENOMINATOR
042553,002061: 00,2433 60000 DOUBLE # TO FACILITATE OVERFLOW AND NEAR-ONE
042554,002062: 00,2434 60145 AD MPAC +1 # CHECKING.
042555,002063: 00,2435 54145 TS MPAC +1
042556,002064: 00,2436 37761 CAF ZERO
042557,002065: 00,2437 67735 AD POSMAX
042558,002066: 00,2440 26144 ADS MPAC
042559,002067:
042560,002068: 00,2441 37740 CAF HALF # SAME FOR BUF.
042561,002069: 00,2442 60000 DOUBLE
042562,002070: 00,2443 60121 AD BUF +1
042563,002071:
042564,002072: 00,2444 54121 TS BUF +1
042565,002073: 00,2445 37761 CAF ZERO
042566,002074: 00,2446 67735 AD POSMAX
042567,002075: 00,2447 26120 ADS BUF
042568,002076:
042569,002077: 00,2450 40144 CS MPAC # CHECK MAGNITUDE OF SIGN-CORRECTED
042570,002078: 00,2451 60120 AD BUF # OPERANDS.
042571,002079: 00,2452 10000 CCS A
042572,002080: 00,2453 12471 TCF DVNORM # DIVIDE OK - WILL NOT BECOME MAXDV CASE.
042573,002081: 00,2454 00123 LBUF2 ADRES BUF2
042574,002082:
042575,002083: 00,2455 12375 TCF DVOVF # DIVISOR NOT LESS THAN DIVIDEND - OVF.
042576,002084:
042577,002085: 00,2456 54130 TS MAXDVSW # IF THE MAJOR PARTS OF THE DIVIDEND AND
042578,002086: 00,2457 40145 CS MPAC +1 # DIVISOR ARE EQUAL, A SPECIAL APPROXIMA-
042579,002087: 00,2460 60121 AD BUF +1 # TION IS USED (PROVIDED THE DIVISION IS
042580,002088: 00,2461 00006 EXTEND # POSSIBLE, OF COURSE).
042581,002089: 00,2462 62375 BZMF DVOVF
042582,002090: 00,2463 12471 TCF DVNORM # IF NO OVERFLOW.
042583,002091:
Page 952 |
042585,002093: 00,2464 00006 BUFNORM EXTEND # ADD -1 TO AUGMENT SHIFT COUNT AND SHIFT
042586,002094: 00,2465 24127 AUG DVNORMCT # LEFT ONE PLACE.
042587,002095:
042588,002096: 00,2466 00006 EXTEND
042589,002097: 00,2467 30121 DCA BUF
042590,002098: 00,2470 20121 DAS BUF
042591,002099:
042592,002100: 00,2471 30120 DVNORM CA BUF # SEE IF DIVISOR NORMALIZED YET.
042593,002101: 00,2472 60000 DOUBLE
042594,002102: 00,2473 54000 OVSK
042595,002103: 00,2474 12464 TCF BUFNORM # NO - SHIFT LEFT ONE AND TRY AGAIN.
042596,002104:
042597,002105: 00,2475 52145 DXCH MPAC # CALL DIVIDEND NORMALIZATION SEQUENCE
042598,002106:
042599,002107: 00,2476 50127 INDEX DVNORMCT # PRIOR TO DOING THE DIVIDE.
042600,002108: 00,2477 02527 TC MAXTEST
042601,002109:
042602,002110: 00,2500 54146 TS MPAC +2 # RETURNS WITH DIVISION DONE AND C(A) = 0.
042603,002111: 00,2501 16115 TCF DANZIG
042604,002112:
Page 953 |
042606,002114: # THE FOLLOWING ARE PROLOGUES TO SHIFT THE DIVIDEND ARRIVING IN A AND L BEFORE THE DIVIDE.
042607,002115:
042608,002116: 00,2502 22021 -21D LXCH SR # SPECIAL PROLOGUE FOR UNIT WHEN THE
042609,002117: 00,2503 00006 EXTEND # LENGTH OF THE ARGUMENT WAS NOT LESS THAN
042610,002118: 00,2504 77740 MP HALF # .5. IN THIS CASE, EACH COMPONENT MUST BE
042611,002119: 00,2505 56001 XCH L # SHIFTED RIGHT ONE TO PRODUCE A HALF-UNIT
042612,002120: 00,2506 60021 AD SR # VECTOR.
042613,002121: 00,2507 56001 XCH L
042614,002122:
042615,002123: 00,2510 12533 TCF GENDDV +1 # WITH DP DIVIDEND IN A,L.
042616,002124:
042617,002125: 00,2511 20001 DDOUBL # PROLOGUE WHICH NORMALIZES THE DIVIDEND
042618,002126: 00,2512 20001 DDOUBL # WHEN IT IS KNOWN THAT NO DIVISION
042619,002127: 00,2513 20001 DDOUBL # OVERFLOW WILL OCCUR.
042620,002128: 00,2514 20001 DDOUBL
042621,002129: 00,2515 20001 DDOUBL
042622,002130: 00,2516 20001 DDOUBL
042623,002131: 00,2517 20001 DDOUBL
042624,002132: 00,2520 20001 DDOUBL
042625,002133:
042626,002134: 00,2521 20001 DDOUBL
042627,002135: 00,2522 20001 DDOUBL
042628,002136: 00,2523 20001 DDOUBL
042629,002137: 00,2524 20001 DDOUBL
042630,002138: 00,2525 20001 DDOUBL
042631,002139: 00,2526 52145 DXCH MPAC
042632,002140:
042633,002141: 00,2527 10130 MAXTEST CCS MAXDVSW # 0 IF MAJORS MIGHT BE =, -1 OTHERWISE.
042634,002142: 00,2530 06552 BIASHI DEC .4192 B-1 # SQRT CONSTANTS
042635,002143:
042636,002144: 00,2531 12604 TCF MAXDV # CHECK TO SEE IF THEY ARE NOW EQUAL.
042637,002145:
Page 954 |
042639,002147: # THE FOLLOWING IS A GENERAL PURPOSE DOUBLE PRECISION DIVISION ROUTINE. IT DIVIDES MPAC BY BUF AND LEAVES
042640,002148:
042641,002149: # THE RESULT IN MPAC. THE FOLLOWING CONDITIONS MUST BE SATISFIED:
042642,002150:
042643,002151: # 1. THE DIVISOR (BUF) MUST BE POSITIVE AND NOT LESS THAN .5.
042644,002152:
042645,002153: # 2. THE DIVIDEND (MPAC) MUST BE POSITIVE WITH THE MAJOR PART OF MPAC STRICTLY LESS THAN THAT OF BUF
042646,002154: # (A SPECIAL APPROXIMATION, MAXDV, IS USED WHEN THE MAJOR PARTS ARE EQUAL).
042647,002155:
042648,002156: # UNDERSTANDING THAT A/B = Q + S(R/B) WHERE S = 2(-14) AND Q AND R ARE QUOTIENT AND REMAINDER, RESPEC-
042649,002157: # TIVELY, THE FOLLOWING APPROXIMATION IS OBTAINED BY MULTIPLYING ABOVE AND BELOW BY C - SD AND NEGLECTING TERMS OF
042650,002158: # ORDER S-SQUARED (POSSIBLY INTRODUCING ERROR INTO THE LOW TWO BITS OF THE RESULT). SIGN AGREEMENT IS UNNECESSARY.
042651,002159:
042652,002160: # A + SB . (R - QD) A + SB
042653,002161:
042654,002162: # ------ = Q + S(------) WHERE Q AND R ARE QUOTIENT AND REMAINDER OF ------ RESPECTIVELY.
042655,002163: # C + SD ( C ) C
042656,002164:
042657,002165:
042658,002166: 00,2532 52145 GENDDV DXCH MPAC # WE NEED A AND B ONLY FOR FIRST DV.
042659,002167: 00,2533 00006 +1 EXTEND # (SPECIAL UNIT PROLOGUE ENTERS HERE).
042660,002168: 00,2534 10120 DV BUF # A NOW CONTAINS Q AND L, R.
042661,002169: 00,2535 52145 DXCH MPAC
042662,002170:
042663,002171: 00,2536 40144 CS MPAC # FORM DIVIDEND FOR MINOR PART OF RESULT.
042664,002172: 00,2537 00006 EXTEND
042665,002173: 00,2540 70121 MP BUF +1
042666,002174: 00,2541 60145 AD MPAC +1 # OVERFLOW AT THIS POINT IS POSITIVE SINCE
042667,002175: 00,2542 54000 OVSK # R IS POSITIVE IN EVERY CASE.
042668,002176: 00,2543 12550 TCF +5
042669,002177:
042670,002178: 00,2544 00006 EXTEND # OVERFLOW CAN BE REMOVED BY SUBTRACTING C
042671,002179: 00,2545 60120 SU BUF # (BUF) ONCE SINCE R IS ALWAYS LESS THAN C
042672,002180: 00,2546 24144 INCR MPAC # IN THIS CASE. INCR COMPENSATES SUBTRACT.
042673,002181: 00,2547 12552 TCF +DOWN # (SINCE C(A) IS STILL POSITIVE).
042674,002182:
042675,002183: 00,2550 00006 +5 EXTEND # C(A) CAN BE MADE LESS THAN C IN MAGNI-
042676,002184:
042677,002185: 00,2551 62562 BZMF -UP # TUDE BY DIMINISHING IT BY C (SINCE C IS
042678,002186: # NOT LESS THAN .5) UNLESS C(A) = 0.
042679,002187:
Page 955 |
042681,002189: 00,2552 00006 +DOWN EXTEND
042682,002190: 00,2553 60120 SU BUF # IF POSITIVE, REDUCE ONLY IF NECESSARY
042683,002191: 00,2554 00006 EXTEND # SINCE THE COMPENSATING INCR MIGHT CAUSE
042684,002192: 00,2555 12560 BZF +3 # OVERFLOW.
042685,002193: 00,2556 00006 EXTEND # DONT SUBTRACT UNLESS RESULT IS POSITIVE
042686,002194: 00,2557 62566 BZMF ENDMAXDV # OR ZERO.
042687,002195:
042688,002196: 00,2560 24144 +3 INCR MPAC # KEEP SUBTRACT HERE AND COMPENSATE.
042689,002197: 00,2561 12567 TCF FINALDV
042690,002198:
042691,002199: 00,2562 00006 -UP EXTEND # IF ZERO, SET MINOR PART OF RESULT TO
042692,002200: 00,2563 12572 BZF FINALDV +3 # ZERO.
042693,002201:
042694,002202: 00,2564 00006 EXTEND # IF NEGATIVE, ADD C TO A, SUBTRACTING ONE
042695,002203: 00,2565 26144 DIM MPAC # TO COMPENSATE. DIM IS OK HERE SINCE THE
042696,002204: 00,2566 60120 ENDMAXDV AD BUF # MAJOR PART NEVER GOES NEGATIVE.
042697,002205:
Page 956 |
042699,002207: 00,2567 22007 FINALDV ZL # DO DV TO OBTAIN MINOR PART OF RESULT.
042700,002208: 00,2570 00006 EXTEND
042701,002209:
042702,002210: 00,2571 10120 DV BUF
042703,002211: 00,2572 54145 +3 TS MPAC +1
042704,002212:
042705,002213: 00,2573 10126 CCS DVSIGN # LEAVE RESULT POSITIVE UNLESS C(DVSIGN)=
042706,002214: 00,2574 00002 TC Q # -0.
042707,002215: 00,2575 00002 TC Q
042708,002216: 00,2576 00002 TC Q
042709,002217:
042710,002218: 00,2577 00006 EXTEND
042711,002219: 00,2600 40145 DCS MPAC
042712,002220:
042713,002221: 00,2601 52145 DXCH MPAC
042714,002222: 00,2602 37761 CAF ZERO # SO WE ALWAYS RETURN WITH C(A) = 0.
042715,002223: 00,2603 00002 TC Q
042716,002224:
Page 957 |
042718,002226: # IF THE MAJOR PARTS OF THE DIVISOR AND DIVIDEND ARE EQUAL, BUT THE MINOR PARTS ARE SUCH THAT THE
042719,002227: # DIVIDEND IS STRICTLY LESS THAN THE DIVISOR IN MAGNITUDE, THE FOLLOWING APPROXIMATION IS USED. THE ASSUMPTIONS
042720,002228: # ARE THE SAME AS THE GENERAL ROUTINE WITH THE ADDITION THAT SIGN AGREEMENT IS NECESSARY (B, C, & D POSITIVE).
042721,002229:
042722,002230: # C + SB . (C + B - D)
042723,002231: # ------ = 37777 + S(---------)
042724,002232: # C + SD ( C )
042725,002233:
042726,002234: # THE DIVISION MAY BE PERFORMED IMMEDIATELY SINCE B IS STRICTLY LESS THAN D AND C IS NOT LESS THAN .5.
042727,002235:
042728,002236:
042729,002237:
042730,002238: 00,2604 40144 MAXDV CS MPAC # SEE IF MAXDV CASE STILL HOLDS AFTER
042731,002239: 00,2605 60120 AD BUF # NORMALIZATION.
042732,002240: 00,2606 00006 EXTEND
042733,002241: 00,2607 12611 BZF +2
042734,002242: 00,2610 12532 TCF GENDDV # MPAC NOW LESS THAN BUF - DIVIDE AS USUAL
042735,002243:
042736,002244:
042737,002245: 00,2611 37735 +2 CAF POSMAX # SET MAJOR PART OF RESULT.
042738,002246: 00,2612 54144 TS MPAC
042739,002247:
042740,002248: 00,2613 40121 CS BUF +1 # FORM DIVIDEND OF MINOR PART OF RESULT.
042741,002249: 00,2614 60145 AD MPAC +1
042742,002250: 00,2615 12566 TCF ENDMAXDV # GO ADD C AND DO DIVIDE, ATTACHING SIGN
042743,002251: # BEFORE EXITING.
042744,002252:
Page 958 |
042746,002254: # VECTOR DIVIDED BY SCALAR, V/SC, IS EXECUTED HERE. THE VECTOR IS NOW IN MPAC WITH SCALAR IN BUF.
042747,002255:
042748,002256: 00,2616 47755 V/SC2 CS ONE # INITIALIZE DIVIDEND NORMALIZATION COUNT
042749,002257: 00,2617 54127 TS DVNORMCT # AND DIVISION SIGN REGISTER.
042750,002258: 00,2620 54117 TS VBUF +5
042751,002259:
042752,002260: 00,2621 10120 CCS BUF # FORCE DIVISOR POSITIVE WITH MAJOR PART
042753,002261: 00,2622 12657 TCF /BUF+ # NON-ZERO (IF POSSIBLE).
042754,002262: 00,2623 12625 TCF +2
042755,002263: 00,2624 12653 TCF /BUF-
042756,002264:
042757,002265: 00,2625 56121 XCH BUF +1 # SHIFT VECTOR AND SCALAR LEFT 14.
042758,002266: 00,2626 56120 XCH BUF
042759,002267: 00,2627 56145 XCH MPAC +1
042760,002268:
042761,002269: 00,2630 56144 XCH MPAC
042762,002270: 00,2631 00006 EXTEND # CHECK FOR OVERFLOW IN EACH CASE.
042763,002271: 00,2632 12634 BZF +2
042764,002272: 00,2633 12375 TCF DVOVF
042765,002273:
042766,002274: 00,2634 56150 XCH MPAC +4
042767,002275: 00,2635 56147 XCH MPAC +3
042768,002276: 00,2636 00006 EXTEND
042769,002277: 00,2637 12641 BZF +2
042770,002278: 00,2640 12375 TCF DVOVF
042771,002279:
042772,002280:
042773,002281: 00,2641 56152 XCH MPAC +6
042774,002282: 00,2642 56151 XCH MPAC +5
042775,002283: 00,2643 00006 EXTEND
042776,002284: 00,2644 12646 BZF +2
042777,002285: 00,2645 12375 TCF DVOVF
042778,002286:
042779,002287: 00,2646 10120 CCS BUF
042780,002288: 00,2647 12657 TCF /BUF+
042781,002289: 00,2650 12375 TCF DVOVF # ZERO DIVISOR - OVERFLOW.
042782,002290: 00,2651 12653 TCF /BUF-
042783,002291: 00,2652 12375 TCF DVOVF
042784,002292:
042785,002293:
042786,002294: 00,2653 00006 /BUF- EXTEND # ON NEGATIVE, COMPLEMENT BUF AND MAINTAIN
042787,002295: 00,2654 40121 DCS BUF # DVSIGN IN VBUF +5.
042788,002296: 00,2655 52121 DXCH BUF
042789,002297: 00,2656 24117 INCR VBUF +5
042790,002298:
Page 959 |
042792,002300: 00,2657 37740 /BUF+ CAF HALF # FORCE SIGN AGREEMENT IN DIVISOR.
042793,002301: 00,2660 60000 DOUBLE
042794,002302: 00,2661 60121 AD BUF +1
042795,002303: 00,2662 54121 TS BUF +1
042796,002304: 00,2663 37761 CAF ZERO
042797,002305: 00,2664 67735 AD POSMAX
042798,002306:
042799,002307: 00,2665 26120 ADS BUF
042800,002308:
042801,002309: 00,2666 56123 XCH BUF2 # LEAVE ABS(ORIGINAL DIVISOR) IN BUF2 FOR
042802,002310: 00,2667 30121 CA BUF +1 # OVERFLOW TESTING.
042803,002311: 00,2670 54124 TS BUF2 +1
042804,002312: 00,2671 12677 TCF /NORM # NORMALIZE DIVISOR IN BUF.
042805,002313:
042806,002314: 00,2672 00006 /NORM2 EXTEND # IF LESS THAN .5, AUGMENT DVNORMCT AND
042807,002315: 00,2673 24127 AUG DVNORMCT # DOUBLE DIVISOR.
042808,002316: 00,2674 00006 EXTEND
042809,002317: 00,2675 30121 DCA BUF
042810,002318: 00,2676 20121 DAS BUF
042811,002319:
042812,002320:
042813,002321: 00,2677 30120 /NORM CA BUF # SEE IF DIVISOR NORMALIZED.
042814,002322: 00,2700 60000 DOUBLE
042815,002323: 00,2701 54000 OVSK
042816,002324: 00,2702 12672 TCF /NORM2 # DOUBLE AND TRY AGAIN IF NOT.
042817,002325:
042818,002326: 00,2703 02715 TC V/SCDV # DO X COMPONENT DIVIDE.
042819,002327: 00,2704 52150 DXCH MPAC +3 # SUPPLY ARGUMENTS IN USUAL SEQUENCE.
042820,002328: 00,2705 52145 DXCH MPAC
042821,002329: 00,2706 52150 DXCH MPAC +3
042822,002330:
042823,002331: 00,2707 02715 TC V/SCDV # Y COMPONENT.
042824,002332: 00,2710 52152 DXCH MPAC +5
042825,002333: 00,2711 52145 DXCH MPAC
042826,002334: 00,2712 52152 DXCH MPAC +5
042827,002335:
042828,002336: 00,2713 02715 TC V/SCDV # Z COMPONENT.
042829,002337: 00,2714 17471 TCF VROTATEX # GO RE-ARRANGE COMPONENTS BEFORE EXIT.
042830,002338:
Page 960 |
042832,002340: # SUBROUTINE USED BY V/SC TO DIVIDE VECTOR COMPONENT IN MPAC,+1 BY THE SCALAR GIVEN IN BUF.
042833,002341:
042834,002342: 00,2715 30117 V/SCDV CA VBUF +5 # REFLECTS SIGN OF SCALAR.
042835,002343: 00,2716 54126 TS DVSIGN
042836,002344:
042837,002345: 00,2717 10144 CCS MPAC # FORCE MPAC POSITIVE, EXITING ON ZERO.
042838,002346: 00,2720 12734 TCF /MPAC+
042839,002347: 00,2721 12723 TCF +2
042840,002348: 00,2722 12730 TCF /MPAC-
042841,002349:
042842,002350: 00,2723 10145 CCS MPAC +1
042843,002351: 00,2724 12734 TCF /MPAC+
042844,002352:
042845,002353: 00,2725 00002 TC Q
042846,002354: 00,2726 12730 TCF /MPAC-
042847,002355: 00,2727 00002 TC Q
042848,002356:
042849,002357: 00,2730 00006 /MPAC- EXTEND # USUAL COMPLEMENTING AND SETTING OF SIGN.
042850,002358: 00,2731 40145 DCS MPAC
042851,002359: 00,2732 52145 DXCH MPAC
042852,002360: 00,2733 24126 INCR DVSIGN
042853,002361:
042854,002362: 00,2734 47755 /MPAC+ CS ONE # INITIALIZE NEAR-ONE SWITCH.
042855,002363: 00,2735 54130 TS MAXDVSW
042856,002364:
042857,002365:
042858,002366: 00,2736 40144 CS MPAC # CHECK POSSIBLE OVERFLOW.
042859,002367: 00,2737 60123 AD BUF2 # UNNORMALIZED INPUT DIVISOR.
042860,002368: 00,2740 00006 EXTEND
042861,002369: 00,2741 62745 BZMF /AGREE # CHECK FOR NEAR-ONE OR OVERFLOW.
042862,002370:
042863,002371: 00,2742 52145 DDVCALL DXCH MPAC # CALL PRE-DIVIDE NORMALIZATION.
042864,002372: 00,2743 50127 INDEX DVNORMCT
042865,002373: 00,2744 12527 TCF MAXTEST
042866,002374:
Page 961 |
042868,002376: 00,2745 37740 /AGREE CAF HALF # FORCE SIGN AGREEMENT IN DIVIDEND
042869,002377: 00,2746 60000 DOUBLE # (ALREADY DONE FOR DIVISOR).
042870,002378: 00,2747 60145 AD MPAC +1
042871,002379: 00,2750 54145 TS MPAC +1
042872,002380: 00,2751 37761 CAF ZERO
042873,002381: 00,2752 67735 AD POSMAX
042874,002382: 00,2753 26144 ADS MPAC
042875,002383:
042876,002384:
042877,002385: 00,2754 40144 CS MPAC # CHECK TO SEE IF OVERFLOW GONE OR IF
042878,002386: 00,2755 60123 AD BUF2 # NEAR-ONE CASE IS PRESENT.
042879,002387: 00,2756 10000 CCS A
042880,002388: 00,2757 12742 TCF DDVCALL # NOT NEAR-ONE.
042881,002389: 00,2760 32506 SLOPELO DEC .8324
042882,002390: 00,2761 12375 TCF DVOVF # NO HOPE.
042883,002391:
042884,002392: 00,2762 54130 TS MAXDVSW # SIGNAL POSSIBLE NEAR-ONE CASE.
042885,002393: 00,2763 40145 CS MPAC +1 # SEE IF DIVISION CAN BE DONE.
042886,002394: 00,2764 60124 AD BUF2 +1
042887,002395:
042888,002396: 00,2765 00006 EXTEND
042889,002397: 00,2766 62375 BZMF DVOVF
042890,002398: 00,2767 12742 TCF DDVCALL # GOING TO MAXDV.
042891,002399:
Page 962 |
042893,002401: # THE FOLLOWING ROUTINE EXECUTES THE UNIT INSTRUCTION, WHICH TAKES THE UNIT OF THE VECTOR IN MPAC.
042894,002402:
042895,002403: 00,2770 07604 UNIT TC MPACVBUF # SAVE THE ARGUMENT IN VBUF.
042896,002404: 00,2771 37761 CAF ZERO # MUST SENSE OVERFLOW IN FOLLOWING DOT.
042897,002405: 00,2772 56111 XCH OVFIND
042898,002406: 00,2773 54131 TS TEM1
042899,002407: 00,2774 03267 TC VSQSUB # DOT MPAC WITH ITSELF.
042900,002408: 00,2775 30131 CA TEM1
042901,002409: 00,2776 56111 XCH OVFIND
042902,002410: 00,2777 00006 EXTEND
042903,002411: 00,3000 13002 BZF +2
042904,002412: 00,3001 12375 TCF DVOVF
042905,002413: 00,3002 00006 EXTEND
042906,002414: 00,3003 30145 DCA MPAC # LEAVE THE SQUARE OF THE LENGTH OF THE
042907,002415:
042908,002416: 00,3004 50110 INDEX FIXLOC # ARGUMENT IN LVSQUARE.
042909,002417: 00,3005 52043 DXCH LVSQUARE
042910,002418:
042911,002419: 00,3006 03313 TC SQRTSUB # GO TAKE THE NORMALIZED SQUARE ROOT.
042912,002420:
042913,002421: 00,3007 10144 CCS MPAC # CHECK FOR UNIT OVERFLOW.
042914,002422: 00,3010 13015 TCF +5 # MPAC IS NOT LESS THAN .5 UNLESS
042915,002423: 00,3011 54001 TS L
042916,002424: 00,3012 50110 INDEX FIXLOC
042917,002425: 00,3013 52045 DXCH LV
042918,002426:
042919,002427: 00,3014 12375 TCF DVOVF # INPUT TO SQRTSUB WAS 0.
042920,002428:
042921,002429: 00,3015 43116 CS FOURTEEN # SEE IF THE INPUT WAS SO SMALL THE THE
042922,002430: 00,3016 60125 AD MPTEMP # FIRST TWO REGISTERS OF THE SQUARE WERE 0
042923,002431: 00,3017 10000 CCS A
042924,002432: 00,3020 40000 COM # IF SO, SAVE THE NEGATIVE OF THE SHIFT
042925,002433: 00,3021 13077 TCF SMALL # COUNT -15D.
042926,002434:
042927,002435: 00,3022 13031 TCF LARGE # (THIS IS USUALLY THE CASE.)
042928,002436:
042929,002437: 00,3023 43115 CS THIRTEEN # IF THE SHIFT COUNT WAS EXACTLY 14, SET
042930,002438: 00,3024 54125 TS MPTEMP # THE PRE-DIVIDE NORM COUNT TO -13D.
042931,002439:
042932,002440:
042933,002441: 00,3025 30144 CA MPAC # SHIFT THE LENGTH RIGHT 14 BEFORE STORING
042934,002442: 00,3026 54001 SMALL2 TS L # (SMALL EXITS TO THIS POINT).
042935,002443: 00,3027 37761 CAF ZERO
042936,002444: 00,3030 13056 TCF LARGE2 # GO TO STORE LENGTH AND PROCEED.
042937,002445:
042938,002446: 00,3031 10125 LARGE CCS MPTEMP # MOST ALL CASES COME HERE.
042939,002447: 00,3032 13040 TCF LARGE3 # SEE IF NO NORMALIZATION WAS REQUIRED BY
042940,002448:
042941,002449: 00,3033 42024 CS SRDDV # SQRT, AND IF SO, SET UP FOR A SHIFT
042942,002450:
042943,002451: 00,3034 54125 TS MPTEMP # RIGHT 1 BEFORE DIVIDING TO PRODUCE
042944,002452: 00,3035 00006 EXTEND # THE DESIRED HALF UNIT VECTOR.
042945,002453: 00,3036 30145 DCA MPAC
042946,002454: 00,3037 13056 TCF LARGE2
042947,002455:
Page 963 |
042949,002457: 00,3040 40000 LARGE3 COM # LEAVE NEGATIVE OF SHIFT COUNT-1 FOR
042950,002458: 00,3041 54125 TS MPTEMP # PREDIVIDE LEFT SHIFT.
042951,002459:
042952,002460: 00,3042 40000 COM # PICK UP REQUIRED SHIFTING BIT TO UNNORM-
042953,002461: 00,3043 50000 INDEX A # ALIZE THE SQRT RESULT.
042954,002462: 00,3044 37740 CAF BIT14
042955,002463:
042956,002464: 00,3045 54120 TS BUF
042957,002465: 00,3046 00006 EXTEND
042958,002466: 00,3047 70145 MP MPAC +1
042959,002467: 00,3050 56120 XCH BUF
042960,002468: 00,3051 00006 EXTEND # (UNNORMALIZE THE SQRT FOR LV).
042961,002469: 00,3052 70144 MP MPAC
042962,002470: 00,3053 56001 XCH L
042963,002471: 00,3054 60120 AD BUF
042964,002472: 00,3055 56001 XCH L
042965,002473:
042966,002474: 00,3056 50110 LARGE2 INDEX FIXLOC
042967,002475: 00,3057 52045 DXCH LV # LENGTH NOW STORED IN WORK AREA.
042968,002476:
042969,002477:
042970,002478: 00,3060 47755 CS ONE
042971,002479: 00,3061 54130 TS MAXDVSW # NO MAXDV CASES IN UNIT.
042972,002480:
042973,002481: 00,3062 52113 DXCH VBUF # PREPARE X COMPONENT FOR DIVIDE, SETTING
042974,002482: 00,3063 52145 DXCH MPAC # LENGTH OF VECTOR AS DIVISOR IN BUF.
042975,002483: 00,3064 52121 DXCH BUF
042976,002484: 00,3065 03117 TC UNITDV
042977,002485:
042978,002486: 00,3066 52115 DXCH VBUF +2 # DO Y AND Z IN USUAL FASHION SO WE CAN
042979,002487:
042980,002488: 00,3067 52145 DXCH MPAC # EXIT THROUGH VROTATEX.
042981,002489: 00,3070 52150 DXCH MPAC +3
042982,002490: 00,3071 03117 TC UNITDV
042983,002491:
042984,002492: 00,3072 52117 DXCH VBUF +4
042985,002493: 00,3073 52145 DXCH MPAC
042986,002494: 00,3074 52152 DXCH MPAC +5
042987,002495: 00,3075 03117 TC UNITDV
042988,002496: 00,3076 17471 TCF VROTATEX # AND EXIT.
042989,002497:
Page 964 |
042991,002499: # IF THE LENGTH OF THE ARGUMENT VECTOR WAS LESS THAN 2(-28), EACH COMPONENT MUST BE SHIFTED LEFT AT LEAST
042992,002500: # 14 PLACES BEFORE THE DIVIDE. NOTE THAT IN THIS CASE, THE MAJOR PART OF EACH COMPONENT IS ZERO.
042993,002501:
042994,002502: 00,3077 54125 SMALL TS MPTEMP # NEGATIVE OF PRE-DIVIDE SHIFT COUNT.
042995,002503:
042996,002504: 00,3100 37761 CAF ZERO # SHIFT EACH COMPONENT LEFT 14.
042997,002505: 00,3101 56113 XCH VBUF +1
042998,002506: 00,3102 56112 XCH VBUF
042999,002507: 00,3103 56115 XCH VBUF +3
043000,002508: 00,3104 56114 XCH VBUF +2
043001,002509: 00,3105 56117 XCH VBUF +5
043002,002510: 00,3106 56116 XCH VBUF +4
043003,002511:
043004,002512: 00,3107 40125 CS MPTEMP
043005,002513: 00,3110 50000 INDEX A
043006,002514: 00,3111 37740 CAF BIT14
043007,002515: 00,3112 00006 EXTEND
043008,002516: 00,3113 70144 MP MPAC
043009,002517: 00,3114 13026 TCF SMALL2
043010,002518:
043011,002519: 00,3115 00015 THIRTEEN DEC 13 B-14
043012,002520: 00,3116 00016 FOURTEEN DEC 14 B-14
043013,002521:
Page 965 |
043015,002523: # THE FOLLOWING ROUTINE SETS UP THE CALL TO THE DIVIDE ROUTINES.
043016,002524:
043017,002525: 00,3117 10144 UNITDV CCS MPAC # FORCE MPAC POSITIVE IF POSSIBLE, SETTING
043018,002526: 00,3120 13136 TCF UMPAC+ # DVSIGN ACCORDING TO THE SIGN OF MPAC
043019,002527: 00,3121 13123 TCF +2 # SINCE THE DIVISOR IS ALWAYS POSITIVE
043020,002528: 00,3122 13130 TCF UMPAC- # HERE.
043021,002529:
043022,002530: 00,3123 10145 CCS MPAC +1
043023,002531:
043024,002532: 00,3124 13136 TCF UMPAC+
043025,002533: 00,3125 00002 TC Q # EXIT IMMEDIATELY ON ZERO.
043026,002534: 00,3126 13130 TCF UMPAC-
043027,002535: 00,3127 00002 TC Q
043028,002536:
043029,002537: 00,3130 47761 UMPAC- CS ZERO # IF NEGATIVE, SET -0 IN DVSIGN FOR FINAL
043030,002538: 00,3131 54126 TS DVSIGN # COMPLEMENT.
043031,002539: 00,3132 00006 EXTEND
043032,002540: 00,3133 40145 DCS MPAC # PICK UP ABSOLUTE VALUE OF ARG AND JUMP.
043033,002541: 00,3134 50125 INDEX MPTEMP
043034,002542:
043035,002543: 00,3135 12526 TCF MAXTEST -1
043036,002544:
043037,002545: 00,3136 54126 UMPAC+ TS DVSIGN # SET DVSIGN FOR POSITIVE QUOTIENT.
043038,002546: 00,3137 52145 DXCH MPAC
043039,002547: 00,3140 50125 INDEX MPTEMP
043040,002548: 00,3141 12526 TCF MAXTEST -1
043041,002549:
Page 966 |
043043,002551: # MISCELLANEOUS UNARY OPERATIONS.
043044,002552:
043045,002553: 00,3142 03250 DSQ TC DSQSUB # SQUARE THE DP CONTENTS OF MPAC.
043046,002554: 00,3143 16115 TCF DANZIG
043047,002555:
043048,002556: 00,3144 10153 ABVALABS CCS MODE # ABVAL OR ABS INSTRUCTION.
043049,002557: 00,3145 13174 TCF ABS # DO ABS ON SCALAR.
043050,002558: 00,3146 13174 TCF ABS
043051,002559:
043052,002560: 00,3147 03267 ABVAL TC VSQSUB # DOT MPAC WITH ITSELF.
043053,002561: 00,3150 22153 LXCH MODE # MODE IS NOW DP (L ZERO AFTER DAS).
043054,002562:
043055,002563: 00,3151 00006 EXTEND # STORE SQUARE OF LENGTH IN WORK AREA.
043056,002564: 00,3152 30145 DCA MPAC
043057,002565:
043058,002566: 00,3153 50110 INDEX FIXLOC
043059,002567: 00,3154 52043 DXCH LVSQUARE
043060,002568:
043061,002569: 00,3155 03313 SQRT TC SQRTSUB # TAKE THE SQUARE ROOT OF MPAC.
043062,002570: 00,3156 10125 CCS MPTEMP # RETURNED NORMALIZED SQUARE ROOT. SEE IF
043063,002571: 00,3157 13161 TCF +2 # ANY UN-NORMALIZATION REQUIRED AND EXIT
043064,002572: 00,3160 16115 TCF DANZIG # IF NOT.
043065,002573:
043066,002574: 00,3161 63676 AD NEG12 # A RIGHT SHIFT OF MORE THAN 13 COULD BE
043067,002575: 00,3162 00006 EXTEND # REQUIRED IF INPUT WAS ZERO IN MPAC,+1.
043068,002576:
043069,002577: 00,3163 63167 BZMF SQRTSHFT # GOES HERE IN MOST CASES.
043070,002578: 00,3164 22007 ZL # IF A LONG SHIFT IS REQUIRED, GO TO
043071,002579: 00,3165 22106 LXCH ADDRWD # GENERAL RIGHT SHIFT ROUTINES.
043072,002580: 00,3166 12303 TCF GENSCR +4 # ADDRWD WAS ZERO TO PREVENT ROUND.
043073,002581:
043074,002582: 00,3167 50125 SQRTSHFT INDEX MPTEMP # SELECT SHIFTING BIT AND EXIT THROUGH
043075,002583: 00,3170 37737 CAF BIT15 # SHIFT ROUTINES.
043076,002584: 00,3171 54125 TS MPTEMP
043077,002585: 00,3172 37761 CAF ZERO # TO ZERO MPAC +2 IN THE PROCESS.
043078,002586: 00,3173 12036 TCF MPACSHR +3
043079,002587:
043080,002588: 00,3174 06772 ABS TC BRANCH # TEST SIGN OF MPAC AND COMPLEMENT IF
043081,002589:
043082,002590: 00,3175 16115 TCF DANZIG
043083,002591: 00,3176 16115 TCF DANZIG
043084,002592: 00,3177 17714 TCF COMP
043085,002593:
Page 967 |
043087,002595: 00,3200 47753 VDEF CS FOUR # VECTOR DEFINE - ESSENTIALLY TREATS
043088,002596: 00,3201 26156 ADS PUSHLOC # SCALAR IN MPAC AS X COMPONENT, PUSHES UP
043089,002597: 00,3202 00006 EXTEND # FOR Y AND THEN AGAIN FOR Z.
043090,002598: 00,3203 50000 INDEX A
043091,002599: 00,3204 30003 DCA 2
043092,002600: 00,3205 52150 DXCH MPAC +3
043093,002601:
043094,002602: 00,3206 00006 EXTEND
043095,002603: 00,3207 50156 INDEX PUSHLOC
043096,002604: 00,3210 30001 DCA 0
043097,002605: 00,3211 52152 DXCH MPAC +5
043098,002606: 00,3212 47755 CS ONE # MODE IS NOW VECTOR.
043099,002607: 00,3213 16114 TCF NEWMODE
043100,002608:
043101,002609: 00,3214 03267 VSQ TC VSQSUB # DOT MPAC WITH ITSELF.
043102,002610: 00,3215 37761 CAF ZERO
043103,002611: 00,3216 16114 TCF NEWMODE # MODE IS NOW DP.
043104,002612:
043105,002613: 00,3217 00006 PUSH EXTEND # PUSH DOWN MPAC LEAVING IT LOADED.
043106,002614:
043107,002615: 00,3220 30145 DCA MPAC
043108,002616: 00,3221 50156 INDEX PUSHLOC # PUSH DOWN FIRST TWO REGISTERS IN EACH
043109,002617: 00,3222 52001 DXCH 0
043110,002618:
043111,002619: 00,3223 50153 INDEX MODE # INCREMENT PUSHDOWN POINTER.
043112,002620: 00,3224 36300 CAF NO.WDS
043113,002621: 00,3225 26156 ADS PUSHLOC
043114,002622:
043115,002623: 00,3226 10153 CCS MODE
043116,002624: 00,3227 13242 TCF TPUSH # PUSH DOWN MPAC +2.
043117,002625:
043118,002626: 00,3230 16115 TCF DANZIG # DONE FOR DP.
043119,002627:
043120,002628: 00,3231 00006 EXTEND # ON VECTOR, PUSH DOWN Y AND Z COMPONENTS.
043121,002629: 00,3232 30150 DCA MPAC +3
043122,002630: 00,3233 50156 INDEX PUSHLOC
043123,002631: 00,3234 51775 DXCH 0 -4
043124,002632: 00,3235 00006 EXTEND
043125,002633: 00,3236 30152 DCA MPAC +5
043126,002634: 00,3237 50156 INDEX PUSHLOC
043127,002635: 00,3240 51777 DXCH 0 -2
043128,002636: 00,3241 16115 TCF DANZIG
043129,002637:
043130,002638:
043131,002639: 00,3242 30146 TPUSH CA MPAC +2
043132,002640: 00,3243 16623 TCF ENDTPUSH +2
043133,002641:
043134,002642: 00,3244 50110 RVQ INDEX FIXLOC # RVQ - RETURN IVA QPRET.
043135,002643: 00,3245 30052 CA QPRET
043136,002644: 00,3246 54107 TS POLISH
043137,002645: 00,3247 16721 TCF GOTO +4 # (ASSUME QPRET POINTS TO FIXED ONLY.)
043138,002646:
Page 968 |
043140,002648: # THE FOLLOWING SUBROUTINES ARE USED IN SQUARING MPAC, IN BOTH THE SCALAR AND VECTOR SENSE. THEY ARE
043141,002649: # SPECIAL CASES OF DMPSUB AND DOTSUB, PUT IN TO SAVE SOME TIME.
043142,002650:
043143,002651: 00,3250 30145 DSQSUB CA MPAC +1 # SQUARES THE SCALAR CONTENTS OF MPAC.
043144,002652: 00,3251 00006 EXTEND
043145,002653: 00,3252 70000 SQUARE
043146,002654: 00,3253 54146 TS MPAC +2
043147,002655: 00,3254 37761 CAF ZERO # FORM 2(CROSS TERM).
043148,002656: 00,3255 56145 XCH MPAC +1
043149,002657: 00,3256 00006 EXTEND
043150,002658: 00,3257 70144 MP MPAC
043151,002659: 00,3260 20001 DDOUBL # AND MAYBE OVERFLOW.
043152,002660:
043153,002661: 00,3261 20146 DAS MPAC +1 # AND SET A TO NET OVERFLOW.
043154,002662: 00,3262 56144 XCH MPAC
043155,002663: 00,3263 00006 EXTEND
043156,002664: 00,3264 70000 SQUARE
043157,002665: 00,3265 20145 DAS MPAC
043158,002666: 00,3266 00002 TC Q
043159,002667:
043160,002668: 00,3267 00006 VSQSUB EXTEND # DOTS THE VECTOR IN MPAC WITH ITSELF.
043161,002669: 00,3270 22127 QXCH DOTRET
043162,002670: 00,3271 03250 TC DSQSUB # SQUARE THE X COMPONENT.
043163,002671: 00,3272 52150 DXCH MPAC +3
043164,002672: 00,3273 52145 DXCH MPAC
043165,002673:
043166,002674: 00,3274 52121 DXCH BUF # SO WE CAN END IN DOTSUB.
043167,002675: 00,3275 30146 CA MPAC +2
043168,002676: 00,3276 54122 TS BUF +2
043169,002677:
043170,002678: 00,3277 03250 TC DSQSUB # SQUARE Y COMPONENT.
043171,002679: 00,3300 52146 DXCH MPAC +1
043172,002680: 00,3301 20122 DAS BUF +1
043173,002681: 00,3302 60144 AD MPAC
043174,002682: 00,3303 60120 AD BUF
043175,002683: 00,3304 54120 TS BUF
043176,002684:
043177,002685: 00,3305 13307 TCF +2
043178,002686: 00,3306 54111 TS OVFIND # IF OVERFLOW.
043179,002687:
043180,002688: 00,3307 52152 DXCH MPAC +5
043181,002689: 00,3310 52145 DXCH MPAC
043182,002690: 00,3311 03250 TC DSQSUB # SQUARE Z COMPONENT.
043183,002691: 00,3312 17250 TCF ENDDOT # END AS IN DOTSUB.
043184,002692:
Page 969 |
043186,002694: # DOUBLE PRECISION SQUARE ROOT ROUTINE. TAKE THE SQUARE ROOT OF THE TRIPLE PRECISION (MPAC +2 USED ONLY
043187,002695: # IN NORMALIZATION) CONTENTS OF MPAC AND LEAVE THE NORMALIZED RESULT IN MPAC (C(MPAC) GREATER THAN OR EQUAL TO
043188,002696: # .5). THE RIGHT SHIFT COUNT (TO UNNORMALIZE) IS LEFT IN MPTEMP.
043189,002697:
043190,002698:
043191,002699:
043192,002700: 00,3313 37761 SQRTSUB CAF ZERO # START BY ZEROING RIGHT SHIFT COUNT.
043193,002701: 00,3314 54125 TS MPTEMP
043194,002702:
043195,002703:
043196,002704: 00,3315 10144 CCS MPAC # CHECK FOR POSITIVE ARGUMENT, SHIFTING
043197,002705: 00,3316 13354 TCF SMPAC+ # FIRST SIGNIFICANT MPAC REGISTER INTO
043198,002706: 00,3317 13321 TCF +2 # MPAC ITSELF.
043199,002707: 00,3320 13343 TCF SQRTNEG # SEE IF MAG OF ARGUMENT LESS THAN 10(-4).
043200,002708:
043201,002709: 00,3321 56146 XCH MPAC +2 # MPAC IS ZERO - SHIFT LEFT 14.
043202,002710: 00,3322 56145 XCH MPAC +1
043203,002711: 00,3323 54144 TS MPAC
043204,002712: 00,3324 37757 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
043205,002713:
043206,002714: 00,3325 54125 TS MPTEMP
043207,002715:
043208,002716: 00,3326 10144 CCS MPAC # SEE IF MPAC NOW PNZ.
043209,002717: 00,3327 13354 TCF SMPAC+
043210,002718: 00,3330 13332 TCF +2
043211,002719: 00,3331 13346 TCF ZEROANS # NEGATIVE BUT LESS THAN 10(-4) IN MAG.
043212,002720:
043213,002721: 00,3332 56145 XCH MPAC +1 # ZERO - SHIFT LEFT 14 AGAIN.
043214,002722: 00,3333 54144 TS MPAC
043215,002723: 00,3334 37757 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
043216,002724: 00,3335 26125 ADS MPTEMP
043217,002725:
043218,002726:
043219,002727: 00,3336 10144 CCS MPAC
043220,002728: 00,3337 13354 TCF SMPAC+
043221,002729: 00,3340 00002 TC Q # SQRT(0) = 0.
043222,002730: 00,3341 13346 TCF ZEROANS
043223,002731: 00,3342 00002 TC Q
043224,002732:
043225,002733:
043226,002734:
043227,002735: 00,3343 10000 SQRTNEG CCS A # ARGUMENT IS NEGATIVE, BUT SEE IF SIGN-
043228,002736: 00,3344 13352 TCF SQRTABRT # CORRECTED ARGUMENT IS LESS THAN 10(-4)
043229,002737:
043230,002738: 00,3345 10145 CCS MPAC +1 # IN MAGNITUDE. IF SO, CALL ANSWER ZERO.
043231,002739: 00,3346 37761 ZEROANS CAF ZERO # FORCE ANSWER TO ZERO HERE.
043232,002740: 00,3347 13422 TCF FIXROOT
043233,002741: 00,3350 13352 TCF SQRTABRT
043234,002742: 00,3351 13422 TCF FIXROOT
043235,002743:
043236,002744: 00,3352 06000 SQRTABRT TC ABORT
043237,002745: 00,3353 01302 OCT 1302
043238,002746:
Page 970 |
043240,002748: 00,3354 62430 SMPAC+ AD -1/2+2 # SEE IF ARGUMENT GREATER THAN OR EQUAL TO
043241,002749:
043242,002750: 00,3355 00006 EXTEND # .5.
043243,002751: 00,3356 63425 BZMF SRTEST # IF SO, SEE IF LESS THAN .25.
043244,002752:
043245,002753: 00,3357 52145 DXCH MPAC # WE WILL TAKE THE SQUARE ROOT OF MPAC/2.
043246,002754: 00,3360 22021 LXCH SR # SHIFT RIGHT 1 AND GO TO THE SQRT ROUTINE
043247,002755: 00,3361 00006 EXTEND
043248,002756: 00,3362 77740 MP HALF
043249,002757: 00,3363 52145 DXCH MPAC
043250,002758: 00,3364 56021 XCH SR
043251,002759: 00,3365 26145 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
043252,002760:
043253,002761: 00,3366 32314 ARGHI CAF SLOPEHI # ARGUMENT BETWEEN .25 AND .5. GET A
043254,002762:
043255,002763: 00,3367 00006 EXTEND # LINEAR APPROXIMATION FOR THIS RANGE.
043256,002764: 00,3370 70144 MP MPAC
043257,002765: 00,3371 62530 AD BIASHI # X0/2 = (MPAC/2)(SLOPEHI) + BIASHI/2.
043258,002766:
043259,002767: 00,3372 54120 +4 TS BUF # X0/2 (ARGLO ENTERS HERE).
043260,002768: 00,3373 30144 CA MPAC # SINGLE-PRECISION THROUGHOUT.
043261,002769: 00,3374 22007 ZL
043262,002770: 00,3375 00006 EXTEND
043263,002771: 00,3376 10120 DV BUF # (MPAC/2)/(X0/2)
043264,002772: 00,3377 00006 EXTEND
043265,002773:
043266,002774: 00,3400 77740 MP HALF
043267,002775: 00,3401 26120 ADS BUF # X1 = X0/2 + .5(MPAC/2)/(X0/2).
043268,002776:
043269,002777: 00,3402 00006 EXTEND
043270,002778: 00,3403 77740 MP HALF # FORM UP X1/2.
043271,002779: 00,3404 52145 DXCH MPAC # SAVE AND BRING OUT ARGUMENT.
043272,002780: 00,3405 00006 EXTEND # TAKE DP QUOTIENT WITH X1.
043273,002781: 00,3406 10120 DV BUF
043274,002782: 00,3407 54121 TS BUF +1 # SAVE MAJOR PART OF QUOTIENT.
043275,002783: 00,3410 37761 CAF ZERO # FORM MINOR PART OF QUOTIENT USING
043276,002784: 00,3411 56001 XCH L # (REMAINDER,0).
043277,002785: 00,3412 00006 EXTEND
043278,002786:
043279,002787: 00,3413 10120 DV BUF
043280,002788: 00,3414 54001 TS L # IN PREPARATION FOR DAS.
043281,002789: 00,3415 30121 CA BUF +1
043282,002790: 00,3416 20145 DAS MPAC # X2 = X1/2 + (MPAC/2)X1
043283,002791:
043284,002792: 00,3417 00006 EXTEND # OVERFLOWS IF ARG. NEAR POSMAX.
043285,002793: 00,3420 13424 BZF TCQBNK00
043286,002794: 00,3421 37735 CAF POSMAX
043287,002795: 00,3422 54144 FIXROOT TS MPAC
043288,002796: 00,3423 54145 TS MPAC +1
043289,002797:
043290,002798: 00,3424 00002 TCQBNK00 TC Q # RETURN TO CALLER TO UNNORMALIZE, ETC.
043291,002799:
Page 971 |
043293,002801: 00,3425 67741 SRTEST AD QUARTER # ARGUMENT WAS LESS THAN .5, SEE IF LESS
043294,002802: 00,3426 00006 EXTEND # THAN .25.
043295,002803: 00,3427 63451 BZMF SQRTNORM # IF SO, BEGIN NORMALIZATION.
043296,002804:
043297,002805: 00,3430 52145 DXCH MPAC # IF BETWEEN .5 AND .25, SHIFT RIGHT 1 AND
043298,002806: 00,3431 22021 LXCH SR # START AT ARGLO.
043299,002807:
043300,002808: 00,3432 00006 EXTEND
043301,002809: 00,3433 77740 MP HALF
043302,002810: 00,3434 52145 DXCH MPAC
043303,002811: 00,3435 56021 XCH SR
043304,002812: 00,3436 26145 ADS MPAC +1 # NO OVERFLOW.
043305,002813:
043306,002814: 00,3437 32760 ARGLO CAF SLOPELO # (NORMALIZED) ARGUMENT BETWEEN .125 AND
043307,002815: 00,3440 00006 EXTEND # .25
043308,002816: 00,3441 70144 MP MPAC
043309,002817: 00,3442 62270 AD BIASLO
043310,002818: 00,3443 13372 TCF ARGHI +4 # BEGIN SQUARE ROOT.
043311,002819:
043312,002820:
043313,002821: 00,3444 00006 SQRTNM2 EXTEND # SHIFT LEFT 2 AND INCREMENT RIGHT SHIFT
043314,002822: 00,3445 30146 DCA MPAC +1 # COUNT (FOR TERMINAL UNNORMALIZATION).
043315,002823: 00,3446 20146 DAS MPAC +1
043316,002824: 00,3447 60144 AD MPAC
043317,002825: 00,3450 26144 ADS MPAC # (NO OVERFLOW).
043318,002826:
043319,002827: 00,3451 24125 SQRTNORM INCR MPTEMP # FIRST TIME THROUGH, JUST SHIFT LEFT 1
043320,002828: 00,3452 00006 EXTEND # (PUTS IN EFFECTIVE RIGHT SHIFT SINCE
043321,002829: 00,3453 30146 DCA MPAC +1 # WE WANT MPAC/2).
043322,002830: 00,3454 20146 DAS MPAC +1
043323,002831:
043324,002832: 00,3455 60144 AD MPAC
043325,002833: 00,3456 26144 ADS MPAC # (AGAIN NO OVERFLOW).
043326,002834: 00,3457 60000 DOUBLE
043327,002835: 00,3460 54022 TS CYL
043328,002836:
043329,002837: 00,3461 10022 NORMTEST CCS CYL # SEE IF ARGUMENT NOW NORMALIZED AT
043330,002838: 00,3462 10022 CCS CYL # GREATER THAN .125.
043331,002839: 00,3463 13444 TCF SQRTNM2 # NO - SHIFT LEFT 2 MORE AND TRY AGAIN.
043332,002840: 00,3464 13366 TCF ARGHI # YES - NOW BETWEEN .5 AND .25.
043333,002841: 00,3465 13437 TCF ARGLO # ARGUMENT NOW BETWEEN .25 AND .125.
043334,002842:
Page 972 |
043336,002844: # TRIGONOMETRIC FUNCTION PACKAGE.
043337,002845:
043338,002846:
043339,002847: # THE FOLLOWING TRIGONOMETRIC FUNCTIONS ARE AVAILABLE AS INTERPRETIVE OPERATIONS:
043340,002848:
043341,002849: # 1. SIN COMPUTES (1/2)SINE(2 PI MPAC).
043342,002850: # 2. COS COMPUTES (1/2)COSINE(2 PI MPAC).
043343,002851:
043344,002852: # 3. ASIN COMPUTES (1/2PI)ARCSINE(2 MPAC).
043345,002853: # 4. ACOS COMPUTES (1/2PI)ARCCOSINE(2 MPAC).
043346,002854:
043347,002855: # SIN-ASIN AND COS-ACOS ARE MUTUALLY INVERSE, IE SIN(ASIN(X)) = X.
043348,002856:
043349,002857:
043350,002858:
043351,002859: 00,3466 06772 COSINE TC BRANCH # FINDS COSINE USING THE IDENTITY
043352,002860: 00,3467 13472 TCF +3 # COS(X) = SIN(PI/2 - ABS(X)).
043353,002861: 00,3470 13475 TCF PRESINE
043354,002862: 00,3471 13475 TCF PRESINE
043355,002863:
043356,002864: 00,3472 00006 +3 EXTEND
043357,002865: 00,3473 40145 DCS MPAC
043358,002866: 00,3474 52145 DXCH MPAC
043359,002867:
043360,002868: 00,3475 37741 PRESINE CAF QUARTER # PI/2 SCALED.
043361,002869: 00,3476 26144 ADS MPAC
043362,002870:
043363,002871:
043364,002872:
043365,002873:
043366,002874: 00,3477 52145 SINE DXCH MPAC # DOUBLE ARGUMENT.
043367,002875: 00,3500 20001 DDOUBL
043368,002876: 00,3501 54000 OVSK # SEE IF OVERFLOW PRESENT.
043369,002877: 00,3502 13505 TCF +3 # IF NOT, ARGUMENT OK AS IS.
043370,002878:
043371,002879: 00,3503 00006 EXTEND # IF SO, WE LOST (OR GAINED) PI, SO
043372,002880: 00,3504 40001 DCOM # COMPLEMENT MPAC USING THE IDENTITY
043373,002881:
043374,002882: # SIN(X-(+)PI) = SIN(-X).
043375,002883: 00,3505 52145 +3 DXCH MPAC
043376,002884: 00,3506 30144 CA MPAC # SEE IF ARGUMENT GREATER THAN .5 IN
043377,002885: 00,3507 60000 DOUBLE # MAGNITUDE. IF SO, REDUCE IT TO LESS THAN
043378,002886: 00,3510 54001 TS L # .5 (+-PI/2 SCALED) AS FOLLOWS:
043379,002887: 00,3511 13522 TCF SN1
043380,002888:
043381,002889: 00,3512 50000 INDEX A # IF POSITIVE, FORM PI - X, IF NEGATIVE
043382,002890: 00,3513 37737 CAF NEG1/2 +1 # USE -PI - X.
043383,002891: 00,3514 60000 DOUBLE
043384,002892: 00,3515 00006 EXTEND
043385,002893: 00,3516 60144 SU MPAC # GUARANTEED NO OVERFLOW.
043386,002894:
043387,002895: 00,3517 54144 TS MPAC
043388,002896: 00,3520 40145 CS MPAC +1
043389,002897: 00,3521 54145 TS MPAC +1
043390,002898:
Page 973 |
043392,002900: 00,3522 00006 SN1 EXTEND # SET UP TO EVALUATE HASTINGS POLYNOMIAL
043393,002901: 00,3523 30145 DCA MPAC
043394,002902: 00,3524 52124 DXCH BUF2
043395,002903: 00,3525 03250 TC DSQSUB # SQUARE MPAC.
043396,002904:
043397,002905: 00,3526 07265 TC POLY # EVALUATE FOURTH ORDER POLYNOMIAL.
043398,002906: 00,3527 00003 DEC 3 B-14
043399,002907: 00,3530 14441 37325 2DEC +.3926990796
043400,002908:
043401,002909:
043402,002910: 00,3532 53250 60764 2DEC -.6459637111
043403,002911:
043404,002912: 00,3534 12146 21276 2DEC +.318758717
043405,002913:
043406,002914: 00,3536 75466 71471 2DEC -.074780249
043407,002915:
043408,002916: 00,3540 00236 32757 2DEC +.009694988
043409,002917:
043410,002918: 00,3542 32454 CAF LBUF2 # MULTIPLY BY ARGUMENT AND SHIFT LEFT 2.
043411,002919:
043412,002920: 00,3543 07151 TC DMPSUB -1
043413,002921:
043414,002922: 00,3544 00006 EXTEND
043415,002923: 00,3545 30146 DCA MPAC +1
043416,002924: 00,3546 20146 DAS MPAC +1
043417,002925: 00,3547 60144 AD MPAC
043418,002926: 00,3550 26144 ADS MPAC # NEITHER SHIFT OVERFLOWS.
043419,002927: 00,3551 00006 EXTEND
043420,002928: 00,3552 30146 DCA MPAC +1
043421,002929: 00,3553 20146 DAS MPAC +1
043422,002930: 00,3554 60144 AD MPAC
043423,002931: 00,3555 26144 ADS MPAC
043424,002932:
043425,002933: 00,3556 16115 TCF DANZIG
043426,002934:
Page 974 |
043428,002936: # ARCSIN/ARCCOS ROUTINE.
043429,002937:
043430,002938: 00,3557 33600 ARCSIN CAF LASINEX # COMPUTE ARCSIN BY USING THE IDENTITY
043431,002939: 00,3560 13562 TCF +2 # ARCSIN(X) = PI/2 - ARCCOS(X).
043432,002940:
043433,002941: 00,3561 33662 ARCCOS CAF LDANZIG # (EXITS IMMEDIATELY).
043434,002942: 00,3562 54126 TS ESCAPE
043435,002943: 00,3563 06772 TC BRANCH # TEST SIGN OF INPUT.
043436,002944: 00,3564 13574 TCF ACOSST # START IMMEDIATELY IF POSITIVE.
043437,002945: 00,3565 13674 TCF ACOSZERO # ARCCOS(0) = PI/2 = .25.
043438,002946: 00,3566 00006 EXTEND # IF NEGATIVE, USE THE IDENTITY
043439,002947: 00,3567 40145 DCS MPAC # ARCCOS(X) = PI - ARCCOS(-X), FORCING
043440,002948: 00,3570 52145 DXCH MPAC # ARGUMENT POSITIVE.
043441,002949: 00,3571 33677 CAF TCSUBTR # SET EXIT TO DO ABOVE BEFORE
043442,002950:
043443,002951: 00,3572 56126 XCH ESCAPE # ARCSIN/ARCCOS CONSIDERATIONS.
043444,002952: 00,3573 54127 TS ESCAPE2
043445,002953:
043446,002954: 00,3574 47740 ACOSST CS HALF # TEST MAGNITUDE OF INPUT.
043447,002955: 00,3575 60144 AD MPAC
043448,002956: 00,3576 10000 CCS A
043449,002957: 00,3577 13670 TCF ACOSOVF # THIS IS PROBABLY AN OVERFLOW CASE.
043450,002958:
043451,002959: 00,3600 13656 LASINEX TCF ASINEX
043452,002960:
043453,002961: 00,3601 13611 TCF ACOSST2 # NO OVERFLOW - PROCEED.
043454,002962:
043455,002963: 00,3602 10145 CCS MPAC +1 # IF MAJOR PART IS .5, CALL ANSWER 0
043456,002964: 00,3603 37761 CAF ZERO # UNLESS MINOR PART NEGATIVE.
043457,002965: 00,3604 13606 TCF ACOS=0
043458,002966:
043459,002967: 00,3605 13611 TCF ACOSST2
043460,002968:
043461,002969: 00,3606 54145 ACOS=0 TS MPAC +1
043462,002970: 00,3607 54144 TS MPAC
043463,002971: 00,3610 00126 TC ESCAPE
043464,002972:
043465,002973: 00,3611 00006 ACOSST2 EXTEND # NOW THAT ARGUMENT IS IN PROPER RANGE,
043466,002974:
043467,002975: 00,3612 40145 DCS MPAC # BEGIN COMPUTATION. USE HASTINGS
043468,002976: 00,3613 67740 AD HALF # APPROXIMATION ARCCOS(X) = SQRT(1-X)P(X)
043469,002977: 00,3614 52145 DXCH MPAC # IN A SCALED VERSION WHERE P(X) IS A
043470,002978: 00,3615 52124 DXCH BUF2 # SEVENTH ORDER POLYNOMIAL.
043471,002979:
043472,002980: 00,3616 03313 TC SQRTSUB # RETURNS WITH NORMALIZED SQUARE ROOT.
043473,002981:
043474,002982: 00,3617 10125 CCS MPTEMP # SEE IF UN-NORMALIZATION REQUIRED.
043475,002983: 00,3620 13663 TCF ACOSSHR # IF SO.
043476,002984:
Page 975 |
043478,002986: 00,3621 52145 ACOS3 DXCH MPAC # SET UP FOR POLYNOMIAL EVALUATION.
043479,002987: 00,3622 52124 DXCH BUF2
043480,002988: 00,3623 52145 DXCH MPAC
043481,002989:
043482,002990: 00,3624 07265 TC POLY
043483,002991: 00,3625 00006 DEC 6 B-14
043484,002992:
043485,002993: 00,3626 13240 23630 2DEC +.353553385 # COEFFICIENTS ARE C 2(+I)/PISQRT(2) WHERE
043486,002994:
043487,002995: 00,3630 74721 47775 2DEC* -.0483017006 B+1* # I
043488,002996:
043489,002997: 00,3632 02440 20237 2DEC* +.0200273085 B+2* # WHERE C STANDS FOR ORIGINAL COEFFS.
043490,002998:
043491,002999: 00,3634 75067 70742 2DEC* -.0112931863 B+3*
043492,003000:
043493,003001: 00,3636 03436 26756 2DEC* +.00695311612 B+4*
043494,003002:
043495,003003: 00,3640 74037 57640 2DEC* -.00384617957 B+5*
043496,003004:
043497,003005:
043498,003006: 00,3642 03046 07143 2DEC* +.001501297736 B+6*
043499,003007:
043500,003008: 00,3644 76654 42244 2DEC* -.000284160334 B+7*
043501,003009:
043502,003010: 00,3646 32454 CAF LBUF2 # DO FINAL MULTIPLY AND GO TO ANY
043503,003011: 00,3647 07151 TC DMPSUB -1 # EPILOGUE SEQUENCES.
043504,003012: 00,3650 00126 TC ESCAPE
043505,003013:
043506,003014: 00,3651 00006 SUBTR EXTEND # EPILOGUE FOR NEGATIVE INPUTS TO ARCCOS.
043507,003015: 00,3652 40145 DCS MPAC
043508,003016:
043509,003017: 00,3653 67740 AD HALF # FORMS PI - ARCCOS(-X) = ARCCOS(X).
043510,003018: 00,3654 52145 DXCH MPAC
043511,003019: 00,3655 00127 TC ESCAPE2 # GO TO POSSIBLE ARCSIN EPILOGUE.
043512,003020:
043513,003021: 00,3656 00006 ASINEX EXTEND
043514,003022: 00,3657 40145 DCS MPAC # ARCSIN EPILOGUE - GET ARCSIN(X)
043515,003023: 00,3660 67741 AD QUARTER # = PI/2 - ARCCOS(X).
043516,003024: 00,3661 52145 DXCH MPAC
043517,003025: 00,3662 16115 LDANZIG TCF DANZIG
043518,003026:
Page 976 |
043520,003028: 00,3663 50000 ACOSSHR INDEX A # THE SHIFT RIGHT IS LESS THAN 14 SINCE
043521,003029: 00,3664 37740 CAF BIT14 # THE INPUT WAS NON-ZERO DP.
043522,003030:
043523,003031: 00,3665 54125 TS MPTEMP
043524,003032: 00,3666 02073 TC VSHRRND # DP SHIFT RIGHT AND ROUND.
043525,003033: 00,3667 13621 TCF ACOS3 # PROCEED.
043526,003034:
043527,003035: 00,3670 00006 ACOSOVF EXTEND # IF MAJOR PART WAS ONLY 1 MORE THAN .5,
043528,003036: 00,3671 13606 BZF ACOS=0 # CALL ANSWER ZERO.
043529,003037:
043530,003038: 00,3672 06000 ACOSABRT TC ABORT
043531,003039: 00,3673 01301 OCT 1301
043532,003040:
043533,003041: 00,3674 37741 ACOSZERO CAF QUARTER # ACOS(0) = PI/2.
043534,003042: 00,3675 13607 TCF ACOS=0 +1 # SET MPAC AND EXIT VIA ESCAPE.
043535,003043:
043536,003044: 00,3676 77763 NEG12 DEC -12 B-14
043537,003045: 00,3677 13651 TCSUBTR TCF SUBTR
043538,003046:
Page 977 |
043540,003048: # THE FOLLOWING INSTRUCTIONS ARE AVAILABLE FOR SETTING, MODIFYING, AND BRANCHING ON INDEX REGISTERS:
043541,003049:
043542,003050: # 1. AXT ADDRESS TO INDEX TRUE.
043543,003051: # 2. AXC ADDRESS TO INDEX COMPLEMENTED.
043544,003052: # 3. LXA LOAD INDEX FROM ERASABLE.
043545,003053: # 4. LXC LOAD INDEX COMPLEMENTED FROM ERASABLE.
043546,003054: # 5. SXA STORE INDEX IN ERASABLE.
043547,003055: # 6. XCHX EXCHANGE INDEX REIGSTER WITH ERASABLE.
043548,003056:
043549,003057:
043550,003058: # 7. INCR INCREMENT INDEX REGISTER.
043551,003059: # 8. XAD ERASABLE ADD TO INDEX REGISTER.
043552,003060: # 9. XSU ERASABLE SUBTRACT FROM INDEX REGISTER.
043553,003061:
043554,003062: # 10. TIX BRANCH ON INDEX REGISTER AND DECREMENT.
043555,003063:
043556,003064:
043557,003065:
043558,003066: 01,2557 BANK 01
043559,003067:
043560,003068: 01,2557 02654 AXT TC TAGSUB # SELECT APPROPRIATE INDEX REGISTER.
043561,003069: 01,2560 30107 CA POLISH
043562,003070: 01,2561 50120 XSTORE INDEX INDEXLOC # CONTAINS C(FIXLOC) OR C(FIXLOC)+1.
043563,003071: 01,2562 54046 TS X1
043564,003072: 01,2563 16115 TCF DANZIG
043565,003073:
043566,003074: 01,2564 02654 AXC TC TAGSUB
043567,003075: 01,2565 40107 CS POLISH
043568,003076: 01,2566 02561 TC XSTORE
043569,003077:
043570,003078: 01,2567 02642 LXA TC 15ADRERS # LOAD INDEX REGISTER FROM ERASABLE.
043571,003079: 01,2570 50107 INDEX POLISH
043572,003080:
043573,003081: 01,2571 30000 CA 0
043574,003082: 01,2572 12561 TCF XSTORE
043575,003083:
043576,003084: 01,2573 02642 LXC TC 15ADRERS # LOAD NDX REG FROM ERASABLE COMPLEMENTED.
043577,003085: 01,2574 50107 INDEX POLISH
043578,003086: 01,2575 40000 CS 0
043579,003087: 01,2576 12561 TCF XSTORE
043580,003088:
043581,003089: 01,2577 02642 SXA TC 15ADRERS # STORE INDEX REGISTER IN ERASABLE.
043582,003090: 01,2600 50120 INDEX INDEXLOC
043583,003091:
043584,003092: 01,2601 30046 CA X1
043585,003093: 01,2602 50107 MSTORE1 INDEX POLISH
043586,003094: 01,2603 54000 TS 0
043587,003095: 01,2604 16115 TCF DANZIG
043588,003096:
Page 978 |
043590,003098: 01,2605 02642 XCHX TC 15ADRERS # EXCHANGE INDEX REGISTER WITH ERASABLE.
043591,003099:
043592,003100: 01,2606 50107 INDEX POLISH
043593,003101: 01,2607 30000 CA 0
043594,003102: 01,2610 50120 INDEX INDEXLOC
043595,003103: 01,2611 56046 XCH X1
043596,003104: 01,2612 12602 TCF MSTORE1
043597,003105:
043598,003106: 01,2613 02642 XAD TC 15ADRERS # ADD ERASABLE TO INDEX REGISTER.
043599,003107: 01,2614 50107 INDEX POLISH
043600,003108: 01,2615 30000 CA 0
043601,003109: 01,2616 50120 XAD2 INDEX INDEXLOC
043602,003110: 01,2617 26046 ADS X1 # IGNORING OVERFLOWS.
043603,003111: 01,2620 16115 TCF DANZIG
043604,003112:
043605,003113:
043606,003114: 01,2621 02654 INCR TC TAGSUB # INCREMENT INDEX REGISTER.
043607,003115: 01,2622 30107 CA POLISH
043608,003116: 01,2623 12616 TCF XAD2
043609,003117:
043610,003118: 01,2624 02642 XSU TC 15ADRERS # SUBTRACT ERASABLE FROM INDEX REGISTER.
043611,003119: 01,2625 50107 INDEX POLISH
043612,003120: 01,2626 40000 CS 0
043613,003121: 01,2627 12616 TCF XAD2
043614,003122:
043615,003123:
043616,003124:
043617,003125: 01,2630 02654 TIX TC TAGSUB # BRANCH AND DECREMENT ON INDEX.
043618,003126: 01,2631 50120 INDEX INDEXLOC
043619,003127: 01,2632 40050 CS S1
043620,003128: 01,2633 50120 INDEX INDEXLOC
043621,003129: 01,2634 60046 AD X1
043622,003130: 01,2635 00006 EXTEND # NO OPERATION IF DECREMENTED INDEX IS
043623,003131: 01,2636 66115 BZMF DANZIG # NEGATIVE OR ZERO.
043624,003132:
043625,003133: 01,2637 50120 DOTIXBR INDEX INDEXLOC
043626,003134: 01,2640 56046 XCH X1 # IGNORING OVERFLOWS.
043627,003135:
043628,003136:
043629,003137: 01,2641 16715 TCF GOTO # DO THE BRANCH USING THE CADR IN POLISH.
043630,003138:
Page 979 |
043632,003140: # SUBROUTINE TO CONVERT AN ERASABLE ADDRESS (11 BITS) TO AN EBANK SETTING AND SUBADDRESS.
043633,003141:
043634,003142: 01,2642 40107 15ADRERS CS POLISH
043635,003143: 01,2643 65371 AD DEC45
043636,003144: 01,2644 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
043637,003145: 01,2645 30110 CA FIXLOC # YES. ADD FIXLOC. EBANK OK AS IS.
043638,003146:
043639,003147: 01,2646 12653 TCF +5
043640,003148:
043641,003149: 01,2647 35370 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
043642,003150: 01,2650 56107 XCH POLISH
043643,003151: 01,2651 54003 TS EBANK
043644,003152: 01,2652 74553 MASK LOW8
043645,003153: 01,2653 26107 +5 ADS POLISH # FALL INTO TAGSUB, AND RETURN VIA Q.
043646,003154:
043647,003155: # SUBROUTINE WHICH SETS THE ADDRESS OF THE SPECIFIED INDEX IN INDEXLOC. (ACTUALLY, THE ADDRESS -38D.)
043648,003156:
043649,003157: 01,2654 30110 TAGSUB CA FIXLOC
043650,003158: 01,2655 54120 TS INDEXLOC
043651,003159:
043652,003160:
043653,003161: 01,2656 10020 CCS CYR # BIT 15 SPECIFIES INDEX.
043654,003162: 01,2657 24120 INCR INDEXLOC # 0 MEANS USE X2.
043655,003163: 01,2660 00002 TC Q
043656,003164: 01,2661 00002 TC Q # 1 FOR X1.
043657,003165:
Page 980 |
043659,003167: # MISCELLANEOUS OPERATION CODES WITH DIRECT ADDRESSES. INCLUDED HERE ARE:
043660,003168:
043661,003169:
043662,003170: # 1. ITA STORE QPRET (RETURN ADDRESS) IN ERASABLE.
043663,003171: # 2. CALL CALL A SUBROUTINE, LEAVING RETURN IN QPRET.
043664,003172: # 3. RTB RETURN TO BASIC LANGUAGE AT THE GIVEN ADDRESS.
043665,003173: # 4. BHIZ BRANCH IF THE HIGH ORDER OF MPAC IS ZERO (SINGLE PRECISION).
043666,003174: # 5. BOV BRANCH ON OVERFLOW.
043667,003175: # 6. GOTO SIMPLE SEQUENCE CHANGE.
043668,003176:
043669,003177: 01,2662 10020 RTB/BHIZ CCS CYR
043670,003178: 01,2663 30107 RTB CA POLISH
043671,003179: 01,2664 15246 TCF BANKJUMP # CALL BASIC ROUTINE.
043672,003180:
043673,003181:
043674,003182: 01,2665 10144 BHIZ CCS MPAC
043675,003183: 01,2666 16115 TCF DANZIG
043676,003184: 01,2667 16715 TCF GOTO
043677,003185: 01,2670 16115 TCF DANZIG
043678,003186: 01,2671 16715 TCF GOTO
043679,003187:
043680,003188: 01,2672 10111 BOV(B) CCS OVFIND # BRANCH ON OVERFLOW TO BASIC OR INTERP.
043681,003189: 01,2673 12675 TCF +2
043682,003190: 01,2674 16115 TCF DANZIG
043683,003191: 01,2675 54111 TS OVFIND
043684,003192: 01,2676 10020 CCS CYR
043685,003193:
043686,003194: 01,2677 12663 TCF RTB # IF BASIC.
043687,003195: 01,2700 00360 B5TOB8 OCT 360
043688,003196: 01,2701 16715 TCF GOTO
043689,003197:
Page 981 |
043691,003199: 01,2702 10020 BZE/GOTO CCS CYR # SEE WHICH OP-CODE IS DESIRED.
043692,003200: 01,2703 06772 TC BRANCH # DO BZE.
043693,003201: 01,2704 16115 TCF DANZIG
043694,003202: 01,2705 16715 TCF GOTO # DO GOTO.
043695,003203: 01,2706 16115 TCF DANZIG
043696,003204:
043697,003205: 01,2707 10020 BPL/BMN CCS CYR
043698,003206: 01,2710 12716 TCF BPL
043699,003207:
043700,003208: 01,2711 12000 5B10 DEC 5 B+10 # SHIFTS OP CODE IN SWITCH INSTRUCTION ADR
043701,003209:
043702,003210: 01,2712 06772 TC BRANCH # DO BMN.
043703,003211: 01,2713 16115 TCF DANZIG
043704,003212: 01,2714 16115 TCF DANZIG
043705,003213: 01,2715 16715 TCF GOTO # ONLY IF NNZ.
043706,003214:
043707,003215: 01,2716 06772 BPL TC BRANCH
043708,003216: 01,2717 16715 TCF GOTO # IF POSITIVE OR ZERO.
043709,003217: 01,2720 16715 TCF GOTO
043710,003218: 01,2721 16115 TCF DANZIG
043711,003219:
043712,003220: 01,2722 10020 CALL/ITA CCS CYR
043713,003221: 01,2723 16707 TCF CALL
043714,003222:
043715,003223: 01,2724 04725 TC CCSHOLE
043716,003224: 01,2725 02642 TC 15ADRERS # STORE QPRET. (TAGSUB AFTER 15ADRERS IS
043717,003225: 01,2726 50110 INDEX FIXLOC # SLOW IN THIS CASE, BUT SAVES STORAGE.)
043718,003226: 01,2727 30052 CA QPRET
043719,003227: 01,2730 12602 TCF MSTORE1
043720,003228:
Page 982 |
043722,003230: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR ALTERING AND TESTING INTERPRETIVE SWITCHES:
043723,003231:
043724,003232: # 00 BONSET SET A SWITCH AND DO A GOTO IF IT WAS ON.
043725,003233: # 01 SETGO SET A SWITCH AND DO A GOTO.
043726,003234: # 02 BOFSET SET A SWITCH AND DO A GOTO IF IT WAS OFF
043727,003235: # 03 SET SET A SWITCH.
043728,003236:
043729,003237: # 04 BONINV INVERT A SWITCH AND BRANCH IF IT WAS ON.
043730,003238: # 05 INVGO INVERT A SWITCH AND DO A GOTO.
043731,003239: # 06 BOFINV INVERT A SWITCH AND BRANCH IF IT WAS OFF
043732,003240: # 07 INVERT INVERT A SWITCH.
043733,003241:
043734,003242: # 10 BONCLR CLEAR A SWITCH AND BRANCH IF IT WAS ON.
043735,003243: # 11 CLRGO CLEAR A SWITCH AND DO A GOTO.
043736,003244:
043737,003245: # 12 BOFCLR CLEAR A SWITCH AND BRANCH IF IT WAS OFF.
043738,003246: # 13 CLEAR CLEAR A SWITCH.
043739,003247:
043740,003248: # 14 BON BRANCH IF A SWITCH WAS ON.
043741,003249: # 16 BOFF BRANCH IF A SWITCH WAS OFF.
043742,003250:
043743,003251:
043744,003252:
043745,003253: # THE ADDRESS SUPPLIED WITH THE SWITCH INSTRUCTION IS INTERPRETED AS FOLLOWS:
043746,003254:
043747,003255: # BITS 1-4 SWITCH BIT NUMBER (1-15).
043748,003256: # BITS 5-8 SWITCH OPERATION NUMBER.
043749,003257: # BITS 9- SWITCH WORD NUMBER (UP TO 64 SWITCH WORDS).
043750,003258:
043751,003259: # THE ADDRESS ITSELF IS MADE UP BY THE YUL SYSTEM ASSEMBLER. THE BRANCH INSTRUCTIONS REQUIRE TWO
043752,003260: # ADDRESSES, THE SECOND TAKEN AS THE DIRECT (OR INDIRECT IF IN ERASABLE) ADDRESS OF THE BRANCH.
043753,003261:
043754,003262:
043755,003263:
043756,003264: 01,2731 35361 SWITCHES CAF LOW4 # LEAVE THE SWITCH BIT IN SWBIT .
043757,003265: 01,2732 70107 MASK POLISH
043758,003266: 01,2733 50000 INDEX A
043759,003267: 01,2734 37737 CAF BIT15 # (NUMBER FROM LEFT TO RIGHT.)
043760,003268:
043761,003269: 01,2735 54121 TS SWBIT
043762,003270:
043763,003271: 01,2736 37747 CAF BIT7 # LEAVE THE SWITCH NUMBER IN SWWORD.
043764,003272: 01,2737 00006 EXTEND
043765,003273: 01,2740 70107 MP POLISH
043766,003274: 01,2741 54120 TS SWWORD
043767,003275:
043768,003276: 01,2742 00004 INHINT # DURING SWITCH CHANGE SO RUPT CAN USE TOO
043769,003277: 01,2743 50000 INDEX A # LEAVE THE SWITCH WORD ITSELF IN L.
043770,003278: 01,2744 30074 CA STATE
043771,003279:
043772,003280: 01,2745 54002 TS Q # Q WILL BE USED AS A CHANNEL.
Page 983 |
043774,003282: 01,2746 37743 CAF BIT11
043775,003283: 01,2747 00006 EXTEND # DISPATCH SWITCH BIT OPERATION AS IN BITS
043776,003284: 01,2750 70107 MP POLISH # 7-8 OF POLISH.
043777,003285: 01,2751 73011 MASK B3TOB4 # GETS 4X2-BIT CODE.
043778,003286: 01,2752 50000 INDEX A
043779,003287: 01,2753 12754 TCF +1
043780,003288:
043781,003289:
043782,003290: 01,2754 30121 +1 CA SWBIT # 00 - SET SWITCH IN QUESTION.
043783,003291: 01,2755 00006 EXTEND
043784,003292: 01,2756 04002 ROR Q
043785,003293: 01,2757 12766 TCF SWSTORE
043786,003294:
043787,003295: 01,2760 30121 +5 CA SWBIT # 01 - INVERT SWITCH.
043788,003296: 01,2761 00006 EXTEND
043789,003297: 01,2762 06002 RXOR Q
043790,003298: 01,2763 12766 TCF SWSTORE
043791,003299:
043792,003300: 01,2764 40121 +9D CS SWBIT # 10 - CLEAR.
043793,003301:
043794,003302: 01,2765 70002 MASK Q
043795,003303: 01,2766 50120 SWSTORE INDEX SWWORD
043796,003304: 01,2767 54074 TS STATE # NEW SWITCH WORD.
043797,003305:
Page 984 |
043799,003307: 01,2770 00003 +13D RELINT # 11 - NOOP.
043800,003308: 01,2771 37741 CAF BIT13
043801,003309:
043802,003310: 01,2772 00006 EXTEND # DISPATCH SEQUCE CHANGING OR BRANCHING
043803,003311: 01,2773 70107 MP POLISH # CODE.
043804,003312: 01,2774 73011 MASK B3TOB4
043805,003313: 01,2775 50000 INDEX A
043806,003314: 01,2776 12777 TCF +1 # ORIGINALLY STORED IN BITS 5-6.
043807,003315:
043808,003316: 01,2777 40002 +1 CS Q # 00 - BRANCH IF ON.
043809,003317: 01,3000 70121 TEST MASK SWBIT
043810,003318: 01,3001 10000 CCS A
043811,003319: 01,3002 13012 TCF SWSKIP
043812,003320:
043813,003321: 01,3003 16764 +5 TCF SWBRANCH # 01 - GO TO.
043814,003322:
043815,003323: 01,3004 13012 TCF SWSKIP # HERE ONLY ON BIT 15.
043816,003324:
043817,003325: 01,3005 04725 TC CCSHOLE
043818,003326: 01,3006 04725 TC CCSHOLE
043819,003327:
043820,003328: 01,3007 30002 +9D CA Q # 10 - BRANCH IF OFF.
043821,003329: 01,3010 13000 TCF TEST
043822,003330:
043823,003331: 01,3011 00014 B3TOB4 OCT 14
043824,003332:
043825,003333:
043826,003334: 01,3012 24154 SWSKIP INCR LOC
043827,003335:
043828,003336: 01,3013 01,2731 SW/ EQUALS SWITCHES
043829,003337:
043830,003338: 01,3013 16115 +13D TCF DANZIG # 11 - NOOP.
End of include-file INTERPRETER.agc. Parent file is MAIN.agc