Source Code
These source code files are an attempted reconstruction of Sundance revision 306, the Apollo 9
LM (Lunar Module) AGC (Apollo Guidance Computer) flight software, created from binary dumps of
original core rope program modules, as follows:
|
039292,000002: ## Copyright: Public domain.
039293,000003: ## Filename: INTERPRETER.agc
039294,000004: ## Purpose: A section of an attempt to reconstruct Sundance revision 306
039295,000005: ## as closely as possible with available information. Sundance
039296,000006: ## 306 is the source code for the Lunar Module's (LM) Apollo
039297,000007: ## Guidance Computer (AGC) for Apollo 9. This program was created
039298,000008: ## using the mixed-revision SundanceXXX as a starting point, and
039299,000009: ## pulling back features from Luminary 69 believed to have been
039300,000010: ## added based on memos, checklists, observed address changes,
039301,000011: ## or the Sundance GSOPs.
039302,000012: ## Assembler: yaYUL
039303,000013: ## Contact: Ron Burkey <info@sandroid.org>.
039304,000014: ## Website: www.ibiblio.org/apollo/index.html
039305,000015: ## Mod history: 2020-07-24 MAS Created from SundanceXXX.
039306,000016: ## 2020-07-29 MAS Updated the 1301 alarm to match its coding in
039307,000017: ## Sundance 306.
039308,000018: ## 2021-05-30 ABS Added ITR0 location symbol to match previous
039309,000019: ## and subsequent version scans.
039310,000020: ## B5TOBB -> B5TOB8
039311,000021:
039312,000022:
039313,000023: # SECTION 1 DISPATCHER
039314,000024:
039315,000025: # ENTRY TO THE INTERPRETER. INTPRET SETS LOC TO THE FIRST INSTRUCTION, BANKSET TO THE BBANK OF THE
039316,000026: # OBJECT INTERPRETIVE PROGRAM, AND INTBIT15 TO THE BIT15 CONTENTS OF FBANK. INTERPRETIVE PROGRAMS MAY BE IN
039317,000027: # VIRTUALLY ALL BANKS PRESENT UNDER ANY SUPER-BANK SETTING, WITH THE RESTRICTION THAT PROGRAMS IN HIGH BANKS
039318,000028: # (BIT15 OF FBANK = 1) DO NOT REFER TO LOWBANKS, AND VICE-VERSA. THE INTERPRETER DOES NOT SWITCH SUPERBANKS.
039319,000029: # E-BANK SWITCHING OCCURS WHENEVER GENERAL ERASABLE (100 - 3777) IS ADDRESSED.
039320,000030:
039321,000031: 6014 BLOCK 03
039322,000032:
039323,000033: 6014 COUNT* $$/INTER
039324,000034: 6014 00006 INTPRET EXTEND # SET LOC TO THE WORD FOLLOWING THE TC.
039325,000035: 6015 22164 QXCH LOC
039326,000036:
039327,000037: 6016 30006 +2 CA BBANK # INTERPRETIVE BRANCHES FINISH HERE.
039328,000038: 6017 54165 TS BANKSET
039329,000039: 6020 75010 MASK BIT15 # GET 15TH BIT FOR INDEXABLE ADDRESSES.
039330,000040: 6021 54115 TS INTBIT15
039331,000041:
039332,000042: 6022 54023 TS EDOP # MAKE SURE NO INSTRUCTIONS LEFT OVER
039333,000043:
039334,000044: 6023 16044 TCF NEWOPS # PICK UP OP CODE PAIR AND BEGIN.
039335,000045:
039336,000046:
039337,000047: 6024 22006 INTRSM LXCH BBANK # RESUME SUSPENDED INTERPRETIVE JOB
039338,000048: 6025 16016 TCF INTPRET +2
039339,000049: # DLOAD LOADS MPAC, MPAC +1, LEAVING ZERO IN MPAC +2.
039340,000050:
039341,000051: 6026 00006 DLOAD EXTEND
039342,000052: 6027 50116 INDEX ADDRWD
039343,000053: 6030 30001 DCA 0 # LOAD DP C(C(ADDRWD)) INTO MPAC,MPAX +1
039344,000054: 6031 52155 SLOAD2 DXCH MPAC
039345,000055: 6032 35030 CAF ZERO # ZERO MPAC +2
039346,000056:
039347,000057: # AT THE END OF MOST INSTRUCTIONS, CONTROL IS GIVEN TO DANZIG TO DISPATCH THE NEXT OPERATION.
039348,000058:
039349,000059: 6033 54156 TS MPAC +2 # AND DECLARE DP MODE
039350,000060:
039351,000061: 6034 54163 NEWMODE TS MODE # PROLOGUE FOR MODE-CHANGING INSTRUCTIONS.
039352,000062:
039353,000063: 6035 30165 DANZIG CA BANKSET # SET BBANK BEFORE TESTING NEWJOB SO THAT
039354,000064: 6036 54006 TS BBANK # IT MAY BE SAVED DIRECTLY BY CHANJOB.
039355,000065:
039356,000066: 6037 10023 NOIBNKSW CCS EDOP # SEE IF AN ORDER CODE IS LEFT OVER FROM
039357,000067: 6040 16053 TCF OPJUMP # THE LAST PAIR RETRIEVED. IF SO, EXECUTE.
039358,000068: # EDOP IS SET TO ZERO ON ITS RE-EDITING.
039359,000069:
039360,000070: 6041 10067 CCS NEWJOB # SEE IF A JOB OF HIGHER PRIORITY IS
039361,000071: 6042 15176 TCF CHANG2 # PRESENT, AND IF SO, CHANGE JOBS.
039362,000072:
039363,000073: 6043 24164 INCR LOC # ADVANCE THE LOCATION COUNTER.
039364,000074: # ITRACE (1) REFERS TO "NEWOPS".
039365,000075: 6044 50164 NEWOPS INDEX LOC # ENTRY TO BEGIN BY PICKING OP CODE PAIR.
039366,000076: 6045 30000 CA 0 # MAY BE AN OPCODE PAIR OR A STORE CODE.
039367,000077: 6046 10000 CCS A # TEST SIGN AND GET DABS(A).
039368,000078: 6047 16336 TCF DOSTORE # PROCESS STORE CODE.
039369,000079:
039370,000080: 6050 00177 LOW7 OCT 177
039371,000081:
039372,000082: 6051 54023 TS EDOP # OP CODE PAIR. LEAVE THE OTHER IN EDOP
039373,000083: 6052 76050 MASK LOW7 # WHERE CCS EDOP WILL HONOR IT NEXT.
039374,000084:
039375,000085: 6053 54020 OPJUMP TS CYR # LOWWD ENTERS HERE IF A RIGHT-HAND OP
039376,000086: 6054 10020 CCS CYR # CODE IS TO BE PROCESSED. TEST PREFICES.
039377,000087: 6055 16223 TCF OPJUMP2 # TEST SECOND PREFIX BIT.
039378,000088:
039379,000089: 6056 16717 TCF EXIT # +0 OP CODE IS EXIT.
039380,000090:
039381,000091: # PROCESS ADDRESSES WHICH MAY BE DIRECT, INDEXED, OR REFERENCE THE PUSHDOWN LIST.
039382,000092:
039383,000093: 6057 75026 ADDRESS MASK BIT1 # SEE IF ADDRESS IS INDEXED. CYR CONTAINED
039384,000094: 6060 10000 CCS A # 400XX, SO BIT 1 IS NOW AS IT WAS IN CYR.
039385,000095: 6061 16122 TCF INDEX # FORM INDEXED ADDRESS.
039386,000096:
039387,000097: 6062 50164 DIRADRES INDEX LOC # LOOK AHEAD TO NEXT WORD TO SEE IF
039388,000098: 6063 40001 OCT40001 CS 1 # ADDRESS IS GIVEN.
039389,000099: 6064 10000 CCS A
039390,000100: 6065 16171 TCF PUSHUP # IF NOT.
039391,000101:
039392,000102: 6066 77773 NEG4 DEC -4 B-14
039393,000103:
039394,000104: 6067 24164 INCR LOC # IF SO, TO SHOW WE PICKED UP A WORD.
039395,000105: 6070 54116 TS ADDRWD
039396,000106:
039397,000107: # FINAL DIGESTION OF DIRECT ADDRESSES OF OP CODES WITH 01 PREFIX IS DONE HERE. IN EACH CASE, THE
039398,000108: # REQUIRED 12-BIT SUB-ADDRESS IS LEFT IN ADDRWD, WITH ANY REQUIRED E OR F BANK SWITCHING DONE. ADDRESSES LESS
039399,000109: # 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.
039400,000110:
039401,000111:
039402,000112: 6071 66225 AD -ENDVAC # SEE IF ADDRESS RELATIVE TO WORK AREA.
039403,000113: 6072 10000 CCS A
039404,000114: 6073 67714 AD -ENDERAS # IF NOT, SEE IF IN GENERAL ERASABLE.
039405,000115: 6074 16101 TCF IERASTST
039406,000116:
039407,000117: 6075 30120 NETZERO CA FIXLOC # IF SO, LEAVE THE MODIFIED ADDRESS IN
039408,000118: 6076 26116 ADS ADDRWD # ADDRWD AND DISPATCH.
039409,000119: 6077 50020 ITR15 INDEX CYR # THIS INDEX MAKES THE NEXT INSTRUCTION
039410,000120: 6100 76247 7 INDJUMP -1 # TCF INDJUMP + OP, EDITING CYR.
039411,000121:
039412,000122: 6101 00006 IERASTST EXTEND
039413,000123: 6102 66112 BZMF GEADDR # GO PROCESS GENERAL-ERASABLE ADDRESS.
039414,000124:
039415,000125: 6103 75062 MASK LOW10 # FIXED BANK ADDRESS. RESTORE AND ADD B15.
039416,000126: 6104 65062 AD LOW10 # SWITCH BANKS AND LEAVE SUBADDRESS IN
039417,000127: 6105 56116 XCH ADDRWD # ADDRWD FOR OPERAND RETRIEVAL. (THIS
039418,000128: 6106 60115 AD INTBIT15 # METHOD PRECLUDES USE OF THE LAST
039419,000129: 6107 54004 TS FBANK # LOCATION IN EACH FBANK.)
039420,000130: 6110 50020 ITR12 INDEX CYR
039421,000131: 6111 76247 7 INDJUMP -1
039422,000132:
039423,000133: 6112 74371 GEADDR MASK LOW8
039424,000134: 6113 65057 AD OCT1400
039425,000135: 6114 56116 XCH ADDRWD
039426,000136: 6115 54003 TS EBANK
039427,000137: 6116 50020 ITR10 INDEX CYR
039428,000138: 6117 76247 7 INDJUMP -1
039429,000139:
039430,000140: # THE FOLLOWING ROUTINE PROCESSES INTERPRETIVE INDEXED ADDRESSES. AN INTERPRETER INDEX REGISTER MAY
039431,000141: # CONTAIN THE ADDRESS OF ANY ERASABLE REGISTER (0-42 BEING RELATIVE TO THE VAC AREA) OR ANY INTERPRETIVE PROGRAM
039432,000142: # BANK, OR ANY INTEGER IN THAT RANGE.
039433,000143:
039434,000144: 6120 37705 DODLOAD* CAF DLOAD* # STODL* COMES HERE TO PROCESS LOAD ADR.
039435,000145: 6121 54020 TS CYR # (STOVL* ENTERS HERE).
039436,000146:
039437,000147: 6122 30120 INDEX CA FIXLOC # SET UP INDEX LOCATION.
039438,000148: 6123 54130 TS INDEXLOC
039439,000149: 6124 24164 INCR LOC # (ADDRESS ALWAYS GIVEN).
039440,000150: 6125 50164 INDEX LOC
039441,000151: 6126 40000 CS 0
039442,000152: 6127 10000 CCS A # INDEX 2 IF ADDRESS STORED COMPLEMENTED.
039443,000153: 6130 24130 INCR INDEXLOC
039444,000154: 6131 16132 NOOP
039445,000155:
039446,000156: 6132 54116 TS ADDRWD # 14 BIT ADDRESS TO ADDRWD.
039447,000157: 6133 77713 MASK HIGH4 # IF ADDRESS GREATER THAN 2K, ADD INTBIT15
039448,000158: 6134 00006 EXTEND
039449,000159: 6135 16140 BZF INDEX2
039450,000160: 6136 30115 CA INTBIT15
039451,000161: 6137 26116 ADS ADDRWD
039452,000162:
039453,000163: 6140 50130 INDEX2 INDEX INDEXLOC
039454,000164: 6141 40046 CS X1
039455,000165: 6142 26116 ADS ADDRWD # DO AUGMENT, IGNORING AND CORRECTING OVF.
039456,000166:
039457,000167: 6143 77715 MASK HIGH9 # SEE IF ADDRESS IS IN WORK AREA.
039458,000168: 6144 00006 EXTEND
039459,000169: 6145 16160 BZF INDWORK
039460,000170: 6146 77713 MASK HIGH4 # SEE IF IN FIXED BANK.
039461,000171: 6147 00006 EXTEND
039462,000172: 6150 16162 BZF INDERASE
039463,000173:
039464,000174: 6151 30116 CA ADDRWD # IN FIXED - SWITCH BANKS AND CREATE
039465,000175: 6152 54004 TS FBANK # SUB-ADDRESS.
039466,000176: 6153 75062 MASK LOW10
039467,000177: 6154 65014 AD 2K
039468,000178: 6155 54116 TS ADDRWD
039469,000179: 6156 50020 ITR11 INDEX CYR
039470,000180: 6157 36247 3 INDJUMP -1
039471,000181:
039472,000182: 6160 30120 INDWORK CA FIXLOC # MAKE ADDRWD RELATIVE TO WORK AREA.
039473,000183: 6161 16166 TCF ITR13 -1
039474,000184:
039475,000185: 6162 35057 INDERASE CA OCT1400
039476,000186: 6163 56116 XCH ADDRWD
039477,000187: 6164 54003 TS EBANK
039478,000188: 6165 74371 MASK LOW8
039479,000189: 6166 26116 -1 ADS ADDRWD
039480,000190: 6167 50020 ITR13 INDEX CYR
039481,000191: 6170 36247 3 INDJUMP -1
039482,000192:
039483,000193: # PUSH-UP ROUTINES. WHEN NO OPERAND ADDRESS IS GIVEN, THE APPROPRIATE OPERAND IS TAKEN FROM THE PUSH-DOWN
039484,000194: # LIST. IN MOST CASES THE MODE OF THE RESULT (VECTOR OR SCALAR) OF THE LAST ARITHMETIC OPERATION PERFORMED
039485,000195: # IS THE SAME AS THE TYPE OF OPERAND DESIRED (ALL ADD/SUBTRACT ETC.). EXCEPTIONS TO THIS GENERAL RULE ARE LISTED
039486,000196: # BELOW (NOTE THAT IN EVERY CASE THE MODE REGISTER IS LEFT INTACT):
039487,000197:
039488,000198: # 1. VXSC AND V/SC WANT THE OPPOSITE TYPE OF OPERAND, E.G., IF THE LAST OPERATION YIELDED A VECTOR
039489,000199: # RESULT, VXSC WANTS A SCALAR.
039490,000200:
039491,000201: # 2. THE LOAD CODES SHOULD LOAD THE ACCUMULATOR INDEPENDENT OF THE RESULT OF THE LAST OPERATION. THIS
039492,000202: # INCLUDES VLOAD, DLOAD, TLOAD, PDDL, AND PDVL (NO PUSHUP WITH SLOAD).
039493,000203:
039494,000204: # 3. SOME ARITHMETIC OPERATIONS REQUIRE A STANDARD TYPE OF OPERAND REGARDLESS OF THE PREVIOUS OPERATION.
039495,000205: # THIS INCLUDES SIGN WANTING DP AND TAD REQUIRING TP.
039496,000206:
039497,000207: 6171 34372 PUSHUP CAF OCT23 # IF THE LOW 5 BITS OF CYR ARE LESS THAN
039498,000208: 6172 70020 MASK CYR # 20, THIS OP REQUIRES SPECIAL ATTENTION.
039499,000209: 6173 66176 AD -OCT10 # (NO -0).
039500,000210: 6174 10000 CCS A
039501,000211: 6175 16207 TCF REGUP # FOR ALL CODES GREATER THAN OCT 7.
039502,000212:
039503,000213: 6176 77767 -OCT10 OCT -10
039504,000214:
039505,000215: 6177 66066 AD NEG4 # WE NOW HAVE 7 - OP CODE(MOD4). SEE IF
039506,000216: 6200 10000 CCS A # THE OP CODE (MOD4) IS THREE (REVERSE).
039507,000217: 6201 50000 INDEX A # NO - THE MODE IS DEFINITE. PICK UP THE
039508,000218: 6202 46220 CS NO.WDS
039509,000219: 6203 16211 TCF REGUP +2
039510,000220:
039511,000221: 6204 50163 INDEX MODE # FOR VXSC AND V/SC WE WANT THE REQUIRED
039512,000222: 6205 46216 CS REVCNT # PUSHLOC DECREMENT WITHOUT CHANGING THE
039513,000223: 6206 16211 TCF REGUP +2 # MODE AT THIS TIME.
039514,000224:
039515,000225: 6207 50163 REGUP INDEX MODE # MOST ALL OP CODES PUSHUP HERE.
039516,000226: 6210 46220 CS NO.WDS
039517,000227: 6211 26166 +2 ADS PUSHLOC
039518,000228: 6212 54116 TS ADDRWD
039519,000229: 6213 50020 ITR14 INDEX CYR
039520,000230: 6214 76247 7 INDJUMP -1 # (THE INDEX MAKES THIS A TCF.)
039521,000231:
039522,000232: 6215 00002 OCT 2 # REVERSE PUSHUP DECREMENT. VECTOR TAKES 2
039523,000233: 6216 00006 REVCNT OCT 6 # WORDS, SCALAR TAKES 6.
039524,000234: 6217 00006 OCT 6
039525,000235: 6220 00002 NO.WDS OCT 2 # CONVENTIONAL DECREMENT IS 6 WORDS VECTOR
039526,000236: 6221 00003 OCTAL3 OCT 3 # 2 IN DP, AND 3 IN TP.
039527,000237: 6222 00006 OCT 6
039528,000238:
039529,000239: # TEST THE SECOND PREFIX BIT TO SEE IF THIS IS A MISCELLANEOUS OR A UNARY/SHORT SHIFT OPERATION.
039530,000240:
039531,000241: 6223 10020 OPJUMP2 CCS CYR # TEST SECOND PREFIX BIT.
039532,000242: 6224 16237 TCF OPJUMP3 # TEST THIRD BIT TO SEE IF UNARY OR SHIFT.
039533,000243:
039534,000244: 6225 77722 -ENDVAC DEC -45 B-14
039535,000245:
039536,000246: # THE FOLLOWING ROUTINE PROCESSES ADDRESSES OF SUFFIX CLASS 10. THEY ARE BASICALLY WORK AREA ADDRESSES
039537,000247: # IN THE RANGE 0 - 52, ERASABLE ECADR CONSTANTS FROM 100 - 3777, AND FCADRS ABOVE THAT. ALL 15 BITS ARE AVAILABLE
039538,000248: # IN CONTRAST TO SUFFIX 1, IN WHICH ONLY THE LOW ORDER 14 ARE AVAILABLE.
039539,000249:
039540,000250: 6226 24164 15BITADR INCR LOC # (ENTRY HERE FROM STCALL).
039541,000251: 6227 50164 INDEX LOC # PICK UP ADDRESS WORD.
039542,000252: 6230 30000 CA 0
039543,000253: 6231 54117 TS POLISH # WE MAY NEED A SUBADDRESS LATER.
039544,000254:
039545,000255: 6232 35063 CAF LOW7+2K # THESE INSTRUCTIONS ARE IN BANK 1.
039546,000256: 6233 54004 TS FBANK
039547,000257: 6234 70020 MASK CYR
039548,000258: 6235 50000 ITR7 INDEX A
039549,000259: 6236 16310 TCF MISCJUMP
039550,000260:
039551,000261: # COMPLETE THE DISPATCHING OF UNARY AND SHORT SHIFT OPERATIONS.
039552,000262:
039553,000263: 6237 54004 OPJUMP3 TS FBANK # CALL IN BANK 0 (BITS 11-15 OF A ARE 0.)
039554,000264: # ITRACE (6) REFERS TO "OPJUMP3".
039555,000265: 6240 10020 CCS CYR # TEST THIRD PREFIX BIT.
039556,000266: 6241 50000 INDEX A # THE DECREMENTED UNARY CODE IS IN BITS
039557,000267: 6242 12000 TCF UNAJUMP # 1-4 OF A (ZERO, EXIT, HAS BEEN DETECTED)
039558,000268:
039559,000269: 6243 10163 CCS MODE # ITS A SHORT SHIFT CODE. SEE IF PRESENT
039560,000270: 6244 12017 TCF SHORTT # SCALAR OR VECTOR.
039561,000271: 6245 12017 TCF SHORTT
039562,000272: 6246 12121 TCF SHORTV # CALLS THE APPROPRIATE ROUTINE.
039563,000273:
039564,000274:
039565,000275: 6247 4362 FBANKMSK EQUALS BANKMASK
039566,000276: 6247 00122 LVBUF ADRES VBUF
039567,000277:
039568,000278: # THE FOLLOWING IS THE JUMP TABLE FOR OP CODES WHICH MAY HAVE INDEXABLE ADDRESSES OR MAY PUSH UP.
039569,000279:
039570,000280: 6250 16461 INDJUMP TCF VLOAD # 00 - LOAD MPAC WITH A VECTOR.
039571,000281: 6251 17045 TCF TAD # 01 - TRIPLE PRECISION ADD TO MPAC.
039572,000282: 6252 17627 TCF SIGN # 02 - COMPLEMENT MPAC (V OR SC) IF X NEG.
039573,000283: 6253 17353 TCF VXSC # 03 - VECTOR TIMES SCALAR.
039574,000284: 6254 16657 TCF CGOTO # 04 - COMPUTED GO TO.
039575,000285: 6255 16444 TCF TLOAD # 05 - LOAD MPAC WITH TRIPLE PRECISION.
039576,000286: 6256 16026 TCF DLOAD # 06 - LOAD MPAC WITH A DP SCALAR.
039577,000287: 6257 17576 TCF V/SC # 07 - VECTOR DIVIDED BY SCALAR.
039578,000288:
039579,000289: 6260 16455 TCF SLOAD # 10 - LOAD MPACIN SINGLE PRECISION.
039580,000290: 6261 16574 TCF SSP # 11 - SET SINGLE PRECISION INTO X.
039581,000291: 6262 16477 TCF PDDL # 12 - PUSH DOWN MPAC AND RE-LOAD IN DP.
039582,000292: 6263 17306 TCF MXV # 13 - MATRIX POST-MULTIPLIED BY VECTOR.
039583,000293: 6264 16533 TCF PDVL # 14 - PUSH DOWN AND VECTOR LOAD.
039584,000294: 6265 16602 TCF CCALL # 15 - COMPUTED CALL.
039585,000295: 6266 17311 TCF VXM # 16 - MATRIX PRE-MULTIPLIED BY VECTOR.
039586,000296: 6267 17570 TCF TSLC # 17 - NORMALIZE MPAC (SCALAR ONLY).
039587,000297:
039588,000298: 6270 17546 TCF DMPR # 20 - DP MULTIPLY AND ROUND.
039589,000299: 6271 17551 TCF DDV # 21 - DP DIVIDE BY.
039590,000300: 6272 17555 TCF BDDV # 22 - DP DIVIDE INTO.
039591,000301: 6273 17573 TCF GSHIFT # 23 - GENERAL SHIFT INSTRUCTION.
039592,000302: 6274 16725 TCF VAD # 24 - VECTOR ADD.
039593,000303: 6275 16723 TCF VSU # 25 - VECTOR SUBTRACT.
039594,000304: 6276 17012 TCF BVSU # 26 - VECTOR SUBTRACT FROM.
039595,000305: 6277 17303 TCF DOT # 27 - VECTOR DOT PRODUCT.
039596,000306:
039597,000307: 6300 17432 TCF VXV # 30 - VECTOR CROSS PRODUCT.
039598,000308: 6301 17377 TCF VPROJ # 31 - VECTOR PROJECTION.
039599,000309: 6302 16761 TCF DSU # 32 - DP SUBTRACT.
039600,000310: 6303 17036 TCF BDSU # 33 - DP SUBTRACT FROM.
039601,000311: 6304 16751 TCF DAD # 34 - DP ADD.
039602,000312: 6305 16305 TCF +0 # 35 - AVAILABLE
039603,000313: 6306 17544 TCF DMP1 # 36 - DP MULTIPLY.
039604,000314: 6307 17565 TCF SETPD # 37 - SET PUSH DOWN POINTER (DIRECT ONLY)
039605,000315:
039606,000316: # CODES 10 AND 14 MUST NOT PUSH UP. CODE 04 MAY BE USED FOR VECTOR DECLARE BEFORE PUSHUP IF DESIRED.
039607,000317:
039608,000318: # THE FOLLOWING JUMP TABLE APPLIES TO INDEX, BRANCH, AND MISCELLANEOUS INSTRUCTIONS.
039609,000319:
039610,000320: 6310 12165 MISCJUMP TCF AXT # 00 - ADDRESS TO INDEX TRUE.
039611,000321: 6311 12172 TCF AXC # 01 - ADDRESS TO INDEX COMPLEMENTED.
039612,000322: 6312 12175 TCF LXA # 02 - LOAD INDEX FROM ERASABLE.
039613,000323: 6313 12201 TCF LXC # 03 - LOAD INDEX FROM COMPLEMENT OF ERAS.
039614,000324: 6314 12205 TCF SXA # 04 - STORE INDEX IN ERASABLE.
039615,000325: 6315 12213 TCF XCHX # 05 - EXCHANGE INDEX WITH ERASABLE.
039616,000326: 6316 12227 TCF INCR # 06 - INCREMENT INDEX REGISTER.
039617,000327: 6317 12236 TCF TIX # 07 - TRANSFER ON INDEX.
039618,000328:
039619,000329: 6320 12221 TCF XAD # 10 - INDEX REGISTER ADD FROM ERASABLE.
039620,000330: 6321 12232 TCF XSU # 11 - INDEX SUBTRACT FROM ERASABLE.
039621,000331: 6322 12310 TCF BZE/GOTO # 12 - BRANCH ZERO AND GOTO.
039622,000332: 6323 12315 TCF BPL/BMN # 13 - BRANCH PLUS AND BRANCH MINUS.
039623,000333: 6324 12270 TCF RTB/BHIZ # 14 - RETURN TO BASIC AND BRANCH HI ZERO.
039624,000334: 6325 12330 TCF CALL/ITA # 15 - CALL AND STORE QPRET.
039625,000335: 6326 12337 TCF SW/ # 16 - SWITCH INSTRUCTIONS AND AVAILABLE.
039626,000336: 6327 12300 TCF BOV(B) # 17 - BRANCH ON OVERFLOW TO BASIC OR INT.
039627,000337:
039628,000338: # THE FOLLOWING JUMP TABLE APPIES TO UNARY INSTRUCTIONS.
039629,000339:
039630,000340: 6330 COUNT* $$/INTER
039631,000341: 00,2000 BANK 0 # 00 - EXIT - DETECTED EARLIER.
039632,000342: 00,2000 13207 UNAJUMP TCF SQRT # 01 - SQUARE ROOT.
039633,000343: 00,2001 13527 TCF SINE # 02 - SIN.
039634,000344: 00,2002 13516 TCF COSINE # 03 - COS.
039635,000345: 00,2003 13607 TCF ARCSIN # 04 - ARC SIN.
039636,000346: 00,2004 13611 TCF ARCCOS # 05 - ARC COS.
039637,000347: 00,2005 13174 TCF DSQ # 06 - DP SQUARE.
039638,000348: 00,2006 12116 TCF ROUND # 07 - ROUND TO DP.
039639,000349:
039640,000350: 00,2007 17642 TCF COMP # 10 - COMPLEMENT VECTOR OR SCALAR.
039641,000351: 00,2010 13232 TCF VDEF # 11 - VECTOR DEFINE.
039642,000352: 00,2011 13023 TCF UNIT # 12 - UNIT VECTOR.
039643,000353: 00,2012 13176 TCF ABVALABS # 13 - LENGTH OF VECTOR OR MAG OF SCALAR.
039644,000354: 00,2013 13245 TCF VSQ # 14 - SQUARE OF LENGTH OF VECTOR.
039645,000355: 00,2014 16330 TCF STADR # 15 - PUSH UP ON STORE CODE.
039646,000356: 00,2015 13274 TCF RVQ # 16 - RETURN VIA QPRET.
039647,000357: 00,2016 13247 TCF PUSH # 17 - PUSH MPAC DOWN.
039648,000358:
039649,000359: # SECTION 2 LOAD AND STORE PACKAGE.
039650,000360:
039651,000361: # A SET OF EIGHT STORE CODES IS PROVIDED AS THE PRIMARY METHOD OF STORING THE MULTI-PURPOSE
039652,000362: # ACCUMULATOR (MPAC). IF IN THE DANZIG SECTION LOC REFERS TO AN ALGEBRAICALLY POSITIVE WORD, IT IS TAKEN AS A
039653,000363: # STORE CODE WITH A CORRESPONDING ERASABLE ADDRESS. MOST OF THESE CODES ARE TWO ADDRESS, SPECIFYING THAT THE WORD
039654,000364: # FOLLOWING THE STORE CODE IS TO BE USED AS AN ADDRESS FROM WHICH TO RE-LOAD MPAC. FOUR OPTIONS ARE AVAILABLE:
039655,000365:
039656,000366: # 1. STORE STORE MPAC. THE E ADDRESS MAY BE INDEXED.
039657,000367: # 2. STODL STORE MPAC AND RE-LOAD IT IN DP WITH THE NEXT ADDRESS (THE LOAD MAY BE INDEXED).
039658,000368: # 3. STOVL STORE MPAC AND RE-LOAD A VECTOR (AS ABOVE).
039659,000369: # 4. STCALL STORE AND DO A CALL (BOTH ADDRESSES MUST BE DIRECT HERE).
039660,000370:
039661,000371: # STODL AND STOVL WILL TAKE FROM THE PUSH-DOWN LIST IF NO LOAD ADDRESS IS GIVEN.
039662,000372:
039663,000373: 6330 BLOCK 3
039664,000374:
039665,000375: 6330 COUNT* $$/INTER
039666,000376: 6330 30165 STADR CA BANKSET # THE STADR CODE (PUSHUP UP ON STORE
039667,000377: 6331 54004 TS FBANK # ADDRESS) ENTERS HERE.
039668,000378: 6332 24164 INCR LOC
039669,000379: 6333 50164 ITR1 INDEX LOC # THE STORECODE WAS STORED COMPLEMENTED TO
039670,000380: 6334 40000 CS 0 # MAKE IT LOOK LIKE AN OPCODE PAIR.
039671,000381: 6335 67721 AD NEGONE # (YUL CANT REMOVE 1 BECAUSE OF EARLY CCS)
039672,000382:
039673,000383: 6336 54116 DOSTORE TS ADDRWD
039674,000384: 6337 74370 MASK LOW11 # ENTRY FROM DISPATCHER. SAVE THE ERASABLE
039675,000385: 6340 56116 XCH ADDRWD # ADDRESS AND JUMP ON THE STORE CODE NO.
039676,000386: 6341 77674 MASK B12T14
039677,000387: 6342 00006 EXTEND
039678,000388: 6343 75022 MP BIT5 # EACH TRANSFER VECTOR ENTRY IS TWO WORDS.
039679,000389: 6344 50000 ITR0 INDEX A
039680,000390: 6345 16346 TCF STORJUMP
039681,000391:
039682,000392: # STORE CODE JUMP TABLE. CALLS THE APPROPRIATE STORING ROUTINE AND EXITS TO DANZIG OR TO ADDRESS WITH
039683,000393: # A SUPPLIED OPERATION CODE.
039684,000394:
039685,000395: # STORE STORE,1 AND STORE,2 RETURN TO DANZIG, THUS RESETTING THE EBANK TO ITS STATE AT INTPRET.
039686,000396:
039687,000397: 6346 06376 STORJUMP TC STORE # STORE.
039688,000398: 6347 16035 TCF DANZIG # PICK UP NEW OP CODE(S).
039689,000399: 6350 06370 TC STORE,1
039690,000400: 6351 16035 TCF DANZIG
039691,000401: 6352 06373 TC STORE,2
039692,000402: 6353 16035 TCF DANZIG
039693,000403:
039694,000404: 6354 06376 TC STORE # STODL.
039695,000405: 6355 16434 TCF DODLOAD
039696,000406:
039697,000407: 6356 06376 TC STORE # STODL WITH INDEXED LOAD ADDRESS.
039698,000408: 6357 16120 TCF DODLOAD*
039699,000409:
039700,000410: 6360 06376 TC STORE # STOVL.
039701,000411: 6361 16437 TCF DOVLOAD
039702,000412:
039703,000413: 6362 06376 TC STORE # STOVL WITH INDEXED LOAD ADDRESS.
039704,000414: 6363 16442 TCF DOVLOAD*
039705,000415: 6364 06376 TC STORE # STOTC.
039706,000416: 6365 35036 CAF CALLCODE
039707,000417: 6366 54020 TS CYR
039708,000418: 6367 16226 TCF 15BITADR # GET A 15 BIT ADDRESS.
039709,000419:
039710,000420: # STORE CODE ADDRESS PROCESSOR.
039711,000421:
039712,000422: 6370 50120 STORE,1 INDEX FIXLOC
039713,000423: 6371 40046 CS X1
039714,000424: 6372 16375 TCF PRESTORE
039715,000425:
039716,000426: 6373 50120 STORE,2 INDEX FIXLOC
039717,000427: 6374 40047 CS X2
039718,000428: 6375 26116 PRESTORE ADS ADDRWD # RESULTANT ADDRESS IS IN ERASABLE.
039719,000429:
039720,000430: 6376 40116 STORE CS ADDRWD
039721,000431: 6377 65042 AD DEC45
039722,000432: 6400 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
039723,000433: 6401 30120 CA FIXLOC # YES.
039724,000434: 6402 16407 TCF AHEAD5
039725,000435: 6403 35057 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
039726,000436: 6404 56116 XCH ADDRWD
039727,000437: 6405 54003 TS EBANK
039728,000438: 6406 74371 MASK LOW8
039729,000439: 6407 26116 AHEAD5 ADS ADDRWD
039730,000440:
039731,000441: # STORING ROUTINES. STORE DP, TP, OR VECTOR AS INDICATED BY MODE.
039732,000442:
039733,000443: 6410 00006 STARTSTO EXTEND # MPAC,+1 MUST BE STORED IN ANY EVENT.
039734,000444: # ITRACE (5) REFERS TO "STARTSTO".
039735,000445: 6411 30155 DCA MPAC
039736,000446: 6412 50116 INDEX ADDRWD
039737,000447: 6413 52001 DXCH 0
039738,000448:
039739,000449: 6414 10163 CCS MODE
039740,000450: 6415 16430 TCF TSTORE
039741,000451: 6416 00002 TC Q
039742,000452:
039743,000453: 6417 00006 VSTORE EXTEND
039744,000454: 6420 30160 DCA MPAC +3
039745,000455: 6421 50116 INDEX ADDRWD
039746,000456: 6422 52003 DXCH 2
039747,000457:
039748,000458: 6423 00006 EXTEND
039749,000459: 6424 30162 DCA MPAC +5
039750,000460: 6425 50116 INDEX ADDRWD
039751,000461: 6426 52005 DXCH 4
039752,000462: 6427 00002 TC Q
039753,000463:
039754,000464: 6430 30156 TSTORE CA MPAC +2
039755,000465: 6431 50116 INDEX ADDRWD
039756,000466: 6432 54002 TS 2
039757,000467: 6433 00002 TC Q
039758,000468:
039759,000469: # ROUTINES TO BEGIN PROCESSING OF THE SECOND ADDRESS ASSOCIATED WITH ALL STORE-TYPE CODES EXCEPT STORE
039760,000470: # ITSELF.
039761,000471:
039762,000472: 6434 37704 DODLOAD CAF DLOADCOD
039763,000473: 6435 54020 TS CYR
039764,000474: 6436 16062 TCF DIRADRES # GO GET A DIRECT ADDRESS.
039765,000475:
039766,000476: 6437 35010 DOVLOAD CAF VLOADCOD
039767,000477: 6440 54020 TS CYR
039768,000478: 6441 16062 TCF DIRADRES
039769,000479:
039770,000480: 6442 36063 DOVLOAD* CAF VLOAD*
039771,000481: 6443 16121 TCF DODLOAD* +1 # PROLOGUE TO INDEX ROUTINE.
039772,000482:
039773,000483: # THE FOLLOWING LOAD INSTRUCTIONS ARE PROVIDED FOR LOADING THE MULTI-PURPOSE ACCUMULATOR MPAC.
039774,000484:
039775,000485: 6444 50116 TLOAD INDEX ADDRWD
039776,000486: 6445 30002 CA 2 # LOAD A TRIPLE PRECISION ARGUMENT INTO
039777,000487: 6446 54156 TS MPAC +2 # THE FIRST THREE MPAC REGISTERS, WITH THE
039778,000488: 6447 00006 EXTEND # CONTENTS OF THE OTHER FOUR IRRELEVANT.
039779,000489: 6450 50116 INDEX ADDRWD
039780,000490: 6451 30001 DCA 0
039781,000491: 6452 52155 DXCH MPAC
039782,000492: 6453 35026 TMODE CAF ONE
039783,000493: 6454 16034 TCF NEWMODE # DECLARE TRIPLE PRECISION MODE.
039784,000494:
039785,000495: 6455 22007 SLOAD ZL # LOAD A SINGLE PRECISION NUMBER INTO
039786,000496: 6456 50116 INDEX ADDRWD # MPAC, SETTING MPAC+1,2 TO ZERO. THE
039787,000497: 6457 30000 CA 0 # CONTENTS OF THE REMAINING MPAC REGISTERS
039788,000498: 6460 16031 TCF SLOAD2 # ARE IRRELEVANT.
039789,000499:
039790,000500: 6461 00006 VLOAD EXTEND # LOAD A DOUBLE PRECISION VECTOR INTO
039791,000501: 6462 50116 INDEX ADDRWD # MPAC,+1, MPAC+3,4, AND MPAC+5,6. THE
039792,000502: 6463 30001 DCA 0 # CONTENTS OF MPAC +2 ARE IRRELEVANT.
039793,000503: 6464 52155 DXCH MPAC
039794,000504:
039795,000505: 6465 00006 ENDVLOAD EXTEND # PDVL COMES HERE TO FINISH UP FOR DP, TP.
039796,000506: 6466 50116 INDEX ADDRWD
039797,000507: 6467 30003 DCA 2
039798,000508: 6470 52160 DXCH MPAC +3
039799,000509:
039800,000510: 6471 00006 +4 EXTEND # TPDVL FINISHES HERE.
039801,000511: 6472 50116 INDEX ADDRWD
039802,000512: 6473 30005 DCA 4
039803,000513: 6474 52162 DXCH MPAC +5
039804,000514:
039805,000515: 6475 45026 VMODE CS ONE # DECLARE VECTOR MODE.
039806,000516: 6476 16034 TCF NEWMODE
039807,000517:
039808,000518: # THE FOLLOWING INSTRUCTIONS ARE PROVIDED FOR STORING OPERANDS IN THE PUSHDOWN LIST:
039809,000519:
039810,000520: # 1. PUSH PUSHDOWN AND NO LOAD.
039811,000521: # 2. PDDL PUSHDOWN AND DOUBLE PRECISION LOAD.
039812,000522: # 3. PDVL PUSHDOWN AND VECTOR LOAD.
039813,000523:
039814,000524: 6477 00006 PDDL EXTEND
039815,000525: 6500 50116 INDEX ADDRWD # LOAD MPAC,+1, PUSHING THE FORMER
039816,000526: 6501 30001 DCA 0 # CONTENTS DOWN.
039817,000527: 6502 52155 DXCH MPAC
039818,000528: 6503 50166 INDEX PUSHLOC
039819,000529: 6504 52001 DXCH 0
039820,000530:
039821,000531: 6505 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER APPRO-
039822,000532: 6506 36220 CAF NO.WDS # PRIATELY.
039823,000533: 6507 26166 ADS PUSHLOC
039824,000534:
039825,000535: 6510 10163 CCS MODE
039826,000536: 6511 16526 TCF ENDTPUSH
039827,000537: 6512 16524 TCF ENDDPUSH
039828,000538:
039829,000539: 6513 54163 TS MODE # NOW DP.
039830,000540: 6514 54156 ENDVPUSH TS MPAC +2
039831,000541: 6515 52160 DXCH MPAC +3 # PUSH DOWN THE REST OF THE VECTOR HERE.
039832,000542: 6516 50166 INDEX PUSHLOC
039833,000543: 6517 51775 DXCH 0 -4
039834,000544:
039835,000545: 6520 52162 DXCH MPAC +5
039836,000546: 6521 50166 INDEX PUSHLOC
039837,000547: 6522 51777 DXCH 0 -2
039838,000548:
039839,000549: 6523 16035 TCF DANZIG
039840,000550:
039841,000551: 6524 54156 ENDDPUSH TS MPAC +2 # SET MPAC +2 TO ZERO AND EXIT ON DP.
039842,000552: 6525 16035 TCF DANZIG
039843,000553:
039844,000554: 6526 54163 ENDTPUSH TS MODE
039845,000555: 6527 56156 XCH MPAC +2 # ON TRIPLE, SET MPAC +2 TO ZERO, PUSHING
039846,000556: 6530 50166 +2 INDEX PUSHLOC # DOWN THE OLD CONTENTS
039847,000557: 6531 53777 TS 0 -1
039848,000558: 6532 16035 TCF DANZIG
039849,000559:
039850,000560: # PDVL - PUSHDOWN AND VECTOR LOAD.
039851,000561:
039852,000562: 6533 00006 PDVL EXTEND # RELOAD MPAC AND PUSH DOWN ITS CONTENTS.
039853,000563: 6534 50116 INDEX ADDRWD
039854,000564: 6535 30001 DCA 0
039855,000565: 6536 52155 DXCH MPAC
039856,000566: 6537 50166 INDEX PUSHLOC
039857,000567: 6540 52001 DXCH 0
039858,000568:
039859,000569: 6541 50163 INDEX MODE # ADVANCE THE PUSHDOWN POINTER.
039860,000570: 6542 36220 CAF NO.WDS
039861,000571: 6543 26166 ADS PUSHLOC
039862,000572:
039863,000573: 6544 10163 CCS MODE # TEST PAST MODE.
039864,000574: 6545 16564 TCF TPDVL
039865,000575: 6546 16465 TCF ENDVLOAD # JUST LOAD LAST FOUR REGISTERS ON DP.
039866,000576:
039867,000577: 6547 00006 VPDVL EXTEND # PUSHDOWN AND RE-LOAD LAST TWO COMPONENTS
039868,000578: 6550 50116 INDEX ADDRWD
039869,000579: 6551 30003 DCA 2
039870,000580: 6552 52160 DXCH MPAC +3
039871,000581: 6553 50166 INDEX PUSHLOC
039872,000582: 6554 51775 DXCH 0 -4
039873,000583:
039874,000584: 6555 00006 EXTEND
039875,000585: 6556 50116 INDEX ADDRWD
039876,000586: 6557 30005 DCA 4
039877,000587: 6560 52162 DXCH MPAC +5
039878,000588: 6561 50166 INDEX PUSHLOC
039879,000589: 6562 51777 DXCH 0 -2
039880,000590:
039881,000591: 6563 16035 TCF DANZIG
039882,000592:
039883,000593: 6564 00006 TPDVL EXTEND # ON TP, WE MUST LOAD THE Y COMPONENT
039884,000594: 6565 50116 INDEX ADDRWD # BEFORE STORING MPAC +2 IN CASE THIS IS A
039885,000595: 6566 30003 DCA 2 # PUSHUP.
039886,000596: 6567 52160 DXCH MPAC +3
039887,000597:
039888,000598: 6570 30156 CA MPAC +2
039889,000599: 6571 50166 INDEX PUSHLOC # IN DP.
039890,000600: 6572 53777 TS 0 -1
039891,000601: 6573 16471 TCF ENDVLOAD +4
039892,000602:
039893,000603: # SSP (STORE SINGLE PRECISION) IS EXECUTED HERE.
039894,000604:
039895,000605: 6574 24164 SSP INCR LOC # PICK UP THE WORD FOLLOWING THE GIVEN
039896,000606: 6575 50164 INDEX LOC # ADDRESS AND STORE IT AT X.
039897,000607: 6576 30000 CA 0
039898,000608: 6577 50116 STORE1 INDEX ADDRWD # SOME INDEX AND MISCELLANEOUS OPS END
039899,000609: 6600 54000 TS 0 # HERE.
039900,000610: 6601 16035 TCF DANZIG
039901,000611:
039902,000612: # SEQUENCE CHANGING AND SUBROUTINE CALLING OPTIONS.
039903,000613:
039904,000614: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR SEQUENCING CHANGING, BRANCHING, AND CALLING SUBROUTINES:
039905,000615:
039906,000616: # 1. GOTO GO TO.
039907,000617: # 2. CALL CALL SUBROUTINE SETTING QPRET.
039908,000618: # 3. CGOTO COMPUTED GO TO.
039909,000619: # 4. CCALL COMPUTED CALL.
039910,000620: # 7. BPL BRANCH IF MPAC POSITIVE OR ZERO.
039911,000621: # 8. BZE BRANCH IF MPAC ZERO.
039912,000622: # 9. BMN BRANCH IF MPAC NEGATIVE NON-ZERO.
039913,000623:
039914,000624: 6602 24164 CCALL INCR LOC # MAINTAIN LOC FOR QPRET COMPUTATION.
039915,000625: 6603 50164 INDEX LOC
039916,000626: 6604 30000 CAF 0 # GET BASE ADDRESS OF CADR LIST.
039917,000627: 6605 50116 INDEX ADDRWD
039918,000628: 6606 60000 AD 0 # ADD INCREMENT.
039919,000629: 6607 54004 TS FBANK # SELECT DESIRED CADR.
039920,000630: 6610 75062 MASK LOW10
039921,000631: 6611 50000 INDEX A
039922,000632: 6612 32000 CAF 10000
039923,000633: 6613 54117 TS POLISH
039924,000634:
039925,000635: 6614 30165 CALL CA BANKSET # FOR ANY OF THE CALL OPTIONS, MAKE UP THE
039926,000636: 6615 74362 MASK BANKMASK # ADDRESS OF THE NEXT OP-CODE PAIR/STORE
039927,000637: 6616 64362 AD BANKMASK # CODE AND LEAVE IT IN QPRET. NOTE THAT
039928,000638: 6617 60164 AD LOC # BANKMASK = -(2000 - 1).
039929,000639: 6620 50120 INDEX FIXLOC
039930,000640: 6621 54052 TS QPRET
039931,000641:
039932,000642: 6622 30117 GOTO CA POLISH # BASIC BRANCHING SEQUENCE.
039933,000643: 6623 77713 +1 MASK HIGH4
039934,000644: 6624 00006 EXTEND
039935,000645: 6625 16636 BZF GOTOERS # SEE IF ADDRESS POINTS TO FIXED OR ERAS.
039936,000646: 6626 30165 +4 CA BANKSET # SET EBANK PART OF BBANK. NEXT, SET UP
039937,000647: 6627 54006 TS BBANK # FBANK. THE COMBINATION IS PICKED UP &
039938,000648: 6630 30117 CA POLISH # PUT INTO BANKSET AT INTPRET +2.
039939,000649: 6631 54004 TS FBANK
039940,000650: 6632 75062 MASK LOW10
039941,000651: 6633 65014 AD 2K
039942,000652: 6634 54164 TS LOC
039943,000653: 6635 16016 TCF INTPRET +2
039944,000654:
039945,000655: 6636 E3,1400 EBANK= 1400 # SO YUL DOESN'T CUSS THE "CA 1400" BELOW.
039946,000656:
039947,000657: 6636 30117 GOTOERS CA POLISH # THE GIVEN ADDRESS IS IN ERASABLE - SEE
039948,000658: 6637 66225 AD -ENDVAC # IF RELATIVE TO THE WORK AREA.
039949,000659: 6640 10000 CCS A
039950,000660: 6641 30117 CA POLISH # GENERAL ERASABLE.
039951,000661: 6642 16651 TCF GOTOGE
039952,000662:
039953,000663: 6643 30120 CA FIXLOC # WORK AREA.
039954,000664: 6644 60117 AD POLISH
039955,000665: 6645 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
039956,000666: 6646 30000 CA 0 # THE BRANCH ADDRESS.
039957,000667: 6647 54117 TS POLISH
039958,000668: 6650 16623 TCF GOTO +1 # ALLOWS ARBITRARY INDIRECTNESS LEVELS.
039959,000669:
039960,000670: 6651 54003 GOTOGE TS EBANK
039961,000671: 6652 74371 MASK LOW8
039962,000672: 6653 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
039963,000673: 6654 31400 CA 1400 # THE BRANCH ADDRESS.
039964,000674: 6655 54117 TS POLISH
039965,000675: 6656 16623 TCF GOTO +1
039966,000676:
039967,000677: 6657 50164 CGOTO INDEX LOC # COMPUTED GO TO. PICK UP ADDRESS OF CADR
039968,000678: 6660 30001 CA 1 # LIST.
039969,000679: 6661 50116 INDEX ADDRWD # ADD MODIFIER.
039970,000680: 6662 60000 AD 0
039971,000681: 6663 54004 TS FBANK # SELECT GOTO ADDRESS.
039972,000682: 6664 75062 MASK LOW10
039973,000683: 6665 50000 INDEX A
039974,000684: 6666 32000 CA 10000
039975,000685: 6667 54117 TS POLISH
039976,000686: 6670 16623 TCF GOTO +1 # WITH ADDRESS IN A.
039977,000687:
039978,000688: 6671 30165 SWBRANCH CA BANKSET # SWITCH INSTRUCTIONS WHICH ELECT TO
039979,000689: 6672 54004 TS FBANK # BRANCH COME HERE TO DO SO.
039980,000690: 6673 50164 INDEX LOC
039981,000691: 6674 30001 CA 1
039982,000692: 6675 54117 TS POLISH
039983,000693: 6676 16623 TCF GOTO +1
039984,000694:
039985,000695: # TRIPLE PRECISION BRANCHING ROUTINE. IF CALLING TC IS AT L, RETURN IS AS FOLLOWS:
039986,000696:
039987,000697: # L+1 IF MPAC IS GREATER THAN ZERO.
039988,000698: # L+2 IF MPAC IS EQUAL TO +0 OR -0.
039989,000699: # L+3 IF MPAC IS LESS THAN ZERO.
039990,000700:
039991,000701:
039992,000702: 6677 10154 BRANCH CCS MPAC
039993,000703: 6700 00002 TC Q
039994,000704: 6701 16703 TCF +2 # ON ZERO.
039995,000705: 6702 16715 TCF NEG
039996,000706:
039997,000707: 6703 10155 CCS MPAC +1
039998,000708: 6704 00002 TC Q
039999,000709: 6705 16707 TCF +2
040000,000710: 6706 16715 TCF NEG
040001,000711:
040002,000712: 6707 10156 CCS MPAC +2
040003,000713: 6710 00002 TC Q
040004,000714: 6711 16713 TCF +2
040005,000715: 6712 16715 TCF NEG
040006,000716:
040007,000717: 6713 50002 Q+1 INDEX Q
040008,000718: 6714 00001 TC 1
040009,000719:
040010,000720: 6715 50002 NEG INDEX Q # IF FIRST NON-ZERO REGISTER WAS NEGATIVE.
040011,000721: 6716 00002 TC 2
040012,000722:
040013,000723:
040014,000724: 6717 6715 Q+2 = NEG
040015,000725:
040016,000726: # ITRACE (3) REFERS TO "EXIT".
040017,000727: 6717 30165 EXIT CA BANKSET # RESTORE USER'S BANK SETTING, AND LEAVE
040018,000728: 6720 54006 TS BBANK # INTERPRETIVE MODE.
040019,000729: 6721 50164 INDEX LOC
040020,000730: 6722 00001 TC 1
040021,000731:
040022,000732: # SECTION 3 - ADD/SUBTRACT PACKAGE.
040023,000733:
040024,000734: # THE FOLLOWING OPERATIONS ARE PROVIDED FOR ADDING TO AND SUBTRACTING FROM THE MULTI-PURPOSE ACCUMULATOR
040025,000735: # MPAC:
040026,000736:
040027,000737: # 1. DAD DOUBLE PRECISION ADD.
040028,000738: # 2. DSU DOUBLE PRECISION SUBTRACT.
040029,000739: # 3. BDSU DOUBLE PRECISION SUBTRACT FROM.
040030,000740:
040031,000741: # 4. TAD TRIPLE PRECISION ADD.
040032,000742:
040033,000743: # 5. VAD VECTOR ADD.
040034,000744: # 6. VSU VECTOR SUBTRACT.
040035,000745: # 7. BVSU VECTOR SUBTRACT FROM.
040036,000746:
040037,000747: # THE INTERPRETIVE OVERFLOW INDICATOR OVFIND IS SET NON-ZERO IF OVERFLOW OCCURS IN ANY OF THE ABOVE.
040038,000748:
040039,000749: 6723 35010 VSU CAF BIT15 # CHANGES 0 TO DCS.
040040,000750: 6724 16726 TCF +2
040041,000751:
040042,000752: 6725 34367 VAD CAF PRIO30 # CHANGES 0 TO DCA.
040043,000753: 6726 26116 ADS ADDRWD
040044,000754: 6727 00006 EXTEND
040045,000755: 6730 50116 INDEX ADDRWD
040046,000756: 6731 00003 READ HISCALAR # DCA 2 OR DCS 2
040047,000757: 6732 20160 DAS MPAC +3
040048,000758: 6733 00006 EXTEND # CHECK OVERFLOW.
040049,000759: 6734 16736 BZF +2
040050,000760: 6735 06770 TC OVERFLWY
040051,000761:
040052,000762: 6736 00006 EXTEND
040053,000763: 6737 50116 INDEX ADDRWD
040054,000764: 6740 00005 READ CHAN5 # DCA 4 OR DCS 4
040055,000765: 6741 20162 DAS MPAC +5
040056,000766: 6742 00006 EXTEND
040057,000767: 6743 16745 BZF +2
040058,000768: 6744 06765 TC OVERFLWZ
040059,000769:
040060,000770: 6745 00006 EXTEND
040061,000771: 6746 50116 INDEX ADDRWD
040062,000772: 6747 00001 READ LCHAN # DCA 0 OR DCS 0
040063,000773: 6750 16754 TCF ENDVXV
040064,000774:
040065,000775: 6751 00006 DAD EXTEND
040066,000776: 6752 50116 INDEX ADDRWD
040067,000777: 6753 30001 DCA 0
040068,000778: 6754 20155 ENDVXV DAS MPAC # VXV FINISHES HERE.
040069,000779: 6755 00006 EXTEND
040070,000780: 6756 16035 BZF DANZIG
040071,000781:
040072,000782: 6757 06773 SETOVF TC OVERFLOW
040073,000783: 6760 16035 TCF DANZIG
040074,000784:
040075,000785: 6761 00006 DSU EXTEND
040076,000786: 6762 50116 INDEX ADDRWD
040077,000787: 6763 40001 DCS 0
040078,000788: 6764 16754 TCF ENDVXV
040079,000789:
040080,000790: 6765 54001 OVERFLWZ TS L # ENTRY FOR THIRD COMPONENT.
040081,000791: 6766 35031 CAF FIVE
040082,000792: 6767 16772 TCF +3
040083,000793:
040084,000794: 6770 54001 OVERFLWY TS L # ENTRY FOR SECOND COMPONENT.
040085,000795: 6771 36221 CAF THREE
040086,000796: 6772 56001 XCH L
040087,000797:
040088,000798: 6773 50000 OVERFLOW INDEX A # ENTRY FOR 1ST COMP OR DP (L=0).
040089,000799: 6774 45007 CS LIMITS # PICK UP POSMAX OR NEGMAX.
040090,000800: 6775 54130 TS BUF
040091,000801: 6776 00006 EXTEND
040092,000802: 6777 24000 AUG A # FORCE OVERFLOW.
040093,000803: 7000 50001 INDEX L
040094,000804: 7001 26155 ADS MPAC +1
040095,000805: 7002 54007 TS 7
040096,000806: 7003 35030 CAF ZERO
040097,000807: 7004 60130 AD BUF
040098,000808: 7005 50001 INDEX L
040099,000809: 7006 26154 ADS MPAC
040100,000810: 7007 54007 TS 7
040101,000811: 7010 00002 TC Q # NO OVERFLOW EXIT.
040102,000812: 7011 17126 TCF SETOVF2 # SET OVFIND AND EXIT.
040103,000813:
040104,000814: 7012 00006 BVSU EXTEND
040105,000815: 7013 50116 INDEX ADDRWD
040106,000816: 7014 30003 DCA 2
040107,000817: 7015 52160 DXCH MPAC +3
040108,000818: 7016 00006 EXTEND
040109,000819: 7017 40001 DCOM
040110,000820: 7020 20160 DAS MPAC +3
040111,000821: 7021 00006 EXTEND
040112,000822: 7022 17024 BZF +2
040113,000823: 7023 06770 TC OVERFLWY
040114,000824:
040115,000825: 7024 00006 EXTEND
040116,000826: 7025 50116 INDEX ADDRWD
040117,000827: 7026 30005 DCA 4
040118,000828: 7027 52162 DXCH MPAC +5
040119,000829: 7030 00006 EXTEND
040120,000830: 7031 40001 DCOM
040121,000831: 7032 20162 DAS MPAC +5
040122,000832: 7033 00006 EXTEND
040123,000833: 7034 17036 BZF +2
040124,000834: 7035 06765 TC OVERFLWZ
040125,000835:
040126,000836: 7036 00006 BDSU EXTEND
040127,000837: 7037 50116 INDEX ADDRWD
040128,000838: 7040 30001 DCA 0
040129,000839: 7041 52155 DXCH MPAC
040130,000840: 7042 00006 EXTEND
040131,000841: 7043 40001 DCOM
040132,000842: 7044 16754 TCF ENDVXV
040133,000843:
040134,000844: # TRIPLE PRECISION ADD ROUTINE.
040135,000845:
040136,000846: 7045 00006 TAD EXTEND
040137,000847: 7046 50116 INDEX ADDRWD
040138,000848: 7047 30002 DCA 1 # ADD MINOR PARTS FIRST.
040139,000849: 7050 20156 DAS MPAC +1
040140,000850: 7051 50116 INDEX ADDRWD
040141,000851: 7052 60000 AD 0
040142,000852: 7053 60154 AD MPAC
040143,000853: 7054 54154 TS MPAC
040144,000854: 7055 16035 TCF DANZIG
040145,000855:
040146,000856: 7056 16757 TCF SETOVF # SET OVFIND IF SUCH OCCURS.
040147,000857:
040148,000858: # ARITHMETIC SUBROUTINES REQUIRED IN FIXED-FIXED.
040149,000859:
040150,000860: # 1. DMPSUB DOUBLE PRECISION MULTIPLY. MULTIPLY THE CONTENTS OF MPAC,+1 BY THE DP WORD WHOSE ADDRESS
040151,000861: # IS IN ADDRWD AND LEAVE A TRIPLE PRECISION RESULT IN MPAC.
040152,000862: # 2. ROUNDSUB ROUND THE TRIPLE PRECISON CONTENTS OF MPAC TO DOUBLE PRECISION.
040153,000863: # 3. DOTSUB TAKE THE DOT PRODUCT OF THE VECTOR IN MPAC AND THE VECTOR WHOSE ADDRESS IS IN ADDRWD
040154,000864: # AND LEAVE THE TRIPLE PRECISION RESULT IN MPAC.
040155,000865: # 4. POLY USING THE CONTENTS OF MPAC AS A DP ARGUMENT, EVALUATE THE POLYNOMIAL WHOSE DEGREE AND
040156,000866: # COEFFICIENTS IMMEDIATELY FOLLOW THE TC POLY INSTRUCTION (SEE ROUTINE FOR DETAILS.)
040157,000867:
040158,000868:
040159,000869: 7057 50002 DMP INDEX Q # BASIC SUBROUTINE FOR USE BY PINBALL, ETC
040160,000870: 7060 30000 CAF 0 # ADRES OF ARGUMENT FOLLOWS TC DMP .
040161,000871: 7061 24002 INCR Q
040162,000872: 7062 54116 -1 TS ADDRWD # (PROLOGUE FOR SETTING ADDRWD.)
040163,000873:
040164,000874: 7063 50116 DMPSUB INDEX ADDRWD # GET MINOR PART OF OPERAND AT C(ADDRWD).
040165,000875: 7064 30001 CA 1
040166,000876: 7065 54156 TS MPAC +2 # THIS WORKS FOR SQUARING MPAC AS WELL.
040167,000877: 7066 35030 CAF ZERO # SET MPAC +1 TO ZERO SO WE CAN ACCUMULATE
040168,000878: 7067 56155 XCH MPAC +1 # THE PARTIAL PRODUCTS WITH DAS
040169,000879: 7070 54135 TS MPTEMP # INSTRUCTIONS.
040170,000880: 7071 00006 EXTEND
040171,000881: 7072 70156 MP MPAC +2 # MINOR OF MPAC X MINOR OF C(ADDRWD).
040172,000882:
040173,000883: 7073 56156 XCH MPAC +2 # DISCARD MINOR PART OF ABOVE RESULT AND
040174,000884: 7074 00006 EXTEND # FORM MAJOR OF MPAC X MINOR OF C(ADDRWD).
040175,000885: 7075 70154 MP MPAC
040176,000886: 7076 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
040177,000887:
040178,000888: 7077 50116 INDEX ADDRWD # GET MAJOR PART OF ARGUMENT AT C(ADDRWD).
040179,000889: 7100 30000 CA 0
040180,000890: 7101 56135 XCH MPTEMP # SAVE AND BRING OUT MINOR OF MPAC.
040181,000891: 7102 00006 DMPSUB2 EXTEND
040182,000892: 7103 70135 MP MPTEMP # MAJOR OF C(ADDRWD) X MINOR OF MPAC.
040183,000893: 7104 20156 DAS MPAC +1 # ACCUMULATE, SETTING A TO NET OVERFLOW.
040184,000894:
040185,000895: 7105 56154 XCH MPAC # SETTING MPAC TO 0 OR +-1.
040186,000896: 7106 00006 EXTEND
040187,000897: 7107 70135 MP MPTEMP # MAJOR OF MPAC X MAJOR OF C(ADDRWD).
040188,000898: 7110 20155 DAS MPAC # GUARANTEED NO OVERFLOW.
040189,000899: 7111 00002 TC Q # 49 MCT = .573 MS. INCLUDING RETURN.
040190,000900:
040191,000901: # ROUND MPAC TO DOUBLE PRECISION, SETTING OVFIND ON THE RARE EVENT OF OVERFLOW.
040192,000902:
040193,000903: 7112 35030 ROUNDSUB CAF ZERO # SET MPAC +2 = 0 FOR SCALARS AND CHANGE
040194,000904: 7113 54163 +1 TS MODE # MODE TO DP.
040195,000905:
040196,000906: 7114 56156 VROUND XCH MPAC +2 # BUT WE NEEDNT TAKE THE TIME FOR VECTORS.
040197,000907: 7115 60000 DOUBLE
040198,000908: 7116 54001 TS L
040199,000909: 7117 00002 TC Q
040200,000910:
040201,000911: 7120 60155 AD MPAC +1 # ADD ROUNDING BIT IF MPAC +2 WAS GREATER
040202,000912: 7121 54155 TS MPAC +1 # THAN .5 IN MAGNITUDE.
040203,000913: 7122 00002 TC Q
040204,000914:
040205,000915: 7123 60154 AD MPAC # PROPAGATE INTERFLOW.
040206,000916: 7124 54154 TS MPAC
040207,000917: 7125 00002 TC Q
040208,000918:
040209,000919: 7126 54121 SETOVF2 TS OVFIND # (RARE).
040210,000920: 7127 00002 TC Q
040211,000921:
040212,000922: # THE DOT PRODUCT SUBROUTINE USUALLY FORMS THE DOT PRODUCT OF THE VECTOR IN MPAC WITH A STANDARD SIX
040213,000923: # REGISTER VECTOR WHOSE ADDRESS IS IN ADDRWD. IN THIS CASE C(DOTINC) ARE SET TO 2. VXM, HOWEVER, SETS C(DOTINC) TO
040214,000924: # 6 SO THAT DOTSUB DOTS MPAC WITH A COLUMN VECTOR OF THE MATRIX IN QUESTION IN THIS CASE.
040215,000925:
040216,000926:
040217,000927: 7130 35025 PREDOT CAF TWO # PROLOGUE TO SET DOTINC TO 2.
040218,000928: 7131 54136 TS DOTINC
040219,000929:
040220,000930: 7132 00006 DOTSUB EXTEND
040221,000931: 7133 22137 QXCH DOTRET # SAVE RETURN.
040222,000932: 7134 07063 TC DMPSUB # DOT X COMPONENTS.
040223,000933: 7135 52160 DXCH MPAC +3 # POSITION Y COMPONENT OF MPAC FOR
040224,000934: 7136 52155 DXCH MPAC # MULTIPLICATION WHILE SAVING RESULT IN
040225,000935: 7137 52131 DXCH BUF # THREE WORD BUFFER, BUF.
040226,000936: 7140 30156 CA MPAC +2
040227,000937: 7141 54132 TS BUF +2
040228,000938:
040229,000939: 7142 30136 CA DOTINC # ADVANCE ADDRWD TO Y COMPONENT OF
040230,000940: 7143 26116 ADS ADDRWD # OTHER ARGUMENT.
040231,000941: 7144 07063 TC DMPSUB
040232,000942: 7145 52156 DXCH MPAC +1 # ACCUMULATE PARTIAL PRODUCTS.
040233,000943: 7146 20132 DAS BUF +1
040234,000944: 7147 60154 AD MPAC
040235,000945: 7150 60130 AD BUF
040236,000946: 7151 54130 TS BUF
040237,000947: 7152 17154 TCF +2
040238,000948: 7153 54121 TS OVFIND # IF OVERFLOW OCCURS.
040239,000949:
040240,000950: 7154 52162 DXCH MPAC +5 # MULTIPLY Z COMPONENTS.
040241,000951: 7155 52155 DXCH MPAC
040242,000952: 7156 30136 CA DOTINC
040243,000953: 7157 26116 ADS ADDRWD
040244,000954: 7160 07063 TC DMPSUB
040245,000955: 7161 52132 ENDDOT DXCH BUF +1 # LEAVE FINAL ACCUMULATION IN MPAC.
040246,000956: 7162 20156 DAS MPAC +1
040247,000957: 7163 60154 AD MPAC
040248,000958: 7164 60130 AD BUF
040249,000959: 7165 54154 TS MPAC
040250,000960: 7166 00137 TC DOTRET
040251,000961:
040252,000962: 7167 06773 TC OVERFLOW # ON OVERFLOW HERE.
040253,000963: 7170 00137 TC DOTRET
040254,000964:
040255,000965: # DOUBLE PRECISION POLYNOMIAL EVALUATOR
040256,000966:
040257,000967: # N N-1
040258,000968: # THIS ROUTINE EVALUATES A X + A X + ... + A X + A LEAVING THE DP RESULT IN MPAC ON EXIT.
040259,000969: # N N-1 1 0
040260,000970:
040261,000971: # THE ROUTINE HAS TWO ENTRIES
040262,000972:
040263,000973: # 1. ENTRY THRU POWRSERS. THE COEFFICIENTS MAY BE EITHER IN FIXED OR ERASABLE, THE CALL IS BY
040264,000974: # TC POWRSERS, AND THE RETURN IS TO LOC(TC POWRSERS)+1. THE ENTERING DATA MUST BE AS FOLLOWS
040265,000975:
040266,000976: # A SP LOC-3 ADDRESS FOR REFERENCING COEF TABLE
040267,000977: # L SP N-1 N IS THE DEGREE OF THE POWER SERIES
040268,000978: # MPAC DP X ARGUMENT
040269,000979:
040270,000980: # LOC-2N DP A(0)
040271,000981: # ...
040272,000982: # LOC DP A(N)
040273,000983:
040274,000984: # 2. ENTRY THRU POLY. THE CALL TO POLY AND THE ENTERING DATA MUST BE AS FOLLOWS
040275,000985:
040276,000986: # MPAC DP X ARGUMENT
040277,000987: # LOC TC POLY
040278,000988: # LOC+1 SP N-1
040279,000989: # LOC+2 DP A(0)
040280,000990: # ...
040281,000991: # LOC+2N+2 DP A(N) RETURN IS TO LOC+2N+4
040282,000992:
040283,000993: 7171 00006 POWRSERS EXTEND
040284,000994: 7172 22141 QXCH POLYRET # RETURN ADDRESS
040285,000995: 7173 54117 TS POLISH # POWER SERIES ADDRESS
040286,000996: 7174 22140 LXCH POLYCNT # N-1 TO COUNTER
040287,000997: 7175 17206 TCF POLYCOM # SKIP SET UP BY POLY
040288,000998:
040289,000999: 7176 50002 POLY INDEX Q
040290,001000: 7177 30000 CAF 0
040291,001001: 7200 54140 TS POLYCNT # N-1 TO COUNTER
040292,001002: 7201 60000 DOUBLE
040293,001003: 7202 60002 AD Q
040294,001004: 7203 54117 TS POLISH # L(A(N))-3 TO POLISH
040295,001005: 7204 65031 AD FIVE
040296,001006: 7205 54141 TS POLYRET # STORE RETURN ADDRESS
040297,001007:
040298,001008: 7206 36247 POLYCOM CAF LVBUF # INCOMING X WILL BE MOVED TO VBUF, SO
040299,001009: 7207 54116 TS ADDRWD # SET ADDRWD SO DMPSUB WILL MPY BY VBUF.
040300,001010:
040301,001011: 7210 00006 EXTEND
040302,001012: 7211 50117 INDEX POLISH
040303,001013: 7212 30004 DCA 3
040304,001014: 7213 52155 DXCH MPAC # LOAD A(N) INTO MPAC,
040305,001015: 7214 52123 DXCH VBUF # SAVING X IN VBUF
040306,001016: 7215 17221 TCF POLY2
040307,001017:
040308,001018: 7216 54140 POLYLOOP TS POLYCNT # SAVE DECREMENTED LOOP COUNTER
040309,001019: 7217 45025 CS TWO
040310,001020: 7220 26117 ADS POLISH # REGRESS COEFFICIENT POINTER
040311,001021:
040312,001022: 7221 07063 POLY2 TC DMPSUB # MULTIPLY BY X
040313,001023: 7222 00006 EXTEND
040314,001024: 7223 50117 INDEX POLISH
040315,001025: 7224 30002 DCA 1 # ADD IN NEXT COEFFICIENT
040316,001026: 7225 20155 DAS MPAC # USERS RESPONSIBILITY TO ASSURE NO OVFLOW
040317,001027:
040318,001028: 7226 10140 CCS POLYCNT
040319,001029: 7227 17216 TCF POLYLOOP
040320,001030: 7230 00141 TC POLYRET # RETURN CALLER
040321,001031:
040322,001032: # MISCELLANEOUS MULTI-PRECISION ROUTINES REQUIRED IN FIXED-FIXED BUT NOT USED BY THE INTERPRETER.
040323,001033:
040324,001034: 7231 22002 TPAGREE LXCH Q # FORCE SIGN AGREEMENT AMONG THE TRIPLE
040325,001035: 7232 06677 TC BRANCH # PRECISION CONTENTS OF MPAC. RETURNING
040326,001036: 7233 17237 TCF ARG+ # WITH SIGNUM OF THE INPUT IN A.
040327,001037: 7234 17257 TCF ARGZERO
040328,001038:
040329,001039: 7235 45006 CS POSMAX # IF NEGATIVE.
040330,001040: 7236 17240 TCF +2
040331,001041:
040332,001042: 7237 35006 ARG+ CAF POSMAX
040333,001043: 7240 54002 TS Q
040334,001044: 7241 00006 EXTEND
040335,001045: 7242 24000 AUG A # FORMS +-1.0.
040336,001046: 7243 60156 AD MPAC +2
040337,001047: 7244 54156 TS MPAC +2
040338,001048: 7245 35030 CAF ZERO
040339,001049: 7246 60002 AD Q
040340,001050: 7247 60155 AD MPAC +1
040341,001051: 7250 54155 TS MPAC +1
040342,001052: 7251 35030 CAF ZERO
040343,001053: 7252 60002 AD Q # Q STILL HAS POSMAX OR NEGMAX IN IT.
040344,001054: 7253 60154 AD MPAC
040345,001055: 7254 54154 ARGZERO2 TS MPAC # ALWAYS SKIPPING UNLESS ARGZERO.
040346,001056: 7255 54155 TS MPAC +1
040347,001057: 7256 00001 TC L # RETURN VIA L.
040348,001058:
040349,001059: 7257 54156 ARGZERO TS MPAC +2 # SET ALL THREE MPAC REGISTERS TO ZERO.
040350,001060: 7260 17254 TCF ARGZERO2
040351,001061:
040352,001062: # SHORTMP MULTIPLIES THE TP CONTENTS OF MPAC BY THE SINGLE PRECISION NUMBER ARRIVING IN A.
040353,001063:
040354,001064: 7261 54135 SHORTMP TS MPTEMP
040355,001065: 7262 00006 EXTEND
040356,001066: 7263 70156 MP MPAC +2
040357,001067: 7264 54156 TS MPAC +2
040358,001068: 7265 35030 SHORTMP2 CAF ZERO # SO SUBSEQUENT DAS WILL WORK.
040359,001069: 7266 56155 XCH MPAC +1
040360,001070: 7267 17102 TCF DMPSUB2
040361,001071:
040362,001072: # DMPNSUB MULTIPLIES THE DP FRACTION ARRIVING IN MPAC BY THE SP
040363,001073: # INTEGER ARRIVING IN A. THE DP PRODUCT DEPARTS BOTH IN MPAC AND IN
040364,001074: # A AND L. NOTE THAT DMPNSUB NORMALLY INCREASES THE MAGNITUDE OF THE
040365,001075: # CONTENTS OF MPAC. THE CUSTOMER MUST INSURE THAT B(A) X B(MPAC,MPAC+1)
040366,001076: # AND B(A) X B(MPAC) ARE LESS THAN 1 IN MAGNITUDE, WHERE B, AS IS OBVIOUS,
040367,001077: # INDICATES THE ARRIVING CONTENTS.
040368,001078:
040369,001079: 7270 54135 DMPNSUB TS DMPNTEMP
040370,001080: 7271 00006 EXTEND
040371,001081: 7272 70155 MP MPAC +1
040372,001082: 7273 52155 DXCH MPAC # LOW PRODUCT TO MPAC, HIGH FACTOR TO A
040373,001083: 7274 00006 EXTEND
040374,001084: 7275 70135 MP DMPNTEMP
040375,001085: 7276 30001 CA L
040376,001086: 7277 26154 ADS MPAC # COMPLETING THE PRODUCT IN MPAC
040377,001087: 7300 00006 EXTEND
040378,001088: 7301 30155 DCA MPAC # BRINGING THE PRODUCT INTO A AND L
040379,001089: 7302 00002 TC Q
040380,001090:
040381,001091: # MISCELLANEOUS VECTOR OPERATIONS. INCLUDED HERE ARE THE FOLLOWING:
040382,001092:
040383,001093: # 1. DOT DP VECTOR DOT PRODUCT.
040384,001094: # 2. VXV DP VECTOR CROSS PRODUCT.
040385,001095: # 3. VXSC DP VECTOR TIMES SCALAR.
040386,001096: # 4. V/SC DP VECTOR DIVIDED BY SCALAR.
040387,001097: # 5. VPROJ DP VECTOR PROJECTION. ( (MPAC.X)MPAC ).
040388,001098: # 6. VXM DP VECTOR POST-MULTIPLIED BY MATRIX.
040389,001099: # 7. MXV DP VECTOR PRE-MULTIPLIED BY MATRIX.
040390,001100:
040391,001101:
040392,001102: 7303 07130 DOT TC PREDOT # DO THE DOT PRODUCT AND EXIT, CHANGING
040393,001103: 7304 35030 DMODE CAF ZERO # THE MODE TO DP SCALAR.
040394,001104: 7305 16034 TCF NEWMODE
040395,001105:
040396,001106:
040397,001107: 7306 35025 MXV CAF TWO # SET UP MATINC AND DOTINC FOR ROW
040398,001108: 7307 54140 TS MATINC # VECTORS.
040399,001109: 7310 17314 TCF VXM/MXV # GO TO COMMON PORTION.
040400,001110:
040401,001111: 7311 44375 VXM CS TEN # SET MATINC AND DOTINC TO REFER TO MATRIX
040402,001112: 7312 54140 TS MATINC # AS THREE COLUMN VECTORS.
040403,001113: 7313 36216 CAF SIX
040404,001114:
040405,001115: # COMMON PORTION OF MXV AND VXM.
040406,001116:
040407,001117: 7314 54136 VXM/MXV TS DOTINC
040408,001118: # ITRACE (2) REFERS TO "VXM/MXV".
040409,001119: 7315 07504 TC MPACVBUF # SAVE VECTOR IN MPAC FOR FURTHER USE.
040410,001120:
040411,001121: 7316 07132 TC DOTSUB # GO DOT TO GET X COMPONENT OF ANSWER.
040412,001122: 7317 00006 EXTEND
040413,001123: 7320 30123 DCA VBUF # MOVE MPAC VECTOR BACK INTO MPAC, SAVING
040414,001124: 7321 52155 DXCH MPAC # NEW X COMPONENT IN BUF2.
040415,001125: 7322 52134 DXCH BUF2
040416,001126: 7323 00006 EXTEND
040417,001127: 7324 30125 DCA VBUF +2
040418,001128: 7325 52160 DXCH MPAC +3
040419,001129: 7326 00006 EXTEND
040420,001130: 7327 30127 DCA VBUF +4
040421,001131: 7330 52162 DXCH MPAC +5
040422,001132: 7331 30140 CA MATINC # INITIALIZE ADDRWD FOR NEXT DOT PRODUCT.
040423,001133: 7332 26116 ADS ADDRWD # FORMS BASE ADDRESS OF NEXT COLUMN(ROW).
040424,001134:
040425,001135: 7333 07132 TC DOTSUB
040426,001136: 7334 52123 DXCH VBUF # MOVE GIVEN VECTOR BACK TO MPAC, SAVING Y
040427,001137: 7335 52155 DXCH MPAC # COMPONENT OF ANSWER IN VBUF +2.
040428,001138: 7336 52125 DXCH VBUF +2
040429,001139: 7337 52160 DXCH MPAC +3
040430,001140: 7340 52127 DXCH VBUF +4
040431,001141: 7341 52162 DXCH MPAC +5
040432,001142: 7342 30140 CA MATINC # FORM ADDRESS OF LAST COLUMN OR ROW.
040433,001143: 7343 26116 ADS ADDRWD
040434,001144:
040435,001145: 7344 07132 TC DOTSUB
040436,001146: 7345 52134 DXCH BUF2 # ANSWER NOW COMPLETE. PUT COMPONENTS INTO
040437,001147: 7346 52155 DXCH MPAC # PROPER MPAC REGISTERS.
040438,001148: 7347 52162 DXCH MPAC +5
040439,001149: 7350 52125 DXCH VBUF +2
040440,001150: 7351 52160 DXCH MPAC +3
040441,001151: 7352 16035 TCF DANZIG # EXIT.
040442,001152:
040443,001153: # VXSC - VECTOR TIMES SCALAR.
040444,001154:
040445,001155: 7353 10163 VXSC CCS MODE # TEST PRESENT MODE.
040446,001156: 7354 17402 TCF DVXSC # SEPARATE ROUTINE WHEN SCALAR IS IN MPAC.
040447,001157: 7355 17402 TCF DVXSC
040448,001158:
040449,001159: 7356 07063 VVXSC TC DMPSUB # COMPUTE X COMPONENT
040450,001160: 7357 07114 TC VROUND # AND ROUND IT.
040451,001161: 7360 52160 DXCH MPAC +3 # PUT Y COMPONENT INTO MPAC SAVING MPAC IN
040452,001162: 7361 52155 DXCH MPAC # MPAC +3.
040453,001163: 7362 52160 DXCH MPAC +3
040454,001164:
040455,001165: 7363 07063 TC DMPSUB # DO SAME FOR Y AND Z COMPONENTS.
040456,001166: 7364 07114 TC VROUND
040457,001167: 7365 52162 DXCH MPAC +5
040458,001168: 7366 52155 DXCH MPAC
040459,001169: 7367 52162 DXCH MPAC +5
040460,001170:
040461,001171: 7370 07063 TC DMPSUB
040462,001172: 7371 07114 TC VROUND
040463,001173: 7372 52155 VROTATEX DXCH MPAC # EXIT USED TO RESTORE MPAC AFTER THIS
040464,001174: 7373 52162 DXCH MPAC +5 # TYPE OF ROTATION. CALLED BY VECTOR SHIFT
040465,001175: 7374 52160 DXCH MPAC +3 # RIGHT, V/SC, ETC.
040466,001176: 7375 52155 DXCH MPAC
040467,001177: 7376 16035 TCF DANZIG
040468,001178:
040469,001179: # DP VECTOR PROJECTION ROUTINE.
040470,001180:
040471,001181: 7377 07130 VPROJ TC PREDOT # (MPAC.X)MPAC IS COMPUTED AND LEFT IN
040472,001182: 7400 45024 CS FOUR # MPAC. DO DOT AND FALL INTO DVXSC.
040473,001183: 7401 26116 ADS ADDRWD
040474,001184:
040475,001185: # VXSC WHEN SCALAR ARRIVES IN MPAC AND VECTOR IS AT X.
040476,001186:
040477,001187: 7402 00006 DVXSC EXTEND # SAVE SCALAR IN MPAC +3 AND GET X
040478,001188: 7403 30155 DCA MPAC # COMPONENT OF ANSWER.
040479,001189: 7404 52160 DXCH MPAC +3
040480,001190: 7405 07063 TC DMPSUB
040481,001191: 7406 07114 TC VROUND
040482,001192:
040483,001193: 7407 35025 CAF TWO # ADVANCE ADDRWD TO Y COMPONENT OF X.
040484,001194: 7410 26116 ADS ADDRWD
040485,001195: 7411 00006 EXTEND
040486,001196: 7412 30160 DCA MPAC +3 # PUT SCALAR BACK INTO MPAC AND SAVE
040487,001197: 7413 52155 DXCH MPAC # X RESULT IN MPAC +5.
040488,001198: 7414 52162 DXCH MPAC +5
040489,001199: 7415 07063 TC DMPSUB
040490,001200: 7416 07114 TC VROUND
040491,001201:
040492,001202: 7417 35025 CAF TWO
040493,001203: 7420 26116 ADS ADDRWD # TO Z COMPONENT.
040494,001204: 7421 52160 DXCH MPAC +3 # BRING SCALAR BACK, PUTTING Y RESULT IN
040495,001205: 7422 52155 DXCH MPAC # THE PROPER PLACE.
040496,001206: 7423 52160 DXCH MPAC +3
040497,001207: 7424 07063 TC DMPSUB
040498,001208: 7425 07114 TC VROUND
040499,001209:
040500,001210: 7426 52155 DXCH MPAC # PUT Z COMPONENT IN PROPER PLACE, ALSO
040501,001211: 7427 52162 DXCH MPAC +5 # POSITIONING X.
040502,001212: 7430 52155 DXCH MPAC
040503,001213:
040504,001214: 7431 16475 TCF VMODE # MODE HAS CHANGED TO VECTOR.
040505,001215:
040506,001216: # THE VECTOR CROSS PRODUCT ROUTINE CALCULATES (X M -X M ,X M -X M ,X M -X M ) WHERE M IS THE VECTOR IN
040507,001217: # 3 2 2 3 1 3 3 1 2 1 1 2
040508,001218: # MPAC AND X THE VECTOR AT THE GIVEN ADDRESS.
040509,001219:
040510,001220:
040511,001221: 7432 00006 VXV EXTEND
040512,001222: 7433 30162 DCA MPAC +5 # FORM UP M3X1, LEAVING M1 IN VBUF.
040513,001223: 7434 52155 DXCH MPAC
040514,001224: 7435 52123 DXCH VBUF
040515,001225: 7436 07063 TC DMPSUB # BY X1.
040516,001226:
040517,001227: 7437 00006 EXTEND
040518,001228: 7440 40160 DCS MPAC +3 # CALCULATE -X1M2, SAVING X1M3 IN VBUF +2.
040519,001229: 7441 52155 DXCH MPAC
040520,001230: 7442 52125 DXCH VBUF +2
040521,001231: 7443 07063 TC DMPSUB
040522,001232:
040523,001233: 7444 35025 CAF TWO # ADVANCE ADDRWD TO X2.
040524,001234: 7445 26116 ADS ADDRWD
040525,001235: 7446 00006 EXTEND
040526,001236: 7447 40162 DCS MPAC +5 # PREPARE TO GET -X2M3, SAVING -X1M2 IN
040527,001237: 7450 52155 DXCH MPAC # MPAC +5.
040528,001238: 7451 52162 DXCH MPAC +5
040529,001239: 7452 07063 TC DMPSUB
040530,001240:
040531,001241: 7453 00006 EXTEND
040532,001242: 7454 30123 DCA VBUF # GET X2M1, SAVING -X2M3 IN VBUF +4.
040533,001243: 7455 52155 DXCH MPAC
040534,001244: 7456 52127 DXCH VBUF +4
040535,001245: 7457 07063 TC DMPSUB
040536,001246:
040537,001247: 7460 35025 CAF TWO # ADVANCE ADDRWD TO X3.
040538,001248: 7461 26116 ADS ADDRWD
040539,001249: 7462 00006 EXTEND
040540,001250: 7463 40123 DCS VBUF # GET -X3M1, ADDING X2M1 TO MPAC +5 TO
040541,001251: 7464 52155 DXCH MPAC # COMPLETE THE Z COMPONENT OF THE ANSWER.
040542,001252: 7465 20162 DAS MPAC +5
040543,001253:
040544,001254: 7466 00006 EXTEND
040545,001255: 7467 17471 BZF +2
040546,001256: 7470 06765 TC OVERFLWZ
040547,001257:
040548,001258: 7471 07063 TC DMPSUB
040549,001259: 7472 52125 DXCH VBUF +2 # MOVE X1M3 TO MPAC +3 SETTING UP FOR X3M2
040550,001260: 7473 52160 DXCH MPAC +3 # AND ADD -X3M1 TO MPAC +3 TO COMPLETE THE
040551,001261: 7474 52155 DXCH MPAC # Y COMPONENT OF THE RESULT.
040552,001262: 7475 20160 DAS MPAC +3
040553,001263:
040554,001264: 7476 00006 EXTEND
040555,001265: 7477 17501 BZF +2
040556,001266: 7500 06770 TC OVERFLWY
040557,001267:
040558,001268: 7501 07063 TC DMPSUB
040559,001269: 7502 52127 DXCH VBUF +4 # GO ADD -X2M3 TO X3M2 TO COMPLETE THE X
040560,001270: 7503 16754 TCF ENDVXV # COMPONENT (TAIL END OF DAD).
040561,001271:
040562,001272: # THE MPACVBUF SUBROUTINE SAVES THE VECTOR IN MPAC IN VBUF WITHOUT CLOBBERING MPAC.
040563,001273:
040564,001274: 7504 00006 MPACVBUF EXTEND # CALLED BY MXV, VXM, AND UNIT.
040565,001275: 7505 30155 DCA MPAC
040566,001276: 7506 52123 DXCH VBUF
040567,001277: 7507 00006 EXTEND
040568,001278: 7510 30160 DCA MPAC +3
040569,001279: 7511 52125 DXCH VBUF +2
040570,001280: 7512 00006 EXTEND
040571,001281: 7513 30162 DCA MPAC +5
040572,001282: 7514 52127 DXCH VBUF +4
040573,001283: 7515 00002 TC Q # RETURN TO CALLER.
040574,001284:
040575,001285:
040576,001286: # DOUBLE PRECISION SIGN AGREE ROUTINE. ARRIVE WITH INPUT IN A+L. OUTPUT IS IN A + L.
040577,001287:
040578,001288: 7516 10000 ALSIGNAG CCS A # TEST UPPER PART.
040579,001289: 7517 17523 TCF UPPOS # IT IS POSITIVE
040580,001290: 7520 00002 TC Q # ZERO
040581,001291: 7521 17533 TCF UPNEG # NEGATIVE
040582,001292: 7522 00002 TC Q # ZERO
040583,001293:
040584,001294: 7523 56001 UPPOS XCH L # SAVE DECREMENTED UPPER PART.
040585,001295: 7524 65011 AD HALF
040586,001296: 7525 65011 AD HALF
040587,001297: 7526 54000 TS A # SKIPS ON OVERFLOW
040588,001298: 7527 17531 TCF +2
040589,001299: 7530 24001 INCR L # RESTORE UPPER TO ROIGINAL VALUE
040590,001300: 7531 56001 XCH L # SWAP A + L BACK.
040591,001301: 7532 00002 TC Q
040592,001302:
040593,001303: 7533 56001 UPNEG XCH L # SAVE COMPLEMENTED + DECREMENTED UPPER PT
040594,001304: 7534 65010 AD NEGMAX
040595,001305: 7535 67721 AD NEGONE
040596,001306: 7536 54000 TS A
040597,001307: 7537 17541 TCF +2 # DONT INCREMENT IF NO OVERFLOW.
040598,001308: 7540 24001 INCR L
040599,001309: 7541 56001 XCH L
040600,001310: 7542 40000 COM # MAKE NEGATIVE AGAIN.
040601,001311: 7543 00002 TC Q
040602,001312:
040603,001313: # INTERPRETIVE INSTRUCTIONS WHOSE EXECUTION CONSISTS OF PRINCIPALLY CALLING SUBROUTINES.
040604,001314:
040605,001315: 7544 07063 DMP1 TC DMPSUB # DMP INSTRUCTION.
040606,001316: 7545 16035 TCF DANZIG
040607,001317:
040608,001318: 7546 07063 DMPR TC DMPSUB
040609,001319: 7547 07113 TC ROUNDSUB +1 # (C(A) = +0).
040610,001320: 7550 16035 TCF DANZIG
040611,001321:
040612,001322: 7551 00006 DDV EXTEND
040613,001323: 7552 50116 INDEX ADDRWD # MOVE DIVIDEND INTO BUF.
040614,001324: 7553 30001 DCA 0
040615,001325: 7554 17561 TCF BDDV +4
040616,001326:
040617,001327: 7555 00006 BDDV EXTEND # MOVE DIVISOR INTO MPAC SAVING MPAC, THE
040618,001328: 7556 50116 INDEX ADDRWD # DIVIDEND, IN BUF.
040619,001329: 7557 30001 DCA 0
040620,001330: 7560 52155 DXCH MPAC
040621,001331: 7561 52131 +4 DXCH BUF
040622,001332: 7562 35030 CAF ZERO # DIVIDE ROUTINES IN BANK 0.
040623,001333: 7563 54004 TS FBANK
040624,001334: 7564 12353 TCF DDV/BDDV
040625,001335:
040626,001336: 7565 30116 SETPD CA ADDRWD # MUST SET TO WORK AREA, OR EBANK TROUBLE.
040627,001337: 7566 54166 TS PUSHLOC
040628,001338: 7567 16037 TCF NOIBNKSW # NO FBANK SWITCH REQUIRED.
040629,001339:
040630,001340: 7570 35030 TSLC CAF ZERO # SHIFTING ROUTINES LOCATED IN BANK 00.
040631,001341: 7571 54004 TS FBANK
040632,001342: 7572 12172 TCF TSLC2
040633,001343:
040634,001344: 7573 36050 GSHIFT CAF LOW7 # USED AS MASK AT GENSHIFT. THIS PROCESSES
040635,001345: 7574 54004 TS FBANK # ANY SHIFT INSTRUCTION (EXCEPT TSLC) WITH
040636,001346: 7575 12214 TCF GENSHIFT # AN ADDRESS (ROUTINES IN BANK 0).
040637,001347:
040638,001348: # THE FOLLOWING IS THE PROLOGUE TO V/SC. IF THE PRESENT MODE IS VECTOR, IT SAVES THE SCALAR AT X IN BUF
040639,001349: # AND CALLS THE V/SC ROUTINE IN BANK 0. IF THE PRESENT MODE IS SCALAR, IT MOVES THE VECTOR AT X INTO MPAC, SAVING
040640,001350: # THE SCALAR IN MPAC IN BUF BEFORE CALLING THE V/SC ROUTINE IN BANK 0.
040641,001351:
040642,001352: 7576 10163 V/SC CCS MODE
040643,001353: 7577 17610 TCF DV/SC # MOVE VECTOR INTO MPAC.
040644,001354: 7600 17610 TCF DV/SC
040645,001355:
040646,001356: 7601 00006 VV/SC EXTEND
040647,001357: 7602 50116 INDEX ADDRWD
040648,001358: 7603 30001 DCA 0
040649,001359: 7604 52131 V/SC1 DXCH BUF # IN BOTH CASES, VECTOR IS NOW IN MPAC AND
040650,001360: 7605 35030 CAF ZERO # SCALAR IN BUF.
040651,001361: 7606 54004 TS FBANK
040652,001362: 7607 12654 TCF V/SC2
040653,001363:
040654,001364: 7610 00006 DV/SC EXTEND
040655,001365: 7611 50116 INDEX ADDRWD
040656,001366: 7612 30003 DCA 2
040657,001367: 7613 52160 DXCH MPAC +3
040658,001368: 7614 00006 EXTEND
040659,001369: 7615 50116 INDEX ADDRWD
040660,001370: 7616 30005 DCA 4
040661,001371: 7617 52162 DXCH MPAC +5
040662,001372:
040663,001373: 7620 45026 CS ONE # CHANGE MODE TO VECTOR.
040664,001374: 7621 54163 TS MODE
040665,001375:
040666,001376: 7622 00006 EXTEND
040667,001377: 7623 50116 INDEX ADDRWD
040668,001378: 7624 30001 DCA 0
040669,001379: 7625 52155 DXCH MPAC
040670,001380: 7626 17604 TCF V/SC1 # FINISH PROLOGUE AT COMMON SECTION.
040671,001381:
040672,001382: # SIGN AND COMPLEMENT INSTRUCTIONS.
040673,001383:
040674,001384: 7627 50116 SIGN INDEX ADDRWD # CALL COMP INSTRUCTION IF WORD AT X IS
040675,001385: 7630 10000 CCS 0 # NEGATIVE NON-ZERO.
040676,001386: 7631 16035 TCF DANZIG
040677,001387: 7632 17634 TCF +2
040678,001388: 7633 17642 TCF COMP # DO THE COMPLEMENT.
040679,001389:
040680,001390: 7634 50116 INDEX ADDRWD
040681,001391: 7635 10001 CCSL CCS 1
040682,001392: 7636 16035 TCF DANZIG
040683,001393: 7637 16035 TCF DANZIG
040684,001394: 7640 17642 TCF COMP
040685,001395: 7641 16035 TCF DANZIG
040686,001396: 7642 00006 COMP EXTEND # COMPLEMENT DP MPAC IN EVERY CASE.
040687,001397: 7643 40155 DCS MPAC
040688,001398: 7644 52155 DXCH MPAC
040689,001399:
040690,001400: 7645 10163 CCS MODE # EITHER COMPLEMENT MPAC +3 OR THE REST OF
040691,001401: 7646 17657 TCF DCOMP # THE VECTOR ACCUMULATOR.
040692,001402: 7647 17657 TCF DCOMP
040693,001403:
040694,001404: 7650 00006 EXTEND # VECTOR COMPLEMENT.
040695,001405: 7651 40160 DCS MPAC +3
040696,001406: 7652 52160 DXCH MPAC +3
040697,001407: 7653 00006 EXTEND
040698,001408: 7654 40162 DCS MPAC +5
040699,001409: 7655 52162 DXCH MPAC +5
040700,001410: 7656 16035 TCF DANZIG
040701,001411:
040702,001412: 7657 40156 DCOMP CS MPAC +2
040703,001413: 7660 54156 TS MPAC +2
040704,001414: 7661 16035 TCF DANZIG
040705,001415:
040706,001416: # THE FOLLOWING SHORT SHIFT CODES REQUIRE NO ADDRESS WORD:
040707,001417:
040708,001418: # 1. SR1 TO SR4 SCALAR SHIFT RIGHT.
040709,001419: # 2. SR1R TO SR4R SCALAR SHIFT RIGHT AND ROUND.
040710,001420: # 3. SL1 TO SL4 SCALAR SHIFT LEFT.
040711,001421: # 4. SL1R TO SL4R SCALAR SHIFT LEFT AND ROUND.
040712,001422:
040713,001423: # 5. VSR1 TO VSR8 VECTOR SHIFT RIGHT (ALWAYS ROUNDS).
040714,001424: # 6. VSL1 TO VSL8 VECTOR SHIFT LEFT (NEVER ROUNDS).
040715,001425:
040716,001426: # THE FOLLOWING CODES REQUIRE AN ADDRESS WHICH MAY BE INDEXED:*
040717,001427:
040718,001428: # 1. SR SCALAR SHIFT RIGHT.
040719,001429: # 2. SRR SCALAR SHIFT RIGHT AND ROUND.
040720,001430: # 3. SL SCALAR SHIFT LEFT.
040721,001431: # 4. SLR SCALAR SHIFT LEFT AND ROUND.
040722,001432:
040723,001433: # 5. VSR VECTOR SHIFT RIGHT.
040724,001434: # 6. VSL VECTOR SHIFT LEFT.
040725,001435:
040726,001436: # * IF THE ADDRESS IS INDEXED, AND THE INDEX MODIFICATION RESULTS IN A NEGATIVE SHIFT COUNT, A SHIFT OF THE
040727,001437: # ABSOLUTE VALUE OF THE COUNT IS DONE IN THE OPPOSITE DIRECTION.
040728,001438:
040729,001439:
040730,001440: 00,2017 BANK 00
040731,001441:
040732,001442: 00,2017 COUNT* $$/INTER
040733,001443: 00,2017 36216 SHORTT CAF SIX # SCALAR SHORT SHIFTS COME HERE. THE SHIFT
040734,001444: 00,2020 70020 MASK CYR # COUNT-1 IS NOW IN BITS 2-3 OF CYR. THE
040735,001445: 00,2021 54021 TS SR # ROUNDING BIT IS IN BIT1 AT THIS POINT.
040736,001446:
040737,001447: 00,2022 10020 CCS CYR # SEE IF RIGHT OR LEFT SHIFT DESIRED.
040738,001448: 00,2023 12101 TCF TSSL # SHIFT LEFT.
040739,001449:
040740,001450: 00,2024 00024 SRDDV DEC 20 B-14 # MPTEMP SETTING FOR SR BEFORE DDV.
040741,001451:
040742,001452: 00,2025 50021 TSSR INDEX SR # GET SHIFTING BIT.
040743,001453: 00,2026 35011 CAF BIT14
040744,001454: 00,2027 54135 TS MPTEMP
040745,001455:
040746,001456: 00,2030 10020 CCS CYR # SEE IF A ROUND IS DESIRED.
040747,001457: 00,2031 02050 RIGHTR TC MPACSRND # YES - SHIFT RIGHT AND ROUND.
040748,001458: 00,2032 16034 TCF NEWMODE # SET MODE TO DP (C(A) = 0).
040749,001459: 00,2033 30135 MPACSHR CA MPTEMP # DO A TRIPLE PRECISION SHIFT RIGHT.
040750,001460: 00,2034 00006 EXTEND
040751,001461: 00,2035 70156 MP MPAC +2
040752,001462: 00,2036 54156 +3 TS MPAC +2 # (EXIT FROM SQRT AND ABVAL).
040753,001463: 00,2037 30135 CA MPTEMP
040754,001464: 00,2040 00006 EXTEND
040755,001465: 00,2041 70154 MP MPAC # SHIFT MAJOR PART INTO A,L AND PLACE IN
040756,001466: 00,2042 52155 DXCH MPAC # MPAC,+1.
040757,001467: 00,2043 30135 CA MPTEMP
040758,001468: 00,2044 00006 EXTEND
040759,001469: 00,2045 70001 MP L # ORIGINAL C(MPAC +1).
040760,001470: 00,2046 20156 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
040761,001471: 00,2047 16035 TCF DANZIG
040762,001472:
040763,001473: # MPAC SHIFT RIGHT AND ROUND SUBROUTINES.
040764,001474:
040765,001475: 00,2050 30156 MPACSRND CA MPAC +2 # WE HAVE TO DO ALL THREE MULTIPLIES SINCE
040766,001476: 00,2051 00006 EXTEND # MPAC +1 AND MPAC +2 MIGHT HAVE SIGN
040767,001477: 00,2052 70135 MP MPTEMP # DISAGREEMENT WITH A SHIFT RIGHT OF 1.
040768,001478: 00,2053 56155 XCH MPAC +1
040769,001479: 00,2054 00006 EXTEND
040770,001480: 00,2055 70135 MP MPTEMP
040771,001481: 00,2056 56155 XCH MPAC +1 # TRIAL MINOR PART.
040772,001482: 00,2057 60001 AD L
040773,001483:
040774,001484: 00,2060 60000 VSHR2 DOUBLE # (FINISH VECTOR COMPONENT SHIFT RIGHT
040775,001485: 00,2061 54156 TS MPAC +2 # AND ROUND.
040776,001486: 00,2062 12064 TCF +2
040777,001487: 00,2063 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
040778,001488:
040779,001489: 00,2064 35030 CAF ZERO
040780,001490: 00,2065 54156 TS MPAC +2
040781,001491: 00,2066 56154 XCH MPAC # SETTING TO ZERO SO FOLLOWING DAS WORKS.
040782,001492: 00,2067 00006 EXTEND
040783,001493: 00,2070 70135 MP MPTEMP
040784,001494: 00,2071 20155 DAS MPAC # AGAIN NO OVERFLOW.
040785,001495: 00,2072 00002 TC Q
040786,001496:
040787,001497: 00,2073 30135 VSHRRND CA MPTEMP # ENTRY TO SHIFT RIGHT AND ROUND MPAC WHEN
040788,001498: 00,2074 00006 EXTEND # MPAC CONTAINS A VECTOR COMPONENT.
040789,001499: 00,2075 70155 MP MPAC +1
040790,001500: 00,2076 54155 TS MPAC +1
040791,001501: 00,2077 56001 XCH L
040792,001502: 00,2100 12060 TCF VSHR2 # GO ADD ONE IF NECESSARY AND FINISH.
040793,001503:
040794,001504: # ROUTINE FOR SHORT SCALAR SHIFT LEFT (AND MAYBE ROUND).
040795,001505:
040796,001506: 00,2101 30021 TSSL CA SR # GET SHIFT COUNT FOR SR.
040797,001507: 00,2102 54135 +1 TS MPTEMP
040798,001508:
040799,001509: 00,2103 00006 +2 EXTEND # ENTRY HERE FROM SL FOR SCALARS.
040800,001510: 00,2104 30156 DCA MPAC +1 # SHIFTING LEFT ONE PLACE AT A TIME IS
040801,001511: 00,2105 20156 DAS MPAC +1 # FASTER THAN DOING THE WHOLE SHIFT WITH
040802,001512: 00,2106 60154 AD MPAC # MULTIPLIES ASSUMING THAT FREQUENCY OF
040803,001513: 00,2107 60154 AD MPAC # SHIFT COUNTS GOES DOWN RAPIDLY AS A
040804,001514: 00,2110 54154 TS MPAC # FUNCTION OF THEIR MAGNITUDE.
040805,001515: 00,2111 12113 TCF +2
040806,001516: 00,2112 54121 TS OVFIND # OVERFLOW. (LEAVES OVERFLOW-CORRECTED
040807,001517: # RESULT ANYWAY).
040808,001518: 00,2113 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNT.
040809,001519: 00,2114 12102 TCF TSSL +1
040810,001520:
040811,001521: 00,2115 10020 CCS CYR # SEE IF ROUND WANTED.
040812,001522: 00,2116 07112 ROUND TC ROUNDSUB # YES - ROUND AND EXIT.
040813,001523: 00,2117 16035 TCF DANZIG # SL LEAVES A ZERO IN CYR FOR NO ROUND.
040814,001524: 00,2120 16035 TCF DANZIG # NO - EXIT IMMEDIATL
040815,001525:
040816,001526: # VECTOR SHIFTING ROUTINES.
040817,001527:
040818,001528: 00,2121 35032 SHORTV CAF LOW3 # SAVE 3 BIT SHIFT COUNT - 1 WITHOUT
040819,001529: 00,2122 70020 MASK CYR # EDITING CYR.
040820,001530: 00,2123 54135 TS MPTEMP
040821,001531: 00,2124 10020 CCS CYR # SEE IF LEFT OR RIGHT SHIFT.
040822,001532: 00,2125 12145 TCF VSSL # VECTOR SHIFT LEFT.
040823,001533: 00,2126 00176 OCT176 OCT 176 # USED IN PROCESSED SHIFTS WITH - COUNT.
040824,001534:
040825,001535: 00,2127 50135 VSSR INDEX MPTEMP # (ENTRY FROM SR). PICK UP SHIFTING BIT.
040826,001536: 00,2130 35011 CAF BIT14 # MPTEMP CONTAINS THE SHIFT COUNT - 1.
040827,001537: 00,2131 54135 TS MPTEMP
040828,001538: 00,2132 02073 TC VSHRRND # SHIFT X COMPONENT.
040829,001539:
040830,001540: 00,2133 52155 DXCH MPAC # SWAP X AND Y COMPONENTS.
040831,001541: 00,2134 52160 DXCH MPAC +3
040832,001542: 00,2135 52155 DXCH MPAC
040833,001543: 00,2136 02073 TC VSHRRND # SHIFT Y COMPONENT.
040834,001544:
040835,001545: 00,2137 52155 DXCH MPAC # SWAP Y AND Z COMPONENTS.
040836,001546: 00,2140 52162 DXCH MPAC +5
040837,001547: 00,2141 52155 DXCH MPAC
040838,001548: 00,2142 02073 TC VSHRRND # SHIFT Z COMPONENT.
040839,001549:
040840,001550: 00,2143 17372 TCF VROTATEX # RESTORE COMPONENTS TO PROPER PLACES.
040841,001551:
040842,001552: # VECTOR SHIFT LEFT - DONE ONE PLACE AT A TIME.
040843,001553:
040844,001554: 00,2144 54135 -1 TS MPTEMP # SHIFTING LOOP.
040845,001555:
040846,001556: 00,2145 00006 VSSL EXTEND
040847,001557: 00,2146 30155 DCA MPAC
040848,001558: 00,2147 20155 DAS MPAC
040849,001559: 00,2150 00006 EXTEND
040850,001560: 00,2151 12153 BZF +2
040851,001561: 00,2152 06773 TC OVERFLOW
040852,001562:
040853,001563: 00,2153 00006 EXTEND
040854,001564: 00,2154 30160 DCA MPAC +3
040855,001565: 00,2155 20160 DAS MPAC +3
040856,001566: 00,2156 00006 EXTEND
040857,001567: 00,2157 12161 BZF +2
040858,001568: 00,2160 06770 TC OVERFLWY
040859,001569:
040860,001570: 00,2161 00006 EXTEND
040861,001571: 00,2162 30162 DCA MPAC +5
040862,001572: 00,2163 20162 DAS MPAC +5
040863,001573: 00,2164 00006 EXTEND
040864,001574: 00,2165 12167 BZF +2
040865,001575: 00,2166 06765 TC OVERFLWZ
040866,001576:
040867,001577: 00,2167 10135 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNTER.
040868,001578: 00,2170 12144 TCF VSSL -1
040869,001579: 00,2171 16035 TCF DANZIG # EXIT.
040870,001580:
040871,001581: # TSLC - TRIPLE SHIFT LEFT AND COUNT. SHIFTS MPAC LEFT UNTIL GREATER THAN .5 IN MAGNITUDE, LEAVING
040872,001582: # THE COMPLEMENT OF THE NUMBER OF SHIFTS REQUIRED IN X.
040873,001583:
040874,001584: 00,2172 54135 TSLC2 TS MPTEMP # START BY ZEROING SHIFT COUNT (IN A NOW).
040875,001585: 00,2173 06677 TC BRANCH # EXIT WITH NO SHIFTING IF ARGUMENT ZERO.
040876,001586: 00,2174 12176 TCF +2
040877,001587: 00,2175 12212 TCF ENDTSLC # STORES ZERO SHIFT COUNT IN THIS CASE.
040878,001588:
040879,001589: 00,2176 07231 TC TPAGREE # MAY CAUSE UPSHIFT OF ONE EXTRA PLACE.
040880,001590:
040881,001591: 00,2177 30154 CA MPAC # BEGIN NORMALIZATION LOOP.
040882,001592: 00,2200 12207 TCF TSLCTEST
040883,001593:
040884,001594: 00,2201 24135 TSLCLOOP INCR MPTEMP # INCREMENT SHIFT COUNTER.
040885,001595: 00,2202 00006 EXTEND
040886,001596: 00,2203 30156 DCA MPAC +1
040887,001597: 00,2204 20156 DAS MPAC +1
040888,001598: 00,2205 60154 AD MPAC
040889,001599: 00,2206 26154 ADS MPAC
040890,001600: 00,2207 60000 TSLCTEST DOUBLE # SEE IF (ANOTHER) SHIFT IS REQUIRED.
040891,001601: 00,2210 54000 OVSK
040892,001602: 00,2211 12201 TCF TSLCLOOP # YES - INCREMENT COUNT AND SHIFT AGAIN.
040893,001603:
040894,001604: 00,2212 40135 ENDTSLC CS MPTEMP
040895,001605: 00,2213 16577 TCF STORE1 # STORE SHIFT COUNT AND RETURN TO DANZIG.
040896,001606:
040897,001607: # THE FOLLOWING ROUTINES PROCESSES THE GENERAL SHIFT INSTRUCTIONS SR, SRR, SL, AND SLR.
040898,001608: # THE GIVEN ADDRESS IS DECODED AS FOLLOWS:
040899,001609:
040900,001610: # BITS 1-7 SHIFT COUNT (SUBADDRESS) LESS THAN 125 DECIMAL.
040901,001611: # BIT 8 PSEUDO SIGN BIT (DETECTS CHANGE IN SIGN IN INDEXED SHIFTS).
040902,001612: # BIT 9 0 FOR LEFT SHIFT, AND 1 FOR RIGHT SHIFT.
040903,001613: # BIT 10 1 FOR TERMINAL ROUND ON SCALAR SHIFTS, 0 OTHERWISE.
040904,001614: # BITS 11-13 0.
040905,001615: # BIT 14 1.
040906,001616: # BIT 15 0.
040907,001617:
040908,001618: # THE ABOVE ENCODING IS DONE BY THE YUL SYSTEM.
040909,001619:
040910,001620: 00,2214 70116 GENSHIFT MASK ADDRWD # GET SHIFT COUNT, TESTING FOR ZERO.
040911,001621: 00,2215 10000 CCS A # (ARRIVES WITH C(A) = LOW7).
040912,001622: 00,2216 12224 TCF GENSHFT2 # IF NON-ZERO, PROCEED WITH DECREMENTED CT
040913,001623:
040914,001624: 00,2217 35015 CAF BIT10 # ZERO SHIFT COUNT. NO SHIFTS NEEDED BUT
040915,001625: 00,2220 70116 MASK ADDRWD # WE MIGHT HAVE TO ROUND MPAC ON SLR AND
040916,001626: 00,2221 10000 CCS A # SRR (SCALAR ONLY).
040917,001627: 00,2222 07112 TC ROUNDSUB
040918,001628: 00,2223 16035 TCF DANZIG
040919,001629:
040920,001630: 00,2224 54135 GENSHFT2 TS MPTEMP # DECREMENTED SHIFT COUNT TO MPTEMP.
040921,001631: 00,2225 35017 CAF BIT8 # TEST MEANING OF LOW SEVEN BIT COUNT IN
040922,001632: 00,2226 00006 EXTEND # MPTEMP NOW.
040923,001633: 00,2227 70116 MP ADDRWD
040924,001634: 00,2230 76221 MASK LOW2 # JUMPS ON SHIFT DIRECTION (BIT8) AND
040925,001635: 00,2231 50000 INDEX A
040926,001636: 00,2232 12233 TCF +1 # ORIGINAL SHIFT DIRECTION (BIT 9).
040927,001637: 00,2233 12332 TCF RIGHT- # NEGATIVE SHIFT COUNT FOR SL OR SLR.
040928,001638: 00,2234 12342 TCF LEFT # SL OR SLR.
040929,001639: 00,2235 12336 TCF LEFT- # NEGATIVE SHIFT COUNT WITH SR OR SRR.
040930,001640:
040931,001641: # GENERAL SHIFT RIGHT.
040932,001642:
040933,001643: 00,2236 10163 RIGHT CCS MODE # SEE IF VECTOR OR SCALAR.
040934,001644: 00,2237 12277 TCF GENSCR
040935,001645: 00,2240 12277 TCF GENSCR
040936,001646:
040937,001647: 00,2241 30135 CA MPTEMP # SEE IF SHIFT COUNT LESS THAN 14D.
040938,001648: 00,2242 63730 VRIGHT2 AD NEG12
040939,001649: 00,2243 00006 EXTEND
040940,001650: 00,2244 62127 BZMF VSSR # IF SO, BRANCH AND SHIFT IMMEDIATELY.
040941,001651:
040942,001652: 00,2245 67721 AD NEGONE # IF NOT, REDUCE MPTEMP BY A TOTAL OF 14,
040943,001653: 00,2246 54135 TS MPTEMP # AND DO A SHIFT RIGHT AND ROUND BY 14.
040944,001654: 00,2247 35030 CAF ZERO # THE ROUND AT THIS STAGE MAY INTRODUCE A
040945,001655: 00,2250 54001 TS L # ONE BIT ERROR IN A SHIFT RIGHT 15D.
040946,001656: 00,2251 56154 XCH MPAC
040947,001657: 00,2252 56155 XCH MPAC +1
040948,001658: 00,2253 02272 TC SETROUND # X COMPONENT NOW SHIFTED, SO MAKE UP THE
040949,001659: 00,2254 20155 DAS MPAC # ROUNDING QUANTITY (0 IN A AND 0 OR +-1
040950,001660: # IN L).
040951,001661: 00,2255 56157 XCH MPAC +3 # REPEAT THE ABOVE PROCESS FOR Y AND Z.
040952,001662: 00,2256 56160 XCH MPAC +4
040953,001663: 00,2257 02272 TC SETROUND
040954,001664: 00,2260 20160 DAS MPAC +3 # NO OVERFLOW ON THESE ADDS.
040955,001665:
040956,001666: 00,2261 56161 XCH MPAC +5
040957,001667: 00,2262 56162 XCH MPAC +6
040958,001668: 00,2263 02272 TC SETROUND
040959,001669: 00,2264 20162 DAS MPAC +5
040960,001670:
040961,001671: 00,2265 10135 CCS MPTEMP # SEE IF DONE, DOING FINAL DECREMENT.
040962,001672: 00,2266 54135 TS MPTEMP
040963,001673: 00,2267 12242 TCF VRIGHT2
040964,001674: 00,2270 04604 BIASLO DEC .2974 B-1 # SQRT CONSTANT
040965,001675:
040966,001676: 00,2271 16035 TCF DANZIG
040967,001677:
040968,001678:
040969,001679: 00,2272 60000 SETROUND DOUBLE # MAKES UP ROUNDING QUANTITY FROM ARRIVING
040970,001680: 00,2273 54156 TS MPAC +2 # C(A). L IS ZERO INITIALLY.
040971,001681: 00,2274 35030 CAF ZERO
040972,001682: 00,2275 56001 XCH L
040973,001683: 00,2276 00002 TC Q # RETURN AND DO THE DAS, RESETTING L TO 0.
040974,001684:
040975,001685: # PROCESS SR AND SRR FOR SCALARS.
040976,001686:
040977,001687: 00,2277 30135 GENSCR CA MPTEMP # SEE IF THE ORIGINAL SHIFT COUNT WAS LESS
040978,001688: 00,2300 63730 +1 AD NEG12 # THAN 14D.
040979,001689: 00,2301 00006 EXTEND
040980,001690: 00,2302 62322 BZMF DOSSHFT # DO THE SHIFT IMMEDIATELY IF SO.
040981,001691:
040982,001692: 00,2303 67721 +4 AD NEGONE # IF NOT, DECREMENT SHIFT COUNT BY 14D AND
040983,001693: 00,2304 54135 TS MPTEMP # SHIFT MPAC RIGHT 14 PLACES.
040984,001694: 00,2305 35030 CAF ZERO
040985,001695: 00,2306 56154 XCH MPAC
040986,001696: 00,2307 56155 XCH MPAC +1
040987,001697: 00,2310 54156 TS MPAC +2
040988,001698: 00,2311 10135 CCS MPTEMP # SEE IF FINISHED, DO FINAL DECREMENT.
040989,001699: 00,2312 54135 TS MPTEMP
040990,001700: 00,2313 02300 TC GENSCR +1
040991,001701: 00,2314 22650 SLOPEHI DEC .5884 # SQRT CONSTANT.
040992,001702: 00,2315 35015 CAF BIT10 # FINISHED WITH SHIFT. SEE IF ROUND
040993,001703: 00,2316 70116 MASK ADDRWD # WANTED.
040994,001704: 00,2317 10000 CCS A
040995,001705: 00,2320 07112 TC ROUNDSUB
040996,001706: 00,2321 16035 TCF DANZIG # DO SO AND/OR EXIT.
040997,001707:
040998,001708: 00,2322 50135 DOSSHFT INDEX MPTEMP # PICK UP SHIFTING BIT.
040999,001709: 00,2323 35011 CAF BIT14
041000,001710: 00,2324 54135 TS MPTEMP
041001,001711: 00,2325 35015 CAF BIT10 # SEE IF TERMINAL ROUND DESIRED.
041002,001712: 00,2326 70116 MASK ADDRWD
041003,001713: 00,2327 10000 CCS A
041004,001714: 00,2330 12031 TCF RIGHTR # YES.
041005,001715: 00,2331 12033 TCF MPACSHR # JUST SHIFT RIGHT.
041006,001716:
041007,001717: # PROCESS THE RIGHT- (SL(R) WITH A NEGATIVE COUNT), LEFT-, AND LEFT OPTIONS.
041008,001718:
041009,001719: 00,2332 40135 RIGHT- CS MPTEMP # GET ABSOLUTE VALUE - 1 OF SHIFT COUNT
041010,001720: 00,2333 62126 AD OCT176 # UNDERSTANDING THAT BIT8 (PSEUDO-SIGN)
041011,001721: 00,2334 54135 TS MPTEMP # WAS 1 INITIALLY.
041012,001722: 00,2335 12236 TCF RIGHT # DO NORMAL SHIFT RIGHT.
041013,001723:
041014,001724: 00,2336 42126 LEFT- CS OCT176 # SAME PROLOGUE TO LEFT FOR INDEXED RIGHT
041015,001725: 00,2337 60135 AD MPTEMP # SHIFTS WHOSE NET SHIFT COUNT IS NEGATIVE
041016,001726: 00,2340 40000 COM
041017,001727: 00,2341 54135 TS MPTEMP
041018,001728:
041019,001729: 00,2342 10163 LEFT CCS MODE # SINCE LEFT SHIFTING IS SONE ONE PLACE AT
041020,001730: 00,2343 12346 TCF GENSCL # A TIME, NO COMPARISON WITH 14 NEED BE
041021,001731: 00,2344 12346 TCF GENSCL # DONE. FOR SCALARS, SEE IF TERMINAL ROUND
041022,001732: 00,2345 12145 TCF VSSL # DESIRED. FOR VECTORS, SHIFT IMMEDIATELY.
041023,001733:
041024,001734: 00,2346 40116 GENSCL CS ADDRWD # PUT ROUNDING BIT (BIT 10 OF ADDRWD) INTO
041025,001735: 00,2347 00006 EXTEND # BIT 15 OF CYR WHERE THE ROUNDING BIT OF
041026,001736: 00,2350 75021 MP BIT6 # A SHORT SHIFT LEFT WOULD BE
041027,001737: 00,2351 54020 TS CYR
041028,001738: 00,2352 12103 TCF TSSL +2 # DO THE SHIFT.
041029,001739:
041030,001740: # SCALAR DIVISION INSTRUCTIONS, DDV AND BDDV, ARE EXECUTED HERE. AT THIS POINT, THE DIVIDEND IS IN MPAC
041031,001741: # AND THE DIVISOR IN BUF.
041032,001742:
041033,001743: 00,2353 45026 DDV/BDDV CS ONE # INITIALIZATION.
041034,001744: 00,2354 54136 TS DVSIGN # +-1 FOR POSITIVE QUOTIENT - -0 FOR NEG.
041035,001745: 00,2355 54137 TS DVNORMCT # DIVIDEND NORMALIZATION COUNT.
041036,001746: 00,2356 54140 TS MAXDVSW # NEAR-ONE DIVIDE FLAG.
041037,001747:
041038,001748: 00,2357 10130 CCS BUF # FORCE BUF POSITIVE WITH THE MAJOR PART
041039,001749: 00,2360 12516 TCF BUFPOS # NON-ZERO.
041040,001750: 00,2361 12363 TCF +2
041041,001751: 00,2362 12531 TCF BUFNEG
041042,001752:
041043,001753: 00,2363 54156 BUFZERO TS MPAC +2 # ZERO THIS.
041044,001754: 00,2364 07231 TC TPAGREE # FORCE SIGN AGREEMENT BEFORE OVERFLOW
041045,001755:
041046,001756: 00,2365 10154 CCS MPAC # TEST TO SEE IF MPAC NON-ZERO. (TOO BIG)
041047,001757: 00,2366 12414 TCF OVF+ # MAJOR PART OF DIVIDEND IS POSITIVE NON-0
041048,001758: 00,2367 12371 TCF +2
041049,001759: 00,2370 12413 TCF OVF+ -1 # MAJOR PART OF DIVIDEND IS NEG. NON-ZERO
041050,001760:
041051,001761: 00,2371 56131 XCH BUF +1 # SHIFT DIVIDEND AND DIVISOR LEFT 14.
041052,001762: 00,2372 56130 XCH BUF
041053,001763: 00,2373 56155 XCH MPAC +1
041054,001764: 00,2374 56154 XCH MPAC
041055,001765: 00,2375 10130 CCS BUF # TRY AGAIN ON FORMER MINOR PART.
041056,001766: 00,2376 12422 TCF BUF+
041057,001767: 00,2377 12401 TCF +2 # OVERFLOW ON ZERO DIVISOR.
041058,001768: 00,2400 12416 TCF BUF-
041059,001769:
041060,001770: 00,2401 40154 CS MPAC # SIGN OF MPAC DETERMINES SIGN OF RESULT.
041061,001771: 00,2402 00006 SGNDVOVF EXTEND
041062,001772: 00,2403 62405 BZMF +2
041063,001773: 00,2404 24136 INCR DVSIGN # NEGMAX IN MPAC PERHAPS.
041064,001774: 00,2405 35006 DVOVF CAF POSMAX # ON DIVISION OVERFLOW OF ANY SORT, SET
041065,001775: 00,2406 54154 TS MPAC # SET DP MPAC TO +-POSMAX.
041066,001776: 00,2407 02630 TC FINALDV +3
041067,001777: 00,2410 35026 CAF ONE # SET OVERFLOW INDICATOR AND EXIT.
041068,001778: 00,2411 54121 TS OVFIND
041069,001779: 00,2412 06035 TC DANZIG
041070,001780:
041071,001781: 00,2413 24136 -1 INCR DVSIGN
041072,001782: 00,2414 40131 OVF+ CS BUF +1 # LOAD LOWER ORDER PART OF DIVISOR.
041073,001783: 00,2415 12402 TCF SGNDVOVF # GET SIGN OF RESULT.
041074,001784:
041075,001785: 00,2416 00006 BUF- EXTEND # IF BUF IS NEGATIVE, COMPLEMENT IT AND
041076,001786: 00,2417 40131 DCS BUF # MAINTAIN DVSIGN FOR FINAL QUOTIENT SIGN.
041077,001787: 00,2420 52131 DXCH BUF
041078,001788: 00,2421 24136 INCR DVSIGN # NOW -0.
041079,001789:
041080,001790: 00,2422 10154 BUF+ CCS MPAC # FORCE MPAC POSITIVE, CHECKING FOR ZERO
041081,001791: 00,2423 12437 TCF MPAC+ # DIVIDEND IN THE PROCESS.
041082,001792: 00,2424 12426 TCF +2
041083,001793: 00,2425 12433 TCF MPAC-
041084,001794: 00,2426 10155 CCS MPAC +1
041085,001795: 00,2427 12437 TCF MPAC+
041086,001796: 00,2430 16035 TCF DANZIG # EXIT IMMEDIATELY ON ZERO DIVIDEND.
041087,001797: 00,2431 12433 TCF MPAC-
041088,001798: 00,2432 16035 TCF DANZIG
041089,001799:
041090,001800: 00,2433 00006 MPAC- EXTEND # FORCE MPAC POSITIVE AS BUF IN BUF-.
041091,001801: 00,2434 40155 DCS MPAC
041092,001802: 00,2435 52155 DXCH MPAC
041093,001803: 00,2436 24136 INCR DVSIGN # NOW +1 OR -0.
041094,001804:
041095,001805: 00,2437 40154 MPAC+ CS MPAC # CHECK FOR DIVISION OVERFLOW. IF THE
041096,001806: 00,2440 67721 AD NEGONE # MAJOR PART OF THE DIVIDEND IS LESS THAN
041097,001807: 00,2441 60130 AD BUF # THE MAJOR PART OF THE DIVISOR BY AT
041098,001808: 00,2442 10000 CCS A # LEAST TWO, WE CAN PROCEED IMMEDIATELY
041099,001809: 00,2443 12505 TCF DVNORM # WITHOUT NORMALIZATION PRODUCING A DVMAX.
041100,001810: 00,2444 60001 -1/2+2 OCT 60001 # USED IN SQRTSUB.
041101,001811:
041102,001812: 00,2445 12446 TCF +1 # IF THE ABOVE DOES NOT HOLD, FORCE SIGN
041103,001813: 00,2446 35011 CAF HALF # AGREEMENT IN NUMERATOR AND DENOMINATOR
041104,001814: 00,2447 60000 DOUBLE # TO FACILITATE OVERFLOW AND NEAR-ONE
041105,001815: 00,2450 60155 AD MPAC +1 # CHECKING.
041106,001816: 00,2451 54155 TS MPAC +1
041107,001817: 00,2452 35030 CAF ZERO
041108,001818: 00,2453 65006 AD POSMAX
041109,001819: 00,2454 26154 ADS MPAC
041110,001820:
041111,001821: 00,2455 35011 CAF HALF # SAME FOR BUF.
041112,001822: 00,2456 60000 DOUBLE
041113,001823: 00,2457 60131 AD BUF +1
041114,001824: 00,2460 54131 TS BUF +1
041115,001825: 00,2461 35030 CAF ZERO
041116,001826: 00,2462 65006 AD POSMAX
041117,001827: 00,2463 26130 ADS BUF
041118,001828:
041119,001829: 00,2464 40154 CS MPAC # CHECK MAGNITUDE OF SIGN-CORRECTED
041120,001830: 00,2465 60130 AD BUF # OPERANDS.
041121,001831: 00,2466 10000 CCS A
041122,001832: 00,2467 12505 TCF DVNORM # DIVIDE OK - WILL NOT BECOME MAXDV CASE.
041123,001833: 00,2470 00133 LBUF2 ADRES BUF2
041124,001834: 00,2471 12405 TCF DVOVF # DIVISOR NOT LESS THAN DIVIDEND - OVF.
041125,001835:
041126,001836: 00,2472 54140 TS MAXDVSW # IF THE MAJOR PARTS OF THE DIVIDEND AND
041127,001837: 00,2473 40155 CS MPAC +1 # DIVISOR ARE EQUAL, A SPECIAL APPROXIMA-
041128,001838: 00,2474 60131 AD BUF +1 # TION IS USED (PROVIDED THE DIVISION IS
041129,001839: 00,2475 00006 EXTEND # POSSIBLE, OF COURSE).
041130,001840: 00,2476 62405 BZMF DVOVF
041131,001841: 00,2477 12505 TCF DVNORM # IF NO OVERFLOW.
041132,001842:
041133,001843: 00,2500 00006 BUFNORM EXTEND # ADD -1 TO AUGMENT SHIFT COUNT AND SHIFT
041134,001844: 00,2501 24137 AUG DVNORMCT # LEFT ONE PLACE.
041135,001845: 00,2502 00006 EXTEND
041136,001846: 00,2503 30131 DCA BUF
041137,001847: 00,2504 20131 DAS BUF
041138,001848:
041139,001849: 00,2505 30130 DVNORM CA BUF # SEE IF DIVISOR NORMALIZED YET.
041140,001850: 00,2506 60000 DOUBLE
041141,001851: 00,2507 54000 OVSK
041142,001852: 00,2510 12500 TCF BUFNORM # NO - SHIFT LEFT ONE AND TRY AGAIN.
041143,001853:
041144,001854: 00,2511 52155 DXCH MPAC # CALL DIVIDEND NORMALIZATION SEQUENCE
041145,001855: 00,2512 50137 INDEX DVNORMCT # PRIOR TO DOING THE DIVIDE.
041146,001856: 00,2513 02565 TC MAXTEST
041147,001857:
041148,001858: 00,2514 54156 TS MPAC +2 # RETURNS WITH DIVISION DONE AND C(A) = 0.
041149,001859: 00,2515 16035 TCF DANZIG
041150,001860:
041151,001861: 00,2516 10000 BUFPOS CCS A
041152,001862: 00,2517 12422 TCF BUF+ # TO BUF+ IF BUF IS GREATER THAN +1.
041153,001863:
041154,001864: 00,2520 40131 CS BUF +1 # IF BUF IS +1, FORCING SIGN AGREEMENT
041155,001865: 00,2521 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO.
041156,001866: 00,2522 62422 BZMF BUF+ # BRANCH IF SIGNS AGREE.
041157,001867:
041158,001868: 00,2523 35011 CA HALF # SIGNS DISAGREE. FORCE AGREEMENT.
041159,001869: 00,2524 60000 +6 DOUBLE
041160,001870: 00,2525 26131 ADS BUF +1
041161,001871: 00,2526 35030 CA ZERO
041162,001872: 00,2527 54130 TS BUF
041163,001873: 00,2530 12363 TCF BUFZERO
041164,001874:
041165,001875:
041166,001876: 00,2531 10000 BUFNEG CCS A
041167,001877: 00,2532 12416 TCF BUF- # TO BUF- IF BUF IS LESS THAN -1.
041168,001878:
041169,001879: 00,2533 30131 CA BUF +1 # IF BUF IS -1, FORCING SIGN AGREEMENT
041170,001880: 00,2534 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO.
041171,001881: 00,2535 62416 BZMF BUF- # BRANCH IF SIGNS AGREE.
041172,001882:
041173,001883: 00,2536 45011 CS HALF # SIGNS DISAGREE. FORCE AGREEMENT.
041174,001884: 00,2537 12524 TCF BUFPOS +6
041175,001885:
041176,001886: # THE FOLLOWING ARE PROLOGUES TO SHIFT THE DIVIDEND ARRIVING IN A AND L BEFORE THE DIVIDE.
041177,001887:
041178,001888: 00,2540 22021 -21D LXCH SR # SPECIAL PROLOGUE FOR UNIT WHEN THE
041179,001889: 00,2541 00006 EXTEND # LENGTH OF THE ARGUMENT WAS NOT LESS THAN
041180,001890: 00,2542 75011 MP HALF # .5. IN THIS CASE, EACH COMPONENT MUST BE
041181,001891: 00,2543 56001 XCH L # SHIFTED RIGHT ONE TO PRODUCE A HALF-UNIT
041182,001892: 00,2544 60021 AD SR # VECTOR.
041183,001893: 00,2545 56001 XCH L
041184,001894: 00,2546 12571 TCF GENDDV +1 # WITH DP DIVIDEND IN A,L.
041185,001895:
041186,001896: 00,2547 20001 DDOUBL # PROLOGUE WHICH NORMALIZES THE DIVIDEND
041187,001897: 00,2550 20001 DDOUBL # WHEN IT IS KNOWN THAT NO DIVISION
041188,001898: 00,2551 20001 DDOUBL # OVERFLOW WILL OCCUR.
041189,001899: 00,2552 20001 DDOUBL
041190,001900: 00,2553 20001 DDOUBL
041191,001901: 00,2554 20001 DDOUBL
041192,001902: 00,2555 20001 DDOUBL
041193,001903: 00,2556 20001 DDOUBL
041194,001904: 00,2557 20001 DDOUBL
041195,001905: 00,2560 20001 DDOUBL
041196,001906: 00,2561 20001 DDOUBL
041197,001907: 00,2562 20001 DDOUBL
041198,001908: 00,2563 20001 DDOUBL
041199,001909: 00,2564 52155 DXCH MPAC
041200,001910:
041201,001911: 00,2565 10140 MAXTEST CCS MAXDVSW # 0 IF MAJORS MIGHT BE =, -1 OTHERWISE.
041202,001912: 00,2566 06552 BIASHI DEC .4192 B-1 # SQRT CONSTANTS
041203,001913:
041204,001914: 00,2567 12642 TCF MAXDV # CHECK TO SEE IF THEY ARE NOW EQUAL.
041205,001915:
041206,001916: # THE FOLLOWING IS A GENERAL PURPOSE DOUBLE PRECISION DIVISION ROUTINE. IT DIVIDES MPAC BY BUF AND LEAVES
041207,001917: # THE RESULT IN MPAC. THE FOLLOWING CONDITIONS MUST BE SATISFIED:
041208,001918:
041209,001919: # 1. THE DIVISOR (BUF) MUST BE POSITIVE AND NOT LESS THAN .5.
041210,001920:
041211,001921: # 2. THE DIVIDEND (MPAC) MUST BE POSITIVE WITH THE MAJOR PART OF MPAC STRICTLY LESS THAN THAT OF BUF
041212,001922: # (A SPECIAL APPROXIMATION, MAXDV, IS USED WHEN THE MAJOR PARTS ARE EQUAL).
041213,001923:
041214,001924: # UNDERSTANDING THAT A/B = Q + S(R/B) WHERE S = 2(-14) AND Q AND R ARE QUOTIENT AND REMAINDER, RESPEC-
041215,001925: # TIVELY, THE FOLLOWING APPROXIMATION IS OBTAINED BY MULTIPLYING ABOVE AND BELOW BY C - SD AND NEGLECTING TERMS OF
041216,001926: # ORDER S-SQUARED (POSSIBLY INTRODUCING ERROR INTO THE LOW TWO BITS OF THE RESULT). SIGN AGREEMENT IS UNNECESSARY.
041217,001927:
041218,001928: # A + SB . (R - QD) A + SB
041219,001929: # ------ = Q + S(------) WHERE Q AND R ARE QUOTIENT AND REMAINDER OF ------ RESPECTIVELY.
041220,001930: # C + SD ( C ) C
041221,001931:
041222,001932:
041223,001933: 00,2570 52155 GENDDV DXCH MPAC # WE NEED A AND B ONLY FOR FIRST DV.
041224,001934: 00,2571 00006 +1 EXTEND # (SPECIAL UNIT PROLOGUE ENTERS HERE).
041225,001935: 00,2572 10130 DV BUF # A NOW CONTAINS Q AND L, R.
041226,001936: 00,2573 52155 DXCH MPAC
041227,001937:
041228,001938: 00,2574 40154 CS MPAC # FORM DIVIDEND FOR MINOR PART OF RESULT.
041229,001939: 00,2575 00006 EXTEND
041230,001940: 00,2576 70131 MP BUF +1
041231,001941: 00,2577 60155 AD MPAC +1 # OVERFLOW AT THIS POINT IS POSITIVE SINCE
041232,001942: 00,2600 54000 OVSK # R IS POSITIVE IN EVERY CASE.
041233,001943: 00,2601 12606 TCF +5
041234,001944:
041235,001945: 00,2602 00006 EXTEND # OVERFLOW CAN BE REMOVED BY SUBTRACTING C
041236,001946: 00,2603 60130 SU BUF # (BUF) ONCE SINCE R IS ALWAYS LESS THAN C
041237,001947: 00,2604 24154 INCR MPAC # IN THIS CASE. INCR COMPENSATES SUBTRACT.
041238,001948: 00,2605 12610 TCF +DOWN # (SINCE C(A) IS STILL POSITIVE).
041239,001949:
041240,001950: 00,2606 00006 +5 EXTEND # C(A) CAN BE MADE LESS THAN C IN MAGNI-
041241,001951: 00,2607 62620 BZMF -UP # TUDE BY DIMINISHING IT BY C (SINCE C IS
041242,001952: # NOT LESS THAN .5) UNLESS C(A) = 0.
041243,001953:
041244,001954: 00,2610 00006 +DOWN EXTEND
041245,001955: 00,2611 60130 SU BUF # IF POSITIVE, REDUCE ONLY IF NECESSARY
041246,001956: 00,2612 00006 EXTEND # SINCE THE COMPENSATING INCR MIGHT CAUSE
041247,001957: 00,2613 12616 BZF +3 # OVERFLOW.
041248,001958: 00,2614 00006 EXTEND # DONT SUBTRACT UNLESS RESULT IS POSITIVE
041249,001959: 00,2615 62624 BZMF ENDMAXDV # OR ZERO.
041250,001960:
041251,001961: 00,2616 24154 +3 INCR MPAC # KEEP SUBTRACT HERE AND COMPENSATE.
041252,001962: 00,2617 12625 TCF FINALDV
041253,001963:
041254,001964: 00,2620 00006 -UP EXTEND # IF ZERO, SET MINOR PART OF RESULT TO
041255,001965: 00,2621 12630 BZF FINALDV +3 # ZERO.
041256,001966:
041257,001967: 00,2622 00006 EXTEND # IF NEGATIVE, ADD C TO A, SUBTRACTING ONE
041258,001968: 00,2623 26154 DIM MPAC # TO COMPENSATE. DIM IS OK HERE SINCE THE
041259,001969: 00,2624 60130 ENDMAXDV AD BUF # MAJOR PART NEVER GOES NEGATIVE.
041260,001970:
041261,001971: 00,2625 22007 FINALDV ZL # DO DV TO OBTAIN MINOR PART OF RESULT.
041262,001972: 00,2626 00006 EXTEND
041263,001973: 00,2627 10130 DV BUF
041264,001974: 00,2630 54155 +3 TS MPAC +1
041265,001975:
041266,001976: 00,2631 10136 CCS DVSIGN # LEAVE RESULT POSITIVE UNLESS C(DVSIGN)=
041267,001977: 00,2632 00002 TC Q # -0.
041268,001978: 00,2633 00002 TC Q
041269,001979: 00,2634 00002 TC Q
041270,001980:
041271,001981: 00,2635 00006 EXTEND
041272,001982: 00,2636 40155 DCS MPAC
041273,001983: 00,2637 52155 DXCH MPAC
041274,001984: 00,2640 35030 CAF ZERO # SO WE ALWAYS RETURN WITH C(A) = 0.
041275,001985: 00,2641 00002 TC Q
041276,001986:
041277,001987: # IF THE MAJOR PARTS OF THE DIVISOR AND DIVIDEND ARE EQUAL, BUT THE MINOR PARTS ARE SUCH THAT THE
041278,001988: # DIVIDEND IS STRICTLY LESS THAN THE DIVISOR IN MAGNITUDE, THE FOLLOWING APPROXIMATION IS USED. THE ASSUMPTIONS
041279,001989: # ARE THE SAME AS THE GENERAL ROUTINE WITH THE ADDITION THAT SIGN AGREEMENT IS NECESSARY (B, C, & D POSITIVE).
041280,001990:
041281,001991: # C + SB . (C + B - D)
041282,001992: # ------ = 37777 + S(---------)
041283,001993: # C + SD ( C )
041284,001994:
041285,001995: # THE DIVISION MAY BE PERFORMED IMMEDIATELY SINCE B IS STRICTLY LESS THAN D AND C IS NOT LESS THAN .5.
041286,001996:
041287,001997:
041288,001998: 00,2642 40154 MAXDV CS MPAC # SEE IF MAXDV CASE STILL HOLDS AFTER
041289,001999: 00,2643 60130 AD BUF # NORMALIZATION.
041290,002000: 00,2644 00006 EXTEND
041291,002001: 00,2645 12647 BZF +2
041292,002002: 00,2646 12570 TCF GENDDV # MPAC NOW LESS THAN BUF - DIVIDE AS USUAL
041293,002003:
041294,002004: 00,2647 35006 +2 CAF POSMAX # SET MAJOR PART OF RESULT.
041295,002005: 00,2650 54154 TS MPAC
041296,002006:
041297,002007: 00,2651 40131 CS BUF +1 # FORM DIVIDEND OF MINOR PART OF RESULT.
041298,002008: 00,2652 60155 AD MPAC +1
041299,002009: 00,2653 12624 TCF ENDMAXDV # GO ADD C AND DO DIVIDE, ATTACHING SIGN
041300,002010: # BEFORE EXITING.
041301,002011:
041302,002012: # VECTOR DIVIDED BY SCALAR, V/SC, IS EXECUTED HERE. THE VECTOR IS NOW IN MPAC WITH SCALAR IN BUF.
041303,002013:
041304,002014: 00,2654 45026 V/SC2 CS ONE # INITIALIZE DIVIDEND NORMALIZATION COUNT
041305,002015: 00,2655 54137 TS DVNORMCT # AND DIVISION SIGN REGISTER.
041306,002016: 00,2656 54127 TS VBUF +5
041307,002017:
041308,002018: 00,2657 03010 TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR
041309,002019:
041310,002020: 00,2660 52131 DXCH BUF
041311,002021: 00,2661 07516 TC ALSIGNAG # SIGN AGREE BUF
041312,002022: 00,2662 52131 DXCH BUF
041313,002023: 00,2663 10130 CCS BUF # FORCE DIVISOR POSITIVE WITH MAJOR PART
041314,002024: 00,2664 12721 TCF /BUF+ # NON-ZERO (IF POSSIBLE).
041315,002025: 00,2665 12667 TCF +2
041316,002026: 00,2666 12715 TCF /BUF-
041317,002027:
041318,002028: 00,2667 56131 XCH BUF +1 # SHIFT VECTOR AND SCALAR LEFT 14.
041319,002029: 00,2670 56130 XCH BUF
041320,002030: 00,2671 56155 XCH MPAC +1
041321,002031: 00,2672 56154 XCH MPAC
041322,002032: 00,2673 00006 EXTEND # CHECK FOR OVERFLOW IN EACH CASE.
041323,002033: 00,2674 12676 BZF +2
041324,002034: 00,2675 12405 TCF DVOVF
041325,002035:
041326,002036: 00,2676 56160 XCH MPAC +4
041327,002037: 00,2677 56157 XCH MPAC +3
041328,002038: 00,2700 00006 EXTEND
041329,002039: 00,2701 12703 BZF +2
041330,002040: 00,2702 12405 TCF DVOVF
041331,002041:
041332,002042: 00,2703 56162 XCH MPAC +6
041333,002043: 00,2704 56161 XCH MPAC +5
041334,002044: 00,2705 00006 EXTEND
041335,002045: 00,2706 12710 BZF +2
041336,002046: 00,2707 12405 TCF DVOVF
041337,002047:
041338,002048: 00,2710 10130 CCS BUF
041339,002049: 00,2711 12721 TCF /BUF+
041340,002050: 00,2712 12405 TCF DVOVF # ZERO DIVISOR - OVERFLOW.
041341,002051: 00,2713 12715 TCF /BUF-
041342,002052: 00,2714 12405 TCF DVOVF
041343,002053:
041344,002054: 00,2715 00006 /BUF- EXTEND # ON NEGATIVE, COMPLEMENT BUF AND MAINTAIN
041345,002055: 00,2716 40131 DCS BUF # DVSIGN IN VBUF +5.
041346,002056: 00,2717 52131 DXCH BUF
041347,002057: 00,2720 24127 INCR VBUF +5
041348,002058:
041349,002059: 00,2721 00006 /BUF+ EXTEND
041350,002060: 00,2722 30131 DCA BUF # LEAVE ABS(ORIG DIVISOR) IN BUF2
041351,002061: 00,2723 52134 DXCH BUF2 # FOR OVERFLOW TESTING
041352,002062: 00,2724 12732 TCF /NORM # NORMALIZE DIVISOR IN BUF.
041353,002063:
041354,002064: 00,2725 00006 /NORM2 EXTEND # IF LESS THAN .5, AUGMENT DVNORMCT AND
041355,002065: 00,2726 24137 AUG DVNORMCT # DOUBLE DIVISOR.
041356,002066: 00,2727 00006 EXTEND
041357,002067: 00,2730 30131 DCA BUF
041358,002068: 00,2731 20131 DAS BUF
041359,002069:
041360,002070: 00,2732 30130 /NORM CA BUF # SEE IF DIVISOR NORMALIZED.
041361,002071: 00,2733 60000 DOUBLE
041362,002072: 00,2734 54000 OVSK
041363,002073: 00,2735 12725 TCF /NORM2 # DOUBLE AND TRY AGAIN IF NOT.
041364,002074:
041365,002075: 00,2736 02750 TC V/SCDV # DO X COMPONENT DIVIDE.
041366,002076: 00,2737 52160 DXCH MPAC +3 # SUPPLY ARGUMENTS IN USUAL SEQUENCE.
041367,002077: 00,2740 52155 DXCH MPAC
041368,002078: 00,2741 52160 DXCH MPAC +3
041369,002079:
041370,002080: 00,2742 02750 TC V/SCDV # Y COMPONENT.
041371,002081: 00,2743 52162 DXCH MPAC +5
041372,002082: 00,2744 52155 DXCH MPAC
041373,002083: 00,2745 52162 DXCH MPAC +5
041374,002084:
041375,002085: 00,2746 02750 TC V/SCDV # Z COMPONENT.
041376,002086: 00,2747 17372 TCF VROTATEX # GO RE-ARRANGE COMPONENTS BEFORE EXIT.
041377,002087:
041378,002088: # SUBROUTINE USED BY V/SC TO DIVIDE VECTOR COMPONENT IN MPAC,+1 BY THE SCALAR GIVEN IN BUF.
041379,002089:
041380,002090: 00,2750 30127 V/SCDV CA VBUF +5 # REFLECTS SIGN OF SCALAR.
041381,002091: 00,2751 54136 TS DVSIGN
041382,002092:
041383,002093: 00,2752 10154 CCS MPAC # FORCE MPAC POSITIVE, EXITING ON ZERO.
041384,002094: 00,2753 12767 TCF /MPAC+
041385,002095: 00,2754 12756 TCF +2
041386,002096: 00,2755 12763 TCF /MPAC-
041387,002097:
041388,002098: 00,2756 10155 CCS MPAC +1
041389,002099: 00,2757 12767 TCF /MPAC+
041390,002100: 00,2760 00002 TC Q
041391,002101: 00,2761 12763 TCF /MPAC-
041392,002102: 00,2762 00002 TC Q
041393,002103:
041394,002104: 00,2763 00006 /MPAC- EXTEND # USUAL COMPLEMENTING AND SETTING OF SIGN.
041395,002105: 00,2764 40155 DCS MPAC
041396,002106: 00,2765 52155 DXCH MPAC
041397,002107: 00,2766 24136 INCR DVSIGN
041398,002108:
041399,002109: 00,2767 45026 /MPAC+ CS ONE # INITIALIZE NEAR-ONE SWITCH.
041400,002110: 00,2770 54140 TS MAXDVSW
041401,002111:
041402,002112: 00,2771 40154 CS MPAC # CHECK POSSIBLE OVERFLOW.
041403,002113: 00,2772 60133 AD BUF2 # UNNORMALIZED INPUT DIVISOR.
041404,002114: 00,2773 10000 CCS A
041405,002115: 00,2774 13004 TCF DDVCALL # NOT NEAR-ONE
041406,002116: 00,2775 12777 TCF +2 # +0 IS JUST POSSIBLE
041407,002117: 00,2776 12405 TCF DVOVF # NO HOPE
041408,002118: 00,2777 54140 TS MAXDVSW # SIGNAL POSSIBLE NEAR-ONE CASE
041409,002119: 00,3000 40155 CS MPAC +1 # SEE IF DIVISION CAN BE DONE
041410,002120: 00,3001 60134 AD BUF2 +1
041411,002121: 00,3002 00006 EXTEND
041412,002122: 00,3003 62405 BZMF DVOVF
041413,002123:
041414,002124: 00,3004 52155 DDVCALL DXCH MPAC # CALL PRE-DIVIDE NORMALIZATION.
041415,002125: 00,3005 50137 INDEX DVNORMCT
041416,002126: 00,3006 12565 TCF MAXTEST
041417,002127:
041418,002128: 00,3007 32506 SLOPELO DEC .8324
041419,002129:
041420,002130: 00,3010 56002 VECAGREE XCH Q # SAVE Q IN A
041421,002131: 00,3011 52155 DXCH MPAC
041422,002132: 00,3012 07516 TC ALSIGNAG # SIGNAGREE MPAC
041423,002133: 00,3013 52155 DXCH MPAC
041424,002134: 00,3014 52160 DXCH MPAC +3
041425,002135: 00,3015 07516 TC ALSIGNAG # SIGN AGREE MPAC +3
041426,002136: 00,3016 52160 DXCH MPAC +3
041427,002137: 00,3017 52162 DXCH MPAC +5
041428,002138: 00,3020 07516 TC ALSIGNAG # SIGNAGREE MPAC +5
041429,002139: 00,3021 52162 DXCH MPAC +5
041430,002140: 00,3022 00000 TC A
041431,002141:
041432,002142: # THE FOLLOWING ROUTINE EXECUTES THE UNIT INSTRUCTION, WHICH TAKES THE UNIT OF THE VECTOR IN MPAC.
041433,002143:
041434,002144: 00,3023 03010 UNIT TC VECAGREE # FORCE SIGN AGREEMENT IN VECTOR
041435,002145: 00,3024 07504 TC MPACVBUF # SAVE ARGUMENT IN VBUF
041436,002146: 00,3025 35030 CAF ZERO # MUST SENSE OVERFLOW IN FOLLOWING DOT.
041437,002147: 00,3026 56121 XCH OVFIND
041438,002148: 00,3027 54141 TS TEM1
041439,002149: 00,3030 03317 TC VSQSUB # DOT MPAC WITH ITSELF.
041440,002150: 00,3031 30141 CA TEM1
041441,002151: 00,3032 56121 XCH OVFIND
041442,002152: 00,3033 00006 EXTEND
041443,002153: 00,3034 13036 BZF +2
041444,002154: 00,3035 12405 TCF DVOVF
041445,002155: 00,3036 00006 EXTEND
041446,002156: 00,3037 30155 DCA MPAC # LEAVE THE SQUARE OF THE LENGTH OF THE
041447,002157: 00,3040 50120 INDEX FIXLOC # ARGUMENT IN LVSQUARE.
041448,002158: 00,3041 52043 DXCH LVSQUARE
041449,002159:
041450,002160: 00,3042 03343 TC SQRTSUB # GO TAKE THE NORMALIZED SQUARE ROOT.
041451,002161:
041452,002162: 00,3043 10154 CCS MPAC # CHECK FOR UNIT OVERFLOW.
041453,002163: 00,3044 13051 TCF +5 # MPAC IS NOT LESS THAN .5 UNLESS
041454,002164: 00,3045 54001 TS L
041455,002165: 00,3046 50120 INDEX FIXLOC
041456,002166: 00,3047 52045 DXCH LV
041457,002167: 00,3050 12405 TCF DVOVF # INPUT TO SQRTSUB WAS 0.
041458,002168:
041459,002169: 00,3051 44331 CS FOURTEEN # SEE IF THE INPUT WAS SO SMALL THE THE
041460,002170: 00,3052 60135 AD MPTEMP # FIRST TWO REGISTERS OF THE SQUARE WERE 0
041461,002171: 00,3053 10000 CCS A
041462,002172: 00,3054 40000 COM # IF SO, SAVE THE NEGATIVE OF THE SHIFT
041463,002173: 00,3055 13133 TCF SMALL # COUNT -15D.
041464,002174:
041465,002175: 00,3056 13065 TCF LARGE # (THIS IS USUALLY THE CASE.)
041466,002176:
041467,002177: 00,3057 45034 CS THIRTEEN # IF THE SHIFT COUNT WAS EXACTLY 14, SET
041468,002178: 00,3060 54135 TS MPTEMP # THE PRE-DIVIDE NORM COUNT TO -13D.
041469,002179:
041470,002180: 00,3061 30154 CA MPAC # SHIFT THE LENGTH RIGHT 14 BEFORE STORING
041471,002181: 00,3062 54001 SMALL2 TS L # (SMALL EXITS TO THIS POINT).
041472,002182: 00,3063 35030 CAF ZERO
041473,002183: 00,3064 13112 TCF LARGE2 # GO TO STORE LENGTH AND PROCEED.
041474,002184:
041475,002185: 00,3065 10135 LARGE CCS MPTEMP # MOST ALL CASES COME HERE.
041476,002186: 00,3066 13074 TCF LARGE3 # SEE IF NO NORMALIZATION WAS REQUIRED BY
041477,002187:
041478,002188: 00,3067 42024 CS SRDDV # SQRT, AND IF SO, SET UP FOR A SHIFT
041479,002189: 00,3070 54135 TS MPTEMP # RIGHT 1 BEFORE DIVIDING TO PRODUCE
041480,002190: 00,3071 00006 EXTEND # THE DESIRED HALF UNIT VECTOR.
041481,002191: 00,3072 30155 DCA MPAC
041482,002192: 00,3073 13112 TCF LARGE2
041483,002193:
041484,002194: 00,3074 40000 LARGE3 COM # LEAVE NEGATIVE OF SHIFT COUNT-1 FOR
041485,002195: 00,3075 54135 TS MPTEMP # PREDIVIDE LEFT SHIFT.
041486,002196:
041487,002197: 00,3076 40000 COM # PICK UP REQUIRED SHIFTING BIT TO UNNORM-
041488,002198: 00,3077 50000 INDEX A # ALIZE THE SQRT RESULT.
041489,002199: 00,3100 35011 CAF BIT14
041490,002200: 00,3101 54130 TS BUF
041491,002201: 00,3102 00006 EXTEND
041492,002202: 00,3103 70155 MP MPAC +1
041493,002203: 00,3104 56130 XCH BUF
041494,002204: 00,3105 00006 EXTEND # (UNNORMALIZE THE SQRT FOR LV).
041495,002205: 00,3106 70154 MP MPAC
041496,002206: 00,3107 56001 XCH L
041497,002207: 00,3110 60130 AD BUF
041498,002208: 00,3111 56001 XCH L
041499,002209:
041500,002210: 00,3112 50120 LARGE2 INDEX FIXLOC
041501,002211: 00,3113 52045 DXCH LV # LENGTH NOW STORED IN WORK AREA.
041502,002212:
041503,002213: 00,3114 45026 CS ONE
041504,002214: 00,3115 54140 TS MAXDVSW # NO MAXDV CASES IN UNIT.
041505,002215:
041506,002216: 00,3116 52123 DXCH VBUF # PREPARE X COMPONENT FOR DIVIDE, SETTING
041507,002217: 00,3117 52155 DXCH MPAC # LENGTH OF VECTOR AS DIVISOR IN BUF.
041508,002218: 00,3120 52131 DXCH BUF
041509,002219: 00,3121 03151 TC UNITDV
041510,002220:
041511,002221: 00,3122 52125 DXCH VBUF +2 # DO Y AND Z IN USUAL FASHION SO WE CAN
041512,002222: 00,3123 52155 DXCH MPAC # EXIT THROUGH VROTATEX.
041513,002223: 00,3124 52160 DXCH MPAC +3
041514,002224: 00,3125 03151 TC UNITDV
041515,002225:
041516,002226: 00,3126 52127 DXCH VBUF +4
041517,002227: 00,3127 52155 DXCH MPAC
041518,002228: 00,3130 52162 DXCH MPAC +5
041519,002229: 00,3131 03151 TC UNITDV
041520,002230: 00,3132 17372 TCF VROTATEX # AND EXIT.
041521,002231:
041522,002232: # IF THE LENGTH OF THE ARGUMENT VECTOR WAS LESS THAN 2(-28), EACH COMPONENT MUST BE SHIFTED LEFT AT LEAST
041523,002233: # 14 PLACES BEFORE THE DIVIDE. NOTE THAT IN THIS CASE, THE MAJOR PART OF EACH COMPONENT IS ZERO.
041524,002234:
041525,002235: 00,3133 54135 SMALL TS MPTEMP # NEGATIVE OF PRE-DIVIDE SHIFT COUNT.
041526,002236:
041527,002237: 00,3134 35030 CAF ZERO # SHIFT EACH COMPONENT LEFT 14.
041528,002238: 00,3135 56123 XCH VBUF +1
041529,002239: 00,3136 56122 XCH VBUF
041530,002240: 00,3137 56125 XCH VBUF +3
041531,002241: 00,3140 56124 XCH VBUF +2
041532,002242: 00,3141 56127 XCH VBUF +5
041533,002243: 00,3142 56126 XCH VBUF +4
041534,002244:
041535,002245: 00,3143 40135 CS MPTEMP
041536,002246: 00,3144 50000 INDEX A
041537,002247: 00,3145 35011 CAF BIT14
041538,002248: 00,3146 00006 EXTEND
041539,002249: 00,3147 70154 MP MPAC
041540,002250: 00,3150 13062 TCF SMALL2
041541,002251:
041542,002252: 00,3151 5034 THIRTEEN = OCT15
041543,002253: 00,3151 4331 FOURTEEN = OCT16
041544,002254: 00,3151 4331 OCT16 = R1D1
041545,002255:
041546,002256: # THE FOLLOWING ROUTINE SETS UP THE CALL TO THE DIVIDE ROUTINES.
041547,002257:
041548,002258: 00,3151 10154 UNITDV CCS MPAC # FORCE MPAC POSITIVE IF POSSIBLE, SETTING
041549,002259: 00,3152 13170 TCF UMPAC+ # DVSIGN ACCORDING TO THE SIGN OF MPAC
041550,002260: 00,3153 13155 TCF +2 # SINCE THE DIVISOR IS ALWAYS POSITIVE
041551,002261: 00,3154 13162 TCF UMPAC- # HERE.
041552,002262:
041553,002263: 00,3155 10155 CCS MPAC +1
041554,002264: 00,3156 13170 TCF UMPAC+
041555,002265: 00,3157 00002 TC Q # EXIT IMMEDIATELY ON ZERO.
041556,002266: 00,3160 13162 TCF UMPAC-
041557,002267: 00,3161 00002 TC Q
041558,002268:
041559,002269: 00,3162 45030 UMPAC- CS ZERO # IF NEGATIVE, SET -0 IN DVSIGN FOR FINAL
041560,002270: 00,3163 54136 TS DVSIGN # COMPLEMENT.
041561,002271: 00,3164 00006 EXTEND
041562,002272: 00,3165 40155 DCS MPAC # PICK UP ABSOLUTE VALUE OF ARG AND JUMP.
041563,002273: 00,3166 50135 INDEX MPTEMP
041564,002274: 00,3167 12564 TCF MAXTEST -1
041565,002275:
041566,002276: 00,3170 54136 UMPAC+ TS DVSIGN # SET DVSIGN FOR POSITIVE QUOTIENT.
041567,002277: 00,3171 52155 DXCH MPAC
041568,002278: 00,3172 50135 INDEX MPTEMP
041569,002279: 00,3173 12564 TCF MAXTEST -1
041570,002280:
041571,002281: # MISCELLANEOUS UNARY OPERATIONS.
041572,002282:
041573,002283: 00,3174 03300 DSQ TC DSQSUB # SQUARE THE DP CONTENTS OF MPAC.
041574,002284: 00,3175 16035 TCF DANZIG
041575,002285:
041576,002286: 00,3176 10163 ABVALABS CCS MODE # ABVAL OR ABS INSTRUCTION.
041577,002287: 00,3177 13226 TCF ABS # DO ABS ON SCALAR.
041578,002288: 00,3200 13226 TCF ABS
041579,002289:
041580,002290: 00,3201 03317 ABVAL TC VSQSUB # DOT MPAC WITH ITSELF.
041581,002291: 00,3202 22163 LXCH MODE # MODE IS NOW DP (L ZERO AFTER DAS).
041582,002292:
041583,002293: 00,3203 00006 EXTEND # STORE SQUARE OF LENGTH IN WORK AREA.
041584,002294: 00,3204 30155 DCA MPAC
041585,002295: 00,3205 50120 INDEX FIXLOC
041586,002296: 00,3206 52043 DXCH LVSQUARE
041587,002297:
041588,002298: # PROGRAM DESCRIPTION- SUBROUTINE SQRT
041589,002299: # FUNCTIONAL DESCRIPTION-DOUBLE PRECISION SQUARE ROOT ROUTINE
041590,002300: # THIS PROGRAM TAKES THE SQUARE ROOT OF THE 27 OR 28 MOST SIGNIFICANT BITS IN THE TRIPLE PRECISION SET OF
041591,002301: # NUMBERS-MPAC,MPAC+1,AND MPAC+2. THE ROOT IS RETURNED DOUBLE PRECISION IN MPAC AND MPAC+1.
041592,002302: # WARNING- THIS SUBROUTINE USES A TRIPLE PRECISION INPUT. THE PROGRAMMER MUST ASSURE THE CONTENTS OF MPAC+2
041593,002303: # ESPECIALLY IF THE CONTENTS OF MPAC IS SMALL OR ZERO. FOR DETAILS SEE STG MEMO NO.949.
041594,002304: # CALLING SEQUENCE- IN INTERPRETIVE MODE I.E., FOLLOWING TC INTPRET,SQRT NO ADDRESS IS ALLOWED
041595,002305: # INPUT SCALING THE BINARY POINT IS ASSUMED TO THE RIGHT OF BIT 15. THE ANSWER IS RETURNED WITH THE SAME SCALING
041596,002306: # SUBROUTINES- GENSCR,MPACSHR, SQRTSUB,ABORT
041597,002307: # ABORT EXIT MODE- ABORTS ON NEGATIVE INPUT -1.2X10E-4 (77775 OCTAL) OR LESS.
041598,002308: # DISPLAYS ERROR CODE 1302
041599,002309: # TC ABORT
041600,002310: # OCT 1302
041601,002311: # DEBRIS - LOCATIONS BUF,MPTEMP,ADDRWD ARE USED
041602,002312: 00,3207 03343 SQRT TC SQRTSUB # TAKE THE SQUARE ROOT OF MPAC.
041603,002313: 00,3210 10135 CCS MPTEMP # RETURNED NORMALIZED SQUARE ROOT. SEE IF
041604,002314: 00,3211 13213 TCF +2 # ANY UN-NORMALIZATION REQUIRED AND EXIT
041605,002315: 00,3212 16035 TCF DANZIG # IF NOT.
041606,002316:
041607,002317: 00,3213 63730 AD NEG12 # A RIGHT SHIFT OF MORE THAN 13 COULD BE
041608,002318: 00,3214 00006 EXTEND # REQUIRED IF INPUT WAS ZERO IN MPAC,+1.
041609,002319: 00,3215 63221 BZMF SQRTSHFT # GOES HERE IN MOST CASES.
041610,002320: 00,3216 22007 ZL # IF A LONG SHIFT IS REQUIRED, GO TO
041611,002321: 00,3217 22116 LXCH ADDRWD # GENERAL RIGHT SHIFT ROUTINES.
041612,002322: 00,3220 12303 TCF GENSCR +4 # ADDRWD WAS ZERO TO PREVENT ROUND.
041613,002323:
041614,002324: 00,3221 50135 SQRTSHFT INDEX MPTEMP # SELECT SHIFTING BIT AND EXIT THROUGH
041615,002325: 00,3222 35010 CAF BIT15 # SHIFT ROUTINES.
041616,002326: 00,3223 54135 TS MPTEMP
041617,002327: 00,3224 35030 CAF ZERO # TO ZERO MPAC +2 IN THE PROCESS.
041618,002328: 00,3225 12036 TCF MPACSHR +3
041619,002329:
041620,002330: 00,3226 06677 ABS TC BRANCH # TEST SIGN OF MPAC AND COMPLEMENT IF
041621,002331: 00,3227 16035 TCF DANZIG
041622,002332: 00,3230 16035 TCF DANZIG
041623,002333: 00,3231 17642 TCF COMP
041624,002334:
041625,002335: 00,3232 45024 VDEF CS FOUR # VECTOR DEFINE - ESSENTIALLY TREATS
041626,002336: 00,3233 26166 ADS PUSHLOC # SCALAR IN MPAC AS X COMPONENT, PUSHES UP
041627,002337: 00,3234 00006 EXTEND # FOR Y AND THEN AGAIN FOR Z.
041628,002338: 00,3235 50000 INDEX A
041629,002339: 00,3236 30003 DCA 2
041630,002340: 00,3237 52160 DXCH MPAC +3
041631,002341: 00,3240 00006 EXTEND
041632,002342: 00,3241 50166 INDEX PUSHLOC
041633,002343: 00,3242 30001 DCA 0
041634,002344: 00,3243 52162 DXCH MPAC +5
041635,002345: 00,3244 16475 TCF VMODE # MODE IS NON VECTOR.
041636,002346:
041637,002347: 00,3245 03317 VSQ TC VSQSUB # DOT MPAC WITH ITSELF.
041638,002348: 00,3246 17304 TCF DMODE # MODE IS NOW DP.
041639,002349:
041640,002350: 00,3247 00006 PUSH EXTEND # PUSH DOWN MPAC LEAVING IT LOADED.
041641,002351: 00,3250 30155 DCA MPAC
041642,002352: 00,3251 50166 INDEX PUSHLOC # PUSH DOWN FIRST TWO REGISTERS IN EACH
041643,002353: 00,3252 52001 DXCH 0
041644,002354:
041645,002355: 00,3253 50163 INDEX MODE # INCREMENT PUSHDOWN POINTER.
041646,002356: 00,3254 36220 CAF NO.WDS
041647,002357: 00,3255 26166 ADS PUSHLOC
041648,002358:
041649,002359: 00,3256 10163 CCS MODE
041650,002360: 00,3257 13272 TCF TPUSH # PUSH DOWN MPAC +2.
041651,002361: 00,3260 16035 TCF DANZIG # DONE FOR DP.
041652,002362:
041653,002363: 00,3261 00006 EXTEND # ON VECTOR, PUSH DOWN Y AND Z COMPONENTS.
041654,002364: 00,3262 30160 DCA MPAC +3
041655,002365: 00,3263 50166 INDEX PUSHLOC
041656,002366: 00,3264 51775 DXCH 0 -4
041657,002367: 00,3265 00006 EXTEND
041658,002368: 00,3266 30162 DCA MPAC +5
041659,002369: 00,3267 50166 INDEX PUSHLOC
041660,002370: 00,3270 51777 DXCH 0 -2
041661,002371: 00,3271 16035 TCF DANZIG
041662,002372:
041663,002373: 00,3272 30156 TPUSH CA MPAC +2
041664,002374: 00,3273 16530 TCF ENDTPUSH +2
041665,002375:
041666,002376: 00,3274 50120 RVQ INDEX FIXLOC # RVQ - RETURN IVA QPRET.
041667,002377: 00,3275 30052 CA QPRET
041668,002378: 00,3276 54117 TS POLISH
041669,002379: 00,3277 16626 TCF GOTO +4 # (ASSUME QPRET POINTS TO FIXED ONLY.)
041670,002380:
041671,002381: # THE FOLLOWING SUBROUTINES ARE USED IN SQUARING MPAC, IN BOTH THE SCALAR AND VECTOR SENSE. THEY ARE
041672,002382: # SPECIAL CASES OF DMPSUB AND DOTSUB, PUT IN TO SAVE SOME TIME.
041673,002383:
041674,002384: 00,3300 30155 DSQSUB CA MPAC +1 # SQUARES THE SCALAR CONTENTS OF MPAC.
041675,002385: 00,3301 00006 EXTEND
041676,002386: 00,3302 70000 SQUARE
041677,002387: 00,3303 54156 TS MPAC +2
041678,002388: 00,3304 35030 CAF ZERO # FORM 2(CROSS TERM).
041679,002389: 00,3305 56155 XCH MPAC +1
041680,002390: 00,3306 00006 EXTEND
041681,002391: 00,3307 70154 MP MPAC
041682,002392: 00,3310 20001 DDOUBL # AND MAYBE OVERFLOW.
041683,002393: 00,3311 20156 DAS MPAC +1 # AND SET A TO NET OVERFLOW.
041684,002394: 00,3312 56154 XCH MPAC
041685,002395: 00,3313 00006 EXTEND
041686,002396: 00,3314 70000 SQUARE
041687,002397: 00,3315 20155 DAS MPAC
041688,002398: 00,3316 00002 TC Q
041689,002399:
041690,002400: 00,3317 00006 VSQSUB EXTEND # DOTS THE VECTOR IN MPAC WITH ITSELF.
041691,002401: 00,3320 22137 QXCH DOTRET
041692,002402: 00,3321 03300 TC DSQSUB # SQUARE THE X COMPONENT.
041693,002403: 00,3322 52160 DXCH MPAC +3
041694,002404: 00,3323 52155 DXCH MPAC
041695,002405: 00,3324 52131 DXCH BUF # SO WE CAN END IN DOTSUB.
041696,002406: 00,3325 30156 CA MPAC +2
041697,002407: 00,3326 54132 TS BUF +2
041698,002408:
041699,002409: 00,3327 03300 TC DSQSUB # SQUARE Y COMPONENT.
041700,002410: 00,3330 52156 DXCH MPAC +1
041701,002411: 00,3331 20132 DAS BUF +1
041702,002412: 00,3332 60154 AD MPAC
041703,002413: 00,3333 60130 AD BUF
041704,002414: 00,3334 54130 TS BUF
041705,002415: 00,3335 13337 TCF +2
041706,002416: 00,3336 54121 TS OVFIND # IF OVERFLOW.
041707,002417:
041708,002418: 00,3337 52162 DXCH MPAC +5
041709,002419: 00,3340 52155 DXCH MPAC
041710,002420: 00,3341 03300 TC DSQSUB # SQUARE Z COMPONENT.
041711,002421: 00,3342 17161 TCF ENDDOT # END AS IN DOTSUB.
041712,002422:
041713,002423: # DOUBLE PRECISION SQUARE ROOT ROUTINE. TAKE THE SQUARE ROOT OF THE TRIPLE PRECISION (MPAC +2 USED ONLY
041714,002424: # IN NORMALIZATION) CONTENTS OF MPAC AND LEAVE THE NORMALIZED RESULT IN MPAC (C(MPAC) GREATER THAN OR EQUAL TO
041715,002425: # .5). THE RIGHT SHIFT COUNT (TO UNNORMALIZE) IS LEFT IN MPTEMP.
041716,002426:
041717,002427:
041718,002428: 00,3343 35030 SQRTSUB CAF ZERO # START BY ZEROING RIGHT SHIFT COUNT.
041719,002429: 00,3344 54135 TS MPTEMP
041720,002430:
041721,002431: 00,3345 10154 CCS MPAC # CHECK FOR POSITIVE ARGUMENT, SHIFTING
041722,002432: 00,3346 13404 TCF SMPAC+ # FIRST SIGNIFICANT MPAC REGISTER INTO
041723,002433: 00,3347 13351 TCF +2 # MPAC ITSELF.
041724,002434: 00,3350 13373 TCF SQRTNEG # SEE IF MAG OF ARGUMENT LESS THAN 10(-4).
041725,002435:
041726,002436: 00,3351 56156 XCH MPAC +2 # MPAC IS ZERO - SHIFT LEFT 14.
041727,002437: 00,3352 56155 XCH MPAC +1
041728,002438: 00,3353 54154 TS MPAC
041729,002439: 00,3354 35032 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
041730,002440: 00,3355 54135 TS MPTEMP
041731,002441:
041732,002442: 00,3356 10154 CCS MPAC # SEE IF MPAC NOW PNZ.
041733,002443: 00,3357 13404 TCF SMPAC+
041734,002444: 00,3360 13362 TCF +2
041735,002445: 00,3361 13376 TCF ZEROANS # NEGATIVE BUT LESS THAN 10(-4) IN MAG.
041736,002446:
041737,002447: 00,3362 56155 XCH MPAC +1 # ZERO - SHIFT LEFT 14 AGAIN.
041738,002448: 00,3363 54154 TS MPAC
041739,002449: 00,3364 35032 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
041740,002450: 00,3365 26135 ADS MPTEMP
041741,002451:
041742,002452: 00,3366 10154 CCS MPAC
041743,002453: 00,3367 13404 TCF SMPAC+
041744,002454: 00,3370 00002 TC Q # SQRT(0) = 0.
041745,002455: 00,3371 13376 TCF ZEROANS
041746,002456: 00,3372 13452 TCF FIXROOT # DO NOT LEAVE SQRTSUB WITH -0 IN MPAC.
041747,002457:
041748,002458:
041749,002459: 00,3373 10000 SQRTNEG CCS A # ARGUMENT IS NEGATIVE, BUT SEE IF SIGN-
041750,002460: 00,3374 13402 TCF SQRTABRT # CORRECTED ARGUMENT IS LESS THAN 10(-4)
041751,002461:
041752,002462: 00,3375 10155 CCS MPAC +1 # IN MAGNITUDE. IF SO, CALL ANSWER ZERO.
041753,002463: 00,3376 35030 ZEROANS CAF ZERO # FORCE ANSWER TO ZERO HERE.
041754,002464: 00,3377 13452 TCF FIXROOT
041755,002465: 00,3400 13402 TCF SQRTABRT
041756,002466: 00,3401 13452 TCF FIXROOT
041757,002467:
041758,002468: 00,3402 05716 SQRTABRT TC ABORT
041759,002469: 00,3403 01302 OCT 1302
041760,002470:
041761,002471: 00,3404 62444 SMPAC+ AD -1/2+2 # SEE IF ARGUMENT GREATER THAN OR EQUAL TO
041762,002472: 00,3405 00006 EXTEND # .5.
041763,002473: 00,3406 63455 BZMF SRTEST # IF SO, SEE IF LESS THAN .25.
041764,002474:
041765,002475: 00,3407 52155 DXCH MPAC # WE WILL TAKE THE SQUARE ROOT OF MPAC/2.
041766,002476: 00,3410 22021 LXCH SR # SHIFT RIGHT 1 AND GO TO THE SQRT ROUTINE
041767,002477: 00,3411 00006 EXTEND
041768,002478: 00,3412 75011 MP HALF
041769,002479: 00,3413 52155 DXCH MPAC
041770,002480: 00,3414 56021 XCH SR
041771,002481: 00,3415 26155 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
041772,002482:
041773,002483: 00,3416 32314 ARGHI CAF SLOPEHI # ARGUMENT BETWEEN .25 AND .5. GET A
041774,002484: 00,3417 00006 EXTEND # LINEAR APPROXIMATION FOR THIS RANGE.
041775,002485: 00,3420 70154 MP MPAC
041776,002486: 00,3421 62566 AD BIASHI # X0/2 = (MPAC/2)(SLOPEHI) + BIASHI/2.
041777,002487:
041778,002488: 00,3422 54130 +4 TS BUF # X0/2 (ARGLO ENTERS HERE).
041779,002489: 00,3423 30154 CA MPAC # SINGLE-PRECISION THROUGHOUT.
041780,002490: 00,3424 22007 ZL
041781,002491: 00,3425 00006 EXTEND
041782,002492: 00,3426 10130 DV BUF # (MPAC/2)/(X0/2)
041783,002493: 00,3427 00006 EXTEND
041784,002494: 00,3430 75011 MP HALF
041785,002495: 00,3431 26130 ADS BUF # X1 = X0/2 + .5(MPAC/2)/(X0/2).
041786,002496:
041787,002497: 00,3432 00006 EXTEND
041788,002498: 00,3433 75011 MP HALF # FORM UP X1/2.
041789,002499: 00,3434 52155 DXCH MPAC # SAVE AND BRING OUT ARGUMENT.
041790,002500: 00,3435 00006 EXTEND # TAKE DP QUOTIENT WITH X1.
041791,002501: 00,3436 10130 DV BUF
041792,002502: 00,3437 54131 TS BUF +1 # SAVE MAJOR PART OF QUOTIENT.
041793,002503: 00,3440 35030 CAF ZERO # FORM MINOR PART OF QUOTIENT USING
041794,002504: 00,3441 56001 XCH L # (REMAINDER,0).
041795,002505: 00,3442 00006 EXTEND
041796,002506: 00,3443 10130 DV BUF
041797,002507: 00,3444 54001 TS L # IN PREPARATION FOR DAS.
041798,002508: 00,3445 30131 CA BUF +1
041799,002509: 00,3446 20155 DAS MPAC # X2 = X1/2 + (MPAC/2)X1
041800,002510:
041801,002511: 00,3447 00006 EXTEND # OVERFLOWS IF ARG. NEAR POSMAX.
041802,002512: 00,3450 13454 BZF TCQBNK00
041803,002513: 00,3451 35006 CAF POSMAX
041804,002514: 00,3452 54154 FIXROOT TS MPAC
041805,002515: 00,3453 54155 TS MPAC +1
041806,002516: 00,3454 00002 TCQBNK00 TC Q # RETURN TO CALLER TO UNNORMALIZE, ETC.
041807,002517:
041808,002518: 00,3455 65012 SRTEST AD QUARTER # ARGUMENT WAS LESS THAN .5, SEE IF LESS
041809,002519: 00,3456 00006 EXTEND # THAN .25.
041810,002520: 00,3457 63501 BZMF SQRTNORM # IF SO, BEGIN NORMALIZATION.
041811,002521:
041812,002522: 00,3460 52155 DXCH MPAC # IF BETWEEN .5 AND .25, SHIFT RIGHT 1 AND
041813,002523: 00,3461 22021 LXCH SR # START AT ARGLO.
041814,002524: 00,3462 00006 EXTEND
041815,002525: 00,3463 75011 MP HALF
041816,002526: 00,3464 52155 DXCH MPAC
041817,002527: 00,3465 56021 XCH SR
041818,002528: 00,3466 26155 ADS MPAC +1 # NO OVERFLOW.
041819,002529:
041820,002530: 00,3467 33007 ARGLO CAF SLOPELO # (NORMALIZED) ARGUMENT BETWEEN .125 AND
041821,002531: 00,3470 00006 EXTEND # .25
041822,002532: 00,3471 70154 MP MPAC
041823,002533: 00,3472 62270 AD BIASLO
041824,002534: 00,3473 13422 TCF ARGHI +4 # BEGIN SQUARE ROOT.
041825,002535:
041826,002536: 00,3474 00006 SQRTNM2 EXTEND # SHIFT LEFT 2 AND INCREMENT RIGHT SHIFT
041827,002537: 00,3475 30156 DCA MPAC +1 # COUNT (FOR TERMINAL UNNORMALIZATION).
041828,002538: 00,3476 20156 DAS MPAC +1
041829,002539: 00,3477 60154 AD MPAC
041830,002540: 00,3500 26154 ADS MPAC # (NO OVERFLOW).
041831,002541:
041832,002542: 00,3501 24135 SQRTNORM INCR MPTEMP # FIRST TIME THROUGH, JUST SHIFT LEFT 1
041833,002543: 00,3502 00006 EXTEND # (PUTS IN EFFECTIVE RIGHT SHIFT SINCE
041834,002544: 00,3503 30156 DCA MPAC +1 # WE WANT MPAC/2).
041835,002545: 00,3504 20156 DAS MPAC +1
041836,002546: 00,3505 60154 AD MPAC
041837,002547: 00,3506 26154 ADS MPAC # (AGAIN NO OVERFLOW).
041838,002548: 00,3507 60000 DOUBLE
041839,002549: 00,3510 54022 TS CYL
041840,002550:
041841,002551: 00,3511 10022 NORMTEST CCS CYL # SEE IF ARGUMENT NOW NORMALIZED AT
041842,002552: 00,3512 10022 CCS CYL # GREATER THAN .125.
041843,002553: 00,3513 13474 TCF SQRTNM2 # NO - SHIFT LEFT 2 MORE AND TRY AGAIN.
041844,002554: 00,3514 13416 TCF ARGHI # YES - NOW BETWEEN .5 AND .25.
041845,002555: 00,3515 13467 TCF ARGLO # ARGUMENT NOW BETWEEN .25 AND .125.
041846,002556:
041847,002557: # TRIGONOMETRIC FUNCTION PACKAGE.
041848,002558:
041849,002559: # THE FOLLOWING TRIGONOMETRIC FUNCTIONS ARE AVAILABLE AS INTERPRETIVE OPERATIONS:
041850,002560:
041851,002561: # 1. SIN COMPUTES (1/2)SINE(2 PI MPAC).
041852,002562: # 2. COS COMPUTES (1/2)COSINE(2 PI MPAC).
041853,002563:
041854,002564: # 3. ASIN COMPUTES (1/2PI)ARCSINE(2 MPAC).
041855,002565: # 4. ACOS COMPUTES (1/2PI)ARCCOSINE(2 MPAC).
041856,002566:
041857,002567: # SIN-ASIN AND COS-ACOS ARE MUTUALLY INVERSE, IE SIN(ASIN(X)) = X.
041858,002568:
041859,002569:
041860,002570: 00,3516 06677 COSINE TC BRANCH # FINDS COSINE USING THE IDENTITY
041861,002571: 00,3517 13522 TCF +3 # COS(X) = SIN(PI/2 - ABS(X)).
041862,002572: 00,3520 13525 TCF PRESINE
041863,002573: 00,3521 13525 TCF PRESINE
041864,002574:
041865,002575: 00,3522 00006 +3 EXTEND
041866,002576: 00,3523 40155 DCS MPAC
041867,002577: 00,3524 52155 DXCH MPAC
041868,002578:
041869,002579: 00,3525 35012 PRESINE CAF QUARTER # PI/2 SCALED.
041870,002580: 00,3526 26154 ADS MPAC
041871,002581:
041872,002582:
041873,002583: 00,3527 52155 SINE DXCH MPAC # DOUBLE ARGUMENT.
041874,002584: 00,3530 20001 DDOUBL
041875,002585: 00,3531 54000 OVSK # SEE IF OVERFLOW PRESENT.
041876,002586: 00,3532 13535 TCF +3 # IF NOT, ARGUMENT OK AS IS.
041877,002587:
041878,002588: 00,3533 00006 EXTEND # IF SO, WE LOST (OR GAINED) PI, SO
041879,002589: 00,3534 40001 DCOM # COMPLEMENT MPAC USING THE IDENTITY
041880,002590: # SIN(X-(+)PI) = SIN(-X).
041881,002591: 00,3535 52155 +3 DXCH MPAC
041882,002592: 00,3536 30154 CA MPAC # SEE IF ARGUMENT GREATER THAN .5 IN
041883,002593: 00,3537 60000 DOUBLE # MAGNITUDE. IF SO, REDUCE IT TO LESS THAN
041884,002594: 00,3540 54001 TS L # .5 (+-PI/2 SCALED) AS FOLLOWS:
041885,002595: 00,3541 13552 TCF SN1
041886,002596:
041887,002597: 00,3542 50000 INDEX A # IF POSITIVE, FORM PI - X, IF NEGATIVE
041888,002598: 00,3543 35010 CAF NEG1/2 +1 # USE -PI - X.
041889,002599: 00,3544 60000 DOUBLE
041890,002600: 00,3545 00006 EXTEND
041891,002601: 00,3546 60154 SU MPAC # GUARANTEED NO OVERFLOW.
041892,002602: 00,3547 54154 TS MPAC
041893,002603: 00,3550 40155 CS MPAC +1
041894,002604: 00,3551 54155 TS MPAC +1
041895,002605:
041896,002606: 00,3552 00006 SN1 EXTEND # SET UP TO EVALUATE HASTINGS POLYNOMIAL
041897,002607: 00,3553 30155 DCA MPAC
041898,002608: 00,3554 52134 DXCH BUF2
041899,002609: 00,3555 03300 TC DSQSUB # SQUARE MPAC.
041900,002610:
041901,002611: 00,3556 07176 TC POLY # EVALUATE FOURTH ORDER POLYNOMIAL.
041902,002612: 00,3557 00003 DEC 3 B-14
041903,002613: 00,3560 14441 37325 2DEC +.3926990796
041904,002614:
041905,002615: 00,3562 53250 60764 2DEC -.6459637111
041906,002616:
041907,002617: 00,3564 12146 21276 2DEC +.318758717
041908,002618:
041909,002619: 00,3566 75466 71471 2DEC -.074780249
041910,002620:
041911,002621: 00,3570 00236 32757 2DEC +.009694988
041912,002622:
041913,002623: 00,3572 32470 CAF LBUF2 # MULTIPLY BY ARGUMENT AND SHIFT LEFT 2.
041914,002624: 00,3573 07062 TC DMPSUB -1
041915,002625:
041916,002626: 00,3574 00006 EXTEND
041917,002627: 00,3575 30156 DCA MPAC +1
041918,002628: 00,3576 20156 DAS MPAC +1
041919,002629: 00,3577 60154 AD MPAC
041920,002630: 00,3600 26154 ADS MPAC # NEITHER SHIFT OVERFLOWS.
041921,002631: 00,3601 00006 EXTEND
041922,002632: 00,3602 30156 DCA MPAC +1
041923,002633: 00,3603 20156 DAS MPAC +1
041924,002634: 00,3604 60154 AD MPAC
041925,002635: 00,3605 26154 ADS MPAC
041926,002636: 00,3606 16035 TCF DANZIG
041927,002637:
041928,002638: # ARCSIN/ARCCOS ROUTINE.
041929,002639:
041930,002640: 00,3607 33630 ARCSIN CAF LASINEX # COMPUTE ARCSIN BY USING THE IDENTITY
041931,002641: 00,3610 13612 TCF +2 # ARCSIN(X) = PI/2 - ARCCOS(X).
041932,002642:
041933,002643: 00,3611 33712 ARCCOS CAF LDANZIG # (EXITS IMMEDIATELY).
041934,002644: 00,3612 54136 TS ESCAPE
041935,002645: 00,3613 06677 TC BRANCH # TEST SIGN OF INPUT.
041936,002646: 00,3614 13624 TCF ACOSST # START IMMEDIATELY IF POSITIVE.
041937,002647: 00,3615 13726 TCF ACOSZERO # ARCCOS(0) = PI/2 = .25.
041938,002648: 00,3616 00006 EXTEND # IF NEGATIVE, USE THE IDENTITY
041939,002649: 00,3617 40155 DCS MPAC # ARCCOS(X) = PI - ARCCOS(-X), FORCING
041940,002650: 00,3620 52155 DXCH MPAC # ARGUMENT POSITIVE.
041941,002651: 00,3621 33731 CAF TCSUBTR # SET EXIT TO DO ABOVE BEFORE
041942,002652: 00,3622 56136 XCH ESCAPE # ARCSIN/ARCCOS CONSIDERATIONS.
041943,002653: 00,3623 54137 TS ESCAPE2
041944,002654:
041945,002655: 00,3624 45011 ACOSST CS HALF # TEST MAGNITUDE OF INPUT.
041946,002656: 00,3625 60154 AD MPAC
041947,002657: 00,3626 10000 CCS A
041948,002658: 00,3627 13720 TCF ACOSOVF # THIS IS PROBABLY AN OVERFLOW CASE.
041949,002659:
041950,002660: 00,3630 13706 LASINEX TCF ASINEX
041951,002661:
041952,002662: 00,3631 13641 TCF ACOSST2 # NO OVERFLOW - PROCEED.
041953,002663:
041954,002664: 00,3632 10155 CCS MPAC +1 # IF MAJOR PART IS .5, CALL ANSWER 0
041955,002665: 00,3633 35030 CAF ZERO # UNLESS MINOR PART NEGATIVE.
041956,002666: 00,3634 13636 TCF ACOS=0
041957,002667:
041958,002668: 00,3635 13641 TCF ACOSST2
041959,002669:
041960,002670: 00,3636 54155 ACOS=0 TS MPAC +1
041961,002671: 00,3637 54154 TS MPAC
041962,002672: 00,3640 00136 TC ESCAPE
041963,002673:
041964,002674: 00,3641 00006 ACOSST2 EXTEND # NOW THAT ARGUMENT IS IN PROPER RANGE,
041965,002675: 00,3642 40155 DCS MPAC # BEGIN COMPUTATION. USE HASTINGS
041966,002676: 00,3643 65011 AD HALF # APPROXIMATION ARCCOS(X) = SQRT(1-X)P(X)
041967,002677: 00,3644 52155 DXCH MPAC # IN A SCALED VERSION WHERE P(X) IS A
041968,002678: 00,3645 52134 DXCH BUF2 # SEVENTH ORDER POLYNOMIAL.
041969,002679:
041970,002680: 00,3646 03343 TC SQRTSUB # RETURNS WITH NORMALIZED SQUARE ROOT.
041971,002681:
041972,002682: 00,3647 10135 CCS MPTEMP # SEE IF UN-NORMALIZATION REQUIRED.
041973,002683: 00,3650 13713 TCF ACOSSHR # IF SO.
041974,002684:
041975,002685: 00,3651 52155 ACOS3 DXCH MPAC # SET UP FOR POLYNOMIAL EVALUATION.
041976,002686: 00,3652 52134 DXCH BUF2
041977,002687: 00,3653 52155 DXCH MPAC
041978,002688:
041979,002689: 00,3654 07176 TC POLY
041980,002690: 00,3655 00006 DEC 6 B-14
041981,002691: 00,3656 13240 23630 2DEC +.353553385 # COEFFICIENTS ARE C 2(+I)/PISQRT(2) WHERE
041982,002692:
041983,002693: 00,3660 74721 47775 2DEC* -.0483017006 B+1* # I
041984,002694:
041985,002695: 00,3662 02440 20237 2DEC* +.0200273085 B+2* # WHERE C STANDS FOR ORIGINAL COEFFS.
041986,002696:
041987,002697: 00,3664 75067 70742 2DEC* -.0112931863 B+3*
041988,002698:
041989,002699: 00,3666 03436 26756 2DEC* +.00695311612 B+4*
041990,002700:
041991,002701: 00,3670 74037 57640 2DEC* -.00384617957 B+5*
041992,002702:
041993,002703: 00,3672 03046 07143 2DEC* +.001501297736 B+6*
041994,002704:
041995,002705: 00,3674 76654 42244 2DEC* -.000284160334 B+7*
041996,002706:
041997,002707:
041998,002708: 00,3676 32470 CAF LBUF2 # DO FINAL MULTIPLY AND GO TO ANY
041999,002709: 00,3677 07062 TC DMPSUB -1 # EPILOGUE SEQUENCES.
042000,002710: 00,3700 00136 TC ESCAPE
042001,002711:
042002,002712: 00,3701 00006 SUBTR EXTEND # EPILOGUE FOR NEGATIVE INPUTS TO ARCCOS.
042003,002713: 00,3702 40155 DCS MPAC
042004,002714: 00,3703 65011 AD HALF # FORMS PI - ARCCOS(-X) = ARCCOS(X).
042005,002715: 00,3704 52155 DXCH MPAC
042006,002716: 00,3705 00137 TC ESCAPE2 # GO TO POSSIBLE ARCSIN EPILOGUE.
042007,002717:
042008,002718: 00,3706 00006 ASINEX EXTEND
042009,002719: 00,3707 40155 DCS MPAC # ARCSIN EPILOGUE - GET ARCSIN(X)
042010,002720: 00,3710 65012 AD QUARTER # = PI/2 - ARCCOS(X).
042011,002721: 00,3711 52155 DXCH MPAC
042012,002722: 00,3712 16035 LDANZIG TCF DANZIG
042013,002723:
042014,002724: 00,3713 50000 ACOSSHR INDEX A # THE SHIFT RIGHT IS LESS THAN 14 SINCE
042015,002725: 00,3714 35011 CAF BIT14 # THE INPUT WAS NON-ZERO DP.
042016,002726: 00,3715 54135 TS MPTEMP
042017,002727: 00,3716 02073 TC VSHRRND # DP SHIFT RIGHT AND ROUND.
042018,002728: 00,3717 13651 TCF ACOS3 # PROCEED.
042019,002729:
042020,002730: 00,3720 00006 ACOSOVF EXTEND # IF MAJOR PART WAS ONLY 1 MORE THAN .5,
042021,002731: 00,3721 13636 BZF ACOS=0 # CALL ANSWER ZERO.
042022,002732:
This was an ABORT before Sundance 306. |
042024,002734: 00,3722 05651 ACOSABRT TC ALARM
042025,002735: 00,3723 01301 OCT 1301
042026,002736:
The following two instructions were very likely added in Sundance 306 (based on offsets observed from module B6). |
042029,002739: 00,3724 35030 CAF ZERO
042030,002740: 00,3725 13636 TCF ACOS=0
042031,002741:
042032,002742: 00,3726 35012 ACOSZERO CAF QUARTER # ACOS(0) = PI/2.
042033,002743: 00,3727 13637 TCF ACOS=0 +1 # SET MPAC AND EXIT VIA ESCAPE.
042034,002744:
042035,002745: 00,3730 77763 NEG12 DEC -12 B-14
042036,002746: 00,3731 13701 TCSUBTR TCF SUBTR
042037,002747:
042038,002748: # THE FOLLOWING INSTRUCTIONS ARE AVAILABLE FOR SETTING, MODIFYING, AND BRANCHING ON INDEX REGISTERS:
042039,002749:
042040,002750: # 1. AXT ADDRESS TO INDEX TRUE.
042041,002751: # 1. AXC ADDRESS TO INDEX COMPLEMENTED.
042042,002752: # 3. LXA LOAD INDEX FROM ERASABLE.
042043,002753: # 4. LXC LOAD INDEX COMPLEMENTED FROM ERASABLE.
042044,002754: # 5. SXA STORE INDEX IN ERASABLE.
042045,002755: # 6. XCHX EXCHANGE INDEX REIGSTER WITH ERASABLE.
042046,002756:
042047,002757: # 7. INCR INCREMENT INDEX REGISTER.
042048,002758: # 8. XAD ERASABLE ADD TO INDEX REGISTER.
042049,002759: # 9. XSU ERASABLE SUBTRACT FROM INDEX REGISTER.
042050,002760:
042051,002761: # 10. TIX BRANCH ON INDEX REGISTER AND DECREMENT.
042052,002762:
042053,002763: 01,2165 BANK 01
042054,002764:
042055,002765: 01,2165 COUNT* $$/INTER
042056,002766: 01,2165 02262 AXT TC TAGSUB # SELECT APPROPRIATE INDEX REGISTER.
042057,002767: 01,2166 30117 CA POLISH
042058,002768: 01,2167 50130 XSTORE INDEX INDEXLOC # CONTAINS C(FIXLOC) OR C(FIXLOC)+1.
042059,002769: 01,2170 54046 TS X1
042060,002770: 01,2171 16035 TCF DANZIG
042061,002771:
042062,002772: 01,2172 02262 AXC TC TAGSUB
042063,002773: 01,2173 40117 CS POLISH
042064,002774: 01,2174 02167 TC XSTORE
042065,002775:
042066,002776: 01,2175 02250 LXA TC 15ADRERS # LOAD INDEX REGISTER FROM ERASABLE.
042067,002777: 01,2176 50117 INDEX POLISH
042068,002778: 01,2177 30000 CA 0
042069,002779: 01,2200 12167 TCF XSTORE
042070,002780:
042071,002781: 01,2201 02250 LXC TC 15ADRERS # LOAD NDX REG FROM ERASABLE COMPLEMENTED.
042072,002782: 01,2202 50117 INDEX POLISH
042073,002783: 01,2203 40000 CS 0
042074,002784: 01,2204 12167 TCF XSTORE
042075,002785:
042076,002786: 01,2205 02250 SXA TC 15ADRERS # STORE INDEX REGISTER IN ERASABLE.
042077,002787: 01,2206 50130 INDEX INDEXLOC
042078,002788: 01,2207 30046 CA X1
042079,002789: 01,2210 50117 MSTORE1 INDEX POLISH
042080,002790: 01,2211 54000 TS 0
042081,002791: 01,2212 16035 TCF DANZIG
042082,002792:
042083,002793: 01,2213 02250 XCHX TC 15ADRERS # EXCHANGE INDEX REGISTER WITH ERASABLE.
042084,002794: 01,2214 50117 INDEX POLISH
042085,002795: 01,2215 30000 CA 0
042086,002796: 01,2216 50130 INDEX INDEXLOC
042087,002797: 01,2217 56046 XCH X1
042088,002798: 01,2220 12210 TCF MSTORE1
042089,002799:
042090,002800: 01,2221 02250 XAD TC 15ADRERS # ADD ERASABLE TO INDEX REGISTER.
042091,002801: 01,2222 50117 INDEX POLISH
042092,002802: 01,2223 30000 CA 0
042093,002803: 01,2224 50130 XAD2 INDEX INDEXLOC
042094,002804: 01,2225 26046 ADS X1 # IGNORING OVERFLOWS.
042095,002805: 01,2226 16035 TCF DANZIG
042096,002806:
042097,002807: 01,2227 02262 INCR TC TAGSUB # INCREMENT INDEX REGISTER.
042098,002808: 01,2230 30117 CA POLISH
042099,002809: 01,2231 12224 TCF XAD2
042100,002810:
042101,002811: 01,2232 02250 XSU TC 15ADRERS # SUBTRACT ERASABLE FROM INDEX REGISTER.
042102,002812: 01,2233 50117 INDEX POLISH
042103,002813: 01,2234 40000 CS 0
042104,002814: 01,2235 12224 TCF XAD2
042105,002815:
042106,002816: 01,2236 02262 TIX TC TAGSUB # BRANCH AND DECREMENT ON INDEX.
042107,002817: 01,2237 50130 INDEX INDEXLOC
042108,002818: 01,2240 40050 CS S1
042109,002819: 01,2241 50130 INDEX INDEXLOC
042110,002820: 01,2242 60046 AD X1
042111,002821: 01,2243 00006 EXTEND # NO OPERATION IF DECREMENTED INDEX IS
042112,002822: 01,2244 66035 BZMF DANZIG # NEGATIVE OR ZERO.
042113,002823:
042114,002824: 01,2245 50130 DOTIXBR INDEX INDEXLOC
042115,002825: 01,2246 56046 XCH X1 # IGNORING OVERFLOWS.
042116,002826:
042117,002827: 01,2247 16622 TCF GOTO # DO THE BRANCH USING THE CADR IN POLISH.
042118,002828:
042119,002829: # SUBROUTINE TO CONVERT AN ERASABLE ADDRESS (11 BITS) TO AN EBANK SETTING AND SUBADDRESS.
042120,002830:
042121,002831: 01,2250 40117 15ADRERS CS POLISH
042122,002832: 01,2251 65042 AD DEC45
042123,002833: 01,2252 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
042124,002834: 01,2253 30120 CA FIXLOC # YES. ADD FIXLOC. EBANK OK AS IS.
042125,002835: 01,2254 12261 TCF +5
042126,002836:
042127,002837: 01,2255 35057 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
042128,002838: 01,2256 56117 XCH POLISH
042129,002839: 01,2257 54003 TS EBANK
042130,002840: 01,2260 74371 MASK LOW8
042131,002841: 01,2261 26117 +5 ADS POLISH # FALL INTO TAGSUB, AND RETURN VIA Q.
042132,002842:
042133,002843: # SUBROUTINE WHICH SETS THE ADDRESS OF THE SPECIFIED INDEX IN INDEXLOC. (ACTUALLY, THE ADDRESS -38D.)
042134,002844:
042135,002845: 01,2262 30120 TAGSUB CA FIXLOC
042136,002846: 01,2263 54130 TS INDEXLOC
042137,002847:
042138,002848: 01,2264 10020 CCS CYR # BIT 15 SPECIFIES INDEX.
042139,002849: 01,2265 24130 INCR INDEXLOC # 0 MEANS USE X2.
042140,002850: 01,2266 00002 TC Q
042141,002851: 01,2267 00002 TC Q # 1 FOR X1.
042142,002852:
042143,002853: # MISCELLANEOUS OPERATION CODES WITH DIRECT ADDRESSES. INCLUDED HERE ARE:
042144,002854:
042145,002855: # 1. ITA STORE QPRET (RETURN ADDRESS) IN ERASABLE.
042146,002856: # 2. CALL CALL A SUBROUTINE, LEAVING RETURN IN QPRET.
042147,002857: # 3. RTB RETURN TO BASIC LANGUAGE AT THE GIVEN ADDRESS.
042148,002858: # 4. BHIZ BRANCH IF THE HIGH ORDER OF MPAC IS ZERO (SINGLE PRECISION).
042149,002859: # 5. BOV BRANCH ON OVERFLOW.
042150,002860: # 6. GOTO SIMPLE SEQUENCE CHANGE.
042151,002861:
042152,002862: 01,2270 10020 RTB/BHIZ CCS CYR
042153,002863: 01,2271 30117 RTB CA POLISH
042154,002864: 01,2272 14677 TCF BANKJUMP # CALL BASIC ROUTINE.
042155,002865:
042156,002866: 01,2273 10154 BHIZ CCS MPAC
042157,002867: 01,2274 16035 TCF DANZIG
042158,002868: 01,2275 16622 TCF GOTO
042159,002869: 01,2276 16035 TCF DANZIG
042160,002870: 01,2277 16622 TCF GOTO
042161,002871:
042162,002872: 01,2300 10121 BOV(B) CCS OVFIND # BRANCH ON OVERFLOW TO BASIC OR INTERP.
042163,002873: 01,2301 12303 TCF +2
042164,002874: 01,2302 16035 TCF DANZIG
042165,002875: 01,2303 54121 TS OVFIND
042166,002876: 01,2304 10020 CCS CYR
042167,002877: 01,2305 12271 TCF RTB # IF BASIC.
042168,002878: 01,2306 00360 B5TOB8 OCT 360
042169,002879: 01,2307 16622 TCF GOTO
042170,002880:
042171,002881: 01,2310 10020 BZE/GOTO CCS CYR # SEE WHICH OP-CODE IS DESIRED.
042172,002882: 01,2311 06677 TC BRANCH # DO BZE.
042173,002883: 01,2312 16035 TCF DANZIG
042174,002884: 01,2313 16622 TCF GOTO # DO GOTO.
042175,002885: 01,2314 16035 TCF DANZIG
042176,002886:
042177,002887: 01,2315 10020 BPL/BMN CCS CYR
042178,002888: 01,2316 12324 TCF BPL
042179,002889: 01,2317 12000 5B10 DEC 5 B+10 # SHIFTS OP CODE IN SWITCH INSTRUCTION ADR
042180,002890:
042181,002891: 01,2320 06677 TC BRANCH # DO BMN.
042182,002892: 01,2321 16035 TCF DANZIG
042183,002893: 01,2322 16035 TCF DANZIG
042184,002894: 01,2323 16622 TCF GOTO # ONLY IF NNZ.
042185,002895:
042186,002896: 01,2324 06677 BPL TC BRANCH
042187,002897: 01,2325 16622 TCF GOTO # IF POSITIVE OR ZERO.
042188,002898: 01,2326 16622 TCF GOTO
042189,002899: 01,2327 16035 TCF DANZIG
042190,002900:
042191,002901: 01,2330 10020 CALL/ITA CCS CYR
042192,002902: 01,2331 16614 TCF CALL
042193,002903:
042194,002904: 01,2332 05726 TC CCSHOLE
042195,002905: 01,2333 02250 TC 15ADRERS # STORE QPRET. (TAGSUB AFTER 15ADRERS IS
042196,002906: 01,2334 50120 INDEX FIXLOC # SLOW IN THIS CASE, BUT SAVES STORAGE.)
042197,002907: 01,2335 30052 CA QPRET
042198,002908: 01,2336 12210 TCF MSTORE1
042199,002909:
042200,002910: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR ALTERING AND TESTING INTERPRETIVE SWITCHES:
042201,002911:
042202,002912: # 00 BONSET SET A SWITCH AND DO A GOTO IF IT WAS ON.
042203,002913: # 01 SETGO SET A SWITCH AND DO A GOTO.
042204,002914: # 02 BOFSET SET A SWITCH AND DOA GOTO IF IT WAS OFF
042205,002915: # 03 SET SET A SWITCH.
042206,002916:
042207,002917: # 04 BONINV INVERT A SWITCH AND BRANCH IF IT WAS ON.
042208,002918: # 05 INVGO INVERT A SWITCH AND DO A GOTO.
042209,002919: # 06 BOFINV INVERT A SWITCH AND BRANCH IF IT WAS OFF
042210,002920: # 07 INVERT INVERT A SWITCH.
042211,002921:
042212,002922: # 10 BONCLR CLEAR A SWITCH AND BRANCH IF IT WAS ON.
042213,002923: # 11 CLRGO CLEAR A SWITCH AND DO A GOTO.
042214,002924: # 12 BOFCLR CLEAR A SWITCH AND BRANCH IF IT WAS OFF.
042215,002925: # 13 CLEAR CLEAR A SWITCH.
042216,002926:
042217,002927: # 14 BON BRANCH IF A SWITCH WAS ON.
042218,002928: # 16 BOFF BRANCH IF A SWITCH WAS OFF.
042219,002929:
042220,002930:
042221,002931: # THE ADDRESS SUPPLIED WITH THE SWITCH INSTRUCTION IS INTERPRETED AS FOLLOWS:
042222,002932:
042223,002933: # BITS 1-4 SWITCH BIT NUMBER (1-15).
042224,002934: # BITS 5-8 SWITCH OPERATION NUMBER.
042225,002935: # BITS 9- SWITCH WORD NUMBER (UP TO 64 SWITCH WORDS).
042226,002936:
042227,002937: # THE ADDRESS ITSELF IS MADE UP BY THE YUL SYSTEM ASSEMBLER. THE BRANCH INSTRUCTIONS REQUIRE TWO
042228,002938: # ADDRESSES, THE SECOND TAKEN AS THE DIRECT (OR INDIRECT IF IN ERASABLE) ADDRESS OF THE BRANCH.
042229,002939:
042230,002940:
042231,002941: 01,2337 35035 SWITCHES CAF LOW4 # LEAVE THE SWITCH BIT IN SWBIT .
042232,002942: 01,2340 70117 MASK POLISH
042233,002943: 01,2341 50000 INDEX A
042234,002944: 01,2342 35010 CAF BIT15 # (NUMBER FROM LEFT TO RIGHT.)
042235,002945: 01,2343 54131 TS SWBIT
042236,002946:
042237,002947: 01,2344 35020 CAF BIT7 # LEAVE THE SWITCH NUMBER IN SWWORD.
042238,002948: 01,2345 00006 EXTEND
042239,002949: 01,2346 70117 MP POLISH
042240,002950: 01,2347 54130 TS SWWORD
042241,002951:
042242,002952: 01,2350 00004 INHINT # DURING SWITCH CHANGE SO RUPT CAN USE TOO
042243,002953: 01,2351 50000 INDEX A # LEAVE THE SWITCH WORD ITSELF IN L.
042244,002954: 01,2352 30074 CA STATE
042245,002955: 01,2353 54002 TS Q # Q WILL BE USED AS A CHANNEL.
042246,002956: 01,2354 35014 CAF BIT11
042247,002957: 01,2355 00006 EXTEND # DISPATCH SWITCH BIT OPERATION AS IN BITS
042248,002958: 01,2356 70117 MP POLISH # 7-8 OF POLISH.
042249,002959: 01,2357 72417 MASK B3TOB4 # GETS 4X2-BIT CODE.
042250,002960: 01,2360 50000 INDEX A
042251,002961: 01,2361 12362 TCF +1
042252,002962:
042253,002963: 01,2362 30131 +1 CA SWBIT # 00 - SET SWITCH IN QUESTION.
042254,002964: 01,2363 00006 EXTEND
042255,002965: 01,2364 04002 ROR QCHAN
042256,002966: 01,2365 12374 TCF SWSTORE
042257,002967:
042258,002968: 01,2366 30131 +5 CA SWBIT # 01 - INVERT SWITCH.
042259,002969: 01,2367 00006 EXTEND
042260,002970: 01,2370 06002 RXOR QCHAN
042261,002971: 01,2371 12374 TCF SWSTORE
042262,002972:
042263,002973: 01,2372 40131 +9D CS SWBIT # 10 - CLEAR.
042264,002974: 01,2373 70002 MASK Q
042265,002975: 01,2374 50130 SWSTORE INDEX SWWORD
042266,002976: 01,2375 54074 TS STATE # NEW SWITCH WORD.
042267,002977:
042268,002978: 01,2376 00003 +13D RELINT # 11 - NOOP.
042269,002979: 01,2377 35012 CAF BIT13
042270,002980: 01,2400 00006 EXTEND # DISPATCH SEQUCE CHANGING OR BRANCHING
042271,002981: 01,2401 70117 MP POLISH # CODE.
042272,002982: 01,2402 72417 MASK B3TOB4
042273,002983: 01,2403 50000 INDEX A
042274,002984: 01,2404 12405 TCF +1 # ORIGINALLY STORED IN BITS 5-6.
042275,002985:
042276,002986: 01,2405 40002 +1 CS Q # 00 - BRANCH IF ON.
042277,002987: 01,2406 70131 TEST MASK SWBIT
042278,002988: 01,2407 10000 CCS A
042279,002989: 01,2410 12420 TCF SWSKIP
042280,002990:
042281,002991: 01,2411 16671 +5 TCF SWBRANCH # 01 - GO TO.
042282,002992:
042283,002993: 01,2412 12420 TCF SWSKIP # HERE ONLY ON BIT 15.
042284,002994:
042285,002995: 01,2413 05726 TC CCSHOLE
042286,002996: 01,2414 05726 TC CCSHOLE
042287,002997:
042288,002998: 01,2415 30002 +9D CA Q # 10 - BRANCH IF OFF.
042289,002999: 01,2416 12406 TCF TEST
042290,003000:
042291,003001: 01,2417 00014 B3TOB4 OCT 0014
042292,003002: 01,2420 24164 SWSKIP INCR LOC
042293,003003:
042294,003004: 01,2421 01,2337 SW/ EQUALS SWITCHES
042295,003005:
042296,003006: 01,2421 16035 +13D TCF DANZIG # 11 - NOOP.
End of include-file INTERPRETER.agc. Parent file is MAIN.agc