diff options
| Commit | 8f60009f5eee7f6189b34c5d178391b4f82cda85 (patch) | |
|---|---|---|
| Author | 2025-08-03 10:55:51 +0300 | |
| Committer | 2025-08-03 10:55:51 +0300 | |
| Files | 97432f9d2dea958faf75272dbc079077b7d1d13b | |
| c64-programs-8f60009f5eee7f6189b34c5d178391b4f82cda85.tar c64-programs-8f60009f5eee7f6189b34c5d178391b4f82cda85.tar.gz c64-programs-8f60009f5eee7f6189b34c5d178391b4f82cda85.zip | ||
| Parent | 8b54ad5f377b57324937b780408f287c992c0e14 (diff) | |
feat(catalan): Implement divison with accumulator subroutine
1 files changed, 36 insertions, 4 deletions
| -rw-r--r-- | catalan/catalan.a65 | 40 |
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\:\ \ |
