Source Code
![]() |
YAYUL: ASSEMBLE REVISION 6 OF PROGRAM BOREALIS BY MSTEWART JUN. 28,2017This is a modern AGC system self-test program, though based on the Apollo-era AURORA 12 program, and was not written by the original AGC developers, but rather by Mike Stewart. All of the original AURORA 12 DAP code added by the DAP Group has been removed, and extensive new system test code has been added in its place. This allows more in-depth testing of CPU behavior, both in AGC software simulations and hardware simulations. |
001375,000002: ## Copyright: Public domain.
001376,000003: ## Filename: INTERPRETER.agc
001377,000004: ## Purpose: This program is designed to extensively test the Apollo Guidance Computer
001378,000005: ## (specifically the LM instantiation of it). It is built on top of a heavily
001379,000006: ## stripped-down Aurora 12, with all code ostensibly added by the DAP Group
001380,000007: ## removed. Instead Borealis expands upon the tests provided by Aurora,
001381,000008: ## including corrected tests from Retread 44 and tests from Ron Burkey's
001382,000009: ## Validation.
001383,000010: ## Assembler: yaYUL
001384,000011: ## Contact: Mike Stewart <mastewar1@gmail.com>.
001385,000012: ## Website: www.ibiblio.org/apollo/index.html
001386,000013: ## Mod history: 2016-12-20 MAS Created from Aurora 12 (with much DAP stuff removed).
001387,000014: ## 2017-02-05 RSB Back-ported comment corrections
001388,000015: ## identified while proofing Artemis 072.
001389,000016: ## 2017-03-13 RSB Comment-text fixes noted in proofing Luminary 116.
001390,000017: ## 2017-03-15 RSB Comment-text fixes identified in 5-way
001391,000018: ## side-by-side diff of Luminary 69/99/116/131/210.
001392,000019: ## 2017-06-38 MAS Converted to the AGC Interpreter, using Sunburst 37
001393,000020: ## as the reference version.
001394,000021:
001395,000022: # SECTION 1 DISPATCHER
001396,000023:
001397,000024: # ENTRY TO THE INTERPRETER. INTPRET SETS LOC TO THE FIRST INSTRUCTION, BANKSET TO THE BBANK OF THE
001398,000025: # OBJECT INTERPRETIVE PROGRAM, AND INTBIT15 TO THE BIT15 CONTENTS OF FBANK. INTERPRETIVE PROGRAMS MAY BE IN
001399,000026: # VIRTUALLY ALL BANKS PRESENT UNDER ANY SUPER-BANK SETTING, WITH THE RESTRICTION THAT PROGRAMS IN HIGH BANKS
001400,000027: # (BIT15 OF FBANK = 1) DO NOT REFER TO LOWBANKS, AND VICE-VERSA. THE INTERPRETER DOES NOT SWITCH SUPERBANKS.
001401,000028: # E-BANK SWITCHING OCCURS WHENEVER GENERAL ERASABLE (100 - 3777) IS ADDRESSED.
001402,000029:
001403,000030: 6000 SETLOC 6000
001404,000031:
001405,000032: 6000 00006 INTPRET EXTEND # SET LOC TO THE WORD FOLLOWING THE TC.
001406,000033: 6001 22150 QXCH LOC
001407,000034:
001408,000035: 6002 30006 +2 CA BBANK # INTERPRETIVE BRANCHES FINISH HERE.
001409,000036: 6003 54151 TS BANKSET
001410,000037: 6004 77653 MASK BIT15 # GET 15TH BIT FOR INDEXABLE ADDRESSES.
001411,000038: 6005 54101 TS INTBIT15
001412,000039:
001413,000040:
001414,000041: 6006 16021 TCF NEWOPS # PICK UP OP CODE PAIR AND BEGIN.
001415,000042:
001416,000043: 6007 22006 INTRSM LXCH BBANK # RESUME SUSPENDED INTERPRETIVE JOB
001417,000044: 6010 16002 TCF INTPRET +2
001418,000045:
001419,000046: # AT THE END OF MOST INSTRUCTIONS, CONTROL IS GIVEN TO DANZIG TO DISPATCH THE NEXT OPERATION.
001420,000047:
001421,000048: 6011 54147 NEWMODE TS MODE # PROLOGUE FOR MODE-CHANGING INSTRUCTIONS.
001422,000049:
001423,000050: 6012 30151 DANZIG CA BANKSET # SET BBANK BEFORE TESTING NEWJOB SO THAT
001424,000051: 6013 54006 TS BBANK # IT MAY BE SAVED DIRECTLY BY CHANJOB.
001425,000052:
001426,000053: 6014 10023 NOIBNKSW CCS EDOP # SEE IF AN ORDER CODE IS LEFT OVER FROM
001427,000054: 6015 16030 TCF OPJUMP # THE LAST PAIR RETRIEVED. IF SO, EXECUTE.
001428,000055: # EDOP IS SET TO ZERO ON ITS RE-EDITING.
001429,000056:
001430,000057: 6016 10067 CCS NEWJOB # SEE IF A JOB OF HIGHER PRIORITY IS
001431,000058: 6017 14373 TCF CHANG2 # PRESENT, AND IF SO, CHANGE JOBS.
001432,000059:
001433,000060: 6020 24150 INCR LOC # ADVANCE THE LOCATION COUNTER.
001434,000061: # ITRACE (1) REFERS TO "NEWOPS".
001435,000062: 6021 50150 NEWOPS INDEX LOC # ENTRY TO BEGIN BY PICKING OP CODE PAIR.
001436,000063: 6022 30000 CA 0 # MAY BE AN OPCODE PAIR OR A STORE CODE.
001437,000064: 6023 10000 CCS A # TEST SIGN AND GET DABS(A).
001438,000065: 6024 16335 TCF DOSTORE # PROCESS STORE CODE.
001439,000066:
001440,000067: 6025 00177 LOW7 OCT 177
001441,000068:
001442,000069: 6026 54023 TS EDOP # OP CODE PAIR. LEAVE THE OTHER IN EDOP
001443,000070:
001444,000071: 6027 76025 MASK LOW7 # WHERE CCS EDOP WILL HONOR IT NEXT.
001445,000072:
001446,000073: 6030 54020 OPJUMP TS CYR # LOWWD ENTERS HERE IF A RIGHT-HAND OP
001447,000074: 6031 10020 CCS CYR # CODE IS TO BE PROCESSED. TEST PREFICES.
001448,000075: 6032 16200 TCF OPJUMP2 # TEST SECOND PREFIX BIT.
001449,000076:
001450,000077: 6033 16726 TCF EXIT # +0 OP CODE IS EXIT.
001451,000078:
001452,000079: # PROCESS ADDRESSES WHICH MAY BE DIRECT, INDEXED, OR REFERENCE THE PUSHDOWN LIST.
001453,000080:
001454,000081: 6034 77671 ADDRESS MASK BIT1 # SEE IF ADDRESS IS INDEXED. CYR CONTAINED
001455,000082: 6035 10000 CCS A # 400XX, SO BIT 1 IS NOW AS IT WAS IN CYR.
001456,000083: 6036 16077 TCF INDEX # FORM INDEXED ADDRESS.
001457,000084:
001458,000085: 6037 50150 DIRADRES INDEX LOC # LOOK AHEAD TO NEXT WORD TO SEE IF
001459,000086: 6040 40001 OCT40001 CS 1 # ADDRESS IS GIVEN.
001460,000087: 6041 10000 CCS A
001461,000088: 6042 16146 TCF PUSHUP # IF NOT.
001462,000089:
001463,000090: 6043 77773 NEG4 DEC -4 B-14
001464,000091:
001465,000092: 6044 24150 INCR LOC # IF SO, TO SHOW WE PICKED UP A WORD.
001466,000093: 6045 54102 TS ADDRWD
001467,000094:
001468,000095: # FINAL DIGESTION OF DIRECT ADDRESSES OF OP CODES WITH 01 PREFIX IS DONE HERE. IN EACH CASE, THE
001469,000096: # REQUIRED 12-BIT SUB-ADDRESS IS LEFT IN ADDRWD, WITH ANY REQUIRED E OR F BANK SWITCHING DONE. ADDRESSES LESS
001470,000097:
001471,000098: # 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.
001472,000099:
001473,000100:
001474,000101: 6046 66202 AD -ENDVAC # SEE IF ADDRESS RELATIVE TO WORK AREA.
001475,000102: 6047 10000 CCS A
001476,000103: 6050 66227 AD -ENDERAS # IF NOT, SEE IF IN GENERAL ERASABLE.
001477,000104: 6051 16056 TCF IERASTST
001478,000105:
001479,000106: 6052 30104 NETZERO CA FIXLOC # IF SO, LEAVE THE MODIFIED ADDRESS IN
001480,000107: 6053 26102 ADS ADDRWD # ADDRWD AND DISPATCH.
001481,000108: 6054 50020 ITR15 INDEX CYR # THIS INDEX MAKES THE NEXT INSTRUCTION
001482,000109: 6055 76227 7 INDJUMP -1 # TCF INDJUMP + OP, EDITING CYR.
001483,000110:
001484,000111: 6056 00006 IERASTST EXTEND
001485,000112: 6057 66067 BZMF GEADDR # GO PROCESS GENERAL-ERASABLE ADDRESS.
001486,000113:
001487,000114: 6060 77701 MASK LOW10 # FIXED BANK ADDRESS. RESTORE AND ADD B15.
001488,000115: 6061 67701 AD LOW10 # SWITCH BANKS AND LEAVE SUBADDRESS IN
001489,000116: 6062 56102 XCH ADDRWD # ADDRWD FOR OPERAND RETRIEVAL. (THIS
001490,000117: 6063 60101 AD INTBIT15 # METHOD PRECLUDES USE OF THE LAST
001491,000118: 6064 54004 TS FBANK # LOCATION IN EACH FBANK.)
001492,000119:
001493,000120: 6065 50020 ITR12 INDEX CYR
001494,000121: 6066 76227 7 INDJUMP -1
001495,000122:
001496,000123: 6067 75227 GEADDR MASK LOW8
001497,000124: 6070 65230 AD OCT1400
001498,000125: 6071 56102 XCH ADDRWD
001499,000126: 6072 54003 TS EBANK
001500,000127: 6073 50020 ITR10 INDEX CYR
001501,000128: 6074 76227 7 INDJUMP -1
001502,000129:
001503,000130: # THE FOLLOWING ROUTINE PROCESSES INTERPRETIVE INDEXED ADDRESSES. AN INTERPRETER INDEX REGISTER MAY
001504,000131: # CONTAIN THE ADDRESS OF ANY ERASABLE REGISTER (0-42 BEING RELATIVE TO THE VAC AREA) OR ANY INTERPRETIVE PROGRAM
001505,000132: # BANK, OR ANY INTEGER IN THAT RANGE.
001506,000133:
001507,000134: 6075 37707 DODLOAD* CAF DLOAD* # STODL* COMES HERE TO PROCESS LOAD ADR.
001508,000135: 6076 54020 TS CYR # (STOVL* ENTERS HERE).
001509,000136:
001510,000137: 6077 30104 INDEX CA FIXLOC # SET UP INDEX LOCATION.
001511,000138: 6100 54114 TS INDEXLOC
001512,000139: 6101 24150 INCR LOC # (ADDRESS ALWAYS GIVEN).
001513,000140: 6102 50150 INDEX LOC
001514,000141: 6103 40000 CS 0
001515,000142: 6104 10000 CCS A # INDEX 2 IF ADDRESS STORED COMPLEMENTED.
001516,000143: 6105 24114 INCR INDEXLOC
001517,000144: 6106 16107 NOOP
001518,000145:
001519,000146: 6107 54102 TS ADDRWD # 14 BIT ADDRESS TO ADDRWD.
001520,000147: 6110 77711 MASK HIGH4 # IF ADDRESS GREATER THAN 2K, ADD INTBIT15
001521,000148:
001522,000149: 6111 00006 EXTEND
001523,000150: 6112 16115 BZF INDEX2
001524,000151: 6113 30101 CA INTBIT15
001525,000152: 6114 26102 ADS ADDRWD
001526,000153:
001527,000154: 6115 50114 INDEX2 INDEX INDEXLOC
001528,000155: 6116 40046 CS X1
001529,000156: 6117 26102 ADS ADDRWD # DO AUGMENT, IGNORING AND CORRECTING OVF.
001530,000157:
001531,000158: 6120 76225 MASK HIGH9 # SEE IF ADDRESS IS IN WORK AREA.
001532,000159: 6121 00006 EXTEND
001533,000160: 6122 16135 BZF INDWORK
001534,000161:
001535,000162: 6123 77711 MASK HIGH4 # SEE IF IN FIXED BANK.
001536,000163: 6124 00006 EXTEND
001537,000164: 6125 16137 BZF INDERASE
001538,000165:
001539,000166: 6126 30102 CA ADDRWD # IN FIXED - SWITCH BANKS AND CREATE
001540,000167: 6127 54004 TS FBANK # SUB-ADDRESS.
001541,000168: 6130 77701 MASK LOW10
001542,000169: 6131 67657 AD 2K
001543,000170: 6132 54102 TS ADDRWD
001544,000171: 6133 50020 ITR11 INDEX CYR
001545,000172:
001546,000173: 6134 36227 3 INDJUMP -1
001547,000174:
001548,000175: 6135 30104 INDWORK CA FIXLOC # MAKE ADDRWD RELATIVE TO WORK AREA.
001549,000176: 6136 16143 TCF ITR13 -1
001550,000177:
001551,000178: 6137 35230 INDERASE CA OCT1400
001552,000179: 6140 56102 XCH ADDRWD
001553,000180: 6141 54003 TS EBANK
001554,000181: 6142 75227 MASK LOW8
001555,000182: 6143 26102 -1 ADS ADDRWD
001556,000183: 6144 50020 ITR13 INDEX CYR
001557,000184:
001558,000185: 6145 36227 3 INDJUMP -1
001559,000186:
001560,000187: # PUSH-UP ROUTINES. WHEN NO OPERAND ADDRESS IS GIVEN, THE APPROPRIATE OPERAND IS TAKEN FROM THE PUSH-DOWN
001561,000188: # LIST. IN MOST CASES THE MODE OF THE RESULT (VECTOR OR SCALAR) OF THE LAST ARITHMETIC OPERATION PERFORMED
001562,000189: # IS THE SAME AS THE TYPE OF OPERAND DESIRED (ALL ADD/SUBTRACT ETC.). EXCEPTIONS TO THIS GENERAL RULE ARE LISTED
001563,000190: # BELOW (NOTE THAT IN EVERY CASE THE MODE REGISTER IS LEFT INTACT):
001564,000191:
001565,000192: # 1. VXSC AND V/SC WANT THE OPPOSITE TYPE OF OPERAND, E.G., IF THE LAST OPERATION YIELDED A VECTOR
001566,000193: # RESULT, VXSC WANTS A SCALAR.
001567,000194:
001568,000195: # 2. THE LOAD CODES SHOULD LOAD THE ACCUMULATOR INDEPENDENT OF THE RESULT OF THE LAST OPERATION. THIS
001569,000196: # INCLUDES VLOAD, DLOAD, TLOAD, PDDL, AND PDVL (NO PUSHUP WITH SLOAD).
001570,000197:
001571,000198: # 3. SOME ARITHMETIC OPERATIONS REQUIRE A STANDARD TYPE OF OPERAND REGARDLESS OF THE PREVIOUS OPERATION.
001572,000199: # THIS INCLUDES SIGN WANTING DP AND TAD REQUIRING TP.
001573,000200:
001574,000201: 6146 35231 PUSHUP CAF OCT23 # IF THE LOW 5 BITS OF CYR ARE LESS THAN
001575,000202: 6147 70020 MASK CYR # 20, THIS OP REQUIRES SPECIAL ATTENTION.
001576,000203: 6150 66153 AD -OCT10 # (NO -0).
001577,000204: 6151 10000 CCS A
001578,000205: 6152 16164 TCF REGUP # FOR ALL CODES GREATER THAN OCT 7.
001579,000206:
001580,000207: 6153 77767 -OCT10 OCT -10
001581,000208:
001582,000209: 6154 66043 AD NEG4 # WE NOW HAVE 7 - OP CODE(MOD4). SEE IF
001583,000210: 6155 10000 CCS A # THE OP CODE (MOD4) IS THREE (REVERSE).
001584,000211: 6156 50000 INDEX A # NO - THE MODE IS DEFINITE. PICK UP THE
001585,000212: 6157 46175 CS NO.WDS
001586,000213: 6160 16166 TCF REGUP +2
001587,000214:
001588,000215: 6161 50147 INDEX MODE # FOR VXSC AND V/SC WE WANT THE REQUIRED
001589,000216: 6162 46173 CS REVCNT # PUSHLOC DECREMENT WITHOUT CHANGING THE
001590,000217: 6163 16166 TCF REGUP +2 # MODE AT THIS TIME.
001591,000218:
001592,000219: 6164 50147 REGUP INDEX MODE # MOST ALL OP CODES PUSHUP HERE.
001593,000220: 6165 46175 CS NO.WDS
001594,000221: 6166 26152 +2 ADS PUSHLOC
001595,000222: 6167 54102 TS ADDRWD
001596,000223: 6170 50020 ITR14 INDEX CYR
001597,000224: 6171 76227 7 INDJUMP -1 # (THE INDEX MAKES THIS A TCF.)
001598,000225:
001599,000226: 6172 00002 OCT 2 # REVERSE PUSHUP DECREMENT. VECTOR TAKES 2
001600,000227: 6173 00006 REVCNT OCT 6 # WORDS, SCALAR TAKES 6.
001601,000228: 6174 00006 OCT 6
001602,000229: 6175 00002 NO.WDS OCT 2 # CONVENTIONAL DECREMENT IS 6 WORDS VECTOR
001603,000230: 6176 00003 OCTAL3 OCT 3 # 2 IN DP, AND 3 IN TP.
001604,000231: 6177 00006 OCT 6
001605,000232:
001606,000233: # TEST THE SECOND PREFIX BIT TO SEE IF THIS IS A MISCELLANEOUS OR A UNARY/SHORT SHIFT OPERATION.
001607,000234:
001608,000235: 6200 10020 OPJUMP2 CCS CYR # TEST SECOND PREFIX BIT.
001609,000236: 6201 16214 TCF OPJUMP3 # TEST THIRD BIT TO SEE IF UNARY OR SHIFT.
001610,000237:
001611,000238: 6202 77722 -ENDVAC DEC -45 B-14
001612,000239:
001613,000240: # THE FOLLOWING ROUTINE PROCESSES ADDRESSES OF SUFFIX CLASS 10. THEY ARE BASICALLY WORK AREA ADDRESSES
001614,000241: # IN THE RANGE 0 - 52, ERASABLE ECADR CONSTANTS FROM 100 - 3777, AND FCADRS ABOVE THAT. ALL 15 BITS ARE AVAILABLE
001615,000242: # IN CONTRAST TO SUFFIX 1, IN WHICH ONLY THE LOW ORDER 14 ARE AVAILABLE.
001616,000243:
001617,000244: 6203 24150 15BITADR INCR LOC # (ENTRY HERE FROM STCALL).
001618,000245: 6204 50150 INDEX LOC # PICK UP ADDRESS WORD.
001619,000246: 6205 30000 CA 0
001620,000247: 6206 54103 TS POLISH # WE MAY NEED A SUBADDRESS LATER.
001621,000248:
001622,000249: 6207 36224 CAF LOW7+2K # THESE INSTRUCTIONS ARE IN BANK 1.
001623,000250: 6210 54004 TS FBANK
001624,000251: 6211 70020 MASK CYR
001625,000252: 6212 50000 ITR7 INDEX A
001626,000253: 6213 16270 TCF MISCJUMP
001627,000254:
001628,000255: # COMPLETE THE DISPATCHING OF UNARY AND SHORT SHIFT OPERATIONS.
001629,000256:
001630,000257: 6214 54004 OPJUMP3 TS FBANK # CALL IN BANK 0 (BIT5 11-15 OF A ARE 0.)
001631,000258: # ITRACE (6) REFERS TO "OPJUMP3".
001632,000259: 6215 10020 CCS CYR # TEST THIRD PREFIX BIT.
001633,000260: 6216 50000 INDEX A # THE DECREMENTED UNARY CODE IS IN BITS
001634,000261: 6217 16310 TCF UNAJUMP # 1-4 OF A (ZERO, EXIT, HAS BEEN DETECTED)
001635,000262:
001636,000263: 6220 10147 CCS MODE # ITS A SHORT SHIFT CODE. SEE IF PRESENT
001637,000264: 6221 12000 TCF SHORTT # SCALAR OR VECTOR.
001638,000265: 6222 12000 TCF SHORTT
001639,000266: 6223 12102 TCF SHORTV # CALLS THE APPROPRIATE ROUTINE.
001640,000267:
001641,000268:
001642,000269:
001643,000270: 6224 5231 OCT23 = VD1
001644,000271: 6224 02177 LOW7+2K OCT 2177 # OP CODE MASK + BANK 1 FBANK SETTING.
001645,000272: 6225 77700 HIGH9 OCT 77700
001646,000273:
001647,000274: 6226 76000 BANKMASK OCT 76000 # FBANK MASK.
001648,000275: 6227 6226 FBANKMSK EQUALS BANKMASK
001649,000276: 6227 4513 B12T14 = PRIO34 # USED IN PROCESSING STORE CODES.
001650,000277: 6227 74056 -ENDERAS DEC -2001 B-14 # = -(2047 - 45 - 1)
001651,000278:
001652,000279: # THE FOLLOWING IS THE JUMP TABLE FOR OP CODES WHICH MAY HAVE INDEXABLE ADDRESSES OR MAY PUSH UP.
001653,000280:
001654,000281: 6230 16470 INDJUMP TCF VLOAD # 00 - LOAD MPAC WITH A VECTOR.
001655,000282: 6231 17047 TCF TAD # 01 - TRIPLE PRECISION ADD TO MPAC.
001656,000283: 6232 17615 TCF SIGN # 02 - COMPLEMENT MPAC (V OR SC) IF X NEG.
001657,000284: 6233 17366 TCF VXSC # 03 - VECTOR TIMES SCALAR.
001658,000285: 6234 16666 TCF CGOTO # 04 - COMPUTED GO TO.
001659,000286: 6235 16453 TCF TLOAD # 05 - LOAD MPAC WITH TRIPLE PRECISION.
001660,000287: 6236 16444 TCF DLOAD # 06 - LOAD MPAC WITH A DP SCALAR.
001661,000288: 6237 17564 TCF V/SC # 07 - VECTOR DIVIDED BY SCALAR.
001662,000289:
001663,000290: 6240 16464 TCF SLOAD # 10 - LOAD MPAC IN SINGLE PRECISION.
001664,000291: 6241 16603 TCF SSP # 11 - SET SINGLE PRECISION INTO X.
001665,000292: 6242 16506 TCF PDDL # 12 - PUSH DOWN MPAC AND RE-LOAD IN DP.
001666,000293: 6243 17321 TCF MXV # 13 - MATRIX POST-MULTIPLIED BY VECTOR.
001667,000294: 6244 16542 TCF PDVL # 14 - PUSH DOWN AND VECTOR LOAD.
001668,000295: 6245 16611 TCF CCALL # 15 - COMPUTED CALL.
001669,000296: 6246 17324 TCF VXM # 16 - MATRIX PRE-MULTIPLIED BY VECTOR.
001670,000297: 6247 17556 TCF TSLC # 17 - NORMALIZE MPAC (SCALAR ONLY).
001671,000298:
001672,000299: 6250 17534 TCF DMPR # 20 - DP MULTIPLY AND ROUND.
001673,000300: 6251 17537 TCF DDV # 21 - DP DIVIDE BY.
001674,000301: 6252 17543 TCF BDDV # 22 - DP DIVIDE INTO.
001675,000302: 6253 17561 TCF GSHIFT # 23 - GENERAL SHIFT INSTRUCTION.
001676,000303: 6254 16732 TCF VAD # 24 - VECTOR ADD.
001677,000304: 6255 16760 TCF VSU # 25 - VECTOR SUBTRACT.
001678,000305: 6256 17010 TCF BVSU # 26 - VECTOR SUBTRACT FROM.
001679,000306: 6257 17316 TCF DOT # 27 - VECTOR DOT PRODUCT.
001680,000307:
001681,000308: 6260 17446 TCF VXV # 30 - VECTOR CROSS PRODUCT.
001682,000309: 6261 17412 TCF VPROJ # 31 - VECTOR PROJECTION.
001683,000310: 6262 16776 TCF DSU # 32 - DP SUBTRACT.
001684,000311: 6263 17034 TCF BDSU # 33 - DP SUBTRACT FROM.
001685,000312: 6264 16750 TCF DAD # 34 - DP ADD.
001686,000313: 6265 16265 TCF +0 # 35 - AVAILABLE
001687,000314: 6266 17532 TCF DMP1 # 36 - DP MULTIPLY.
001688,000315: 6267 17553 TCF SETPD # 37 - SET PUSH DOWN POINTER (DIRECT ONLY)
001689,000316:
001690,000317: # CODES 10 AND 14 MUST NOT PUSH UP. CODE 04 MAY BE USED FOR VECTOR DECLARE BEFORE PUSHUP IF DESIRED.
001691,000318:
001692,000319: # THE FOLLOWING JUMP TABLE APPLIES TO INDEX, BRANCH, AND MISCELLANEOUS INSTRUCTIONS.
001693,000320:
001694,000321: 6270 12000 MISCJUMP TCF AXT # 00 - ADDRESS TO INDEX TRUE.
001695,000322: 6271 12005 TCF AXC # 01 - ADDRESS TO INDEX COMPLEMENTED.
001696,000323: 6272 12010 TCF LXA # 02 - LOAD INDEX FROM ERASABLE.
001697,000324: 6273 12014 TCF LXC # 03 - LOAD INDEX FROM COMPLEMENT OF ERAS.
001698,000325: 6274 12020 TCF SXA # 04 - STORE INDEX IN ERASABLE.
001699,000326: 6275 12026 TCF XCHX # 05 - EXCHANGE INDEX WITH ERASABLE.
001700,000327: 6276 12042 TCF INCR # 06 - INCREMENT INDEX REGISTER.
001701,000328: 6277 12051 TCF TIX # 07 - TRANSFER ON INDEX.
001702,000329:
001703,000330: 6300 12034 TCF XAD # 10 - INDEX REGISTER ADD FROM ERASABLE.
001704,000331: 6301 12045 TCF XSU # 11 - INDEX SUBTRACT FROM ERASABLE.
001705,000332: 6302 12123 TCF BZE/GOTO # 12 - BRANCH ZERO AND GOTO.
001706,000333: 6303 12130 TCF BPL/BMN # 13 - BRANCH PLUS AND BRANCH MINUS.
001707,000334: 6304 12103 TCF RTB/BHIZ # 14 - RETURN TO BASIC AND BRANCH HI ZERO.
001708,000335: 6305 12143 TCF CALL/ITA # 15 - CALL AND STORE QPRET.
001709,000336: 6306 12152 TCF SW/ # 16 - SWITCH INSTRUCTIONS AND AVAILABLE.
001710,000337: 6307 12113 TCF BOV(B) # 17 - BRANCH ON OVERFLOW TO BASIC OR INT.
001711,000338:
001712,000339: # THE FOLLOWING JUMP TABLE APPIES TO UNARY INSTRUCTIONS.
001713,000340:
001714,000341: # 00 - EXIT - DETECTED EARLIER.
001715,000342: 6310 13136 UNAJUMP TCF SQRT # 01 - SQUARE ROOT.
001716,000343: 6311 13460 TCF SINE # 02 - SIN.
001717,000344: 6312 13447 TCF COSINE # 03 - COS.
001718,000345: 6313 13540 TCF ARCSIN # 04 - ARC SIN.
001719,000346: 6314 13542 TCF ARCCOS # 05 - ARC COS.
001720,000347: 6315 13123 TCF DSQ # 06 - DP SQUARE.
001721,000348: 6316 12077 TCF ROUND # 07 - ROUND TO DP.
001722,000349:
001723,000350: 6317 17630 TCF COMP # 10 - COMPLEMENT VECTOR OR SCALAR.
001724,000351: 6320 13161 TCF VDEF # 11 - VECTOR DEFINE.
001725,000352: 6321 12751 TCF UNIT # 12 - UNIT VECTOR.
001726,000353: 6322 13125 TCF ABVALABS # 13 - LENGTH OF VECTOR OR MAG OF SCALAR.
001727,000354: 6323 13175 TCF VSQ # 14 - SQUARE OF LENGTH OF VECTOR.
001728,000355: 6324 16327 TCF STADR # 15 - PUSH UP ON STORE CODE.
001729,000356: 6325 13225 TCF RVQ # 16 - RETURN VIA QPRET.
001730,000357: 6326 13200 TCF PUSH # 17 - PUSH MPAC DOWN.
001731,000358:
001732,000359: # SECTION 2 LOAD AND STORE PACKAGE.
001733,000360:
001734,000361: # A SET OF EIGHT STORE CODES IS PROVIDED AS THE PRIMARY METHOD OF STORING THE MULTI-PURPOSE
001735,000362: # ACCUMULATOR (MPAC). IF IN THE DANZIG SECTION LOC REFERS TO AN ALGEBRAICALLY POSITIVE WORD, IT IS TAKEN AS A
001736,000363: # STORE CODE WITH A CORRESPONDING ERASABLE ADDRESS. MOST OF THESE CODES ARE TWO ADDRESS, SPECIFYING THAT THE WORD
001737,000364: # FOLLOWING THE STORE CODE IS TO BE USED AS AN ADDRESS FROM WHICH TO RE-LOAD MPAC. FOUR OPTIONS ARE AVAILABLE:
001738,000365:
001739,000366: # 1. STORE STORE MPAC. THE E ADDRESS MAY BE INDEXED.
001740,000367:
001741,000368: # 2. STODL STORE MPAC AND RE-LOAD IT IN DP WITH THE NEXT ADDRESS (THE LOAD MAY BE INDEXED).
001742,000369: # 3. STOVL STORE MPAC AND RE-LOAD A VECTOR (AS ABOVE).
001743,000370: # 4. STCALL STORE AND DO A CALL (BOTH ADDRESSES MUST BE DIRECT HERE).
001744,000371:
001745,000372: # STODL AND STOVL WILL TAKE FROM THE PUSH-DOWN LIST IF NO LOAD ADDRESS IS GIVEN.
001746,000373:
001747,000374:
001748,000375:
001749,000376: 6327 30151 STADR CA BANKSET # THE STADR CODE (PUSHUP UP ON STORE
001750,000377: 6330 54004 TS FBANK # ADDRESS) ENTERS HERE.
001751,000378: 6331 24150 INCR LOC
001752,000379: 6332 50150 ITR1 INDEX LOC # THE STORECODE WAS STORED COMPLEMENTED TO
001753,000380: 6333 40000 CS 0 # MAKE IT LOOK LIKE AN OPCODE PAIR.
001754,000381: 6334 67677 AD NEGONE # (YUL CANT REMOVE 1 BECAUSE OF EARLY CCS)
001755,000382:
001756,000383: 6335 54102 DOSTORE TS ADDRWD
001757,000384: 6336 75226 MASK LOW11 # ENTRY FROM DISPATCHER. SAVE THE ERASABLE
001758,000385: 6337 56102 XCH ADDRWD # ADDRESS AND JUMP ON THE STORE CODE NO.
001759,000386: 6340 74513 MASK B12T14
001760,000387: 6341 00006 EXTEND
001761,000388: 6342 77665 MP BIT5 # EACH TRANSFER VECTOR ENTRY IS TWO WORDS.
001762,000389:
001763,000390: 6343 54023 TS EDOP # MAYBE 2ND OP WAS LEFT OVER FROM BRANCH
001764,000391: 6344 50000 ITR0 INDEX A
001765,000392: 6345 16346 TCF STORJUMP
001766,000393:
001767,000394: # STORE CODE JUMP TABLE. CALLS THE APPROPRIATE STORING ROUTINE AND EXITS TO DANZIG OR TO ADDRESS WITH
001768,000395: # A SUPPLIED OPERATION CODE.
001769,000396:
001770,000397: 6346 06376 STORJUMP TC STORE # STORE.
001771,000398: 6347 16020 TCF NEWOPS -1 # PICK UP NEW OP CODE(S).
001772,000399: 6350 06370 TC STORE,1
001773,000400: 6351 16020 TCF NEWOPS -1
001774,000401: 6352 06373 TC STORE,2
001775,000402: 6353 16020 TCF NEWOPS -1
001776,000403:
001777,000404: 6354 06376 TC STORE # STODL.
001778,000405: 6355 16434 TCF DODLOAD
001779,000406:
001780,000407: 6356 06376 TC STORE # STODL WITH INDEXED LOAD ADDRESS.
001781,000408: 6357 16075 TCF DODLOAD*
001782,000409:
001783,000410: 6360 06376 TC STORE # STOVL.
001784,000411: 6361 16437 TCF DOVLOAD
001785,000412:
001786,000413: 6362 06376 TC STORE # STOVL WITH INDEXED LOAD ADDRESS.
001787,000414: 6363 16442 TCF DOVLOAD*
001788,000415: 6364 06376 TC STORE # STOTC.
001789,000416: 6365 37705 CAF CALLCODE
001790,000417: 6366 54020 TS CYR
001791,000418: 6367 16203 TCF 15BITADR # GET A 15 BIT ADDRESS.
001792,000419:
001793,000420: # STORE CODE ADDRESS PROCESSOR.
001794,000421:
001795,000422: 6370 50104 STORE,1 INDEX FIXLOC
001796,000423: 6371 40046 CS X1
001797,000424: 6372 16375 TCF PRESTORE
001798,000425:
001799,000426: 6373 50104 STORE,2 INDEX FIXLOC
001800,000427: 6374 40047 CS X2
001801,000428: 6375 26102 PRESTORE ADS ADDRWD # RESULTANT ADDRESS IS IN ERASABLE.
001802,000429:
001803,000430: 6376 40102 STORE CS ADDRWD
001804,000431: 6377 67712 AD DEC45
001805,000432: 6400 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
001806,000433: 6401 30104 CA FIXLOC # YES.
001807,000434: 6402 16407 TCF AHEAD5
001808,000435: 6403 35230 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
001809,000436: 6404 56102 XCH ADDRWD
001810,000437: 6405 54003 TS EBANK
001811,000438:
001812,000439: 6406 75227 MASK LOW8
001813,000440: 6407 26102 AHEAD5 ADS ADDRWD
001814,000441:
001815,000442: # STORING ROUTINES. STORE DP, TP, OR VECTOR AS INDICATED BY MODE.
001816,000443:
001817,000444: 6410 00006 STARTSTO EXTEND # MPAC,+1 MUST BE STORED IN ANY EVENT.
001818,000445: # ITRACE (5) REFERS TO "STARTSTO".
001819,000446: 6411 30141 DCA MPAC
001820,000447: 6412 50102 INDEX ADDRWD
001821,000448: 6413 52001 DXCH 0
001822,000449:
001823,000450: 6414 10147 CCS MODE
001824,000451: 6415 16430 TCF TSTORE
001825,000452: 6416 00002 TC Q
001826,000453:
001827,000454: 6417 00006 VSTORE EXTEND
001828,000455: 6420 30144 DCA MPAC +3
001829,000456: 6421 50102 INDEX ADDRWD
001830,000457: 6422 52003 DXCH 2
001831,000458:
001832,000459: 6423 00006 EXTEND
001833,000460: 6424 30146 DCA MPAC +5
001834,000461: 6425 50102 INDEX ADDRWD
001835,000462: 6426 52005 DXCH 4
001836,000463: 6427 00002 TC Q
001837,000464:
001838,000465: 6430 30142 TSTORE CA MPAC +2
001839,000466: 6431 50102 INDEX ADDRWD
001840,000467: 6432 54002 TS 2
001841,000468: 6433 00002 TC Q
001842,000469:
001843,000470: # ROUTINES TO BEGIN PROCESSING OF THE SECOND ADDRESS ASSOCIATED WITH ALL STORE-TYPE CODES EXCEPT STORE
001844,000471: # ITSELF.
001845,000472:
001846,000473: 6434 37706 DODLOAD CAF DLOADCOD
001847,000474: 6435 54020 TS CYR
001848,000475: 6436 16037 TCF DIRADRES # GO GET A DIRECT ADDRESS.
001849,000476:
001850,000477: 6437 37653 DOVLOAD CAF VLOADCOD
001851,000478: 6440 54020 TS CYR
001852,000479: 6441 16037 TCF DIRADRES
001853,000480:
001854,000481: 6442 36040 DOVLOAD* CAF VLOAD*
001855,000482: 6443 16076 TCF DODLOAD* +1 # PROLOGUE TO INDEX ROUTINE.
001856,000483:
001857,000484: # THE FOLLOWING LOAD INSTRUCTIONS ARE PROVIDED FOR LOADING THE MULTI-PURPOSE ACCUMULATOR MPAC.
001858,000485:
001859,000486: 6444 00006 DLOAD EXTEND
001860,000487: 6445 50102 INDEX ADDRWD
001861,000488: 6446 30001 DCA 0 # PICK UP DP ARGUMENT AND LEAVE IT IN
001862,000489: 6447 52141 SLOAD2 DXCH MPAC # MPAC,+1, SETTING MPAC +2 TO ZERO. THE
001863,000490: 6450 37675 CAF ZERO # CONTENTS OF THE OTHER FOUR REGISTERS OF
001864,000491: 6451 54142 TS MPAC +2 # MPAC ARE IRRELEVANT.
001865,000492: 6452 16011 TCF NEWMODE # DECLARE DOUBLE PRECISION MODE.
001866,000493:
001867,000494: 6453 50102 TLOAD INDEX ADDRWD
001868,000495: 6454 30002 CA 2 # LOAD A TRIPLE PRECISION ARGUMENT INTO
001869,000496: 6455 54142 TS MPAC +2 # THE FIRST THREE MPAC REGISTERS, WITH THE
001870,000497: 6456 00006 EXTEND # CONTENTS OF THE OTHER FOUR IRRELEVANT.
001871,000498: 6457 50102 INDEX ADDRWD
001872,000499: 6460 30001 DCA 0
001873,000500: 6461 52141 DXCH MPAC
001874,000501: 6462 37671 CAF ONE
001875,000502: 6463 16011 TCF NEWMODE # DECLARE TRIPLE PRECISION MODE.
001876,000503:
001877,000504: 6464 22007 SLOAD ZL # LOAD A SINGLE PRECISION NUMBER INTO
001878,000505: 6465 50102 INDEX ADDRWD # MPAC, SETTING MPAC+1,2 TO ZERO. THE
001879,000506: 6466 30000 CA 0 # CONTENTS OF THE REMAINING MPAC REGISTERS
001880,000507: 6467 16447 TCF SLOAD2 # ARE IRRELEVANT.
001881,000508:
001882,000509: 6470 00006 VLOAD EXTEND # LOAD A DOUBLE PRECISION VECTOR INTO
001883,000510: 6471 50102 INDEX ADDRWD # MPAC,+1, MPAC+3,4, AND MPAC+5,6. THE
001884,000511: 6472 30001 DCA 0 # CONTENTS OF MPAC +2 ARE IRRELEVANT.
001885,000512: 6473 52141 DXCH MPAC
001886,000513:
001887,000514: 6474 00006 ENDVLOAD EXTEND # PDVL COMES HERE TO FINISH UP FOR DP, TP.
001888,000515: 6475 50102 INDEX ADDRWD
001889,000516: 6476 30003 DCA 2
001890,000517: 6477 52144 DXCH MPAC +3
001891,000518:
001892,000519: 6500 00006 +4 EXTEND # TPDVL FINISHES HERE.
001893,000520: 6501 50102 INDEX ADDRWD
001894,000521: 6502 30005 DCA 4
001895,000522: 6503 52146 DXCH MPAC +5
001896,000523:
001897,000524: 6504 47671 CS ONE # DECLARE VECTOR MODE.
001898,000525: 6505 16011 TCF NEWMODE
001899,000526:
001900,000527: # THE FOLLOWING INSTRUCTIONS ARE PROVIDED FOR STORING OPERANDS IN THE PUSHDOWN LIST:
001901,000528:
001902,000529: # 1. PUSH PUSHDOWN AND NO LOAD.
001903,000530: # 2. PDDL PUSHDOWN AND DOUBLE PRECISION LOAD.
001904,000531: # 3. PDVL PUSHDOWN AND VECTOR LOAD.
001905,000532:
001906,000533: 6506 00006 PDDL EXTEND
001907,000534: 6507 50102 INDEX ADDRWD # LOAD MPAC,+1, PUSHING THE FORMER
001908,000535: 6510 30001 DCA 0 # CONTENTS DOWN.
001909,000536: 6511 52141 DXCH MPAC
001910,000537: 6512 50152 INDEX PUSHLOC
001911,000538: 6513 52001 DXCH 0
001912,000539:
001913,000540: 6514 50147 INDEX MODE # ADVANCE THE PUSHDOWN POINTER APPRO-
001914,000541: 6515 36175 CAF NO.WDS # PRIATELY.
001915,000542: 6516 26152 ADS PUSHLOC
001916,000543:
001917,000544: 6517 10147 CCS MODE
001918,000545: 6520 16535 TCF ENDTPUSH
001919,000546: 6521 16533 TCF ENDDPUSH
001920,000547:
001921,000548: 6522 54147 TS MODE # NOW DP.
001922,000549: 6523 54142 ENDVPUSH TS MPAC +2
001923,000550: 6524 52144 DXCH MPAC +3 # PUSH DOWN THE REST OF THE VECTOR HERE.
001924,000551: 6525 50152 INDEX PUSHLOC
001925,000552: 6526 51775 DXCH 0 -4
001926,000553:
001927,000554: 6527 52146 DXCH MPAC +5
001928,000555: 6530 50152 INDEX PUSHLOC
001929,000556: 6531 51777 DXCH 0 -2
001930,000557:
001931,000558: 6532 16012 TCF DANZIG
001932,000559:
001933,000560: 6533 54142 ENDDPUSH TS MPAC +2 # SET MPAC +2 TO ZERO AND EXIT ON DP.
001934,000561: 6534 16012 TCF DANZIG
001935,000562:
001936,000563: 6535 54147 ENDTPUSH TS MODE
001937,000564: 6536 56142 XCH MPAC +2 # ON TRIPLE, SET MPAC +2 TO ZERO, PUSHING
001938,000565: 6537 50152 +2 INDEX PUSHLOC # DOWN THE OLD CONTENTS
001939,000566: 6540 53777 TS 0 -1
001940,000567: 6541 16012 TCF DANZIG
001941,000568:
001942,000569: # PDVL - PUSHDOWN AND VECTOR LOAD.
001943,000570:
001944,000571: 6542 00006 PDVL EXTEND # RELOAD MPAC AND PUSH DOWN ITS CONTENTS.
001945,000572: 6543 50102 INDEX ADDRWD
001946,000573: 6544 30001 DCA 0
001947,000574: 6545 52141 DXCH MPAC
001948,000575: 6546 50152 INDEX PUSHLOC
001949,000576: 6547 52001 DXCH 0
001950,000577:
001951,000578: 6550 50147 INDEX MODE # ADVANCE THE PUSHDOWN POINTER.
001952,000579: 6551 36175 CAF NO.WDS
001953,000580: 6552 26152 ADS PUSHLOC
001954,000581:
001955,000582: 6553 10147 CCS MODE # TEST PAST MODE.
001956,000583: 6554 16573 TCF TPDVL
001957,000584: 6555 16474 TCF ENDVLOAD # JUST LOAD LAST FOUR REGISTERS ON DP.
001958,000585:
001959,000586: 6556 00006 VPDVL EXTEND # PUSHDOWN AND RE-LOAD LAST TWO COMPONENTS
001960,000587: 6557 50102 INDEX ADDRWD
001961,000588: 6560 30003 DCA 2
001962,000589: 6561 52144 DXCH MPAC +3
001963,000590: 6562 50152 INDEX PUSHLOC
001964,000591: 6563 51775 DXCH 0 -4
001965,000592:
001966,000593: 6564 00006 EXTEND
001967,000594: 6565 50102 INDEX ADDRWD
001968,000595: 6566 30005 DCA 4
001969,000596: 6567 52146 DXCH MPAC +5
001970,000597: 6570 50152 INDEX PUSHLOC
001971,000598: 6571 51777 DXCH 0 -2
001972,000599:
001973,000600: 6572 16012 TCF DANZIG
001974,000601:
001975,000602: 6573 00006 TPDVL EXTEND # ON TP, WE MUST LOAD THE Y COMPONENT
001976,000603: 6574 50102 INDEX ADDRWD # BEFORE STORING MPAC +2 INCASE THIS IS A
001977,000604:
001978,000605: 6575 30003 DCA 2 # PUSHUP.
001979,000606: 6576 52144 DXCH MPAC +3
001980,000607:
001981,000608: 6577 30142 CA MPAC +2
001982,000609: 6600 50152 INDEX PUSHLOC # IN DP.
001983,000610: 6601 53777 TS 0 -1
001984,000611: 6602 16500 TCF ENDVLOAD +4
001985,000612:
001986,000613: # SSP (STORE SINGLE PRECISION) IS EXECUTED HERE.
001987,000614:
001988,000615: 6603 24150 SSP INCR LOC # PICK UP THE WORD FOLLOWING THE GIVEN
001989,000616: 6604 50150 INDEX LOC # ADDRESS AND STORE IT AT X.
001990,000617: 6605 30000 CA 0
001991,000618: 6606 50102 STORE1 INDEX ADDRWD # SOME INDEX AND MISCELLANEOUS OPS END
001992,000619: 6607 54000 TS 0 # HERE.
001993,000620:
001994,000621: 6610 16012 TCF DANZIG
001995,000622:
001996,000623: # SEQUENCE CHANGING AND SUBROUTINE CALLING OPTIONS.
001997,000624:
001998,000625: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR SEQUENCING CHANGING, BRANCHING, AND CALLING SUBROUTINES:
001999,000626:
002000,000627: # 1. GOTO GO TO.
002001,000628: # 2. CALL CALL SUBROUTINE SETTING QPRET.
002002,000629: # 3. CGOTO COMPUTED GO TO.
002003,000630: # 4. CCALL COMPUTED CALL.
002004,000631: # 7. BPL BRANCH IF MPAC POSITIVE OR ZERO.
002005,000632: # 8. BZE BRANCH IF MPAC ZERO.
002006,000633: # 9. BMN BRANCH IF MPAC NEGATIVE NON-ZERO.
002007,000634:
002008,000635: 6611 24150 CCALL INCR LOC # MAINTAIN LOC FOR QPRET COMPUTATION.
002009,000636: 6612 50150 INDEX LOC
002010,000637: 6613 30000 CAF 0 # GET BASE ADDRESS OF CADR LIST.
002011,000638: 6614 50102 INDEX ADDRWD
002012,000639: 6615 60000 AD 0 # ADD INCREMENT.
002013,000640: 6616 54004 TS FBANK # SELECT DESIRED CADR.
002014,000641: 6617 77701 MASK LOW10
002015,000642: 6620 50000 INDEX A
002016,000643: 6621 32000 CAF 10000
002017,000644: 6622 54103 TS POLISH
002018,000645:
002019,000646: 6623 30151 CALL CA BANKSET # FOR ANY OF THE CALL OPTIONS, MAKE UP THE
002020,000647:
002021,000648: 6624 76226 MASK BANKMASK # ADDRESS OF THE NEXT OP-CODE PAIR/STORE
002022,000649: 6625 66226 AD BANKMASK # CODE AND LEAVE IT IN QPRET. NOTE THAT
002023,000650: 6626 60150 AD LOC # BANKMASK = -(2000 - 1).
002024,000651: 6627 50104 INDEX FIXLOC
002025,000652: 6630 54052 TS QPRET
002026,000653:
002027,000654: 6631 30103 GOTO CA POLISH # BASIC BRANCHING SEQUENCE.
002028,000655: 6632 77711 +1 MASK HIGH4
002029,000656: 6633 00006 EXTEND
002030,000657: 6634 16645 BZF GOTOERS # SEE IF ADDRESS POINTS TO FIXED OR ERAS.
002031,000658: 6635 30151 +4 CA BANKSET # SET EBANK PART OF BBANK. NEXT, SET UP
002032,000659: 6636 54006 TS BBANK # FBANK. THE COMBINATION IS PICKED UP &
002033,000660:
002034,000661: 6637 30103 CA POLISH # PUT INTO BANKSET AT INTPRET +2.
002035,000662: 6640 54004 TS FBANK
002036,000663: 6641 77701 MASK LOW10
002037,000664: 6642 67657 AD 2K
002038,000665: 6643 54150 TS LOC
002039,000666: 6644 16002 TCF INTPRET +2
002040,000667:
002041,000668: 6645 E3,1400 EBANK= 1400 # SO YUL DOESN'T CUSS THE "CA 1400" BELOW.
002042,000669:
002043,000670: 6645 30103 GOTOERS CA POLISH # THE GIVEN ADDRESS IS IN ERASABLE - SEE
002044,000671: 6646 66202 AD -ENDVAC # IF RELATIVE TO THE WORK AREA.
002045,000672: 6647 10000 CCS A
002046,000673: 6650 30103 CA POLISH # GENERAL ERASABLE.
002047,000674:
002048,000675: 6651 16660 TCF GOTOGE
002049,000676:
002050,000677: 6652 30104 CA FIXLOC # WORK AREA.
002051,000678: 6653 60103 AD POLISH
002052,000679: 6654 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
002053,000680: 6655 30000 CA 0 # THE BRANCH ADDRESS.
002054,000681: 6656 54103 TS POLISH
002055,000682: 6657 16632 TCF GOTO +1 # ALLOWS ARBITRARY INDIRECTNESS LEVELS.
002056,000683:
002057,000684: 6660 54003 GOTOGE TS EBANK
002058,000685: 6661 75227 MASK LOW8
002059,000686: 6662 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
002060,000687:
002061,000688: 6663 31400 CA 1400 # THE BRANCH ADDRESS.
002062,000689: 6664 54103 TS POLISH
002063,000690: 6665 16632 TCF GOTO +1
002064,000691:
002065,000692: 6666 50150 CGOTO INDEX LOC # COMPUTED GO TO. PICK UP ADDRESS OF CADR
002066,000693: 6667 30001 CA 1 # LIST.
002067,000694: 6670 50102 INDEX ADDRWD # ADD MODIFIER.
002068,000695: 6671 60000 AD 0
002069,000696: 6672 54004 TS FBANK # SELECT GOTO ADDRESS.
002070,000697: 6673 77701 MASK LOW10
002071,000698: 6674 50000 INDEX A
002072,000699: 6675 32000 CA 10000
002073,000700: 6676 54103 TS POLISH
002074,000701: 6677 16632 TCF GOTO +1 # WITH ADDRESS IN A.
002075,000702:
002076,000703: 6700 30151 SWBRANCH CA BANKSET # SWITCH INSTRUCTIONS WHICH ELECT TO
002077,000704: 6701 54004 TS FBANK # BRANCH COME HERE TO DO SO.
002078,000705: 6702 50150 INDEX LOC
002079,000706: 6703 30001 CA 1
002080,000707: 6704 54103 TS POLISH
002081,000708: 6705 16632 TCF GOTO +1
002082,000709:
002083,000710:
002084,000711: # TRIPLE PRECISION BRANCHING ROUTINE. IF CALLING TC IS AT L, RETURN IS AS FOLLOWS:
002085,000712: # L+1 IF MPAC IS GREATER THAN ZERO.
002086,000713: # L+2 IF MPAC IS EQUAL TO +0 OR -0.
002087,000714: # L+3 IF MPAC IS LESS THAN ZERO.
002088,000715:
002089,000716:
002090,000717:
002091,000718: 6706 10140 BRANCH CCS MPAC
002092,000719: 6707 00002 TC Q
002093,000720: 6710 16712 TCF +2 # ON ZERO.
002094,000721: 6711 16724 TCF NEG
002095,000722:
002096,000723: 6712 10141 CCS MPAC +1
002097,000724: 6713 00002 TC Q
002098,000725: 6714 16716 TCF +2
002099,000726: 6715 16724 TCF NEG
002100,000727:
002101,000728: 6716 10142 CCS MPAC +2
002102,000729: 6717 00002 TC Q
002103,000730: 6720 16722 TCF +2
002104,000731: 6721 16724 TCF NEG
002105,000732:
002106,000733: 6722 50002 Q+1 INDEX Q
002107,000734:
002108,000735: 6723 00001 TC 1
002109,000736:
002110,000737: 6724 50002 NEG INDEX Q # IF FIRST NON-ZERO REGISTER WAS NEGATIVE.
002111,000738: 6725 00002 TC 2
002112,000739:
002113,000740:
002114,000741:
002115,000742: 6726 6724 Q+2 = NEG
002116,000743:
002117,000744: # ITRACE (3) REFERS TO "EXIT".
002118,000745:
002119,000746: 6726 30151 EXIT CA BANKSET # RESTORE USER'S BANK SETTING, AND LEAVE
002120,000747: 6727 54006 TS BBANK # INTERPRETIVE MODE.
002121,000748: 6730 50150 INDEX LOC
002122,000749: 6731 10001 TCF 1
002123,000750:
002124,000751: # SECTION 3 - ADD/SUBTRACT PACKAGE.
002125,000752:
002126,000753: # THE FOLLOWING OPERATIONS ARE PROVIDED FOR ADDING TO AND SUBTRACTING FROM THE MULTI-PURPOSE ACCUMULATOR
002127,000754: # MPAC:
002128,000755:
002129,000756: # 1. DAD DOUBLE PRECISION ADD.
002130,000757: # 2. DSU DOUBLE PRECISION SUBTRACT.
002131,000758: # 3. BDSU DOUBLE PRECISION SUBTRACT FROM.
002132,000759:
002133,000760:
002134,000761: # 4. TAD TRIPLE PRECISION ADD.
002135,000762:
002136,000763: # 5. VAD VECTOR ADD.
002137,000764: # 6. VSU VECTOR SUBTRACT.
002138,000765: # 7. BVSU VECTOR SUBTRACT FROM.
002139,000766:
002140,000767: # THE INTERPRETIVE OVERFLOW INDICATOR OVFIND IS SET NON-ZERO IF OVERFLOW OCCURS IN ANY OF THE ABOVE.
002141,000768:
002142,000769:
002143,000770:
002144,000771: 6732 00006 VAD EXTEND
002145,000772: 6733 50102 INDEX ADDRWD
002146,000773: 6734 30003 DCA 2
002147,000774: 6735 20144 DAS MPAC +3
002148,000775: 6736 00006 EXTEND # CHECK OVERFLOW.
002149,000776: 6737 16741 BZF +2
002150,000777: 6740 07006 TC OVERFLOW
002151,000778:
002152,000779: 6741 00006 EXTEND
002153,000780: 6742 50102 INDEX ADDRWD
002154,000781: 6743 30005 DCA 4
002155,000782: 6744 20146 DAS MPAC +5
002156,000783: 6745 00006 EXTEND
002157,000784: 6746 16750 BZF +2
002158,000785: 6747 07006 TC OVERFLOW
002159,000786:
002160,000787: 6750 00006 DAD EXTEND
002161,000788: 6751 50102 INDEX ADDRWD
002162,000789: 6752 30001 DCA 0
002163,000790: 6753 20141 ENDVXV DAS MPAC # VXV FINISHES HERE.
002164,000791: 6754 00006 EXTEND
002165,000792: 6755 16012 BZF DANZIG
002166,000793: 6756 07006 TC OVERFLOW
002167,000794: 6757 16012 TCF DANZIG
002168,000795:
002169,000796: 6760 00006 VSU EXTEND
002170,000797:
002171,000798: 6761 50102 INDEX ADDRWD
002172,000799: 6762 40003 DCS 2
002173,000800: 6763 20144 DAS MPAC +3
002174,000801: 6764 00006 EXTEND
002175,000802: 6765 16767 BZF +2
002176,000803: 6766 07006 TC OVERFLOW
002177,000804:
002178,000805: 6767 00006 EXTEND
002179,000806: 6770 50102 INDEX ADDRWD
002180,000807: 6771 40005 DCS 4
002181,000808: 6772 20146 DAS MPAC +5
002182,000809: 6773 00006 EXTEND
002183,000810:
002184,000811: 6774 16776 BZF +2
002185,000812: 6775 07006 TC OVERFLOW
002186,000813:
002187,000814: 6776 00006 DSU EXTEND
002188,000815: 6777 50102 INDEX ADDRWD
002189,000816: 7000 40001 DCS 0
002190,000817: 7001 20141 DAS MPAC
002191,000818: 7002 00006 EXTEND
002192,000819: 7003 16012 BZF DANZIG
002193,000820: 7004 07006 TC OVERFLOW
002194,000821:
002195,000822: 7005 16012 TCF DANZIG
002196,000823:
002197,000824: 7006 37671 OVERFLOW CAF ONE # SUBROUTINE TO TURN OVFIND ON.
002198,000825: 7007 17131 TCF SETOVF2
002199,000826:
002200,000827: 7010 00006 BVSU EXTEND
002201,000828: 7011 50102 INDEX ADDRWD
002202,000829: 7012 30003 DCA 2
002203,000830: 7013 52144 DXCH MPAC +3
002204,000831: 7014 00006 EXTEND
002205,000832: 7015 40001 DCOM
002206,000833: 7016 20144 DAS MPAC +3
002207,000834: 7017 00006 EXTEND
002208,000835: 7020 17022 BZF +2
002209,000836: 7021 07006 TC OVERFLOW
002210,000837:
002211,000838: 7022 00006 EXTEND
002212,000839: 7023 50102 INDEX ADDRWD
002213,000840: 7024 30005 DCA 4
002214,000841: 7025 52146 DXCH MPAC +5
002215,000842: 7026 00006 EXTEND
002216,000843: 7027 40001 DCOM
002217,000844: 7030 20146 DAS MPAC +5
002218,000845: 7031 00006 EXTEND
002219,000846: 7032 17034 BZF +2
002220,000847: 7033 07006 TC OVERFLOW
002221,000848:
002222,000849: 7034 00006 BDSU EXTEND
002223,000850: 7035 50102 INDEX ADDRWD
002224,000851: 7036 30001 DCA 0
002225,000852: 7037 52141 DXCH MPAC
002226,000853: 7040 00006 EXTEND
002227,000854: 7041 40001 DCOM
002228,000855:
002229,000856: 7042 20141 DAS MPAC
002230,000857: 7043 00006 EXTEND
002231,000858: 7044 16012 BZF DANZIG
002232,000859: 7045 07006 TC OVERFLOW
002233,000860: 7046 16012 TCF DANZIG
002234,000861:
![]() |
Page 920 |
002236,000863: # TRIPLE PRECISION ADD ROUTINE.
002237,000864:
002238,000865: 7047 00006 TAD EXTEND
002239,000866: 7050 50102 INDEX ADDRWD
002240,000867: 7051 30002 DCA 1 # ADD MINOR PARTS FIRST.
002241,000868: 7052 20142 DAS MPAC +1
002242,000869: 7053 50102 INDEX ADDRWD
002243,000870: 7054 60000 AD 0
002244,000871: 7055 60140 AD MPAC
002245,000872: 7056 54140 TS MPAC
002246,000873: 7057 16012 TCF DANZIG
002247,000874:
002248,000875: 7060 54105 SETOVF TS OVFIND # SET OVFIND IF SUCH OCCURS.
002249,000876: 7061 16012 TCF DANZIG
002250,000877:
002251,000878: # ARITHMETIC SUBROUTINES REQUIRED IN FIXED-FIXED.
002252,000879:
002253,000880: # 1. DMPSUB DOUBLE PRECISION MULTIPLY. MULTIPLY THE CONTENTS OF MPAC,+1 BY THE DP WORD WHOSE ADDRESS
002254,000881: # IS IN ADDRWD AND LEAVE A TRIPLE PRECISION RESULT IN MPAC.
002255,000882: # 2. ROUNDSUB ROUND THE TRIPLE PRECISON CONTENTS OF MPAC TO DOUBLE PRECISION.
002256,000883: # 3. DOTSUB TAKE THE DOT PRODUCT OF THE VECTOR IN MPAC AND THE VECTOR WHOSE ADDRESS IS IN ADDRWD
002257,000884: # AND LEAVE THE TRIPLE PRECISION RESULT IN MPAC.
002258,000885: # 4. POLY USING THE CONTENTS OF MPAC AS A DP ARGUMENT, EVALUATE THE POLYNOMIAL WHOSE DEGREE AND
002259,000886: # COEFFICIENTS IMMEDIATELY FOLLOW THE TC POLY INSTRUCTION (SEE ROUTINE FOR DETAILS.)
002260,000887:
002261,000888:
002262,000889:
002263,000890: 7062 50002 DMP INDEX Q # BASIC SUBROUTINE FOR USE BY PINBALL, ETC
002264,000891: 7063 30000 CAF 0 # ADRES OF ARGUMENT FOLLOWS TC DMP .
002265,000892: 7064 24002 INCR Q
002266,000893: 7065 54102 -1 TS ADDRWD # (PROLOGUE FOR SETTING ADDRWD.)
002267,000894:
002268,000895: 7066 50102 DMPSUB INDEX ADDRWD # GET MINOR PART OF OPERAND AT C(ADDRWD).
002269,000896: 7067 30001 CA 1
002270,000897: 7070 54142 TS MPAC +2 # THIS WORKS FOR SQUARING MPAC AS WELL.
002271,000898: 7071 37675 CAF ZERO # SET MPAC +1 TO ZERO SO WE CAN ACCUMULATE
002272,000899: 7072 56141 XCH MPAC +1 # THE PARTIAL PRODUCTS WITH DAS
002273,000900: 7073 54121 TS MPTEMP # INSTRUCTIONS.
002274,000901: 7074 00006 EXTEND
002275,000902: 7075 70142 MP MPAC +2 # MINOR OF MPAC X MINOR OF C(ADDRWD).
002276,000903:
002277,000904: 7076 56142 XCH MPAC +2 # DISCARD MINOR PART OF ABOVE RESULT AND
002278,000905: 7077 00006 EXTEND # FORM MAJOR OF MPAC X MINOR OF C(ADDRWD).
002279,000906: 7100 70140 MP MPAC
002280,000907: 7101 20142 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
002281,000908:
002282,000909: 7102 50102 INDEX ADDRWD # GET MAJOR PART OF ARGUMENT AT C(ADDRWD).
002283,000910: 7103 30000 CA 0
002284,000911: 7104 56121 XCH MPTEMP # SAVE AND BRING OUT MINOR OF MPAC.
002285,000912: 7105 00006 EXTEND
002286,000913: 7106 70121 MP MPTEMP # MAJOR OF C(ADDRWD) X MINOR OF MPAC.
002287,000914: 7107 20142 DAS MPAC +1 # ACCUMULATE, SETTING A TO NET OVERFLOW.
002288,000915:
002289,000916: 7110 56140 XCH MPAC # SETTING MPAC TO 0 OR +-1.
002290,000917: 7111 00006 EXTEND
002291,000918: 7112 70121 MP MPTEMP # MAJOR OF MPAC X MAJOR OF C(ADDRWD).
002292,000919: 7113 20141 DAS MPAC # GUARANTEED NO OVERFLOW.
002293,000920: 7114 00002 TC Q # 49 MCT = .573 MS. INCLUDING RETURN.
002294,000921:
002295,000922: # ROUND MPAC TO DOUBLE PRECISION, SETTING OVFIND ON THE RARE EVENT OF OVERFLOW.
002296,000923:
002297,000924: 7115 37675 ROUNDSUB CAF ZERO # SET MPAC +2 = 0 FOR SCALARS AND CHANGE
002298,000925: 7116 54147 +1 TS MODE # MODE TO DP.
002299,000926:
002300,000927: 7117 56142 VROUND XCH MPAC +2 # BUT WE NEEDNT TAKE THE TIME FOR VECTORS.
002301,000928: 7120 60000 DOUBLE
002302,000929: 7121 54001 TS L
002303,000930: 7122 00002 TC Q
002304,000931:
002305,000932: 7123 60141 AD MPAC +1 # ADD ROUNDING BIT IF MPAC +2 WAS GREATER
002306,000933: 7124 54141 TS MPAC +1 # THAN .5 IN MAGNITUDE.
002307,000934: 7125 00002 TC Q
002308,000935:
002309,000936: 7126 60140 AD MPAC # PROPAGATE INTERFLOW.
002310,000937: 7127 54140 TS MPAC
002311,000938: 7130 00002 TC Q
002312,000939:
002313,000940: 7131 54105 SETOVF2 TS OVFIND # (RARE).
002314,000941: 7132 00002 TC Q
002315,000942:
002316,000943: # THE DOT PRODUCT SUBROUTINE USUALLY FORMS THE DOT PRODUCT OF THE VECTOR IN MPAC WITH A STANDARD SIX
002317,000944: # REGISTER VECTOR WHOSE ADDRESS IS IN ADDRWD. IN THIS CASE C(DOTINC) ARE SET TO 2. VXM, HOWEVER, SETS C(DOTINC) TO
002318,000945: # 6 SO THAT DOTSUB DOTS MPAC WITH A COLUMN VECTOR OF THE MATRIX IN QUESTION IN THIS CASE.
002319,000946:
002320,000947:
002321,000948:
002322,000949: 7133 37670 PREDOT CAF TWO # PROLOGUE TO SET DOTINC TO 2.
002323,000950: 7134 54122 TS DOTINC
002324,000951:
002325,000952: 7135 00006 DOTSUB EXTEND
002326,000953: 7136 22123 QXCH DOTRET # SAVE RETURN.
002327,000954: 7137 07066 TC DMPSUB # DOT X COMPONENTS.
002328,000955: 7140 52144 DXCH MPAC +3 # POSITION Y COMPONENT OF MPAC FOR
002329,000956: 7141 52141 DXCH MPAC # MULTIPLICATION WHILE SAVING RESULT IN
002330,000957: 7142 52115 DXCH BUF # THREE WORD BUFFER, BUF.
002331,000958: 7143 30142 CA MPAC +2
002332,000959: 7144 54116 TS BUF +2
002333,000960:
002334,000961: 7145 30122 CA DOTINC # ADVANCE ADDRWD TO Y COMPONENT OF
002335,000962: 7146 26102 ADS ADDRWD # OTHER ARGUMENT.
002336,000963: 7147 07066 TC DMPSUB
002337,000964: 7150 52142 DXCH MPAC +1 # ACCUMULATE PARTIAL PRODUCTS.
002338,000965: 7151 20116 DAS BUF +1
002339,000966: 7152 60140 AD MPAC
002340,000967: 7153 60114 AD BUF
002341,000968: 7154 54114 TS BUF
002342,000969: 7155 17157 TCF +2
002343,000970: 7156 54105 TS OVFIND # IF OVERFLOW OCCURS.
002344,000971:
002345,000972: 7157 52146 DXCH MPAC +5 # MULTIPLY Z COMPONENTS.
002346,000973: 7160 52141 DXCH MPAC
002347,000974: 7161 30122 CA DOTINC
002348,000975: 7162 26102 ADS ADDRWD
002349,000976: 7163 07066 TC DMPSUB
002350,000977: 7164 52116 ENDDOT DXCH BUF +1 # LEAVE FINAL ACCUMULATION IN MPAC.
002351,000978: 7165 20142 DAS MPAC +1
002352,000979: 7166 60140 AD MPAC
002353,000980: 7167 60114 AD BUF
002354,000981: 7170 54140 TS MPAC
002355,000982: 7171 00123 TC DOTRET
002356,000983:
002357,000984: 7172 54105 TS OVFIND # ON OVERFLOW HERE.
002358,000985: 7173 00123 TC DOTRET
002359,000986:
002360,000987: # DOUBLE PRECISION POLYNOMIAL EVALUATOR
002361,000988:
002362,000989: # N N-1
002363,000990: # THIS ROUTINE EVALUATES A X + A X + ... + A X + A LEAVING THE DP RESULT IN MPAC ON EXIT.
002364,000991: # N N-1 1 0
002365,000992:
002366,000993: # THE ROUTINE HAS TWO ENTRIES
002367,000994:
002368,000995: # 1. ENTRY THRU POWRSERS. THE COEFFICIENTS MAY BE EITHER IN FIXED OR ERASABLE, THE CALL IS BY
002369,000996: # TC POWRSERS, AND THE RETURN IS TO LOC(TC POWRSERS)+1. THE ENTERING DATA MUST BE AS FOLLOWS
002370,000997:
002371,000998: # A SP LOC-3 ADDRESS FOR REFERENCING COEF TABLE
002372,000999: # L SP N-1 N IS THE DEGREE OF THE POWER SERIES
002373,001000: # MPAC DP X ARGUMENT
002374,001001:
002375,001002: # LOC-2N DP A(0)
002376,001003: # ...
002377,001004: # LOC DP A(N)
002378,001005:
002379,001006: # 2. ENTRY THRU POLY. THE CALL TO POLY AND THE ENTERING DATA MUST BE AS FOLLOWS
002380,001007:
002381,001008: # MPAC DP X ARGUMENT
002382,001009:
002383,001010: # LOC TC POLY
002384,001011: # LOC+1 SP N-1
002385,001012: # LOC+2 DP A(0)
002386,001013: # ...
002387,001014: # LOC+2N+2 DP A(N) RETURN IS TO LOC+2N+4
002388,001015:
002389,001016: 7174 00006 POWRSERS EXTEND
002390,001017: 7175 22125 QXCH POLYRET # RETURN ADDRESS
002391,001018: 7176 54103 TS POLISH # POWER SERIES ADDRESS
002392,001019: 7177 22124 LXCH POLYCNT # N-1 TO COUNTER
002393,001020: 7200 17211 TCF POLYCOM # SKIP SET UP BY POLY
002394,001021:
002395,001022: 7201 50002 POLY INDEX Q
002396,001023: 7202 30000 CAF 0
002397,001024: 7203 54124 TS POLYCNT # N-1 TO COUNTER
002398,001025: 7204 60000 DOUBLE
002399,001026: 7205 60002 AD Q
002400,001027: 7206 54103 TS POLISH # L(A(N))-3 TO POLISH
002401,001028: 7207 67674 AD FIVE
002402,001029: 7210 54125 TS POLYRET # STORE RETURN ADDRESS
002403,001030:
002404,001031: 7211 37710 POLYCOM CAF LVBUF # INCOMING X WILL BE MOVED TO VBUF, SO
002405,001032: 7212 54102 TS ADDRWD # SET ADDRWD SO DMPSUB WILL MPY BY VBUF.
002406,001033:
002407,001034: 7213 00006 EXTEND
002408,001035: 7214 50103 INDEX POLISH
002409,001036: 7215 30004 DCA 3
002410,001037:
002411,001038: 7216 52141 DXCH MPAC # LOAD A(N) INTO MPAC,
002412,001039: 7217 52107 DXCH VBUF # SAVING X IN VBUF
002413,001040: 7220 17224 TCF POLY2
002414,001041:
002415,001042: 7221 54124 POLYLOOP TS POLYCNT # SAVE DECREMENTED LOOP COUNTER
002416,001043: 7222 47670 CS TWO
002417,001044: 7223 26103 ADS POLISH # REGRESS COEFFICIENT POINTER
002418,001045:
002419,001046: 7224 07066 POLY2 TC DMPSUB # MULTIPLY BY X
002420,001047: 7225 00006 EXTEND
002421,001048: 7226 50103 INDEX POLISH
002422,001049: 7227 30002 DCA 1 # ADD IN NEXT COEFFICIENT
002423,001050: 7230 20141 DAS MPAC # USERS RESPONSIBILITY TO ASSURE NO OVFLOW
002424,001051:
002425,001052: 7231 10124 CCS POLYCNT
002426,001053: 7232 17221 TCF POLYLOOP
002427,001054: 7233 00125 TC POLYRET # RETURN CALLER
002428,001055:
002429,001056: # MISCELLANEOUS MULTI-PRECISION ROUTINES REQUIRED IN FIXED-FIXED BUT NOT USED BY THE INTERPRETER.
002430,001057:
002431,001058: 7234 00006 TPAGREE EXTEND # FORCE SIGN AGREEMENT AMONG THE TRIPLE-
002432,001059: 7235 22114 QXCH BUF # PRECISION CONTENTS OF MPAC, RETURNING
002433,001060: 7236 06706 TC BRANCH # WITH THE SIGNUM OF THE INPUT IN A.
002434,001061: 7237 17243 TCF ARG+
002435,001062: 7240 17263 TCF ARGZERO
002436,001063:
002437,001064: 7241 47651 CS POSMAX # IF NEGATIVE.
002438,001065: 7242 17244 TCF +2
002439,001066:
002440,001067: 7243 37651 ARG+ CAF POSMAX
002441,001068: 7244 54115 +2 TS BUF +1
002442,001069: 7245 00006 EXTEND
002443,001070: 7246 24000 AUG A # FORMS +-1.0.
002444,001071: 7247 60142 AD MPAC +2
002445,001072: 7250 54142 TS MPAC +2
002446,001073: 7251 37675 CAF ZERO
002447,001074: 7252 60115 AD BUF +1
002448,001075: 7253 60141 AD MPAC +1
002449,001076: 7254 54141 TS MPAC +1
002450,001077: 7255 37675 CAF ZERO
002451,001078: 7256 60115 AD BUF +1
002452,001079: 7257 60140 AD MPAC
002453,001080: 7260 54140 ARGZERO2 TS MPAC # ALWAYS SKIPPING UNLESS ARGZERO.
002454,001081: 7261 54141 TS MPAC +1
002455,001082: 7262 00114 TC BUF # RETURN.
002456,001083:
002457,001084: 7263 54142 ARGZERO TS MPAC +2 # SET ALL THREE MPAC REGISTERS TO ZERO.
002458,001085: 7264 17260 TCF ARGZERO2
002459,001086:
002460,001087: # SHORTMP MULTIPLIES THE TP CONTENTS OF MPAC BY THE SINGLE PRECISION NUMBER ARRIVING IN A.
002461,001088:
002462,001089: 7265 54121 SHORTMP TS MPTEMP
002463,001090: 7266 00006 EXTEND
002464,001091: 7267 70142 MP MPAC +2
002465,001092: 7270 54142 TS MPAC +2
002466,001093: 7271 37675 CAF ZERO # SO SUBSEQUENT DAS WILL WORK.
002467,001094: 7272 56141 XCH MPAC +1
002468,001095: 7273 00006 EXTEND
002469,001096: 7274 70121 MP MPTEMP
002470,001097: 7275 20142 DAS MPAC +1
002471,001098: 7276 56140 XCH MPAC # SETTING MPAC TO 0.
002472,001099: 7277 00006 EXTEND
002473,001100: 7300 70121 MP MPTEMP
002474,001101: 7301 20141 DAS MPAC
002475,001102:
002476,001103: 7302 00002 TC Q
002477,001104:
002478,001105: # DMPNSUB MULTIPLIES THE DP FRACTION ARRIVING IN MPAC BY THE SP
002479,001106: # INTEGER ARRIVING IN A. THE DP PRODUCT DEPARTS BOTH IN MPAC AND IN
002480,001107: # A AND L. NOTE THAT DMPNSUB NORMALLY INCREASES THE MAGNITUDE OF THE
002481,001108: # CONTENTS OF MPAC. THE CUSTOMER MUST INSURE THAT B(A) X B(MPAC,MPAC+1)
002482,001109: # AND B(A) X B(MPAC) ARE LESS THAN 1 IN MAGNITUDE, WHERE B, AS IS OBVIOUS,
002483,001110: # INDICATES THE ARRIVING CONTENTS.
002484,001111:
002485,001112:
002486,001113: 7303 54121 DMPNSUB TS DMPNTEMP
002487,001114: 7304 00006 EXTEND
002488,001115: 7305 70141 MP MPAC +1
002489,001116: 7306 52141 DXCH MPAC # LOW PRODUCT TO MPAC, HIGH FACTOR TO A
002490,001117: 7307 00006 EXTEND
002491,001118: 7310 70121 MP DMPNTEMP
002492,001119: 7311 30001 CA L
002493,001120: 7312 26140 ADS MPAC # COMPLETING THE PRODUCT IN MPAC
002494,001121: 7313 00006 EXTEND
002495,001122: 7314 30141 DCA MPAC # BRINGING THE PRODUCT INTO A AND L
002496,001123: 7315 00002 TC Q
002497,001124:
002498,001125: # MISCELLANEOUS VECTOR OPERATIONS. INCLUDED HERE ARE THE FOLLOWING:
002499,001126:
002500,001127: # 1. DOT DP VECTOR DOT PRODUCT.
002501,001128: # 2. VXV DP VECTOR CROSS PRODUCT.
002502,001129: # 3. VXSC DP VECTOR TIMES SCALAR.
002503,001130: # 4. V/SC DP VECTOR DIVIDED BY SCALAR.
002504,001131: # 5. VPROJ DP VECTOR PROJECTION. ( (MPAC.X)MPAC ).
002505,001132: # 6. VXM DP VECTOR POST-MULTIPLIED BY MATRIX.
002506,001133: # 7. MXV DP VECTOR PRE-MULTIPLIED BY MATRIX.
002507,001134:
002508,001135: 7316 07133 DOT TC PREDOT # DO THE DOT PRODUCT AND EXIT, CHANGING
002509,001136: 7317 37675 CAF ZERO # THE MODE TO DP SCALAR.
002510,001137: 7320 16011 TCF NEWMODE
002511,001138:
002512,001139:
002513,001140:
002514,001141: 7321 37670 MXV CAF TWO # SET UP MATINC AND DOTINC FOR ROW
002515,001142: 7322 54124 TS MATINC # VECTORS.
002516,001143: 7323 17327 TCF VXM/MXV # GO TO COMMON PORTION.
002517,001144:
002518,001145: 7324 45234 VXM CS TEN # SET MATINC AND DOTINC TO REFER TO MATRIX
002519,001146: 7325 54124 TS MATINC # AS THREE COLUMN VECTORS.
002520,001147: 7326 36173 CAF SIX
002521,001148:
002522,001149: # COMMON PORTION OF MXV AND VXM.
002523,001150:
002524,001151: 7327 54122 VXM/MXV TS DOTINC
002525,001152: # ITRACE (2) REFERS TO "VXM/MXV".
002526,001153: 7330 07520 TC MPACVBUF # SAVE VECTOR IN MPAC FOR FURTHER USE.
002527,001154:
002528,001155: 7331 07135 TC DOTSUB # GO DOT TO GET X COMPONENT OF ANSWER.
002529,001156: 7332 00006 EXTEND
002530,001157: 7333 30107 DCA VBUF # MOVE MPAC VECTOR BACK INTO MPAC, SAVING
002531,001158: 7334 52141 DXCH MPAC # NEW X COMPONENT IN BUF2.
002532,001159: 7335 52120 DXCH BUF2
002533,001160: 7336 00006 EXTEND
002534,001161: 7337 30111 DCA VBUF +2
002535,001162: 7340 52144 DXCH MPAC +3
002536,001163: 7341 00006 EXTEND
002537,001164: 7342 30113 DCA VBUF +4
002538,001165: 7343 52146 DXCH MPAC +5
002539,001166: 7344 30124 CA MATINC # INITIALIZE ADDRWD FOR NEXT DOT PRODUCT.
002540,001167: 7345 26102 ADS ADDRWD # FORMS BASE ADDRESS OF NEXT COLUMN(ROW).
002541,001168:
002542,001169: 7346 07135 TC DOTSUB
002543,001170: 7347 52107 DXCH VBUF # MOVE GIVEN VECTOR BACK TO MPAC, SAVING Y
002544,001171: 7350 52141 DXCH MPAC # COMPONENT OF ANSWER IN VBUF +2.
002545,001172: 7351 52111 DXCH VBUF +2
002546,001173: 7352 52144 DXCH MPAC +3
002547,001174: 7353 52113 DXCH VBUF +4
002548,001175: 7354 52146 DXCH MPAC +5
002549,001176: 7355 30124 CA MATINC # FORM ADDRESS OF LAST COLUMN OR ROW.
002550,001177: 7356 26102 ADS ADDRWD
002551,001178:
002552,001179: 7357 07135 TC DOTSUB
002553,001180: 7360 52120 DXCH BUF2 # ANSWER NOW COMPLETE. PUT COMPONENTS INTO
002554,001181: 7361 52141 DXCH MPAC # PROPER MPAC REGISTERS.
002555,001182: 7362 52146 DXCH MPAC +5
002556,001183: 7363 52111 DXCH VBUF +2
002557,001184: 7364 52144 DXCH MPAC +3
002558,001185: 7365 16012 TCF DANZIG # EXIT.
002559,001186:
002560,001187: # VXSC - VECTOR TIMES SCALAR.
002561,001188:
002562,001189: 7366 10147 VXSC CCS MODE # TEST PRESENT MODE.
002563,001190: 7367 17415 TCF DVXSC # SEPARATE ROUTINE WHEN SCALAR IS IN MPAC.
002564,001191: 7370 17415 TCF DVXSC
002565,001192:
002566,001193: 7371 07066 VVXSC TC DMPSUB # COMPUTE X COMPONENT
002567,001194: 7372 07117 TC VROUND # AND ROUND IT.
002568,001195: 7373 52144 DXCH MPAC +3 # PUT Y COMPONENT INTO MPAC SAVING MPAC IN
002569,001196: 7374 52141 DXCH MPAC # MPAC +3.
002570,001197: 7375 52144 DXCH MPAC +3
002571,001198:
002572,001199: 7376 07066 TC DMPSUB # DO SAME FOR Y AND Z COMPONENTS.
002573,001200: 7377 07117 TC VROUND
002574,001201: 7400 52146 DXCH MPAC +5
002575,001202: 7401 52141 DXCH MPAC
002576,001203: 7402 52146 DXCH MPAC +5
002577,001204:
002578,001205: 7403 07066 TC DMPSUB
002579,001206: 7404 07117 TC VROUND
002580,001207: 7405 52141 VROTATEX DXCH MPAC # EXIT USED TO RESTORE MPAC AFTER THIS
002581,001208: 7406 52146 DXCH MPAC +5 # TYPE OF ROTATION. CALLED BY VECTOR SHIFT
002582,001209: 7407 52144 DXCH MPAC +3 # RIGHT, V/SC, ETC.
002583,001210: 7410 52141 DXCH MPAC
002584,001211: 7411 16012 TCF DANZIG
002585,001212:
002586,001213: # DP VECTOR PROJECTION ROUTINE.
002587,001214:
002588,001215:
002589,001216:
002590,001217: 7412 07133 VPROJ TC PREDOT # (MPAC.X)MPAC IS COMPUTED AND LEFT IN
002591,001218: 7413 47667 CS FOUR # MPAC. DO DOT AND FALL INTO DVXSC.
002592,001219: 7414 26102 ADS ADDRWD
002593,001220:
002594,001221: # VXSC WHEN SCALAR ARRIVES IN MPAC AND VECTOR IS AT X.
002595,001222:
002596,001223: 7415 00006 DVXSC EXTEND # SAVE SCALAR IN MPAC +3 AND GET X
002597,001224: 7416 30141 DCA MPAC # COMPONENT OF ANSWER.
002598,001225: 7417 52144 DXCH MPAC +3
002599,001226: 7420 07066 TC DMPSUB
002600,001227: 7421 07117 TC VROUND
002601,001228:
002602,001229: 7422 37670 CAF TWO # ADVANCE ADDRWD TO Y COMPONENT OF X.
002603,001230: 7423 26102 ADS ADDRWD
002604,001231: 7424 00006 EXTEND
002605,001232: 7425 30144 DCA MPAC +3 # PUT SCALAR BACK INTO MPAC AND SAVE
002606,001233: 7426 52141 DXCH MPAC # X RESULT IN MPAC +5.
002607,001234: 7427 52146 DXCH MPAC +5
002608,001235: 7430 07066 TC DMPSUB
002609,001236: 7431 07117 TC VROUND
002610,001237:
002611,001238: 7432 37670 CAF TWO
002612,001239: 7433 26102 ADS ADDRWD # TO Z COMPONENT.
002613,001240: 7434 52144 DXCH MPAC +3 # BRING SCALAR BACK, PUTTING Y RESULT IN
002614,001241: 7435 52141 DXCH MPAC # THE PROPER PLACE.
002615,001242: 7436 52144 DXCH MPAC +3
002616,001243: 7437 07066 TC DMPSUB
002617,001244: 7440 07117 TC VROUND
002618,001245:
002619,001246: 7441 52141 DXCH MPAC # PUT Z COMPONENT IN PROPER PLACE, ALSO
002620,001247: 7442 52146 DXCH MPAC +5 # POSITIONING X.
002621,001248: 7443 52141 DXCH MPAC
002622,001249:
002623,001250: 7444 47671 CS ONE # MODE HAS CHANGED TO VECTOR.
002624,001251: 7445 16011 TCF NEWMODE
002625,001252:
002626,001253: # THE VECTOR CROSS PRODUCT ROUTINE CALCULATES (X M -X M ,X M -X M ,X M -X M ) WHERE M IS THE VECTOR IN
002627,001254: # 3 2 2 3 1 3 3 1 2 1 1 2
002628,001255: # MPAC AND X THE VECTOR AT THE GIVEN ADDRESS.
002629,001256:
002630,001257:
002631,001258:
002632,001259: 7446 00006 VXV EXTEND
002633,001260: 7447 30146 DCA MPAC +5 # FORM UP M3X1, LEAVING M1 IN VBUF.
002634,001261: 7450 52141 DXCH MPAC
002635,001262: 7451 52107 DXCH VBUF
002636,001263: 7452 07066 TC DMPSUB # BY X1.
002637,001264:
002638,001265: 7453 00006 EXTEND
002639,001266: 7454 40144 DCS MPAC +3 # CALCULATE -X1M2, SAVING X1M3 IN VBUF +2.
002640,001267: 7455 52141 DXCH MPAC
002641,001268: 7456 52111 DXCH VBUF +2
002642,001269: 7457 07066 TC DMPSUB
002643,001270:
002644,001271: 7460 37670 CAF TWO # ADVANCE ADDRWD TO X2.
002645,001272: 7461 26102 ADS ADDRWD
002646,001273: 7462 00006 EXTEND
002647,001274: 7463 40146 DCS MPAC +5 # PREPARE TO GET -X2M3, SAVING -X1M2 IN
002648,001275: 7464 52141 DXCH MPAC # MPAC +5.
002649,001276: 7465 52146 DXCH MPAC +5
002650,001277: 7466 07066 TC DMPSUB
002651,001278:
002652,001279: 7467 00006 EXTEND
002653,001280: 7470 30107 DCA VBUF # GET X2M1, SAVING -X2M3 IN VBUF +4.
002654,001281: 7471 52141 DXCH MPAC
002655,001282: 7472 52113 DXCH VBUF +4
002656,001283: 7473 07066 TC DMPSUB
002657,001284:
002658,001285: 7474 37670 CAF TWO # ADVANCE ADDRWD TO X3.
002659,001286: 7475 26102 ADS ADDRWD
002660,001287: 7476 00006 EXTEND
002661,001288: 7477 40107 DCS VBUF # GET -X3M1, ADDING X2M1 TO MPAC +5 TO
002662,001289: 7500 52141 DXCH MPAC # COMPLETE THE Z COMPONENT OF THE ANSWER.
002663,001290: 7501 20146 DAS MPAC +5
002664,001291:
002665,001292: 7502 00006 EXTEND
002666,001293: 7503 17505 BZF +2
002667,001294: 7504 07006 TC OVERFLOW
002668,001295:
002669,001296: 7505 07066 TC DMPSUB
002670,001297: 7506 52111 DXCH VBUF +2 # MOVE X1M3 TO MPAC +3 SETTING UP FOR X3M2
002671,001298: 7507 52144 DXCH MPAC +3 # AND ADD -X3M1 TO MPAC +3 TO COMPLETE THE
002672,001299: 7510 52141 DXCH MPAC # Y COMPONENT OF THE RESULT.
002673,001300: 7511 20144 DAS MPAC +3
002674,001301:
002675,001302: 7512 00006 EXTEND
002676,001303: 7513 17515 BZF +2
002677,001304: 7514 07006 TC OVERFLOW
002678,001305:
002679,001306: 7515 07066 TC DMPSUB
002680,001307: 7516 52113 DXCH VBUF +4 # GO ADD -X2M3 TO X3M2 TO COMPLETE THE X
002681,001308: 7517 16753 TCF ENDVXV # COMPONENT (TAIL END OF DAD).
002682,001309:
002683,001310: # THE MPACVBUF SUBROUTINE SAVES THE VECTOR IN MPAC IN VBUF WITHOUT CLOBBERING MPAC.
002684,001311:
002685,001312: 7520 00006 MPACVBUF EXTEND # CALLED BY MXV, VXM, AND UNIT.
002686,001313: 7521 30141 DCA MPAC
002687,001314: 7522 52107 DXCH VBUF
002688,001315: 7523 00006 EXTEND
002689,001316: 7524 30144 DCA MPAC +3
002690,001317: 7525 52111 DXCH VBUF +2
002691,001318: 7526 00006 EXTEND
002692,001319: 7527 30146 DCA MPAC +5
002693,001320: 7530 52113 DXCH VBUF +4
002694,001321: 7531 00002 TC Q # RETURN TO CALLER.
002695,001322:
002696,001323: # INTERPRETIVE INSTRUCTIONS WHOSE EXECUTION CONSISTS OF PRINCIPALLY CALLING SUBROUTINES.
002697,001324:
002698,001325: 7532 07066 DMP1 TC DMPSUB # DMP INSTRUCTION.
002699,001326: 7533 16012 TCF DANZIG
002700,001327:
002701,001328: 7534 07066 DMPR TC DMPSUB
002702,001329: 7535 07116 TC ROUNDSUB +1 # (C(A) = +0).
002703,001330: 7536 16012 TCF DANZIG
002704,001331:
002705,001332: 7537 00006 DDV EXTEND
002706,001333: 7540 50102 INDEX ADDRWD # MOVE DIVIDEND INTO BUF.
002707,001334: 7541 30001 DCA 0
002708,001335: 7542 17547 TCF BDDV +4
002709,001336:
002710,001337: 7543 00006 BDDV EXTEND # MOVE DIVISOR INTO MPAC SAVING MPAC, THE
002711,001338: 7544 50102 INDEX ADDRWD # DIVIDEND, IN BUF.
002712,001339: 7545 30001 DCA 0
002713,001340: 7546 52141 DXCH MPAC
002714,001341: 7547 52115 +4 DXCH BUF
002715,001342: 7550 37675 CAF ZERO # DIVIDE ROUTINES IN BANK 0.
002716,001343: 7551 54004 TS FBANK
002717,001344: 7552 12333 TCF DDV/BDDV
002718,001345:
002719,001346: 7553 30102 SETPD CA ADDRWD # MUST SET TO WORK AREA, OR EBANK TROUBLE.
002720,001347:
002721,001348: 7554 54152 TS PUSHLOC
002722,001349: 7555 16014 TCF NOIBNKSW # NO FBANK SWITCH REQUIRED.
002723,001350:
002724,001351: 7556 37675 TSLC CAF ZERO # SHIFTING ROUTINES LOCATED IN BANK 00.
002725,001352: 7557 54004 TS FBANK
002726,001353: 7560 12153 TCF TSLC2
002727,001354:
002728,001355: 7561 36025 GSHIFT CAF LOW7 # USED AS MASK AT GENSHIFT. THIS PROCESSES
002729,001356: 7562 54004 TS FBANK # ANY SHIFT INSTRUCTION (EXCEPT TSLC) WITH
002730,001357: 7563 12175 TCF GENSHIFT # AN ADDRESS (ROUTINES IN BANK 0).
002731,001358:
002732,001359: # THE FOLLOWING IS THE PROLOGUE TO V/SC. IF THE PRESENT MODE IS VECTOR, IT SAVES THE SCALAR AT X IN BUF
002733,001360: # AND CALLS THE V/SC ROUTINE IN BANK 0. IF THE PRESENT MODE IS SCALAR, IT MOVES THE VECTOR AT X INTO MPAC, SAVING
002734,001361: # THE SCALAR IN MPAC IN BUF BEFORE CALLING THE V/SC ROUTINE IN BANK 0.
002735,001362:
002736,001363: 7564 10147 V/SC CCS MODE
002737,001364: 7565 17576 TCF DV/SC # MOVE VECTOR INTO MPAC.
002738,001365: 7566 17576 TCF DV/SC
002739,001366:
002740,001367: 7567 00006 VV/SC EXTEND
002741,001368: 7570 50102 INDEX ADDRWD
002742,001369: 7571 30001 DCA 0
002743,001370: 7572 52115 V/SC1 DXCH BUF # IN BOTH CASES, VECTOR IS NOW IN MPAC AND
002744,001371: 7573 37675 CAF ZERO # SCALAR IN BUF.
002745,001372: 7574 54004 TS FBANK
002746,001373: 7575 12577 TCF V/SC2
002747,001374:
002748,001375: 7576 00006 DV/SC EXTEND
002749,001376: 7577 50102 INDEX ADDRWD
002750,001377: 7600 30003 DCA 2
002751,001378: 7601 52144 DXCH MPAC +3
002752,001379: 7602 00006 EXTEND
002753,001380: 7603 50102 INDEX ADDRWD
002754,001381: 7604 30005 DCA 4
002755,001382: 7605 52146 DXCH MPAC +5
002756,001383:
002757,001384: 7606 47671 CS ONE # CHANGE MODE TO VECTOR.
002758,001385: 7607 54147 TS MODE
002759,001386:
002760,001387: 7610 00006 EXTEND
002761,001388: 7611 50102 INDEX ADDRWD
002762,001389: 7612 30001 DCA 0
002763,001390: 7613 52141 DXCH MPAC
002764,001391: 7614 17572 TCF V/SC1 # FINISH PROLOGUE AT COMMON SECTION.
002765,001392:
002766,001393: # SIGN AND COMPLEMENT INSTRUCTIONS.
002767,001394:
002768,001395: 7615 50102 SIGN INDEX ADDRWD # CALL COMP INSTRUCTION IF WORD AT X IS
002769,001396: 7616 10000 CCS 0 # NEGATIVE NON-ZERO.
002770,001397: 7617 16012 TCF DANZIG
002771,001398: 7620 17622 TCF +2
002772,001399: 7621 17630 TCF COMP # DO THE COMPLEMENT.
002773,001400:
002774,001401: 7622 50102 INDEX ADDRWD
002775,001402: 7623 10001 CCS 1
002776,001403: 7624 16012 TCF DANZIG
002777,001404: 7625 16012 TCF DANZIG
002778,001405:
002779,001406: 7626 17630 TCF COMP
002780,001407: 7627 16012 TCF DANZIG
002781,001408: 7630 00006 COMP EXTEND # COMPLEMENT DP MPAC IN EVERY CASE.
002782,001409: 7631 40141 DCS MPAC
002783,001410: 7632 52141 DXCH MPAC
002784,001411:
002785,001412: 7633 10147 CCS MODE # EITHER COMPLEMENT MPAC +3 OR THE REST OF
002786,001413: 7634 17645 TCF DCOMP # THE VECTOR ACCUMULATOR.
002787,001414: 7635 17645 TCF DCOMP
002788,001415:
002789,001416: 7636 00006 EXTEND # VECTOR COMPLEMENT.
002790,001417: 7637 40144 DCS MPAC +3
002791,001418: 7640 52144 DXCH MPAC +3
002792,001419: 7641 00006 EXTEND
002793,001420: 7642 40146 DCS MPAC +5
002794,001421: 7643 52146 DXCH MPAC +5
002795,001422: 7644 16012 TCF DANZIG
002796,001423:
002797,001424: 7645 40142 DCOMP CS MPAC +2
002798,001425: 7646 54142 TS MPAC +2
002799,001426: 7647 16012 TCF DANZIG
002800,001427:
002801,001428: # CONSTANTS REQUIRED IN FIXED-FIXED.
002802,001429: 7650 37777 DPOSMAX OCT 37777
002803,001430: 7651 37777 POSMAX OCT 37777
002804,001431: 7652 7652 LIMITS EQUALS POSMAX +1
002805,001432: 7652 57777 NEG1/2 OCT -20000 # MUST BE TWO LOCATIONS AHEAD OF POS1/2.
002806,001433:
002807,001434: 7653 40000 BIT15 OCT 40000 # BIT TABLE FOLLOWS.
002808,001435: 7654 20000 BIT14 OCT 20000
002809,001436: 7655 10000 BIT13 OCT 10000
002810,001437: 7656 04000 BIT12 OCT 04000
002811,001438: 7657 02000 BIT11 OCT 02000
002812,001439: 7660 01000 BIT10 OCT 01000
002813,001440: 7661 00400 BIT9 OCT 00400
002814,001441: 7662 00200 BIT8 OCT 00200
002815,001442: 7663 00100 BIT7 OCT 00100
002816,001443: 7664 00040 BIT6 OCT 00040
002817,001444: 7665 00020 BIT5 OCT 00020
002818,001445: 7666 00010 BIT4 OCT 00010
002819,001446: 7667 00004 BIT3 OCT 00004
002820,001447: 7670 00002 BIT2 OCT 00002
002821,001448: 7671 00001 BIT1 OCT 00001
002822,001449:
002823,001450: 7672 7653 NEGMAX EQUALS BIT15
002824,001451: 7672 7654 HALF EQUALS BIT14
002825,001452: 7672 7654 POS1/2 EQUALS HALF
002826,001453: 7672 7655 QUARTER EQUALS BIT13
002827,001454: 7672 7657 2K EQUALS BIT11
002828,001455: 7672 00013 ELEVEN DEC 11 B-14
002829,001456: 7673 7672 NOUTCON = ELEVEN
002830,001457:
002831,001458: 7673 5234 TEN = BINCON
002832,001459: 7673 5170 NINE = R2D1
002833,001460: 7673 7666 EIGHT EQUALS BIT4
002834,001461: 7673 00007 SEVEN OCT 7
002835,001462: 7674 6173 SIX EQUALS REVCNT
002836,001463: 7674 00005 FIVE OCT 5
002837,001464: 7675 7667 FOUR EQUALS BIT3
002838,001465: 7675 6176 THREE EQUALS OCTAL3
002839,001466: 7675 7670 TWO EQUALS BIT2
002840,001467: 7675 7671 ONE EQUALS BIT1
002841,001468: 7675 00000 ZERO OCT 0
002842,001469: 7676 77777 NEG0 OCT 77777
002843,001470: 7677 77776 NEGONE DEC -1 B-14
002844,001471:
002845,001472: 7700 7677 NEG1 = NEGONE
002846,001473: 7700 7677 MINUS1 EQUALS NEG1
002847,001474: 7700 77775 NEG2 OCT 77775
002848,001475: 7701 01777 LOW10 OCT 1777
002849,001476: 7702 77774 NEG3 DEC -3 B-14
002850,001477: 7703 00777 LOW9 OCT 777
002851,001478: 7704 00017 LOW4 OCT 17
002852,001479:
002853,001480: 7705 7673 LOW3 EQUALS SEVEN
002854,001481: 7705 6176 LOW2 EQUALS THREE
002855,001482:
002856,001483: 7705 00032 CALLCODE OCT 00032
002857,001484: 7706 40014 DLOADCOD OCT 40014
002858,001485: 7707 7653 VLOADCOD EQUALS BIT15
002859,001486: 7707 40015 DLOAD* OCT 40015
002860,001487: 7710 6040 VLOAD* EQUALS OCT40001
002861,001488: 7710 00106 LVBUF ADRES VBUF
002862,001489: 7711 ENDINTF EQUALS
002863,001490:
002864,001491: 7711 4507 BIT13-14 = PRIO30
002865,001492: 7711 74000 HIGH4 OCT 74000
002866,001493: 7712 00055 DEC45 DEC 45 B-14
002867,001494:
002868,001495: # THE FOLLOWING SHORT SHIFT CODES REQUIRE NO ADDRESS WORD:
002869,001496:
002870,001497: # 1. SR1 TO SR4 SCALAR SHIFT RIGHT.
002871,001498: # 2. SR1R TO SR4R SCALAR SHIFT RIGHT AND ROUND.
002872,001499: # 3. SL1 TO SL4 SCALAR SHIFT LEFT.
002873,001500: # 4. SL1R TO SL4R SCALAR SHIFT LEFT AND ROUND.
002874,001501:
002875,001502: # 5. VSR1 TO VSR8 VECTOR SHIFT RIGHT (ALWAYS ROUNDS).
002876,001503: # 6. VSL1 TO VSL8 VECTOR SHIFT LEFT (NEVER ROUNDS).
002877,001504:
002878,001505: # THE FOLLOWING CODES REQUIRE AN ADDRESS WHICH MAY BE INDEXED:*
002879,001506:
002880,001507: # 1. SR SCALAR SHIFT RIGHT.
002881,001508: # 2. SRR SCALAR SHIFT RIGHT AND ROUND.
002882,001509: # 3. SL SCALAR SHIFT LEFT.
002883,001510: # 4. SLR SCALAR SHIFT LEFT AND ROUND.
002884,001511:
002885,001512: # 5. VSR VECTOR SHIFT RIGHT.
002886,001513: # 6. VSL VECTOR SHIFT LEFT.
002887,001514:
002888,001515: # * IF THE ADDRESS IS INDEXED, AND THE INDEX MODIFICATION RESULTS IN A NEGATIVE SHIFT COUNT, A SHIFT OF THE
002889,001516: # ABSOLUTE VALUE OF THE COUNT IS DONE IN THE OPPOSITE DIRECTION.
002890,001517:
002891,001518:
002892,001519: 00,2000 SETLOC 10000 # BANK 0 PORTION FOLLOWS.
002893,001520:
002894,001521: 00,2000 36173 SHORTT CAF SIX # SCALAR SHORT SHIFTS COME HERE. THE SHIFT
002895,001522: 00,2001 70020 MASK CYR # COUNT-1 IS NOW IN BITS 2-3 OF CYR. THE
002896,001523: 00,2002 54021 TS SR # ROUNDING BIT IS IN BIT1 AT THIS POINT.
002897,001524:
002898,001525: 00,2003 10020 CCS CYR # SEE IF RIGHT OR LEFT SHIFT DESIRED.
002899,001526: 00,2004 12062 TCF TSSL # SHIFT LEFT.
002900,001527:
002901,001528: 00,2005 00024 SRDDV DEC 20 B-14 # MPTEMP SETTING FOR SR BEFORE DDV.
002902,001529:
002903,001530: 00,2006 50021 TSSR INDEX SR # GET SHIFTING BIT.
002904,001531: 00,2007 37654 CAF BIT14
002905,001532: 00,2010 54121 TS MPTEMP
002906,001533:
002907,001534: 00,2011 10020 CCS CYR # SEE IF A ROUND IS DESIRED.
002908,001535: 00,2012 02031 RIGHTR TC MPACSRND # YES - SHIFT RIGHT AND ROUND.
002909,001536: 00,2013 16011 TCF NEWMODE # SET MODE TO DP (C(A) = 0).
002910,001537: 00,2014 30121 MPACSHR CA MPTEMP # DO A TRIPLE PRECISION SHIFT RIGHT.
002911,001538: 00,2015 00006 EXTEND
002912,001539: 00,2016 70142 MP MPAC +2
002913,001540: 00,2017 54142 +3 TS MPAC +2 # (EXIT FROM SQRT AND ABVAL).
002914,001541: 00,2020 30121 CA MPTEMP
002915,001542:
002916,001543: 00,2021 00006 EXTEND
002917,001544: 00,2022 70140 MP MPAC # SHIFT MAJOR PART INTO A,L AND PLACE IN
002918,001545: 00,2023 52141 DXCH MPAC # MPAC,+1.
002919,001546: 00,2024 30121 CA MPTEMP
002920,001547: 00,2025 00006 EXTEND
002921,001548: 00,2026 70001 MP L # ORIGINAL C(MPAC +1).
002922,001549: 00,2027 20142 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
002923,001550: 00,2030 16012 TCF DANZIG
002924,001551:
002925,001552: # MPAC SHIFT RIGHT AND ROUND SUBROUTINES.
002926,001553:
002927,001554: 00,2031 30142 MPACSRND CA MPAC +2 # WE HAVE TO DO ALL THREE MULTIPLIES SINCE
002928,001555: 00,2032 00006 EXTEND # MPAC +1 AND MPAC +2 MIGHT HAVE SIGN
002929,001556: 00,2033 70121 MP MPTEMP # DISAGREEMENT WITH A SHIFT RIGHT OF 1.
002930,001557: 00,2034 56141 XCH MPAC +1
002931,001558: 00,2035 00006 EXTEND
002932,001559: 00,2036 70121 MP MPTEMP
002933,001560: 00,2037 56141 XCH MPAC +1 # TRIAL MINOR PART.
002934,001561: 00,2040 60001 AD L
002935,001562:
002936,001563: 00,2041 60000 VSHR2 DOUBLE # (FINISH VECTOR COMPONENT SHIFT RIGHT
002937,001564: 00,2042 54142 TS MPAC +2 # AND ROUND.
002938,001565: 00,2043 12045 TCF +2
002939,001566: 00,2044 26141 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
002940,001567:
002941,001568: 00,2045 37675 CAF ZERO
002942,001569: 00,2046 54142 TS MPAC +2
002943,001570: 00,2047 56140 XCH MPAC # SETTING TO ZERO SO FOLLOWING DAS WORKS.
002944,001571: 00,2050 00006 EXTEND
002945,001572: 00,2051 70121 MP MPTEMP
002946,001573: 00,2052 20141 DAS MPAC # AGAIN NO OVERFLOW.
002947,001574: 00,2053 00002 TC Q
002948,001575:
002949,001576: 00,2054 30121 VSHRRND CA MPTEMP # ENTRY TO SHIFT RIGHT AND ROUND MPAC WHEN
002950,001577: 00,2055 00006 EXTEND # MPAC CONTAINS A VECTOR COMPONENT.
002951,001578: 00,2056 70141 MP MPAC +1
002952,001579: 00,2057 54141 TS MPAC +1
002953,001580: 00,2060 56001 XCH L
002954,001581: 00,2061 12041 TCF VSHR2 # GO ADD ONE IF NECESSARY AND FINISH.
002955,001582:
002956,001583: # ROUTINE FOR SHORT SCALAR SHIFT LEFT (AND MAYBE ROUND).
002957,001584:
002958,001585: 00,2062 30021 TSSL CA SR # GET SHIFT COUNT FOR SR.
002959,001586: 00,2063 54121 +1 TS MPTEMP
002960,001587:
002961,001588: 00,2064 00006 +2 EXTEND # ENTRY HERE FROM SL FOR SCALARS.
002962,001589: 00,2065 30142 DCA MPAC +1 # SHIFTING LEFT ONE PLACE AT A TIME IS
002963,001590: 00,2066 20142 DAS MPAC +1 # FASTER THAN DOING THE WHOLE SHIFT WITH
002964,001591: 00,2067 60140 AD MPAC # MULTIPLIES ASSUMING THAT FREQUENCY OF
002965,001592: 00,2070 60140 AD MPAC # SHIFT COUNTS GOES DOWN RAPIDLY AS A
002966,001593: 00,2071 54140 TS MPAC # FUNCTION OF THEIR MAGNITUDE.
002967,001594: 00,2072 12074 TCF +2
002968,001595: 00,2073 54105 TS OVFIND # OVERFLOW. (LEAVES OVERFLOW-CORRECTED
002969,001596: # RESULT ANYWAY).
002970,001597: 00,2074 10121 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNT.
002971,001598: 00,2075 12063 TCF TSSL +1
002972,001599:
002973,001600: 00,2076 10020 CCS CYR # SEE IF ROUND WANTED.
002974,001601: 00,2077 07115 ROUND TC ROUNDSUB # YES - ROUND AND EXIT.
002975,001602: 00,2100 16012 TCF DANZIG # SL LEAVES A ZERO IN CYR FOR NO ROUND.
002976,001603: 00,2101 16012 TCF DANZIG # NO - EXIT IMMEDIATL
002977,001604:
002978,001605: # VECTOR SHIFTING ROUTINES.
002979,001606:
002980,001607: 00,2102 37673 SHORTV CAF LOW3 # SAVE 3 BIT SHIFT COUNT - 1 WITHOUT
002981,001608: 00,2103 70020 MASK CYR # EDITING CYR.
002982,001609: 00,2104 54121 TS MPTEMP
002983,001610: 00,2105 10020 CCS CYR # SEE IF LEFT OR RIGHT SHIFT.
002984,001611: 00,2106 12126 TCF VSSL # VECTOR SHIFT LEFT.
002985,001612: 00,2107 00176 OCT176 OCT 176 # USED IN PROCESSED SHIFTS WITH - COUNT.
002986,001613:
002987,001614: 00,2110 50121 VSSR INDEX MPTEMP # (ENTRY FROM SR). PICK UP SHIFTING BIT.
002988,001615: 00,2111 37654 CAF BIT14 # MPTEMP CONTAINS THE SHIFT COUNT - 1.
002989,001616: 00,2112 54121 TS MPTEMP
002990,001617: 00,2113 02054 TC VSHRRND # SHIFT X COMPONENT.
002991,001618:
002992,001619: 00,2114 52141 DXCH MPAC # SWAP X AND Y COMPONENTS.
002993,001620: 00,2115 52144 DXCH MPAC +3
002994,001621: 00,2116 52141 DXCH MPAC
002995,001622: 00,2117 02054 TC VSHRRND # SHIFT Y COMPONENT.
002996,001623:
002997,001624: 00,2120 52141 DXCH MPAC # SWAP Y AND Z COMPONENTS.
002998,001625: 00,2121 52146 DXCH MPAC +5
002999,001626: 00,2122 52141 DXCH MPAC
003000,001627: 00,2123 02054 TC VSHRRND # SHIFT Z COMPONENT.
003001,001628:
003002,001629: 00,2124 17405 TCF VROTATEX # RESTORE COMPONENTS TO PROPER PLACES.
003003,001630:
003004,001631: # VECTOR SHIFT LEFT - DONE ONE PLACE AT A TIME.
003005,001632:
003006,001633: 00,2125 54121 -1 TS MPTEMP # SHIFTING LOOP.
003007,001634:
003008,001635: 00,2126 00006 VSSL EXTEND
003009,001636: 00,2127 30141 DCA MPAC
003010,001637: 00,2130 20141 DAS MPAC
003011,001638: 00,2131 00006 EXTEND
003012,001639: 00,2132 12134 BZF +2
003013,001640: 00,2133 07006 TC OVERFLOW
003014,001641:
003015,001642: 00,2134 00006 EXTEND
003016,001643: 00,2135 30144 DCA MPAC +3
003017,001644: 00,2136 20144 DAS MPAC +3
003018,001645: 00,2137 00006 EXTEND
003019,001646: 00,2140 12142 BZF +2
003020,001647: 00,2141 07006 TC OVERFLOW
003021,001648:
003022,001649: 00,2142 00006 EXTEND
003023,001650: 00,2143 30146 DCA MPAC +5
003024,001651: 00,2144 20146 DAS MPAC +5
003025,001652: 00,2145 00006 EXTEND
003026,001653: 00,2146 12150 BZF +2
003027,001654: 00,2147 07006 TC OVERFLOW
003028,001655:
003029,001656: 00,2150 10121 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNTER.
003030,001657: 00,2151 12125 TCF VSSL -1
003031,001658: 00,2152 16012 TCF DANZIG # EXIT.
003032,001659:
003033,001660: # TSLC - TRIPLE SHIFT LEFT AND COUNT. SHIFTS MPAC LEFT UNTIL GREATER THAN .5 IN MAGNITUDE, LEAVING
003034,001661: # THE COMPLEMENT OF THE NUMBER OF SHIFTS REQUIRED IN X.
003035,001662:
003036,001663: 00,2153 54121 TSLC2 TS MPTEMP # START BY ZEROING SHIFT COUNT (IN A NOW).
003037,001664: 00,2154 06706 TC BRANCH # EXIT WITH NO SHIFTING IF ARGUMENT ZERO.
003038,001665: 00,2155 12157 TCF +2
003039,001666: 00,2156 12173 TCF ENDTSLC # STORES ZERO SHIFT COUNT IN THIS CASE.
003040,001667:
003041,001668: 00,2157 07234 TC TPAGREE # MAY CAUSE UPSHIFT OF ONE EXTRA PLACE.
003042,001669:
003043,001670: 00,2160 30140 CA MPAC # BEGIN NORMALIZATION LOOP.
003044,001671: 00,2161 12170 TCF TSLCTEST
003045,001672:
003046,001673: 00,2162 24121 TSLCLOOP INCR MPTEMP # INCREMENT SHIFT COUNTER.
003047,001674: 00,2163 00006 EXTEND
003048,001675: 00,2164 30142 DCA MPAC +1
003049,001676: 00,2165 20142 DAS MPAC +1
003050,001677: 00,2166 60140 AD MPAC
003051,001678: 00,2167 26140 ADS MPAC
003052,001679: 00,2170 60000 TSLCTEST DOUBLE # SEE IF (ANOTHER) SHIFT IS REQUIRED.
003053,001680: 00,2171 54000 OVSK
003054,001681: 00,2172 12162 TCF TSLCLOOP # YES - INCREMENT COUNT AND SHIFT AGAIN.
003055,001682:
003056,001683: 00,2173 40121 ENDTSLC CS MPTEMP
003057,001684: 00,2174 16606 TCF STORE1 # STORE SHIFT COUNT AND RETURN TO DANZIG.
003058,001685:
003059,001686: # THE FOLLOWING ROUTINES PROCESSES THE GENERAL SHIFT INSTRUCTIONS SR, SRR, SL, AND SLR.
003060,001687: # THE GIVEN ADDRESS IS DECODED AS FOLLOWS:
003061,001688:
003062,001689: # BITS 1-7 SHIFT COUNT (SUBADDRESS) LESS THAN 125 DECIMAL.
003063,001690: # BIT 8 PSEUDO SIGN BIT (DETECTS CHANGE IN SIGN IN INDEXED SHIFTS).
003064,001691: # BIT 9 0 FOR LEFT SHIFT, AND 1 FOR RIGHT SHIFT.
003065,001692: # BIT 10 1 FOR TERMINAL ROUND ON SCALAR SHIFTS, 0 OTHERWISE.
003066,001693: # BITS 11-13 0.
003067,001694:
003068,001695: # BIT 14 1.
003069,001696: # BIT 15 0.
003070,001697:
003071,001698: # THE ABOVE ENCODING IS DONE BY THE YUL SYSTEM.
003072,001699:
003073,001700:
003074,001701:
003075,001702: 00,2175 70102 GENSHIFT MASK ADDRWD # GET SHIFT COUNT, TESTING FOR ZERO.
003076,001703: 00,2176 10000 CCS A # (ARRIVES WITH C(A) = LOW7).
003077,001704: 00,2177 12205 TCF GENSHFT2 # IF NON-ZERO, PROCEED WITH DECREMENTED CT
003078,001705:
003079,001706: 00,2200 37660 CAF BIT10 # ZERO SHIFT COUNT. NO SHIFTS NEEDED BUT
003080,001707: 00,2201 70102 MASK ADDRWD # WE MIGHT HAVE TO ROUND MPAC ON SLR AND
003081,001708: 00,2202 10000 CCS A # SRR (SCALAR ONLY).
003082,001709: 00,2203 07115 TC ROUNDSUB
003083,001710: 00,2204 16012 TCF DANZIG
003084,001711:
003085,001712: 00,2205 54121 GENSHFT2 TS MPTEMP # DECREMENTED SHIFT COUNT TO MPTEMP.
003086,001713: 00,2206 37662 CAF BIT8 # TEST MEANING OF LOW SEVEN BIT COUNT IN
003087,001714: 00,2207 00006 EXTEND # MPTEMP NOW.
003088,001715: 00,2210 70102 MP ADDRWD
003089,001716: 00,2211 76176 MASK LOW2 # JUMPS ON SHIFT DIRECTION (BIT8) AND
003090,001717: 00,2212 50000 INDEX A
003091,001718: 00,2213 12214 TCF +1 # ORIGINAL SHIFT DIRECTION (BIT 9).
003092,001719: 00,2214 12313 TCF RIGHT- # NEGATIVE SHIFT COUNT FOR SL OR SLR.
003093,001720: 00,2215 12322 TCF LEFT # SL OR SLR.
003094,001721: 00,2216 12317 TCF LEFT- # NEGATIVE SHIFT COUNT WITH SR OR SRR.
003095,001722:
003096,001723: # GENERAL SHIFT RIGHT.
003097,001724:
003098,001725: 00,2217 10147 RIGHT CCS MODE # SEE IF VECTOR OR SCALAR.
003099,001726: 00,2220 12260 TCF GENSCR
003100,001727: 00,2221 12260 TCF GENSCR
003101,001728:
003102,001729: 00,2222 30121 CA MPTEMP # SEE IF SHIFT COUNT LESS THAN 14D.
003103,001730: 00,2223 63657 VRIGHT2 AD NEG12
003104,001731: 00,2224 00006 EXTEND
003105,001732: 00,2225 62110 BZMF VSSR # IF SO, BRANCH AND SHIFT IMMEDIATELY.
003106,001733:
003107,001734: 00,2226 67677 AD NEGONE # IF NOT, REDUCE MPTEMP BY A TOTAL OF 14,
003108,001735: 00,2227 54121 TS MPTEMP # AND DO A SHIFT RIGHT AND ROUND BY 14.
003109,001736: 00,2230 37675 CAF ZERO # THE ROUND AT THIS STAGE MAY INTRODUCE A
003110,001737: 00,2231 54001 TS L # ONE BIT ERROR IN A SHIFT RIGHT 15D.
003111,001738: 00,2232 56140 XCH MPAC
003112,001739: 00,2233 56141 XCH MPAC +1
003113,001740: 00,2234 02253 TC SETROUND # X COMPONENT NOW SHIFTED, SO MAKE UP THE
003114,001741: 00,2235 20141 DAS MPAC # ROUNDING QUANTITY (0 IN A AND 0 OR +-1
003115,001742: # IN L).
003116,001743: 00,2236 56143 XCH MPAC +3 # REPEAT THE ABOVE PROCESS FOR Y AND Z.
003117,001744: 00,2237 56144 XCH MPAC +4
003118,001745: 00,2240 02253 TC SETROUND
003119,001746: 00,2241 20144 DAS MPAC +3 # NO OVERFLOW ON THESE ADDS.
003120,001747:
003121,001748: 00,2242 56145 XCH MPAC +5
003122,001749: 00,2243 56146 XCH MPAC +6
003123,001750: 00,2244 02253 TC SETROUND
003124,001751: 00,2245 20146 DAS MPAC +5
003125,001752:
003126,001753: 00,2246 10121 CCS MPTEMP # SEE IF DONE, DOING FINAL DECREMENT.
003127,001754: 00,2247 54121 TS MPTEMP
003128,001755: 00,2250 12223 TCF VRIGHT2
003129,001756: 00,2251 04604 BIASLO DEC .2974 B-1 # SQRT CONSTANT
003130,001757:
003131,001758: 00,2252 16012 TCF DANZIG
003132,001759:
003133,001760:
003134,001761:
003135,001762: 00,2253 60000 SETROUND DOUBLE # MAKES UP ROUNDING QUANTITY FROM ARRIVING
003136,001763: 00,2254 54142 TS MPAC +2 # C(A). L IS ZERO INITIALLY.
003137,001764: 00,2255 37675 CAF ZERO
003138,001765: 00,2256 56001 XCH L
003139,001766: 00,2257 00002 TC Q # RETURN AND DO THE DAS, RESETTING L TO 0.
003140,001767:
003141,001768: # PROCESS SR AND SRR FOR SCALARS.
003142,001769:
003143,001770: 00,2260 30121 GENSCR CA MPTEMP # SEE IF THE ORIGINAL SHIFT COUNT WAS LESS
003144,001771: 00,2261 63657 +1 AD NEG12 # THAN 14D.
003145,001772: 00,2262 00006 EXTEND
003146,001773: 00,2263 62303 BZMF DOSSHFT # DO THE SHIFT IMMEDIATELY IF SO.
003147,001774:
003148,001775: 00,2264 67677 +4 AD NEGONE # IF NOT, DECREMENT SHIFT COUNT BY 14D AND
003149,001776: 00,2265 54121 TS MPTEMP # SHIFT MPAC RIGHT 14 PLACES.
003150,001777: 00,2266 37675 CAF ZERO
003151,001778: 00,2267 56140 XCH MPAC
003152,001779: 00,2270 56141 XCH MPAC +1
003153,001780: 00,2271 54142 TS MPAC +2
003154,001781: 00,2272 10121 CCS MPTEMP # SEE IF FINISHED, DO FINAL DECREMENT.
003155,001782: 00,2273 54121 TS MPTEMP
003156,001783: 00,2274 02261 TC GENSCR +1
003157,001784: 00,2275 22650 SLOPEHI DEC .5884 # SQRT CONSTANT.
003158,001785: 00,2276 37660 CAF BIT10 # FINISHED WITH SHIFT. SEE IF ROUND
003159,001786: 00,2277 70102 MASK ADDRWD # WANTED.
003160,001787: 00,2300 10000 CCS A
003161,001788: 00,2301 07115 TC ROUNDSUB
003162,001789: 00,2302 16012 TCF DANZIG # DO SO AND/OR EXIT.
003163,001790:
003164,001791: 00,2303 50121 DOSSHFT INDEX MPTEMP # PICK UP SHIFTING BIT.
003165,001792: 00,2304 37654 CAF BIT14
003166,001793: 00,2305 54121 TS MPTEMP
003167,001794: 00,2306 37660 CAF BIT10 # SEE IF TERMINAL ROUND DESIRED.
003168,001795: 00,2307 70102 MASK ADDRWD
003169,001796: 00,2310 10000 CCS A
003170,001797: 00,2311 12012 TCF RIGHTR # YES.
003171,001798: 00,2312 12014 TCF MPACSHR # JUST SHIFT RIGHT.
003172,001799:
003173,001800: # PROCESS THE RIGHT- (SL(R) WITH A NEGATIVE COUNT), LEFT-, AND LEFT OPTIONS.
003174,001801:
003175,001802: 00,2313 40121 RIGHT- CS MPTEMP # GET ABSOLUTE VALUE - 1 OF SHIFT COUNT
003176,001803: 00,2314 62107 AD OCT176 # UNDERSTANDING THAT BIT8 (PSEUDO-SIGN)
003177,001804: 00,2315 54121 TS MPTEMP # WAS 1 INITIALLY.
003178,001805: 00,2316 12217 TCF RIGHT # DO NORMAL SHIFT RIGHT.
003179,001806:
003180,001807: 00,2317 40121 LEFT- CS MPTEMP # SAME PROLOGUE TO LEFT FOR INDEXED RIGHT
003181,001808: 00,2320 62107 AD OCT176 # SHIFTS WHOSE NET SHIFT COUNT IS NEGATIVE
003182,001809: 00,2321 54121 TS MPTEMP
003183,001810:
003184,001811: 00,2322 10147 LEFT CCS MODE # SINCE LEFT SHIFTING IS SONE ONE PLACE AT
003185,001812: 00,2323 12326 TCF GENSCL # A TIME, NO COMPARISON WITH 14 NEED BE
003186,001813: 00,2324 12326 TCF GENSCL # DONE. FOR SCALARS, SEE IF TERMINAL ROUND
003187,001814: 00,2325 12126 TCF VSSL # DESIRED. FOR VECTORS, SHIFT IMMEDIATELY.
003188,001815:
003189,001816: 00,2326 37664 GENSCL CAF BIT6 # PUT ROUNDING BIT (BIT10 OF ADDRWD) INTO
003190,001817: 00,2327 00006 EXTEND # BIT 15 OF CYR WHERE THE ROUNDING BIT OF
003191,001818: 00,2330 70102 MP ADDRWD # A SHORT SHIFT LEFT WOULD BE.
003192,001819: 00,2331 54020 TS CYR
003193,001820: 00,2332 12064 TCF TSSL +2 # DO THE SHIFT.
003194,001821:
003195,001822: # SCALAR DIVISION INSTRUCTIONS, DDV AND BDDV, ARE EXECUTED HERE. AT THIS POINT, THE DIVIDEND IS IN MPAC
003196,001823: # AND THE DIVISOR IN BUF.
003197,001824:
003198,001825: 00,2333 47671 DDV/BDDV CS ONE # INITIALIZATION.
003199,001826: 00,2334 54122 TS DVSIGN # +-1 FOR POSITIVE QUOTIENT - -0 FOR NEG.
003200,001827: 00,2335 54123 TS DVNORMCT # DIVIDEND NORMALIZATION COUNT.
003201,001828: 00,2336 54124 TS MAXDVSW # NEAR-ONE DIVIDE FLAG.
003202,001829:
003203,001830: 00,2337 10114 CCS BUF # FORCE BUF POSITIVE WITH THE MAJOR PART
003204,001831: 00,2340 12367 TCF BUF+ # NON-ZERO.
003205,001832: 00,2341 12343 TCF +2
003206,001833: 00,2342 12363 TCF BUF-
003207,001834:
003208,001835: 00,2343 56115 XCH BUF +1 # SHIFT DIVIDEND AND DIVISOR LEFT 14.
003209,001836: 00,2344 56114 XCH BUF
003210,001837: 00,2345 56141 XCH MPAC +1
003211,001838: 00,2346 56140 XCH MPAC
003212,001839: 00,2347 00006 EXTEND # CHECK FOR OVERFLOW.
003213,001840: 00,2350 12352 BZF +2
003214,001841: 00,2351 12356 TCF DVOVF
003215,001842:
003216,001843: 00,2352 10114 CCS BUF # TRY AGAIN ON FORMER MINOR PART.
003217,001844: 00,2353 12367 TCF BUF+
003218,001845: 00,2354 12356 TCF DVOVF # OVERFLOW ON ZERO DIVISOR.
003219,001846: 00,2355 12363 TCF BUF-
003220,001847:
003221,001848: 00,2356 37651 DVOVF CAF POSMAX # ON DIVISION OVERFLOW OF ANY SORT, SET
003222,001849: 00,2357 54140 TS MPAC # SET DP MPAC TO +-POSMAX.
003223,001850: 00,2360 02553 TC FINALDV +3
003224,001851: 00,2361 37671 CAF ONE # SET OVERFLOW INDICATOR AND EXIT.
003225,001852: 00,2362 17060 TCF SETOVF
003226,001853:
003227,001854: 00,2363 00006 BUF- EXTEND # IF BUF IS NEGATIVE, COMPLEMENT IT AND
003228,001855: 00,2364 40115 DCS BUF # MAINTAIN DVSIGN FOR FINAL QUOTIENT SIGN.
003229,001856: 00,2365 52115 DXCH BUF
003230,001857: 00,2366 24122 INCR DVSIGN # NOW -0.
003231,001858:
003232,001859: 00,2367 10140 BUF+ CCS MPAC # FORCE MPAC POSITIVE, CHECKING FOR ZERO
003233,001860: 00,2370 12404 TCF MPAC+ # DIVIDEND IN THE PROCESS.
003234,001861: 00,2371 12373 TCF +2
003235,001862: 00,2372 12400 TCF MPAC-
003236,001863: 00,2373 10141 CCS MPAC +1
003237,001864: 00,2374 12404 TCF MPAC+
003238,001865: 00,2375 16012 TCF DANZIG # EXIT IMMEDIATELY ON ZERO DIVIDEND.
003239,001866: 00,2376 12400 TCF MPAC-
003240,001867: 00,2377 16012 TCF DANZIG
003241,001868:
003242,001869: 00,2400 00006 MPAC- EXTEND # FORCE MPAC POSITIVE AS BUF IN BUF-.
003243,001870: 00,2401 40141 DCS MPAC
003244,001871: 00,2402 52141 DXCH MPAC
003245,001872:
003246,001873: 00,2403 24122 INCR DVSIGN # NOW +1 OR -0.
003247,001874:
003248,001875: 00,2404 40140 MPAC+ CS MPAC # CHECK FOR DIVISION OVERFLOW. IF THE
003249,001876: 00,2405 67677 AD NEGONE # MAJOR PART OF THE DIVIDEND IS LESS THAN
003250,001877: 00,2406 60114 AD BUF # THE MAJOR PART OF THE DIVISOR BY AT
003251,001878: 00,2407 10000 CCS A # LEAST TWO, WE CAN PROCEED IMMEDIATELY
003252,001879: 00,2410 12452 TCF DVNORM # WITHOUT NORMALIZATION PRODUCING A DVMAX.
003253,001880: 00,2411 60001 -1/2+2 OCT 60001 # USED IN SQRTSUB.
003254,001881:
003255,001882: 00,2412 12413 TCF +1 # IF THE ABOVE DOES NOT HOLD, FORCE SIGN
003256,001883: 00,2413 37654 CAF HALF # AGREEMENT IN NUMERATOR AND DENOMINATOR
003257,001884: 00,2414 60000 DOUBLE # TO FACILITATE OVERFLOW AND NEAR-ONE
003258,001885: 00,2415 60141 AD MPAC +1 # CHECKING.
003259,001886: 00,2416 54141 TS MPAC +1
003260,001887: 00,2417 37675 CAF ZERO
003261,001888: 00,2420 67651 AD POSMAX
003262,001889: 00,2421 26140 ADS MPAC
003263,001890:
003264,001891: 00,2422 37654 CAF HALF # SAME FOR BUF.
003265,001892: 00,2423 60000 DOUBLE
003266,001893: 00,2424 60115 AD BUF +1
003267,001894: 00,2425 54115 TS BUF +1
003268,001895: 00,2426 37675 CAF ZERO
003269,001896: 00,2427 67651 AD POSMAX
003270,001897: 00,2430 26114 ADS BUF
003271,001898:
003272,001899: 00,2431 40140 CS MPAC # CHECK MAGNITUDE OF SIGN-CORRECTED
003273,001900: 00,2432 60114 AD BUF # OPERANDS.
003274,001901: 00,2433 10000 CCS A
003275,001902: 00,2434 12452 TCF DVNORM # DIVIDE OK - WILL NOT BECOME MAXDV CASE.
003276,001903: 00,2435 00117 LBUF2 ADRES BUF2
003277,001904: 00,2436 12356 TCF DVOVF # DIVISOR NOT LESS THAN DIVIDEND - OVF.
003278,001905:
003279,001906: 00,2437 54124 TS MAXDVSW # IF THE MAJOR PARTS OF THE DIVIDEND AND
003280,001907: 00,2440 40141 CS MPAC +1 # DIVISOR ARE EQUAL, A SPECIAL APPROXIMA-
003281,001908: 00,2441 60115 AD BUF +1 # TION IS USED (PROVIDED THE DIVISION IS
003282,001909: 00,2442 00006 EXTEND # POSSIBLE, OF COURSE).
003283,001910: 00,2443 62356 BZMF DVOVF
003284,001911: 00,2444 12452 TCF DVNORM # IF NO OVERFLOW.
003285,001912:
003286,001913: 00,2445 00006 BUFNORM EXTEND # ADD -1 TO AUGMENT SHIFT COUNT AND SHIFT
003287,001914: 00,2446 24123 AUG DVNORMCT # LEFT ONE PLACE.
003288,001915: 00,2447 00006 EXTEND
003289,001916: 00,2450 30115 DCA BUF
003290,001917: 00,2451 20115 DAS BUF
003291,001918:
003292,001919: 00,2452 30114 DVNORM CA BUF # SEE IF DIVISOR NORMALIZED YET.
003293,001920: 00,2453 60000 DOUBLE
003294,001921: 00,2454 54000 OVSK
003295,001922: 00,2455 12445 TCF BUFNORM # NO - SHIFT LEFT ONE AND TRY AGAIN.
003296,001923:
003297,001924: 00,2456 52141 DXCH MPAC # CALL DIVIDEND NORMALIZATION SEQUENCE
003298,001925: 00,2457 50123 INDEX DVNORMCT # PRIOR TO DOING THE DIVIDE.
003299,001926: 00,2460 02510 TC MAXTEST
003300,001927:
003301,001928: 00,2461 54142 TS MPAC +2 # RETURNS WITH DIVISION DONE AND C(A) = 0.
003302,001929: 00,2462 16012 TCF DANZIG
003303,001930:
003304,001931: # THE FOLLOWING ARE PROLOGUES TO SHIFT THE DIVIDEND ARRIVING IN A AND L BEFORE THE DIVIDE.
003305,001932:
003306,001933: 00,2463 22021 -21D LXCH SR # SPECIAL PROLOGUE FOR UNIT WHEN THE
003307,001934: 00,2464 00006 EXTEND # LENGTH OF THE ARGUMENT WAS NOT LESS THAN
003308,001935: 00,2465 77654 MP HALF # .5. IN THIS CASE, EACH COMPONENT MUST BE
003309,001936: 00,2466 56001 XCH L # SHIFTED RIGHT ONE TO PRODUCE A HALF-UNIT
003310,001937: 00,2467 60021 AD SR # VECTOR.
003311,001938: 00,2470 56001 XCH L
003312,001939: 00,2471 12514 TCF GENDDV +1 # WITH DP DIVIDEND IN A,L.
003313,001940:
003314,001941: 00,2472 20001 DDOUBL # PROLOGUE WHICH NORMALIZES THE DIVIDEND
003315,001942: 00,2473 20001 DDOUBL # WHEN IT IS KNOWN THAT NO DIVISION
003316,001943: 00,2474 20001 DDOUBL # OVERFLOW WILL OCCUR.
003317,001944: 00,2475 20001 DDOUBL
003318,001945: 00,2476 20001 DDOUBL
003319,001946: 00,2477 20001 DDOUBL
003320,001947: 00,2500 20001 DDOUBL
003321,001948: 00,2501 20001 DDOUBL
003322,001949: 00,2502 20001 DDOUBL
003323,001950: 00,2503 20001 DDOUBL
003324,001951: 00,2504 20001 DDOUBL
003325,001952: 00,2505 20001 DDOUBL
003326,001953: 00,2506 20001 DDOUBL
003327,001954: 00,2507 52141 DXCH MPAC
003328,001955:
003329,001956: 00,2510 10124 MAXTEST CCS MAXDVSW # 0 IF MAJORS MIGHT BE =, -1 OTHERWISE.
003330,001957: 00,2511 06552 BIASHI DEC .4192 B-1 # SQRT CONSTANTS
003331,001958:
003332,001959: 00,2512 12565 TCF MAXDV # CHECK TO SEE IF THEY ARE NOW EQUAL.
003333,001960:
003334,001961: # THE FOLLOWING IS A GENERAL PURPOSE DOUBLE PRECISION DIVISION ROUTINE. IT DIVIDES MPAC BY BUF AND LEAVES
003335,001962: # THE RESULT IN MPAC. THE FOLLOWING CONDITIONS MUST BE SATISFIED:
003336,001963:
003337,001964: # 1. THE DIVISOR (BUF) MUST BE POSITIVE AND NOT LESS THAN .5.
003338,001965:
003339,001966: # 2. THE DIVIDEND (MPAC) MUST BE POSITIVE WITH THE MAJOR PART OF MPAC STRICTLY LESS THAN THAT OF BUF
003340,001967: # (A SPECIAL APPROXIMATION, MAXDV, IS USED WHEN THE MAJOR PARTS ARE EQUAL).
003341,001968:
003342,001969: # UNDERSTANDING THAT A/B = Q + S(R/B) WHERE S = 2(-14) AND Q AND R ARE QUOTIENT AND REMAINDER, RESPEC-
003343,001970: # TIVELY, THE FOLLOWING APPROXIMATION IS OBTAINED BY MULTIPLYING ABOVE AND BELOW BY C - SD AND NEGLECTING TERMS OF
003344,001971: # ORDER S-SQUARED (POSSIBLY INTRODUCING ERROR INTO THE LOW TWO BITS OF THE RESULT). SIGN AGREEMENT IS UNNECESSARY.
003345,001972:
003346,001973: # A + SB . (R - QD) A + SB
003347,001974: # ------ = Q + S(------) WHERE Q AND R ARE QUOTIENT AND REMAINDER OF ------ RESPECTIVELY.
003348,001975: # C + SD ( C ) C
003349,001976:
003350,001977:
003351,001978: 00,2513 52141 GENDDV DXCH MPAC # WE NEED A AND B ONLY FOR FIRST DV.
003352,001979: 00,2514 00006 +1 EXTEND # (SPECIAL UNIT PROLOGUE ENTERS HERE).
003353,001980: 00,2515 10114 DV BUF # A NOW CONTAINS Q AND L, R.
003354,001981: 00,2516 52141 DXCH MPAC
003355,001982:
003356,001983: 00,2517 40140 CS MPAC # FORM DIVIDEND FOR MINOR PART OF RESULT.
003357,001984: 00,2520 00006 EXTEND
003358,001985: 00,2521 70115 MP BUF +1
003359,001986: 00,2522 60141 AD MPAC +1 # OVERFLOW AT THIS POINT IS POSITIVE SINCE
003360,001987: 00,2523 54000 OVSK # R IS POSITIVE IN EVERY CASE.
003361,001988: 00,2524 12531 TCF +5
003362,001989:
003363,001990: 00,2525 00006 EXTEND # OVERFLOW CAN BE REMOVED BY SUBTRACTING C
003364,001991: 00,2526 60114 SU BUF # (BUF) ONCE SINCE R IS ALWAYS LESS THAN C
003365,001992: 00,2527 24140 INCR MPAC # IN THIS CASE. INCR COMPENSATES SUBTRACT.
003366,001993: 00,2530 12533 TCF +DOWN # (SINCE C(A) IS STILL POSITIVE).
003367,001994:
003368,001995: 00,2531 00006 +5 EXTEND # C(A) CAN BE MADE LESS THAN C IN MAGNI-
003369,001996: 00,2532 62543 BZMF -UP # TUDE BY DIMINISHING IT BY C (SINCE C IS
003370,001997: # NOT LESS THAN .5) UNLESS C(A) = 0.
003371,001998:
003372,001999: 00,2533 00006 +DOWN EXTEND
003373,002000: 00,2534 60114 SU BUF # IF POSITIVE, REDUCE ONLY IF NECESSARY
003374,002001: 00,2535 00006 EXTEND # SINCE THE COMPENSATING INCR MIGHT CAUSE
003375,002002: 00,2536 12541 BZF +3 # OVERFLOW.
003376,002003: 00,2537 00006 EXTEND # DONT SUBTRACT UNLESS RESULT IS POSITIVE
003377,002004: 00,2540 62547 BZMF ENDMAXDV # OR ZERO.
003378,002005:
003379,002006: 00,2541 24140 +3 INCR MPAC # KEEP SUBTRACT HERE AND COMPENSATE.
003380,002007: 00,2542 12550 TCF FINALDV
003381,002008:
003382,002009: 00,2543 00006 -UP EXTEND # IF ZERO, SET MINOR PART OF RESULT TO
003383,002010: 00,2544 12553 BZF FINALDV +3 # ZERO.
003384,002011:
003385,002012: 00,2545 00006 EXTEND # IF NEGATIVE, ADD C TO A, SUBTRACTING ONE
003386,002013: 00,2546 26140 DIM MPAC # TO COMPENSATE. DIM IS OK HERE SINCE THE
003387,002014: 00,2547 60114 ENDMAXDV AD BUF # MAJOR PART NEVER GOES NEGATIVE.
003388,002015:
003389,002016: 00,2550 22007 FINALDV ZL # DO DV TO OBTAIN MINOR PART OF RESULT.
003390,002017: 00,2551 00006 EXTEND
003391,002018: 00,2552 10114 DV BUF
003392,002019: 00,2553 54141 +3 TS MPAC +1
003393,002020:
003394,002021: 00,2554 10122 CCS DVSIGN # LEAVE RESULT POSITIVE UNLESS C(DVSIGN)=
003395,002022: 00,2555 00002 TC Q # -0.
003396,002023: 00,2556 00002 TC Q
003397,002024: 00,2557 00002 TC Q
003398,002025:
003399,002026: 00,2560 00006 EXTEND
003400,002027: 00,2561 40141 DCS MPAC
003401,002028: 00,2562 52141 DXCH MPAC
003402,002029: 00,2563 37675 CAF ZERO # SO WE ALWAYS RETURN WITH C(A) = 0.
003403,002030: 00,2564 00002 TC Q
003404,002031:
003405,002032: # IF THE MAJOR PARTS OF THE DIVISOR AND DIVIDEND ARE EQUAL, BUT THE MINOR PARTS ARE SUCH THAT THE
003406,002033: # DIVIDEND IS STRICTLY LESS THAN THE DIVISOR IN MAGNITUDE, THE FOLLOWING APPROXIMATION IS USED. THE ASSUMPTIONS
003407,002034: # ARE THE SAME AS THE GENERAL ROUTINE WITH THE ADDITION THAT SIGN AGREEMENT IS NECESSARY (B, C, & D POSITIVE).
003408,002035:
003409,002036: # C + SB . (C + B - D)
003410,002037: # ------ = 37777 + S(---------)
003411,002038: # C + SD ( C )
003412,002039:
003413,002040: # THE DIVISION MAY BE PERFORMED IMMEDIATELY SINCE B IS STRICTLY LESS THAN D AND C IS NOT LESS THAN .5.
003414,002041:
003415,002042:
003416,002043:
003417,002044: 00,2565 40140 MAXDV CS MPAC # SEE IF MAXDV CASE STILL HOLDS AFTER
003418,002045: 00,2566 60114 AD BUF # NORMALIZATION.
003419,002046: 00,2567 00006 EXTEND
003420,002047: 00,2570 12572 BZF +2
003421,002048: 00,2571 12513 TCF GENDDV # MPAC NOW LESS THAN BUF - DIVIDE AS USUAL
003422,002049:
003423,002050: 00,2572 37651 +2 CAF POSMAX # SET MAJOR PART OF RESULT.
003424,002051: 00,2573 54140 TS MPAC
003425,002052:
003426,002053: 00,2574 40115 CS BUF +1 # FORM DIVIDEND OF MINOR PART OF RESULT.
003427,002054: 00,2575 60141 AD MPAC +1
003428,002055: 00,2576 12547 TCF ENDMAXDV # GO ADD C AND DO DIVIDE, ATTACHING SIGN
003429,002056: # BEFORE EXITING.
003430,002057:
003431,002058: # VECTOR DIVIDED BY SCALAR, V/SC, IS EXECUTED HERE. THE VECTOR IS NOW IN MPAC WITH SCALAR IN BUF.
003432,002059:
003433,002060: 00,2577 47671 V/SC2 CS ONE # INITIALIZE DIVIDEND NORMALIZATION COUNT
003434,002061: 00,2600 54123 TS DVNORMCT # AND DIVISION SIGN REGISTER.
003435,002062: 00,2601 54113 TS VBUF +5
003436,002063:
003437,002064: 00,2602 10114 CCS BUF # FORCE DIVISOR POSITIVE WITH MAJOR PART
003438,002065: 00,2603 12640 TCF /BUF+ # NON-ZERO (IF POSSIBLE).
003439,002066: 00,2604 12606 TCF +2
003440,002067: 00,2605 12634 TCF /BUF-
003441,002068:
003442,002069: 00,2606 56115 XCH BUF +1 # SHIFT VECTOR AND SCALAR LEFT 14.
003443,002070: 00,2607 56114 XCH BUF
003444,002071: 00,2610 56141 XCH MPAC +1
003445,002072: 00,2611 56140 XCH MPAC
003446,002073: 00,2612 00006 EXTEND # CHECK FOR OVERFLOW IN EACH CASE.
003447,002074: 00,2613 12615 BZF +2
003448,002075: 00,2614 12356 TCF DVOVF
003449,002076:
003450,002077: 00,2615 56144 XCH MPAC +4
003451,002078: 00,2616 56143 XCH MPAC +3
003452,002079: 00,2617 00006 EXTEND
003453,002080: 00,2620 12622 BZF +2
003454,002081: 00,2621 12356 TCF DVOVF
003455,002082:
003456,002083: 00,2622 56146 XCH MPAC +6
003457,002084: 00,2623 56145 XCH MPAC +5
003458,002085: 00,2624 00006 EXTEND
003459,002086: 00,2625 12627 BZF +2
003460,002087: 00,2626 12356 TCF DVOVF
003461,002088:
003462,002089: 00,2627 10114 CCS BUF
003463,002090: 00,2630 12640 TCF /BUF+
003464,002091: 00,2631 12356 TCF DVOVF # ZERO DIVISOR - OVERFLOW.
003465,002092: 00,2632 12634 TCF /BUF-
003466,002093: 00,2633 12356 TCF DVOVF
003467,002094:
003468,002095: 00,2634 00006 /BUF- EXTEND # ON NEGATIVE, COMPLEMENT BUF AND MAINTAIN
003469,002096: 00,2635 40115 DCS BUF # DVSIGN IN VBUF +5.
003470,002097: 00,2636 52115 DXCH BUF
003471,002098: 00,2637 24113 INCR VBUF +5
003472,002099:
003473,002100: 00,2640 37654 /BUF+ CAF HALF # FORCE SIGN AGREEMENT IN DIVISOR.
003474,002101: 00,2641 60000 DOUBLE
003475,002102: 00,2642 60115 AD BUF +1
003476,002103: 00,2643 54115 TS BUF +1
003477,002104: 00,2644 37675 CAF ZERO
003478,002105: 00,2645 67651 AD POSMAX
003479,002106: 00,2646 26114 ADS BUF
003480,002107:
003481,002108: 00,2647 56117 XCH BUF2 # LEAVE ABS(ORIGINAL DIVISOR) IN BUF2 FOR
003482,002109: 00,2650 30115 CA BUF +1 # OVERFLOW TESTING.
003483,002110: 00,2651 54120 TS BUF2 +1
003484,002111: 00,2652 12660 TCF /NORM # NORMALIZE DIVISOR IN BUF.
003485,002112:
003486,002113: 00,2653 00006 /NORM2 EXTEND # IF LESS THAN .5, AUGMENT DVNORMCT AND
003487,002114: 00,2654 24123 AUG DVNORMCT # DOUBLE DIVISOR.
003488,002115: 00,2655 00006 EXTEND
003489,002116: 00,2656 30115 DCA BUF
003490,002117: 00,2657 20115 DAS BUF
003491,002118:
003492,002119: 00,2660 30114 /NORM CA BUF # SEE IF DIVISOR NORMALIZED.
003493,002120: 00,2661 60000 DOUBLE
003494,002121: 00,2662 54000 OVSK
003495,002122: 00,2663 12653 TCF /NORM2 # DOUBLE AND TRY AGAIN IF NOT.
003496,002123:
003497,002124: 00,2664 02676 TC V/SCDV # DO X COMPONENT DIVIDE.
003498,002125: 00,2665 52144 DXCH MPAC +3 # SUPPLY ARGUMENTS IN USUAL SEQUENCE.
003499,002126: 00,2666 52141 DXCH MPAC
003500,002127: 00,2667 52144 DXCH MPAC +3
003501,002128:
003502,002129: 00,2670 02676 TC V/SCDV # Y COMPONENT.
003503,002130: 00,2671 52146 DXCH MPAC +5
003504,002131: 00,2672 52141 DXCH MPAC
003505,002132: 00,2673 52146 DXCH MPAC +5
003506,002133:
003507,002134: 00,2674 02676 TC V/SCDV # Z COMPONENT.
003508,002135: 00,2675 17405 TCF VROTATEX # GO RE-ARRANGE COMPONENTS BEFORE EXIT.
003509,002136:
003510,002137: # SUBROUTINE USED BY V/SC TO DIVIDE VECTOR COMPONENT IN MPAC,+1 BY THE SCALAR GIVEN IN BUF.
003511,002138:
003512,002139: 00,2676 30113 V/SCDV CA VBUF +5 # REFLECTS SIGN OF SCALAR.
003513,002140: 00,2677 54122 TS DVSIGN
003514,002141:
003515,002142: 00,2700 10140 CCS MPAC # FORCE MPAC POSITIVE, EXITING ON ZERO.
003516,002143: 00,2701 12715 TCF /MPAC+
003517,002144: 00,2702 12704 TCF +2
003518,002145: 00,2703 12711 TCF /MPAC-
003519,002146:
003520,002147: 00,2704 10141 CCS MPAC +1
003521,002148: 00,2705 12715 TCF /MPAC+
003522,002149: 00,2706 00002 TC Q
003523,002150: 00,2707 12711 TCF /MPAC-
003524,002151: 00,2710 00002 TC Q
003525,002152:
003526,002153: 00,2711 00006 /MPAC- EXTEND # USUAL COMPLEMENTING AND SETTING OF SIGN.
003527,002154: 00,2712 40141 DCS MPAC
003528,002155: 00,2713 52141 DXCH MPAC
003529,002156: 00,2714 24122 INCR DVSIGN
003530,002157:
003531,002158: 00,2715 47671 /MPAC+ CS ONE # INITIALIZE NEAR-ONE SWITCH.
003532,002159: 00,2716 54124 TS MAXDVSW
003533,002160:
003534,002161: 00,2717 40140 CS MPAC # CHECK POSSIBLE OVERFLOW.
003535,002162: 00,2720 60117 AD BUF2 # UNNORMALIZED INPUT DIVISOR.
003536,002163: 00,2721 00006 EXTEND
003537,002164: 00,2722 62726 BZMF /AGREE # CHECK FOR NEAR-ONE OR OVERFLOW.
003538,002165:
003539,002166: 00,2723 52141 DDVCALL DXCH MPAC # CALL PRE-DIVIDE NORMALIZATION.
003540,002167: 00,2724 50123 INDEX DVNORMCT
003541,002168: 00,2725 12510 TCF MAXTEST
003542,002169:
003543,002170: 00,2726 37654 /AGREE CAF HALF # FORCE SIGN AGREEMENT IN DIVIDEND
003544,002171: 00,2727 60000 DOUBLE # (ALREADY DONE FOR DIVISOR).
003545,002172: 00,2730 60141 AD MPAC +1
003546,002173: 00,2731 54141 TS MPAC +1
003547,002174: 00,2732 37675 CAF ZERO
003548,002175: 00,2733 67651 AD POSMAX
003549,002176: 00,2734 26140 ADS MPAC
003550,002177:
003551,002178: 00,2735 40140 CS MPAC # CHECK TO SEE IF OVERFLOW GONE OR IF
003552,002179: 00,2736 60117 AD BUF2 # NEAR-ONE CASE IS PRESENT.
003553,002180: 00,2737 10000 CCS A
003554,002181: 00,2740 12723 TCF DDVCALL # NOT NEAR-ONE.
003555,002182: 00,2741 32506 SLOPELO DEC .8324
003556,002183: 00,2742 12356 TCF DVOVF # NO HOPE.
003557,002184:
003558,002185: 00,2743 54124 TS MAXDVSW # SIGNAL POSSIBLE NEAR-ONE CASE.
003559,002186: 00,2744 40141 CS MPAC +1 # SEE IF DIVISION CAN BE DONE.
003560,002187: 00,2745 60120 AD BUF2 +1
003561,002188: 00,2746 00006 EXTEND
003562,002189: 00,2747 62356 BZMF DVOVF
003563,002190: 00,2750 12723 TCF DDVCALL # GOING TO MAXDV.
003564,002191:
003565,002192: # THE FOLLOWING ROUTINE EXECUTES THE UNIT INSTRUCTION, WHICH TAKES THE UNIT OF THE VECTOR IN MPAC.
003566,002193:
003567,002194: 00,2751 07520 UNIT TC MPACVBUF # SAVE THE ARGUMENT IN VBUF.
003568,002195: 00,2752 37675 CAF ZERO # MUST SENSE OVERFLOW IN FOLLOWING DOT.
003569,002196: 00,2753 56105 XCH OVFIND
003570,002197: 00,2754 54125 TS TEM1
003571,002198: 00,2755 03250 TC VSQSUB # DOT MPAC WITH ITSELF.
003572,002199: 00,2756 30125 CA TEM1
003573,002200: 00,2757 56105 XCH OVFIND
003574,002201: 00,2760 00006 EXTEND
003575,002202: 00,2761 12763 BZF +2
003576,002203: 00,2762 12356 TCF DVOVF
003577,002204: 00,2763 00006 EXTEND
003578,002205: 00,2764 30141 DCA MPAC # LEAVE THE SQUARE OF THE LENGTH OF THE
003579,002206: 00,2765 50104 INDEX FIXLOC # ARGUMENT IN LVSQUARE.
003580,002207: 00,2766 52043 DXCH LVSQUARE
003581,002208:
003582,002209: 00,2767 03274 TC SQRTSUB # GO TAKE THE NORMALIZED SQUARE ROOT.
003583,002210:
003584,002211: 00,2770 10140 CCS MPAC # CHECK FOR UNIT OVERFLOW.
003585,002212: 00,2771 12776 TCF +5 # MPAC IS NOT LESS THAN .5 UNLESS
003586,002213: 00,2772 54001 TS L
003587,002214: 00,2773 50104 INDEX FIXLOC
003588,002215: 00,2774 52045 DXCH LV
003589,002216: 00,2775 12356 TCF DVOVF # INPUT TO SQRTSUB WAS 0.
003590,002217:
003591,002218: 00,2776 43077 CS FOURTEEN # SEE IF THE INPUT WAS SO SMALL THE THE
003592,002219: 00,2777 60121 AD MPTEMP # FIRST TWO REGISTERS OF THE SQUARE WERE 0
003593,002220: 00,3000 10000 CCS A
003594,002221: 00,3001 40000 COM # IF SO, SAVE THE NEGATIVE OF THE SHIFT
003595,002222: 00,3002 13060 TCF SMALL # COUNT -15D.
003596,002223:
003597,002224: 00,3003 13012 TCF LARGE # (THIS IS USUALLY THE CASE.)
003598,002225:
003599,002226: 00,3004 43076 CS THIRTEEN # IF THE SHIFT COUNT WAS EXACTLY 14, SET
003600,002227: 00,3005 54121 TS MPTEMP # THE PRE-DIVIDE NORM COUNT TO -13D.
003601,002228:
003602,002229: 00,3006 30140 CA MPAC # SHIFT THE LENGTH RIGHT 14 BEFORE STORING
003603,002230: 00,3007 54001 SMALL2 TS L # (SMALL EXITS TO THIS POINT).
003604,002231: 00,3010 37675 CAF ZERO
003605,002232: 00,3011 13037 TCF LARGE2 # GO TO STORE LENGTH AND PROCEED.
003606,002233:
003607,002234: 00,3012 10121 LARGE CCS MPTEMP # MOST ALL CASES COME HERE.
003608,002235: 00,3013 13021 TCF LARGE3 # SEE IF NO NORMALIZATION WAS REQUIRED BY
003609,002236:
003610,002237: 00,3014 42005 CS SRDDV # SQRT, AND IF SO, SET UP FOR A SHIFT
003611,002238: 00,3015 54121 TS MPTEMP # RIGHT 1 BEFORE DIVIDING TO PRODUCE
003612,002239: 00,3016 00006 EXTEND # THE DESIRED HALF UNIT VECTOR.
003613,002240: 00,3017 30141 DCA MPAC
003614,002241: 00,3020 13037 TCF LARGE2
003615,002242:
003616,002243: 00,3021 40000 LARGE3 COM # LEAVE NEGATIVE OF SHIFT COUNT-1 FOR
003617,002244: 00,3022 54121 TS MPTEMP # PREDIVIDE LEFT SHIFT.
003618,002245:
003619,002246: 00,3023 40000 COM # PICK UP REQUIRED SHIFTING BIT TO UNNORM-
003620,002247: 00,3024 50000 INDEX A # ALIZE THE SQRT RESULT.
003621,002248: 00,3025 37654 CAF BIT14
003622,002249: 00,3026 54114 TS BUF
003623,002250: 00,3027 00006 EXTEND
003624,002251: 00,3030 70141 MP MPAC +1
003625,002252: 00,3031 56114 XCH BUF
003626,002253: 00,3032 00006 EXTEND # (UNNORMALIZE THE SQRT FOR LV).
003627,002254: 00,3033 70140 MP MPAC
003628,002255: 00,3034 56001 XCH L
003629,002256: 00,3035 60114 AD BUF
003630,002257: 00,3036 56001 XCH L
003631,002258:
003632,002259: 00,3037 50104 LARGE2 INDEX FIXLOC
003633,002260: 00,3040 52045 DXCH LV # LENGTH NOW STORED IN WORK AREA.
003634,002261:
003635,002262: 00,3041 47671 CS ONE
003636,002263: 00,3042 54124 TS MAXDVSW # NO MAXDV CASES IN UNIT.
003637,002264:
003638,002265: 00,3043 52107 DXCH VBUF # PREPARE X COMPONENT FOR DIVIDE, SETTING
003639,002266: 00,3044 52141 DXCH MPAC # LENGTH OF VECTOR AS DIVISOR IN BUF.
003640,002267: 00,3045 52115 DXCH BUF
003641,002268: 00,3046 03100 TC UNITDV
003642,002269:
003643,002270: 00,3047 52111 DXCH VBUF +2 # DO Y AND Z IN USUAL FASHION SO WE CAN
003644,002271: 00,3050 52141 DXCH MPAC # EXIT THROUGH VROTATEX.
003645,002272: 00,3051 52144 DXCH MPAC +3
003646,002273: 00,3052 03100 TC UNITDV
003647,002274:
003648,002275: 00,3053 52113 DXCH VBUF +4
003649,002276: 00,3054 52141 DXCH MPAC
003650,002277: 00,3055 52146 DXCH MPAC +5
003651,002278: 00,3056 03100 TC UNITDV
003652,002279: 00,3057 17405 TCF VROTATEX # AND EXIT.
003653,002280:
003654,002281: # IF THE LENGTH OF THE ARGUMENT VECTOR WAS LESS THAN 2(-28), EACH COMPONENT MUST BE SHIFTED LEFT AT LEAST
003655,002282: # 14 PLACES BEFORE THE DIVIDE. NOTE THAT IN THIS CASE, THE MAJOR PART OF EACH COMPONENT IS ZERO.
003656,002283:
003657,002284: 00,3060 54121 SMALL TS MPTEMP # NEGATIVE OF PRE-DIVIDE SHIFT COUNT.
003658,002285:
003659,002286: 00,3061 37675 CAF ZERO # SHIFT EACH COMPONENT LEFT 14.
003660,002287: 00,3062 56107 XCH VBUF +1
003661,002288: 00,3063 56106 XCH VBUF
003662,002289: 00,3064 56111 XCH VBUF +3
003663,002290: 00,3065 56110 XCH VBUF +2
003664,002291: 00,3066 56113 XCH VBUF +5
003665,002292: 00,3067 56112 XCH VBUF +4
003666,002293:
003667,002294: 00,3070 40121 CS MPTEMP
003668,002295: 00,3071 50000 INDEX A
003669,002296: 00,3072 37654 CAF BIT14
003670,002297: 00,3073 00006 EXTEND
003671,002298: 00,3074 70140 MP MPAC
003672,002299: 00,3075 13007 TCF SMALL2
003673,002300:
003674,002301: 00,3076 00015 THIRTEEN DEC 13 B-14
003675,002302: 00,3077 00016 FOURTEEN DEC 14 B-14
003676,002303:
003677,002304: # THE FOLLOWING ROUTINE SETS UP THE CALL TO THE DIVIDE ROUTINES.
003678,002305:
003679,002306: 00,3100 10140 UNITDV CCS MPAC # FORCE MPAC POSITIVE IF POSSIBLE, SETTING
003680,002307: 00,3101 13117 TCF UMPAC+ # DVSIGN ACCORDING TO THE SIGN OF MPAC
003681,002308: 00,3102 13104 TCF +2 # SINCE THE DIVISOR IS ALWAYS POSITIVE
003682,002309: 00,3103 13111 TCF UMPAC- # HERE.
003683,002310:
003684,002311: 00,3104 10141 CCS MPAC +1
003685,002312: 00,3105 13117 TCF UMPAC+
003686,002313: 00,3106 00002 TC Q # EXIT IMMEDIATELY ON ZERO.
003687,002314: 00,3107 13111 TCF UMPAC-
003688,002315: 00,3110 00002 TC Q
003689,002316:
003690,002317: 00,3111 47675 UMPAC- CS ZERO # IF NEGATIVE, SET -0 IN DVSIGN FOR FINAL
003691,002318: 00,3112 54122 TS DVSIGN # COMPLEMENT.
003692,002319: 00,3113 00006 EXTEND
003693,002320: 00,3114 40141 DCS MPAC # PICK UP ABSOLUTE VALUE OF ARG AND JUMP.
003694,002321: 00,3115 50121 INDEX MPTEMP
003695,002322: 00,3116 12507 TCF MAXTEST -1
003696,002323:
003697,002324: 00,3117 54122 UMPAC+ TS DVSIGN # SET DVSIGN FOR POSITIVE QUOTIENT.
003698,002325: 00,3120 52141 DXCH MPAC
003699,002326: 00,3121 50121 INDEX MPTEMP
003700,002327: 00,3122 12507 TCF MAXTEST -1
003701,002328:
003702,002329: # MISCELLANEOUS UNARY OPERATIONS.
003703,002330:
003704,002331: 00,3123 03231 DSQ TC DSQSUB # SQUARE THE DP CONTENTS OF MPAC.
003705,002332: 00,3124 16012 TCF DANZIG
003706,002333:
003707,002334: 00,3125 10147 ABVALABS CCS MODE # ABVAL OR ABS INSTRUCTION.
003708,002335: 00,3126 13155 TCF ABS # DO ABS ON SCALAR.
003709,002336: 00,3127 13155 TCF ABS
003710,002337:
003711,002338: 00,3130 03250 ABVAL TC VSQSUB # DOT MPAC WITH ITSELF.
003712,002339: 00,3131 22147 LXCH MODE # MODE IS NOW DP (L ZERO AFTER DAS).
003713,002340:
003714,002341: 00,3132 00006 EXTEND # STORE SQUARE OF LENGTH IN WORK AREA.
003715,002342: 00,3133 30141 DCA MPAC
003716,002343: 00,3134 50104 INDEX FIXLOC
003717,002344: 00,3135 52043 DXCH LVSQUARE
003718,002345:
003719,002346: 00,3136 03274 SQRT TC SQRTSUB # TAKE THE SQUARE ROOT OF MPAC.
003720,002347: 00,3137 10121 CCS MPTEMP # RETURNED NORMALIZED SQUARE ROOT. SEE IF
003721,002348: 00,3140 13142 TCF +2 # ANY UN-NORMALIZATION REQUIRED AND EXIT
003722,002349: 00,3141 16012 TCF DANZIG # IF NOT.
003723,002350:
003724,002351: 00,3142 63657 AD NEG12 # A RIGHT SHIFT OF MORE THAN 13 COULD BE
003725,002352: 00,3143 00006 EXTEND # REQUIRED IF INPUT WAS ZERO IN MPAC,+1.
003726,002353: 00,3144 63150 BZMF SQRTSHFT # GOES HERE IN MOST CASES.
003727,002354: 00,3145 22007 ZL # IF A LONG SHIFT IS REQUIRED, GO TO
003728,002355: 00,3146 22102 LXCH ADDRWD # GENERAL RIGHT SHIFT ROUTINES.
003729,002356: 00,3147 12264 TCF GENSCR +4 # ADDRWD WAS ZERO TO PREVENT ROUND.
003730,002357:
003731,002358: 00,3150 50121 SQRTSHFT INDEX MPTEMP # SELECT SHIFTING BIT AND EXIT THROUGH
003732,002359: 00,3151 37653 CAF BIT15 # SHIFT ROUTINES.
003733,002360: 00,3152 54121 TS MPTEMP
003734,002361: 00,3153 37675 CAF ZERO # TO ZERO MPAC +2 IN THE PROCESS.
003735,002362: 00,3154 12017 TCF MPACSHR +3
003736,002363:
003737,002364: 00,3155 06706 ABS TC BRANCH # TEST SIGN OF MPAC AND COMPLEMENT IF
003738,002365: 00,3156 16012 TCF DANZIG
003739,002366: 00,3157 16012 TCF DANZIG
003740,002367: 00,3160 17630 TCF COMP
003741,002368:
003742,002369: 00,3161 47667 VDEF CS FOUR # VECTOR DEFINE - ESSENTIALLY TREATS
003743,002370: 00,3162 26152 ADS PUSHLOC # SCALAR IN MPAC AS X COMPONENT, PUSHES UP
003744,002371: 00,3163 00006 EXTEND # FOR Y AND THEN AGAIN FOR Z.
003745,002372: 00,3164 50000 INDEX A
003746,002373: 00,3165 30003 DCA 2
003747,002374: 00,3166 52144 DXCH MPAC +3
003748,002375: 00,3167 00006 EXTEND
003749,002376: 00,3170 50152 INDEX PUSHLOC
003750,002377: 00,3171 30001 DCA 0
003751,002378: 00,3172 52146 DXCH MPAC +5
003752,002379: 00,3173 47671 CS ONE # MODE IS NOW VECTOR.
003753,002380: 00,3174 16011 TCF NEWMODE
003754,002381:
003755,002382: 00,3175 03250 VSQ TC VSQSUB # DOT MPAC WITH ITSELF.
003756,002383: 00,3176 37675 CAF ZERO
003757,002384: 00,3177 16011 TCF NEWMODE # MODE IS NOW DP.
003758,002385:
003759,002386: 00,3200 00006 PUSH EXTEND # PUSH DOWN MPAC LEAVING IT LOADED.
003760,002387: 00,3201 30141 DCA MPAC
003761,002388: 00,3202 50152 INDEX PUSHLOC # PUSH DOWN FIRST TWO REGISTERS IN EACH
003762,002389: 00,3203 52001 DXCH 0
003763,002390:
003764,002391: 00,3204 50147 INDEX MODE # INCREMENT PUSHDOWN POINTER.
003765,002392: 00,3205 36175 CAF NO.WDS
003766,002393: 00,3206 26152 ADS PUSHLOC
003767,002394:
003768,002395: 00,3207 10147 CCS MODE
003769,002396: 00,3210 13223 TCF TPUSH # PUSH DOWN MPAC +2.
003770,002397: 00,3211 16012 TCF DANZIG # DONE FOR DP.
003771,002398:
003772,002399: 00,3212 00006 EXTEND # ON VECTOR, PUSH DOWN Y AND Z COMPONENTS.
003773,002400: 00,3213 30144 DCA MPAC +3
003774,002401: 00,3214 50152 INDEX PUSHLOC
003775,002402: 00,3215 51775 DXCH 0 -4
003776,002403: 00,3216 00006 EXTEND
003777,002404: 00,3217 30146 DCA MPAC +5
003778,002405: 00,3220 50152 INDEX PUSHLOC
003779,002406: 00,3221 51777 DXCH 0 -2
003780,002407: 00,3222 16012 TCF DANZIG
003781,002408:
003782,002409: 00,3223 30142 TPUSH CA MPAC +2
003783,002410: 00,3224 16537 TCF ENDTPUSH +2
003784,002411:
003785,002412: 00,3225 50104 RVQ INDEX FIXLOC # RVQ - RETURN IVA QPRET.
003786,002413: 00,3226 30052 CA QPRET
003787,002414: 00,3227 54103 TS POLISH
003788,002415: 00,3230 16635 TCF GOTO +4 # (ASSUME QPRET POINTS TO FIXED ONLY.)
003789,002416:
003790,002417: # THE FOLLOWING SUBROUTINES ARE USED IN SQUARING MPAC, IN BOTH THE SCALAR AND VECTOR SENSE. THEY ARE
003791,002418: # SPECIAL CASES OF DMPSUB AND DOTSUB, PUT IN TO SAVE SOME TIME.
003792,002419:
003793,002420: 00,3231 30141 DSQSUB CA MPAC +1 # SQUARES THE SCALAR CONTENTS OF MPAC.
003794,002421: 00,3232 00006 EXTEND
003795,002422: 00,3233 70000 SQUARE
003796,002423: 00,3234 54142 TS MPAC +2
003797,002424: 00,3235 37675 CAF ZERO # FORM 2(CROSS TERM).
003798,002425: 00,3236 56141 XCH MPAC +1
003799,002426: 00,3237 00006 EXTEND
003800,002427: 00,3240 70140 MP MPAC
003801,002428: 00,3241 20001 DDOUBL # AND MAYBE OVERFLOW.
003802,002429:
003803,002430: 00,3242 20142 DAS MPAC +1 # AND SET A TO NET OVERFLOW.
003804,002431: 00,3243 56140 XCH MPAC
003805,002432: 00,3244 00006 EXTEND
003806,002433: 00,3245 70000 SQUARE
003807,002434: 00,3246 20141 DAS MPAC
003808,002435: 00,3247 00002 TC Q
003809,002436:
003810,002437: 00,3250 00006 VSQSUB EXTEND # DOTS THE VECTOR IN MPAC WITH ITSELF.
003811,002438: 00,3251 22123 QXCH DOTRET
003812,002439: 00,3252 03231 TC DSQSUB # SQUARE THE X COMPONENT.
003813,002440: 00,3253 52144 DXCH MPAC +3
003814,002441: 00,3254 52141 DXCH MPAC
003815,002442: 00,3255 52115 DXCH BUF # SO WE CAN END IN DOTSUB.
003816,002443: 00,3256 30142 CA MPAC +2
003817,002444: 00,3257 54116 TS BUF +2
003818,002445:
003819,002446: 00,3260 03231 TC DSQSUB # SQUARE Y COMPONENT.
003820,002447: 00,3261 52142 DXCH MPAC +1
003821,002448: 00,3262 20116 DAS BUF +1
003822,002449: 00,3263 60140 AD MPAC
003823,002450: 00,3264 60114 AD BUF
003824,002451: 00,3265 54114 TS BUF
003825,002452: 00,3266 13270 TCF +2
003826,002453: 00,3267 54105 TS OVFIND # IF OVERFLOW.
003827,002454:
003828,002455: 00,3270 52146 DXCH MPAC +5
003829,002456: 00,3271 52141 DXCH MPAC
003830,002457: 00,3272 03231 TC DSQSUB # SQUARE Z COMPONENT.
003831,002458: 00,3273 17164 TCF ENDDOT # END AS IN DOTSUB.
003832,002459:
003833,002460: # DOUBLE PRECISION SQUARE ROOT ROUTINE. TAKE THE SQUARE ROOT OF THE TRIPLE PRECISION (MPAC +2 USED ONLY
003834,002461: # IN NORMALIZATION) CONTENTS OF MPAC AND LEAVE THE NORMALIZED RESULT IN MPAC (C(MPAC) GREATER THAN OR EQUAL TO
003835,002462: # .5). THE RIGHT SHIFT COUNT (TO UNNORMALIZE) IS LEFT IN MPTEMP.
003836,002463:
003837,002464:
003838,002465:
003839,002466: 00,3274 37675 SQRTSUB CAF ZERO # START BY ZEROING RIGHT SHIFT COUNT.
003840,002467: 00,3275 54121 TS MPTEMP
003841,002468:
003842,002469: 00,3276 10140 CCS MPAC # CHECK FOR POSITIVE ARGUMENT, SHIFTING
003843,002470: 00,3277 13335 TCF SMPAC+ # FIRST SIGNIFICANT MPAC REGISTER INTO
003844,002471: 00,3300 13302 TCF +2 # MPAC ITSELF.
003845,002472: 00,3301 13324 TCF SQRTNEG # SEE IF MAG OF ARGUMENT LESS THAN 10(-4).
003846,002473:
003847,002474: 00,3302 56142 XCH MPAC +2 # MPAC IS ZERO - SHIFT LEFT 14.
003848,002475: 00,3303 56141 XCH MPAC +1
003849,002476: 00,3304 54140 TS MPAC
003850,002477: 00,3305 37673 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
003851,002478: 00,3306 54121 TS MPTEMP
003852,002479:
003853,002480: 00,3307 10140 CCS MPAC # SEE IF MPAC NOW PNZ.
003854,002481: 00,3310 13335 TCF SMPAC+
003855,002482: 00,3311 13313 TCF +2
003856,002483: 00,3312 13327 TCF ZEROANS # NEGATIVE BUT LESS THAN 10(-4) IN MAG.
003857,002484:
003858,002485: 00,3313 56141 XCH MPAC +1 # ZERO - SHIFT LEFT 14 AGAIN.
003859,002486: 00,3314 54140 TS MPAC
003860,002487: 00,3315 37673 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
003861,002488: 00,3316 26121 ADS MPTEMP
003862,002489:
003863,002490: 00,3317 10140 CCS MPAC
003864,002491: 00,3320 13335 TCF SMPAC+
003865,002492: 00,3321 00002 TC Q # SQRT(0) = 0.
003866,002493: 00,3322 13327 TCF ZEROANS
003867,002494: 00,3323 00002 TC Q
003868,002495:
003869,002496:
003870,002497:
003871,002498: 00,3324 10000 SQRTNEG CCS A # ARGUMENT IS NEGATIVE, BUT SEE IF SIGN-
003872,002499: 00,3325 13333 TCF SQRTABRT # CORRECTED ARGUMENT IS LESS THAN 10(-4)
003873,002500:
003874,002501: 00,3326 10141 CCS MPAC +1 # IN MAGNITUDE. IF SO, CALL ANSWER ZERO.
003875,002502: 00,3327 37675 ZEROANS CAF ZERO # FORCE ANSWER TO ZERO HERE.
003876,002503: 00,3330 13403 TCF FIXROOT
003877,002504: 00,3331 13333 TCF SQRTABRT
003878,002505: 00,3332 13403 TCF FIXROOT
003879,002506:
003880,002507: 00,3333 05440 SQRTABRT TC ABORT
003881,002508: 00,3334 01302 OCT 1302
003882,002509:
003883,002510: 00,3335 62411 SMPAC+ AD -1/2+2 # SEE IF ARGUMENT GREATER THAN OR EQUAL TO
003884,002511: 00,3336 00006 EXTEND # .5.
003885,002512: 00,3337 63406 BZMF SRTEST # IF SO, SEE IF LESS THAN .25.
003886,002513:
003887,002514: 00,3340 52141 DXCH MPAC # WE WILL TAKE THE SQUARE ROOT OF MPAC/2.
003888,002515: 00,3341 22021 LXCH SR # SHIFT RIGHT 1 AND GO TO THE SQRT ROUTINE
003889,002516: 00,3342 00006 EXTEND
003890,002517: 00,3343 77654 MP HALF
003891,002518: 00,3344 52141 DXCH MPAC
003892,002519: 00,3345 56021 XCH SR
003893,002520: 00,3346 26141 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
003894,002521:
003895,002522: 00,3347 32275 ARGHI CAF SLOPEHI # ARGUMENT BETWEEN .25 AND .5. GET A
003896,002523: 00,3350 00006 EXTEND # LINEAR APPROXIMATION FOR THIS RANGE.
003897,002524: 00,3351 70140 MP MPAC
003898,002525: 00,3352 62511 AD BIASHI # X0/2 = (MPAC/2)(SLOPEHI) + BIASHI/2.
003899,002526:
003900,002527: 00,3353 54114 +4 TS BUF # X0/2 (ARGLO ENTERS HERE).
003901,002528: 00,3354 30140 CA MPAC # SINGLE-PRECISION THROUGHOUT.
003902,002529: 00,3355 22007 ZL
003903,002530: 00,3356 00006 EXTEND
003904,002531: 00,3357 10114 DV BUF # (MPAC/2)/(X0/2)
003905,002532: 00,3360 00006 EXTEND
003906,002533: 00,3361 77654 MP HALF
003907,002534: 00,3362 26114 ADS BUF # X1 = X0/2 + .5(MPAC/2)/(X0/2).
003908,002535:
003909,002536: 00,3363 00006 EXTEND
003910,002537: 00,3364 77654 MP HALF # FORM UP X1/2.
003911,002538: 00,3365 52141 DXCH MPAC # SAVE AND BRING OUT ARGUMENT.
003912,002539: 00,3366 00006 EXTEND # TAKE DP QUOTIENT WITH X1.
003913,002540: 00,3367 10114 DV BUF
003914,002541: 00,3370 54115 TS BUF +1 # SAVE MAJOR PART OF QUOTIENT.
003915,002542: 00,3371 37675 CAF ZERO # FORM MINOR PART OF QUOTIENT USING
003916,002543: 00,3372 56001 XCH L # (REMAINDER,0).
003917,002544: 00,3373 00006 EXTEND
003918,002545: 00,3374 10114 DV BUF
003919,002546: 00,3375 54001 TS L # IN PREPARATION FOR DAS.
003920,002547: 00,3376 30115 CA BUF +1
003921,002548: 00,3377 20141 DAS MPAC # X2 = X1/2 + (MPAC/2)X1
003922,002549:
003923,002550: 00,3400 00006 EXTEND # OVERFLOWS IF ARG. NEAR POSMAX.
003924,002551: 00,3401 13405 BZF TCQBNK00
003925,002552: 00,3402 37651 CAF POSMAX
003926,002553: 00,3403 54140 FIXROOT TS MPAC
003927,002554: 00,3404 54141 TS MPAC +1
003928,002555: 00,3405 00002 TCQBNK00 TC Q # RETURN TO CALLER TO UNNORMALIZE, ETC.
003929,002556:
003930,002557: 00,3406 67655 SRTEST AD QUARTER # ARGUMENT WAS LESS THAN .5, SEE IF LESS
003931,002558: 00,3407 00006 EXTEND # THAN .25.
003932,002559: 00,3410 63432 BZMF SQRTNORM # IF SO, BEGIN NORMALIZATION.
003933,002560:
003934,002561: 00,3411 52141 DXCH MPAC # IF BETWEEN .5 AND .25, SHIFT RIGHT 1 AND
003935,002562: 00,3412 22021 LXCH SR # START AT ARGLO.
003936,002563: 00,3413 00006 EXTEND
003937,002564: 00,3414 77654 MP HALF
003938,002565: 00,3415 52141 DXCH MPAC
003939,002566: 00,3416 56021 XCH SR
003940,002567: 00,3417 26141 ADS MPAC +1 # NO OVERFLOW.
003941,002568:
003942,002569: 00,3420 32741 ARGLO CAF SLOPELO # (NORMALIZED) ARGUMENT BETWEEN .125 AND
003943,002570: 00,3421 00006 EXTEND # .25
003944,002571: 00,3422 70140 MP MPAC
003945,002572: 00,3423 62251 AD BIASLO
003946,002573: 00,3424 13353 TCF ARGHI +4 # BEGIN SQUARE ROOT.
003947,002574:
003948,002575: 00,3425 00006 SQRTNM2 EXTEND # SHIFT LEFT 2 AND INCREMENT RIGHT SHIFT
003949,002576: 00,3426 30142 DCA MPAC +1 # COUNT (FOR TERMINAL UNNORMALIZATION).
003950,002577: 00,3427 20142 DAS MPAC +1
003951,002578: 00,3430 60140 AD MPAC
003952,002579: 00,3431 26140 ADS MPAC # (NO OVERFLOW).
003953,002580:
003954,002581: 00,3432 24121 SQRTNORM INCR MPTEMP # FIRST TIME THROUGH, JUST SHIFT LEFT 1
003955,002582: 00,3433 00006 EXTEND # (PUTS IN EFFECTIVE RIGHT SHIFT SINCE
003956,002583: 00,3434 30142 DCA MPAC +1 # WE WANT MPAC/2).
003957,002584: 00,3435 20142 DAS MPAC +1
003958,002585: 00,3436 60140 AD MPAC
003959,002586: 00,3437 26140 ADS MPAC # (AGAIN NO OVERFLOW).
003960,002587: 00,3440 60000 DOUBLE
003961,002588: 00,3441 54022 TS CYL
003962,002589:
003963,002590: 00,3442 10022 NORMTEST CCS CYL # SEE IF ARGUMENT NOW NORMALIZED AT
003964,002591: 00,3443 10022 CCS CYL # GREATER THAN .125.
003965,002592: 00,3444 13425 TCF SQRTNM2 # NO - SHIFT LEFT 2 MORE AND TRY AGAIN.
003966,002593: 00,3445 13347 TCF ARGHI # YES - NOW BETWEEN .5 AND .25.
003967,002594: 00,3446 13420 TCF ARGLO # ARGUMENT NOW BETWEEN .25 AND .125.
003968,002595:
003969,002596: # TRIGONOMETRIC FUNCTION PACKAGE.
003970,002597:
003971,002598: # THE FOLLOWING TRIGONOMETRIC FUNCTIONS ARE AVAILABLE AS INTERPRETIVE OPERATIONS:
003972,002599:
003973,002600: # 1. SIN COMPUTES (1/2)SINE(2 PI MPAC).
003974,002601: # 2. COS COMPUTES (1/2)COSINE(2 PI MPAC).
003975,002602:
003976,002603: # 3. ASIN COMPUTES (1/2PI)ARCSINE(2 MPAC).
003977,002604: # 4. ACOS COMPUTES (1/2PI)ARCCOSINE(2 MPAC).
003978,002605:
003979,002606: # SIN-ASIN AND COS-ACOS ARE MUTUALLY INVERSE, IE SIN(ASIN(X)) = X.
003980,002607:
003981,002608: 00,3447 06706 COSINE TC BRANCH # FINDS COSINE USING THE IDENTITY
003982,002609: 00,3450 13453 TCF +3 # COS(X) = SIN(PI/2 - ABS(X)).
003983,002610: 00,3451 13456 TCF PRESINE
003984,002611: 00,3452 13456 TCF PRESINE
003985,002612:
003986,002613: 00,3453 00006 +3 EXTEND
003987,002614: 00,3454 40141 DCS MPAC
003988,002615: 00,3455 52141 DXCH MPAC
003989,002616:
003990,002617: 00,3456 37655 PRESINE CAF QUARTER # PI/2 SCALED.
003991,002618: 00,3457 26140 ADS MPAC
003992,002619:
003993,002620:
003994,002621:
003995,002622: 00,3460 52141 SINE DXCH MPAC # DOUBLE ARGUMENT.
003996,002623: 00,3461 20001 DDOUBL
003997,002624: 00,3462 54000 OVSK # SEE IF OVERFLOW PRESENT.
003998,002625: 00,3463 13466 TCF +3 # IF NOT, ARGUMENT OK AS IS.
003999,002626:
004000,002627: 00,3464 00006 EXTEND # IF SO, WE LOST (OR GAINED) PI, SO
004001,002628: 00,3465 40001 DCOM # COMPLEMENT MPAC USING THE IDENTITY
004002,002629: # SIN(X-(+)PI) = SIN(-X).
004003,002630: 00,3466 52141 +3 DXCH MPAC
004004,002631: 00,3467 30140 CA MPAC # SEE IF ARGUMENT GREATER THAN .5 IN
004005,002632: 00,3470 60000 DOUBLE # MAGNITUDE. IF SO, REDUCE IT TO LESS THAN
004006,002633: 00,3471 54001 TS L # .5 (+-PI/2 SCALED) AS FOLLOWS:
004007,002634: 00,3472 13503 TCF SN1
004008,002635:
004009,002636: 00,3473 50000 INDEX A # IF POSITIVE, FORM PI - X, IF NEGATIVE
004010,002637: 00,3474 37653 CAF NEG1/2 +1 # USE -PI - X.
004011,002638: 00,3475 60000 DOUBLE
004012,002639: 00,3476 00006 EXTEND
004013,002640: 00,3477 60140 SU MPAC # GUARANTEED NO OVERFLOW.
004014,002641: 00,3500 54140 TS MPAC
004015,002642: 00,3501 40141 CS MPAC +1
004016,002643: 00,3502 54141 TS MPAC +1
004017,002644:
004018,002645: 00,3503 00006 SN1 EXTEND # SET UP TO EVALUATE HASTINGS POLYNOMIAL
004019,002646: 00,3504 30141 DCA MPAC
004020,002647: 00,3505 52120 DXCH BUF2
004021,002648: 00,3506 03231 TC DSQSUB # SQUARE MPAC.
004022,002649:
004023,002650: 00,3507 07201 TC POLY # EVALUATE FOURTH ORDER POLYNOMIAL.
004024,002651: 00,3510 00003 DEC 3 B-14
004025,002652: 00,3511 14441 37325 2DEC +.3926990796
004026,002653:
004027,002654: 00,3513 53250 60764 2DEC -.6459637111
004028,002655:
004029,002656: 00,3515 12146 21276 2DEC +.318758717
004030,002657:
004031,002658: 00,3517 75466 71471 2DEC -.074780249
004032,002659:
004033,002660: 00,3521 00236 32757 2DEC +.009694988
004034,002661:
004035,002662: 00,3523 32435 CAF LBUF2 # MULTIPLY BY ARGUMENT AND SHIFT LEFT 2.
004036,002663: 00,3524 07065 TC DMPSUB -1
004037,002664:
004038,002665: 00,3525 00006 EXTEND
004039,002666: 00,3526 30142 DCA MPAC +1
004040,002667: 00,3527 20142 DAS MPAC +1
004041,002668: 00,3530 60140 AD MPAC
004042,002669: 00,3531 26140 ADS MPAC # NEITHER SHIFT OVERFLOWS.
004043,002670: 00,3532 00006 EXTEND
004044,002671: 00,3533 30142 DCA MPAC +1
004045,002672: 00,3534 20142 DAS MPAC +1
004046,002673: 00,3535 60140 AD MPAC
004047,002674: 00,3536 26140 ADS MPAC
004048,002675: 00,3537 16012 TCF DANZIG
004049,002676:
004050,002677: # ARCSIN/ARCCOS ROUTINE.
004051,002678:
004052,002679: 00,3540 33561 ARCSIN CAF LASINEX # COMPUTE ARCSIN BY USING THE IDENTITY
004053,002680: 00,3541 13543 TCF +2 # ARCSIN(X) = PI/2 - ARCCOS(X).
004054,002681:
004055,002682: 00,3542 33643 ARCCOS CAF LDANZIG # (EXITS IMMEDIATELY).
004056,002683: 00,3543 54122 TS ESCAPE
004057,002684: 00,3544 06706 TC BRANCH # TEST SIGN OF INPUT.
004058,002685: 00,3545 13555 TCF ACOSST # START IMMEDIATELY IF POSITIVE.
004059,002686: 00,3546 13655 TCF ACOSZERO # ARCCOS(0) = PI/2 = .25.
004060,002687: 00,3547 00006 EXTEND # IF NEGATIVE, USE THE IDENTITY
004061,002688: 00,3550 40141 DCS MPAC # ARCCOS(X) = PI - ARCCOS(-X), FORCING
004062,002689: 00,3551 52141 DXCH MPAC # ARGUMENT POSITIVE.
004063,002690: 00,3552 33660 CAF TCSUBTR # SET EXIT TO DO ABOVE BEFORE
004064,002691:
004065,002692: 00,3553 56122 XCH ESCAPE # ARCSIN/ARCCOS CONSIDERATIONS.
004066,002693: 00,3554 54123 TS ESCAPE2
004067,002694:
004068,002695: 00,3555 47654 ACOSST CS HALF # TEST MAGNITUDE OF INPUT.
004069,002696: 00,3556 60140 AD MPAC
004070,002697: 00,3557 10000 CCS A
004071,002698: 00,3560 13651 TCF ACOSOVF # THIS IS PROBABLY AN OVERFLOW CASE.
004072,002699:
004073,002700: 00,3561 13637 LASINEX TCF ASINEX
004074,002701:
004075,002702: 00,3562 13572 TCF ACOSST2 # NO OVERFLOW - PROCEED.
004076,002703:
004077,002704: 00,3563 10141 CCS MPAC +1 # IF MAJOR PART IS .5, CALL ANSWER 0
004078,002705: 00,3564 37675 CAF ZERO # UNLESS MINOR PART NEGATIVE.
004079,002706: 00,3565 13567 TCF ACOS=0
004080,002707:
004081,002708: 00,3566 13572 TCF ACOSST2
004082,002709:
004083,002710: 00,3567 54141 ACOS=0 TS MPAC +1
004084,002711: 00,3570 54140 TS MPAC
004085,002712: 00,3571 00122 TC ESCAPE
004086,002713:
004087,002714: 00,3572 00006 ACOSST2 EXTEND # NOW THAT ARGUMENT IS IN PROPER RANGE,
004088,002715: 00,3573 40141 DCS MPAC # BEGIN COMPUTATION. USE HASTINGS
004089,002716: 00,3574 67654 AD HALF # APPROXIMATION ARCCOS(X) = SQRT(1-X)P(X)
004090,002717: 00,3575 52141 DXCH MPAC # IN A SCALED VERSION WHERE P(X) IS A
004091,002718: 00,3576 52120 DXCH BUF2 # SEVENTH ORDER POLYNOMIAL.
004092,002719:
004093,002720: 00,3577 03274 TC SQRTSUB # RETURNS WITH NORMALIZED SQUARE ROOT.
004094,002721:
004095,002722: 00,3600 10121 CCS MPTEMP # SEE IF UN-NORMALIZATION REQUIRED.
004096,002723: 00,3601 13644 TCF ACOSSHR # IF SO.
004097,002724:
004098,002725: 00,3602 52141 ACOS3 DXCH MPAC # SET UP FOR POLYNOMIAL EVALUATION.
004099,002726: 00,3603 52120 DXCH BUF2
004100,002727: 00,3604 52141 DXCH MPAC
004101,002728:
004102,002729: 00,3605 07201 TC POLY
004103,002730: 00,3606 00006 DEC 6 B-14
004104,002731: 00,3607 13240 23630 2DEC +.353553385 # COEFFICIENTS ARE C 2(+I)/PISQRT(2) WHERE
004105,002732:
004106,002733: 00,3611 74721 47775 2DEC* -.0483017006 B+1* # I
004107,002734:
004108,002735: 00,3613 02440 20237 2DEC* +.0200273085 B+2* # WHERE C STANDS FOR ORIGINAL COEFFS.
004109,002736:
004110,002737: 00,3615 75067 70742 2DEC* -.0112931863 B+3*
004111,002738:
004112,002739: 00,3617 03436 26756 2DEC* +.00695311612 B+4*
004113,002740:
004114,002741: 00,3621 74037 57640 2DEC* -.00384617957 B+5*
004115,002742:
004116,002743: 00,3623 03046 07143 2DEC* +.001501297736 B+6*
004117,002744:
004118,002745: 00,3625 76654 42244 2DEC* -.000284160334 B+7*
004119,002746:
004120,002747: 00,3627 32435 CAF LBUF2 # DO FINAL MULTIPLY AND GO TO ANY
004121,002748: 00,3630 07065 TC DMPSUB -1 # EPILOGUE SEQUENCES.
004122,002749: 00,3631 00122 TC ESCAPE
004123,002750:
004124,002751: 00,3632 00006 SUBTR EXTEND # EPILOGUE FOR NEGATIVE INPUTS TO ARCCOS.
004125,002752: 00,3633 40141 DCS MPAC
004126,002753: 00,3634 67654 AD HALF # FORMS PI - ARCCOS(-X) = ARCCOS(X).
004127,002754: 00,3635 52141 DXCH MPAC
004128,002755: 00,3636 00123 TC ESCAPE2 # GO TO POSSIBLE ARCSIN EPILOGUE.
004129,002756:
004130,002757: 00,3637 00006 ASINEX EXTEND
004131,002758: 00,3640 40141 DCS MPAC # ARCSIN EPILOGUE - GET ARCSIN(X)
004132,002759: 00,3641 67655 AD QUARTER # = PI/2 - ARCCOS(X).
004133,002760: 00,3642 52141 DXCH MPAC
004134,002761: 00,3643 16012 LDANZIG TCF DANZIG
004135,002762:
004136,002763: 00,3644 50000 ACOSSHR INDEX A # THE SHIFT RIGHT IS LESS THAN 14 SINCE
004137,002764: 00,3645 37654 CAF BIT14 # THE INPUT WAS NON-ZERO DP.
004138,002765: 00,3646 54121 TS MPTEMP
004139,002766: 00,3647 02054 TC VSHRRND # DP SHIFT RIGHT AND ROUND.
004140,002767: 00,3650 13602 TCF ACOS3 # PROCEED.
004141,002768:
004142,002769: 00,3651 00006 ACOSOVF EXTEND # IF MAJOR PART WAS ONLY 1 MORE THAN .5,
004143,002770: 00,3652 13567 BZF ACOS=0 # CALL ANSWER ZERO.
004144,002771:
004145,002772: 00,3653 05440 ACOSABRT TC ABORT
004146,002773: 00,3654 01301 OCT 1301
004147,002774:
004148,002775: 00,3655 37655 ACOSZERO CAF QUARTER # ACOS(0) = PI/2.
004149,002776: 00,3656 13570 TCF ACOS=0 +1 # SET MPAC AND EXIT VIA ESCAPE.
004150,002777:
004151,002778: 00,3657 77763 NEG12 DEC -12 B-14
004152,002779: 00,3660 13632 TCSUBTR TCF SUBTR
004153,002780: 00,3661 ENDINTS0 EQUALS
004154,002781:
004155,002782: # THE FOLLOWING INSTRUCTIONS ARE AVAILABLE FOR SETTING, MODIFYING, AND BRANCHING ON INDEX REGISTERS:
004156,002783: # 1. AXT ADDRESS TO INDEX TRUE.
004157,002784: # 2. AXC ADDRESS TO INDEX COMPLEMENTED.
004158,002785: # 3. LXA LOAD INDEX FROM ERASABLE.
004159,002786: # 4. LXC LOAD INDEX COMPLEMENTED FROM ERASABLE.
004160,002787: # 5. SXA STORE INDEX IN ERASABLE.
004161,002788: # 6. XCHX EXCHANGE INDEX REIGSTER WITH ERASABLE.
004162,002789:
004163,002790: # 7. INCR INCREMENT INDEX REGISTER.
004164,002791: # 8. XAD ERASABLE ADD TO INDEX REGISTER.
004165,002792: # 9. XSU ERASABLE SUBTRACT FROM INDEX REGISTER.
004166,002793:
004167,002794: # 10. TIX BRANCH ON INDEX REGISTER AND DECREMENT.
004168,002795:
004169,002796:
004170,002797:
004171,002798: 01,2000 SETLOC 12000 # SUFFIX CLASS 01 IS IN BANK 1.
004172,002799:
004173,002800: 01,2000 02075 AXT TC TAGSUB # SELECT APPROPRIATE INDEX REGISTER.
004174,002801: 01,2001 30103 CA POLISH
004175,002802: 01,2002 50114 XSTORE INDEX INDEXLOC # CONTAINS C(FIXLOC) OR C(FIXLOC)+1.
004176,002803: 01,2003 54046 TS X1
004177,002804: 01,2004 16012 TCF DANZIG
004178,002805:
004179,002806: 01,2005 02075 AXC TC TAGSUB
004180,002807: 01,2006 40103 CS POLISH
004181,002808: 01,2007 02002 TC XSTORE
004182,002809:
004183,002810: 01,2010 02063 LXA TC 15ADRERS # LOAD INDEX REGISTER FROM ERASABLE.
004184,002811: 01,2011 50103 INDEX POLISH
004185,002812:
004186,002813: 01,2012 30000 CA 0
004187,002814: 01,2013 12002 TCF XSTORE
004188,002815:
004189,002816: 01,2014 02063 LXC TC 15ADRERS # LOAD NDX REG FROM ERASABLE COMPLEMENTED.
004190,002817: 01,2015 50103 INDEX POLISH
004191,002818: 01,2016 40000 CS 0
004192,002819: 01,2017 12002 TCF XSTORE
004193,002820:
004194,002821: 01,2020 02063 SXA TC 15ADRERS # STORE INDEX REGISTER IN ERASABLE.
004195,002822: 01,2021 50114 INDEX INDEXLOC
004196,002823: 01,2022 30046 CA X1
004197,002824: 01,2023 50103 MSTORE1 INDEX POLISH
004198,002825: 01,2024 54000 TS 0
004199,002826: 01,2025 16012 TCF DANZIG
004200,002827:
004201,002828: 01,2026 02063 XCHX TC 15ADRERS # EXCHANGE INDEX REGISTER WITH ERASABLE.
004202,002829:
004203,002830: 01,2027 50103 INDEX POLISH
004204,002831: 01,2030 30000 CA 0
004205,002832: 01,2031 50114 INDEX INDEXLOC
004206,002833: 01,2032 56046 XCH X1
004207,002834: 01,2033 12023 TCF MSTORE1
004208,002835:
004209,002836: 01,2034 02063 XAD TC 15ADRERS # ADD ERASABLE TO INDEX REGISTER.
004210,002837: 01,2035 50103 INDEX POLISH
004211,002838: 01,2036 30000 CA 0
004212,002839: 01,2037 50114 XAD2 INDEX INDEXLOC
004213,002840: 01,2040 26046 ADS X1 # IGNORING OVERFLOWS.
004214,002841: 01,2041 16012 TCF DANZIG
004215,002842:
004216,002843: 01,2042 02075 INCR TC TAGSUB # INCREMENT INDEX REGISTER.
004217,002844: 01,2043 30103 CA POLISH
004218,002845: 01,2044 12037 TCF XAD2
004219,002846:
004220,002847: 01,2045 02063 XSU TC 15ADRERS # SUBTRACT ERASABLE FROM INDEX REGISTER.
004221,002848: 01,2046 50103 INDEX POLISH
004222,002849: 01,2047 40000 CS 0
004223,002850: 01,2050 12037 TCF XAD2
004224,002851:
004225,002852:
004226,002853:
004227,002854: 01,2051 02075 TIX TC TAGSUB # BRANCH AND DECREMENT ON INDEX.
004228,002855: 01,2052 50114 INDEX INDEXLOC
004229,002856: 01,2053 40050 CS S1
004230,002857: 01,2054 50114 INDEX INDEXLOC
004231,002858: 01,2055 60046 AD X1
004232,002859: 01,2056 00006 EXTEND # NO OPERATION IF DECREMENTED INDEX IS
004233,002860: 01,2057 66012 BZMF DANZIG # NEGATIVE OR ZERO.
004234,002861:
004235,002862: 01,2060 50114 DOTIXBR INDEX INDEXLOC
004236,002863: 01,2061 56046 XCH X1 # IGNORING OVERFLOWS.
004237,002864:
004238,002865: 01,2062 16631 TCF GOTO # DO THE BRANCH USING THE CADR IN POLISH.
004239,002866:
004240,002867: # SUBROUTINE TO CONVERT AN ERASABLE ADDRESS (11 BITS) TO AN EBANK SETTING AND SUBADDRESS.
004241,002868:
004242,002869: 01,2063 40103 15ADRERS CS POLISH
004243,002870: 01,2064 67712 AD DEC45
004244,002871: 01,2065 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
004245,002872: 01,2066 30104 CA FIXLOC # YES. ADD FIXLOC. EBANK OK AS IS.
004246,002873:
004247,002874: 01,2067 12074 TCF +5
004248,002875:
004249,002876: 01,2070 35230 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
004250,002877: 01,2071 56103 XCH POLISH
004251,002878: 01,2072 54003 TS EBANK
004252,002879: 01,2073 75227 MASK LOW8
004253,002880: 01,2074 26103 +5 ADS POLISH # FALL INTO TAGSUB, AND RETURN VIA Q.
004254,002881:
004255,002882: # SUBROUTINE WHICH SETS THE ADDRESS OF THE SPECIFIED INDEX IN INDEXLOC. (ACTUALLY, THE ADDRESS -38D.)
004256,002883:
004257,002884: 01,2075 30104 TAGSUB CA FIXLOC
004258,002885: 01,2076 54114 TS INDEXLOC
004259,002886:
004260,002887: 01,2077 10020 CCS CYR # BIT 15 SPECIFIES INDEX.
004261,002888: 01,2100 24114 INCR INDEXLOC # 0 MEANS USE X2.
004262,002889: 01,2101 00002 TC Q
004263,002890: 01,2102 00002 TC Q # 1 FOR X1.
004264,002891:
004265,002892: # MISCELLANEOUS OPERATION CODES WITH DIRECT ADDRESSES. INCLUDED HERE ARE:
004266,002893:
004267,002894: # 1. ITA STORE QPRET (RETURN ADDRESS) IN ERASABLE.
004268,002895: # 2. CALL CALL A SUBROUTINE, LEAVING RETURN IN QPRET.
004269,002896: # 3. RTB RETURN TO BASIC LANGUAGE AT THE GIVEN ADDRESS.
004270,002897: # 4. BHIZ BRANCH IF THE HIGH ORDER OF MPAC IS ZERO (SINGLE PRECISION).
004271,002898: # 5. BOV BRANCH ON OVERFLOW.
004272,002899: # 6. GOTO SIMPLE SEQUENCE CHANGE.
004273,002900:
004274,002901: 01,2103 10020 RTB/BHIZ CCS CYR
004275,002902: 01,2104 30103 RTB CA POLISH
004276,002903: 01,2105 14107 TCF BANKJUMP # CALL BASIC ROUTINE.
004277,002904:
004278,002905: 01,2106 10140 BHIZ CCS MPAC
004279,002906: 01,2107 16012 TCF DANZIG
004280,002907: 01,2110 16631 TCF GOTO
004281,002908: 01,2111 16012 TCF DANZIG
004282,002909: 01,2112 16631 TCF GOTO
004283,002910:
004284,002911: 01,2113 10105 BOV(B) CCS OVFIND # BRANCH ON OVERFLOW TO BASIC OR INTERP.
004285,002912: 01,2114 12116 TCF +2
004286,002913: 01,2115 16012 TCF DANZIG
004287,002914: 01,2116 54105 TS OVFIND
004288,002915: 01,2117 10020 CCS CYR
004289,002916: 01,2120 12104 TCF RTB # IF BASIC.
004290,002917: 01,2121 00360 B5TOBB OCT 360
004291,002918: 01,2122 16631 TCF GOTO
004292,002919:
004293,002920: 01,2123 10020 BZE/GOTO CCS CYR # SEE WHICH OP-CODE IS DESIRED.
004294,002921: 01,2124 06706 TC BRANCH # DO BZE.
004295,002922: 01,2125 16012 TCF DANZIG
004296,002923: 01,2126 16631 TCF GOTO # DO GOTO.
004297,002924: 01,2127 16012 TCF DANZIG
004298,002925:
004299,002926: 01,2130 10020 BPL/BMN CCS CYR
004300,002927: 01,2131 12137 TCF BPL
004301,002928: 01,2132 12000 5B10 DEC 5 B+10 # SHIFTS OP CODE IN SWITCH INSTRUCTION ADR
004302,002929:
004303,002930: 01,2133 06706 TC BRANCH # DO BMN.
004304,002931: 01,2134 16012 TCF DANZIG
004305,002932: 01,2135 16012 TCF DANZIG
004306,002933: 01,2136 16631 TCF GOTO # ONLY IF NNZ.
004307,002934:
004308,002935: 01,2137 06706 BPL TC BRANCH
004309,002936: 01,2140 16631 TCF GOTO # IF POSITIVE OR ZERO.
004310,002937: 01,2141 16631 TCF GOTO
004311,002938: 01,2142 16012 TCF DANZIG
004312,002939:
004313,002940: 01,2143 10020 CALL/ITA CCS CYR
004314,002941: 01,2144 16623 TCF CALL
004315,002942:
004316,002943: 01,2145 05456 TC CCSHOLE
004317,002944: 01,2146 02063 TC 15ADRERS # STORE QPRET. (TAGSUB AFTER 15ADRERS IS
004318,002945: 01,2147 50104 INDEX FIXLOC # SLOW IN THIS CASE, BUT SAVES STORAGE.)
004319,002946: 01,2150 30052 CA QPRET
004320,002947: 01,2151 12023 TCF MSTORE1
004321,002948:
004322,002949: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR ALTERING AND TESTING INTERPRETIVE SWITCHES:
004323,002950:
004324,002951: # 00 BONSET SET A SWITCH AND DO A GOTO IF IT WAS ON.
004325,002952: # 01 SETGO SET A SWITCH AND DO A GOTO.
004326,002953: # 02 BOFSET SET A SWITCH AND DO A GOTO IF IT WAS OFF
004327,002954: # 03 SET SET A SWITCH.
004328,002955:
004329,002956: # 04 BONINV INVERT A SWITCH AND BRANCH IF IT WAS ON.
004330,002957: # 05 INVGO INVERT A SWITCH AND DO A GOTO.
004331,002958: # 06 BOFINV INVERT A SWITCH AND BRANCH IF IT WAS OFF
004332,002959: # 07 INVERT INVERT A SWITCH.
004333,002960:
004334,002961: # 10 BONCLR CLEAR A SWITCH AND BRANCH IF IT WAS ON.
004335,002962: # 11 CLRGO CLEAR A SWITCH AND DO A GOTO.
004336,002963: # 12 BOFCLR CLEAR A SWITCH AND BRANCH IF IT WAS OFF.
004337,002964: # 13 CLEAR CLEAR A SWITCH.
004338,002965:
004339,002966: # 14 BON BRANCH IF A SWITCH WAS ON.
004340,002967: # 16 BOFF BRANCH IF A SWITCH WAS OFF.
004341,002968:
004342,002969:
004343,002970:
004344,002971: # THE ADDRESS SUPPLIED WITH THE SWITCH INSTRUCTION IS INTERPRETED AS FOLLOWS:
004345,002972:
004346,002973: # BITS 1-4 SWITCH BIT NUMBER (1-15).
004347,002974: # BITS 5-8 SWITCH OPERATION NUMBER.
004348,002975: # BITS 9- SWITCH WORD NUMBER (UP TO 64 SWITCH WORDS).
004349,002976:
004350,002977: # THE ADDRESS ITSELF IS MADE UP BY THE YUL SYSTEM ASSEMBLER. THE BRANCH INSTRUCTIONS REQUIRE TWO
004351,002978: # ADDRESSES, THE SECOND TAKEN AS THE DIRECT (OR INDIRECT IF IN ERASABLE) ADDRESS OF THE BRANCH.
004352,002979:
004353,002980:
004354,002981:
004355,002982: 01,2152 37704 SWITCHES CAF LOW4 # LEAVE THE SWITCH BIT IN SWBIT .
004356,002983: 01,2153 70103 MASK POLISH
004357,002984: 01,2154 50000 INDEX A
004358,002985: 01,2155 37653 CAF BIT15 # (NUMBER FROM LEFT TO RIGHT.)
004359,002986: 01,2156 54115 TS SWBIT
004360,002987:
004361,002988: 01,2157 37663 CAF BIT7 # LEAVE THE SWITCH NUMBER IN SWWORD.
004362,002989: 01,2160 00006 EXTEND
004363,002990: 01,2161 70103 MP POLISH
004364,002991: 01,2162 54114 TS SWWORD
004365,002992:
004366,002993: 01,2163 00004 INHINT # DURING SWITCH CHANGE SO RUPT CAN USE TOO
004367,002994: 01,2164 50000 INDEX A # LEAVE THE SWITCH WORD ITSELF IN L.
004368,002995: 01,2165 30061 CA STATE
004369,002996:
004370,002997: 01,2166 54002 TS Q # Q WILL BE USED AS A CHANNEL.
004371,002998: 01,2167 37657 CAF BIT11
004372,002999: 01,2170 00006 EXTEND # DISPATCH SWITCH BIT OPERATION AS IN BITS
004373,003000: 01,2171 70103 MP POLISH # 7-8 OF POLISH.
004374,003001: 01,2172 72232 MASK B3TOB4 # GETS 4X2-BIT CODE.
004375,003002: 01,2173 50000 INDEX A
004376,003003: 01,2174 12175 TCF +1
004377,003004:
004378,003005: 01,2175 30115 +1 CA SWBIT # 00 - SET SWITCH IN QUESTION.
004379,003006: 01,2176 00006 EXTEND
004380,003007: 01,2177 04002 ROR Q
004381,003008: 01,2200 12207 TCF SWSTORE
004382,003009:
004383,003010: 01,2201 30115 +5 CA SWBIT # 01 - INVERT SWITCH.
004384,003011: 01,2202 00006 EXTEND
004385,003012: 01,2203 06002 RXOR Q
004386,003013: 01,2204 12207 TCF SWSTORE
004387,003014:
004388,003015: 01,2205 40115 +9D CS SWBIT # 10 - CLEAR.
004389,003016: 01,2206 70002 MASK Q
004390,003017: 01,2207 50114 SWSTORE INDEX SWWORD
004391,003018: 01,2210 54061 TS STATE # NEW SWITCH WORD.
004392,003019:
004393,003020: 01,2211 00003 +13D RELINT # 11 - NOOP.
004394,003021: 01,2212 37655 CAF BIT13
004395,003022: 01,2213 00006 EXTEND # DISPATCH SEQUCE CHANGING OR BRANCHING
004396,003023: 01,2214 70103 MP POLISH # CODE.
004397,003024: 01,2215 72232 MASK B3TOB4
004398,003025: 01,2216 50000 INDEX A
004399,003026: 01,2217 12220 TCF +1 # ORIGINALLY STORED IN BITS 5-6.
004400,003027:
004401,003028: 01,2220 40002 +1 CS Q # 00 - BRANCH IF ON.
004402,003029: 01,2221 70115 TEST MASK SWBIT
004403,003030: 01,2222 10000 CCS A
004404,003031: 01,2223 12233 TCF SWSKIP
004405,003032:
004406,003033: 01,2224 16700 +5 TCF SWBRANCH # 01 - GO TO.
004407,003034:
004408,003035: 01,2225 12233 TCF SWSKIP # HERE ONLY ON BIT 15.
004409,003036:
004410,003037: 01,2226 05456 TC CCSHOLE
004411,003038: 01,2227 05456 TC CCSHOLE
004412,003039:
004413,003040: 01,2230 30002 +9D CA Q # 10 - BRANCH IF OFF.
004414,003041: 01,2231 12221 TCF TEST
004415,003042:
004416,003043: 01,2232 00014 B3TOB4 OCT 14
004417,003044: 01,2233 24150 SWSKIP INCR LOC
004418,003045:
004419,003046: 01,2234 01,2152 SW/ EQUALS SWITCHES
004420,003047:
004421,003048: 01,2234 16012 +13D TCF DANZIG # 11 - NOOP.
004422,003049: 01,2235 ENDINTS1 EQUALS
End of include-file INTERPRETER.agc. Parent file is MAIN.agc