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