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