diff options
| Commit | 4b4c1a130a3ef64f3f788e2ebd46cfc3b0e121fc (patch) | |
|---|---|---|
| Author | 2025-08-01 12:40:20 +0300 | |
| Committer | 2025-08-01 12:40:20 +0300 | |
| Files | 721baa2ee4f2c2f5ab3d402e494b1408ce710e8c | |
| c64-programs-4b4c1a130a3ef64f3f788e2ebd46cfc3b0e121fc.tar c64-programs-4b4c1a130a3ef64f3f788e2ebd46cfc3b0e121fc.tar.gz c64-programs-4b4c1a130a3ef64f3f788e2ebd46cfc3b0e121fc.zip | ||
| Parent | cf970656bbca915938104a83290a358ba3c4bf17 (diff) | |
feat(isprime): Clean up and add comments for implementation
2 files changed, 37 insertions, 35 deletions
| -rw-r--r-- | isprime/isprime.oph.s | 69 | ||||
| -rw-r--r-- | isprime/kernal.oph.s | 3 |
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) |
