blob: f2b87765fa78ef2781efd09fca0c32c7c89d49d9 (
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#ifndef CATALAN_PRINT
#define CATALAN_PRINT
#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 :\
putchar() ; putchar(_1[x]) :\
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() .( :\
pha ; push a :\
clc ; carry = 0 :\
adc #"0" ; a += '0' + carry :\
putchar() :\
pla ; pop a :\
.)
; print decimal value of a
printa .(
ora #0 ; Make sure flags correspond to accumulator value
cmp #10 ; if (a < 10)
bcc digit1
cmp #100 ; if (a < 100)
bcc digit2
digit3 pha ; push a
starg(diva_arg, #100) ; a /= 100
jsr diva
puta()
pla ; pop a
starg(moda_arg, #100) ; a %= 100
jsr moda
digit2 pha ; push a
starg(diva_arg, #10) ; a /= 10
jsr diva
puta()
pla ; pop a
starg(moda_arg, #10) ; a %= 10
jsr moda
digit1 puta()
rts
.)
#endif /* CATALAN_PRINT */
// vim: noet ts=8 sw=0 lcs=tab\:\ \
|