diff options
| Commit | 8a50432af0d883ba9ff4680004c70b6dbbc7b445 (patch) | |
|---|---|---|
| Author | 2025-08-03 11:12:53 +0300 | |
| Committer | 2025-08-03 11:12:53 +0300 | |
| Files | 30a8984694e09c74c7d72280dd8428ef637c0189 /catalan/math.a65 | |
| c64-programs-8a50432af0d883ba9ff4680004c70b6dbbc7b445.tar c64-programs-8a50432af0d883ba9ff4680004c70b6dbbc7b445.tar.gz c64-programs-8a50432af0d883ba9ff4680004c70b6dbbc7b445.zip | ||
| Parent | c898780ae18a1864c2d98cb56a73dd535b208a5a (diff) | |
feat(catalan): Implement catalan and move math subroutines to a separate file
1 files changed, 70 insertions, 0 deletions
| -rw-r--r-- | catalan/math.a65 | 70 |
diff --git a/catalan/math.a65 b/catalan/math.a65 new file mode 100644 index 0000000..ea45675 --- /dev/null +++ b/catalan/math.a65 @@ -0,0 +1,70 @@ +#ifndef CATALAN_MATH +#define CATALAN_MATH + +; a *= multa_arg1 +multa .( + ora #0 ; Update flags, so they're accurate with the accumulator value + beq return ; if (a == 0) return a + cmp #1 ; if (a == 1) + beq r_arg1 ; return arg1 + + ldx arg1 ; x = arg1 + cpx #0 ; if (x == 0) + beq r_zero ; return 0 + cpx #1 ; if (x == 1) + beq return ; return a + + dex ; --x // accumulator already has the first value + sta addend ; addend = a +loop clc ; do carry = 0 + adc addend ; a += addend + carry + dex ; --x + cpx #1 ; while (x >= 1) + bcs loop + +return ora #0 ; Update flags, so they're accurate with the accumulator value + rts + +r_zero lda #0 + rts + +r_arg1 lda arg1 + rts + ++multa_arg1 +arg1 .byt 0 +addend .byt 0 +.) + +; a /= diva_arg1 +diva .( + ora #0 ; Update flags, so they're accurate with the accumulator value + beq return ; if (a == 0) return a + + ldx arg1 ; x = arg1 + cpx #0 ; if (x == 0) + beq r_zero ; return 0 + cpx #1 ; if (x == 1) + beq return ; return a + + stx subtrahend ; subtrahend = x + ldx #0 ; x = 0 +loop sec ; do carry = 1 + sbc subtrahend ; a -= addend + !carry + inx ; ++x + cmp subtrahend ; while (a >= subtrahend) + bcs loop + +return txa + rts + +r_zero lda #0 + rts + ++diva_arg1 +arg1 .byt 0 +subtrahend .byt 0 +.) + +#endif /* CATALAN_MATH */ +// vim: noet ts=9 sw=0 lcs=tab\:\ \ |
