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