Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit7136a8d938c38535d13a8ff5b5aee3ad2c8be512 (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-08-01 13:06:38 +0300
Committer
 Syndamia <kamen@syndamia.com>
2025-08-01 13:06:38 +0300
Filesab119adfd3e58980f4551e2881bc75dbd52d36c4
c64-programs-7136a8d938c38535d13a8ff5b5aee3ad2c8be512.tar
c64-programs-7136a8d938c38535d13a8ff5b5aee3ad2c8be512.tar.gz
c64-programs-7136a8d938c38535d13a8ff5b5aee3ad2c8be512.zip
Parentaa7744345ba871dbee244acb6c64b7e6878bdd90 (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.s49
-rw-r--r--isprime/kernal.oph.s3
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