Source Code
042159,000001: # Copyright: Public domain.
042160,000002: # Filename: INTERPRETER.agc
042161,000003: # Purpose: A section of Luminary 1C, revision 131.
042162,000004: # It is part of the source code for the Lunar Module's (LM)
042163,000005: # Apollo Guidance Computer (AGC) for Apollo 13 and Apollo 14.
042164,000006: # This file is intended to be a faithful transcription, except
042165,000007: # that the code format has been changed to conform to the
042166,000008: # requirements of the yaYUL assembler rather than the
042167,000009: # original YUL assembler.
042168,000010: # Reference: pp. 1001-1093 of 1729.pdf.
042169,000011: # Contact: Ron Burkey <info@sandroid.org>.
042170,000012: # Website: www.ibiblio.org/apollo/index.html
042171,000013: # Mod history: 05/06/03 RSB. Began transcribing.
042172,000014: # 11/24/03 RSB. Made some obvious corrections to the comments.
042173,000015: # 05/14/05 RSB. Corrected website reference above.
042174,000016: # 2010-10-25 JL Indentation fixes.
042175,000017: # 2011-05-07 JL Removed workarounds.
042176,000018:
042177,000019: # Page 1001
042178,000020: # SECTION 1: DISPATCHER
042179,000021:
042180,000022: # ENTRY TO THE INTERPRETER. INTPRET SETS LOC TO THE FIRST INSTRUCTION, BANKSET TO THE BBANK OF THE
042181,000023: # OBJECT INTERPRETIVE PROGRAM, AND INTBIT15 TO THE BIT15 CONTENTS OF FBANK. INTERPRETIVE PROGRAMS MAY BE IN
042182,000024: # VIRTUALLY ALL BANKS PRESENT UNDER ANY SUPER-BANK SETTING, WITH THE RESTRICTION THAT PROGRAMS IN HIGH BANKS
042183,000025: # (BIT15 OF FBANK = 1) DO NOT REFER TO LOWBANKS, AND VICE-VERSA. THE INTERPRETER DOES NOT SWITCH SUPERBANKS.
042184,000026: # E-BANK SWITCHING OCCURS WHENEVER GENERAL ERASABLE (100-3777) IS ADDRESSED.
042185,000027:
042186,000028: 6042 BLOCK 03
042187,000029:
042188,000030: 6042 COUNT* $$/INTER
042189,000031: 6042 00003 INTPRET RELINT
042190,000032: 6043 00006 EXTEND # SET LOC TO THE WORD FOLLOWING THE TC.
042191,000033: 6044 22164 QXCH LOC
042192,000034: 6045 30006 +2 CA BBANK # INTERPRETIVE BRANCHES FINISH HERE.
042193,000035: 6046 54165 TS BANKSET
042194,000036: 6047 74735 MASK BIT15 # GET 15TH BIT FOR INDEXABLE ADDRESSES.
042195,000037: 6050 54115 TS INTBIT15
042196,000038:
042197,000039: 6051 54023 TS EDOP # MAKE SURE NO INSTRUCTIONS LEFT OVER
042198,000040:
042199,000041: 6052 16073 TCF NEWOPS # PICK UP OP CODE PAIR AND BEGIN.
042200,000042:
042201,000043: 6053 22006 INTRSM LXCH BBANK # RESUME SUSPENDED INTERPRETIVE JOB
042202,000044: 6054 16045 TCF INTPRET +3
042203,000045:
042204,000046: # DLOAD LOADS MPAC, MPAC +1, LEAVING ZERO IN MPAC +2.
042205,000047:
042206,000048: 6055 00006 DLOAD EXTEND
042207,000049: 6056 50116 INDEX ADDRWD
042208,000050: 6057 30001 DCA 0 # LOAD DP C(C(ADDRWD)) INT MPAC,MPAC +1
042209,000051: 6060 52155 SLOAD2 DXCH MPAC
042210,000052: 6061 34755 CAF ZERO # ZERO MPAC +2
042211,000053:
042212,000054: # Page 1002
042213,000055: # AT THE END OF MOST INSTRUCTIONS, CONTROL IS GIVEN TO DANZIG TO DISPATCH THE NEXT OPERATION.
042214,000056:
042215,000057: 6062 54156 TS MPAC +2 # AND DECLARE DP MODE
042216,000058:
042217,000059: 6063 54163 NEWMODE TS MODE # PROLOGUE FOR MODE-CHANGING INSTRUCTIONS.
042218,000060:
042219,000061: 6064 30165 DANZIG CA BANKSET # SET BBANK BEFORE TESTING NEWJOB SO THAT
042220,000062: 6065 54006 TS BBANK # IT MAY BE SAVED DIRECTLY BY CHANJOB.
042221,000063:
042222,000064: 6066 10023 NOIBNKSW CCS EDOP # SEE IF AN ORDER CODE IS LEFT OVER FROM
042223,000065: 6067 16102 TCF OPJUMP # THE LAST PAIR RETRIEVED. IF SO, EXECUTE.
042224,000066: # EDOP IS SET TO ZERO ON ITS RE-EDITIING.
042225,000067:
042226,000068: 6070 10067 CCS NEWJOB # SEE IF A JOB OF HIGHER PRIORITY IS
042227,000069: 6071 15126 TCF CHANG2 # PRESENT, AND IF SO, CHANGE JOBS.
042228,000070:
042229,000071: 6072 24164 INCR LOC # ADVANCE THE LOCATION COUNTER.
042230,000072:
042231,000073: # ITRACE (1) REFERS TO "NEWOPS"
042232,000074: 6073 50164 NEWOPS INDEX LOC # ENTRY TO BEGIN BY PICKING OP CODE PAIR.
042233,000075: 6074 30000 CA 0 # MAY BE AN OPCODE PAIR OR A STORE CODE.
042234,000076: 6075 10000 CCS A # TEST SIGN AND GET DABS(A).
042235,000077: 6076 16365 TCF DOSTORE # PROCESS STORE CODE.
042236,000078:
042237,000079: 6077 00177 LOW7 OCT 177
042238,000080:
042239,000081: 6100 54023 TS EDOP # OP CODE PAIR. LEAVE THE OTHER IN EDOP
042240,000082: 6101 76077 MASK LOW7 # WHERE CCS EDOP WILL HONOR IT NEXT.
042241,000083:
042242,000084: 6102 54020 OPJUMP TS CYR # LOWWD ENTERS HERE IF A RIGHT-HAND OP
042243,000085: 6103 10020 CCS CYR # CODE IS TO BE PROCESSED. TEST PREFICES.
042244,000086: 6104 16252 TCF OPJUMP2 # TEST SECOND PREFIX BIT.
042245,000087:
042246,000088: 6105 16746 TCF EXIT # +0 OP CODE IS EXIT
042247,000089:
042248,000090: # Page 1003
042249,000091: # PROCESS ADDRESSES WHICH MAY BE DIRECT, INDEXED, OR REFERENCE THE PUSHDOWN LIST.
042250,000092:
042251,000093: 6106 74753 ADDRESS MASK BIT1 # SEE IF ADDRESS IS INDEXED. CYR CONTAINED
042252,000094: 6107 10000 CCS A # 400XX, SO BIT 1 IS NOW AS IT WAS IN CYR.
042253,000095: 6110 16151 TCF INDEX # FORM INDEXED ADDRESS.
042254,000096:
042255,000097: 6111 50164 DIRADRES INDEX LOC # LOOK AHEAD TO NEXT WORD TO SEE IF
042256,000098: 6112 40001 OCT40001 CS 1 # ADDRESS IS GIVEN.
042257,000099: 6113 10000 CCS A
042258,000100: 6114 16220 TCF PUSHUP # IF NOT.
042259,000101:
042260,000102: 6115 77773 NEG4 DEC -4 B-14
042261,000103:
042262,000104: 6116 24164 INCR LOC # IF SO, TO SHOW WE PICKED UP A WORD.
042263,000105: 6117 54116 TS ADDRWD
042264,000106:
042265,000107: # Page 1004
042266,000108: # FINAL DIGESTION OF DIRECT ADDRESSES OF OP CODES WITH 01 PREFIX IS DONE HERE. IN EACH CASE, THE
042267,000109: # REQUIRED 12-BIT SUB-ADDRESS IS LEFT IN ADDRWD, WITH ANY REQUIRED E OR F BANK SWITCHING DONE. ADDRESSES LESS
042268,000110: # 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.
042269,000111:
042270,000112: 6120 66254 AD -ENDVAC # SEE IF ADDRESS RELATIVE TO WORK AREA.
042271,000113: 6121 10000 CCS A
042272,000114: 6122 67746 AD -ENDERAS # IF NOT, SEE IF IN GENERAL ERASABLE.
042273,000115: 6123 16130 TCF IERASTST
042274,000116:
042275,000117: 6124 30120 NETZERO CA FIXLOC # IF SO, LEAVE THE MODIFIED ADDRESS IN
042276,000118: 6125 26116 ADS ADDRWD # ADDRWD AND DISPATCH.
042277,000119: 6126 50020 ITR15 INDEX CYR # THIS INDEX MAKES THE NEXT INSTRUCTION
042278,000120: 6127 76276 7 INDJUMP -1 # TCF INDJUMP + OP, EDITING CYR.
042279,000121:
042280,000122: 6130 00006 IERASTST EXTEND
042281,000123: 6131 66141 BZMF GEADDR # GO PROCESS GENERAL-ERASABLE ADDRESS.
042282,000124:
042283,000125: 6132 75012 MASK LOW10 # FIXED BANK ADDRESS. RESTORE AND ADD B15.
042284,000126: 6133 65012 AD LOW10 # SWITCH BANKS AND LEAVE SUBADDRESS IN
042285,000127: 6134 56116 XCH ADDRWD # ADDRWD FOR OPERAND RETRIEVAL. (THIS
042286,000128: 6135 60115 AD INTBIT15 # METHOD PRECLUDES USE OF THE LAST
042287,000129: 6136 54004 TS FBANK # LOCATION IN EACH FBANK.)
042288,000130: 6137 50020 ITR12 INDEX CYR
042289,000131: 6140 76276 7 INDJUMP -1
042290,000132:
042291,000133: 6141 74357 GEADDR MASK LOW8
042292,000134: 6142 65007 AD OCT1400
042293,000135: 6143 56116 XCH ADDRWD
042294,000136: 6144 54003 TS EBANK
042295,000137: 6145 50020 ITR10 INDEX CYR
042296,000138: 6146 76276 7 INDJUMP -1
042297,000139:
042298,000140: # Page 1005
042299,000141: # THE FOLLOWING ROUTINE PROCESSES INTERPRETIVE INDEXED ADDRESSES. AN INTERPRETER INDEX REGISTER MAY
042300,000142: # CONTAIN THE ADDRESS OF ANY ERASABLE REGISTER (0-42 BEING RELATIVE TO THE VAC AREA) OR ANY INTERPRETIVE PROGRAM
042301,000143: # BANK, OR ANY INTEGER IN THAT RANGE.
042302,000144:
042303,000145: 6147 37736 DODLOAD* CAF DLOAD* # STODL* COMES HERE TO PROCESS LOAD ADR.
042304,000146: 6150 54020 TS CYR # (STOVL* ENTERS HERE).
042305,000147:
042306,000148: 6151 30120 INDEX CA FIXLOC # SET UP INDEX LOCATION.
042307,000149: 6152 54130 TS INDEXLOC
042308,000150: 6153 24164 INCR LOC # (ADDRESS ALWAYS GIVEN).
042309,000151: 6154 50164 INDEX LOC
042310,000152: 6155 40000 CS 0
042311,000153: 6156 10000 CCS A # INDEX 2 IF ADDRESS STORED COMPLEMENTED.
042312,000154: 6157 24130 INCR INDEXLOC
042313,000155: 6160 16161 NOOP
042314,000156:
042315,000157: 6161 54116 TS ADDRWD # 14 BIT ADDRESS TO ADDRWD.
042316,000158: 6162 77745 MASK HIGH4 # IF ADDRESS GREATER THAN 2K, ADD INTBIT15
042317,000159: 6163 00006 EXTEND
042318,000160: 6164 16167 BZF INDEX2
042319,000161: 6165 30115 CA INTBIT15
042320,000162: 6166 26116 ADS ADDRWD
042321,000163:
042322,000164: 6167 50130 INDEX2 INDEX INDEXLOC
042323,000165: 6170 40046 CS X1
042324,000166: 6171 26116 ADS ADDRWD # DO AUGMENT, IGNORING AND CORRECTING OVF.
042325,000167:
042326,000168: 6172 77747 MASK HIGH9 # SEE IF ADDRESS IS IN WORK AREA.
042327,000169: 6173 00006 EXTEND
042328,000170: 6174 16207 BZF INDWORK
042329,000171: 6175 77745 MASK HIGH4 # SEE IF IN FIXED BANK.
042330,000172: 6176 00006 EXTEND
042331,000173: 6177 16211 BZF INDERASE
042332,000174:
042333,000175: 6200 30116 CA ADDRWD # IN FIXED -- SWITCH BANKS AND CREATE
042334,000176: 6201 54004 TS FBANK # SUB-ADDRESS
042335,000177: 6202 75012 MASK LOW10
042336,000178: 6203 64741 AD 2K
042337,000179: 6204 54116 TS ADDRWD
042338,000180: 6205 50020 ITR11 INDEX CYR
042339,000181: 6206 36276 3 INDJUMP -1
042340,000182:
042341,000183: 6207 30120 INDWORK CA FIXLOC # MAKE ADDRWD RELATIVE TO WORK AREA.
042342,000184: 6210 16215 TCF ITR13 -1
042343,000185:
042344,000186: 6211 35007 INDERASE CA OCT1400
042345,000187: 6212 56116 XCH ADDRWD
042346,000188: 6213 54003 TS EBANK
042347,000189: 6214 74357 MASK LOW8
042348,000190: 6215 26116 -1 ADS ADDRWD
042349,000191: # Page 1006
042350,000192: 6216 50020 ITR13 INDEX CYR
042351,000193: 6217 36276 3 INDJUMP -1
042352,000194:
042353,000195: # Page 1007
042354,000196: # PUSH-UP ROUTINES. WHEN NO OPERAND ADDRESS IS GIVEN, THE APPROPRIATE OPERAND IS TAKEN FROM THE PUSH-DOWN
042355,000197: # LIST. IN MOST CASES THE MODE OF THE RESULT (VECTOR OR SCALAR) OF THE LAST ARTGHMETIC OPERATION PERFORMED
042356,000198: # IS THE SAME AS THE TYPE OF OPERAND DESIRED (ALL ADD/SUBTRACT ETC.). EXCEPTIONS TO THIS GENERAL RULE ARE LISTED
042357,000199: # BELOW (NOTE THAT IN EVERY CASE THE MODE REGISTER IS LEFT INTACT):
042358,000200:
042359,000201: # 1. VXSC AND V/SC WANT THE OPPOSITE TYPE OF OPERAND, E.G., IF THE LAST OPERATION YIELDED A VECTOR
042360,000202: # RESULT, VXSC WANTS A SCALAR.
042361,000203:
042362,000204: # 2. THE LOAD CODES SHOULD LOAD THE ACCUMULATOR INDEPENDENT OF THE RESULT OF THE LAST OPERATION. THIS
042363,000205: # INCLUDES VLOAD, DLOAD, TLOAD, PDDL, AND PDVL (NO PUSHUP WITH SLOAD).
042364,000206:
042365,000207: # 3. SOME ARITHMETIC OPERATIONS REQUIRE A STANDARD TYPE OF OPERAND REGARDLESS OF THE PREVIOUS OPERATION.
042366,000208: # THIS INCLUDES SIGN WANTING DP AND TAD REQUIRING TP.
042367,000209:
042368,000210: 6220 34360 PUSHUP CAF OCT23 # IF THE LOW 5 BITS OF CYR ARE LESS THAN
042369,000211: 6221 70020 MASK CYR # 20, THIS OP REQUIRES SPECIAL ATTENTION.
042370,000212: 6222 66225 AD -OCT10 # (NO -0).
042371,000213: 6223 10000 CCS A
042372,000214: 6224 16236 TCF REGUP # FOR ALL CODES GREATEER THAN OCT 7.
042373,000215:
042374,000216: 6225 77767 -OCT10 OCT -10
042375,000217:
042376,000218: 6226 66115 AD NEG4 # WE NOW HAVE 7 -- OP CODE (MOD4). SEE IF
042377,000219: 6227 10000 CCS A # THE OP CODE (MOD4) IS THREE (REVERSE).
042378,000220: 6230 50000 INDEX A # NO -- THE MODE IS DEFINITE. PICK UP THE
042379,000221: 6231 46247 CS NO.WDS
042380,000222: 6232 16240 TCF REGUP +2
042381,000223:
042382,000224: 6233 50163 INDEX MODE # FOR VXSC AND V/SC WE WANT THE REQUIRED
042383,000225: 6234 46245 CS REVCNT # PUSHLOC DECREMENT WITHOUT CHANGING THE
042384,000226: 6235 16240 TCF REGUP +2 # MODE AT THE IS TIME.
042385,000227:
042386,000228: 6236 50163 REGUP INDEX MODE # MOST ALL OP CODES PUSHUP HERE.
042387,000229: 6237 46247 CS NO.WDS
042388,000230: 6240 26166 +2 ADS PUSHLOC
042389,000231: 6241 54116 TS ADDRWD
042390,000232: 6242 50020 ITR14 INDEX CYR
042391,000233: 6243 76276 7 INDJUMP -1 # (THE INDEX MAKES THIS A TCF.)
042392,000234:
042393,000235: 6244 00002 OCT 2 # REVERSE PUSHUP DECREMENT. VECTOR TAKES 2
042394,000236: 6245 00006 REVCNT OCT 6 # WORDS, SCALAR TAKES 6.
042395,000237: 6246 00006 OCT 6
042396,000238: 6247 00002 NO.WDS OCT 2 # CONVENTIONAL DECREMENT IS 6 WORDS VECTOR
042397,000239: 6250 00003 OCTAL3 OCT 3 # 2 IN DP, AND 3 IN TP.
042398,000240: 6251 00006 OCT 6
042399,000241:
042400,000242: # Page 1008
042401,000243: # TEST THE SECOND PREFIX BIT TO SEE IF THIS IS A MISCELLANEOUS OR A UNARY/SHORT SHIFT OPERATION.
042402,000244:
042403,000245: 6252 10020 OPJUMP2 CCS CYR # TEST SECOND PREFIX BIT.
042404,000246: 6253 16266 TCF OPJUMP3 # TEST THIRD BIT TO SEE IF UNARY OR SHIFT
042405,000247:
042406,000248: 6254 77722 -ENDVAC DEC -45 B-14
042407,000249:
042408,000250: # THE FOLLOWING ROUTINE PROCESSES ADDRESSES OF SUFFIX CLASS 10. THEY ARE BASICALLY WORK AREA ADDRESSES
042409,000251: # IN THE RANGE 0-52, ERASABLE ECADR CONSTANTS FROM 100-3777, AND FCADRS ABOVE THAT. ALL 15 BITS ARE AVAILABLE
042410,000252: # IN CONTRAST TO SUFFIX 1, IN WHICH ONLY THE LOW ORDER 14 ARE AVAILABLE.
042411,000253:
042412,000254: 6255 24164 15BITADR INCR LOC # (ENTRY HERE FROM STCALL).
042413,000255: 6256 50164 INDEX LOC # PICK UP ADDRESS WORD.
042414,000256: 6257 30000 CA 0
042415,000257: 6260 54117 TS POLISH # WE MAY NEED A SUBADDRESS LATER.
042416,000258:
042417,000259: 6261 35013 CAF LOW7+2K # THESE INSTRUCTIONS ARE IN BANK 1.
042418,000260: 6262 54004 TS FBANK
042419,000261: 6263 70020 MASK CYR
042420,000262: 6264 50000 ITR7 INDEX A
042421,000263: 6265 16337 TCF MISCJUMP
042422,000264:
042423,000265: # Page 1009
042424,000266: # COMPLETE THE DISPATCHING OF UNARY AND SHORT SHIFT OPERATIONS.
042425,000267:
042426,000268: 6266 54004 OPJUMP3 TS FBANK # CALL IN BANK 0 (BIT5S 11-15 OF A ARE 0.)
042427,000269:
042428,000270: 6267 10020 CCS CYR # TEST THIRD PREFIX BIT.
042429,000271: 6270 50000 INDEX A # THE DECREMENTED UNARY CODE IS IN BITS
042430,000272: 6271 12000 TCF UNAJUMP # 1-4 OF A (ZERO, EXIT, HAS BEEN DETECTED)
042431,000273:
042432,000274: 6272 10163 CCS MODE # IT'S A SHORT SHIFT CODE. SEE IF PRESENT
042433,000275: 6273 12017 TCF SHORTT # SCALAR OR VECTOR.
042434,000276: 6274 12017 TCF SHORTT
042435,000277: 6275 12121 TCF SHORTV # CALLS THE APPROPRIATE ROUTINE.
042436,000278:
042437,000279: 6276 4350 FBANKMSK EQUALS BANKMASK
042438,000280: 6276 00122 LVBUF ADRES VBUF
042439,000281:
042440,000282: # Page 1010
042441,000283: # THE FOLLOWING IS THE JUMP TABLE FOR OP CODES WHICH MAY HAVE INDEXABLE ADDRESSES OR MAY PUSH UP.
042442,000284:
042443,000285: 6277 16510 INDJUMP TCF VLOAD # 00 -- LOAD MPAC WITH A VECTOR.
042444,000286: 6300 17074 TCF TAD # 01 -- TRIPLE PRECISION ADD TO MPAC.
042445,000287: 6301 17660 TCF SIGN # 02 -- COMPLEMENT MPAC (V OR SC) IF X NEG.
042446,000288: 6302 17404 TCF VXSC # 03 -- VECTOR TIMES SCALAR.
042447,000289: 6303 16706 TCF CGOTO # 04 -- COMPUTED GO TO.
042448,000290: 6304 16473 TCF TLOAD # 05 -- LOAD MPAC WITH TRIPLE PRECISION.
042449,000291: 6305 16055 TCF DLOAD # 06 -- LOAD MPAC WITH A DP SCALAR.
042450,000292: 6306 17627 TCF V/SC # 07 -- VECTOR DIVIDED BY A SCALAR.
042451,000293:
042452,000294: 6307 16504 TCF SLOAD # 10 -- LOAD MPACIN SINGLE PRECISION.
042453,000295: 6310 16623 TCF SSP # 11 -- SET SINGLE PRECISION INTO X.
042454,000296: 6311 16526 TCF PDDL # 12 -- PUSH DOWN MPAC AND RE-LOAD IN DP.
042455,000297: 6312 17337 TCF MXV # 13 -- MATRIX POST-MULTIPLIED BY VECTOR.
042456,000298: 6313 16562 TCF PDVL # 14 -- PUSH DOWN AND VECTORLOAD.
042457,000299: 6314 16631 TCF CCALL # 15 -- COMPUTED CALL.
042458,000300: 6315 17342 TCF VXM # 16 -- MATRIX PRE-MULTIPLIED BY VECTOR.
042459,000301: 6316 17621 TCF TSLC # 17 -- NORMALIZE MPAC (SCALAR ONLY).
042460,000302:
042461,000303: 6317 17577 TCF DMPR # 20 -- DP MULTIPLY AND ROUND.
042462,000304: 6320 17602 TCF DDV # 21 -- DP DIVIDE BY.
042463,000305: 6321 17606 TCF BDDV # 22 -- DP DIVIDE INTO.
042464,000306: 6322 17624 TCF GSHIFT # 23 -- GENERAL SHIFT INSTRUCTION
042465,000307: 6323 16754 TCF VAD # 24 -- VECTOR ADD.
042466,000308: 6324 16752 TCF VSU # 25 -- VECTOR SUBTRACT.
042467,000309: 6325 17041 TCF BVSU # 26 -- VECTOR SUBTRACT FROM.
042468,000310: 6326 17334 TCF DOT # 27 -- VECTOR DOT PRODUCT.
042469,000311:
042470,000312: 6327 17463 TCF VXV # 30 -- VECTOR CROSS PRODUCT.
042471,000313: 6330 17430 TCF VPROJ # 31 -- VECTOR PROJECTION.
042472,000314: 6331 17010 TCF DSU # 32 -- DP SUBTRACT.
042473,000315: 6332 17065 TCF BDSU # 33 -- DP SUBTRACT FROM.
042474,000316: 6333 17000 TCF DAD # 34 -- DP ADD.
042475,000317: 6334 16334 TCF +0 # 35 -- AVAILABLE
042476,000318: 6335 17575 TCF DMP1 # 36 -- DP MULTIPLY.
042477,000319: 6336 17616 TCF SETPD # 37 -- SET PUSH DOWN POINTER (DIRECT ONLY)
042478,000320:
042479,000321: # CODES 10 AND 14 MUST NOT PUSH UP. CODE 04 MAY BE USED FOR VECTOR DECLARE BEFORE PUSHUP IF DESIRED.
042480,000322:
042481,000323: # Page 1011
042482,000324: # THE FOLLOWING JUMP TABLE APPLIES TO INDEX, BRANCH, AND MISCELLANEOUS INSTRUCTIONS.
042483,000325:
042484,000326: 6337 12345 MISCJUMP TCF AXT # 00 -- ADDRESS TO INDEX TRUE.
042485,000327: 6340 12352 TCF AXC # 01 -- ADDRESS TO INDEX COMPLEMENTED.
042486,000328: 6341 12355 TCF LXA # 02 -- LOAD INDEX FROM ERASABLE.
042487,000329: 6342 12361 TCF LXC # 03 -- LOAD INDEX FROM COMPLEMENT OF ERAS.
042488,000330: 6343 12365 TCF SXA # 04 -- STORE INDEX IN ERASABLE.
042489,000331: 6344 12373 TCF XCHX # 05 -- EXCHANGE INDEX WITH ERASABLE.
042490,000332: 6345 12407 TCF INCR # 06 -- INCREMENT INDEX REGISTER.
042491,000333: 6346 12416 TCF TIX # 07 -- TRANSFER ON INDEX.
042492,000334:
042493,000335: 6347 12401 TCF XAD # 10 -- INDEX REGISTER ADD FROM ERASABLE.
042494,000336: 6350 12412 TCF XSU # 11 -- INDEX SUBTRACT FROM ERASABLE.
042495,000337: 6351 12470 TCF BZE/GOTO # 12 -- BRANCH ZERO AND GOTO
042496,000338: 6352 12475 TCF BPL/BMN # 13 -- BRANCH PLUS AND BRANCH MINUS.
042497,000339: 6353 12450 TCF RTB/BHIZ # 14 -- RETURN TO BASIC AND BRANCH HI ZERO.
042498,000340: 6354 12510 TCF CALL/ITA # 15 -- CALL AND STORE QPRET.
042499,000341: 6355 12517 TCF SW/ # 16 -- SWITCH INSTRUCTIONS AND AVAILABLE.
042500,000342: 6356 12460 TCF BOV(B) # 17 -- BRANCH ON OVERFLOW TO BASIC OR INT.
042501,000343:
042502,000344: # Page 1012
042503,000345: 6357 COUNT* $$/INTER
042504,000346: 00,2000 BANK 0 # 00 -- EXIT -- DETECTED EARLIER.
042505,000347: 00,2000 13207 UNAJUMP TCF SQRT # 01 -- SQUARE ROOT.
042506,000348: 00,2001 13530 TCF SINE # 02 -- SIN.
042507,000349: 00,2002 13517 TCF COSINE # 03 -- COS.
042508,000350: 00,2003 13610 TCF ARCSIN # 04 -- ARC SIN.
042509,000351: 00,2004 13612 TCF ARCCOS # 05 -- ARC COS.
042510,000352: 00,2005 13174 TCF DSQ # 06 -- DP SQUARE.
042511,000353: 00,2006 12116 TCF ROUND # 07 -- ROUND TO DP.
042512,000354:
042513,000355: 00,2007 17673 TCF COMP # 10 -- COMPLEMENT VECTOR OR SCALAR
042514,000356: 00,2010 13232 TCF VDEF # 11 -- VECTOR DEFINE.
042515,000357: 00,2011 13023 TCF UNIT # 12 -- UNIT VECTOR.
042516,000358: 00,2012 13176 TCF ABVALABS # 13 -- LENGTH OF VECTOR OR MAG OF SCALAR.
042517,000359: 00,2013 13245 TCF VSQ # 14 -- SQUARE OF LENGTH OF VECTOR.
042518,000360: 00,2014 16357 TCF STADR # 15 -- PUSH UP ON STORE CODE.
042519,000361: 00,2015 13274 TCF RVQ # 16 -- RETURN VIA QPRET.
042520,000362: 00,2016 13247 TCF PUSH # 17 -- PUSH MPAC DOWN.
042521,000363:
042522,000364: # Page 1013
042523,000365: # SECTION 2 LOAD AND STORE PACKAGE.
042524,000366:
042525,000367: # A SET OF EIGHT STORE CODES IS PROVIDED AS THE PRIMARY METHOD OF STORING THE MULTI-PURPOSE
042526,000368: # ACCUMULATOR (MPAC). IF IN THE DANZIG SECTION LOC REFERS TO AN ALGEBRAICALLY POSITIVE WORD, IT IS TAKEN AS A
042527,000369: # STORE CODE WITH A CORRESPONDING ERASABLE ADDRESS. MOST OF THESE CODES ARE TWO ADDRESS, SPECIFYING THAT THE WORD
042528,000370: # FOLLOWING THE STORE CODE IS TO BE USED AS AN ADDRESS FROM WHICH TO RE-LOAD MPAC. FOUR OPTIONS ARE AVAILABLE:
042529,000371:
042530,000372: # 1. STORE STORE MPAC. THE E ADDRESS MAY BE INDEXED.
042531,000373: # 2. STODL STORE MPAC AND RE-LOAD IT IN DP WITH THE NEXT ADDRESS (THE LOAD MAY BE INDEXED).
042532,000374: # 3. STOVL STORE MPAC AND RE-LOAD A VECTOR (AS ABOVE).
042533,000375: # 4. STCALL STORE AND DO A CALL (BOTH ADDRESES MUST BE DIRECT HERE).
042534,000376:
042535,000377: # STODL AND STOVL WILL TAKE FROM THE PUSH-DOWN LIST IF NO LOAD ADDRESS IS GIVEN.
042536,000378:
042537,000379: 6357 BLOCK 3
042538,000380:
042539,000381: 6357 COUNT* $$/INTER
042540,000382: 6357 30165 STADR CA BANKSET # THE STADR CODE (PUSHUP UP ON STORE
042541,000383: 6360 54004 TS FBANK # ADDRESS) ENTERS HERE.
042542,000384: 6361 24164 INCR LOC
042543,000385: 6362 50164 ITR1 INDEX LOC # THE STORECODE WAS STORED COMPLEMENTED TO
042544,000386: 6363 40000 CS 0 # MAKE IT LOOK LIKE AN OPCODE PAIR.
042545,000387: 6364 67752 AD NEGONE # (YUL CAN'T REMOVE 1 BECAUSE OF EARLY CCS)
042546,000388:
042547,000389: 6365 54116 DOSTORE TS ADDRWD
042548,000390: 6366 74356 MASK LOW11 # ENTRY FROM DISPATCHER. SAVE THE ARASABLE
042549,000391: 6367 56116 XCH ADDRWD # ADDRESS AND JUMP ON THE STORE CODE NO.
042550,000392: 6370 77725 MASK B12T14
042551,000393: 6371 00006 EXTEND
042552,000394: 6372 74747 MP BIT5 # EACH TRANSFER VECTOR ENTRY IS TWO WORDS.
042553,000395: 6373 50000 INDEX A
042554,000396: 6374 16375 TCF STORJUMP
042555,000397:
042556,000398: # Page 1014
042557,000399: # STORE CODE JUMP TABLE. CALLS THE APPROPRIATE STORING ROUTINE AND EXITS TO DANZIG OR TO ADDRESS WITH
042558,000400: # A SUPPLIED OPERATION CODE.
042559,000401:
042560,000402: # STORE STORE,1 AND STORE,2 RETURN TO DANZIG, THUS RESETTING THE EBANK TO ITS STATE AT INTPRET.
042561,000403:
042562,000404: 6375 06425 STORJUMP TC STORE # STORE.
042563,000405: 6376 16064 TCF DANZIG # PICK UP NEW OP CODE(S).
042564,000406: 6377 06417 TC STORE,1
042565,000407: 6400 16064 TCF DANZIG
042566,000408: 6401 06422 TC STORE,2
042567,000409: 6402 16064 TCF DANZIG
042568,000410:
042569,000411: 6403 06425 TC STORE # STODL.
042570,000412: 6404 16463 TCF DODLOAD
042571,000413:
042572,000414: 6405 06425 TC STORE # STODL WITH INDEXED LOAD ADDRESS.
042573,000415: 6406 16147 TCF DODLOAD*
042574,000416:
042575,000417: 6407 06425 TC STORE # STOVL.
042576,000418: 6410 16466 TCF DOVLOAD
042577,000419:
042578,000420: 6411 06425 TC STORE # STOVL WITH INDEXED LOAD ADDRESS.
042579,000421: 6412 16471 TCF DOVLOAD*
042580,000422: 6413 06425 TC STORE # STOTC.
042581,000423: 6414 34766 CAF CALLCODE
042582,000424: 6415 54020 TS CYR
042583,000425: 6416 16255 TCF 15BITADR # GET A 15 BIT ADDRESS.
042584,000426:
042585,000427: # Page 1015
042586,000428: # STORE CODE ADDRESS PROCESSOR.
042587,000429:
042588,000430: 6417 50120 STORE,1 INDEX FIXLOC
042589,000431: 6420 40046 CS X1
042590,000432: 6421 16424 TCF PRESTORE
042591,000433:
042592,000434: 6422 50120 STORE,2 INDEX FIXLOC
042593,000435: 6423 40047 CS X2
042594,000436: 6424 26116 PRESTORE ADS ADDRWD # RESULTANT ADDRESS IS IN ERASABLE.
042595,000437:
042596,000438: 6425 40116 STORE CS ADDRWD
042597,000439: 6426 64772 AD DEC45
042598,000440: 6427 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
042599,000441: 6430 30120 CA FIXLOC # YES.
042600,000442: 6431 16436 TCF AHEAD5
042601,000443: 6432 35007 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
042602,000444: 6433 56116 XCH ADDRWD
042603,000445: 6434 54003 TS EBANK
042604,000446: 6435 74357 MASK LOW8
042605,000447: 6436 26116 AHEAD5 ADS ADDRWD
042606,000448:
042607,000449: # Page 1016
042608,000450: # STORING ROUTINES. STORE DP, TP, OR VECTOR AS INDICATED BY MODE.
042609,000451:
042610,000452: 6437 00006 STARTSTO EXTEND # MPAC,+1 MUST BE STORED IN ANY EVENT.
042611,000453: # ITRACE (5) REFERS TO "STARTSTO".
042612,000454: 6440 30155 DCA MPAC
042613,000455: 6441 50116 INDEX ADDRWD
042614,000456: 6442 52001 DXCH 0
042615,000457:
042616,000458: 6443 10163 CCS MODE
042617,000459: 6444 16457 TCF TSTORE
042618,000460: 6445 00002 TC Q
042619,000461:
042620,000462: 6446 00006 VSTORE EXTEND
042621,000463: 6447 30160 DCA MPAC +3
042622,000464: 6450 50116 INDEX ADDRWD
042623,000465: 6451 52003 DXCH 2
042624,000466:
042625,000467: 6452 00006 EXTEND
042626,000468: 6453 30162 DCA MPAC +5
042627,000469: 6454 50116 INDEX ADDRWD
042628,000470: 6455 52005 DXCH 4
042629,000471: 6456 00002 TC Q
042630,000472:
042631,000473: 6457 30156 TSTORE CA MPAC +2
042632,000474: 6460 50116 INDEX ADDRWD
042633,000475: 6461 54002 TS 2
042634,000476: 6462 00002 TC Q
042635,000477:
042636,000478: # Page 1017
042637,000479: # ROUTINES TO BEGIN PROCESSING OF THE SECOND ADDRES ASSOCIATED WITH ALL STORE-TYPE CODES EXCEPT STORE
042638,000480: # ITSELF.
042639,000481:
042640,000482: 6463 37735 DODLOAD CAF DLOADCOD
042641,000483: 6464 54020 TS CYR
042642,000484: 6465 16111 TCF DIRADRES # GO GET A DIRECT ADDRESS.
042643,000485:
042644,000486: 6466 34735 DOVLOAD CAF VLOADCOD
042645,000487: 6467 54020 TS CYR
042646,000488: 6470 16111 TCF DIRADRES
042647,000489:
042648,000490: 6471 36112 DOVLOAD* CAF VLOAD*
042649,000491: 6472 16150 TCF DODLOAD* +1 # PROLOGUE TO INDEX ROUTINE.
042650,000492:
042651,000493: # Page 1018
042652,000494: # THE FOLLOWING LOAD INSTRUCTIONS ARE PROVIDED FOR LOADING THE MULTI-PURPOSE ACCUMULATOR MPAC.
042653,000495:
042654,000496: 6473 50116 TLOAD INDEX ADDRWD
042655,000497: 6474 30002 CA 2 # LOAD A TRIPLE PRECISION ARGUMENT INTO
042656,000498: 6475 54156 TS MPAC +2 # THE FIRST THREE MPAC REGISTERS, WITH THE
042657,000499: 6476 00006 EXTEND # CONTENTS OF THE OTHER FOUR IRRELEVANT.
042658,000500: 6477 50116 INDEX ADDRWD
042659,000501: 6500 30001 DCA 0
042660,000502: 6501 52155 DXCH MPAC
042661,000503: 6502 34753 TMODE CAF ONE
042662,000504: 6503 16063 TCF NEWMODE # DECLEARE TRIPLE PRECISION MODE.
042663,000505:
042664,000506: 6504 22007 SLOAD ZL # LOAD A SINGLE PRECISION NUMBER INTO
042665,000507: 6505 50116 INDEX ADDRWD # MPAC, SETTING MPAC+1,2 TO ZERO. THE
042666,000508: 6506 30000 CA 0 # CONTENTS OF THE REMAINING MPAC REGISTERS
042667,000509: 6507 16060 TCF SLOAD2 # ARE IRRELEVANT.
042668,000510:
042669,000511: 6510 00006 VLOAD EXTEND # LOAD A DOUBLE PRECISION VECTOR INTO
042670,000512: 6511 50116 INDEX ADDRWD # MPAC,+1, MPAC+3,4, AND MPAC+5,6. THE
042671,000513: 6512 30001 DCA 0 # CONTENTS OF MPAC +2 ARE IRRELEVANT.
042672,000514: 6513 52155 DXCH MPAC
042673,000515:
042674,000516: 6514 00006 ENDVLOAD EXTEND # PDVL COMES HERE TO FINISH UP FOR DP, TP.
042675,000517: 6515 50116 INDEX ADDRWD
042676,000518: 6516 30003 DCA 2
042677,000519: 6517 52160 DXCH MPAC +3
042678,000520:
042679,000521: 6520 00006 +4 EXTEND # TPDVL FINISHES HERE.
042680,000522: 6521 50116 INDEX ADDRWD
042681,000523: 6522 30005 DCA 4
042682,000524: 6523 52162 DXCH MPAC +5
042683,000525:
042684,000526: 6524 44753 VMODE CS ONE # DECLARE VECTOR MODE.
042685,000527: 6525 16063 TCF NEWMODE
042686,000528:
042687,000529: # Page 1019
042688,000530: # THE FOLLOWING INSTRUCTIONS ARE PROVIDED FOR STORING OPERANDS IN THE PUSHDOWN LIST:
042689,000531: # 1. PUSH PUSHDOWN AND NO LOAD.
042690,000532: # 2. PDDL PUSHDOWN AND DOUBLE PRECISION LOAD.
042691,000533: # 3. PDVL PUSHDOWN AND VECTOR LOAD.
042692,000534:
042693,000535: 6526 00006 PDDL EXTEND
042694,000536: 6527 50116 INDEX ADDRWD # LOAD MPAC,+1, PUSHING THE FORMER
042695,000537: 6530 30001 DCA 0 # CONTENTS DOWN.
042696,000538: 6531 52155 DXCH MPAC
042697,000539: 6532 50166 INDEX PUSHLOC
042698,000540: 6533 52001 DXCH 0
042699,000541:
042700,000542: 6534 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER APPRO-
042701,000543: 6535 36247 CAF NO.WDS # PRIATELY.
042702,000544: 6536 26166 ADS PUSHLOC
042703,000545:
042704,000546: 6537 10163 CCS MODE
042705,000547: 6540 16555 TCF ENDTPUSH
042706,000548: 6541 16553 TCF ENDDPUSH
042707,000549:
042708,000550: 6542 54163 TS MODE # NOW DP.
042709,000551: 6543 54156 ENDVPUSH TS MPAC +2
042710,000552: 6544 52160 DXCH MPAC +3 # PUSH DOWN THE REST OF THE VECTOR HERE.
042711,000553: 6545 50166 INDEX PUSHLOC
042712,000554: 6546 51775 DXCH 0 -4
042713,000555:
042714,000556: 6547 52162 DXCH MPAC +5
042715,000557: 6550 50166 INDEX PUSHLOC
042716,000558: 6551 51777 DXCH 0 -2
042717,000559:
042718,000560: 6552 16064 TCF DANZIG
042719,000561:
042720,000562: 6553 54156 ENDDPUSH TS MPAC +2 # SET MPAC +2 TO ZERO AND EXIT ON DP.
042721,000563: 6554 16064 TCF DANZIG
042722,000564:
042723,000565: 6555 54163 ENDTPUSH TS MODE
042724,000566: 6556 56156 XCH MPAC +2 # ON TRIPLE, SET MPAC +2 TO ZERO, PUSHING
042725,000567: 6557 50166 +2 INDEX PUSHLOC # DOWN THE OLD CONTENTS
042726,000568: 6560 53777 TS 0 -1
042727,000569: 6561 16064 TCF DANZIG
042728,000570:
042729,000571: # Page 1020
042730,000572: # PDVL -- PUSHDOWN AND VECTOR LOAD
042731,000573:
042732,000574: 6562 00006 PDVL EXTEND # RELOAD MPAC AND PUSH DOWN ITS CONTENTS.
042733,000575: 6563 50116 INDEX ADDRWD
042734,000576: 6564 30001 DCA 0
042735,000577: 6565 52155 DXCH MPAC
042736,000578: 6566 50166 INDEX PUSHLOC
042737,000579: 6567 52001 DXCH 0
042738,000580:
042739,000581: 6570 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER.
042740,000582: 6571 36247 CAF NO.WDS
042741,000583: 6572 26166 ADS PUSHLOC
042742,000584:
042743,000585: 6573 10163 CCS MODE # TEST PAST MODE.
042744,000586: 6574 16613 TCF TPDVL
042745,000587: 6575 16514 TCF ENDVLOAD # JUST LOAD LAST FOUR REGISTERS ON DP.
042746,000588:
042747,000589: 6576 00006 VPDVL EXTEND # PUSHDOWN AND RE-LOAD LAST TWO COMPONENTS
042748,000590: 6577 50116 INDEX ADDRWD
042749,000591: 6600 30003 DCA 2
042750,000592: 6601 52160 DXCH MPAC +3
042751,000593: 6602 50166 INDEX PUSHLOC
042752,000594: 6603 51775 DXCH 0 -4
042753,000595:
042754,000596: 6604 00006 EXTEND
042755,000597: 6605 50116 INDEX ADDRWD
042756,000598: 6606 30005 DCA 4
042757,000599: 6607 52162 DXCH MPAC +5
042758,000600: 6610 50166 INDEX PUSHLOC
042759,000601: 6611 51777 DXCH 0 -2
042760,000602:
042761,000603: 6612 16064 TCF DANZIG
042762,000604:
042763,000605: 6613 00006 TPDVL EXTEND # ON TP, WE MUST LOAD THE Y COMPONENT
042764,000606: 6614 50116 INDEX ADDRWD # BEFORE STORING MPAC +2 IN CASE THIS IS A
042765,000607: 6615 30003 DCA 2 # PUSHUP.
042766,000608: 6616 52160 DXCH MPAC +3
042767,000609:
042768,000610: 6617 30156 CA MPAC +2
042769,000611: 6620 50166 INDEX PUSHLOC # IN DP.
042770,000612: 6621 53777 TS 0 -1
042771,000613: 6622 16520 TCF ENDVLOAD +4
042772,000614:
042773,000615: # SSP (STORE SINGLE PRECISION) IS EXECUTED HERE.
042774,000616:
042775,000617: 6623 24164 SSP INCR LOC # PICK UP THE WORD FOLLOWING THE GIVEN
042776,000618: 6624 50164 INDEX LOC # ADDRESS AND STORE IT AT X.
042777,000619: 6625 30000 CA 0
042778,000620: 6626 50116 STORE1 INDEX ADDRWD # SOME INDEX AND MISCELLANEOUS OPS END
042779,000621: 6627 54000 TS 0 # HERE.
042780,000622: # Page 1021
042781,000623: 6630 16064 TCF DANZIG
042782,000624:
042783,000625: # Page 1022
042784,000626: # SEQUENCE CHANGING AND SUBROUTINE CALLING OPTIONS.
042785,000627:
042786,000628: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR SEQUENCING CHANGING, BRANCHING, AND CALLING SUBROUTINES:
042787,000629: # 1. GOTO GO TO.
042788,000630: # 2. CALL CALL SUBROUTINE SETTING QPRET.
042789,000631: # 3. CGOTO COMPUTED GO TO.
042790,000632: # 4. CCALL COMPUTED CALL.
042791,000633: # 7. BPL BRANCH IF MPAC POSITIVE OR ZERO.
042792,000634: # 8. BZE BRANCH IF MPAC ZERO.
042793,000635: # 9. BMN BRANCH IF MPAC NEGATIVE NON-ZERO.
042794,000636:
042795,000637: 6631 24164 CCALL INCR LOC # MAINTAIN LOC FOR QPRET COMPUTATION
042796,000638: 6632 50164 INDEX LOC
042797,000639: 6633 30000 CAF 0 # GET BASE ADDRESS OF CADR LIST.
042798,000640: 6634 50116 INDEX ADDRWD
042799,000641: 6635 60000 AD 0 # ADD INCREMENT.
042800,000642: 6636 54004 TS FBANK # SELECT DESIRED CADR.
042801,000643: 6637 75012 MASK LOW10
042802,000644: 6640 50000 INDEX A
042803,000645: 6641 32000 CAF 10000
042804,000646: 6642 54117 TS POLISH
042805,000647:
042806,000648: 6643 30165 CALL CA BANKSET # FOR ANY OF THE CALL OPTIONS, MAKE UP THE
042807,000649: 6644 74350 MASK BANKMASK # ADDRESS OF THE NEXT OP-CODE PAIR/STORE
042808,000650: 6645 64350 AD BANKMASK # CODE AND LEAVE IT IN QPRET. NOTE THAT
042809,000651: 6646 60164 AD LOC # BANKMASK = -(2000 - 1).
042810,000652: 6647 50120 INDEX FIXLOC
042811,000653: 6650 54052 TS QPRET
042812,000654:
042813,000655: 6651 30117 GOTO CA POLISH # BASIC BRANCHING SEQUENCE.
042814,000656: 6652 77745 +1 MASK HIGH4
042815,000657: 6653 00006 EXTEND
042816,000658: 6654 16665 BZF GOTOERS # SEE IF ADDRESS POINTS TO FIXED OR ERAS.
042817,000659: 6655 30165 +4 CA BANKSET # SET EBANK PART OF BBANK. NEXT, SET UP
042818,000660: 6656 54006 TS BBANK # FBANK. THE COMBINATION IS PICKED UP &
042819,000661: 6657 30117 CA POLISH # PUT INTO BANKSET AT INTPRET +2.
042820,000662: 6660 54004 TS FBANK
042821,000663: 6661 75012 MASK LOW10
042822,000664: 6662 64741 AD 2K
042823,000665: 6663 54164 TS LOC
042824,000666: 6664 16045 TCF INTPRET +3
042825,000667:
042826,000668: 6665 E3,1400 EBANK= 1400 # SO YUL DOESN'T CUSS THE "CA 1400" BELOW.
042827,000669:
042828,000670: 6665 30117 GOTOERS CA POLISH # THE GIVEN ADDRESS IS IN ERASABLE -- SEE
042829,000671: 6666 66254 AD -ENDVAC # IF RELATIVE TO THE WORK ARA.
042830,000672: 6667 10000 CCS A
042831,000673: 6670 30117 CA POLISH # GENERAL ERASABLE.
042832,000674: 6671 16700 TCF GOTOGE
042833,000675:
042834,000676: # Page 1023
042835,000677: 6672 30120 CA FIXLOC # WORK AREA.
042836,000678: 6673 60117 AD POLISH
042837,000679: 6674 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
042838,000680: 6675 30000 CA 0 # THE BRANCH ADDRESS.
042839,000681: 6676 54117 TS POLISH
042840,000682: 6677 16652 TCF GOTO +1 # ALLOWS ARBITRARY INDIRECTNESS LEVELS.
042841,000683:
042842,000684: 6700 54003 GOTOGE TS EBANK
042843,000685: 6701 74357 MASK LOW8
042844,000686: 6702 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
042845,000687: 6703 31400 CA 1400 # THE BRANCH ADDRESS.
042846,000688: 6704 54117 TS POLISH
042847,000689: 6705 16652 TCF GOTO +1
042848,000690:
042849,000691: 6706 50164 CGOTO INDEX LOC # COMPUTED GO TO. PICK UP ADDRESS OF CADR
042850,000692: 6707 30001 CA 1 # LIST
042851,000693: 6710 50116 INDEX ADDRWD # ADD MODIFIER.
042852,000694: 6711 60000 AD 0
042853,000695: 6712 54004 TS FBANK # SELECT GOTO ADDRESS
042854,000696: 6713 75012 MASK LOW10
042855,000697: 6714 50000 INDEX A
042856,000698: 6715 32000 CA 10000
042857,000699: 6716 54117 TS POLISH
042858,000700: 6717 16652 TCF GOTO +1 # WITH ADDRESS IN A.
042859,000701:
042860,000702: 6720 30165 SWBRANCH CA BANKSET # SWITCH INSTRUCTIONS WHICH ELECT TO
042861,000703: 6721 54004 TS FBANK # BRANCH COME HERE TO DO SO.
042862,000704: 6722 50164 INDEX LOC
042863,000705: 6723 30001 CA 1
042864,000706: 6724 54117 TS POLISH
042865,000707: 6725 16652 TCF GOTO +1
042866,000708:
042867,000709: # Page 1024
042868,000710: # TRIPLE PRECISION BRANCHING ROUTINE. IF CALLING TC IS AT L, RETURN IS AS FOLLOWS:
042869,000711: # L+1 IF MPAC IS GREATER THAN ZERO.
042870,000712: # L+2 IF MPAC IS EQUAL TO +0 OR -0.
042871,000713: # L+3 IF MPAC IS LESS THAN ZERO.
042872,000714:
042873,000715: 6726 10154 BRANCH CCS MPAC
042874,000716: 6727 00002 TC Q
042875,000717: 6730 16732 TCF +2 # ON ZERO.
042876,000718: 6731 16744 TCF NEG
042877,000719:
042878,000720: 6732 10155 CCS MPAC +1
042879,000721: 6733 00002 TC Q
042880,000722: 6734 16736 TCF +2
042881,000723: 6735 16744 TCF NEG
042882,000724:
042883,000725: 6736 10156 CCS MPAC +2
042884,000726: 6737 00002 TC Q
042885,000727: 6740 16742 TCF +2
042886,000728: 6741 16744 TCF NEG
042887,000729:
042888,000730: 6742 50002 Q+1 INDEX Q
042889,000731: 6743 00001 TC 1
042890,000732:
042891,000733: 6744 50002 NEG INDEX Q # IF FIRST NON-ZERO REGISTER WAS NEGATIVE.
042892,000734: 6745 00002 TC 2
042893,000735:
042894,000736: 6746 6744 Q+2 = NEG
042895,000737:
042896,000738: # ITRACE (3) REFERS TO "EXIT".
042897,000739:
042898,000740: 6746 30165 EXIT CA BANKSET # RESTORE USER'S BANK SETTING, AND LEAVE
042899,000741: 6747 54006 TS BBANK # INTERPRETIVE MODE.
042900,000742: 6750 50164 INDEX LOC
042901,000743: 6751 00001 TC 1
042902,000744:
042903,000745: # Page 1025
042904,000746: # SECTION 3 -- ADD/SUBTRACT PACKAGE.
042905,000747:
042906,000748: # THE FOLLOWING OPERATIONS ARE PROVIDED FOR ADDING TO AND SUBTRACTING FROM THE MULTI-PURPOSE ACCUMULATOR
042907,000749: # MPAC:
042908,000750: # 1. DAD DOUBLE PRECISION ADD.
042909,000751: # 2. DSU DOUBLE PRECISION SUBTRACT.
042910,000752: # 3. BDSU DOUBLE PRECISION SUBTRACT FROM.
042911,000753: # 4. TAD TRIPLE PRECISION ADD.
042912,000754: # 5. VAD VECTOR ADD.
042913,000755: # 6. VSU VECTOR SUBTRACT.
042914,000756: # 7. BVSU VECTOR SUBTRACT FROM.
042915,000757: # THE INTERPRETIVE OVERFLOW INDICATOR OVFIND IS SET NON-ZERO IF OVERFLOW OCCURS IN ANY OF THE ABOVE.
042916,000758:
042917,000759: 6752 34735 VSU CAF BIT15 # CHANGES 0 TO DCS.
042918,000760: 6753 16755 TCF +2
042919,000761:
042920,000762: 6754 34355 VAD CAF PRIO30 # CHANGES 0 TO DCA.
042921,000763: 6755 26116 ADS ADDRWD
042922,000764: 6756 00006 EXTEND
042923,000765: 6757 50116 INDEX ADDRWD
042924,000766: 6760 00003 READ HISCALAR # DCA 2 OR DCS 2
042925,000767: 6761 20160 DAS MPAC +3
042926,000768: 6762 00006 EXTEND # CHECK OVERFLOW.
042927,000769: 6763 16765 BZF +2
042928,000770: 6764 07017 TC OVERFLWY
042929,000771:
042930,000772: 6765 00006 EXTEND
042931,000773: 6766 50116 INDEX ADDRWD
042932,000774: 6767 00005 READ CHAN5 # DCA 4 OR DCS 4
042933,000775: 6770 20162 DAS MPAC +5
042934,000776: 6771 00006 EXTEND
042935,000777: 6772 16774 BZF +2
042936,000778: 6773 07014 TC OVERFLWZ
042937,000779:
042938,000780: 6774 00006 EXTEND
042939,000781: 6775 50116 INDEX ADDRWD
042940,000782: 6776 00001 READ LCHAN # DCA 0 OR DCS 0
042941,000783: 6777 17003 TCF ENDVXV
042942,000784:
042943,000785: 7000 00006 DAD EXTEND
042944,000786: 7001 50116 INDEX ADDRWD
042945,000787: 7002 30001 DCA 0
042946,000788: 7003 20155 ENDVXV DAS MPAC # VXV FINISHES HERE.
042947,000789: 7004 00006 EXTEND
042948,000790: 7005 16064 BZF DANZIG
042949,000791:
042950,000792: # Page 1026
042951,000793: 7006 07022 SETOVF TC OVERFLOW
042952,000794: 7007 16064 TCF DANZIG
042953,000795:
042954,000796: # Page 1027
042955,000797: 7010 00006 DSU EXTEND
042956,000798: 7011 50116 INDEX ADDRWD
042957,000799: 7012 40001 DCS 0
042958,000800: 7013 17003 TCF ENDVXV
042959,000801:
042960,000802: 7014 54001 OVERFLWZ TS L # ENTRY FOR THIRD COMPONENT.
042961,000803: 7015 34756 CAF FIVE
042962,000804: 7016 17021 TCF +3
042963,000805:
042964,000806: 7017 54001 OVERFLWY TS L # ENTRY FOR SECOND COMPONENT.
042965,000807: 7020 36250 CAF THREE
042966,000808: 7021 56001 XCH L
042967,000809:
042968,000810: 7022 50000 OVERFLOW INDEX A # ENTRY FOR 1ST COMP OR DP (L=0).
042969,000811: 7023 44734 CS LIMITS # PICK UP POSMAX OR NEGMAX.
042970,000812: 7024 54130 TS BUF
042971,000813: 7025 00006 EXTEND
042972,000814: 7026 24000 AUG A
042973,000815: 7027 50001 INDEX L
042974,000816: 7030 26155 ADS MPAC +1
042975,000817: 7031 54007 TS 7
042976,000818: 7032 34755 CAF ZERO
042977,000819: 7033 60130 AD BUF
042978,000820: 7034 50001 INDEX L
042979,000821: 7035 26154 ADS MPAC
042980,000822: 7036 54007 TS 7
042981,000823: 7037 00002 TC Q # NO OVERFLOW EXIT.
042982,000824: 7040 17155 TCF SETOVF2 # SET OVFIND AND EXIT.
042983,000825:
042984,000826: 7041 00006 BVSU EXTEND
042985,000827: 7042 50116 INDEX ADDRWD
042986,000828: 7043 30003 DCA 2
042987,000829: 7044 52160 DXCH MPAC +3
042988,000830: 7045 00006 EXTEND
042989,000831: 7046 40001 DCOM
042990,000832: 7047 20160 DAS MPAC +3
042991,000833: 7050 00006 EXTEND
042992,000834: 7051 17053 BZF +2
042993,000835: 7052 07017 TC OVERFLWY
042994,000836:
042995,000837: 7053 00006 EXTEND
042996,000838: 7054 50116 INDEX ADDRWD
042997,000839: 7055 30005 DCA 4
042998,000840: 7056 52162 DXCH MPAC +5
042999,000841: 7057 00006 EXTEND
043000,000842: 7060 40001 DCOM
043001,000843: 7061 20162 DAS MPAC +5
043002,000844: 7062 00006 EXTEND
043003,000845: 7063 17065 BZF +2
043004,000846: 7064 07014 TC OVERFLWZ
043005,000847:
043006,000848: # Page 1028
043007,000849: 7065 00006 BDSU EXTEND
043008,000850: 7066 50116 INDEX ADDRWD
043009,000851: 7067 30001 DCA 0
043010,000852: 7070 52155 DXCH MPAC
043011,000853: 7071 00006 EXTEND
043012,000854: 7072 40001 DCOM
043013,000855: 7073 17003 TCF ENDVXV
043014,000856:
043015,000857: # Page 1029
043016,000858: # TRIPLE PRECISION ADD ROUTINE.
043017,000859:
043018,000860: 7074 00006 TAD EXTEND
043019,000861: 7075 50116 INDEX ADDRWD
043020,000862: 7076 30002 DCA 1 # ADD MINOR PARTS FIRST.
043021,000863: 7077 20156 DAS MPAC +1
043022,000864: 7100 50116 INDEX ADDRWD
043023,000865: 7101 60000 AD 0
043024,000866: 7102 60154 AD MPAC
043025,000867: 7103 54154 TS MPAC
043026,000868: 7104 16064 TCF DANZIG
043027,000869:
043028,000870: 7105 17006 TCF SETOVF # SET OVFIND IF SUCH OCCURS.
043029,000871:
043030,000872: # Page 1030
043031,000873: # ARITHMETIC SUBROUTINES REQUIRED IN FIXED-FIXED.
043032,000874: # 1. DMPSUB DOUBLE PRECISION MULTIPLY, MULTIPLY THE CONTENTS OF MPAC,+1 BY THE DP WORD WHOSE ADDRESS
043033,000875: # IS IN ADDRWD AND LEAVE A TRIPLE-PRECISION RESULT IN MPAC.
043034,000876: # 2. ROUNDSUB ROUND THE TRIPLE PRECISION CONTENTS OF MPAC TO DOUBLE PRECISION.
043035,000877: # 3. DOTSUB TAKE THE DOT PRODUCT OF THE VECTOR IN MPAC AND THE VECTOR WHOSE ADDRESS IS IN ADDRWD
043036,000878: # AND LEAVE THE TRIPLE PRECISION RESULT IN MPAC.
043037,000879: # 4. POLY USING THE CONTENTS OF MPAC AS A DP ARGUMENT, EVALUATE THE POLYNOMIAL WHOSE DEGREE AND
043038,000880: # COEFFICIENTS IMMEDIATELY FOLLOW THE TC POLY INSTRUCTION (SEE ROUTINE FOR DETAILS).
043039,000881:
043040,000882: 7106 50002 DMP INDEX Q # BASIC SUBROUTINE FOR USE BY PINBALL, ETC
043041,000883: 7107 30000 CAF 0
043042,000884: 7110 24002 INCR Q
043043,000885: 7111 54116 -1 TS ADDRWD # (PROLOGUE FOR SETTING ADDRWD.)
043044,000886:
043045,000887: 7112 50116 DMPSUB INDEX ADDRWD # GET MINOR PART OF OPERAND AT C(ADDRWD).
043046,000888: 7113 30001 CA 1
043047,000889: 7114 54156 TS MPAC +2 # THIS WORKS FOR SQUARING MPAC AS WELL.
043048,000890: 7115 34755 CAF ZERO # SET MPAC +1 TO ZERO SO WE CAN ACCUMULATE
043049,000891: 7116 56155 XCH MPAC +1 # THE PARTIAL PRODUCTS WITH DAS
043050,000892: 7117 54135 TS MPTEMP # INSTRUCTIONS.
043051,000893: 7120 00006 EXTEND
043052,000894: 7121 70156 MP MPAC +2 # MINOR OF MPAC X MINOR OF C(ADDRWD).
043053,000895:
043054,000896: 7122 56156 XCH MPAC +2 # DISCARD MINOR PART OF ABOVE RESULT AND
043055,000897: 7123 00006 EXTEND # FORM MAJOR OF MPAC X MINOR OF C(ADDRWD).
043056,000898: 7124 70154 MP MPAC
043057,000899: 7125 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
043058,000900:
043059,000901: 7126 50116 INDEX ADDRWD # GET MAJOR PART OF ARGUMENT AT C(ADDRWD).
043060,000902: 7127 30000 CA 0
043061,000903: 7130 56135 XCH MPTEMP # SAVE AND BRING OUT MINOR OF MPAC.
043062,000904: 7131 00006 DMPSUB2 EXTEND
043063,000905: 7132 70135 MP MPTEMP # MAJOR OF C(ADDRWD) X MINOR OF MPAC.
043064,000906: 7133 20156 DAS MPAC +1 # ACCUMULATE, SETTING A TO NET OVERFLOW.
043065,000907:
043066,000908: 7134 56154 XCH MPAC # SETTING MPAC TO 0 OR +-1.
043067,000909: 7135 00006 EXTEND
043068,000910: 7136 70135 MP MPTEMP # MAJOR OF MPAC X MAJOR OF C(ADDRWD).
043069,000911: 7137 20155 DAS MPAC # GUARANTEED NO OVERFLOW.
043070,000912: 7140 00002 TC Q # 49 MCT = .573 MS. INCLUDING RETURN.
043071,000913:
043072,000914: # Page 1031
043073,000915: # ROUND MPAC TO DOUBLE PRECISION, SETTING OVFIND ON THE RARE EVENT OF OVERFLOW.
043074,000916:
043075,000917: 7141 34755 ROUNDSUB CAF ZERO # SET MPAC +2 = 0 FOR SCALARS AND CHANGE
043076,000918: 7142 54163 +1 TS MODE # MODE TO DP.
043077,000919:
043078,000920: 7143 56156 VROUND XCH MPAC +2 # BUT WE NEEDN'T TAKE THE TIME FOR VECTORS.
043079,000921: 7144 60000 DOUBLE
043080,000922: 7145 54001 TS L
043081,000923: 7146 00002 TC Q
043082,000924:
043083,000925: 7147 60155 AD MPAC +1 # ADD ROUDING BIT IF MPAC +2 WAS GREATER
043084,000926: 7150 54155 TS MPAC +1 # THAN .5 IN MAGNITUDE.
043085,000927: 7151 00002 TC Q
043086,000928:
043087,000929: 7152 60154 AD MPAC # PROPAGATE INTERFLOW.
043088,000930: 7153 54154 TS MPAC
043089,000931: 7154 00002 TC Q
043090,000932:
043091,000933: 7155 54121 SETOVF2 TS OVFIND # (RARE).
043092,000934: 7156 00002 TC Q
043093,000935:
043094,000936: # Page 1032
043095,000937: # THE DOT PRODUCT SUBROUTINE USUALLY FORMS THE DOT PRODUCT OF THE VECTOR IN MPAC WITH A STANDARD SIX
043096,000938: # REGISTER VECTOR WHOSE ADDRESS IS IN ADDRWD. IN THIS CASE C(DOTINC) ARE SET TO 2. VXM, HOWEVER, SETS C(DOTINC) TO
043097,000939: # 6 SO THAT DOTSUB DOTS MPAC WITH A COLUMN VECTOR OF THE MATRIX IN QUESTION IN THIS CASE.
043098,000940:
043099,000941: 7157 34752 PREDOT CAF TWO # PROLOGUE TO SET DOTINC TO 2.
043100,000942: 7160 54136 TS DOTINC
043101,000943:
043102,000944: 7161 00006 DOTSUB EXTEND
043103,000945: 7162 22137 QXCH DOTRET # SAVE RETURN
043104,000946: 7163 07112 TC DMPSUB # DOT X COMPONENTS.
043105,000947: 7164 52160 DXCH MPAC +3 # POSITION Y COMPONENT OF MPAC FOR
043106,000948: 7165 52155 DXCH MPAC # MULTIPLICATION WHILE SAVING RESULT IN
043107,000949: 7166 52131 DXCH BUF # THREE WORD BUFFER, BUF.
043108,000950: 7167 30156 CA MPAC +2
043109,000951: 7170 54132 TS BUF +2
043110,000952:
043111,000953: 7171 30136 CA DOTINC # ADVANCE ADDRWD TO Y COMPONENT OF
043112,000954: 7172 26116 ADS ADDRWD # OTHER ARGUMENT.
043113,000955: 7173 07112 TC DMPSUB
043114,000956: 7174 52156 DXCH MPAC +1 # ACCUMULATE PARTIAL PRODUCTS.
043115,000957: 7175 20132 DAS BUF +1
043116,000958: 7176 60154 AD MPAC
043117,000959: 7177 60130 AD BUF
043118,000960: 7200 54130 TS BUF
043119,000961: 7201 17203 TCF +2
043120,000962: 7202 54121 TS OVFIND # IF OVERFLOW OCCURS.
043121,000963:
043122,000964: 7203 52162 DXCH MPAC +5 # MULTIPLY Z COMPONENTS.
043123,000965: 7204 52155 DXCH MPAC
043124,000966: 7205 30136 CA DOTINC
043125,000967: 7206 26116 ADS ADDRWD
043126,000968: 7207 07112 TC DMPSUB
043127,000969: 7210 52132 ENDDOT DXCH BUF +1 # LEAVE FINAL ACCUMULATION IN MPAC.
043128,000970: 7211 20156 DAS MPAC +1
043129,000971: 7212 60154 AD MPAC
043130,000972: 7213 60130 AD BUF
043131,000973: 7214 54154 TS MPAC
043132,000974: 7215 00137 TC DOTRET
043133,000975:
043134,000976: 7216 07022 TC OVERFLOW # ON OVERFLOW HERE.
043135,000977: 7217 00137 TC DOTRET
043136,000978:
043137,000979: # Page 1033
043138,000980: # DOUBLE PRECISION POLYNOMIAL EVALUATOR
043139,000981: # N N-1
043140,000982: # THIS ROUTINE EVALUATES A X + A X + ... + A X + A LEAVING THE DP RESULT IN MPAC ON EXIT.
043141,000983: # N N-1 1 0
043142,000984:
043143,000985: # THE ROUTINE HAS TWO ENTRIES
043144,000986:
043145,000987: # 1 ENTRY THRU POWRSERS. THE COEFFICIENTS MAY BE EITHER IN FIXED OR ERASABLE E. THE CALL IS BY
043146,000988: # TC POWRSERS, AND THE RETURN IS TO LOC(TC POWRSERS)+1. THE ENTERING DATA MUST BE AS FOLLOWS:
043147,000989: # A SP LOC-3 ADDRESS FOR REFERENCING COEF TABLE
043148,000990: # L SP N-1 N IS THE DEGREE OF THE POWER SERIES
043149,000991: # MPAC DP X ARGUMENT
043150,000992: # LOC-2N DP A(0)
043151,000993: # ...
043152,000994: # LOC DP A(N)
043153,000995:
043154,000996: # 2. ENTRY THRU POLY. THE CALL TO POLY AND THE ENTERING DATA MUST BE AS FOLLOWS
043155,000997: # MPAC DP X ARGUMENT
043156,000998: # LOC TC POLY
043157,000999: # LOC+1 DP A(0)
043158,001000: # ...
043159,001001: # LOC+2N+2 DP A(N) RETURN IS TO LOC+2N+4
043160,001002:
043161,001003: 7220 00006 POWRSERS EXTEND
043162,001004: 7221 22141 QXCH POLYRET # RETURN ADDRESS
043163,001005: 7222 54117 TS POLISH # POWER SERIES ADDRESS
043164,001006: 7223 22140 LXCH POLYCNT # N-1 TO COUNTER
043165,001007: 7224 17235 TCF POLYCOM # SKIP SET UP BY POLY
043166,001008:
043167,001009: 7225 50002 POLY INDEX Q
043168,001010: 7226 30000 CAF 0
043169,001011: 7227 54140 TS POLYCNT # N-1 TO COUNTER
043170,001012: 7230 60000 DOUBLE
043171,001013: 7231 60002 AD Q
043172,001014: 7232 54117 TS POLISH # L(A(N))-3 TO POLISH
043173,001015: 7233 64756 AD FIVE
043174,001016: 7234 54141 TS POLYRET # STORE RETURN ADDRESS
043175,001017:
043176,001018: 7235 36276 POLYCOM CAF LVBUF # INCOMING X WILL BE MOVED TO VBUF, SO
043177,001019: 7236 54116 TS ADDRWD # SET ADDRWD SO DMPSUB WILL MPY BY VBUF.
043178,001020:
043179,001021: 7237 00006 EXTEND
043180,001022: 7240 50117 INDEX POLISH
043181,001023: 7241 30004 DCA 3
043182,001024:
043183,001025: # Page 1034
043184,001026: 7242 52155 DXCH MPAC # LOAD A(N) INTO MPAC
043185,001027: 7243 52123 DXCH VBUF # SAVING X IN VBUF
043186,001028: 7244 17250 TCF POLY2
043187,001029:
043188,001030: 7245 54140 POLYLOOP TS POLYCNT # SAVE DECREMENTD LOOP COUNTER
043189,001031: 7246 44752 CS TWO
043190,001032: 7247 26117 ADS POLISH # REGRESS COEFFICIENT POINTER
043191,001033:
043192,001034: 7250 07112 POLY2 TC DMPSUB # MULTIPLY BY X
043193,001035: 7251 00006 EXTEND
043194,001036: 7252 50117 INDEX POLISH
043195,001037: 7253 30002 DCA 1 # ADD IN NEXT COEFFICIENT
043196,001038: 7254 20155 DAS MPAC # USER'S RESPONSIBILITY TO ASSURE NO OVFLOW
043197,001039:
043198,001040: 7255 10140 CCS POLYCNT
043199,001041: 7256 17245 TCF POLYLOOP
043200,001042: 7257 00141 TC POLYRET # RETURN CALLER
043201,001043:
043202,001044: # Page 1035
043203,001045: # MISCELLANEOUS MULTI-PRECISION ROUTINES REQUIRED IN FIXED-FIXED BUT NOT USED BY THE INTERPRETER.
043204,001046:
043205,001047: 7260 34755 DPAGREE CAF ZERO # DOUBLE PRECISION ENTRY --
043206,001048: 7261 54156 TS MPAC +2 # ZERO LOW-ORDER WORD
043207,001049:
043208,001050: 7262 22002 TPAGREE LXCH Q # FORCE SIGN AGREEMENT AMONG THE TRIPLE
043209,001051: 7263 06726 TC BRANCH # PRECISION CONTENTS OF MPAC. RETURNING
043210,001052: 7264 17270 TCF ARG+ # WITH SIGNUM OF THE INPUT IN A.
043211,001053: 7265 17310 TCF ARGZERO
043212,001054:
043213,001055: 7266 44733 CS POSMAX # IF NEGATIVE.
043214,001056: 7267 17271 TCF +2
043215,001057:
043216,001058: 7270 34733 ARG+ CAF POSMAX
043217,001059: 7271 54002 TS Q
043218,001060: 7272 00006 EXTEND
043219,001061: 7273 24000 AUG A # FORMS +-1.0.
043220,001062: 7274 60156 AD MPAC +2
043221,001063: 7275 54156 TS MPAC +2
043222,001064: 7276 34755 CAF ZERO
043223,001065: 7277 60002 AD Q
043224,001066: 7300 60155 AD MPAC +1
043225,001067: 7301 54155 TS MPAC +1
043226,001068: 7302 34755 CAF ZERO
043227,001069: 7303 60002 AD Q # Q STILL HAS POSMAX OR NEGMAX IN IT.
043228,001070: 7304 60154 AD MPAC
043229,001071: 7305 54154 ARGZERO2 TS MPAC # ALWAYS SKIPPING UNLESS ARGZERO.
043230,001072: 7306 54155 TS MPAC +1
043231,001073: 7307 00001 TC L # RETURN VIA L.
043232,001074:
043233,001075: 7310 54156 ARGZERO TS MPAC +2 # SET ALL THREE MPAC REGISTERS TO ZERO.
043234,001076: 7311 17305 TCF ARGZERO2
043235,001077:
043236,001078: # SHORTMP MULTIPLIES THE TP CONTENTS OF MPAC BY THE SINGLE PRECISION NUMBER ARRIVING IN A.
043237,001079:
043238,001080: 7312 54135 SHORTMP TS MPTEMP
043239,001081: 7313 00006 EXTEND
043240,001082: 7314 70156 MP MPAC +2
043241,001083: 7315 54156 TS MPAC +2
043242,001084: 7316 34755 SHORTMP2 CAF ZERO # SO SUBSEQUENT DAS WILL WORK.
043243,001085: 7317 56155 XCH MPAC +1
043244,001086: 7320 17131 TCF DMPSUB2
043245,001087:
043246,001088: # Page 1036
043247,001089: # DMPNSUB MULTIPLIES THE DP FRACTION ARRIVING IN MPAC BY THE SP
043248,001090: # INTEGER ARRIVING IN A. THE DP PRODUCT DEPARTS BOTH IN MPAC AND IN
043249,001091: # A AND L. NOTE THAT DMPNSUB NORMALLY INCREASES THE MAGNITUDE OF THE
043250,001092: # CONTENTS OF MPAC. THE CUSTOMER MUST INSURE THAT B(A) X B(MPAC,MPAC+1)
043251,001093: # AND B(A) X B(MPAC) ARE LESS THAN 1 IN MAGNITUDE, WHERE B, AS IS OBVIOUS,
043252,001094: # INDICATES THE ARRIVING CONTENTS.
043253,001095:
043254,001096: 7321 54135 DMPNSUB TS DMPNTEMP
043255,001097: 7322 00006 EXTEND
043256,001098: 7323 70155 MP MPAC +1
043257,001099: 7324 52155 DXCH MPAC # LOW PRODUCT TO MPAC, HIGH FACTOR TO A
043258,001100: 7325 00006 EXTEND
043259,001101: 7326 70135 MP DMPNTEMP
043260,001102: 7327 30001 CA L
043261,001103: 7330 26154 ADS MPAC # COMPLETING THE PRODUCT IN MPAC
043262,001104: 7331 00006 EXTEND
043263,001105: 7332 30155 DCA MPAC # BRINGING THE PRODUCT INTO A AND L
043264,001106: 7333 00002 TC Q
043265,001107:
043266,001108: # Page 1037
043267,001109: # MISCELLANEOUS VECTOR OPERATIONS. INCLUDED HERE ARE THE FOLLOWING.
043268,001110: # 1. DOT DP VECTOR DOT PRODUCT.
043269,001111: # 2. VXV DP VECTOR CROSS PRODUCT.
043270,001112: # 3. VXSC DP VECTOR TIMES SCALAR.
043271,001113: # 4. V/SC DP VECTOR DIVIDED BY SCALAR.
043272,001114: # 5. VPROJ DP VECTOR PROJECTION. ( (MPAC.X)MPAC ).
043273,001115: # 6. VXM DP VECTOR POST-MULTIPLIED BY MATRIX.
043274,001116: # 7. MXV DP VECTOR PRE-MULTIPLIED BY MATRIX.
043275,001117:
043276,001118: 7334 07157 DOT TC PREDOT # DO THE DOT PRODUCT AND EXIT, CHANGING
043277,001119: 7335 34755 DMODE CAF ZERO # THE MODE TO DP SCALAR.
043278,001120: 7336 16063 TCF NEWMODE
043279,001121:
043280,001122: 7337 34752 MXV CAF TWO # SET UP MATINC AND DOTINC FOR ROW
043281,001123: 7340 54140 TS MATINC # VECTORS.
043282,001124: 7341 17345 TCF VXM/MXV # GO TO COMMON PORTION.
043283,001125:
043284,001126: 7342 44363 VXM CS TEN # SET MATINC AND DOTINC TO REFER TO MATRIX
043285,001127: 7343 54140 TS MATINC # AS THREE COLUMN VECTORS.
043286,001128: 7344 36245 CAF SIX
043287,001129:
043288,001130: # Page 1038
043289,001131: # COMMON PORTION OF MXV AND VXM.
043290,001132:
043291,001133: 7345 54136 VXM/MXV TS DOTINC
043292,001134:
043293,001135: # ITRACE (2) REFERS TO "VXM/MXV".
043294,001136:
043295,001137: 7346 07535 TC MPACVBUF # SAVE VECTOR IN MPAC FOR FURTHER USE.
043296,001138:
043297,001139: 7347 07161 TC DOTSUB # GO DOT TO GET X COMPONENT OF ANSWER.
043298,001140: 7350 00006 EXTEND
043299,001141: 7351 30123 DCA VBUF # MOVE MPAC VECTOR BACK INTO MPAC, SAVING
043300,001142: 7352 52155 DXCH MPAC # NEW X COMPONENT IN BUF2.
043301,001143: 7353 52134 DXCH BUF2
043302,001144: 7354 00006 EXTEND
043303,001145: 7355 30125 DCA VBUF +2
043304,001146: 7356 52160 DXCH MPAC +3
043305,001147: 7357 00006 EXTEND
043306,001148: 7360 30127 DCA VBUF +4
043307,001149: 7361 52162 DXCH MPAC +5
043308,001150: 7362 30140 CA MATINC # INITIALIZE ADDRWD FOR NEXT DOT PRODUCT.
043309,001151: 7363 26116 ADS ADDRWD # FORMS HAS ADDRESS OF NEXT COLUMN(ROW).
043310,001152:
043311,001153: 7364 07161 TC DOTSUB
043312,001154: 7365 52123 DXCH VBUF # MORE GIVEN VECTOR BACK TO MPAC, SAVING Y
043313,001155: 7366 52155 DXCH MPAC # COMPONENT OF ANSWER IN VBUF +2.
043314,001156: 7367 52125 DXCH VBUF +2
043315,001157: 7370 52160 DXCH MPAC +3
043316,001158: 7371 52127 DXCH VBUF +4
043317,001159: 7372 52162 DXCH MPAC +5
043318,001160: 7373 30140 CA MATINC # FORM ADDRESS OF LAST COLUMN OR ROW.
043319,001161: 7374 26116 ADS ADDRWD
043320,001162:
043321,001163: 7375 07161 TC DOTSUB
043322,001164: 7376 52134 DXCH BUF2 # ANSWER NOW COMPLETE. PUT COMPONENTS INTO
043323,001165: 7377 52155 DXCH MPAC # PROPER MPAC REGISTERS.
043324,001166: 7400 52162 DXCH MPAC +5
043325,001167: 7401 52125 DXCH VBUF +2
043326,001168: 7402 52160 DXCH MPAC +3
043327,001169: 7403 16064 TCF DANZIG # EXIT.
043328,001170:
043329,001171: # Page 1039
043330,001172: # VXSC -- VECTOR TIMES SCALAR.
043331,001173:
043332,001174: 7404 10163 VXSC CCS MODE # TEST PRESENT MODE.
043333,001175: 7405 17433 TCF DVXSC # SEPARATE ROUTINE WHEN SCALAR IS IN MPAC.
043334,001176: 7406 17433 TCF DVXSC
043335,001177:
043336,001178: 7407 07112 VVXSC TC DMPSUB # COMPUTE X COMPONENT
043337,001179: 7410 07143 TC VROUND # AND ROUND IT.
043338,001180: 7411 52160 DXCH MPAC +3 # PUT Y COMPONENT INTO MPAC SAVING MPAC IN
043339,001181: 7412 52155 DXCH MPAC # MPAC +3.
043340,001182: 7413 52160 DXCH MPAC +3
043341,001183:
043342,001184: 7414 07112 TC DMPSUB # DO SAME FOR Y AND Z COMPONENTS.
043343,001185: 7415 07143 TC VROUND
043344,001186: 7416 52162 DXCH MPAC +5
043345,001187: 7417 52155 DXCH MPAC
043346,001188: 7420 52162 DXCH MPAC +5
043347,001189:
043348,001190: 7421 07112 TC DMPSUB
043349,001191: 7422 07143 TC VROUND
043350,001192: 7423 52155 VROTATEX DXCH MPAC # EXIT USED TO RESTORE MPAC AFTER THIS
043351,001193: 7424 52162 DXCH MPAC +5 # TYPE OF ROTATION. CALLED BY VECTOR SHIFT
043352,001194: 7425 52160 DXCH MPAC +3 # RIGHT, V/SC, ETC.
043353,001195: 7426 52155 DXCH MPAC
043354,001196: 7427 16064 TCF DANZIG
043355,001197:
043356,001198: # Page 1040
043357,001199: # DP VECTOR PROJECTION ROUTINE.
043358,001200:
043359,001201: 7430 07157 VPROJ TC PREDOT # (MPAC.X)MPAC IS COMPUTED AND LEFT IN
043360,001202: 7431 44751 CS FOUR # MPAC. DO DOT AND FALL INTO DVXSC.
043361,001203: 7432 26116 ADS ADDRWD
043362,001204:
043363,001205: # VXSC WHEN SCALAR ARRIVES IN MPAC AND VECTOR IS AT X.
043364,001206:
043365,001207: 7433 00006 DVXSC EXTEND # SAVE SCALAR IN MPAC +3 AND GET X
043366,001208: 7434 30155 DCA MPAC # COMPONENT OF ANWER.
043367,001209: 7435 52160 DXCH MPAC +3
043368,001210: 7436 07112 TC DMPSUB
043369,001211: 7437 07143 TC VROUND
043370,001212:
043371,001213: 7440 34752 CAF TWO # ADVANCE ADDRWD TO Y COMPONENT OF X.
043372,001214: 7441 26116 ADS ADDRWD
043373,001215: 7442 00006 EXTEND
043374,001216: 7443 30160 DCA MPAC +3 # PUT SCALAR BACK INTO MPAC AND SAVE
043375,001217: 7444 52155 DXCH MPAC # X RESULT IN MPAC +5.
043376,001218: 7445 52162 DXCH MPAC +5
043377,001219: 7446 07112 TC DMPSUB
043378,001220: 7447 07143 TC VROUND
043379,001221:
043380,001222: 7450 34752 CAF TWO
043381,001223: 7451 26116 ADS ADDRWD # TO Z COMPONENT.
043382,001224: 7452 52160 DXCH MPAC +3 # BRING SCALAR BACK, PUTTING Y RESULT IN
043383,001225: 7453 52155 DXCH MPAC # THE PROPER PLACE.
043384,001226: 7454 52160 DXCH MPAC +3
043385,001227: 7455 07112 TC DMPSUB
043386,001228: 7456 07143 TC VROUND
043387,001229:
043388,001230: 7457 52155 DXCH MPAC # PUT Z COMPONENT IN PROPER PLACE, ALSO
043389,001231: 7460 52162 DXCH MPAC +5 # POSITIONING X.
043390,001232: 7461 52155 DXCH MPAC
043391,001233:
043392,001234: 7462 16524 TCF VMODE # MODE HAS CHANGED TO VECTOR.
043393,001235:
043394,001236: # Page 1041
043395,001237: # VECTOR CROSS PRODUCT ROUTINE CALCULATES (X M -M M ,X M -X M ,X M -X M ) WHERE M IS THE VECTOR IN
043396,001238: # 3 2 2 3 1 3 3 1 2 1 1 2
043397,001239: # MPAC AND X THE VECTOR AT THE GIVEN ADDRESS.
043398,001240:
043399,001241: 7463 00006 VXV EXTEND
043400,001242: 7464 30162 DCA MPAC +5 # FORM UP M3X1, LEAVING M1 IN VBUF.
043401,001243: 7465 52155 DXCH MPAC
043402,001244: 7466 52123 DXCH VBUF
043403,001245: 7467 07112 TC DMPSUB # BY X1.
043404,001246:
043405,001247: 7470 00006 EXTEND
043406,001248: 7471 40160 DCS MPAC +3 # CALCULATE -X1M2, SAVING X1M3 IN VBUF +2.
043407,001249: 7472 52155 DXCH MPAC
043408,001250: 7473 52125 DXCH VBUF +2
043409,001251: 7474 07112 TC DMPSUB
043410,001252:
043411,001253: 7475 34752 CAF TWO # ADVANCE ADDRWD TO X2.
043412,001254: 7476 26116 ADS ADDRWD
043413,001255: 7477 00006 EXTEND
043414,001256: 7500 40162 DCS MPAC +5 # PREPARE TO GET -X2M3, SAVING -X1M2 IN
043415,001257: 7501 52155 DXCH MPAC # MPAC +5.
043416,001258: 7502 52162 DXCH MPAC +5
043417,001259: 7503 07112 TC DMPSUB
043418,001260:
043419,001261: 7504 00006 EXTEND
043420,001262: 7505 30123 DCA VBUF # GET X2M1, SAVING -X2M3 IN VBUF +4.
043421,001263: 7506 52155 DXCH MPAC
043422,001264: 7507 52127 DXCH VBUF +4
043423,001265: 7510 07112 TC DMPSUB
043424,001266:
043425,001267: 7511 34752 CAF TWO # ADVANCE ADDRWD TO X3.
043426,001268: 7512 26116 ADS ADDRWD
043427,001269: 7513 00006 EXTEND
043428,001270: 7514 40123 DCS VBUF # GET -X3M1, ADDING X2M1 TO MPAC +5 TO
043429,001271: 7515 52155 DXCH MPAC # COMPLETE THE Z COMPONENT OF THE ANSWER.
043430,001272: 7516 20162 DAS MPAC +5
043431,001273:
043432,001274: 7517 00006 EXTEND
043433,001275: 7520 17522 BZF +2
043434,001276: 7521 07014 TC OVERFLWZ
043435,001277:
043436,001278: 7522 07112 TC DMPSUB
043437,001279: 7523 52125 DXCH VBUF +2 # MOVE X1M3 TO MPAC +3 SETTING UP FOR X3M2
043438,001280: 7524 52160 DXCH MPAC +3 # AND ADD -X3M1 TO MPAC +3 TO COMPLETE THE
043439,001281: 7525 52155 DXCH MPAC # Y COMPONENT OF THE RESULT.
043440,001282: 7526 20160 DAS MPAC +3
043441,001283:
043442,001284: 7527 00006 EXTEND
043443,001285: 7530 17532 BZF +2
043444,001286: # Page 1042
043445,001287: 7531 07017 TC OVERFLWY
043446,001288:
043447,001289: 7532 07112 TC DMPSUB
043448,001290: 7533 52127 DXCH VBUF +4 # GO ADD -X2M3 TO X3M2 TO COMPLETE THE X
043449,001291: 7534 17003 TCF ENDVXV # COMPONENT (TAIL END OF DAD).
043450,001292:
043451,001293: # THE MPACVBUF SUBROUTINE SAVES THE VECTOR IN MPAC IN VBUF WITHOUT CLOBBERING MPAC.
043452,001294:
043453,001295: 7535 00006 MPACVBUF EXTEND # CALLED BY MXV, VXM, AND UNIT.
043454,001296: 7536 30155 DCA MPAC
043455,001297: 7537 52123 DXCH VBUF
043456,001298: 7540 00006 EXTEND
043457,001299: 7541 30160 DCA MPAC +3
043458,001300: 7542 52125 DXCH VBUF +2
043459,001301: 7543 00006 EXTEND
043460,001302: 7544 30162 DCA MPAC +5
043461,001303: 7545 52127 DXCH VBUF +4
043462,001304: 7546 00002 TC Q # RETURN TO CALLER.
043463,001305:
043464,001306: # DOUBLE PRECISION SIGN AGREE ROUTINE. ARRIVE WITH INPUT IN A+L. OUTPUT IS IN A + L.
043465,001307:
043466,001308: 7547 10000 ALSIGNAG CCS A # TEST UPPER PART.
043467,001309: 7550 17554 TCF UPPOS # IT IS POSITIVE
043468,001310: 7551 00002 TC Q # ZERO
043469,001311: 7552 17564 TCF UPNEG # NEGATIVE
043470,001312: 7553 00002 TC Q # ZERO
043471,001313:
043472,001314: 7554 56001 UPPOS XCH L # SAVE DECREMENTED UPPER PART.
043473,001315: 7555 64736 AD HALF
043474,001316: 7556 64736 AD HALF
043475,001317: 7557 54000 TS A # SKIPS ON OVERFLOW
043476,001318: 7560 17562 TCF +2
043477,001319: 7561 24001 INCR L # RESTORE UPPER TO ORIGINAL VALUE
043478,001320: 7562 56001 XCH L # SWAP A + L BANCK.
043479,001321: 7563 00002 TC Q
043480,001322:
043481,001323: 7564 56001 UPNEG XCH L # SAVE COMPLEMENTED + DECREMENTED UPPER PT
043482,001324: 7565 64735 AD NEGMAX
043483,001325: 7566 67752 AD NEGONE
043484,001326: 7567 54000 TS A
043485,001327: 7570 17572 TCF +2 # DON'T INCREMENT IF NO OVERFLOW.
043486,001328: 7571 24001 INCR L
043487,001329: 7572 56001 XCH L
043488,001330: 7573 40000 COM # MAKE NEGATIVE AGAIN.
043489,001331: 7574 00002 TC Q
043490,001332:
043491,001333: # Page 1043
043492,001334: # INTERPRETIVE INSTRUCTIONS WHOSE EXECUTION CONSISTS OF PRINCIPALLY CALLING SUBROUTINES.
043493,001335:
043494,001336: 7575 07112 DMP1 TC DMPSUB # DMP INSTRUCTIONS
043495,001337: 7576 16064 TCF DANZIG
043496,001338:
043497,001339: 7577 07112 DMPR TC DMPSUB
043498,001340: 7600 07142 TC ROUNDSUB +1 # (C(A) = +0).
043499,001341: 7601 16064 TCF DANZIG
043500,001342:
043501,001343: 7602 00006 DDV EXTEND
043502,001344: 7603 50116 INDEX ADDRWD # MOVE DIVIDENT INTO BUF.
043503,001345: 7604 30001 DCA 0
043504,001346: 7605 17612 TCF BDDV +4
043505,001347:
043506,001348: 7606 00006 BDDV EXTEND # MOVE DIVISOR INTO MPAC SAVING MPAC, THE
043507,001349: 7607 50116 INDEX ADDRWD # DIVIDEND, IN BUF.
043508,001350: 7610 30001 DCA 0
043509,001351: 7611 52155 DXCH MPAC
043510,001352: 7612 52131 +4 DXCH BUF
043511,001353: 7613 34755 CAF ZERO # DIVIDE ROUTINES IN BANK 0.
043512,001354: 7614 54004 TS FBANK
043513,001355: 7615 12353 TCF DDV/BDDV
043514,001356:
043515,001357: 7616 30116 SETPD CA ADDRWD # MUST SET TO WORK AREA, OR EBANK TROUBLE.
043516,001358: 7617 54166 TS PUSHLOC
043517,001359: 7620 16066 TCF NOIBNKSW # NO FBANK SWITCH REQUIRED.
043518,001360:
043519,001361: 7621 34755 TSLC CAF ZERO # SHIFTING ROUTINES LOCATED IN BANK 00.
043520,001362: 7622 54004 TS FBANK
043521,001363: 7623 12172 TCF TSLC2
043522,001364:
043523,001365: 7624 36077 GSHIFT CAF LOW7 # USED AS MASK AT GENSHIFT. THIS PROCESSES
043524,001366: 7625 54004 TS FBANK # ANY SHIFT INSTRUCTION (EXCEPT TSLC) WITH
043525,001367: 7626 12214 TCF GENSHIFT # AN ADDRESS (ROUTINES IN BANK 0).
043526,001368:
043527,001369: # Page 1044
043528,001370: # THE FOLLOWING IS THE PROLOGUE TO V/SC. IF THE PRESENT MODE IS VECTOR, IT SAVES THE SCALAR AT X IN BUF
043529,001371: # AND CALLES THE V/SC ROUTINE IN BANK 0. IF THE PRESENT MODE IS SCALAR, IT MOVES THE VECTOR AT X INTO MPAC, SAVING
043530,001372: # THE SCALAR IN MPAC IN BUF BEFORE CALLING THE V/SC ROUTINE IN BANK 0.
043531,001373:
043532,001374: 7627 10163 V/SC CCS MODE
043533,001375: 7630 17641 TCF DV/SC # MOVE VECTOR INTO MPAC.
043534,001376: 7631 17641 TCF DV/SC
043535,001377:
043536,001378: 7632 00006 VV/SC EXTEND
043537,001379: 7633 50116 INDEX ADDRWD
043538,001380: 7634 30001 DCA 0
043539,001381: 7635 52131 V/SC1 DXCH BUF # IN BOTH CASES, VECTOR IS NOW IN MPAC AND
043540,001382: 7636 34755 CAF ZERO # SCALAR IN BUF.
043541,001383: 7637 54004 TS FBANK
043542,001384: 7640 12654 TCF V/SC2
043543,001385:
043544,001386: 7641 00006 DV/SC EXTEND
043545,001387: 7642 50116 INDEX ADDRWD
043546,001388: 7643 30003 DCA 2
043547,001389: 7644 52160 DXCH MPAC +3
043548,001390: 7645 00006 EXTEND
043549,001391: 7646 50116 INDEX ADDRWD
043550,001392: 7647 30005 DCA 4
043551,001393: 7650 52162 DXCH MPAC +5
043552,001394:
043553,001395: 7651 44753 CS ONE # CHANGE MODE TO VECTOR.
043554,001396: 7652 54163 TS MODE
043555,001397:
043556,001398: 7653 00006 EXTEND
043557,001399: 7654 50116 INDEX ADDRWD
043558,001400: 7655 30001 DCA 0
043559,001401: 7656 52155 DXCH MPAC
043560,001402: 7657 17635 TCF V/SC1
043561,001403:
043562,001404: # Page 1045
043563,001405: # SIGN AND COMPLEMENT INSTRUCTIONS.
043564,001406:
043565,001407: 7660 50116 SIGN INDEX ADDRWD # CALL COMP INSTRUCTION IF WORD AT X IS
043566,001408: 7661 10000 CCS 0 # NEGATIVE NON-ZERO.
043567,001409: 7662 16064 TCF DANZIG
043568,001410: 7663 17665 TCF +2
043569,001411: 7664 17673 TCF COMP # DO THE COMPLEMENT.
043570,001412:
043571,001413: 7665 50116 INDEX ADDRWD
043572,001414: 7666 10001 CCSL CCS 1
043573,001415: 7667 16064 TCF DANZIG
043574,001416: 7670 16064 TCF DANZIG
043575,001417: 7671 17673 TCF COMP
043576,001418: 7672 16064 TCF DANZIG
043577,001419: 7673 00006 COMP EXTEND # COMPLEMENT DP MPAC IN EVERY CASE.
043578,001420: 7674 40155 DCS MPAC
043579,001421: 7675 52155 DXCH MPAC
043580,001422:
043581,001423: 7676 10163 CCS MODE # EITHER COMPLEMENT MPAC +3 OR THE REST OF
043582,001424: 7677 17710 TCF DCOMP # THE VECTOR ACCUMULATOR.
043583,001425: 7700 17710 TCF DCOMP
043584,001426:
043585,001427: 7701 00006 EXTEND # VECTOR COMPLEMENT.
043586,001428: 7702 40160 DCS MPAC +3
043587,001429: 7703 52160 DXCH MPAC +3
043588,001430: 7704 00006 EXTEND
043589,001431: 7705 40162 DCS MPAC +5
043590,001432: 7706 52162 DXCH MPAC +5
043591,001433: 7707 16064 TCF DANZIG
043592,001434:
043593,001435: 7710 40156 DCOMP CS MPAC +2
043594,001436: 7711 54156 TS MPAC +2
043595,001437: 7712 16064 TCF DANZIG
043596,001438:
043597,001439: # Page 1046
043598,001440: # THE FOLLOWING SHORT SHIFT CODES REQUIRE NO ADDRESS WORD:
043599,001441: # 1. SR1 TO SR4 SCALAR SHIFT RIGHT.
043600,001442: # 2. SR1R TO SR4R SCALAR SHIFT RIGHT AND ROUND.
043601,001443: # 3. SL1 TO SL4 SCALAR SHIFT LEFT.
043602,001444: # 4. SL1R TO SL4R SCALAR SHIFT LEFT AND ROUND.
043603,001445: # 5. VSR1 TO VSR8 VECTOR SHIFT RIGHT (ALWAYS ROUNDS).
043604,001446: # 6. VSL1 TO VSL8 VECTOR SHIFT LEFT (NEVER ROUNDS).
043605,001447: # THE FOLLOWING CODES REQUIRE AND ADDRESS WHICH MAY BE INDEXED:*
043606,001448: # 1. SR SCALAR SHIFT RIGHT.
043607,001449: # 2. SRR SCALAR SHIFT RIGHT AND ROUND.
043608,001450: # 3. SL SCALAR SHIFT LEFT.
043609,001451: # 4. SLR SCALAR SHIFT LEFT AND ROUND.
043610,001452: # 5. VSR VECTOR SHIFT RIGHT.
043611,001453: # 6. VSL VECTOR SHIFT LEFT.
043612,001454: # * IF THE ADDRESS IS INDEXED, AND THE INDEX MODIFICATION RESULTS IN A NEGATIVE SHIFT COUNT, A SHIFT OF THE
043613,001455: # ABSOLUTE VALUE OF THE COUNT IS DONE IN THE OPPOSITE DIRECTION.
043614,001456:
043615,001457: 00,2017 BANK 00
043616,001458:
043617,001459: 00,2017 COUNT* $$/INTER
043618,001460: 00,2017 36245 SHORTT CAF SIX # SCALAR SHORT SHIFTS COME HERE. THE SHIFT
043619,001461: 00,2020 70020 MASK CYR # COUNT-1 IS NOW IN BITS 2-3 OF CYR. THE
043620,001462: 00,2021 54021 TS SR # ROUNDING BIT IS IN BIT1 AT THIS POINT.
043621,001463:
043622,001464: 00,2022 10020 CCS CYR # SEE IF RIGHT OR LEFT SHIFT DESIRED.
043623,001465: 00,2023 12101 TCF TSSL # SHIFT LEFT.
043624,001466:
043625,001467: 00,2024 00024 SRDDV DEC 20 B-14 # MPTEMP SETTING FOR SR BEFORE DDV.
043626,001468:
043627,001469: 00,2025 50021 TSSR INDEX SR # GET SHIFTING BIT.
043628,001470: 00,2026 34736 CAF BIT14
043629,001471: 00,2027 54135 TS MPTEMP
043630,001472:
043631,001473: 00,2030 10020 CCS CYR # SEE IF A ROUND IS DESIRED.
043632,001474: 00,2031 02050 RIGHTR TC MPACSRND # YES -- SHIFT RIGHT AND ROUND.
043633,001475: 00,2032 16063 TCF NEWMODE # SET MODE TO DP (C(A) = 0).
043634,001476: 00,2033 30135 MPACSHR CA MPTEMP # DO A TRIPLE PRECISION SHIFT RIGHT.
043635,001477: 00,2034 00006 EXTEND
043636,001478: 00,2035 70156 MP MPAC +2
043637,001479: 00,2036 54156 +3 TS MPAC +2 # (EXIT FROM SQRT AND ABVAL).
043638,001480: 00,2037 30135 CA MPTEMP
043639,001481: 00,2040 00006 EXTEND
043640,001482: 00,2041 70154 MP MPAC # SHIFT MAJOR PART INTO A,L AND PLACE IN
043641,001483: # Page 1047
043642,001484: 00,2042 52155 DXCH MPAC # MPAC,+1.
043643,001485: 00,2043 30135 CA MPTEMP
043644,001486: 00,2044 00006 EXTEND
043645,001487: 00,2045 70001 MP L # ORIGINAL C(MPAC +1).
043646,001488: 00,2046 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
043647,001489: 00,2047 16064 TCF DANZIG
043648,001490:
043649,001491: # MPAC SHIFT RIGHT AND ROUND SUBROUTINES
043650,001492:
043651,001493: 00,2050 30156 MPACSRND CA MPAC +2 # WE HAVE TO DO ALL THREE MULTIPLIES SINCE
043652,001494: 00,2051 00006 EXTEND # MPAC +1 AND MPAC +2 MIGHT HAVE SIGN
043653,001495: 00,2052 70135 MP MPTEMP # DISAGREEMENT WITH A SHIFT RIGHT OF L.
043654,001496: 00,2053 56155 XCH MPAC +1
043655,001497: 00,2054 00006 EXTEND
043656,001498: 00,2055 70135 MP MPTEMP
043657,001499: 00,2056 56155 XCH MPAC +1 # TRIAL MINOR PART.
043658,001500: 00,2057 60001 AD L
043659,001501:
043660,001502: 00,2060 60000 VSHR2 DOUBLE # (FINISH VECTOR COMPONENT SHIFT RIGHT
043661,001503: 00,2061 54156 TS MPAC +2 # AND ROUND.)
043662,001504: 00,2062 12064 TCF +2
043663,001505: 00,2063 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
043664,001506:
043665,001507: 00,2064 34755 CAF ZERO
043666,001508: 00,2065 54156 TS MPAC +2
043667,001509: 00,2066 56154 XCH MPAC # SETTING TO ZERO SO FOLLOWING DAS WORKS.
043668,001510: 00,2067 00006 EXTEND
043669,001511: 00,2070 70135 MP MPTEMP
043670,001512: 00,2071 20155 DAS MPAC # AGAIN NO OVERFLOW.
043671,001513: 00,2072 00002 TC Q
043672,001514:
043673,001515: 00,2073 30135 VSHRRND CA MPTEMP # ENTRY TO SHIFT RIGHT AND ROUND MPAC WHEN
043674,001516: 00,2074 00006 EXTEND # MPAC CONTAINS A VECTOR COMPONENT.
043675,001517: 00,2075 70155 MP MPAC +1
043676,001518: 00,2076 54155 TS MPAC +1
043677,001519: 00,2077 56001 XCH L
043678,001520: 00,2100 12060 TCF VSHR2 # GO ADD ONE IF NECESSARY AND FINISH.
043679,001521:
043680,001522: # Page 1048
043681,001523: # ROUTINE FOR SHORT SCALAR SHIFT LEFT (AND MAYBE ROUND).
043682,001524:
043683,001525: 00,2101 30021 TSSL CA SR # GET SHIFT COUNT FOR SR.
043684,001526: 00,2102 54135 +1 TS MPTEMP
043685,001527:
043686,001528: 00,2103 00006 +2 EXTEND # ENTRY HERE FROM SL FOR SCALARS.
043687,001529: 00,2104 30156 DCA MPAC +1 # SHIFTING LEFT ONE PLACE AT A TIME IS
043688,001530: 00,2105 20156 DAS MPAC +1 # FASTER THAN DOING THE WHOLE SHIFT WITH
043689,001531: 00,2106 60154 AD MPAC # MULTIPLIES ASSUMING THAT FREQUENCY OF
043690,001532: 00,2107 60154 AD MPAC # SHIFT COUNTS GOES DOWN RAPIDLY AS A
043691,001533: 00,2110 54154 TS MPAC # FUNCTION OF THEIR MAGNITUDE.
043692,001534: 00,2111 12113 TCF +2
043693,001535: 00,2112 54121 TS OVFIND # OVERFLOW. (LEAVES OVERFLOW-CORRECTED
043694,001536: # RESULT ANYWAY).
043695,001537: 00,2113 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNT.
043696,001538: 00,2114 12102 TCF TSSL +1
043697,001539:
043698,001540: 00,2115 10020 CCS CYR # SEE IF ROUND WANTED.
043699,001541: 00,2116 07141 ROUND TC ROUNDSUB # YES -- ROUND AND EXIT.
043700,001542: 00,2117 16064 TCF DANZIG # SL LEAVES A ZERO IN CYR FOR NO ROUND.
043701,001543: 00,2120 16064 TCF DANZIG # NO -- EXIT IMMEDIATELY
043702,001544:
043703,001545: # Page 1049
043704,001546: # VECTOR SHIFTING ROUTINES.
043705,001547:
043706,001548: 00,2121 34757 SHORTV CAF LOW3 # SAVE 3 BIT SHIFT COUNT -- 1 WITHOUT
043707,001549: 00,2122 70020 MASK CYR # EDITING CYR.
043708,001550: 00,2123 54135 TS MPTEMP
043709,001551: 00,2124 10020 CCS CYR # SEE IF LEFT OR RIGHT SHIFT.
043710,001552: 00,2125 12145 TCF VSSL # VECTOR SHIFT LEFT.
043711,001553: 00,2126 00176 OCT176 OCT 176 # USED IN PROCESSED SHIFTS WITH - COUNT.
043712,001554:
043713,001555: 00,2127 50135 VSSR INDEX MPTEMP # (ENTRY FROM SR). PICK UP SHIFTING BIT.
043714,001556: 00,2130 34736 CAF BIT14 # MPTEMP CONTAINS THE SHIFT COUNT - 1.
043715,001557: 00,2131 54135 TS MPTEMP
043716,001558: 00,2132 02073 TC VSHRRND # SHIFT X COMPONENT.
043717,001559:
043718,001560: 00,2133 52155 DXCH MPAC # SWAP X AND Y COMPONENTS.
043719,001561: 00,2134 52160 DXCH MPAC +3
043720,001562: 00,2135 52155 DXCH MPAC
043721,001563: 00,2136 02073 TC VSHRRND # SHIFT Y COMPONENT.
043722,001564:
043723,001565: 00,2137 52155 DXCH MPAC # SWAP Y AND Z COMPONENTS.
043724,001566: 00,2140 52162 DXCH MPAC +5
043725,001567: 00,2141 52155 DXCH MPAC
043726,001568: 00,2142 02073 TC VSHRRND # SHIFT Z COMPONENT.
043727,001569:
043728,001570: 00,2143 17423 TCF VROTATEX # RESTORE COMPONENTS TO PROPER PLACES.
043729,001571:
043730,001572: # Page 1050
043731,001573: # VECTOR SHIFT LEFT -- DONE ONE PLACE AT A TIME.
043732,001574:
043733,001575: 00,2144 54135 -1 TS MPTEMP # SHIFTING LOOP.
043734,001576:
043735,001577: 00,2145 00006 VSSL EXTEND
043736,001578: 00,2146 30155 DCA MPAC
043737,001579: 00,2147 20155 DAS MPAC
043738,001580: 00,2150 00006 EXTEND
043739,001581: 00,2151 12153 BZF +2
043740,001582: 00,2152 07022 TC OVERFLOW
043741,001583:
043742,001584: 00,2153 00006 EXTEND
043743,001585: 00,2154 30160 DCA MPAC +3
043744,001586: 00,2155 20160 DAS MPAC +3
043745,001587: 00,2156 00006 EXTEND
043746,001588: 00,2157 12161 BZF +2
043747,001589: 00,2160 07017 TC OVERFLWY
043748,001590:
043749,001591: 00,2161 00006 EXTEND
043750,001592: 00,2162 30162 DCA MPAC +5
043751,001593: 00,2163 20162 DAS MPAC +5
043752,001594: 00,2164 00006 EXTEND
043753,001595: 00,2165 12167 BZF +2
043754,001596: 00,2166 07014 TC OVERFLWZ
043755,001597:
043756,001598: 00,2167 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNTER.
043757,001599: 00,2170 12144 TCF VSSL -1
043758,001600: 00,2171 16064 TCF DANZIG # EXIT.
043759,001601:
043760,001602: # Page 1051
043761,001603: # TSLC -- TRIPLE SHIFT LEFT AND COUNT. SHIFTS MPAC LEFT UNTIL GREATER THAN .5 IN MAGNITUDE, LEAVING
043762,001604: # THE COMPLEMENT OF THE NUMBER OF SHIFTS REQUIRED IN X.
043763,001605:
043764,001606: 00,2172 54135 TSLC2 TS MPTEMP # START BY ZEROING SHIFT COUNT (IN A NOW).
043765,001607: 00,2173 06726 TC BRANCH # EXIT WITH NO SHIFTING IF ARGUMENT ZERO.
043766,001608: 00,2174 12176 TCF +2
043767,001609: 00,2175 12212 TCF ENDTSLC # STORES ZERO SHIFT COUNT IN THIS CASE.
043768,001610:
043769,001611: 00,2176 07262 TC TPAGREE # MAY CAUSE UPSHIFT OF ONE EXTRA PLACE.
043770,001612:
043771,001613: 00,2177 30154 CA MPAC # BEGIN NORMALIZATION LOOP.
043772,001614: 00,2200 12207 TCF TSLCTEST
043773,001615:
043774,001616: 00,2201 24135 TSLCLOOP INCR MPTEMP # INCREMENT SHIFT COUNTER.
043775,001617: 00,2202 00006 EXTEND
043776,001618: 00,2203 30156 DCA MPAC +1
043777,001619: 00,2204 20156 DAS MPAC +1
043778,001620: 00,2205 60154 AD MPAC
043779,001621: 00,2206 26154 ADS MPAC
043780,001622: 00,2207 60000 TSLCTEST DOUBLE # SEE IF (ANOTHER) SHIFT IS REQUIRED
043781,001623: 00,2210 54000 OVSK
043782,001624: 00,2211 12201 TCF TSLCLOOP # YES -- INCREMENT COUNT AND SHIFT AGAIN.
043783,001625:
043784,001626: 00,2212 40135 ENDTSLC CS MPTEMP
043785,001627: 00,2213 16626 TCF STORE1 # STORE SHIFT COUNT AND RETURN TO DANZIG.
043786,001628:
043787,001629: # Page 1052
043788,001630: # THE FOLLOWING ROUTINE PROCESSES THE GENERAL SHIFT INSTRUCTIONS SR, SRR, SL, AND SLR.
043789,001631: # THE GIVEN ADDRESS IS DECODED AS FOLLOWS:
043790,001632: # BITS 1-7 SHIFT COUNT (SUBADDRESS) LESS THAN 125 DECIMAL.
043791,001633: # BIT 8 PSEUDO SIGN BIT (DETECTS CHANGE IN SIGN IN INDEXED SHIFTS).
043792,001634: # BIT 9 0 FOR LEFT SHIFT, AND 1 FOR RIGHT SHIFT.
043793,001635: # BIT 10 1 FOR TERMINAL ROUND ON SCALAR SHIFTS, 0 OTHERWISE
043794,001636: # BITS 11-13 0.
043795,001637: # BIT 14 1.
043796,001638: # BIT 15 0.
043797,001639: # THE ABOVE ENCODING IS DONE BY THE YUL SYSTEM.
043798,001640:
043799,001641: 00,2214 70116 GENSHIFT MASK ADDRWD # GET SHIFT COUNT, TESTING FOR ZERO.
043800,001642: 00,2215 10000 CCS A # (ARRIVES WITH C(A) = LOW7).
043801,001643: 00,2216 12224 TCF GENSHFT2 # IF NON-ZERO, PROCEED WITH DECREMENTED CT
043802,001644:
043803,001645: 00,2217 34742 CAF BIT10 # ZERO SHIFT COUNT. NO SHIFTS NEEDED BUT
043804,001646: 00,2220 70116 MASK ADDRWD # WE MIGHT HAVE TO ROUND MPAC ON SLR AND
043805,001647: 00,2221 10000 CCS A # SRR (SCALAR ONLY).
043806,001648: 00,2222 07141 TC ROUNDSUB
043807,001649: 00,2223 16064 TCF DANZIG
043808,001650:
043809,001651: 00,2224 54135 GENSHFT2 TS MPTEMP # DECREMENTED SHIFT COUNT TO MPTEMP.
043810,001652: 00,2225 34744 CAF BIT8 # TEST MEANING OF LOW SEVEN BIT COUNT IN
043811,001653: 00,2226 00006 EXTEND # MPTEMP NOW.
043812,001654: 00,2227 70116 MP ADDRWD
043813,001655: 00,2230 76250 MASK LOW2 # JUMPS ON SHIFT DIRECTION (BIT8) AND
043814,001656: 00,2231 50000 INDEX A
043815,001657: 00,2232 12233 TCF +1 # ORIGINAL SHIFT DIRECTION (BIT 9)
043816,001658: 00,2233 12332 TCF RIGHT- # NEGATIVE SHIFT COUNT FOR SL OR SLR.
043817,001659: 00,2234 12342 TCF LEFT # SL OR SLR.
043818,001660: 00,2235 12336 TCF LEFT- # NEGATIVE SHIFT COUNT WITH SR OR SRR.
043819,001661:
043820,001662: # Page 1053
043821,001663: # GENERAL SHIFT RIGHT
043822,001664:
043823,001665: 00,2236 10163 RIGHT CCS MODE # SET IF VECTOR OR SCALAR.
043824,001666: 00,2237 12277 TCF GENSCR
043825,001667: 00,2240 12277 TCF GENSCR
043826,001668:
043827,001669: 00,2241 30135 CA MPTEMP # SEE IF SHIFT COUNT LESS THAN 14D.
043828,001670: 00,2242 63733 VRIGHT2 AD NEG12
043829,001671: 00,2243 00006 EXTEND
043830,001672: 00,2244 62127 BZMF VSSR # IF SO, BRANCH AND SHIFT IMMEDIATELY.
043831,001673:
043832,001674: 00,2245 67752 AD NEGONE # IF NOT, REDUCE MPTEMP BY A TOTAL OF 14.
043833,001675: 00,2246 54135 TS MPTEMP # AND DO A SHIFT RIGHT AND ROUND BY 14.
043834,001676: 00,2247 34755 CAF ZERO # THE ROUND AT THIS STAGE MAY INTRODUCE A
043835,001677: 00,2250 54001 TS L # ONE BIT ERROR IN A SHIFT RIGHT 15D.
043836,001678: 00,2251 56154 XCH MPAC
043837,001679: 00,2252 56155 XCH MPAC +1
043838,001680: 00,2253 02272 TC SETROUND # X COMPONENT NOW SHIFTED, SO MAKE UP THE
043839,001681: 00,2254 20155 DAS MPAC # ROUNDING QUANTITY (0 IN A AND 0 OR +-1
043840,001682: # IN L).
043841,001683: 00,2255 56157 XCH MPAC +3 # REPEAT THE ABOVE PROCESS FOR Y AND Z/
043842,001684: 00,2256 56160 XCH MPAC +4
043843,001685: 00,2257 02272 TC SETROUND
043844,001686: 00,2260 20160 DAS MPAC +3 # NO OVERFLOW ON THESE ADDS.
043845,001687:
043846,001688: 00,2261 56161 XCH MPAC +5
043847,001689: 00,2262 56162 XCH MPAC +6
043848,001690: 00,2263 02272 TC SETROUND
043849,001691: 00,2264 20162 DAS MPAC +5
043850,001692:
043851,001693: 00,2265 10135 CCS MPTEMP # SEE IF DONE, DOING FINAL DECREMENT.
043852,001694: 00,2266 54135 TS MPTEMP
043853,001695: 00,2267 12242 TCF VRIGHT2
043854,001696: 00,2270 04604 BIASLO DEC .2974 B-1 # SQRT CONSTANT
043855,001697:
043856,001698: 00,2271 16064 TCF DANZIG
043857,001699:
043858,001700: 00,2272 60000 SETROUND DOUBLE # MAKES UP ROUNDING QUANTITY FROM ARRIVING
043859,001701: 00,2273 54156 TS MPAC +2 # C(A). L IS ZERO INITIALLY.
043860,001702: 00,2274 34755 CAF ZERO
043861,001703: 00,2275 56001 XCH L
043862,001704: 00,2276 00002 TC Q # RETURN AND DO THE DAS, RESETTING L TO 0.
043863,001705:
043864,001706: # Page 1054
043865,001707: # PROCESS SR AND SRR FOR SCALARS.
043866,001708:
043867,001709: 00,2277 30135 GENSCR CA MPTEMP # SEE IF THE ORIGINAL SHIFT COUNT WAS LESS
043868,001710: 00,2300 63733 +1 AD NEG12 # THAN 14D.
043869,001711: 00,2301 00006 EXTEND
043870,001712: 00,2302 62322 BZMF DOSSHFT # DO THE SHIFT IMMEDIATELY IF SO.
043871,001713:
043872,001714: 00,2303 67752 +4 AD NEGONE # IF NOT, DECREMENT SHIFT COUNT BY 14D AND
043873,001715: 00,2304 54135 TS MPTEMP # SHIFT MPAC RIGHT 14 PLACES.
043874,001716: 00,2305 34755 CAF ZERO
043875,001717: 00,2306 56154 XCH MPAC
043876,001718: 00,2307 56155 XCH MPAC +1
043877,001719: 00,2310 54156 TS MPAC +2
043878,001720: 00,2311 10135 CCS MPTEMP # SEE IF FINISHED, DO FINAL DECREMENT.
043879,001721: 00,2312 54135 TS MPTEMP
043880,001722: 00,2313 02300 TC GENSCR +1
043881,001723: 00,2314 22650 SLOPEHI DEC .5884 # SQRT CONSTANT.
043882,001724: 00,2315 34742 CAF BIT10 # FINISHED WITH SHIFT. SEE IF ROUND
043883,001725: 00,2316 70116 MASK ADDRWD # WANTED.
043884,001726: 00,2317 10000 CCS A
043885,001727: 00,2320 07141 TC ROUNDSUB
043886,001728: 00,2321 16064 TCF DANZIG # DO SO AND/OR EXIT.
043887,001729:
043888,001730: 00,2322 50135 DOSSHFT INDEX MPTEMP # PICK UP SHIFTING BIT.
043889,001731: 00,2323 34736 CAF BIT14
043890,001732: 00,2324 54135 TS MPTEMP
043891,001733: 00,2325 34742 CAF BIT10 # SEE IF TERMINAL ROUND DESIRED.
043892,001734: 00,2326 70116 MASK ADDRWD
043893,001735: 00,2327 10000 CCS A
043894,001736: 00,2330 12031 TCF RIGHTR # YES.
043895,001737: 00,2331 12033 TCF MPACSHR # JUST SHIFT RIGHT.
043896,001738:
043897,001739: # Page 1055
043898,001740: # PROCESS THE RIGHT- (SL(R) WITH A NEGATIVE COUNT), LEFT-, AND LEFT OPTIONS.
043899,001741:
043900,001742: 00,2332 40135 RIGHT- CS MPTEMP # GET ABSOLUTE VALUE - 1 OF SHIFT COUNT
043901,001743: 00,2333 62126 AD OCT176 # UNDERSTANDING THAT BIT8 (PSEUDO-SIGN)
043902,001744: 00,2334 54135 TS MPTEMP # WAS 1 INITIALLY.
043903,001745: 00,2335 12236 TCF RIGHT # DO NORMAL SHIFT RIGHT.
043904,001746:
043905,001747: 00,2336 42126 LEFT- CS OCT176 # SAME PROLOGUE TO LEFT FOR INDEXED RIGHT
043906,001748: 00,2337 60135 AD MPTEMP # SHIFT WHOSE NET SHIFT COUNT IS NEGATIVE
043907,001749: 00,2340 40000 COM
043908,001750: 00,2341 54135 TS MPTEMP
043909,001751:
043910,001752: 00,2342 10163 LEFT CCS MODE # SINCE LEFT SHIFTING IS DONE ONE PLACE AT
043911,001753: 00,2343 12346 TCF GENSCL # A TIME, NO COMPARISON WITH 14 NEED BE
043912,001754: 00,2344 12346 TCF GENSCL # DONE. FOR SCALARS, SEE IF TERMINAL ROUND
043913,001755: 00,2345 12145 TCF VSSL # DESIRED. FOR VECTORS, SHIFT IMMEDIATELY.
043914,001756:
043915,001757: 00,2346 40116 GENSCL CS ADDRWD # PUT ROUNDING BIT (BIT 10 OF ADDRWD) INTO
043916,001758: 00,2347 00006 EXTEND # BIT 15 OF CYR WHERE THE ROUNDING BIT OF
043917,001759: 00,2350 74746 MP BIT6 # A SHORT SHIFT LEFT WOULD BE
043918,001760: 00,2351 54020 TS CYR
043919,001761: 00,2352 12103 TCF TSSL +2 # DO THE SHIFT.
043920,001762:
043921,001763: # Page 1056
043922,001764: # SCALAR DIVISION INSTRUCTIONS, DDV AND BDDV, ARE EXECUTED HERE. AT THIS POINT, THE DIVIDEND IS IN MPAC
043923,001765: # AND THE DIVISOR IS IN BUF.
043924,001766:
043925,001767: 00,2353 44753 DDV/BDDV CS ONE # INITIALIZATION
043926,001768: 00,2354 54136 TS DVSIGN # +-1 FOR POSITIVE QUOTIENT -- -0 FOR NEG.
043927,001769: 00,2355 54137 TS DVNORMCT # DIVIDENT NORMALIZATION COUNT.
043928,001770: 00,2356 54140 TS MAXDVSW # NEAR-ONE DIVIDE FLAG.
043929,001771:
043930,001772: 00,2357 10130 CCS BUF # FORCE BUF POSITIVE WITH THE MAJOR PART
043931,001773: 00,2360 12516 TCF BUFPOS # NON-ZERO.
043932,001774: 00,2361 12363 TCF +2
043933,001775: 00,2362 12531 TCF BUFNEG
043934,001776:
043935,001777: 00,2363 54156 BUFZERO TS MPAC +2 # ZERO THIS.
043936,001778: 00,2364 07262 TC TPAGREE # FORCE SIGN AGREEMENT BEFORE OVERFLOW
043937,001779:
043938,001780: 00,2365 10154 CCS MPAC # TEST TO SEE IF MPAC NON-ZERO. (TOO BIG)
043939,001781: 00,2366 12414 TCF OVF+ # MAJOR PART OF DIVIDEND IS POSITIVE NON-0
043940,001782: 00,2367 12371 TCF +2
043941,001783: 00,2370 12413 TCF OVF+ -1 # MAJOR PART OF DIVIDEND IS NEG. NON-ZERO
043942,001784:
043943,001785: 00,2371 56131 XCH BUF +1 # SHIFT DIVIDENT AND DIVISOR LEFT 14
043944,001786: 00,2372 56130 XCH BUF
043945,001787: 00,2373 56155 XCH MPAC +1
043946,001788: 00,2374 56154 XCH MPAC
043947,001789: 00,2375 10130 CCS BUF # TRY AGAIN ON FORMER MINOR PART.
043948,001790: 00,2376 12422 TCF BUF+
043949,001791: 00,2377 12401 TCF +2 # OVERFLOW ON ZERO DIVISOR.
043950,001792: 00,2400 12416 TCF BUF-
043951,001793:
043952,001794: 00,2401 40154 CS MPAC # SIGN OF MPAC DETERMINES SIGN OF RESULT.
043953,001795: 00,2402 00006 SGNDVOVF EXTEND
043954,001796: 00,2403 62405 BZMF +2
043955,001797: 00,2404 24136 INCR DVSIGN # NEGMAX IN MPAC PERHAPS.
043956,001798: 00,2405 34733 DVOVF CAF POSMAX # ON DIVISION OVERFLOW OF ANY SORT, SET
043957,001799: 00,2406 54154 TS MPAC # SET DP MPAC TO +-POSMAX.
043958,001800: 00,2407 02630 TC FINALDV +3
043959,001801: 00,2410 34753 CAF ONE # SET OVEFLOW INDICATOR AND EXIT.
043960,001802: 00,2411 54121 TS OVFIND
043961,001803: 00,2412 06064 TC DANZIG
043962,001804:
043963,001805: 00,2413 24136 -1 INCR DVSIGN
043964,001806: 00,2414 40131 OVF+ CS BUF +1 # LOAD LOWER ORDER PART OF DIVISOR.
043965,001807: 00,2415 12402 TCF SGNDVOVF # GET SIGN OF RESULT.
043966,001808:
043967,001809: 00,2416 00006 BUF- EXTEND # IF BUF IS NEGATIVE, COMPLEMENT IT AND
043968,001810: 00,2417 40131 DCS BUF # MAINTAIN DVSIGN FOR FINAL QUOTIENT SIGN.
043969,001811: 00,2420 52131 DXCH BUF
043970,001812: 00,2421 24136 INCR DVSIGN # NOW -0.
043971,001813:
043972,001814: # Page 1057
043973,001815: 00,2422 10154 BUF+ CCS MPAC # FORCE MPAC POSITIVE, CHECKING FOR ZERO
043974,001816: 00,2423 12437 TCF MPAC+ # DIVIDEND IN THE PROCESS.
043975,001817: 00,2424 12426 TCF +2
043976,001818: 00,2425 12433 TCF MPAC-
043977,001819: 00,2426 10155 CCS MPAC +1
043978,001820: 00,2427 12437 TCF MPAC+
043979,001821: 00,2430 16064 TCF DANZIG # EXIT IMMEDIATELY ON ZERO DIVIDEND.
043980,001822: 00,2431 12433 TCF MPAC-
043981,001823: 00,2432 16064 TCF DANZIG
043982,001824:
043983,001825: 00,2433 00006 MPAC- EXTEND # FORCE MPAC POSITIVE AS BUF IN BUF-.
043984,001826: 00,2434 40155 DCS MPAC
043985,001827: 00,2435 52155 DXCH MPAC
043986,001828: 00,2436 24136 INCR DVSIGN # NOW +1 OR -0.
043987,001829:
043988,001830: # Page 1058
043989,001831: 00,2437 40154 MPAC+ CS MPAC # CHECK FOR DIVISION OVERFLOW. IF THE
043990,001832: 00,2440 67752 AD NEGONE # MAJOR PART OF THE DIVIDEND IS LESS THAN
043991,001833: 00,2441 60130 AD BUF # THE MAJOR PART OF THE DIVISOR BY AT
043992,001834: 00,2442 10000 CCS A # LEAST TWO, WE CAN PROCEED IMMEDIATELY
043993,001835: 00,2443 12505 TCF DVNORM # WITHOUT NORMALIZATION PRODUCING A DVMAX.
043994,001836: 00,2444 60001 -1/2+2 OCT 60001 # USED IN SQRTSUB.
043995,001837:
043996,001838: 00,2445 12446 TCF +1 # IF THE ABOVE DOES NOT HOLD, FORCE SIGN
043997,001839: 00,2446 34736 CAF HALF # AGREEMENT IN NUMERATOR AND DENOMINATOR
043998,001840: 00,2447 60000 DOUBLE # TO FACILITATE OVERFLOW AND NEAR-ONE
043999,001841: 00,2450 60155 AD MPAC +1 # CHECKING.
044000,001842: 00,2451 54155 TS MPAC +1
044001,001843: 00,2452 34755 CAF ZERO
044002,001844: 00,2453 64733 AD POSMAX
044003,001845: 00,2454 26154 ADS MPAC
044004,001846:
044005,001847: 00,2455 34736 CAF HALF # SAME FOR BUF.
044006,001848: 00,2456 60000 DOUBLE
044007,001849: 00,2457 60131 AD BUF +1
044008,001850: 00,2460 54131 TS BUF +1
044009,001851: 00,2461 34755 CAF ZERO
044010,001852: 00,2462 64733 AD POSMAX
044011,001853: 00,2463 26130 ADS BUF
044012,001854:
044013,001855: 00,2464 40154 CS MPAC # CHECK MAGNITUDE OF SIGN-CORRECTED
044014,001856: 00,2465 60130 AD BUF # OPERANDS.
044015,001857: 00,2466 10000 CCS A
044016,001858: 00,2467 12505 TCF DVNORM # DIVIDE OK -- WILL NOT BECOME MAXOV CASE.
044017,001859: 00,2470 00133 LBUF2 ADRES BUF2
044018,001860: 00,2471 12405 TCF DVOVF # DIVISOR NOT LESS THAN DIVIDEND -- OVF.
044019,001861:
044020,001862: 00,2472 54140 TS MAXDVSW # IF THE MAJOR PARTS OF THE DIVIDEND AND
044021,001863: 00,2473 40155 CS MPAC +1 # DIVISOR ARE EQUAL, A SPECIAL APPROXIMA-
044022,001864: 00,2474 60131 AD BUF +1 # TION IS USED (PROVIDED THE DIVISION IS
044023,001865: 00,2475 00006 EXTEND # POSSIBLE, OF COURSE).
044024,001866: 00,2476 62405 BZMF DVOVF
044025,001867: 00,2477 12505 TCF DVNORM # IF NO OVERFLOW.
044026,001868:
044027,001869: # Page 1059
044028,001870: 00,2500 00006 BUFNORM EXTEND # ADD -1 TO AUGMENT SHIFT COUNT AND SHIFT
044029,001871: 00,2501 24137 AUG DVNORMCT # LEFT ONE PLACE.
044030,001872: 00,2502 00006 EXTEND
044031,001873: 00,2503 30131 DCA BUF
044032,001874: 00,2504 20131 DAS BUF
044033,001875:
044034,001876: 00,2505 30130 DVNORM CA BUF # SEE IF DIVISOR NORMALIZED YET.
044035,001877: 00,2506 60000 DOUBLE
044036,001878: 00,2507 54000 OVSK
044037,001879: 00,2510 12500 TCF BUFNORM # NO -- SHIFT LEFT ONE AND TRY AGAIN.
044038,001880:
044039,001881: 00,2511 52155 DXCH MPAC # CALL DIVIDEND NORMALIZATION SEQUENCE
044040,001882: 00,2512 50137 INDEX DVNORMCT # PRIOR TO DOING THE DIVIDE.
044041,001883: 00,2513 02565 TC MAXTEST
044042,001884:
044043,001885: 00,2514 54156 TS MPAC +2 # RETURNS WITH DIVISION DONE AND C(A) = 0.
044044,001886: 00,2515 16064 TCF DANZIG
044045,001887:
044046,001888: 00,2516 10000 BUFPOS CCS A
044047,001889: 00,2517 12422 TCF BUF+ # TO BUF+ IF BUF IS GREATER THAN +1.
044048,001890:
044049,001891: 00,2520 40131 CS BUF +1 # IF BUF IS +1, FORCING SIGN AGREEMENT
044050,001892: 00,2521 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO.
044051,001893: 00,2522 62422 BZMF BUF+ # BRANCH IF SIGNS AGREE.
044052,001894:
044053,001895: 00,2523 34736 CA HALF # SIGNS DISAGREE. FORCE AGREEMENT.
044054,001896: 00,2524 60000 +6 DOUBLE
044055,001897: 00,2525 26131 ADS BUF +1
044056,001898: 00,2526 34755 CA ZERO
044057,001899: 00,2527 54130 TS BUF
044058,001900: 00,2530 12363 TCF BUFZERO
044059,001901:
044060,001902: 00,2531 10000 BUFNEG CCS A
044061,001903: 00,2532 12416 TCF BUF- # TO BUF- IF BUF IS LESS THAN -1.
044062,001904:
044063,001905: 00,2533 30131 CA BUF +1 # IF BUF IS -1, FORCING SIGN AGREEMENT
044064,001906: 00,2534 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO.
044065,001907: 00,2535 62416 BZMF BUF- # BRANCH IF SIGNS AGREE.
044066,001908:
044067,001909: 00,2536 44736 CS HALF # SIGNS DISAGREE. FORCE AGREEMENT.
044068,001910: 00,2537 12524 TCF BUFPOS +6
044069,001911:
044070,001912: # Page 1060
044071,001913: # THE FOLLOWING ARE PROLOGUES TO SHIFT THE DIVIDEND ARRIVING IN A AND L BEFORE THE DIVIDE.
044072,001914:
044073,001915: 00,2540 22021 -21D LXCH SR # SPECIAL PROLOGUE FOR UNIT WHEN THE
044074,001916: 00,2541 00006 EXTEND # LENGTH OF THE ARGUMENT WAS NOT LESS THAN
044075,001917: 00,2542 74736 MP HALF # .5. IN THIS CASE, EACH COMPONENT MUST BE
044076,001918: 00,2543 56001 XCH L # SHIFTED RIGHT ONE TO PRODUCE A HALF-UNIT
044077,001919: 00,2544 60021 AD SR # VECTOR.
044078,001920: 00,2545 56001 XCH L
044079,001921: 00,2546 12571 TCF GENDDV +1 # WITH DP DIVIDEND IN A,L.
044080,001922:
044081,001923: 00,2547 20001 DDOUBL # PROLOGUE WHICH NORMALIZES THE DIVIDEND
044082,001924: 00,2550 20001 DDOUBL # WHEN IT IS KNOWN THAT NO DIVISION
044083,001925: 00,2551 20001 DDOUBL # OVEFLOW WILL OCCUR.
044084,001926: 00,2552 20001 DDOUBL
044085,001927: 00,2553 20001 DDOUBL
044086,001928: 00,2554 20001 DDOUBL
044087,001929: 00,2555 20001 DDOUBL
044088,001930: 00,2556 20001 DDOUBL
044089,001931: 00,2557 20001 DDOUBL
044090,001932: 00,2560 20001 DDOUBL
044091,001933: 00,2561 20001 DDOUBL
044092,001934: 00,2562 20001 DDOUBL
044093,001935: 00,2563 20001 DDOUBL
044094,001936: 00,2564 52155 DXCH MPAC
044095,001937:
044096,001938: 00,2565 10140 MAXTEST CCS MAXDVSW # 0 IF MAJORS MIGHT BE =, -1 OTHERWISE.
044097,001939: 00,2566 06552 BIASHI DEC .4192 B-1 # SQRT CONSTANTS.
044098,001940:
044099,001941: 00,2567 12642 TCF MAXDV # CHECK TO SEE IF THAY ARE NOW EQUAL.
044100,001942:
044101,001943: # Page 1061
044102,001944: # THE FOLLOWING IS A GENERAL PURPOSE DOUBLE PRECISION DIVISION ROUTINE. IT DIVIDES MPAC BY BUF AND LEAVES
044103,001945: # THE RESULT IN MPAC. THE FOLLOWING CONDITIONS MUST BE SATISFIED:
044104,001946:
044105,001947: # 1. THE DIVISOR (BUF) MUST BE POSITIVE AND NOT LESS THAN .5.
044106,001948:
044107,001949: # 2. THE DIVIDEND (MPAC) MUST BE POSITIVE WITH THE MAJOR PART OF MPAC STRICTLY LESS THAN THAT OF BUF
044108,001950: # (A SPECIAL APPROXIMATION, MAXDV, IS USED WHEN THE MAJOR PARTS ARE EQUAL).
044109,001951:
044110,001952: # UNDERSTANDING THAT A/B = Q + S(R/B) WHERE S = 2(-14) AND Q AND R ARE QUOTIENT AND REMAINDER, RESPEC-
044111,001953: # TIVELY, THE FOLLOWING APPROXIMATION IS OBTAINED BY MULTIPLYING ABOVE AND BELOW BY C - SD AND NEGLECTING TERMS OF
044112,001954: # ORDER S-SQUARED (POSSIBLY INTRODUCING ERROR INTO THE LOW TWO BITS OF THE RESULT). SIGN AGREEMENT IS UNNECESSARY.
044113,001955:
044114,001956: # A + SB . (R - CD) A + SB
044115,001957: # ------ = Q + S(------) WHERE Q AND R ARE QUOTIENT AND REMAINDER OF ------ RESPECTIVELY.
044116,001958: # C + SD ( C } C
044117,001959:
044118,001960: 00,2570 52155 GENDDV DXCH MPAC # WE NEED A AND B ONLY FOR FIRST DV.
044119,001961: 00,2571 00006 +1 EXTEND # (SPECIAL UNIT PROLOGUE ENTERS HERE).
044120,001962: 00,2572 10130 DV BUF # A NOW CONTAINS Q AND L, R.
044121,001963: 00,2573 52155 DXCH MPAC
044122,001964:
044123,001965: 00,2574 40154 CS MPAC # FORM DIVIDEND FOR MINOR PART OF RESULT.
044124,001966: 00,2575 00006 EXTEND
044125,001967: 00,2576 70131 MP BUF +1
044126,001968: 00,2577 60155 AD MPAC +1 # OVERFLOW AT THIS POINT IS POSITIVE SINCE
044127,001969: 00,2600 54000 OVSK # R IS POSITIVE IN EVERY CASE.
044128,001970: 00,2601 12606 TCF +5
044129,001971:
044130,001972: 00,2602 00006 EXTEND # OVERFLOW CAN BE REMOVED BY SUBTRACTING C
044131,001973: 00,2603 60130 SU BUF # (BUF) ONCE SINCE R IS ALWAYS LESS THAN C
044132,001974: 00,2604 24154 INCR MPAC # IN THIS CASE. INCR COMPENSATES SUBTRACT.
044133,001975: 00,2605 12610 TCF +DOWN # (SINCE C(A) IS STILL POSITIVE).
044134,001976:
044135,001977: 00,2606 00006 +5 EXTEND # C(A) CAN BE MADE LESS THAN C IN MAGNI-
044136,001978: 00,2607 62620 BZMF -UP # TUDE BY DIMINISHING IT BY C (SINCE C IS
044137,001979: # NOT LESS THAN .5) UNLESS C(A) = 0.
044138,001980:
044139,001981: # Page 1062
044140,001982: 00,2610 00006 +DOWN EXTEND
044141,001983: 00,2611 60130 SU BUF # IF POSITIVE, REDUCE ONLY IF NECESSARY
044142,001984: 00,2612 00006 EXTEND # SINCE THE COMPENSATING INCR MIGHT CAUSE
044143,001985: 00,2613 12616 BZF +3 # OVERFLOW.
044144,001986: 00,2614 00006 EXTEND # DON'T SUBTRACT UNLESS RESULT IS POSITIVE
044145,001987: 00,2615 62624 BZMF ENDMAXDV # OR ZERO.
044146,001988:
044147,001989: 00,2616 24154 +3 INCR MPAC # KEEP SUBTRACT HERE AND COMPENSATE.
044148,001990: 00,2617 12625 TCF FINALDV
044149,001991:
044150,001992: 00,2620 00006 -UP EXTEND # IF ZERO, SET MINOR PART OF RESULT TO
044151,001993: 00,2621 12630 BZF FINALDV +3 # ZERO.
044152,001994:
044153,001995: 00,2622 00006 EXTEND # IF NEGATIVE, ADD C TO A, SUBTRACTING ONE
044154,001996: 00,2623 26154 DIM MPAC # TO COMPENSATE. DIM IS OK HERE SINCE THE
044155,001997: 00,2624 60130 ENDMAXDV AD BUF # MAJOR PART NEVER GOES NEGATIVE.
044156,001998:
044157,001999: # Page 1063
044158,002000: 00,2625 22007 FINALDV ZL # DO DV TO OBTAIN MINOR PART OF RESULT.
044159,002001: 00,2626 00006 EXTEND
044160,002002: 00,2627 10130 DV BUF
044161,002003: 00,2630 54155 +3 TS MPAC +1
044162,002004:
044163,002005: 00,2631 10136 CCS DVSIGN # LEAVE RESULT POSITIVE UNLESS C(DVSIGN).
044164,002006: 00,2632 00002 TC Q
044165,002007: 00,2633 00002 TC Q
044166,002008: 00,2634 00002 TC Q
044167,002009:
044168,002010: 00,2635 00006 EXTEND
044169,002011: 00,2636 40155 DCS MPAC
044170,002012: 00,2637 52155 DXCH MPAC
044171,002013: 00,2640 34755 CAF ZERO # SO WE ALWAYS RETURN WITH C(A) = 0.
044172,002014: 00,2641 00002 TC Q
044173,002015:
044174,002016: # Page 1064
044175,002017: # IF THE MAJOR PARTS OF THE DIVISOR AND DIVIDEND ARE EQUAL, BUT THE MINOR PARTS ARE SUCH THAT THE
044176,002018: # DIVIDEND IS STRICTLY LESS THAN THE DIVISOR IN MAGNITUDE, THE FOLLOWING APPROXIMATION IS USED. THE ASSUMPTIONS
044177,002019: # ARE THE SAME AS THE GENERAL ROUTINE WITH THE ADDITION THAT SIGN AGREEMENT IS NECESSARY (B, C, & D POSITIVE).
044178,002020:
044179,002021: # C + SB . (C + B - D)
044180,002022: # ------ = 37777 + S(---------)
044181,002023: # C + SD ( C )
044182,002024:
044183,002025: # THE DIVISION MAY BE PERFORMED IMMEDIATELY SINCE B IS STRICTLY LESS THAN D AND C IS NOT LESS THAN .5.
044184,002026:
044185,002027: 00,2642 40154 MAXDV CS MPAC # SEE IF MAXDV CASE STILL HOLDS AFTER
044186,002028: 00,2643 60130 AD BUF # NORMALIZATION.
044187,002029: 00,2644 00006 EXTEND
044188,002030: 00,2645 12647 BZF +2
044189,002031: 00,2646 12570 TCF GENDDV # MPAC NOW LESS THAN BUFF -- DIVIDE AS USUAL.
044190,002032:
044191,002033: 00,2647 34733 +2 CAF POSMAX # SET MAJOR PART OF RESULT.
044192,002034: 00,2650 54154 TS MPAC
044193,002035:
044194,002036: 00,2651 40131 CS BUF +1 # FORM DIVIDEND OF MINOR PART OF RESULT.
044195,002037: 00,2652 60155 AD MPAC +1
044196,002038: 00,2653 12624 TCF ENDMAXDV # GO ADD C AND DO DIVIDE, ATTACHING SIGN
044197,002039: # BEFORE EXITING.
044198,002040:
044199,002041: # Page 1065
044200,002042: # VECTOR DIVIDED BY SCALAR, V/SC, IS EXECUTED HERE. THE VECTOR IS NOW IN MPAC WITH SCALAR IN BUF.
044201,002043:
044202,002044: 00,2654 44753 V/SC2 CS ONE # INITIALIZE DIVIDEND NORMALIZATION COUNT
044203,002045: 00,2655 54137 TS DVNORMCT # AND DIVISION SIGN REGISTER.
044204,002046: 00,2656 54127 TS VBUF +5
044205,002047:
044206,002048: 00,2657 03010 TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR
044207,002049:
044208,002050: 00,2660 52131 DXCH BUF
044209,002051: 00,2661 07547 TC ALSIGNAG # SIGN AGREE BUF
044210,002052: 00,2662 52131 DXCH BUF
044211,002053: 00,2663 10130 CCS BUF # FORCE DIVISOR POSITIVE WITH MAJOR PART
044212,002054: 00,2664 12721 TCF /BUF+ # NON-ZERO (IF POSSIBLE).
044213,002055: 00,2665 12667 TCF +2
044214,002056: 00,2666 12715 TCF /BUF-
044215,002057:
044216,002058: 00,2667 56131 XCH BUF +1 # SHIFT VECTOR AND SCALAR LEFT 14.
044217,002059: 00,2670 56130 XCH BUF
044218,002060: 00,2671 56155 XCH MPAC +1
044219,002061: 00,2672 56154 XCH MPAC
044220,002062: 00,2673 00006 EXTEND # CHECK FOR OVERFLOW IN EACH CASE.
044221,002063: 00,2674 12676 BZF +2
044222,002064: 00,2675 12405 TCF DVOVF
044223,002065:
044224,002066: 00,2676 56160 XCH MPAC +4
044225,002067: 00,2677 56157 XCH MPAC +3
044226,002068: 00,2700 00006 EXTEND
044227,002069: 00,2701 12703 BZF +2
044228,002070: 00,2702 12405 TCF DVOVF
044229,002071:
044230,002072: 00,2703 56162 XCH MPAC +6
044231,002073: 00,2704 56161 XCH MPAC +5
044232,002074: 00,2705 00006 EXTEND
044233,002075: 00,2706 12710 BZF +2
044234,002076: 00,2707 12405 TCF DVOVF
044235,002077:
044236,002078: 00,2710 10130 CCS BUF
044237,002079: 00,2711 12721 TCF /BUF+
044238,002080: 00,2712 12405 TCF DVOVF # ZERO DIVISOR - OVERFLOW.
044239,002081: 00,2713 12715 TCF /BUF-
044240,002082: 00,2714 12405 TCF DVOVF
044241,002083:
044242,002084: 00,2715 00006 /BUF- EXTEND # ON NEGATIVE, COMPLEMENT BUF AND MAINTAIN
044243,002085: 00,2716 40131 DCS BUF # DVSIGN IN VBUF +5.
044244,002086: 00,2717 52131 DXCH BUF
044245,002087: 00,2720 24127 INCR VBUF +5
044246,002088:
044247,002089: # Page 1066
044248,002090: 00,2721 00006 /BUF+ EXTEND
044249,002091: 00,2722 30131 DCA BUF # LEAVE ABS(ORIG DIVISOR) IN BUF2
044250,002092: 00,2723 52134 DXCH BUF2 # FOR OVERFLOW TESTING
044251,002093: 00,2724 12732 TCF /NORM # NORMALIZE DIVISOR IN BUF.
044252,002094:
044253,002095: 00,2725 00006 /NORM2 EXTEND # IF LESS THAN .5, AUGMENT DVNORMCT AND
044254,002096: 00,2726 24137 AUG DVNORMCT # DOUBLE DIVISOR.
044255,002097: 00,2727 00006 EXTEND
044256,002098: 00,2730 30131 DCA BUF
044257,002099: 00,2731 20131 DAS BUF
044258,002100:
044259,002101: 00,2732 30130 /NORM CA BUF # SEE IF DIVISOR NORMALIZED.
044260,002102: 00,2733 60000 DOUBLE
044261,002103: 00,2734 54000 OVSK
044262,002104: 00,2735 12725 TCF /NORM2 # DOUBLE AND TRY AGAIN IF NOT.
044263,002105:
044264,002106: 00,2736 02750 TC V/SCDV # DO X COMPONENT DIVIDE.
044265,002107: 00,2737 52160 DXCH MPAC +3 # SUPPLY ARGUMENTS IN USUAL SEQUENCE.
044266,002108: 00,2740 52155 DXCH MPAC
044267,002109: 00,2741 52160 DXCH MPAC +3
044268,002110:
044269,002111: 00,2742 02750 TC V/SCDV # Y COMPONENT.
044270,002112: 00,2743 52162 DXCH MPAC +5
044271,002113: 00,2744 52155 DXCH MPAC
044272,002114: 00,2745 52162 DXCH MPAC +5
044273,002115:
044274,002116: 00,2746 02750 TC V/SCDV # Z COMPONENT.
044275,002117: 00,2747 17423 TCF VROTATEX # GO RE-ARRANGE COMPONENTS BEFORE EXIT.
044276,002118:
044277,002119: # Page 1067
044278,002120: # SUBROUTINE USED BY V/SC TO DIVIDE VECTOR COMPONENT IN MPAC,+1 BY THE SCALAR GIVEN IN BUF.
044279,002121:
044280,002122: 00,2750 30127 V/SCDV CA VBUF +5 # REFLECTS SIGN OF SCALAR.
044281,002123: 00,2751 54136 TS DVSIGN
044282,002124:
044283,002125: 00,2752 10154 CCS MPAC # FORCE MPAC POSITIVE, EXITING ON ZERO.
044284,002126: 00,2753 12767 TCF /MPAC+
044285,002127: 00,2754 12756 TCF +2
044286,002128: 00,2755 12763 TCF /MPAC-
044287,002129:
044288,002130: 00,2756 10155 CCS MPAC +1
044289,002131: 00,2757 12767 TCF /MPAC+
044290,002132: 00,2760 00002 TC Q
044291,002133: 00,2761 12763 TCF /MPAC-
044292,002134: 00,2762 00002 TC Q
044293,002135:
044294,002136: 00,2763 00006 /MPAC- EXTEND # USUAL COMPLEMENTING AND SETTING OF SIGN.
044295,002137: 00,2764 40155 DCS MPAC
044296,002138: 00,2765 52155 DXCH MPAC
044297,002139: 00,2766 24136 INCR DVSIGN
044298,002140:
044299,002141: 00,2767 44753 /MPAC+ CS ONE # INITIALIZE NEAR-ONE SWITCH.
044300,002142: 00,2770 54140 TS MAXDVSW
044301,002143:
044302,002144: 00,2771 40154 CS MPAC # CHECK POSSIBLE OVERFLOW.
044303,002145: 00,2772 60133 AD BUF2 # UNNORMALIZED INPUT DIVISOR.
044304,002146: 00,2773 10000 CCS A
044305,002147: 00,2774 13004 TCF DDVCALL # NOT NEAR-ONE
044306,002148: 00,2775 12777 TCF +2 # +0 IS JUST POSSIBLE
044307,002149: 00,2776 12405 TCF DVOVF # NO HOPE
044308,002150: 00,2777 54140 TS MAXDVSW # SIGNAL POSSIBLE NEAR-ONE CASE
044309,002151: 00,3000 40155 CS MPAC +1 # SEE IF DIVISION CAN BE DONE
044310,002152: 00,3001 60134 AD BUF2 +1
044311,002153: 00,3002 00006 EXTEND
044312,002154: 00,3003 62405 BZMF DVOVF
044313,002155:
044314,002156: 00,3004 52155 DDVCALL DXCH MPAC # CALL PRE-DIVIDE NORMALIZATION.
044315,002157: 00,3005 50137 INDEX DVNORMCT
044316,002158: 00,3006 12565 TCF MAXTEST
044317,002159:
044318,002160: # Page 1068
044319,002161: 00,3007 32506 SLOPELO DEC .8324
044320,002162:
044321,002163: 00,3010 56002 VECAGREE XCH Q # SAVE Q IN A
044322,002164: 00,3011 52155 DXCH MPAC
044323,002165: 00,3012 07547 TC ALSIGNAG # SIGNAGREE MPAC
044324,002166: 00,3013 52155 DXCH MPAC
044325,002167: 00,3014 52160 DXCH MPAC +3
044326,002168: 00,3015 07547 TC ALSIGNAG # SIGN AGREE MPAC +3
044327,002169: 00,3016 52160 DXCH MPAC +3
044328,002170: 00,3017 52162 DXCH MPAC +5
044329,002171: 00,3020 07547 TC ALSIGNAG # SIGNAGREE MPAC +5
044330,002172: 00,3021 52162 DXCH MPAC +5
044331,002173: 00,3022 00000 TC A
044332,002174:
044333,002175: # Page 1069
044334,002176: # THE FOLLOWING ROUTINE EXECUTES THE UNIT INSTRUCTION, WHICH TAKES THE UNIT OF THE VECTOR IN MPAC.
044335,002177:
044336,002178: 00,3023 03010 UNIT TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR
044337,002179: 00,3024 07535 TC MPACVBUF # SAVE ARGUMENT IN VBUF
044338,002180: 00,3025 34755 CAF ZERO # MUST SENSE OVERFLOW IN FOLLOWING DOT.
044339,002181: 00,3026 56121 XCH OVFIND
044340,002182: 00,3027 54141 TS TEM1
044341,002183: 00,3030 03317 TC VSQSUB # DOT MPAC WITH ITSELF.
044342,002184: 00,3031 30141 CA TEM1
044343,002185: 00,3032 56121 XCH OVFIND
044344,002186: 00,3033 00006 EXTEND
044345,002187: 00,3034 13036 BZF +2
044346,002188: 00,3035 12405 TCF DVOVF
044347,002189: 00,3036 00006 EXTEND
044348,002190: 00,3037 30155 DCA MPAC # LEAVE THE SQUARE OF THE LENGTH OF THE
044349,002191: 00,3040 50120 INDEX FIXLOC # ARGUMENT IN LVSQUARE.
044350,002192: 00,3041 52043 DXCH LVSQUARE
044351,002193:
044352,002194: 00,3042 03343 TC SQRTSUB # GO TAKE THE NORMALIZED SQUARE ROOT.
044353,002195:
044354,002196: 00,3043 10154 CCS MPAC # CHECK FOR UNIT OVERFLOW.
044355,002197: 00,3044 13051 TCF +5 # MPAC IS NOT LESS THAN .5 UNLESS
044356,002198: 00,3045 54001 TS L
044357,002199: 00,3046 50120 INDEX FIXLOC
044358,002200: 00,3047 52045 DXCH LV
044359,002201: 00,3050 12405 TCF DVOVF # INPUT TO SQRTSUB WAS 0.
044360,002202:
044361,002203: 00,3051 44317 CS FOURTEEN # SEE IF THE INPUT WAS SO SMALL THAT THE
044362,002204: 00,3052 60135 AD MPTEMP # FIRST TWO REGISTERS OF THE SQUARE WERE 0
044363,002205: 00,3053 10000 CCS A
044364,002206: 00,3054 40000 COM # IF SO, SAVE THE NEGATIVE OF THE SHIFT
044365,002207: 00,3055 13133 TCF SMALL # COUNT -15D.
044366,002208:
044367,002209: 00,3056 13065 TCF LARGE # (THIS IS USUALLY THE CASE.)
044368,002210:
044369,002211: 00,3057 44761 CS THIRTEEN # IF THE SHIFT COUNT WAS EXACTLY 14, SET
044370,002212: 00,3060 54135 TS MPTEMP # THE PRE-DIVIDE NORM COUNT TO -13D.
044371,002213:
044372,002214: 00,3061 30154 CA MPAC # SHIFT THE LENGTH RIGHT 14 BEFORE STORING
044373,002215: 00,3062 54001 SMALL2 TS L # (SMALL EXITS TO THIS POINT).
044374,002216: 00,3063 34755 CAF ZERO
044375,002217: 00,3064 13112 TCF LARGE2 # GO TO STORE LENGTH AND PROCEED.
044376,002218:
044377,002219: 00,3065 10135 LARGE CCS MPTEMP # MOST ALL CASES COME HERE.
044378,002220: 00,3066 13074 TCF LARGE3 # SEE IF NO NORMALIZATION WAS REQUIRED BY
044379,002221: 00,3067 42024 CS SRDDV # SQRT, AND IF SO, SET UP FOR A SHIFT
044380,002222: 00,3070 54135 TS MPTEMP # RIGHT 1 BEFORE DIVIDING TO PRODUCE
044381,002223: 00,3071 00006 EXTEND # THE DESIRED HALF UNIT VECTOR.
044382,002224: 00,3072 30155 DCA MPAC
044383,002225: # Page 1070
044384,002226: 00,3073 13112 TCF LARGE2
044385,002227:
044386,002228: # Page 1071
044387,002229: 00,3074 40000 LARGE3 COM # LEAVE NEGATIVE OF SHIFT COUNT-1 FOR
044388,002230: 00,3075 54135 TS MPTEMP # PREDIVIDE LEFT SHIFT.
044389,002231:
044390,002232: 00,3076 40000 COM # PICK UP REQUIRED SHIFTING BIT TO UNNORM-
044391,002233: 00,3077 50000 INDEX A # ALIZE THE SQRT RESULT.
044392,002234: 00,3100 34736 CAF BIT14
044393,002235: 00,3101 54130 TS BUF
044394,002236: 00,3102 00006 EXTEND
044395,002237: 00,3103 70155 MP MPAC +1
044396,002238: 00,3104 56130 XCH BUF
044397,002239: 00,3105 00006 EXTEND # (UNNORMALIZE THE SQRT FOR LV).
044398,002240: 00,3106 70154 MP MPAC
044399,002241: 00,3107 56001 XCH L
044400,002242: 00,3110 60130 AD BUF
044401,002243: 00,3111 56001 XCH L
044402,002244:
044403,002245: 00,3112 50120 LARGE2 INDEX FIXLOC
044404,002246: 00,3113 52045 DXCH LV # LENGTH NOW STORED IN WORK AREA.
044405,002247:
044406,002248: 00,3114 44753 CS ONE
044407,002249: 00,3115 54140 TS MAXDVSW # NO MAXDV CASES IN UNIT.
044408,002250:
044409,002251: 00,3116 52123 DXCH VBUF # PREPARE X COMPONENT FOR DIVIDE, SETTING
044410,002252: 00,3117 52155 DXCH MPAC # LENGTH OF VECTOR AS DIVISOR IN BUF.
044411,002253: 00,3120 52131 DXCH BUF
044412,002254: 00,3121 03151 TC UNITDV
044413,002255:
044414,002256: 00,3122 52125 DXCH VBUF +2 # DO Y AND Z IN USUAL FASHION SO WE CAN
044415,002257: 00,3123 52155 DXCH MPAC # EXIT THROUGH VROTATEX.
044416,002258: 00,3124 52160 DXCH MPAC +3
044417,002259: 00,3125 03151 TC UNITDV
044418,002260:
044419,002261: 00,3126 52127 DXCH VBUF +4
044420,002262: 00,3127 52155 DXCH MPAC
044421,002263: 00,3130 52162 DXCH MPAC +5
044422,002264: 00,3131 03151 TC UNITDV
044423,002265: 00,3132 17423 TCF VROTATEX # AND EXIT.
044424,002266:
044425,002267: # Page 1072
044426,002268: # IF THE LENGTH OF THE ARGUMENT VECTOR WAS LESS THAN 2(-28), EACH COMPONENT MUST BE SHIFTED LEFT AT LEAST
044427,002269: # 14 PLACES BEFORE TEH DIVIDE, NOTE THAT IN THIS CASE, THE MAJOR PART OF EACH COMPONENT IS ZERO.
044428,002270:
044429,002271: 00,3133 54135 SMALL TS MPTEMP # NEGATIVE OF PRE-DIVIDE SHIFT COUNT.
044430,002272:
044431,002273: 00,3134 34755 CAF ZERO # SHIFT EACH COMPONENT LEFT 14.
044432,002274: 00,3135 56123 XCH VBUF +1
044433,002275: 00,3136 56122 XCH VBUF
044434,002276: 00,3137 56125 XCH VBUF +3
044435,002277: 00,3140 56124 XCH VBUF +2
044436,002278: 00,3141 56127 XCH VBUF +5
044437,002279: 00,3142 56126 XCH VBUF +4
044438,002280:
044439,002281: 00,3143 40135 CS MPTEMP
044440,002282: 00,3144 50000 INDEX A
044441,002283: 00,3145 34736 CAF BIT14
044442,002284: 00,3146 00006 EXTEND
044443,002285: 00,3147 70154 MP MPAC
044444,002286: 00,3150 13062 TCF SMALL2
044445,002287:
044446,002288: 00,3151 4761 THIRTEEN = OCT15
044447,002289: 00,3151 4317 FOURTEEN = OCT16
044448,002290: 00,3151 4317 OCT16 = R1D1
044449,002291:
044450,002292: # Page 1073
044451,002293: # THE FOLLOWING ROUTINE SETS UP THE CALL TO THE DIVIDE ROUTINES.
044452,002294:
044453,002295: 00,3151 10154 UNITDV CCS MPAC # FORCE MPAC POSITIVE IF POSSIBLE, SETTING
044454,002296: 00,3152 13170 TCF UMPAC+ # DVSIGN ACCORDING TO THE SIGN OF MPAC
044455,002297: 00,3153 13155 TCF +2 # SINCE THE DIVISOR IS ALWAYS POSITIVE
044456,002298: 00,3154 13162 TCF UMPAC- # HERE.
044457,002299:
044458,002300: 00,3155 10155 CCS MPAC +1
044459,002301: 00,3156 13170 TCF UMPAC+
044460,002302: 00,3157 00002 TC Q # EXIT IMMEDIATELY ON ZERO.
044461,002303: 00,3160 13162 TCF UMPAC-
044462,002304: 00,3161 00002 TC Q
044463,002305:
044464,002306: 00,3162 44755 UMPAC- CS ZERO # IF NEGATIVE, SET -0 IN DVSIGN FOR FINAL
044465,002307: 00,3163 54136 TS DVSIGN # COMPLEMENT.
044466,002308: 00,3164 00006 EXTEND
044467,002309: 00,3165 40155 DCS MPAC # PICK UP ABSOLUTE VALUE OF ARG AND JUMP.
044468,002310: 00,3166 50135 INDEX MPTEMP
044469,002311: 00,3167 12564 TCF MAXTEST -1
044470,002312:
044471,002313: 00,3170 54136 UMPAC+ TS DVSIGN # SET DVSIGN FOR POSITIVE QUOTIENT.
044472,002314: 00,3171 52155 DXCH MPAC
044473,002315: 00,3172 50135 INDEX MPTEMP
044474,002316: 00,3173 12564 TCF MAXTEST -1
044475,002317:
044476,002318: # Page 1074
044477,002319: # MISCELLANEOUS UNARY OPERATIONS.
044478,002320:
044479,002321: 00,3174 03300 DSQ TC DSQSUB # SQUARE THE DP CONTENTS OF MPAC.
044480,002322: 00,3175 16064 TCF DANZIG
044481,002323:
044482,002324: 00,3176 10163 ABVALABS CCS MODE # ABVAL OR ABS INSTRUCTION.
044483,002325: 00,3177 13226 TCF ABS # DO ABS ON SCALAR.
044484,002326: 00,3200 13226 TCF ABS
044485,002327:
044486,002328: 00,3201 03317 ABVAL TC VSQSUB # DOT MPAC WITH ITSELF.
044487,002329: 00,3202 22163 LXCH MODE # MODE IS NOW DP (L ZERO AFTER DAS).
044488,002330:
044489,002331: 00,3203 00006 EXTEND # STORE SQUARE OF LENGTH IN WORK AREA.
044490,002332: 00,3204 30155 DCA MPAC
044491,002333: 00,3205 50120 INDEX FIXLOC
044492,002334: 00,3206 52043 DXCH LVSQUARE
044493,002335:
044494,002336: # Page 1075
044495,002337: # PROGRAM DESCRIPTION -- SUBROUTINE SQRT
044496,002338:
044497,002339: # FUNCTIONAL DESCRIPTION -- DOUBLE PRECISION SQUARE ROOT ROUTINE
044498,002340: # THIS PROGRAM TAKES THE SQUARE ROOT OF THE 27 OR 28 MOST SIGNIFICANT BITS IN THE TRIPLE PRECISION SET OF
044499,002341: # NUMBERS -- MPAC, MPAC+1, AND MPAC+2. THE ROOT IS RETURNED DOUBLE PRECISION IN MPAC AND MPAC+1.
044500,002342:
044501,002343: # WARNING -- THIS SUBROUTINE USES A TRIPLE PRECISION INPUT. THE PROGRAMMER MUST ASSURE THE CONTENTS OF MPAC+2
044502,002344: # ESPECIALLY IF THE CONTENTS OF MPAC IS SMALL OR ZERO. FOR DETAILS SEE STG MEMO NO.949.
044503,002345:
044504,002346: # CALLING SEQUENCE -- IN INTERPRETIVE MODE, I.E., FOLLOWING `TC INTPRET', `SQRT', NO ADDRESS IS ALLOWED.
044505,002347: # INPUT SCALING: THE BINARY POINT IS ASSUMED TO THE RIGHT OF BIT 15. THE ANSWER IS RETURNED WITH THE SAME SCALING.
044506,002348:
044507,002349: # SUBROUTINES -- GENSCR, MPACSHR, SQRTSUB, ABORT
044508,002350:
044509,002351: # ABORT EXIT MODE -- ABORTS ON NEGATIVE INPUT -1.2X10E-4 (77775 OCTAL) OR LESS.
044510,002352: # DISPLAYS ERROR CODE 1302
044511,002353: # TC ABORT
044512,002354: # OCT 1302
044513,002355:
044514,002356: # DEBRIS -- LOCATIONS BUF, MPTEMP, ADDRWD ARE USED
044515,002357:
044516,002358: 00,3207 03343 SQRT TC SQRTSUB # TAKE THE SQUARE ROOT OF MPAC.
044517,002359: 00,3210 10135 CCS MPTEMP # RETURNED NORMALIZED SQUARE ROOT. SEE IF
044518,002360: 00,3211 13213 TCF +2 # ANY UN-NORMALIZATION REQUIRED AND EXIT
044519,002361: 00,3212 16064 TCF DANZIG # IF NOT.
044520,002362:
044521,002363: 00,3213 63733 AD NEG12 # A RIGHT SHIFT OF MORE THAN 13 COULD BE
044522,002364: 00,3214 00006 EXTEND # REQUIRED IF INPUT WAS ZERO IN MPAC,+1.
044523,002365: 00,3215 63221 BZMF SQRTSHFT # GOES HERE IN MOST CASES.
044524,002366: 00,3216 22007 ZL # IF A LONG SHIFT IS REQUIRED, GO TO
044525,002367: 00,3217 22116 LXCH ADDRWD # GENERAL RIGHT SHIFT ROUTINES.
044526,002368: 00,3220 12303 TCF GENSCR +4 # ADDRWD WAS ZERO TO PREVENT ROUND.
044527,002369:
044528,002370: 00,3221 50135 SQRTSHFT INDEX MPTEMP # SELECT SHIFTING BIT AND EXIT THROUGH
044529,002371: 00,3222 34735 CAF BIT15 # SHIFT ROUTINES.
044530,002372: 00,3223 54135 TS MPTEMP
044531,002373: 00,3224 34755 CAF ZERO # TO ZERO MPAC +2 IN THE PROCESS.
044532,002374: 00,3225 12036 TCF MPACSHR +3
044533,002375:
044534,002376: 00,3226 06726 ABS TC BRANCH # TEST SIGN OF MPAC AND COMPLEMENT IF
044535,002377: 00,3227 16064 TCF DANZIG
044536,002378: 00,3230 16064 TCF DANZIG
044537,002379: 00,3231 17673 TCF COMP
044538,002380:
044539,002381: # Page 1076
044540,002382: 00,3232 44751 VDEF CS FOUR # VECTOR DEFINE -- ESSENTIALLY TREATS
044541,002383: 00,3233 26166 ADS PUSHLOC # SCALAR IN MPAC AS X COMPONENT, PUSHES UP
044542,002384: 00,3234 00006 EXTEND # FOR Y AND THEN AGAIN FOR Z.
044543,002385: 00,3235 50000 INDEX A
044544,002386: 00,3236 30003 DCA 2
044545,002387: 00,3237 52160 DXCH MPAC +3
044546,002388: 00,3240 00006 EXTEND
044547,002389: 00,3241 50166 INDEX PUSHLOC
044548,002390: 00,3242 30001 DCA 0
044549,002391: 00,3243 52162 DXCH MPAC +5
044550,002392: 00,3244 16524 TCF VMODE # MODE IS NON VECTOR.
044551,002393:
044552,002394: 00,3245 03317 VSQ TC VSQSUB # DOT MPAC WITH ITSELF.
044553,002395: 00,3246 17335 TCF DMODE # MODE IS NOW DP.
044554,002396:
044555,002397: 00,3247 00006 PUSH EXTEND # PUSH DOWN MPAC LEAVING IT LOADED.
044556,002398: 00,3250 30155 DCA MPAC
044557,002399: 00,3251 50166 INDEX PUSHLOC # PUSH DOWN FIRST TWO REGISTERS IN EACH
044558,002400: 00,3252 52001 DXCH 0
044559,002401:
044560,002402: 00,3253 50163 INDEX MODE # INCREMENT PUSHDOWN POINTER.
044561,002403: 00,3254 36247 CAF NO.WDS
044562,002404: 00,3255 26166 ADS PUSHLOC
044563,002405:
044564,002406: 00,3256 10163 CCS MODE
044565,002407: 00,3257 13272 TCF TPUSH # PUSH DOWN MPAC +2.
044566,002408: 00,3260 16064 TCF DANZIG # DONE FOR DP.
044567,002409:
044568,002410: 00,3261 00006 EXTEND # ON VECTOR, PUSH DOWN Y AND Z COMPONENTS.
044569,002411: 00,3262 30160 DCA MPAC +3
044570,002412: 00,3263 50166 INDEX PUSHLOC
044571,002413: 00,3264 51775 DXCH 0 -4
044572,002414: 00,3265 00006 EXTEND
044573,002415: 00,3266 30162 DCA MPAC +5
044574,002416: 00,3267 50166 INDEX PUSHLOC
044575,002417: 00,3270 51777 DXCH 0 -2
044576,002418: 00,3271 16064 TCF DANZIG
044577,002419:
044578,002420: 00,3272 30156 TPUSH CA MPAC +2
044579,002421: 00,3273 16557 TCF ENDTPUSH +2
044580,002422:
044581,002423: 00,3274 50120 RVQ INDEX FIXLOC # RVQ -- RETURN IVA QPRET.
044582,002424: 00,3275 30052 CA QPRET
044583,002425: 00,3276 54117 TS POLISH
044584,002426: 00,3277 16655 TCF GOTO +4 # (ASSUME QPRET POINTS TO FIXED ONLY.)
044585,002427:
044586,002428: # Page 1077
044587,002429: # THE FOLLOWING SUBROUTINES ARE USED IN SQUARING MPAC, IN BOTH THE SCALAR AND VECTOR SENSE. THEY ARE
044588,002430: # SPECIAL CASES OF DMPSUB AND DOTSUB, PUT IN TO SAVE SOME TIME.
044589,002431:
044590,002432: 00,3300 30155 DSQSUB CA MPAC +1 # SQUARES THE SCALAR CONTENTS OF MPAC.
044591,002433: 00,3301 00006 EXTEND
044592,002434: 00,3302 70000 SQUARE
044593,002435: 00,3303 54156 TS MPAC +2
044594,002436: 00,3304 34755 CAF ZERO # FORM 2(CROSS TERM).
044595,002437: 00,3305 56155 XCH MPAC +1
044596,002438: 00,3306 00006 EXTEND
044597,002439: 00,3307 70154 MP MPAC
044598,002440: 00,3310 20001 DDOUBL # AND MAYBE OVEFLOW.
044599,002441: 00,3311 20156 DAS MPAC +1 # AND SET A TO NET OVERFLOW.
044600,002442: 00,3312 56154 XCH MPAC
044601,002443: 00,3313 00006 EXTEND
044602,002444: 00,3314 70000 SQUARE
044603,002445: 00,3315 20155 DAS MPAC
044604,002446: 00,3316 00002 TC Q
044605,002447:
044606,002448: 00,3317 00006 VSQSUB EXTEND # DOTS THE VECTOR IN MPAC WITH ITSELF.
044607,002449: 00,3320 22137 QXCH DOTRET
044608,002450: 00,3321 03300 TC DSQSUB # SQUARE THE X COMPONENT.
044609,002451: 00,3322 52160 DXCH MPAC +3
044610,002452: 00,3323 52155 DXCH MPAC
044611,002453: 00,3324 52131 DXCH BUF # SO WE CAN END IN DOTSUB.
044612,002454: 00,3325 30156 CA MPAC +2
044613,002455: 00,3326 54132 TS BUF +2
044614,002456:
044615,002457: 00,3327 03300 TC DSQSUB # SQUARE Y COMPONENT.
044616,002458: 00,3330 52156 DXCH MPAC +1
044617,002459: 00,3331 20132 DAS BUF +1
044618,002460: 00,3332 60154 AD MPAC
044619,002461: 00,3333 60130 AD BUF
044620,002462: 00,3334 54130 TS BUF
044621,002463: 00,3335 13337 TCF +2
044622,002464: 00,3336 54121 TS OVFIND # IF OVERFLOW.
044623,002465:
044624,002466: 00,3337 52162 DXCH MPAC +5
044625,002467: 00,3340 52155 DXCH MPAC
044626,002468: 00,3341 03300 TC DSQSUB # SQUARE Z COMPONENT.
044627,002469: 00,3342 17210 TCF ENDDOT # END AS IN DOTSUB.
044628,002470:
044629,002471: # Page 1078
044630,002472: # DOUBLE PRECISION SQUARE ROOT ROUTINE. TAKE THE SQUARE ROOT OF THE TRIPLE PRECISION (MPAC +2 USED ONLY
044631,002473: # IN NORMALIZATION) CONTENTS OF MPAC AND LEAVE THE NORMALIZED RESULT IN MPAC (C(MPAC) GREATER THAN OR EQUAL TO
044632,002474: # .5). THE RIGHT SHIFT COUNT (TC UNNORMALIZE) IS LEFT IN MPTEMP.
044633,002475:
044634,002476: 00,3343 34755 SQRTSUB CAF ZERO # START BY ZEROING RIGHT SHIFT COUNT.
044635,002477: 00,3344 54135 TS MPTEMP
044636,002478:
044637,002479: 00,3345 10154 CCS MPAC # CHECK FOR POSITIVE ARGUMENT, SHIFTING
044638,002480: 00,3346 13405 TCF SMPAC+ # FIRST SIGNIFICANT MPAC REGISTER INTO
044639,002481: 00,3347 13351 TCF +2 # MPAC ITSELF.
044640,002482: 00,3350 13373 TCF SQRTNEG # SEE IF MAG OF ARGUMENT LESS THAN 10(-4).
044641,002483:
044642,002484: 00,3351 56156 XCH MPAC +2 # MPAC IS ZERO -- SHIFT LEFT 14.
044643,002485: 00,3352 56155 XCH MPAC +1
044644,002486: 00,3353 54154 TS MPAC
044645,002487: 00,3354 34757 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
044646,002488: 00,3355 54135 TS MPTEMP
044647,002489:
044648,002490: 00,3356 10154 CCS MPAC # SEE IF MPAC NOW PNZ.
044649,002491: 00,3357 13405 TCF SMPAC+
044650,002492: 00,3360 13362 TCF +2
044651,002493: 00,3361 13376 TCF ZEROANS # NEGATIVE BUT LESS THAN 10(-4) IN MAG.
044652,002494:
044653,002495: 00,3362 56155 XCH MPAC +1 # XERO -- SHIFT LEFT 14 AGAIN.
044654,002496: 00,3363 54154 TS MPAC
044655,002497: 00,3364 34757 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
044656,002498: 00,3365 26135 ADS MPTEMP
044657,002499:
044658,002500: 00,3366 10154 CCS MPAC
044659,002501: 00,3367 13405 TCF SMPAC+
044660,002502: 00,3370 00002 TC Q # SQRT(0) = 0.
044661,002503: 00,3371 13376 TCF ZEROANS
044662,002504: 00,3372 13453 TCF FIXROOT # DO NOT LEAVE SQRTSUB WITH -0 IN MPAC.
044663,002505:
044664,002506: 00,3373 10000 SQRTNEG CCS A # ARGUMENT IS NEGATIVE, BUT SEE IF SIGN-
044665,002507: 00,3374 13402 TCF SQRTABRT # CORRECTED ARGUMENT IS LESS THAN 10(-4)
044666,002508:
044667,002509: 00,3375 10155 CCS MPAC +1 # IN MAGNITUDE. IF SO, CALL ANSWER ZERO.
044668,002510: 00,3376 34755 ZEROANS CAF ZERO # FORCE ANSWER TO ZERO HERE.
044669,002511: 00,3377 13453 TCF FIXROOT
044670,002512: 00,3400 13402 TCF SQRTABRT
044671,002513: 00,3401 13453 TCF FIXROOT
044672,002514:
044673,002515: 00,3402 52165 SQRTABRT DXCH LOC
044674,002516: 00,3403 05716 TC P00DOO1
044675,002517: 00,3404 21302 OCT 21302
044676,002518:
044677,002519: 00,3405 62444 SMPAC+ AD -1/2+2 # SEE IF ARGUMENT GREATER THAN OR EQUAL TO
044678,002520: # Page 1079
044679,002521: 00,3406 00006 EXTEND # .5.
044680,002522: 00,3407 63456 BZMF SRTEST # IF SO, SEE IF LESS THAN .25.
044681,002523:
044682,002524: 00,3410 52155 DXCH MPAC # WE WILL TAKE THE SQUARE ROOT OF MPAC/2.
044683,002525: 00,3411 22021 LXCH SR # SHIFT RIGHT 1 AND GO TO THE SQRT ROUTINE
044684,002526: 00,3412 00006 EXTEND
044685,002527: 00,3413 74736 MP HALF
044686,002528: 00,3414 52155 DXCH MPAC
044687,002529: 00,3415 56021 XCH SR
044688,002530: 00,3416 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
044689,002531:
044690,002532: 00,3417 32314 ARGHI CAF SLOPEHI # ARGUMENT BETWEEN .25 AND .5, GET A
044691,002533: 00,3420 00006 EXTEND # LINEAR APPROXIMATION FOR THIS RANGE.
044692,002534: 00,3421 70154 MP MPAC
044693,002535: 00,3422 62566 AD BIASHI # X0/2 = (MPAC/2)(SLOPHI) + BIASHI/2.
044694,002536:
044695,002537: 00,3423 54130 +4 TS BUF # X0/2 (ARGLO ENTERS HERE).
044696,002538: 00,3424 30154 CA MPAC # SINGLE-PRECISION THROUGHOUT.
044697,002539: 00,3425 22007 ZL
044698,002540: 00,3426 00006 EXTEND
044699,002541: 00,3427 10130 DV BUF # (MPAC/2)/(X0/2)
044700,002542: 00,3430 00006 EXTEND
044701,002543: 00,3431 74736 MP HALF
044702,002544: 00,3432 26130 ADS BUF # X1 = X0/2 + .5(MPAX/2)/(X0/2)
044703,002545:
044704,002546: 00,3433 00006 EXTEND
044705,002547: 00,3434 74736 MP HALF # FORM UP X1/2.
044706,002548: 00,3435 52155 DXCH MPAC # SAVE AND BRING OUT ARGUMENT.
044707,002549: 00,3436 00006 EXTEND # TAKE DP QUOTIENT WITH X1.
044708,002550: 00,3437 10130 DV BUF
044709,002551: 00,3440 54131 TS BUF +1 # SAVE MAJOR PART OF QUOTIENT.
044710,002552: 00,3441 34755 CAF ZERO # FORM MINOR PART OF QUOTIENT USING
044711,002553: 00,3442 56001 XCH L # (REMAINDER,0).
044712,002554: 00,3443 00006 EXTEND
044713,002555: 00,3444 10130 DV BUF
044714,002556: 00,3445 54001 TS L # IN PREPARATION FOR DAS.
044715,002557: 00,3446 30131 CA BUF +1
044716,002558: 00,3447 20155 DAS MPAC # X2 = X1/2 + (MPAC/2)X1
044717,002559:
044718,002560: 00,3450 00006 EXTEND # OVERFLOWS IF ARG. NEAR POSMAX.
044719,002561: 00,3451 13455 BZF TCQBNK00
044720,002562: 00,3452 34733 CAF POSMAX
044721,002563: 00,3453 54154 FIXROOT TS MPAC
044722,002564: 00,3454 54155 TS MPAC +1
044723,002565: 00,3455 00002 TCQBNK00 TC Q # RETURN TO CALLER TO UNNORMALIZE, ETC.
044724,002566:
044725,002567: # Page 1080
044726,002568: 00,3456 64737 SRTEST AD QUARTER # ARGUMENT WAS LESS THAN .5, SEE IF LESS
044727,002569: 00,3457 00006 EXTEND # THAN .25.
044728,002570: 00,3460 63502 BZMF SQRTNORM # IF SO, BEGIN NORMALIZATION.
044729,002571:
044730,002572: 00,3461 52155 DXCH MPAC # IF BETWEEN .5 AND .25, SHIFT RIGHT 1 AND
044731,002573: 00,3462 22021 LXCH SR # START AT ARGLO.
044732,002574: 00,3463 00006 EXTEND
044733,002575: 00,3464 74736 MP HALF
044734,002576: 00,3465 52155 DXCH MPAC
044735,002577: 00,3466 56021 XCH SR
044736,002578: 00,3467 26155 ADS MPAC +1 # NO OVERFLOW.
044737,002579:
044738,002580: 00,3470 33007 ARGLO CAF SLOPELO # (NORMALIZED) ARGUMENT BETWEEN .125 AND
044739,002581: 00,3471 00006 EXTEND # .25
044740,002582: 00,3472 70154 MP MPAC
044741,002583: 00,3473 62270 AD BIASLO
044742,002584: 00,3474 13423 TCF ARGHI +4 # BEGIN SQUARE ROOT.
044743,002585:
044744,002586: 00,3475 00006 SQRTNM2 EXTEND # SHIFT LEFT 2 AND INCREMENT RIGHT SHIFT
044745,002587: 00,3476 30156 DCA MPAC +1 # COUNT (FOR TERMINAL UNNORMALIZATION).
044746,002588: 00,3477 20156 DAS MPAC +1
044747,002589: 00,3500 60154 AD MPAC
044748,002590: 00,3501 26154 ADS MPAC # (NO OVERFLOW).
044749,002591:
044750,002592: 00,3502 24135 SQRTNORM INCR MPTEMP # FIRST TIME THROUGH, JUST SHIFT LEFT 1
044751,002593: 00,3503 00006 EXTEND # (PUTS IN EFFECTIVE RIGHT SHIFT SINCE
044752,002594: 00,3504 30156 DCA MPAC +1 # WE WANT MPAC/2).
044753,002595: 00,3505 20156 DAS MPAC +1
044754,002596: 00,3506 60154 AD MPAC
044755,002597: 00,3507 26154 ADS MPAC # (AGAIN NO OVERFLOW).
044756,002598: 00,3510 60000 DOUBLE
044757,002599: 00,3511 54022 TS CYL
044758,002600:
044759,002601: 00,3512 10022 NORMTEST CCS CYL # SEE IF ARGUMENT NOW NORMALIZED AT
044760,002602: 00,3513 10022 CCS CYL # GREATER THAN .125.
044761,002603: 00,3514 13475 TCF SQRTNM2 # NO -- SHIFT LEFT 2 MORE AND TRY AGAIN.
044762,002604: 00,3515 13417 TCF ARGHI # YES -- NOW BETWEEN .5 AND .25.
044763,002605: 00,3516 13470 TCF ARGLO # ARGUMENT NOW BETWEEN .25 AND .125.
044764,002606:
044765,002607: # Page 1081
044766,002608: # TRIGONOMETRIC FUNCTION PACKAGE.
044767,002609: # THE FOLLOWING TRIGONOMETRIC FUNCTIONS ARE AVAIALABLE AS INTERPRETIVE OPERATIONS:
044768,002610: # 1. SIN COMPUTES (1/2)SINE(2 PI MPAC).
044769,002611: # 2. COS COMPUTES (1/2)COSINE(2 PI MPAC).
044770,002612: # 3. ASIN COMPUTES (1/2PI)ARCSINE(2 MPAC).
044771,002613: # 4. ACOS COMPUTES (1/2PI)ARCCOSINE(2 MPAC).
044772,002614:
044773,002615: # SIN-ASIN AND COS-ACOS ARE MUTUALLY INVERSE, I.E., SIN(ASIN(X)) = X.
044774,002616:
044775,002617: 00,3517 06726 COSINE TC BRANCH # FINDS COSINE USING THE IDENTITY
044776,002618: 00,3520 13523 TCF +3 # COS(X) = SIN(PI/2 - ABS(X)).
044777,002619: 00,3521 13526 TCF PRESINE
044778,002620: 00,3522 13526 TCF PRESINE
044779,002621:
044780,002622: 00,3523 00006 +3 EXTEND
044781,002623: 00,3524 40155 DCS MPAC
044782,002624: 00,3525 52155 DXCH MPAC
044783,002625:
044784,002626: 00,3526 34737 PRESINE CAF QUARTER # PI/2 SCALED.
044785,002627: 00,3527 26154 ADS MPAC
044786,002628:
044787,002629: 00,3530 52155 SINE DXCH MPAC # DOUBLE ARGUMENT.
044788,002630: 00,3531 20001 DDOUBL
044789,002631: 00,3532 54000 OVSK # SEE IF OVERFLOW PRESENT.
044790,002632: 00,3533 13536 TCF +3 # IF NOT, ARGUMENT OK AS IS.
044791,002633:
044792,002634: 00,3534 00006 EXTEND # IF SO, WE LOST (OR GAINED) PI, SO
044793,002635: 00,3535 40001 DCOM # COMPLEMENT MPAC USING THE IDENTITY
044794,002636: # SIN(X-(+)PI) = SIN(-X).
044795,002637: 00,3536 52155 +3 DXCH MPAC
044796,002638: 00,3537 30154 CA MPAC # SEE IF ARGUMENT GREATER THAN .5 IN
044797,002639: 00,3540 60000 DOUBLE # MAGNITUDE. IF SO, REDUCE IT TO LESS THAN
044798,002640: 00,3541 54001 TS L # .5 (+-PI/2 SCALED) AS FOLLOWS:
044799,002641: 00,3542 13553 TCF SN1
044800,002642:
044801,002643: 00,3543 50000 INDEX A # IF POSITIVE, FORM PI - X, IF NEGATIVE
044802,002644: 00,3544 34735 CAF NEG1/2 +1 # USE -PI -X.
044803,002645: 00,3545 60000 DOUBLE
044804,002646: 00,3546 00006 EXTEND
044805,002647: 00,3547 60154 SU MPAC # GUARANTEED NO OVERFLOW.
044806,002648: 00,3550 54154 TS MPAC
044807,002649: 00,3551 40155 CS MPAC +1
044808,002650: 00,3552 54155 TS MPAC +1
044809,002651:
044810,002652: # Page 1082
044811,002653: 00,3553 00006 SN1 EXTEND # SET UP TO EVALUATE HASTINGS POLYNOMIAL
044812,002654: 00,3554 30155 DCA MPAC
044813,002655: 00,3555 52134 DXCH BUF2
044814,002656: 00,3556 03300 TC DSQSUB # SQUARE MPAC.
044815,002657:
044816,002658: 00,3557 07225 TC POLY # EVALUATE FOURTH ORDER POLYNOMIAL.
044817,002659: 00,3560 00003 DEC 3 B-14
044818,002660: 00,3561 14441 37325 2DEC +.3926990796
044819,002661: 00,3563 53250 60764 2DEC -.6459637111
044820,002662: 00,3565 12146 21276 2DEC +.318758717
044821,002663: 00,3567 75466 71471 2DEC -.074780249
044822,002664: 00,3571 00236 32757 2DEC +.009694988
044823,002665:
044824,002666: 00,3573 32470 CAF LBUF2 # MULTIPLY BY ARGUMENT AND SHIFT LEFT 2.
044825,002667: 00,3574 07111 TC DMPSUB -1
044826,002668:
044827,002669: 00,3575 00006 EXTEND
044828,002670: 00,3576 30156 DCA MPAC +1
044829,002671: 00,3577 20156 DAS MPAC +1
044830,002672: 00,3600 60154 AD MPAC
044831,002673: 00,3601 26154 ADS MPAC # NEITHER SHIFT OVERFLOWS.
044832,002674: 00,3602 00006 EXTEND
044833,002675: 00,3603 30156 DCA MPAC +1
044834,002676: 00,3604 20156 DAS MPAC +1
044835,002677: 00,3605 60154 AD MPAC
044836,002678: 00,3606 26154 ADS MPAC
044837,002679: 00,3607 16064 TCF DANZIG
044838,002680:
044839,002681: # Page 1083
044840,002682: # ARCSIN/ARCCOS ROUTINE.
044841,002683:
044842,002684: 00,3610 33631 ARCSIN CAF LASINEX # COMPUTE ARCSIN BY USING THE IDENTITY
044843,002685: 00,3611 13613 TCF +2 # ARCSIN(X) = PI/2 - ARCCOS(X).
044844,002686:
044845,002687: 00,3612 33713 ARCCOS CAF LDANZIG # (EXITS IMMEDIATELY).
044846,002688: 00,3613 54136 TS ESCAPE
044847,002689: 00,3614 06726 TC BRANCH # TEST SIGN OF INPUT.
044848,002690: 00,3615 13625 TCF ACOSST # START IMMEDIATELY IF POSITIVE.
044849,002691: 00,3616 13731 TCF ACOSZERO # ARCCOS(0) = PI/2 = .25.
044850,002692: 00,3617 00006 EXTEND # IF NEGATIVE, USE THE IDENTITY
044851,002693: 00,3620 40155 DCS MPAC # ARCCOS(X) = PI - ARCCOS(-X), FORCING
044852,002694: 00,3621 52155 DXCH MPAC # ARGUMENT POSITIVE.
044853,002695: 00,3622 33734 CAF TCSUBTR # SET EXIT TO DO ABOVE BEFROE
044854,002696: 00,3623 56136 XCH ESCAPE # ARCSIN/ARCCOS CONSIDERATIONS.
044855,002697: 00,3624 54137 TS ESCAPE2
044856,002698:
044857,002699: 00,3625 44736 ACOSST CS HALF # TEST MAGNITUDE OF INPUT.
044858,002700: 00,3626 60154 AD MPAC
044859,002701: 00,3627 10000 CCS A
044860,002702: 00,3630 13721 TCF ACOSOVF # THIS IS PROBABLY AN OVERFLOW CASE.
044861,002703:
044862,002704: 00,3631 13707 LASINEX TCF ASINEX
044863,002705:
044864,002706: 00,3632 13642 TCF ACOSST2 # NO OVERFLOW -- PROCEED.
044865,002707:
044866,002708: 00,3633 10155 CCS MPAC +1 # IF MAJOR PART IS .5, CALL ANSWER 0
044867,002709: 00,3634 34755 CAF ZERO # UNLESS MINOR PART NEGATIVE.
044868,002710: 00,3635 13637 TCF ACOS=0
044869,002711:
044870,002712: 00,3636 13642 TCF ACOSST2
044871,002713:
044872,002714: 00,3637 54155 ACOS=0 TS MPAC +1
044873,002715: 00,3640 54154 TS MPAC
044874,002716: 00,3641 00136 TC ESCAPE
044875,002717:
044876,002718: 00,3642 00006 ACOSST2 EXTEND # NOW THAT ARGUMENT IS IN PROPER RANGE,
044877,002719: 00,3643 40155 DCS MPAC # BEGIN COMPUTATION. USE HASTINGS
044878,002720: 00,3644 64736 AD HALF # APPROXIMATION ARCCOS(X) = SQRT(1-X)P(X)
044879,002721: 00,3645 52155 DXCH MPAC # IN A SCALED VERSION WHERE P(X) IS A
044880,002722: 00,3646 52134 DXCH BUF2 # SEVENTH ORDER POLYNOMIAL.
044881,002723:
044882,002724: 00,3647 03343 TC SQRTSUB # RETURNS WITH NORMALIZED SQUARE ROOT.
044883,002725:
044884,002726: 00,3650 10135 CCS MPTEMP # SEE IF UN-NORMALIZATION REQUIRED.
044885,002727: 00,3651 13714 TCF ACOSSHR
044886,002728:
044887,002729: # Page 1084
044888,002730: 00,3652 52155 ACOS3 DXCH MPAC # SET UP FOR POLYNOMIAL EVALUATION.
044889,002731: 00,3653 52134 DXCH BUF2
044890,002732: 00,3654 52155 DXCH MPAC
044891,002733:
044892,002734: 00,3655 07225 TC POLY
044893,002735: 00,3656 00006 DEC 6 B-14
044894,002736: 00,3657 13240 23630 2DEC +.353553385 # COEFFICIENTS ARE C 2(+I)/PISQRT(2) WHERE
044895,002737: 00,3661 74721 47775 2DEC* -.0483017006 B+1* # I
044896,002738: 00,3663 02440 20237 2DEC* +.0200273085 B+2* # WEHRE C STANDS FOR ORIGINAL COEFFS.
044897,002739: 00,3665 75067 70742 2DEC* -.0112931863 B+3*
044898,002740: 00,3667 03436 26756 2DEC* +.00695311612 B+4*
044899,002741: 00,3671 74037 57640 2DEC* -.00384617957 B+5*
044900,002742: 00,3673 03046 07143 2DEC* +.001501297736 B+6*
044901,002743: 00,3675 76654 42244 2DEC* -.000284160334 B+7*
044902,002744:
044903,002745: 00,3677 32470 CAF LBUF2 # DO FINAL MULTIPLY AND GO TO ANY
044904,002746: 00,3700 07111 TC DMPSUB -1 # EPILOGUE SEQUENCES.
044905,002747: 00,3701 00136 TC ESCAPE
044906,002748:
044907,002749: 00,3702 00006 SUBTR EXTEND # EPILOGUE FOR NEGATIVE INPUTS TO ARCCOS.
044908,002750: 00,3703 40155 DCS MPAC
044909,002751: 00,3704 64736 AD HALF # FORMS PI - ARCCOS(-X) = ARCCOS(X).
044910,002752: 00,3705 52155 DXCH MPAC
044911,002753: 00,3706 00137 TC ESCAPE2 # GO TO POSSIBLE ARCSIN EPILOGUE.
044912,002754:
044913,002755: 00,3707 00006 ASINEX EXTEND
044914,002756: 00,3710 40155 DCS MPAC # ARCSIN EPILOGUE -- GET ARCSIN(X)
044915,002757: 00,3711 64737 AD QUARTER # = PI/2 - ARCCOS(X).
044916,002758: 00,3712 52155 DXCH MPAC
044917,002759: 00,3713 16064 LDANZIG TCF DANZIG
044918,002760:
044919,002761: # Page 1085
044920,002762: 00,3714 50000 ACOSSHR INDEX A # THE SHIFT RIGHT IS LESS THAN 14 SINCE
044921,002763: 00,3715 34736 CAF BIT14 # THE INPUT WAS NON-ZERO DP.
044922,002764: 00,3716 54135 TS MPTEMP
044923,002765: 00,3717 02073 TC VSHRRND # DP SHIFT RIGHT AND ROUND.
044924,002766: 00,3720 13652 TCF ACOS3 # PROCEED.
044925,002767:
044926,002768: 00,3721 00006 ACOSOVF EXTEND # IF MAJOR PART WAS ONLY 1 MORE THAN .5,
044927,002769: 00,3722 13637 BZF ACOS=0 # CALL ANSWER ZERO.
044928,002770:
044929,002771: 00,3723 00006 ACOSABRT EXTEND # IF OVERFLOW, CALL ANSWER ZERO BUT
044930,002772: 00,3724 30165 DCA LOC # SOUND AN ALARM.
044931,002773: 00,3725 05722 TC ALARM1
044932,002774: 00,3726 01301 OCT 1301
044933,002775:
044934,002776: 00,3727 34755 CAF ZERO
044935,002777: 00,3730 13637 TCF ACOS=0
044936,002778:
044937,002779: 00,3731 34737 ACOSZERO CAF QUARTER # ACOS(0) = PI/2.
044938,002780: 00,3732 13640 TCF ACOS=0 +1 # SET MPAC AND EXIT VIA ESCAPE.
044939,002781:
044940,002782: 00,3733 77763 NEG12 DEC -12 B-14
044941,002783: 00,3734 13702 TCSUBTR TCF SUBTR
044942,002784:
044943,002785: # Page 1086
044944,002786: # THE FOLLOWING INSTRUCTIONS ARE AVAILABLE FOR SETTING, MODIFYING, AND BRANCHING ON INDEX REGISTERS:
044945,002787: # 1. AXT ADDRESS TO INDEX TRUE.
044946,002788: # 2. AXC ADDRESS TO INDEX COMPLEMENTED.
044947,002789: # 3. LXA LOAD INDEX FROM ERASABLE.
044948,002790: # 4. LXC LOAD INDEX COMPLEMENTED FROM ERASABLE.
044949,002791: # 5. SCA STORE INDEX IN ERASABLE.
044950,002792: # 6. XCHX EXCHANGE INDEX REGISTER WITH ERASABLE.
044951,002793: # 7. INCR INCREMENT INDEX REGISTER.
044952,002794: # 8. XAD ERASABLE ERASABLE ADD TO INDEX REGISTER.
044953,002795: # 9. XSU ERASABLE SUBTRACT FROM INDEX REGISTER.
044954,002796: # 10. TIX BRANCH ON INDEX REGISTER AND DECREMENT.
044955,002797:
044956,002798: 01,2345 BANK 01
044957,002799:
044958,002800: 01,2345 COUNT* $$/INTER
044959,002801: 01,2345 02442 AXT TC TAGSUB # SELECT APPROPRIATE INDEX REGISTER.
044960,002802: 01,2346 30117 CA POLISH
044961,002803: 01,2347 50130 XSTORE INDEX INDEXLOC # CONTAINS C(FIXLOC) OR C(FIXLOC)+1
044962,002804: 01,2350 54046 TS X1
044963,002805: 01,2351 16064 TCF DANZIG
044964,002806:
044965,002807: 01,2352 02442 AXC TC TAGSUB
044966,002808: 01,2353 40117 CS POLISH
044967,002809: 01,2354 02347 TC XSTORE
044968,002810:
044969,002811: 01,2355 02430 LXA TC 15ADRERS # LOAD INDEX REGISTER FROM ERASABLE.
044970,002812: 01,2356 50117 INDEX POLISH
044971,002813: 01,2357 30000 CA 0
044972,002814: 01,2360 12347 TCF XSTORE
044973,002815:
044974,002816: 01,2361 02430 LXC TC 15ADRERS # LOAD NDX REG FROM ERASABLE COMPLEMENTED.
044975,002817: 01,2362 50117 INDEX POLISH
044976,002818: 01,2363 40000 CS 0
044977,002819: 01,2364 12347 TCF XSTORE
044978,002820:
044979,002821: 01,2365 02430 SXA TC 15ADRERS # STORE INDEX REGISTER IN ERASABLE.
044980,002822: 01,2366 50130 INDEX INDEXLOC
044981,002823: 01,2367 30046 CA X1
044982,002824: 01,2370 50117 MSTORE1 INDEX POLISH
044983,002825: 01,2371 54000 TS 0
044984,002826: 01,2372 16064 TCF DANZIG
044985,002827:
044986,002828: # Page 1087
044987,002829: 01,2373 02430 XCHX TC 15ADRERS # EXCHANGE INDEX REGISTER WITH ERASABLE.
044988,002830: 01,2374 50117 INDEX POLISH
044989,002831: 01,2375 30000 CA 0
044990,002832: 01,2376 50130 INDEX INDEXLOC
044991,002833: 01,2377 56046 XCH X1
044992,002834: 01,2400 12370 TCF MSTORE1
044993,002835:
044994,002836: 01,2401 02430 XAD TC 15ADRERS # ADD ERASABLE TO INDEX REGISTER.
044995,002837: 01,2402 50117 INDEX POLISH
044996,002838: 01,2403 30000 CA 0
044997,002839: 01,2404 50130 XAD2 INDEX INDEXLOC
044998,002840: 01,2405 26046 ADS X1 # IGNORING OVERFLOWS.
044999,002841: 01,2406 16064 TCF DANZIG
045000,002842:
045001,002843: 01,2407 02442 INCR TC TAGSUB # INCREMENT INDEX REGISTER.
045002,002844: 01,2410 30117 CA POLISH
045003,002845: 01,2411 12404 TCF XAD2
045004,002846:
045005,002847: 01,2412 02430 XSU TC 15ADRERS # SUBTRACT ERASABLE FROM INDEX REGISTER.
045006,002848: 01,2413 50117 INDEX POLISH
045007,002849: 01,2414 40000 CS 0
045008,002850: 01,2415 12404 TCF XAD2
045009,002851:
045010,002852: 01,2416 02442 TIX TC TAGSUB # BRANCH AND DECREMENT ON INDEX.
045011,002853: 01,2417 50130 INDEX INDEXLOC
045012,002854: 01,2420 40050 CS S1
045013,002855: 01,2421 50130 INDEX INDEXLOC
045014,002856: 01,2422 60046 AD X1
045015,002857: 01,2423 00006 EXTEND # NO OPERATION IF DECREMENTED INDEX IS
045016,002858: 01,2424 66064 BZMF DANZIG # NEGATIVE OR ZERO.
045017,002859:
045018,002860: 01,2425 50130 DOTIXBR INDEX INDEXLOC
045019,002861: 01,2426 56046 XCH X1 # IGNORING OVERFLOWS.
045020,002862:
045021,002863: 01,2427 16651 TCF GOTO # DO THE BRANCH USING THE CADR IN POLISH.
045022,002864:
045023,002865: # Page 1088
045024,002866: # SUBROUTINE TO CONVERT AN ERASABLE ADDRESS (11 BITS) TO AN EBANK SETTING AND SUBADDRESS.
045025,002867:
045026,002868: 01,2430 40117 15ADRERS CS POLISH
045027,002869: 01,2431 64772 AD DEC45
045028,002870: 01,2432 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
045029,002871: 01,2433 30120 CA FIXLOC # YES. ADD FIXLOC. EBANK OK AS IS.
045030,002872: 01,2434 12441 TCF +5
045031,002873:
045032,002874: 01,2435 35007 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
045033,002875: 01,2436 56117 XCH POLISH
045034,002876: 01,2437 54003 TS EBANK
045035,002877: 01,2440 74357 MASK LOW8
045036,002878: 01,2441 26117 +5 ADS POLISH # FALL INTO TAGSUB, AND RETURN VIA Q.
045037,002879:
045038,002880: # SUBROUTINE WHICH SETS THE ADDRESS OF THE SPECIFIED INDEX IN INDEXLOC. (ACTUALLY, THE ADDRESS -38D.)
045039,002881:
045040,002882: 01,2442 30120 TAGSUB CA FIXLOC
045041,002883: 01,2443 54130 TS INDEXLOC
045042,002884:
045043,002885: 01,2444 10020 CCS CYR # BIT 15 SPECIFIES INDEX.
045044,002886: 01,2445 24130 INCR INDEXLOC # 0 MEANS USE X2.
045045,002887: 01,2446 00002 TC Q
045046,002888: 01,2447 00002 TC Q # 1 FOR X1.
045047,002889:
045048,002890: # Page 1089
045049,002891: # MISCELLANEOUS OPERATION CODES WITH DIRECT ADDRESSES. INCLUDED HERE ARE:
045050,002892: # 1. ITA STORE CPRET (RETURN ADDRESS) IN ERASABLE.
045051,002893: # 2. CALL CALL A SUBROUTINE, LEAVING RETURN IN QPRET.
045052,002894: # 3. RTB RETURN TO BASIC LANGUAGE AT THE GIVEN ADDRESS.
045053,002895: # 4. BHIZ BRANCH IF THE HIGHORDER OF MPAC IS ZERO (SINGLE PRECISION).
045054,002896: # 5. BOV BRANCH ON OVERFLOW.
045055,002897: # 6. GOTO SIMPLE SEQUENCE CHANGE.
045056,002898:
045057,002899: 01,2450 10020 RTB/BHIZ CCS CYR
045058,002900: 01,2451 30117 RTB CA POLISH
045059,002901: 01,2452 04621 TC SWCALL -1 # SO A "TC Q" FROM ROUTINE LEADS TO DANZIG
045060,002902:
045061,002903: 01,2453 10154 BHIZ CCS MPAC
045062,002904: 01,2454 16064 TCF DANZIG
045063,002905: 01,2455 16651 TCF GOTO
045064,002906: 01,2456 16064 TCF DANZIG
045065,002907: 01,2457 16651 TCF GOTO
045066,002908:
045067,002909: 01,2460 10121 BOV(B) CCS OVFIND # BRANCH ON OVERFLOW TO BASIC OR INTERP.
045068,002910: 01,2461 12463 TCF +2
045069,002911: 01,2462 16064 TCF DANZIG
045070,002912: 01,2463 54121 TS OVFIND
045071,002913: 01,2464 10020 CCS CYR
045072,002914: 01,2465 12451 TCF RTB # IF BASIC.
045073,002915: 01,2466 00360 B5TOBB OCT 360
045074,002916: 01,2467 16651 TCF GOTO
045075,002917:
045076,002918: # Page 1090
045077,002919: 01,2470 10020 BZE/GOTO CCS CYR # SEE WHICH OP-CODE IS DESIRED.
045078,002920: 01,2471 06726 TC BRANCH # DO BZE.
045079,002921: 01,2472 16064 TCF DANZIG
045080,002922: 01,2473 16651 TCF GOTO # DO GOTO.
045081,002923: 01,2474 16064 TCF DANZIG
045082,002924:
045083,002925: 01,2475 10020 BPL/BMN CCS CYR
045084,002926: 01,2476 12504 TCF BPL
045085,002927: 01,2477 12000 5B10 DEC 5 B+10 # SHIFTS OP CODE IN SWITCH INSTRUCTION ADR
045086,002928:
045087,002929: 01,2500 06726 TC BRANCH # DO BMN
045088,002930: 01,2501 16064 TCF DANZIG
045089,002931: 01,2502 16064 TCF DANZIG
045090,002932: 01,2503 16651 TCF GOTO # ONLY IF NNZ.
045091,002933:
045092,002934: 01,2504 06726 BPL TC BRANCH
045093,002935: 01,2505 16651 TCF GOTO # IF POSITIVE OR ZERO.
045094,002936: 01,2506 16651 TCF GOTO
045095,002937: 01,2507 16064 TCF DANZIG
045096,002938:
045097,002939: 01,2510 10020 CALL/ITA CCS CYR
045098,002940: 01,2511 16643 TCF CALL
045099,002941:
045100,002942: 01,2512 05675 TC CCSHOLE
045101,002943: 01,2513 02430 TC 15ADRERS # STORE QPRET. (TAGSUB AFTER 15ADRERS IS
045102,002944: 01,2514 50120 INDEX FIXLOC # SLOW IN THIS CASE, BUT SAVES STORAGE.)
045103,002945: 01,2515 30052 CA QPRET
045104,002946: 01,2516 12370 TCF MSTORE1
045105,002947:
045106,002948: # Page 1091
045107,002949: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR ALTERING AND TESTING INTERPRETATIVE SWITCHES:
045108,002950: # 00 BONSET SET A SWITCH AND DO A GOTO IF IT WAS ON.
045109,002951: # 01 SETGO SET A SWITCH AND DO A GOTO.
045110,002952: # 02 BOFSET SET A SWITCH AND DOA GOTO IF IT WAS OFF
045111,002953: # 03 SET SET A SWITCH.
045112,002954: # 04 BONINV INVERT A SWITCH AND BRANCH IF IT WAS ON.
045113,002955: # 05 INVGO INVERT A SWITCH AND DO A GOTO.
045114,002956: # 06 BOFINV INVERT A SWITCH AND BRANCH IF IT WAS OFF
045115,002957: # 07 INVERT INVERT A SWITCH.
045116,002958: # 10 BONCLR CLEAR A SWITCH AND BRANCH IF IT WAS ON.
045117,002959: # 11 CLRGO CLEAR A SWITCH AND DO A GOTO.
045118,002960: # 12 BOFCLR CLEAR A SWITCH AND BRANCH IF IT WAS OFF.
045119,002961: # 13 CLEAR CLEAR A SWITCH.
045120,002962: # 14 BON BRANCH IF A SWITCH WAS ON.
045121,002963: # 16 BOFF BRANCH IF A SWITCH WAS OFF.
045122,002964: # THE ADDRESS SUPPLIED WITH THE SWITCH INSTRUCTION IS INTERPRETED AS FOLLOWS:
045123,002965: # BITS 1-4 SWITCH BIT NUMBER (1-15).
045124,002966: # BITS 5-8 SWITCH OPERATION NUMBER
045125,002967: # BITS 9- SWITCH WORD NUMBER (UP TO 64 SWITCH WORDS).
045126,002968: # THE ADDRESS ITSELF IS MADE UP BY THE YUL SYSTEM ASSEMBLER. THE BRANCH INSTRUCTIONS REQUIRE TWO
045127,002969: # ADDRESSES, THE SECOND TAKEN AS THE DIRECT (OR INDIRECT IF IN ERASABLE) ADDRESS OF THE BRANCH.
045128,002970:
045129,002971: 01,2517 34762 SWITCHES CAF LOW4 # LEAVE THE SWITCH BIT IN SWBIT.
045130,002972: 01,2520 70117 MASK POLISH
045131,002973: 01,2521 50000 INDEX A
045132,002974: 01,2522 34735 CAF BIT15 # (NUMBER FROM LEFT TO RIGHT.)
045133,002975: 01,2523 54131 TS SWBIT
045134,002976:
045135,002977: 01,2524 34745 CAF BIT7 # LEAVE THE SWITCH NUMBER IN SWWORD.
045136,002978: 01,2525 00006 EXTEND
045137,002979: 01,2526 70117 MP POLISH
045138,002980: 01,2527 54130 TS SWWORD
045139,002981:
045140,002982: 01,2530 00004 INHINT # DURING SWITCH CHANGE SO RUPT CAN USE TOO
045141,002983: 01,2531 50000 INDEX A # LEAVE THE SWITCH WORD ITSELF IN L.
045142,002984: 01,2532 30074 CA STATE
045143,002985: 01,2533 54002 TS Q # Q WILL BE USED AS A CHANNEL.
045144,002986: # Page 1092
045145,002987: 01,2534 34741 CAF BIT11
045146,002988: 01,2535 00006 EXTEND # DISPATCH SWITCH BIT OPERATION AS IN BITS
045147,002989: 01,2536 70117 MP POLISH # 7-8 OF POLISH.
045148,002990: 01,2537 72577 MASK B3TOB4 # GETS 4X2-BIT CODE.
045149,002991: 01,2540 50000 INDEX A
045150,002992: 01,2541 12542 TCF +1
045151,002993:
045152,002994: 01,2542 30131 +1 CA SWBIT # 00 -- SET SWITCH IN QUESTION.
045153,002995: 01,2543 00006 EXTEND
045154,002996: 01,2544 04002 ROR QCHAN
045155,002997: 01,2545 12554 TCF SWSTORE
045156,002998:
045157,002999: 01,2546 30131 +5 CA SWBIT # 01 -- INVERT SWITCH.
045158,003000: 01,2547 00006 EXTEND
045159,003001: 01,2550 06002 RXOR QCHAN
045160,003002: 01,2551 12554 TCF SWSTORE
045161,003003:
045162,003004: 01,2552 40131 +9D CS SWBIT # 10 -- CLEAR.
045163,003005: 01,2553 70002 MASK Q
045164,003006: 01,2554 50130 SWSTORE INDEX SWWORD
045165,003007: 01,2555 54074 TS STATE # NEW SWITCH WORD.
045166,003008:
045167,003009: # Page 1093
045168,003010: 01,2556 00003 +13D RELINT # 11 -- NOOP.
045169,003011: 01,2557 34737 CAF BIT13
045170,003012: 01,2560 00006 EXTEND # DISPATCH SEQUENCE CHANGING OR BRANCING
045171,003013: 01,2561 70117 MP POLISH # CODE.
045172,003014: 01,2562 72577 MASK B3TOB4
045173,003015: 01,2563 50000 INDEX A
045174,003016: 01,2564 12565 TCF +1 # ORIGINALLY STORED IN BITS 5-6
045175,003017:
045176,003018: 01,2565 40002 +1 CS Q # 00 -- BRANCH IF ON.
045177,003019: 01,2566 70131 TEST MASK SWBIT
045178,003020: 01,2567 10000 CCS A
045179,003021: 01,2570 12600 TCF SWSKIP
045180,003022:
045181,003023: 01,2571 16720 +5 TCF SWBRANCH # 01 -- GO TO.
045182,003024:
045183,003025: 01,2572 12600 TCF SWSKIP # HERE ONLY ON BIT 15.
045184,003026:
045185,003027: 01,2573 05675 TC CCSHOLE
045186,003028: 01,2574 05675 TC CCSHOLE
045187,003029:
045188,003030: 01,2575 30002 +9D CA Q # 10 -- BRANCH IF OFF.
045189,003031: 01,2576 12566 TCF TEST
045190,003032:
045191,003033: 01,2577 00014 B3TOB4 OCT 0014
045192,003034: 01,2600 24164 SWSKIP INCR LOC
045193,003035:
045194,003036: 01,2601 01,2517 SW/ EQUALS SWITCHES
045195,003037:
045196,003038: 01,2601 16064 +13D TCF DANZIG # 11 -- NOOP.
045197,003039:
End of include-file INTERPRETER.agc. Parent file is MAIN.agc