Mercurial > hg > Members > kono > os9 > sbc09
comparison examples/erat-sieve.asm @ 57:2088fd998865
sbc09 directry clean up
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 23 Jul 2018 16:07:12 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
56:4fa2bdb0c457 | 57:2088fd998865 |
---|---|
1 ; ERATOSTHENES SIEVE PRIMES | |
2 ; BYTE MAGAZINE 9/1981 BENCHMARK | |
3 ; Adapted by Johann Klasek, j AT klasek at | |
4 ; Previously implemented for a Dragon 32, | |
5 ; later also for a the sim6809 simulator. | |
6 ; | |
7 org $c000 | |
8 | |
9 FLAG EQU $5000 ; array of bytes, length SIZE | |
10 SIZE EQU $2000 | |
11 | |
12 START | |
13 | |
14 lds #FLAG ; stack below flags array | |
15 | |
16 ; lda #$42 | |
17 ; jsr >$b54a ; char out Dragon Basic | |
18 ldb #'B | |
19 swi2 | |
20 | |
21 lda #$0a | |
22 pshs a | |
23 | |
24 ITER ldx #FLAG ; array | |
25 ldu #$ffff ; filled with | |
26 ldd #(SIZE/2) ; words | |
27 CLEAR stu ,x++ ; word fill | |
28 decb ; byte decrement works only | |
29 bne CLEAR ; low byte of count is 0 | |
30 deca | |
31 bne CLEAR | |
32 | |
33 leau 1,u ; prime counter to 0 | |
34 ldy #FLAG ; array | |
35 | |
36 PRIMES tst ,y+ ; is prime? | |
37 beq NPRIME | |
38 leax -1,y ; prime found | |
39 tfr x,d | |
40 suba #(FLAG>>8) | |
41 lslb | |
42 rola | |
43 addd #3 ; prime = step | |
44 bra STEP | |
45 | |
46 NMARK clr ,x ; mark all non-primes | |
47 STEP leax d,x ; step to next | |
48 cmpx #(FLAG+SIZE) | |
49 bcs NMARK | |
50 | |
51 leau 1,u ; count primes | |
52 NPRIME cmpy #(FLAG+SIZE) | |
53 bcs PRIMES | |
54 | |
55 ldb #'. | |
56 swi2 ; print | |
57 ; lda #$2e | |
58 ; jsr >$b54a ; char out Dragon Basic | |
59 | |
60 dec ,s | |
61 bne ITER | |
62 | |
63 puls a ; drop counter | |
64 pshs u ; store count on stack | |
65 ; rts | |
66 sync | |
67 |