
 1000         .OP 65816
 1010  *SAVE S.SUPER-FAST PRIMES 65802
 1020         .OR $8000    SAFELY OUT OF WAY
 1030  *--------------------------------
 1040  BASE   .EQ $6000    PRIME ARRAY $6000...7FFF
 1050  BEEP   .EQ $FF3A    BEEP THE SPEAKER
 1060  COUNT  .EQ 0,1
 1070  *--------------------------------
 1080  *      MAIN CALLING ROUTINE
 1090  *--------------------------------
 1100  MAIN   JSR BEEP
 1110         CLC          ...ENTER NATIVE MODE
 1120         XCE
 1130         REP #$20     A/16, XY/8
 1140         LDA ##1000     DO IT 1000 TIMES
 1150         STA COUNT
 1160  .1     JSR PRIME
 1170         DEC COUNT
 1180         BNE .1
 1190         SEC          ...ENTER EMULATION MODE
 1200         XCE
 1210         JMP BEEP     SAY WE'RE DONE
 1220  *--------------------------------
 1230  *      PRIME ROUTINE
 1290  *--------------------------------
 1300  PRIME
 1310         TSX          SAVE STACK PNTR
 1320         LDY #0       256 * 16 * 2 = 8192 BYTES
 1330         LDA ##BASE+8191   BASE...BASE+8191
 1340         TCS          TEMPORARY STACK PNTR
 1350  .1     .HS 0B.0B.0B.0B.0B.0B.0B.0B  ...16 PHD'S
 1360         .HS 0B.0B.0B.0B.0B.0B.0B.0B
 1370         DEY          256 TIMES
 1380         BNE .1
 1390         TXA
 1400         ORA ##$0100  RESTORE STACK PNTR
 1410         TCS
 1420  *--------------------------------
 1430         LDA ##BASE+4  POINT AT FIRST PRIME-SQUARED
 1440         PHA               (WHICH IS 3*3=9)
 1450         LDX #1       POINT AT FIRST PRIME (3)
 1460         BNE .4       ...ALWAYS
 1470  *--------------------------------
 1480  .2     TXA
 1490         ASL
 1500         ASL          *4, CLEARS CARRY TOO
 1510         ADC 1,S      ADD TO PREVIOUS PNTR
 1520         STA 1,S      PNTR TO SQUARE OF ODD NUMBER
 1530         LDY BASE,X   GET A POSSIBLE PRIME
 1540         BNE .8       THIS ONE HAS BEEN KNOCKED OUT
 1550  .4     TXA
 1560         ASL          DELTA = START*2 + 1
 1570         INC
 1580         STA .7+1
 1590         LDA 1,S      PNTR TO SQUARE OF PRIME
 1600  *---STRIKE OUT MULTIPLES---------
 1610  .6     TCD          POINT AT MULTIPLE
 1620         STX 0        STORE NON-ZERO AS FLAG
 1630  .7     ADC ##*-*    (VALUE FILLED IN)
 1640         BPL .6       ...NOT FINISHED
 1650  *---NEXT ODD NUMBER--------------
 1660  .8     INX
 1670         CPX #64      UP TO 127
 1680         BCC .2       WE'RE DONE IF X>127
 1690         LDA ##0      RESTORE DIRECT PAGE REGISTER
 1700         TCD
 1710         PLA          POP PNTR OFF STACK
 1720         RTS
 1730  *--------------------------------

