Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
1 files changed, 44 insertions, 2 deletions
-rw-r--r--catalan/catalan.a6546
diff --git a/catalan/catalan.a65 b/catalan/catalan.a65
index 7dc73b0..3dd3168 100644
--- a/catalan/catalan.a65
+++ b/catalan/catalan.a65
@@ -3,6 +3,7 @@
hello .byt "HELLO, WORLD!",0
+// accumulator = a * b
#define multiply(a, b) .( :\
lda a ; if (a == 0) :\
beq return ; return 0 :\
@@ -21,6 +22,7 @@ loop clc ; do carry = 0 :\
return :\
.)
+// accumulator = a / b
#define divide(a, b) .( :\
lda b ; if (b == 0) :\
beq return ; return 0 :\
@@ -38,11 +40,51 @@ loop sec ; do carry = 1 :\
return txa :\
.)
-main print(hello)
- divide(#253, #5)
+cat_n .byt 1
+n .byt 0
+
+main
+ lda #3
+ sta multa_arg1
+ lda #14
+ jsr multa
putchar()
rts
+// a *= multa_arg1
+multa .(
+ 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
+.)
+
buffer .byt 0
// vim: noet ts=8 sw=0 lcs=tab\:\ \