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 Mike Higgins.
A team of volunteers performed the transcription and proof-reading. Note
that 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 section on archive.org. 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 BLK2: REVISION 0 OF PROGRAM RETRED44 BY NASA 2021100 JUL 9, 1965Note that the date is the date of the printout, not the date of the program revision. |
000668,000002: ## Copyright: Public domain.
000669,000003: ## Filename: LIST-PROCESSING_INTERPRETER.agc
000670,000004: ## Purpose: Part of the source code for Retread 44 (revision 0). It was
000671,000005: ## the very first program for the Block II AGC, created as an
000672,000006: ## extensive rewrite of the Block I program Sunrise.
000673,000007: ## This file is intended to be a faithful transcription, except
000674,000008: ## that the code format has been changed to conform to the
000675,000009: ## requirements of the yaYUL assembler rather than the
000676,000010: ## original YUL assembler.
000677,000011: ## Reference: pp. 17-104
000678,000012: ## Assembler: yaYUL
000679,000013: ## Contact: Ron Burkey <info@sandroid.org>.
000680,000014: ## Website: www.ibiblio.org/apollo/index.html
000681,000015: ## Mod history: 2016-12-13 MAS Created from Aurora 12 version.
000682,000016: ## 2016-12-17 MAS Transcribed.
000683,000017: ## 2016-12-18 MAS Typos.
000684,000018: ## 2016-12-27 RSB Proofed comment text using octopus/ProoferComments,
000685,000019: ## and fixed errors found.
000686,000020: ## 2017-02-05 RSB Back-ported comment corrections
000687,000021: ## identified while proofing Artemis 072.
000688,000022: ## 2017-03-15 RSB Comment-text fixes identified in 5-way
000689,000023: ## side-by-side diff of Luminary 69/99/116/131/210.
000690,000024: ## 2021-05-30 ABS B5TOBB -> B5TOB8
000691,000025:
Page 17 |
000693,000027: # SECTION 1 DISPATCHER
000694,000028:
000695,000029: # ENTRY TO THE INTERPRETER. INTPRET SETS LOC TO THE FIRST INSTRUCTION, BANKSET TO THE FBANK OF THE
000696,000030: # OBJECT INTERPRETIVE PROGRAM, AND INTBIT15 TO THE BIT15 CONTENTS OF FBANK. INTERPRETIVE PROGRAMS MAY BE IN
000697,000031: # VIRTUALLY ALL BANKS PRESENT UNDER ANY SUPER-BANK SETTING, WITH THE RESTRICTION THAT PROGRAMS IN HIGH BANKS
000698,000032: # (BIT15 OF FBANK = 1) DO NOT REFER TO LOWBANKS, AND VICE-VERSA. THE INTERPRETER DOES NOT SWITCH SUPER-BANK,
000699,000033: # NOR DOES IT SWITCH EBANKS. MOST EBANK SWITCHING IS DONE BY THE EXECUTIVE PROGRAM.
000700,000034:
000701,000035: 6000 SETLOC 6000
000702,000036:
000703,000037: 6000 00006 INTPRET EXTEND # SET LOC TO THE WORD FOLLOWING THE TC.
000704,000038: 6001 22150 QXCH LOC
000705,000039:
000706,000040: 6002 30004 +2 CA FBANK # INTERPRETIVE BRANCHES FINISH HERE.
000707,000041: 6003 54151 TS BANKSET
000708,000042: 6004 77630 MASK BIT15 # GET 15TH BIT FOR INDEXABLE ADDRESSES.
000709,000043: 6005 54101 TS INTBIT15
000710,000044: 6006 66425 AD LOW10 # THIS VERSION IS USED IN PROCESSING
000711,000045: 6007 54100 TS INTB15+ # INDEXABLE FIXED-BANK ADDRESSES.
000712,000046:
000713,000047: 6010 16023 TCF NEWOPS # PICK UP OP CODE PAIR AND BEGIN.
000714,000048:
000715,000049:
000716,000050:
000717,000051: 6011 22006 INTRSM LXCH BBANK # RESUME SUSPENDED INTERPRETIVE JOB
000718,000052: 6012 16017 TCF DANZIG +3 # (ACTUALLY PART OF THE EXECUTIVE).
000719,000053:
Page 18 |
000721,000055: # AT THE END OF MOST INSTRUCTIONS, CONTROL IS GIVEN TO DANZIG TO DISPATCH THE NEXT OPERATION.
000722,000056: 6013 54147 NEWMODE TS MODE # PROLOGUE FOR MODE-CHANGING INSTRUCTIONS.
000723,000057:
000724,000058: 6014 30151 DANZIG CA BANKSET # SET FBANK BEFORE TESTING NEWJOB SO THAT
000725,000059: 6015 54004 TS FBANK # BBANK MAY BE SAVED DIRECTLY BY CHANJOB.
000726,000060:
000727,000061: 6016 10023 CCS EDOP # SEE IF AN ORDER CODE IS LEFT OVER FROM
000728,000062: 6017 16032 TCF OPJUMP # THE LAST PAIR RETRIEVED. IF SO, EXECUTE.
000729,000063: # EDOP IS SET TO ZERO ON ITS RE-EDITING.
000730,000064:
000731,000065: 6020 10067 CCS NEWJOB # SEE IF A JOB OF HIGHER PRIORITY IS
000732,000066: 6021 14160 TCF CHANG2 # PRESENT, AND IF SO, CHANGE JOBS.
000733,000067:
000734,000068: 6022 24150 INCR LOC # ADVANCE THE LOCATION COUNTER.
000735,000069: 6023 50150 NEWOPS INDEX LOC # ENTRY TO BEGIN BY PICKING OP CODE PAIR.
000736,000070: 6024 30000 CA 0 # MAY BE AN OPCODE PAIR OR A STORE CODE.
000737,000071: 6025 10000 CCS A # TEST SIGN AND GET DABS(A).
000738,000072: 6026 16341 TCF DOSTORE # PROCESS STORE CODE.
000739,000073:
000740,000074: 6027 00177 LOW7 OCT 177
000741,000075:
000742,000076: 6030 54023 TS EDOP # OP CODE PAIR. LEAVE THE OTHER IN EDOP
000743,000077: 6031 76027 MASK LOW7 # WHERE CCS EDOP WILL HONOR IT NEXT.
000744,000078:
000745,000079: 6032 54020 OPJUMP TS CYR # LOWWD ENTERS HERE IF A RIGHT-HAND OP
000746,000080: 6033 10020 CCS CYR # CODE IS TO BE PROCESSED. TEST PREFICES.
000747,000081: 6034 16167 TCF OPJUMP2 # TEST SECOND PREFIX BIT.
000748,000082:
000749,000083: 6035 16730 TCF EXIT # +0 OP CODE IS EXIT.
000750,000084:
Page 19 |
000752,000086: # PROCESS ADDRESSES WHICH MAY BE DIRECT, INDEXED, OR REFERENCE THE PUSHDOWN LIST.
000753,000087:
000754,000088: 6036 77646 ADDRESS MASK BIT1 # SEE IF ADDRESS IS INDEXED. CYR CONTAINED
000755,000089: 6037 10000 CCS A # 400XX, SO BIT 1 IS NOW AS IT WAS IN CYR.
000756,000090: 6040 16073 TCF INDEX # FORM INDEXED ADDRESS.
000757,000091:
000758,000092: 6041 50150 DIRADRES INDEX LOC # LOOK AHEAD TO NEXT WORD TO SEE IF
000759,000093: 6042 40001 OCT40001 CS 1 # ADDRESS IS GIVEN.
000760,000094: 6043 10000 CCS A
000761,000095: 6044 16135 TCF PUSHUP # IF NOT.
000762,000096:
000763,000097: 6045 77773 NEG4 DEC -4 B-14
000764,000098:
000765,000099: 6046 24150 INCR LOC # IF SO, TO SHOW WE PICKED UP A WORD.
000766,000100: 6047 54102 TS ADDRWD
000767,000101:
Page 20 |
000769,000103: # FINAL DIGESTION OF DIRECT ADDRESSES OF OP CODES WITH 01 PREFIX IS DONE HERE. IN EACH CASE, THE
000770,000104: # REQUIRED 12 BIT SUB-ADDRESS IS LEFT IN ADDRWD, WITH ANY REQUIRED BANK SWITCHING DONE (F ONLY). ADDRESSES LESS
000771,000105: # 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.
000772,000106:
000773,000107:
000774,000108:
000775,000109: 6050 66171 AD -ENDVAC # SEE IF ADDRESS RELATIVE TO WORK AREA.
000776,000110: 6051 10000 CCS A
000777,000111: 6052 66234 AD -ENDERAS # IF NOT, SEE IF IN GENERAL ERASABLE.
000778,000112: 6053 16060 TCF IERASTST
000779,000113:
000780,000114: 6054 30104 NETZERO CA FIXLOC # IF SO, LEAVE THE MODIFIED ADDRESS IN
000781,000115: 6055 26102 ADS ADDRWD # ADDRWD AND DISPATCH.
000782,000116: 6056 50020 +2 INDEX CYR # THIS INDEX MAKES THE NEXT INSTRUCTION
000783,000117: 6057 76234 7 INDJUMP -1 # TCF INDJUMP + OP, EDITING CYR.
000784,000118:
000785,000119: 6060 00006 IERASTST EXTEND
000786,000120: 6061 66056 BZMF NETZERO +2 # GENERAL ERASABLE - DISPATCH IMMEDIATELY.
000787,000121:
000788,000122: 6062 60100 FIXEDADR AD INTB15+ # FIXED BANK ADDRESS. RESTORE AND ADD B15.
000789,000123: 6063 54004 +1 TS FBANK # SWITCH BANKS AND LEAVE SUB-ADDRESS IN
000790,000124: 6064 76425 MASK LOW10 # ADDRWD FOR OPERAND RETRIEVAL.
000791,000125: 6065 67634 AD 2K
000792,000126: 6066 54102 TS ADDRWD
000793,000127: 6067 50020 INDEX CYR
000794,000128: 6070 76234 7 INDJUMP -1
000795,000129:
Page 21 |
000797,000131: # THE FOLLOWING ROUTINE PROCESSES INTERPRETIVE INDEXED ADDRESSES. AN INTERPRETER INDEX REGISTER MAY
000798,000132: # CONTAIN THE ADDRESS OF ANY ERASABLE REGISTER (0-42 BEING RELATIVE TO THE VAC AREA) OR ANY INTERPRETIVE PROGRAM
000799,000133: # BANK, OR ANY INTEGER IN THAT RANGE.
000800,000134:
000801,000135: 6071 37661 DODLOAD* CAF DLOAD* # STODL* COMES HERE TO PROCESS LOAD ADR.
000802,000136: 6072 54020 TS CYR # (STOVL* ENTERS HERE).
000803,000137:
000804,000138: 6073 30104 INDEX CA FIXLOC # SET UP INDEX LOCATION.
000805,000139: 6074 54114 TS INDEXLOC
000806,000140: 6075 24150 INCR LOC # (ADDRESS ALWAYS GIVEN).
000807,000141: 6076 50150 INDEX LOC
000808,000142: 6077 40000 CS 0
000809,000143: 6100 10000 CCS A # INDEX 2 IF ADDRESS STORED COMPLEMENTED.
000810,000144: 6101 24114 INCR INDEXLOC
000811,000145: 6102 16103 NOOP
000812,000146:
000813,000147: 6103 54102 TS ADDRWD # 14 BIT ADDRESS TO ADDRWD.
000814,000148: 6104 76232 MASK BANKMASK # IF ADDRESS GREATER THAN 1K, ADD INTBIT15
000815,000149: 6105 00006 EXTEND
000816,000150: 6106 16111 BZF INDEX2
000817,000151: 6107 30101 CA INTBIT15
000818,000152: 6110 26102 ADS ADDRWD
000819,000153:
000820,000154: 6111 50114 INDEX2 INDEX INDEXLOC
000821,000155: 6112 40046 CS X1
000822,000156: 6113 26102 ADS ADDRWD # DO AUGMENT, IGNORING AND CORRECTING OVF.
000823,000157:
000824,000158: 6114 76231 MASK HIGH9 # SEE IF ADDRESS IS IN WORK AREA.
000825,000159: 6115 00006 EXTEND
000826,000160: 6116 16131 BZF INDWORK
000827,000161: 6117 76232 MASK BANKMASK # SEE IF IN FIXED BANK.
000828,000162: 6120 00006 EXTEND
000829,000163: 6121 16133 BZF INDERASE
000830,000164:
000831,000165: 6122 30102 CA ADDRWD # IN FIXED - SWITCH BANKS AND CREATE
000832,000166: 6123 54004 TS FBANK # SUB-ADDRESS.
000833,000167: 6124 76425 MASK LOW10
000834,000168: 6125 67634 AD 2K
000835,000169: 6126 54102 TS ADDRWD
000836,000170: 6127 50020 INDEX CYR
000837,000171: 6130 36234 3 INDJUMP -1
000838,000172:
000839,000173: 6131 30104 INDWORK CA FIXLOC # MAKE ADDRWD RELATIVE TO WORK AREA.
000840,000174: 6132 26102 ADS ADDRWD
000841,000175:
000842,000176: 6133 50020 INDERASE INDEX CYR
000843,000177: 6134 36234 3 INDJUMP -1
000844,000178:
Page 22 |
000846,000180: # PUSH-UP ROUTINES. WHEN NO OPERAND ADDRESS IS GIVEN, THE APPROPRIATE OPERAND IS TAKEN FROM THE PUSH-DOWN
000847,000181: # LIST. IN MOST CASES THE MODE OF THE RESULT (VECTOR OR SCALAR) OF THE LAST ARITHMETIC OPERATION PERFORMED
000848,000182: # IS THE SAME AS THE TYPE OF OPERAND DESIRED (ALL ADD/SUBTRACT ETC.). EXCEPTIONS TO THIS GENERAL RULE ARE LISTED
000849,000183: # BELOW (NOTE THAT IN EVERY CASE THE MODE REGISTER IS LEFT INTACT):
000850,000184:
000851,000185: # 1. VXSC AND V/SC WANT THE OPPOSITE TYPE OF OPERAND, E.G., IF THE LAST OPERATION YIELDED A VECTOR
000852,000186: # RESULT, VXSC WANTS A SCALAR.
000853,000187:
000854,000188: # 2. THE LOAD CODES SHOULD LOAD THE ACCUMULATOR INDEPENDENT OF THE RESULT OF THE LAST OPERATION. THIS
000855,000189: # INCLUDES VLOAD, DLOAD, TLOAD, PDDL, AND PDVL (NO PUSHUP WITH SLOAD).
000856,000190:
000857,000191: # 3. SOME ARITHMETIC OPERATIONS REQUIRE A STANDARD TYPE OF OPERAND REGARDLESS OF THE PREVIOUS OPERATION.
000858,000192: # THIS INCLUDES SIGN WANTING DP AND TAD REQUIRING TP.
000859,000193:
000860,000194: 6135 36227 PUSHUP CAF OCT23 # IF THE LOW 5 BITS OF CYR ARE LESS THAN
000861,000195: 6136 70020 MASK CYR # 20, THIS OP REQUIRES SPECIAL ATTENTION.
000862,000196: 6137 66142 AD -OCT10 # (NO -0).
000863,000197: 6140 10000 CCS A
000864,000198: 6141 16153 TCF REGUP # FOR ALL CODES GREATER THAN OCT 7.
000865,000199:
000866,000200: 6142 77767 -OCT10 OCT -10
000867,000201:
000868,000202: 6143 66045 AD NEG4 # WE NOW HAVE 7 - OP CODE(MOD4). SEE IF
000869,000203: 6144 10000 CCS A # THE OP CODE (MOD4) IS THREE (REVERSE).
000870,000204: 6145 50000 INDEX A # NO - THE MODE IS DEFINITE. PICK UP THE
000871,000205: 6146 46164 CS NO.WDS
000872,000206: 6147 16155 TCF REGUP +2
000873,000207:
000874,000208: 6150 50147 INDEX MODE # FOR VXSC AND V/SC WE WANT THE REQUIRED
000875,000209: 6151 46162 CS REVCNT # PUSHLOC DECREMENT WITHOUT CHANGING THE
000876,000210: 6152 16155 TCF REGUP +2 # MODE AT THIS TIME.
000877,000211:
000878,000212: 6153 50147 REGUP INDEX MODE # MOST ALL OP CODES PUSHUP HERE.
000879,000213: 6154 46164 CS NO.WDS
000880,000214: 6155 26152 +2 ADS PUSHLOC
000881,000215: 6156 54102 TS ADDRWD
000882,000216: 6157 50020 INDEX CYR
000883,000217: 6160 76234 7 INDJUMP -1 # (THE INDEX MAKES THIS A TCF.)
000884,000218:
000885,000219: 6161 00002 OCT 2 # REVERSE PUSHUP DECREMENT. VECTOR TAKES 2
000886,000220: 6162 00006 REVCNT OCT 6 # WORDS, SCALAR TAKES 6.
000887,000221: 6163 00006 OCT 6
000888,000222: 6164 00002 NO.WDS OCT 2 # CONVENTIONAL DECREMENT IS 6 WORDS VECTOR
000889,000223: 6165 00003 OCT 3 # 2 IN DP, AND 3 IN TP.
000890,000224: 6166 00006 OCT 6
000891,000225:
Page 23 |
000893,000227: # TEST THE SECOND PREFIX BIT TO SEE IF THIS IS A MISCELLANEOUS OR A UNARY/SHORT SHIFT OPERATION.
000894,000228:
000895,000229: 6167 10020 OPJUMP2 CCS CYR # TEST SECOND PREFIX BIT.
000896,000230: 6170 16217 TCF OPJUMP3 # TEST THIRD BIT TO SEE IF UNARY OR SHIFT.
000897,000231:
000898,000232: 6171 77722 -ENDVAC DEC -45 B-14
000899,000233:
000900,000234: # THE FOLLOWING ROUTINE PROCESSES ADDRESSES OF SUFFIX CLASS 10. THEY ARE BASICALLY WORK AREA ADDRESSES
000901,000235: # IN THE RANGE 0 - 52, ERASABLE ADRES CONSTANTS FROM 100 - 1777, AND FCADRS ABOVE THAT. ALL 15 BITS ARE AVAILABLE
000902,000236: # IN CONTRAST TO SUFFIX 1, IN WHICH ONLY THE LOW ORDER 14 ARE AVAILABLE.
000903,000237:
000904,000238: 6172 24150 15BITADR INCR LOC # (ENTRY HERE FROM STCALL).
000905,000239: 6173 50150 INDEX LOC # PICK UP ADDRESS WORD.
000906,000240: 6174 30000 CA 0
000907,000241: 6175 54103 TS POLISH # THE ABSOLUTE ADDRESS WILL BE LEFT IN
000908,000242: 6176 54102 TS ADDRWD # POLISH WITH AN ERASABLE SUBADDRESS IN
000909,000243: # ADDRWD.
000910,000244: 6177 76231 MASK HIGH9 # SEE IF RELATIVE TO THE WORK AREA.
000911,000245: 6200 10000 CCS A
000912,000246: 6201 16203 TCF +2
000913,000247: 6202 16210 TCF RELWORK # ONLY IF ZERO.
000914,000248:
000915,000249: 6203 36230 CAF LOW7+2K # THESE INSTRUCTIONS ARE IN BANK 1.
000916,000250: 6204 54004 TS FBANK
000917,000251: 6205 70020 MASK CYR
000918,000252: 6206 50000 INDEX A
000919,000253: 6207 16275 TCF MISCJUMP
000920,000254:
000921,000255: 6210 30104 RELWORK CA FIXLOC # MAKE ADDRWD RELATIVE TO FIXLOC, LEAVING
000922,000256: 6211 26102 ADS ADDRWD # POLISH ABSOLUTE IN CASE THIS WAS AN
000923,000257: 6212 36230 CAF LOW7+2K # AXT, ETC.
000924,000258: 6213 54004 TS FBANK
000925,000259: 6214 70020 MASK CYR
000926,000260: 6215 50000 INDEX A
000927,000261: 6216 16275 TCF MISCJUMP
000928,000262:
Page 24 |
000930,000264: # COMPLETE THE DISPATCHING OF UNARY AND SHORT SHIFT OPERATIONS.
000931,000265:
000932,000266: 6217 54004 OPJUMP3 TS FBANK # CALL IN BANK 0 (BITS 11-15 OF A ARE 0.)
000933,000267: 6220 10020 CCS CYR # TEST THIRD PREFIX BIT.
000934,000268: 6221 50000 INDEX A # THE DECREMENTED UNARY CODE IS IN BITS
000935,000269: 6222 16315 TCF UNAJUMP # 1-4 OF A (ZERO, EXIT, HAS BEEN DETECTED)
000936,000270:
000937,000271: 6223 10147 CCS MODE # ITS A SHORT SHIFT CODE. SEE IF PRESENT
000938,000272: 6224 12000 TCF SHORTT # SCALAR OR VECTOR.
000939,000273: 6225 12000 TCF SHORTT
000940,000274: 6226 12102 TCF SHORTV # CALLS THE APPROPRIATE ROUTINE.
000941,000275:
000942,000276:
000943,000277:
000944,000278: 6227 00023 OCT23 OCT 23 # MASK USED BY PUSH-UP ROUTINE.
000945,000279: 6230 02177 LOW7+2K OCT 2177 # OP CODE MASK + BANK 1 FBANK SETTING.
000946,000280: 6231 77700 HIGH9 OCT 77700
000947,000281: 6232 76000 BANKMASK OCT 76000 # FBANK MASK.
000948,000282: 6233 6232 FBANKMSK EQUALS BANKMASK
000949,000283: 6233 36000 B11T14 OCT 36000 # USED IN PROCESSING STORE CODES.
000950,000284: 6234 76056 -ENDERAS DEC -977 B-14
000951,000285:
Page 25 |
000953,000287: # THE FOLLOWING IS THE JUMP TABLE FOR OP CODES WHICH MAY HAVE INDEXABLE ADDRESSES OR MAY PUSH UP.
000954,000288:
000955,000289: 6235 16510 INDJUMP TCF VLOAD # 00 - LOAD MPAC WITH A VECTOR.
000956,000290: 6236 17047 TCF TAD # 01 - TRIPLE PRECISION ADD TO MPAC.
000957,000291: 6237 17572 TCF SIGN # 02 - COMPLEMENT MPAC (V OR SC) IF X NEG.
000958,000292: 6240 17345 TCF VXSC # 03 - VECTOR TIMES SCALAR.
000959,000293: 6241 16671 TCF CGOTO # 04 - COMPUTED GO TO.
000960,000294: 6242 16473 TCF TLOAD # 05 - LOAD MPAC WITH TRIPLE PRECISION.
000961,000295: 6243 16464 TCF DLOAD # 06 - LOAD MPAC WITH A DP SCALAR.
000962,000296: 6244 17541 TCF V/SC # 07 - VECTOR DIVIDED BY SCALAR.
000963,000297:
000964,000298: 6245 16504 TCF SLOAD # 10 - LOAD MPAC IN SINGLE PRECISION.
000965,000299: 6246 16623 TCF SSP # 11 - SET SINGLE PRECISION INTO X.
000966,000300: 6247 16526 TCF PDDL # 12 - PUSH DOWN MPAC AND RE-LOAD IN DP.
000967,000301: 6250 17300 TCF MXV # 13 - MATRIX POST-MULTIPLIED BY VECTOR.
000968,000302: 6251 16562 TCF PDVL # 14 - PUSH DOWN AND VECTOR LOAD.
000969,000303: 6252 16631 TCF CCALL # 15 - COMPUTED CALL.
000970,000304: 6253 17303 TCF VXM # 16 - MATRIX PRE-MULTIPLIED BY VECTOR.
000971,000305: 6254 17533 TCF TSLC # 17 - NORMALIZE MPAC (SCALAR ONLY).
000972,000306:
000973,000307: 6255 17511 TCF DMPR # 20 - DP MULTIPLY AND ROUND.
000974,000308: 6256 17514 TCF DDV # 21 - DP DIVIDE BY.
000975,000309: 6257 17520 TCF BDDV # 22 - DP DIVIDE INTO.
000976,000310: 6260 17536 TCF GSHIFT # 23 - GENERAL SHIFT INSTRUCTION.
000977,000311: 6261 16732 TCF VAD # 24 - VECTOR ADD.
000978,000312: 6262 16760 TCF VSU # 25 - VECTOR SUBTRACT.
000979,000313: 6263 17010 TCF BVSU # 26 - VECTOR SUBTRACT FROM.
000980,000314: 6264 17275 TCF DOT # 27 - VECTOR DOT PRODUCT.
000981,000315:
000982,000316: 6265 17423 TCF VXV # 30 - VECTOR CROSS PRODUCT.
000983,000317: 6266 17371 TCF VPROJ # 31 - VECTOR PROJECTION.
000984,000318: 6267 16776 TCF DSU # 32 - DP SUBTRACT.
000985,000319: 6270 17034 TCF BDSU # 33 - DP SUBTRACT FROM.
000986,000320: 6271 16750 TCF DAD # 34 - DP ADD.
000987,000321: 6272 16272 TCF +0 # 35 - AVAILABLE
000988,000322: 6273 17507 TCF DMP1 # 36 - DP MULTIPLY.
000989,000323: 6274 17530 TCF SETPD # 37 - SET PUSH DOWN POINTER (DIRECT ONLY)
000990,000324:
000991,000325: # CODES 10 AND 14 MUST NOT PUSH UP. CODE 04 MAY BE USED FOR VECTOR DECLARE BEFORE PUSHUP IF DESIRED.
000992,000326:
Page 26 |
000994,000328: # THE FOLLOWING JUMP TABLE APPLIES TO INDEX, BRANCH, AND MISCELLANEOUS INSTRUCTIONS.
000995,000329:
000996,000330: 6275 12000 MISCJUMP TCF AXT # 00 - ADDRESS TO INDEX TRUE.
000997,000331: 6276 12005 TCF AXC # 01 - ADDRESS TO INDEX COMPLEMENTED.
000998,000332: 6277 12010 TCF LXA # 02 - LOAD INDEX FROM ERASABLE.
000999,000333: 6300 12014 TCF LXC # 03 - LOAD INDEX FROM COMPLEMENT OF ERAS.
001000,000334: 6301 12020 TCF SXA # 04 - STORE INDEX IN ERASABLE.
001001,000335: 6302 12024 TCF XCHX # 05 - EXCHANGE INDEX WITH ERASABLE.
001002,000336: 6303 12040 TCF INCR # 06 - INCREMENT INDEX REGISTER.
001003,000337: 6304 12047 TCF TIX # 07 - TRANSFER ON INDEX.
001004,000338:
001005,000339: 6305 12032 TCF XAD # 10 - INDEX REGISTER ADD FROM ERASABLE.
001006,000340: 6306 12043 TCF XSU # 11 - INDEX SUBTRACT FROM ERASABLE.
001007,000341: 6307 12107 TCF BZE/GOTO # 12 - BRANCH ZERO AND GOTO.
001008,000342: 6310 12114 TCF BPL/BMN # 13 - BRANCH PLUS AND BRANCH MINUS.
001009,000343: 6311 12127 TCF CALL/ITA # 14 - CALL AND STORE QPRET.
001010,000344: 6312 12067 TCF RTB/BHIZ # 15 - RETURN TO BASIC AND BRANCH HI ZERO.
001011,000345: 6313 12135 TCF SW/ # 16 - SWITCH INSTRUCTIONS AND AVAILABLE.
001012,000346: 6314 12077 TCF BOV(B) # 17 - BRANCH ON OVERFLOW TO BASIC OR INT.
001013,000347:
Page 27 |
001015,000349: # THE FOLLOWING JUMP TABLE APPIES TO UNARY INSTRUCTIONS.
001016,000350:
001017,000351: # 00 - EXIT - DETECTED EARLIER.
001018,000352: 6315 13125 UNAJUMP TCF SQRT # 01 - SQUARE ROOT.
001019,000353: 6316 13442 TCF SINE # 02 - SIN.
001020,000354: 6317 13431 TCF COSINE # 03 - COS.
001021,000355: 6320 13522 TCF ARCSIN # 04 - ARC SIN.
001022,000356: 6321 13524 TCF ARCCOS # 05 - ARC COS.
001023,000357: 6322 13107 TCF DSQ # 06 - DP SQUARE.
001024,000358: 6323 13111 TCF ROUND # 07 - ROUND TO DP.
001025,000359:
001026,000360: 6324 17605 TCF COMP # 10 - COMPLEMENT VECTOR OR SCALAR.
001027,000361: 6325 13150 TCF VDEF # 11 - VECTOR DEFINE.
001028,000362: 6326 12750 TCF UNIT # 12 - UNIT VECTOR.
001029,000363: 6327 13114 TCF ABVALABS # 13 - LENGTH OF VECTOR OR MAG OF SCALAR.
001030,000364: 6330 13164 TCF VSQ # 14 - SQUARE OF LENGTH OF VECTOR.
001031,000365: 6331 16334 TCF STADR # 15 - PUSH UP ON STORE CODE.
001032,000366: 6332 13214 TCF RVQ # 16 - RETURN VIA QPRET.
001033,000367: 6333 13167 TCF PUSH # 17 - PUSH MPAC DOWN.
001034,000368:
Page 28 |
001036,000370: # SECTION 2 LOAD AND STORE PACKAGE.
001037,000371:
001038,000372: # A SET OF SIXTEEN STORE CODES ARE PROVIDED AS THE PRIMARY METHOD OF STORING THE MULTI-PURPOSE
001039,000373: # ACCUMULATOR (MPAC). IF IN THE DANZIG SECTION LOC REFERS TO AN ALGEBRAICALLY POSITIVE WORD, IT IS TAKEN AS A
001040,000374: # STORE CODE WITH A CORRESPONDING ERASABLE ADDRESS. MOST OF THESE CODES ARE TWO ADDRESS, SPECIFYING THAT THE WORD
001041,000375: # FOLLOWING THE STORE CODE IS TO BE USED AS AN ADDRESS FROM WHICH TO RE-LOAD MPAC. FOUR OPTIONS ARE AVAILABLE:
001042,000376:
001043,000377: # 1. STORE STORE MPAC. THE E ADDRESS MAY BE INDEXED.
001044,000378: # 2. STODL STORE MPAC AND RE-LOAD IT IN DP WITH THE NEXT ADDRESS (EITHER MAY BE INDEXED).
001045,000379: # 3. STOVL STORE MPAC AND RE-LOAD A VECTOR (AS ABOVE).
001046,000380: # 4. STCALL STORE AND DO A CALL (BOTH ADDRESSES MUST BE DIRECT HERE).
001047,000381:
001048,000382: # STODL AND STOVL WILL TAKE FROM THE PUSH-DOWN LIST IF NO LOAD ADDRESS IS GIVEN.
001049,000383:
001050,000384:
001051,000385:
001052,000386: 6334 30151 STADR CA BANKSET # THE STADR CODE (PUSHUP UP ON STORE
001053,000387: 6335 54004 TS FBANK # ADDRESS) ENTERS HERE.
001054,000388: 6336 24150 INCR LOC
001055,000389: 6337 50150 INDEX LOC # THE STORE CODE WAS STORE COMPLEMENTED TO
001056,000390: 6340 40000 CS 0 # MAKE IT LOOK LIKE AN OPCODE PAIR.
001057,000391:
001058,000392: 6341 54102 DOSTORE TS ADDRWD
001059,000393: 6342 76425 MASK LOW10 # ENTRY FROM DISPATCHER. SAVE THE ERASABLE
001060,000394: 6343 56102 XCH ADDRWD # ADDRESS AND JUMP ON THE STORE CODE NO.
001061,000395: 6344 76233 MASK B11T14
001062,000396: 6345 00006 EXTEND
001063,000397: 6346 77641 MP BIT6 # EACH TRANSFER VECTOR ENTRY IS TWO WORDS.
001064,000398: 6347 50000 INDEX A
001065,000399: 6350 16351 TCF STORJUMP
001066,000400:
Page 29 |
001068,000402: # STORE CODE JUMP TABLE. CALLS THE APPROPRIATE STORING ROUTINE AND EXITS TO DANZIG OR TO ADDRESS WITH
001069,000403: # A SUPPLIED OPERATION CODE.
001070,000404:
001071,000405: 6351 06421 STORJUMP TC STORE # STORE.
001072,000406: 6352 16022 TCF NEWOPS -1 # PICK UP NEW OP CODE(S).
001073,000407: 6353 06413 TC STORE,1
001074,000408: 6354 16022 TCF NEWOPS -1
001075,000409: 6355 06416 TC STORE,2
001076,000410: 6356 16022 TCF NEWOPS -1
001077,000411:
001078,000412: 6357 06421 TC STORE # STODL.
001079,000413: 6360 16454 TCF DODLOAD
001080,000414: 6361 06413 TC STORE,1
001081,000415: 6362 16454 TCF DODLOAD
001082,000416: 6363 06416 TC STORE,2
001083,000417: 6364 16454 TCF DODLOAD
001084,000418:
001085,000419: 6365 06421 TC STORE # STODL WITH INDEXED LOAD ADDRESS.
001086,000420: 6366 16071 TCF DODLOAD*
001087,000421: 6367 06413 TC STORE,1
001088,000422: 6370 16071 TCF DODLOAD*
001089,000423: 6371 06416 TC STORE,2
001090,000424: 6372 16071 TCF DODLOAD*
001091,000425:
001092,000426: 6373 06421 TC STORE # STOVL.
001093,000427: 6374 16457 TCF DOVLOAD
001094,000428: 6375 06413 TC STORE,1
001095,000429: 6376 16457 TCF DOVLOAD
001096,000430: 6377 06416 TC STORE,2
001097,000431: 6400 16457 TCF DOVLOAD
001098,000432:
001099,000433: 6401 06421 TC STORE # STOVL WITH INDEXED LOAD ADDRESS.
001100,000434: 6402 16462 TCF DOVLOAD*
001101,000435: 6403 06413 TC STORE,1
001102,000436: 6404 16462 TCF DOVLOAD*
001103,000437: 6405 06416 TC STORE,2
001104,000438: 6406 16462 TCF DOVLOAD*
001105,000439:
001106,000440: 6407 06421 TC STORE # STOTC.
001107,000441: 6410 37657 CAF CALLCODE
001108,000442: 6411 54020 TS CYR
001109,000443: 6412 16172 TCF 15BITADR # GET A 15 BIT ADDRESS.
001110,000444:
Page 30 |
001112,000446: # STORE CODE ADDRESS PROCESSOR.
001113,000447:
001114,000448: 6413 50104 STORE,1 INDEX FIXLOC
001115,000449: 6414 40046 CS X1
001116,000450: 6415 16420 TCF PRESTORE
001117,000451:
001118,000452: 6416 50104 STORE,2 INDEX FIXLOC
001119,000453: 6417 40047 CS X2
001120,000454: 6420 26102 PRESTORE ADS ADDRWD # RESULTANT ADDRESS IS IN ERASABLE.
001121,000455:
001122,000456: 6421 30102 STORE CA ADDRWD # SEE IF ADDRESS RELATIVE TO WORK AREA.
001123,000457: 6422 66171 AD -ENDVAC
001124,000458: 6423 10000 CCS A
001125,000459: 6424 16430 TCF STARTSTO # ADDRESS OK AS IS.
001126,000460:
001127,000461: 6425 01777 LOW10 OCT 1777
001128,000462:
001129,000463: 6426 30104 CA FIXLOC # GIVEN ADDRESS IS RELATIVE TO WORK AREA.
001130,000464: 6427 26102 ADS ADDRWD
001131,000465:
Page 31 |
001133,000467: # STORING ROUTINES. STORE DP, TP, OR VECTOR AS INDICATED BY MODE.
001134,000468:
001135,000469: 6430 00006 STARTSTO EXTEND # MPAC,+1 MUST BE STORED IN ANY EVENT.
001136,000470: 6431 30141 DCA MPAC
001137,000471: 6432 50102 INDEX ADDRWD
001138,000472: 6433 52001 DXCH 0
001139,000473:
001140,000474: 6434 10147 CCS MODE
001141,000475: 6435 16450 TCF TSTORE
001142,000476: 6436 00002 TC Q
001143,000477:
001144,000478: 6437 00006 VSTORE EXTEND
001145,000479: 6440 30144 DCA MPAC +3
001146,000480: 6441 50102 INDEX ADDRWD
001147,000481: 6442 52003 DXCH 2
001148,000482:
001149,000483: 6443 00006 EXTEND
001150,000484: 6444 30146 DCA MPAC +5
001151,000485: 6445 50102 INDEX ADDRWD
001152,000486: 6446 52005 DXCH 4
001153,000487: 6447 00002 TC Q
001154,000488:
001155,000489: 6450 30142 TSTORE CA MPAC +2
001156,000490: 6451 50102 INDEX ADDRWD
001157,000491: 6452 54002 TS 2
001158,000492: 6453 00002 TC Q
001159,000493:
Page 32 |
001161,000495: # ROUTINES TO BEGIN PROCESSING OF THE SECOND ADDRESS ASSOCIATED WITH ALL STORE-TYPE CODES EXCEPT STORE
001162,000496: # ITSELF.
001163,000497:
001164,000498: 6454 37660 DODLOAD CAF DLOADCOD
001165,000499: 6455 54020 TS CYR
001166,000500: 6456 16041 TCF DIRADRES # GO GET A DIRECT ADDRESS.
001167,000501:
001168,000502: 6457 37630 DOVLOAD CAF VLOADCOD
001169,000503: 6460 54020 TS CYR
001170,000504: 6461 16041 TCF DIRADRES
001171,000505:
001172,000506: 6462 36042 DOVLOAD* CAF VLOAD*
001173,000507: 6463 16072 TCF DODLOAD* +1 # PROLOGUE TO INDEX ROUTINE.
001174,000508:
Page 33 |
001176,000510: # THE FOLLOWING LOAD INSTRUCTIONS ARE PROVIDED FOR LOADING THE MULTI-PURPOSE ACCUMULATOR MPAC.
001177,000511:
001178,000512: 6464 00006 DLOAD EXTEND
001179,000513: 6465 50102 INDEX ADDRWD
001180,000514: 6466 30001 DCA 0 # PICK UP DP ARGUMENT AND LEAVE IT IN
001181,000515: 6467 52141 SLOAD2 DXCH MPAC # MPAC,+1, SETTING MPAC +2 TO ZERO. THE
001182,000516: 6470 37653 CAF ZERO # CONTENTS OF THE OTHER FOUR REGISTERS OF
001183,000517: 6471 54142 TS MPAC +2 # MPAC ARE IRRELEVANT.
001184,000518: 6472 16013 TCF NEWMODE # DECLARE DOUBLE PRECISION MODE.
001185,000519:
001186,000520: 6473 50102 TLOAD INDEX ADDRWD
001187,000521: 6474 30002 CA 2 # LOAD A TRIPLE PRECISION ARGUMENT INTO
001188,000522: 6475 54142 TS MPAC +2 # THE FIRST THREE MPAC REGISTERS, WITH THE
001189,000523: 6476 00006 EXTEND # CONTENTS OF THE OTHER FOUR IRRELEVANT.
001190,000524: 6477 50102 INDEX ADDRWD
001191,000525: 6500 30001 DCA 0
001192,000526: 6501 52141 DXCH MPAC
001193,000527: 6502 37646 CAF ONE
001194,000528: 6503 16013 TCF NEWMODE # DECLARE TRIPLE PRECISION MODE.
001195,000529:
001196,000530: 6504 22007 SLOAD ZL # LOAD A SINGLE PRECISION NUMBER INTO
001197,000531: 6505 50102 INDEX ADDRWD # MPAC, SETTING MPAC+1,2 TO ZERO. THE
001198,000532: 6506 30000 CA 0 # CONTENTS OF THE REMAINING MPAC REGISTERS
001199,000533: 6507 16467 TCF SLOAD2 # ARE IRRELEVANT.
001200,000534:
001201,000535: 6510 00006 VLOAD EXTEND # LOAD A DOUBLE PRECISION VECTOR INTO
001202,000536: 6511 50102 INDEX ADDRWD # MPAC,+1, MPAC+3,4, AND MPAC+5,6. THE
001203,000537: 6512 30001 DCA 0 # CONTENTS OF MPAC +2 ARE IRRELEVANT.
001204,000538: 6513 52141 DXCH MPAC
001205,000539:
001206,000540: 6514 00006 ENDVLOAD EXTEND # PDVL COMES HERE TO FINISH UP FOR DP, TP.
001207,000541: 6515 50102 INDEX ADDRWD
001208,000542: 6516 30003 DCA 2
001209,000543: 6517 52144 DXCH MPAC +3
001210,000544:
001211,000545: 6520 00006 +4 EXTEND # TPDVL FINISHES HERE.
001212,000546: 6521 50102 INDEX ADDRWD
001213,000547: 6522 30005 DCA 4
001214,000548: 6523 52146 DXCH MPAC +5
001215,000549:
001216,000550: 6524 47646 CS ONE # DECLARE VECTOR MODE.
001217,000551: 6525 16013 TCF NEWMODE
001218,000552:
Page 34 A red line is drawn in a semicircle around the left of the following comments. |
001221,000555: # THE FOLLOWING INSTRUCTIONS ARE PROVIDED FOR STORING OPERANDS IN THE PUSHDOWN LIST:
001222,000556:
001223,000557: # 1. PUSH PUSHDOWN AND NO LOAD.
001224,000558: # 2. PDDL PUSHDOWN AND DOUBLE PRECISION LOAD.
001225,000559: # 3. PDVL PUSHDOWN AND VECTOR LOAD.
001226,000560:
001227,000561: 6526 00006 PDDL EXTEND
001228,000562: 6527 50102 INDEX ADDRWD # LOAD MPAC,+1, PUSHING THE FORMER
001229,000563: 6530 30001 DCA 0 # CONTENTS DOWN.
001230,000564: 6531 52141 DXCH MPAC
001231,000565: 6532 50152 INDEX PUSHLOC
001232,000566: 6533 52001 DXCH 0
001233,000567:
001234,000568: 6534 50147 INDEX MODE # ADVANCE THE PUSHDOWN POINTER APPRO-
001235,000569: 6535 36164 CAF NO.WDS # PRIATELY.
001236,000570: 6536 26152 ADS PUSHLOC
001237,000571:
001238,000572: 6537 10147 CCS MODE
001239,000573: 6540 16555 TCF ENDTPUSH
001240,000574: 6541 16553 TCF ENDDPUSH
001241,000575:
001242,000576: 6542 54147 TS MODE # NOW DP.
001243,000577: 6543 54142 ENDVPUSH TS MPAC +2
001244,000578: 6544 52144 DXCH MPAC +3 # PUSH DOWN THE REST OF THE VECTOR HERE.
001245,000579: 6545 50152 INDEX PUSHLOC
001246,000580: 6546 51775 DXCH 0 -4
001247,000581:
001248,000582: 6547 52146 DXCH MPAC +5
001249,000583: 6550 50152 INDEX PUSHLOC
001250,000584: 6551 51777 DXCH 0 -2
001251,000585:
001252,000586: 6552 16014 TCF DANZIG
001253,000587:
001254,000588: 6553 54142 ENDDPUSH TS MPAC +2 # SET MPAC +2 TO ZERO AND EXIT ON DP.
001255,000589: 6554 16014 TCF DANZIG
001256,000590:
001257,000591: 6555 54147 ENDTPUSH TS MODE
001258,000592: 6556 56142 XCH MPAC +2 # ON TRIPLE, SET MPAC +2 TO ZERO, PUSHING
001259,000593: 6557 50152 +2 INDEX PUSHLOC # DOWN THE OLD CONTENTS
001260,000594: 6560 53777 TS 0 -1
001261,000595: 6561 16014 TCF DANZIG
001262,000596:
Page 35 |
001264,000598: # PDVL - PUSHDOWN AND VECTOR LOAD.
001265,000599:
001266,000600: 6562 00006 PDVL EXTEND # RELOAD MPAC AND PUSH DOWN ITS CONTENTS.
001267,000601: 6563 50102 INDEX ADDRWD
001268,000602: 6564 30001 DCA 0
001269,000603: 6565 52141 DXCH MPAC
001270,000604: 6566 50152 INDEX PUSHLOC
001271,000605: 6567 52001 DXCH 0
001272,000606:
001273,000607: 6570 50147 INDEX MODE # ADVANCE THE PUSHDOWN POINTER.
001274,000608: 6571 36164 CAF NO.WDS
001275,000609: 6572 26152 ADS PUSHLOC
001276,000610:
001277,000611: 6573 10147 CCS MODE # TEST PAST MODE.
001278,000612: 6574 16613 TCF TPDVL
001279,000613: 6575 16514 TCF ENDVLOAD # JUST LOAD LAST FOUR REGISTERS ON DP.
001280,000614:
001281,000615: 6576 00006 VPDVL EXTEND # PUSHDOWN AND RE-LOAD LAST TWO COMPONENTS
001282,000616: 6577 50102 INDEX ADDRWD
001283,000617: 6600 30003 DCA 2
001284,000618: 6601 52144 DXCH MPAC +3
001285,000619: 6602 50152 INDEX PUSHLOC
001286,000620: 6603 51775 DXCH 0 -4
001287,000621:
001288,000622: 6604 00006 EXTEND
001289,000623: 6605 50102 INDEX ADDRWD
001290,000624: 6606 30005 DCA 4
001291,000625: 6607 52146 DXCH MPAC +5
001292,000626: 6610 50152 INDEX PUSHLOC
001293,000627: 6611 51777 DXCH 0 -2
001294,000628:
001295,000629: 6612 16014 TCF DANZIG
001296,000630:
001297,000631: 6613 00006 TPDVL EXTEND # ON TP, WE MUST LOAD THE Y COMPONENT
001298,000632: 6614 50102 INDEX ADDRWD # BEFORE STORING MPAC +2 INCASE THIS IS A
001299,000633: 6615 30003 DCA 2 # PUSHUP.
001300,000634: 6616 52144 DXCH MPAC +3
001301,000635:
001302,000636: 6617 30142 CA MPAC +2
001303,000637: 6620 50152 INDEX PUSHLOC # IN DP.
001304,000638: 6621 53777 TS 0 -1
001305,000639: 6622 16520 TCF ENDVLOAD +4
001306,000640:
001307,000641: # SSP (STORE SINGLE PRECISION) IS EXECUTED HERE.
001308,000642:
001309,000643: 6623 24150 SSP INCR LOC # PICK UP THE WORD FOLLOWING THE GIVEN
001310,000644: 6624 50150 INDEX LOC # ADDRESS AND STORE IT AT X.
001311,000645: 6625 30000 CA 0
001312,000646: 6626 50102 STORE1 INDEX ADDRWD # SOME INDEX AND MISCELLANEOUS OPS END
001313,000647: 6627 54000 TS 0 # HERE.
001314,000648:
Page 36 |
001316,000650: 6630 16014 TCF DANZIG
001317,000651:
Page 37 |
001319,000653: # SEQUENCE CHANGING AND SUBROUTINE CALLING OPTIONS.
001320,000654:
001321,000655: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR SEQUENCING CHANGING, BRANCHING, AND CALLING SUBROUTINES:
001322,000656:
001323,000657: # 1. GOTO GO TO.
001324,000658: # 2. CALL CALL SUBROUTINE SETTING QPRET.
001325,000659: # 3. CGOTO COMPUTED GO TO.
001326,000660: # 4. CCALL COMPUTED CALL.
001327,000661: # 7. BPL BRANCH IF MPAC POSITIVE OR ZERO.
001328,000662: # 8. BZE BRANCH IF MPAC ZERO.
001329,000663: # 9. BMN BRANCH IF MPAC NEGATIVE NON-ZERO.
001330,000664:
001331,000665: 6631 24150 CCALL INCR LOC # MAINTAIN LOC FOR QPRET COMPUTATION.
001332,000666: 6632 50150 INDEX LOC
001333,000667: 6633 30000 CAF 0 # GET BASE ADDRESS OF CADR LIST.
001334,000668: 6634 50102 INDEX ADDRWD
001335,000669: 6635 60000 AD 0 # ADD INCREMENT.
001336,000670: 6636 54004 TS FBANK # SELECT DESIRED CADR.
001337,000671: 6637 76425 MASK LOW10
001338,000672: 6640 50000 INDEX A
001339,000673: 6641 32000 CAF 10000
001340,000674: 6642 54103 -1 TS POLISH
001341,000675:
001342,000676: 6643 46425 CALL CS LOW10 # FOR ANY OF THE CALL OPTIONS, MAKE UP THE
001343,000677: 6644 60150 AD LOC # ADDRESS OF THE NEXT OP-CODE PAIR/STORE
001344,000678: 6645 60151 AD BANKSET # CODE AND LEAVE IT IN QPRET. NOTE THAT
001345,000679: 6646 50104 INDEX FIXLOC # LOW10 = 2000 - 1.
001346,000680: 6647 54052 TS QPRET
001347,000681:
001348,000682: 6650 30103 GOTO CA POLISH # BASIC BRANCHING SEQUENCE.
001349,000683: 6651 54004 TS FBANK
001350,000684: 6652 76425 MASK LOW10 # MAKE UP 12 BIT SUB-ADDRESS AND FALL INTO
001351,000685: 6653 67634 AD 2K # FALL INTO THE INTPRET ENTRY UNLESS THE
001352,000686: 6654 54150 TS LOC # GIVEN ADDRESS WAS IN ERASABLE, IN WHICH
001353,000687: 6655 10004 CCS FBANK # CASE IT IS USED AS THE ADDRESS OF THE
001354,000688: 6656 16002 TCF INTPRET +2 # BRANCH ADDRESS.
001355,000689: 6657 16661 TCF +2
001356,000690: 6660 16002 TCF INTPRET +2
001357,000691:
Page 38 |
001359,000693: 6661 40150 CS LOC # THE GIVEN ADDRESS IS IN ERASABLE - SEE
001360,000694: 6662 66707 AD EVAC+2K # IF RELATIVE TO THE WORK AREA.
001361,000695: 6663 10000 CCS A
001362,000696: 6664 30104 CA FIXLOC # ADD FIXLOC IF SO.
001363,000697: 6665 26150 ADS LOC
001364,000698:
001365,000699: 6666 50150 INDEX LOC
001366,000700: 6667 26000 CA 0 -2000 # (ADDRESS HAD BEEN AUGMENTED BY 2000.)
001367,000701: 6670 16651 TCF GOTO +1 # ALLOWS ARBITRARY INDIRECTNESS.
001368,000702:
001369,000703: 6671 50150 CGOTO INDEX LOC # COMPUTED GO TO. PICK UP ADDRESS OF CADR
001370,000704: 6672 30001 CA 1 # LIST.
001371,000705: 6673 50102 INDEX ADDRWD # ADD MODIFIER.
001372,000706: 6674 60000 AD 0
001373,000707: 6675 54004 TS FBANK # SELECT GOTO ADDRESS.
001374,000708: 6676 76425 MASK LOW10
001375,000709: 6677 50000 INDEX A
001376,000710: 6700 32000 CA 10000
001377,000711: 6701 16651 TCF GOTO +1 # WITH ADDRESS IN A.
001378,000712:
001379,000713: 6702 30151 SWBRANCH CA BANKSET # SWITCH INSTRUCTIONS WHICH ELECT TO
001380,000714: 6703 54004 TS FBANK # BRANCH COME HERE TO DO SO.
001381,000715: 6704 50150 INDEX LOC
001382,000716: 6705 30001 CA 1
001383,000717: 6706 16651 TCF GOTO +1
001384,000718:
001385,000719: 6707 02055 EVAC+2K DEC 1069 B-14 # =1024+45
001386,000720:
Page 39 |
001388,000722: # TRIPLE PRECISION BRANCHING ROUTINE. IF CALLING TC IS AT L, RETURN IS AS FOLLOWS:
001389,000723:
001390,000724: # L+1 IF MPAC IS GREATER THAN ZERO.
001391,000725: # L+2 IF MPAC IS EQUAL TO +0 OR -0.
001392,000726: # L+3 IF MPAC IS LESS THAN ZERO.
001393,000727:
001394,000728:
001395,000729:
001396,000730: 6710 10140 BRANCH CCS MPAC
001397,000731: 6711 00002 TC Q
001398,000732: 6712 16714 TCF +2 # ON ZERO.
001399,000733: 6713 16726 TCF NEG
001400,000734:
001401,000735: 6714 10141 CCS MPAC +1
001402,000736: 6715 00002 TC Q
001403,000737: 6716 16720 TCF +2
001404,000738: 6717 16726 TCF NEG
001405,000739:
001406,000740: 6720 10142 CCS MPAC +2
001407,000741: 6721 00002 TC Q
001408,000742: 6722 16724 TCF +2
001409,000743: 6723 16726 TCF NEG
001410,000744:
001411,000745: 6724 50002 INDEX Q # IF ALL THREE REGISTERS WERE +-0.
001412,000746: 6725 00001 TC 1
001413,000747:
001414,000748: 6726 50002 NEG INDEX Q # IF FIRST NON-ZERO REGISTER WAS NEGATIVE.
001415,000749: 6727 00002 TC 2
001416,000750:
001417,000751:
001418,000752:
001419,000753: 6730 50150 EXIT INDEX LOC # LEAVE INTERPRETIVE MODE.
001420,000754: 6731 10001 TCF 1
001421,000755:
Page 40 |
001423,000757: # SECTION 3 - ADD/SUBTRACT PACKAGE.
001424,000758:
001425,000759: # THE FOLLOWING OPERATIONS ARE PROVIDED FOR ADDING TO AND SUBTRACTING FROM THE MULTI-PURPOSE ACCUMULATOR
001426,000760: # MPAC:
001427,000761:
001428,000762: # 1. DAD DOUBLE PRECISION ADD.
001429,000763: # 2. DSU DOUBLE PRECISION SUBTRACT.
001430,000764: # 3. BDSU DOUBLE PRECISION SUBTRACT FROM.
001431,000765:
001432,000766: # 4. TAD TRIPLE PRECISION ADD.
001433,000767:
001434,000768: # 5. VAD VECTOR ADD.
001435,000769: # 6. VSU VECTOR SUBTRACT.
001436,000770: # 7. BVSU VECTOR SUBTRACT FROM.
001437,000771:
001438,000772: # THE INTERPRETIVE OVERFLOW INDICATOR OVFIND IS SET NON-ZERO IF OVERFLOW OCCURS IN ANY OF THE ABOVE.
001439,000773:
001440,000774:
001441,000775:
001442,000776: 6732 00006 VAD EXTEND
001443,000777: 6733 50102 INDEX ADDRWD
001444,000778: 6734 30003 DCA 2
001445,000779: 6735 20144 DAS MPAC +3
001446,000780: 6736 00006 EXTEND # CHECK OVERFLOW.
001447,000781: 6737 16741 BZF +2
001448,000782: 6740 07006 TC OVERFLOW
001449,000783:
001450,000784: 6741 00006 EXTEND
001451,000785: 6742 50102 INDEX ADDRWD
001452,000786: 6743 30005 DCA 4
001453,000787: 6744 20146 DAS MPAC +5
001454,000788: 6745 00006 EXTEND
001455,000789: 6746 16750 BZF +2
001456,000790: 6747 07006 TC OVERFLOW
001457,000791:
001458,000792: 6750 00006 DAD EXTEND
001459,000793: 6751 50102 INDEX ADDRWD
001460,000794: 6752 30001 DCA 0
001461,000795: 6753 20141 ENDVXV DAS MPAC # VXV FINISHES HERE.
001462,000796: 6754 00006 EXTEND
001463,000797: 6755 16014 BZF DANZIG
001464,000798: 6756 07006 TC OVERFLOW
001465,000799: 6757 16014 TCF DANZIG
001466,000800:
Page 41 |
001468,000802: 6760 00006 VSU EXTEND
001469,000803: 6761 50102 INDEX ADDRWD
001470,000804: 6762 40003 DCS 2
001471,000805: 6763 20144 DAS MPAC +3
001472,000806: 6764 00006 EXTEND
001473,000807: 6765 16767 BZF +2
001474,000808: 6766 07006 TC OVERFLOW
001475,000809:
001476,000810: 6767 00006 EXTEND
001477,000811: 6770 50102 INDEX ADDRWD
001478,000812: 6771 40005 DCS 4
001479,000813: 6772 20146 DAS MPAC +5
001480,000814: 6773 00006 EXTEND
001481,000815: 6774 16776 BZF +2
001482,000816: 6775 07006 TC OVERFLOW
001483,000817:
001484,000818: 6776 00006 DSU EXTEND
001485,000819: 6777 50102 INDEX ADDRWD
001486,000820: 7000 40001 DCS 0
001487,000821: 7001 20141 DAS MPAC
001488,000822: 7002 00006 EXTEND
001489,000823: 7003 16014 BZF DANZIG
001490,000824: 7004 07006 TC OVERFLOW
001491,000825: 7005 16014 TCF DANZIG
001492,000826:
001493,000827: 7006 37646 OVERFLOW CAF ONE # SUBROUTINE TO TURN OVFIND ON.
001494,000828: 7007 17130 TCF SETOVF2
001495,000829:
Page 42 |
001497,000831: 7010 00006 BVSU EXTEND
001498,000832: 7011 50102 INDEX ADDRWD
001499,000833: 7012 30003 DCA 2
001500,000834: 7013 52144 DXCH MPAC +3
001501,000835: 7014 00006 EXTEND
001502,000836: 7015 40001 DCOM
001503,000837: 7016 20144 DAS MPAC +3
001504,000838: 7017 00006 EXTEND
001505,000839: 7020 17022 BZF +2
001506,000840: 7021 07006 TC OVERFLOW
001507,000841:
001508,000842: 7022 00006 EXTEND
001509,000843: 7023 50102 INDEX ADDRWD
001510,000844: 7024 30005 DCA 4
001511,000845: 7025 52146 DXCH MPAC +5
001512,000846: 7026 00006 EXTEND
001513,000847: 7027 40001 DCOM
001514,000848: 7030 20146 DAS MPAC +5
001515,000849: 7031 00006 EXTEND
001516,000850: 7032 17034 BZF +2
001517,000851: 7033 07006 TC OVERFLOW
001518,000852:
001519,000853: 7034 00006 BDSU EXTEND
001520,000854: 7035 50102 INDEX ADDRWD
001521,000855: 7036 30001 DCA 0
001522,000856: 7037 52141 DXCH MPAC
001523,000857: 7040 00006 EXTEND
001524,000858: 7041 40001 DCOM
001525,000859: 7042 20141 DAS MPAC
001526,000860: 7043 00006 EXTEND
001527,000861: 7044 16014 BZF DANZIG
001528,000862: 7045 07006 TC OVERFLOW
001529,000863: 7046 16014 TCF DANZIG
001530,000864:
Page 43 |
001532,000866: # TRIPLE PRECISION ADD ROUTINE.
001533,000867:
001534,000868: 7047 00006 TAD EXTEND
001535,000869: 7050 50102 INDEX ADDRWD
001536,000870: 7051 30002 DCA 1 # ADD MINOR PARTS FIRST.
001537,000871: 7052 20142 DAS MPAC +1
001538,000872: 7053 50102 INDEX ADDRWD
001539,000873: 7054 60000 AD 0
001540,000874: 7055 60140 AD MPAC
001541,000875: 7056 54140 TS MPAC
001542,000876: 7057 16014 TCF DANZIG
001543,000877:
001544,000878: 7060 54105 SETOVF TS OVFIND # SET OVFIND IF SUCH OCCURS.
001545,000879: 7061 16014 TCF DANZIG
001546,000880:
Page 44 |
001548,000882: # ARITHMETIC SUBROUTINES REQUIRED IN FIXED-FIXED.
001549,000883:
001550,000884: # 1. DMPSUB DOUBLE PRECISION MULTIPLY. MULTIPLY THE CONTENTS OF MPAC,+1 BY THE DP WORD WHOSE ADDRESS
001551,000885: # IS IN ADDRWD AND LEAVE A TRIPLE PRECISION RESULT IN MPAC.
001552,000886: # 2. ROUNDSUB ROUND THE TRIPLE PRECISON CONTENTS OF MPAC TO DOUBLE PRECISION.
001553,000887: # 3. DOTSUB TAKE THE DOT PRODUCT OF THE VECTOR IN MPAC AND THE VECTOR WHOSE ADDRESS IS IN ADDRWD
001554,000888: # AND LEAVE THE TRIPLE PRECISION RESULT IN MPAC.
001555,000889: # 4. POLY USING THE CONTENTS OF MPAC AS A DP ARGUMENT, EVALUATE THE POLYNOMIAL WHOSE DEGREE AND
001556,000890: # COEFFICIENTS IMMEDIATELY FOLLOW THE TC POLY INSTRUCTION (SEE ROUTINE FOR DETAILS.)
001557,000891:
001558,000892:
001559,000893:
001560,000894: 7062 50002 DMP INDEX Q # BASIC SUBROUTINE FOR USE BY PINBALL, ETC
001561,000895: 7063 30000 CAF 0 # ADRES OF ARGUMENT FOLLOWS TC DMP .
001562,000896: 7064 24002 INCR Q
001563,000897: 7065 54102 -1 TS ADDRWD # (PROLOGUE FOR SETTING ADDRWD.)
001564,000898:
001565,000899: 7066 50102 DMPSUB INDEX ADDRWD # GET MINOR PART OF OPERAND AT C(ADDRWD).
001566,000900: 7067 30001 CA 1
001567,000901: 7070 54142 TS MPAC +2 # THIS WORKS FOR SQUARING MPAC AS WELL.
001568,000902: 7071 37653 CAF ZERO # SET MPAC +1 TO ZERO SO WE CAN ACCUMULATE
001569,000903: 7072 56141 XCH MPAC +1 # THE PARTIAL PRODUCTS WITH DAS
001570,000904: 7073 54121 TS MPTEMP # INSTRUCTIONS.
001571,000905: 7074 00006 EXTEND
001572,000906: 7075 70142 MP MPAC +2 # MINOR OF MPAC X MINOR OF C(ADDRWD).
001573,000907:
001574,000908: 7076 56142 XCH MPAC +2 # DISCARD MINOR PART OF ABOVE RESULT AND
001575,000909: 7077 00006 EXTEND # FORM MAJOR OF MPAC X MINOR OF C(ADDRWD).
001576,000910: 7100 70140 MP MPAC
001577,000911: 7101 20142 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
001578,000912:
001579,000913: 7102 50102 INDEX ADDRWD # GET MAJOR PART OF ARGUMENT AT C(ADDRWD).
001580,000914: 7103 30000 CA 0
001581,000915: 7104 56121 XCH MPTEMP # SAVE AND BRING OUT MINOR OF MPAC.
001582,000916: 7105 00006 EXTEND
001583,000917: 7106 70121 MP MPTEMP # MAJOR OF C(ADDRWD) X MINOR OF MPAC.
001584,000918: 7107 20142 DAS MPAC +1 # ACCUMULATE, SETTING A TO NET OVERFLOW.
001585,000919:
001586,000920: 7110 56140 XCH MPAC # SETTING MPAC TO 0 OR +-1.
001587,000921: 7111 00006 EXTEND
001588,000922: 7112 70121 MP MPTEMP # MAJOR OF MPAC X MAJOR OF C(ADDRWD).
001589,000923: 7113 20141 DAS MPAC # GUARANTEED NO OVERFLOW.
001590,000924: 7114 00002 TC Q # 49 MCT = .573 MS. INCLUDING RETURN.
001591,000925:
Page 45 |
001593,000927: # ROUND MPAC TO DOUBLE PRECISION, SETTING OVFIND ON THE RARE EVENT OF OVERFLOW.
001594,000928:
001595,000929: 7115 37653 ROUNDSUB CAF ZERO # SET MPAC +2 TO ZERO FOR SCALARS.
001596,000930:
001597,000931: 7116 56142 VROUND XCH MPAC +2 # BUT WE NEEDNT TAKE THE TIME FOR VECTORS.
001598,000932: 7117 60000 DOUBLE
001599,000933: 7120 54001 TS L
001600,000934: 7121 00002 TC Q
001601,000935:
001602,000936: 7122 60141 AD MPAC +1 # ADD ROUNDING BIT IF MPAC +2 WAS GREATER
001603,000937: 7123 54141 TS MPAC +1 # THAN .5 IN MAGNITUDE.
001604,000938: 7124 00002 TC Q
001605,000939:
001606,000940: 7125 60140 AD MPAC # PROPAGATE INTERFLOW.
001607,000941: 7126 54140 TS MPAC
001608,000942: 7127 00002 TC Q
001609,000943:
001610,000944: 7130 54105 SETOVF2 TS OVFIND # (RARE).
001611,000945: 7131 00002 TC Q
001612,000946:
Page 46 |
001614,000948: # THE DOT PRODUCT SUBROUTINE USUALLY FORMS THE DOT PRODUCT OF THE VECTOR IN MPAC WITH A STANDARD SIX
001615,000949: # REGISTER VECTOR WHOSE ADDRESS IS IN ADDRWD. IN THIS CASE C(DOTINC) ARE SET TO 2. VXM, HOWEVER, SETS C(DOTINC) TO
001616,000950: # 6 SO THAT DOTSUB DOTS MPAC WITH A COLUMN VECTOR OF THE MATRIX IN QUESTION IN THIS CASE.
001617,000951:
001618,000952:
001619,000953:
001620,000954: 7132 37645 PREDOT CAF TWO # PROLOGUE TO SET DOTINC TO 2.
001621,000955: 7133 54122 TS DOTINC
001622,000956:
001623,000957: 7134 00006 DOTSUB EXTEND
001624,000958: 7135 22123 QXCH DOTRET # SAVE RETURN.
001625,000959: 7136 07066 TC DMPSUB # DOT X COMPONENTS.
001626,000960: 7137 52144 DXCH MPAC +3 # POSITION Y COMPONENT OF MPAC FOR
001627,000961: 7140 52141 DXCH MPAC # MULTIPLICATION WHILE SAVING RESULT IN
001628,000962: 7141 52115 DXCH BUF # THREE WORD BUFFER, BUF.
001629,000963: 7142 30142 CA MPAC +2
001630,000964: 7143 54116 TS BUF +2
001631,000965:
001632,000966: 7144 30122 CA DOTINC # ADVANCE ADDRWD TO Y COMPONENT OF
001633,000967: 7145 26102 ADS ADDRWD # OTHER ARGUMENT.
001634,000968: 7146 07066 TC DMPSUB
001635,000969: 7147 52142 DXCH MPAC +1 # ACCUMULATE PARTIAL PRODUCTS.
001636,000970: 7150 20116 DAS BUF +1
001637,000971: 7151 60140 AD MPAC
001638,000972: 7152 60114 AD BUF
001639,000973: 7153 54114 TS BUF
001640,000974: 7154 17156 TCF +2
001641,000975: 7155 54105 TS OVFIND # IF OVERFLOW OCCURS.
001642,000976:
001643,000977: 7156 52146 DXCH MPAC +5 # MULTIPLY Z COMPONENTS.
001644,000978: 7157 52141 DXCH MPAC
001645,000979: 7160 30122 CA DOTINC
001646,000980: 7161 26102 ADS ADDRWD
001647,000981: 7162 07066 TC DMPSUB
001648,000982: 7163 52116 ENDDOT DXCH BUF +1 # LEAVE FINAL ACCUMULATION IN MPAC.
001649,000983: 7164 20142 DAS MPAC +1
001650,000984: 7165 60140 AD MPAC
001651,000985: 7166 60114 AD BUF
001652,000986: 7167 54140 TS MPAC
001653,000987: 7170 00123 TC DOTRET
001654,000988:
001655,000989: 7171 54105 TS OVFIND # ON OVERFLOW HERE.
001656,000990: 7172 00123 TC DOTRET
001657,000991:
Page 47 |
001659,000993: # DOUBLE PRECISION POLYNOMIAL EVALUATOR.
001660,000994:
001661,000995: # N N-1
001662,000996: # THIS ROUTINE EVALUATES A X + A X + ... + A X + A LEAVING THE DP RESULT IN MPAC ON EXIT.
001663,000997: # N N-1 1 0
001664,000998:
001665,000999: # IT IS ASSUMED THAT X ARRIVES IN MPAC AND N AND THE COEFFICIENTS IN THE CALLING SEQUENCE AS FOLLOWS:
001666,001000:
001667,001001: # L TC POLY
001668,001002: # L+1 DEC N-1
001669,001003: # L+2 2DEC A(0)
001670,001004: # ...
001671,001005: # L+2N+2 2DEC A(N) RETURN IS TO L+2N+4.
001672,001006:
001673,001007: 7173 37662 POLY CAF LVBUF # INCOMING X WILL BE STORED IN VBUF, SO
001674,001008: 7174 54102 TS ADDRWD # SET ADDRWD SO DMPSUB WILL MPY BY VBUF.
001675,001009:
001676,001010: 7175 50002 INDEX Q
001677,001011: 7176 30000 CAF 0
001678,001012: 7177 54124 TS POLYCNT # N-1 TO COUNTER.
001679,001013: 7200 60000 DOUBLE
001680,001014: 7201 60002 AD Q
001681,001015: 7202 54125 TS POLYRET # SAVE L+2N-1 FOR RETURN
001682,001016: 7203 54103 TS POLISH # AND FOR REFERENCING COEFFICIENTS.
001683,001017:
001684,001018: 7204 00006 EXTEND
001685,001019: 7205 50000 INDEX A # LOAD A(N) INTO MPAC, SAVING MPAC IN
001686,001020: 7206 30004 DCA 3 # VBUF.
001687,001021: 7207 52141 DXCH MPAC
001688,001022: 7210 52107 DXCH VBUF
001689,001023: 7211 17215 TCF POLY2 # NO ZERO-ORDER POLYNOMIALS ALLOWED.
001690,001024:
001691,001025: 7212 54124 POLYLOOP TS POLYCNT # SAVE DECREMENTED LOOP COUNTER.
001692,001026: 7213 47645 CS TWO # REGRESS COEFFICIENT POINTER.
001693,001027: 7214 26103 ADS POLISH
001694,001028:
001695,001029: 7215 07066 POLY2 TC DMPSUB # MULTIPLY BY X.
001696,001030: 7216 00006 EXTEND
001697,001031: 7217 50103 INDEX POLISH # ADD IN NEXT COEFFICIENT.
001698,001032: 7220 30002 DCA 1
001699,001033: 7221 20141 DAS MPAC # NO CHECK FOR OVERFLOW SINCE SIN, ETC.,
001700,001034: # SHOULD NOT OVERFLOW.
001701,001035: 7222 10124 CCS POLYCNT # LOOP ON COUNTER.
001702,001036: 7223 17212 TCF POLYLOOP
001703,001037: 7224 50125 INDEX POLYRET # DONE - RETURN TO CALLER AT L+2N+4.
001704,001038: 7225 00005 FIVE TC 5
001705,001039:
Page 48 |
001707,001041: # MISCELLANEOUS MULTI-PRECISION ROUTINES REQUIRED IN FIXED-FIXED BUT NOT USED BY THE INTERPRETER.
001708,001042:
001709,001043: 7226 00006 TPAGREE EXTEND # FORCE SIGN AGREEMENT AMONG THE TRIPLE-
001710,001044: 7227 22114 QXCH BUF # PRECISION CONTENTS OF MPAC, RETURNING
001711,001045: 7230 06710 TC BRANCH # WITH THE SIGNUM OF THE INPUT IN A.
001712,001046: 7231 17235 TCF ARG+
001713,001047: 7232 17255 TCF ARGZERO
001714,001048:
001715,001049: 7233 47626 CS POSMAX # IF NEGATIVE.
001716,001050: 7234 17236 TCF +2
001717,001051:
001718,001052: 7235 37626 ARG+ CAF POSMAX
001719,001053: 7236 54115 +2 TS BUF +1
001720,001054: 7237 00006 EXTEND
001721,001055: 7240 24000 AUG A # FORMS +-1.0.
001722,001056: 7241 60142 AD MPAC +2
001723,001057: 7242 54142 TS MPAC +2
001724,001058: 7243 37653 CAF ZERO
001725,001059: 7244 60115 AD BUF +1
001726,001060: 7245 60141 AD MPAC +1
001727,001061: 7246 54141 TS MPAC +1
001728,001062: 7247 37653 CAF ZERO
001729,001063: 7250 60115 AD BUF +1
001730,001064: 7251 60140 AD MPAC
001731,001065: 7252 54140 ARGZERO2 TS MPAC # ALWAYS SKIPPING UNLESS ARGZERO.
001732,001066: 7253 54141 TS MPAC +1
001733,001067: 7254 00114 TC BUF # RETURN.
001734,001068:
001735,001069: 7255 54142 ARGZERO TS MPAC +2 # SET ALL THREE MPAC REGISTERS TO ZERO.
001736,001070: 7256 17252 TCF ARGZERO2
001737,001071:
001738,001072: # SHORTMP MULTIPLIES THE TP CONTENTS OF MPAC BY THE SINGLE PRECISION NUMBER ARRIVING IN A.
001739,001073:
001740,001074: 7257 54121 SHORTMP TS MPTEMP
001741,001075: 7260 00006 EXTEND
001742,001076: 7261 70142 MP MPAC +2
001743,001077: 7262 54142 TS MPAC +2
001744,001078: 7263 37653 CAF ZERO # SO SUBSEQUENT DAS WILL WORK.
001745,001079: 7264 56141 XCH MPAC +1
001746,001080: 7265 00006 EXTEND
001747,001081: 7266 70121 MP MPTEMP
001748,001082: 7267 20142 DAS MPAC +1
001749,001083: 7270 56140 XCH MPAC # SETTING MPAC TO 0.
001750,001084: 7271 00006 EXTEND
001751,001085: 7272 70121 MP MPTEMP
001752,001086: 7273 20141 DAS MPAC
001753,001087: 7274 00002 TC Q
001754,001088:
Page 49 |
001756,001090: # MISCELLANEOUS VECTOR OPERATIONS. INCLUDED HERE ARE THE FOLLOWING:
001757,001091:
001758,001092: # 1. DOT DP VECTOR DOT PRODUCT.
001759,001093: # 2. VXV DP VECTOR CROSS PRODUCT.
001760,001094: # 3. VXSC DP VECTOR TIMES SCALAR.
001761,001095: # 4. V/SC DP VECTOR DIVIDED BY SCALAR.
001762,001096: # 5. VPROJ DP VECTOR PROJECTION. ( (MPAC.X)MPAC ).
001763,001097: # 6. VXM DP VECTOR POST-MULTIPLIED BY MATRIX.
001764,001098: # 7. MXV DP VECTOR PRE-MULTIPLIED BY MATRIX.
001765,001099:
001766,001100:
001767,001101:
001768,001102: 7275 07132 DOT TC PREDOT # DO THE DOT PRODUCT AND EXIT, CHANGING
001769,001103: 7276 37653 CAF ZERO # THE MODE TO DP SCALAR.
001770,001104: 7277 16013 TCF NEWMODE
001771,001105:
001772,001106:
001773,001107:
001774,001108: 7300 37645 MXV CAF TWO # SET UP MATINC AND DOTINC FOR ROW
001775,001109: 7301 54124 TS MATINC # VECTORS.
001776,001110: 7302 17306 TCF VXM/MXV # GO TO COMMON PORTION.
001777,001111:
001778,001112: 7303 47650 VXM CS TEN # SET MATINC AND DOTINC TO REFER TO MATRIX
001779,001113: 7304 54124 TS MATINC # AS THREE COLUMN VECTORS.
001780,001114: 7305 36162 CAF SIX
001781,001115:
Page 50 |
001783,001117: # COMMON PORTION OF MXV AND VXM.
001784,001118:
001785,001119: 7306 54122 VXM/MXV TS DOTINC
001786,001120: 7307 07475 TC MPACVBUF # SAVE VECTOR IN MPAC FOR FURTHER USE.
001787,001121:
001788,001122: 7310 07134 TC DOTSUB # GO DOT TO GET X COMPONENT OF ANSWER.
001789,001123: 7311 00006 EXTEND
001790,001124: 7312 30107 DCA VBUF # MOVE MPAC VECTOR BACK INTO MPAC, SAVING
001791,001125: 7313 52141 DXCH MPAC # NEW X COMPONENT IN BUF2.
001792,001126: 7314 52120 DXCH BUF2
001793,001127: 7315 00006 EXTEND
001794,001128: 7316 30111 DCA VBUF +2
001795,001129: 7317 52144 DXCH MPAC +3
001796,001130: 7320 00006 EXTEND
001797,001131: 7321 30113 DCA VBUF +4
001798,001132: 7322 52146 DXCH MPAC +5
001799,001133: 7323 30124 CA MATINC # INITIALIZE ADDRWD FOR NEXT DOT PRODUCT.
001800,001134: 7324 26102 ADS ADDRWD # FORMS BASE ADDRESS OF NEXT COLUMN(ROW).
001801,001135:
001802,001136: 7325 07134 TC DOTSUB
001803,001137: 7326 52107 DXCH VBUF # MOVE GIVEN VECTOR BACK TO MPAC, SAVING Y
001804,001138: 7327 52141 DXCH MPAC # COMPONENT OF ANSWER IN VBUF +2.
001805,001139: 7330 52111 DXCH VBUF +2
001806,001140: 7331 52144 DXCH MPAC +3
001807,001141: 7332 52113 DXCH VBUF +4
001808,001142: 7333 52146 DXCH MPAC +5
001809,001143: 7334 30124 CA MATINC # FORM ADDRESS OF LAST COLUMN OR ROW.
001810,001144: 7335 26102 ADS ADDRWD
001811,001145:
001812,001146: 7336 07134 TC DOTSUB
001813,001147: 7337 52120 DXCH BUF2 # ANSWER NOW COMPLETE. PUT COMPONENTS INTO
001814,001148: 7340 52141 DXCH MPAC # PROPER MPAC REGISTERS.
001815,001149: 7341 52146 DXCH MPAC +5
001816,001150: 7342 52111 DXCH VBUF +2
001817,001151: 7343 52144 DXCH MPAC +3
001818,001152: 7344 16014 TCF DANZIG # EXIT.
001819,001153:
Page 51 |
001821,001155: # VXSC - VECTOR TIMES SCALAR.
001822,001156:
001823,001157: 7345 10147 VXSC CCS MODE # TEST PRESENT MODE.
001824,001158: 7346 17372 TCF DVXSC # SEPARATE ROUTINE WHEN SCALAR IS IN MPAC.
001825,001159: 7347 17372 TCF DVXSC
001826,001160:
001827,001161: 7350 07066 VVXSC TC DMPSUB # COMPUTE X COMPONENT
001828,001162: 7351 07116 TC VROUND # AND ROUND IT.
001829,001163: 7352 52144 DXCH MPAC +3 # PUT Y COMPONENT INTO MPAC SAVING MPAC IN
001830,001164: 7353 52141 DXCH MPAC # MPAC +3.
001831,001165: 7354 52144 DXCH MPAC +3
001832,001166:
001833,001167: 7355 07066 TC DMPSUB # DO SAME FOR Y AND Z COMPONENTS.
001834,001168: 7356 07116 TC VROUND
001835,001169: 7357 52146 DXCH MPAC +5
001836,001170: 7360 52141 DXCH MPAC
001837,001171: 7361 52146 DXCH MPAC +5
001838,001172:
001839,001173: 7362 07066 TC DMPSUB
001840,001174: 7363 07116 TC VROUND
001841,001175: 7364 52141 VROTATEX DXCH MPAC # EXIT USED TO RESTORE MPAC AFTER THIS
001842,001176: 7365 52146 DXCH MPAC +5 # TYPE OF ROTATION. CALLED BY VECTOR SHIFT
001843,001177: 7366 52144 DXCH MPAC +3 # RIGHT, V/SC, ETC.
001844,001178: 7367 52141 DXCH MPAC
001845,001179: 7370 16014 TCF DANZIG
001846,001180:
Page 52 |
001848,001182: # DP VECTOR PROJECTION ROUTINE.
001849,001183:
001850,001184: 7371 07132 VPROJ TC PREDOT # (MPAC.X)MPAC IS COMPUTED AND LEFT IN
001851,001185: # MPAC. DO DOT AND FALL INTO DVXSC.
001852,001186:
001853,001187: # VXSC WHEN SCALAR ARRIVES IN MPAC AND VECTOR IS AT X.
001854,001188:
001855,001189: 7372 00006 DVXSC EXTEND # SAVE SCALAR IN MPAC +3 AND GET X
001856,001190: 7373 30141 DCA MPAC # COMPONENT OF ANSWER.
001857,001191: 7374 52144 DXCH MPAC +3
001858,001192: 7375 07066 TC DMPSUB
001859,001193: 7376 07116 TC VROUND
001860,001194:
001861,001195: 7377 37645 CAF TWO # ADVANCE ADDRWD TO Y COMPONENT OF X.
001862,001196: 7400 26102 ADS ADDRWD
001863,001197: 7401 00006 EXTEND
001864,001198: 7402 30144 DCA MPAC +3 # PUT SCALAR BACK INTO MPAC AND SAVE
001865,001199: 7403 52141 DXCH MPAC # X RESULT IN MPAC +5.
001866,001200: 7404 52146 DXCH MPAC +5
001867,001201: 7405 07066 TC DMPSUB
001868,001202: 7406 07116 TC VROUND
001869,001203:
001870,001204: 7407 37645 CAF TWO
001871,001205: 7410 26102 ADS ADDRWD # TO Z COMPONENT.
001872,001206: 7411 52144 DXCH MPAC +3 # BRING SCALAR BACK, PUTTING Y RESULT IN
001873,001207: 7412 52141 DXCH MPAC # THE PROPER PLACE.
001874,001208: 7413 52144 DXCH MPAC +3
001875,001209: 7414 07066 TC DMPSUB
001876,001210: 7415 07116 TC VROUND
001877,001211:
001878,001212: 7416 52141 DXCH MPAC # PUT Z COMPONENT IN PROPER PLACE, ALSO
001879,001213: 7417 52146 DXCH MPAC +5 # POSITIONING X.
001880,001214: 7420 52141 DXCH MPAC
001881,001215:
001882,001216: 7421 47646 CS ONE # MODE HAS CHANGED TO VECTOR.
001883,001217: 7422 16013 TCF NEWMODE
001884,001218:
Page 53 |
001886,001220: # THE VECTOR CROSS PRODUCT ROUTINE CALCULATES (X M -X M ,X M -X M ,X M -X M ) WHERE M IS THE VECTOR IN
001887,001221: # 3 2 2 3 1 3 3 1 2 1 1 2
001888,001222: # MPAC AND X THE VECTOR AT THE GIVEN ADDRESS.
001889,001223:
001890,001224:
001891,001225:
001892,001226: 7423 00006 VXV EXTEND
001893,001227: 7424 30146 DCA MPAC +5 # FORM UP M3X1, LEAVING M1 IN VBUF.
001894,001228: 7425 52141 DXCH MPAC
001895,001229: 7426 52107 DXCH VBUF
001896,001230: 7427 07066 TC DMPSUB # BY X1.
001897,001231:
001898,001232: 7430 00006 EXTEND
001899,001233: 7431 40144 DCS MPAC +3 # CALCULATE -X1M2, SAVING X1M3 IN VBUF +2.
001900,001234: 7432 52141 DXCH MPAC
001901,001235: 7433 52111 DXCH VBUF +2
001902,001236: 7434 07066 TC DMPSUB
001903,001237:
001904,001238: 7435 37645 CAF TWO # ADVANCE ADDRWD TO X2.
001905,001239: 7436 26102 ADS ADDRWD
001906,001240: 7437 00006 EXTEND
001907,001241: 7440 40146 DCS MPAC +5 # PREPARE TO GET -X2M3, SAVING -X1M2 IN
001908,001242: 7441 52141 DXCH MPAC # MPAC +5.
001909,001243: 7442 52146 DXCH MPAC +5
001910,001244: 7443 07066 TC DMPSUB
001911,001245:
001912,001246: 7444 00006 EXTEND
001913,001247: 7445 30107 DCA VBUF # GET X2M1, SAVING -X2M3 IN VBUF +4.
001914,001248: 7446 52141 DXCH MPAC
001915,001249: 7447 52113 DXCH VBUF +4
001916,001250: 7450 07066 TC DMPSUB
001917,001251:
001918,001252: 7451 37645 CAF TWO # ADVANCE ADDRWD TO X3.
001919,001253: 7452 26102 ADS ADDRWD
001920,001254: 7453 00006 EXTEND
001921,001255: 7454 40107 DCS VBUF # GET -X3M1, ADDING X2M1 TO MPAC +5 TO
001922,001256: 7455 52141 DXCH MPAC # COMPLETE THE Z COMPONENT OF THE ANSWER.
001923,001257: 7456 20146 DAS MPAC +5
001924,001258:
001925,001259: 7457 00006 EXTEND
001926,001260: 7460 17462 BZF +2
001927,001261: 7461 07006 TC OVERFLOW
001928,001262:
Page 54 |
001930,001264: 7462 07066 TC DMPSUB
001931,001265: 7463 52111 DXCH VBUF +2 # MOVE X1M3 TO MPAC +3 SETTING UP FOR X3M2
001932,001266: 7464 52144 DXCH MPAC +3 # AND ADD -X3M1 TO MPAC +3 TO COMPLETE THE
001933,001267: 7465 52141 DXCH MPAC # Y COMPONENT OF THE RESULT.
001934,001268: 7466 20144 DAS MPAC +3
001935,001269:
001936,001270: 7467 00006 EXTEND
001937,001271: 7470 17472 BZF +2
001938,001272: 7471 07006 TC OVERFLOW
001939,001273:
001940,001274: 7472 07066 TC DMPSUB
001941,001275: 7473 52113 DXCH VBUF +4 # GO ADD -X2M3 TO X3M2 TO COMPLETE THE X
001942,001276: 7474 16753 TCF ENDVXV # COMPONENT (TAIL END OF DAD).
001943,001277:
001944,001278: # THE MPACVBUF SUBROUTINE SAVES THE VECTOR IN MPAC IN VBUF WITHOUT CLOBBERING MPAC.
001945,001279:
001946,001280: 7475 00006 MPACVBUF EXTEND # CALLED BY MXV, VXM, AND UNIT.
001947,001281: 7476 30141 DCA MPAC
001948,001282: 7477 52107 DXCH VBUF
001949,001283: 7500 00006 EXTEND
001950,001284: 7501 30144 DCA MPAC +3
001951,001285: 7502 52111 DXCH VBUF +2
001952,001286: 7503 00006 EXTEND
001953,001287: 7504 30146 DCA MPAC +5
001954,001288: 7505 52113 DXCH VBUF +4
001955,001289: 7506 00002 TC Q # RETURN TO CALLER.
001956,001290:
Page 55 |
001958,001292: # INTERPRETIVE INSTRUCTIONS WHOSE EXECUTION CONSISTS OF PRINCIPALLY CALLING SUBROUTINES.
001959,001293:
001960,001294: 7507 07066 DMP1 TC DMPSUB # DMP INSTRUCTION.
001961,001295: 7510 16014 TCF DANZIG
001962,001296:
001963,001297: 7511 07066 DMPR TC DMPSUB
001964,001298: 7512 07115 TC ROUNDSUB
001965,001299: 7513 16014 TCF DANZIG
001966,001300:
001967,001301: 7514 00006 DDV EXTEND
001968,001302: 7515 50102 INDEX ADDRWD # MOVE DIVIDEND INTO BUF.
001969,001303: 7516 30001 DCA 0
001970,001304: 7517 17524 TCF BDDV +4
001971,001305:
001972,001306: 7520 00006 BDDV EXTEND # MOVE DIVISOR INTO MPAC SAVING MPAC, THE
001973,001307: 7521 50102 INDEX ADDRWD # DIVIDEND, IN BUF.
001974,001308: 7522 30001 DCA 0
001975,001309: 7523 52141 DXCH MPAC
001976,001310: 7524 52115 +4 DXCH BUF
001977,001311: 7525 37653 CAF ZERO # DIVIDE ROUTINES IN BANK 0.
001978,001312: 7526 54004 TS FBANK
001979,001313: 7527 12332 TCF DDV/BDDV
001980,001314:
001981,001315: 7530 30102 SETPD CA ADDRWD # ANYWHERE IN ERASABLE IN GENERAL, BUT
001982,001316: 7531 54152 TS PUSHLOC # ALMOST ALWAYS IN THE WORK AREA.
001983,001317: 7532 16014 TCF DANZIG
001984,001318:
001985,001319: 7533 37653 TSLC CAF ZERO # SHIFTING ROUTINES LOCATED IN BANK 00.
001986,001320: 7534 54004 TS FBANK
001987,001321: 7535 12153 TCF TSLC2
001988,001322:
001989,001323: 7536 36027 GSHIFT CAF LOW7 # USED AS MASK AT GENSHIFT. THIS PROCESSES
001990,001324: 7537 54004 TS FBANK # ANY SHIFT INSTRUCTION (EXCEPT TSLC) WITH
001991,001325: 7540 12174 TCF GENSHIFT # AN ADDRESS (ROUTINES IN BANK 0).
001992,001326:
Page 56 |
001994,001328: # THE FOLLOWING IS THE PROLOGUE TO V/SC. IF THE PRESENT MODE IS VECTOR, IT SAVES THE SCALAR AT X IN BUF
001995,001329: # AND CALLS THE V/SC ROUTINE IN BANK 0. IF THE PRESENT MODE IS SCALAR, IT MOVES THE VECTOR AT X INTO MPAC, SAVING
001996,001330: # THE SCALAR IN MPAC IN BUF BEFORE CALLING THE V/SC ROUTINE IN BANK 0.
001997,001331:
001998,001332:
001999,001333:
002000,001334: 7541 10147 V/SC CCS MODE
002001,001335: 7542 17553 TCF DV/SC # MOVE VECTOR INTO MPAC.
002002,001336: 7543 17553 TCF DV/SC
002003,001337:
002004,001338: 7544 00006 VV/SC EXTEND
002005,001339: 7545 50102 INDEX ADDRWD
002006,001340: 7546 30001 DCA 0
002007,001341: 7547 52115 V/SC1 DXCH BUF # IN BOTH CASES, VECTOR IS NOW IN MPAC AND
002008,001342: 7550 37653 CAF ZERO # SCALAR IN BUF.
002009,001343: 7551 54004 TS FBANK
002010,001344: 7552 12576 TCF V/SC2
002011,001345:
002012,001346: 7553 00006 DV/SC EXTEND
002013,001347: 7554 50102 INDEX ADDRWD
002014,001348: 7555 30003 DCA 2
002015,001349: 7556 52144 DXCH MPAC +3
002016,001350: 7557 00006 EXTEND
002017,001351: 7560 50102 INDEX ADDRWD
002018,001352: 7561 30005 DCA 4
002019,001353: 7562 52146 DXCH MPAC +5
002020,001354:
002021,001355: 7563 47646 CS ONE # CHANGE MODE TO VECTOR.
002022,001356: 7564 54147 TS MODE
002023,001357:
002024,001358: 7565 00006 EXTEND
002025,001359: 7566 50102 INDEX ADDRWD
002026,001360: 7567 30001 DCA 0
002027,001361: 7570 52141 DXCH MPAC
002028,001362: 7571 17547 TCF V/SC1 # FINISH PROLOGUE AT COMMON SECTION.
002029,001363:
Page 57 |
002031,001365: # SIGN AND COMPLEMENT INSTRUCTIONS.
002032,001366:
002033,001367: 7572 50102 SIGN INDEX ADDRWD # CALL COMP INSTRUCTION IF WORD AT X IS
002034,001368: 7573 10000 CCS 0 # NEGATIVE NON-ZERO.
002035,001369: 7574 16014 TCF DANZIG
002036,001370: 7575 17577 TCF +2
002037,001371: 7576 17605 TCF COMP # DO THE COMPLEMENT.
002038,001372:
002039,001373: 7577 50102 INDEX ADDRWD
002040,001374: 7600 10001 CCS 1
002041,001375: 7601 16014 TCF DANZIG
002042,001376: 7602 16014 TCF DANZIG
002043,001377: 7603 17605 TCF COMP
002044,001378: 7604 16014 TCF DANZIG
002045,001379:
002046,001380:
002047,001381:
002048,001382: 7605 00006 COMP EXTEND # COMPLEMENT DP MPAC IN EVERY CASE.
002049,001383: 7606 40141 DCS MPAC
002050,001384: 7607 52141 DXCH MPAC
002051,001385:
002052,001386: 7610 10147 CCS MODE # EITHER COMPLEMENT MPAC +3 OR THE REST OF
002053,001387: 7611 17622 TCF DCOMP # THE VECTOR ACCUMULATOR.
002054,001388: 7612 17622 TCF DCOMP
002055,001389:
002056,001390: 7613 00006 EXTEND # VECTOR COMPLEMENT.
002057,001391: 7614 40144 DCS MPAC +3
002058,001392: 7615 52144 DXCH MPAC +3
002059,001393: 7616 00006 EXTEND
002060,001394: 7617 40146 DCS MPAC +5
002061,001395: 7620 52146 DXCH MPAC +5
002062,001396: 7621 16014 TCF DANZIG
002063,001397:
002064,001398: 7622 40142 DCOMP CS MPAC +2
002065,001399: 7623 54142 TS MPAC +2
002066,001400: 7624 16014 TCF DANZIG
002067,001401:
Page 58 |
002069,001403: # CONSTANTS REQUIRED IN FIXED-FIXED.
002070,001404:
002071,001405: 7625 37777 DPOSMAX OCT 37777
002072,001406: 7626 37777 POSMAX OCT 37777
002073,001407: 7627 57777 NEG1/2 OCT -20000 # MUST BE TWO LOCATIONS AHEAD OF POS1/2.
002074,001408:
002075,001409: 7630 40000 BIT15 OCT 40000 # BIT TABLE FOLLOWS.
002076,001410: 7631 20000 BIT14 OCT 20000
002077,001411: 7632 10000 BIT13 OCT 10000
002078,001412: 7633 04000 BIT12 OCT 04000
002079,001413: 7634 02000 BIT11 OCT 02000
002080,001414: 7635 01000 BIT10 OCT 01000
002081,001415: 7636 00400 BIT9 OCT 00400
002082,001416: 7637 00200 BIT8 OCT 00200
002083,001417: 7640 00100 BIT7 OCT 00100
002084,001418: 7641 00040 BIT6 OCT 00040
002085,001419: 7642 00020 BIT5 OCT 00020
002086,001420: 7643 00010 BIT4 OCT 00010
002087,001421: 7644 00004 BIT3 OCT 00004
002088,001422: 7645 00002 BIT2 OCT 00002
002089,001423: 7646 00001 BIT1 OCT 00001
002090,001424:
002091,001425: 7647 7630 NEGMAX EQUALS BIT15
002092,001426: 7647 7631 HALF EQUALS BIT14
002093,001427: 7647 7631 POS1/2 EQUALS HALF
002094,001428: 7647 7632 QUARTER EQUALS BIT13
002095,001429: 7647 7634 2K EQUALS BIT11
002096,001430: 7647 00013 ELEVEN DEC 11 B-14
002097,001431: 7650 7647 NOUTCON = ELEVEN
002098,001432: 7650 00012 TEN DEC 10 B-14
002099,001433: 7651 00011 NINE DEC 9 B-14
002100,001434: 7652 7643 EIGHT EQUALS BIT4
002101,001435: 7652 00007 SEVEN OCT 7
002102,001436: 7653 6162 SIX EQUALS REVCNT
002103,001437: 7653 7644 FOUR EQUALS BIT3
002104,001438: 7653 6165 THREE EQUALS NO.WDS +1
002105,001439: 7653 7645 TWO EQUALS BIT2
002106,001440: 7653 7646 ONE EQUALS BIT1
002107,001441: 7653 00000 ZERO OCT 0
002108,001442: 7654 77777 NEG0 OCT 77777
002109,001443: 7655 77776 NEGONE DEC -1 B-14
002110,001444:
002111,001445: 7656 7655 NEG1 = NEGONE
002112,001446: 7656 77775 NEG2 OCT 77775
002113,001447: 7657 7652 LOW3 EQUALS SEVEN
002114,001448: 7657 6165 LOW2 EQUALS THREE
002115,001449:
002116,001450: 7657 00031 CALLCODE OCT 00031
002117,001451: 7660 40014 DLOADCOD OCT 40014
002118,001452: 7661 7630 VLOADCOD EQUALS BIT15
Page 59 |
002120,001454: 7661 40015 DLOAD* OCT 40015
002121,001455: 7662 6042 VLOAD* EQUALS OCT40001
002122,001456: 7662 00106 LVBUF ADRES VBUF
002123,001457:
Page 60 |
002125,001459: # SHIFTING AND ROUNDING PACKAGE.
002126,001460:
002127,001461: # THE FOLLOWING SHORT SHIFT CODES REQUIRE NO ADDRESS WORD:
002128,001462:
002129,001463: # 1. SR1 TO SR4 SCALAR SHIFT RIGHT.
002130,001464: # 2. SR1R TO SR4R SCALAR SHIFT RIGHT AND ROUND.
002131,001465: # 3. SL1 TO SL4 SCALAR SHIFT LEFT.
002132,001466: # 4. SL1R TO SL4R SCALAR SHIFT LEFT AND ROUND.
002133,001467:
002134,001468: # 5. VSR1 TO VSR8 VECTOR SHIFT RIGHT (ALWAYS ROUNDS).
002135,001469: # 6. VSL1 TO VSL8 VECTOR SHIFT LEFT (NEVER ROUNDS).
002136,001470:
002137,001471: # THE FOLLOWING CODES REQUIRE AN ADDRESS WHICH MAY BE INDEXED:*
002138,001472:
002139,001473: # 1. SR SCALAR SHIFT RIGHT.
002140,001474: # 2. SRR SCALAR SHIFT RIGHT AND ROUND.
002141,001475: # 3. SL SCALAR SHIFT LEFT.
002142,001476: # 4. SLR SCALAR SHIFT LEFT AND ROUND.
002143,001477:
002144,001478: # 5. VSR VECTOR SHIFT RIGHT.
002145,001479: # 6. VSL VECTOR SHIFT LEFT.
002146,001480:
002147,001481: # * IF THE ADDRESS IS INDEXED, AND THE INDEX MODIFICATION RESULTS IN A NEGATIVE SHIFT COUNT, A SHIFT OF THE
002148,001482: # ABSOLUTE VALUE OF THE COUNT IS DONE IN THE OPPOSITE DIRECTION.
002149,001483:
002150,001484:
002151,001485:
002152,001486: 00,2000 SETLOC 10000 # BANK 0 PORTION FOLLOWS.
002153,001487:
002154,001488: 00,2000 36162 SHORTT CAF SIX # SCALAR SHORT SHIFTS COME HERE. THE SHIFT
002155,001489: 00,2001 70020 MASK CYR # COUNT-1 IS NOW IN BITS 2-3 OF CYR. THE
002156,001490: 00,2002 54021 TS SR # ROUNDING BIT IS IN BIT1 AT THIS POINT.
002157,001491:
002158,001492: 00,2003 10020 CCS CYR # SEE IF RIGHT OR LEFT SHIFT DESIRED.
002159,001493: 00,2004 12062 TCF TSSL # SHIFT LEFT.
002160,001494:
002161,001495: 00,2005 00024 SRDDV DEC 20 B-14 # MPTEMP SETTING FOR SR BEFORE DDV.
002162,001496:
002163,001497: 00,2006 50021 TSSR INDEX SR # GET SHIFTING BIT.
002164,001498: 00,2007 37631 CAF BIT14
002165,001499: 00,2010 54121 TS MPTEMP
002166,001500:
002167,001501: 00,2011 10020 CCS CYR # SEE IF A ROUND IS DESIRED.
002168,001502: 00,2012 02031 RIGHTR TC MPACSRND # YES - SHIFT RIGHT AND ROUND.
002169,001503: 00,2013 16014 TCF DANZIG
002170,001504:
Page 61 |
002172,001506: 00,2014 30121 MPACSHR CA MPTEMP # DO A TRIPLE PRECISION SHIFT RIGHT.
002173,001507: 00,2015 00006 EXTEND
002174,001508: 00,2016 70142 MP MPAC +2
002175,001509: 00,2017 54142 +3 TS MPAC +2 # (EXIT FROM SQRT AND ABVAL).
002176,001510: 00,2020 30121 CA MPTEMP
002177,001511: 00,2021 00006 EXTEND
002178,001512: 00,2022 70140 MP MPAC # SHIFT MAJOR PART INTO A,L AND PLACE IN
002179,001513: 00,2023 52141 DXCH MPAC # MPAC,+1.
002180,001514: 00,2024 30121 CA MPTEMP
002181,001515: 00,2025 00006 EXTEND
002182,001516: 00,2026 70001 MP L # ORIGINAL C(MPAC +1).
002183,001517: 00,2027 20142 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
002184,001518: 00,2030 16014 TCF DANZIG
002185,001519:
002186,001520: # MPAC SHIFT RIGHT AND ROUND SUBROUTINES.
002187,001521:
002188,001522: 00,2031 30142 MPACSRND CA MPAC +2 # WE HAVE TO DO ALL THREE MULTIPLIES SINCE
002189,001523: 00,2032 00006 EXTEND # MPAC +1 AND MPAC +2 MIGHT HAVE SIGN
002190,001524: 00,2033 70121 MP MPTEMP # DISAGREEMENT WITH A SHIFT RIGHT OF 1.
002191,001525: 00,2034 56141 XCH MPAC +1
002192,001526: 00,2035 00006 EXTEND
002193,001527: 00,2036 70121 MP MPTEMP
002194,001528: 00,2037 56141 XCH MPAC +1 # TRIAL MINOR PART.
002195,001529: 00,2040 60001 AD L
002196,001530:
002197,001531: 00,2041 60000 VSHR2 DOUBLE # (FINISH VECTOR COMPONENT SHIFT RIGHT
002198,001532: 00,2042 54142 TS MPAC +2 # AND ROUND.
002199,001533: 00,2043 12045 TCF +2
002200,001534: 00,2044 26141 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
002201,001535:
002202,001536: 00,2045 37653 CAF ZERO
002203,001537: 00,2046 54142 TS MPAC +2
002204,001538: 00,2047 56140 XCH MPAC # SETTING TO ZERO SO FOLLOWING DAS WORKS.
002205,001539: 00,2050 00006 EXTEND
002206,001540: 00,2051 70121 MP MPTEMP
002207,001541: 00,2052 20141 DAS MPAC # AGAIN NO OVERFLOW.
002208,001542: 00,2053 00002 TC Q
002209,001543:
002210,001544: 00,2054 30121 VSHRRND CA MPTEMP # ENTRY TO SHIFT RIGHT AND ROUND MPAC WHEN
002211,001545: 00,2055 00006 EXTEND # MPAC CONTAINS A VECTOR COMPONENT.
002212,001546: 00,2056 70141 MP MPAC +1
002213,001547: 00,2057 54141 TS MPAC +1
002214,001548: 00,2060 56001 XCH L
002215,001549: 00,2061 12041 TCF VSHR2 # GO ADD ONE IF NECESSARY AND FINISH.
002216,001550:
Page 62 |
002218,001552: # ROUTINE FOR SHORT SCALAR SHIFT LEFT (AND MAYBE ROUND).
002219,001553:
002220,001554: 00,2062 30021 TSSL CA SR # GET SHIFT COUNT FOR SR.
002221,001555: 00,2063 54121 +1 TS MPTEMP
002222,001556:
002223,001557: 00,2064 00006 +2 EXTEND # ENTRY HERE FROM SL FOR SCALARS.
002224,001558: 00,2065 30142 DCA MPAC +1 # SHIFTING LEFT ONE PLACE AT A TIME IS
002225,001559: 00,2066 20142 DAS MPAC +1 # FASTER THAN DOING THE WHOLE SHIFT WITH
002226,001560: 00,2067 60140 AD MPAC # MULTIPLIES ASSUMING THAT FREQUENCY OF
002227,001561: 00,2070 60140 AD MPAC # SHIFT COUNTS GOES DOWN RAPIDLY AS A
002228,001562: 00,2071 54140 TS MPAC # FUNCTION OF THEIR MAGNITUDE.
002229,001563: 00,2072 12074 TCF +2
002230,001564: 00,2073 54105 TS OVFIND # OVERFLOW. (LEAVES OVERFLOW-CORRECTED
002231,001565: # RESULT ANYWAY).
002232,001566: 00,2074 10121 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNT.
002233,001567: 00,2075 12063 TCF TSSL +1
002234,001568:
002235,001569: 00,2076 10020 CCS CYR # SEE IF ROUND WANTED.
002236,001570: 00,2077 07115 TC ROUNDSUB # YES - ROUND AND EXIT.
002237,001571: 00,2100 16014 TCF DANZIG # SL LEAVES A ZERO IN CYR FOR NO ROUND.
002238,001572: 00,2101 16014 TCF DANZIG # NO - EXIT IMMEDIATL
002239,001573:
Page 63 |
002241,001575: # VECTOR SHIFTING ROUTINES.
002242,001576:
002243,001577: 00,2102 37652 SHORTV CAF LOW3 # SAVE 3 BIT SHIFT COUNT - 1 WITHOUT
002244,001578: 00,2103 70020 MASK CYR # EDITING CYR.
002245,001579: 00,2104 54121 TS MPTEMP
002246,001580: 00,2105 10020 CCS CYR # SEE IF LEFT OR RIGHT SHIFT.
002247,001581: 00,2106 12126 TCF VSSL # VECTOR SHIFT LEFT.
002248,001582: 00,2107 00176 OCT176 OCT 176 # USED IN PROCESSED SHIFTS WITH - COUNT.
002249,001583:
002250,001584: 00,2110 50121 VSSR INDEX MPTEMP # (ENTRY FROM SR). PICK UP SHIFTING BIT.
002251,001585: 00,2111 37631 CAF BIT14 # MPTEMP CONTAINS THE SHIFT COUNT - 1.
002252,001586: 00,2112 54121 TS MPTEMP
002253,001587: 00,2113 02054 TC VSHRRND # SHIFT X COMPONENT.
002254,001588:
002255,001589: 00,2114 52141 DXCH MPAC # SWAP X AND Y COMPONENTS.
002256,001590: 00,2115 52144 DXCH MPAC +3
002257,001591: 00,2116 52141 DXCH MPAC
002258,001592: 00,2117 02054 TC VSHRRND # SHIFT Y COMPONENT.
002259,001593:
002260,001594: 00,2120 52141 DXCH MPAC # SWAP Y AND Z COMPONENTS.
002261,001595: 00,2121 52146 DXCH MPAC +5
002262,001596: 00,2122 52141 DXCH MPAC
002263,001597: 00,2123 02054 TC VSHRRND # SHIFT Z COMPONENT.
002264,001598:
002265,001599: 00,2124 17364 TCF VROTATEX # RESTORE COMPONENTS TO PROPER PLACES.
002266,001600:
Page 64 |
002268,001602: # VECTOR SHIFT LEFT - DONE ONE PLACE AT A TIME.
002269,001603:
002270,001604: 00,2125 54121 -1 TS MPTEMP # SHIFTING LOOP.
002271,001605:
002272,001606: 00,2126 00006 VSSL EXTEND
002273,001607: 00,2127 30141 DCA MPAC
002274,001608: 00,2130 20141 DAS MPAC
002275,001609: 00,2131 00006 EXTEND
002276,001610: 00,2132 12134 BZF +2
002277,001611: 00,2133 07006 TC OVERFLOW
002278,001612:
002279,001613: 00,2134 00006 EXTEND
002280,001614: 00,2135 30144 DCA MPAC +3
002281,001615: 00,2136 20144 DAS MPAC +3
002282,001616: 00,2137 00006 EXTEND
002283,001617: 00,2140 12142 BZF +2
002284,001618: 00,2141 07006 TC OVERFLOW
002285,001619:
002286,001620: 00,2142 00006 EXTEND
002287,001621: 00,2143 30146 DCA MPAC +5
002288,001622: 00,2144 20146 DAS MPAC +5
002289,001623: 00,2145 00006 EXTEND
002290,001624: 00,2146 12150 BZF +2
002291,001625: 00,2147 07006 TC OVERFLOW
002292,001626:
002293,001627: 00,2150 10121 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNTER.
002294,001628: 00,2151 12125 TCF VSSL -1
002295,001629: 00,2152 16014 TCF DANZIG # EXIT.
002296,001630:
Page 65 |
002298,001632: # TSLC - TRIPLE SHIFT LEFT AND COUNT. SHIFTS MPAC LEFT UNTIL GREATER THAN .5 IN MAGNITUDE, LEAVING
002299,001633: # THE COMPLEMENT OF THE NUMBER OF SHIFTS REQUIRED IN X.
002300,001634:
002301,001635: 00,2153 54121 TSLC2 TS MPTEMP # START BY ZEROING SHIFT COUNT (IN A NOW).
002302,001636: 00,2154 06710 TC BRANCH # EXIT WITH NO SHIFTING IF ARGUMENT ZERO.
002303,001637: 00,2155 12157 TCF +2
002304,001638: 00,2156 12172 TCF ENDTSLC # STORES ZERO SHIFT COUNT IN THIS CASE.
002305,001639:
002306,001640: 00,2157 30140 CA MPAC # BEGIN NORMALIZATION LOOP.
002307,001641: 00,2160 12167 TCF TSLCTEST
002308,001642:
002309,001643: 00,2161 24121 TSLCLOOP INCR MPTEMP # INCREMENT SHIFT COUNTER.
002310,001644: 00,2162 00006 EXTEND
002311,001645: 00,2163 30142 DCA MPAC +1
002312,001646: 00,2164 20142 DAS MPAC +1
002313,001647: 00,2165 60140 AD MPAC
002314,001648: 00,2166 26140 ADS MPAC
002315,001649: 00,2167 60000 TSLCTEST DOUBLE # SEE IF (ANOTHER) SHIFT IS REQUIRED.
002316,001650: 00,2170 54000 OVSK
002317,001651: 00,2171 12161 TCF TSLCLOOP # YES - INCREMENT COUNT AND SHIFT AGAIN.
002318,001652:
002319,001653: 00,2172 40121 ENDTSLC CS MPTEMP
002320,001654: 00,2173 16626 TCF STORE1 # STORE SHIFT COUNT AND RETURN TO DANZIG.
002321,001655:
Page 66 |
002323,001657: # THE FOLLOWING ROUTINES PROCESSES THE GENERAL SHIFT INSTRUCTIONS SR, SRR, SL, AND SLR.
002324,001658: # THE GIVEN ADDRESS IS DECODED AS FOLLOWS:
002325,001659:
002326,001660: # BITS 1-7 SHIFT COUNT (SUBADDRESS) LESS THAN 125 DECIMAL.
002327,001661: # BIT 8 PSEUDO SIGN BIT (DETECTS CHANGE IN SIGN IN INDEXED SHIFTS).
002328,001662: # BIT 9 0 FOR LEFT SHIFT, AND 1 FOR RIGHT SHIFT.
002329,001663: # BIT 10 1 FOR TERMINAL ROUND ON SCALAR SHIFTS, 0 OTHERWISE.
002330,001664: # BITS 11-15 0.
002331,001665:
002332,001666: # THE ABOVE ENCODING IS DONE BY THE YUL SYSTEM.
002333,001667:
002334,001668:
002335,001669:
002336,001670: 00,2174 70102 GENSHIFT MASK ADDRWD # GET SHIFT COUNT, TESTING FOR ZERO.
002337,001671: 00,2175 10000 CCS A # (ARRIVES WITH C(A) = LOW7).
002338,001672: 00,2176 12204 TCF GENSHFT2 # IF NON-ZERO, PROCEED WITH DECREMENTED CT
002339,001673:
002340,001674: 00,2177 37635 CAF BIT10 # ZERO SHIFT COUNT. NO SHIFTS NEEDED BUT
002341,001675: 00,2200 70102 MASK ADDRWD # WE MIGHT HAVE TO ROUND MPAC ON SLR AND
002342,001676: 00,2201 10000 CCS A # SRR (SCALAR ONLY).
002343,001677: 00,2202 07115 TC ROUNDSUB
002344,001678: 00,2203 16014 TCF DANZIG
002345,001679:
002346,001680: 00,2204 54121 GENSHFT2 TS MPTEMP # DECREMENTED SHIFT COUNT TO MPTEMP.
002347,001681: 00,2205 37637 CAF BIT8 # TEST MEANING OF LOW SEVEN BIT COUNT IN
002348,001682: 00,2206 00006 EXTEND # MPTEMP NOW.
002349,001683: 00,2207 70102 MP ADDRWD
002350,001684: 00,2210 76165 MASK LOW2 # JUMPS ON SHIFT DIRECTION (BIT8) AND
002351,001685: 00,2211 50000 INDEX A
002352,001686: 00,2212 12213 TCF +1 # ORIGINAL SHIFT DIRECTION (BIT 9).
002353,001687: 00,2213 12312 TCF RIGHT- # NEGATIVE SHIFT COUNT FOR SL OR SLR.
002354,001688: 00,2214 12321 TCF LEFT # SL OR SLR.
002355,001689: 00,2215 12316 TCF LEFT- # NEGATIVE SHIFT COUNT WITH SR OR SRR.
002356,001690:
Page 67 |
002358,001692: # GENERAL SHIFT RIGHT.
002359,001693:
002360,001694: 00,2216 10147 RIGHT CCS MODE # SEE IF VECTOR OR SCALAR.
002361,001695: 00,2217 12257 TCF GENSCR
002362,001696: 00,2220 12257 TCF GENSCR
002363,001697:
002364,001698: 00,2221 30121 CA MPTEMP # SEE IF SHIFT COUNT GREATER THAN 13D.
002365,001699: 00,2222 62273 VRIGHT2 AD NEG12
002366,001700: 00,2223 00006 EXTEND
002367,001701: 00,2224 62110 BZMF VSSR # IF SO, BRANCH AND SHIFT IMMEDIATELY.
002368,001702:
002369,001703: 00,2225 67655 AD NEGONE # IF NOT, REDUCE MPTEMP BY A TOTAL OF 14,
002370,001704: 00,2226 54121 TS MPTEMP # AND DO A SHIFT RIGHT AND ROUND BY 14.
002371,001705: 00,2227 37653 CAF ZERO # THE ROUND AT THIS STAGE MAY INTRODUCE A
002372,001706: 00,2230 54001 TS L # ONE BIT ERROR IN A SHIFT RIGHT 15D.
002373,001707: 00,2231 56140 XCH MPAC
002374,001708: 00,2232 56141 XCH MPAC +1
002375,001709: 00,2233 02252 TC SETROUND # X COMPONENT NOW SHIFTED, SO MAKE UP THE
002376,001710: 00,2234 20141 DAS MPAC # ROUNDING QUANTITY (0 IN A AND 0 OR +-1
002377,001711: # IN L).
002378,001712: 00,2235 56143 XCH MPAC +3 # REPEAT THE ABOVE PROCESS FOR Y AND Z.
002379,001713: 00,2236 56144 XCH MPAC +4
002380,001714: 00,2237 02252 TC SETROUND
002381,001715: 00,2240 20144 DAS MPAC +3 # NO OVERFLOW ON THESE ADDS.
002382,001716:
002383,001717: 00,2241 56145 XCH MPAC +5
002384,001718: 00,2242 56146 XCH MPAC +6
002385,001719: 00,2243 02252 TC SETROUND
002386,001720: 00,2244 20146 DAS MPAC +5
002387,001721:
002388,001722: 00,2245 10121 CCS MPTEMP # SEE IF DONE, DOING FINAL DECREMENT.
002389,001723: 00,2246 12222 TCF VRIGHT2
002390,001724: 00,2247 13614 TCSUBTR TCF SUBTR
002391,001725: 00,2250 04604 BIASLO DEC .2974 B-1 # SQRT CONSTANT
002392,001726:
002393,001727: 00,2251 16014 TCF DANZIG
002394,001728:
002395,001729:
002396,001730:
002397,001731: 00,2252 60000 SETROUND DOUBLE # MAKES UP ROUNDING QUANTITY FROM ARRIVING
002398,001732: 00,2253 54142 TS MPAC +2 # C(A). L IS ZERO INITIALLY.
002399,001733: 00,2254 37653 CAF ZERO
002400,001734: 00,2255 56001 XCH L
002401,001735: 00,2256 00002 TC Q # RETURN AND DO THE DAS, RESETTING L TO 0.
002402,001736:
Page 68 |
002404,001738: # PROCESS SR AND SRR FOR SCALARS.
002405,001739:
002406,001740: 00,2257 30121 GENSCR CA MPTEMP # SEE IF THE ORIGINAL SHIFT COUNT WAS LESS
002407,001741: 00,2260 62273 +1 AD NEG12 # THAN 14D.
002408,001742: 00,2261 00006 EXTEND
002409,001743: 00,2262 62302 BZMF DOSSHFT # DO THE SHIFT IMMEDIATELY IF SO.
002410,001744:
002411,001745: 00,2263 67655 +4 AD NEGONE # IF NOT, DECREMENT SHIFT COUNT BY 14D AND
002412,001746: 00,2264 54121 TS MPTEMP # SHIFT MPAC RIGHT 14 PLACES.
002413,001747: 00,2265 37653 CAF ZERO
002414,001748: 00,2266 56140 XCH MPAC
002415,001749: 00,2267 56141 XCH MPAC +1
002416,001750: 00,2270 54142 TS MPAC +2
002417,001751: 00,2271 10121 CCS MPTEMP # SEE IF FINISHED, DO FINAL DECREMENT.
002418,001752: 00,2272 02260 TC GENSCR +1
002419,001753: 00,2273 77763 NEG12 DEC -12 B-14
002420,001754: 00,2274 22650 SLOPEHI DEC .5884 # SQRT CONSTANT.
002421,001755: 00,2275 37635 CAF BIT10 # FINISHED WITH SHIFT. SEE IF ROUND
002422,001756: 00,2276 70102 MASK ADDRWD # WANTED.
002423,001757: 00,2277 10000 CCS A
002424,001758: 00,2300 07115 TC ROUNDSUB
002425,001759: 00,2301 16014 TCF DANZIG # DO SO AND/OR EXIT.
002426,001760:
002427,001761: 00,2302 50121 DOSSHFT INDEX MPTEMP # PICK UP SHIFTING BIT.
002428,001762: 00,2303 37631 CAF BIT14
002429,001763: 00,2304 54121 TS MPTEMP
002430,001764: 00,2305 37635 CAF BIT10 # SEE IF TERMINAL ROUND DESIRED.
002431,001765: 00,2306 70102 MASK ADDRWD
002432,001766: 00,2307 10000 CCS A
002433,001767: 00,2310 12012 TCF RIGHTR # YES.
002434,001768: 00,2311 12014 TCF MPACSHR # JUST SHIFT RIGHT.
002435,001769:
Page 69 |
002437,001771: # PROCESS THE RIGHT- (SL(R) WITH A NEGATIVE COUNT), LEFT-, AND LEFT OPTIONS.
002438,001772:
002439,001773: 00,2312 40121 RIGHT- CS MPTEMP # GET ABSOLUTE VALUE - 1 OF SHIFT COUNT
002440,001774: 00,2313 62107 AD OCT176 # UNDERSTANDING THAT BIT8 (PSEUDO-SIGN)
002441,001775: 00,2314 54121 TS MPTEMP # WAS 1 INITIALLY.
002442,001776: 00,2315 12216 TCF RIGHT # DO NORMAL SHIFT RIGHT.
002443,001777:
002444,001778: 00,2316 40121 LEFT- CS MPTEMP # SAME PROLOGUE TO LEFT FOR INDEXED RIGHT
002445,001779: 00,2317 62107 AD OCT176 # SHIFTS WHOSE NET SHIFT COUNT IS NEGATIVE
002446,001780: 00,2320 54121 TS MPTEMP
002447,001781:
002448,001782: 00,2321 10147 LEFT CCS MODE # SINCE LEFT SHIFTING IS SONE ONE PLACE AT
002449,001783: 00,2322 12325 TCF GENSCL # A TIME, NO COMPARISON WITH 14 NEED BE
002450,001784: 00,2323 12325 TCF GENSCL # DONE. FOR SCALARS, SEE IF TERMINAL ROUND
002451,001785: 00,2324 12126 TCF VSSL # DESIRED. FOR VECTORS, SHIFT IMMEDIATELY.
002452,001786:
002453,001787: 00,2325 37641 GENSCL CAF BIT6 # PUT ROUNDING BIT (BIT10 OF ADDRWD) INTO
002454,001788: 00,2326 00006 EXTEND # BIT 15 OF CYR WHERE THE ROUNDING BIT OF
002455,001789: 00,2327 70102 MP ADDRWD # A SHORT SHIFT LEFT WOULD BE.
002456,001790: 00,2330 54020 TS CYR
002457,001791: 00,2331 12064 TCF TSSL +2 # DO THE SHIFT.
002458,001792:
Page 70 |
002460,001794: # SCALAR DIVISION INSTRUCTIONS, DDV AND BDDV, ARE EXECUTED HERE. AT THIS POINT, THE DIVIDEND IS IN MPAC
002461,001795: # AND THE DIVISOR IN BUF.
002462,001796:
002463,001797: 00,2332 47646 DDV/BDDV CS ONE # INITIALIZATION.
002464,001798: 00,2333 54122 TS DVSIGN # +-1 FOR POSITIVE QUOTIENT - -0 FOR NEG.
002465,001799: 00,2334 54123 TS DVNORMCT # DIVIDEND NORMALIZATION COUNT.
002466,001800: 00,2335 54124 TS MAXDVSW # NEAR-ONE DIVIDE FLAG.
002467,001801:
002468,001802: 00,2336 10114 CCS BUF # FORCE BUF POSITIVE WITH THE MAJOR PART
002469,001803: 00,2337 12366 TCF BUF+ # NON-ZERO.
002470,001804: 00,2340 12342 TCF +2
002471,001805: 00,2341 12362 TCF BUF-
002472,001806:
002473,001807: 00,2342 56115 XCH BUF +1 # SHIFT DIVIDEND AND DIVISOR LEFT 14.
002474,001808: 00,2343 56114 XCH BUF
002475,001809: 00,2344 56141 XCH MPAC +1
002476,001810: 00,2345 56140 XCH MPAC
002477,001811: 00,2346 00006 EXTEND # CHECK FOR OVERFLOW.
002478,001812: 00,2347 12351 BZF +2
002479,001813: 00,2350 12355 TCF DVOVF
002480,001814:
002481,001815: 00,2351 10114 CCS BUF # TRY AGAIN ON FORMER MINOR PART.
002482,001816: 00,2352 12366 TCF BUF+
002483,001817: 00,2353 12355 TCF DVOVF # OVERFLOW ON ZERO DIVISOR.
002484,001818: 00,2354 12362 TCF BUF-
002485,001819:
002486,001820: 00,2355 37626 DVOVF CAF POSMAX # ON DIVISION OVERFLOW OF ANY SORT, SET
002487,001821: 00,2356 54140 TS MPAC # SET DP MPAC TO +-POSMAX.
002488,001822: 00,2357 02552 TC FINALDV +3
002489,001823: 00,2360 37646 CAF ONE # SET OVERFLOW INDICATOR AND EXIT.
002490,001824: 00,2361 17060 TCF SETOVF
002491,001825:
002492,001826: 00,2362 00006 BUF- EXTEND # IF BUF IS NEGATIVE, COMPLEMENT IT AND
002493,001827: 00,2363 40115 DCS BUF # MAINTAIN DVSIGN FOR FINAL QUOTIENT SIGN.
002494,001828: 00,2364 52115 DXCH BUF
002495,001829: 00,2365 24122 INCR DVSIGN # NOW -0.
002496,001830:
002497,001831: 00,2366 10140 BUF+ CCS MPAC # FORCE MPAC POSITIVE, CHECKING FOR ZERO
002498,001832: 00,2367 12403 TCF MPAC+ # DIVIDEND IN THE PROCESS.
002499,001833: 00,2370 12372 TCF +2
002500,001834: 00,2371 12377 TCF MPAC-
002501,001835: 00,2372 10141 CCS MPAC +1
002502,001836: 00,2373 12403 TCF MPAC+
002503,001837: 00,2374 16014 TCF DANZIG # EXIT IMMEDIATELY ON ZERO DIVIDEND.
002504,001838: 00,2375 12377 TCF MPAC-
002505,001839: 00,2376 16014 TCF DANZIG
002506,001840:
002507,001841: 00,2377 00006 MPAC- EXTEND # FORCE MPAC POSITIVE AS BUF IN BUF-.
002508,001842: 00,2400 40141 DCS MPAC
002509,001843: 00,2401 52141 DXCH MPAC
002510,001844:
Page 71 |
002512,001846: 00,2402 24122 INCR DVSIGN # NOW +1 OR -0.
002513,001847:
Page 72 |
002515,001849: 00,2403 40140 MPAC+ CS MPAC # CHECK FOR DIVISION OVERFLOW. IF THE
002516,001850: 00,2404 67655 AD NEGONE # MAJOR PART OF THE DIVIDEND IS LESS THAN
002517,001851: 00,2405 60114 AD BUF # THE MAJOR PART OF THE DIVISOR BY AT
002518,001852: 00,2406 10000 CCS A # LEAST TWO, WE CAN PROCEED IMMEDIATELY
002519,001853: 00,2407 12451 TCF DVNORM # WITHOUT NORMALIZATION PRODUCING A DVMAX.
002520,001854: 00,2410 60001 -1/2+2 OCT 60001 # USED IN SQRTSUB.
002521,001855:
002522,001856: 00,2411 12412 TCF +1 # IF THE ABOVE DOES NOT HOLD, FORCE SIGN
002523,001857: 00,2412 37631 CAF HALF # AGREEMENT IN NUMERATOR AND DENOMINATOR
002524,001858: 00,2413 60000 DOUBLE # TO FACILITATE OVERFLOW AND NEAR-ONE
002525,001859: 00,2414 60141 AD MPAC +1 # CHECKING.
002526,001860: 00,2415 54141 TS MPAC +1
002527,001861: 00,2416 37653 CAF ZERO
002528,001862: 00,2417 67626 AD POSMAX
002529,001863: 00,2420 26140 ADS MPAC
002530,001864:
002531,001865: 00,2421 37631 CAF HALF # SAME FOR BUF.
002532,001866: 00,2422 60000 DOUBLE
002533,001867: 00,2423 60115 AD BUF +1
002534,001868: 00,2424 54115 TS BUF +1
002535,001869: 00,2425 37653 CAF ZERO
002536,001870: 00,2426 67626 AD POSMAX
002537,001871: 00,2427 26114 ADS BUF
002538,001872:
002539,001873: 00,2430 40140 CS MPAC # CHECK MAGNITUDE OF SIGN-CORRECTED
002540,001874: 00,2431 60114 AD BUF # OPERANDS.
002541,001875: 00,2432 10000 CCS A
002542,001876: 00,2433 12451 TCF DVNORM # DIVIDE OK - WILL NOT BECOME MAXDV CASE.
002543,001877: 00,2434 00117 LBUF2 ADRES BUF2
002544,001878: 00,2435 12355 TCF DVOVF # DIVISOR NOT LESS THAN DIVIDEND - OVF.
002545,001879:
002546,001880: 00,2436 54124 TS MAXDVSW # IF THE MAJOR PARTS OF THE DIVIDEND AND
002547,001881: 00,2437 40141 CS MPAC +1 # DIVISOR ARE EQUAL, A SPECIAL APPROXIMA-
002548,001882: 00,2440 60115 AD BUF +1 # TION IS USED (PROVIDED THE DIVISION IS
002549,001883: 00,2441 00006 EXTEND # POSSIBLE, OF COURSE).
002550,001884: 00,2442 62355 BZMF DVOVF
002551,001885: 00,2443 12451 TCF DVNORM # IF NO OVERFLOW.
002552,001886:
Page 73 |
002554,001888: 00,2444 00006 BUFNORM EXTEND # ADD -1 TO AUGMENT SHIFT COUNT AND SHIFT
002555,001889: 00,2445 24123 AUG DVNORMCT # LEFT ONE PLACE.
002556,001890: 00,2446 00006 EXTEND
002557,001891: 00,2447 30115 DCA BUF
002558,001892: 00,2450 20115 DAS BUF
002559,001893:
002560,001894: 00,2451 30114 DVNORM CA BUF # SEE IF DIVISOR NORMALIZED YET.
002561,001895: 00,2452 60000 DOUBLE
002562,001896: 00,2453 54000 OVSK
002563,001897: 00,2454 12444 TCF BUFNORM # NO - SHIFT LEFT ONE AND TRY AGAIN.
002564,001898:
002565,001899: 00,2455 52141 DXCH MPAC # CALL DIVIDEND NORMALIZATION SEQUENCE
002566,001900: 00,2456 50123 INDEX DVNORMCT # PRIOR TO DOING THE DIVIDE.
002567,001901: 00,2457 02507 TC MAXTEST
002568,001902:
002569,001903: 00,2460 54142 TS MPAC +2 # RETURNS WITH DIVISION DONE AND C(A) = 0.
002570,001904: 00,2461 16014 TCF DANZIG
002571,001905:
Page 74 |
002573,001907: # THE FOLLOWING ARE PROLOGUES TO SHIFT THE DIVIDEND ARRIVING IN A AND L BEFORE THE DIVIDE.
002574,001908:
002575,001909: 00,2462 22021 -21D LXCH SR # SPECIAL PROLOGUE FOR UNIT WHEN THE
002576,001910: 00,2463 00006 EXTEND # LENGTH OF THE ARGUMENT WAS NOT LESS THAN
002577,001911: 00,2464 77631 MP HALF # .5. IN THIS CASE, EACH COMPONENT MUST BE
002578,001912: 00,2465 56001 XCH L # SHIFTED RIGHT ONE TO PRODUCE A HALF-UNIT
002579,001913: 00,2466 60021 AD SR # VECTOR.
002580,001914: 00,2467 56001 XCH L
002581,001915: 00,2470 12513 TCF GENDDV +1 # WITH DP DIVIDEND IN A,L.
002582,001916:
002583,001917: 00,2471 20001 DDOUBL # PROLOGUE WHICH NORMALIZES THE DIVIDEND
002584,001918: 00,2472 20001 DDOUBL # WHEN IT IS KNOWN THAT NO DIVISION
002585,001919: 00,2473 20001 DDOUBL # OVERFLOW WILL OCCUR.
002586,001920: 00,2474 20001 DDOUBL
002587,001921: 00,2475 20001 DDOUBL
002588,001922: 00,2476 20001 DDOUBL
002589,001923: 00,2477 20001 DDOUBL
002590,001924: 00,2500 20001 DDOUBL
002591,001925: 00,2501 20001 DDOUBL
002592,001926: 00,2502 20001 DDOUBL
002593,001927: 00,2503 20001 DDOUBL
002594,001928: 00,2504 20001 DDOUBL
002595,001929: 00,2505 20001 DDOUBL
002596,001930: 00,2506 52141 DXCH MPAC
002597,001931:
002598,001932: 00,2507 10124 MAXTEST CCS MAXDVSW # 0 IF MAJORS MIGHT BE =, -1 OTHERWISE.
002599,001933: 00,2510 06552 BIASHI DEC .4192 B-1 # SQRT CONSTANTS
002600,001934:
002601,001935: 00,2511 12564 TCF MAXDV # CHECK TO SEE IF THEY ARE NOW EQUAL.
002602,001936:
Page 75 |
002604,001938: # THE FOLLOWING IS A GENERAL PURPOSE DOUBLE PRECISION DIVISION ROUTINE. IT DIVIDES MPAC BY BUF AND LEAVES
002605,001939: # THE RESULT IN MPAC. THE FOLLOWING CONDITIONS MUST BE SATISFIED:
002606,001940:
002607,001941: # 1. THE DIVISOR (BUF) MUST BE POSITIVE AND NOT LESS THAN .5.
002608,001942:
002609,001943: # 2. THE DIVIDEND (MPAC) MUST BE POSITIVE WITH THE MAJOR PART OF MPAC STRICTLY LESS THAN THAT OF BUF
002610,001944: # (A SPECIAL APPROXIMATION, MAXDV, IS USED WHEN THE MAJOR PARTS ARE EQUAL).
002611,001945:
002612,001946: # UNDERSTANDING THAT A/B = Q + S(R/B) WHERE S = 2(-14) AND Q AND R ARE QUOTIENT AND REMAINDER, RESPEC-
002613,001947: # TIVELY, THE FOLLOWING APPROXIMATION IS OBTAINED BY MULTIPLYING ABOVE AND BELOW BY C - SD AND NEGLECTING TERMS OF
002614,001948: # ORDER S-SQUARED (POSSIBLY INTRODUCING ERROR INTO THE LOW TWO BITS OF THE RESULT). SIGN AGREEMENT IS UNNECESSARY.
002615,001949:
002616,001950: # A + SB . (R - QD) A + SB
002617,001951: # ------ = Q + S(------) WHERE Q AND R ARE QUOTIENT AND REMAINDER OF ------ RESPECTIVELY.
002618,001952: # C + SD ( C ) C
002619,001953:
002620,001954:
002621,001955:
002622,001956: 00,2512 52141 GENDDV DXCH MPAC # WE NEED A AND B ONLY FOR FIRST DV.
002623,001957: 00,2513 00006 +1 EXTEND # (SPECIAL UNIT PROLOGUE ENTERS HERE).
002624,001958: 00,2514 10114 DV BUF # A NOW CONTAINS Q AND L, R.
002625,001959: 00,2515 52141 DXCH MPAC
002626,001960:
002627,001961: 00,2516 40140 CS MPAC # FORM DIVIDEND FOR MINOR PART OF RESULT.
002628,001962: 00,2517 00006 EXTEND
002629,001963: 00,2520 70115 MP BUF +1
002630,001964: 00,2521 60141 AD MPAC +1 # OVERFLOW AT THIS POINT IS POSITIVE SINCE
002631,001965: 00,2522 54000 OVSK # R IS POSITIVE IN EVERY CASE.
002632,001966: 00,2523 12530 TCF +5
002633,001967:
002634,001968: 00,2524 00006 EXTEND # OVERFLOW CAN BE REMOVED BY SUBTRACTING C
002635,001969: 00,2525 60114 SU BUF # (BUF) ONCE SINCE R IS ALWAYS LESS THAN C
002636,001970: 00,2526 24140 INCR MPAC # IN THIS CASE. INCR COMPENSATES SUBTRACT.
002637,001971: 00,2527 12532 TCF +DOWN # (SINCE C(A) IS STILL POSITIVE).
002638,001972:
002639,001973: 00,2530 00006 +5 EXTEND # C(A) CAN BE MADE LESS THAN C IN MAGNI-
002640,001974: 00,2531 62542 BZMF -UP # TUDE BY DIMINISHING IT BY C (SINCE C IS
002641,001975: # NOT LESS THAN .5) UNLESS C(A) = 0.
002642,001976:
Page 76 |
002644,001978: 00,2532 00006 +DOWN EXTEND
002645,001979: 00,2533 60114 SU BUF # IF POSITIVE, REDUCE ONLY IF NECESSARY
002646,001980: 00,2534 00006 EXTEND # SINCE THE COMPENSATING INCR MIGHT CAUSE
002647,001981: 00,2535 12540 BZF +3 # OVERFLOW.
002648,001982: 00,2536 00006 EXTEND # DONT SUBTRACT UNLESS RESULT IS POSITIVE
002649,001983: 00,2537 62546 BZMF ENDMAXDV # OR ZERO.
002650,001984:
002651,001985: 00,2540 24140 +3 INCR MPAC # KEEP SUBTRACT HERE AND COMPENSATE.
002652,001986: 00,2541 12547 TCF FINALDV
002653,001987:
002654,001988: 00,2542 00006 -UP EXTEND # IF ZERO, SET MINOR PART OF RESULT TO
002655,001989: 00,2543 12552 BZF FINALDV +3 # ZERO.
002656,001990:
002657,001991: 00,2544 00006 EXTEND # IF NEGATIVE, ADD C TO A, SUBTRACTING ONE
002658,001992: 00,2545 26140 DIM MPAC # TO COMPENSATE. DIM IS OK HERE SINCE THE
002659,001993: 00,2546 60114 ENDMAXDV AD BUF # MAJOR PART NEVER GOES NEGATIVE.
002660,001994:
Page 77 |
002662,001996: 00,2547 22007 FINALDV ZL # DO DV TO OBTAIN MINOR PART OF RESULT.
002663,001997: 00,2550 00006 EXTEND
002664,001998: 00,2551 10114 DV BUF
002665,001999: 00,2552 54141 +3 TS MPAC +1
002666,002000:
002667,002001: 00,2553 10122 CCS DVSIGN # LEAVE RESULT POSITIVE UNLESS C(DVSIGN)=
002668,002002: 00,2554 00002 TC Q # -0.
002669,002003: 00,2555 00002 TC Q
002670,002004: 00,2556 00002 TC Q
002671,002005:
002672,002006: 00,2557 00006 EXTEND
002673,002007: 00,2560 40141 DCS MPAC
002674,002008: 00,2561 52141 DXCH MPAC
002675,002009: 00,2562 37653 CAF ZERO # SO WE ALWAYS RETURN WITH C(A) = 0.
002676,002010: 00,2563 00002 TC Q
002677,002011:
Page 78 |
002679,002013: # IF THE MAJOR PARTS OF THE DIVISOR AND DIVIDEND ARE EQUAL, BUT THE MINOR PARTS ARE SUCH THAT THE
002680,002014: # DIVIDEND IS STRICTLY LESS THAN THE DIVISOR IN MAGNITUDE, THE FOLLOWING APPROXIMATION IS USED. THE ASSUMPTIONS
002681,002015: # ARE THE SAME AS THE GENERAL ROUTINE WITH THE ADDITION THAT SIGN AGREEMENT IS NECESSARY (B, C, & D POSITIVE).
002682,002016:
002683,002017: # C + SB . (C + B - D)
002684,002018: # ------ = 37777 + S(---------)
002685,002019: # C + SD ( C )
002686,002020:
002687,002021: # THE DIVISION MAY BE PERFORMED IMMEDIATELY SINCE B IS STRICTLY LESS THAN D AND C IS NOT LESS THAN .5.
002688,002022:
002689,002023:
002690,002024:
002691,002025: 00,2564 40140 MAXDV CS MPAC # SEE IF MAXDV CASE STILL HOLDS AFTER
002692,002026: 00,2565 60114 AD BUF # NORMALIZATION.
002693,002027: 00,2566 00006 EXTEND
002694,002028: 00,2567 12571 BZF +2
002695,002029: 00,2570 12512 TCF GENDDV # MPAC NOW LESS THAN BUF - DIVIDE AS USUAL
002696,002030:
002697,002031: 00,2571 37626 +2 CAF POSMAX # SET MAJOR PART OF RESULT.
002698,002032: 00,2572 54140 TS MPAC
002699,002033:
002700,002034: 00,2573 40115 CS BUF +1 # FORM DIVIDEND OF MINOR PART OF RESULT.
002701,002035: 00,2574 60141 AD MPAC +1
002702,002036: 00,2575 12546 TCF ENDMAXDV # GO ADD C AND DO DIVIDE, ATTACHING SIGN
002703,002037: # BEFORE EXITING.
002704,002038:
Page 79 |
002706,002040: # VECTOR DIVIDED BY SCALAR, V/SC, IS EXECUTED HERE. THE VECTOR IS NOW IN MPAC WITH SCALAR IN BUF.
002707,002041:
002708,002042: 00,2576 47646 V/SC2 CS ONE # INITIALIZE DIVIDEND NORMALIZATION COUNT
002709,002043: 00,2577 54123 TS DVNORMCT # AND DIVISION SIGN REGISTER.
002710,002044: 00,2600 54113 TS VBUF +5
002711,002045:
002712,002046: 00,2601 10114 CCS BUF # FORCE DIVISOR POSITIVE WITH MAJOR PART
002713,002047: 00,2602 12637 TCF /BUF+ # NON-ZERO (IF POSSIBLE).
002714,002048: 00,2603 12605 TCF +2
002715,002049: 00,2604 12633 TCF /BUF-
002716,002050:
002717,002051: 00,2605 56115 XCH BUF +1 # SHIFT VECTOR AND SCALAR LEFT 14.
002718,002052: 00,2606 56114 XCH BUF
002719,002053: 00,2607 56141 XCH MPAC +1
002720,002054: 00,2610 56140 XCH MPAC
002721,002055: 00,2611 00006 EXTEND # CHECK FOR OVERFLOW IN EACH CASE.
002722,002056: 00,2612 12614 BZF +2
002723,002057: 00,2613 12355 TCF DVOVF
002724,002058:
002725,002059: 00,2614 56144 XCH MPAC +4
002726,002060: 00,2615 56143 XCH MPAC +3
002727,002061: 00,2616 00006 EXTEND
002728,002062: 00,2617 12621 BZF +2
002729,002063: 00,2620 12355 TCF DVOVF
002730,002064:
002731,002065: 00,2621 56146 XCH MPAC +6
002732,002066: 00,2622 56145 XCH MPAC +5
002733,002067: 00,2623 00006 EXTEND
002734,002068: 00,2624 12626 BZF +2
002735,002069: 00,2625 12355 TCF DVOVF
002736,002070:
002737,002071: 00,2626 10114 CCS BUF
002738,002072: 00,2627 12637 TCF /BUF+
002739,002073: 00,2630 12355 TCF DVOVF # ZERO DIVISOR - OVERFLOW.
002740,002074: 00,2631 12633 TCF /BUF-
002741,002075: 00,2632 12355 TCF DVOVF
002742,002076:
002743,002077: 00,2633 00006 /BUF- EXTEND # ON NEGATIVE, COMPLEMENT BUF AND MAINTAIN
002744,002078: 00,2634 40115 DCS BUF # DVSIGN IN VBUF +5.
002745,002079: 00,2635 52115 DXCH BUF
002746,002080: 00,2636 24113 INCR VBUF +5
002747,002081:
Page 80 |
002749,002083: 00,2637 37631 /BUF+ CAF HALF # FORCE SIGN AGREEMENT IN DIVISOR.
002750,002084: 00,2640 60000 DOUBLE
002751,002085: 00,2641 60115 AD BUF +1
002752,002086: 00,2642 54115 TS BUF +1
002753,002087: 00,2643 37653 CAF ZERO
002754,002088: 00,2644 67626 AD POSMAX
002755,002089: 00,2645 26114 ADS BUF
002756,002090:
002757,002091: 00,2646 56117 XCH BUF2 # LEAVE ABS(ORIGINAL DIVISOR) IN BUF2 FOR
002758,002092: 00,2647 30115 CA BUF +1 # OVERFLOW TESTING.
002759,002093: 00,2650 54120 TS BUF2 +1
002760,002094: 00,2651 12657 TCF /NORM # NORMALIZE DIVISOR IN BUF.
002761,002095:
002762,002096: 00,2652 00006 /NORM2 EXTEND # IF LESS THAN .5, AUGMENT DVNORMCT AND
002763,002097: 00,2653 24123 AUG DVNORMCT # DOUBLE DIVISOR.
002764,002098: 00,2654 00006 EXTEND
002765,002099: 00,2655 30115 DCA BUF
002766,002100: 00,2656 20115 DAS BUF
002767,002101:
002768,002102: 00,2657 30114 /NORM CA BUF # SEE IF DIVISOR NORMALIZED.
002769,002103: 00,2660 60000 DOUBLE
002770,002104: 00,2661 54000 OVSK
002771,002105: 00,2662 12652 TCF /NORM2 # DOUBLE AND TRY AGAIN IF NOT.
002772,002106:
002773,002107: 00,2663 02675 TC V/SCDV # DO X COMPONENT DIVIDE.
002774,002108: 00,2664 52144 DXCH MPAC +3 # SUPPLY ARGUMENTS IN USUAL SEQUENCE.
002775,002109: 00,2665 52141 DXCH MPAC
002776,002110: 00,2666 52144 DXCH MPAC +3
002777,002111:
002778,002112: 00,2667 02675 TC V/SCDV # Y COMPONENT.
002779,002113: 00,2670 52146 DXCH MPAC +5
002780,002114: 00,2671 52141 DXCH MPAC
002781,002115: 00,2672 52146 DXCH MPAC +5
002782,002116:
002783,002117: 00,2673 02675 TC V/SCDV # Z COMPONENT.
002784,002118: 00,2674 17364 TCF VROTATEX # GO RE-ARRANGE COMPONENTS BEFORE EXIT.
002785,002119:
Page 81 |
002787,002121: # SUBROUTINE USED BY V/SC TO DIVIDE VECTOR COMPONENT IN MPAC,+1 BY THE SCALAR GIVEN IN BUF.
002788,002122:
002789,002123: 00,2675 30113 V/SCDV CA VBUF +5 # REFLECTS SIGN OF SCALAR.
002790,002124: 00,2676 54122 TS DVSIGN
002791,002125:
002792,002126: 00,2677 10140 CCS MPAC # FORCE MPAC POSITIVE, EXITING ON ZERO.
002793,002127: 00,2700 12714 TCF /MPAC+
002794,002128: 00,2701 12703 TCF +2
002795,002129: 00,2702 12710 TCF /MPAC-
002796,002130:
002797,002131: 00,2703 10141 CCS MPAC +1
002798,002132: 00,2704 12714 TCF /MPAC+
002799,002133: 00,2705 00002 TC Q
002800,002134: 00,2706 12710 TCF /MPAC-
002801,002135: 00,2707 00002 TC Q
002802,002136:
002803,002137: 00,2710 00006 /MPAC- EXTEND # USUAL COMPLEMENTING AND SETTING OF SIGN.
002804,002138: 00,2711 40141 DCS MPAC
002805,002139: 00,2712 52141 DXCH MPAC
002806,002140: 00,2713 24122 INCR DVSIGN
002807,002141:
002808,002142: 00,2714 47646 /MPAC+ CS ONE # INITIALIZE NEAR-ONE SWITCH.
002809,002143: 00,2715 54124 TS MAXDVSW
002810,002144:
002811,002145: 00,2716 40140 CS MPAC # CHECK POSSIBLE OVERFLOW.
002812,002146: 00,2717 60117 AD BUF2 # UNNORMALIZED INPUT DIVISOR.
002813,002147: 00,2720 00006 EXTEND
002814,002148: 00,2721 62725 BZMF /AGREE # CHECK FOR NEAR-ONE OR OVERFLOW.
002815,002149:
002816,002150: 00,2722 52141 DDVCALL DXCH MPAC # CALL PRE-DIVIDE NORMALIZATION.
002817,002151: 00,2723 50123 INDEX DVNORMCT
002818,002152: 00,2724 12507 TCF MAXTEST
002819,002153:
Page 82 |
002821,002155: 00,2725 37631 /AGREE CAF HALF # FORCE SIGN AGREEMENT IN DIVIDEND
002822,002156: 00,2726 60000 DOUBLE # (ALREADY DONE FOR DIVISOR).
002823,002157: 00,2727 60141 AD MPAC +1
002824,002158: 00,2730 54141 TS MPAC +1
002825,002159: 00,2731 37653 CAF ZERO
002826,002160: 00,2732 67626 AD POSMAX
002827,002161: 00,2733 26140 ADS MPAC
002828,002162:
002829,002163: 00,2734 40140 CS MPAC # CHECK TO SEE IF OVERFLOW GONE OR IF
002830,002164: 00,2735 60117 AD BUF2 # NEAR-ONE CASE IS PRESENT.
002831,002165: 00,2736 10000 CCS A
002832,002166: 00,2737 12722 TCF DDVCALL # NOT NEAR-ONE.
002833,002167: 00,2740 32506 SLOPELO DEC .8324
002834,002168: 00,2741 12355 TCF DVOVF # NO HOPE.
002835,002169:
002836,002170: 00,2742 54124 TS MAXDVSW # SIGNAL POSSIBLE NEAR-ONE CASE.
002837,002171: 00,2743 40141 CS MPAC +1 # SEE IF DIVISION CAN BE DONE.
002838,002172: 00,2744 60120 AD BUF2 +1
002839,002173: 00,2745 00006 EXTEND
002840,002174: 00,2746 62355 BZMF DVOVF
002841,002175: 00,2747 12722 TCF DDVCALL # GOING TO MAXDV.
002842,002176:
Page 83 |
002844,002178: # THE FOLLOWING ROUTINE EXECUTES THE UNIT INSTRUCTION, WHICH TAKES THE UNIT OF THE VECTOR IN MPAC.
002845,002179:
002846,002180: 00,2750 07475 UNIT TC MPACVBUF # SAVE THE ARGUMENT IN VBUF.
002847,002181: 00,2751 03236 TC VSQSUB # DOT MPAC WITH ITSELF.
002848,002182: 00,2752 00006 EXTEND
002849,002183: 00,2753 30141 DCA MPAC # LEAVE THE SQUARE OF THE LENGTH OF THE
002850,002184: 00,2754 50104 INDEX FIXLOC # ARGUMENT IN LVSQUARE.
002851,002185: 00,2755 52043 DXCH LVSQUARE
002852,002186:
002853,002187: 00,2756 03262 TC SQRTSUB # GO TAKE THE NORMALIZED SQUARE ROOT.
002854,002188:
002855,002189: 00,2757 10140 CCS MPAC # CHECK FOR UNIT OVERFLOW.
002856,002190: 00,2760 12762 TCF +2 # MPAC IS NOT LESS THAN .5 UNLESS THE
002857,002191: 00,2761 12355 TCF DVOVF # INPUT TO SQRTSUB WAS 0.
002858,002192:
002859,002193: 00,2762 43063 CS FOURTEEN # SEE IF THE INPUT WAS SO SMALL THE THE
002860,002194: 00,2763 60121 AD MPTEMP # FIRST TWO REGISTERS OF THE SQUARE WERE 0
002861,002195: 00,2764 10000 CCS A
002862,002196: 00,2765 40000 COM # IF SO, SAVE THE NEGATIVE OF THE SHIFT
002863,002197: 00,2766 13044 TCF SMALL # COUNT -15D.
002864,002198:
002865,002199: 00,2767 12776 TCF LARGE # (THIS IS USUALLY THE CASE.)
002866,002200:
002867,002201: 00,2770 43062 CS THIRTEEN # IF THE SHIFT COUNT WAS EXACTLY 14, SET
002868,002202: 00,2771 54121 TS MPTEMP # THE PRE-DIVIDE NORM COUNT TO -13D.
002869,002203:
002870,002204: 00,2772 30140 CA MPAC # SHIFT THE LENGTH RIGHT 14 BEFORE STORING
002871,002205: 00,2773 54001 SMALL2 TS L # (SMALL EXITS TO THIS POINT).
002872,002206: 00,2774 37653 CAF ZERO
002873,002207: 00,2775 13023 TCF LARGE2 # GO TO STORE LENGTH AND PROCEED.
002874,002208:
002875,002209: 00,2776 10121 LARGE CCS MPTEMP # MOST ALL CASES COME HERE.
002876,002210: 00,2777 13005 TCF LARGE3 # SEE IF NO NORMALIZATION WAS REQUIRED BY
002877,002211:
002878,002212: 00,3000 42005 CS SRDDV # SQRT, AND IF SO, SET UP FOR A SHIFT
002879,002213: 00,3001 54121 TS MPTEMP # RIGHT 1 BEFORE DIVIDING TO PRODUCE
002880,002214: 00,3002 00006 EXTEND # THE DESIRED HALF UNIT VECTOR.
002881,002215: 00,3003 30141 DCA MPAC
002882,002216: 00,3004 13023 TCF LARGE2
002883,002217:
Page 84 |
002885,002219: 00,3005 40000 LARGE3 COM # LEAVE NEGATIVE OF SHIFT COUNT-1 FOR
002886,002220: 00,3006 54121 TS MPTEMP # PREDIVIDE LEFT SHIFT.
002887,002221:
002888,002222: 00,3007 40000 COM # PICK UP REQUIRED SHIFTING BIT TO UNNORM-
002889,002223: 00,3010 50000 INDEX A # ALIZE THE SQRT RESULT.
002890,002224: 00,3011 37631 CAF BIT14
002891,002225: 00,3012 54114 TS BUF
002892,002226: 00,3013 00006 EXTEND
002893,002227: 00,3014 70141 MP MPAC +1
002894,002228: 00,3015 56114 XCH BUF
002895,002229: 00,3016 00006 EXTEND # (UNNORMALIZE THE SQRT FOR LV).
002896,002230: 00,3017 70140 MP MPAC
002897,002231: 00,3020 56001 XCH L
002898,002232: 00,3021 60114 AD BUF
002899,002233: 00,3022 56001 XCH L
002900,002234:
002901,002235: 00,3023 50104 LARGE2 INDEX FIXLOC
002902,002236: 00,3024 52045 DXCH LV # LENGTH NOW STORED IN WORK AREA.
002903,002237:
002904,002238: 00,3025 47646 CS ONE
002905,002239: 00,3026 54124 TS MAXDVSW # NO MAXDV CASES IN UNIT.
002906,002240:
002907,002241: 00,3027 52107 DXCH VBUF # PREPARE X COMPONENT FOR DIVIDE, SETTING
002908,002242: 00,3030 52141 DXCH MPAC # LENGTH OF VECTOR AS DIVISOR IN BUF.
002909,002243: 00,3031 52115 DXCH BUF
002910,002244: 00,3032 03064 TC UNITDV
002911,002245:
002912,002246: 00,3033 52111 DXCH VBUF +2 # DO Y AND Z IN USUAL FASHION SO WE CAN
002913,002247: 00,3034 52141 DXCH MPAC # EXIT THROUGH VROTATEX.
002914,002248: 00,3035 52144 DXCH MPAC +3
002915,002249: 00,3036 03064 TC UNITDV
002916,002250:
002917,002251: 00,3037 52113 DXCH VBUF +4
002918,002252: 00,3040 52141 DXCH MPAC
002919,002253: 00,3041 52146 DXCH MPAC +5
002920,002254: 00,3042 03064 TC UNITDV
002921,002255: 00,3043 17364 TCF VROTATEX # AND EXIT.
002922,002256:
Page 85 |
002924,002258: # IF THE LENGTH OF THE ARGUMENT VECTOR WAS LESS THAN 2(-28), EACH COMPONENT MUST BE SHIFTED LEFT AT LEAST
002925,002259: # 14 PLACES BEFORE THE DIVIDE. NOTE THAT IN THIS CASE, THE MAJOR PART OF EACH COMPONENT IS ZERO.
002926,002260:
002927,002261: 00,3044 54121 SMALL TS MPTEMP # NEGATIVE OF PRE-DIVIDE SHIFT COUNT.
002928,002262:
002929,002263: 00,3045 37653 CAF ZERO # SHIFT EACH COMPONENT LEFT 14.
002930,002264: 00,3046 56107 XCH VBUF +1
002931,002265: 00,3047 56106 XCH VBUF
002932,002266: 00,3050 56111 XCH VBUF +3
002933,002267: 00,3051 56110 XCH VBUF +2
002934,002268: 00,3052 56113 XCH VBUF +5
002935,002269: 00,3053 56112 XCH VBUF +4
002936,002270:
002937,002271: 00,3054 40121 CS MPTEMP
002938,002272: 00,3055 50000 INDEX A
002939,002273: 00,3056 37631 CAF BIT14
002940,002274: 00,3057 00006 EXTEND
002941,002275: 00,3060 70140 MP MPAC
002942,002276: 00,3061 12773 TCF SMALL2
002943,002277:
002944,002278: 00,3062 00015 THIRTEEN DEC 13 B-14
002945,002279: 00,3063 00016 FOURTEEN DEC 14 B-14
002946,002280:
Page 86 |
002948,002282: # THE FOLLOWING ROUTINE SETS UP THE CALL TO THE DIVIDE ROUTINES.
002949,002283:
002950,002284: 00,3064 10140 UNITDV CCS MPAC # FORCE MPAC POSITIVE IF POSSIBLE, SETTING
002951,002285: 00,3065 13103 TCF UMPAC+ # DVSIGN ACCORDING TO THE SIGN OF MPAC
002952,002286: 00,3066 13070 TCF +2 # SINCE THE DIVISOR IS ALWAYS POSITIVE
002953,002287: 00,3067 13075 TCF UMPAC- # HERE.
002954,002288:
002955,002289: 00,3070 10141 CCS MPAC +1
002956,002290: 00,3071 13103 TCF UMPAC+
002957,002291: 00,3072 00002 TC Q # EXIT IMMEDIATELY ON ZERO.
002958,002292: 00,3073 13075 TCF UMPAC-
002959,002293: 00,3074 00002 TC Q
002960,002294:
002961,002295: 00,3075 47653 UMPAC- CS ZERO # IF NEGATIVE, SET -0 IN DVSIGN FOR FINAL
002962,002296: 00,3076 54122 TS DVSIGN # COMPLEMENT.
002963,002297: 00,3077 00006 EXTEND
002964,002298: 00,3100 40141 DCS MPAC # PICK UP ABSOLUTE VALUE OF ARG AND JUMP.
002965,002299: 00,3101 50121 INDEX MPTEMP
002966,002300: 00,3102 12507 TCF MAXTEST
002967,002301:
002968,002302: 00,3103 54122 UMPAC+ TS DVSIGN # SET DVSIGN FOR POSITIVE QUOTIENT.
002969,002303: 00,3104 52141 DXCH MPAC
002970,002304: 00,3105 50121 INDEX MPTEMP
002971,002305: 00,3106 12507 TCF MAXTEST
002972,002306:
Page 87 |
002974,002308: # MISCELLANEOUS UNARY OPERATIONS.
002975,002309:
002976,002310: 00,3107 03217 DSQ TC DSQSUB # SQUARE THE DP CONTENTS OF MPAC.
002977,002311: 00,3110 16014 TCF DANZIG
002978,002312:
002979,002313: 00,3111 07115 ROUND TC ROUNDSUB # ROUNDS MPAC TO DOUBLE PRECISION.
002980,002314: 00,3112 37653 CAF ZERO # FORCE DP MODE.
002981,002315: 00,3113 16013 TCF NEWMODE
002982,002316:
002983,002317: 00,3114 10147 ABVALABS CCS MODE # ABVAL OR ABS INSTRUCTION.
002984,002318: 00,3115 13144 TCF ABS # DO ABS ON SCALAR.
002985,002319: 00,3116 13144 TCF ABS
002986,002320:
002987,002321: 00,3117 03236 ABVAL TC VSQSUB # DOT MPAC WITH ITSELF.
002988,002322: 00,3120 22147 LXCH MODE # MODE IS NOW DP (L ZERO AFTER DAS).
002989,002323:
002990,002324: 00,3121 00006 EXTEND # STORE SQUARE OF LENGTH IN WORK AREA.
002991,002325: 00,3122 30141 DCA MPAC
002992,002326: 00,3123 50104 INDEX FIXLOC
002993,002327: 00,3124 52043 DXCH LVSQUARE
002994,002328:
002995,002329: 00,3125 03262 SQRT TC SQRTSUB # TAKE THE SQUARE ROOT OF MPAC.
002996,002330: 00,3126 10121 CCS MPTEMP # RETURNED NORMALIZED SQUARE ROOT. SEE IF
002997,002331: 00,3127 13131 TCF +2 # ANY UN-NORMALIZATION REQUIRED AND EXIT
002998,002332: 00,3130 16014 TCF DANZIG # IF NOT.
002999,002333:
003000,002334: 00,3131 62273 AD NEG12 # A RIGHT SHIFT OF MORE THAN 13 COULD BE
003001,002335: 00,3132 00006 EXTEND # REQUIRED IF INPUT WAS ZERO IN MPAC,+1.
003002,002336: 00,3133 63137 BZMF SQRTSHFT # GOES HERE IN MOST CASES.
003003,002337: 00,3134 22007 ZL # IF A LONG SHIFT IS REQUIRED, GO TO
003004,002338: 00,3135 22102 LXCH ADDRWD # GENERAL RIGHT SHIFT ROUTINES.
003005,002339: 00,3136 12263 TCF GENSCR +4 # ADDRWD WAS ZERO TO PREVENT ROUND.
003006,002340:
003007,002341: 00,3137 50121 SQRTSHFT INDEX MPTEMP # SELECT SHIFTING BIT AND EXIT THROUGH
003008,002342: 00,3140 37630 CAF BIT15 # SHIFT ROUTINES.
003009,002343: 00,3141 54121 TS MPTEMP
003010,002344: 00,3142 37653 CAF ZERO # TO ZERO MPAC +2 IN THE PROCESS.
003011,002345: 00,3143 12017 TCF MPACSHR +3
003012,002346:
003013,002347: 00,3144 06710 ABS TC BRANCH # TEST SIGN OF MPAC AND COMPLEMENT IF
003014,002348: 00,3145 16014 TCF DANZIG
003015,002349: 00,3146 16014 TCF DANZIG
003016,002350: 00,3147 17605 TCF COMP
003017,002351:
Page 88 |
003019,002353: 00,3150 47644 VDEF CS FOUR # VECTOR DEFINE - ESSENTIALLY TREATS
003020,002354: 00,3151 26152 ADS PUSHLOC # SCALAR IN MPAC AS X COMPONENT, PUSHES UP
003021,002355: 00,3152 00006 EXTEND # FOR Y AND THEN AGAIN FOR Z.
003022,002356: 00,3153 50000 INDEX A
003023,002357: 00,3154 30003 DCA 2
003024,002358: 00,3155 52144 DXCH MPAC +3
003025,002359: 00,3156 00006 EXTEND
003026,002360: 00,3157 50152 INDEX PUSHLOC
003027,002361: 00,3160 30001 DCA 0
003028,002362: 00,3161 52146 DXCH MPAC +5
003029,002363: 00,3162 47646 CS ONE # MODE IS NOW VECTOR.
003030,002364: 00,3163 16013 TCF NEWMODE
003031,002365:
003032,002366: 00,3164 03236 VSQ TC VSQSUB # DOT MPAC WITH ITSELF.
003033,002367: 00,3165 37653 CAF ZERO
003034,002368: 00,3166 16013 TCF NEWMODE # MODE IS NOW DP.
003035,002369:
003036,002370: 00,3167 00006 PUSH EXTEND # PUSH DOWN MPAC LEAVING IT LOADED.
003037,002371: 00,3170 30141 DCA MPAC
003038,002372: 00,3171 50152 INDEX PUSHLOC # PUSH DOWN FIRST TWO REGISTERS IN EACH
003039,002373: 00,3172 52001 DXCH 0
003040,002374:
003041,002375: 00,3173 50147 INDEX MODE # INCREMENT PUSHDOWN POINTER.
003042,002376: 00,3174 36164 CAF NO.WDS
003043,002377: 00,3175 26152 ADS PUSHLOC
003044,002378:
003045,002379: 00,3176 10147 CCS MODE
003046,002380: 00,3177 13212 TCF TPUSH # PUSH DOWN MPAC +2.
003047,002381: 00,3200 16014 TCF DANZIG # DONE FOR DP.
003048,002382:
003049,002383: 00,3201 00006 EXTEND # ON VECTOR, PUSH DOWN Y AND Z COMPONENTS.
003050,002384: 00,3202 30144 DCA MPAC +3
003051,002385: 00,3203 50152 INDEX PUSHLOC
003052,002386: 00,3204 51775 DXCH 0 -4
003053,002387: 00,3205 00006 EXTEND
003054,002388: 00,3206 30146 DCA MPAC +5
003055,002389: 00,3207 50152 INDEX PUSHLOC
003056,002390: 00,3210 51777 DXCH 0 -2
003057,002391: 00,3211 16014 TCF DANZIG
003058,002392:
003059,002393: 00,3212 30142 TPUSH CA MPAC +2
003060,002394: 00,3213 16557 TCF ENDTPUSH +2
003061,002395:
003062,002396: 00,3214 50104 RVQ INDEX FIXLOC # RVQ - RETURN IVA QPRET.
003063,002397: 00,3215 30052 CA QPRET
003064,002398: 00,3216 16651 TCF GOTO +1
003065,002399:
Page 89 |
003067,002401: # THE FOLLOWING SUBROUTINES ARE USED IN SQUARING MPAC, IN BOTH THE SCALAR AND VECTOR SENSE. THEY ARE
003068,002402: # SPECIAL CASES OF DMPSUB AND DOTSUB, PUT IN TO SAVE SOME TIME.
003069,002403:
003070,002404: 00,3217 30141 DSQSUB CA MPAC +1 # SQUARES THE SCALAR CONTENTS OF MPAC.
003071,002405: 00,3220 00006 EXTEND
003072,002406: 00,3221 70000 SQUARE
003073,002407: 00,3222 54142 TS MPAC +2
003074,002408: 00,3223 37653 CAF ZERO # FORM 2(CROSS TERM).
003075,002409: 00,3224 56141 XCH MPAC +1
003076,002410: 00,3225 00006 EXTEND
003077,002411: 00,3226 70140 MP MPAC
003078,002412: 00,3227 20001 DDOUBL # AND MAYBE OVERFLOW.
003079,002413: 00,3230 20142 DAS MPAC +1 # AND SET A TO NET OVERFLOW.
003080,002414: 00,3231 56140 XCH MPAC
003081,002415: 00,3232 00006 EXTEND
003082,002416: 00,3233 70000 SQUARE
003083,002417: 00,3234 20141 DAS MPAC
003084,002418: 00,3235 00002 TC Q
003085,002419:
003086,002420: 00,3236 00006 VSQSUB EXTEND # DOTS THE VECTOR IN MPAC WITH ITSELF.
003087,002421: 00,3237 22123 QXCH DOTRET
003088,002422: 00,3240 03217 TC DSQSUB # SQUARE THE X COMPONENT.
003089,002423: 00,3241 52144 DXCH MPAC +3
003090,002424: 00,3242 52141 DXCH MPAC
003091,002425: 00,3243 52115 DXCH BUF # SO WE CAN END IN DOTSUB.
003092,002426: 00,3244 30142 CA MPAC +2
003093,002427: 00,3245 54116 TS BUF +2
003094,002428:
003095,002429: 00,3246 03217 TC DSQSUB # SQUARE Y COMPONENT.
003096,002430: 00,3247 52142 DXCH MPAC +1
003097,002431: 00,3250 20116 DAS BUF +1
003098,002432: 00,3251 60140 AD MPAC
003099,002433: 00,3252 60114 AD BUF
003100,002434: 00,3253 54114 TS BUF
003101,002435: 00,3254 13256 TCF +2
003102,002436: 00,3255 54105 TS OVFIND # IF OVERFLOW.
003103,002437:
003104,002438: 00,3256 52146 DXCH MPAC +5
003105,002439: 00,3257 52141 DXCH MPAC
003106,002440: 00,3260 03217 TC DSQSUB # SQUARE Z COMPONENT.
003107,002441: 00,3261 17163 TCF ENDDOT # END AS IN DOTSUB.
003108,002442:
Page 90 |
003110,002444: # DOUBLE PRECISION SQUARE ROOT ROUTINE. TAKE THE SQUARE ROOT OF THE TRIPLE PRECISION (MPAC +2 USED ONLY
003111,002445: # IN NORMALIZATION) CONTENTS OF MPAC AND LEAVE THE NORMALIZED RESULT IN MPAC (C(MPAC) GREATER THAN OR EQUAL TO
003112,002446: # .5). THE RIGHT SHIFT COUNT (TO UNNORMALIZE) IS LEFT IN MPTEMP.
003113,002447:
003114,002448:
003115,002449:
003116,002450: 00,3262 37653 SQRTSUB CAF ZERO # START BY ZEROING RIGHT SHIFT COUNT.
003117,002451: 00,3263 54121 TS MPTEMP
003118,002452:
003119,002453: 00,3264 10140 CCS MPAC # CHECK FOR POSITIVE ARGUMENT, SHIFTING
003120,002454: 00,3265 13322 TCF SMPAC+ # FIRST SIGNIFICANT MPAC REGISTER INTO
003121,002455: 00,3266 13270 TCF +2 # MPAC ITSELF.
003122,002456: 00,3267 13312 TCF SQRTNEG # SEE IF MAG OF ARGUMENT LESS THAN 10(-4).
003123,002457:
003124,002458: 00,3270 56142 XCH MPAC +2 # MPAC IS ZERO - SHIFT LEFT 14.
003125,002459: 00,3271 56141 XCH MPAC +1
003126,002460: 00,3272 54140 TS MPAC
003127,002461: 00,3273 37652 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
003128,002462: 00,3274 54121 TS MPTEMP
003129,002463:
003130,002464: 00,3275 10140 CCS MPAC # SEE IF MPAC NOW PNZ.
003131,002465: 00,3276 13322 TCF SMPAC+
003132,002466: 00,3277 13301 TCF +2
003133,002467: 00,3300 13315 TCF ZEROANS # NEGATIVE BUT LESS THAN 10(-4) IN MAG.
003134,002468:
003135,002469: 00,3301 56141 XCH MPAC +1 # ZERO - SHIFT LEFT 14 AGAIN.
003136,002470: 00,3302 54140 TS MPAC
003137,002471: 00,3303 37652 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
003138,002472: 00,3304 26121 ADS MPTEMP
003139,002473:
003140,002474: 00,3305 10140 CCS MPAC
003141,002475: 00,3306 13322 TCF SMPAC+
003142,002476: 00,3307 00002 TC Q # SQRT(0) = 0.
003143,002477: 00,3310 13315 TCF ZEROANS
003144,002478: 00,3311 00002 TC Q
003145,002479:
003146,002480:
003147,002481:
003148,002482: 00,3312 10000 SQRTNEG CCS A # ARGUMENT IS NEGATIVE, BUT SEE IF SIGN-
003149,002483: 00,3313 13321 TCF SQRTABRT # CORRECTED ARGUMENT IS LESS THAN 10(-4)
003150,002484:
003151,002485: 00,3314 10141 CCS MPAC +1 # IN MAGNITUDE. IF SO, CALL ANSWER ZERO.
003152,002486: 00,3315 37653 ZEROANS CAF ZERO # FORCE ANSWER TO ZERO HERE.
003153,002487: 00,3316 13365 TCF FIXROOT
003154,002488: 00,3317 13321 TCF SQRTABRT
003155,002489: 00,3320 13365 TCF FIXROOT
003156,002490:
003157,002491: 00,3321 03321 SQRTABRT TC -0
003158,002492:
Page 91 |
003160,002494: 00,3322 62410 SMPAC+ AD -1/2+2 # SEE IF ARGUMENT GREATER THAN OR EQUAL TO
003161,002495: 00,3323 00006 EXTEND # .5.
003162,002496: 00,3324 63370 BZMF SRTEST # IF SO, SEE IF LESS THAN .25.
003163,002497:
003164,002498: 00,3325 52141 DXCH MPAC # WE WILL TAKE THE SQUARE ROOT OF MPAC/2.
003165,002499: 00,3326 22021 LXCH SR # SHIFT RIGHT 1 AND GO TO THE SQRT ROUTINE
003166,002500: 00,3327 00006 EXTEND
003167,002501: 00,3330 77631 MP HALF
003168,002502: 00,3331 52141 DXCH MPAC
003169,002503: 00,3332 56021 XCH SR
003170,002504: 00,3333 26141 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
003171,002505:
003172,002506: 00,3334 32274 ARGHI CAF SLOPEHI # ARGUMENT BETWEEN .25 AND .5. GET A
003173,002507: 00,3335 00006 EXTEND # LINEAR APPROXIMATION FOR THIS RANGE.
003174,002508: 00,3336 70140 MP MPAC
003175,002509: 00,3337 62510 AD BIASHI # X0/2 = (MPAC/2)(SLOPEHI) + BIASHI/2.
003176,002510:
003177,002511: 00,3340 54114 +4 TS BUF # X0/2 (ARGLO ENTERS HERE).
003178,002512: 00,3341 00006 EXTEND
003179,002513: 00,3342 10114 DV BUF # (MPAC/2)/(X0/2)
003180,002514: 00,3343 00006 EXTEND
003181,002515: 00,3344 77631 MP HALF
003182,002516: 00,3345 26114 ADS BUF # X1 = X0/2 + .5(MPAC/2)/(X0/2).
003183,002517:
003184,002518: 00,3346 00006 EXTEND
003185,002519: 00,3347 77631 MP HALF # FORM UP X1/2.
003186,002520: 00,3350 52141 DXCH MPAC # SAVE AND BRING OUT ARGUMENT.
003187,002521: 00,3351 00006 EXTEND # TAKE DP QUOTIENT WITH X1.
003188,002522: 00,3352 10114 DV BUF
003189,002523: 00,3353 54115 TS BUF +1 # SAVE MAJOR PART OF QUOTIENT.
003190,002524: 00,3354 37653 CAF ZERO # FORM MINOR PART OF QUOTIENT USING
003191,002525: 00,3355 56001 XCH L # (REMAINDER,0).
003192,002526: 00,3356 00006 EXTEND
003193,002527: 00,3357 10114 DV BUF
003194,002528: 00,3360 54001 TS L # IN PREPARATION FOR DAS.
003195,002529: 00,3361 30115 CA BUF +1
003196,002530: 00,3362 20141 DAS MPAC # X2 = X1/2 + (MPAC/2)X1
003197,002531:
003198,002532: 00,3363 10000 CCS A # OVERFLOWS IF ARGUMENT WAS NEAR POSMAX.
003199,002533: 00,3364 37626 CAF POSMAX
003200,002534: 00,3365 54140 FIXROOT TS MPAC
003201,002535: 00,3366 54141 TS MPAC +1
003202,002536: 00,3367 00002 TC Q # RETURN TO CALLER TO UNNORMALIZE, ETC.
003203,002537:
Page 92 |
003205,002539: 00,3370 67632 SRTEST AD QUARTER # ARGUMENT WAS LESS THAN .5, SEE IF LESS
003206,002540: 00,3371 00006 EXTEND # THAN .25.
003207,002541: 00,3372 63414 BZMF SQRTNORM # IF SO, BEGIN NORMALIZATION.
003208,002542:
003209,002543: 00,3373 52141 DXCH MPAC # IF BETWEEN .5 AND .25, SHIFT RIGHT 1 AND
003210,002544: 00,3374 22021 LXCH SR # START AT ARGLO.
003211,002545: 00,3375 00006 EXTEND
003212,002546: 00,3376 77631 MP HALF
003213,002547: 00,3377 52141 DXCH MPAC
003214,002548: 00,3400 56021 XCH SR
003215,002549: 00,3401 26141 ADS MPAC +1 # NO OVERFLOW.
003216,002550:
003217,002551: 00,3402 32740 ARGLO CAF SLOPELO # (NORMALIZED) ARGUMENT BETWEEN .125 AND
003218,002552: 00,3403 00006 EXTEND # .25
003219,002553: 00,3404 70140 MP MPAC
003220,002554: 00,3405 62250 AD BIASLO
003221,002555: 00,3406 13340 TCF ARGHI +4 # BEGIN SQUARE ROOT.
003222,002556:
003223,002557: 00,3407 00006 SQRTNM2 EXTEND # SHIFT LEFT 2 AND INCREMENT RIGHT SHIFT
003224,002558: 00,3410 30142 DCA MPAC +1 # COUNT (FOR TERMINAL UNNORMALIZATION).
003225,002559: 00,3411 20142 DAS MPAC +1
003226,002560: 00,3412 60140 AD MPAC
003227,002561: 00,3413 26140 ADS MPAC # (NO OVERFLOW).
003228,002562:
003229,002563: 00,3414 24121 SQRTNORM INCR MPTEMP # FIRST TIME THROUGH, JUST SHIFT LEFT 1
003230,002564: 00,3415 00006 EXTEND # (PUTS IN EFFECTIVE RIGHT SHIFT SINCE
003231,002565: 00,3416 30142 DCA MPAC +1 # WE WANT MPAC/2).
003232,002566: 00,3417 20142 DAS MPAC +1
003233,002567: 00,3420 60140 AD MPAC
003234,002568: 00,3421 26140 ADS MPAC # (AGAIN NO OVERFLOW).
003235,002569: 00,3422 60000 DOUBLE
003236,002570: 00,3423 54022 TS CYL
003237,002571:
003238,002572: 00,3424 10022 NORMTEST CCS CYL # SEE IF ARGUMENT NOW NORMALIZED AT
003239,002573: 00,3425 10022 CCS CYL # GREATER THAN .125.
003240,002574: 00,3426 13407 TCF SQRTNM2 # NO - SHIFT LEFT 2 MORE AND TRY AGAIN.
003241,002575: 00,3427 13334 TCF ARGHI # YES - NOW BETWEEN .5 AND .25.
003242,002576: 00,3430 13402 TCF ARGLO # ARGUMENT NOW BETWEEN .25 AND .125.
003243,002577:
Page 93 |
003245,002579: # TRIGONOMETRIC FUNCTION PACKAGE.
003246,002580:
003247,002581: # THE FOLLOWING TRIGONOMETRIC FUNCTIONS ARE AVAILABLE AS INTERPRETIVE OPERATIONS:
003248,002582:
003249,002583: # 1. SIN COMPUTES (1/2)SINE(2 PI MPAC).
003250,002584: # 2. COS COMPUTES (1/2)COSINE(2 PI MPAC).
003251,002585:
003252,002586: # 3. ASIN COMPUTES (1/2PI)ARCSINE(2 MPAC).
003253,002587: # 4. ACOS COMPUTES (1/2PI)ARCCOSINE(2 MPAC).
003254,002588:
003255,002589: # SIN-ASIN AND COS-ACOS ARE MUTUALLY INVERSE, IE SIN(ASIN(X)) = X.
003256,002590:
003257,002591:
003258,002592:
003259,002593: 00,3431 06710 COSINE TC BRANCH # FINDS COSINE USING THE IDENTITY
003260,002594: 00,3432 13435 TCF +3 # COS(X) = SIN(PI/2 - ABS(X)).
003261,002595: 00,3433 13440 TCF PRESINE
003262,002596: 00,3434 13440 TCF PRESINE
003263,002597:
003264,002598: 00,3435 00006 +3 EXTEND
003265,002599: 00,3436 40141 DCS MPAC
003266,002600: 00,3437 52141 DXCH MPAC
003267,002601:
003268,002602: 00,3440 37632 PRESINE CAF QUARTER # PI/2 SCALED.
003269,002603: 00,3441 26140 ADS MPAC
003270,002604:
003271,002605:
003272,002606:
003273,002607: 00,3442 52141 SINE DXCH MPAC # DOUBLE ARGUMENT.
003274,002608: 00,3443 20001 DDOUBL
003275,002609: 00,3444 54000 OVSK # SEE IF OVERFLOW PRESENT.
003276,002610: 00,3445 13450 TCF +3 # IF NOT, ARGUMENT OK AS IS.
003277,002611:
003278,002612: 00,3446 00006 EXTEND # IF SO, WE LOST (OR GAINED) PI, SO
003279,002613: 00,3447 40001 DCOM # COMPLEMENT MPAC USING THE IDENTITY
003280,002614: # SIN(X-(+)PI) = SIN(-X).
003281,002615: 00,3450 52141 +3 DXCH MPAC
003282,002616: 00,3451 30140 CA MPAC # SEE IF ARGUMENT GREATER THAN .5 IN
003283,002617: 00,3452 60000 DOUBLE # MAGNITUDE. IF SO, REDUCE IT TO LESS THAN
003284,002618: 00,3453 54001 TS L # .5 (+-PI/2 SCALED) AS FOLLOWS:
003285,002619: 00,3454 13465 TCF SN1
003286,002620:
003287,002621: 00,3455 50000 INDEX A # IF POSITIVE, FORM PI - X, IF NEGATIVE
003288,002622: 00,3456 37630 CAF NEG1/2 +1 # USE -PI - X.
003289,002623: 00,3457 60000 DOUBLE
003290,002624: 00,3460 00006 EXTEND
003291,002625: 00,3461 60140 SU MPAC # GUARANTEED NO OVERFLOW.
003292,002626: 00,3462 54140 TS MPAC
003293,002627: 00,3463 40141 CS MPAC +1
003294,002628: 00,3464 54141 TS MPAC +1
003295,002629:
Page 94 |
003297,002631: 00,3465 00006 SN1 EXTEND # SET UP TO EVALUATE HASTINGS POLYNOMIAL
003298,002632: 00,3466 30141 DCA MPAC
003299,002633: 00,3467 52120 DXCH BUF2
003300,002634: 00,3470 03217 TC DSQSUB # SQUARE MPAC.
003301,002635:
003302,002636: 00,3471 07173 TC POLY # EVALUATE FOURTH ORDER POLYNOMIAL.
003303,002637: 00,3472 00003 DEC 3 B-14
003304,002638: 00,3473 14441 37325 2DEC +.3926990796
003305,002639:
003306,002640: 00,3475 53250 60764 2DEC -.6459637111
003307,002641:
003308,002642: 00,3477 12146 21276 2DEC +.318758717
003309,002643:
003310,002644: 00,3501 75466 71471 2DEC -.074780249
003311,002645:
003312,002646: 00,3503 00236 32757 2DEC +.009694988
003313,002647:
003314,002648: 00,3505 32434 CAF LBUF2 # MULTIPLY BY ARGUMENT AND SHIFT LEFT 2.
003315,002649: 00,3506 07065 TC DMPSUB -1
003316,002650:
003317,002651: 00,3507 00006 EXTEND
003318,002652: 00,3510 30142 DCA MPAC +1
003319,002653: 00,3511 20142 DAS MPAC +1
003320,002654: 00,3512 60140 AD MPAC
003321,002655: 00,3513 26140 ADS MPAC # NEITHER SHIFT OVERFLOWS.
003322,002656: 00,3514 00006 EXTEND
003323,002657: 00,3515 30142 DCA MPAC +1
003324,002658: 00,3516 20142 DAS MPAC +1
003325,002659: 00,3517 60140 AD MPAC
003326,002660: 00,3520 26140 ADS MPAC
003327,002661: 00,3521 16014 TCF DANZIG
003328,002662:
Page 95 |
003330,002664: # ARCSIN/ARCCOS ROUTINE.
003331,002665:
003332,002666: 00,3522 33543 ARCSIN CAF LASINEX # COMPUTE ARCSIN BY USING THE IDENTITY
003333,002667: 00,3523 13525 TCF +2 # ARCSIN(X) = PI/2 - ARCCOS(X).
003334,002668:
003335,002669: 00,3524 33625 ARCCOS CAF LDANZIG # (EXITS IMMEDIATELY).
003336,002670: 00,3525 54122 TS ESCAPE
003337,002671: 00,3526 06710 TC BRANCH # TEST SIGN OF INPUT.
003338,002672: 00,3527 13537 TCF ACOSST # START IMMEDIATELY IF POSITIVE.
003339,002673: 00,3530 13640 TCF ACOSZERO # ARCCOS(0) = PI/2 = .25.
003340,002674: 00,3531 00006 EXTEND # IF NEGATIVE, USE THE IDENTITY
003341,002675: 00,3532 40141 DCS MPAC # ARCCOS(X) = PI - ARCCOS(-X), FORCING
003342,002676: 00,3533 52141 DXCH MPAC # ARGUMENT POSITIVE.
003343,002677: 00,3534 32247 CAF TCSUBTR # SET EXIT TO DO ABOVE BEFORE
003344,002678: 00,3535 56122 XCH ESCAPE # ARCSIN/ARCCOS CONSIDERATIONS.
003345,002679: 00,3536 54123 TS ESCAPE2
003346,002680:
003347,002681: 00,3537 47631 ACOSST CS HALF # TEST MAGNITUDE OF INPUT.
003348,002682: 00,3540 60140 AD MPAC
003349,002683: 00,3541 10000 CCS A
003350,002684: 00,3542 13633 TCF ACOSOVF # THIS IS PROBABLY AN OVERFLOW CASE.
003351,002685:
003352,002686: 00,3543 13621 LASINEX TCF ASINEX
003353,002687:
003354,002688: 00,3544 13554 TCF ACOSST2 # NO OVERFLOW - PROCEED.
003355,002689:
003356,002690: 00,3545 10141 CCS MPAC +1 # IF MAJOR PART IS .5, CALL ANSWER 0
003357,002691: 00,3546 37653 CAF ZERO # UNLESS MINOR PART NEGATIVE.
003358,002692: 00,3547 13551 TCF ACOS=0
003359,002693:
003360,002694: 00,3550 13554 TCF ACOSST2
003361,002695:
003362,002696: 00,3551 54141 ACOS=0 TS MPAC +1
003363,002697: 00,3552 54140 TS MPAC
003364,002698: 00,3553 00122 TC ESCAPE
003365,002699:
003366,002700: 00,3554 00006 ACOSST2 EXTEND # NOW THAT ARGUMENT IS IN PROPER RANGE,
003367,002701: 00,3555 40141 DCS MPAC # BEGIN COMPUTATION. USE HASTINGS
003368,002702: 00,3556 67631 AD HALF # APPROXIMATION ARCCOS(X) = SQRT(1-X)P(X)
003369,002703: 00,3557 52141 DXCH MPAC # IN A SCALED VERSION WHERE P(X) IS A
003370,002704: 00,3560 52120 DXCH BUF2 # SEVENTH ORDER POLYNOMIAL.
003371,002705:
003372,002706: 00,3561 03262 TC SQRTSUB # RETURNS WITH NORMALIZED SQUARE ROOT.
003373,002707:
003374,002708: 00,3562 10121 CCS MPTEMP # SEE IF UN-NORMALIZATION REQUIRED.
003375,002709: 00,3563 13626 TCF ACOSSHR # IF SO.
003376,002710:
Page 96 |
003378,002712: 00,3564 52141 ACOS3 DXCH MPAC # SET UP FOR POLYNOMIAL EVALUATION.
003379,002713: 00,3565 52120 DXCH BUF2
003380,002714: 00,3566 52141 DXCH MPAC
003381,002715:
003382,002716: 00,3567 07173 TC POLY
003383,002717: 00,3570 00006 DEC 6 B-14
003384,002718: 00,3571 13240 23630 2DEC +.353553385 # COEFFICIENTS ARE C 2(+I)/PISQRT(2) WHERE
003385,002719:
003386,002720: 00,3573 74721 47775 2DEC* -.0483017006 B+1* # I
003387,002721:
003388,002722: 00,3575 02440 20237 2DEC* +.0200273085 B+2* # WHERE C STANDS FOR ORIGINAL COEFFS.
003389,002723:
003390,002724: 00,3577 75067 70742 2DEC* -.0112931863 B+3*
003391,002725:
003392,002726: 00,3601 03436 26756 2DEC* +.00695311612 B+4*
003393,002727:
003394,002728: 00,3603 74037 57640 2DEC* -.00384617957 B+5*
003395,002729:
003396,002730: 00,3605 03046 07143 2DEC* +.001501297736 B+6*
003397,002731:
003398,002732: 00,3607 76654 42244 2DEC* -.000284160334 B+7*
003399,002733:
003400,002734: 00,3611 32434 CAF LBUF2 # DO FINAL MULTIPLY AND GO TO ANY
003401,002735: 00,3612 07065 TC DMPSUB -1 # EPILOGUE SEQUENCES.
003402,002736: 00,3613 00122 TC ESCAPE
003403,002737:
003404,002738: 00,3614 00006 SUBTR EXTEND # EPILOGUE FOR NEGATIVE INPUTS TO ARCCOS.
003405,002739: 00,3615 40141 DCS MPAC
003406,002740: 00,3616 67631 AD HALF # FORMS PI - ARCCOS(-X) = ARCCOS(X).
003407,002741: 00,3617 52141 DXCH MPAC
003408,002742: 00,3620 00123 TC ESCAPE2 # GO TO POSSIBLE ARCSIN EPILOGUE.
003409,002743:
003410,002744: 00,3621 00006 ASINEX EXTEND
003411,002745: 00,3622 40141 DCS MPAC # ARCSIN EPILOGUE - GET ARCSIN(X)
003412,002746: 00,3623 67632 AD QUARTER # = PI/2 - ARCCOS(X).
003413,002747: 00,3624 52141 DXCH MPAC
003414,002748: 00,3625 16014 LDANZIG TCF DANZIG
003415,002749:
Page 97 |
003417,002751: 00,3626 50000 ACOSSHR INDEX A # THE SHIFT RIGHT IS LESS THAN 14 SINCE
003418,002752: 00,3627 37631 CAF BIT14 # THE INPUT WAS NON-ZERO DP.
003419,002753: 00,3630 54121 TS MPTEMP
003420,002754: 00,3631 02054 TC VSHRRND # DP SHIFT RIGHT AND ROUND.
003421,002755: 00,3632 13564 TCF ACOS3 # PROCEED.
003422,002756:
003423,002757: 00,3633 10000 ACOSOVF CCS A # IF MAJOR PART WAS ONLY 1 MORE THAN .5,
003424,002758: 00,3634 13636 TCF +2 # CALL ANSWER 0.
003425,002759: 00,3635 13551 TCF ACOS=0
003426,002760: 00,3636 13551 TCF ACOS=0
003427,002761:
003428,002762: 00,3637 03637 ACOSABRT TC -0
003429,002763:
003430,002764: 00,3640 37632 ACOSZERO CAF QUARTER # ACOS(0) = PI/2.
003431,002765: 00,3641 13552 TCF ACOS=0 +1 # SET MPAC AND EXIT VIA ESCAPE.
003432,002766:
Page 98 |
003434,002768: # THE FOLLOWING INSTRUCTIONS ARE AVAILABLE FOR SETTING, MODIFYING, AND BRANCHING ON INDEX REGISTERS:
003435,002769:
003436,002770: # 1. AXT ADDRESS TO INDEX TRUE.
003437,002771: # 1. AXC ADDRESS TO INDEX COMPLEMENTED.
003438,002772: # 3. LXA LOAD INDEX FROM ERASABLE.
003439,002773: # 4. LXC LOAD INDEX COMPLEMENTED FROM ERASABLE.
003440,002774: # 5. SXA STORE INDEX IN ERASABLE.
003441,002775: # 6. XCHX EXCHANGE INDEX REIGSTER WITH ERASABLE.
003442,002776:
003443,002777: # 7. INCR INCREMENT INDEX REGISTER.
003444,002778: # 8. XAD ERASABLE ADD TO INDEX REGISTER.
003445,002779: # 9. XSU ERASABLE SUBTRACT FROM INDEX REGISTER.
003446,002780:
003447,002781: # 10. TIX BRANCH ON INDEX REGISTER AND DECREMENT.
003448,002782:
003449,002783:
003450,002784:
003451,002785: 01,2000 SETLOC 12000 # SUFFIX CLASS 01 IS IN BANK 1.
003452,002786:
003453,002787: 01,2000 02061 AXT TC TAGSUB # SELECT APPROPRIATE INDEX REGISTER.
003454,002788: 01,2001 30103 CA POLISH
003455,002789: 01,2002 50114 XSTORE INDEX INDEXLOC # CONTAINS C(FIXLOC) OR C(FIXLOC)+1.
003456,002790: 01,2003 54046 TS X1
003457,002791: 01,2004 16014 TCF DANZIG
003458,002792:
003459,002793: 01,2005 02061 AXC TC TAGSUB
003460,002794: 01,2006 40103 CS POLISH
003461,002795: 01,2007 02002 TC XSTORE
003462,002796:
003463,002797: 01,2010 02061 LXA TC TAGSUB # LOAD INDEX FROM ERASABLE.
003464,002798: 01,2011 50102 INDEX ADDRWD
003465,002799: 01,2012 30000 CA 0
003466,002800: 01,2013 12002 TCF XSTORE
003467,002801:
003468,002802: 01,2014 02061 LXC TC TAGSUB # LOAD INDEX FROM ERASABLE COMPLEMENTED.
003469,002803: 01,2015 50102 INDEX ADDRWD
003470,002804: 01,2016 40000 CS 0
003471,002805: 01,2017 12002 TCF XSTORE
003472,002806:
003473,002807: 01,2020 02061 SXA TC TAGSUB # STORE INDEX IN ERASABLE.
003474,002808: 01,2021 50114 INDEX INDEXLOC
003475,002809: 01,2022 30046 CA X1
003476,002810: 01,2023 16626 TCF STORE1 # (STORE SINGLE PRECISION BEFORE EXIT).
003477,002811:
003478,002812: 01,2024 02061 XCHX TC TAGSUB # EXCHANGE INDEX REGISTER WITH ERASABLE.
003479,002813: 01,2025 50102 INDEX ADDRWD
003480,002814: 01,2026 30000 CA 0
003481,002815: 01,2027 50114 INDEX INDEXLOC
003482,002816: 01,2030 56046 XCH X1
003483,002817: 01,2031 16626 TCF STORE1
003484,002818:
Page 99 |
003486,002820: 01,2032 02061 XAD TC TAGSUB # ERASABLE ADD TO INDEX.
003487,002821: 01,2033 50102 INDEX ADDRWD
003488,002822: 01,2034 30000 CA 0
003489,002823: 01,2035 50114 XAD2 INDEX INDEXLOC
003490,002824: 01,2036 26046 ADS X1 # IGNORING OVERFLOWS.
003491,002825: 01,2037 16014 TCF DANZIG
003492,002826:
003493,002827: 01,2040 02061 INCR TC TAGSUB # INCREMENT INDEX REGISTER.
003494,002828: 01,2041 30103 CA POLISH
003495,002829: 01,2042 12035 TCF XAD2
003496,002830:
003497,002831: 01,2043 02061 XSU TC TAGSUB # ERASABLE SUBTRACT FROM INDEX.
003498,002832: 01,2044 50102 INDEX ADDRWD
003499,002833: 01,2045 40000 CS 0
003500,002834: 01,2046 12035 TCF XAD2
003501,002835:
003502,002836:
003503,002837:
003504,002838: 01,2047 02061 TIX TC TAGSUB # BRANCH AND DECREMENT ON INDEX.
003505,002839: 01,2050 50114 INDEX INDEXLOC
003506,002840: 01,2051 40046 CS X1
003507,002841: 01,2052 50114 INDEX INDEXLOC
003508,002842: 01,2053 60046 AD X1
003509,002843: 01,2054 00006 EXTEND # NO OPERATION IF DECREMENTED INDEX IS
003510,002844: 01,2055 66014 BZMF DANZIG # NEGATIVE OR ZERO.
003511,002845:
003512,002846: 01,2056 50114 DOTIXBR INDEX INDEXLOC
003513,002847: 01,2057 56046 XCH X1 # IGNORING OVERFLOWS.
003514,002848:
003515,002849: 01,2060 16650 TCF GOTO # DO THE BRANCH USING THE CADR IN POLISH.
003516,002850:
003517,002851:
003518,002852:
003519,002853: # SUBROUTINE WHICH SETS THE ADDRESS OF THE SPECIFIED INDEX IN INDEXLOC. (ACTUALLY, THE ADDRESS -38D.)
003520,002854:
003521,002855: 01,2061 30104 TAGSUB CA FIXLOC
003522,002856: 01,2062 54114 TS INDEXLOC
003523,002857:
003524,002858: 01,2063 10020 CCS CYR # BIT 15 SPECIFIES INDEX.
003525,002859: 01,2064 24114 INCR INDEXLOC # 0 MEANS USE X2.
003526,002860: 01,2065 00002 TC Q
003527,002861: 01,2066 00002 TC Q # 1 FOR X1.
003528,002862:
Page 100 |
003530,002864: # MISCELLANEOUS OPERATION CODES WITH DIRECT ADDRESSES. INCLUDED HERE ARE:
003531,002865:
003532,002866: # 1. ITA STORE QPRET (RETURN ADDRESS) IN ERASABLE.
003533,002867: # 2. CALL CALL A SUBROUTINE, LEAVING RETURN IN QPRET.
003534,002868: # 3. RTB RETURN TO BASIC LANGUAGE AT THE GIVEN ADDRESS.
003535,002869: # 4. BHIZ BRANCH IF THE HIGH ORDER OF MPAC IS ZERO (SINGLE PRECISION).
003536,002870: # 5. BOV BRANCH ON OVERFLOW.
003537,002871: # 6. GOTO SIMPLE SEQUENCE CHANGE.
003538,002872:
003539,002873: 01,2067 10020 RTB/BHIZ CCS CYR
003540,002874: 01,2070 30103 RTB CA POLISH
003541,002875: 01,2071 14105 TCF BANKJUMP # CALL BASIC ROUTINE.
003542,002876:
003543,002877: 01,2072 10140 BHIZ CCS MPAC
003544,002878: 01,2073 16014 TCF DANZIG
003545,002879: 01,2074 16650 TCF GOTO
003546,002880: 01,2075 16014 TCF DANZIG
003547,002881: 01,2076 16650 TCF GOTO
003548,002882:
003549,002883: 01,2077 10105 BOV(B) CCS OVFIND # BRANCH ON OVERFLOW TO BASIC OR INTERP.
003550,002884: 01,2100 12102 TCF +2
003551,002885: 01,2101 16014 TCF DANZIG
003552,002886: 01,2102 54105 TS OVFIND
003553,002887: 01,2103 10020 CCS CYR
003554,002888: 01,2104 12070 TCF RTB # IF BASIC.
003555,002889: 01,2105 00360 B5TOB8 OCT 360
003556,002890: 01,2106 16650 TCF GOTO
003557,002891:
Page 101 |
003559,002893: 01,2107 10020 BZE/GOTO CCS CYR # SEE WHICH OP-CODE IS DESIRED.
003560,002894: 01,2110 06710 TC BRANCH # DO BZE.
003561,002895: 01,2111 16014 TCF DANZIG
003562,002896: 01,2112 16650 TCF GOTO # DO GOTO.
003563,002897: 01,2113 16014 TCF DANZIG
003564,002898:
003565,002899: 01,2114 10020 BPL/BMN CCS CYR
003566,002900: 01,2115 12123 TCF BPL
003567,002901: 01,2116 12000 5B10 DEC 5 B+10 # SHIFTS OP CODE IN SWITCH INSTRUCTION ADR
003568,002902:
003569,002903: 01,2117 06710 TC BRANCH # DO BMN.
003570,002904: 01,2120 16014 TCF DANZIG
003571,002905: 01,2121 16014 TCF DANZIG
003572,002906: 01,2122 16650 TCF GOTO # ONLY IF NNZ.
003573,002907:
003574,002908: 01,2123 06710 BPL TC BRANCH
003575,002909: 01,2124 16650 TCF GOTO # IF POSITIVE OR ZERO.
003576,002910: 01,2125 16650 TCF GOTO
003577,002911: 01,2126 16014 TCF DANZIG
003578,002912:
003579,002913: 01,2127 10020 CALL/ITA CCS CYR
003580,002914: 01,2130 16643 TCF CALL
003581,002915:
003582,002916: 01,2131 00017 LOW4 OCT 17 # MASK USED BY SWITCH INSTRUCTIONS.
003583,002917:
003584,002918: 01,2132 50104 INDEX FIXLOC # STORE QPRET.
003585,002919: 01,2133 30052 CA QPRET
003586,002920: 01,2134 16626 TCF STORE1
003587,002921:
Page 102 |
003589,002923: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR ALTERING AND TESTING INTERPRETIVE SWITCHES:
003590,002924:
003591,002925: # 00 BONSET SET A SWITCH AND DO A GOTO IF IT WAS ON.
003592,002926: # 01 SETGO SET A SWITCH AND DO A GOTO.
003593,002927: # 02 BOFSET SET A SWITCH AND DO A GOTO IF IT WAS OFF
003594,002928: # 03 SET SET A SWITCH.
003595,002929:
003596,002930: # 04 BONINV INVERT A SWITCH AND BRANCH IF IT WAS ON.
003597,002931: # 05 INVGO INVERT A SWITCH AND DO A GOTO.
003598,002932: # 06 BOFINV INVERT A SWITCH AND BRANCH IF IT WAS OFF
003599,002933: # 07 INVERT INVERT A SWITCH.
003600,002934:
003601,002935: # 10 BONCLR CLEAR A SWITCH AND BRANCH IF IT WAS ON.
003602,002936: # 11 CLRGO CLEAR A SWITCH AND DO A GOTO.
003603,002937: # 12 BOFCLR CLEAR A SWITCH AND BRANCH IF IT WAS OFF.
003604,002938: # 13 CLEAR CLEAR A SWITCH.
003605,002939:
003606,002940: # 14 BON BRANCH IF A SWITCH WAS ON.
003607,002941: # 16 BOFF BRANCH IF A SWITCH WAS OFF.
003608,002942:
003609,002943:
003610,002944:
003611,002945: # THE ADDRESS SUPPLIED WITH THE SWITCH INSTRUCTION IS INTERPRETED AS FOLLOWS:
003612,002946:
003613,002947: # BITS 1-4 SWITCH BIT NUMBER (1-15).
003614,002948: # BITS 5-8 SWITCH OPERATION NUMBER.
003615,002949: # BITS 9- SWITCH WORD NUMBER (UP TO 64 SWITCH WORDS).
003616,002950:
003617,002951: # THE ADDRESS ITSELF IS MADE UP BY THE YUL SYSTEM ASSEMBLER. THE BRANCH INSTRUCTIONS REQUIRE TWO
003618,002952: # ADDRESSES, THE SECOND TAKEN AS THE DIRECT (OR INDIRECT IF IN ERASABLE) ADDRESS OF THE BRANCH.
003619,002953:
003620,002954:
003621,002955:
003622,002956: 01,2135 32131 SWITCHES CAF LOW4 # LEAVE THE SWITCH BIT IN SWBIT .
003623,002957: 01,2136 70103 MASK POLISH
003624,002958: 01,2137 50000 INDEX A
003625,002959: 01,2140 37630 CAF BIT15 # (NUMBER FROM LEFT TO RIGHT.)
003626,002960: 01,2141 54115 TS SWBIT
003627,002961:
003628,002962: 01,2142 37637 CAF BIT8 # LEAVE THE SWITCH WORD NUMBER IN SWWORD
003629,002963: 01,2143 00006 EXTEND
003630,002964: 01,2144 70103 MP POLISH
003631,002965: 01,2145 54114 TS SWWORD
003632,002966:
003633,002967: 01,2146 00004 INHINT # DURING SWITCH CHANGE SO RUPT CAN USE TOO
003634,002968: 01,2147 50000 INDEX A # LEAVE THE SWITCH WORD ITSELF IN L.
003635,002969: 01,2150 30620 CA STATE
003636,002970: 01,2151 54002 TS Q # Q WILL BE USED AS A CHANNEL.
003637,002971:
Page 103 |
003639,002973: 01,2152 37634 CAF BIT11
003640,002974: 01,2153 00006 EXTEND # DISPATCH SWITCH BIT OPERATION AS IN BITS
003641,002975: 01,2154 70103 MP POLISH # 7-8 OF POLISH.
003642,002976: 01,2155 72215 MASK B3TOB4 # GETS 4X2-BIT CODE.
003643,002977: 01,2156 50000 INDEX A
003644,002978: 01,2157 12160 TCF +1
003645,002979:
003646,002980: 01,2160 30115 +1 CA SWBIT # 00 - SET SWITCH IN QUESTION.
003647,002981: 01,2161 00006 EXTEND
003648,002982: 01,2162 04002 ROR Q
003649,002983: 01,2163 12172 TCF SWSTORE
003650,002984:
003651,002985: 01,2164 30115 +5 CA SWBIT # 01 - INVERT SWITCH.
003652,002986: 01,2165 00006 EXTEND
003653,002987: 01,2166 06002 RXOR Q
003654,002988: 01,2167 12172 TCF SWSTORE
003655,002989:
003656,002990: 01,2170 40115 +9D CS SWBIT # 10 - CLEAR.
003657,002991: 01,2171 70002 MASK Q
003658,002992: 01,2172 50114 SWSTORE INDEX SWWORD
003659,002993: 01,2173 54620 TS STATE # NEW SWITCH WORD.
003660,002994:
Page 104 |
003662,002996: 01,2174 00003 +13D RELINT # 11 - NOOP.
003663,002997: 01,2175 37632 CAF BIT13
003664,002998: 01,2176 00006 EXTEND # DISPATCH SEQUCE CHANGING OR BRANCHING
003665,002999: 01,2177 70103 MP POLISH # CODE.
003666,003000: 01,2200 72215 MASK B3TOB4
003667,003001: 01,2201 50000 INDEX A
003668,003002: 01,2202 12203 TCF +1 # ORIGINALLY STORED IN BITS 5-6.
003669,003003:
003670,003004: 01,2203 40002 +1 CS Q # 00 - BRANCH IF ON.
003671,003005: 01,2204 70115 TEST MASK SWBIT
003672,003006: 01,2205 10000 CCS A
003673,003007: 01,2206 12216 TCF SWSKIP
003674,003008:
003675,003009: 01,2207 16702 +5 TCF SWBRANCH # 01 - GO TO.
003676,003010:
003677,003011: 01,2210 12216 TCF SWSKIP # HERE ONLY ON BIT 15.
003678,003012:
003679,003013: 01,2213 SETLOC +2
003680,003014:
003681,003015: 01,2213 30002 +9D CA Q # 10 - BRANCH IF OFF.
003682,003016: 01,2214 12204 TCF TEST
003683,003017:
003684,003018: 01,2215 00014 B3TOB4 OCT 14
003685,003019:
003686,003020: 01,2216 24150 SWSKIP INCR LOC
003687,003021:
003688,003022: 01,2217 01,2135 SW/ EQUALS SWITCHES
003689,003023:
003690,003024: 01,2217 16014 +13D TCF DANZIG # 11 - NOOP.
003691,003025:
003692,003026: 01,2220 ENDINTS1 EQUALS
End of include-file LIST-PROCESSING_INTERPRETER.agc. Parent file is MAIN.agc