Source Code
043411,000001: # Copyright: Public domain.
043412,000002: # Filename: INTERPRETER.agc
043413,000003: # Purpose: Part of the source code for Luminary 1A build 099.
043414,000004: # It is part of the source code for the Lunar Module's (LM)
043415,000005: # Apollo Guidance Computer (AGC), for Apollo 11.
043416,000006: # Assembler: yaYUL
043417,000007: # Contact: Ron Burkey <info@sandroid.org>.
043418,000008: # Website: www.ibiblio.org/apollo.
043419,000009: # Pages: 1002-1094
043420,000010: # Mod history: 2009-05-25 RSB Adapted from the corresponding
043421,000011: # Luminary131 file, using page
043422,000012: # images from Luminary 1A.
043423,000013: # 2011-01-06 JL Fixed pseudo-label indentation.
043424,000014: # 2011-05-08 JL Removed workarounds.
043425,000015:
043426,000016: # This source code has been transcribed or otherwise adapted from
043427,000017: # digitized images of a hardcopy from the MIT Museum. The digitization
043428,000018: # was performed by Paul Fjeld, and arranged for by Deborah Douglas of
043429,000019: # the Museum. Many thanks to both. The images (with suitable reduction
043430,000020: # in storage size and consequent reduction in image quality as well) are
043431,000021: # available online at www.ibiblio.org/apollo. If for some reason you
043432,000022: # find that the images are illegible, contact me at info@sandroid.org
043433,000023: # about getting access to the (much) higher-quality images which Paul
043434,000024: # actually created.
043435,000025:
043436,000026: # Notations on the hardcopy document read, in part:
043437,000027:
043438,000028: # Assemble revision 001 of AGC program LMY99 by NASA 2021112-61
043439,000029: # 16:27 JULY 14, 1969
043440,000030:
043441,000031: # Page 1002
043442,000032: # SECTION 1: DISPATCHER
043443,000033:
043444,000034: # ENTRY TO THE INTERPRETER. INTPRET SETS LOC TO THE FIRST INSTRUCTION, BANKSET TO THE BBANK OF THE
043445,000035: # OBJECT INTERPRETIVE PROGRAM, AND INTBIT15 TO THE BIT15 CONTENTS OF FBANK. INTERPRETIVE PROGRAMS MAY BE IN
043446,000036: # VIRTUALLY ALL BANKS PRESENT UNDER ANY SUPER-BANK SETTING, WITH THE RESTRICTION THAT PROGRAMS IN HIGH BANKS
043447,000037: # (BIT15 OF FBANK = 1) DO NOT REFER TO LOWBANKS, AND VICE-VERSA. THE INTERPRETER DOES NOT SWITCH SUPERBANKS.
043448,000038: # E-BANK SWITCHING OCCURS WHENEVER GENERAL ERASABLE (100-3777) IS ADDRESSED.
043449,000039:
043450,000040: 6037 BLOCK 03
043451,000041:
043452,000042: 6037 COUNT* $$/INTER
043453,000043: 6037 00003 INTPRET RELINT
043454,000044: 6040 00006 EXTEND # SET LOC TO THE WORD FOLLOWING THE TC.
043455,000045: 6041 22164 QXCH LOC
043456,000046:
043457,000047: 6042 30006 +2 CA BBANK # INTERPRETIVE BRANCHES FINISH HERE.
043458,000048: 6043 54165 TS BANKSET
043459,000049: 6044 74735 MASK BIT15 # GET 15TH BIT FOR INDEXABLE ADDRESSES.
043460,000050: 6045 54115 TS INTBIT15
043461,000051:
043462,000052: 6046 54023 TS EDOP # MAKE SURE NO INSTRUCTIONS LEFT OVER
043463,000053:
043464,000054: 6047 16070 TCF NEWOPS # PICK UP OP CODE PAIR AND BEGIN.
043465,000055:
043466,000056: 6050 22006 INTRSM LXCH BBANK # RESUME SUSPENDED INTERPRETIVE JOB
043467,000057: 6051 16042 TCF INTPRET +3
043468,000058:
043469,000059: # DLOAD LOADS MPAC, MPAC +1, LEAVING ZERO IN MPAC +2.
043470,000060:
043471,000061: 6052 00006 DLOAD EXTEND
043472,000062: 6053 50116 INDEX ADDRWD
043473,000063: 6054 30001 DCA 0 # LOAD DP C(C(ADDRWD)) INT MPAC,MPAC +1
043474,000064: 6055 52155 SLOAD2 DXCH MPAC
043475,000065: 6056 34755 CAF ZERO # ZERO MPAC +2
043476,000066:
043477,000067: # Page 1003
043478,000068: # AT THE END OF MOST INSTRUCTIONS, CONTROL IS GIVEN TO DANZIG TO DISPATCH THE NEXT OPERATION.
043479,000069:
043480,000070: 6057 54156 TS MPAC +2 # AND DECLARE DP MODE
043481,000071:
043482,000072: 6060 54163 NEWMODE TS MODE # PROLOGUE FOR MODE-CHANGING INSTRUCTIONS.
043483,000073:
043484,000074: 6061 30165 DANZIG CA BANKSET # SET BBANK BEFORE TESTING NEWJOB SO THAT
043485,000075: 6062 54006 TS BBANK # IT MAY BE SAVED DIRECTLY BY CHANJOB.
043486,000076:
043487,000077: 6063 10023 NOIBNKSW CCS EDOP # SEE IF AN ORDER CODE IS LEFT OVER FROM
043488,000078: 6064 16077 TCF OPJUMP # THE LAST PAIR RETRIEVED. IF SO, EXECUTE.
043489,000079: # EDOP IS SET TO ZERO ON ITS RE-EDITIING.
043490,000080:
043491,000081: 6065 10067 CCS NEWJOB # SEE IF A JOB OF HIGHER PRIORITY IS
043492,000082: 6066 15126 TCF CHANG2 # PRESENT, AND IF SO, CHANGE JOBS.
043493,000083:
043494,000084: 6067 24164 INCR LOC # ADVANCE THE LOCATION COUNTER.
043495,000085:
043496,000086: # ITRACE (1) REFERS TO "NEWOPS"
043497,000087: 6070 50164 NEWOPS INDEX LOC # ENTRY TO BEGIN BY PICKING OP CODE PAIR.
043498,000088: 6071 30000 CA 0 # MAY BE AN OPCODE PAIR OR A STORE CODE.
043499,000089: 6072 10000 CCS A # TEST SIGN AND GET DABS(A).
043500,000090: 6073 16362 TCF DOSTORE # PROCESS STORE CODE.
043501,000091:
043502,000092: 6074 00177 LOW7 OCT 177
043503,000093:
043504,000094: 6075 54023 TS EDOP # OP CODE PAIR. LEAVE THE OTHER IN EDOP
043505,000095: 6076 76074 MASK LOW7 # WHERE CCS EDOP WILL HONOR IT NEXT.
043506,000096:
043507,000097: 6077 54020 OPJUMP TS CYR # LOWWD ENTERS HERE IF A RIGHT-HAND OP
043508,000098: 6100 10020 CCS CYR # CODE IS TO BE PROCESSED. TEST PREFICES.
043509,000099: 6101 16247 TCF OPJUMP2 # TEST SECOND PREFIX BIT.
043510,000100:
043511,000101: 6102 16743 TCF EXIT # +0 OP CODE IS EXIT
043512,000102:
043513,000103: # Page 1004
043514,000104: # PROCESS ADDRESSES WHICH MAY BE DIRECT, INDEXED, OR REFERENCE THE PUSHDOWN LIST.
043515,000105:
043516,000106: 6103 74753 ADDRESS MASK BIT1 # SEE IF ADDRESS IS INDEXED. CYR CONTAINED
043517,000107: 6104 10000 CCS A # 400XX, SO BIT 1 IS NOW AS IT WAS IN CYR.
043518,000108: 6105 16146 TCF INDEX # FORM INDEXED ADDRESS.
043519,000109:
043520,000110: 6106 50164 DIRADRES INDEX LOC # LOOK AHEAD TO NEXT WORD TO SEE IF
043521,000111: 6107 40001 OCT40001 CS 1 # ADDRESS IS GIVEN.
043522,000112: 6110 10000 CCS A
043523,000113: 6111 16215 TCF PUSHUP # IF NOT.
043524,000114:
043525,000115: 6112 77773 NEG4 DEC -4 B-14
043526,000116:
043527,000117: 6113 24164 INCR LOC # IF SO, TO SHOW WE PICKED UP A WORD.
043528,000118: 6114 54116 TS ADDRWD
043529,000119:
043530,000120: # Page 1005
043531,000121: # FINAL DIGESTION OF DIRECT ADDRESSES OF OP CODES WITH 01 PREFIX IS DONE HERE. IN EACH CASE, THE
043532,000122: # REQUIRED 12-BIT SUB-ADDRESS IS LEFT IN ADDRWD, WITH ANY REQUIRED E OR F BANK SWITCHING DONE. ADDRESSES LESS
043533,000123: # 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.
043534,000124:
043535,000125: 6115 66251 AD -ENDVAC # SEE IF ADDRESS RELATIVE TO WORK AREA.
043536,000126: 6116 10000 CCS A
043537,000127: 6117 67743 AD -ENDERAS # IF NOT, SEE IF IN GENERAL ERASABLE.
043538,000128: 6120 16125 TCF IERASTST
043539,000129:
043540,000130: 6121 30120 NETZERO CA FIXLOC # IF SO, LEAVE THE MODIFIED ADDRESS IN
043541,000131: 6122 26116 ADS ADDRWD # ADDRWD AND DISPATCH.
043542,000132: 6123 50020 ITR15 INDEX CYR # THIS INDEX MAKES THE NEXT INSTRUCTION
043543,000133: 6124 76273 7 INDJUMP -1 # TCF INDJUMP + OP, EDITING CYR.
043544,000134:
043545,000135: 6125 00006 IERASTST EXTEND
043546,000136: 6126 66136 BZMF GEADDR # GO PROCESS GENERAL-ERASABLE ADDRESS.
043547,000137:
043548,000138: 6127 75012 MASK LOW10 # FIXED BANK ADDRESS. RESTORE AND ADD B15.
043549,000139: 6130 65012 AD LOW10 # SWITCH BANKS AND LEAVE SUBADDRESS IN
043550,000140: 6131 56116 XCH ADDRWD # ADDRWD FOR OPERAND RETRIEVAL. (THIS
043551,000141: 6132 60115 AD INTBIT15 # METHOD PRECLUDES USE OF THE LAST
043552,000142: 6133 54004 TS FBANK # LOCATION IN EACH FBANK.)
043553,000143: 6134 50020 ITR12 INDEX CYR
043554,000144: 6135 76273 7 INDJUMP -1
043555,000145:
043556,000146: 6136 74357 GEADDR MASK LOW8
043557,000147: 6137 65007 AD OCT1400
043558,000148: 6140 56116 XCH ADDRWD
043559,000149: 6141 54003 TS EBANK
043560,000150: 6142 50020 ITR10 INDEX CYR
043561,000151: 6143 76273 7 INDJUMP -1
043562,000152:
043563,000153: # Page 1006
043564,000154: # THE FOLLOWING ROUTINE PROCESSES INTERPRETIVE INDEXED ADDRESSES. AN INTERPRETER INDEX REGISTER MAY
043565,000155: # CONTAIN THE ADDRESS OF ANY ERASABLE REGISTER (0-42 BEING RELATIVE TO THE VAC AREA) OR ANY INTERPRETIVE PROGRAM
043566,000156: # BANK, OR ANY INTEGER IN THAT RANGE.
043567,000157:
043568,000158: 6144 37733 DODLOAD* CAF DLOAD* # STODL* COMES HERE TO PROCESS LOAD ADR.
043569,000159: 6145 54020 TS CYR # (STOVL* ENTERS HERE).
043570,000160:
043571,000161: 6146 30120 INDEX CA FIXLOC # SET UP INDEX LOCATION.
043572,000162: 6147 54130 TS INDEXLOC
043573,000163: 6150 24164 INCR LOC # (ADDRESS ALWAYS GIVEN).
043574,000164: 6151 50164 INDEX LOC
043575,000165: 6152 40000 CS 0
043576,000166: 6153 10000 CCS A # INDEX 2 IF ADDRESS STORED COMPLEMENTED.
043577,000167: 6154 24130 INCR INDEXLOC
043578,000168: 6155 16156 NOOP
043579,000169:
043580,000170: 6156 54116 TS ADDRWD # 14 BIT ADDRESS TO ADDRWD.
043581,000171: 6157 77742 MASK HIGH4 # IF ADDRESS GREATER THAN 2K, ADD INTBIT15
043582,000172: 6160 00006 EXTEND
043583,000173: 6161 16164 BZF INDEX2
043584,000174: 6162 30115 CA INTBIT15
043585,000175: 6163 26116 ADS ADDRWD
043586,000176:
043587,000177: 6164 50130 INDEX2 INDEX INDEXLOC
043588,000178: 6165 40046 CS X1
043589,000179: 6166 26116 ADS ADDRWD # DO AUGMENT, IGNORING AND CORRECTING OVF.
043590,000180:
043591,000181: 6167 77744 MASK HIGH9 # SEE IF ADDRESS IS IN WORK AREA.
043592,000182: 6170 00006 EXTEND
043593,000183: 6171 16204 BZF INDWORK
043594,000184: 6172 77742 MASK HIGH4 # SEE IF IN FIXED BANK.
043595,000185: 6173 00006 EXTEND
043596,000186: 6174 16206 BZF INDERASE
043597,000187:
043598,000188: 6175 30116 CA ADDRWD # IN FIXED -- SWITCH BANKS AND CREATE
043599,000189: 6176 54004 TS FBANK # SUB-ADDRESS
043600,000190: 6177 75012 MASK LOW10
043601,000191: 6200 64741 AD 2K
043602,000192: 6201 54116 TS ADDRWD
043603,000193: 6202 50020 ITR11 INDEX CYR
043604,000194: 6203 36273 3 INDJUMP -1
043605,000195:
043606,000196: 6204 30120 INDWORK CA FIXLOC # MAKE ADDRWD RELATIVE TO WORK AREA.
043607,000197: 6205 16212 TCF ITR13 -1
043608,000198:
043609,000199: 6206 35007 INDERASE CA OCT1400
043610,000200: 6207 56116 XCH ADDRWD
043611,000201: 6210 54003 TS EBANK
043612,000202: 6211 74357 MASK LOW8
043613,000203: 6212 26116 -1 ADS ADDRWD
043614,000204: # Page 1007
043615,000205: 6213 50020 ITR13 INDEX CYR
043616,000206: 6214 36273 3 INDJUMP -1
043617,000207:
043618,000208: # Page 1008
043619,000209: # PUSH-UP ROUTINES. WHEN NO OPERAND ADDRESS IS GIVEN, THE APPROPRIATE OPERAND IS TAKEN FROM THE PUSH-DOWN
043620,000210: # LIST. IN MOST CASES THE MODE OF THE RESULT (VECTOR OR SCALAR) OF THE LAST ARITHMETIC OPERATION PERFORMED
043621,000211: # IS THE SAME AS THE TYPE OF OPERAND DESIRED (ALL ADD/SUBTRACT ETC.). EXCEPTIONS TO THIS GENERAL RULE ARE LISTED
043622,000212: # BELOW (NOTE THAT IN EVERY CASE THE MODE REGISTER IS LEFT INTACT):
043623,000213:
043624,000214: # 1. VXSC AND V/SC WANT THE OPPOSITE TYPE OF OPERAND, E.G., IF THE LAST OPERATION YIELDED A VECTOR
043625,000215: # RESULT, VXSC WANTS A SCALAR.
043626,000216:
043627,000217: # 2. THE LOAD CODES SHOULD LOAD THE ACCUMULATOR INDEPENDENT OF THE RESULT OF THE LAST OPERATION. THIS
043628,000218: # INCLUDES VLOAD, DLOAD, TLOAD, PDDL, AND PDVL (NO PUSHUP WITH SLOAD).
043629,000219:
043630,000220: # 3. SOME ARITHMETIC OPERATIONS REQUIRE A STANDARD TYPE OF OPERAND REGARDLESS OF THE PREVIOUS OPERATION.
043631,000221: # THIS INCLUDES SIGN WANTING DP AND TAD REQUIRING TP.
043632,000222:
043633,000223: 6215 34360 PUSHUP CAF OCT23 # IF THE LOW 5 BITS OF CYR ARE LESS THAN
043634,000224: 6216 70020 MASK CYR # 20, THIS OP REQUIRES SPECIAL ATTENTION.
043635,000225: 6217 66222 AD -OCT10 # (NO -0).
043636,000226: 6220 10000 CCS A
043637,000227: 6221 16233 TCF REGUP # FOR ALL CODES GREATEER THAN OCT 7.
043638,000228:
043639,000229: 6222 77767 -OCT10 OCT -10
043640,000230:
043641,000231: 6223 66112 AD NEG4 # WE NOW HAVE 7 -- OP CODE (MOD4). SEE IF
043642,000232: 6224 10000 CCS A # THE OP CODE (MOD4) IS THREE (REVERSE).
043643,000233: 6225 50000 INDEX A # NO -- THE MODE IS DEFINITE. PICK UP THE
043644,000234: 6226 46244 CS NO.WDS
043645,000235: 6227 16235 TCF REGUP +2
043646,000236:
043647,000237: 6230 50163 INDEX MODE # FOR VXSC AND V/SC WE WANT THE REQUIRED
043648,000238: 6231 46242 CS REVCNT # PUSHLOC DECREMENT WITHOUT CHANGING THE
043649,000239: 6232 16235 TCF REGUP +2 # MODE AT THIS TIME.
043650,000240:
043651,000241: 6233 50163 REGUP INDEX MODE # MOST ALL OP CODES PUSHUP HERE.
043652,000242: 6234 46244 CS NO.WDS
043653,000243: 6235 26166 +2 ADS PUSHLOC
043654,000244: 6236 54116 TS ADDRWD
043655,000245: 6237 50020 ITR14 INDEX CYR
043656,000246: 6240 76273 7 INDJUMP -1 # (THE INDEX MAKES THIS A TCF.)
043657,000247:
043658,000248: 6241 00002 OCT 2 # REVERSE PUSHUP DECREMENT. VECTOR TAKES 2
043659,000249: 6242 00006 REVCNT OCT 6 # WORDS, SCALAR TAKES 6.
043660,000250: 6243 00006 OCT 6
043661,000251: 6244 00002 NO.WDS OCT 2 # CONVENTIONAL DECREMENT IS 6 WORDS VECTOR
043662,000252: 6245 00003 OCTAL3 OCT 3 # 2 IN DP, AND 3 IN TP.
043663,000253: 6246 00006 OCT 6
043664,000254:
043665,000255: # Page 1009
043666,000256: # TEST THE SECOND PREFIX BIT TO SEE IF THIS IS A MISCELLANEOUS OR A UNARY/SHORT SHIFT OPERATION.
043667,000257:
043668,000258: 6247 10020 OPJUMP2 CCS CYR # TEST SECOND PREFIX BIT.
043669,000259: 6250 16263 TCF OPJUMP3 # TEST THIRD BIT TO SEE IF UNARY OR SHIFT
043670,000260:
043671,000261: 6251 77722 -ENDVAC DEC -45 B-14
043672,000262:
043673,000263: # THE FOLLOWING ROUTINE PROCESSES ADDRESSES OF SUFFIX CLASS 10. THEY ARE BASICALLY WORK AREA ADDRESSES
043674,000264: # IN THE RANGE 0-52, ERASABLE ECADR CONSTANTS FROM 100-3777, AND FCADRS ABOVE THAT. ALL 15 BITS ARE AVAILABLE
043675,000265: # IN CONTRAST TO SUFFIX 1, IN WHICH ONLY THE LOW ORDER 14 ARE AVAILABLE.
043676,000266:
043677,000267: 6252 24164 15BITADR INCR LOC # (ENTRY HERE FROM STCALL).
043678,000268: 6253 50164 INDEX LOC # PICK UP ADDRESS WORD.
043679,000269: 6254 30000 CA 0
043680,000270: 6255 54117 TS POLISH # WE MAY NEED A SUBADDRESS LATER.
043681,000271:
043682,000272: 6256 35013 CAF LOW7+2K # THESE INSTRUCTIONS ARE IN BANK 1.
043683,000273: 6257 54004 TS FBANK
043684,000274: 6260 70020 MASK CYR
043685,000275: 6261 50000 ITR7 INDEX A
043686,000276: 6262 16334 TCF MISCJUMP
043687,000277:
043688,000278: # Page 1010
043689,000279: # COMPLETE THE DISPATCHING OF UNARY AND SHORT SHIFT OPERATIONS.
043690,000280:
043691,000281: 6263 54004 OPJUMP3 TS FBANK # CALL IN BANK 0 (BIT5S 11-15 OF A ARE 0.)
043692,000282: # ITRACE (6) REFERS TO "OPJUMP3"
043693,000283: 6264 10020 CCS CYR # TEST THIRD PREFIX BIT.
043694,000284: 6265 50000 INDEX A # THE DECREMENTED UNARY CODE IS IN BITS
043695,000285: 6266 12000 TCF UNAJUMP # 1-4 OF A (ZERO, EXIT, HAS BEEN DETECTED)
043696,000286:
043697,000287: 6267 10163 CCS MODE # IT'S A SHORT SHIFT CODE. SEE IF PRESENT
043698,000288: 6270 12017 TCF SHORTT # SCALAR OR VECTOR.
043699,000289: 6271 12017 TCF SHORTT
043700,000290: 6272 12121 TCF SHORTV # CALLS THE APPROPRIATE ROUTINE.
043701,000291:
043702,000292: 6273 4350 FBANKMSK EQUALS BANKMASK
043703,000293: 6273 00122 LVBUF ADRES VBUF
043704,000294:
043705,000295: # Page 1011
043706,000296: # THE FOLLOWING IS THE JUMP TABLE FOR OP CODES WHICH MAY HAVE INDEXABLE ADDRESSES OR MAY PUSH UP.
043707,000297:
043708,000298: 6274 16505 INDJUMP TCF VLOAD # 00 -- LOAD MPAC WITH A VECTOR.
043709,000299: 6275 17071 TCF TAD # 01 -- TRIPLE PRECISION ADD TO MPAC.
043710,000300: 6276 17655 TCF SIGN # 02 -- COMPLEMENT MPAC (V OR SC) IF X NEG.
043711,000301: 6277 17401 TCF VXSC # 03 -- VECTOR TIMES SCALAR.
043712,000302: 6300 16703 TCF CGOTO # 04 -- COMPUTED GO TO.
043713,000303: 6301 16470 TCF TLOAD # 05 -- LOAD MPAC WITH TRIPLE PRECISION.
043714,000304: 6302 16052 TCF DLOAD # 06 -- LOAD MPAC WITH A DP SCALAR.
043715,000305: 6303 17624 TCF V/SC # 07 -- VECTOR DIVIDED BY A SCALAR.
043716,000306:
043717,000307: 6304 16501 TCF SLOAD # 10 -- LOAD MPACIN SINGLE PRECISION.
043718,000308: 6305 16620 TCF SSP # 11 -- SET SINGLE PRECISION INTO X.
043719,000309: 6306 16523 TCF PDDL # 12 -- PUSH DOWN MPAC AND RE-LOAD IN DP.
043720,000310: 6307 17334 TCF MXV # 13 -- MATRIX POST-MULTIPLIED BY VECTOR.
043721,000311: 6310 16557 TCF PDVL # 14 -- PUSH DOWN AND VECTOR LOAD.
043722,000312: 6311 16626 TCF CCALL # 15 -- COMPUTED CALL.
043723,000313: 6312 17337 TCF VXM # 16 -- MATRIX PRE-MULTIPLIED BY VECTOR.
043724,000314: 6313 17616 TCF TSLC # 17 -- NORMALIZE MPAC (SCALAR ONLY).
043725,000315:
043726,000316: 6314 17574 TCF DMPR # 20 -- DP MULTIPLY AND ROUND.
043727,000317: 6315 17577 TCF DDV # 21 -- DP DIVIDE BY.
043728,000318: 6316 17603 TCF BDDV # 22 -- DP DIVIDE INTO.
043729,000319: 6317 17621 TCF GSHIFT # 23 -- GENERAL SHIFT INSTRUCTION
043730,000320: 6320 16751 TCF VAD # 24 -- VECTOR ADD.
043731,000321: 6321 16747 TCF VSU # 25 -- VECTOR SUBTRACT.
043732,000322: 6322 17036 TCF BVSU # 26 -- VECTOR SUBTRACT FROM.
043733,000323: 6323 17331 TCF DOT # 27 -- VECTOR DOT PRODUCT.
043734,000324:
043735,000325: 6324 17460 TCF VXV # 30 -- VECTOR CROSS PRODUCT.
043736,000326: 6325 17425 TCF VPROJ # 31 -- VECTOR PROJECTION.
043737,000327: 6326 17005 TCF DSU # 32 -- DP SUBTRACT.
043738,000328: 6327 17062 TCF BDSU # 33 -- DP SUBTRACT FROM.
043739,000329: 6330 16775 TCF DAD # 34 -- DP ADD.
043740,000330: 6331 16331 TCF +0 # 35 -- AVAILABLE
043741,000331: 6332 17572 TCF DMP1 # 36 -- DP MULTIPLY.
043742,000332: 6333 17613 TCF SETPD # 37 -- SET PUSH DOWN POINTER (DIRECT ONLY)
043743,000333:
043744,000334: # CODES 10 AND 14 MUST NOT PUSH UP. CODE 04 MAY BE USED FOR VECTOR DECLARE BEFORE PUSHUP IF DESIRED.
043745,000335:
043746,000336: # Page 1012
043747,000337: # THE FOLLOWING JUMP TABLE APPLIES TO INDEX, BRANCH, AND MISCELLANEOUS INSTRUCTIONS.
043748,000338:
043749,000339: 6334 12344 MISCJUMP TCF AXT # 00 -- ADDRESS TO INDEX TRUE.
043750,000340: 6335 12351 TCF AXC # 01 -- ADDRESS TO INDEX COMPLEMENTED.
043751,000341: 6336 12354 TCF LXA # 02 -- LOAD INDEX FROM ERASABLE.
043752,000342: 6337 12360 TCF LXC # 03 -- LOAD INDEX FROM COMPLEMENT OF ERAS.
043753,000343: 6340 12364 TCF SXA # 04 -- STORE INDEX IN ERASABLE.
043754,000344: 6341 12372 TCF XCHX # 05 -- EXCHANGE INDEX WITH ERASABLE.
043755,000345: 6342 12406 TCF INCR # 06 -- INCREMENT INDEX REGISTER.
043756,000346: 6343 12415 TCF TIX # 07 -- TRANSFER ON INDEX.
043757,000347:
043758,000348: 6344 12400 TCF XAD # 10 -- INDEX REGISTER ADD FROM ERASABLE.
043759,000349: 6345 12411 TCF XSU # 11 -- INDEX SUBTRACT FROM ERASABLE.
043760,000350: 6346 12467 TCF BZE/GOTO # 12 -- BRANCH ZERO AND GOTO
043761,000351: 6347 12474 TCF BPL/BMN # 13 -- BRANCH PLUS AND BRANCH MINUS.
043762,000352: 6350 12447 TCF RTB/BHIZ # 14 -- RETURN TO BASIC AND BRANCH HI ZERO.
043763,000353: 6351 12507 TCF CALL/ITA # 15 -- CALL AND STORE QPRET.
043764,000354: 6352 12516 TCF SW/ # 16 -- SWITCH INSTRUCTIONS AND AVAILABLE.
043765,000355: 6353 12457 TCF BOV(B) # 17 -- BRANCH ON OVERFLOW TO BASIC OR INT.
043766,000356:
043767,000357: # Page 1013
043768,000358: # THE FOLLOWING JUMP TABLE APPLIES TO UNARY INSTRUCTIONS.
043769,000359:
043770,000360: 6354 COUNT* $$/INTER
043771,000361: 00,2000 BANK 0 # 00 -- EXIT -- DETECTED EARLIER.
043772,000362: 00,2000 13207 UNAJUMP TCF SQRT # 01 -- SQUARE ROOT.
043773,000363: 00,2001 13530 TCF SINE # 02 -- SIN.
043774,000364: 00,2002 13517 TCF COSINE # 03 -- COS.
043775,000365: 00,2003 13610 TCF ARCSIN # 04 -- ARC SIN.
043776,000366: 00,2004 13612 TCF ARCCOS # 05 -- ARC COS.
043777,000367: 00,2005 13174 TCF DSQ # 06 -- DP SQUARE.
043778,000368: 00,2006 12116 TCF ROUND # 07 -- ROUND TO DP.
043779,000369:
043780,000370: 00,2007 17670 TCF COMP # 10 -- COMPLEMENT VECTOR OR SCALAR
043781,000371: 00,2010 13232 TCF VDEF # 11 -- VECTOR DEFINE.
043782,000372: 00,2011 13023 TCF UNIT # 12 -- UNIT VECTOR.
043783,000373: 00,2012 13176 TCF ABVALABS # 13 -- LENGTH OF VECTOR OR MAG OF SCALAR.
043784,000374: 00,2013 13245 TCF VSQ # 14 -- SQUARE OF LENGTH OF VECTOR.
043785,000375: 00,2014 16354 TCF STADR # 15 -- PUSH UP ON STORE CODE.
043786,000376: 00,2015 13274 TCF RVQ # 16 -- RETURN VIA QPRET.
043787,000377: 00,2016 13247 TCF PUSH # 17 -- PUSH MPAC DOWN.
043788,000378:
043789,000379: # Page 1014
043790,000380: # SECTION 2 LOAD AND STORE PACKAGE.
043791,000381:
043792,000382: # A SET OF EIGHT STORE CODES IS PROVIDED AS THE PRIMARY METHOD OF STORING THE MULTI-PURPOSE
043793,000383: # ACCUMULATOR (MPAC). IF IN THE DANZIG SECTION LOC REFERS TO AN ALGEBRAICALLY POSITIVE WORD, IT IS TAKEN AS A
043794,000384: # STORE CODE WITH A CORRESPONDING ERASABLE ADDRESS. MOST OF THESE CODES ARE TWO ADDRESS, SPECIFYING THAT THE WORD
043795,000385: # FOLLOWING THE STORE CODE IS TO BE USED AS AN ADDRESS FROM WHICH TO RE-LOAD MPAC. FOUR OPTIONS ARE AVAILABLE:
043796,000386:
043797,000387: # 1. STORE STORE MPAC. THE E ADDRESS MAY BE INDEXED.
043798,000388: # 2. STODL STORE MPAC AND RE-LOAD IT IN DP WITH THE NEXT ADDRESS (THE LOAD MAY BE INDEXED).
043799,000389: # 3. STOVL STORE MPAC AND RE-LOAD A VECTOR (AS ABOVE).
043800,000390: # 4. STCALL STORE AND DO A CALL (BOTH ADDRESES MUST BE DIRECT HERE).
043801,000391:
043802,000392: # STODL AND STOVL WILL TAKE FROM THE PUSH-DOWN LIST IF NO LOAD ADDRESS IS GIVEN.
043803,000393:
043804,000394: 6354 BLOCK 3
043805,000395:
043806,000396: 6354 COUNT* $$/INTER
043807,000397: 6354 30165 STADR CA BANKSET # THE STADR CODE (PUSHUP UP ON STORE
043808,000398: 6355 54004 TS FBANK # ADDRESS) ENTERS HERE.
043809,000399: 6356 24164 INCR LOC
043810,000400: 6357 50164 ITR1 INDEX LOC # THE STORECODE WAS STORED COMPLEMENTED TO
043811,000401: 6360 40000 CS 0 # MAKE IT LOOK LIKE AN OPCODE PAIR.
043812,000402: 6361 67747 AD NEGONE # (YUL CAN'T REMOVE 1 BECAUSE OF EARLY CCS)
043813,000403:
043814,000404: 6362 54116 DOSTORE TS ADDRWD
043815,000405: 6363 74356 MASK LOW11 # ENTRY FROM DISPATCHER. SAVE THE ERASABLE
043816,000406: 6364 56116 XCH ADDRWD # ADDRESS AND JUMP ON THE STORE CODE NO.
043817,000407: 6365 77722 MASK B12T14
043818,000408: 6366 00006 EXTEND
043819,000409: 6367 74747 MP BIT5 # EACH TRANSFER VECTOR ENTRY IS TWO WORDS.
043820,000410: 6370 50000 INDEX A
043821,000411: 6371 16372 TCF STORJUMP
043822,000412:
043823,000413: # Page 1015
043824,000414: # STORE CODE JUMP TABLE. CALLS THE APPROPRIATE STORING ROUTINE AND EXITS TO DANZIG OR TO ADDRESS WITH
043825,000415: # A SUPPLIED OPERATION CODE.
043826,000416:
043827,000417: # STORE STORE,1 AND STORE,2 RETURN TO DANZIG, THUS RESETTING THE EBANK TO ITS STATE AT INTPRET.
043828,000418:
043829,000419: 6372 06422 STORJUMP TC STORE # STORE.
043830,000420: 6373 16061 TCF DANZIG # PICK UP NEW OP CODE(S).
043831,000421: 6374 06414 TC STORE,1
043832,000422: 6375 16061 TCF DANZIG
043833,000423: 6376 06417 TC STORE,2
043834,000424: 6377 16061 TCF DANZIG
043835,000425:
043836,000426: 6400 06422 TC STORE # STODL.
043837,000427: 6401 16460 TCF DODLOAD
043838,000428:
043839,000429: 6402 06422 TC STORE # STODL WITH INDEXED LOAD ADDRESS.
043840,000430: 6403 16144 TCF DODLOAD*
043841,000431:
043842,000432: 6404 06422 TC STORE # STOVL.
043843,000433: 6405 16463 TCF DOVLOAD
043844,000434:
043845,000435: 6406 06422 TC STORE # STOVL WITH INDEXED LOAD ADDRESS.
043846,000436: 6407 16466 TCF DOVLOAD*
043847,000437: 6410 06422 TC STORE # STOTC.
043848,000438: 6411 34766 CAF CALLCODE
043849,000439: 6412 54020 TS CYR
043850,000440: 6413 16252 TCF 15BITADR # GET A 15 BIT ADDRESS.
043851,000441:
043852,000442: # Page 1016
043853,000443: # STORE CODE ADDRESS PROCESSOR.
043854,000444:
043855,000445: 6414 50120 STORE,1 INDEX FIXLOC
043856,000446: 6415 40046 CS X1
043857,000447: 6416 16421 TCF PRESTORE
043858,000448:
043859,000449: 6417 50120 STORE,2 INDEX FIXLOC
043860,000450: 6420 40047 CS X2
043861,000451: 6421 26116 PRESTORE ADS ADDRWD # RESULTANT ADDRESS IS IN ERASABLE.
043862,000452:
043863,000453: 6422 40116 STORE CS ADDRWD
043864,000454: 6423 64772 AD DEC45
043865,000455: 6424 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
043866,000456: 6425 30120 CA FIXLOC # YES.
043867,000457: 6426 16433 TCF AHEAD5
043868,000458: 6427 35007 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
043869,000459: 6430 56116 XCH ADDRWD
043870,000460: 6431 54003 TS EBANK
043871,000461: 6432 74357 MASK LOW8
043872,000462: 6433 26116 AHEAD5 ADS ADDRWD
043873,000463:
043874,000464: # Page 1017
043875,000465: # STORING ROUTINES. STORE DP, TP, OR VECTOR AS INDICATED BY MODE.
043876,000466:
043877,000467: 6434 00006 STARTSTO EXTEND # MPAC,+1 MUST BE STORED IN ANY EVENT.
043878,000468: # ITRACE (5) REFERS TO "STARTSTO".
043879,000469: 6435 30155 DCA MPAC
043880,000470: 6436 50116 INDEX ADDRWD
043881,000471: 6437 52001 DXCH 0
043882,000472:
043883,000473: 6440 10163 CCS MODE
043884,000474: 6441 16454 TCF TSTORE
043885,000475: 6442 00002 TC Q
043886,000476:
043887,000477: 6443 00006 VSTORE EXTEND
043888,000478: 6444 30160 DCA MPAC +3
043889,000479: 6445 50116 INDEX ADDRWD
043890,000480: 6446 52003 DXCH 2
043891,000481:
043892,000482: 6447 00006 EXTEND
043893,000483: 6450 30162 DCA MPAC +5
043894,000484: 6451 50116 INDEX ADDRWD
043895,000485: 6452 52005 DXCH 4
043896,000486: 6453 00002 TC Q
043897,000487:
043898,000488: 6454 30156 TSTORE CA MPAC +2
043899,000489: 6455 50116 INDEX ADDRWD
043900,000490: 6456 54002 TS 2
043901,000491: 6457 00002 TC Q
043902,000492:
043903,000493: # Page 1018
043904,000494: # ROUTINES TO BEGIN PROCESSING OF THE SECOND ADDRES ASSOCIATED WITH ALL STORE-TYPE CODES EXCEPT STORE
043905,000495: # ITSELF.
043906,000496:
043907,000497: 6460 37732 DODLOAD CAF DLOADCOD
043908,000498: 6461 54020 TS CYR
043909,000499: 6462 16106 TCF DIRADRES # GO GET A DIRECT ADDRESS.
043910,000500:
043911,000501: 6463 34735 DOVLOAD CAF VLOADCOD
043912,000502: 6464 54020 TS CYR
043913,000503: 6465 16106 TCF DIRADRES
043914,000504:
043915,000505: 6466 36107 DOVLOAD* CAF VLOAD*
043916,000506: 6467 16145 TCF DODLOAD* +1 # PROLOGUE TO INDEX ROUTINE.
043917,000507:
043918,000508: # Page 1019
043919,000509: # THE FOLLOWING LOAD INSTRUCTIONS ARE PROVIDED FOR LOADING THE MULTI-PURPOSE ACCUMULATOR MPAC.
043920,000510:
043921,000511: 6470 50116 TLOAD INDEX ADDRWD
043922,000512: 6471 30002 CA 2 # LOAD A TRIPLE PRECISION ARGUMENT INTO
043923,000513: 6472 54156 TS MPAC +2 # THE FIRST THREE MPAC REGISTERS, WITH THE
043924,000514: 6473 00006 EXTEND # CONTENTS OF THE OTHER FOUR IRRELEVANT.
043925,000515: 6474 50116 INDEX ADDRWD
043926,000516: 6475 30001 DCA 0
043927,000517: 6476 52155 DXCH MPAC
043928,000518: 6477 34753 TMODE CAF ONE
043929,000519: 6500 16060 TCF NEWMODE # DECLARE TRIPLE PRECISION MODE.
043930,000520:
043931,000521: 6501 22007 SLOAD ZL # LOAD A SINGLE PRECISION NUMBER INTO
043932,000522: 6502 50116 INDEX ADDRWD # MPAC, SETTING MPAC+1,2 TO ZERO. THE
043933,000523: 6503 30000 CA 0 # CONTENTS OF THE REMAINING MPAC REGISTERS
043934,000524: 6504 16055 TCF SLOAD2 # ARE IRRELEVANT.
043935,000525:
043936,000526: 6505 00006 VLOAD EXTEND # LOAD A DOUBLE PRECISION VECTOR INTO
043937,000527: 6506 50116 INDEX ADDRWD # MPAC,+1, MPAC+3,4, AND MPAC+5,6. THE
043938,000528: 6507 30001 DCA 0 # CONTENTS OF MPAC +2 ARE IRRELEVANT.
043939,000529: 6510 52155 DXCH MPAC
043940,000530:
043941,000531: 6511 00006 ENDVLOAD EXTEND # PDVL COMES HERE TO FINISH UP FOR DP, TP.
043942,000532: 6512 50116 INDEX ADDRWD
043943,000533: 6513 30003 DCA 2
043944,000534: 6514 52160 DXCH MPAC +3
043945,000535:
043946,000536: 6515 00006 +4 EXTEND # TPDVL FINISHES HERE.
043947,000537: 6516 50116 INDEX ADDRWD
043948,000538: 6517 30005 DCA 4
043949,000539: 6520 52162 DXCH MPAC +5
043950,000540:
043951,000541: 6521 44753 VMODE CS ONE # DECLARE VECTOR MODE.
043952,000542: 6522 16060 TCF NEWMODE
043953,000543:
043954,000544: # Page 1020
043955,000545: # THE FOLLOWING INSTRUCTIONS ARE PROVIDED FOR STORING OPERANDS IN THE PUSHDOWN LIST:
043956,000546: # 1. PUSH PUSHDOWN AND NO LOAD.
043957,000547: # 2. PDDL PUSHDOWN AND DOUBLE PRECISION LOAD.
043958,000548: # 3. PDVL PUSHDOWN AND VECTOR LOAD.
043959,000549:
043960,000550: 6523 00006 PDDL EXTEND
043961,000551: 6524 50116 INDEX ADDRWD # LOAD MPAC,+1, PUSHING THE FORMER
043962,000552: 6525 30001 DCA 0 # CONTENTS DOWN.
043963,000553: 6526 52155 DXCH MPAC
043964,000554: 6527 50166 INDEX PUSHLOC
043965,000555: 6530 52001 DXCH 0
043966,000556:
043967,000557: 6531 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER APPRO-
043968,000558: 6532 36244 CAF NO.WDS # PRIATELY.
043969,000559: 6533 26166 ADS PUSHLOC
043970,000560:
043971,000561: 6534 10163 CCS MODE
043972,000562: 6535 16552 TCF ENDTPUSH
043973,000563: 6536 16550 TCF ENDDPUSH
043974,000564:
043975,000565: 6537 54163 TS MODE # NOW DP.
043976,000566: 6540 54156 ENDVPUSH TS MPAC +2
043977,000567: 6541 52160 DXCH MPAC +3 # PUSH DOWN THE REST OF THE VECTOR HERE.
043978,000568: 6542 50166 INDEX PUSHLOC
043979,000569: 6543 51775 DXCH 0 -4
043980,000570:
043981,000571: 6544 52162 DXCH MPAC +5
043982,000572: 6545 50166 INDEX PUSHLOC
043983,000573: 6546 51777 DXCH 0 -2
043984,000574:
043985,000575: 6547 16061 TCF DANZIG
043986,000576:
043987,000577: 6550 54156 ENDDPUSH TS MPAC +2 # SET MPAC +2 TO ZERO AND EXIT ON DP.
043988,000578: 6551 16061 TCF DANZIG
043989,000579:
043990,000580: 6552 54163 ENDTPUSH TS MODE
043991,000581: 6553 56156 XCH MPAC +2 # ON TRIPLE, SET MPAC +2 TO ZERO, PUSHING
043992,000582: 6554 50166 +2 INDEX PUSHLOC # DOWN THE OLD CONTENTS
043993,000583: 6555 53777 TS 0 -1
043994,000584: 6556 16061 TCF DANZIG
043995,000585:
043996,000586: # Page 1021
043997,000587: # PDVL -- PUSHDOWN AND VECTOR LOAD
043998,000588:
043999,000589: 6557 00006 PDVL EXTEND # RELOAD MPAC AND PUSH DOWN ITS CONTENTS.
044000,000590: 6560 50116 INDEX ADDRWD
044001,000591: 6561 30001 DCA 0
044002,000592: 6562 52155 DXCH MPAC
044003,000593: 6563 50166 INDEX PUSHLOC
044004,000594: 6564 52001 DXCH 0
044005,000595:
044006,000596: 6565 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER.
044007,000597: 6566 36244 CAF NO.WDS
044008,000598: 6567 26166 ADS PUSHLOC
044009,000599:
044010,000600: 6570 10163 CCS MODE # TEST PAST MODE.
044011,000601: 6571 16610 TCF TPDVL
044012,000602: 6572 16511 TCF ENDVLOAD # JUST LOAD LAST FOUR REGISTERS ON DP.
044013,000603:
044014,000604: 6573 00006 VPDVL EXTEND # PUSHDOWN AND RE-LOAD LAST TWO COMPONENTS
044015,000605: 6574 50116 INDEX ADDRWD
044016,000606: 6575 30003 DCA 2
044017,000607: 6576 52160 DXCH MPAC +3
044018,000608: 6577 50166 INDEX PUSHLOC
044019,000609: 6600 51775 DXCH 0 -4
044020,000610:
044021,000611: 6601 00006 EXTEND
044022,000612: 6602 50116 INDEX ADDRWD
044023,000613: 6603 30005 DCA 4
044024,000614: 6604 52162 DXCH MPAC +5
044025,000615: 6605 50166 INDEX PUSHLOC
044026,000616: 6606 51777 DXCH 0 -2
044027,000617:
044028,000618: 6607 16061 TCF DANZIG
044029,000619:
044030,000620: 6610 00006 TPDVL EXTEND # ON TP, WE MUST LOAD THE Y COMPONENT
044031,000621: 6611 50116 INDEX ADDRWD # BEFORE STORING MPAC +2 IN CASE THIS IS A
044032,000622: 6612 30003 DCA 2 # PUSHUP.
044033,000623: 6613 52160 DXCH MPAC +3
044034,000624:
044035,000625: 6614 30156 CA MPAC +2
044036,000626: 6615 50166 INDEX PUSHLOC # IN DP.
044037,000627: 6616 53777 TS 0 -1
044038,000628: 6617 16515 TCF ENDVLOAD +4
044039,000629:
044040,000630: # SSP (STORE SINGLE PRECISION) IS EXECUTED HERE.
044041,000631:
044042,000632: 6620 24164 SSP INCR LOC # PICK UP THE WORD FOLLOWING THE GIVEN
044043,000633: 6621 50164 INDEX LOC # ADDRESS AND STORE IT AT X.
044044,000634: 6622 30000 CA 0
044045,000635: 6623 50116 STORE1 INDEX ADDRWD # SOME INDEX AND MISCELLANEOUS OPS END
044046,000636: 6624 54000 TS 0 # HERE.
044047,000637: # Page 1022
044048,000638: 6625 16061 TCF DANZIG
044049,000639:
044050,000640: # Page 1023
044051,000641: # SEQUENCE CHANGING AND SUBROUTINE CALLING OPTIONS.
044052,000642:
044053,000643: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR SEQUENCING CHANGING, BRANCHING, AND CALLING SUBROUTINES:
044054,000644: # 1. GOTO GO TO.
044055,000645: # 2. CALL CALL SUBROUTINE SETTING QPRET.
044056,000646: # 3. CGOTO COMPUTED GO TO.
044057,000647: # 4. CCALL COMPUTED CALL.
044058,000648: # 7. BPL BRANCH IF MPAC POSITIVE OR ZERO.
044059,000649: # 8. BZE BRANCH IF MPAC ZERO.
044060,000650: # 9. BMN BRANCH IF MPAC NEGATIVE NON-ZERO.
044061,000651:
044062,000652: 6626 24164 CCALL INCR LOC # MAINTAIN LOC FOR QPRET COMPUTATION
044063,000653: 6627 50164 INDEX LOC
044064,000654: 6630 30000 CAF 0 # GET BASE ADDRESS OF CADR LIST.
044065,000655: 6631 50116 INDEX ADDRWD
044066,000656: 6632 60000 AD 0 # ADD INCREMENT.
044067,000657: 6633 54004 TS FBANK # SELECT DESIRED CADR.
044068,000658: 6634 75012 MASK LOW10
044069,000659: 6635 50000 INDEX A
044070,000660: 6636 32000 CAF 10000
044071,000661: 6637 54117 TS POLISH
044072,000662:
044073,000663: 6640 30165 CALL CA BANKSET # FOR ANY OF THE CALL OPTIONS, MAKE UP THE
044074,000664: 6641 74350 MASK BANKMASK # ADDRESS OF THE NEXT OP-CODE PAIR/STORE
044075,000665: 6642 64350 AD BANKMASK # CODE AND LEAVE IT IN QPRET. NOTE THAT
044076,000666: 6643 60164 AD LOC # BANKMASK = -(2000 - 1).
044077,000667: 6644 50120 INDEX FIXLOC
044078,000668: 6645 54052 TS QPRET
044079,000669:
044080,000670: 6646 30117 GOTO CA POLISH # BASIC BRANCHING SEQUENCE.
044081,000671: 6647 77742 +1 MASK HIGH4
044082,000672: 6650 00006 EXTEND
044083,000673: 6651 16662 BZF GOTOERS # SEE IF ADDRESS POINTS TO FIXED OR ERAS.
044084,000674: 6652 30165 +4 CA BANKSET # SET EBANK PART OF BBANK. NEXT, SET UP
044085,000675: 6653 54006 TS BBANK # FBANK. THE COMBINATION IS PICKED UP &
044086,000676: 6654 30117 CA POLISH # PUT INTO BANKSET AT INTPRET +2.
044087,000677: 6655 54004 TS FBANK
044088,000678: 6656 75012 MASK LOW10
044089,000679: 6657 64741 AD 2K
044090,000680: 6660 54164 TS LOC
044091,000681: 6661 16042 TCF INTPRET +3
044092,000682:
044093,000683: 6662 E3,1400 EBANK= 1400 # SO YUL DOESN'T CUSS THE "CA 1400" BELOW.
044094,000684:
044095,000685: 6662 30117 GOTOERS CA POLISH # THE GIVEN ADDRESS IS IN ERASABLE -- SEE
044096,000686: 6663 66251 AD -ENDVAC # IF RELATIVE TO THE WORK ARA.
044097,000687: 6664 10000 CCS A
044098,000688: 6665 30117 CA POLISH # GENERAL ERASABLE.
044099,000689: 6666 16675 TCF GOTOGE
044100,000690:
044101,000691: # Page 1024
044102,000692: 6667 30120 CA FIXLOC # WORK AREA.
044103,000693: 6670 60117 AD POLISH
044104,000694: 6671 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
044105,000695: 6672 30000 CA 0 # THE BRANCH ADDRESS.
044106,000696: 6673 54117 TS POLISH
044107,000697: 6674 16647 TCF GOTO +1 # ALLOWS ARBITRARY INDIRECTNESS LEVELS.
044108,000698:
044109,000699: 6675 54003 GOTOGE TS EBANK
044110,000700: 6676 74357 MASK LOW8
044111,000701: 6677 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
044112,000702: 6700 31400 CA 1400 # THE BRANCH ADDRESS.
044113,000703: 6701 54117 TS POLISH
044114,000704: 6702 16647 TCF GOTO +1
044115,000705:
044116,000706: 6703 50164 CGOTO INDEX LOC # COMPUTED GO TO. PICK UP ADDRESS OF CADR
044117,000707: 6704 30001 CA 1 # LIST
044118,000708: 6705 50116 INDEX ADDRWD # ADD MODIFIER.
044119,000709: 6706 60000 AD 0
044120,000710: 6707 54004 TS FBANK # SELECT GOTO ADDRESS
044121,000711: 6710 75012 MASK LOW10
044122,000712: 6711 50000 INDEX A
044123,000713: 6712 32000 CA 10000
044124,000714: 6713 54117 TS POLISH
044125,000715: 6714 16647 TCF GOTO +1 # WITH ADDRESS IN A.
044126,000716:
044127,000717: 6715 30165 SWBRANCH CA BANKSET # SWITCH INSTRUCTIONS WHICH ELECT TO
044128,000718: 6716 54004 TS FBANK # BRANCH COME HERE TO DO SO.
044129,000719: 6717 50164 INDEX LOC
044130,000720: 6720 30001 CA 1
044131,000721: 6721 54117 TS POLISH
044132,000722: 6722 16647 TCF GOTO +1
044133,000723:
044134,000724: # Page 1025
044135,000725: # TRIPLE PRECISION BRANCHING ROUTINE. IF CALLING TC IS AT L, RETURN IS AS FOLLOWS:
044136,000726: # L+1 IF MPAC IS GREATER THAN ZERO.
044137,000727: # L+2 IF MPAC IS EQUAL TO +0 OR -0.
044138,000728: # L+3 IF MPAC IS LESS THAN ZERO.
044139,000729:
044140,000730: 6723 10154 BRANCH CCS MPAC
044141,000731: 6724 00002 TC Q
044142,000732: 6725 16727 TCF +2 # ON ZERO.
044143,000733: 6726 16741 TCF NEG
044144,000734:
044145,000735: 6727 10155 CCS MPAC +1
044146,000736: 6730 00002 TC Q
044147,000737: 6731 16733 TCF +2
044148,000738: 6732 16741 TCF NEG
044149,000739:
044150,000740: 6733 10156 CCS MPAC +2
044151,000741: 6734 00002 TC Q
044152,000742: 6735 16737 TCF +2
044153,000743: 6736 16741 TCF NEG
044154,000744:
044155,000745: 6737 50002 Q+1 INDEX Q
044156,000746: 6740 00001 TC 1
044157,000747:
044158,000748: 6741 50002 NEG INDEX Q # IF FIRST NON-ZERO REGISTER WAS NEGATIVE.
044159,000749: 6742 00002 TC 2
044160,000750:
044161,000751: 6743 6741 Q+2 = NEG
044162,000752:
044163,000753: # ITRACE (3) REFERS TO "EXIT".
044164,000754:
044165,000755: 6743 30165 EXIT CA BANKSET # RESTORE USER'S BANK SETTING, AND LEAVE
044166,000756: 6744 54006 TS BBANK # INTERPRETIVE MODE.
044167,000757: 6745 50164 INDEX LOC
044168,000758: 6746 00001 TC 1
044169,000759:
044170,000760: # Page 1026
044171,000761: # SECTION 3 -- ADD/SUBTRACT PACKAGE.
044172,000762:
044173,000763: # THE FOLLOWING OPERATIONS ARE PROVIDED FOR ADDING TO AND SUBTRACTING FROM THE MULTI-PURPOSE ACCUMULATOR
044174,000764: # MPAC:
044175,000765: # 1. DAD DOUBLE PRECISION ADD.
044176,000766: # 2. DSU DOUBLE PRECISION SUBTRACT.
044177,000767: # 3. BDSU DOUBLE PRECISION SUBTRACT FROM.
044178,000768: # 4. TAD TRIPLE PRECISION ADD.
044179,000769: # 5. VAD VECTOR ADD.
044180,000770: # 6. VSU VECTOR SUBTRACT.
044181,000771: # 7. BVSU VECTOR SUBTRACT FROM.
044182,000772: # THE INTERPRETIVE OVERFLOW INDICATOR OVFIND IS SET NON-ZERO IF OVERFLOW OCCURS IN ANY OF THE ABOVE.
044183,000773:
044184,000774: 6747 34735 VSU CAF BIT15 # CHANGES 0 TO DCS.
044185,000775: 6750 16752 TCF +2
044186,000776:
044187,000777: 6751 34355 VAD CAF PRIO30 # CHANGES 0 TO DCA.
044188,000778: 6752 26116 ADS ADDRWD
044189,000779: 6753 00006 EXTEND
044190,000780: 6754 50116 INDEX ADDRWD
044191,000781: 6755 00003 READ HISCALAR # DCA 2 OR DCS 2
044192,000782: 6756 20160 DAS MPAC +3
044193,000783: 6757 00006 EXTEND # CHECK OVERFLOW.
044194,000784: 6760 16762 BZF +2
044195,000785: 6761 07014 TC OVERFLWY
044196,000786:
044197,000787: 6762 00006 EXTEND
044198,000788: 6763 50116 INDEX ADDRWD
044199,000789: 6764 00005 READ CHAN5 # DCA 4 OR DCS 4
044200,000790: 6765 20162 DAS MPAC +5
044201,000791: 6766 00006 EXTEND
044202,000792: 6767 16771 BZF +2
044203,000793: 6770 07011 TC OVERFLWZ
044204,000794:
044205,000795: 6771 00006 EXTEND
044206,000796: 6772 50116 INDEX ADDRWD
044207,000797: 6773 00001 READ LCHAN # DCA 0 OR DCS 0
044208,000798: 6774 17000 TCF ENDVXV
044209,000799:
044210,000800: 6775 00006 DAD EXTEND
044211,000801: 6776 50116 INDEX ADDRWD
044212,000802: 6777 30001 DCA 0
044213,000803: 7000 20155 ENDVXV DAS MPAC # VXV FINISHES HERE.
044214,000804: 7001 00006 EXTEND
044215,000805: 7002 16061 BZF DANZIG
044216,000806:
044217,000807: # Page 1027
044218,000808: 7003 07017 SETOVF TC OVERFLOW
044219,000809: 7004 16061 TCF DANZIG
044220,000810:
044221,000811: # Page 1028
044222,000812: 7005 00006 DSU EXTEND
044223,000813: 7006 50116 INDEX ADDRWD
044224,000814: 7007 40001 DCS 0
044225,000815: 7010 17000 TCF ENDVXV
044226,000816:
044227,000817: 7011 54001 OVERFLWZ TS L # ENTRY FOR THIRD COMPONENT.
044228,000818: 7012 34756 CAF FIVE
044229,000819: 7013 17016 TCF +3
044230,000820:
044231,000821: 7014 54001 OVERFLWY TS L # ENTRY FOR SECOND COMPONENT.
044232,000822: 7015 36245 CAF THREE
044233,000823: 7016 56001 XCH L
044234,000824:
044235,000825: 7017 50000 OVERFLOW INDEX A # ENTRY FOR 1ST COMP OR DP (L=0).
044236,000826: 7020 44734 CS LIMITS # PICK UP POSMAX OR NEGMAX.
044237,000827: 7021 54130 TS BUF
044238,000828: 7022 00006 EXTEND
044239,000829: 7023 24000 AUG A # FORCE OVERFLOW.
044240,000830: 7024 50001 INDEX L
044241,000831: 7025 26155 ADS MPAC +1
044242,000832: 7026 54007 TS 7
044243,000833: 7027 34755 CAF ZERO
044244,000834: 7030 60130 AD BUF
044245,000835: 7031 50001 INDEX L
044246,000836: 7032 26154 ADS MPAC
044247,000837: 7033 54007 TS 7
044248,000838: 7034 00002 TC Q # NO OVERFLOW EXIT.
044249,000839: 7035 17152 TCF SETOVF2 # SET OVFIND AND EXIT.
044250,000840:
044251,000841: 7036 00006 BVSU EXTEND
044252,000842: 7037 50116 INDEX ADDRWD
044253,000843: 7040 30003 DCA 2
044254,000844: 7041 52160 DXCH MPAC +3
044255,000845: 7042 00006 EXTEND
044256,000846: 7043 40001 DCOM
044257,000847: 7044 20160 DAS MPAC +3
044258,000848: 7045 00006 EXTEND
044259,000849: 7046 17050 BZF +2
044260,000850: 7047 07014 TC OVERFLWY
044261,000851:
044262,000852: 7050 00006 EXTEND
044263,000853: 7051 50116 INDEX ADDRWD
044264,000854: 7052 30005 DCA 4
044265,000855: 7053 52162 DXCH MPAC +5
044266,000856: 7054 00006 EXTEND
044267,000857: 7055 40001 DCOM
044268,000858: 7056 20162 DAS MPAC +5
044269,000859: 7057 00006 EXTEND
044270,000860: 7060 17062 BZF +2
044271,000861: 7061 07011 TC OVERFLWZ
044272,000862:
044273,000863: # Page 1029
044274,000864: 7062 00006 BDSU EXTEND
044275,000865: 7063 50116 INDEX ADDRWD
044276,000866: 7064 30001 DCA 0
044277,000867: 7065 52155 DXCH MPAC
044278,000868: 7066 00006 EXTEND
044279,000869: 7067 40001 DCOM
044280,000870: 7070 17000 TCF ENDVXV
044281,000871:
044282,000872: # Page 1030
044283,000873: # TRIPLE PRECISION ADD ROUTINE.
044284,000874:
044285,000875: 7071 00006 TAD EXTEND
044286,000876: 7072 50116 INDEX ADDRWD
044287,000877: 7073 30002 DCA 1 # ADD MINOR PARTS FIRST.
044288,000878: 7074 20156 DAS MPAC +1
044289,000879: 7075 50116 INDEX ADDRWD
044290,000880: 7076 60000 AD 0
044291,000881: 7077 60154 AD MPAC
044292,000882: 7100 54154 TS MPAC
044293,000883: 7101 16061 TCF DANZIG
044294,000884:
044295,000885: 7102 17003 TCF SETOVF # SET OVFIND IF SUCH OCCURS.
044296,000886:
044297,000887: # Page 1031
044298,000888: # ARITHMETIC SUBROUTINES REQUIRED IN FIXED-FIXED.
044299,000889: # 1. DMPSUB DOUBLE PRECISION MULTIPLY, MULTIPLY THE CONTENTS OF MPAC,+1 BY THE DP WORD WHOSE ADDRESS
044300,000890: # IS IN ADDRWD AND LEAVE A TRIPLE-PRECISION RESULT IN MPAC.
044301,000891: # 2. ROUNDSUB ROUND THE TRIPLE PRECISION CONTENTS OF MPAC TO DOUBLE PRECISION.
044302,000892: # 3. DOTSUB TAKE THE DOT PRODUCT OF THE VECTOR IN MPAC AND THE VECTOR WHOSE ADDRESS IS IN ADDRWD
044303,000893: # AND LEAVE THE TRIPLE PRECISION RESULT IN MPAC.
044304,000894: # 4. POLY USING THE CONTENTS OF MPAC AS A DP ARGUMENT, EVALUATE THE POLYNOMIAL WHOSE DEGREE AND
044305,000895: # COEFFICIENTS IMMEDIATELY FOLLOW THE TC POLY INSTRUCTION (SEE ROUTINE FOR DETAILS).
044306,000896:
044307,000897: 7103 50002 DMP INDEX Q # BASIC SUBROUTINE FOR USE BY PINBALL, ETC
044308,000898: 7104 30000 CAF 0 # ADRES OF ARGUMENT FOLLOWS TC DMP .
044309,000899: 7105 24002 INCR Q
044310,000900: 7106 54116 -1 TS ADDRWD # (PROLOGUE FOR SETTING ADDRWD.)
044311,000901:
044312,000902: 7107 50116 DMPSUB INDEX ADDRWD # GET MINOR PART OF OPERAND AT C(ADDRWD).
044313,000903: 7110 30001 CA 1
044314,000904: 7111 54156 TS MPAC +2 # THIS WORKS FOR SQUARING MPAC AS WELL.
044315,000905: 7112 34755 CAF ZERO # SET MPAC +1 TO ZERO SO WE CAN ACCUMULATE
044316,000906: 7113 56155 XCH MPAC +1 # THE PARTIAL PRODUCTS WITH DAS
044317,000907: 7114 54135 TS MPTEMP # INSTRUCTIONS.
044318,000908: 7115 00006 EXTEND
044319,000909: 7116 70156 MP MPAC +2 # MINOR OF MPAC X MINOR OF C(ADDRWD).
044320,000910:
044321,000911: 7117 56156 XCH MPAC +2 # DISCARD MINOR PART OF ABOVE RESULT AND
044322,000912: 7120 00006 EXTEND # FORM MAJOR OF MPAC X MINOR OF C(ADDRWD).
044323,000913: 7121 70154 MP MPAC
044324,000914: 7122 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
044325,000915:
044326,000916: 7123 50116 INDEX ADDRWD # GET MAJOR PART OF ARGUMENT AT C(ADDRWD).
044327,000917: 7124 30000 CA 0
044328,000918: 7125 56135 XCH MPTEMP # SAVE AND BRING OUT MINOR OF MPAC.
044329,000919: 7126 00006 DMPSUB2 EXTEND
044330,000920: 7127 70135 MP MPTEMP # MAJOR OF C(ADDRWD) X MINOR OF MPAC.
044331,000921: 7130 20156 DAS MPAC +1 # ACCUMULATE, SETTING A TO NET OVERFLOW.
044332,000922:
044333,000923: 7131 56154 XCH MPAC # SETTING MPAC TO 0 OR +-1.
044334,000924: 7132 00006 EXTEND
044335,000925: 7133 70135 MP MPTEMP # MAJOR OF MPAC X MAJOR OF C(ADDRWD).
044336,000926: 7134 20155 DAS MPAC # GUARANTEED NO OVERFLOW.
044337,000927: 7135 00002 TC Q # 49 MCT = .573 MS. INCLUDING RETURN.
044338,000928:
044339,000929: # Page 1032
044340,000930: # ROUND MPAC TO DOUBLE PRECISION, SETTING OVFIND ON THE RARE EVENT OF OVERFLOW.
044341,000931:
044342,000932: 7136 34755 ROUNDSUB CAF ZERO # SET MPAC +2 = 0 FOR SCALARS AND CHANGE
044343,000933: 7137 54163 +1 TS MODE # MODE TO DP.
044344,000934:
044345,000935: 7140 56156 VROUND XCH MPAC +2 # BUT WE NEEDN'T TAKE THE TIME FOR VECTORS.
044346,000936: 7141 60000 DOUBLE
044347,000937: 7142 54001 TS L
044348,000938: 7143 00002 TC Q
044349,000939:
044350,000940: 7144 60155 AD MPAC +1 # ADD ROUDING BIT IF MPAC +2 WAS GREATER
044351,000941: 7145 54155 TS MPAC +1 # THAN .5 IN MAGNITUDE.
044352,000942: 7146 00002 TC Q
044353,000943:
044354,000944: 7147 60154 AD MPAC # PROPAGATE INTERFLOW.
044355,000945: 7150 54154 TS MPAC
044356,000946: 7151 00002 TC Q
044357,000947:
044358,000948: 7152 54121 SETOVF2 TS OVFIND # (RARE).
044359,000949: 7153 00002 TC Q
044360,000950:
044361,000951: # Page 1033
044362,000952: # THE DOT PRODUCT SUBROUTINE USUALLY FORMS THE DOT PRODUCT OF THE VECTOR IN MPAC WITH A STANDARD SIX
044363,000953: # REGISTER VECTOR WHOSE ADDRESS IS IN ADDRWD. IN THIS CASE C(DOTINC) ARE SET TO 2. VXM, HOWEVER, SETS C(DOTINC) TO
044364,000954: # 6 SO THAT DOTSUB DOTS MPAC WITH A COLUMN VECTOR OF THE MATRIX IN QUESTION IN THIS CASE.
044365,000955:
044366,000956: 7154 34752 PREDOT CAF TWO # PROLOGUE TO SET DOTINC TO 2.
044367,000957: 7155 54136 TS DOTINC
044368,000958:
044369,000959: 7156 00006 DOTSUB EXTEND
044370,000960: 7157 22137 QXCH DOTRET # SAVE RETURN
044371,000961: 7160 07107 TC DMPSUB # DOT X COMPONENTS.
044372,000962: 7161 52160 DXCH MPAC +3 # POSITION Y COMPONENT OF MPAC FOR
044373,000963: 7162 52155 DXCH MPAC # MULTIPLICATION WHILE SAVING RESULT IN
044374,000964: 7163 52131 DXCH BUF # THREE WORD BUFFER, BUF.
044375,000965: 7164 30156 CA MPAC +2
044376,000966: 7165 54132 TS BUF +2
044377,000967:
044378,000968: 7166 30136 CA DOTINC # ADVANCE ADDRWD TO Y COMPONENT OF
044379,000969: 7167 26116 ADS ADDRWD # OTHER ARGUMENT.
044380,000970: 7170 07107 TC DMPSUB
044381,000971: 7171 52156 DXCH MPAC +1 # ACCUMULATE PARTIAL PRODUCTS.
044382,000972: 7172 20132 DAS BUF +1
044383,000973: 7173 60154 AD MPAC
044384,000974: 7174 60130 AD BUF
044385,000975: 7175 54130 TS BUF
044386,000976: 7176 17200 TCF +2
044387,000977: 7177 54121 TS OVFIND # IF OVERFLOW OCCURS.
044388,000978:
044389,000979: 7200 52162 DXCH MPAC +5 # MULTIPLY Z COMPONENTS.
044390,000980: 7201 52155 DXCH MPAC
044391,000981: 7202 30136 CA DOTINC
044392,000982: 7203 26116 ADS ADDRWD
044393,000983: 7204 07107 TC DMPSUB
044394,000984: 7205 52132 ENDDOT DXCH BUF +1 # LEAVE FINAL ACCUMULATION IN MPAC.
044395,000985: 7206 20156 DAS MPAC +1
044396,000986: 7207 60154 AD MPAC
044397,000987: 7210 60130 AD BUF
044398,000988: 7211 54154 TS MPAC
044399,000989: 7212 00137 TC DOTRET
044400,000990:
044401,000991: 7213 07017 TC OVERFLOW # ON OVERFLOW HERE.
044402,000992: 7214 00137 TC DOTRET
044403,000993:
044404,000994: # Page 1034
044405,000995: # DOUBLE PRECISION POLYNOMIAL EVALUATOR
044406,000996: # N N-1
044407,000997: # THIS ROUTINE EVALUATES A X + A X + ... + A X + A LEAVING THE DP RESULT IN MPAC ON EXIT.
044408,000998: # N N-1 1 0
044409,000999:
044410,001000: # THE ROUTINE HAS TWO ENTRIES
044411,001001:
044412,001002: # 1 ENTRY THRU POWRSERS. THE COEFFICIENTS MAY BE EITHER IN FIXED OR ERASABLE E. THE CALL IS BY
044413,001003: # TC POWRSERS, AND THE RETURN IS TO LOC(TC POWRSERS)+1. THE ENTERING DATA MUST BE AS FOLLOWS:
044414,001004:
044415,001005: # A SP LOC-3 # ADDRESS FOR REFERENCING COEF TABLE
044416,001006: # L SP N-1 # N IS THE DEGREE OF THE POWER SERIES
044417,001007: # MPAC DP X # ARGUMENT
044418,001008: # LOC-2N DP A(0)
044419,001009: # ...
044420,001010: # LOC DP A(N)
044421,001011:
044422,001012: # 2. ENTRY THRU POLY. THE CALL TO POLY AND THE ENTERING DATA MUST BE AS FOLLOWS
044423,001013:
044424,001014: # MPAC DP X # ARGUMENT
044425,001015: # LOC TC POLY
044426,001016: # LOC+1 SP N-1
044427,001017: # LOC+2 DP A(0)
044428,001018: # ...
044429,001019: # LOC+2N+2 DP A(N) # RETURN IS TO LOC+2N+4
044430,001020:
044431,001021: 7215 00006 POWRSERS EXTEND
044432,001022: 7216 22141 QXCH POLYRET # RETURN ADDRESS
044433,001023: 7217 54117 TS POLISH # POWER SERIES ADDRESS
044434,001024: 7220 22140 LXCH POLYCNT # N-1 TO COUNTER
044435,001025: 7221 17232 TCF POLYCOM # SKIP SET UP BY POLY
044436,001026:
044437,001027: 7222 50002 POLY INDEX Q
044438,001028: 7223 30000 CAF 0
044439,001029: 7224 54140 TS POLYCNT # N-1 TO COUNTER
044440,001030: 7225 60000 DOUBLE
044441,001031: 7226 60002 AD Q
044442,001032: 7227 54117 TS POLISH # L(A(N))-3 TO POLISH
044443,001033: 7230 64756 AD FIVE
044444,001034: 7231 54141 TS POLYRET # STORE RETURN ADDRESS
044445,001035:
044446,001036: 7232 36273 POLYCOM CAF LVBUF # INCOMING X WILL BE MOVED TO VBUF, SO
044447,001037: 7233 54116 TS ADDRWD # SET ADDRWD SO DMPSUB WILL MPY BY VBUF.
044448,001038:
044449,001039: 7234 00006 EXTEND
044450,001040: 7235 50117 INDEX POLISH
044451,001041: 7236 30004 DCA 3
044452,001042:
044453,001043: # Page 1035
044454,001044: 7237 52155 DXCH MPAC # LOAD A(N) INTO MPAC
044455,001045: 7240 52123 DXCH VBUF # SAVING X IN VBUF
044456,001046: 7241 17245 TCF POLY2
044457,001047:
044458,001048: 7242 54140 POLYLOOP TS POLYCNT # SAVE DECREMENTD LOOP COUNTER
044459,001049: 7243 44752 CS TWO
044460,001050: 7244 26117 ADS POLISH # REGRESS COEFFICIENT POINTER
044461,001051:
044462,001052: 7245 07107 POLY2 TC DMPSUB # MULTIPLY BY X
044463,001053: 7246 00006 EXTEND
044464,001054: 7247 50117 INDEX POLISH
044465,001055: 7250 30002 DCA 1 # ADD IN NEXT COEFFICIENT
044466,001056: 7251 20155 DAS MPAC # USER'S RESPONSIBILITY TO ASSURE NO OVFLOW
044467,001057:
044468,001058: 7252 10140 CCS POLYCNT
044469,001059: 7253 17242 TCF POLYLOOP
044470,001060: 7254 00141 TC POLYRET # RETURN CALLER
044471,001061:
044472,001062: # Page 1036
044473,001063: # MISCELLANEOUS MULTI-PRECISION ROUTINES REQUIRED IN FIXED-FIXED BUT NOT USED BY THE INTERPRETER.
044474,001064:
044475,001065: 7255 34755 DPAGREE CAF ZERO # DOUBLE PRECISION ENTRY --
044476,001066: 7256 54156 TS MPAC +2 # ZERO LOW-ORDER WORD
044477,001067:
044478,001068: 7257 22002 TPAGREE LXCH Q # FORCE SIGN AGREEMENT AMONG THE TRIPLE
044479,001069: 7260 06723 TC BRANCH # PRECISION CONTENTS OF MPAC. RETURNING
044480,001070: 7261 17265 TCF ARG+ # WITH SIGNUM OF THE INPUT IN A.
044481,001071: 7262 17305 TCF ARGZERO
044482,001072:
044483,001073: 7263 44733 CS POSMAX # IF NEGATIVE.
044484,001074: 7264 17266 TCF +2
044485,001075:
044486,001076: 7265 34733 ARG+ CAF POSMAX
044487,001077: 7266 54002 TS Q
044488,001078: 7267 00006 EXTEND
044489,001079: 7270 24000 AUG A # FORMS +-1.0.
044490,001080: 7271 60156 AD MPAC +2
044491,001081: 7272 54156 TS MPAC +2
044492,001082: 7273 34755 CAF ZERO
044493,001083: 7274 60002 AD Q
044494,001084: 7275 60155 AD MPAC +1
044495,001085: 7276 54155 TS MPAC +1
044496,001086: 7277 34755 CAF ZERO
044497,001087: 7300 60002 AD Q # Q STILL HAS POSMAX OR NEGMAX IN IT.
044498,001088: 7301 60154 AD MPAC
044499,001089: 7302 54154 ARGZERO2 TS MPAC # ALWAYS SKIPPING UNLESS ARGZERO.
044500,001090: 7303 54155 TS MPAC +1
044501,001091: 7304 00001 TC L # RETURN VIA L.
044502,001092:
044503,001093: 7305 54156 ARGZERO TS MPAC +2 # SET ALL THREE MPAC REGISTERS TO ZERO.
044504,001094: 7306 17302 TCF ARGZERO2
044505,001095:
044506,001096: # SHORTMP MULTIPLIES THE TP CONTENTS OF MPAC BY THE SINGLE PRECISION NUMBER ARRIVING IN A.
044507,001097:
044508,001098: 7307 54135 SHORTMP TS MPTEMP
044509,001099: 7310 00006 EXTEND
044510,001100: 7311 70156 MP MPAC +2
044511,001101: 7312 54156 TS MPAC +2
044512,001102: 7313 34755 SHORTMP2 CAF ZERO # SO SUBSEQUENT DAS WILL WORK.
044513,001103: 7314 56155 XCH MPAC +1
044514,001104: 7315 17126 TCF DMPSUB2
044515,001105:
044516,001106: # Page 1037
044517,001107: # DMPNSUB MULTIPLIES THE DP FRACTION ARRIVING IN MPAC BY THE SP
044518,001108: # INTEGER ARRIVING IN A. THE DP PRODUCT DEPARTS BOTH IN MPAC AND IN
044519,001109: # A AND L. NOTE THAT DMPNSUB NORMALLY INCREASES THE MAGNITUDE OF THE
044520,001110: # CONTENTS OF MPAC. THE CUSTOMER MUST INSURE THAT B(A) X B(MPAC,MPAC+1)
044521,001111: # AND B(A) X B(MPAC) ARE LESS THAN 1 IN MAGNITUDE, WHERE B, AS IS OBVIOUS,
044522,001112: # INDICATES THE ARRIVING CONTENTS.
044523,001113:
044524,001114: 7316 54135 DMPNSUB TS DMPNTEMP
044525,001115: 7317 00006 EXTEND
044526,001116: 7320 70155 MP MPAC +1
044527,001117: 7321 52155 DXCH MPAC # LOW PRODUCT TO MPAC, HIGH FACTOR TO A
044528,001118: 7322 00006 EXTEND
044529,001119: 7323 70135 MP DMPNTEMP
044530,001120: 7324 30001 CA L
044531,001121: 7325 26154 ADS MPAC # COMPLETING THE PRODUCT IN MPAC
044532,001122: 7326 00006 EXTEND
044533,001123: 7327 30155 DCA MPAC # BRINGING THE PRODUCT INTO A AND L
044534,001124: 7330 00002 TC Q
044535,001125:
044536,001126: # Page 1038
044537,001127: # MISCELLANEOUS VECTOR OPERATIONS. INCLUDED HERE ARE THE FOLLOWING.
044538,001128: # 1. DOT DP VECTOR DOT PRODUCT.
044539,001129: # 2. VXV DP VECTOR CROSS PRODUCT.
044540,001130: # 3. VXSC DP VECTOR TIMES SCALAR.
044541,001131: # 4. V/SC DP VECTOR DIVIDED BY SCALAR.
044542,001132: # 5. VPROJ DP VECTOR PROJECTION. ( (MPAC.X)MPAC ).
044543,001133: # 6. VXM DP VECTOR POST-MULTIPLIED BY MATRIX.
044544,001134: # 7. MXV DP VECTOR PRE-MULTIPLIED BY MATRIX.
044545,001135:
044546,001136: 7331 07154 DOT TC PREDOT # DO THE DOT PRODUCT AND EXIT, CHANGING
044547,001137: 7332 34755 DMODE CAF ZERO # THE MODE TO DP SCALAR.
044548,001138: 7333 16060 TCF NEWMODE
044549,001139:
044550,001140: 7334 34752 MXV CAF TWO # SET UP MATINC AND DOTINC FOR ROW
044551,001141: 7335 54140 TS MATINC # VECTORS.
044552,001142: 7336 17342 TCF VXM/MXV # GO TO COMMON PORTION.
044553,001143:
044554,001144: 7337 44363 VXM CS TEN # SET MATINC AND DOTINC TO REFER TO MATRIX
044555,001145: 7340 54140 TS MATINC # AS THREE COLUMN VECTORS.
044556,001146: 7341 36242 CAF SIX
044557,001147:
044558,001148: # Page 1039
044559,001149: # COMMON PORTION OF MXV AND VXM.
044560,001150:
044561,001151: 7342 54136 VXM/MXV TS DOTINC
044562,001152: # ITRACE (2) REFERS TO "VXM/MXV".
044563,001153: 7343 07532 TC MPACVBUF # SAVE VECTOR IN MPAC FOR FURTHER USE.
044564,001154:
044565,001155: 7344 07156 TC DOTSUB # GO DOT TO GET X COMPONENT OF ANSWER.
044566,001156: 7345 00006 EXTEND
044567,001157: 7346 30123 DCA VBUF # MOVE MPAC VECTOR BACK INTO MPAC, SAVING
044568,001158: 7347 52155 DXCH MPAC # NEW X COMPONENT IN BUF2.
044569,001159: 7350 52134 DXCH BUF2
044570,001160: 7351 00006 EXTEND
044571,001161: 7352 30125 DCA VBUF +2
044572,001162: 7353 52160 DXCH MPAC +3
044573,001163: 7354 00006 EXTEND
044574,001164: 7355 30127 DCA VBUF +4
044575,001165: 7356 52162 DXCH MPAC +5
044576,001166: 7357 30140 CA MATINC # INITIALIZE ADDRWD FOR NEXT DOT PRODUCT.
044577,001167: 7360 26116 ADS ADDRWD # FORMS HAS ADDRESS OF NEXT COLUMN(ROW).
044578,001168:
044579,001169: 7361 07156 TC DOTSUB
044580,001170: 7362 52123 DXCH VBUF # MORE GIVEN VECTOR BACK TO MPAC, SAVING Y
044581,001171: 7363 52155 DXCH MPAC # COMPONENT OF ANSWER IN VBUF +2.
044582,001172: 7364 52125 DXCH VBUF +2
044583,001173: 7365 52160 DXCH MPAC +3
044584,001174: 7366 52127 DXCH VBUF +4
044585,001175: 7367 52162 DXCH MPAC +5
044586,001176: 7370 30140 CA MATINC # FORM ADDRESS OF LAST COLUMN OR ROW.
044587,001177: 7371 26116 ADS ADDRWD
044588,001178:
044589,001179: 7372 07156 TC DOTSUB
044590,001180: 7373 52134 DXCH BUF2 # ANSWER NOW COMPLETE. PUT COMPONENTS INTO
044591,001181: 7374 52155 DXCH MPAC # PROPER MPAC REGISTERS.
044592,001182: 7375 52162 DXCH MPAC +5
044593,001183: 7376 52125 DXCH VBUF +2
044594,001184: 7377 52160 DXCH MPAC +3
044595,001185: 7400 16061 TCF DANZIG # EXIT.
044596,001186:
044597,001187: # Page 1040
044598,001188: # VXSC -- VECTOR TIMES SCALAR.
044599,001189:
044600,001190: 7401 10163 VXSC CCS MODE # TEST PRESENT MODE.
044601,001191: 7402 17430 TCF DVXSC # SEPARATE ROUTINE WHEN SCALAR IS IN MPAC.
044602,001192: 7403 17430 TCF DVXSC
044603,001193:
044604,001194: 7404 07107 VVXSC TC DMPSUB # COMPUTE X COMPONENT
044605,001195: 7405 07140 TC VROUND # AND ROUND IT.
044606,001196: 7406 52160 DXCH MPAC +3 # PUT Y COMPONENT INTO MPAC SAVING MPAC IN
044607,001197: 7407 52155 DXCH MPAC # MPAC +3.
044608,001198: 7410 52160 DXCH MPAC +3
044609,001199:
044610,001200: 7411 07107 TC DMPSUB # DO SAME FOR Y AND Z COMPONENTS.
044611,001201: 7412 07140 TC VROUND
044612,001202: 7413 52162 DXCH MPAC +5
044613,001203: 7414 52155 DXCH MPAC
044614,001204: 7415 52162 DXCH MPAC +5
044615,001205:
044616,001206: 7416 07107 TC DMPSUB
044617,001207: 7417 07140 TC VROUND
044618,001208: 7420 52155 VROTATEX DXCH MPAC # EXIT USED TO RESTORE MPAC AFTER THIS
044619,001209: 7421 52162 DXCH MPAC +5 # TYPE OF ROTATION. CALLED BY VECTOR SHIFT
044620,001210: 7422 52160 DXCH MPAC +3 # RIGHT, V/SC, ETC.
044621,001211: 7423 52155 DXCH MPAC
044622,001212: 7424 16061 TCF DANZIG
044623,001213:
044624,001214: # Page 1041
044625,001215: # DP VECTOR PROJECTION ROUTINE.
044626,001216:
044627,001217: 7425 07154 VPROJ TC PREDOT # (MPAC.X)MPAC IS COMPUTED AND LEFT IN
044628,001218: 7426 44751 CS FOUR # MPAC. DO DOT AND FALL INTO DVXSC.
044629,001219: 7427 26116 ADS ADDRWD
044630,001220:
044631,001221: # VXSC WHEN SCALAR ARRIVES IN MPAC AND VECTOR IS AT X.
044632,001222:
044633,001223: 7430 00006 DVXSC EXTEND # SAVE SCALAR IN MPAC +3 AND GET X
044634,001224: 7431 30155 DCA MPAC # COMPONENT OF ANSWER.
044635,001225: 7432 52160 DXCH MPAC +3
044636,001226: 7433 07107 TC DMPSUB
044637,001227: 7434 07140 TC VROUND
044638,001228:
044639,001229: 7435 34752 CAF TWO # ADVANCE ADDRWD TO Y COMPONENT OF X.
044640,001230: 7436 26116 ADS ADDRWD
044641,001231: 7437 00006 EXTEND
044642,001232: 7440 30160 DCA MPAC +3 # PUT SCALAR BACK INTO MPAC AND SAVE
044643,001233: 7441 52155 DXCH MPAC # X RESULT IN MPAC +5.
044644,001234: 7442 52162 DXCH MPAC +5
044645,001235: 7443 07107 TC DMPSUB
044646,001236: 7444 07140 TC VROUND
044647,001237:
044648,001238: 7445 34752 CAF TWO
044649,001239: 7446 26116 ADS ADDRWD # TO Z COMPONENT.
044650,001240: 7447 52160 DXCH MPAC +3 # BRING SCALAR BACK, PUTTING Y RESULT IN
044651,001241: 7450 52155 DXCH MPAC # THE PROPER PLACE.
044652,001242: 7451 52160 DXCH MPAC +3
044653,001243: 7452 07107 TC DMPSUB
044654,001244: 7453 07140 TC VROUND
044655,001245:
044656,001246: 7454 52155 DXCH MPAC # PUT Z COMPONENT IN PROPER PLACE, ALSO
044657,001247: 7455 52162 DXCH MPAC +5 # POSITIONING X.
044658,001248: 7456 52155 DXCH MPAC
044659,001249:
044660,001250: 7457 16521 TCF VMODE # MODE HAS CHANGED TO VECTOR.
044661,001251:
044662,001252: # Page 1042
044663,001253: # VECTOR CROSS PRODUCT ROUTINE CALCULATES (X M -X M ,X M -X M ,X M -X M ) WHERE M IS THE VECTOR IN
044664,001254: # 3 2 2 3 1 3 3 1 2 1 1 2
044665,001255: # MPAC AND X THE VECTOR AT THE GIVEN ADDRESS.
044666,001256:
044667,001257: 7460 00006 VXV EXTEND
044668,001258: 7461 30162 DCA MPAC +5 # FORM UP M3X1, LEAVING M1 IN VBUF.
044669,001259: 7462 52155 DXCH MPAC
044670,001260: 7463 52123 DXCH VBUF
044671,001261: 7464 07107 TC DMPSUB # BY X1.
044672,001262:
044673,001263: 7465 00006 EXTEND
044674,001264: 7466 40160 DCS MPAC +3 # CALCULATE -X1M2, SAVING X1M3 IN VBUF +2.
044675,001265: 7467 52155 DXCH MPAC
044676,001266: 7470 52125 DXCH VBUF +2
044677,001267: 7471 07107 TC DMPSUB
044678,001268:
044679,001269: 7472 34752 CAF TWO # ADVANCE ADDRWD TO X2.
044680,001270: 7473 26116 ADS ADDRWD
044681,001271: 7474 00006 EXTEND
044682,001272: 7475 40162 DCS MPAC +5 # PREPARE TO GET -X2M3, SAVING -X1M2 IN
044683,001273: 7476 52155 DXCH MPAC # MPAC +5.
044684,001274: 7477 52162 DXCH MPAC +5
044685,001275: 7500 07107 TC DMPSUB
044686,001276:
044687,001277: 7501 00006 EXTEND
044688,001278: 7502 30123 DCA VBUF # GET X2M1, SAVING -X2M3 IN VBUF +4.
044689,001279: 7503 52155 DXCH MPAC
044690,001280: 7504 52127 DXCH VBUF +4
044691,001281: 7505 07107 TC DMPSUB
044692,001282:
044693,001283: 7506 34752 CAF TWO # ADVANCE ADDRWD TO X3.
044694,001284: 7507 26116 ADS ADDRWD
044695,001285: 7510 00006 EXTEND
044696,001286: 7511 40123 DCS VBUF # GET -X3M1, ADDING X2M1 TO MPAC +5 TO
044697,001287: 7512 52155 DXCH MPAC # COMPLETE THE Z COMPONENT OF THE ANSWER.
044698,001288: 7513 20162 DAS MPAC +5
044699,001289:
044700,001290: 7514 00006 EXTEND
044701,001291: 7515 17517 BZF +2
044702,001292: 7516 07011 TC OVERFLWZ
044703,001293:
044704,001294: 7517 07107 TC DMPSUB
044705,001295: 7520 52125 DXCH VBUF +2 # MOVE X1M3 TO MPAC +3 SETTING UP FOR X3M2
044706,001296: 7521 52160 DXCH MPAC +3 # AND ADD -X3M1 TO MPAC +3 TO COMPLETE THE
044707,001297: 7522 52155 DXCH MPAC # Y COMPONENT OF THE RESULT.
044708,001298: 7523 20160 DAS MPAC +3
044709,001299:
044710,001300: 7524 00006 EXTEND
044711,001301: 7525 17527 BZF +2
044712,001302: # Page 1043
044713,001303: 7526 07014 TC OVERFLWY
044714,001304:
044715,001305: 7527 07107 TC DMPSUB
044716,001306: 7530 52127 DXCH VBUF +4 # GO ADD -X2M3 TO X3M2 TO COMPLETE THE X
044717,001307: 7531 17000 TCF ENDVXV # COMPONENT (TAIL END OF DAD).
044718,001308:
044719,001309: # THE MPACVBUF SUBROUTINE SAVES THE VECTOR IN MPAC IN VBUF WITHOUT CLOBBERING MPAC.
044720,001310:
044721,001311: 7532 00006 MPACVBUF EXTEND # CALLED BY MXV, VXM, AND UNIT.
044722,001312: 7533 30155 DCA MPAC
044723,001313: 7534 52123 DXCH VBUF
044724,001314: 7535 00006 EXTEND
044725,001315: 7536 30160 DCA MPAC +3
044726,001316: 7537 52125 DXCH VBUF +2
044727,001317: 7540 00006 EXTEND
044728,001318: 7541 30162 DCA MPAC +5
044729,001319: 7542 52127 DXCH VBUF +4
044730,001320: 7543 00002 TC Q # RETURN TO CALLER.
044731,001321:
044732,001322: # DOUBLE PRECISION SIGN AGREE ROUTINE. ARRIVE WITH INPUT IN A+L. OUTPUT IS IN A + L.
044733,001323:
044734,001324: 7544 10000 ALSIGNAG CCS A # TEST UPPER PART.
044735,001325: 7545 17551 TCF UPPOS # IT IS POSITIVE
044736,001326: 7546 00002 TC Q # ZERO
044737,001327: 7547 17561 TCF UPNEG # NEGATIVE
044738,001328: 7550 00002 TC Q # ZERO
044739,001329:
044740,001330: 7551 56001 UPPOS XCH L # SAVE DECREMENTED UPPER PART.
044741,001331: 7552 64736 AD HALF
044742,001332: 7553 64736 AD HALF
044743,001333: 7554 54000 TS A # SKIPS ON OVERFLOW
044744,001334: 7555 17557 TCF +2
044745,001335: 7556 24001 INCR L # RESTORE UPPER TO ORIGINAL VALUE
044746,001336: 7557 56001 XCH L # SWAP A + L BANCK.
044747,001337: 7560 00002 TC Q
044748,001338:
044749,001339: 7561 56001 UPNEG XCH L # SAVE COMPLEMENTED + DECREMENTED UPPER PT
044750,001340: 7562 64735 AD NEGMAX
044751,001341: 7563 67747 AD NEGONE
044752,001342: 7564 54000 TS A
044753,001343: 7565 17567 TCF +2 # DON'T INCREMENT IF NO OVERFLOW.
044754,001344: 7566 24001 INCR L
044755,001345: 7567 56001 XCH L
044756,001346: 7570 40000 COM # MAKE NEGATIVE AGAIN.
044757,001347: 7571 00002 TC Q
044758,001348:
044759,001349: # Page 1044
044760,001350: # INTERPRETIVE INSTRUCTIONS WHOSE EXECUTION CONSISTS OF PRINCIPALLY CALLING SUBROUTINES.
044761,001351:
044762,001352: 7572 07107 DMP1 TC DMPSUB # DMP INSTRUCTIONS
044763,001353: 7573 16061 TCF DANZIG
044764,001354:
044765,001355: 7574 07107 DMPR TC DMPSUB
044766,001356: 7575 07137 TC ROUNDSUB +1 # (C(A) = +0).
044767,001357: 7576 16061 TCF DANZIG
044768,001358:
044769,001359: 7577 00006 DDV EXTEND
044770,001360: 7600 50116 INDEX ADDRWD # MOVE DIVIDEND INTO BUF.
044771,001361: 7601 30001 DCA 0
044772,001362: 7602 17607 TCF BDDV +4
044773,001363:
044774,001364: 7603 00006 BDDV EXTEND # MOVE DIVISOR INTO MPAC SAVING MPAC, THE
044775,001365: 7604 50116 INDEX ADDRWD # DIVIDEND, IN BUF.
044776,001366: 7605 30001 DCA 0
044777,001367: 7606 52155 DXCH MPAC
044778,001368: 7607 52131 +4 DXCH BUF
044779,001369: 7610 34755 CAF ZERO # DIVIDE ROUTINES IN BANK 0.
044780,001370: 7611 54004 TS FBANK
044781,001371: 7612 12353 TCF DDV/BDDV
044782,001372:
044783,001373: 7613 30116 SETPD CA ADDRWD # MUST SET TO WORK AREA, OR EBANK TROUBLE.
044784,001374: 7614 54166 TS PUSHLOC
044785,001375: 7615 16063 TCF NOIBNKSW # NO FBANK SWITCH REQUIRED.
044786,001376:
044787,001377: 7616 34755 TSLC CAF ZERO # SHIFTING ROUTINES LOCATED IN BANK 00.
044788,001378: 7617 54004 TS FBANK
044789,001379: 7620 12172 TCF TSLC2
044790,001380:
044791,001381: 7621 36074 GSHIFT CAF LOW7 # USED AS MASK AT GENSHIFT. THIS PROCESSES
044792,001382: 7622 54004 TS FBANK # ANY SHIFT INSTRUCTION (EXCEPT TSLC) WITH
044793,001383: 7623 12214 TCF GENSHIFT # AN ADDRESS (ROUTINES IN BANK 0).
044794,001384:
044795,001385: # Page 1045
044796,001386: # THE FOLLOWING IS THE PROLOGUE TO V/SC. IF THE PRESENT MODE IS VECTOR, IT SAVES THE SCALAR AT X IN BUF
044797,001387: # AND CALLS THE V/SC ROUTINE IN BANK 0. IF THE PRESENT MODE IS SCALAR, IT MOVES THE VECTOR AT X INTO MPAC, SAVING
044798,001388: # THE SCALAR IN MPAC IN BUF BEFORE CALLING THE V/SC ROUTINE IN BANK 0.
044799,001389:
044800,001390: 7624 10163 V/SC CCS MODE
044801,001391: 7625 17636 TCF DV/SC # MOVE VECTOR INTO MPAC.
044802,001392: 7626 17636 TCF DV/SC
044803,001393:
044804,001394: 7627 00006 VV/SC EXTEND
044805,001395: 7630 50116 INDEX ADDRWD
044806,001396: 7631 30001 DCA 0
044807,001397: 7632 52131 V/SC1 DXCH BUF # IN BOTH CASES, VECTOR IS NOW IN MPAC AND
044808,001398: 7633 34755 CAF ZERO # SCALAR IN BUF.
044809,001399: 7634 54004 TS FBANK
044810,001400: 7635 12654 TCF V/SC2
044811,001401:
044812,001402: 7636 00006 DV/SC EXTEND
044813,001403: 7637 50116 INDEX ADDRWD
044814,001404: 7640 30003 DCA 2
044815,001405: 7641 52160 DXCH MPAC +3
044816,001406: 7642 00006 EXTEND
044817,001407: 7643 50116 INDEX ADDRWD
044818,001408: 7644 30005 DCA 4
044819,001409: 7645 52162 DXCH MPAC +5
044820,001410:
044821,001411: 7646 44753 CS ONE # CHANGE MODE TO VECTOR.
044822,001412: 7647 54163 TS MODE
044823,001413:
044824,001414: 7650 00006 EXTEND
044825,001415: 7651 50116 INDEX ADDRWD
044826,001416: 7652 30001 DCA 0
044827,001417: 7653 52155 DXCH MPAC
044828,001418: 7654 17632 TCF V/SC1 # FINISH PROLOGUE AT COMMON SECTION.
044829,001419:
044830,001420: # Page 1046
044831,001421: # SIGN AND COMPLEMENT INSTRUCTIONS.
044832,001422:
044833,001423: 7655 50116 SIGN INDEX ADDRWD # CALL COMP INSTRUCTION IF WORD AT X IS
044834,001424: 7656 10000 CCS 0 # NEGATIVE NON-ZERO.
044835,001425: 7657 16061 TCF DANZIG
044836,001426: 7660 17662 TCF +2
044837,001427: 7661 17670 TCF COMP # DO THE COMPLEMENT.
044838,001428:
044839,001429: 7662 50116 INDEX ADDRWD
044840,001430: 7663 10001 CCSL CCS 1
044841,001431: 7664 16061 TCF DANZIG
044842,001432: 7665 16061 TCF DANZIG
044843,001433: 7666 17670 TCF COMP
044844,001434: 7667 16061 TCF DANZIG
044845,001435: 7670 00006 COMP EXTEND # COMPLEMENT DP MPAC IN EVERY CASE.
044846,001436: 7671 40155 DCS MPAC
044847,001437: 7672 52155 DXCH MPAC
044848,001438:
044849,001439: 7673 10163 CCS MODE # EITHER COMPLEMENT MPAC +3 OR THE REST OF
044850,001440: 7674 17705 TCF DCOMP # THE VECTOR ACCUMULATOR.
044851,001441: 7675 17705 TCF DCOMP
044852,001442:
044853,001443: 7676 00006 EXTEND # VECTOR COMPLEMENT.
044854,001444: 7677 40160 DCS MPAC +3
044855,001445: 7700 52160 DXCH MPAC +3
044856,001446: 7701 00006 EXTEND
044857,001447: 7702 40162 DCS MPAC +5
044858,001448: 7703 52162 DXCH MPAC +5
044859,001449: 7704 16061 TCF DANZIG
044860,001450:
044861,001451: 7705 40156 DCOMP CS MPAC +2
044862,001452: 7706 54156 TS MPAC +2
044863,001453: 7707 16061 TCF DANZIG
044864,001454:
044865,001455: # Page 1047
044866,001456: # THE FOLLOWING SHORT SHIFT CODES REQUIRE NO ADDRESS WORD:
044867,001457: # 1. SR1 TO SR4 SCALAR SHIFT RIGHT.
044868,001458: # 2. SR1R TO SR4R SCALAR SHIFT RIGHT AND ROUND.
044869,001459: # 3. SL1 TO SL4 SCALAR SHIFT LEFT.
044870,001460: # 4. SL1R TO SL4R SCALAR SHIFT LEFT AND ROUND.
044871,001461: # 5. VSR1 TO VSR8 VECTOR SHIFT RIGHT (ALWAYS ROUNDS).
044872,001462: # 6. VSL1 TO VSL8 VECTOR SHIFT LEFT (NEVER ROUNDS).
044873,001463: # THE FOLLOWING CODES REQUIRE AND ADDRESS WHICH MAY BE INDEXED:*
044874,001464: # 1. SR SCALAR SHIFT RIGHT.
044875,001465: # 2. SRR SCALAR SHIFT RIGHT AND ROUND.
044876,001466: # 3. SL SCALAR SHIFT LEFT.
044877,001467: # 4. SLR SCALAR SHIFT LEFT AND ROUND.
044878,001468: # 5. VSR VECTOR SHIFT RIGHT.
044879,001469: # 6. VSL VECTOR SHIFT LEFT.
044880,001470: # * IF THE ADDRESS IS INDEXED, AND THE INDEX MODIFICATION RESULTS IN A NEGATIVE SHIFT COUNT, A SHIFT OF THE
044881,001471: # ABSOLUTE VALUE OF THE COUNT IS DONE IN THE OPPOSITE DIRECTION.
044882,001472:
044883,001473: 00,2017 BANK 00
044884,001474:
044885,001475: 00,2017 COUNT* $$/INTER
044886,001476: 00,2017 36242 SHORTT CAF SIX # SCALAR SHORT SHIFTS COME HERE. THE SHIFT
044887,001477: 00,2020 70020 MASK CYR # COUNT-1 IS NOW IN BITS 2-3 OF CYR. THE
044888,001478: 00,2021 54021 TS SR # ROUNDING BIT IS IN BIT1 AT THIS POINT.
044889,001479:
044890,001480: 00,2022 10020 CCS CYR # SEE IF RIGHT OR LEFT SHIFT DESIRED.
044891,001481: 00,2023 12101 TCF TSSL # SHIFT LEFT.
044892,001482:
044893,001483: 00,2024 00024 SRDDV DEC 20 B-14 # MPTEMP SETTING FOR SR BEFORE DDV.
044894,001484:
044895,001485: 00,2025 50021 TSSR INDEX SR # GET SHIFTING BIT.
044896,001486: 00,2026 34736 CAF BIT14
044897,001487: 00,2027 54135 TS MPTEMP
044898,001488:
044899,001489: 00,2030 10020 CCS CYR # SEE IF A ROUND IS DESIRED.
044900,001490: 00,2031 02050 RIGHTR TC MPACSRND # YES -- SHIFT RIGHT AND ROUND.
044901,001491: 00,2032 16060 TCF NEWMODE # SET MODE TO DP (C(A) = 0).
044902,001492: 00,2033 30135 MPACSHR CA MPTEMP # DO A TRIPLE PRECISION SHIFT RIGHT.
044903,001493: 00,2034 00006 EXTEND
044904,001494: 00,2035 70156 MP MPAC +2
044905,001495: 00,2036 54156 +3 TS MPAC +2 # (EXIT FROM SQRT AND ABVAL).
044906,001496: 00,2037 30135 CA MPTEMP
044907,001497: 00,2040 00006 EXTEND
044908,001498: 00,2041 70154 MP MPAC # SHIFT MAJOR PART INTO A,L AND PLACE IN
044909,001499: # Page 1048
044910,001500: 00,2042 52155 DXCH MPAC # MPAC,+1.
044911,001501: 00,2043 30135 CA MPTEMP
044912,001502: 00,2044 00006 EXTEND
044913,001503: 00,2045 70001 MP L # ORIGINAL C(MPAC +1).
044914,001504: 00,2046 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
044915,001505: 00,2047 16061 TCF DANZIG
044916,001506:
044917,001507: # MPAC SHIFT RIGHT AND ROUND SUBROUTINES
044918,001508:
044919,001509: 00,2050 30156 MPACSRND CA MPAC +2 # WE HAVE TO DO ALL THREE MULTIPLIES SINCE
044920,001510: 00,2051 00006 EXTEND # MPAC +1 AND MPAC +2 MIGHT HAVE SIGN
044921,001511: 00,2052 70135 MP MPTEMP # DISAGREEMENT WITH A SHIFT RIGHT OF L.
044922,001512: 00,2053 56155 XCH MPAC +1
044923,001513: 00,2054 00006 EXTEND
044924,001514: 00,2055 70135 MP MPTEMP
044925,001515: 00,2056 56155 XCH MPAC +1 # TRIAL MINOR PART.
044926,001516: 00,2057 60001 AD L
044927,001517:
044928,001518: 00,2060 60000 VSHR2 DOUBLE # (FINISH VECTOR COMPONENT SHIFT RIGHT
044929,001519: 00,2061 54156 TS MPAC +2 # AND ROUND.)
044930,001520: 00,2062 12064 TCF +2
044931,001521: 00,2063 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
044932,001522:
044933,001523: 00,2064 34755 CAF ZERO
044934,001524: 00,2065 54156 TS MPAC +2
044935,001525: 00,2066 56154 XCH MPAC # SETTING TO ZERO SO FOLLOWING DAS WORKS.
044936,001526: 00,2067 00006 EXTEND
044937,001527: 00,2070 70135 MP MPTEMP
044938,001528: 00,2071 20155 DAS MPAC # AGAIN NO OVERFLOW.
044939,001529: 00,2072 00002 TC Q
044940,001530:
044941,001531: 00,2073 30135 VSHRRND CA MPTEMP # ENTRY TO SHIFT RIGHT AND ROUND MPAC WHEN
044942,001532: 00,2074 00006 EXTEND # MPAC CONTAINS A VECTOR COMPONENT.
044943,001533: 00,2075 70155 MP MPAC +1
044944,001534: 00,2076 54155 TS MPAC +1
044945,001535: 00,2077 56001 XCH L
044946,001536: 00,2100 12060 TCF VSHR2 # GO ADD ONE IF NECESSARY AND FINISH.
044947,001537:
044948,001538: # Page 1049
044949,001539: # ROUTINE FOR SHORT SCALAR SHIFT LEFT (AND MAYBE ROUND).
044950,001540:
044951,001541: 00,2101 30021 TSSL CA SR # GET SHIFT COUNT FOR SR.
044952,001542: 00,2102 54135 +1 TS MPTEMP
044953,001543:
044954,001544: 00,2103 00006 +2 EXTEND # ENTRY HERE FROM SL FOR SCALARS.
044955,001545: 00,2104 30156 DCA MPAC +1 # SHIFTING LEFT ONE PLACE AT A TIME IS
044956,001546: 00,2105 20156 DAS MPAC +1 # FASTER THAN DOING THE WHOLE SHIFT WITH
044957,001547: 00,2106 60154 AD MPAC # MULTIPLIES ASSUMING THAT FREQUENCY OF
044958,001548: 00,2107 60154 AD MPAC # SHIFT COUNTS GOES DOWN RAPIDLY AS A
044959,001549: 00,2110 54154 TS MPAC # FUNCTION OF THEIR MAGNITUDE.
044960,001550: 00,2111 12113 TCF +2
044961,001551: 00,2112 54121 TS OVFIND # OVERFLOW. (LEAVES OVERFLOW-CORRECTED
044962,001552: # RESULT ANYWAY).
044963,001553: 00,2113 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNT.
044964,001554: 00,2114 12102 TCF TSSL +1
044965,001555:
044966,001556: 00,2115 10020 CCS CYR # SEE IF ROUND WANTED.
044967,001557: 00,2116 07136 ROUND TC ROUNDSUB # YES -- ROUND AND EXIT.
044968,001558: 00,2117 16061 TCF DANZIG # SL LEAVES A ZERO IN CYR FOR NO ROUND.
044969,001559: 00,2120 16061 TCF DANZIG # NO -- EXIT IMMEDIATELY
044970,001560:
044971,001561: # Page 1050
044972,001562: # VECTOR SHIFTING ROUTINES.
044973,001563:
044974,001564: 00,2121 34757 SHORTV CAF LOW3 # SAVE 3 BIT SHIFT COUNT -- 1 WITHOUT
044975,001565: 00,2122 70020 MASK CYR # EDITING CYR.
044976,001566: 00,2123 54135 TS MPTEMP
044977,001567: 00,2124 10020 CCS CYR # SEE IF LEFT OR RIGHT SHIFT.
044978,001568: 00,2125 12145 TCF VSSL # VECTOR SHIFT LEFT.
044979,001569: 00,2126 00176 OCT176 OCT 176 # USED IN PROCESSED SHIFTS WITH - COUNT.
044980,001570:
044981,001571: 00,2127 50135 VSSR INDEX MPTEMP # (ENTRY FROM SR). PICK UP SHIFTING BIT.
044982,001572: 00,2130 34736 CAF BIT14 # MPTEMP CONTAINS THE SHIFT COUNT - 1.
044983,001573: 00,2131 54135 TS MPTEMP
044984,001574: 00,2132 02073 TC VSHRRND # SHIFT X COMPONENT.
044985,001575:
044986,001576: 00,2133 52155 DXCH MPAC # SWAP X AND Y COMPONENTS.
044987,001577: 00,2134 52160 DXCH MPAC +3
044988,001578: 00,2135 52155 DXCH MPAC
044989,001579: 00,2136 02073 TC VSHRRND # SHIFT Y COMPONENT.
044990,001580:
044991,001581: 00,2137 52155 DXCH MPAC # SWAP Y AND Z COMPONENTS.
044992,001582: 00,2140 52162 DXCH MPAC +5
044993,001583: 00,2141 52155 DXCH MPAC
044994,001584: 00,2142 02073 TC VSHRRND # SHIFT Z COMPONENT.
044995,001585:
044996,001586: 00,2143 17420 TCF VROTATEX # RESTORE COMPONENTS TO PROPER PLACES.
044997,001587:
044998,001588: # Page 1051
044999,001589: # VECTOR SHIFT LEFT -- DONE ONE PLACE AT A TIME.
045000,001590:
045001,001591: 00,2144 54135 -1 TS MPTEMP # SHIFTING LOOP.
045002,001592:
045003,001593: 00,2145 00006 VSSL EXTEND
045004,001594: 00,2146 30155 DCA MPAC
045005,001595: 00,2147 20155 DAS MPAC
045006,001596: 00,2150 00006 EXTEND
045007,001597: 00,2151 12153 BZF +2
045008,001598: 00,2152 07017 TC OVERFLOW
045009,001599:
045010,001600: 00,2153 00006 EXTEND
045011,001601: 00,2154 30160 DCA MPAC +3
045012,001602: 00,2155 20160 DAS MPAC +3
045013,001603: 00,2156 00006 EXTEND
045014,001604: 00,2157 12161 BZF +2
045015,001605: 00,2160 07014 TC OVERFLWY
045016,001606:
045017,001607: 00,2161 00006 EXTEND
045018,001608: 00,2162 30162 DCA MPAC +5
045019,001609: 00,2163 20162 DAS MPAC +5
045020,001610: 00,2164 00006 EXTEND
045021,001611: 00,2165 12167 BZF +2
045022,001612: 00,2166 07011 TC OVERFLWZ
045023,001613:
045024,001614: 00,2167 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNTER.
045025,001615: 00,2170 12144 TCF VSSL -1
045026,001616: 00,2171 16061 TCF DANZIG # EXIT.
045027,001617:
045028,001618: # Page 1052
045029,001619: # TSLC -- TRIPLE SHIFT LEFT AND COUNT. SHIFTS MPAC LEFT UNTIL GREATER THAN .5 IN MAGNITUDE, LEAVING
045030,001620: # THE COMPLEMENT OF THE NUMBER OF SHIFTS REQUIRED IN X.
045031,001621:
045032,001622: 00,2172 54135 TSLC2 TS MPTEMP # START BY ZEROING SHIFT COUNT (IN A NOW).
045033,001623: 00,2173 06723 TC BRANCH # EXIT WITH NO SHIFTING IF ARGUMENT ZERO.
045034,001624: 00,2174 12176 TCF +2
045035,001625: 00,2175 12212 TCF ENDTSLC # STORES ZERO SHIFT COUNT IN THIS CASE.
045036,001626:
045037,001627: 00,2176 07257 TC TPAGREE # MAY CAUSE UPSHIFT OF ONE EXTRA PLACE.
045038,001628:
045039,001629: 00,2177 30154 CA MPAC # BEGIN NORMALIZATION LOOP.
045040,001630: 00,2200 12207 TCF TSLCTEST
045041,001631:
045042,001632: 00,2201 24135 TSLCLOOP INCR MPTEMP # INCREMENT SHIFT COUNTER.
045043,001633: 00,2202 00006 EXTEND
045044,001634: 00,2203 30156 DCA MPAC +1
045045,001635: 00,2204 20156 DAS MPAC +1
045046,001636: 00,2205 60154 AD MPAC
045047,001637: 00,2206 26154 ADS MPAC
045048,001638: 00,2207 60000 TSLCTEST DOUBLE # SEE IF (ANOTHER) SHIFT IS REQUIRED
045049,001639: 00,2210 54000 OVSK
045050,001640: 00,2211 12201 TCF TSLCLOOP # YES -- INCREMENT COUNT AND SHIFT AGAIN.
045051,001641:
045052,001642: 00,2212 40135 ENDTSLC CS MPTEMP
045053,001643: 00,2213 16623 TCF STORE1 # STORE SHIFT COUNT AND RETURN TO DANZIG.
045054,001644:
045055,001645: # Page 1053
045056,001646: # THE FOLLOWING ROUTINE PROCESSES THE GENERAL SHIFT INSTRUCTIONS SR, SRR, SL, AND SLR.
045057,001647: # THE GIVEN ADDRESS IS DECODED AS FOLLOWS:
045058,001648: # BITS 1-7 SHIFT COUNT (SUBADDRESS) LESS THAN 125 DECIMAL.
045059,001649: # BIT 8 PSEUDO SIGN BIT (DETECTS CHANGE IN SIGN IN INDEXED SHIFTS).
045060,001650: # BIT 9 0 FOR LEFT SHIFT, AND 1 FOR RIGHT SHIFT.
045061,001651: # BIT 10 1 FOR TERMINAL ROUND ON SCALAR SHIFTS, 0 OTHERWISE
045062,001652: # BITS 11-13 0.
045063,001653: # BIT 14 1.
045064,001654: # BIT 15 0.
045065,001655: # THE ABOVE ENCODING IS DONE BY THE YUL SYSTEM.
045066,001656:
045067,001657: 00,2214 70116 GENSHIFT MASK ADDRWD # GET SHIFT COUNT, TESTING FOR ZERO.
045068,001658: 00,2215 10000 CCS A # (ARRIVES WITH C(A) = LOW7).
045069,001659: 00,2216 12224 TCF GENSHFT2 # IF NON-ZERO, PROCEED WITH DECREMENTED CT
045070,001660:
045071,001661: 00,2217 34742 CAF BIT10 # ZERO SHIFT COUNT. NO SHIFTS NEEDED BUT
045072,001662: 00,2220 70116 MASK ADDRWD # WE MIGHT HAVE TO ROUND MPAC ON SLR AND
045073,001663: 00,2221 10000 CCS A # SRR (SCALAR ONLY).
045074,001664: 00,2222 07136 TC ROUNDSUB
045075,001665: 00,2223 16061 TCF DANZIG
045076,001666:
045077,001667: 00,2224 54135 GENSHFT2 TS MPTEMP # DECREMENTED SHIFT COUNT TO MPTEMP.
045078,001668: 00,2225 34744 CAF BIT8 # TEST MEANING OF LOW SEVEN BIT COUNT IN
045079,001669: 00,2226 00006 EXTEND # MPTEMP NOW.
045080,001670: 00,2227 70116 MP ADDRWD
045081,001671: 00,2230 76245 MASK LOW2 # JUMPS ON SHIFT DIRECTION (BIT8) AND
045082,001672: 00,2231 50000 INDEX A
045083,001673: 00,2232 12233 TCF +1 # ORIGINAL SHIFT DIRECTION (BIT 9)
045084,001674: 00,2233 12332 TCF RIGHT- # NEGATIVE SHIFT COUNT FOR SL OR SLR.
045085,001675: 00,2234 12342 TCF LEFT # SL OR SLR.
045086,001676: 00,2235 12336 TCF LEFT- # NEGATIVE SHIFT COUNT WITH SR OR SRR.
045087,001677:
045088,001678: # Page 1054
045089,001679: # GENERAL SHIFT RIGHT
045090,001680:
045091,001681: 00,2236 10163 RIGHT CCS MODE # SET IF VECTOR OR SCALAR.
045092,001682: 00,2237 12277 TCF GENSCR
045093,001683: 00,2240 12277 TCF GENSCR
045094,001684:
045095,001685: 00,2241 30135 CA MPTEMP # SEE IF SHIFT COUNT LESS THAN 14D.
045096,001686: 00,2242 63733 VRIGHT2 AD NEG12
045097,001687: 00,2243 00006 EXTEND
045098,001688: 00,2244 62127 BZMF VSSR # IF SO, BRANCH AND SHIFT IMMEDIATELY.
045099,001689:
045100,001690: 00,2245 67747 AD NEGONE # IF NOT, REDUCE MPTEMP BY A TOTAL OF 14.
045101,001691: 00,2246 54135 TS MPTEMP # AND DO A SHIFT RIGHT AND ROUND BY 14.
045102,001692: 00,2247 34755 CAF ZERO # THE ROUND AT THIS STAGE MAY INTRODUCE A
045103,001693: 00,2250 54001 TS L # ONE BIT ERROR IN A SHIFT RIGHT 15D.
045104,001694: 00,2251 56154 XCH MPAC
045105,001695: 00,2252 56155 XCH MPAC +1
045106,001696: 00,2253 02272 TC SETROUND # X COMPONENT NOW SHIFTED, SO MAKE UP THE
045107,001697: 00,2254 20155 DAS MPAC # ROUNDING QUANTITY (0 IN A AND 0 OR +-1
045108,001698: # IN L).
045109,001699: 00,2255 56157 XCH MPAC +3 # REPEAT THE ABOVE PROCESS FOR Y AND Z.
045110,001700: 00,2256 56160 XCH MPAC +4
045111,001701: 00,2257 02272 TC SETROUND
045112,001702: 00,2260 20160 DAS MPAC +3 # NO OVERFLOW ON THESE ADDS.
045113,001703:
045114,001704: 00,2261 56161 XCH MPAC +5
045115,001705: 00,2262 56162 XCH MPAC +6
045116,001706: 00,2263 02272 TC SETROUND
045117,001707: 00,2264 20162 DAS MPAC +5
045118,001708:
045119,001709: 00,2265 10135 CCS MPTEMP # SEE IF DONE, DOING FINAL DECREMENT.
045120,001710: 00,2266 54135 TS MPTEMP
045121,001711: 00,2267 12242 TCF VRIGHT2
045122,001712: 00,2270 04604 BIASLO DEC .2974 B-1 # SQRT CONSTANT
045123,001713:
045124,001714: 00,2271 16061 TCF DANZIG
045125,001715:
045126,001716: 00,2272 60000 SETROUND DOUBLE # MAKES UP ROUNDING QUANTITY FROM ARRIVING
045127,001717: 00,2273 54156 TS MPAC +2 # C(A). L IS ZERO INITIALLY.
045128,001718: 00,2274 34755 CAF ZERO
045129,001719: 00,2275 56001 XCH L
045130,001720: 00,2276 00002 TC Q # RETURN AND DO THE DAS, RESETTING L TO 0.
045131,001721:
045132,001722: # Page 1055
045133,001723: # PROCESS SR AND SRR FOR SCALARS.
045134,001724:
045135,001725: 00,2277 30135 GENSCR CA MPTEMP # SEE IF THE ORIGINAL SHIFT COUNT WAS LESS
045136,001726: 00,2300 63733 +1 AD NEG12 # THAN 14D.
045137,001727: 00,2301 00006 EXTEND
045138,001728: 00,2302 62322 BZMF DOSSHFT # DO THE SHIFT IMMEDIATELY IF SO.
045139,001729:
045140,001730: 00,2303 67747 +4 AD NEGONE # IF NOT, DECREMENT SHIFT COUNT BY 14D AND
045141,001731: 00,2304 54135 TS MPTEMP # SHIFT MPAC RIGHT 14 PLACES.
045142,001732: 00,2305 34755 CAF ZERO
045143,001733: 00,2306 56154 XCH MPAC
045144,001734: 00,2307 56155 XCH MPAC +1
045145,001735: 00,2310 54156 TS MPAC +2
045146,001736: 00,2311 10135 CCS MPTEMP # SEE IF FINISHED, DO FINAL DECREMENT.
045147,001737: 00,2312 54135 TS MPTEMP
045148,001738: 00,2313 02300 TC GENSCR +1
045149,001739: 00,2314 22650 SLOPEHI DEC .5884 # SQRT CONSTANT.
045150,001740: 00,2315 34742 CAF BIT10 # FINISHED WITH SHIFT. SEE IF ROUND
045151,001741: 00,2316 70116 MASK ADDRWD # WANTED.
045152,001742: 00,2317 10000 CCS A
045153,001743: 00,2320 07136 TC ROUNDSUB
045154,001744: 00,2321 16061 TCF DANZIG # DO SO AND/OR EXIT.
045155,001745:
045156,001746: 00,2322 50135 DOSSHFT INDEX MPTEMP # PICK UP SHIFTING BIT.
045157,001747: 00,2323 34736 CAF BIT14
045158,001748: 00,2324 54135 TS MPTEMP
045159,001749: 00,2325 34742 CAF BIT10 # SEE IF TERMINAL ROUND DESIRED.
045160,001750: 00,2326 70116 MASK ADDRWD
045161,001751: 00,2327 10000 CCS A
045162,001752: 00,2330 12031 TCF RIGHTR # YES.
045163,001753: 00,2331 12033 TCF MPACSHR # JUST SHIFT RIGHT.
045164,001754:
045165,001755: # Page 1056
045166,001756: # PROCESS THE RIGHT- (SL(R) WITH A NEGATIVE COUNT), LEFT-, AND LEFT OPTIONS.
045167,001757:
045168,001758: 00,2332 40135 RIGHT- CS MPTEMP # GET ABSOLUTE VALUE - 1 OF SHIFT COUNT
045169,001759: 00,2333 62126 AD OCT176 # UNDERSTANDING THAT BIT8 (PSEUDO-SIGN)
045170,001760: 00,2334 54135 TS MPTEMP # WAS 1 INITIALLY.
045171,001761: 00,2335 12236 TCF RIGHT # DO NORMAL SHIFT RIGHT.
045172,001762:
045173,001763: 00,2336 42126 LEFT- CS OCT176 # SAME PROLOGUE TO LEFT FOR INDEXED RIGHT
045174,001764: 00,2337 60135 AD MPTEMP # SHIFT WHOSE NET SHIFT COUNT IS NEGATIVE
045175,001765: 00,2340 40000 COM
045176,001766: 00,2341 54135 TS MPTEMP
045177,001767:
045178,001768: 00,2342 10163 LEFT CCS MODE # SINCE LEFT SHIFTING IS DONE ONE PLACE AT
045179,001769: 00,2343 12346 TCF GENSCL # A TIME, NO COMPARISON WITH 14 NEED BE
045180,001770: 00,2344 12346 TCF GENSCL # DONE. FOR SCALARS, SEE IF TERMINAL ROUND
045181,001771: 00,2345 12145 TCF VSSL # DESIRED. FOR VECTORS, SHIFT IMMEDIATELY.
045182,001772:
045183,001773: 00,2346 40116 GENSCL CS ADDRWD # PUT ROUNDING BIT (BIT 10 OF ADDRWD) INTO
045184,001774: 00,2347 00006 EXTEND # BIT 15 OF CYR WHERE THE ROUNDING BIT OF
045185,001775: 00,2350 74746 MP BIT6 # A SHORT SHIFT LEFT WOULD BE
045186,001776: 00,2351 54020 TS CYR
045187,001777: 00,2352 12103 TCF TSSL +2 # DO THE SHIFT.
045188,001778:
045189,001779: # Page 1057
045190,001780: # SCALAR DIVISION INSTRUCTIONS, DDV AND BDDV, ARE EXECUTED HERE. AT THIS POINT, THE DIVIDEND IS IN MPAC
045191,001781: # AND THE DIVISOR IS IN BUF.
045192,001782:
045193,001783: 00,2353 44753 DDV/BDDV CS ONE # INITIALIZATION
045194,001784: 00,2354 54136 TS DVSIGN # +-1 FOR POSITIVE QUOTIENT -- -0 FOR NEG.
045195,001785: 00,2355 54137 TS DVNORMCT # DIVIDENT NORMALIZATION COUNT.
045196,001786: 00,2356 54140 TS MAXDVSW # NEAR-ONE DIVIDE FLAG.
045197,001787:
045198,001788: 00,2357 10130 CCS BUF # FORCE BUF POSITIVE WITH THE MAJOR PART
045199,001789: 00,2360 12516 TCF BUFPOS # NON-ZERO.
045200,001790: 00,2361 12363 TCF +2
045201,001791: 00,2362 12531 TCF BUFNEG
045202,001792:
045203,001793: 00,2363 54156 BUFZERO TS MPAC +2 # ZERO THIS.
045204,001794: 00,2364 07257 TC TPAGREE # FORCE SIGN AGREEMENT BEFORE OVERFLOW
045205,001795:
045206,001796: 00,2365 10154 CCS MPAC # TEST TO SEE IF MPAC NON-ZERO. (TOO BIG)
045207,001797: 00,2366 12414 TCF OVF+ # MAJOR PART OF DIVIDEND IS POSITIVE NON-0
045208,001798: 00,2367 12371 TCF +2
045209,001799: 00,2370 12413 TCF OVF+ -1 # MAJOR PART OF DIVIDEND IS NEG. NON-ZERO
045210,001800:
045211,001801: 00,2371 56131 XCH BUF +1 # SHIFT DIVIDEND AND DIVISOR LEFT 14
045212,001802: 00,2372 56130 XCH BUF
045213,001803: 00,2373 56155 XCH MPAC +1
045214,001804: 00,2374 56154 XCH MPAC
045215,001805: 00,2375 10130 CCS BUF # TRY AGAIN ON FORMER MINOR PART.
045216,001806: 00,2376 12422 TCF BUF+
045217,001807: 00,2377 12401 TCF +2 # OVERFLOW ON ZERO DIVISOR.
045218,001808: 00,2400 12416 TCF BUF-
045219,001809:
045220,001810: 00,2401 40154 CS MPAC # SIGN OF MPAC DETERMINES SIGN OF RESULT.
045221,001811: 00,2402 00006 SGNDVOVF EXTEND
045222,001812: 00,2403 62405 BZMF +2
045223,001813: 00,2404 24136 INCR DVSIGN # NEGMAX IN MPAC PERHAPS.
045224,001814: 00,2405 34733 DVOVF CAF POSMAX # ON DIVISION OVERFLOW OF ANY SORT, SET
045225,001815: 00,2406 54154 TS MPAC # SET DP MPAC TO +-POSMAX.
045226,001816: 00,2407 02630 TC FINALDV +3
045227,001817: 00,2410 34753 CAF ONE # SET OVERFLOW INDICATOR AND EXIT.
045228,001818: 00,2411 54121 TS OVFIND
045229,001819: 00,2412 06061 TC DANZIG
045230,001820:
045231,001821: 00,2413 24136 -1 INCR DVSIGN
045232,001822: 00,2414 40131 OVF+ CS BUF +1 # LOAD LOWER ORDER PART OF DIVISOR.
045233,001823: 00,2415 12402 TCF SGNDVOVF # GET SIGN OF RESULT.
045234,001824:
045235,001825: 00,2416 00006 BUF- EXTEND # IF BUF IS NEGATIVE, COMPLEMENT IT AND
045236,001826: 00,2417 40131 DCS BUF # MAINTAIN DVSIGN FOR FINAL QUOTIENT SIGN.
045237,001827: 00,2420 52131 DXCH BUF
045238,001828: 00,2421 24136 INCR DVSIGN # NOW -0.
045239,001829:
045240,001830: # Page 1058
045241,001831: 00,2422 10154 BUF+ CCS MPAC # FORCE MPAC POSITIVE, CHECKING FOR ZERO
045242,001832: 00,2423 12437 TCF MPAC+ # DIVIDEND IN THE PROCESS.
045243,001833: 00,2424 12426 TCF +2
045244,001834: 00,2425 12433 TCF MPAC-
045245,001835: 00,2426 10155 CCS MPAC +1
045246,001836: 00,2427 12437 TCF MPAC+
045247,001837: 00,2430 16061 TCF DANZIG # EXIT IMMEDIATELY ON ZERO DIVIDEND.
045248,001838: 00,2431 12433 TCF MPAC-
045249,001839: 00,2432 16061 TCF DANZIG
045250,001840:
045251,001841: 00,2433 00006 MPAC- EXTEND # FORCE MPAC POSITIVE AS BUF IN BUF-.
045252,001842: 00,2434 40155 DCS MPAC
045253,001843: 00,2435 52155 DXCH MPAC
045254,001844: 00,2436 24136 INCR DVSIGN # NOW +1 OR -0.
045255,001845:
045256,001846: # Page 1059
045257,001847: 00,2437 40154 MPAC+ CS MPAC # CHECK FOR DIVISION OVERFLOW. IF THE
045258,001848: 00,2440 67747 AD NEGONE # MAJOR PART OF THE DIVIDEND IS LESS THAN
045259,001849: 00,2441 60130 AD BUF # THE MAJOR PART OF THE DIVISOR BY AT
045260,001850: 00,2442 10000 CCS A # LEAST TWO, WE CAN PROCEED IMMEDIATELY
045261,001851: 00,2443 12505 TCF DVNORM # WITHOUT NORMALIZATION PRODUCING A DVMAX.
045262,001852: 00,2444 60001 -1/2+2 OCT 60001 # USED IN SQRTSUB.
045263,001853:
045264,001854: 00,2445 12446 TCF +1 # IF THE ABOVE DOES NOT HOLD, FORCE SIGN
045265,001855: 00,2446 34736 CAF HALF # AGREEMENT IN NUMERATOR AND DENOMINATOR
045266,001856: 00,2447 60000 DOUBLE # TO FACILITATE OVERFLOW AND NEAR-ONE
045267,001857: 00,2450 60155 AD MPAC +1 # CHECKING.
045268,001858: 00,2451 54155 TS MPAC +1
045269,001859: 00,2452 34755 CAF ZERO
045270,001860: 00,2453 64733 AD POSMAX
045271,001861: 00,2454 26154 ADS MPAC
045272,001862:
045273,001863: 00,2455 34736 CAF HALF # SAME FOR BUF.
045274,001864: 00,2456 60000 DOUBLE
045275,001865: 00,2457 60131 AD BUF +1
045276,001866: 00,2460 54131 TS BUF +1
045277,001867: 00,2461 34755 CAF ZERO
045278,001868: 00,2462 64733 AD POSMAX
045279,001869: 00,2463 26130 ADS BUF
045280,001870:
045281,001871: 00,2464 40154 CS MPAC # CHECK MAGNITUDE OF SIGN-CORRECTED
045282,001872: 00,2465 60130 AD BUF # OPERANDS.
045283,001873: 00,2466 10000 CCS A
045284,001874: 00,2467 12505 TCF DVNORM # DIVIDE OK -- WILL NOT BECOME MAXOV CASE.
045285,001875: 00,2470 00133 LBUF2 ADRES BUF2
045286,001876: 00,2471 12405 TCF DVOVF # DIVISOR NOT LESS THAN DIVIDEND -- OVF.
045287,001877:
045288,001878: 00,2472 54140 TS MAXDVSW # IF THE MAJOR PARTS OF THE DIVIDEND AND
045289,001879: 00,2473 40155 CS MPAC +1 # DIVISOR ARE EQUAL, A SPECIAL APPROXIMA-
045290,001880: 00,2474 60131 AD BUF +1 # TION IS USED (PROVIDED THE DIVISION IS
045291,001881: 00,2475 00006 EXTEND # POSSIBLE, OF COURSE).
045292,001882: 00,2476 62405 BZMF DVOVF
045293,001883: 00,2477 12505 TCF DVNORM # IF NO OVERFLOW.
045294,001884:
045295,001885: # Page 1060
045296,001886: 00,2500 00006 BUFNORM EXTEND # ADD -1 TO AUGMENT SHIFT COUNT AND SHIFT
045297,001887: 00,2501 24137 AUG DVNORMCT # LEFT ONE PLACE.
045298,001888: 00,2502 00006 EXTEND
045299,001889: 00,2503 30131 DCA BUF
045300,001890: 00,2504 20131 DAS BUF
045301,001891:
045302,001892: 00,2505 30130 DVNORM CA BUF # SEE IF DIVISOR NORMALIZED YET.
045303,001893: 00,2506 60000 DOUBLE
045304,001894: 00,2507 54000 OVSK
045305,001895: 00,2510 12500 TCF BUFNORM # NO -- SHIFT LEFT ONE AND TRY AGAIN.
045306,001896:
045307,001897: 00,2511 52155 DXCH MPAC # CALL DIVIDEND NORMALIZATION SEQUENCE
045308,001898: 00,2512 50137 INDEX DVNORMCT # PRIOR TO DOING THE DIVIDE.
045309,001899: 00,2513 02565 TC MAXTEST
045310,001900:
045311,001901: 00,2514 54156 TS MPAC +2 # RETURNS WITH DIVISION DONE AND C(A) = 0.
045312,001902: 00,2515 16061 TCF DANZIG
045313,001903:
045314,001904: 00,2516 10000 BUFPOS CCS A
045315,001905: 00,2517 12422 TCF BUF+ # TO BUF+ IF BUF IS GREATER THAN +1.
045316,001906:
045317,001907: 00,2520 40131 CS BUF +1 # IF BUF IS +1, FORCING SIGN AGREEMENT
045318,001908: 00,2521 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO.
045319,001909: 00,2522 62422 BZMF BUF+ # BRANCH IF SIGNS AGREE.
045320,001910:
045321,001911: 00,2523 34736 CA HALF # SIGNS DISAGREE. FORCE AGREEMENT.
045322,001912: 00,2524 60000 +6 DOUBLE
045323,001913: 00,2525 26131 ADS BUF +1
045324,001914: 00,2526 34755 CA ZERO
045325,001915: 00,2527 54130 TS BUF
045326,001916: 00,2530 12363 TCF BUFZERO
045327,001917:
045328,001918: 00,2531 10000 BUFNEG CCS A
045329,001919: 00,2532 12416 TCF BUF- # TO BUF- IF BUF IS LESS THAN -1.
045330,001920:
045331,001921: 00,2533 30131 CA BUF +1 # IF BUF IS -1, FORCING SIGN AGREEMENT
045332,001922: 00,2534 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO.
045333,001923: 00,2535 62416 BZMF BUF- # BRANCH IF SIGNS AGREE.
045334,001924:
045335,001925: 00,2536 44736 CS HALF # SIGNS DISAGREE. FORCE AGREEMENT.
045336,001926: 00,2537 12524 TCF BUFPOS +6
045337,001927:
045338,001928: # Page 1061
045339,001929: # THE FOLLOWING ARE PROLOGUES TO SHIFT THE DIVIDEND ARRIVING IN A AND L BEFORE THE DIVIDE.
045340,001930:
045341,001931: 00,2540 22021 -21D LXCH SR # SPECIAL PROLOGUE FOR UNIT WHEN THE
045342,001932: 00,2541 00006 EXTEND # LENGTH OF THE ARGUMENT WAS NOT LESS THAN
045343,001933: 00,2542 74736 MP HALF # .5. IN THIS CASE, EACH COMPONENT MUST BE
045344,001934: 00,2543 56001 XCH L # SHIFTED RIGHT ONE TO PRODUCE A HALF-UNIT
045345,001935: 00,2544 60021 AD SR # VECTOR.
045346,001936: 00,2545 56001 XCH L
045347,001937: 00,2546 12571 TCF GENDDV +1 # WITH DP DIVIDEND IN A,L.
045348,001938:
045349,001939: 00,2547 20001 DDOUBL # PROLOGUE WHICH NORMALIZES THE DIVIDEND
045350,001940: 00,2550 20001 DDOUBL # WHEN IT IS KNOWN THAT NO DIVISION
045351,001941: 00,2551 20001 DDOUBL # OVEFLOW WILL OCCUR.
045352,001942: 00,2552 20001 DDOUBL
045353,001943: 00,2553 20001 DDOUBL
045354,001944: 00,2554 20001 DDOUBL
045355,001945: 00,2555 20001 DDOUBL
045356,001946: 00,2556 20001 DDOUBL
045357,001947: 00,2557 20001 DDOUBL
045358,001948: 00,2560 20001 DDOUBL
045359,001949: 00,2561 20001 DDOUBL
045360,001950: 00,2562 20001 DDOUBL
045361,001951: 00,2563 20001 DDOUBL
045362,001952: 00,2564 52155 DXCH MPAC
045363,001953:
045364,001954: 00,2565 10140 MAXTEST CCS MAXDVSW # 0 IF MAJORS MIGHT BE =, -1 OTHERWISE.
045365,001955: 00,2566 06552 BIASHI DEC .4192 B-1 # SQRT CONSTANTS.
045366,001956:
045367,001957: 00,2567 12642 TCF MAXDV # CHECK TO SEE IF THAY ARE NOW EQUAL.
045368,001958:
045369,001959: # Page 1062
045370,001960: # THE FOLLOWING IS A GENERAL PURPOSE DOUBLE PRECISION DIVISION ROUTINE. IT DIVIDES MPAC BY BUF AND LEAVES
045371,001961: # THE RESULT IN MPAC. THE FOLLOWING CONDITIONS MUST BE SATISFIED:
045372,001962:
045373,001963: # 1. THE DIVISOR (BUF) MUST BE POSITIVE AND NOT LESS THAN .5.
045374,001964:
045375,001965: # 2. THE DIVIDEND (MPAC) MUST BE POSITIVE WITH THE MAJOR PART OF MPAC STRICTLY LESS THAN THAT OF BUF
045376,001966: # (A SPECIAL APPROXIMATION, MAXDV, IS USED WHEN THE MAJOR PARTS ARE EQUAL).
045377,001967:
045378,001968: # UNDERSTANDING THAT A/B = Q + S(R/B) WHERE S = 2(-14) AND Q AND R ARE QUOTIENT AND REMAINDER, RESPEC-
045379,001969: # TIVELY, THE FOLLOWING APPROXIMATION IS OBTAINED BY MULTIPLYING ABOVE AND BELOW BY C - SD AND NEGLECTING TERMS OF
045380,001970: # ORDER S-SQUARED (POSSIBLY INTRODUCING ERROR INTO THE LOW TWO BITS OF THE RESULT). SIGN AGREEMENT IS UNNECESSARY.
045381,001971:
045382,001972: # A + SB . (R - QD) A + SB
045383,001973: # ------ = Q + S(------) WHERE Q AND R ARE QUOTIENT AND REMAINDER OF ------ RESPECTIVELY.
045384,001974: # C + SD ( C } C
045385,001975:
045386,001976: 00,2570 52155 GENDDV DXCH MPAC # WE NEED A AND B ONLY FOR FIRST DV.
045387,001977: 00,2571 00006 +1 EXTEND # (SPECIAL UNIT PROLOGUE ENTERS HERE).
045388,001978: 00,2572 10130 DV BUF # A NOW CONTAINS Q AND L, R.
045389,001979: 00,2573 52155 DXCH MPAC
045390,001980:
045391,001981: 00,2574 40154 CS MPAC # FORM DIVIDEND FOR MINOR PART OF RESULT.
045392,001982: 00,2575 00006 EXTEND
045393,001983: 00,2576 70131 MP BUF +1
045394,001984: 00,2577 60155 AD MPAC +1 # OVERFLOW AT THIS POINT IS POSITIVE SINCE
045395,001985: 00,2600 54000 OVSK # R IS POSITIVE IN EVERY CASE.
045396,001986: 00,2601 12606 TCF +5
045397,001987:
045398,001988: 00,2602 00006 EXTEND # OVERFLOW CAN BE REMOVED BY SUBTRACTING C
045399,001989: 00,2603 60130 SU BUF # (BUF) ONCE SINCE R IS ALWAYS LESS THAN C
045400,001990: 00,2604 24154 INCR MPAC # IN THIS CASE. INCR COMPENSATES SUBTRACT.
045401,001991: 00,2605 12610 TCF +DOWN # (SINCE C(A) IS STILL POSITIVE).
045402,001992:
045403,001993: 00,2606 00006 +5 EXTEND # C(A) CAN BE MADE LESS THAN C IN MAGNI-
045404,001994: 00,2607 62620 BZMF -UP # TUDE BY DIMINISHING IT BY C (SINCE C IS
045405,001995: # NOT LESS THAN .5) UNLESS C(A) = 0.
045406,001996:
045407,001997: # Page 1063
045408,001998: 00,2610 00006 +DOWN EXTEND
045409,001999: 00,2611 60130 SU BUF # IF POSITIVE, REDUCE ONLY IF NECESSARY
045410,002000: 00,2612 00006 EXTEND # SINCE THE COMPENSATING INCR MIGHT CAUSE
045411,002001: 00,2613 12616 BZF +3 # OVERFLOW.
045412,002002: 00,2614 00006 EXTEND # DON'T SUBTRACT UNLESS RESULT IS POSITIVE
045413,002003: 00,2615 62624 BZMF ENDMAXDV # OR ZERO.
045414,002004:
045415,002005: 00,2616 24154 +3 INCR MPAC # KEEP SUBTRACT HERE AND COMPENSATE.
045416,002006: 00,2617 12625 TCF FINALDV
045417,002007:
045418,002008: 00,2620 00006 -UP EXTEND # IF ZERO, SET MINOR PART OF RESULT TO
045419,002009: 00,2621 12630 BZF FINALDV +3 # ZERO.
045420,002010:
045421,002011: 00,2622 00006 EXTEND # IF NEGATIVE, ADD C TO A, SUBTRACTING ONE
045422,002012: 00,2623 26154 DIM MPAC # TO COMPENSATE. DIM IS OK HERE SINCE THE
045423,002013: 00,2624 60130 ENDMAXDV AD BUF # MAJOR PART NEVER GOES NEGATIVE.
045424,002014:
045425,002015: # Page 1064
045426,002016: 00,2625 22007 FINALDV ZL # DO DV TO OBTAIN MINOR PART OF RESULT.
045427,002017: 00,2626 00006 EXTEND
045428,002018: 00,2627 10130 DV BUF
045429,002019: 00,2630 54155 +3 TS MPAC +1
045430,002020:
045431,002021: 00,2631 10136 CCS DVSIGN # LEAVE RESULT POSITIVE UNLESS C(DVSIGN)=
045432,002022: 00,2632 00002 TC Q # -0.
045433,002023: 00,2633 00002 TC Q
045434,002024: 00,2634 00002 TC Q
045435,002025:
045436,002026: 00,2635 00006 EXTEND
045437,002027: 00,2636 40155 DCS MPAC
045438,002028: 00,2637 52155 DXCH MPAC
045439,002029: 00,2640 34755 CAF ZERO # SO WE ALWAYS RETURN WITH C(A) = 0.
045440,002030: 00,2641 00002 TC Q
045441,002031:
045442,002032: # Page 1065
045443,002033: # IF THE MAJOR PARTS OF THE DIVISOR AND DIVIDEND ARE EQUAL, BUT THE MINOR PARTS ARE SUCH THAT THE
045444,002034: # DIVIDEND IS STRICTLY LESS THAN THE DIVISOR IN MAGNITUDE, THE FOLLOWING APPROXIMATION IS USED. THE ASSUMPTIONS
045445,002035: # ARE THE SAME AS THE GENERAL ROUTINE WITH THE ADDITION THAT SIGN AGREEMENT IS NECESSARY (B, C, & D POSITIVE).
045446,002036:
045447,002037: # C + SB . (C + B - D)
045448,002038: # ------ = 37777 + S(---------)
045449,002039: # C + SD ( C )
045450,002040:
045451,002041: # THE DIVISION MAY BE PERFORMED IMMEDIATELY SINCE B IS STRICTLY LESS THAN D AND C IS NOT LESS THAN .5.
045452,002042:
045453,002043: 00,2642 40154 MAXDV CS MPAC # SEE IF MAXDV CASE STILL HOLDS AFTER
045454,002044: 00,2643 60130 AD BUF # NORMALIZATION.
045455,002045: 00,2644 00006 EXTEND
045456,002046: 00,2645 12647 BZF +2
045457,002047: 00,2646 12570 TCF GENDDV # MPAC NOW LESS THAN BUFF -- DIVIDE AS USUAL.
045458,002048:
045459,002049: 00,2647 34733 +2 CAF POSMAX # SET MAJOR PART OF RESULT.
045460,002050: 00,2650 54154 TS MPAC
045461,002051:
045462,002052: 00,2651 40131 CS BUF +1 # FORM DIVIDEND OF MINOR PART OF RESULT.
045463,002053: 00,2652 60155 AD MPAC +1
045464,002054: 00,2653 12624 TCF ENDMAXDV # GO ADD C AND DO DIVIDE, ATTACHING SIGN
045465,002055: # BEFORE EXITING.
045466,002056:
045467,002057: # Page 1066
045468,002058: # VECTOR DIVIDED BY SCALAR, V/SC, IS EXECUTED HERE. THE VECTOR IS NOW IN MPAC WITH SCALAR IN BUF.
045469,002059:
045470,002060: 00,2654 44753 V/SC2 CS ONE # INITIALIZE DIVIDEND NORMALIZATION COUNT
045471,002061: 00,2655 54137 TS DVNORMCT # AND DIVISION SIGN REGISTER.
045472,002062: 00,2656 54127 TS VBUF +5
045473,002063:
045474,002064: 00,2657 03010 TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR
045475,002065:
045476,002066: 00,2660 52131 DXCH BUF
045477,002067: 00,2661 07544 TC ALSIGNAG # SIGN AGREE BUF
045478,002068: 00,2662 52131 DXCH BUF
045479,002069: 00,2663 10130 CCS BUF # FORCE DIVISOR POSITIVE WITH MAJOR PART
045480,002070: 00,2664 12721 TCF /BUF+ # NON-ZERO (IF POSSIBLE).
045481,002071: 00,2665 12667 TCF +2
045482,002072: 00,2666 12715 TCF /BUF-
045483,002073:
045484,002074: 00,2667 56131 XCH BUF +1 # SHIFT VECTOR AND SCALAR LEFT 14.
045485,002075: 00,2670 56130 XCH BUF
045486,002076: 00,2671 56155 XCH MPAC +1
045487,002077: 00,2672 56154 XCH MPAC
045488,002078: 00,2673 00006 EXTEND # CHECK FOR OVERFLOW IN EACH CASE.
045489,002079: 00,2674 12676 BZF +2
045490,002080: 00,2675 12405 TCF DVOVF
045491,002081:
045492,002082: 00,2676 56160 XCH MPAC +4
045493,002083: 00,2677 56157 XCH MPAC +3
045494,002084: 00,2700 00006 EXTEND
045495,002085: 00,2701 12703 BZF +2
045496,002086: 00,2702 12405 TCF DVOVF
045497,002087:
045498,002088: 00,2703 56162 XCH MPAC +6
045499,002089: 00,2704 56161 XCH MPAC +5
045500,002090: 00,2705 00006 EXTEND
045501,002091: 00,2706 12710 BZF +2
045502,002092: 00,2707 12405 TCF DVOVF
045503,002093:
045504,002094: 00,2710 10130 CCS BUF
045505,002095: 00,2711 12721 TCF /BUF+
045506,002096: 00,2712 12405 TCF DVOVF # ZERO DIVISOR - OVERFLOW.
045507,002097: 00,2713 12715 TCF /BUF-
045508,002098: 00,2714 12405 TCF DVOVF
045509,002099:
045510,002100: 00,2715 00006 /BUF- EXTEND # ON NEGATIVE, COMPLEMENT BUF AND MAINTAIN
045511,002101: 00,2716 40131 DCS BUF # DVSIGN IN VBUF +5.
045512,002102: 00,2717 52131 DXCH BUF
045513,002103: 00,2720 24127 INCR VBUF +5
045514,002104:
045515,002105: # Page 1067
045516,002106: 00,2721 00006 /BUF+ EXTEND
045517,002107: 00,2722 30131 DCA BUF # LEAVE ABS(ORIG DIVISOR) IN BUF2
045518,002108: 00,2723 52134 DXCH BUF2 # FOR OVERFLOW TESTING
045519,002109: 00,2724 12732 TCF /NORM # NORMALIZE DIVISOR IN BUF.
045520,002110:
045521,002111: 00,2725 00006 /NORM2 EXTEND # IF LESS THAN .5, AUGMENT DVNORMCT AND
045522,002112: 00,2726 24137 AUG DVNORMCT # DOUBLE DIVISOR.
045523,002113: 00,2727 00006 EXTEND
045524,002114: 00,2730 30131 DCA BUF
045525,002115: 00,2731 20131 DAS BUF
045526,002116:
045527,002117: 00,2732 30130 /NORM CA BUF # SEE IF DIVISOR NORMALIZED.
045528,002118: 00,2733 60000 DOUBLE
045529,002119: 00,2734 54000 OVSK
045530,002120: 00,2735 12725 TCF /NORM2 # DOUBLE AND TRY AGAIN IF NOT.
045531,002121:
045532,002122: 00,2736 02750 TC V/SCDV # DO X COMPONENT DIVIDE.
045533,002123: 00,2737 52160 DXCH MPAC +3 # SUPPLY ARGUMENTS IN USUAL SEQUENCE.
045534,002124: 00,2740 52155 DXCH MPAC
045535,002125: 00,2741 52160 DXCH MPAC +3
045536,002126:
045537,002127: 00,2742 02750 TC V/SCDV # Y COMPONENT.
045538,002128: 00,2743 52162 DXCH MPAC +5
045539,002129: 00,2744 52155 DXCH MPAC
045540,002130: 00,2745 52162 DXCH MPAC +5
045541,002131:
045542,002132: 00,2746 02750 TC V/SCDV # Z COMPONENT.
045543,002133: 00,2747 17420 TCF VROTATEX # GO RE-ARRANGE COMPONENTS BEFORE EXIT.
045544,002134:
045545,002135: # Page 1068
045546,002136: # SUBROUTINE USED BY V/SC TO DIVIDE VECTOR COMPONENT IN MPAC,+1 BY THE SCALAR GIVEN IN BUF.
045547,002137:
045548,002138: 00,2750 30127 V/SCDV CA VBUF +5 # REFLECTS SIGN OF SCALAR.
045549,002139: 00,2751 54136 TS DVSIGN
045550,002140:
045551,002141: 00,2752 10154 CCS MPAC # FORCE MPAC POSITIVE, EXITING ON ZERO.
045552,002142: 00,2753 12767 TCF /MPAC+
045553,002143: 00,2754 12756 TCF +2
045554,002144: 00,2755 12763 TCF /MPAC-
045555,002145:
045556,002146: 00,2756 10155 CCS MPAC +1
045557,002147: 00,2757 12767 TCF /MPAC+
045558,002148: 00,2760 00002 TC Q
045559,002149: 00,2761 12763 TCF /MPAC-
045560,002150: 00,2762 00002 TC Q
045561,002151:
045562,002152: 00,2763 00006 /MPAC- EXTEND # USUAL COMPLEMENTING AND SETTING OF SIGN.
045563,002153: 00,2764 40155 DCS MPAC
045564,002154: 00,2765 52155 DXCH MPAC
045565,002155: 00,2766 24136 INCR DVSIGN
045566,002156:
045567,002157: 00,2767 44753 /MPAC+ CS ONE # INITIALIZE NEAR-ONE SWITCH.
045568,002158: 00,2770 54140 TS MAXDVSW
045569,002159:
045570,002160: 00,2771 40154 CS MPAC # CHECK POSSIBLE OVERFLOW.
045571,002161: 00,2772 60133 AD BUF2 # UNNORMALIZED INPUT DIVISOR.
045572,002162: 00,2773 10000 CCS A
045573,002163: 00,2774 13004 TCF DDVCALL # NOT NEAR-ONE
045574,002164: 00,2775 12777 TCF +2 # +0 IS JUST POSSIBLE
045575,002165: 00,2776 12405 TCF DVOVF # NO HOPE
045576,002166: 00,2777 54140 TS MAXDVSW # SIGNAL POSSIBLE NEAR-ONE CASE
045577,002167: 00,3000 40155 CS MPAC +1 # SEE IF DIVISION CAN BE DONE
045578,002168: 00,3001 60134 AD BUF2 +1
045579,002169: 00,3002 00006 EXTEND
045580,002170: 00,3003 62405 BZMF DVOVF
045581,002171:
045582,002172: 00,3004 52155 DDVCALL DXCH MPAC # CALL PRE-DIVIDE NORMALIZATION.
045583,002173: 00,3005 50137 INDEX DVNORMCT
045584,002174: 00,3006 12565 TCF MAXTEST
045585,002175:
045586,002176: # Page 1069
045587,002177: 00,3007 32506 SLOPELO DEC .8324
045588,002178:
045589,002179: 00,3010 56002 VECAGREE XCH Q # SAVE Q IN A
045590,002180: 00,3011 52155 DXCH MPAC
045591,002181: 00,3012 07544 TC ALSIGNAG # SIGNAGREE MPAC
045592,002182: 00,3013 52155 DXCH MPAC
045593,002183: 00,3014 52160 DXCH MPAC +3
045594,002184: 00,3015 07544 TC ALSIGNAG # SIGN AGREE MPAC +3
045595,002185: 00,3016 52160 DXCH MPAC +3
045596,002186: 00,3017 52162 DXCH MPAC +5
045597,002187: 00,3020 07544 TC ALSIGNAG # SIGNAGREE MPAC +5
045598,002188: 00,3021 52162 DXCH MPAC +5
045599,002189: 00,3022 00000 TC A
045600,002190:
045601,002191: # Page 1070
045602,002192: # THE FOLLOWING ROUTINE EXECUTES THE UNIT INSTRUCTION, WHICH TAKES THE UNIT OF THE VECTOR IN MPAC.
045603,002193:
045604,002194: 00,3023 03010 UNIT TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR
045605,002195: 00,3024 07532 TC MPACVBUF # SAVE ARGUMENT IN VBUF
045606,002196: 00,3025 34755 CAF ZERO # MUST SENSE OVERFLOW IN FOLLOWING DOT.
045607,002197: 00,3026 56121 XCH OVFIND
045608,002198: 00,3027 54141 TS TEM1
045609,002199: 00,3030 03317 TC VSQSUB # DOT MPAC WITH ITSELF.
045610,002200: 00,3031 30141 CA TEM1
045611,002201: 00,3032 56121 XCH OVFIND
045612,002202: 00,3033 00006 EXTEND
045613,002203: 00,3034 13036 BZF +2
045614,002204: 00,3035 12405 TCF DVOVF
045615,002205: 00,3036 00006 EXTEND
045616,002206: 00,3037 30155 DCA MPAC # LEAVE THE SQUARE OF THE LENGTH OF THE
045617,002207: 00,3040 50120 INDEX FIXLOC # ARGUMENT IN LVSQUARE.
045618,002208: 00,3041 52043 DXCH LVSQUARE
045619,002209:
045620,002210: 00,3042 03343 TC SQRTSUB # GO TAKE THE NORMALIZED SQUARE ROOT.
045621,002211:
045622,002212: 00,3043 10154 CCS MPAC # CHECK FOR UNIT OVERFLOW.
045623,002213: 00,3044 13051 TCF +5 # MPAC IS NOT LESS THAN .5 UNLESS
045624,002214: 00,3045 54001 TS L
045625,002215: 00,3046 50120 INDEX FIXLOC
045626,002216: 00,3047 52045 DXCH LV
045627,002217: 00,3050 12405 TCF DVOVF # INPUT TO SQRTSUB WAS 0.
045628,002218:
045629,002219: 00,3051 44317 CS FOURTEEN # SEE IF THE INPUT WAS SO SMALL THAT THE
045630,002220: 00,3052 60135 AD MPTEMP # FIRST TWO REGISTERS OF THE SQUARE WERE 0
045631,002221: 00,3053 10000 CCS A
045632,002222: 00,3054 40000 COM # IF SO, SAVE THE NEGATIVE OF THE SHIFT
045633,002223: 00,3055 13133 TCF SMALL # COUNT -15D.
045634,002224:
045635,002225: 00,3056 13065 TCF LARGE # (THIS IS USUALLY THE CASE.)
045636,002226:
045637,002227: 00,3057 44761 CS THIRTEEN # IF THE SHIFT COUNT WAS EXACTLY 14, SET
045638,002228: 00,3060 54135 TS MPTEMP # THE PRE-DIVIDE NORM COUNT TO -13D.
045639,002229:
045640,002230: 00,3061 30154 CA MPAC # SHIFT THE LENGTH RIGHT 14 BEFORE STORING
045641,002231: 00,3062 54001 SMALL2 TS L # (SMALL EXITS TO THIS POINT).
045642,002232: 00,3063 34755 CAF ZERO
045643,002233: 00,3064 13112 TCF LARGE2 # GO TO STORE LENGTH AND PROCEED.
045644,002234:
045645,002235: 00,3065 10135 LARGE CCS MPTEMP # MOST ALL CASES COME HERE.
045646,002236: 00,3066 13074 TCF LARGE3 # SEE IF NO NORMALIZATION WAS REQUIRED BY
045647,002237:
045648,002238: 00,3067 42024 CS SRDDV # SQRT, AND IF SO, SET UP FOR A SHIFT
045649,002239: 00,3070 54135 TS MPTEMP # RIGHT 1 BEFORE DIVIDING TO PRODUCE
045650,002240: 00,3071 00006 EXTEND # THE DESIRED HALF UNIT VECTOR.
045651,002241: 00,3072 30155 DCA MPAC
045652,002242: # Page 1071
045653,002243: 00,3073 13112 TCF LARGE2
045654,002244:
045655,002245: # Page 1072
045656,002246: 00,3074 40000 LARGE3 COM # LEAVE NEGATIVE OF SHIFT COUNT-1 FOR
045657,002247: 00,3075 54135 TS MPTEMP # PREDIVIDE LEFT SHIFT.
045658,002248:
045659,002249: 00,3076 40000 COM # PICK UP REQUIRED SHIFTING BIT TO UNNORM-
045660,002250: 00,3077 50000 INDEX A # ALIZE THE SQRT RESULT.
045661,002251: 00,3100 34736 CAF BIT14
045662,002252: 00,3101 54130 TS BUF
045663,002253: 00,3102 00006 EXTEND
045664,002254: 00,3103 70155 MP MPAC +1
045665,002255: 00,3104 56130 XCH BUF
045666,002256: 00,3105 00006 EXTEND # (UNNORMALIZE THE SQRT FOR LV).
045667,002257: 00,3106 70154 MP MPAC
045668,002258: 00,3107 56001 XCH L
045669,002259: 00,3110 60130 AD BUF
045670,002260: 00,3111 56001 XCH L
045671,002261:
045672,002262: 00,3112 50120 LARGE2 INDEX FIXLOC
045673,002263: 00,3113 52045 DXCH LV # LENGTH NOW STORED IN WORK AREA.
045674,002264:
045675,002265: 00,3114 44753 CS ONE
045676,002266: 00,3115 54140 TS MAXDVSW # NO MAXDV CASES IN UNIT.
045677,002267:
045678,002268: 00,3116 52123 DXCH VBUF # PREPARE X COMPONENT FOR DIVIDE, SETTING
045679,002269: 00,3117 52155 DXCH MPAC # LENGTH OF VECTOR AS DIVISOR IN BUF.
045680,002270: 00,3120 52131 DXCH BUF
045681,002271: 00,3121 03151 TC UNITDV
045682,002272:
045683,002273: 00,3122 52125 DXCH VBUF +2 # DO Y AND Z IN USUAL FASHION SO WE CAN
045684,002274: 00,3123 52155 DXCH MPAC # EXIT THROUGH VROTATEX.
045685,002275: 00,3124 52160 DXCH MPAC +3
045686,002276: 00,3125 03151 TC UNITDV
045687,002277:
045688,002278: 00,3126 52127 DXCH VBUF +4
045689,002279: 00,3127 52155 DXCH MPAC
045690,002280: 00,3130 52162 DXCH MPAC +5
045691,002281: 00,3131 03151 TC UNITDV
045692,002282: 00,3132 17420 TCF VROTATEX # AND EXIT.
045693,002283:
045694,002284: # Page 1073
045695,002285: # IF THE LENGTH OF THE ARGUMENT VECTOR WAS LESS THAN 2(-28), EACH COMPONENT MUST BE SHIFTED LEFT AT LEAST
045696,002286: # 14 PLACES BEFORE THE DIVIDE. NOTE THAT IN THIS CASE, THE MAJOR PART OF EACH COMPONENT IS ZERO.
045697,002287:
045698,002288: 00,3133 54135 SMALL TS MPTEMP # NEGATIVE OF PRE-DIVIDE SHIFT COUNT.
045699,002289:
045700,002290: 00,3134 34755 CAF ZERO # SHIFT EACH COMPONENT LEFT 14.
045701,002291: 00,3135 56123 XCH VBUF +1
045702,002292: 00,3136 56122 XCH VBUF
045703,002293: 00,3137 56125 XCH VBUF +3
045704,002294: 00,3140 56124 XCH VBUF +2
045705,002295: 00,3141 56127 XCH VBUF +5
045706,002296: 00,3142 56126 XCH VBUF +4
045707,002297:
045708,002298: 00,3143 40135 CS MPTEMP
045709,002299: 00,3144 50000 INDEX A
045710,002300: 00,3145 34736 CAF BIT14
045711,002301: 00,3146 00006 EXTEND
045712,002302: 00,3147 70154 MP MPAC
045713,002303: 00,3150 13062 TCF SMALL2
045714,002304:
045715,002305: 00,3151 4761 THIRTEEN = OCT15
045716,002306: 00,3151 4317 FOURTEEN = OCT16
045717,002307: 00,3151 4317 OCT16 = R1D1
045718,002308:
045719,002309: # Page 1074
045720,002310: # THE FOLLOWING ROUTINE SETS UP THE CALL TO THE DIVIDE ROUTINES.
045721,002311:
045722,002312: 00,3151 10154 UNITDV CCS MPAC # FORCE MPAC POSITIVE IF POSSIBLE, SETTING
045723,002313: 00,3152 13170 TCF UMPAC+ # DVSIGN ACCORDING TO THE SIGN OF MPAC
045724,002314: 00,3153 13155 TCF +2 # SINCE THE DIVISOR IS ALWAYS POSITIVE
045725,002315: 00,3154 13162 TCF UMPAC- # HERE.
045726,002316:
045727,002317: 00,3155 10155 CCS MPAC +1
045728,002318: 00,3156 13170 TCF UMPAC+
045729,002319: 00,3157 00002 TC Q # EXIT IMMEDIATELY ON ZERO.
045730,002320: 00,3160 13162 TCF UMPAC-
045731,002321: 00,3161 00002 TC Q
045732,002322:
045733,002323: 00,3162 44755 UMPAC- CS ZERO # IF NEGATIVE, SET -0 IN DVSIGN FOR FINAL
045734,002324: 00,3163 54136 TS DVSIGN # COMPLEMENT.
045735,002325: 00,3164 00006 EXTEND
045736,002326: 00,3165 40155 DCS MPAC # PICK UP ABSOLUTE VALUE OF ARG AND JUMP.
045737,002327: 00,3166 50135 INDEX MPTEMP
045738,002328: 00,3167 12564 TCF MAXTEST -1
045739,002329:
045740,002330: 00,3170 54136 UMPAC+ TS DVSIGN # SET DVSIGN FOR POSITIVE QUOTIENT.
045741,002331: 00,3171 52155 DXCH MPAC
045742,002332: 00,3172 50135 INDEX MPTEMP
045743,002333: 00,3173 12564 TCF MAXTEST -1
045744,002334:
045745,002335: # Page 1075
045746,002336: # MISCELLANEOUS UNARY OPERATIONS.
045747,002337:
045748,002338: 00,3174 03300 DSQ TC DSQSUB # SQUARE THE DP CONTENTS OF MPAC.
045749,002339: 00,3175 16061 TCF DANZIG
045750,002340:
045751,002341: 00,3176 10163 ABVALABS CCS MODE # ABVAL OR ABS INSTRUCTION.
045752,002342: 00,3177 13226 TCF ABS # DO ABS ON SCALAR.
045753,002343: 00,3200 13226 TCF ABS
045754,002344:
045755,002345: 00,3201 03317 ABVAL TC VSQSUB # DOT MPAC WITH ITSELF.
045756,002346: 00,3202 22163 LXCH MODE # MODE IS NOW DP (L ZERO AFTER DAS).
045757,002347:
045758,002348: 00,3203 00006 EXTEND # STORE SQUARE OF LENGTH IN WORK AREA.
045759,002349: 00,3204 30155 DCA MPAC
045760,002350: 00,3205 50120 INDEX FIXLOC
045761,002351: 00,3206 52043 DXCH LVSQUARE
045762,002352:
045763,002353: # Page 1076
045764,002354: # PROGRAM DESCRIPTION -- SUBROUTINE SQRT
045765,002355:
045766,002356: # FUNCTIONAL DESCRIPTION -- DOUBLE PRECISION SQUARE ROOT ROUTINE
045767,002357: # THIS PROGRAM TAKES THE SQUARE ROOT OF THE 27 OR 28 MOST SIGNIFICANT BITS IN THE TRIPLE PRECISION SET OF
045768,002358: # NUMBERS -- MPAC, MPAC+1, AND MPAC+2. THE ROOT IS RETURNED DOUBLE PRECISION IN MPAC AND MPAC+1.
045769,002359:
045770,002360: # WARNING -- THIS SUBROUTINE USES A TRIPLE PRECISION INPUT. THE PROGRAMMER MUST ASSURE THE CONTENTS OF MPAC+2
045771,002361: # ESPECIALLY IF THE CONTENTS OF MPAC IS SMALL OR ZERO. FOR DETAILS SEE STG MEMO NO.949.
045772,002362:
045773,002363: # CALLING SEQUENCE -- IN INTERPRETIVE MODE, I.E., FOLLOWING `TC INTPRET', `SQRT', NO ADDRESS IS ALLOWED.
045774,002364: # INPUT SCALING: THE BINARY POINT IS ASSUMED TO THE RIGHT OF BIT 15. THE ANSWER IS RETURNED WITH THE SAME SCALING.
045775,002365:
045776,002366: # SUBROUTINES -- GENSCR, MPACSHR, SQRTSUB, ABORT
045777,002367:
045778,002368: # ABORT EXIT MODE -- ABORTS ON NEGATIVE INPUT -1.2X10E-4 (77775 OCTAL) OR LESS.
045779,002369: # DISPLAYS ERROR CODE 1302
045780,002370: # TC ABORT
045781,002371: # OCT 1302
045782,002372:
045783,002373: # DEBRIS -- LOCATIONS BUF, MPTEMP, ADDRWD ARE USED
045784,002374:
045785,002375: 00,3207 03343 SQRT TC SQRTSUB # TAKE THE SQUARE ROOT OF MPAC.
045786,002376: 00,3210 10135 CCS MPTEMP # RETURNED NORMALIZED SQUARE ROOT. SEE IF
045787,002377: 00,3211 13213 TCF +2 # ANY UN-NORMALIZATION REQUIRED AND EXIT
045788,002378: 00,3212 16061 TCF DANZIG # IF NOT.
045789,002379:
045790,002380: 00,3213 63733 AD NEG12 # A RIGHT SHIFT OF MORE THAN 13 COULD BE
045791,002381: 00,3214 00006 EXTEND # REQUIRED IF INPUT WAS ZERO IN MPAC,+1.
045792,002382: 00,3215 63221 BZMF SQRTSHFT # GOES HERE IN MOST CASES.
045793,002383: 00,3216 22007 ZL # IF A LONG SHIFT IS REQUIRED, GO TO
045794,002384: 00,3217 22116 LXCH ADDRWD # GENERAL RIGHT SHIFT ROUTINES.
045795,002385: 00,3220 12303 TCF GENSCR +4 # ADDRWD WAS ZERO TO PREVENT ROUND.
045796,002386:
045797,002387: 00,3221 50135 SQRTSHFT INDEX MPTEMP # SELECT SHIFTING BIT AND EXIT THROUGH
045798,002388: 00,3222 34735 CAF BIT15 # SHIFT ROUTINES.
045799,002389: 00,3223 54135 TS MPTEMP
045800,002390: 00,3224 34755 CAF ZERO # TO ZERO MPAC +2 IN THE PROCESS.
045801,002391: 00,3225 12036 TCF MPACSHR +3
045802,002392:
045803,002393: 00,3226 06723 ABS TC BRANCH # TEST SIGN OF MPAC AND COMPLEMENT IF
045804,002394: 00,3227 16061 TCF DANZIG
045805,002395: 00,3230 16061 TCF DANZIG
045806,002396: 00,3231 17670 TCF COMP
045807,002397:
045808,002398: # Page 1077
045809,002399: 00,3232 44751 VDEF CS FOUR # VECTOR DEFINE -- ESSENTIALLY TREATS
045810,002400: 00,3233 26166 ADS PUSHLOC # SCALAR IN MPAC AS X COMPONENT, PUSHES UP
045811,002401: 00,3234 00006 EXTEND # FOR Y AND THEN AGAIN FOR Z.
045812,002402: 00,3235 50000 INDEX A
045813,002403: 00,3236 30003 DCA 2
045814,002404: 00,3237 52160 DXCH MPAC +3
045815,002405: 00,3240 00006 EXTEND
045816,002406: 00,3241 50166 INDEX PUSHLOC
045817,002407: 00,3242 30001 DCA 0
045818,002408: 00,3243 52162 DXCH MPAC +5
045819,002409: 00,3244 16521 TCF VMODE # MODE IS NON VECTOR.
045820,002410:
045821,002411: 00,3245 03317 VSQ TC VSQSUB # DOT MPAC WITH ITSELF.
045822,002412: 00,3246 17332 TCF DMODE # MODE IS NOW DP.
045823,002413:
045824,002414: 00,3247 00006 PUSH EXTEND # PUSH DOWN MPAC LEAVING IT LOADED.
045825,002415: 00,3250 30155 DCA MPAC
045826,002416: 00,3251 50166 INDEX PUSHLOC # PUSH DOWN FIRST TWO REGISTERS IN EACH
045827,002417: 00,3252 52001 DXCH 0
045828,002418:
045829,002419: 00,3253 50163 INDEX MODE # INCREMENT PUSHDOWN POINTER.
045830,002420: 00,3254 36244 CAF NO.WDS
045831,002421: 00,3255 26166 ADS PUSHLOC
045832,002422:
045833,002423: 00,3256 10163 CCS MODE
045834,002424: 00,3257 13272 TCF TPUSH # PUSH DOWN MPAC +2.
045835,002425: 00,3260 16061 TCF DANZIG # DONE FOR DP.
045836,002426:
045837,002427: 00,3261 00006 EXTEND # ON VECTOR, PUSH DOWN Y AND Z COMPONENTS.
045838,002428: 00,3262 30160 DCA MPAC +3
045839,002429: 00,3263 50166 INDEX PUSHLOC
045840,002430: 00,3264 51775 DXCH 0 -4
045841,002431: 00,3265 00006 EXTEND
045842,002432: 00,3266 30162 DCA MPAC +5
045843,002433: 00,3267 50166 INDEX PUSHLOC
045844,002434: 00,3270 51777 DXCH 0 -2
045845,002435: 00,3271 16061 TCF DANZIG
045846,002436:
045847,002437: 00,3272 30156 TPUSH CA MPAC +2
045848,002438: 00,3273 16554 TCF ENDTPUSH +2
045849,002439:
045850,002440: 00,3274 50120 RVQ INDEX FIXLOC # RVQ -- RETURN IVA QPRET.
045851,002441: 00,3275 30052 CA QPRET
045852,002442: 00,3276 54117 TS POLISH
045853,002443: 00,3277 16652 TCF GOTO +4 # (ASSUME QPRET POINTS TO FIXED ONLY.)
045854,002444:
045855,002445: # Page 1078
045856,002446: # THE FOLLOWING SUBROUTINES ARE USED IN SQUARING MPAC, IN BOTH THE SCALAR AND VECTOR SENSE. THEY ARE
045857,002447: # SPECIAL CASES OF DMPSUB AND DOTSUB, PUT IN TO SAVE SOME TIME.
045858,002448:
045859,002449: 00,3300 30155 DSQSUB CA MPAC +1 # SQUARES THE SCALAR CONTENTS OF MPAC.
045860,002450: 00,3301 00006 EXTEND
045861,002451: 00,3302 70000 SQUARE
045862,002452: 00,3303 54156 TS MPAC +2
045863,002453: 00,3304 34755 CAF ZERO # FORM 2(CROSS TERM).
045864,002454: 00,3305 56155 XCH MPAC +1
045865,002455: 00,3306 00006 EXTEND
045866,002456: 00,3307 70154 MP MPAC
045867,002457: 00,3310 20001 DDOUBL # AND MAYBE OVEFLOW.
045868,002458: 00,3311 20156 DAS MPAC +1 # AND SET A TO NET OVERFLOW.
045869,002459: 00,3312 56154 XCH MPAC
045870,002460: 00,3313 00006 EXTEND
045871,002461: 00,3314 70000 SQUARE
045872,002462: 00,3315 20155 DAS MPAC
045873,002463: 00,3316 00002 TC Q
045874,002464:
045875,002465: 00,3317 00006 VSQSUB EXTEND # DOTS THE VECTOR IN MPAC WITH ITSELF.
045876,002466: 00,3320 22137 QXCH DOTRET
045877,002467: 00,3321 03300 TC DSQSUB # SQUARE THE X COMPONENT.
045878,002468: 00,3322 52160 DXCH MPAC +3
045879,002469: 00,3323 52155 DXCH MPAC
045880,002470: 00,3324 52131 DXCH BUF # SO WE CAN END IN DOTSUB.
045881,002471: 00,3325 30156 CA MPAC +2
045882,002472: 00,3326 54132 TS BUF +2
045883,002473:
045884,002474: 00,3327 03300 TC DSQSUB # SQUARE Y COMPONENT.
045885,002475: 00,3330 52156 DXCH MPAC +1
045886,002476: 00,3331 20132 DAS BUF +1
045887,002477: 00,3332 60154 AD MPAC
045888,002478: 00,3333 60130 AD BUF
045889,002479: 00,3334 54130 TS BUF
045890,002480: 00,3335 13337 TCF +2
045891,002481: 00,3336 54121 TS OVFIND # IF OVERFLOW.
045892,002482:
045893,002483: 00,3337 52162 DXCH MPAC +5
045894,002484: 00,3340 52155 DXCH MPAC
045895,002485: 00,3341 03300 TC DSQSUB # SQUARE Z COMPONENT.
045896,002486: 00,3342 17205 TCF ENDDOT # END AS IN DOTSUB.
045897,002487:
045898,002488: # Page 1079
045899,002489: # DOUBLE PRECISION SQUARE ROOT ROUTINE. TAKE THE SQUARE ROOT OF THE TRIPLE PRECISION (MPAC +2 USED ONLY
045900,002490: # IN NORMALIZATION) CONTENTS OF MPAC AND LEAVE THE NORMALIZED RESULT IN MPAC (C(MPAC) GREATER THAN OR EQUAL TO
045901,002491: # .5). THE RIGHT SHIFT COUNT (TC UNNORMALIZE) IS LEFT IN MPTEMP.
045902,002492:
045903,002493: 00,3343 34755 SQRTSUB CAF ZERO # START BY ZEROING RIGHT SHIFT COUNT.
045904,002494: 00,3344 54135 TS MPTEMP
045905,002495:
045906,002496: 00,3345 10154 CCS MPAC # CHECK FOR POSITIVE ARGUMENT, SHIFTING
045907,002497: 00,3346 13405 TCF SMPAC+ # FIRST SIGNIFICANT MPAC REGISTER INTO
045908,002498: 00,3347 13351 TCF +2 # MPAC ITSELF.
045909,002499: 00,3350 13373 TCF SQRTNEG # SEE IF MAG OF ARGUMENT LESS THAN 10(-4).
045910,002500:
045911,002501: 00,3351 56156 XCH MPAC +2 # MPAC IS ZERO -- SHIFT LEFT 14.
045912,002502: 00,3352 56155 XCH MPAC +1
045913,002503: 00,3353 54154 TS MPAC
045914,002504: 00,3354 34757 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
045915,002505: 00,3355 54135 TS MPTEMP
045916,002506:
045917,002507: 00,3356 10154 CCS MPAC # SEE IF MPAC NOW PNZ.
045918,002508: 00,3357 13405 TCF SMPAC+
045919,002509: 00,3360 13362 TCF +2
045920,002510: 00,3361 13376 TCF ZEROANS # NEGATIVE BUT LESS THAN 10(-4) IN MAG.
045921,002511:
045922,002512: 00,3362 56155 XCH MPAC +1 # XERO -- SHIFT LEFT 14 AGAIN.
045923,002513: 00,3363 54154 TS MPAC
045924,002514: 00,3364 34757 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
045925,002515: 00,3365 26135 ADS MPTEMP
045926,002516:
045927,002517: 00,3366 10154 CCS MPAC
045928,002518: 00,3367 13405 TCF SMPAC+
045929,002519: 00,3370 00002 TC Q # SQRT(0) = 0.
045930,002520: 00,3371 13376 TCF ZEROANS
045931,002521: 00,3372 13453 TCF FIXROOT # DO NOT LEAVE SQRTSUB WITH -0 IN MPAC.
045932,002522:
045933,002523: 00,3373 10000 SQRTNEG CCS A # ARGUMENT IS NEGATIVE, BUT SEE IF SIGN-
045934,002524: 00,3374 13402 TCF SQRTABRT # CORRECTED ARGUMENT IS LESS THAN 10(-4)
045935,002525:
045936,002526: 00,3375 10155 CCS MPAC +1 # IN MAGNITUDE. IF SO, CALL ANSWER ZERO.
045937,002527: 00,3376 34755 ZEROANS CAF ZERO # FORCE ANSWER TO ZERO HERE.
045938,002528: 00,3377 13453 TCF FIXROOT
045939,002529: 00,3400 13402 TCF SQRTABRT
045940,002530: 00,3401 13453 TCF FIXROOT
045941,002531:
045942,002532: 00,3402 52165 SQRTABRT DXCH LOC
045943,002533: 00,3403 05726 TC P00DOO1
045944,002534: 00,3404 01302 OCT 1302
045945,002535:
045946,002536: # Page 1080
045947,002537: 00,3405 62444 SMPAC+ AD -1/2+2 # SEE IF ARGUMENT GREATER THAN OR EQUAL TO
045948,002538: 00,3406 00006 EXTEND # .5.
045949,002539: 00,3407 63456 BZMF SRTEST # IF SO, SEE IF LESS THAN .25.
045950,002540:
045951,002541: 00,3410 52155 DXCH MPAC # WE WILL TAKE THE SQUARE ROOT OF MPAC/2.
045952,002542: 00,3411 22021 LXCH SR # SHIFT RIGHT 1 AND GO TO THE SQRT ROUTINE
045953,002543: 00,3412 00006 EXTEND
045954,002544: 00,3413 74736 MP HALF
045955,002545: 00,3414 52155 DXCH MPAC
045956,002546: 00,3415 56021 XCH SR
045957,002547: 00,3416 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
045958,002548:
045959,002549: 00,3417 32314 ARGHI CAF SLOPEHI # ARGUMENT BETWEEN .25 AND .5, GET A
045960,002550: 00,3420 00006 EXTEND # LINEAR APPROXIMATION FOR THIS RANGE.
045961,002551: 00,3421 70154 MP MPAC
045962,002552: 00,3422 62566 AD BIASHI # X0/2 = (MPAC/2)(SLOPHI) + BIASHI/2.
045963,002553:
045964,002554: 00,3423 54130 +4 TS BUF # X0/2 (ARGLO ENTERS HERE).
045965,002555: 00,3424 30154 CA MPAC # SINGLE-PRECISION THROUGHOUT.
045966,002556: 00,3425 22007 ZL
045967,002557: 00,3426 00006 EXTEND
045968,002558: 00,3427 10130 DV BUF # (MPAC/2)/(X0/2)
045969,002559: 00,3430 00006 EXTEND
045970,002560: 00,3431 74736 MP HALF
045971,002561: 00,3432 26130 ADS BUF # X1 = X0/2 + .5(MPAX/2)/(X0/2)
045972,002562:
045973,002563: 00,3433 00006 EXTEND
045974,002564: 00,3434 74736 MP HALF # FORM UP X1/2.
045975,002565: 00,3435 52155 DXCH MPAC # SAVE AND BRING OUT ARGUMENT.
045976,002566: 00,3436 00006 EXTEND # TAKE DP QUOTIENT WITH X1.
045977,002567: 00,3437 10130 DV BUF
045978,002568: 00,3440 54131 TS BUF +1 # SAVE MAJOR PART OF QUOTIENT.
045979,002569: 00,3441 34755 CAF ZERO # FORM MINOR PART OF QUOTIENT USING
045980,002570: 00,3442 56001 XCH L # (REMAINDER,0).
045981,002571: 00,3443 00006 EXTEND
045982,002572: 00,3444 10130 DV BUF
045983,002573: 00,3445 54001 TS L # IN PREPARATION FOR DAS.
045984,002574: 00,3446 30131 CA BUF +1
045985,002575: 00,3447 20155 DAS MPAC # X2 = X1/2 + (MPAC/2)X1
045986,002576:
045987,002577: 00,3450 00006 EXTEND # OVERFLOWS IF ARG. NEAR POSMAX.
045988,002578: 00,3451 13455 BZF TCQBNK00
045989,002579: 00,3452 34733 CAF POSMAX
045990,002580: 00,3453 54154 FIXROOT TS MPAC
045991,002581: 00,3454 54155 TS MPAC +1
045992,002582: 00,3455 00002 TCQBNK00 TC Q # RETURN TO CALLER TO UNNORMALIZE, ETC.
045993,002583:
045994,002584: # Page 1081
045995,002585: 00,3456 64737 SRTEST AD QUARTER # ARGUMENT WAS LESS THAN .5, SEE IF LESS
045996,002586: 00,3457 00006 EXTEND # THAN .25.
045997,002587: 00,3460 63502 BZMF SQRTNORM # IF SO, BEGIN NORMALIZATION.
045998,002588:
045999,002589: 00,3461 52155 DXCH MPAC # IF BETWEEN .5 AND .25, SHIFT RIGHT 1 AND
046000,002590: 00,3462 22021 LXCH SR # START AT ARGLO.
046001,002591: 00,3463 00006 EXTEND
046002,002592: 00,3464 74736 MP HALF
046003,002593: 00,3465 52155 DXCH MPAC
046004,002594: 00,3466 56021 XCH SR
046005,002595: 00,3467 26155 ADS MPAC +1 # NO OVERFLOW.
046006,002596:
046007,002597: 00,3470 33007 ARGLO CAF SLOPELO # (NORMALIZED) ARGUMENT BETWEEN .125 AND
046008,002598: 00,3471 00006 EXTEND # .25
046009,002599: 00,3472 70154 MP MPAC
046010,002600: 00,3473 62270 AD BIASLO
046011,002601: 00,3474 13423 TCF ARGHI +4 # BEGIN SQUARE ROOT.
046012,002602:
046013,002603: 00,3475 00006 SQRTNM2 EXTEND # SHIFT LEFT 2 AND INCREMENT RIGHT SHIFT
046014,002604: 00,3476 30156 DCA MPAC +1 # COUNT (FOR TERMINAL UNNORMALIZATION).
046015,002605: 00,3477 20156 DAS MPAC +1
046016,002606: 00,3500 60154 AD MPAC
046017,002607: 00,3501 26154 ADS MPAC # (NO OVERFLOW).
046018,002608:
046019,002609: 00,3502 24135 SQRTNORM INCR MPTEMP # FIRST TIME THROUGH, JUST SHIFT LEFT 1
046020,002610: 00,3503 00006 EXTEND # (PUTS IN EFFECTIVE RIGHT SHIFT SINCE
046021,002611: 00,3504 30156 DCA MPAC +1 # WE WANT MPAC/2).
046022,002612: 00,3505 20156 DAS MPAC +1
046023,002613: 00,3506 60154 AD MPAC
046024,002614: 00,3507 26154 ADS MPAC # (AGAIN NO OVERFLOW).
046025,002615: 00,3510 60000 DOUBLE
046026,002616: 00,3511 54022 TS CYL
046027,002617:
046028,002618: 00,3512 10022 NORMTEST CCS CYL # SEE IF ARGUMENT NOW NORMALIZED AT
046029,002619: 00,3513 10022 CCS CYL # GREATER THAN .125.
046030,002620: 00,3514 13475 TCF SQRTNM2 # NO -- SHIFT LEFT 2 MORE AND TRY AGAIN.
046031,002621: 00,3515 13417 TCF ARGHI # YES -- NOW BETWEEN .5 AND .25.
046032,002622: 00,3516 13470 TCF ARGLO # ARGUMENT NOW BETWEEN .25 AND .125.
046033,002623:
046034,002624: # Page 1082
046035,002625: # TRIGONOMETRIC FUNCTION PACKAGE.
046036,002626: # THE FOLLOWING TRIGONOMETRIC FUNCTIONS ARE AVAIALABLE AS INTERPRETIVE OPERATIONS:
046037,002627: # 1. SIN COMPUTES (1/2)SINE(2 PI MPAC).
046038,002628: # 2. COS COMPUTES (1/2)COSINE(2 PI MPAC).
046039,002629: # 3. ASIN COMPUTES (1/2PI)ARCSINE(2 MPAC).
046040,002630: # 4. ACOS COMPUTES (1/2PI)ARCCOSINE(2 MPAC).
046041,002631:
046042,002632: # SIN-ASIN AND COS-ACOS ARE MUTUALLY INVERSE, I.E., SIN(ASIN(X)) = X.
046043,002633:
046044,002634: 00,3517 06723 COSINE TC BRANCH # FINDS COSINE USING THE IDENTITY
046045,002635: 00,3520 13523 TCF +3 # COS(X) = SIN(PI/2 - ABS(X)).
046046,002636: 00,3521 13526 TCF PRESINE
046047,002637: 00,3522 13526 TCF PRESINE
046048,002638:
046049,002639: 00,3523 00006 +3 EXTEND
046050,002640: 00,3524 40155 DCS MPAC
046051,002641: 00,3525 52155 DXCH MPAC
046052,002642:
046053,002643: 00,3526 34737 PRESINE CAF QUARTER # PI/2 SCALED.
046054,002644: 00,3527 26154 ADS MPAC
046055,002645:
046056,002646: 00,3530 52155 SINE DXCH MPAC # DOUBLE ARGUMENT.
046057,002647: 00,3531 20001 DDOUBL
046058,002648: 00,3532 54000 OVSK # SEE IF OVERFLOW PRESENT.
046059,002649: 00,3533 13536 TCF +3 # IF NOT, ARGUMENT OK AS IS.
046060,002650:
046061,002651: 00,3534 00006 EXTEND # IF SO, WE LOST (OR GAINED) PI, SO
046062,002652: 00,3535 40001 DCOM # COMPLEMENT MPAC USING THE IDENTITY
046063,002653: # SIN(X-(+)PI) = SIN(-X).
046064,002654: 00,3536 52155 +3 DXCH MPAC
046065,002655: 00,3537 30154 CA MPAC # SEE IF ARGUMENT GREATER THAN .5 IN
046066,002656: 00,3540 60000 DOUBLE # MAGNITUDE. IF SO, REDUCE IT TO LESS THAN
046067,002657: 00,3541 54001 TS L # .5 (+-PI/2 SCALED) AS FOLLOWS:
046068,002658: 00,3542 13553 TCF SN1
046069,002659:
046070,002660: 00,3543 50000 INDEX A # IF POSITIVE, FORM PI - X, IF NEGATIVE
046071,002661: 00,3544 34735 CAF NEG1/2 +1 # USE -PI -X.
046072,002662: 00,3545 60000 DOUBLE
046073,002663: 00,3546 00006 EXTEND
046074,002664: 00,3547 60154 SU MPAC # GUARANTEED NO OVERFLOW.
046075,002665: 00,3550 54154 TS MPAC
046076,002666: 00,3551 40155 CS MPAC +1
046077,002667: 00,3552 54155 TS MPAC +1
046078,002668:
046079,002669: # Page 1083
046080,002670: 00,3553 00006 SN1 EXTEND # SET UP TO EVALUATE HASTINGS POLYNOMIAL
046081,002671: 00,3554 30155 DCA MPAC
046082,002672: 00,3555 52134 DXCH BUF2
046083,002673: 00,3556 03300 TC DSQSUB # SQUARE MPAC.
046084,002674:
046085,002675: 00,3557 07222 TC POLY # EVALUATE FOURTH ORDER POLYNOMIAL.
046086,002676: 00,3560 00003 DEC 3 B-14
046087,002677: 00,3561 14441 37325 2DEC +.3926990796
046088,002678:
046089,002679: 00,3563 53250 60764 2DEC -.6459637111
046090,002680:
046091,002681: 00,3565 12146 21276 2DEC +.318758717
046092,002682:
046093,002683: 00,3567 75466 71471 2DEC -.074780249
046094,002684:
046095,002685: 00,3571 00236 32757 2DEC +.009694988
046096,002686:
046097,002687: 00,3573 32470 CAF LBUF2 # MULTIPLY BY ARGUMENT AND SHIFT LEFT 2.
046098,002688: 00,3574 07106 TC DMPSUB -1
046099,002689:
046100,002690: 00,3575 00006 EXTEND
046101,002691: 00,3576 30156 DCA MPAC +1
046102,002692: 00,3577 20156 DAS MPAC +1
046103,002693: 00,3600 60154 AD MPAC
046104,002694: 00,3601 26154 ADS MPAC # NEITHER SHIFT OVERFLOWS.
046105,002695: 00,3602 00006 EXTEND
046106,002696: 00,3603 30156 DCA MPAC +1
046107,002697: 00,3604 20156 DAS MPAC +1
046108,002698: 00,3605 60154 AD MPAC
046109,002699: 00,3606 26154 ADS MPAC
046110,002700: 00,3607 16061 TCF DANZIG
046111,002701:
046112,002702: # Page 1084
046113,002703: # ARCSIN/ARCCOS ROUTINE.
046114,002704:
046115,002705: 00,3610 33631 ARCSIN CAF LASINEX # COMPUTE ARCSIN BY USING THE IDENTITY
046116,002706: 00,3611 13613 TCF +2 # ARCSIN(X) = PI/2 - ARCCOS(X).
046117,002707:
046118,002708: 00,3612 33713 ARCCOS CAF LDANZIG # (EXITS IMMEDIATELY).
046119,002709: 00,3613 54136 TS ESCAPE
046120,002710: 00,3614 06723 TC BRANCH # TEST SIGN OF INPUT.
046121,002711: 00,3615 13625 TCF ACOSST # START IMMEDIATELY IF POSITIVE.
046122,002712: 00,3616 13731 TCF ACOSZERO # ARCCOS(0) = PI/2 = .25.
046123,002713: 00,3617 00006 EXTEND # IF NEGATIVE, USE THE IDENTITY
046124,002714: 00,3620 40155 DCS MPAC # ARCCOS(X) = PI - ARCCOS(-X), FORCING
046125,002715: 00,3621 52155 DXCH MPAC # ARGUMENT POSITIVE.
046126,002716: 00,3622 33734 CAF TCSUBTR # SET EXIT TO DO ABOVE BEFORE
046127,002717: 00,3623 56136 XCH ESCAPE # ARCSIN/ARCCOS CONSIDERATIONS.
046128,002718: 00,3624 54137 TS ESCAPE2
046129,002719:
046130,002720: 00,3625 44736 ACOSST CS HALF # TEST MAGNITUDE OF INPUT.
046131,002721: 00,3626 60154 AD MPAC
046132,002722: 00,3627 10000 CCS A
046133,002723: 00,3630 13721 TCF ACOSOVF # THIS IS PROBABLY AN OVERFLOW CASE.
046134,002724:
046135,002725: 00,3631 13707 LASINEX TCF ASINEX
046136,002726:
046137,002727: 00,3632 13642 TCF ACOSST2 # NO OVERFLOW -- PROCEED.
046138,002728:
046139,002729: 00,3633 10155 CCS MPAC +1 # IF MAJOR PART IS .5, CALL ANSWER 0
046140,002730: 00,3634 34755 CAF ZERO # UNLESS MINOR PART NEGATIVE.
046141,002731: 00,3635 13637 TCF ACOS=0
046142,002732:
046143,002733: 00,3636 13642 TCF ACOSST2
046144,002734:
046145,002735: 00,3637 54155 ACOS=0 TS MPAC +1
046146,002736: 00,3640 54154 TS MPAC
046147,002737: 00,3641 00136 TC ESCAPE
046148,002738:
046149,002739: 00,3642 00006 ACOSST2 EXTEND # NOW THAT ARGUMENT IS IN PROPER RANGE,
046150,002740: 00,3643 40155 DCS MPAC # BEGIN COMPUTATION. USE HASTINGS
046151,002741: 00,3644 64736 AD HALF # APPROXIMATION ARCCOS(X) = SQRT(1-X)P(X)
046152,002742: 00,3645 52155 DXCH MPAC # IN A SCALED VERSION WHERE P(X) IS A
046153,002743: 00,3646 52134 DXCH BUF2 # SEVENTH ORDER POLYNOMIAL.
046154,002744:
046155,002745: 00,3647 03343 TC SQRTSUB # RETURNS WITH NORMALIZED SQUARE ROOT.
046156,002746:
046157,002747: 00,3650 10135 CCS MPTEMP # SEE IF UN-NORMALIZATION REQUIRED.
046158,002748: 00,3651 13714 TCF ACOSSHR # IF SO.
046159,002749:
046160,002750: # Page 1085
046161,002751: 00,3652 52155 ACOS3 DXCH MPAC # SET UP FOR POLYNOMIAL EVALUATION.
046162,002752: 00,3653 52134 DXCH BUF2
046163,002753: 00,3654 52155 DXCH MPAC
046164,002754:
046165,002755: 00,3655 07222 TC POLY
046166,002756: 00,3656 00006 DEC 6 B-14
046167,002757: 00,3657 13240 23630 2DEC +.353553385 # COEFFICIENTS ARE C 2(+I)/PISQRT(2) WHERE
046168,002758:
046169,002759: 00,3661 74721 47775 2DEC* -.0483017006 B+1* # I
046170,002760:
046171,002761: 00,3663 02440 20237 2DEC* +.0200273085 B+2* # WHERE C STANDS FOR ORIGINAL COEFFS.
046172,002762:
046173,002763: 00,3665 75067 70742 2DEC* -.0112931863 B+3*
046174,002764:
046175,002765: 00,3667 03436 26756 2DEC* +.00695311612 B+4*
046176,002766:
046177,002767: 00,3671 74037 57640 2DEC* -.00384617957 B+5*
046178,002768:
046179,002769: 00,3673 03046 07143 2DEC* +.001501297736 B+6*
046180,002770:
046181,002771: 00,3675 76654 42244 2DEC* -.000284160334 B+7*
046182,002772:
046183,002773:
046184,002774: 00,3677 32470 CAF LBUF2 # DO FINAL MULTIPLY AND GO TO ANY
046185,002775: 00,3700 07106 TC DMPSUB -1 # EPILOGUE SEQUENCES.
046186,002776: 00,3701 00136 TC ESCAPE
046187,002777:
046188,002778: 00,3702 00006 SUBTR EXTEND # EPILOGUE FOR NEGATIVE INPUTS TO ARCCOS.
046189,002779: 00,3703 40155 DCS MPAC
046190,002780: 00,3704 64736 AD HALF # FORMS PI - ARCCOS(-X) = ARCCOS(X).
046191,002781: 00,3705 52155 DXCH MPAC
046192,002782: 00,3706 00137 TC ESCAPE2 # GO TO POSSIBLE ARCSIN EPILOGUE.
046193,002783:
046194,002784: 00,3707 00006 ASINEX EXTEND
046195,002785: 00,3710 40155 DCS MPAC # ARCSIN EPILOGUE -- GET ARCSIN(X)
046196,002786: 00,3711 64737 AD QUARTER # = PI/2 - ARCCOS(X).
046197,002787: 00,3712 52155 DXCH MPAC
046198,002788: 00,3713 16061 LDANZIG TCF DANZIG
046199,002789:
046200,002790: # Page 1086
046201,002791: 00,3714 50000 ACOSSHR INDEX A # THE SHIFT RIGHT IS LESS THAN 14 SINCE
046202,002792: 00,3715 34736 CAF BIT14 # THE INPUT WAS NON-ZERO DP.
046203,002793: 00,3716 54135 TS MPTEMP
046204,002794: 00,3717 02073 TC VSHRRND # DP SHIFT RIGHT AND ROUND.
046205,002795: 00,3720 13652 TCF ACOS3 # PROCEED.
046206,002796:
046207,002797: 00,3721 00006 ACOSOVF EXTEND # IF MAJOR PART WAS ONLY 1 MORE THAN .5,
046208,002798: 00,3722 13637 BZF ACOS=0 # CALL ANSWER ZERO.
046209,002799:
046210,002800: 00,3723 00006 ACOSABRT EXTEND # IF OVERFLOW, CALL ANSWER ZERO BUT
046211,002801: 00,3724 30165 DCA LOC # SOUND AN ALARM.
046212,002802: 00,3725 05732 TC ALARM1
046213,002803: 00,3726 01301 OCT 1301
046214,002804:
046215,002805: 00,3727 34755 CAF ZERO
046216,002806: 00,3730 13637 TCF ACOS=0
046217,002807:
046218,002808: 00,3731 34737 ACOSZERO CAF QUARTER # ACOS(0) = PI/2.
046219,002809: 00,3732 13640 TCF ACOS=0 +1 # SET MPAC AND EXIT VIA ESCAPE.
046220,002810:
046221,002811: 00,3733 77763 NEG12 DEC -12 B-14
046222,002812: 00,3734 13702 TCSUBTR TCF SUBTR
046223,002813:
046224,002814: # Page 1087
046225,002815: # THE FOLLOWING INSTRUCTIONS ARE AVAILABLE FOR SETTING, MODIFYING, AND BRANCHING ON INDEX REGISTERS:
046226,002816: # 1. AXT ADDRESS TO INDEX TRUE.
046227,002817: # 2. AXC ADDRESS TO INDEX COMPLEMENTED.
046228,002818: # 3. LXA LOAD INDEX FROM ERASABLE.
046229,002819: # 4. LXC LOAD INDEX COMPLEMENTED FROM ERASABLE.
046230,002820: # 5. SXA STORE INDEX IN ERASABLE.
046231,002821: # 6. XCHX EXCHANGE INDEX REGISTER WITH ERASABLE.
046232,002822: # 7. INCR INCREMENT INDEX REGISTER.
046233,002823: # 8. XAD ERASABLE ADD TO INDEX REGISTER.
046234,002824: # 9. XSU ERASABLE SUBTRACT FROM INDEX REGISTER.
046235,002825: # 10. TIX BRANCH ON INDEX REGISTER AND DECREMENT.
046236,002826:
046237,002827: 01,2344 BANK 01
046238,002828:
046239,002829: 01,2344 COUNT* $$/INTER
046240,002830: 01,2344 02441 AXT TC TAGSUB # SELECT APPROPRIATE INDEX REGISTER.
046241,002831: 01,2345 30117 CA POLISH
046242,002832: 01,2346 50130 XSTORE INDEX INDEXLOC # CONTAINS C(FIXLOC) OR C(FIXLOC)+1
046243,002833: 01,2347 54046 TS X1
046244,002834: 01,2350 16061 TCF DANZIG
046245,002835:
046246,002836: 01,2351 02441 AXC TC TAGSUB
046247,002837: 01,2352 40117 CS POLISH
046248,002838: 01,2353 02346 TC XSTORE
046249,002839:
046250,002840: 01,2354 02427 LXA TC 15ADRERS # LOAD INDEX REGISTER FROM ERASABLE.
046251,002841: 01,2355 50117 INDEX POLISH
046252,002842: 01,2356 30000 CA 0
046253,002843: 01,2357 12346 TCF XSTORE
046254,002844:
046255,002845: 01,2360 02427 LXC TC 15ADRERS # LOAD NDX REG FROM ERASABLE COMPLEMENTED.
046256,002846: 01,2361 50117 INDEX POLISH
046257,002847: 01,2362 40000 CS 0
046258,002848: 01,2363 12346 TCF XSTORE
046259,002849:
046260,002850: 01,2364 02427 SXA TC 15ADRERS # STORE INDEX REGISTER IN ERASABLE.
046261,002851: 01,2365 50130 INDEX INDEXLOC
046262,002852: 01,2366 30046 CA X1
046263,002853: 01,2367 50117 MSTORE1 INDEX POLISH
046264,002854: 01,2370 54000 TS 0
046265,002855: 01,2371 16061 TCF DANZIG
046266,002856:
046267,002857: # Page 1088
046268,002858: 01,2372 02427 XCHX TC 15ADRERS # EXCHANGE INDEX REGISTER WITH ERASABLE.
046269,002859: 01,2373 50117 INDEX POLISH
046270,002860: 01,2374 30000 CA 0
046271,002861: 01,2375 50130 INDEX INDEXLOC
046272,002862: 01,2376 56046 XCH X1
046273,002863: 01,2377 12367 TCF MSTORE1
046274,002864:
046275,002865: 01,2400 02427 XAD TC 15ADRERS # ADD ERASABLE TO INDEX REGISTER.
046276,002866: 01,2401 50117 INDEX POLISH
046277,002867: 01,2402 30000 CA 0
046278,002868: 01,2403 50130 XAD2 INDEX INDEXLOC
046279,002869: 01,2404 26046 ADS X1 # IGNORING OVERFLOWS.
046280,002870: 01,2405 16061 TCF DANZIG
046281,002871:
046282,002872: 01,2406 02441 INCR TC TAGSUB # INCREMENT INDEX REGISTER.
046283,002873: 01,2407 30117 CA POLISH
046284,002874: 01,2410 12403 TCF XAD2
046285,002875:
046286,002876: 01,2411 02427 XSU TC 15ADRERS # SUBTRACT ERASABLE FROM INDEX REGISTER.
046287,002877: 01,2412 50117 INDEX POLISH
046288,002878: 01,2413 40000 CS 0
046289,002879: 01,2414 12403 TCF XAD2
046290,002880:
046291,002881: 01,2415 02441 TIX TC TAGSUB # BRANCH AND DECREMENT ON INDEX.
046292,002882: 01,2416 50130 INDEX INDEXLOC
046293,002883: 01,2417 40050 CS S1
046294,002884: 01,2420 50130 INDEX INDEXLOC
046295,002885: 01,2421 60046 AD X1
046296,002886: 01,2422 00006 EXTEND # NO OPERATION IF DECREMENTED INDEX IS
046297,002887: 01,2423 66061 BZMF DANZIG # NEGATIVE OR ZERO.
046298,002888:
046299,002889: 01,2424 50130 DOTIXBR INDEX INDEXLOC
046300,002890: 01,2425 56046 XCH X1 # IGNORING OVERFLOWS.
046301,002891:
046302,002892: 01,2426 16646 TCF GOTO # DO THE BRANCH USING THE CADR IN POLISH.
046303,002893:
046304,002894: # Page 1089
046305,002895: # SUBROUTINE TO CONVERT AN ERASABLE ADDRESS (11 BITS) TO AN EBANK SETTING AND SUBADDRESS.
046306,002896:
046307,002897: 01,2427 40117 15ADRERS CS POLISH
046308,002898: 01,2430 64772 AD DEC45
046309,002899: 01,2431 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
046310,002900: 01,2432 30120 CA FIXLOC # YES. ADD FIXLOC. EBANK OK AS IS.
046311,002901: 01,2433 12440 TCF +5
046312,002902:
046313,002903: 01,2434 35007 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
046314,002904: 01,2435 56117 XCH POLISH
046315,002905: 01,2436 54003 TS EBANK
046316,002906: 01,2437 74357 MASK LOW8
046317,002907: 01,2440 26117 +5 ADS POLISH # FALL INTO TAGSUB, AND RETURN VIA Q.
046318,002908:
046319,002909: # SUBROUTINE WHICH SETS THE ADDRESS OF THE SPECIFIED INDEX IN INDEXLOC. (ACTUALLY, THE ADDRESS -38D.)
046320,002910:
046321,002911: 01,2441 30120 TAGSUB CA FIXLOC
046322,002912: 01,2442 54130 TS INDEXLOC
046323,002913:
046324,002914: 01,2443 10020 CCS CYR # BIT 15 SPECIFIES INDEX.
046325,002915: 01,2444 24130 INCR INDEXLOC # 0 MEANS USE X2.
046326,002916: 01,2445 00002 TC Q
046327,002917: 01,2446 00002 TC Q # 1 FOR X1.
046328,002918:
046329,002919: # Page 1090
046330,002920: # MISCELLANEOUS OPERATION CODES WITH DIRECT ADDRESSES. INCLUDED HERE ARE:
046331,002921: # 1. ITA STORE CPRET (RETURN ADDRESS) IN ERASABLE.
046332,002922: # 2. CALL CALL A SUBROUTINE, LEAVING RETURN IN QPRET.
046333,002923: # 3. RTB RETURN TO BASIC LANGUAGE AT THE GIVEN ADDRESS.
046334,002924: # 4. BHIZ BRANCH IF THE HIGH ORDER OF MPAC IS ZERO (SINGLE PRECISION).
046335,002925: # 5. BOV BRANCH ON OVERFLOW.
046336,002926: # 6. GOTO SIMPLE SEQUENCE CHANGE.
046337,002927:
046338,002928: 01,2447 10020 RTB/BHIZ CCS CYR
046339,002929: 01,2450 30117 RTB CA POLISH
046340,002930: 01,2451 04621 TC SWCALL -1 # SO A "TC Q" FROM ROUTINE LEADS TO DANZIG
046341,002931:
046342,002932: 01,2452 10154 BHIZ CCS MPAC
046343,002933: 01,2453 16061 TCF DANZIG
046344,002934: 01,2454 16646 TCF GOTO
046345,002935: 01,2455 16061 TCF DANZIG
046346,002936: 01,2456 16646 TCF GOTO
046347,002937:
046348,002938: 01,2457 10121 BOV(B) CCS OVFIND # BRANCH ON OVERFLOW TO BASIC OR INTERP.
046349,002939: 01,2460 12462 TCF +2
046350,002940: 01,2461 16061 TCF DANZIG
046351,002941: 01,2462 54121 TS OVFIND
046352,002942: 01,2463 10020 CCS CYR
046353,002943: 01,2464 12450 TCF RTB # IF BASIC.
046354,002944: 01,2465 00360 B5TOBB OCT 360
046355,002945: 01,2466 16646 TCF GOTO
046356,002946:
046357,002947: # Page 1091
046358,002948: 01,2467 10020 BZE/GOTO CCS CYR # SEE WHICH OP-CODE IS DESIRED.
046359,002949: 01,2470 06723 TC BRANCH # DO BZE.
046360,002950: 01,2471 16061 TCF DANZIG
046361,002951: 01,2472 16646 TCF GOTO # DO GOTO.
046362,002952: 01,2473 16061 TCF DANZIG
046363,002953:
046364,002954: 01,2474 10020 BPL/BMN CCS CYR
046365,002955: 01,2475 12503 TCF BPL
046366,002956: 01,2476 12000 5B10 DEC 5 B+10 # SHIFTS OP CODE IN SWITCH INSTRUCTION ADR
046367,002957:
046368,002958: 01,2477 06723 TC BRANCH # DO BMN
046369,002959: 01,2500 16061 TCF DANZIG
046370,002960: 01,2501 16061 TCF DANZIG
046371,002961: 01,2502 16646 TCF GOTO # ONLY IF NNZ.
046372,002962:
046373,002963: 01,2503 06723 BPL TC BRANCH
046374,002964: 01,2504 16646 TCF GOTO # IF POSITIVE OR ZERO.
046375,002965: 01,2505 16646 TCF GOTO
046376,002966: 01,2506 16061 TCF DANZIG
046377,002967:
046378,002968: 01,2507 10020 CALL/ITA CCS CYR
046379,002969: 01,2510 16640 TCF CALL
046380,002970:
046381,002971: 01,2511 05705 TC CCSHOLE
046382,002972: 01,2512 02427 TC 15ADRERS # STORE QPRET. (TAGSUB AFTER 15ADRERS IS
046383,002973: 01,2513 50120 INDEX FIXLOC # SLOW IN THIS CASE, BUT SAVES STORAGE.)
046384,002974: 01,2514 30052 CA QPRET
046385,002975: 01,2515 12367 TCF MSTORE1
046386,002976:
046387,002977: # Page 1092
046388,002978: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR ALTERING AND TESTING INTERPRETATIVE SWITCHES:
046389,002979:
046390,002980: # 00 BONSET SET A SWITCH AND DO A GOTO IF IT WAS ON.
046391,002981: # 01 SETGO SET A SWITCH AND DO A GOTO.
046392,002982: # 02 BOFSET SET A SWITCH AND DOA GOTO IF IT WAS OFF
046393,002983: # 03 SET SET A SWITCH.
046394,002984:
046395,002985: # 04 BONINV INVERT A SWITCH AND BRANCH IF IT WAS ON.
046396,002986: # 05 INVGO INVERT A SWITCH AND DO A GOTO.
046397,002987: # 06 BOFINV INVERT A SWITCH AND BRANCH IF IT WAS OFF
046398,002988: # 07 INVERT INVERT A SWITCH.
046399,002989:
046400,002990: # 10 BONCLR CLEAR A SWITCH AND BRANCH IF IT WAS ON.
046401,002991: # 11 CLRGO CLEAR A SWITCH AND DO A GOTO.
046402,002992: # 12 BOFCLR CLEAR A SWITCH AND BRANCH IF IT WAS OFF.
046403,002993: # 13 CLEAR CLEAR A SWITCH.
046404,002994:
046405,002995: # 14 BON BRANCH IF A SWITCH WAS ON.
046406,002996: # 16 BOFF BRANCH IF A SWITCH WAS OFF.
046407,002997:
046408,002998: # THE ADDRESS SUPPLIED WITH THE SWITCH INSTRUCTION IS INTERPRETED AS FOLLOWS:
046409,002999:
046410,003000: # BITS 1-4 SWITCH BIT NUMBER (1-15).
046411,003001: # BITS 5-8 SWITCH OPERATION NUMBER
046412,003002: # BITS 9- SWITCH WORD NUMBER (UP TO 64 SWITCH WORDS).
046413,003003:
046414,003004: # THE ADDRESS ITSELF IS MADE UP BY THE YUL SYSTEM ASSEMBLER. THE BRANCH INSTRUCTIONS REQUIRE TWO
046415,003005: # ADDRESSES, THE SECOND TAKEN AS THE DIRECT (OR INDIRECT IF IN ERASABLE) ADDRESS OF THE BRANCH.
046416,003006:
046417,003007: 01,2516 34762 SWITCHES CAF LOW4 # LEAVE THE SWITCH BIT IN SWBIT.
046418,003008: 01,2517 70117 MASK POLISH
046419,003009: 01,2520 50000 INDEX A
046420,003010: 01,2521 34735 CAF BIT15 # (NUMBER FROM LEFT TO RIGHT.)
046421,003011: 01,2522 54131 TS SWBIT
046422,003012:
046423,003013: 01,2523 34745 CAF BIT7 # LEAVE THE SWITCH NUMBER IN SWWORD.
046424,003014: 01,2524 00006 EXTEND
046425,003015: 01,2525 70117 MP POLISH
046426,003016: 01,2526 54130 TS SWWORD
046427,003017:
046428,003018: 01,2527 00004 INHINT # DURING SWITCH CHANGE SO RUPT CAN USE TOO
046429,003019: 01,2530 50000 INDEX A # LEAVE THE SWITCH WORD ITSELF IN L.
046430,003020: 01,2531 30074 CA STATE
046431,003021: 01,2532 54002 TS Q # Q WILL BE USED AS A CHANNEL.
046432,003022: # Page 1093
046433,003023: 01,2533 34741 CAF BIT11
046434,003024: 01,2534 00006 EXTEND # DISPATCH SWITCH BIT OPERATION AS IN BITS
046435,003025: 01,2535 70117 MP POLISH # 7-8 OF POLISH.
046436,003026: 01,2536 72576 MASK B3TOB4 # GETS 4X2-BIT CODE.
046437,003027: 01,2537 50000 INDEX A
046438,003028: 01,2540 12541 TCF +1
046439,003029:
046440,003030: 01,2541 30131 +1 CA SWBIT # 00 -- SET SWITCH IN QUESTION.
046441,003031: 01,2542 00006 EXTEND
046442,003032: 01,2543 04002 ROR QCHAN
046443,003033: 01,2544 12553 TCF SWSTORE
046444,003034:
046445,003035: 01,2545 30131 +5 CA SWBIT # 01 -- INVERT SWITCH.
046446,003036: 01,2546 00006 EXTEND
046447,003037: 01,2547 06002 RXOR QCHAN
046448,003038: 01,2550 12553 TCF SWSTORE
046449,003039:
046450,003040: 01,2551 40131 +9D CS SWBIT # 10 -- CLEAR.
046451,003041: 01,2552 70002 MASK Q
046452,003042: 01,2553 50130 SWSTORE INDEX SWWORD
046453,003043: 01,2554 54074 TS STATE # NEW SWITCH WORD.
046454,003044:
046455,003045: # Page 1094
046456,003046: 01,2555 00003 +13D RELINT # 11 -- NOOP.
046457,003047: 01,2556 34737 CAF BIT13
046458,003048: 01,2557 00006 EXTEND # DISPATCH SEQUENCE CHANGING OR BRANCING
046459,003049: 01,2560 70117 MP POLISH # CODE.
046460,003050: 01,2561 72576 MASK B3TOB4
046461,003051: 01,2562 50000 INDEX A
046462,003052: 01,2563 12564 TCF +1 # ORIGINALLY STORED IN BITS 5-6
046463,003053:
046464,003054: 01,2564 40002 +1 CS Q # 00 -- BRANCH IF ON.
046465,003055: 01,2565 70131 TEST MASK SWBIT
046466,003056: 01,2566 10000 CCS A
046467,003057: 01,2567 12577 TCF SWSKIP
046468,003058:
046469,003059: 01,2570 16715 +5 TCF SWBRANCH # 01 -- GO TO.
046470,003060:
046471,003061: 01,2571 12577 TCF SWSKIP # HERE ONLY ON BIT 15.
046472,003062:
046473,003063: 01,2572 05705 TC CCSHOLE
046474,003064: 01,2573 05705 TC CCSHOLE
046475,003065:
046476,003066: 01,2574 30002 +9D CA Q # 10 -- BRANCH IF OFF.
046477,003067: 01,2575 12565 TCF TEST
046478,003068:
046479,003069: 01,2576 00014 B3TOB4 OCT 0014
046480,003070: 01,2577 24164 SWSKIP INCR LOC
046481,003071:
046482,003072: 01,2600 01,2516 SW/ EQUALS SWITCHES
046483,003073:
046484,003074: 01,2600 16061 +13D TCF DANZIG # 11 -- NOOP.
046485,003075:
End of include-file INTERPRETER.agc. Parent file is MAIN.agc