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