Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit4b4c1a130a3ef64f3f788e2ebd46cfc3b0e121fc (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-08-01 12:40:20 +0300
Committer
 Syndamia <kamen@syndamia.com>
2025-08-01 12:40:20 +0300
Files721baa2ee4f2c2f5ab3d402e494b1408ce710e8c
c64-programs-4b4c1a130a3ef64f3f788e2ebd46cfc3b0e121fc.tar
c64-programs-4b4c1a130a3ef64f3f788e2ebd46cfc3b0e121fc.tar.gz
c64-programs-4b4c1a130a3ef64f3f788e2ebd46cfc3b0e121fc.zip
Parentcf970656bbca915938104a83290a358ba3c4bf17 (diff)
feat(isprime): Clean up and add comments for implementation
2 files changed, 37 insertions, 35 deletions
-rw-r--r--isprime/isprime.oph.s69
-rw-r--r--isprime/kernal.oph.s3
diff --git a/isprime/isprime.oph.s b/isprime/isprime.oph.s
index 4066531..262e8f7 100644
--- a/isprime/isprime.oph.s
+++ b/isprime/isprime.oph.s
@@ -40,55 +40,54 @@ isprimex_cli:
max: .byte 0
+; accumulator is zero if not prime and nonzero otherwise
isprimex:
.scope
- sec ; if (number < 2) // equivalent to "number <= 1"
- txa ; // a = x
- sbc #2 ; // a -= 2 + 0
- bmi _false ; return False
+ cpx #2 ; if (x < 2) // x <= 1
+ bcc _false ; return False
- sbc #2 ; if (number < 2) // since it was already subtracted, this is equal to "number < 4" or "number <= 3"
- bmi _end ; return True
+ cpx #4 ; if (x < 4) // x <= 3
+ bcc _true
- txa ; if (number % 2 == 0)
- and #1 ; // number & 0b0001 == 0
- beq _end ; return False
+ txa ; a = x
+ and #1 ; if (a % 2 == 0) // a & 0b0001 == 0
+ beq _end ; return False
- txa
- `mod 3 ; if (number % 3 == 0)
- beq _end ; return False
+ txa ; a = x
+ `mod 3 ; if (a % 3 == 0)
+ beq _end ; return False
- ldy #6 ; y = 6
- stx max ; max = x
- lsr max ; max /= 2
+ ldy #6 ; y = 6
+ stx max ; max = x
+ lsr max ; max /= 2
-_loop: cpy max ; if (y >= max)
- bcs _true ; return True
+_loop: cpy max ; do if (y >= max)
+ bcs _true ; return True
- dey ; --y
- txa ; a = x
- `mody ; if (a % y == 0)
- beq _end ; return False
+ dey ; --y
+ txa ; a = x
+ `mody ; if (a % y == 0)
+ beq _end ; return False
- iny ; ++y
- iny ; ++y
- txa ; a = x
- `mody ; if (a % y == 0)
- beq _end ; return False
+ iny ; ++y
+ iny ; ++y
+ txa ; a = x
+ `mody ; if (a % y == 0)
+ beq _end ; return False
- iny ; ++y
- iny ; ++y
- iny ; ++y
- iny ; ++y
- iny ; ++y
- iny ; ++y
- cpy #5 ; while (y < max)
+ iny ; ++y
+ iny ; ++y
+ iny ; ++y
+ iny ; ++y
+ iny ; ++y
+ iny ; ++y
+ cpy #5 ; while (y < max)
bcc _loop
-_true: lda #1 ; return True
+_true: lda #1 ; return True
_end: rts
-_false: lda #0 ; return False
+_false: lda #0 ; return False
rts
.scend
diff --git a/isprime/kernal.oph.s b/isprime/kernal.oph.s
index 5dda4a4..8d4a69e 100644
--- a/isprime/kernal.oph.s
+++ b/isprime/kernal.oph.s
@@ -14,13 +14,16 @@
tax
.macend
+; print value (byte) at address as a number
.macro printm
lda _1
jsr printa
.macend
+; print register x as a number
printx: txa ; a = x
+; print register a as a number
printa:
.scope
cmp #10 ; if (a < 10)