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