]> git.sur5r.net Git - cc65/blob - libsrc/cbm610/cputc.s
New condes module
[cc65] / libsrc / cbm610 / cputc.s
1 ;
2 ; Ullrich von Bassewitz, 06.08.1998
3 ;
4 ; void cputcxy (unsigned char x, unsigned char y, char c);
5 ; void cputc (char c);
6 ;
7
8         .export         _cputcxy, _cputc, cputdirect, putchar
9         .export         newline, plot
10         .exportzp       CURS_X, CURS_Y
11         .import         _gotoxy
12         .import         popa
13         .import         xsize, revers
14
15         .include        "cbm610.inc"
16         .include        "zeropage.inc"
17         .include        "../cbm/cbm.inc"
18
19 _cputcxy:
20         pha                     ; Save C
21         jsr     popa            ; Get Y
22         jsr     _gotoxy         ; Set cursor, drop x
23         pla                     ; Restore C
24
25 ; Plot a character - also used as internal function
26
27 _cputc: cmp     #$0A            ; CR?
28         bne     L1
29         lda     #0
30         sta     CURS_X
31         beq     plot            ; Recalculate pointers
32
33 L1:     cmp     #$0D            ; LF?
34         bne     L2
35         ldy     CURS_Y
36         iny
37         bne     newline         ; Recalculate pointers
38
39 ; Printable char of some sort
40
41 L2:     cmp     #' '
42         bcc     cputdirect      ; Other control char
43         tay
44         bmi     L10
45         cmp     #$60
46         bcc     L3
47         and     #$DF
48         bne     cputdirect      ; Branch always
49 L3:     and     #$3F
50
51 cputdirect:
52         jsr     putchar         ; Write the character to the screen
53
54 ; Advance cursor position
55
56 advance:
57         iny
58         cpy     xsize
59         bne     L9
60 newline:
61         ldy     #0              ; new line
62         clc
63         lda     xsize
64         adc     CharPtr
65         sta     CharPtr
66         bcc     L4
67         inc     CharPtr+1
68 L4:     inc     CURS_Y
69 L9:     sty     CURS_X
70         rts
71
72 ; Handle character if high bit set
73
74 L10:    and     #$7F
75         cmp     #$7E            ; PI?
76         bne     L11
77         lda     #$5E            ; Load screen code for PI
78         bne     cputdirect
79 L11:    ora     #$40
80         bne     cputdirect      ; Branch always
81
82 ; Set cursor position, calculate RAM pointers
83
84 plot:   ldy     CURS_X
85         ldx     CURS_Y
86         clc
87         jmp     PLOT
88
89 ; Write one character to the screen without doing anything else, return X
90 ; position in Y
91
92 putchar:
93         ldx     IndReg
94         ldy     #$0F
95         sty     IndReg
96         ora     revers          ; Set revers bit
97         ldy     CURS_X
98         sta     (CharPtr),y     ; Set char
99         stx     IndReg
100         rts
101
102