Source Code
These source-code files are part of a reconstructed copy of Corona 261, the
final, flown release of the Block I Command Module (CM) Apollo Guidance Computer
(AGC) software for the AS-202 mission.
They have been created via disassembly of binary dumps of the original core rope memory modules actually flown on the mission, part numbers 1003733-171, 1003733-241, 1003733-191, 1003733-211, 1003733-221, and 1003733-241. The source code for the Apollo 4 and 6 software, Solarium 55, was used as a starting point, since it was directly derived from Corona and (at least in theory) only minimally modified. Since only binary dumps (rather than listings) of Corona are available as source material, all comments and labels are approximate. They have been taken from other AGC programs where possible, or, in some places, written from scratch to match what we believe would have been in the original listing. |
002670,000002: ## Copyright: Public domain.
002671,000003: ## Filename: BANK_03_INTERPRETER_SECTION.agc
002672,000004: ## Purpose: A section of Corona revision 261.
002673,000005: ## It is part of the source code for the Apollo Guidance Computer
002674,000006: ## (AGC) for AS-202. No original listings of this software are
002675,000007: ## available; instead, this file was created via disassembly of
002676,000008: ## the core rope modules actually flown on the mission.
002677,000009: ## Assembler: yaYUL
002678,000010: ## Contact: Ron Burkey <info@sandroid.org>.
002679,000011: ## Website: www.ibiblio.org/apollo/index.html
002680,000012: ## Mod history: 2023-05-27 MAS Created from Solarium 55.
002681,000013:
002682,000014: 03,6000 SETLOC 6000
002683,000015:
002684,000016: 03,6000 06021 BMN1 TC BRANCH # BRANCH MINUS
002685,000017: 03,6001 04703 TC RE-ENTER
002686,000018: 03,6002 04703 TC RE-ENTER
002687,000019: 03,6003 04567 TC DOBR
002688,000020:
002689,000021: 03,6004 06021 BPL1 TC BRANCH # BRANCH PLUS
002690,000022: 03,6005 04567 TC DOBR
002691,000023: 03,6006 04567 TC DOBR
002692,000024: 03,6007 04703 TC RE-ENTER
002693,000025:
002694,000026: 03,6010 06021 BZE1 TC BRANCH # BRANCH ZERO
002695,000027: 03,6011 04703 TC RE-ENTER
002696,000028: 03,6012 04567 TC DOBR
002697,000029: 03,6013 04703 TC RE-ENTER
002698,000030:
002699,000031: 03,6014 10115 BHIZ1 CCS MPAC # BRANCH ON HIGH ORDER ZERO
002700,000032: 03,6015 04703 TC RE-ENTER # PNZ
002701,000033: 03,6016 04567 TC DOBR
002702,000034: 03,6017 04703 TC RE-ENTER
002703,000035: 03,6020 04567 TC DOBR
002704,000036:
002705,000037: 03,6021 30001 BRANCH XCH Q
002706,000038: 03,6022 50111 TS BRANCHQ
002707,000039: 03,6023 10115 CCS MPAC
002708,000040: 03,6024 00111 TC BRANCHQ
002709,000041: 03,6025 06027 TC +2
002710,000042: 03,6026 06036 TC MINUS
002711,000043:
002712,000044: 03,6027 10116 CCS MPAC +1
002713,000045: 03,6030 00111 TC BRANCHQ
002714,000046: 03,6031 06033 TC +2
002715,000047: 03,6032 06036 TC MINUS
002716,000048:
002717,000049: 03,6033 10117 CCS MPAC +2
002718,000050: 03,6034 00111 TC BRANCHQ
002719,000051: 03,6035 06037 TC +2
002720,000052: 03,6036 34516 MINUS CAF ONE
002721,000053: 03,6037 64516 AD ONE
002722,000054: 03,6040 60111 AD BRANCHQ
002723,000055: 03,6041 00000 XAQ
002724,000056:
002725,000057:
002726,000058: 03,6042 40067 TRUE2 CS FIXLOC # RESTORES INTEGER ADDRESSES
002727,000059: 03,6043 60062 AD ADDRWD
002728,000060: 03,6044 50062 TS ADDRWD
002729,000061: 03,6045 10000 CCS A # WE MUST ELIMINATE THE MINUS ZERO CASE
002730,000062: 03,6046 00001 TC Q # OK HERE
002731,000063: 03,6047 03070 TC CCSHOLE
002732,000064: 03,6050 06052 TC +2 # IF ADDRESS WAS NEGATIVE
002733,000065: 03,6051 04024 TC DANZIG # FAST EXIT FOR ZERO SHIFT COUNTS
002734,000066: 03,6052 20065 INDEX MODE # RIGHT SHIFT INSTEAD OF A LEFT ONE
002735,000067: 03,6053 06056 TC +3 # CCS FOLLOWED BY ADD LEFT THE COUNT POS.
002736,000068: 03,6054 05100 TC SHIFTR1 +3 # SO WE NEED ONLY CALL THE APPROPRIATE
002737,000069: 03,6055 05100 TC SHIFTR1 +3 # SHIFT RIGHT INSTRUCTION.
002738,000070: 03,6056 40062 CS ADDRWD # PUT POSITIVE COUNT IN ADDRWD.
002739,000071: 03,6057 50062 TS ADDRWD
002740,000072: 03,6060 64335 AD NEG1 # DECREMENT LIKE CCS BEFORE RETURNING.
002741,000073: 03,6061 05637 TC VSRT1 +4
002742,000074:
002743,000075: 03,6062 04722 AST TC TAG
002744,000076: 03,6063 40076 CS POLISH
002745,000077: 03,6064 20075 SSTORE INDEX TAG1
002746,000078: 03,6065 30050 XCH 40D # STEP REGISTER
002747,000079: 03,6066 04703 TC RE-ENTER
002748,000080:
002749,000081: 03,6067 04722 AXC TC TAG # ADDRESS TO INDEX COMPLEMENTED
002750,000082: 03,6070 30076 XCH POLISH
002751,000083: 03,6071 06074 TC XSTORE
002752,000084:
002753,000085: 03,6072 04722 AXT TC TAG
002754,000086: 03,6073 40076 CS POLISH
002755,000087: 03,6074 20075 XSTORE INDEX TAG1
002756,000088: 03,6075 30046 XCH 38D # MAY HAVE OVERFLOWED
002757,000089: 03,6076 04703 TC RE-ENTER
002758,000090:
002759,000091: 03,6077 04722 LXA TC TAG
002760,000092: 03,6100 20062 INDEX ADDRWD # MUST BE ERASABLE - NOT NEEDED OTHERWISE
002761,000093: 03,6101 40000 CS 0
002762,000094: 03,6102 40000 +3 CS A
002763,000095: 03,6103 06074 TC XSTORE
002764,000096:
002765,000097: 03,6104 04722 LXC TC TAG # LOAD INDEX FROM ADDRESS COMPLEMENTED
002766,000098: 03,6105 20062 INDEX ADDRWD
002767,000099: 03,6106 40000 CS 0
002768,000100: 03,6107 06074 TC XSTORE
002769,000101:
002770,000102: 03,6110 04722 SXA TC TAG
002771,000103: 03,6111 20075 INDEX TAG1
002772,000104: 03,6112 40046 CS 38D # GET INDEX
002773,000105: 03,6113 40000 CS A
002774,000106: 03,6114 04701 TC STOR1
002775,000107:
002776,000108:
002777,000109: 03,6115 04722 TIX TC TAG
002778,000110: 03,6116 20075 INDEX TAG1 # GET APPROPRIATE STEP REGISTER
002779,000111: 03,6117 40050 CS 40D # STEP REGISTER
002780,000112: 03,6120 20075 INDEX TAG1
002781,000113: 03,6121 60046 AD 38D
002782,000114: 03,6122 50102 TS TEM2 # TO TEMPORARY
002783,000115: 03,6123 10000 CCS A
002784,000116: 03,6124 30102 XCH TEM2 # DECREMENT INDEX AND BRANCH
002785,000117: 03,6125 06130 TC TIXBR
002786,000118: 03,6126 04703 TC RE-ENTER # INDEX LEFT ALONE AND NO BRANCH
002787,000119: 03,6127 04703 LNOBR TC RE-ENTER
002788,000120:
002789,000121: 03,6130 20075 TIXBR INDEX TAG1
002790,000122: 03,6131 50046 TS 38D
002791,000123: 03,6132 40076 CS POLISH
002792,000124: 03,6133 04602 TC DOBR2
002793,000125:
002794,000126: 03,6134 04722 INCR TC TAG
002795,000127: 03,6135 40076 CS POLISH
002796,000128: 03,6136 20075 INDEX TAG1
002797,000129: 03,6137 60046 AD 38D
002798,000130: 03,6140 06074 TC XSTORE
002799,000131:
002800,000132: 03,6141 04722 XCHX TC TAG
002801,000133: 03,6142 20062 INDEX ADDRWD
002802,000134: 03,6143 30000 XCH 0
002803,000135: 03,6144 20075 INDEX TAG1
002804,000136: 03,6145 30046 XCH 38D
002805,000137: 03,6146 04701 TC STOR1
002806,000138:
002807,000139: 03,6147 04722 XSU TC TAG # INDEX REGISTER SUBTRACT FROM ERASABLE
002808,000140: 03,6150 20062 INDEX ADDRWD
002809,000141: 03,6151 40000 CS 0
002810,000142: 03,6152 06136 TC INCR +2
002811,000143:
002812,000144: 03,6153 04722 XAD TC TAG # INDEX REGISTER ADD FROM ERASABLE
002813,000145: 03,6154 20062 INDEX ADDRWD
002814,000146: 03,6155 40000 CS 0
002815,000147: 03,6156 40000 COM
002816,000148: 03,6157 06136 TC INCR +2
002817,000149:
002818,000150:
002819,000151: 03,6160 35501 VDEF CAF ZERO
002820,000152: 03,6161 60070 AD VACLOC # USES MPAC AS V0, PUSHES UP FOR V1, AND
002821,000153: 03,6162 50102 TS TEM2 # PUSHES UP AGAIN FOR V2. THE RESULTING
002822,000154: 03,6163 34772 CAF DAD2 +4 # VECTOR IS LEFT IN VAC
002823,000155: 03,6164 05041 TC 8TO2
002824,000156: 03,6165 05412 TC INCRT2
002825,000157: 03,6166 04326 TC PUSHUP1
002826,000158: 03,6167 05041 TC 8TO2
002827,000159: 03,6170 05412 TC INCRT2
002828,000160: 03,6171 04326 TC PUSHUP1
002829,000161: 03,6172 05041 TC 8TO2
002830,000162: 03,6173 05410 TC ZEROEXIT # T0 DECLAIN MO45 IS VECTOR
002831,000163:
002832,000164: 03,6174 10020 ITA1 CCS CYR
002833,000165: 03,6175 06203 TC +6 # FOR ITA
002834,000166: 03,6176 03070 TC CCSHOLE
002835,000167: 03,6177 20062 INDEX ADDRWD # PICK UP ADDRESS
002836,000168: 03,6200 40000 CS 0
002837,000169: 03,6201 40000 COM
002838,000170: 03,6202 04602 TC DOBR2 # AND DO THE BRANCH
002839,000171:
002840,000172: 03,6203 20067 +6 INDEX FIXLOC
002841,000173: 03,6204 40052 CS QPRET
002842,000174: 03,6205 06113 TC SXA +3 # COMPLEMENT AND DEPOSIT
002843,000175:
002844,000176: 03,6206 10020 EXIT CCS CYR # RETURN TO BASIC
002845,000177: 03,6207 04571 TC EXIT2 # EXIT.
002846,000178:
002847,000179: 03,6210 03070 TC CCSHOLE
002848,000180:
002849,000181: 03,6211 40076 CS POLISH # HERE TO RETURN TO BASIC AT X
002850,000182: 03,6212 05662 TC SWCALL
002851,000183:
002852,000184: 03,6213 20062 SIGN INDEX ADDRWD # AFFIX SIGN OF X TO MPAC OR VAC
002853,000185: 03,6214 10000 CCS 0 # MUST BE NON-ZERO
002854,000186: 03,6215 04024 TC DANZIG
002855,000187: 03,6216 06220 TC +2 # EXAMINE MINOR PART
002856,000188: 03,6217 06325 TC COMP # COMPLEMENT VECTOR OR SCALAR.
002857,000189:
002858,000190: 03,6220 20062 INDEX ADDRWD
002859,000191: 03,6221 10001 CCS 1
002860,000192: 03,6222 04024 TC DANZIG
002861,000193: 03,6223 04024 TC DANZIG # NO OPERATION IF C(ADDRWD,ADDRWD+1) = 0
002862,000194: 03,6224 06325 TC COMP
002863,000195: 03,6225 04024 TC DANZIG
002864,000196:
002865,000197:
002866,000198: 03,6226 40070 VSQ CS VACLOC # TAKE SQUARE OF LENGTH OF VECTOR IN VAC.
002867,000199: 03,6227 40000 COM
002868,000200: 03,6230 50062 TS ADDRWD
002869,000201: 03,6231 05235 TC DOT1 +1 # FINISH IN DOT PRODUCT ROUTINE.
002870,000202:
002871,000203: 03,6232 64516 AD ONE # FROM TRUE2
002872,000204:
002873,000205: 03,6233 30001 SHIFTR XCH Q
002874,000206: 03,6234 50104 TS TEM5 # SHIFT TP MPAC RIGHT ACCORDING TO INTEGER
002875,000207: 03,6235 10001 CCS Q # PICK UP COUNT, SUBTRACTING ONE
002876,000208: 03,6236 65363 +3 AD NEG13 # RETURNS HERE FROM SR14
002877,000209: 03,6237 10000 CCS A
002878,000210: 03,6240 64516 AD ONE # SHIFT COUNT MORE THAN 14 - DECREMENT BY
002879,000211: 03,6241 06251 TC SR14 # 14 AND EXCHANGE
002880,000212: 03,6242 06244 TC +2 # REMAINING SHIFT COUNT BETWEEN 1 AND 13
002881,000213: 03,6243 06251 TC SR14 # MULTIPLES OF 14 END UP HERE
002882,000214: 03,6244 40000 COM
002883,000215: 03,6245 20000 INDEX A # PICK UP PROPER SHIFTING BIT
002884,000216: 03,6246 34515 CAF BIT2
002885,000217: 03,6247 05416 TC SHORTMP # DO SHIFT BY MULTIPLICATION
002886,000218: 03,6250 00104 TC TEM5 # (TEM5 CONTAINS SQRT RETURN IF SQRT CALL)
002887,000219:
002888,000220: 03,6251 30115 SR14 XCH MPAC # SAVE REDUCED COUNT
002889,000221: 03,6252 30116 XCH MPAC +1
002890,000222: 03,6253 30117 XCH MPAC +2
002891,000223: 03,6254 35501 CAF ZERO
002892,000224: 03,6255 30115 XCH MPAC # NOW BRING IT BACK
002893,000225: 03,6256 10000 CCS A # SEE IF REMAINING COUNT IS ZERO
002894,000226: 03,6257 06236 TC SHIFTR +3 # NON-ZERO - BACK TO SHIFT LOOP
002895,000227: 03,6260 00104 TC TEM5 # FINISHED
002896,000228:
002897,000229:
002898,000230: 03,6261 06263 ABVAL1 TC ABVAL
002899,000231: 03,6262 05237 TC DPEXIT # MODE IS NOW DP
002900,000232:
002901,000233: 03,6263 30001 ABVAL XCH Q # TAKES HALF THE LENGTH OF THE VECTOR IN
002902,000234: 03,6264 50107 TS TEM10 # VAC
002903,000235: 03,6265 06275 TC VSR1 # SHIFT VECTOR RIGHT ONE
002904,000236: 03,6266 05246 TC DOT2 # TAKE THE SQUARE OF ITS LENGTH
002905,000237: 03,6267 45502 CS FOUR # STORE SQUARE OF LENGTH IN REGISTERS 28
002906,000238: 03,6270 60070 AD VACLOC # AND 29 OF VAC AREA.
002907,000239: 03,6271 05347 TC STORDAC
002908,000240: 03,6272 04740 TC MPACCOM
002909,000241: 03,6273 07322 TC SQRT3 # TAKE A TRIPLE-PRECISION SQRT (DP ANSWER)
002910,000242: 03,6274 00107 TC TEM10 # AND EXIT
002911,000243:
002912,000244: 03,6275 30001 VSR1 XCH Q # SUBROUTINE WHICH SHIFTS VECTOR IN VAC
002913,000245: 03,6276 50106 TS TEM9 # RIGHT ONE PLACE, USED BY ABVAL AND UNIT
002914,000246: 03,6277 35502 CAF FOUR
002915,000247: 03,6300 60070 AD VACLOC # USED BY ABVAL AND UNIT
002916,000248: 03,6301 07301 TC SR1 # VECTOR IS SHIFTED RIGHT SO DOT PRODUCT
002917,000249: 03,6302 30064 XCH TEM11 # WONT OVERFLOW.
002918,000250: 03,6303 64340 AD MINUS2
002919,000251: 03,6304 07301 TC SR1
002920,000252: 03,6305 30064 XCH TEM11
002921,000253: 03,6306 64340 AD MINUS2
002922,000254: 03,6307 50062 TS ADDRWD # FOR THE DOT ROUTINE.
002923,000255: 03,6310 07301 TC SR1 # VECTOR IS NOW SHIFTED RIGHT
002924,000256:
002925,000257: 03,6311 00106 TC TEM9
002926,000258:
002927,000259: 03,6312 06021 SSM TC BRANCH # SET SIGN OF MPAC,MPAC+1 MINUS, USED BY
002928,000260: 03,6313 04740 TC MPACCOM # SIGN INSTRUCTION
002929,000261: 03,6314 04024 TC DANZIG
002930,000262: 03,6315 04024 TC DANZIG
002931,000263:
002932,000264: 03,6316 06021 SSP TC BRANCH
002933,000265: 03,6317 04024 TC DANZIG
002934,000266: 03,6320 04024 TC DANZIG
002935,000267: 03,6321 04740 TC MPACCOM
002936,000268: 03,6322 04024 TC DANZIG
002937,000269:
002938,000270:
002939,000271: 03,6323 34231 SQUARE CAF BUGMPAC # SQUARE MPAC AND LEAVE RESULT IN MPAC, +2
002940,000272: 03,6324 05064 TC DSQ2 # CONTINUE AS IN DMP.
002941,000273:
002942,000274: 03,6325 40065 COMP CS MODE
002943,000275: 03,6326 60000 DOUBLE
002944,000276: 03,6327 20000 INDEX A
002945,000277: 03,6330 06331 TC +1
002946,000278: 03,6331 05202 TC VACCOM
002947,000279: 03,6332 04024 TC DANZIG
002948,000280: 03,6333 04740 TC MPACCOM # FOR TP
002949,000281: 03,6334 04024 TC DANZIG
002950,000282: 03,6335 06333 TC -2
002951,000283:
002952,000284: 03,6336 35501 SMOVE CAF ZERO
002953,000285: 03,6337 50116 TS MPAC +1
002954,000286: 03,6340 04024 TC DANZIG
002955,000287:
002956,000288: 03,6341 10020 NEXT CCS CYR # NEXT AND ITCQ OPERATORS
002957,000289: 03,6342 10121 CCS ADRLOC # NEXT - KNOCK DOWN ADRLOC BY ONE
002958,000290: 03,6343 06347 TC +4 # AND BEGIN NEXT EQUN IMMEDIATELY
002959,000291: 03,6344 20067 INDEX FIXLOC # ITCQ - PICK UP QPRET AND BRANCH
002960,000292: 03,6345 30052 XCH QPRET
002961,000293: 03,6346 04602 TC DOBR2
002962,000294:
002963,000295: 03,6347 50121 +4 TS ADRLOC
002964,000296: 03,6350 34516 CAF ONE # TURN ON LOAD INDICATOR
002965,000297: 03,6351 06362 TC SWLODIND
002966,000298:
002967,000299: 03,6352 10121 NOLOAD CCS ADRLOC # NOLOD AND ROUND OPERATORS. DECREMENT
002968,000300: 03,6353 50121 TS ADRLOC # ADRLOC SINCE WE SHOULDNT HAVE TAKEN AN
002969,000301: 03,6354 10020 CCS CYR # ADDRESS. SEE IF NOLOD OR ROUND
002970,000302: 03,6355 35501 CAF ZERO # NOLOD - SET NEWEQIND TO ZERO
002971,000303: 03,6356 06362 TC +4
002972,000304: 03,6357 44516 CS ONE # MODE IS NOW DP
002973,000305: 03,6360 50065 TS MODE
002974,000306: 03,6361 05072 TC MPACRND # GO ROUND MPAC AND RETURN TO DANZIG
002975,000307:
002976,000308: 03,6362 50066 SWLODIND TS NEWEQIND
002977,000309: 03,6363 04024 TC DANZIG
002978,000310:
002979,000311:
002980,000312: 03,6364 30117 SL1 XCH MPAC +2 # ROUTINE WHICH SHIFTS TRIPLE ACCUMULATOR
002981,000313: 03,6365 60000 DOUBLE # LEFT ONE PLACE. IT IS USED BY TSLT AND
002982,000314: 03,6366 50117 TS MPAC +2 # TSLC
002983,000315: 03,6367 35501 CAF ZERO
002984,000316: 03,6370 60116 AD MPAC +1
002985,000317: 03,6371 60116 AD MPAC +1
002986,000318: 03,6372 50116 TS MPAC +1
002987,000319: 03,6373 35501 CAF ZERO
002988,000320: 03,6374 60115 AD MPAC
002989,000321: 03,6375 60115 AD MPAC
002990,000322: 03,6376 50115 TS MPAC
002991,000323: 03,6377 00001 TC Q
002992,000324: 03,6400 50122 TS OVFIND # SET OVFIND IF ENTIRE WORD OVERFLOWS
002993,000325: 03,6401 00001 TC Q
002994,000326:
002995,000327: 03,6402 06042 SHIFTL TC TRUE2 # TP LEFT SHIFT - GET INTEGER ADDRESS
002996,000328: 03,6403 06406 TC +3
002997,000329: 03,6404 50062 LEFTLOOP TS ADDRWD
002998,000330: 03,6405 06364 TC SL1
002999,000331: 03,6406 10062 +3 CCS ADDRWD
003000,000332: 03,6407 06404 TC LEFTLOOP
003001,000333: 03,6410 04024 TC DANZIG
003002,000334:
003003,000335: 03,6411 35501 TSLC CAF ZERO # NORMALIZATION - START BY SETTING COUNT
003004,000336: 03,6412 50102 TS TEM2 # TO ZERO
003005,000337: 03,6413 06021 TC BRANCH
003006,000338: 03,6414 06416 TC +2
003007,000339: 03,6415 06430 TC SLCANS
003008,000340:
003009,000341: 03,6416 40115 RETRN CS MPAC # HERE FOR NON-ZERO
003010,000342: 03,6417 60000 DOUBLE
003011,000343: 03,6420 50000 OVSK # SKIP ON OVERFLOW
003012,000344: 03,6421 06423 TC +2 # NO OVERFLOW - SHIFT AGAIN
003013,000345: 03,6422 06430 TC SLCANS # DONE - WE OVERFLOWED
003014,000346: 03,6423 30102 XCH TEM2
003015,000347: 03,6424 64516 AD ONE
003016,000348: 03,6425 50102 TS TEM2
003017,000349: 03,6426 06364 TC SL1 # DO THE SHIFT
003018,000350: 03,6427 06416 TC RETRN # AND LOOP
003019,000351:
003020,000352: 03,6430 40102 SLCANS CS TEM2 # STORE COMPLEMENT OF COUNT
003021,000353: 03,6431 20062 INDEX ADDRWD
003022,000354: 03,6432 50000 TS 0
003023,000355: 03,6433 04024 TC DANZIG
003024,000356:
003025,000357:
003026,000358: 03,6434 40076 SWITCHEM CS POLISH # SWITCH AND TEST INSTRUCTIONS.
003027,000359: 03,6435 50062 TS ADDRWD # DECOMPOSE ADDRESS INTO SWITCH WORD AND
003028,000360: 03,6436 77210 MASK SBITMASK # BIT. MULTIPLES OF 16 ARE EXCLUDED.
003029,000361: 03,6437 30062 XCH ADDRWD
003030,000362: 03,6440 25777 EXTEND
003031,000363: 03,6441 44504 MP BIT11
003032,000364: 03,6442 50105 TS TEM8 # 0, 1, OR 2.
003033,000365:
003034,000366: 03,6443 20062 INDEX ADDRWD # PICK UP A 1 IN SPECIFIED SWITCH POS.
003035,000367: 03,6444 34477 CAF BIT15 -1 # SWITCHES ARE NUMBERED 1 - 15 D.
003036,000368: 03,6445 50103 TS TEM4
003037,000369: 03,6446 20017 INHINT
003038,000370: 03,6447 20105 INDEX TEM8
003039,000371: 03,6450 70645 MASK STATE # GET BS WHERE B IS BIT AND S IS *STATE*
003040,000372: 03,6451 50104 TS TEM5 # - THE WORD CONTAINING THE 15 SWITCHES
003041,000373:
003042,000374: 03,6452 10020 CCS CYR # DECIDE WHETHER INST. IS *SWITCH* OR TEST
003043,000375: 03,6453 04364 TC INCADR # TO PICK UP NEXT ADDRESS
003044,000376: 03,6454 06457 TC +3
003045,000377: 03,6455 40103 CS TEM4
003046,000378: 03,6456 06464 TC SWITCHIT # SWITCH BIT.
003047,000379:
003048,000380: 03,6457 20016 RELINT
003049,000381: 03,6460 10104 CCS TEM5 # TEST SWITCH
003050,000382: 03,6461 04703 TC RE-ENTER # IT WAS ON - DONT BRANCH
003051,000383: 03,6462 04574 TC SWF/F # OFF - GO TO FIXED-FIXED TO PICK UP ADR.
003052,000384: 03,6463 04703 TC RE-ENTER # COMES HERE IF BIT 15 WAS ON
003053,000385:
003054,000386: 03,6464 20105 SWITCHIT INDEX TEM8 # WE DESIRE THE LOGICAL EXCLUSIVE OR OF B
003055,000387: 03,6465 70645 MASK STATE
003056,000388: 03,6466 50001 TS Q # SET THIS BIT TO OSO AD IS OR.
003057,000389: 03,6467 20105 INDEX TEM8
003058,000390: 03,6470 40645 CS STATE
003059,000391: 03,6471 70103 MASK TEM4 # COMPLEMENT OF SWITCH BIT.
003060,000392: 03,6472 60001 AD Q # OR
003061,000393: 03,6473 20105 INDEX TEM8
003062,000394: 03,6474 50645 TS STATE
003063,000395: 03,6475 20016 RELINT
003064,000396: 03,6476 04703 TC RE-ENTER # DONT PUSH-DOWN IF AT END.
003065,000397:
003066,000398:
003067,000399: 03,6477 50116 VSLT2 TS MPAC +1 # SET TO ZERO IN CASE OF RIGHT SHIFT.
003068,000400: 03,6500 06042 TC TRUE2 # RETURNS TO CALLER IF COUNT PNZ.
003069,000401:
003070,000402: 03,6501 06513 TC VSLTEST
003071,000403: 03,6502 50062 VSLTLOOP TS ADDRWD
003072,000404: 03,6503 35501 CAF ZERO
003073,000405: 03,6504 60070 AD VACLOC
003074,000406: 03,6505 50102 TS TEM2
003075,000407: 03,6506 06516 TC VSL1
003076,000408: 03,6507 05412 TC INCRT2
003077,000409: 03,6510 06516 TC VSL1
003078,000410: 03,6511 05412 TC INCRT2
003079,000411: 03,6512 06516 TC VSL1
003080,000412: 03,6513 10062 VSLTEST CCS ADDRWD
003081,000413: 03,6514 06502 TC VSLTLOOP
003082,000414: 03,6515 04024 TC DANZIG
003083,000415:
003084,000416: 03,6516 20102 VSL1 INDEX TEM2
003085,000417: 03,6517 30001 XCH 1
003086,000418: 03,6520 60000 DOUBLE
003087,000419: 03,6521 20102 INDEX TEM2
003088,000420: 03,6522 50001 TS 1
003089,000421: 03,6523 35501 CAF ZERO
003090,000422: 03,6524 20102 INDEX TEM2
003091,000423: 03,6525 60000 AD 0
003092,000424: 03,6526 20102 INDEX TEM2
003093,000425: 03,6527 60000 AD 0
003094,000426: 03,6530 20102 INDEX TEM2
003095,000427: 03,6531 50000 TS 0
003096,000428: 03,6532 00001 TC Q
003097,000429: 03,6533 50122 TS OVFIND
003098,000430: 03,6534 00001 TC Q
003099,000431:
003100,000432:
003101,000433: # DOUBLE-PRECISION SINE-COSINE ROUTINES.
003102,000434:
003103,000435: # THESE PROGRAMS ARE ENTERED AND EXIT IN THE INTERPRETIVE MODE, WITH
003104,000436: # THE ARGUMENT IN MPAC AT ENTRY AND THE ANSWER IN MPAC AT EXIT. THEY
003105,000437: # COMPUTE, RESPECTIVELY, (1/2) COS (PI X) AND (1/2) SIN (PI X) WHERE
003106,000438: # X = C(MPAC) RANGES OVER THE INTERVAL (-1, +1).
003107,000439:
003108,000440: # PROGRAM USES THE SERIES
003109,000441: # 3 5 7 9
003110,000442: # (1/2) SIN(PI X) = C X + 4C X + 16C X + 64C X + 256C X .
003111,000443: # 1 3 5 7 9
003112,000444: # WHERE THE C COEFFICIENTS ARE FROM HASTINGS SERIES
003113,000445: # 3 5 7 9
003114,000446: # SIN(PI X/2) = C X + C X + C X + C X + C X .
003115,000447: # 1 3 5 7 9
003116,000448:
003117,000449: 03,6535 30001 COSINE XCH Q # CLOSED COSINE ROUTINE
003118,000450: 03,6536 50105 TS TEM8
003119,000451: 03,6537 07143 TC TSGNABS # FORM 1/2 - (ABS(X)) AND COMPUTE SINE
003120,000452: 03,6540 06761 TC DACCOM+
003121,000453: 03,6541 06544 TC SINE +2
003122,000454:
003123,000455: 03,6542 30001 SINE XCH Q # CLOSED SINE ROUTINE
003124,000456: 03,6543 50105 TS TEM8
003125,000457: 03,6544 06731 TC PARTSL1 # DOUBLE ARGUMENT
003126,000458: 03,6545 50115 TS MPAC
003127,000459: 03,6546 06550 TC +2 # IF DIDNT SKIP
003128,000460: 03,6547 04742 TC DACCOM # IF SO, WE WANT -SIN(X) = SIN(-X)
003129,000461:
003130,000462: 03,6550 40115 CS MPAC
003131,000463: 03,6551 50073 TS VBUF +2 # SAVE NEGATIVE OF ARGUMENT
003132,000464: 03,6552 50102 TS TEM2
003133,000465: 03,6553 60000 DOUBLE
003134,000466: 03,6554 50001 TS Q
003135,000467: 03,6555 06570 TC SN1 # IF ABS(X) LESS THAN 1/2
003136,000468:
003137,000469: 03,6556 20000 INDEX A # CONTAINS +-1
003138,000470: 03,6557 44521 CS NEG1/2 +1
003139,000471: 03,6560 30102 XCH TEM2
003140,000472: 03,6561 60102 AD TEM2
003141,000473: 03,6562 60102 AD TEM2 # (ADD +-1/2 TWICE TO MAKE +-1.0)
003142,000474: 03,6563 50115 TS MPAC
003143,000475: 03,6564 40116 CS MPAC +1
003144,000476: 03,6565 50116 TS MPAC +1
003145,000477: 03,6566 40115 CS MPAC
003146,000478: 03,6567 50073 TS VBUF +2
003147,000479:
003148,000480:
003149,000481: 03,6570 40116 SN1 CS MPAC +1 # SAVE REST OF ARGUMENT
003150,000482: 03,6571 50074 TS VBUF +3
003151,000483: 03,6572 34231 CAF BUGMPAC # ADDRESS OF MPAC WITH MP BITS
003152,000484: 03,6573 50103 TS TEM4
003153,000485: 03,6574 34772 CAF DAD2 +4 # SQUARE MPAC
003154,000486: 03,6575 05102 TC DMP1
003155,000487: 03,6576 04526 TC TCS1 +2
003156,000488:
003157,000489: 03,6577 05554 TC POLY
003158,000490: 03,6600 00010 DEC 8 B-14
003159,000491: 03,6601 63336 40452 2DEC -0.3926990796 # ( C /4)
003160,000492: # 1
003161,000493:
003162,000494: 03,6603 24527 17013 2DEC +0.6459637111 # ( 4C /4)
003163,000495: # 3
003164,000496:
003165,000497: 03,6605 65631 56501 2DEC -0.318758717 # ( 16C /4)
003166,000498: # 5
003167,000499:
003168,000500: 03,6607 02311 06306 2DEC +0.074780249 # ( 64C /4)
003169,000501: # 7
003170,000502:
003171,000503: 03,6611 77541 45020 2DEC -0.009694988 # (256C /4)
003172,000504: # 9
003173,000505:
003174,000506: 03,6613 05157 TC DMP # DMP BY X
003175,000507: 03,6614 50072 XCADR VBUF +2
003176,000508: 03,6615 06364 TC SL1 # AND SHIFT LEFT 2
003177,000509: 03,6616 06364 TC SL1
003178,000510: 03,6617 00105 TC TEM8 # DONE
003179,000511:
003180,000512: 03,6620 06542 SIN1 TC SINE # INTERPRETER LINKAGE
003181,000513: 03,6621 04024 TC DANZIG
003182,000514:
003183,000515: 03,6622 06535 COS1 TC COSINE
003184,000516: 03,6623 04024 TC DANZIG
003185,000517:
003186,000518:
003187,000519: 03,6624 36753 ARCSIN CAF TCTAG+1 # PICK UP ARCSIN BRANCH
003188,000520: 03,6625 64476 AD POSMAX # TO FORCE OVERFLOW
003189,000521: 03,6626 50000 OVSK # SKIP AND RESTORE NON-OVERFLOW
003190,000522:
003191,000523: 03,6627 36753 ARCCOS CAF TCEX # SET ARCCOS SWITCH
003192,000524: 03,6630 30114 XCH ESCAPE # NO SKIP, PLEASE
003193,000525: 03,6631 30001 XCH Q # ONLY HAVE TO SAVE Q IN ONE PLACE
003194,000526: 03,6632 50113 TS ARETURN
003195,000527: 03,6633 07154 TC TPAGREE # FORCE SIGN AGREEMENT SO WE CAN CHECK
003196,000528: 03,6634 10000 CCS A # SIZE OF ARGUMENT (SIGNUM RETURNS IN A).
003197,000529: 03,6635 06643 TC ACOSST # POSITIVE
003198,000530: 03,6636 06640 TC +2 # ARCCOS = PI/2
003199,000531: 03,6637 06740 TC NEGARGU
003200,000532:
003201,000533: 03,6640 34502 CAF QUARTER # ARCCOS(0) = .25(2PI).
003202,000534: 03,6641 50115 TS MPAC # (MPAC +1 IS ALREADY ZERO).
003203,000535: 03,6642 00114 TC ESCAPE
003204,000536:
003205,000537: 03,6643 06731 ACOSST TC PARTSL1 # DOUBLE ARGUMENT
003206,000538: 03,6644 30115 XCH MPAC # NO SKIP, BUT EXAMINE ORIGINAL MPAC
003207,000539: 03,6645 64520 AD NEG1/2 # MUST BE LESS THAN OR EQUAL TO 1/2
003208,000540: 03,6646 10000 CCS A
003209,000541: 03,6647 03052 TC ABORT # MAJOR PART GREATER THAN 1/2. NOTE THAT
003210,000542: 03,6650 01301 OCT 01301 # MPAC+1 IS NOT CHECKED SO A MARGIN EXISTS
003211,000543:
003212,000544: 03,6651 06655 TC +4 # NORMAL CASE
003213,000545: 03,6652 50115 TS MPAC # ARGUMENT WAS 1 (SCALED). LEAVE ZERO
003214,000546: 03,6653 50116 TS MPAC +1 # AS RESULT AND EXIT
003215,000547: 03,6654 00114 TC ESCAPE
003216,000548:
003217,000549:
003218,000550: 03,6655 40116 +4 CS MPAC +1
003219,000551: 03,6656 50116 TS MPAC +1
003220,000552: 03,6657 50074 TS B +1
003221,000553: 03,6660 40115 CS MPAC
003222,000554: 03,6661 50073 TS B
003223,000555: 03,6662 64522 AD HALF
003224,000556: 03,6663 64522 AD HALF
003225,000557: 03,6664 50115 TS MPAC # SQRT ARGUMENT IS NOW READY
003226,000558:
003227,000559: 03,6665 06673 TC +6 # NORMAL PATH.
003228,000560:
003229,000561: 03,6666 34476 CAF POSMAX # WE HAVE FALSE OVERFLOW PRESENT AND IT
003230,000562: 03,6667 50115 TS MPAC # MUST BE CORRECTED. MAJOR PART WAS ZERO
003231,000563: 03,6670 60116 AD MPAC +1 # AND MINOR PART PNZ, SO FORM 1.0 - MPAC
003232,000564: 03,6671 64516 AD ONE # PROPERLY FOR THIS CASE.
003233,000565: 03,6672 50116 TS MPAC +1 # GUARANTEED NO OVERFLOW.
003234,000566:
003235,000567: 03,6673 07320 +6 TC SQRT2 # GO TAKE THE SQUARE ROOT.
003236,000568:
003237,000569: 03,6674 40074 CS B +1
003238,000570: 03,6675 30116 XCH MPAC +1
003239,000571: 03,6676 50074 TS B +1
003240,000572: 03,6677 40073 CS B
003241,000573: 03,6700 30115 XCH MPAC
003242,000574: 03,6701 50073 TS B
003243,000575: 03,6702 05554 TC POLY # EVALUATE HASTINGS POLYNOMIAL/2PI
003244,000576: 03,6703 00016 DEC 14 B-14
003245,000577: 03,6704 07777 37777 2DEC* .4999999920 B-1* # HASTINGS COEFFICIENTS/2PI
003246,000578: 03,6706 76720 55163 2DEC* -.0683089201 B-1*
003247,000579: 03,6710 00350 00532 2DEC* .0283228913 B-1*
003248,000580: 03,6712 77575 45233 2DEC* -.0159709772 B-1*
003249,000581: 03,6714 00120 21555 2DEC* .0098331911 B-1*
003250,000582: 03,6716 77723 56072 2DEC* -.0054393193 B-1*
003251,000583: 03,6720 00021 14445 2DEC* .0021231556 B-1*
003252,000584: 03,6722 77774 66516 2DEC* -.0004018634 B-1*
003253,000585:
003254,000586: 03,6724 05157 TC DMP # INTERPRETER SUBROUTINE ONLY
003255,000587: 03,6725 50072 XCADR B
003256,000588: 03,6726 00114 TC ESCAPE # GO TO ARCSIN/ARCCOS SWITCH (OR NEGARGU)
003257,000589:
003258,000590: 03,6727 06761 TAGIT TC DACCOM+
003259,000591: 03,6730 00113 TC ARETURN
003260,000592: 03,6731 30116 PARTSL1 XCH MPAC +1 # DOES A DOUBLE SHIFT LEFT EXCEPT FOR THE
003261,000593: 03,6732 60000 DOUBLE # FINAL TS. USED BY SIN, COS, ASIN, AND
003262,000594: 03,6733 50116 TS MPAC +1 # ACOS.
003263,000595: 03,6734 35501 CAF ZERO
003264,000596: 03,6735 60115 AD MPAC
003265,000597: 03,6736 60115 AD MPAC
003266,000598: 03,6737 00001 TC Q # POSSIBLY WITH OVERLOW PRESENT
003267,000599:
003268,000600: 03,6740 04742 NEGARGU TC DACCOM # ARCCOS(-X)=PI-ARCCOS(X)
003269,000601: 03,6741 36754 CAF TCSUBTR # SET SWITCH TO PERFORM ABOVE
003270,000602: 03,6742 30114 XCH ESCAPE
003271,000603: 03,6743 50075 TS ESCAPE2 # ADDITIONAL SWITCH HERE.
003272,000604: 03,6744 06643 TC ACOSST
003273,000605:
003274,000606:
003275,000607: 03,6745 40115 SUBTR CS MPAC
003276,000608: 03,6746 64522 AD HALF
003277,000609: 03,6747 50115 TS MPAC
003278,000610: 03,6750 40116 CS MPAC +1
003279,000611: 03,6751 50116 TS MPAC +1
003280,000612: 03,6752 00075 TC ESCAPE2 # THIS IS NOW THE ARCSIN/ARCCOS SWITCH
003281,000613:
003282,000614:
003283,000615:
003284,000616: 03,6753 06730 TCTAG+1 TC TAGIT +1
003285,000617: 03,6754 03,6753 TCEX EQUALS TCTAG+1
003286,000618: 03,6754 06745 TCSUBTR TC SUBTR
003287,000619:
003288,000620: 03,6755 06624 ARCSIN1 TC ARCSIN
003289,000621: 03,6756 04024 TC DANZIG
003290,000622:
003291,000623: 03,6757 06627 ARCCOS1 TC ARCCOS
003292,000624: 03,6760 04024 TC DANZIG
003293,000625:
003294,000626: 03,6761 40116 DACCOM+ CS MPAC +1 # USED BY SIN-COS AND ARCSIN-ARCCOS
003295,000627: 03,6762 50116 TS MPAC +1
003296,000628: 03,6763 40115 CS MPAC
003297,000629: 03,6764 64502 AD QUARTER
003298,000630: 03,6765 50115 TS MPAC
003299,000631: 03,6766 00001 TC Q
003300,000632:
003301,000633:
003302,000634: 03,6767 30077 MBXCH XCH BUF # TO EXCHANGE MPAC AND BUF
003303,000635: 03,6770 30115 XCH MPAC
003304,000636: 03,6771 50077 TS BUF
003305,000637: 03,6772 30100 XCH BUF +1
003306,000638: 03,6773 30116 XCH MPAC +1
003307,000639: 03,6774 50100 TS BUF +1
003308,000640: 03,6775 00001 TC Q
003309,000641:
003310,000642: 03,6776 50117 DDV0 TS MPAC +2 # SET MPAC+2 TO ZERO TO RESUME DDV
003311,000643: 03,6777 07143 TC TSGNABS # SIGN AGGREMENT ETC
003312,000644: 03,7000 50102 TS TEM2 # SAVE SGN
003313,000645: 03,7001 06767 TC MBXCH # SWITCH CONTENTS
003314,000646: 03,7002 07143 TC TSGNABS # SAME FOR ARGUMENT
003315,000647: 03,7003 60102 AD TEM2
003316,000648: 03,7004 10000 CCS A # TO GET SIGN OF RESULT
003317,000649: 03,7005 07010 TC +3
003318,000650: 03,7006 07133 TC DPDOFLO +1 # HERE FOR 0/0 CASE
003319,000651: 03,7007 07010 TC +1
003320,000652: 03,7010 50102 TS TEM2
003321,000653: 03,7011 10110 CCS DVSW
003322,000654: 03,7012 06767 TC MBXCH # INTERCHANGE OLD DIVISOR AND DIVIDEND
003323,000655:
003324,000656: 03,7013 40077 CS BUF # CHECK TO SEE IF C(BUF,BUF+1) LESS
003325,000657: 03,7014 60115 AD MPAC # THAN C(MPAC,MPAC+1). OVERFLOW CONDITION
003326,000658: 03,7015 10000 CCS A # IF NOT
003327,000659: 03,7016 07030 TC DDVOK # SCALING OK
003328,000660: 03,7017 03070 TC CCSHOLE
003329,000661: 03,7020 07132 TC DPDOFLO # TROUBLE HERE
003330,000662: 03,7021 40100 CS BUF +1 # CHECK MINOR PARTS IF MAJORS EQUAL
003331,000663: 03,7022 60116 AD MPAC +1
003332,000664: 03,7023 10000 CCS A
003333,000665: 03,7024 07030 TC DDVOK
003334,000666: 03,7025 03070 TC CCSHOLE
003335,000667: 03,7026 07132 TC DPDOFLO # TROUBLE HERE
003336,000668: 03,7027 07132 TC DPDOFLO # AS WELL AS WHEN C(BUF,BUF+1)=C(MPAC,+1)
003337,000669:
003338,000670: 03,7030 35501 DDVOK CAF ZERO
003339,000671: 03,7031 60115 AD MPAC
003340,000672: 03,7032 07046 TC DPDNORT # TO NORMALIZE
003341,000673:
003342,000674:
003343,000675: 03,7033 30001 SQRTDIV XCH Q # ENTRY FROM SQRT ROUTINE
003344,000676: 03,7034 50076 TS TEMQ3
003345,000677: 03,7035 07060 TC DVSTART
003346,000678:
003347,000679: 03,7036 30100 DPDNORM XCH BUF +1
003348,000680: 03,7037 60000 DOUBLE
003349,000681: 03,7040 50100 TS BUF +1
003350,000682: 03,7041 35501 CAF ZERO
003351,000683: 03,7042 60077 AD BUF
003352,000684: 03,7043 60077 AD BUF
003353,000685: 03,7044 50077 TS BUF
003354,000686: 03,7045 06367 TC SL1 +3 # TO DOUBLE MPAC
003355,000687:
003356,000688: 03,7046 50022 DPDNORT TS CYL # TO LOOK AT BIT 14
003357,000689: 03,7047 10022 CCS CYL
003358,000690: 03,7050 07036 TC DPDNORM
003359,000691: 03,7051 07053 TC +2
003360,000692: 03,7052 07060 TC DVSTART
003361,000693: 03,7053 30100 XCH BUF +1 # HIGH ORDER ZERO
003362,000694: 03,7054 30077 XCH BUF
003363,000695: 03,7055 30116 XCH MPAC +1 # SET MPAC +1 TO ZERO
003364,000696: 03,7056 50115 TS MPAC
003365,000697: 03,7057 07046 TC DPDNORT # AND TRY AGAIN
003366,000698:
003367,000699:
003368,000700: 03,7060 30077 DVSTART XCH BUF # OK
003369,000701: 03,7061 25777 INDEX OPOVF
003370,000702: 03,7062 50115 DV MPAC
003371,000703: 03,7063 50034 TS OVCTR
003372,000704: 03,7064 25777 INDEX OPOVF
003373,000705: 03,7065 40116 MP MPAC +1
003374,000706: 03,7066 60001 -1/2+2 AD Q # COMPLIMENT OF REMAINDER.
003375,000707: 03,7067 40000 CS A
003376,000708: 03,7070 60100 AD BUF +1
003377,000709: 03,7071 50000 OVSK
003378,000710: 03,7072 07075 TC +3 # IF NOT
003379,000711: 03,7073 25777 INDEX OPOVF # IF OVERFLEW
003380,000712: 03,7074 60115 SU MPAC
003381,000713: 03,7075 50077 +3 TS BUF
003382,000714: 03,7076 10000 CCS A
003383,000715: 03,7077 64516 AD ONE
003384,000716: 03,7100 07102 TC +2
003385,000717: 03,7101 64516 AD ONE
003386,000718: 03,7102 25777 +2 EXTEND # WE NOW HAVE ABS(CORRECT BUF)
003387,000719: 03,7103 60115 SU MPAC
003388,000720: 03,7104 10000 CCS A
003389,000721: 03,7105 64516 AD ONE
003390,000722: 03,7106 07110 TC +2
003391,000723: 03,7107 07113 TC +4
003392,000724: 03,7110 30077 +2 XCH BUF
003393,000725: 03,7111 60000 DOUBLE
003394,000726: 03,7112 10000 CCS A
003395,000727: 03,7113 30077 +4 XCH BUF
003396,000728: 03,7114 07116 TC +2
003397,000729: 03,7115 40077 CS BUF
003398,000730: 03,7116 25777 INDEX OPOVF
003399,000731: 03,7117 50115 DV MPAC
003400,000732:
003401,000733:
003402,000734: 03,7120 50116 DPDSGNT TS MPAC +1
003403,000735: 03,7121 10102 CCS TEM2
003404,000736: 03,7122 07130 TC POSQUOT
003405,000737: 03,7123 40116 CS MPAC +1
003406,000738: 03,7124 50116 TS MPAC +1
003407,000739: 03,7125 40034 CS OVCTR
003408,000740: 03,7126 50115 TS MPAC
003409,000741: 03,7127 00076 TC TEMQ3
003410,000742:
003411,000743: 03,7130 30034 POSQUOT XCH OVCTR
003412,000744: 03,7131 07126 TC -3
003413,000745:
003414,000746: 03,7132 10102 DPDOFLO CCS TEM2
003415,000747: 03,7133 35503 CAF TWO
003416,000748: 03,7134 64335 AD NEG1
003417,000749: 03,7135 50122 TS OVFIND
003418,000750: 03,7136 25777 EXTEND # SET MPAC = +- POSMAX
003419,000751: 03,7137 44476 MP POSMAX
003420,000752: 03,7140 30003 XCH LP
003421,000753: 03,7141 50116 TS MPAC +1
003422,000754: 03,7142 07126 TC POSQUOT -2
003423,000755:
003424,000756:
003425,000757: 03,7143 30001 TSGNABS XCH Q # SIGNUM AND ABSOLUTE VALUE
003426,000758: 03,7144 50104 TS TEMQ2
003427,000759: 03,7145 07154 TC TPAGREE
003428,000760:
003429,000761: 03,7146 10000 CCS A # TEST SIGNUM
003430,000762: 03,7147 64516 AD ONE
003431,000763: 03,7150 00104 TC TEMQ2
003432,000764:
003433,000765: 03,7151 04740 TC MPACCOM # COMPLEMENT IF NEGATIVE
003434,000766: 03,7152 44516 CS ONE
003435,000767: 03,7153 00104 TC TEMQ2
003436,000768:
003437,000769: 03,7154 30001 TPAGREE XCH Q # FORCE SIGN AGREEMENT IN TP WORD IN MPAC
003438,000770: 03,7155 50103 TS TEMQ
003439,000771: 03,7156 06021 TC BRANCH
003440,000772: 03,7157 07172 TC SGN=+
003441,000773: 03,7160 07165 TC SGN=0
003442,000774:
003443,000775: 03,7161 44476 CS POSMAX
003444,000776: 03,7162 50101 TS SGNDMAX
003445,000777: 03,7163 44516 CS ONE
003446,000778: 03,7164 07175 TC SGFORCE
003447,000779:
003448,000780: 03,7165 35501 SGN=0 CAF ZERO
003449,000781: 03,7166 50115 TS MPAC
003450,000782: 03,7167 50116 TS MPAC +1
003451,000783: 03,7170 50117 TS MPAC +2
003452,000784: 03,7171 00103 TC TEMQ
003453,000785:
003454,000786: 03,7172 34476 SGN=+ CAF POSMAX
003455,000787: 03,7173 50101 TS SGNDMAX
003456,000788: 03,7174 34516 CAF ONE
003457,000789:
003458,000790:
003459,000791: 03,7175 60117 SGFORCE AD MPAC +2
003460,000792: 03,7176 60101 AD SGNDMAX
003461,000793: 03,7177 50117 TS MPAC +2
003462,000794: 03,7200 35501 CAF ZERO
003463,000795:
003464,000796: 03,7201 60116 AD MPAC +1
003465,000797: 03,7202 60101 AD SGNDMAX
003466,000798: 03,7203 50116 TS MPAC +1
003467,000799: 03,7204 35501 CAF ZERO
003468,000800:
003469,000801: 03,7205 60115 AD MPAC
003470,000802: 03,7206 60101 AD SGNDMAX
003471,000803: 03,7207 50115 TS MPAC
003472,000804: 03,7210 00017 SBITMASK OCT 17
003473,000805: 03,7211 00103 TC TEMQ
003474,000806:
003475,000807:
003476,000808: 03,7212 06263 UNIT TC ABVAL # UNIT VECTOR ROUTINE - START BY GETTING
003477,000809: # LENGTH
003478,000810: 03,7213 06275 TC VSR1 # LEAVES 1/2 UNIT VECTORS
003479,000811:
003480,000812: 03,7214 10215 CCS NEWJOB # ALLOW FOR INTERRUPTS
003481,000813: 03,7215 07263 TC UNITRUPT # SO WE CAN RETURN IN BASIC
003482,000814:
003483,000815: 03,7216 60070 UNITRSM AD VACLOC # RETURNS HERE FROM BREAKPOINT IF CALLED.
003484,000816: 03,7217 50062 TS ADDRWD
003485,000817: 03,7220 35503 CAF TWO
003486,000818: 03,7221 50110 TS DVSW # NON-ZERO FOR BACKWARDS DIVIDE
003487,000819: 03,7222 50112 UNITLOOP TS COMPON
003488,000820: 03,7223 40115 CS MPAC
003489,000821: 03,7224 40000 CS A
003490,000822: 03,7225 20062 INDEX ADDRWD
003491,000823: 03,7226 30000 XCH 0 # LENGTH TO COMPONENT AND COMPONENT TO BUF
003492,000824: 03,7227 50077 TS BUF
003493,000825: 03,7230 40116 CS MPAC +1
003494,000826: 03,7231 40000 CS A
003495,000827: 03,7232 20062 INDEX ADDRWD
003496,000828: 03,7233 30001 XCH 1
003497,000829: 03,7234 50100 TS BUF +1
003498,000830:
003499,000831: 03,7235 37241 CAF +4 # CALL BACKWARDS DIVIDE
003500,000832: 03,7236 50076 TS TEMQ3
003501,000833: 03,7237 35501 CAF ZERO
003502,000834: 03,7240 06776 TC DDV0
003503,000835: 03,7241 07242 TC +1
003504,000836:
003505,000837: 03,7242 30115 XCH MPAC # RESULT BACK TO COMPONENT BRINGING BACK
003506,000838: 03,7243 20062 INDEX ADDRWD # LENGTH
003507,000839: 03,7244 30000 XCH 0
003508,000840: 03,7245 50115 TS MPAC
003509,000841: 03,7246 30116 XCH MPAC +1
003510,000842: 03,7247 20062 INDEX ADDRWD
003511,000843: 03,7250 30001 XCH 1
003512,000844: 03,7251 50116 TS MPAC +1
003513,000845:
003514,000846: 03,7252 05242 TC AD2 # INCREMENT ADDRWD
003515,000847: 03,7253 10112 CCS COMPON
003516,000848: 03,7254 07222 TC UNITLOOP
003517,000849: 03,7255 45503 CS TWO # STORE LENGTH OF ARGUMENT IN REGISTERS 30
003518,000850: 03,7256 60070 AD VACLOC
003519,000851: 03,7257 50102 TS TEM2 # AND 31 OF VAC AREA.
003520,000852: 03,7260 34772 CAF DAD2 +4
003521,000853: 03,7261 05041 TC 8TO2
003522,000854: 03,7262 04024 TC DANZIG
003523,000855:
003524,000856:
003525,000857: 03,7263 40061 UNITRUPT CS BANKSET # REQUESTS FOR INTERPRETIVE INTERRUPT
003526,000858: 03,7264 50117 TS MPAC +2 # COME HERE DURING THE UNIT OPERATION.
003527,000859: 03,7265 30120 XCH LOC # SINCE WE DESIRE TO RETURN IN BASIC BUT
003528,000860: 03,7266 20067 INDEX FIXLOC # BUT STILL SAVE THE INTERPRETER CENTRALS
003529,000861: 03,7267 50036 TS 30D # (BANKSET AND LOC)
003530,000862: 03,7270 02101 TC CHANG1
003531,000863:
003532,000864: 03,7271 40117 CS MPAC +2 # ON RETURN, RESTORE AS BEFORE
003533,000865: 03,7272 50061 TS BANKSET
003534,000866: 03,7273 20067 INDEX FIXLOC
003535,000867: 03,7274 30036 XCH 30D
003536,000868: 03,7275 50120 TS LOC
003537,000869: 03,7276 35501 CAF ZERO
003538,000870: 03,7277 07216 TC UNITRSM # ENTER UNIT DIVIDE LOOP.
003539,000871: 03,7300 34772 MPACSR1 CAF DAD2 +4
003540,000872:
003541,000873: 03,7301 50064 SR1 TS TEM11 # SHIFTS RIGHT ONE USING ADDRESS IN A
003542,000874: 03,7302 20000 INDEX A
003543,000875: 03,7303 30000 XCH 0
003544,000876: 03,7304 25777 INDEX OPOVF
003545,000877: 03,7305 44522 MP HALF
003546,000878: 03,7306 20064 INDEX TEM11
003547,000879: 03,7307 50000 TS 0
003548,000880: 03,7310 20064 INDEX TEM11
003549,000881: 03,7311 30001 XCH 1
003550,000882: 03,7312 50021 TS SR
003551,000883: 03,7313 30021 XCH SR
003552,000884: 03,7314 60003 AD LP
003553,000885: 03,7315 20064 INDEX TEM11
003554,000886: 03,7316 50001 TS 1
003555,000887: 03,7317 00001 TC Q
003556,000888:
003557,000889:
003558,000890: 03,7320 35501 SQRT2 CAF ZERO # ENTRY TO IGNORE C(MPAC+2)
003559,000891: 03,7321 50117 TS MPAC +2
003560,000892:
003561,000893: 03,7322 30001 SQRT3 XCH Q # HERE TO TREAT TRIPLE-PRECISION CASES
003562,000894: 03,7323 50104 TS TEMQ2
003563,000895: 03,7324 07154 TC TPAGREE # FORCE SIGN AGREEMENT
003564,000896: 03,7325 10000 CCS A # TEST SIGNUM
003565,000897: 03,7326 07336 TC SETNORM # PNZ - OK.
003566,000898: 03,7327 00104 TC TEMQ2 # FAST EXIT FOR ZERO ARGUMENT
003567,000899: 03,7330 10115 CCS MPAC # IF ARGUMENT WAS NEGATIVE BUT MAJOR PART
003568,000900:
003569,000901: 03,7331 03052 TC ABORT # (MPAC IS NEGATIVE) IS ZERO, ANSWER IS
003570,000902: 03,7332 01302 OCT 01302 # TAKEN AS ZERO WITH NO FURTHER ACTION.
003571,000903: 03,7333 07331 TC -2 # IF NON-ZERO, IT IS ASSUMED A TRANSIENT
003572,000904: # ERROR HAS PRODUCED THE BAD DATA.
003573,000905:
003574,000906: 03,7334 50116 TS MPAC +1 # ARGUMENT NEGATIVE BUT MORE THAN -10-4.
003575,000907: 03,7335 00104 TC TEMQ2 # SET MPAC,+1 TO ZERO AND EXIT.
003576,000908:
003577,000909: 03,7336 50062 SETNORM TS ADDRWD # SET NORMALIZATION COUNT TO ZERO
003578,000910: 03,7337 40115 CS MPAC
003579,000911: 03,7340 50022 TS CYL # WE WILL USE A/2, SO MUST CHECK FOR
003580,000912: 03,7341 10022 CCS CYL # NORMALIZATION FIRST
003581,000913: 03,7342 07300 TC MPACSR1 # NORMALIZED - SHIFT RIGHT ONE.
003582,000914: 03,7343 07405 TC ARGHI
003583,000915:
003584,000916: 03,7344 07346 TC SRTEST # LESS THAN 1/2 - SEE IF AT LEAST 1/8.
003585,000917:
003586,000918: 03,7345 07353 TC A0=0 # MAJOR PART (POSSIBLY MINOR PART) = 0.
003587,000919:
003588,000920: 03,7346 67066 SRTEST AD -1/2+2 # SEE IF ARG GREATER THAN OR EQUAL TO 1/4.
003589,000921: 03,7347 10000 CCS A
003590,000922: 03,7350 07300 TC MPACSR1 # IT IS - SHIFT RIGHT ONE AND GO TO ARGLO.
003591,000923: 03,7351 07374 TC ARGLO # (+0 WAS IMPOSSIBLE THIS CCS.)
003592,000924:
003593,000925: 03,7352 07362 TC SQRTNORM +1 # LESS THAN 1/4 - PUT IN EFFECTIVE RIGHT
003594,000926: # BY SHIFTING LEFT ONLY ONCE WHEN ADDING
003595,000927: # ONE TO THE RIGHT SHIFT COUNT.
003596,000928:
003597,000929:
003598,000930: 03,7353 30117 A0=0 XCH MPAC +2 # MOVE ARGUMENT UP
003599,000931: 03,7354 30116 XCH MPAC +1
003600,000932: 03,7355 30115 XCH MPAC
003601,000933: 03,7356 60062 AD ADDRWD
003602,000934: 03,7357 65362 AD SEVEN # INCREASE SHIFT COUNT BY 14/2 = 7
003603,000935: 03,7360 07336 TC SETNORM
003604,000936:
003605,000937: 03,7361 06364 SQRTNORM TC SL1
003606,000938: 03,7362 34516 CAF ONE # ARGUMENT LESS THAN 1/8, SO SHIFT IT LEFT
003607,000939: 03,7363 60062 AD ADDRWD # TWO PLACES AND INCREASE SHIFT COUNT FOR
003608,000940: 03,7364 50062 TS ADDRWD # RESULT
003609,000941: 03,7365 06364 TC SL1
003610,000942: 03,7366 50022 TS CYL
003611,000943: 03,7367 40022 CS CYL
003612,000944:
003613,000945:
003614,000946: 03,7370 10022 NORMTEST CCS CYL
003615,000947: 03,7371 10022 CCS CYL
003616,000948: 03,7372 07361 TC SQRTNORM # HERE IF LESS THAN 1/8
003617,000949: 03,7373 07405 TC ARGHI # HERE IF AT LEAST 1/4, LESS THAN 1/2
003618,000950:
003619,000951: 03,7374 37401 ARGLO CAF SLOPELO # HERE IF AT LEAST 1/8, LESS THAN 1/4
003620,000952: 03,7375 25777 INDEX OPOVF
003621,000953: 03,7376 40115 MP MPAC
003622,000954: 03,7377 67402 AD BIASLO # X0/2 = .8324(A0/2) + .2974/2
003623,000955: 03,7400 07411 TC ARGHI +4
003624,000956:
003625,000957: 03,7401 32506 SLOPELO DEC .8324
003626,000958: 03,7402 04604 BIASLO DEC .2974 B-1
003627,000959: 03,7403 22650 SLOPEHI DEC .5884
003628,000960: 03,7404 06552 BIASHI DEC .4192 B-1
003629,000961:
003630,000962: 03,7405 37403 ARGHI CAF SLOPEHI
003631,000963: 03,7406 25777 INDEX OPOVF
003632,000964: 03,7407 40115 MP MPAC
003633,000965: 03,7410 67404 AD BIASHI
003634,000966: 03,7411 30115 +4 XCH MPAC # X0/2 TO MPAC
003635,000967: 03,7412 50077 TS BUF # A0/2 TO BUF
003636,000968: 03,7413 50102 TS TEM2 # SET UP POSITIVE QUOTIENT SIGNAL AND
003637,000969: 03,7414 35501 CAF ZERO
003638,000970: 03,7415 30116 XCH MPAC +1 # ZERO LOW-ORDER DIVIDEND FOR DP DIVIDE
003639,000971: 03,7416 50100 TS BUF +1 # A1/2 TO BUF+1. A2 NOW DISCARDED
003640,000972: 03,7417 40077 CS BUF
003641,000973: 03,7420 25777 INDEX OPOVF
003642,000974: 03,7421 50115 DV MPAC # -(A0/2)/(X0/2).
003643,000975: 03,7422 50021 TS SR
003644,000976: 03,7423 40021 CS SR
003645,000977: 03,7424 60115 AD MPAC # X1 IS GOOD TO 14 BITS
003646,000978: 03,7425 50115 TS MPAC # X1 = X0/2 + ((A0/2)/(X0/2))/2
003647,000979: 03,7426 50101 TS TEM3 # SAVE X1 FOR ADDITION
003648,000980: 03,7427 07033 TC SQRTDIV # GO TO FORM DP QUOTIENT OF A0/2, A1/2
003649,000981: 03,7430 30101 XCH TEM3 # OVER X1, 0. RESULT IN MPAC, MPAC +1
003650,000982: 03,7431 25777 INDEX OPOVF
003651,000983: 03,7432 44522 MP HALF
003652,000984: 03,7433 60115 AD MPAC
003653,000985: 03,7434 50034 TS OVCTR # AND MAYBE SKIP, IF ARG WAS NEAR POSMAX
003654,000986: 03,7435 07441 TC +4 # IF NO OVERFLOW
003655,000987: 03,7436 34476 CAF POSMAX
003656,000988: 03,7437 50116 TS MPAC +1
003657,000989: 03,7440 07445 TC +5
003658,000990:
003659,000991: 03,7441 30003 +4 XCH LP # FOR NORMAL CASES
003660,000992: 03,7442 60116 AD MPAC +1 # ABOVE AND X1/2
003661,000993: 03,7443 30116 XCH MPAC +1
003662,000994: 03,7444 30034 XCH OVCTR
003663,000995: 03,7445 50115 +5 TS MPAC
003664,000996:
003665,000997: 03,7446 35501 CAF ZERO # ZERO MPAC+2 SO SHIFT LEFT MAKES SENSE.
003666,000998: 03,7447 50117 TS MPAC +2
003667,000999:
003668,001000: 03,7450 10062 CCS ADDRWD # RE-NORMALIZE IF COUNT NON-ZERO
003669,001001: 03,7451 06236 TC SHIFTR +3 # FITS IN WITH MAIN SHIFT LOOP
003670,001002: 03,7452 00104 TC TEMQ2 # NO RE-SCALING REQUIRED
003671,001003:
003672,001004: 03,7453 40065 SQRTS CS MODE # INTERPRETER LINKAGE
003673,001005: 03,7454 60000 DOUBLE # TAKE APPROPRIATE SQRT
003674,001006: 03,7455 20000 INDEX A
003675,001007: 03,7456 07455 TC -1
003676,001008:
003677,001009: 03,7457 07320 TC SQRT2 # FOR DP
003678,001010: 03,7460 04024 TC DANZIG
003679,001011:
003680,001012: 03,7461 07322 TC SQRT3
003681,001013: 03,7462 04024 TC DANZIG
003682,001014:
003683,001015: 03,7463 5363 NEG13 EQUALS MINUS13
003684,001016: 03,7463 4024 DMOVE EQUALS DANZIG # LOADING ONLY
003685,001017: 03,7463 4024 VMOVE EQUALS DANZIG
003686,001018: 03,7463 45503 TMOVE CS TWO # SET MODE TO TRIPLE FOR TP OPERATIONS
003687,001019: 03,7464 05240 TC DPEXIT +1
End of include-file BANK_03_INTERPRETER_SECTION.agc. Parent file is MAIN.agc