From 7136a8d938c38535d13a8ff5b5aee3ad2c8be512 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Fri, 1 Aug 2025 13:06:38 +0300 Subject: fix(isprime): Fix off by one value of y in loop --- isprime/isprime.oph.s | 49 +++++++++++++++++++++++++++++++++---------------- isprime/kernal.oph.s | 3 +++ 2 files changed, 36 insertions(+), 16 deletions(-) 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 + +.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 -_end: rts -.scend +; 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 -- cgit v1.3.1-23-gd82d