Mercurial > hg > Members > kono > os9 > sbc09
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/erat-sieve.asm Mon Jul 23 16:07:12 2018 +0900 @@ -0,0 +1,67 @@ +; ERATOSTHENES SIEVE PRIMES +; BYTE MAGAZINE 9/1981 BENCHMARK +; Adapted by Johann Klasek, j AT klasek at +; Previously implemented for a Dragon 32, +; later also for a the sim6809 simulator. +; + org $c000 + +FLAG EQU $5000 ; array of bytes, length SIZE +SIZE EQU $2000 + +START + + lds #FLAG ; stack below flags array + +; lda #$42 +; jsr >$b54a ; char out Dragon Basic + ldb #'B + swi2 + + lda #$0a + pshs a + +ITER ldx #FLAG ; array + ldu #$ffff ; filled with + ldd #(SIZE/2) ; words +CLEAR stu ,x++ ; word fill + decb ; byte decrement works only + bne CLEAR ; low byte of count is 0 + deca + bne CLEAR + + leau 1,u ; prime counter to 0 + ldy #FLAG ; array + +PRIMES tst ,y+ ; is prime? + beq NPRIME + leax -1,y ; prime found + tfr x,d + suba #(FLAG>>8) + lslb + rola + addd #3 ; prime = step + bra STEP + +NMARK clr ,x ; mark all non-primes +STEP leax d,x ; step to next + cmpx #(FLAG+SIZE) + bcs NMARK + + leau 1,u ; count primes +NPRIME cmpy #(FLAG+SIZE) + bcs PRIMES + + ldb #'. + swi2 ; print +; lda #$2e +; jsr >$b54a ; char out Dragon Basic + + dec ,s + bne ITER + + puls a ; drop counter + pshs u ; store count on stack +; rts + sync +