#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\:\ \