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