]> git.sur5r.net Git - cc65/blob - libsrc/apple2enh/cputc.s
Moved additional zeropage variables into an extra module.
[cc65] / libsrc / apple2enh / 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         .constructor    initconio
9         .export         _cputcxy, _cputc
10         .export         _gotoxy, cputdirect
11         .export         newline, putchar
12
13         .import         popa, SETWND, BASCALC
14
15         .include        "../apple2/apple2.inc"
16
17
18 initconio:
19         lda     #$FF            ; Normal character display mode
20         sta     INVFLG
21         sta     SETALTCHAR      ; Switch in alternate charset
22         lda     #$00
23         jsr     SETWND          ; Reset text window to full screen
24         rts
25
26 ; Plot a character - also used as internal function
27
28 _cputcxy:
29         pha                     ; Save C
30         jsr     popa            ; Get Y
31         jsr     _gotoxy
32         pla                     ; Restore C
33
34 _cputc:
35         cmp     #$0D            ; Test for \r = carrage return
36         bne     L1
37         stz     CH              ; Goto left edge of screen
38         rts                     ; That's all we do
39 L1:
40         cmp     #$0A            ; Test for \n = line feed
41         beq     newline
42         ora     #$80            ; Turn on high bit
43
44 cputdirect:
45         jsr     putchar
46         inc     CH              ; Bump to next column
47         lda     CH
48         cmp     WNDWDTH
49         bne     return
50         stz     CH
51 return:
52         rts
53
54 putchar:
55         ldy     INVFLG
56         cpy     #$FF            ; Normal character display mode?
57         beq     put
58         cmp     #$E0            ; Lowercase?
59         bmi     mask
60         and     #$7F            ; Inverse lowercase
61         bra     put
62 mask:
63         and     INVFLG          ; Apply normal, inverse, flash
64 put:
65         ldy     CH
66         bit     RD80VID         ; In 80 column mode?
67         bpl     col40           ; No, in 40 cols
68         pha
69         tya
70         lsr                     ; Div by 2
71         tay
72         pla
73         bcs     col40           ; Odd cols go in 40 col memory
74         bit     HISCR
75         sta     (BASL),Y
76         bit     LOWSCR
77         rts
78 col40:
79         sta     (BASL),Y
80         rts
81
82 newline:
83         lda     CH
84         pha
85         inc     CV
86         lda     CV
87         cmp     #24
88         bne     L2
89         lda     #$00
90         sta     CV
91 L2:
92         jsr     BASCALC
93         pla
94         sta     CH
95         rts
96
97 _gotoxy:
98         sta     CV              ; Store Y
99         jsr     BASCALC
100         jsr     popa            ; Get X
101         sta     CH              ; Store X
102         rts