Summary Files Commits Branches @commit @diff @stats
path: root / catalan / print.a65
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\:\ \