CLEAR STORAGE 1 ,008015,022026,030037,044,049,053053N000000N00001026 1
CLEAR STORAGE 2 L068116,105106,110117B101/I9I#071029C029056B026/B001/0991,001/001117I0? 2
BOOTSTRAP ,008015,022029,036040,047054,061068,072/061039 ,0010011040 3
0 PAGE 1
0 SEQ PG LIN LABEL OP OPERANDS SFX CT LOCN INSTRUCTION TYPE CARD
101 * 1 2 3 4 5 6 7 8
102 *78901234567890123456789012345678901234567890123456789012345678901234567890
103 * LABEL | OP | OPERATION |XXXXXXX
1 SUBROUTINE PI PAGE 2
0 SEQ PG LIN LABEL OP OPERANDS SFX CT LOCN INSTRUCTION TYPE CARD
104 JOB SUBROUTINE PI
105 * LETS GO FOR 8,000 CHARACTERS OF MEMORY
106 * SO - WE HAVE 2,000 VALID PI CHARACTERS ? :-))
107 * NOW LETS PRETTY IT UP A BIT, ORGANIZE SUBROUTINES
108 * CALL A SUBROUTINE DEPENDS UPON
109 * IF THE INDEX REGISTER OPTION IS INSTALLED,
110 * ANY BRANCH LEAVES THE ADDRESS OF THE NEXT SEQUENTIAL
111 * INSTRUCTION IF THE BRANCH NOT TAKEN IN THE
112 * B ADDRESS REGISTER :-))
113 * THE ARCTAN ROUTINE IS WRITTEN AS A SUBROUTINE.
114 *
115 CTL 6611 *6=16,000C;6=16,000T;1=OBJDECK;,1=MODADD
116 * 1 2 3 4 5 6 7 8
117 *78901234567890123456789012345678901234567890123456789012345678901234567890
118 * LABEL | OP | OPERATION |XXXXXXX
119 ORG 87 0087
120 X1 DSA 0 INDEX REGISTER 1 3 0089 000 4
121 ORG 92 0092
122 * X2 DSA 0 INDEX REGISTER 2 3 0094 000 5
123 * ORG 97 0097
124 * X3 DSA 0 INDEX REGISTER 3 3 0099 000 6
125 *
126 * START STORAGE AREAS
127 * SMALL AREAS
128 * ORG 100 * PUT SMALL STUFF IN PUNCH AREA 0100
129 ITCNT DCW 000000 * ITERATION COUNTER, STARTS AT ZERO 6 0105 6
130 DIVBAS DCW 000000 * DIVISOR FOR BASET 6 0111 6
131 IX2P1 DCW 000000 * ITCNT TIMES 2 PLUS 1, DIVISOR FOR INTER 6 0117 6
132 C0 DCW 000000 6 0123 6
133 C1 DCW 000001 6 0129 6
134 C2 DCW 000002 6 0135 6
135 C25 DCW 000025 * 5^2 6 0141 7
136 C239P2 DCW 057121 * 239^2 6 0147 7
137 CNTZRO DCW 000000 * COUNT LEADING ZEROS, DONE YET? 6 0153 7
138 CF DCW 1 * "1"=ADD, "0" OR OTHER = SUBTRACT 1 0154 7
139 LC0L9 DCW 000000000 9 0163 7
140 *
141 * COMPUTE 16*ARCTAN(1/5)
142 START MCW @+@,ACCUM&2049 * ZERO ACCUMULATOR, FORCE POSITIVE 7 0164 M R5/ R5' 7
143 MCW @0@,ACCUM&2048 7 0171 M R5S R4Z 8
144 B START1 * SKIP PRINT AREA 4 0178 B 335 8
145 ORG 335 0335
146 START1 MCW ACCUM&2048,ACCUM&2047 7 0335 M R4Z R4Y 9
147 MCW @0@,BASET&2048 * ZERO BASE 7 0342 M R5S Q49 9
148 MCW BASET&2048,BASET&2047 7 0349 M Q49 Q48 9
149 * BIG REGISTERS SET
150 MCW @80@,BASET&8 * SET A HIGH ORDER TO 1*5*16 7 0356 M R5U 809 9
151 MCW @1@,CF * SET NEXT TO ADD 7 0363 M R5V 154 9
152 MCW C25,DIVBAS * SET NEXT TO ADD 7 0370 M 141 111 10
153 B ATAN *** CALL ATAN SUBROUTINE 4 0377 B 428 10
1 SUBROUTINE PI PAGE 3
0 SEQ PG LIN LABEL OP OPERANDS SFX CT LOCN INSTRUCTION TYPE CARD
154 *
155 * NOW, ADD MINUS 4*ARCTAN(1/239) TO ABOVE 16*ARCTAN(1/5)
156 * DO NOT ZERO ACCUMULATOR
157 START2 MCW @0@,BASET&2048 * ZERO BASE 7 0381 M R5S Q49 10
158 MCW BASET&2048,BASET&2047 7 0388 M Q49 Q48 10
159 MCW @956@,BASET&8 * SET A HIGH ORDER TO 1*4*239 7 0395 M R5Y 809 10
160 MCW @0@,CF * SET NEXT SUBTRACT 7 0402 M R5S 154 10
161 MCW C239P2,DIVBAS * SET SET BASE DIVISOR 7 0409 M 147 111 11
162 B ATAN *** CALL ATAN SUBROUTINE 4 0416 B 428 11
163 * WE NOW HAVE PI IN MEMORY, PRINT IT OUT
164 B PRINT * CALL PRINT ROUTINE 4 0420 B 626 11
165 HALT H START *** HALT HERE - 4 0424 . 164 11
166 *
167 ATAN SBR ATANX&3 * SET RETURN 4 0428 H 625 11
168 MCW C0,CNTZRO * CLEAR LEADING ZERO COUNTER 7 0432 M 123 153 11
169 MCW C0,ITCNT * ZERO ITERATION CNTR 7 0439 M 123 105 11
170 MCW C1,IX2P1 * INIT INTER DIVISOR 7 0446 M 129 117 12
171 MCW @000@,X1 * CLEAR ASSOCIATED INDEX REGISTER 7 0453 M R6/ 089 12
172 ATANL MCW @+@,BASET&2049 * SET POSITIVE SIGN 7 0460 M R5/ Q50 12
173 D DIVBAS,BASET&6 * TRIAL ARITH 7 0467 % 111 807 12
174 MCW BASET&2042,BASET&2049 * SHIFT QUOTIENT 7 0474 M Q43 Q50 12
175 MCW LC0L9,BASET&6 * REMOVE UNSHIFTED 7 0481 M 163 807 13
176 MCW BASET&2049,INTER&2049 * MOVE QUOTIENT TO NEXT 7 0488 M Q50 90' 13
177 MCW @+@,INTER&2049 * SET POSITIVE SIGN 7 0495 M R5/ 90' 13
178 D IX2P1,INTER&6 DIVIDE INTERMEDIATE 7 0502 % 117 Q57 13
179 MCW INTER&2042,INTER&2049 * SHIFT INTERMEDIATE 7 0509 M 89T 90' 13
180 MCW LC0L9,INTER&6 * REMOVE UNSHIFTED 7 0516 M 163 Q57 14
181 MCW @+@,INTER&2049 * SET UP BASE 7 0523 M R5/ 90' 14
182 BCE ATANA,CF,1 * COMPARE FOR ADD 8 0530 B 556 154 1 14
183 ATANS MCW @1@,CF * SET NEXT ADD 7 0538 M R5V 154 14
184 S INTER&2049,ACCUM&2049 * DO THE SUBTRACTION 7 0545 S 90' R5' 14
185 B ATANW * GO TO WRAP-UP 4 0552 B 570 15
186 ATANA A INTER&2049,ACCUM&2049 * ADD TO ACCUMULATOR 7 0556 A 90' R5' 15
187 MCW @0@,CF * SET NEXT SUBTRACT 7 0563 M R5S 154 15
188 ATANW A C1,ITCNT * INC ITERATION COUNT 7 0570 A 129 105 15
189 A C2,IX2P1 * FORM NEXT DIVISOR 7 0577 A 135 117 15
190 ATANB BCE ATANI,BASET&X1,0 * CHAR = 0, DONE? 8 0584 B 596 8'1 0 16
191 B ATANL * GO DO ANOTHER LOOP PASS 4 0592 B 460 16
192 ATANI A C1,CNTZRO * INCREMENT # LEADING ZEROS 7 0596 A 129 153 16
193 SBR X1,1&X1 * INCREMENT X1 7 0603 H 089 0'1 16
194 C CNTZRO,@2049@ * CHECK END 7 0610 C 153 R6V 16
195 BU ATANB * NO, CHECK MORE ZEROS 5 0617 B 584 / 16
196 ATANX B 0 *** RETURN TO CALL 4 0622 B 000 17
197 *
198 *
199 * -------------------------------------------------------------
200 *
201 * NOW WE PRINT THAT BABY OUT :-))
202 * PROPOSED FORMAT
203 * 2
1 SUBROUTINE PI PAGE 4
0 SEQ PG LIN LABEL OP OPERANDS SFX CT LOCN INSTRUCTION TYPE CARD
204 * 0 1 2 3 4 5 6 7
205 * 1234567890123456789012345678901234567890123456789012345678901234567890123
206 * 3. * 10E-00000
207 * + NNNNNNNNNN NNNNNNNNNN NNNNNNNNNN NNNNNNNNNN NNNNNNNNNN * 10E-00050
208 * + NNNNNNNNNN NNNNNNNNNN NNNNNNNNNN NNNNNNNNNN NNNNNNNNNN * 10E-00100
209 PRINT SBR PRINTX&3 4 0626 H 800 17
210 PRINTD MCW @008@,X1 * CLEAR PICKUP X 7 0630 M R6Y 089 17
211 MCW C0,ITCNT * CLEAR TOTAL CH MOVED 7 0637 M 123 105 17
212 CS 332 * START CLEARING DOWN TO 200, PRINT AREA 4 0644 / 332 17
213 CS 1 0648 / 17
214 MCW @. * 10E-00000@,269 7 0649 M R8/ 269 17
215 SW 265 * SET WORD MARK IN EXPONENT F 4 0656 , 265 18
216 MCW ACCUM&X1,256 MOVE 5TH FIELD 7 0660 M 9'/ 256 18
217 SBR X1,10&X1 * STEP X1 7 0667 H 089 0/0 18
218 W *WRITE THE PRINT AREA TO THE PRINTER 1 0674 2 18
219 *
220 PR1LOP CS 252 * CLEAR PREVIOUS NUMERICS 4 0675 / 252 18
221 SW 203,214 * SET WORD MARKS FOR B FIELD 7 0679 , 203 214 18
222 SW 225,236 7 0686 , 225 236 18
223 SW 247,265 7 0693 , 247 265 19
224 A @00050@,269 * ADD 50 TO EXPONENT 7 0700 A R8W 269 19
225 MCW ACCUM&X1,212 MOVE 1ST FIELD 7 0707 M 9'/ 212 19
226 SBR X1,10&X1 * STEP X1 7 0714 H 089 0/0 19
227 MCW ACCUM&X1,223 MOVE 2ND FIELD 7 0721 M 9'/ 223 19
228 SBR X1,10&X1 * STEP X1 7 0728 H 089 0/0 20
229 MCW ACCUM&X1,234 MOVE 3RD FIELD 7 0735 M 9'/ 234 20
230 SBR X1,10&X1 * STEP X1 7 0742 H 089 0/0 20
231 MCW ACCUM&X1,245 MOVE 4TH FIELD 7 0749 M 9'/ 245 20
232 SBR X1,10&X1 * STEP X1 7 0756 H 089 0/0 20
233 MCW ACCUM&X1,256 MOVE 5TH FIELD 7 0763 M 9'/ 256 21
234 SBR X1,10&X1 * STEP X1 7 0770 H 089 0/0 21
235 W *WRITE THE PRINT AREA TO THE PRINTER 1 0777 2 21
236 A @000050@,ITCNT * ADD 50 TO TOTAL DIGITS 7 0778 A R9S 105 21
237 C @002000@,ITCNT * TEST FOR END 7 0785 C R9Y 105 21
238 BL PR1LOP * END IS HIGHER THAN COUNT 5 0792 B 675 T 21
239 PRINTX B 0 *** RETURN TO CALL 4 0797 B 000 21
240 *
241 *
242 * LARGE AREAS RON MAK SAYS THAT BLANKS PROCESS AS ZEROS
243 * ORG 780
244 *FLDLEN EQU 2050 * LENGTH OF THE 3 BIG FIELDS
245 BASET DA 1X2050,C * BASE, 1ST DIVISION HERE 0801 2850
246 INTER DA 1X2050,C * INTERMEDIATE BUFFER, 2ND DIVISION HERE 2851 4900
247 ACCUM DA 1X2050,C * ACCUMULATOR, ANSWER IS FORMED HERE 4901 6950
248 * 1 2 3 4 5 6 7 8
249 *78901234567890123456789012345678901234567890123456789012345678901234567890
250 * LABEL | OP | OPERATION |XXXXXXX
251 *
252 *** NOV 15
253 * MACHIN'S METHOD -
1 SUBROUTINE PI PAGE 5
0 SEQ PG LIN LABEL OP OPERANDS SFX CT LOCN INSTRUCTION TYPE CARD
254 * PI = 16ARCTAN(1/5) - 4ARCTAN(1/239)
255 * AN ARCTAN SERIES IS 1/N - 1/(3XN^3) + 1/(5XN^5) - ...
256 *
257 *** NOV 16
258 * IN ANY CASE,
259 *LETS DO ARCTAN(X), X = 1/5
260 * 0.19739555984988075837004976519479
261 *THEN 16ARCTAN(1/5)
262 * 3.1583289575980921339207962431166
263 * THEN ARCTAN(1/239)
264 * 0.0041840760020747238645382149592855
265 * TIMES 4
266 * 0.016736304008298895458152859837142
267 * PI =
268 * 3.1415926535897932384626433832795
269 * :-))
270 *
271 * SET N TO 1/X = 5 (THIS IS THE FANCY FOOTWORK :-))
272 *
273 * 1) A) FORM THREE LARGE AS PRACTICAL EQUAL SIZED AREAS IN MEMORY.
274 * LETS CALL THEM "ACCUMULATOR", ACCUM
275 * "INTERMEDIATE", INTER
276 * "BASE OF NEXT TERM" BASET
277 * B) FORM SMALLER WORKING AREAS
278 * ITERATION COUNTER ITCNT USED FOR OBSERVATION
279 * STARTS AT ZERO, COUNTS UP AFTER A PASS
280 * DIVISOR OF BASET, DIVBAS, USUALLY 5^2 OR 239^2
281 * 5^2 = 25, 239^2 = 57121
282 * ADD/SUBTRACT CONTROL FLAG, CF , TOGGLED AFTER A PASS
283 * 0 MEANS ADD, OTHER IS SUBTRACT
284 * DIVISOR OF INTER IS IX2P1 , ITCNT TIMES 2 PLUS 1
285 *
286 * 2) FIGURE WHERE THE DECIMAL POINT WILL BE
287 * (SAME RELATIVE PLACE IN EACH AREA)
288 * ( SEVERAL CHARACTERS OR WORDS TO THE "RIGHT" OF
289 * THE TOP SIGNIFICANCE.)
290 *
291 * 3) A) ZERO THE ACCUM
292 * B) ( INTER DOES NOT NEED INITIALIZATION)
293 * C) SET X (5.0 IN OUR EXAMPLE) INTO BASET
294 * D) SET COUNTER N TO 1
295 *
296 * 4) WHILE BASET IS NON-ZERO
297 * A) DIVIDE BASET BY X^2 ( 25 IN OUR EXAMPLE ) GIVING BASET
298 * B) DIVIDE BASET BY (2XN - 1) GIVING INTER
299 * C) IF N IS ODD, ADD INTERMEDIATE TO ACCUMULATOR
300 * ELSE, SUBTRACT INTERMEDIATE FROM ACCUMULATOR
301 * D) ADD 1 TO N (ASSURE THAT MACHINE CAN DIVIDE BY 2N)
302 *
303 * 5) ACCUMULATOR IS A FINE APPROXIMATION OF ARCTAN(X) ;-))
1 SUBROUTINE PI PAGE 6
0 SEQ PG LIN LABEL OP OPERANDS SFX CT LOCN INSTRUCTION TYPE CARD
DCW @+@ 1 6951 LIT 180
DCW @0@ 1 6952 LIT 180
DCW @80@ 2 6954 LIT 180
DCW @1@ 1 6955 LIT 181
DCW @956@ 3 6958 LIT 181
DCW @000@ 3 6961 LIT 181
DCW @2049@ 4 6965 LIT 181
DCW @008@ 3 6968 LIT 181
DCW @. * 10E-00000@ 13 6981 LIT 181
DCW @00050@ 5 6986 LIT 181
DCW @000050@ 6 6992 LIT 182
DCW @002000@ 6 6998 LIT 182
304 END START * LAST CARD IN DECK, TRANSFER ADDRESS / 164 080
1 SUBROUTINE PI PAGE 7
0SYMBOL ADDRESS SYMBOL ADDRESS SYMBOL ADDRESS SYMBOL ADDRESS SYMBOL ADDRESS SYMBOL ADDRESS SYMBOL ADDRESS
ACCUM 4901 ATAN 428 ATANA 556 ATANB 584 ATANI 596 ATANL 460 ATANS 538
ATANW 570 ATANX 622 BASET 801 C0 123 C1 129 C2 135 C239P2 147
C25 141 CF 154 CNTZRO 153 DIVBAS 111 HALT 424 INTER 2851 ITCNT 105
IX2P1 117 LC0L9 163 PR1LOP 675 PRINT 626 PRINTD 630 PRINTX 797 START 164
START1 335 START2 381 X1 89 X2 94 X3 99