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