Source Code
![]() |
These source-code files were transcribed from scans made from Don Eyles's personal
copy of BURST120 (SUNBURST 120). They were scanned at archive.org's Boston
facility, and the scanning was sponsored by Mike Stewart. The code was transcribed
from these scans by a team of volunteers who are referenced in the program
comments. Comments from the original source code are in ALL-CAPS, whereas
comments added later in transcription are in Mixed-Case. In some cases, where
similar code blocks exist in previously-transcribed AGC programs (primarily
Luminary 99, from Apollo 11) those code blocks were used as a starting point and
then corrected to agree with the BURST120 scans. The full scans are available
at the Virtual AGC
project's collection at archive.org, while more-convenient reduced-size (but reduced-quality)
images are available at
the main Virtual AGC website. Report any errors noted by creating an
issue report at the Virtual AGC
project's GitHub repository. Notations on the program listing read, in part:YUL SYSTEM FOR AGC: REVISION 0 OF PROGRAM BURST120 BY NASA 2021106-031 DEC 7, 1967 THIS LISTING IS A COPY OF A VERSION OF THE PROGRAM INTENDED FOR USE IN THE ON-BOARD PRIMARY GUIDANCE COMPUTER IN THE UNMANNED FLIGHT OF APOLLO LUNAR MODULE 1 --- THE AS206 MISSION.Note that the date is the date of the printout, not the date of the program revision. |
040861,000002: ## Copyright: Public domain.
040862,000003: ## Filename: INTERPRETER.agc
040863,000004: ## Purpose: A module for revision 0 of BURST120 (Sunburst). It
040864,000005: ## is part of the source code for the Lunar Module's
040865,000006: ## (LM) Apollo Guidance Computer (AGC) for Apollo 5.
040866,000007: ## Assembler: yaYUL
040867,000008: ## Contact: Ron Burkey <info@sandroid.org>.
040868,000009: ## Website: www.ibiblio.org/apollo/index.html
040869,000010: ## Mod history: 2016-09-30 RSB Created draft version.
040870,000011: ## 2016-10-14 MAS Began.
040871,000012: ## 2016-10-14 MAS Completed transcription.
040872,000013: ## 2016-10-31 RSB Typos.
040873,000014: ## 2016-11-01 RSB More typos.
040874,000015: ## 2016-12-06 RSB Comments proofed using octopus/ProoferComments,
040875,000016: ## changes made.
040876,000017: ## 2017-03-15 RSB Comment-text fixes identified in 5-way
040877,000018: ## side-by-side diff of Luminary 69/99/116/131/210.
040878,000019:
![]() |
Page 953 |
040880,000021: # SECTION 1 DISPATCHER
040881,000022:
040882,000023: # ENTRY TO THE INTERPRETER. INTPRET SETS LOC TO THE FIRST INSTRUCTION, BANKSET TO THE BBANK OF THE
040883,000024: # OBJECT INTERPRETIVE PROGRAM, AND INTBIT15 TO THE BIT15 CONTENTS OF FBANK. INTERPRETIVE PROGRAMS MAY BE IN
040884,000025: # VIRTUALLY ALL BANKS PRESENT UNDER ANY SUPER-BANK SETTING, WITH THE RESTRICTION THAT PROGRAMS IN HIGH BANKS
040885,000026: # (BIT15 OF FBANK = 1) DO NOT REFER TO LOWBANKS, AND VICE-VERSA. THE INTERPRETER DOES NOT SWITCH SUPERBANKS.
040886,000027: # E-BANK SWITCHING OCCURS WHENEVER GENERAL ERASABLE (100 - 3777) IS ADDRESSED.
040887,000028:
040888,000029:
040889,000030: 6112 BLOCK 03
040890,000031:
040891,000032: 6112 00006 INTPRET EXTEND # SET LOC TO THE WORD FOLLOWING THE TC.
040892,000033: 6113 22154 QXCH LOC
040893,000034:
040894,000035: 6114 30006 +2 CA BBANK # INTERPRETIVE BRANCHES FINISH HERE.
040895,000036: 6115 54155 TS BANKSET
040896,000037: 6116 77745 MASK BIT15 # GET 15TH BIT FOR INDEXABLE ADDRESSES.
040897,000038: 6117 54105 TS INTBIT15
040898,000039:
040899,000040: 6120 54023 TS EDOP # MAKE SURE NO INSTRUCTIONS LEFT OVER
040900,000041:
040901,000042: 6121 16134 TCF NEWOPS # PICK UP OP CODE PAIR AND BEGIN.
040902,000043:
040903,000044:
040904,000045: 6122 22006 INTRSM LXCH BBANK # RESUME SUSPENDED INTERPRETIVE JOB
040905,000046: 6123 16114 TCF INTPRET +2
040906,000047:
![]() |
Page 954 |
040908,000049: # AT THE END OF MOST INSTRUCTIONS, CONTROL IS GIVEN TO DANZIG TO DISPATCH THE NEXT OPERATION.
040909,000050:
040910,000051: 6124 54153 NEWMODE TS MODE # PROLOGUE FOR MODE-CHANGING INSTRUCTIONS.
040911,000052:
040912,000053: 6125 30155 DANZIG CA BANKSET # SET BBANK BEFORE TESTING NEWJOB SO THAT
040913,000054: 6126 54006 TS BBANK # IT MAY BE SAVED DIRECTLY BY CHANJOB.
040914,000055:
040915,000056: 6127 10023 NOIBNKSW CCS EDOP # SEE IF AN ORDER CODE IS LEFT OVER FROM
040916,000057: 6130 16143 TCF OPJUMP # THE LAST PAIR RETRIEVED. IF SO, EXECUTE.
040917,000058: # EDOP IS SET TO ZERO ON ITS RE-EDITING.
040918,000059:
040919,000060: 6131 10067 CCS NEWJOB # SEE IF A JOB OF HIGHER PRIORITY IS
040920,000061: 6132 15540 TCF CHANG2 # PRESENT, AND IF SO, CHANGE JOBS.
040921,000062:
040922,000063: 6133 24154 INCR LOC # ADVANCE THE LOCATION COUNTER.
040923,000064: # ITRACE (1) REFERS TO "NEWOPS".
040924,000065: 6134 50154 NEWOPS INDEX LOC # ENTRY TO BEGIN BY PICKING OP CODE PAIR.
040925,000066: 6135 30000 CA 0 # MAY BE AN OPCODE PAIR OR A STORE CODE.
040926,000067: 6136 10000 CCS A # TEST SIGN AND GET DABS(A).
040927,000068: 6137 16431 TCF DOSTORE # PROCESS STORE CODE.
040928,000069:
040929,000070: 6140 04736 TC CCSHOLE # TO CATCH SOME TASK USERS OF INTERPRETER.
040930,000071:
040931,000072: 6141 54023 TS EDOP # OP CODE PAIR. LEAVE THE OTHER IN EDOP
040932,000073: 6142 75342 MASK LOW7 # WHERE CCS EDOP WILL HONOR IT NEXT.
040933,000074:
040934,000075: 6143 54020 OPJUMP TS CYR # LOWWD ENTERS HERE IF A RIGHT-HAND OP
040935,000076: 6144 10020 CCS CYR # CODE IS TO BE PROCESSED. TEST PREFICES.
040936,000077: 6145 16313 TCF OPJUMP2 # TEST SECOND PREFIX BIT.
040937,000078:
040938,000079: 6146 17021 TCF EXIT # +0 OP CODE IS EXIT.
040939,000080:
![]() |
Page 955 |
040941,000082: # PROCESS ADDRESSES WHICH MAY BE DIRECT, INDEXED, OR REFERENCE THE PUSHDOWN LIST.
040942,000083:
040943,000084: 6147 77763 ADDRESS MASK BIT1 # SEE IF ADDRESS IS INDEXED. CYR CONTAINED
040944,000085: 6150 10000 CCS A # 400XX, SO BIT 1 IS NOW AS IT WAS IN CYR.
040945,000086: 6151 16212 TCF INDEX # FORM INDEXED ADDRESS.
040946,000087:
040947,000088: 6152 50154 DIRADRES INDEX LOC # LOOK AHEAD TO NEXT WORD TO SEE IF
040948,000089: 6153 40001 OCT40001 CS 1 # ADDRESS IS GIVEN.
040949,000090: 6154 10000 CCS A
040950,000091: 6155 16261 TCF PUSHUP # IF NOT.
040951,000092:
040952,000093: 6156 77773 NEG4 DEC -4 B-14
040953,000094:
040954,000095: 6157 24154 INCR LOC # IF SO, TO SHOW WE PICKED UP A WORD.
040955,000096: 6160 54106 TS ADDRWD
040956,000097:
![]() |
Page 956 |
040958,000099: # FINAL DIGESTION OF DIRECT ADDRESSES OF OP CODES WITH 01 PREFIX IS DONE HERE. IN EACH CASE, THE
040959,000100: # REQUIRED 12-BIT SUB-ADDRESS IS LEFT IN ADDRWD, WITH ANY REQUIRED E OR F BANK SWITCHING DONE. ADDRESSES LESS
040960,000101: # 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.
040961,000102:
040962,000103:
040963,000104: 6161 66315 AD -ENDVAC # SEE IF ADDRESS RELATIVE TO WORK AREA.
040964,000105: 6162 10000 CCS A
040965,000106: 6163 66342 AD -ENDERAS # IF NOT, SEE IF IN GENERAL ERASABLE.
040966,000107: 6164 16171 TCF IERASTST
040967,000108:
040968,000109: 6165 30110 NETZERO CA FIXLOC # IF SO, LEAVE THE MODIFIED ADDRESS IN
040969,000110: 6166 26106 ADS ADDRWD # ADDRWD AND DISPATCH.
040970,000111: 6167 50020 ITR15 INDEX CYR # THIS INDEX MAKES THE NEXT INSTRUCTION
040971,000112: 6170 76342 7 INDJUMP -1 # TCF INDJUMP + OP, EDITING CYR.
040972,000113:
040973,000114: 6171 00006 IERASTST EXTEND
040974,000115: 6172 66202 BZMF GEADDR # GO PROCESS GENERAL-ERASABLE ADDRESS.
040975,000116:
040976,000117: 6173 75337 MASK LOW10 # FIXED BANK ADDRESS. RESTORE AND ADD B15.
040977,000118: 6174 65337 AD LOW10 # SWITCH BANKS AND LEAVE SUBADDRESS IN
040978,000119: 6175 56106 XCH ADDRWD # ADDRWD FOR OPERAND RETRIEVAL. (THIS
040979,000120: 6176 60105 AD INTBIT15 # METHOD PRECLUDES USE OF THE LAST
040980,000121: 6177 54004 TS FBANK # LOCATION IN EACH FBANK.)
040981,000122: 6200 50020 ITR12 INDEX CYR
040982,000123: 6201 76342 7 INDJUMP -1
040983,000124:
040984,000125: 6202 74564 GEADDR MASK LOW8
040985,000126: 6203 65352 AD OCT1400
040986,000127: 6204 56106 XCH ADDRWD
040987,000128: 6205 54003 TS EBANK
040988,000129: 6206 50020 ITR10 INDEX CYR
040989,000130: 6207 76342 7 INDJUMP -1
040990,000131:
![]() |
Page 957 |
040992,000133: # THE FOLLOWING ROUTINE PROCESSES INTERPRETIVE INDEXED ADDRESSES. AN INTERPRETER INDEX REGISTER MAY
040993,000134: # CONTAIN THE ADDRESS OF ANY ERASABLE REGISTER (0-42 BEING RELATIVE TO THE VAC AREA) OR ANY INTERPRETIVE PROGRAM
040994,000135: # BANK, OR ANY INTEGER IN THAT RANGE.
040995,000136:
040996,000137: 6210 35346 DODLOAD* CAF DLOAD* # STODL* COMES HERE TO PROCESS LOAD ADR.
040997,000138: 6211 54020 TS CYR # (STOVL* ENTERS HERE).
040998,000139:
040999,000140: 6212 30110 INDEX CA FIXLOC # SET UP INDEX LOCATION.
041000,000141: 6213 54120 TS INDEXLOC
041001,000142: 6214 24154 INCR LOC # (ADDRESS ALWAYS GIVEN).
041002,000143: 6215 50154 INDEX LOC
041003,000144: 6216 40000 CS 0
041004,000145: 6217 10000 CCS A # INDEX 2 IF ADDRESS STORED COMPLEMENTED.
041005,000146: 6220 24120 INCR INDEXLOC
041006,000147: 6221 16222 NOOP
041007,000148:
041008,000149: 6222 54106 TS ADDRWD # 14 BIT ADDRESS TO ADDRWD.
041009,000150: 6223 75351 MASK HIGH4 # IF ADDRESS GREATER THAN 2K, ADD INTBIT15
041010,000151: 6224 00006 EXTEND
041011,000152: 6225 16230 BZF INDEX2
041012,000153: 6226 30105 CA INTBIT15
041013,000154: 6227 26106 ADS ADDRWD
041014,000155:
041015,000156: 6230 50120 INDEX2 INDEX INDEXLOC
041016,000157: 6231 40046 CS X1
041017,000158: 6232 26106 ADS ADDRWD # DO AUGMENT, IGNORING AND CORRECTING OVF.
041018,000159:
041019,000160: 6233 76340 MASK HIGH9 # SEE IF ADDRESS IS IN WORK AREA.
041020,000161: 6234 00006 EXTEND
041021,000162: 6235 16250 BZF INDWORK
041022,000163: 6236 75351 MASK HIGH4 # SEE IF IN FIXED BANK.
041023,000164: 6237 00006 EXTEND
041024,000165: 6240 16252 BZF INDERASE
041025,000166:
041026,000167: 6241 30106 CA ADDRWD # IN FIXED - SWITCH BANKS AND CREATE
041027,000168: 6242 54004 TS FBANK # SUB-ADDRESS.
041028,000169: 6243 75337 MASK LOW10
041029,000170: 6244 67751 AD 2K
041030,000171: 6245 54106 TS ADDRWD
041031,000172: 6246 50020 ITR11 INDEX CYR
041032,000173: 6247 36342 3 INDJUMP -1
041033,000174:
041034,000175: 6250 30110 INDWORK CA FIXLOC # MAKE ADDRWD RELATIVE TO WORK AREA.
041035,000176: 6251 16256 TCF ITR13 -1
041036,000177:
041037,000178: 6252 35352 INDERASE CA OCT1400
041038,000179: 6253 56106 XCH ADDRWD
041039,000180: 6254 54003 TS EBANK
041040,000181: 6255 74564 MASK LOW8
041041,000182: 6256 26106 -1 ADS ADDRWD
![]() |
Page 958 |
041043,000184: 6257 50020 ITR13 INDEX CYR
041044,000185: 6260 36342 3 INDJUMP -1
041045,000186:
![]() |
Page 959 |
041047,000188: # PUSH-UP ROUTINES. WHEN NO OPERAND ADDRESS IS GIVEN, THE APPROPRIATE OPERAND IS TAKEN FROM THE PUSH-DOWN
041048,000189: # LIST. IN MOST CASES THE MODE OF THE RESULT (VECTOR OR SCALAR) OF THE LAST ARITHMETIC OPERATION PERFORMED
041049,000190: # IS THE SAME AS THE TYPE OF OPERAND DESIRED (ALL ADD/SUBTRACT ETC.). EXCEPTIONS TO THIS GENERAL RULE ARE LISTED
041050,000191: # BELOW (NOTE THAT IN EVERY CASE THE MODE REGISTER IS LEFT INTACT):
041051,000192:
041052,000193: # 1. VXSC AND V/SC WANT THE OPPOSITE TYPE OF OPERAND, E.G., IF THE LAST OPERATION YIELDED A VECTOR
041053,000194: # RESULT, VXSC WANTS A SCALAR.
041054,000195:
041055,000196: # 2. THE LOAD CODES SHOULD LOAD THE ACCUMULATOR INDEPENDENT OF THE RESULT OF THE LAST OPERATION. THIS
041056,000197: # INCLUDES VLOAD, DLOAD, TLOAD, PDDL, AND PDVL (NO PUSHUP WITH SLOAD).
041057,000198:
041058,000199: # 3. SOME ARITHMETIC OPERATIONS REQUIRE A STANDARD TYPE OF OPERAND REGARDLESS OF THE PREVIOUS OPERATION.
041059,000200: # THIS INCLUDES SIGN WANTING DP AND TAD REQUIRING TP.
041060,000201:
041061,000202: 6261 34565 PUSHUP CAF OCT23 # IF THE LOW 5 BITS OF CYR ARE LESS THAN
041062,000203: 6262 70020 MASK CYR # 20, THIS OP REQUIRES SPECIAL ATTENTION.
041063,000204: 6263 66266 AD -OCT10 # (NO -0).
041064,000205: 6264 10000 CCS A
041065,000206: 6265 16277 TCF REGUP # FOR ALL CODES GREATER THAN OCT 7.
041066,000207:
041067,000208: 6266 77767 -OCT10 OCT -10
041068,000209:
041069,000210: 6267 66156 AD NEG4 # WE NOW HAVE 7 - OP CODE(MOD4). SEE IF
041070,000211: 6270 10000 CCS A # THE OP CODE (MOD4) IS THREE (REVERSE).
041071,000212: 6271 50000 INDEX A # NO - THE MODE IS DEFINITE. PICK UP THE
041072,000213: 6272 46310 CS NO.WDS
041073,000214: 6273 16301 TCF REGUP +2
041074,000215:
041075,000216: 6274 50153 INDEX MODE # FOR VXSC AND V/SC WE WANT THE REQUIRED
041076,000217: 6275 46306 CS REVCNT # PUSHLOC DECREMENT WITHOUT CHANGING THE
041077,000218: 6276 16301 TCF REGUP +2 # MODE AT THIS TIME.
041078,000219:
041079,000220: 6277 50153 REGUP INDEX MODE # MOST ALL OP CODES PUSHUP HERE.
041080,000221: 6300 46310 CS NO.WDS
041081,000222: 6301 26156 +2 ADS PUSHLOC
041082,000223: 6302 54106 TS ADDRWD
041083,000224: 6303 50020 ITR14 INDEX CYR
041084,000225: 6304 76342 7 INDJUMP -1 # (THE INDEX MAKES THIS A TCF.)
041085,000226:
041086,000227: 6305 00002 OCT 2 # REVERSE PUSHUP DECREMENT. VECTOR TAKES 2
041087,000228: 6306 00006 REVCNT OCT 6 # WORDS, SCALAR TAKES 6.
041088,000229: 6307 00006 OCT 6
041089,000230: 6310 00002 NO.WDS OCT 2 # CONVENTIONAL DECREMENT IS 6 WORDS VECTOR
041090,000231: 6311 00003 OCTAL3 OCT 3 # 2 IN DP, AND 3 IN TP.
041091,000232: 6312 00006 OCT 6
041092,000233:
![]() |
Page 960 |
041094,000235: # TEST THE SECOND PREFIX BIT TO SEE IF THIS IS A MISCELLANEOUS OR A UNARY/SHORT SHIFT OPERATION.
041095,000236:
041096,000237: 6313 10020 OPJUMP2 CCS CYR # TEST SECOND PREFIX BIT.
041097,000238: 6314 16327 TCF OPJUMP3 # TEST THIRD BIT TO SEE IF UNARY OR SHIFT.
041098,000239:
041099,000240: 6315 77722 -ENDVAC DEC -45 B-14
041100,000241:
041101,000242: # THE FOLLOWING ROUTINE PROCESSES ADDRESSES OF SUFFIX CLASS 10. THEY ARE BASICALLY WORK AREA ADDRESSES
041102,000243: # IN THE RANGE 0 - 52, ERASABLE ECADR CONSTANTS FROM 100 - 3777, AND FCADRS ABOVE THAT. ALL 15 BITS ARE AVAILABLE
041103,000244: # IN CONTRAST TO SUFFIX 1, IN WHICH ONLY THE LOW ORDER 14 ARE AVAILABLE.
041104,000245:
041105,000246: 6316 24154 15BITADR INCR LOC # (ENTRY HERE FROM STCALL).
041106,000247: 6317 50154 INDEX LOC # PICK UP ADDRESS WORD.
041107,000248: 6320 30000 CA 0
041108,000249: 6321 54107 TS POLISH # WE MAY NEED A SUBADDRESS LATER.
041109,000250:
041110,000251: 6322 36337 CAF LOW7+2K # THESE INSTRUCTIONS ARE IN BANK 1.
041111,000252: 6323 54004 TS FBANK
041112,000253: 6324 70020 MASK CYR
041113,000254: 6325 50000 ITR7 INDEX A
041114,000255: 6326 16403 TCF MISCJUMP
041115,000256:
![]() |
Page 961 |
041117,000258: # COMPLETE THE DISPATCHING OF UNARY AND SHORT SHIFT OPERATIONS.
041118,000259:
041119,000260: 6327 54004 OPJUMP3 TS FBANK # CALL IN BANK 0 (BIT5 11-15 OF A ARE 0.)
041120,000261: # ITRACE (6) REFERS TO "OPJUMP3".
041121,000262: 6330 10020 CCS CYR # TEST THIRD PREFIX BIT.
041122,000263: 6331 50000 INDEX A # THE DECREMENTED UNARY CODE IS IN BITS
041123,000264: 6332 12000 TCF UNAJUMP # 1-4 OF A (ZERO, EXIT, HAS BEEN DETECTED)
041124,000265:
041125,000266: 6333 10153 CCS MODE # ITS A SHORT SHIFT CODE. SEE IF PRESENT
041126,000267: 6334 12017 TCF SHORTT # SCALAR OR VECTOR.
041127,000268: 6335 12017 TCF SHORTT
041128,000269: 6336 12121 TCF SHORTV # CALLS THE APPROPRIATE ROUTINE.
041129,000270:
041130,000271:
041131,000272: 6337 4565 OCT23 = VD1
041132,000273: 6337 02177 LOW7+2K OCT 2177 # OP CODE MASK + BANK 1 FBANK SETTING.
041133,000274: 6340 77700 HIGH9 OCT 77700
041134,000275: 6341 76000 BANKMASK OCT 76000 # FBANK MASK.
041135,000276: 6342 6341 FBANKMSK EQUALS BANKMASK
041136,000277: 6342 5655 B12T14 = PRIO34 # USED IN PROCESSING STORE CODES.
041137,000278: 6342 74056 -ENDERAS DEC -2001 B-14 # = -(2047 - 45 - 1)
041138,000279:
![]() |
Page 962 |
041140,000281: # THE FOLLOWING IS THE JUMP TABLE FOR OP CODES WHICH MAY HAVE INDEXABLE ADDRESSES OR MAY PUSH UP.
041141,000282:
041142,000283: 6343 16563 INDJUMP TCF VLOAD # 00 - LOAD MPAC WITH A VECTOR.
041143,000284: 6344 17142 TCF TAD # 01 - TRIPLE PRECISION ADD TO MPAC.
041144,000285: 6345 17707 TCF SIGN # 02 - COMPLEMENT MPAC (V OR SC) IF X NEG.
041145,000286: 6346 17460 TCF VXSC # 03 - VECTOR TIMES SCALAR.
041146,000287: 6347 16761 TCF CGOTO # 04 - COMPUTED GO TO.
041147,000288: 6350 16546 TCF TLOAD # 05 - LOAD MPAC WITH TRIPLE PRECISION.
041148,000289: 6351 16537 TCF DLOAD # 06 - LOAD MPAC WITH A DP SCALAR.
041149,000290: 6352 17656 TCF V/SC # 07 - VECTOR DIVIDED BY SCALAR.
041150,000291:
041151,000292: 6353 16557 TCF SLOAD # 10 - LOAD MPAC IN SINGLE PRECISION.
041152,000293: 6354 16676 TCF SSP # 11 - SET SINGLE PRECISION INTO X.
041153,000294: 6355 16601 TCF PDDL # 12 - PUSH DOWN MPAC AND RE-LOAD IN DP.
041154,000295: 6356 17413 TCF MXV # 13 - MATRIX POST-MULTIPLIED BY VECTOR.
041155,000296: 6357 16635 TCF PDVL # 14 - PUSH DOWN AND VECTOR LOAD.
041156,000297: 6360 16704 TCF CCALL # 15 - COMPUTED CALL.
041157,000298: 6361 17416 TCF VXM # 16 - MATRIX PRE-MULTIPLIED BY VECTOR.
041158,000299: 6362 17650 TCF TSLC # 17 - NORMALIZE MPAC (SCALAR ONLY).
041159,000300:
041160,000301: 6363 17626 TCF DMPR # 20 - DP MULTIPLY AND ROUND.
041161,000302: 6364 17631 TCF DDV # 21 - DP DIVIDE BY.
041162,000303: 6365 17635 TCF BDDV # 22 - DP DIVIDE INTO.
041163,000304: 6366 17653 TCF GSHIFT # 23 - GENERAL SHIFT INSTRUCTION.
041164,000305: 6367 17025 TCF VAD # 24 - VECTOR ADD.
041165,000306: 6370 17053 TCF VSU # 25 - VECTOR SUBTRACT.
041166,000307: 6371 17103 TCF BVSU # 26 - VECTOR SUBTRACT FROM.
041167,000308: 6372 17410 TCF DOT # 27 - VECTOR DOT PRODUCT.
041168,000309:
041169,000310: 6373 17540 TCF VXV # 30 - VECTOR CROSS PRODUCT.
041170,000311: 6374 17504 TCF VPROJ # 31 - VECTOR PROJECTION.
041171,000312: 6375 17071 TCF DSU # 32 - DP SUBTRACT.
041172,000313: 6376 17127 TCF BDSU # 33 - DP SUBTRACT FROM.
041173,000314: 6377 17043 TCF DAD # 34 - DP ADD.
041174,000315: 6400 16400 TCF +0 # 35 - AVAILABLE
041175,000316: 6401 17624 TCF DMP1 # 36 - DP MULTIPLY.
041176,000317: 6402 17645 TCF SETPD # 37 - SET PUSH DOWN POINTER (DIRECT ONLY)
041177,000318:
041178,000319: # CODES 10 AND 14 MUST NOT PUSH UP. CODE 04 MAY BE USED FOR VECTOR DECLARE BEFORE PUSHUP IF DESIRED.
041179,000320:
![]() |
Page 963 |
041181,000322: # THE FOLLOWING JUMP TABLE APPLIES TO INDEX, BRANCH, AND MISCELLANEOUS INSTRUCTIONS.
041182,000323:
041183,000324: 6403 12626 MISCJUMP TCF AXT # 00 - ADDRESS TO INDEX TRUE.
041184,000325: 6404 12633 TCF AXC # 01 - ADDRESS TO INDEX COMPLEMENTED.
041185,000326: 6405 12636 TCF LXA # 02 - LOAD INDEX FROM ERASABLE.
041186,000327: 6406 12642 TCF LXC # 03 - LOAD INDEX FROM COMPLEMENT OF ERAS.
041187,000328: 6407 12646 TCF SXA # 04 - STORE INDEX IN ERASABLE.
041188,000329: 6410 12654 TCF XCHX # 05 - EXCHANGE INDEX WITH ERASABLE.
041189,000330: 6411 12670 TCF INCR # 06 - INCREMENT INDEX REGISTER.
041190,000331: 6412 12677 TCF TIX # 07 - TRANSFER ON INDEX.
041191,000332:
041192,000333: 6413 12662 TCF XAD # 10 - INDEX REGISTER ADD FROM ERASABLE.
041193,000334: 6414 12673 TCF XSU # 11 - INDEX SUBTRACT FROM ERASABLE.
041194,000335: 6415 12751 TCF BZE/GOTO # 12 - BRANCH ZERO AND GOTO.
041195,000336: 6416 12756 TCF BPL/BMN # 13 - BRANCH PLUS AND BRANCH MINUS.
041196,000337: 6417 12731 TCF RTB/BHIZ # 14 - RETURN TO BASIC AND BRANCH HI ZERO.
041197,000338: 6420 12771 TCF CALL/ITA # 15 - CALL AND STORE QPRET.
041198,000339: 6421 13000 TCF SW/ # 16 - SWITCH INSTRUCTIONS AND AVAILABLE.
041199,000340: 6422 12741 TCF BOV(B) # 17 - BRANCH ON OVERFLOW TO BASIC OR INT.
041200,000341:
![]() |
Page 964 |
041202,000343: # THE FOLLOWING JUMP TABLE APPIES TO UNARY INSTRUCTIONS.
041203,000344:
041204,000345: 00,2000 BANK 0 # 00 - EXIT - DETECTED EARLIER.
041205,000346: 00,2000 13167 UNAJUMP TCF SQRT # 01 - SQUARE ROOT.
041206,000347: 00,2001 13511 TCF SINE # 02 - SIN.
041207,000348: 00,2002 13500 TCF COSINE # 03 - COS.
041208,000349: 00,2003 13571 TCF ARCSIN # 04 - ARC SIN.
041209,000350: 00,2004 13573 TCF ARCCOS # 05 - ARC COS.
041210,000351: 00,2005 13154 TCF DSQ # 06 - DP SQUARE.
041211,000352: 00,2006 12116 TCF ROUND # 07 - ROUND TO DP.
041212,000353:
041213,000354: 00,2007 17722 TCF COMP # 10 - COMPLEMENT VECTOR OR SCALAR.
041214,000355: 00,2010 13212 TCF VDEF # 11 - VECTOR DEFINE.
041215,000356: 00,2011 13002 TCF UNIT # 12 - UNIT VECTOR.
041216,000357: 00,2012 13156 TCF ABVALABS # 13 - LENGTH OF VECTOR OR MAG OF SCALAR.
041217,000358: 00,2013 13226 TCF VSQ # 14 - SQUARE OF LENGTH OF VECTOR.
041218,000359: 00,2014 16423 TCF STADR # 15 - PUSH UP ON STORE CODE.
041219,000360: 00,2015 13256 TCF RVQ # 16 - RETURN VIA QPRET.
041220,000361: 00,2016 13231 TCF PUSH # 17 - PUSH MPAC DOWN.
041221,000362:
![]() |
Page 965 |
041223,000364: # SECTION 2 LOAD AND STORE PACKAGE.
041224,000365:
041225,000366: # A SET OF EIGHT STORE CODES IS PROVIDED AS THE PRIMARY METHOD OF STORING THE MULTI-PURPOSE
041226,000367: # ACCUMULATOR (MPAC). IF IN THE DANZIG SECTION LOC REFERS TO AN ALGEBRAICALLY POSITIVE WORD, IT IS TAKEN AS A
041227,000368: # STORE CODE WITH A CORRESPONDING ERASABLE ADDRESS. MOST OF THESE CODES ARE TWO ADDRESS, SPECIFYING THAT THE WORD
041228,000369: # FOLLOWING THE STORE CODE IS TO BE USED AS AN ADDRESS FROM WHICH TO RE-LOAD MPAC. FOUR OPTIONS ARE AVAILABLE:
041229,000370:
041230,000371: # 1. STORE STORE MPAC. THE E ADDRESS MAY BE INDEXED.
041231,000372: # 2. STODL STORE MPAC AND RE-LOAD IT IN DP WITH THE NEXT ADDRESS (THE LOAD MAY BE INDEXED).
041232,000373: # 3. STOVL STORE MPAC AND RE-LOAD A VECTOR (AS ABOVE).
041233,000374: # 4. STCALL STORE AND DO A CALL (BOTH ADDRESSES MUST BE DIRECT HERE).
041234,000375:
041235,000376: # STODL AND STOVL WILL TAKE FROM THE PUSH-DOWN LIST IF NO LOAD ADDRESS IS GIVEN.
041236,000377:
041237,000378: 6423 BLOCK 3
041238,000379:
041239,000380: 6423 30155 STADR CA BANKSET # THE STADR CODE (PUSHUP UP ON STORE
041240,000381: 6424 54004 TS FBANK # ADDRESS) ENTERS HERE.
041241,000382: 6425 24154 INCR LOC
041242,000383: 6426 50154 ITR1 INDEX LOC # THE STORECODE WAS STORED COMPLEMENTED TO
041243,000384: 6427 40000 CS 0 # MAKE IT LOOK LIKE AN OPCODE PAIR.
041244,000385: 6430 67771 AD NEGONE # (YUL CANT REMOVE 1 BECAUSE OF EARLY CCS)
041245,000386:
041246,000387: 6431 54106 DOSTORE TS ADDRWD
041247,000388: 6432 74563 MASK LOW11 # ENTRY FROM DISPATCHER. SAVE THE ERASABLE
041248,000389: 6433 56106 XCH ADDRWD # ADDRESS AND JUMP ON THE STORE CODE NO.
041249,000390: 6434 75655 MASK B12T14
041250,000391: 6435 00006 EXTEND
041251,000392: 6436 77757 MP BIT5 # EACH TRANSFER VECTOR ENTRY IS TWO WORDS.
041252,000393: 6437 50000 ITR0 INDEX A
041253,000394: 6440 16441 TCF STORJUMP
041254,000395:
![]() |
Page 966 |
041256,000397: # STORE CODE JUMP TABLE. CALLS THE APPROPRIATE STORING ROUTINE AND EXITS TO DANZIG OR TO ADDRESS WITH
041257,000398: # A SUPPLIED OPERATION CODE.
041258,000399:
041259,000400: 6441 06471 STORJUMP TC STORE # STORE.
041260,000401: 6442 16133 TCF NEWOPS -1 # PICK UP NEW OP CODE(S).
041261,000402: 6443 06463 TC STORE,1
041262,000403: 6444 16133 TCF NEWOPS -1
041263,000404: 6445 06466 TC STORE,2
041264,000405: 6446 16133 TCF NEWOPS -1
041265,000406:
041266,000407: 6447 06471 TC STORE # STODL.
041267,000408: 6450 16527 TCF DODLOAD
041268,000409:
041269,000410: 6451 06471 TC STORE # STODL WITH INDEXED LOAD ADDRESS.
041270,000411: 6452 16210 TCF DODLOAD*
041271,000412:
041272,000413: 6453 06471 TC STORE # STOVL.
041273,000414: 6454 16532 TCF DOVLOAD
041274,000415:
041275,000416: 6455 06471 TC STORE # STOVL WITH INDEXED LOAD ADDRESS.
041276,000417: 6456 16535 TCF DOVLOAD*
041277,000418: 6457 06471 TC STORE # STOTC.
041278,000419: 6460 35344 CAF CALLCODE
041279,000420: 6461 54020 TS CYR
041280,000421: 6462 16316 TCF 15BITADR # GET A 15 BIT ADDRESS.
041281,000422:
![]() |
Page 967 |
041283,000424: # STORE CODE ADDRESS PROCESSOR.
041284,000425:
041285,000426: 6463 50110 STORE,1 INDEX FIXLOC
041286,000427: 6464 40046 CS X1
041287,000428: 6465 16470 TCF PRESTORE
041288,000429:
041289,000430: 6466 50110 STORE,2 INDEX FIXLOC
041290,000431: 6467 40047 CS X2
041291,000432: 6470 26106 PRESTORE ADS ADDRWD # RESULTANT ADDRESS IS IN ERASABLE.
041292,000433:
041293,000434: 6471 40106 STORE CS ADDRWD
041294,000435: 6472 65353 AD DEC45
041295,000436: 6473 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
041296,000437: 6474 30110 CA FIXLOC # YES.
041297,000438: 6475 16502 TCF AHEAD5
041298,000439: 6476 35352 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
041299,000440: 6477 56106 XCH ADDRWD
041300,000441: 6500 54003 TS EBANK
041301,000442: 6501 74564 MASK LOW8
041302,000443: 6502 26106 AHEAD5 ADS ADDRWD
041303,000444:
![]() |
Page 968 |
041305,000446: # STORING ROUTINES. STORE DP, TP, OR VECTOR AS INDICATED BY MODE.
041306,000447:
041307,000448: 6503 00006 STARTSTO EXTEND # MPAC,+1 MUST BE STORED IN ANY EVENT.
041308,000449: # ITRACE (5) REFERS TO "STARTSTO".
041309,000450: 6504 30145 DCA MPAC
041310,000451: 6505 50106 INDEX ADDRWD
041311,000452: 6506 52001 DXCH 0
041312,000453:
041313,000454: 6507 10153 CCS MODE
041314,000455: 6510 16523 TCF TSTORE
041315,000456: 6511 00002 TC Q
041316,000457:
041317,000458: 6512 00006 VSTORE EXTEND
041318,000459: 6513 30150 DCA MPAC +3
041319,000460: 6514 50106 INDEX ADDRWD
041320,000461: 6515 52003 DXCH 2
041321,000462:
041322,000463: 6516 00006 EXTEND
041323,000464: 6517 30152 DCA MPAC +5
041324,000465: 6520 50106 INDEX ADDRWD
041325,000466: 6521 52005 DXCH 4
041326,000467: 6522 00002 TC Q
041327,000468:
041328,000469: 6523 30146 TSTORE CA MPAC +2
041329,000470: 6524 50106 INDEX ADDRWD
041330,000471: 6525 54002 TS 2
041331,000472: 6526 00002 TC Q
041332,000473:
![]() |
Page 969 |
041334,000475: # ROUTINES TO BEGIN PROCESSING OF THE SECOND ADDRESS ASSOCIATED WITH ALL STORE-TYPE CODES EXCEPT STORE
041335,000476: # ITSELF.
041336,000477:
041337,000478: 6527 35345 DODLOAD CAF DLOADCOD
041338,000479: 6530 54020 TS CYR
041339,000480: 6531 16152 TCF DIRADRES # GO GET A DIRECT ADDRESS.
041340,000481:
041341,000482: 6532 37745 DOVLOAD CAF VLOADCOD
041342,000483: 6533 54020 TS CYR
041343,000484: 6534 16152 TCF DIRADRES
041344,000485:
041345,000486: 6535 36153 DOVLOAD* CAF VLOAD*
041346,000487: 6536 16211 TCF DODLOAD* +1 # PROLOGUE TO INDEX ROUTINE.
041347,000488:
![]() |
Page 970 |
041349,000490: # THE FOLLOWING LOAD INSTRUCTIONS ARE PROVIDED FOR LOADING THE MULTI-PURPOSE ACCUMULATOR MPAC.
041350,000491:
041351,000492: 6537 00006 DLOAD EXTEND
041352,000493: 6540 50106 INDEX ADDRWD
041353,000494: 6541 30001 DCA 0 # PICK UP DP ARGUMENT AND LEAVE IT IN
041354,000495: 6542 52145 SLOAD2 DXCH MPAC # MPAC,+1, SETTING MPAC +2 TO ZERO. THE
041355,000496: 6543 37767 CAF ZERO # CONTENTS OF THE OTHER FOUR REGISTERS OF
041356,000497: 6544 54146 TS MPAC +2 # MPAC ARE IRRELEVANT.
041357,000498: 6545 16124 TCF NEWMODE # DECLARE DOUBLE PRECISION MODE.
041358,000499:
041359,000500: 6546 50106 TLOAD INDEX ADDRWD
041360,000501: 6547 30002 CA 2 # LOAD A TRIPLE PRECISION ARGUMENT INTO
041361,000502: 6550 54146 TS MPAC +2 # THE FIRST THREE MPAC REGISTERS, WITH THE
041362,000503: 6551 00006 EXTEND # CONTENTS OF THE OTHER FOUR IRRELEVANT.
041363,000504: 6552 50106 INDEX ADDRWD
041364,000505: 6553 30001 DCA 0
041365,000506: 6554 52145 DXCH MPAC
041366,000507: 6555 37763 CAF ONE
041367,000508: 6556 16124 TCF NEWMODE # DECLARE TRIPLE PRECISION MODE.
041368,000509:
041369,000510: 6557 22007 SLOAD ZL # LOAD A SINGLE PRECISION NUMBER INTO
041370,000511: 6560 50106 INDEX ADDRWD # MPAC, SETTING MPAC+1,2 TO ZERO. THE
041371,000512: 6561 30000 CA 0 # CONTENTS OF THE REMAINING MPAC REGISTERS
041372,000513: 6562 16542 TCF SLOAD2 # ARE IRRELEVANT.
041373,000514:
041374,000515: 6563 00006 VLOAD EXTEND # LOAD A DOUBLE PRECISION VECTOR INTO
041375,000516: 6564 50106 INDEX ADDRWD # MPAC,+1, MPAC+3,4, AND MPAC+5,6. THE
041376,000517: 6565 30001 DCA 0 # CONTENTS OF MPAC +2 ARE IRRELEVANT.
041377,000518: 6566 52145 DXCH MPAC
041378,000519:
041379,000520: 6567 00006 ENDVLOAD EXTEND # PDVL COMES HERE TO FINISH UP FOR DP, TP.
041380,000521: 6570 50106 INDEX ADDRWD
041381,000522: 6571 30003 DCA 2
041382,000523: 6572 52150 DXCH MPAC +3
041383,000524:
041384,000525: 6573 00006 +4 EXTEND # TPDVL FINISHES HERE.
041385,000526: 6574 50106 INDEX ADDRWD
041386,000527: 6575 30005 DCA 4
041387,000528: 6576 52152 DXCH MPAC +5
041388,000529:
041389,000530: 6577 47763 CS ONE # DECLARE VECTOR MODE.
041390,000531: 6600 16124 TCF NEWMODE
041391,000532:
![]() |
Page 971 |
041393,000534: # THE FOLLOWING INSTRUCTIONS ARE PROVIDED FOR STORING OPERANDS IN THE PUSHDOWN LIST:
041394,000535:
041395,000536: # 1. PUSH PUSHDOWN AND NO LOAD.
041396,000537: # 2. PDDL PUSHDOWN AND DOUBLE PRECISION LOAD.
041397,000538: # 3. PDVL PUSHDOWN AND VECTOR LOAD.
041398,000539:
041399,000540: 6601 00006 PDDL EXTEND
041400,000541: 6602 50106 INDEX ADDRWD # LOAD MPAC,+1, PUSHING THE FORMER
041401,000542: 6603 30001 DCA 0 # CONTENTS DOWN.
041402,000543: 6604 52145 DXCH MPAC
041403,000544: 6605 50156 INDEX PUSHLOC
041404,000545: 6606 52001 DXCH 0
041405,000546:
041406,000547: 6607 50153 INDEX MODE # ADVANCE THE PUSHDOWN POINTER APPRO-
041407,000548: 6610 36310 CAF NO.WDS # PRIATELY.
041408,000549: 6611 26156 ADS PUSHLOC
041409,000550:
041410,000551: 6612 10153 CCS MODE
041411,000552: 6613 16630 TCF ENDTPUSH
041412,000553: 6614 16626 TCF ENDDPUSH
041413,000554:
041414,000555: 6615 54153 TS MODE # NOW DP.
041415,000556: 6616 54146 ENDVPUSH TS MPAC +2
041416,000557: 6617 52150 DXCH MPAC +3 # PUSH DOWN THE REST OF THE VECTOR HERE.
041417,000558: 6620 50156 INDEX PUSHLOC
041418,000559: 6621 51775 DXCH 0 -4
041419,000560:
041420,000561: 6622 52152 DXCH MPAC +5
041421,000562: 6623 50156 INDEX PUSHLOC
041422,000563: 6624 51777 DXCH 0 -2
041423,000564:
041424,000565: 6625 16125 TCF DANZIG
041425,000566:
041426,000567: 6626 54146 ENDDPUSH TS MPAC +2 # SET MPAC +2 TO ZERO AND EXIT ON DP.
041427,000568: 6627 16125 TCF DANZIG
041428,000569:
041429,000570: 6630 54153 ENDTPUSH TS MODE
041430,000571: 6631 56146 XCH MPAC +2 # ON TRIPLE, SET MPAC +2 TO ZERO, PUSHING
041431,000572: 6632 50156 +2 INDEX PUSHLOC # DOWN THE OLD CONTENTS
041432,000573: 6633 53777 TS 0 -1
041433,000574: 6634 16125 TCF DANZIG
041434,000575:
![]() |
Page 972 |
041436,000577: # PDVL - PUSHDOWN AND VECTOR LOAD.
041437,000578:
041438,000579: 6635 00006 PDVL EXTEND # RELOAD MPAC AND PUSH DOWN ITS CONTENTS.
041439,000580: 6636 50106 INDEX ADDRWD
041440,000581: 6637 30001 DCA 0
041441,000582: 6640 52145 DXCH MPAC
041442,000583: 6641 50156 INDEX PUSHLOC
041443,000584: 6642 52001 DXCH 0
041444,000585:
041445,000586: 6643 50153 INDEX MODE # ADVANCE THE PUSHDOWN POINTER.
041446,000587: 6644 36310 CAF NO.WDS
041447,000588: 6645 26156 ADS PUSHLOC
041448,000589:
041449,000590: 6646 10153 CCS MODE # TEST PAST MODE.
041450,000591: 6647 16666 TCF TPDVL
041451,000592: 6650 16567 TCF ENDVLOAD # JUST LOAD LAST FOUR REGISTERS ON DP.
041452,000593:
041453,000594: 6651 00006 VPDVL EXTEND # PUSHDOWN AND RE-LOAD LAST TWO COMPONENTS
041454,000595: 6652 50106 INDEX ADDRWD
041455,000596: 6653 30003 DCA 2
041456,000597: 6654 52150 DXCH MPAC +3
041457,000598: 6655 50156 INDEX PUSHLOC
041458,000599: 6656 51775 DXCH 0 -4
041459,000600:
041460,000601: 6657 00006 EXTEND
041461,000602: 6660 50106 INDEX ADDRWD
041462,000603: 6661 30005 DCA 4
041463,000604: 6662 52152 DXCH MPAC +5
041464,000605: 6663 50156 INDEX PUSHLOC
041465,000606: 6664 51777 DXCH 0 -2
041466,000607:
041467,000608: 6665 16125 TCF DANZIG
041468,000609:
041469,000610: 6666 00006 TPDVL EXTEND # ON TP, WE MUST LOAD THE Y COMPONENT
041470,000611: 6667 50106 INDEX ADDRWD # BEFORE STORING MPAC +2 INCASE THIS IS A
041471,000612: 6670 30003 DCA 2 # PUSHUP.
041472,000613: 6671 52150 DXCH MPAC +3
041473,000614:
041474,000615: 6672 30146 CA MPAC +2
041475,000616: 6673 50156 INDEX PUSHLOC # IN DP.
041476,000617: 6674 53777 TS 0 -1
041477,000618: 6675 16573 TCF ENDVLOAD +4
041478,000619:
041479,000620: # SSP (STORE SINGLE PRECISION) IS EXECUTED HERE.
041480,000621:
041481,000622: 6676 24154 SSP INCR LOC # PICK UP THE WORD FOLLOWING THE GIVEN
041482,000623: 6677 50154 INDEX LOC # ADDRESS AND STORE IT AT X.
041483,000624: 6700 30000 CA 0
041484,000625: 6701 50106 STORE1 INDEX ADDRWD # SOME INDEX AND MISCELLANEOUS OPS END
041485,000626: 6702 54000 TS 0 # HERE.
![]() |
Page 973 |
041487,000628: 6703 16125 TCF DANZIG
041488,000629:
![]() |
Page 974 |
041490,000631: # SEQUENCE CHANGING AND SUBROUTINE CALLING OPTIONS.
041491,000632:
041492,000633: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR SEQUENCING CHANGING, BRANCHING, AND CALLING SUBROUTINES:
041493,000634:
041494,000635: # 1. GOTO GO TO.
041495,000636: # 2. CALL CALL SUBROUTINE SETTING QPRET.
041496,000637: # 3. CGOTO COMPUTED GO TO.
041497,000638: # 4. CCALL COMPUTED CALL.
041498,000639: # 7. BPL BRANCH IF MPAC POSITIVE OR ZERO.
041499,000640: # 8. BZE BRANCH IF MPAC ZERO.
041500,000641: # 9. BMN BRANCH IF MPAC NEGATIVE NON-ZERO.
041501,000642:
041502,000643: 6704 24154 CCALL INCR LOC # MAINTAIN LOC FOR QPRET COMPUTATION.
041503,000644: 6705 50154 INDEX LOC
041504,000645: 6706 30000 CAF 0 # GET BASE ADDRESS OF CADR LIST.
041505,000646: 6707 50106 INDEX ADDRWD
041506,000647: 6710 60000 AD 0 # ADD INCREMENT.
041507,000648: 6711 54004 TS FBANK # SELECT DESIRED CADR.
041508,000649: 6712 75337 MASK LOW10
041509,000650: 6713 50000 INDEX A
041510,000651: 6714 32000 CAF 10000
041511,000652: 6715 54107 TS POLISH
041512,000653:
041513,000654: 6716 30155 CALL CA BANKSET # FOR ANY OF THE CALL OPTIONS, MAKE UP THE
041514,000655: 6717 76341 MASK BANKMASK # ADDRESS OF THE NEXT OP-CODE PAIR/STORE
041515,000656: 6720 66341 AD BANKMASK # CODE AND LEAVE IT IN QPRET. NOTE THAT
041516,000657: 6721 60154 AD LOC # BANKMASK = -(2000 - 1).
041517,000658: 6722 50110 INDEX FIXLOC
041518,000659: 6723 54052 TS QPRET
041519,000660:
041520,000661: 6724 30107 GOTO CA POLISH # BASIC BRANCHING SEQUENCE.
041521,000662: 6725 75351 +1 MASK HIGH4
041522,000663: 6726 00006 EXTEND
041523,000664: 6727 16740 BZF GOTOERS # SEE IF ADDRESS POINTS TO FIXED OR ERAS.
041524,000665: 6730 30155 +4 CA BANKSET # SET EBANK PART OF BBANK. NEXT, SET UP
041525,000666: 6731 54006 TS BBANK # FBANK. THE COMBINATION IS PICKED UP &
041526,000667: 6732 30107 CA POLISH # PUT INTO BANKSET AT INTPRET +2.
041527,000668: 6733 54004 TS FBANK
041528,000669: 6734 75337 MASK LOW10
041529,000670: 6735 67751 AD 2K
041530,000671: 6736 54154 TS LOC
041531,000672: 6737 16114 TCF INTPRET +2
041532,000673:
![]() |
Page 975 |
041534,000675: 6740 E3,1400 EBANK= 1400 # SO YUL DOESN'T CUSS THE "CA 1400" BELOW.
041535,000676:
041536,000677: 6740 30107 GOTOERS CA POLISH # THE GIVEN ADDRESS IS IN ERASABLE - SEE
041537,000678: 6741 66315 AD -ENDVAC # IF RELATIVE TO THE WORK AREA.
041538,000679: 6742 10000 CCS A
041539,000680: 6743 30107 CA POLISH # GENERAL ERASABLE.
041540,000681: 6744 16753 TCF GOTOGE
041541,000682:
041542,000683: 6745 30110 CA FIXLOC # WORK AREA.
041543,000684: 6746 60107 AD POLISH
041544,000685: 6747 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
041545,000686: 6750 30000 CA 0 # THE BRANCH ADDRESS.
041546,000687: 6751 54107 TS POLISH
041547,000688: 6752 16725 TCF GOTO +1 # ALLOWS ARBITRARY INDIRECTNESS LEVELS.
041548,000689:
041549,000690: 6753 54003 GOTOGE TS EBANK
041550,000691: 6754 74564 MASK LOW8
041551,000692: 6755 50000 INDEX A # USE THE GIVEN ADDRESS AS THE ADDRESS OF
041552,000693: 6756 31400 CA 1400 # THE BRANCH ADDRESS.
041553,000694: 6757 54107 TS POLISH
041554,000695: 6760 16725 TCF GOTO +1
041555,000696:
041556,000697: 6761 50154 CGOTO INDEX LOC # COMPUTED GO TO. PICK UP ADDRESS OF CADR
041557,000698: 6762 30001 CA 1 # LIST.
041558,000699: 6763 50106 INDEX ADDRWD # ADD MODIFIER.
041559,000700: 6764 60000 AD 0
041560,000701: 6765 54004 TS FBANK # SELECT GOTO ADDRESS.
041561,000702: 6766 75337 MASK LOW10
041562,000703: 6767 50000 INDEX A
041563,000704: 6770 32000 CA 10000
041564,000705: 6771 54107 TS POLISH
041565,000706: 6772 16725 TCF GOTO +1 # WITH ADDRESS IN A.
041566,000707:
041567,000708: 6773 30155 SWBRANCH CA BANKSET # SWITCH INSTRUCTIONS WHICH ELECT TO
041568,000709: 6774 54004 TS FBANK # BRANCH COME HERE TO DO SO.
041569,000710: 6775 50154 INDEX LOC
041570,000711: 6776 30001 CA 1
041571,000712: 6777 54107 TS POLISH
041572,000713: 7000 16725 TCF GOTO +1
041573,000714:
![]() |
Page 976 |
041575,000716: # TRIPLE PRECISION BRANCHING ROUTINE. IF CALLING TC IS AT L, RETURN IS AS FOLLOWS:
041576,000717:
041577,000718: # L+1 IF MPAC IS GREATER THAN ZERO.
041578,000719: # L+2 IF MPAC IS EQUAL TO +0 OR -0.
041579,000720: # L+3 IF MPAC IS LESS THAN ZERO.
041580,000721:
041581,000722:
041582,000723: 7001 10144 BRANCH CCS MPAC
041583,000724: 7002 00002 TC Q
041584,000725: 7003 17005 TCF +2 # ON ZERO.
041585,000726: 7004 17017 TCF NEG
041586,000727:
041587,000728: 7005 10145 CCS MPAC +1
041588,000729: 7006 00002 TC Q
041589,000730: 7007 17011 TCF +2
041590,000731: 7010 17017 TCF NEG
041591,000732:
041592,000733: 7011 10146 CCS MPAC +2
041593,000734: 7012 00002 TC Q
041594,000735: 7013 17015 TCF +2
041595,000736: 7014 17017 TCF NEG
041596,000737:
041597,000738: 7015 50002 Q+1 INDEX Q
041598,000739: 7016 00001 TC 1
041599,000740:
041600,000741: 7017 50002 NEG INDEX Q # IF FIRST NON-ZERO REGISTER WAS NEGATIVE.
041601,000742: 7020 00002 TC 2
041602,000743:
041603,000744:
041604,000745: 7021 7017 Q+2 = NEG
041605,000746:
041606,000747: # ITRACE (3) REFERS TO "EXIT".
041607,000748: 7021 30155 EXIT CA BANKSET # RESTORE USER'S BANK SETTING, AND LEAVE
041608,000749: 7022 54006 TS BBANK # INTERPRETIVE MODE.
041609,000750: 7023 50154 INDEX LOC
041610,000751: 7024 00001 TC 1
041611,000752:
![]() |
Page 977 |
041613,000754: # SECTION 3 - ADD/SUBTRACT PACKAGE.
041614,000755:
041615,000756: # THE FOLLOWING OPERATIONS ARE PROVIDED FOR ADDING TO AND SUBTRACTING FROM THE MULTI-PURPOSE ACCUMULATOR
041616,000757: # MPAC:
041617,000758:
041618,000759: # 1. DAD DOUBLE PRECISION ADD.
041619,000760: # 2. DSU DOUBLE PRECISION SUBTRACT.
041620,000761: # 3. BDSU DOUBLE PRECISION SUBTRACT FROM.
041621,000762:
041622,000763: # 4. TAD TRIPLE PRECISION ADD.
041623,000764:
041624,000765: # 5. VAD VECTOR ADD.
041625,000766: # 6. VSU VECTOR SUBTRACT.
041626,000767: # 7. BVSU VECTOR SUBTRACT FROM.
041627,000768:
041628,000769: # THE INTERPRETIVE OVERFLOW INDICATOR OVFIND IS SET NON-ZERO IF OVERFLOW OCCURS IN ANY OF THE ABOVE.
041629,000770:
041630,000771:
041631,000772: 7025 00006 VAD EXTEND
041632,000773: 7026 50106 INDEX ADDRWD
041633,000774: 7027 30003 DCA 2
041634,000775: 7030 20150 DAS MPAC +3
041635,000776: 7031 00006 EXTEND # CHECK OVERFLOW.
041636,000777: 7032 17034 BZF +2
041637,000778: 7033 07101 TC OVERFLOW
041638,000779:
041639,000780: 7034 00006 EXTEND
041640,000781: 7035 50106 INDEX ADDRWD
041641,000782: 7036 30005 DCA 4
041642,000783: 7037 20152 DAS MPAC +5
041643,000784: 7040 00006 EXTEND
041644,000785: 7041 17043 BZF +2
041645,000786: 7042 07101 TC OVERFLOW
041646,000787:
041647,000788: 7043 00006 DAD EXTEND
041648,000789: 7044 50106 INDEX ADDRWD
041649,000790: 7045 30001 DCA 0
041650,000791: 7046 20145 ENDVXV DAS MPAC # VXV FINISHES HERE.
041651,000792: 7047 00006 EXTEND
041652,000793: 7050 16125 BZF DANZIG
041653,000794: 7051 07101 TC OVERFLOW
041654,000795: 7052 16125 TCF DANZIG
041655,000796:
![]() |
Page 978 |
041657,000798: 7053 00006 VSU EXTEND
041658,000799: 7054 50106 INDEX ADDRWD
041659,000800: 7055 40003 DCS 2
041660,000801: 7056 20150 DAS MPAC +3
041661,000802: 7057 00006 EXTEND
041662,000803: 7060 17062 BZF +2
041663,000804: 7061 07101 TC OVERFLOW
041664,000805:
041665,000806: 7062 00006 EXTEND
041666,000807: 7063 50106 INDEX ADDRWD
041667,000808: 7064 40005 DCS 4
041668,000809: 7065 20152 DAS MPAC +5
041669,000810: 7066 00006 EXTEND
041670,000811: 7067 17071 BZF +2
041671,000812: 7070 07101 TC OVERFLOW
041672,000813:
041673,000814: 7071 00006 DSU EXTEND
041674,000815: 7072 50106 INDEX ADDRWD
041675,000816: 7073 40001 DCS 0
041676,000817: 7074 20145 DAS MPAC
041677,000818: 7075 00006 EXTEND
041678,000819: 7076 16125 BZF DANZIG
041679,000820: 7077 07101 TC OVERFLOW
041680,000821: 7100 16125 TCF DANZIG
041681,000822:
041682,000823: 7101 37763 OVERFLOW CAF ONE # SUBROUTINE TO TURN OVFIND ON.
041683,000824: 7102 17224 TCF SETOVF2
041684,000825:
![]() |
Page 979 |
041686,000827: 7103 00006 BVSU EXTEND
041687,000828: 7104 50106 INDEX ADDRWD
041688,000829: 7105 30003 DCA 2
041689,000830: 7106 52150 DXCH MPAC +3
041690,000831: 7107 00006 EXTEND
041691,000832: 7110 40001 DCOM
041692,000833: 7111 20150 DAS MPAC +3
041693,000834: 7112 00006 EXTEND
041694,000835: 7113 17115 BZF +2
041695,000836: 7114 07101 TC OVERFLOW
041696,000837:
041697,000838: 7115 00006 EXTEND
041698,000839: 7116 50106 INDEX ADDRWD
041699,000840: 7117 30005 DCA 4
041700,000841: 7120 52152 DXCH MPAC +5
041701,000842: 7121 00006 EXTEND
041702,000843: 7122 40001 DCOM
041703,000844: 7123 20152 DAS MPAC +5
041704,000845: 7124 00006 EXTEND
041705,000846: 7125 17127 BZF +2
041706,000847: 7126 07101 TC OVERFLOW
041707,000848:
041708,000849: 7127 00006 BDSU EXTEND
041709,000850: 7130 50106 INDEX ADDRWD
041710,000851: 7131 30001 DCA 0
041711,000852: 7132 52145 DXCH MPAC
041712,000853: 7133 00006 EXTEND
041713,000854: 7134 40001 DCOM
041714,000855: 7135 20145 DAS MPAC
041715,000856: 7136 00006 EXTEND
041716,000857: 7137 16125 BZF DANZIG
041717,000858: 7140 07101 TC OVERFLOW
041718,000859: 7141 16125 TCF DANZIG
041719,000860:
![]() |
Page 980 |
041721,000862: # TRIPLE PRECISION ADD ROUTINE.
041722,000863:
041723,000864: 7142 00006 TAD EXTEND
041724,000865: 7143 50106 INDEX ADDRWD
041725,000866: 7144 30002 DCA 1 # ADD MINOR PARTS FIRST.
041726,000867: 7145 20146 DAS MPAC +1
041727,000868: 7146 50106 INDEX ADDRWD
041728,000869: 7147 60000 AD 0
041729,000870: 7150 60144 AD MPAC
041730,000871: 7151 54144 TS MPAC
041731,000872: 7152 16125 TCF DANZIG
041732,000873:
041733,000874: 7153 54111 SETOVF TS OVFIND # SET OVFIND IF SUCH OCCURS.
041734,000875: 7154 16125 TCF DANZIG
041735,000876:
![]() |
Page 981 |
041737,000878: # ARITHMETIC SUBROUTINES REQUIRED IN FIXED-FIXED.
041738,000879: # 1. DMPSUB DOUBLE PRECISION MULTIPLY. MULTIPLY THE CONTENTS OF MPAC,+1 BY THE DP WORD WHOSE ADDRESS
041739,000880: # IS IN ADDRWD AND LEAVE A TRIPLE PRECISION RESULT IN MPAC.
041740,000881: # 2. ROUNDSUB ROUND THE TRIPLE PRECISON CONTENTS OF MPAC TO DOUBLE PRECISION.
041741,000882: # 3. DOTSUB TAKE THE DOT PRODUCT OF THE VECTOR IN MPAC AND THE VECTOR WHOSE ADDRESS IS IN ADDRWD
041742,000883: # AND LEAVE THE TRIPLE PRECISION RESULT IN MPAC.
041743,000884: # 4. POLY USING THE CONTENTS OF MPAC AS A DP ARGUMENT, EVALUATE THE POLYNOMIAL WHOSE DEGREE AND
041744,000885: # COEFFICIENTS IMMEDIATELY FOLLOW THE TC POLY INSTRUCTION (SEE ROUTINE FOR DETAILS.)
041745,000886:
041746,000887:
041747,000888: 7155 50002 DMP INDEX Q # BASIC SUBROUTINE FOR USE BY PINBALL, ETC
041748,000889: 7156 30000 CAF 0 # ADRES OF ARGUMENT FOLLOWS TC DMP .
041749,000890: 7157 24002 INCR Q
041750,000891: 7160 54106 -1 TS ADDRWD # (PROLOGUE FOR SETTING ADDRWD.)
041751,000892:
041752,000893: 7161 50106 DMPSUB INDEX ADDRWD # GET MINOR PART OF OPERAND AT C(ADDRWD).
041753,000894: 7162 30001 CA 1
041754,000895: 7163 54146 TS MPAC +2 # THIS WORKS FOR SQUARING MPAC AS WELL.
041755,000896: 7164 37767 CAF ZERO # SET MPAC +1 TO ZERO SO WE CAN ACCUMULATE
041756,000897: 7165 56145 XCH MPAC +1 # THE PARTIAL PRODUCTS WITH DAS
041757,000898: 7166 54125 TS MPTEMP # INSTRUCTIONS.
041758,000899: 7167 00006 EXTEND
041759,000900: 7170 70146 MP MPAC +2 # MINOR OF MPAC X MINOR OF C(ADDRWD).
041760,000901:
041761,000902: 7171 56146 XCH MPAC +2 # DISCARD MINOR PART OF ABOVE RESULT AND
041762,000903: 7172 00006 EXTEND # FORM MAJOR OF MPAC X MINOR OF C(ADDRWD).
041763,000904: 7173 70144 MP MPAC
041764,000905: 7174 20146 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
041765,000906:
041766,000907: 7175 50106 INDEX ADDRWD # GET MAJOR PART OF ARGUMENT AT C(ADDRWD).
041767,000908: 7176 30000 CA 0
041768,000909: 7177 56125 XCH MPTEMP # SAVE AND BRING OUT MINOR OF MPAC.
041769,000910: 7200 00006 EXTEND
041770,000911: 7201 70125 MP MPTEMP # MAJOR OF C(ADDRWD) X MINOR OF MPAC.
041771,000912: 7202 20146 DAS MPAC +1 # ACCUMULATE, SETTING A TO NET OVERFLOW.
041772,000913:
041773,000914: 7203 56144 XCH MPAC # SETTING MPAC TO 0 OR +-1.
041774,000915: 7204 00006 EXTEND
041775,000916: 7205 70125 MP MPTEMP # MAJOR OF MPAC X MAJOR OF C(ADDRWD).
041776,000917: 7206 20145 DAS MPAC # GUARANTEED NO OVERFLOW.
041777,000918: 7207 00002 TC Q # 49 MCT = .573 MS. INCLUDING RETURN.
041778,000919:
![]() |
Page 982 |
041780,000921: # ROUND MPAC TO DOUBLE PRECISION, SETTING OVFIND ON THE RARE EVENT OF OVERFLOW.
041781,000922:
041782,000923: 7210 37767 ROUNDSUB CAF ZERO # SET MPAC +2 = 0 FOR SCALARS AND CHANGE
041783,000924: 7211 54153 +1 TS MODE # MODE TO DP.
041784,000925:
041785,000926: 7212 56146 VROUND XCH MPAC +2 # BUT WE NEEDNT TAKE THE TIME FOR VECTORS.
041786,000927: 7213 60000 DOUBLE
041787,000928: 7214 54001 TS L
041788,000929: 7215 00002 TC Q
041789,000930:
041790,000931: 7216 60145 AD MPAC +1 # ADD ROUNDING BIT IF MPAC +2 WAS GREATER
041791,000932: 7217 54145 TS MPAC +1 # THAN .5 IN MAGNITUDE.
041792,000933: 7220 00002 TC Q
041793,000934:
041794,000935: 7221 60144 AD MPAC # PROPAGATE INTERFLOW.
041795,000936: 7222 54144 TS MPAC
041796,000937: 7223 00002 TC Q
041797,000938:
041798,000939: 7224 54111 SETOVF2 TS OVFIND # (RARE).
041799,000940: 7225 00002 TC Q
041800,000941:
![]() |
Page 983 |
041802,000943: # THE DOT PRODUCT SUBROUTINE USUALLY FORMS THE DOT PRODUCT OF THE VECTOR IN MPAC WITH A STANDARD SIX
041803,000944: # REGISTER VECTOR WHOSE ADDRESS IS IN ADDRWD. IN THIS CASE C(DOTINC) ARE SET TO 2. VXM, HOWEVER, SETS C(DOTINC) TO
041804,000945: # 6 SO THAT DOTSUB DOTS MPAC WITH A COLUMN VECTOR OF THE MATRIX IN QUESTION IN THIS CASE.
041805,000946:
041806,000947:
041807,000948: 7226 37762 PREDOT CAF TWO # PROLOGUE TO SET DOTINC TO 2.
041808,000949: 7227 54126 TS DOTINC
041809,000950:
041810,000951: 7230 00006 DOTSUB EXTEND
041811,000952: 7231 22127 QXCH DOTRET # SAVE RETURN.
041812,000953: 7232 07161 TC DMPSUB # DOT X COMPONENTS.
041813,000954: 7233 52150 DXCH MPAC +3 # POSITION Y COMPONENT OF MPAC FOR
041814,000955: 7234 52145 DXCH MPAC # MULTIPLICATION WHILE SAVING RESULT IN
041815,000956: 7235 52121 DXCH BUF # THREE WORD BUFFER, BUF.
041816,000957: 7236 30146 CA MPAC +2
041817,000958: 7237 54122 TS BUF +2
041818,000959:
041819,000960: 7240 30126 CA DOTINC # ADVANCE ADDRWD TO Y COMPONENT OF
041820,000961: 7241 26106 ADS ADDRWD # OTHER ARGUMENT.
041821,000962: 7242 07161 TC DMPSUB
041822,000963: 7243 52146 DXCH MPAC +1 # ACCUMULATE PARTIAL PRODUCTS.
041823,000964: 7244 20122 DAS BUF +1
041824,000965: 7245 60144 AD MPAC
041825,000966: 7246 60120 AD BUF
041826,000967: 7247 54120 TS BUF
041827,000968: 7250 17252 TCF +2
041828,000969: 7251 54111 TS OVFIND # IF OVERFLOW OCCURS.
041829,000970:
041830,000971: 7252 52152 DXCH MPAC +5 # MULTIPLY Z COMPONENTS.
041831,000972: 7253 52145 DXCH MPAC
041832,000973: 7254 30126 CA DOTINC
041833,000974: 7255 26106 ADS ADDRWD
041834,000975: 7256 07161 TC DMPSUB
041835,000976: 7257 52122 ENDDOT DXCH BUF +1 # LEAVE FINAL ACCUMULATION IN MPAC.
041836,000977: 7260 20146 DAS MPAC +1
041837,000978: 7261 60144 AD MPAC
041838,000979: 7262 60120 AD BUF
041839,000980: 7263 54144 TS MPAC
041840,000981: 7264 00127 TC DOTRET
041841,000982:
041842,000983: 7265 54111 TS OVFIND # ON OVERFLOW HERE.
041843,000984: 7266 00127 TC DOTRET
041844,000985:
![]() |
Page 984 |
041846,000987: # DOUBLE PRECISION POLYNOMIAL EVALUATOR
041847,000988: # N N-1
041848,000989: # THIS ROUTINE EVALUATES A X + A X + ... + A X + A LEAVING THE DP RESULT IN MPAC ON EXIT.
041849,000990: # N N-1 1 0
041850,000991:
041851,000992: # THE ROUTINE HAS TWO ENTRIES
041852,000993:
041853,000994: # 1. ENTRY THRU POWRSERS. THE COEFFICIENTS MAY BE EITHER IN FIXED OR ERASABLE, THE CALL IS BY
041854,000995: # TC POWRSERS, AND THE RETURN IS TO LOC(TC POWRSERS)+1. THE ENTERING DATA MUST BE AS FOLLOWS
041855,000996:
041856,000997: # A SP LOC-3 ADDRESS FOR REFERENCING COEF TABLE
041857,000998: # L SP N-1 N IS THE DEGREE OF THE POWER SERIES
041858,000999: # MPAC DP X ARGUMENT
041859,001000:
041860,001001: # LOC-2N DP A(0)
041861,001002: # ...
041862,001003: # LOC DP A(N)
041863,001004:
041864,001005: # 2. ENTRY THRU POLY. THE CALL TO POLY AND THE ENTERING DATA MUST BE AS FOLLOWS
041865,001006:
041866,001007: # MPAC DP X ARGUMENT
041867,001008:
041868,001009: # LOC TC POLY
041869,001010: # LOC+1 SP N-1
041870,001011: # LOC+2 DP A(0)
041871,001012: # ...
041872,001013: # LOC+2N+2 DP A(N) RETURN IS TO LOC+2N+4
041873,001014:
041874,001015: 7267 00006 POWRSERS EXTEND
041875,001016: 7270 22131 QXCH POLYRET # RETURN ADDRESS
041876,001017: 7271 54107 TS POLISH # POWER SERIES ADDRESS
041877,001018: 7272 22130 LXCH POLYCNT # N-1 TO COUNTER
041878,001019: 7273 17304 TCF POLYCOM # SKIP SET UP BY POLY
041879,001020:
041880,001021: 7274 50002 POLY INDEX Q
041881,001022: 7275 30000 CAF 0
041882,001023: 7276 54130 TS POLYCNT # N-1 TO COUNTER
041883,001024: 7277 60000 DOUBLE
041884,001025: 7300 60002 AD Q
041885,001026: 7301 54107 TS POLISH # L(A(N))-3 TO POLISH
041886,001027: 7302 67766 AD FIVE
041887,001028: 7303 54131 TS POLYRET # STORE RETURN ADDRESS
041888,001029:
041889,001030: 7304 35347 POLYCOM CAF LVBUF # INCOMING X WILL BE MOVED TO VBUF, SO
041890,001031: 7305 54106 TS ADDRWD # SET ADDRWD SO DMPSUB WILL MPY BY VBUF.
041891,001032:
041892,001033: 7306 00006 EXTEND
041893,001034: 7307 50107 INDEX POLISH
041894,001035: 7310 30004 DCA 3
041895,001036:
![]() |
Page 985 |
041897,001038: 7311 52145 DXCH MPAC # LOAD A(N) INTO MPAC,
041898,001039: 7312 52113 DXCH VBUF # SAVING X IN VBUF
041899,001040: 7313 17317 TCF POLY2
041900,001041:
041901,001042: 7314 54130 POLYLOOP TS POLYCNT # SAVE DECREMENTED LOOP COUNTER
041902,001043: 7315 47762 CS TWO
041903,001044: 7316 26107 ADS POLISH # REGRESS COEFFICIENT POINTER
041904,001045:
041905,001046: 7317 07161 POLY2 TC DMPSUB # MULTIPLY BY X
041906,001047: 7320 00006 EXTEND
041907,001048: 7321 50107 INDEX POLISH
041908,001049: 7322 30002 DCA 1 # ADD IN NEXT COEFFICIENT
041909,001050: 7323 20145 DAS MPAC # USERS RESPONSIBILITY TO ASSURE NO OVFLOW
041910,001051:
041911,001052: 7324 10130 CCS POLYCNT
041912,001053: 7325 17314 TCF POLYLOOP
041913,001054: 7326 00131 TC POLYRET # RETURN CALLER
041914,001055:
![]() |
Page 986 |
041916,001057: # MISCELLANEOUS MULTI-PRECISION ROUTINES REQUIRED IN FIXED-FIXED BUT NOT USED BY THE INTERPRETER.
041917,001058:
041918,001059: 7327 22002 TPAGREE LXCH Q # FORCE SIGN AGREEMENT AMONG THE TRIPLE
041919,001060: 7330 07001 TC BRANCH # PRECISION CONTENTS OF MPAC. RETURNING
041920,001061: 7331 17335 TCF ARG+ # WITH SIGNUM OF THE INPUT IN A.
041921,001062: 7332 17355 TCF ARGZERO
041922,001063:
041923,001064: 7333 47743 CS POSMAX # IF NEGATIVE.
041924,001065: 7334 17336 TCF +2
041925,001066:
041926,001067: 7335 37743 ARG+ CAF POSMAX
041927,001068: 7336 54002 TS Q
041928,001069: 7337 00006 EXTEND
041929,001070: 7340 24000 AUG A # FORMS +-1.0.
041930,001071: 7341 60146 AD MPAC +2
041931,001072: 7342 54146 TS MPAC +2
041932,001073: 7343 37767 CAF ZERO
041933,001074: 7344 60002 AD Q
041934,001075: 7345 60145 AD MPAC +1
041935,001076: 7346 54145 TS MPAC +1
041936,001077: 7347 37767 CAF ZERO
041937,001078: 7350 60002 AD Q # Q STILL HAS POSMAX OR NEGMAX IN IT.
041938,001079: 7351 60144 AD MPAC
041939,001080: 7352 54144 ARGZERO2 TS MPAC # ALWAYS SKIPPING UNLESS ARGZERO.
041940,001081: 7353 54145 TS MPAC +1
041941,001082: 7354 00001 TC L # RETURN VIA L.
041942,001083:
041943,001084: 7355 54146 ARGZERO TS MPAC +2 # SET ALL THREE MPAC REGISTERS TO ZERO.
041944,001085: 7356 17352 TCF ARGZERO2
041945,001086:
041946,001087: # SHORTMP MULTIPLIES THE TP CONTENTS OF MPAC BY THE SINGLE PRECISION NUMBER ARRIVING IN A.
041947,001088:
041948,001089: 7357 54125 SHORTMP TS MPTEMP
041949,001090: 7360 00006 EXTEND
041950,001091: 7361 70146 MP MPAC +2
041951,001092: 7362 54146 TS MPAC +2
041952,001093: 7363 37767 CAF ZERO # SO SUBSEQUENT DAS WILL WORK.
041953,001094: 7364 56145 XCH MPAC +1
041954,001095: 7365 00006 EXTEND
041955,001096: 7366 70125 MP MPTEMP
041956,001097: 7367 20146 DAS MPAC +1
041957,001098: 7370 56144 XCH MPAC # SETTING MPAC TO 0.
041958,001099: 7371 00006 EXTEND
041959,001100: 7372 70125 MP MPTEMP
041960,001101: 7373 20145 DAS MPAC
041961,001102: 7374 00002 TC Q
041962,001103:
![]() |
Page 987 |
041964,001105: # DMPNSUB MULTIPLIES THE DP FRACTION ARRIVING IN MPAC BY THE SP
041965,001106: # INTEGER ARRIVING IN A. THE DP PRODUCT DEPARTS BOTH IN MPAC AND IN
041966,001107: # A AND L. NOTE THAT DMPNSUB NORMALLY INCREASES THE MAGNITUDE OF THE
041967,001108: # CONTENTS OF MPAC. THE CUSTOMER MUST INSURE THAT B(A) X B(MPAC,MPAC+1)
041968,001109: # AND B(A) X B(MPAC) ARE LESS THAN 1 IN MAGNITUDE, WHERE B, AS IS OBVIOUS,
041969,001110: # INDICATES THE ARRIVING CONTENTS.
041970,001111:
041971,001112: 7375 54125 DMPNSUB TS DMPNTEMP
041972,001113: 7376 00006 EXTEND
041973,001114: 7377 70145 MP MPAC +1
041974,001115: 7400 52145 DXCH MPAC # LOW PRODUCT TO MPAC, HIGH FACTOR TO A
041975,001116: 7401 00006 EXTEND
041976,001117: 7402 70125 MP DMPNTEMP
041977,001118: 7403 30001 CA L
041978,001119: 7404 26144 ADS MPAC # COMPLETING THE PRODUCT IN MPAC
041979,001120: 7405 00006 EXTEND
041980,001121: 7406 30145 DCA MPAC # BRINGING THE PRODUCT INTO A AND L
041981,001122: 7407 00002 TC Q
041982,001123:
![]() |
Page 988 |
041984,001125: # MISCELLANEOUS VECTOR OPERATIONS. INCLUDED HERE ARE THE FOLLOWING:
041985,001126:
041986,001127: # 1. DOT DP VECTOR DOT PRODUCT.
041987,001128: # 2. VXV DP VECTOR CROSS PRODUCT.
041988,001129: # 3. VXSC DP VECTOR TIMES SCALAR.
041989,001130: # 4. V/SC DP VECTOR DIVIDED BY SCALAR.
041990,001131: # 5. VPROJ DP VECTOR PROJECTION. ( (MPAC.X)MPAC ).
041991,001132: # 6. VXM DP VECTOR POST-MULTIPLIED BY MATRIX.
041992,001133: # 7. MXV DP VECTOR PRE-MULTIPLIED BY MATRIX.
041993,001134:
041994,001135:
041995,001136: 7410 07226 DOT TC PREDOT # DO THE DOT PRODUCT AND EXIT, CHANGING
041996,001137: 7411 37767 CAF ZERO # THE MODE TO DP SCALAR.
041997,001138: 7412 16124 TCF NEWMODE
041998,001139:
041999,001140:
042000,001141: 7413 37762 MXV CAF TWO # SET UP MATINC AND DOTINC FOR ROW
042001,001142: 7414 54130 TS MATINC # VECTORS.
042002,001143: 7415 17421 TCF VXM/MXV # GO TO COMMON PORTION.
042003,001144:
042004,001145: 7416 44570 VXM CS TEN # SET MATINC AND DOTINC TO REFER TO MATRIX
042005,001146: 7417 54130 TS MATINC # AS THREE COLUMN VECTORS.
042006,001147: 7420 36306 CAF SIX
042007,001148:
![]() |
Page 989 |
042009,001150: # COMMON PORTION OF MXV AND VXM.
042010,001151:
042011,001152: 7421 54126 VXM/MXV TS DOTINC
042012,001153: # ITRACE (2) REFERS TO "VXM/MXV".
042013,001154: 7422 07612 TC MPACVBUF # SAVE VECTOR IN MPAC FOR FURTHER USE.
042014,001155:
042015,001156: 7423 07230 TC DOTSUB # GO DOT TO GET X COMPONENT OF ANSWER.
042016,001157: 7424 00006 EXTEND
042017,001158: 7425 30113 DCA VBUF # MOVE MPAC VECTOR BACK INTO MPAC, SAVING
042018,001159: 7426 52145 DXCH MPAC # NEW X COMPONENT IN BUF2.
042019,001160: 7427 52124 DXCH BUF2
042020,001161: 7430 00006 EXTEND
042021,001162: 7431 30115 DCA VBUF +2
042022,001163: 7432 52150 DXCH MPAC +3
042023,001164: 7433 00006 EXTEND
042024,001165: 7434 30117 DCA VBUF +4
042025,001166: 7435 52152 DXCH MPAC +5
042026,001167: 7436 30130 CA MATINC # INITIALIZE ADDRWD FOR NEXT DOT PRODUCT.
042027,001168: 7437 26106 ADS ADDRWD # FORMS BASE ADDRESS OF NEXT COLUMN(ROW).
042028,001169:
042029,001170: 7440 07230 TC DOTSUB
042030,001171: 7441 52113 DXCH VBUF # MOVE GIVEN VECTOR BACK TO MPAC, SAVING Y
042031,001172: 7442 52145 DXCH MPAC # COMPONENT OF ANSWER IN VBUF +2.
042032,001173: 7443 52115 DXCH VBUF +2
042033,001174: 7444 52150 DXCH MPAC +3
042034,001175: 7445 52117 DXCH VBUF +4
042035,001176: 7446 52152 DXCH MPAC +5
042036,001177: 7447 30130 CA MATINC # FORM ADDRESS OF LAST COLUMN OR ROW.
042037,001178: 7450 26106 ADS ADDRWD
042038,001179:
042039,001180: 7451 07230 TC DOTSUB
042040,001181: 7452 52124 DXCH BUF2 # ANSWER NOW COMPLETE. PUT COMPONENTS INTO
042041,001182: 7453 52145 DXCH MPAC # PROPER MPAC REGISTERS.
042042,001183: 7454 52152 DXCH MPAC +5
042043,001184: 7455 52115 DXCH VBUF +2
042044,001185: 7456 52150 DXCH MPAC +3
042045,001186: 7457 16125 TCF DANZIG # EXIT.
042046,001187:
![]() |
Page 990 |
042048,001189: # VXSC - VECTOR TIMES SCALAR.
042049,001190:
042050,001191: 7460 10153 VXSC CCS MODE # TEST PRESENT MODE.
042051,001192: 7461 17507 TCF DVXSC # SEPARATE ROUTINE WHEN SCALAR IS IN MPAC.
042052,001193: 7462 17507 TCF DVXSC
042053,001194:
042054,001195: 7463 07161 VVXSC TC DMPSUB # COMPUTE X COMPONENT
042055,001196: 7464 07212 TC VROUND # AND ROUND IT.
042056,001197: 7465 52150 DXCH MPAC +3 # PUT Y COMPONENT INTO MPAC SAVING MPAC IN
042057,001198: 7466 52145 DXCH MPAC # MPAC +3.
042058,001199: 7467 52150 DXCH MPAC +3
042059,001200:
042060,001201: 7470 07161 TC DMPSUB # DO SAME FOR Y AND Z COMPONENTS.
042061,001202: 7471 07212 TC VROUND
042062,001203: 7472 52152 DXCH MPAC +5
042063,001204: 7473 52145 DXCH MPAC
042064,001205: 7474 52152 DXCH MPAC +5
042065,001206:
042066,001207: 7475 07161 TC DMPSUB
042067,001208: 7476 07212 TC VROUND
042068,001209: 7477 52145 VROTATEX DXCH MPAC # EXIT USED TO RESTORE MPAC AFTER THIS
042069,001210: 7500 52152 DXCH MPAC +5 # TYPE OF ROTATION. CALLED BY VECTOR SHIFT
042070,001211: 7501 52150 DXCH MPAC +3 # RIGHT, V/SC, ETC.
042071,001212: 7502 52145 DXCH MPAC
042072,001213: 7503 16125 TCF DANZIG
042073,001214:
![]() |
Page 991 |
042075,001216: # DP VECTOR PROJECTION ROUTINE.
042076,001217:
042077,001218: 7504 07226 VPROJ TC PREDOT # (MPAC.X)MPAC IS COMPUTED AND LEFT IN
042078,001219: 7505 47761 CS FOUR # MPAC. DO DOT AND FALL INTO DVXSC.
042079,001220: 7506 26106 ADS ADDRWD
042080,001221:
042081,001222: # VXSC WHEN SCALAR ARRIVES IN MPAC AND VECTOR IS AT X.
042082,001223:
042083,001224: 7507 00006 DVXSC EXTEND # SAVE SCALAR IN MPAC +3 AND GET X
042084,001225: 7510 30145 DCA MPAC # COMPONENT OF ANSWER.
042085,001226: 7511 52150 DXCH MPAC +3
042086,001227: 7512 07161 TC DMPSUB
042087,001228: 7513 07212 TC VROUND
042088,001229:
042089,001230: 7514 37762 CAF TWO # ADVANCE ADDRWD TO Y COMPONENT OF X.
042090,001231: 7515 26106 ADS ADDRWD
042091,001232: 7516 00006 EXTEND
042092,001233: 7517 30150 DCA MPAC +3 # PUT SCALAR BACK INTO MPAC AND SAVE
042093,001234: 7520 52145 DXCH MPAC # X RESULT IN MPAC +5.
042094,001235: 7521 52152 DXCH MPAC +5
042095,001236: 7522 07161 TC DMPSUB
042096,001237: 7523 07212 TC VROUND
042097,001238:
042098,001239: 7524 37762 CAF TWO
042099,001240: 7525 26106 ADS ADDRWD # TO Z COMPONENT.
042100,001241: 7526 52150 DXCH MPAC +3 # BRING SCALAR BACK, PUTTING Y RESULT IN
042101,001242: 7527 52145 DXCH MPAC # THE PROPER PLACE.
042102,001243: 7530 52150 DXCH MPAC +3
042103,001244: 7531 07161 TC DMPSUB
042104,001245: 7532 07212 TC VROUND
042105,001246:
042106,001247: 7533 52145 DXCH MPAC # PUT Z COMPONENT IN PROPER PLACE, ALSO
042107,001248: 7534 52152 DXCH MPAC +5 # POSITIONING X.
042108,001249: 7535 52145 DXCH MPAC
042109,001250:
042110,001251: 7536 47763 CS ONE # MODE HAS CHANGED TO VECTOR.
042111,001252: 7537 16124 TCF NEWMODE
042112,001253:
![]() |
Page 992 |
042114,001255: # THE VECTOR CROSS PRODUCT ROUTINE CALCULATES (X M -X M ,X M -X M ,X M -X M ) WHERE M IS THE VECTOR IN
042115,001256: # 3 2 2 3 1 3 3 1 2 1 1 2
042116,001257: # MPAC AND X THE VECTOR AT THE GIVEN ADDRESS.
042117,001258:
042118,001259:
042119,001260: 7540 00006 VXV EXTEND
042120,001261: 7541 30152 DCA MPAC +5 # FORM UP M3X1, LEAVING M1 IN VBUF.
042121,001262: 7542 52145 DXCH MPAC
042122,001263: 7543 52113 DXCH VBUF
042123,001264: 7544 07161 TC DMPSUB # BY X1.
042124,001265:
042125,001266: 7545 00006 EXTEND
042126,001267: 7546 40150 DCS MPAC +3 # CALCULATE -X1M2, SAVING X1M3 IN VBUF +2.
042127,001268: 7547 52145 DXCH MPAC
042128,001269: 7550 52115 DXCH VBUF +2
042129,001270: 7551 07161 TC DMPSUB
042130,001271:
042131,001272: 7552 37762 CAF TWO # ADVANCE ADDRWD TO X2.
042132,001273: 7553 26106 ADS ADDRWD
042133,001274: 7554 00006 EXTEND
042134,001275: 7555 40152 DCS MPAC +5 # PREPARE TO GET -X2M3, SAVING -X1M2 IN
042135,001276: 7556 52145 DXCH MPAC # MPAC +5.
042136,001277: 7557 52152 DXCH MPAC +5
042137,001278: 7560 07161 TC DMPSUB
042138,001279:
042139,001280: 7561 00006 EXTEND
042140,001281: 7562 30113 DCA VBUF # GET X2M1, SAVING -X2M3 IN VBUF +4.
042141,001282: 7563 52145 DXCH MPAC
042142,001283: 7564 52117 DXCH VBUF +4
042143,001284: 7565 07161 TC DMPSUB
042144,001285:
042145,001286: 7566 37762 CAF TWO # ADVANCE ADDRWD TO X3.
042146,001287: 7567 26106 ADS ADDRWD
042147,001288: 7570 00006 EXTEND
042148,001289: 7571 40113 DCS VBUF # GET -X3M1, ADDING X2M1 TO MPAC +5 TO
042149,001290: 7572 52145 DXCH MPAC # COMPLETE THE Z COMPONENT OF THE ANSWER.
042150,001291: 7573 20152 DAS MPAC +5
042151,001292:
042152,001293: 7574 00006 EXTEND
042153,001294: 7575 17577 BZF +2
042154,001295: 7576 07101 TC OVERFLOW
![]() |
Page 993 |
042156,001297: 7577 07161 TC DMPSUB
042157,001298: 7600 52115 DXCH VBUF +2 # MOVE X1M3 TO MPAC +3 SETTING UP FOR X3M2
042158,001299: 7601 52150 DXCH MPAC +3 # AND ADD -X3M1 TO MPAC +3 TO COMPLETE THE
042159,001300: 7602 52145 DXCH MPAC # Y COMPONENT OF THE RESULT.
042160,001301: 7603 20150 DAS MPAC +3
042161,001302:
042162,001303: 7604 00006 EXTEND
042163,001304: 7605 17607 BZF +2
042164,001305: 7606 07101 TC OVERFLOW
042165,001306:
042166,001307: 7607 07161 TC DMPSUB
042167,001308: 7610 52117 DXCH VBUF +4 # GO ADD -X2M3 TO X3M2 TO COMPLETE THE X
042168,001309: 7611 17046 TCF ENDVXV # COMPONENT (TAIL END OF DAD).
042169,001310:
042170,001311: # THE MPACVBUF SUBROUTINE SAVES THE VECTOR IN MPAC IN VBUF WITHOUT CLOBBERING MPAC.
042171,001312:
042172,001313: 7612 00006 MPACVBUF EXTEND # CALLED BY MXV, VXM, AND UNIT.
042173,001314: 7613 30145 DCA MPAC
042174,001315: 7614 52113 DXCH VBUF
042175,001316: 7615 00006 EXTEND
042176,001317: 7616 30150 DCA MPAC +3
042177,001318: 7617 52115 DXCH VBUF +2
042178,001319: 7620 00006 EXTEND
042179,001320: 7621 30152 DCA MPAC +5
042180,001321: 7622 52117 DXCH VBUF +4
042181,001322: 7623 00002 TC Q # RETURN TO CALLER.
042182,001323:
![]() |
Page 994 |
042184,001325: # INTERPRETIVE INSTRUCTIONS WHOSE EXECUTION CONSISTS OF PRINCIPALLY CALLING SUBROUTINES.
042185,001326:
042186,001327: 7624 07161 DMP1 TC DMPSUB # DMP INSTRUCTION.
042187,001328: 7625 16125 TCF DANZIG
042188,001329:
042189,001330: 7626 07161 DMPR TC DMPSUB
042190,001331: 7627 07211 TC ROUNDSUB +1 # (C(A) = +0).
042191,001332: 7630 16125 TCF DANZIG
042192,001333:
042193,001334: 7631 00006 DDV EXTEND
042194,001335: 7632 50106 INDEX ADDRWD # MOVE DIVIDEND INTO BUF.
042195,001336: 7633 30001 DCA 0
042196,001337: 7634 17641 TCF BDDV +4
042197,001338:
042198,001339: 7635 00006 BDDV EXTEND # MOVE DIVISOR INTO MPAC SAVING MPAC, THE
042199,001340: 7636 50106 INDEX ADDRWD # DIVIDEND, IN BUF.
042200,001341: 7637 30001 DCA 0
042201,001342: 7640 52145 DXCH MPAC
042202,001343: 7641 52121 +4 DXCH BUF
042203,001344: 7642 37767 CAF ZERO # DIVIDE ROUTINES IN BANK 0.
042204,001345: 7643 54004 TS FBANK
042205,001346: 7644 12352 TCF DDV/BDDV
042206,001347:
042207,001348: 7645 30106 SETPD CA ADDRWD # MUST SET TO WORK AREA, OR EBANK TROUBLE.
042208,001349: 7646 54156 TS PUSHLOC
042209,001350: 7647 16127 TCF NOIBNKSW # NO FBANK SWITCH REQUIRED.
042210,001351:
042211,001352: 7650 37767 TSLC CAF ZERO # SHIFTING ROUTINES LOCATED IN BANK 00.
042212,001353: 7651 54004 TS FBANK
042213,001354: 7652 12172 TCF TSLC2
042214,001355:
042215,001356: 7653 35342 GSHIFT CAF LOW7 # USED AS MASK AT GENSHIFT. THIS PROCESSES
042216,001357: 7654 54004 TS FBANK # ANY SHIFT INSTRUCTION (EXCEPT TSLC) WITH
042217,001358: 7655 12214 TCF GENSHIFT # AN ADDRESS (ROUTINES IN BANK 0).
042218,001359:
![]() |
Page 995 |
042220,001361: # THE FOLLOWING IS THE PROLOGUE TO V/SC. IF THE PRESENT MODE IS VECTOR, IT SAVES THE SCALAR AT X IN BUF
042221,001362: # AND CALLS THE V/SC ROUTINE IN BANK 0. IF THE PRESENT MODE IS SCALAR, IT MOVES THE VECTOR AT X INTO MPAC, SAVING
042222,001363: # THE SCALAR IN MPAC IN BUF BEFORE CALLING THE V/SC ROUTINE IN BANK 0.
042223,001364:
042224,001365:
042225,001366: 7656 10153 V/SC CCS MODE
042226,001367: 7657 17670 TCF DV/SC # MOVE VECTOR INTO MPAC.
042227,001368: 7660 17670 TCF DV/SC
042228,001369:
042229,001370: 7661 00006 VV/SC EXTEND
042230,001371: 7662 50106 INDEX ADDRWD
042231,001372: 7663 30001 DCA 0
042232,001373: 7664 52121 V/SC1 DXCH BUF # IN BOTH CASES, VECTOR IS NOW IN MPAC AND
042233,001374: 7665 37767 CAF ZERO # SCALAR IN BUF.
042234,001375: 7666 54004 TS FBANK
042235,001376: 7667 12630 TCF V/SC2
042236,001377:
042237,001378: 7670 00006 DV/SC EXTEND
042238,001379: 7671 50106 INDEX ADDRWD
042239,001380: 7672 30003 DCA 2
042240,001381: 7673 52150 DXCH MPAC +3
042241,001382: 7674 00006 EXTEND
042242,001383: 7675 50106 INDEX ADDRWD
042243,001384: 7676 30005 DCA 4
042244,001385: 7677 52152 DXCH MPAC +5
042245,001386:
042246,001387: 7700 47763 CS ONE # CHANGE MODE TO VECTOR.
042247,001388: 7701 54153 TS MODE
042248,001389:
042249,001390: 7702 00006 EXTEND
042250,001391: 7703 50106 INDEX ADDRWD
042251,001392: 7704 30001 DCA 0
042252,001393: 7705 52145 DXCH MPAC
042253,001394: 7706 17664 TCF V/SC1 # FINISH PROLOGUE AT COMMON SECTION.
042254,001395:
![]() |
Page 996 |
042256,001397: # SIGN AND COMPLEMENT INSTRUCTIONS.
042257,001398:
042258,001399: 7707 50106 SIGN INDEX ADDRWD # CALL COMP INSTRUCTION IF WORD AT X IS
042259,001400: 7710 10000 CCS 0 # NEGATIVE NON-ZERO.
042260,001401: 7711 16125 TCF DANZIG
042261,001402: 7712 17714 TCF +2
042262,001403: 7713 17722 TCF COMP # DO THE COMPLEMENT.
042263,001404:
042264,001405: 7714 50106 INDEX ADDRWD
042265,001406: 7715 10001 CCS 1
042266,001407: 7716 16125 TCF DANZIG
042267,001408: 7717 16125 TCF DANZIG
042268,001409: 7720 17722 TCF COMP
042269,001410: 7721 16125 TCF DANZIG
042270,001411: 7722 00006 COMP EXTEND # COMPLEMENT DP MPAC IN EVERY CASE.
042271,001412: 7723 40145 DCS MPAC
042272,001413: 7724 52145 DXCH MPAC
042273,001414:
042274,001415: 7725 10153 CCS MODE # EITHER COMPLEMENT MPAC +3 OR THE REST OF
042275,001416: 7726 17737 TCF DCOMP # THE VECTOR ACCUMULATOR.
042276,001417: 7727 17737 TCF DCOMP
042277,001418:
042278,001419: 7730 00006 EXTEND # VECTOR COMPLEMENT.
042279,001420: 7731 40150 DCS MPAC +3
042280,001421: 7732 52150 DXCH MPAC +3
042281,001422: 7733 00006 EXTEND
042282,001423: 7734 40152 DCS MPAC +5
042283,001424: 7735 52152 DXCH MPAC +5
042284,001425: 7736 16125 TCF DANZIG
042285,001426:
042286,001427: 7737 40146 DCOMP CS MPAC +2
042287,001428: 7740 54146 TS MPAC +2
042288,001429: 7741 16125 TCF DANZIG
042289,001430:
![]() |
Page 997 |
042291,001432: # CONSTANTS REQUIRED IN FIXED-FIXED.
042292,001433: 7742 37777 DPOSMAX OCT 37777
042293,001434: 7743 37777 POSMAX OCT 37777
042294,001435: 7744 7744 LIMITS EQUALS POSMAX +1
042295,001436: 7744 57777 NEG1/2 OCT -20000 # MUST BE TWO LOCATIONS AHEAD OF POS1/2.
042296,001437:
042297,001438: 7745 40000 BIT15 OCT 40000 # BIT TABLE FOLLOWS.
042298,001439: 7746 20000 BIT14 OCT 20000
042299,001440: 7747 10000 BIT13 OCT 10000
042300,001441: 7750 04000 BIT12 OCT 04000
042301,001442: 7751 02000 BIT11 OCT 02000
042302,001443: 7752 01000 BIT10 OCT 01000
042303,001444: 7753 00400 BIT9 OCT 00400
042304,001445: 7754 00200 BIT8 OCT 00200
042305,001446: 7755 00100 BIT7 OCT 00100
042306,001447: 7756 00040 BIT6 OCT 00040
042307,001448: 7757 00020 BIT5 OCT 00020
042308,001449: 7760 00010 BIT4 OCT 00010
042309,001450: 7761 00004 BIT3 OCT 00004
042310,001451: 7762 00002 BIT2 OCT 00002
042311,001452: 7763 00001 BIT1 OCT 00001
042312,001453:
042313,001454: 7764 7745 NEGMAX EQUALS BIT15
042314,001455: 7764 7746 HALF EQUALS BIT14
042315,001456: 7764 7746 POS1/2 EQUALS HALF
042316,001457: 7764 7747 QUARTER EQUALS BIT13
042317,001458: 7764 7751 2K EQUALS BIT11
042318,001459: 7764 00013 ELEVEN DEC 11 B-14
042319,001460: 7765 7764 NOUTCON = ELEVEN
042320,001461: 7765 4570 TEN = BINCON
042321,001462: 7765 4530 NINE = R2D1
042322,001463: 7765 7760 EIGHT EQUALS BIT4
042323,001464: 7765 00007 SEVEN OCT 7
042324,001465: 7766 6306 SIX EQUALS REVCNT
042325,001466: 7766 00005 FIVE OCT 5
042326,001467: 7767 7761 FOUR EQUALS BIT3
042327,001468: 7767 6311 THREE EQUALS OCTAL3
042328,001469: 7767 7762 TWO EQUALS BIT2
042329,001470: 7767 7763 ONE EQUALS BIT1
042330,001471: 7767 00000 ZERO OCT 0
042331,001472: 7770 77777 NEG0 OCT 77777
042332,001473: 7771 77776 NEGONE DEC -1 B-14
042333,001474:
042334,001475: 7772 7771 NEG1 = NEGONE
042335,001476: 7772 7771 MINUS1 EQUALS NEG1
042336,001477:
042337,001478: 5336 BLOCK 02
042338,001479:
042339,001480: 5336 77775 NEG2 OCT 77775
![]() |
Page 998 |
042341,001482: 5337 01777 LOW10 OCT 1777
042342,001483: 5340 77774 NEG3 DEC -3 B-14
042343,001484: 5341 00777 LOW9 OCT 777
042344,001485: 5342 00177 LOW7 OCT 177
042345,001486: 5343 00017 LOW4 OCT 17
042346,001487: 5344 7765 LOW3 EQUALS SEVEN
042347,001488: 5344 6311 LOW2 EQUALS THREE
042348,001489:
042349,001490: 5344 00032 CALLCODE OCT 00032
042350,001491: 5345 40014 DLOADCOD OCT 40014
042351,001492: 5346 7745 VLOADCOD EQUALS BIT15
042352,001493: 5346 40015 DLOAD* OCT 40015
042353,001494: 5347 6153 VLOAD* EQUALS OCT40001
042354,001495: 5347 00112 LVBUF ADRES VBUF
042355,001496: 5350 5210 BIT13-14 = PRIO30
042356,001497: # THERE ARE FOUR POSSIBLE SETTINGS FOR CHANNEL 07 (WNACTV) FOR ACCESSING THE EVENTUALLY THREE AND ONE-HALF
042357,001498: # PRESENTLY ONE AND ONE-HALF SUPERBANKS.
042358,001499:
042359,001500: 5350 00060 SUPER011 OCT 60 # BITS FOR SUPERBNK SETTING 011
042360,001501: 5351 7755 SUPER100 EQUALS BIT7 # BITS FOR SUPERBNK SETTING 100
042361,001502: # (LAST 4K OF ROPE)
042362,001503: # SUPER101 OCT 120 BITS FOR SUPERBNK SETTING 101
042363,001504: # (FIRST 8K OF ACM)
042364,001505: # SUPER110 OCT 140 BITS FOR SUPERBNK SETTING 110
042365,001506: # (LAST 8K OF ACM)
042366,001507: 5351 74000 HIGH4 OCT 74000
042367,001508: 5352 01400 OCT1400 OCT 01400
042368,001509: 5353 00055 DEC45 DEC 45 B-14
042369,001510:
![]() |
Page 999 |
042371,001512: # THE FOLLOWING SHORT SHIFT CODES REQUIRE NO ADDRESS WORD:
042372,001513:
042373,001514: # 1. SR1 TO SR4 SCALAR SHIFT RIGHT.
042374,001515: # 2. SR1R TO SR4R SCALAR SHIFT RIGHT AND ROUND.
042375,001516: # 3. SL1 TO SL4 SCALAR SHIFT LEFT.
042376,001517: # 4. SL1R TO SL4R SCALAR SHIFT LEFT AND ROUND.
042377,001518:
042378,001519: # 5. VSR1 TO VSR8 VECTOR SHIFT RIGHT (ALWAYS ROUNDS).
042379,001520: # 6. VSL1 TO VSL8 VECTOR SHIFT LEFT (NEVER ROUNDS).
042380,001521:
042381,001522: # THE FOLLOWING CODES REQUIRE AN ADDRESS WHICH MAY BE INDEXED:*
042382,001523:
042383,001524: # 1. SR SCALAR SHIFT RIGHT.
042384,001525: # 2. SRR SCALAR SHIFT RIGHT AND ROUND.
042385,001526: # 3. SL SCALAR SHIFT LEFT.
042386,001527: # 4. SLR SCALAR SHIFT LEFT AND ROUND.
042387,001528:
042388,001529: # 5. VSR VECTOR SHIFT RIGHT.
042389,001530: # 6. VSL VECTOR SHIFT LEFT.
042390,001531:
042391,001532: # * IF THE ADDRESS IS INDEXED, AND THE INDEX MODIFICATION RESULTS IN A NEGATIVE SHIFT COUNT, A SHIFT OF THE
042392,001533: # ABSOLUTE VALUE OF THE COUNT IS DONE IN THE OPPOSITE DIRECTION.
042393,001534:
042394,001535: 00,2017 BANK 00
042395,001536:
042396,001537: 00,2017 36306 SHORTT CAF SIX # SCALAR SHORT SHIFTS COME HERE. THE SHIFT
042397,001538: 00,2020 70020 MASK CYR # COUNT-1 IS NOW IN BITS 2-3 OF CYR. THE
042398,001539: 00,2021 54021 TS SR # ROUNDING BIT IS IN BIT1 AT THIS POINT.
042399,001540:
042400,001541: 00,2022 10020 CCS CYR # SEE IF RIGHT OR LEFT SHIFT DESIRED.
042401,001542: 00,2023 12101 TCF TSSL # SHIFT LEFT.
042402,001543:
042403,001544: 00,2024 00024 SRDDV DEC 20 B-14 # MPTEMP SETTING FOR SR BEFORE DDV.
042404,001545:
042405,001546: 00,2025 50021 TSSR INDEX SR # GET SHIFTING BIT.
042406,001547: 00,2026 37746 CAF BIT14
042407,001548: 00,2027 54125 TS MPTEMP
042408,001549:
042409,001550: 00,2030 10020 CCS CYR # SEE IF A ROUND IS DESIRED.
042410,001551: 00,2031 02050 RIGHTR TC MPACSRND # YES - SHIFT RIGHT AND ROUND.
042411,001552: 00,2032 16124 TCF NEWMODE # SET MODE TO DP (C(A) = 0).
042412,001553: 00,2033 30125 MPACSHR CA MPTEMP # DO A TRIPLE PRECISION SHIFT RIGHT.
042413,001554: 00,2034 00006 EXTEND
042414,001555: 00,2035 70146 MP MPAC +2
042415,001556: 00,2036 54146 +3 TS MPAC +2 # (EXIT FROM SQRT AND ABVAL).
042416,001557: 00,2037 30125 CA MPTEMP
042417,001558: 00,2040 00006 EXTEND
042418,001559: 00,2041 70144 MP MPAC # SHIFT MAJOR PART INTO A,L AND PLACE IN
![]() |
Page 1000 |
042420,001561: 00,2042 52145 DXCH MPAC # MPAC,+1.
042421,001562: 00,2043 30125 CA MPTEMP
042422,001563: 00,2044 00006 EXTEND
042423,001564: 00,2045 70001 MP L # ORIGINAL C(MPAC +1).
042424,001565: 00,2046 20146 DAS MPAC +1 # GUARANTEED NO OVERFLOW.
042425,001566: 00,2047 16125 TCF DANZIG
042426,001567:
042427,001568: # MPAC SHIFT RIGHT AND ROUND SUBROUTINES.
042428,001569:
042429,001570: 00,2050 30146 MPACSRND CA MPAC +2 # WE HAVE TO DO ALL THREE MULTIPLIES SINCE
042430,001571: 00,2051 00006 EXTEND # MPAC +1 AND MPAC +2 MIGHT HAVE SIGN
042431,001572: 00,2052 70125 MP MPTEMP # DISAGREEMENT WITH A SHIFT RIGHT OF 1.
042432,001573: 00,2053 56145 XCH MPAC +1
042433,001574: 00,2054 00006 EXTEND
042434,001575: 00,2055 70125 MP MPTEMP
042435,001576: 00,2056 56145 XCH MPAC +1 # TRIAL MINOR PART.
042436,001577: 00,2057 60001 AD L
042437,001578:
042438,001579: 00,2060 60000 VSHR2 DOUBLE # (FINISH VECTOR COMPONENT SHIFT RIGHT
042439,001580: 00,2061 54146 TS MPAC +2 # AND ROUND.
042440,001581: 00,2062 12064 TCF +2
042441,001582: 00,2063 26145 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
042442,001583:
042443,001584: 00,2064 37767 CAF ZERO
042444,001585: 00,2065 54146 TS MPAC +2
042445,001586: 00,2066 56144 XCH MPAC # SETTING TO ZERO SO FOLLOWING DAS WORKS.
042446,001587: 00,2067 00006 EXTEND
042447,001588: 00,2070 70125 MP MPTEMP
042448,001589: 00,2071 20145 DAS MPAC # AGAIN NO OVERFLOW.
042449,001590: 00,2072 00002 TC Q
042450,001591:
042451,001592: 00,2073 30125 VSHRRND CA MPTEMP # ENTRY TO SHIFT RIGHT AND ROUND MPAC WHEN
042452,001593: 00,2074 00006 EXTEND # MPAC CONTAINS A VECTOR COMPONENT.
042453,001594: 00,2075 70145 MP MPAC +1
042454,001595: 00,2076 54145 TS MPAC +1
042455,001596: 00,2077 56001 XCH L
042456,001597: 00,2100 12060 TCF VSHR2 # GO ADD ONE IF NECESSARY AND FINISH.
042457,001598:
![]() |
Page 1001 |
042459,001600: # ROUTINE FOR SHORT SCALAR SHIFT LEFT (AND MAYBE ROUND).
042460,001601:
042461,001602: 00,2101 30021 TSSL CA SR # GET SHIFT COUNT FOR SR.
042462,001603: 00,2102 54125 +1 TS MPTEMP
042463,001604:
042464,001605: 00,2103 00006 +2 EXTEND # ENTRY HERE FROM SL FOR SCALARS.
042465,001606: 00,2104 30146 DCA MPAC +1 # SHIFTING LEFT ONE PLACE AT A TIME IS
042466,001607: 00,2105 20146 DAS MPAC +1 # FASTER THAN DOING THE WHOLE SHIFT WITH
042467,001608: 00,2106 60144 AD MPAC # MULTIPLIES ASSUMING THAT FREQUENCY OF
042468,001609: 00,2107 60144 AD MPAC # SHIFT COUNTS GOES DOWN RAPIDLY AS A
042469,001610: 00,2110 54144 TS MPAC # FUNCTION OF THEIR MAGNITUDE.
042470,001611: 00,2111 12113 TCF +2
042471,001612: 00,2112 54111 TS OVFIND # OVERFLOW. (LEAVES OVERFLOW-CORRECTED
042472,001613: # RESULT ANYWAY).
042473,001614: 00,2113 10125 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNT.
042474,001615: 00,2114 12102 TCF TSSL +1
042475,001616:
042476,001617: 00,2115 10020 CCS CYR # SEE IF ROUND WANTED.
042477,001618: 00,2116 07210 ROUND TC ROUNDSUB # YES - ROUND AND EXIT.
042478,001619: 00,2117 16125 TCF DANZIG # SL LEAVES A ZERO IN CYR FOR NO ROUND.
042479,001620: 00,2120 16125 TCF DANZIG # NO - EXIT IMMEDIATL
042480,001621:
![]() |
Page 1002 |
042482,001623: # VECTOR SHIFTING ROUTINES.
042483,001624:
042484,001625: 00,2121 37765 SHORTV CAF LOW3 # SAVE 3 BIT SHIFT COUNT - 1 WITHOUT
042485,001626: 00,2122 70020 MASK CYR # EDITING CYR.
042486,001627: 00,2123 54125 TS MPTEMP
042487,001628: 00,2124 10020 CCS CYR # SEE IF LEFT OR RIGHT SHIFT.
042488,001629: 00,2125 12145 TCF VSSL # VECTOR SHIFT LEFT.
042489,001630: 00,2126 00176 OCT176 OCT 176 # USED IN PROCESSED SHIFTS WITH - COUNT.
042490,001631:
042491,001632: 00,2127 50125 VSSR INDEX MPTEMP # (ENTRY FROM SR). PICK UP SHIFTING BIT.
042492,001633: 00,2130 37746 CAF BIT14 # MPTEMP CONTAINS THE SHIFT COUNT - 1.
042493,001634: 00,2131 54125 TS MPTEMP
042494,001635: 00,2132 02073 TC VSHRRND # SHIFT X COMPONENT.
042495,001636:
042496,001637: 00,2133 52145 DXCH MPAC # SWAP X AND Y COMPONENTS.
042497,001638: 00,2134 52150 DXCH MPAC +3
042498,001639: 00,2135 52145 DXCH MPAC
042499,001640: 00,2136 02073 TC VSHRRND # SHIFT Y COMPONENT.
042500,001641:
042501,001642: 00,2137 52145 DXCH MPAC # SWAP Y AND Z COMPONENTS.
042502,001643: 00,2140 52152 DXCH MPAC +5
042503,001644: 00,2141 52145 DXCH MPAC
042504,001645: 00,2142 02073 TC VSHRRND # SHIFT Z COMPONENT.
042505,001646:
042506,001647: 00,2143 17477 TCF VROTATEX # RESTORE COMPONENTS TO PROPER PLACES.
042507,001648:
![]() |
Page 1003 |
042509,001650: # VECTOR SHIFT LEFT - DONE ONE PLACE AT A TIME.
042510,001651:
042511,001652: 00,2144 54125 -1 TS MPTEMP # SHIFTING LOOP.
042512,001653:
042513,001654: 00,2145 00006 VSSL EXTEND
042514,001655: 00,2146 30145 DCA MPAC
042515,001656: 00,2147 20145 DAS MPAC
042516,001657: 00,2150 00006 EXTEND
042517,001658: 00,2151 12153 BZF +2
042518,001659: 00,2152 07101 TC OVERFLOW
042519,001660:
042520,001661: 00,2153 00006 EXTEND
042521,001662: 00,2154 30150 DCA MPAC +3
042522,001663: 00,2155 20150 DAS MPAC +3
042523,001664: 00,2156 00006 EXTEND
042524,001665: 00,2157 12161 BZF +2
042525,001666: 00,2160 07101 TC OVERFLOW
042526,001667:
042527,001668: 00,2161 00006 EXTEND
042528,001669: 00,2162 30152 DCA MPAC +5
042529,001670: 00,2163 20152 DAS MPAC +5
042530,001671: 00,2164 00006 EXTEND
042531,001672: 00,2165 12167 BZF +2
042532,001673: 00,2166 07101 TC OVERFLOW
042533,001674:
042534,001675: 00,2167 10125 CCS MPTEMP # LOOP ON DECREMENTED SHIFT COUNTER.
042535,001676: 00,2170 12144 TCF VSSL -1
042536,001677: 00,2171 16125 TCF DANZIG # EXIT.
042537,001678:
![]() |
Page 1004 |
042539,001680: # TSLC - TRIPLE SHIFT LEFT AND COUNT. SHIFTS MPAC LEFT UNTIL GREATER THAN .5 IN MAGNITUDE, LEAVING
042540,001681: # THE COMPLEMENT OF THE NUMBER OF SHIFTS REQUIRED IN X.
042541,001682:
042542,001683: 00,2172 54125 TSLC2 TS MPTEMP # START BY ZEROING SHIFT COUNT (IN A NOW).
042543,001684: 00,2173 07001 TC BRANCH # EXIT WITH NO SHIFTING IF ARGUMENT ZERO.
042544,001685: 00,2174 12176 TCF +2
042545,001686: 00,2175 12212 TCF ENDTSLC # STORES ZERO SHIFT COUNT IN THIS CASE.
042546,001687:
042547,001688: 00,2176 07327 TC TPAGREE # MAY CAUSE UPSHIFT OF ONE EXTRA PLACE.
042548,001689:
042549,001690: 00,2177 30144 CA MPAC # BEGIN NORMALIZATION LOOP.
042550,001691: 00,2200 12207 TCF TSLCTEST
042551,001692:
042552,001693: 00,2201 24125 TSLCLOOP INCR MPTEMP # INCREMENT SHIFT COUNTER.
042553,001694: 00,2202 00006 EXTEND
042554,001695: 00,2203 30146 DCA MPAC +1
042555,001696: 00,2204 20146 DAS MPAC +1
042556,001697: 00,2205 60144 AD MPAC
042557,001698: 00,2206 26144 ADS MPAC
042558,001699: 00,2207 60000 TSLCTEST DOUBLE # SEE IF (ANOTHER) SHIFT IS REQUIRED.
042559,001700: 00,2210 54000 OVSK
042560,001701: 00,2211 12201 TCF TSLCLOOP # YES - INCREMENT COUNT AND SHIFT AGAIN.
042561,001702:
042562,001703: 00,2212 40125 ENDTSLC CS MPTEMP
042563,001704: 00,2213 16701 TCF STORE1 # STORE SHIFT COUNT AND RETURN TO DANZIG.
042564,001705:
![]() |
Page 1005 |
042566,001707: # THE FOLLOWING ROUTINES PROCESSES THE GENERAL SHIFT INSTRUCTIONS SR, SRR, SL, AND SLR.
042567,001708: # THE GIVEN ADDRESS IS DECODED AS FOLLOWS:
042568,001709:
042569,001710: # BITS 1-7 SHIFT COUNT (SUBADDRESS) LESS THAN 125 DECIMAL.
042570,001711: # BIT 8 PSEUDO SIGN BIT (DETECTS CHANGE IN SIGN IN INDEXED SHIFTS).
042571,001712: # BIT 9 0 FOR LEFT SHIFT, AND 1 FOR RIGHT SHIFT.
042572,001713: # BIT 10 1 FOR TERMINAL ROUND ON SCALAR SHIFTS, 0 OTHERWISE.
042573,001714: # BITS 11-13 0.
042574,001715: # BIT 14 1.
042575,001716: # BIT 15 0.
042576,001717:
042577,001718: # THE ABOVE ENCODING IS DONE BY THE YUL SYSTEM.
042578,001719:
042579,001720:
042580,001721: 00,2214 70106 GENSHIFT MASK ADDRWD # GET SHIFT COUNT, TESTING FOR ZERO.
042581,001722: 00,2215 10000 CCS A # (ARRIVES WITH C(A) = LOW7).
042582,001723: 00,2216 12224 TCF GENSHFT2 # IF NON-ZERO, PROCEED WITH DECREMENTED CT
042583,001724:
042584,001725: 00,2217 37752 CAF BIT10 # ZERO SHIFT COUNT. NO SHIFTS NEEDED BUT
042585,001726: 00,2220 70106 MASK ADDRWD # WE MIGHT HAVE TO ROUND MPAC ON SLR AND
042586,001727: 00,2221 10000 CCS A # SRR (SCALAR ONLY).
042587,001728: 00,2222 07210 TC ROUNDSUB
042588,001729: 00,2223 16125 TCF DANZIG
042589,001730:
042590,001731: 00,2224 54125 GENSHFT2 TS MPTEMP # DECREMENTED SHIFT COUNT TO MPTEMP.
042591,001732: 00,2225 37754 CAF BIT8 # TEST MEANING OF LOW SEVEN BIT COUNT IN
042592,001733: 00,2226 00006 EXTEND # MPTEMP NOW.
042593,001734: 00,2227 70106 MP ADDRWD
042594,001735: 00,2230 76311 MASK LOW2 # JUMPS ON SHIFT DIRECTION (BIT8) AND
042595,001736: 00,2231 50000 INDEX A
042596,001737: 00,2232 12233 TCF +1 # ORIGINAL SHIFT DIRECTION (BIT 9).
042597,001738: 00,2233 12332 TCF RIGHT- # NEGATIVE SHIFT COUNT FOR SL OR SLR.
042598,001739: 00,2234 12341 TCF LEFT # SL OR SLR.
042599,001740: 00,2235 12336 TCF LEFT- # NEGATIVE SHIFT COUNT WITH SR OR SRR.
042600,001741:
![]() |
Page 1006 |
042602,001743: # GENERAL SHIFT RIGHT.
042603,001744:
042604,001745: 00,2236 10153 RIGHT CCS MODE # SEE IF VECTOR OR SCALAR.
042605,001746: 00,2237 12277 TCF GENSCR
042606,001747: 00,2240 12277 TCF GENSCR
042607,001748:
042608,001749: 00,2241 30125 CA MPTEMP # SEE IF SHIFT COUNT LESS THAN 14D.
042609,001750: 00,2242 63710 VRIGHT2 AD NEG12
042610,001751: 00,2243 00006 EXTEND
042611,001752: 00,2244 62127 BZMF VSSR # IF SO, BRANCH AND SHIFT IMMEDIATELY.
042612,001753:
042613,001754: 00,2245 67771 AD NEGONE # IF NOT, REDUCE MPTEMP BY A TOTAL OF 14,
042614,001755: 00,2246 54125 TS MPTEMP # AND DO A SHIFT RIGHT AND ROUND BY 14.
042615,001756: 00,2247 37767 CAF ZERO # THE ROUND AT THIS STAGE MAY INTRODUCE A
042616,001757: 00,2250 54001 TS L # ONE BIT ERROR IN A SHIFT RIGHT 15D.
042617,001758: 00,2251 56144 XCH MPAC
042618,001759: 00,2252 56145 XCH MPAC +1
042619,001760: 00,2253 02272 TC SETROUND # X COMPONENT NOW SHIFTED, SO MAKE UP THE
042620,001761: 00,2254 20145 DAS MPAC # ROUNDING QUANTITY (0 IN A AND 0 OR +-1
042621,001762: # IN L).
042622,001763: 00,2255 56147 XCH MPAC +3 # REPEAT THE ABOVE PROCESS FOR Y AND Z.
042623,001764: 00,2256 56150 XCH MPAC +4
042624,001765: 00,2257 02272 TC SETROUND
042625,001766: 00,2260 20150 DAS MPAC +3 # NO OVERFLOW ON THESE ADDS.
042626,001767:
042627,001768: 00,2261 56151 XCH MPAC +5
042628,001769: 00,2262 56152 XCH MPAC +6
042629,001770: 00,2263 02272 TC SETROUND
042630,001771: 00,2264 20152 DAS MPAC +5
042631,001772:
042632,001773: 00,2265 10125 CCS MPTEMP # SEE IF DONE, DOING FINAL DECREMENT.
042633,001774: 00,2266 54125 TS MPTEMP
042634,001775: 00,2267 12242 TCF VRIGHT2
042635,001776: 00,2270 04604 BIASLO DEC .2974 B-1 # SQRT CONSTANT
042636,001777:
042637,001778: 00,2271 16125 TCF DANZIG
042638,001779:
042639,001780:
042640,001781: 00,2272 60000 SETROUND DOUBLE # MAKES UP ROUNDING QUANTITY FROM ARRIVING
042641,001782: 00,2273 54146 TS MPAC +2 # C(A). L IS ZERO INITIALLY.
042642,001783: 00,2274 37767 CAF ZERO
042643,001784: 00,2275 56001 XCH L
042644,001785: 00,2276 00002 TC Q # RETURN AND DO THE DAS, RESETTING L TO 0.
042645,001786:
![]() |
Page 1007 |
042647,001788: # PROCESS SR AND SRR FOR SCALARS.
042648,001789:
042649,001790: 00,2277 30125 GENSCR CA MPTEMP # SEE IF THE ORIGINAL SHIFT COUNT WAS LESS
042650,001791: 00,2300 63710 +1 AD NEG12 # THAN 14D.
042651,001792: 00,2301 00006 EXTEND
042652,001793: 00,2302 62322 BZMF DOSSHFT # DO THE SHIFT IMMEDIATELY IF SO.
042653,001794:
042654,001795: 00,2303 67771 +4 AD NEGONE # IF NOT, DECREMENT SHIFT COUNT BY 14D AND
042655,001796: 00,2304 54125 TS MPTEMP # SHIFT MPAC RIGHT 14 PLACES.
042656,001797: 00,2305 37767 CAF ZERO
042657,001798: 00,2306 56144 XCH MPAC
042658,001799: 00,2307 56145 XCH MPAC +1
042659,001800: 00,2310 54146 TS MPAC +2
042660,001801: 00,2311 10125 CCS MPTEMP # SEE IF FINISHED, DO FINAL DECREMENT.
042661,001802: 00,2312 54125 TS MPTEMP
042662,001803: 00,2313 02300 TC GENSCR +1
042663,001804: 00,2314 22650 SLOPEHI DEC .5884 # SQRT CONSTANT.
042664,001805: 00,2315 37752 CAF BIT10 # FINISHED WITH SHIFT. SEE IF ROUND
042665,001806: 00,2316 70106 MASK ADDRWD # WANTED.
042666,001807: 00,2317 10000 CCS A
042667,001808: 00,2320 07210 TC ROUNDSUB
042668,001809: 00,2321 16125 TCF DANZIG # DO SO AND/OR EXIT.
042669,001810:
042670,001811: 00,2322 50125 DOSSHFT INDEX MPTEMP # PICK UP SHIFTING BIT.
042671,001812: 00,2323 37746 CAF BIT14
042672,001813: 00,2324 54125 TS MPTEMP
042673,001814: 00,2325 37752 CAF BIT10 # SEE IF TERMINAL ROUND DESIRED.
042674,001815: 00,2326 70106 MASK ADDRWD
042675,001816: 00,2327 10000 CCS A
042676,001817: 00,2330 12031 TCF RIGHTR # YES.
042677,001818: 00,2331 12033 TCF MPACSHR # JUST SHIFT RIGHT.
042678,001819:
![]() |
Page 1008 |
042680,001821: # PROCESS THE RIGHT- (SL(R) WITH A NEGATIVE COUNT), LEFT-, AND LEFT OPTIONS.
042681,001822:
042682,001823: 00,2332 40125 RIGHT- CS MPTEMP # GET ABSOLUTE VALUE - 1 OF SHIFT COUNT
042683,001824: 00,2333 62126 AD OCT176 # UNDERSTANDING THAT BIT8 (PSEUDO-SIGN)
042684,001825: 00,2334 54125 TS MPTEMP # WAS 1 INITIALLY.
042685,001826: 00,2335 12236 TCF RIGHT # DO NORMAL SHIFT RIGHT.
042686,001827:
042687,001828: 00,2336 40125 LEFT- CS MPTEMP # SAME PROLOGUE TO LEFT FOR INDEXED RIGHT
042688,001829: 00,2337 62126 AD OCT176 # SHIFTS WHOSE NET SHIFT COUNT IS NEGATIVE
042689,001830: 00,2340 54125 TS MPTEMP
042690,001831:
042691,001832: 00,2341 10153 LEFT CCS MODE # SINCE LEFT SHIFTING IS SONE ONE PLACE AT
042692,001833: 00,2342 12345 TCF GENSCL # A TIME, NO COMPARISON WITH 14 NEED BE
042693,001834: 00,2343 12345 TCF GENSCL # DONE. FOR SCALARS, SEE IF TERMINAL ROUND
042694,001835: 00,2344 12145 TCF VSSL # DESIRED. FOR VECTORS, SHIFT IMMEDIATELY.
042695,001836:
042696,001837: 00,2345 37756 GENSCL CAF BIT6 # PUT ROUNDING BIT (BIT10 OF ADDRWD) INTO
042697,001838: 00,2346 00006 EXTEND # BIT 15 OF CYR WHERE THE ROUNDING BIT OF
042698,001839: 00,2347 70106 MP ADDRWD # A SHORT SHIFT LEFT WOULD BE.
042699,001840: 00,2350 54020 TS CYR
042700,001841: 00,2351 12103 TCF TSSL +2 # DO THE SHIFT.
042701,001842:
![]() |
Page 1009 |
042703,001844: # SCALAR DIVISION INSTRUCTIONS, DDV AND BDDV, ARE EXECUTED HERE. AT THIS POINT, THE DIVIDEND IS IN MPAC
042704,001845: # AND THE DIVISOR IN BUF.
042705,001846:
042706,001847: 00,2352 47763 DDV/BDDV CS ONE # INITIALIZATION.
042707,001848: 00,2353 54126 TS DVSIGN # +-1 FOR POSITIVE QUOTIENT - -0 FOR NEG.
042708,001849: 00,2354 54127 TS DVNORMCT # DIVIDEND NORMALIZATION COUNT.
042709,001850: 00,2355 54130 TS MAXDVSW # NEAR-ONE DIVIDE FLAG.
042710,001851:
042711,001852: 00,2356 10120 CCS BUF # FORCE BUF POSITIVE WITH THE MAJOR PART
042712,001853: 00,2357 13712 TCF BUFPOS # NON-ZERO.
042713,001854: 00,2360 12362 TCF +2
042714,001855: 00,2361 13725 TCF BUFNEG
042715,001856:
042716,001857: 00,2362 54146 BUFZERO TS MPAC +2 # ZERO THIS.
042717,001858: 00,2363 07327 TC TPAGREE # FORCE SIGN AGREEMENT BEFORE OVERFLOW
042718,001859:
042719,001860: 00,2364 10144 CCS MPAC # TEST TO SEE IF MPAC NON-ZERO. (TOO BIG)
042720,001861: 00,2365 12412 TCF OVF+ # MAJOR PART OF DIVIDEND IS POSITIVE NON-0
042721,001862: 00,2366 12370 TCF +2
042722,001863: 00,2367 12411 TCF OVF+ -1 # MAJOR PART OF DIVIDEND IS NEG. NON-ZERO
042723,001864:
042724,001865: 00,2370 56121 XCH BUF +1 # SHIFT DIVIDEND AND DIVISOR LEFT 14.
042725,001866: 00,2371 56120 XCH BUF
042726,001867: 00,2372 56145 XCH MPAC +1
042727,001868: 00,2373 56144 XCH MPAC
042728,001869: 00,2374 10120 CCS BUF # TRY AGAIN ON FORMER MINOR PART.
042729,001870: 00,2375 12420 TCF BUF+
042730,001871: 00,2376 12400 TCF +2 # OVERFLOW ON ZERO DIVISOR.
042731,001872: 00,2377 12414 TCF BUF-
042732,001873:
042733,001874: 00,2400 40144 CS MPAC # SIGN OF MPAC DETERMINES SIGN OF RESULT.
042734,001875: 00,2401 00006 SGNDVOVF EXTEND
042735,001876: 00,2402 62404 BZMF +2
042736,001877: 00,2403 24126 INCR DVSIGN # NEGMAX IN MPAC PERHAPS.
042737,001878: 00,2404 37743 DVOVF CAF POSMAX # ON DIVISION OVERFLOW OF ANY SORT, SET
042738,001879: 00,2405 54144 TS MPAC # SET DP MPAC TO +-POSMAX.
042739,001880: 00,2406 02604 TC FINALDV +3
042740,001881: 00,2407 37763 CAF ONE # SET OVERFLOW INDICATOR AND EXIT.
042741,001882: 00,2410 17153 TCF SETOVF
042742,001883:
042743,001884: 00,2411 24126 -1 INCR DVSIGN
042744,001885: 00,2412 40121 OVF+ CS BUF +1 # LOAD LOWER ORDER PART OF DIVISOR.
042745,001886: 00,2413 12401 TCF SGNDVOVF # GET SIGN OF RESULT.
042746,001887:
042747,001888: 00,2414 00006 BUF- EXTEND # IF BUF IS NEGATIVE, COMPLEMENT IT AND
042748,001889: 00,2415 40121 DCS BUF # MAINTAIN DVSIGN FOR FINAL QUOTIENT SIGN.
042749,001890: 00,2416 52121 DXCH BUF
042750,001891: 00,2417 24126 INCR DVSIGN # NOW -0.
042751,001892:
042752,001893: 00,2420 10144 BUF+ CCS MPAC # FORCE MPAC POSITIVE, CHECKING FOR ZERO
![]() |
Page 1010 |
042754,001895: 00,2421 12435 TCF MPAC+ # DIVIDEND IN THE PROCESS.
042755,001896: 00,2422 12424 TCF +2
042756,001897: 00,2423 12431 TCF MPAC-
042757,001898: 00,2424 10145 CCS MPAC +1
042758,001899: 00,2425 12435 TCF MPAC+
042759,001900: 00,2426 16125 TCF DANZIG # EXIT IMMEDIATELY ON ZERO DIVIDEND.
042760,001901: 00,2427 12431 TCF MPAC-
042761,001902: 00,2430 16125 TCF DANZIG
042762,001903:
042763,001904: 00,2431 00006 MPAC- EXTEND # FORCE MPAC POSITIVE AS BUF IN BUF-.
042764,001905: 00,2432 40145 DCS MPAC
042765,001906: 00,2433 52145 DXCH MPAC
042766,001907: 00,2434 24126 INCR DVSIGN # NOW +1 OR -0.
042767,001908:
![]() |
Page 1011 |
042769,001910: 00,2435 40144 MPAC+ CS MPAC # CHECK FOR DIVISION OVERFLOW. IF THE
042770,001911: 00,2436 67771 AD NEGONE # MAJOR PART OF THE DIVIDEND IS LESS THAN
042771,001912: 00,2437 60120 AD BUF # THE MAJOR PART OF THE DIVISOR BY AT
042772,001913: 00,2440 10000 CCS A # LEAST TWO, WE CAN PROCEED IMMEDIATELY
042773,001914: 00,2441 12503 TCF DVNORM # WITHOUT NORMALIZATION PRODUCING A DVMAX.
042774,001915: 00,2442 60001 -1/2+2 OCT 60001 # USED IN SQRTSUB.
042775,001916:
042776,001917: 00,2443 12444 TCF +1 # IF THE ABOVE DOES NOT HOLD, FORCE SIGN
042777,001918: 00,2444 37746 CAF HALF # AGREEMENT IN NUMERATOR AND DENOMINATOR
042778,001919: 00,2445 60000 DOUBLE # TO FACILITATE OVERFLOW AND NEAR-ONE
042779,001920: 00,2446 60145 AD MPAC +1 # CHECKING.
042780,001921: 00,2447 54145 TS MPAC +1
042781,001922: 00,2450 37767 CAF ZERO
042782,001923: 00,2451 67743 AD POSMAX
042783,001924: 00,2452 26144 ADS MPAC
042784,001925:
042785,001926: 00,2453 37746 CAF HALF # SAME FOR BUF.
042786,001927: 00,2454 60000 DOUBLE
042787,001928: 00,2455 60121 AD BUF +1
042788,001929: 00,2456 54121 TS BUF +1
042789,001930: 00,2457 37767 CAF ZERO
042790,001931: 00,2460 67743 AD POSMAX
042791,001932: 00,2461 26120 ADS BUF
042792,001933:
042793,001934: 00,2462 40144 CS MPAC # CHECK MAGNITUDE OF SIGN-CORRECTED
042794,001935: 00,2463 60120 AD BUF # OPERANDS.
042795,001936: 00,2464 10000 CCS A
042796,001937: 00,2465 12503 TCF DVNORM # DIVIDE OK - WILL NOT BECOME MAXDV CASE.
042797,001938: 00,2466 00123 LBUF2 ADRES BUF2
042798,001939: 00,2467 12404 TCF DVOVF # DIVISOR NOT LESS THAN DIVIDEND - OVF.
042799,001940:
042800,001941: 00,2470 54130 TS MAXDVSW # IF THE MAJOR PARTS OF THE DIVIDEND AND
042801,001942: 00,2471 40145 CS MPAC +1 # DIVISOR ARE EQUAL, A SPECIAL APPROXIMA-
042802,001943: 00,2472 60121 AD BUF +1 # TION IS USED (PROVIDED THE DIVISION IS
042803,001944: 00,2473 00006 EXTEND # POSSIBLE, OF COURSE).
042804,001945: 00,2474 62404 BZMF DVOVF
042805,001946: 00,2475 12503 TCF DVNORM # IF NO OVERFLOW.
042806,001947:
![]() |
Page 1012 |
042808,001949: 00,2476 00006 BUFNORM EXTEND # ADD -1 TO AUGMENT SHIFT COUNT AND SHIFT
042809,001950: 00,2477 24127 AUG DVNORMCT # LEFT ONE PLACE.
042810,001951: 00,2500 00006 EXTEND
042811,001952: 00,2501 30121 DCA BUF
042812,001953: 00,2502 20121 DAS BUF
042813,001954:
042814,001955: 00,2503 30120 DVNORM CA BUF # SEE IF DIVISOR NORMALIZED YET.
042815,001956: 00,2504 60000 DOUBLE
042816,001957: 00,2505 54000 OVSK
042817,001958: 00,2506 12476 TCF BUFNORM # NO - SHIFT LEFT ONE AND TRY AGAIN.
042818,001959:
042819,001960: 00,2507 52145 DXCH MPAC # CALL DIVIDEND NORMALIZATION SEQUENCE
042820,001961: 00,2510 50127 INDEX DVNORMCT # PRIOR TO DOING THE DIVIDE.
042821,001962: 00,2511 02541 TC MAXTEST
042822,001963:
042823,001964: 00,2512 54146 TS MPAC +2 # RETURNS WITH DIVISION DONE AND C(A) = 0.
042824,001965: 00,2513 16125 TCF DANZIG
042825,001966:
![]() |
Page 1013 |
042827,001968: # THE FOLLOWING ARE PROLOGUES TO SHIFT THE DIVIDEND ARRIVING IN A AND L BEFORE THE DIVIDE.
042828,001969:
042829,001970: 00,2514 22021 -21D LXCH SR # SPECIAL PROLOGUE FOR UNIT WHEN THE
042830,001971: 00,2515 00006 EXTEND # LENGTH OF THE ARGUMENT WAS NOT LESS THAN
042831,001972: 00,2516 77746 MP HALF # .5. IN THIS CASE, EACH COMPONENT MUST BE
042832,001973: 00,2517 56001 XCH L # SHIFTED RIGHT ONE TO PRODUCE A HALF-UNIT
042833,001974: 00,2520 60021 AD SR # VECTOR.
042834,001975: 00,2521 56001 XCH L
042835,001976: 00,2522 12545 TCF GENDDV +1 # WITH DP DIVIDEND IN A,L.
042836,001977:
042837,001978: 00,2523 20001 DDOUBL # PROLOGUE WHICH NORMALIZES THE DIVIDEND
042838,001979: 00,2524 20001 DDOUBL # WHEN IT IS KNOWN THAT NO DIVISION
042839,001980: 00,2525 20001 DDOUBL # OVERFLOW WILL OCCUR.
042840,001981: 00,2526 20001 DDOUBL
042841,001982: 00,2527 20001 DDOUBL
042842,001983: 00,2530 20001 DDOUBL
042843,001984: 00,2531 20001 DDOUBL
042844,001985: 00,2532 20001 DDOUBL
042845,001986: 00,2533 20001 DDOUBL
042846,001987: 00,2534 20001 DDOUBL
042847,001988: 00,2535 20001 DDOUBL
042848,001989: 00,2536 20001 DDOUBL
042849,001990: 00,2537 20001 DDOUBL
042850,001991: 00,2540 52145 DXCH MPAC
042851,001992:
042852,001993: 00,2541 10130 MAXTEST CCS MAXDVSW # 0 IF MAJORS MIGHT BE =, -1 OTHERWISE.
042853,001994: 00,2542 06552 BIASHI DEC .4192 B-1 # SQRT CONSTANTS
042854,001995:
042855,001996: 00,2543 12616 TCF MAXDV # CHECK TO SEE IF THEY ARE NOW EQUAL.
042856,001997:
![]() |
Page 1014 |
042858,001999: # THE FOLLOWING IS A GENERAL PURPOSE DOUBLE PRECISION DIVISION ROUTINE. IT DIVIDES MPAC BY BUF AND LEAVES
042859,002000: # THE RESULT IN MPAC. THE FOLLOWING CONDITIONS MUST BE SATISFIED:
042860,002001:
042861,002002: # 1. THE DIVISOR (BUF) MUST BE POSITIVE AND NOT LESS THAN .5.
042862,002003:
042863,002004: # 2. THE DIVIDEND (MPAC) MUST BE POSITIVE WITH THE MAJOR PART OF MPAC STRICTLY LESS THAN THAT OF BUF
042864,002005: # (A SPECIAL APPROXIMATION, MAXDV, IS USED WHEN THE MAJOR PARTS ARE EQUAL).
042865,002006:
042866,002007: # UNDERSTANDING THAT A/B = Q + S(R/B) WHERE S = 2(-14) AND Q AND R ARE QUOTIENT AND REMAINDER, RESPEC-
042867,002008: # TIVELY, THE FOLLOWING APPROXIMATION IS OBTAINED BY MULTIPLYING ABOVE AND BELOW BY C - SD AND NEGLECTING TERMS OF
042868,002009: # ORDER S-SQUARED (POSSIBLY INTRODUCING ERROR INTO THE LOW TWO BITS OF THE RESULT). SIGN AGREEMENT IS UNNECESSARY.
042869,002010:
042870,002011: # A + SB . (R - QD) A + SB
042871,002012: # ------ = Q + S(------) WHERE Q AND R ARE QUOTIENT AND REMAINDER OF ------ RESPECTIVELY.
042872,002013: # C + SD ( C } C
042873,002014:
042874,002015:
042875,002016: 00,2544 52145 GENDDV DXCH MPAC # WE NEED A AND B ONLY FOR FIRST DV.
042876,002017: 00,2545 00006 +1 EXTEND # (SPECIAL UNIT PROLOGUE ENTERS HERE).
042877,002018: 00,2546 10120 DV BUF # A NOW CONTAINS Q AND L, R.
042878,002019: 00,2547 52145 DXCH MPAC
042879,002020:
042880,002021: 00,2550 40144 CS MPAC # FORM DIVIDEND FOR MINOR PART OF RESULT.
042881,002022: 00,2551 00006 EXTEND
042882,002023: 00,2552 70121 MP BUF +1
042883,002024: 00,2553 60145 AD MPAC +1 # OVERFLOW AT THIS POINT IS POSITIVE SINCE
042884,002025: 00,2554 54000 OVSK # R IS POSITIVE IN EVERY CASE.
042885,002026: 00,2555 12562 TCF +5
042886,002027:
042887,002028: 00,2556 00006 EXTEND # OVERFLOW CAN BE REMOVED BY SUBTRACTING C
042888,002029: 00,2557 60120 SU BUF # (BUF) ONCE SINCE R IS ALWAYS LESS THAN C
042889,002030: 00,2560 24144 INCR MPAC # IN THIS CASE. INCR COMPENSATES SUBTRACT.
042890,002031: 00,2561 12564 TCF +DOWN # (SINCE C(A) IS STILL POSITIVE).
042891,002032:
042892,002033: 00,2562 00006 +5 EXTEND # C(A) CAN BE MADE LESS THAN C IN MAGNI-
042893,002034: 00,2563 62574 BZMF -UP # TUDE BY DIMINISHING IT BY C (SINCE C IS
042894,002035: # NOT LESS THAN .5) UNLESS C(A) = 0.
042895,002036:
![]() |
Page 1015 |
042897,002038: 00,2564 00006 +DOWN EXTEND
042898,002039: 00,2565 60120 SU BUF # IF POSITIVE, REDUCE ONLY IF NECESSARY
042899,002040: 00,2566 00006 EXTEND # SINCE THE COMPENSATING INCR MIGHT CAUSE
042900,002041: 00,2567 12572 BZF +3 # OVERFLOW.
042901,002042: 00,2570 00006 EXTEND # DONT SUBTRACT UNLESS RESULT IS POSITIVE
042902,002043: 00,2571 62600 BZMF ENDMAXDV # OR ZERO.
042903,002044:
042904,002045: 00,2572 24144 +3 INCR MPAC # KEEP SUBTRACT HERE AND COMPENSATE.
042905,002046: 00,2573 12601 TCF FINALDV
042906,002047:
042907,002048: 00,2574 00006 -UP EXTEND # IF ZERO, SET MINOR PART OF RESULT TO
042908,002049: 00,2575 12604 BZF FINALDV +3 # ZERO.
042909,002050:
042910,002051: 00,2576 00006 EXTEND # IF NEGATIVE, ADD C TO A, SUBTRACTING ONE
042911,002052: 00,2577 26144 DIM MPAC # TO COMPENSATE. DIM IS OK HERE SINCE THE
042912,002053: 00,2600 60120 ENDMAXDV AD BUF # MAJOR PART NEVER GOES NEGATIVE.
042913,002054:
![]() |
Page 1016 |
042915,002056: 00,2601 22007 FINALDV ZL # DO DV TO OBTAIN MINOR PART OF RESULT.
042916,002057: 00,2602 00006 EXTEND
042917,002058: 00,2603 10120 DV BUF
042918,002059: 00,2604 54145 +3 TS MPAC +1
042919,002060:
042920,002061: 00,2605 10126 CCS DVSIGN # LEAVE RESULT POSITIVE UNLESS C(DVSIGN)=
042921,002062: 00,2606 00002 TC Q # -0.
042922,002063: 00,2607 00002 TC Q
042923,002064: 00,2610 00002 TC Q
042924,002065:
042925,002066: 00,2611 00006 EXTEND
042926,002067: 00,2612 40145 DCS MPAC
042927,002068: 00,2613 52145 DXCH MPAC
042928,002069: 00,2614 37767 CAF ZERO # SO WE ALWAYS RETURN WITH C(A) = 0.
042929,002070: 00,2615 00002 TC Q
042930,002071:
![]() |
Page 1017 |
042932,002073: # IF THE MAJOR PARTS OF THE DIVISOR AND DIVIDEND ARE EQUAL, BUT THE MINOR PARTS ARE SUCH THAT THE
042933,002074: # DIVIDEND IS STRICTLY LESS THAN THE DIVISOR IN MAGNITUDE, THE FOLLOWING APPROXIMATION IS USED. THE ASSUMPTIONS
042934,002075: # ARE THE SAME AS THE GENERAL ROUTINE WITH THE ADDITION THAT SIGN AGREEMENT IS NECESSARY (B, C, & D POSITIVE).
042935,002076:
042936,002077: # C + SB . (C + B - D)
042937,002078: # ------ = 37777 + S(---------)
042938,002079: # C + SD ( C )
042939,002080:
042940,002081: # THE DIVISION MAY BE PERFORMED IMMEDIATELY SINCE B IS STRICTLY LESS THAN D AND C IS NOT LESS THAN .5.
042941,002082:
042942,002083:
042943,002084: 00,2616 40144 MAXDV CS MPAC # SEE IF MAXDV CASE STILL HOLDS AFTER
042944,002085: 00,2617 60120 AD BUF # NORMALIZATION.
042945,002086: 00,2620 00006 EXTEND
042946,002087: 00,2621 12623 BZF +2
042947,002088: 00,2622 12544 TCF GENDDV # MPAC NOW LESS THAN BUF - DIVIDE AS USUAL
042948,002089:
042949,002090: 00,2623 37743 +2 CAF POSMAX # SET MAJOR PART OF RESULT.
042950,002091: 00,2624 54144 TS MPAC
042951,002092:
042952,002093: 00,2625 40121 CS BUF +1 # FORM DIVIDEND OF MINOR PART OF RESULT.
042953,002094: 00,2626 60145 AD MPAC +1
042954,002095: 00,2627 12600 TCF ENDMAXDV # GO ADD C AND DO DIVIDE, ATTACHING SIGN
042955,002096: # BEFORE EXITING.
042956,002097:
![]() |
Page 1018 |
042958,002099: # VECTOR DIVIDED BY SCALAR, V/SC, IS EXECUTED HERE. THE VECTOR IS NOW IN MPAC WITH SCALAR IN BUF.
042959,002100:
042960,002101: 00,2630 47763 V/SC2 CS ONE # INITIALIZE DIVIDEND NORMALIZATION COUNT
042961,002102: 00,2631 54127 TS DVNORMCT # AND DIVISION SIGN REGISTER.
042962,002103: 00,2632 54117 TS VBUF +5
042963,002104:
042964,002105: 00,2633 10120 CCS BUF # FORCE DIVISOR POSITIVE WITH MAJOR PART
042965,002106: 00,2634 12671 TCF /BUF+ # NON-ZERO (IF POSSIBLE).
042966,002107: 00,2635 12637 TCF +2
042967,002108: 00,2636 12665 TCF /BUF-
042968,002109:
042969,002110: 00,2637 56121 XCH BUF +1 # SHIFT VECTOR AND SCALAR LEFT 14.
042970,002111: 00,2640 56120 XCH BUF
042971,002112: 00,2641 56145 XCH MPAC +1
042972,002113: 00,2642 56144 XCH MPAC
042973,002114: 00,2643 00006 EXTEND # CHECK FOR OVERFLOW IN EACH CASE.
042974,002115: 00,2644 12646 BZF +2
042975,002116: 00,2645 12404 TCF DVOVF
042976,002117:
042977,002118: 00,2646 56150 XCH MPAC +4
042978,002119: 00,2647 56147 XCH MPAC +3
042979,002120: 00,2650 00006 EXTEND
042980,002121: 00,2651 12653 BZF +2
042981,002122: 00,2652 12404 TCF DVOVF
042982,002123:
042983,002124: 00,2653 56152 XCH MPAC +6
042984,002125: 00,2654 56151 XCH MPAC +5
042985,002126: 00,2655 00006 EXTEND
042986,002127: 00,2656 12660 BZF +2
042987,002128: 00,2657 12404 TCF DVOVF
042988,002129:
042989,002130: 00,2660 10120 CCS BUF
042990,002131: 00,2661 12671 TCF /BUF+
042991,002132: 00,2662 12404 TCF DVOVF # ZERO DIVISOR - OVERFLOW.
042992,002133: 00,2663 12665 TCF /BUF-
042993,002134: 00,2664 12404 TCF DVOVF
042994,002135:
042995,002136: 00,2665 00006 /BUF- EXTEND # ON NEGATIVE, COMPLEMENT BUF AND MAINTAIN
042996,002137: 00,2666 40121 DCS BUF # DVSIGN IN VBUF +5.
042997,002138: 00,2667 52121 DXCH BUF
042998,002139: 00,2670 24117 INCR VBUF +5
042999,002140:
![]() |
Page 1019 |
043001,002142: 00,2671 37746 /BUF+ CAF HALF # FORCE SIGN AGREEMENT IN DIVISOR.
043002,002143: 00,2672 60000 DOUBLE
043003,002144: 00,2673 60121 AD BUF +1
043004,002145: 00,2674 54121 TS BUF +1
043005,002146: 00,2675 37767 CAF ZERO
043006,002147: 00,2676 67743 AD POSMAX
043007,002148: 00,2677 26120 ADS BUF
043008,002149:
043009,002150: 00,2700 56123 XCH BUF2 # LEAVE ABS(ORIGINAL DIVISOR) IN BUF2 FOR
043010,002151: 00,2701 30121 CA BUF +1 # OVERFLOW TESTING.
043011,002152: 00,2702 54124 TS BUF2 +1
043012,002153: 00,2703 12711 TCF /NORM # NORMALIZE DIVISOR IN BUF.
043013,002154:
043014,002155: 00,2704 00006 /NORM2 EXTEND # IF LESS THAN .5, AUGMENT DVNORMCT AND
043015,002156: 00,2705 24127 AUG DVNORMCT # DOUBLE DIVISOR.
043016,002157: 00,2706 00006 EXTEND
043017,002158: 00,2707 30121 DCA BUF
043018,002159: 00,2710 20121 DAS BUF
043019,002160:
043020,002161: 00,2711 30120 /NORM CA BUF # SEE IF DIVISOR NORMALIZED.
043021,002162: 00,2712 60000 DOUBLE
043022,002163: 00,2713 54000 OVSK
043023,002164: 00,2714 12704 TCF /NORM2 # DOUBLE AND TRY AGAIN IF NOT.
043024,002165:
043025,002166: 00,2715 02727 TC V/SCDV # DO X COMPONENT DIVIDE.
043026,002167: 00,2716 52150 DXCH MPAC +3 # SUPPLY ARGUMENTS IN USUAL SEQUENCE.
043027,002168: 00,2717 52145 DXCH MPAC
043028,002169: 00,2720 52150 DXCH MPAC +3
043029,002170:
043030,002171: 00,2721 02727 TC V/SCDV # Y COMPONENT.
043031,002172: 00,2722 52152 DXCH MPAC +5
043032,002173: 00,2723 52145 DXCH MPAC
043033,002174: 00,2724 52152 DXCH MPAC +5
043034,002175:
043035,002176: 00,2725 02727 TC V/SCDV # Z COMPONENT.
043036,002177: 00,2726 17477 TCF VROTATEX # GO RE-ARRANGE COMPONENTS BEFORE EXIT.
043037,002178:
![]() |
Page 1020 |
043039,002180: # SUBROUTINE USED BY V/SC TO DIVIDE VECTOR COMPONENT IN MPAC,+1 BY THE SCALAR GIVEN IN BUF.
043040,002181:
043041,002182: 00,2727 30117 V/SCDV CA VBUF +5 # REFLECTS SIGN OF SCALAR.
043042,002183: 00,2730 54126 TS DVSIGN
043043,002184:
043044,002185: 00,2731 10144 CCS MPAC # FORCE MPAC POSITIVE, EXITING ON ZERO.
043045,002186: 00,2732 12746 TCF /MPAC+
043046,002187: 00,2733 12735 TCF +2
043047,002188: 00,2734 12742 TCF /MPAC-
043048,002189:
043049,002190: 00,2735 10145 CCS MPAC +1
043050,002191: 00,2736 12746 TCF /MPAC+
043051,002192: 00,2737 00002 TC Q
043052,002193: 00,2740 12742 TCF /MPAC-
043053,002194: 00,2741 00002 TC Q
043054,002195:
043055,002196: 00,2742 00006 /MPAC- EXTEND # USUAL COMPLEMENTING AND SETTING OF SIGN.
043056,002197: 00,2743 40145 DCS MPAC
043057,002198: 00,2744 52145 DXCH MPAC
043058,002199: 00,2745 24126 INCR DVSIGN
043059,002200:
043060,002201: 00,2746 47763 /MPAC+ CS ONE # INITIALIZE NEAR-ONE SWITCH.
043061,002202: 00,2747 54130 TS MAXDVSW
043062,002203:
043063,002204: 00,2750 40144 CS MPAC # CHECK POSSIBLE OVERFLOW.
043064,002205: 00,2751 60123 AD BUF2 # UNNORMALIZED INPUT DIVISOR.
043065,002206: 00,2752 00006 EXTEND
043066,002207: 00,2753 62757 BZMF /AGREE # CHECK FOR NEAR-ONE OR OVERFLOW.
043067,002208:
043068,002209: 00,2754 52145 DDVCALL DXCH MPAC # CALL PRE-DIVIDE NORMALIZATION.
043069,002210: 00,2755 50127 INDEX DVNORMCT
043070,002211: 00,2756 12541 TCF MAXTEST
043071,002212:
![]() |
Page 1021 |
043073,002214: 00,2757 37746 /AGREE CAF HALF # FORCE SIGN AGREEMENT IN DIVIDEND
043074,002215: 00,2760 60000 DOUBLE # (ALREADY DONE FOR DIVISOR).
043075,002216: 00,2761 60145 AD MPAC +1
043076,002217: 00,2762 54145 TS MPAC +1
043077,002218: 00,2763 37767 CAF ZERO
043078,002219: 00,2764 67743 AD POSMAX
043079,002220: 00,2765 26144 ADS MPAC
043080,002221:
043081,002222: 00,2766 40144 CS MPAC # CHECK TO SEE IF OVERFLOW GONE OR IF
043082,002223: 00,2767 60123 AD BUF2 # NEAR-ONE CASE IS PRESENT.
043083,002224: 00,2770 10000 CCS A
043084,002225: 00,2771 12754 TCF DDVCALL # NOT NEAR-ONE.
043085,002226: 00,2772 32506 SLOPELO DEC .8324
043086,002227: 00,2773 12404 TCF DVOVF # NO HOPE.
043087,002228:
043088,002229: 00,2774 54130 TS MAXDVSW # SIGNAL POSSIBLE NEAR-ONE CASE.
043089,002230: 00,2775 40145 CS MPAC +1 # SEE IF DIVISION CAN BE DONE.
043090,002231: 00,2776 60124 AD BUF2 +1
043091,002232: 00,2777 00006 EXTEND
043092,002233: 00,3000 62404 BZMF DVOVF
043093,002234: 00,3001 12754 TCF DDVCALL # GOING TO MAXDV.
043094,002235:
![]() |
Page 1022 |
043096,002237: # THE FOLLOWING ROUTINE EXECUTES THE UNIT INSTRUCTION, WHICH TAKES THE UNIT OF THE VECTOR IN MPAC.
043097,002238:
043098,002239: 00,3002 07612 UNIT TC MPACVBUF # SAVE THE ARGUMENT IN VBUF.
043099,002240: 00,3003 37767 CAF ZERO # MUST SENSE OVERFLOW IN FOLLOWING DOT.
043100,002241: 00,3004 56111 XCH OVFIND
043101,002242: 00,3005 54131 TS TEM1
043102,002243: 00,3006 03301 TC VSQSUB # DOT MPAC WITH ITSELF.
043103,002244: 00,3007 30131 CA TEM1
043104,002245: 00,3010 56111 XCH OVFIND
043105,002246: 00,3011 00006 EXTEND
043106,002247: 00,3012 13014 BZF +2
043107,002248: 00,3013 12404 TCF DVOVF
043108,002249: 00,3014 00006 EXTEND
043109,002250: 00,3015 30145 DCA MPAC # LEAVE THE SQUARE OF THE LENGTH OF THE
043110,002251: 00,3016 50110 INDEX FIXLOC # ARGUMENT IN LVSQUARE.
043111,002252: 00,3017 52043 DXCH LVSQUARE
043112,002253:
043113,002254: 00,3020 03325 TC SQRTSUB # GO TAKE THE NORMALIZED SQUARE ROOT.
043114,002255:
043115,002256: 00,3021 10144 CCS MPAC # CHECK FOR UNIT OVERFLOW.
043116,002257: 00,3022 13027 TCF +5 # MPAC IS NOT LESS THAN .5 UNLESS
043117,002258: 00,3023 54001 TS L
043118,002259: 00,3024 50110 INDEX FIXLOC
043119,002260: 00,3025 52045 DXCH LV
043120,002261: 00,3026 12404 TCF DVOVF # INPUT TO SQRTSUB WAS 0.
043121,002262:
043122,002263: 00,3027 43130 CS FOURTEEN # SEE IF THE INPUT WAS SO SMALL THE THE
043123,002264: 00,3030 60125 AD MPTEMP # FIRST TWO REGISTERS OF THE SQUARE WERE 0
043124,002265: 00,3031 10000 CCS A
043125,002266: 00,3032 40000 COM # IF SO, SAVE THE NEGATIVE OF THE SHIFT
043126,002267: 00,3033 13111 TCF SMALL # COUNT -15D.
043127,002268:
043128,002269: 00,3034 13043 TCF LARGE # (THIS IS USUALLY THE CASE.)
043129,002270:
043130,002271: 00,3035 43127 CS THIRTEEN # IF THE SHIFT COUNT WAS EXACTLY 14, SET
043131,002272: 00,3036 54125 TS MPTEMP # THE PRE-DIVIDE NORM COUNT TO -13D.
043132,002273:
043133,002274: 00,3037 30144 CA MPAC # SHIFT THE LENGTH RIGHT 14 BEFORE STORING
043134,002275: 00,3040 54001 SMALL2 TS L # (SMALL EXITS TO THIS POINT).
043135,002276: 00,3041 37767 CAF ZERO
043136,002277: 00,3042 13070 TCF LARGE2 # GO TO STORE LENGTH AND PROCEED.
043137,002278:
043138,002279: 00,3043 10125 LARGE CCS MPTEMP # MOST ALL CASES COME HERE.
043139,002280: 00,3044 13052 TCF LARGE3 # SEE IF NO NORMALIZATION WAS REQUIRED BY
043140,002281:
043141,002282: 00,3045 42024 CS SRDDV # SQRT, AND IF SO, SET UP FOR A SHIFT
043142,002283: 00,3046 54125 TS MPTEMP # RIGHT 1 BEFORE DIVIDING TO PRODUCE
043143,002284: 00,3047 00006 EXTEND # THE DESIRED HALF UNIT VECTOR.
043144,002285: 00,3050 30145 DCA MPAC
043145,002286: 00,3051 13070 TCF LARGE2
043146,002287:
![]() |
Page 1023 |
043148,002289: 00,3052 40000 LARGE3 COM # LEAVE NEGATIVE OF SHIFT COUNT-1 FOR
043149,002290: 00,3053 54125 TS MPTEMP # PREDIVIDE LEFT SHIFT.
043150,002291:
043151,002292: 00,3054 40000 COM # PICK UP REQUIRED SHIFTING BIT TO UNNORM-
043152,002293: 00,3055 50000 INDEX A # ALIZE THE SQRT RESULT.
043153,002294: 00,3056 37746 CAF BIT14
043154,002295: 00,3057 54120 TS BUF
043155,002296: 00,3060 00006 EXTEND
043156,002297: 00,3061 70145 MP MPAC +1
043157,002298: 00,3062 56120 XCH BUF
043158,002299: 00,3063 00006 EXTEND # (UNNORMALIZE THE SQRT FOR LV).
043159,002300: 00,3064 70144 MP MPAC
043160,002301: 00,3065 56001 XCH L
043161,002302: 00,3066 60120 AD BUF
043162,002303: 00,3067 56001 XCH L
043163,002304:
043164,002305: 00,3070 50110 LARGE2 INDEX FIXLOC
043165,002306: 00,3071 52045 DXCH LV # LENGTH NOW STORED IN WORK AREA.
043166,002307:
043167,002308: 00,3072 47763 CS ONE
043168,002309: 00,3073 54130 TS MAXDVSW # NO MAXDV CASES IN UNIT.
043169,002310:
043170,002311: 00,3074 52113 DXCH VBUF # PREPARE X COMPONENT FOR DIVIDE, SETTING
043171,002312: 00,3075 52145 DXCH MPAC # LENGTH OF VECTOR AS DIVISOR IN BUF.
043172,002313: 00,3076 52121 DXCH BUF
043173,002314: 00,3077 03131 TC UNITDV
043174,002315:
043175,002316: 00,3100 52115 DXCH VBUF +2 # DO Y AND Z IN USUAL FASHION SO WE CAN
043176,002317: 00,3101 52145 DXCH MPAC # EXIT THROUGH VROTATEX.
043177,002318: 00,3102 52150 DXCH MPAC +3
043178,002319: 00,3103 03131 TC UNITDV
043179,002320:
043180,002321: 00,3104 52117 DXCH VBUF +4
043181,002322: 00,3105 52145 DXCH MPAC
043182,002323: 00,3106 52152 DXCH MPAC +5
043183,002324: 00,3107 03131 TC UNITDV
043184,002325: 00,3110 17477 TCF VROTATEX # AND EXIT.
043185,002326:
![]() |
Page 1024 |
043187,002328: # IF THE LENGTH OF THE ARGUMENT VECTOR WAS LESS THAN 2(-28), EACH COMPONENT MUST BE SHIFTED LEFT AT LEAST
043188,002329: # 14 PLACES BEFORE THE DIVIDE. NOTE THAT IN THIS CASE, THE MAJOR PART OF EACH COMPONENT IS ZERO.
043189,002330:
043190,002331: 00,3111 54125 SMALL TS MPTEMP # NEGATIVE OF PRE-DIVIDE SHIFT COUNT.
043191,002332:
043192,002333: 00,3112 37767 CAF ZERO # SHIFT EACH COMPONENT LEFT 14.
043193,002334: 00,3113 56113 XCH VBUF +1
043194,002335: 00,3114 56112 XCH VBUF
043195,002336: 00,3115 56115 XCH VBUF +3
043196,002337: 00,3116 56114 XCH VBUF +2
043197,002338: 00,3117 56117 XCH VBUF +5
043198,002339: 00,3120 56116 XCH VBUF +4
043199,002340:
043200,002341: 00,3121 40125 CS MPTEMP
043201,002342: 00,3122 50000 INDEX A
043202,002343: 00,3123 37746 CAF BIT14
043203,002344: 00,3124 00006 EXTEND
043204,002345: 00,3125 70144 MP MPAC
043205,002346: 00,3126 13040 TCF SMALL2
043206,002347:
043207,002348: 00,3127 00015 THIRTEEN DEC 13 B-14
043208,002349: 00,3130 00016 FOURTEEN DEC 14 B-14
043209,002350:
![]() |
Page 1025 |
043211,002352: # THE FOLLOWING ROUTINE SETS UP THE CALL TO THE DIVIDE ROUTINES.
043212,002353:
043213,002354: 00,3131 10144 UNITDV CCS MPAC # FORCE MPAC POSITIVE IF POSSIBLE, SETTING
043214,002355: 00,3132 13150 TCF UMPAC+ # DVSIGN ACCORDING TO THE SIGN OF MPAC
043215,002356: 00,3133 13135 TCF +2 # SINCE THE DIVISOR IS ALWAYS POSITIVE
043216,002357: 00,3134 13142 TCF UMPAC- # HERE.
043217,002358:
043218,002359: 00,3135 10145 CCS MPAC +1
043219,002360: 00,3136 13150 TCF UMPAC+
043220,002361: 00,3137 00002 TC Q # EXIT IMMEDIATELY ON ZERO.
043221,002362: 00,3140 13142 TCF UMPAC-
043222,002363: 00,3141 00002 TC Q
043223,002364:
043224,002365: 00,3142 47767 UMPAC- CS ZERO # IF NEGATIVE, SET -0 IN DVSIGN FOR FINAL
043225,002366: 00,3143 54126 TS DVSIGN # COMPLEMENT.
043226,002367: 00,3144 00006 EXTEND
043227,002368: 00,3145 40145 DCS MPAC # PICK UP ABSOLUTE VALUE OF ARG AND JUMP.
043228,002369: 00,3146 50125 INDEX MPTEMP
043229,002370: 00,3147 12540 TCF MAXTEST -1
043230,002371:
043231,002372: 00,3150 54126 UMPAC+ TS DVSIGN # SET DVSIGN FOR POSITIVE QUOTIENT.
043232,002373: 00,3151 52145 DXCH MPAC
043233,002374: 00,3152 50125 INDEX MPTEMP
043234,002375: 00,3153 12540 TCF MAXTEST -1
043235,002376:
![]() |
Page 1026 |
043237,002378: # MISCELLANEOUS UNARY OPERATIONS.
043238,002379:
043239,002380: 00,3154 03262 DSQ TC DSQSUB # SQUARE THE DP CONTENTS OF MPAC.
043240,002381: 00,3155 16125 TCF DANZIG
043241,002382:
043242,002383: 00,3156 10153 ABVALABS CCS MODE # ABVAL OR ABS INSTRUCTION.
043243,002384: 00,3157 13206 TCF ABS # DO ABS ON SCALAR.
043244,002385: 00,3160 13206 TCF ABS
043245,002386:
043246,002387: 00,3161 03301 ABVAL TC VSQSUB # DOT MPAC WITH ITSELF.
043247,002388: 00,3162 22153 LXCH MODE # MODE IS NOW DP (L ZERO AFTER DAS).
043248,002389:
043249,002390: 00,3163 00006 EXTEND # STORE SQUARE OF LENGTH IN WORK AREA.
043250,002391: 00,3164 30145 DCA MPAC
043251,002392: 00,3165 50110 INDEX FIXLOC
043252,002393: 00,3166 52043 DXCH LVSQUARE
043253,002394:
043254,002395: 00,3167 03325 SQRT TC SQRTSUB # TAKE THE SQUARE ROOT OF MPAC.
043255,002396: 00,3170 10125 CCS MPTEMP # RETURNED NORMALIZED SQUARE ROOT. SEE IF
043256,002397: 00,3171 13173 TCF +2 # ANY UN-NORMALIZATION REQUIRED AND EXIT
043257,002398: 00,3172 16125 TCF DANZIG # IF NOT.
043258,002399:
043259,002400: 00,3173 63710 AD NEG12 # A RIGHT SHIFT OF MORE THAN 13 COULD BE
043260,002401: 00,3174 00006 EXTEND # REQUIRED IF INPUT WAS ZERO IN MPAC,+1.
043261,002402: 00,3175 63201 BZMF SQRTSHFT # GOES HERE IN MOST CASES.
043262,002403: 00,3176 22007 ZL # IF A LONG SHIFT IS REQUIRED, GO TO
043263,002404: 00,3177 22106 LXCH ADDRWD # GENERAL RIGHT SHIFT ROUTINES.
043264,002405: 00,3200 12303 TCF GENSCR +4 # ADDRWD WAS ZERO TO PREVENT ROUND.
043265,002406:
043266,002407: 00,3201 50125 SQRTSHFT INDEX MPTEMP # SELECT SHIFTING BIT AND EXIT THROUGH
043267,002408: 00,3202 37745 CAF BIT15 # SHIFT ROUTINES.
043268,002409: 00,3203 54125 TS MPTEMP
043269,002410: 00,3204 37767 CAF ZERO # TO ZERO MPAC +2 IN THE PROCESS.
043270,002411: 00,3205 12036 TCF MPACSHR +3
043271,002412:
043272,002413: 00,3206 07001 ABS TC BRANCH # TEST SIGN OF MPAC AND COMPLEMENT IF
043273,002414: 00,3207 16125 TCF DANZIG
043274,002415: 00,3210 16125 TCF DANZIG
043275,002416: 00,3211 17722 TCF COMP
043276,002417:
![]() |
Page 1027 |
043278,002419: 00,3212 47761 VDEF CS FOUR # VECTOR DEFINE - ESSENTIALLY TREATS
043279,002420: 00,3213 26156 ADS PUSHLOC # SCALAR IN MPAC AS X COMPONENT, PUSHES UP
043280,002421: 00,3214 00006 EXTEND # FOR Y AND THEN AGAIN FOR Z.
043281,002422: 00,3215 50000 INDEX A
043282,002423: 00,3216 30003 DCA 2
043283,002424: 00,3217 52150 DXCH MPAC +3
043284,002425: 00,3220 00006 EXTEND
043285,002426: 00,3221 50156 INDEX PUSHLOC
043286,002427: 00,3222 30001 DCA 0
043287,002428: 00,3223 52152 DXCH MPAC +5
043288,002429: 00,3224 47763 CS ONE # MODE IS NOW VECTOR.
043289,002430: 00,3225 16124 TCF NEWMODE
043290,002431:
043291,002432: 00,3226 03301 VSQ TC VSQSUB # DOT MPAC WITH ITSELF.
043292,002433: 00,3227 37767 CAF ZERO
043293,002434: 00,3230 16124 TCF NEWMODE # MODE IS NOW DP.
043294,002435:
043295,002436: 00,3231 00006 PUSH EXTEND # PUSH DOWN MPAC LEAVING IT LOADED.
043296,002437: 00,3232 30145 DCA MPAC
043297,002438: 00,3233 50156 INDEX PUSHLOC # PUSH DOWN FIRST TWO REGISTERS IN EACH
043298,002439: 00,3234 52001 DXCH 0
043299,002440:
043300,002441: 00,3235 50153 INDEX MODE # INCREMENT PUSHDOWN POINTER.
043301,002442: 00,3236 36310 CAF NO.WDS
043302,002443: 00,3237 26156 ADS PUSHLOC
043303,002444:
043304,002445: 00,3240 10153 CCS MODE
043305,002446: 00,3241 13254 TCF TPUSH # PUSH DOWN MPAC +2.
043306,002447: 00,3242 16125 TCF DANZIG # DONE FOR DP.
043307,002448:
043308,002449: 00,3243 00006 EXTEND # ON VECTOR, PUSH DOWN Y AND Z COMPONENTS.
043309,002450: 00,3244 30150 DCA MPAC +3
043310,002451: 00,3245 50156 INDEX PUSHLOC
043311,002452: 00,3246 51775 DXCH 0 -4
043312,002453: 00,3247 00006 EXTEND
043313,002454: 00,3250 30152 DCA MPAC +5
043314,002455: 00,3251 50156 INDEX PUSHLOC
043315,002456: 00,3252 51777 DXCH 0 -2
043316,002457: 00,3253 16125 TCF DANZIG
043317,002458:
043318,002459: 00,3254 30146 TPUSH CA MPAC +2
043319,002460: 00,3255 16632 TCF ENDTPUSH +2
043320,002461:
043321,002462: 00,3256 50110 RVQ INDEX FIXLOC # RVQ - RETURN IVA QPRET.
043322,002463: 00,3257 30052 CA QPRET
043323,002464: 00,3260 54107 TS POLISH
043324,002465: 00,3261 16730 TCF GOTO +4 # (ASSUME QPRET POINTS TO FIXED ONLY.)
043325,002466:
![]() |
Page 1028 |
043327,002468: # THE FOLLOWING SUBROUTINES ARE USED IN SQUARING MPAC, IN BOTH THE SCALAR AND VECTOR SENSE. THEY ARE
043328,002469: # SPECIAL CASES OF DMPSUB AND DOTSUB, PUT IN TO SAVE SOME TIME.
043329,002470:
043330,002471: 00,3262 30145 DSQSUB CA MPAC +1 # SQUARES THE SCALAR CONTENTS OF MPAC.
043331,002472: 00,3263 00006 EXTEND
043332,002473: 00,3264 70000 SQUARE
043333,002474: 00,3265 54146 TS MPAC +2
043334,002475: 00,3266 37767 CAF ZERO # FORM 2(CROSS TERM).
043335,002476: 00,3267 56145 XCH MPAC +1
043336,002477: 00,3270 00006 EXTEND
043337,002478: 00,3271 70144 MP MPAC
043338,002479: 00,3272 20001 DDOUBL # AND MAYBE OVERFLOW.
043339,002480: 00,3273 20146 DAS MPAC +1 # AND SET A TO NET OVERFLOW.
043340,002481: 00,3274 56144 XCH MPAC
043341,002482: 00,3275 00006 EXTEND
043342,002483: 00,3276 70000 SQUARE
043343,002484: 00,3277 20145 DAS MPAC
043344,002485: 00,3300 00002 TC Q
043345,002486:
043346,002487: 00,3301 00006 VSQSUB EXTEND # DOTS THE VECTOR IN MPAC WITH ITSELF.
043347,002488: 00,3302 22127 QXCH DOTRET
043348,002489: 00,3303 03262 TC DSQSUB # SQUARE THE X COMPONENT.
043349,002490: 00,3304 52150 DXCH MPAC +3
043350,002491: 00,3305 52145 DXCH MPAC
043351,002492: 00,3306 52121 DXCH BUF # SO WE CAN END IN DOTSUB.
043352,002493: 00,3307 30146 CA MPAC +2
043353,002494: 00,3310 54122 TS BUF +2
043354,002495:
043355,002496: 00,3311 03262 TC DSQSUB # SQUARE Y COMPONENT.
043356,002497: 00,3312 52146 DXCH MPAC +1
043357,002498: 00,3313 20122 DAS BUF +1
043358,002499: 00,3314 60144 AD MPAC
043359,002500: 00,3315 60120 AD BUF
043360,002501: 00,3316 54120 TS BUF
043361,002502: 00,3317 13321 TCF +2
043362,002503: 00,3320 54111 TS OVFIND # IF OVERFLOW.
043363,002504:
043364,002505: 00,3321 52152 DXCH MPAC +5
043365,002506: 00,3322 52145 DXCH MPAC
043366,002507: 00,3323 03262 TC DSQSUB # SQUARE Z COMPONENT.
043367,002508: 00,3324 17257 TCF ENDDOT # END AS IN DOTSUB.
043368,002509:
![]() |
Page 1029 |
043370,002511: # DOUBLE PRECISION SQUARE ROOT ROUTINE. TAKE THE SQUARE ROOT OF THE TRIPLE PRECISION (MPAC +2 USED ONLY
043371,002512: # IN NORMALIZATION) CONTENTS OF MPAC AND LEAVE THE NORMALIZED RESULT IN MPAC (C(MPAC) GREATER THAN OR EQUAL TO
043372,002513: # .5). THE RIGHT SHIFT COUNT (TO UNNORMALIZE) IS LEFT IN MPTEMP.
043373,002514:
043374,002515:
043375,002516: 00,3325 37767 SQRTSUB CAF ZERO # START BY ZEROING RIGHT SHIFT COUNT.
043376,002517: 00,3326 54125 TS MPTEMP
043377,002518:
043378,002519: 00,3327 10144 CCS MPAC # CHECK FOR POSITIVE ARGUMENT, SHIFTING
043379,002520: 00,3330 13366 TCF SMPAC+ # FIRST SIGNIFICANT MPAC REGISTER INTO
043380,002521: 00,3331 13333 TCF +2 # MPAC ITSELF.
043381,002522: 00,3332 13355 TCF SQRTNEG # SEE IF MAG OF ARGUMENT LESS THAN 10(-4).
043382,002523:
043383,002524: 00,3333 56146 XCH MPAC +2 # MPAC IS ZERO - SHIFT LEFT 14.
043384,002525: 00,3334 56145 XCH MPAC +1
043385,002526: 00,3335 54144 TS MPAC
043386,002527: 00,3336 37765 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
043387,002528: 00,3337 54125 TS MPTEMP
043388,002529:
043389,002530: 00,3340 10144 CCS MPAC # SEE IF MPAC NOW PNZ.
043390,002531: 00,3341 13366 TCF SMPAC+
043391,002532: 00,3342 13344 TCF +2
043392,002533: 00,3343 13360 TCF ZEROANS # NEGATIVE BUT LESS THAN 10(-4) IN MAG.
043393,002534:
043394,002535: 00,3344 56145 XCH MPAC +1 # ZERO - SHIFT LEFT 14 AGAIN.
043395,002536: 00,3345 54144 TS MPAC
043396,002537: 00,3346 37765 CAF SEVEN # AUGMENT RIGHT SHIFT COUNTER.
043397,002538: 00,3347 26125 ADS MPTEMP
043398,002539:
043399,002540: 00,3350 10144 CCS MPAC
043400,002541: 00,3351 13366 TCF SMPAC+
043401,002542: 00,3352 00002 TC Q # SQRT(0) = 0.
043402,002543: 00,3353 13360 TCF ZEROANS
043403,002544: 00,3354 13434 TCF FIXROOT # DO NOT LEAVE SQRTSUB WITH -0 IN MPAC.
043404,002545:
043405,002546: 00,3355 10000 SQRTNEG CCS A # ARGUMENT IS NEGATIVE, BUT SEE IF SIGN-
043406,002547: 00,3356 13364 TCF SQRTABRT # CORRECTED ARGUMENT IS LESS THAN 10(-4)
043407,002548:
043408,002549: 00,3357 10145 CCS MPAC +1 # IN MAGNITUDE. IF SO, CALL ANSWER ZERO.
043409,002550: 00,3360 37767 ZEROANS CAF ZERO # FORCE ANSWER TO ZERO HERE.
043410,002551: 00,3361 13434 TCF FIXROOT
043411,002552: 00,3362 13364 TCF SQRTABRT
043412,002553: 00,3363 13434 TCF FIXROOT
043413,002554:
043414,002555: 00,3364 06000 SQRTABRT TC ABORT
043415,002556: 00,3365 01302 OCT 1302
043416,002557:
![]() |
Page 1030 |
043418,002559: 00,3366 62442 SMPAC+ AD -1/2+2 # SEE IF ARGUMENT GREATER THAN OR EQUAL TO
043419,002560: 00,3367 00006 EXTEND # .5.
043420,002561: 00,3370 63437 BZMF SRTEST # IF SO, SEE IF LESS THAN .25.
043421,002562:
043422,002563: 00,3371 52145 DXCH MPAC # WE WILL TAKE THE SQUARE ROOT OF MPAC/2.
043423,002564: 00,3372 22021 LXCH SR # SHIFT RIGHT 1 AND GO TO THE SQRT ROUTINE
043424,002565: 00,3373 00006 EXTEND
043425,002566: 00,3374 77746 MP HALF
043426,002567: 00,3375 52145 DXCH MPAC
043427,002568: 00,3376 56021 XCH SR
043428,002569: 00,3377 26145 ADS MPAC +1 # GUARANTEED NO OVERFLOW.
043429,002570:
043430,002571: 00,3400 32314 ARGHI CAF SLOPEHI # ARGUMENT BETWEEN .25 AND .5. GET A
043431,002572: 00,3401 00006 EXTEND # LINEAR APPROXIMATION FOR THIS RANGE.
043432,002573: 00,3402 70144 MP MPAC
043433,002574: 00,3403 62542 AD BIASHI # X0/2 = (MPAC/2)(SLOPEHI) + BIASHI/2.
043434,002575:
043435,002576: 00,3404 54120 +4 TS BUF # X0/2 (ARGLO ENTERS HERE).
043436,002577: 00,3405 30144 CA MPAC # SINGLE-PRECISION THROUGHOUT.
043437,002578: 00,3406 22007 ZL
043438,002579: 00,3407 00006 EXTEND
043439,002580: 00,3410 10120 DV BUF # (MPAC/2)/(X0/2)
043440,002581: 00,3411 00006 EXTEND
043441,002582: 00,3412 77746 MP HALF
043442,002583: 00,3413 26120 ADS BUF # X1 = X0/2 + .5(MPAC/2)/(X0/2).
043443,002584:
043444,002585: 00,3414 00006 EXTEND
043445,002586: 00,3415 77746 MP HALF # FORM UP X1/2.
043446,002587: 00,3416 52145 DXCH MPAC # SAVE AND BRING OUT ARGUMENT.
043447,002588: 00,3417 00006 EXTEND # TAKE DP QUOTIENT WITH X1.
043448,002589: 00,3420 10120 DV BUF
043449,002590: 00,3421 54121 TS BUF +1 # SAVE MAJOR PART OF QUOTIENT.
043450,002591: 00,3422 37767 CAF ZERO # FORM MINOR PART OF QUOTIENT USING
043451,002592: 00,3423 56001 XCH L # (REMAINDER,0).
043452,002593: 00,3424 00006 EXTEND
043453,002594: 00,3425 10120 DV BUF
043454,002595: 00,3426 54001 TS L # IN PREPARATION FOR DAS.
043455,002596: 00,3427 30121 CA BUF +1
043456,002597: 00,3430 20145 DAS MPAC # X2 = X1/2 + (MPAC/2)X1
043457,002598:
043458,002599: 00,3431 00006 EXTEND # OVERFLOWS IF ARG. NEAR POSMAX.
043459,002600: 00,3432 13436 BZF TCQBNK00
043460,002601: 00,3433 37743 CAF POSMAX
043461,002602: 00,3434 54144 FIXROOT TS MPAC
043462,002603: 00,3435 54145 TS MPAC +1
043463,002604: 00,3436 00002 TCQBNK00 TC Q # RETURN TO CALLER TO UNNORMALIZE, ETC.
043464,002605:
![]() |
Page 1031 |
043466,002607: 00,3437 67747 SRTEST AD QUARTER # ARGUMENT WAS LESS THAN .5, SEE IF LESS
043467,002608: 00,3440 00006 EXTEND # THAN .25.
043468,002609: 00,3441 63463 BZMF SQRTNORM # IF SO, BEGIN NORMALIZATION.
043469,002610:
043470,002611: 00,3442 52145 DXCH MPAC # IF BETWEEN .5 AND .25, SHIFT RIGHT 1 AND
043471,002612: 00,3443 22021 LXCH SR # START AT ARGLO.
043472,002613: 00,3444 00006 EXTEND
043473,002614: 00,3445 77746 MP HALF
043474,002615: 00,3446 52145 DXCH MPAC
043475,002616: 00,3447 56021 XCH SR
043476,002617: 00,3450 26145 ADS MPAC +1 # NO OVERFLOW.
043477,002618:
043478,002619: 00,3451 32772 ARGLO CAF SLOPELO # (NORMALIZED) ARGUMENT BETWEEN .125 AND
043479,002620: 00,3452 00006 EXTEND # .25
043480,002621: 00,3453 70144 MP MPAC
043481,002622: 00,3454 62270 AD BIASLO
043482,002623: 00,3455 13404 TCF ARGHI +4 # BEGIN SQUARE ROOT.
043483,002624:
043484,002625: 00,3456 00006 SQRTNM2 EXTEND # SHIFT LEFT 2 AND INCREMENT RIGHT SHIFT
043485,002626: 00,3457 30146 DCA MPAC +1 # COUNT (FOR TERMINAL UNNORMALIZATION).
043486,002627: 00,3460 20146 DAS MPAC +1
043487,002628: 00,3461 60144 AD MPAC
043488,002629: 00,3462 26144 ADS MPAC # (NO OVERFLOW).
043489,002630:
043490,002631: 00,3463 24125 SQRTNORM INCR MPTEMP # FIRST TIME THROUGH, JUST SHIFT LEFT 1
043491,002632: 00,3464 00006 EXTEND # (PUTS IN EFFECTIVE RIGHT SHIFT SINCE
043492,002633: 00,3465 30146 DCA MPAC +1 # WE WANT MPAC/2).
043493,002634: 00,3466 20146 DAS MPAC +1
043494,002635: 00,3467 60144 AD MPAC
043495,002636: 00,3470 26144 ADS MPAC # (AGAIN NO OVERFLOW).
043496,002637: 00,3471 60000 DOUBLE
043497,002638: 00,3472 54022 TS CYL
043498,002639:
043499,002640: 00,3473 10022 NORMTEST CCS CYL # SEE IF ARGUMENT NOW NORMALIZED AT
043500,002641: 00,3474 10022 CCS CYL # GREATER THAN .125.
043501,002642: 00,3475 13456 TCF SQRTNM2 # NO - SHIFT LEFT 2 MORE AND TRY AGAIN.
043502,002643: 00,3476 13400 TCF ARGHI # YES - NOW BETWEEN .5 AND .25.
043503,002644: 00,3477 13451 TCF ARGLO # ARGUMENT NOW BETWEEN .25 AND .125.
043504,002645:
![]() |
Page 1032 |
043506,002647: # TRIGONOMETRIC FUNCTION PACKAGE.
043507,002648:
043508,002649: # THE FOLLOWING TRIGONOMETRIC FUNCTIONS ARE AVAILABLE AS INTERPRETIVE OPERATIONS:
043509,002650:
043510,002651: # 1. SIN COMPUTES (1/2)SINE(2 PI MPAC).
043511,002652: # 2. COS COMPUTES (1/2)COSINE(2 PI MPAC).
043512,002653:
043513,002654: # 3. ASIN COMPUTES (1/2PI)ARCSINE(2 MPAC).
043514,002655: # 4. ACOS COMPUTES (1/2PI)ARCCOSINE(2 MPAC).
043515,002656:
043516,002657: # SIN-ASIN AND COS-ACOS ARE MUTUALLY INVERSE, IE SIN(ASIN(X)) = X.
043517,002658:
043518,002659: 00,3500 07001 COSINE TC BRANCH # FINDS COSINE USING THE IDENTITY
043519,002660: 00,3501 13504 TCF +3 # COS(X) = SIN(PI/2 - ABS(X)).
043520,002661: 00,3502 13507 TCF PRESINE
043521,002662: 00,3503 13507 TCF PRESINE
043522,002663:
043523,002664: 00,3504 00006 +3 EXTEND
043524,002665: 00,3505 40145 DCS MPAC
043525,002666: 00,3506 52145 DXCH MPAC
043526,002667:
043527,002668: 00,3507 37747 PRESINE CAF QUARTER # PI/2 SCALED.
043528,002669: 00,3510 26144 ADS MPAC
043529,002670:
043530,002671:
043531,002672: 00,3511 52145 SINE DXCH MPAC # DOUBLE ARGUMENT.
043532,002673: 00,3512 20001 DDOUBL
043533,002674: 00,3513 54000 OVSK # SEE IF OVERFLOW PRESENT.
043534,002675: 00,3514 13517 TCF +3 # IF NOT, ARGUMENT OK AS IS.
043535,002676:
043536,002677: 00,3515 00006 EXTEND # IF SO, WE LOST (OR GAINED) PI, SO
043537,002678: 00,3516 40001 DCOM # COMPLEMENT MPAC USING THE IDENTITY
043538,002679: # SIN(X-(+)PI) = SIN(-X).
043539,002680: 00,3517 52145 +3 DXCH MPAC
043540,002681: 00,3520 30144 CA MPAC # SEE IF ARGUMENT GREATER THAN .5 IN
043541,002682: 00,3521 60000 DOUBLE # MAGNITUDE. IF SO, REDUCE IT TO LESS THAN
043542,002683: 00,3522 54001 TS L # .5 (+-PI/2 SCALED) AS FOLLOWS:
043543,002684: 00,3523 13534 TCF SN1
043544,002685:
043545,002686: 00,3524 50000 INDEX A # IF POSITIVE, FORM PI - X, IF NEGATIVE
043546,002687: 00,3525 37745 CAF NEG1/2 +1 # USE -PI -X.
043547,002688: 00,3526 60000 DOUBLE
043548,002689: 00,3527 00006 EXTEND
043549,002690: 00,3530 60144 SU MPAC # GUARANTEED NO OVERFLOW.
043550,002691: 00,3531 54144 TS MPAC
043551,002692: 00,3532 40145 CS MPAC +1
043552,002693: 00,3533 54145 TS MPAC +1
043553,002694:
![]() |
Page 1033 |
043555,002696: 00,3534 00006 SN1 EXTEND # SET UP TO EVALUATE HASTINGS POLYNOMIAL
043556,002697: 00,3535 30145 DCA MPAC
043557,002698: 00,3536 52124 DXCH BUF2
043558,002699: 00,3537 03262 TC DSQSUB # SQUARE MPAC.
043559,002700:
043560,002701: 00,3540 07274 TC POLY # EVALUATE FOURTH ORDER POLYNOMIAL.
043561,002702: 00,3541 00003 DEC 3 B-14
043562,002703: 00,3542 14441 37325 2DEC +.3926990796
043563,002704:
043564,002705: 00,3544 53250 60764 2DEC -.6459637111
043565,002706:
043566,002707: 00,3546 12146 21276 2DEC +.318758717
043567,002708:
043568,002709: 00,3550 75466 71471 2DEC -.074780249
043569,002710:
043570,002711: 00,3552 00236 32757 2DEC +.009694988
043571,002712:
043572,002713: 00,3554 32466 CAF LBUF2 # MULTIPLY BY ARGUMENT AND SHIFT LEFT 2.
043573,002714: 00,3555 07160 TC DMPSUB -1
043574,002715:
043575,002716: 00,3556 00006 EXTEND
043576,002717: 00,3557 30146 DCA MPAC +1
043577,002718: 00,3560 20146 DAS MPAC +1
043578,002719: 00,3561 60144 AD MPAC
043579,002720: 00,3562 26144 ADS MPAC # NEITHER SHIFT OVERFLOWS.
043580,002721: 00,3563 00006 EXTEND
043581,002722: 00,3564 30146 DCA MPAC +1
043582,002723: 00,3565 20146 DAS MPAC +1
043583,002724: 00,3566 60144 AD MPAC
043584,002725: 00,3567 26144 ADS MPAC
043585,002726: 00,3570 16125 TCF DANZIG
043586,002727:
![]() |
Page 1034 |
043588,002729: # ARCSIN/ARCCOS ROUTINE.
043589,002730:
043590,002731: 00,3571 33612 ARCSIN CAF LASINEX # COMPUTE ARCSIN BY USING THE IDENTITY
043591,002732: 00,3572 13574 TCF +2 # ARCSIN(X) = PI/2 - ARCCOS(X).
043592,002733:
043593,002734: 00,3573 33674 ARCCOS CAF LDANZIG # (EXITS IMMEDIATELY).
043594,002735: 00,3574 54126 TS ESCAPE
043595,002736: 00,3575 07001 TC BRANCH # TEST SIGN OF INPUT.
043596,002737: 00,3576 13606 TCF ACOSST # START IMMEDIATELY IF POSITIVE.
043597,002738: 00,3577 13706 TCF ACOSZERO # ARCCOS(0) = PI/2 = .25.
043598,002739: 00,3600 00006 EXTEND # IF NEGATIVE, USE THE IDENTITY
043599,002740: 00,3601 40145 DCS MPAC # ARCCOS(X) = PI - ARCCOS(-X), FORCING
043600,002741: 00,3602 52145 DXCH MPAC # ARGUMENT POSITIVE.
043601,002742: 00,3603 33711 CAF TCSUBTR # SET EXIT TO DO ABOVE BEFORE
043602,002743: 00,3604 56126 XCH ESCAPE # ARCSIN/ARCCOS CONSIDERATIONS.
043603,002744: 00,3605 54127 TS ESCAPE2
043604,002745:
043605,002746: 00,3606 47746 ACOSST CS HALF # TEST MAGNITUDE OF INPUT.
043606,002747: 00,3607 60144 AD MPAC
043607,002748: 00,3610 10000 CCS A
043608,002749: 00,3611 13702 TCF ACOSOVF # THIS IS PROBABLY AN OVERFLOW CASE.
043609,002750:
043610,002751: 00,3612 13670 LASINEX TCF ASINEX
043611,002752:
043612,002753: 00,3613 13623 TCF ACOSST2 # NO OVERFLOW - PROCEED.
043613,002754:
043614,002755: 00,3614 10145 CCS MPAC +1 # IF MAJOR PART IS .5, CALL ANSWER 0
043615,002756: 00,3615 37767 CAF ZERO # UNLESS MINOR PART NEGATIVE.
043616,002757: 00,3616 13620 TCF ACOS=0
043617,002758:
043618,002759: 00,3617 13623 TCF ACOSST2
043619,002760:
043620,002761: 00,3620 54145 ACOS=0 TS MPAC +1
043621,002762: 00,3621 54144 TS MPAC
043622,002763: 00,3622 00126 TC ESCAPE
043623,002764:
043624,002765: 00,3623 00006 ACOSST2 EXTEND # NOW THAT ARGUMENT IS IN PROPER RANGE,
043625,002766: 00,3624 40145 DCS MPAC # BEGIN COMPUTATION. USE HASTINGS
043626,002767: 00,3625 67746 AD HALF # APPROXIMATION ARCCOS(X) = SQRT(1-X)P(X)
043627,002768: 00,3626 52145 DXCH MPAC # IN A SCALED VERSION WHERE P(X) IS A
043628,002769: 00,3627 52124 DXCH BUF2 # SEVENTH ORDER POLYNOMIAL.
043629,002770:
043630,002771: 00,3630 03325 TC SQRTSUB # RETURNS WITH NORMALIZED SQUARE ROOT.
043631,002772:
043632,002773: 00,3631 10125 CCS MPTEMP # SEE IF UN-NORMALIZATION REQUIRED.
043633,002774: 00,3632 13675 TCF ACOSSHR # IF SO.
043634,002775:
![]() |
Page 1035 |
043636,002777: 00,3633 52145 ACOS3 DXCH MPAC # SET UP FOR POLYNOMIAL EVALUATION.
043637,002778: 00,3634 52124 DXCH BUF2
043638,002779: 00,3635 52145 DXCH MPAC
043639,002780:
043640,002781: 00,3636 07274 TC POLY
043641,002782: 00,3637 00006 DEC 6 B-14
043642,002783: 00,3640 13240 23630 2DEC +.353553385 # COEFFICIENTS ARE C 2(+I)/PISQRT(2) WHERE
043643,002784:
043644,002785: 00,3642 74721 47775 2DEC* -.0483017006 B+1* # I
043645,002786:
043646,002787: 00,3644 02440 20237 2DEC* +.0200273085 B+2* # WHERE C STANDS FOR ORIGINAL COEFFS.
043647,002788:
043648,002789: 00,3646 75067 70742 2DEC* -.0112931863 B+3*
043649,002790:
043650,002791: 00,3650 03436 26756 2DEC* +.00695311612 B+4*
043651,002792:
043652,002793: 00,3652 74037 57640 2DEC* -.00384617957 B+5*
043653,002794:
043654,002795: 00,3654 03046 07143 2DEC* +.001501297736 B+6*
043655,002796:
043656,002797: 00,3656 76654 42244 2DEC* -.000284160334 B+7*
043657,002798:
043658,002799: 00,3660 32466 CAF LBUF2 # DO FINAL MULTIPLY AND GO TO ANY
043659,002800: 00,3661 07160 TC DMPSUB -1 # EPILOGUE SEQUENCES.
043660,002801: 00,3662 00126 TC ESCAPE
043661,002802:
043662,002803: 00,3663 00006 SUBTR EXTEND # EPILOGUE FOR NEGATIVE INPUTS TO ARCCOS.
043663,002804: 00,3664 40145 DCS MPAC
043664,002805: 00,3665 67746 AD HALF # FORMS PI - ARCCOS(-X) = ARCCOS(X).
043665,002806: 00,3666 52145 DXCH MPAC
043666,002807: 00,3667 00127 TC ESCAPE2 # GO TO POSSIBLE ARCSIN EPILOGUE.
043667,002808:
043668,002809: 00,3670 00006 ASINEX EXTEND
043669,002810: 00,3671 40145 DCS MPAC # ARCSIN EPILOGUE - GET ARCSIN(X)
043670,002811: 00,3672 67747 AD QUARTER # = PI/2 - ARCCOS(X).
043671,002812: 00,3673 52145 DXCH MPAC
043672,002813: 00,3674 16125 LDANZIG TCF DANZIG
043673,002814:
![]() |
Page 1036 |
043675,002816: 00,3675 50000 ACOSSHR INDEX A # THE SHIFT RIGHT IS LESS THAN 14 SINCE
043676,002817: 00,3676 37746 CAF BIT14 # THE INPUT WAS NON-ZERO DP.
043677,002818: 00,3677 54125 TS MPTEMP
043678,002819: 00,3700 02073 TC VSHRRND # DP SHIFT RIGHT AND ROUND.
043679,002820: 00,3701 13633 TCF ACOS3 # PROCEED.
043680,002821:
043681,002822: 00,3702 00006 ACOSOVF EXTEND # IF MAJOR PART WAS ONLY 1 MORE THAN .5,
043682,002823: 00,3703 13620 BZF ACOS=0 # CALL ANSWER ZERO.
043683,002824:
043684,002825: 00,3704 06000 ACOSABRT TC ABORT
043685,002826: 00,3705 01301 OCT 1301
043686,002827:
043687,002828: 00,3706 37747 ACOSZERO CAF QUARTER # ACOS(0) = PI/2.
043688,002829: 00,3707 13621 TCF ACOS=0 +1 # SET MPAC AND EXIT VIA ESCAPE.
043689,002830:
043690,002831: 00,3710 77763 NEG12 DEC -12 B-14
043691,002832: 00,3711 13663 TCSUBTR TCF SUBTR
043692,002833:
![]() |
Page 1037 |
043694,002835: # AUXILIARY CODING FOR DDV/BDDV:
043695,002836:
043696,002837:
043697,002838: 00,3712 10000 BUFPOS CCS A
043698,002839: 00,3713 12420 TCF BUF+ # TO BUF+ IF BUF IS GREATER THAN +1.
043699,002840:
043700,002841: 00,3714 40121 CS BUF +1 # IF BUF IS +1, FORCING SIGN AGREEMENT
043701,002842: 00,3715 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO.
043702,002843: 00,3716 62420 BZMF BUF+ # BRANCH IF SIGNS AGREE.
043703,002844:
043704,002845: 00,3717 37746 CA HALF # SIGNS DISAGREE. FORCE AGREEMENT.
043705,002846: 00,3720 60000 +6 DOUBLE
043706,002847: 00,3721 26121 ADS BUF +1
043707,002848: 00,3722 37767 CA ZERO
043708,002849: 00,3723 54120 TS BUF
043709,002850: 00,3724 12362 TCF BUFZERO
043710,002851:
043711,002852: 00,3725 10000 BUFNEG CCS A
043712,002853: 00,3726 12414 TCF BUF- # TO BUF- IF BUF IS LESS THAN -1.
043713,002854:
043714,002855: 00,3727 30121 CA BUF +1 # IF BUF IS -1, FORCING SIGN AGREEMENT
043715,002856: 00,3730 00006 EXTEND # MAY CAUSE BUF TO BECOME ZERO.
043716,002857: 00,3731 62414 BZMF BUF- # BRANCH IF SIGNS AGREE.
043717,002858:
043718,002859: 00,3732 47746 CS HALF # SIGNS DISAGREE. FORCE AGREEMENT.
043719,002860: 00,3733 13720 TCF BUFPOS +6
043720,002861:
![]() |
Page 1038 |
043722,002863: # THE FOLLOWING INSTRUCTIONS ARE AVAILABLE FOR SETTING, MODIFYING, AND BRANCHING ON INDEX REGISTERS:
043723,002864:
043724,002865: # 1. AXT ADDRESS TO INDEX TRUE.
043725,002866: # 2. AXC ADDRESS TO INDEX COMPLEMENTED.
043726,002867: # 3. LXA LOAD INDEX FROM ERASABLE.
043727,002868: # 4. LXC LOAD INDEX COMPLEMENTED FROM ERASABLE.
043728,002869: # 5. SXA STORE INDEX IN ERASABLE.
043729,002870: # 6. XCHX EXCHANGE INDEX REIGSTER WITH ERASABLE.
043730,002871:
043731,002872: # 7. INCR INCREMENT INDEX REGISTER.
043732,002873: # 8. XAD ERASABLE ADD TO INDEX REGISTER.
043733,002874: # 9. XSU ERASABLE SUBTRACT FROM INDEX REGISTER.
043734,002875:
043735,002876: # 10. TIX BRANCH ON INDEX REGISTER AND DECREMENT.
043736,002877:
043737,002878:
043738,002879: 01,2626 BANK 01
043739,002880:
043740,002881: 01,2626 02723 AXT TC TAGSUB # SELECT APPROPRIATE INDEX REGISTER.
043741,002882: 01,2627 30107 CA POLISH
043742,002883: 01,2630 50120 XSTORE INDEX INDEXLOC # CONTAINS C(FIXLOC) OR C(FIXLOC)+1.
043743,002884: 01,2631 54046 TS X1
043744,002885: 01,2632 16125 TCF DANZIG
043745,002886:
043746,002887: 01,2633 02723 AXC TC TAGSUB
043747,002888: 01,2634 40107 CS POLISH
043748,002889: 01,2635 02630 TC XSTORE
043749,002890:
043750,002891: 01,2636 02711 LXA TC 15ADRERS # LOAD INDEX REGISTER FROM ERASABLE.
043751,002892: 01,2637 50107 INDEX POLISH
043752,002893: 01,2640 30000 CA 0
043753,002894: 01,2641 12630 TCF XSTORE
043754,002895:
043755,002896: 01,2642 02711 LXC TC 15ADRERS # LOAD NDX REG FROM ERASABLE COMPLEMENTED.
043756,002897: 01,2643 50107 INDEX POLISH
043757,002898: 01,2644 40000 CS 0
043758,002899: 01,2645 12630 TCF XSTORE
043759,002900:
043760,002901: 01,2646 02711 SXA TC 15ADRERS # STORE INDEX REGISTER IN ERASABLE.
043761,002902: 01,2647 50120 INDEX INDEXLOC
043762,002903: 01,2650 30046 CA X1
043763,002904: 01,2651 50107 MSTORE1 INDEX POLISH
043764,002905: 01,2652 54000 TS 0
043765,002906: 01,2653 16125 TCF DANZIG
043766,002907:
![]() |
Page 1039 |
043768,002909: 01,2654 02711 XCHX TC 15ADRERS # EXCHANGE INDEX REGISTER WITH ERASABLE.
043769,002910: 01,2655 50107 INDEX POLISH
043770,002911: 01,2656 30000 CA 0
043771,002912: 01,2657 50120 INDEX INDEXLOC
043772,002913: 01,2660 56046 XCH X1
043773,002914: 01,2661 12651 TCF MSTORE1
043774,002915:
043775,002916: 01,2662 02711 XAD TC 15ADRERS # ADD ERASABLE TO INDEX REGISTER.
043776,002917: 01,2663 50107 INDEX POLISH
043777,002918: 01,2664 30000 CA 0
043778,002919: 01,2665 50120 XAD2 INDEX INDEXLOC
043779,002920: 01,2666 26046 ADS X1 # IGNORING OVERFLOWS.
043780,002921: 01,2667 16125 TCF DANZIG
043781,002922:
043782,002923: 01,2670 02723 INCR TC TAGSUB # INCREMENT INDEX REGISTER.
043783,002924: 01,2671 30107 CA POLISH
043784,002925: 01,2672 12665 TCF XAD2
043785,002926:
043786,002927: 01,2673 02711 XSU TC 15ADRERS # SUBTRACT ERASABLE FROM INDEX REGISTER.
043787,002928: 01,2674 50107 INDEX POLISH
043788,002929: 01,2675 40000 CS 0
043789,002930: 01,2676 12665 TCF XAD2
043790,002931:
043791,002932:
043792,002933: 01,2677 02723 TIX TC TAGSUB # BRANCH AND DECREMENT ON INDEX.
043793,002934: 01,2700 50120 INDEX INDEXLOC
043794,002935: 01,2701 40050 CS S1
043795,002936: 01,2702 50120 INDEX INDEXLOC
043796,002937: 01,2703 60046 AD X1
043797,002938: 01,2704 00006 EXTEND # NO OPERATION IF DECREMENTED INDEX IS
043798,002939: 01,2705 66125 BZMF DANZIG # NEGATIVE OR ZERO.
043799,002940:
043800,002941: 01,2706 50120 DOTIXBR INDEX INDEXLOC
043801,002942: 01,2707 56046 XCH X1 # IGNORING OVERFLOWS.
043802,002943:
043803,002944: 01,2710 16724 TCF GOTO # DO THE BRANCH USING THE CADR IN POLISH.
043804,002945:
![]() |
Page 1040 |
043806,002947: # SUBROUTINE TO CONVERT AN ERASABLE ADDRESS (11 BITS) TO AN EBANK SETTING AND SUBADDRESS.
043807,002948:
043808,002949: 01,2711 40107 15ADRERS CS POLISH
043809,002950: 01,2712 65353 AD DEC45
043810,002951: 01,2713 10000 CCS A # DOES THE ADDRESS POINT TO THE WORK AREA?
043811,002952: 01,2714 30110 CA FIXLOC # YES. ADD FIXLOC. EBANK OK AS IS.
043812,002953: 01,2715 12722 TCF +5
043813,002954:
043814,002955: 01,2716 35352 CA OCT1400 # NO. SET EBANK & MAKE UP SUBADDRESS.
043815,002956: 01,2717 56107 XCH POLISH
043816,002957: 01,2720 54003 TS EBANK
043817,002958: 01,2721 74564 MASK LOW8
043818,002959: 01,2722 26107 +5 ADS POLISH # FALL INTO TAGSUB, AND RETURN VIA Q.
043819,002960:
043820,002961: # SUBROUTINE WHICH SETS THE ADDRESS OF THE SPECIFIED INDEX IN INDEXLOC. (ACTUALLY, THE ADDRESS -38D.)
043821,002962:
043822,002963: 01,2723 30110 TAGSUB CA FIXLOC
043823,002964: 01,2724 54120 TS INDEXLOC
043824,002965:
043825,002966: 01,2725 10020 CCS CYR # BIT 15 SPECIFIES INDEX.
043826,002967: 01,2726 24120 INCR INDEXLOC # 0 MEANS USE X2.
043827,002968: 01,2727 00002 TC Q
043828,002969: 01,2730 00002 TC Q # 1 FOR X1.
043829,002970:
![]() |
Page 1041 |
043831,002972: # MISCELLANEOUS OPERATION CODES WITH DIRECT ADDRESSES. INCLUDED HERE ARE:
043832,002973:
043833,002974: # 1. ITA STORE QPRET (RETURN ADDRESS) IN ERASABLE.
043834,002975: # 2. CALL CALL A SUBROUTINE, LEAVING RETURN IN QPRET.
043835,002976: # 3. RTB RETURN TO BASIC LANGUAGE AT THE GIVEN ADDRESS.
043836,002977: # 4. BHIZ BRANCH IF THE HIGH ORDER OF MPAC IS ZERO (SINGLE PRECISION).
043837,002978: # 5. BOV BRANCH ON OVERFLOW.
043838,002979: # 6. GOTO SIMPLE SEQUENCE CHANGE.
043839,002980:
043840,002981: 01,2731 10020 RTB/BHIZ CCS CYR
043841,002982: 01,2732 30107 RTB CA POLISH
043842,002983: 01,2733 15230 TCF BANKJUMP # CALL BASIC ROUTINE.
043843,002984:
043844,002985: 01,2734 10144 BHIZ CCS MPAC
043845,002986: 01,2735 16125 TCF DANZIG
043846,002987: 01,2736 16724 TCF GOTO
043847,002988: 01,2737 16125 TCF DANZIG
043848,002989: 01,2740 16724 TCF GOTO
043849,002990:
043850,002991: 01,2741 10111 BOV(B) CCS OVFIND # BRANCH ON OVERFLOW TO BASIC OR INTERP.
043851,002992: 01,2742 12744 TCF +2
043852,002993: 01,2743 16125 TCF DANZIG
043853,002994: 01,2744 54111 TS OVFIND
043854,002995: 01,2745 10020 CCS CYR
043855,002996: 01,2746 12732 TCF RTB # IF BASIC.
043856,002997: 01,2747 00360 B5TOBB OCT 360
043857,002998: 01,2750 16724 TCF GOTO
043858,002999:
![]() |
Page 1042 |
043860,003001: 01,2751 10020 BZE/GOTO CCS CYR # SEE WHICH OP-CODE IS DESIRED.
043861,003002: 01,2752 07001 TC BRANCH # DO BZE.
043862,003003: 01,2753 16125 TCF DANZIG
043863,003004: 01,2754 16724 TCF GOTO # DO GOTO.
043864,003005: 01,2755 16125 TCF DANZIG
043865,003006:
043866,003007: 01,2756 10020 BPL/BMN CCS CYR
043867,003008: 01,2757 12765 TCF BPL
043868,003009: 01,2760 12000 5B10 DEC 5 B+10 # SHIFTS OP CODE IN SWITCH INSTRUCTION ADR
043869,003010:
043870,003011: 01,2761 07001 TC BRANCH # DO BMN.
043871,003012: 01,2762 16125 TCF DANZIG
043872,003013: 01,2763 16125 TCF DANZIG
043873,003014: 01,2764 16724 TCF GOTO # ONLY IF NNZ.
043874,003015:
043875,003016: 01,2765 07001 BPL TC BRANCH
043876,003017: 01,2766 16724 TCF GOTO # IF POSITIVE OR ZERO.
043877,003018: 01,2767 16724 TCF GOTO
043878,003019: 01,2770 16125 TCF DANZIG
043879,003020:
043880,003021: 01,2771 10020 CALL/ITA CCS CYR
043881,003022: 01,2772 16716 TCF CALL
043882,003023:
043883,003024: 01,2773 04736 TC CCSHOLE
043884,003025: 01,2774 02711 TC 15ADRERS # STORE QPRET. (TAGSUB AFTER 15ADRERS IS
043885,003026: 01,2775 50110 INDEX FIXLOC # SLOW IN THIS CASE, BUT SAVES STORAGE.)
043886,003027: 01,2776 30052 CA QPRET
043887,003028: 01,2777 12651 TCF MSTORE1
043888,003029:
![]() |
Page 1043 |
043890,003031: # THE FOLLOWING OPERATIONS ARE AVAILABLE FOR ALTERING AND TESTING INTERPRETIVE SWITCHES:
043891,003032:
043892,003033: # 00 BONSET SET A SWITCH AND DO A GOTO IF IT WAS ON.
043893,003034: # 01 SETGO SET A SWITCH AND DO A GOTO.
043894,003035: # 02 BOFSET SET A SWITCH AND DO A GOTO IF IT WAS OFF
043895,003036: # 03 SET SET A SWITCH.
043896,003037:
043897,003038: # 04 BONINV INVERT A SWITCH AND BRANCH IF IT WAS ON.
043898,003039: # 05 INVGO INVERT A SWITCH AND DO A GOTO.
043899,003040: # 06 BOFINV INVERT A SWITCH AND BRANCH IF IT WAS OFF
043900,003041: # 07 INVERT INVERT A SWITCH.
043901,003042:
043902,003043: # 10 BONCLR CLEAR A SWITCH AND BRANCH IF IT WAS ON.
043903,003044: # 11 CLRGO CLEAR A SWITCH AND DO A GOTO.
043904,003045: # 12 BOFCLR CLEAR A SWITCH AND BRANCH IF IT WAS OFF.
043905,003046: # 13 CLEAR CLEAR A SWITCH.
043906,003047:
043907,003048: # 14 BON BRANCH IF A SWITCH WAS ON.
043908,003049: # 16 BOFF BRANCH IF A SWITCH WAS OFF.
043909,003050:
043910,003051: # THE ADDRESS SUPPLIED WITH THE SWITCH INSTRUCTION IS INTERPRETED AS FOLLOWS:
043911,003052:
043912,003053: # BITS 1-4 SWITCH BIT NUMBER (1-15).
043913,003054: # BITS 5-8 SWITCH OPERATION NUMBER.
043914,003055: # BITS 9- SWITCH WORD NUMBER (UP TO 64 SWITCH WORDS).
043915,003056:
043916,003057: # THE ADDRESS ITSELF IS MADE UP BY THE YUL SYSTEM ASSEMBLER. THE BRANCH INSTRUCTIONS REQUIRE TWO
043917,003058: # ADDRESSES, THE SECOND TAKEN AS THE DIRECT (OR INDIRECT IF IN ERASABLE) ADDRESS OF THE BRANCH.
043918,003059:
043919,003060:
043920,003061: 01,3000 35343 SWITCHES CAF LOW4 # LEAVE THE SWITCH BIT IN SWBIT .
043921,003062: 01,3001 70107 MASK POLISH
043922,003063: 01,3002 50000 INDEX A
043923,003064: 01,3003 37745 CAF BIT15 # (NUMBER FROM LEFT TO RIGHT.)
043924,003065: 01,3004 54121 TS SWBIT
043925,003066:
043926,003067: 01,3005 37755 CAF BIT7 # LEAVE THE SWITCH NUMBER IN SWWORD.
043927,003068: 01,3006 00006 EXTEND
043928,003069: 01,3007 70107 MP POLISH
043929,003070: 01,3010 54120 TS SWWORD
043930,003071:
043931,003072: 01,3011 00004 INHINT # DURING SWITCH CHANGE SO RUPT CAN USE TOO
043932,003073: 01,3012 50000 INDEX A # LEAVE THE SWITCH WORD ITSELF IN L.
043933,003074: 01,3013 30074 CA STATE
043934,003075: 01,3014 54002 TS Q # Q WILL BE USED AS A CHANNEL.
![]() |
Page 1044 |
043936,003077: 01,3015 37751 CAF BIT11
043937,003078: 01,3016 00006 EXTEND # DISPATCH SWITCH BIT OPERATION AS IN BITS
043938,003079: 01,3017 70107 MP POLISH # 7-8 OF POLISH.
043939,003080: 01,3020 73060 MASK B3TOB4 # GETS 4X2-BIT CODE.
043940,003081: 01,3021 50000 INDEX A
043941,003082: 01,3022 13023 TCF +1
043942,003083:
043943,003084: 01,3023 30121 +1 CA SWBIT # 00 - SET SWITCH IN QUESTION.
043944,003085: 01,3024 00006 EXTEND
043945,003086: 01,3025 04002 ROR Q
043946,003087: 01,3026 13035 TCF SWSTORE
043947,003088:
043948,003089: 01,3027 30121 +5 CA SWBIT # 01 - INVERT SWITCH.
043949,003090: 01,3030 00006 EXTEND
043950,003091: 01,3031 06002 RXOR Q
043951,003092: 01,3032 13035 TCF SWSTORE
043952,003093:
043953,003094: 01,3033 40121 +9D CS SWBIT # 10 - CLEAR.
043954,003095: 01,3034 70002 MASK Q
043955,003096: 01,3035 50120 SWSTORE INDEX SWWORD
043956,003097: 01,3036 54074 TS STATE # NEW SWITCH WORD.
043957,003098:
![]() |
Page 1045 |
043959,003100: 01,3037 00003 +13D RELINT # 11 - NOOP.
043960,003101: 01,3040 37747 CAF BIT13
043961,003102: 01,3041 00006 EXTEND # DISPATCH SEQUCE CHANGING OR BRANCHING
043962,003103: 01,3042 70107 MP POLISH # CODE.
043963,003104: 01,3043 73060 MASK B3TOB4
043964,003105: 01,3044 50000 INDEX A
043965,003106: 01,3045 13046 TCF +1 # ORIGINALLY STORED IN BITS 5-6.
043966,003107:
043967,003108: 01,3046 40002 +1 CS Q # 00 - BRANCH IF ON.
043968,003109: 01,3047 70121 TEST MASK SWBIT
043969,003110: 01,3050 10000 CCS A
043970,003111: 01,3051 13061 TCF SWSKIP
043971,003112:
043972,003113: 01,3052 16773 +5 TCF SWBRANCH # 01 - GO TO.
043973,003114:
043974,003115: 01,3053 13061 TCF SWSKIP # HERE ONLY ON BIT 15.
043975,003116:
043976,003117: 01,3054 04736 TC CCSHOLE
043977,003118: 01,3055 04736 TC CCSHOLE
043978,003119:
043979,003120: 01,3056 30002 +9D CA Q # 10 - BRANCH IF OFF.
043980,003121: 01,3057 13047 TCF TEST
043981,003122:
043982,003123: 01,3060 00014 B3TOB4 OCT 14
043983,003124:
043984,003125: 01,3061 24154 SWSKIP INCR LOC
043985,003126:
043986,003127: 01,3062 01,3000 SW/ EQUALS SWITCHES
043987,003128:
043988,003129: 01,3062 16125 +13D TCF DANZIG # 11 - NOOP.
End of include-file INTERPRETER.agc. Parent file is MAIN.agc