Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit8f60009f5eee7f6189b34c5d178391b4f82cda85 (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-08-03 10:55:51 +0300
Committer
 Syndamia <kamen@syndamia.com>
2025-08-03 10:55:51 +0300
Files97432f9d2dea958faf75272dbc079077b7d1d13b
c64-programs-8f60009f5eee7f6189b34c5d178391b4f82cda85.tar
c64-programs-8f60009f5eee7f6189b34c5d178391b4f82cda85.tar.gz
c64-programs-8f60009f5eee7f6189b34c5d178391b4f82cda85.zip
Parent8b54ad5f377b57324937b780408f287c992c0e14 (diff)
feat(catalan): Implement divison with accumulator subroutine
1 files changed, 36 insertions, 4 deletions
-rw-r--r--catalan/catalan.a6540
diff --git a/catalan/catalan.a65 b/catalan/catalan.a65
index 3dd3168..53d30eb 100644
--- a/catalan/catalan.a65
+++ b/catalan/catalan.a65
@@ -44,10 +44,12 @@ cat_n .byt 1
n .byt 0
main
- lda #3
- sta multa_arg1
- lda #14
- jsr multa
+ lda #9
+ sta diva_arg1
+ lda #144
+ jsr diva
+ clc
+ adc #49
putchar()
rts
@@ -85,6 +87,36 @@ 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
+.)
+
buffer .byt 0
// vim: noet ts=8 sw=0 lcs=tab\:\ \