
 1000  *SAVE SIEVE OF ERATOSTHENES.2
 1010  *--------------------------------
 1020  *   CODED BY PETER J. MCINERNEY, NEW ZEALAND
 1030  *--------------------------------
 1040         .OR $3800
 1050  ARRAY  .EQ $4000
 1060  *--------------------------------
 1070  SIEVE  MOVE    #999,D6   DO 1000 TIMES
 1080  *---CLEAR WORKING ARRAY----------
 1090  .1     MOVE    #ARRAY,A0 CLEAR ARRAY FROM
 1100         MOVE    #$FF,D0   $4000 TO $7FFF
 1110  .2     CLR.L   (A0)+
 1120         CLR.L   (A0)+
 1130         CLR.L   (A0)+
 1140         CLR.L   (A0)+
 1150         CLR.L   (A0)+
 1160         CLR.L   (A0)+
 1170         CLR.L   (A0)+
 1180         CLR.L   (A0)+
 1190         DBF     D0,.2
 1200  *---INIT VARIABLES---------------
 1210         MOVEQ   #3,D0     START AT 3
 1220         MOVEQ   #4,D4     CORRESPONDS TO 9
 1230         MOVEQ   #4,D2     DELTA
 1240         MOVEQ   #1,D3     USED FOR STRIKING NON-PRIMES
 1250         MOVE    #ARRAY+1,A0 POSITION OF 3
 1260         MOVE    #ARRAY,A1 START OF ARRAY
 1270         BRA.S   .4        JUMP INTO LOOP
 1280  *---START SIFTING----------------
 1290  .3     ADDQ    #4,D2     UPDATE DIFFERENCE
 1300         ADD     D2,D4     UPDATE SQUARE POINTER
 1310  .4     CMPI.B  #0,(A0)+  IS THIS A PRIME?
 1320         BNE.S   .6          NO
 1330  *---STRIKE OUT MULTIPLES---------
 1340         MOVE    D4,D5     GET LATEST SQUARE
 1350  .5     MOVE.B  D3,0(A1,D5)  STRIKE ONE
 1360         ADD     D0,D5        NEXT STRIKE
 1370         CMPI    #$2000,D5    ...FINISHED?
 1380         BLS     .5           ...NO
 1390  *---GET NEXT SIEVE SIZE----------
 1400  .6     ADDQ    #2,D0     NEXT ODD NUMBER
 1410         CMPI    #127,D0   UNTIL SQRT $4000-1
 1420         BLS     .3
 1430  *---DO IT ALL 1000 TIMES---------
 1440         DBF     D6,.1   NEXT TIME
 1450         RTS

