Summary Files Commits Branches @commit @diff @stats
path: root / catalan / catalan.a65
blob: b548db433ca1cbc15ee0a5c33e198065c00812b0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "basic_starter.a65"
#include "print.a65"
#include "math.a65"

main .(
	ldy #0			; y = 0
loop	jsr catalan		; do  catalan()
	print_num(cat_Cn)	;     print cat_Cn
	putc(#" ")		;     print ' '
	iny			;     ++y
	sty cat_n		;     cat_n = y
	cpy #7			; while (y < 7)
	bcc loop
return	rts
.)

catalan .(
	lda #1		; a = 1
	sta Cn		; Cn = a

	lda n		; a = n
	cmp #1		; if (a < 1)
	bcc return	;   return

	ldy #0		; y = 0
loop	iny		; do  ++y

	tya		;     a = y
	applya(multa, multa_arg, #4)
			;     a *= 4
	sec		;     a -= 2
	sbc #2

	applya(multa, multa_arg, Cn)
			;     a *= Cn

	iny		;     ++y
	sty divisor	;     divisor = y
	dey		;     --y

	applya(diva, diva_arg, divisor)
			;     a /= divisor
	sta Cn 		;     Cn = a

	cpy n		; while (y < n)
	bcc loop
return	rts

+cat_Cn
Cn	.byt 1
+cat_n
n	.byt 0
divisor	.byt 0
.)

// vim: noet ts=8 sw=0 lcs=tab\:\ \