diff options
| Commit | 7136a8d938c38535d13a8ff5b5aee3ad2c8be512 (patch) | |
|---|---|---|
| Author | 2025-08-01 13:06:38 +0300 | |
| Committer | 2025-08-01 13:06:38 +0300 | |
| Files | ab119adfd3e58980f4551e2881bc75dbd52d36c4 | |
| c64-programs-7136a8d938c38535d13a8ff5b5aee3ad2c8be512.tar c64-programs-7136a8d938c38535d13a8ff5b5aee3ad2c8be512.tar.gz c64-programs-7136a8d938c38535d13a8ff5b5aee3ad2c8be512.zip | ||
| Parent | aa7744345ba871dbee244acb6c64b7e6878bdd90 (diff) | |
fix(isprime): Fix off by one value of y in loop
2 files changed, 36 insertions, 16 deletions
| -rw-r--r-- | isprime/isprime.oph.s | 49 | ||||
| -rw-r--r-- | isprime/kernal.oph.s | 3 |
diff --git a/isprime/isprime.oph.s b/isprime/isprime.oph.s index 30730de..618bd6d 100644 --- a/isprime/isprime.oph.s +++ b/isprime/isprime.oph.s @@ -6,22 +6,40 @@ .require "basic_starter.oph.s" .require "kernal.oph.s" -.alias check_first 13 -.alias check_last 40 +.alias check_first 0 +.alias check_last 254 main: -.scope `lowercase + ;`primes_yn check_first, check_last + `primes_list check_first, check_last + rts - ldx #check_first ; x = check_first -* jsr isprimex_yn ; do print isprime(x) - inx ; ++x - cpx #check_last ; while (x <= check_last) - bcc - - beq - +.macro primes_list + ldx #_1 ; x = check_first +_loop: jsr isprimex_print ; do print isprime(x) + inx ; ++x + cpx #_2 ; while (x <= check_last) + bcc _loop + beq _loop +.macend -_end: rts -.scend +.macro primes_yn + ldx #_1 ; x = check_first +_loop: jsr isprimex_yn ; do print isprime(x) + inx ; ++x + cpx #_2 ; while (x <= check_last) + bcc _loop + beq _loop +.macend + +; prints x if it is a prime +isprimex_print: + jsr isprimex ; a = isprime(x) + beq + ; if (a != 0) + jsr printx ; print x + `printchar 32 ; print " " +* rts ; return ; prints "$x Yes\n" when x is prime and "$x No\n" otherwise isprimex_yn: @@ -59,10 +77,10 @@ isprimex: stx max ; max = x lsr max ; max /= 2 -_loop: cpy max ; do if (y >= max) - bcs _true ; return True + cpy max ; if (y >= max) + bcs _true ; return True - dey ; --y +_loop: dey ; do --y txa ; a = x `mody ; if (a % y == 0) beq _end ; return False @@ -78,8 +96,7 @@ _loop: cpy max ; do if (y >= max) iny ; ++y iny ; ++y iny ; ++y - iny ; ++y - cpy #5 ; while (y < max) + cpy max ; while (y < max) bcc _loop _true: lda #1 ; return True diff --git a/isprime/kernal.oph.s b/isprime/kernal.oph.s index 2082d6b..239df49 100644 --- a/isprime/kernal.oph.s +++ b/isprime/kernal.oph.s @@ -25,6 +25,9 @@ jsr printa .macend +printy: tya ; a = y + jmp printa + ; print register x as a number printx: txa ; a = x |
