
 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
 1240  *      SETS ARRAY STARTING AT BASE
 1250  *      TO $FF IF NUMBER IS NOT PRIME
 1260  *      CHECKS ONLY ODD NUMBERS > 3
 1270  *      INC = INCREMENT OF KNOCKOUT
 1280  *      N = KNOCKOUT VARIABLE
 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      TO PNTR
 1520         STA 1,S
 1530         LDY BASE,X   GET A POSSIBLE PRIME
 1540         BNE .8       THIS ONE HAS BEEN KNOCKED OUT
 1550  .4     TXA
 1560         ASL          INC = START*2 + 1
 1570         INC
 1580         TAY
 1590         STY .7+1
 1600         LDA 1,S      MOVE MULT TO N
 1610  *---STRIKE OUT MULTIPLES---------
 1620  .5     SEP #$20     A/8
 1630  .6     TCD
 1640         STX 0
 1650  .7     ADC #*-*
 1660         BCC .6
 1670         REP #$20     A/16
 1680         ADC ##$FF    APPLY CARRY
 1690         BPL .5       ...NOT FINISHED
 1700  *--------------------------------
 1710  .8     INX
 1720         CPX #64      UP TO 127
 1730         BCC .2       WE'RE DONE IF X>127
 1740         LDA ##0
 1750         TCD
 1760         PLA
 1770         RTS
 1780  *--------------------------------

