diff options
| Commit | 8260ce70ea43f3ad77bbe5c70366847077055a04 (patch) | |
|---|---|---|
| Author | 2025-08-03 13:59:48 +0300 | |
| Committer | 2025-08-03 13:59:48 +0300 | |
| Files | fc031d16c6a3263b4e0672c0ab715c2b2e41808e | |
| c64-programs-8260ce70ea43f3ad77bbe5c70366847077055a04.tar c64-programs-8260ce70ea43f3ad77bbe5c70366847077055a04.tar.gz c64-programs-8260ce70ea43f3ad77bbe5c70366847077055a04.zip | ||
| Parent | bd6968203f502f3ffaa410c9a616e01d25698c9f (diff) | |
feat(catalan): Clean up implementation
4 files changed, 44 insertions, 49 deletions
| -rw-r--r-- | catalan/basic_starter.a65 | 14 | ||||
| -rw-r--r-- | catalan/catalan.a65 | 56 | ||||
| -rw-r--r-- | catalan/math.a65 | 3 | ||||
| -rw-r--r-- | catalan/print.a65 | 20 |
diff --git a/catalan/basic_starter.a65 b/catalan/basic_starter.a65 index 5242418..8257a4c 100644 --- a/catalan/basic_starter.a65 +++ b/catalan/basic_starter.a65 @@ -12,11 +12,12 @@ * Since in basic we need to provide a decimal string, but we store a decimal value, we need * to do this complicated convertion. */ -#define main_addr_ch1 "0" + main / 10000 -#define main_addr_ch2 "0" + (main - main / 10000 * 10000) / 1000 -#define main_addr_ch3 "0" + (main - main / 1000 * 1000) / 100 -#define main_addr_ch4 "0" + (main - main / 100 * 100) / 10 -#define main_addr_ch5 "0" + main - main / 10 * 10 +#define addr_to_ch(addr) \ + "0" + addr / 10000, \ + "0" + (addr - addr / 10000 * 10000) / 1000, \ + "0" + (addr - addr / 1000 * 1000) / 100, \ + "0" + (addr - addr / 100 * 100) / 10, \ + "0" + addr - addr / 10 * 10 .word $0801 ; Header -- addr 2049 * = $0801 ; Program Counter @@ -24,8 +25,7 @@ .( .word eol .word 10 - .byt $9e," " - .byt main_addr_ch1,main_addr_ch2,main_addr_ch3,main_addr_ch4,main_addr_ch5,0 + .byt $9e," ",addr_to_ch(main),0 eol .word 0 .) diff --git a/catalan/catalan.a65 b/catalan/catalan.a65 index 0f3cc33..b548db4 100644 --- a/catalan/catalan.a65 +++ b/catalan/catalan.a65 @@ -2,41 +2,22 @@ #include "print.a65" #include "math.a65" -hello .byt "HELLO, WORLD!",0 -newline .byt 13,0 - main .( - lda #3 - sta cat_n - jsr catalan - lda cat_Cn - jsr printa -/* - ldy #0 -loop jsr catalan - lda cat_Cn - jsr printa - lda #" " - putchar() - iny - sty cat_n - cpy #7 + 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 -*/ - - rts +return rts .) -/* a = x - * a *= 4 - * a -= 2 - * b = x - * ++b - * a /= b - * a *= cat_n - * cat_n = a - */ catalan .( + lda #1 ; a = 1 + sta Cn ; Cn = a + lda n ; a = n cmp #1 ; if (a < 1) bcc return ; return @@ -45,22 +26,20 @@ catalan .( loop iny ; do ++y tya ; a = y + applya(multa, multa_arg, #4) ; a *= 4 - starg(multa_arg, #4) - jsr multa 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 - starg(diva_arg, divisor) - jsr diva - ; a *= Cn - starg(multa_arg, Cn) - jsr multa sta Cn ; Cn = a cpy n ; while (y < n) @@ -74,7 +53,4 @@ n .byt 0 divisor .byt 0 .) - -buffer .byt 0 - // vim: noet ts=8 sw=0 lcs=tab\:\ \ diff --git a/catalan/math.a65 b/catalan/math.a65 index 3a93854..9662de7 100644 --- a/catalan/math.a65 +++ b/catalan/math.a65 @@ -8,8 +8,7 @@ pla ; pop a :\ .) -#define applya(subroutine, valuea, arg, value) .( :\ - lda valuea :\ +#define applya(subroutine, arg, value) .( :\ starg(arg, value) :\ jsr subroutine :\ .) diff --git a/catalan/print.a65 b/catalan/print.a65 index 655c162..f2b8776 100644 --- a/catalan/print.a65 +++ b/catalan/print.a65 @@ -4,7 +4,17 @@ #include "kernal.a65" #include "math.a65" +#define putc(char) .( :\ + pha ; push a :\ + lda char ; a = char :\ + putchar() ; print a :\ + pla ; push a :\ +.) + #define print(str) .( :\ + pha :\ + txa :\ + pha :\ ldx #0 ; x = 0 :\ loop lda str, x ; while (_1[x] != 0) :\ beq end :\ @@ -12,6 +22,16 @@ loop lda str, x ; while (_1[x] != 0) :\ inx ; ++x :\ bne loop ; if (x == 0) break :\ end :\ + pla :\ + tax :\ + pla :\ +.) + +#define print_num(value) .( :\ + pha ; push a :\ + lda value ; a = value :\ + jsr printa ; print a :\ + pla ; push a :\ .) #define puta() .( :\ |
