]> git.sur5r.net Git - cc65/blob - libsrc/c128/cpeekc.s
Fixed gcc compiler warning (#867)
[cc65] / libsrc / c128 / cpeekc.s
1 ;
2 ; 2016-02-28, Groepaz
3 ; 2017-06-26, Greg King
4 ;
5 ; char cpeekc (void);
6 ;
7
8         .export         _cpeekc
9
10         .import         plot, popa
11
12         .include        "zeropage.inc"
13         .include        "c128.inc"
14
15
16 _cpeekc:
17         lda     MODE
18         bmi     @c80
19
20         ldy     CURS_X
21         lda     (SCREEN_PTR),y  ; get char
22
23 @return:
24         and     #<~$80          ; remove reverse flag
25
26 ; Convert the screen code into a PetSCII code.
27 ; $00 - $1F: +$40
28 ; $20 - $3F
29 ; $40 - $5f: +$20
30 ; $60 - $7F: +$40
31
32         cmp     #$20
33         bcs     @sk1            ;(bge)
34         ora     #$40
35         rts
36
37 @sk1:   cmp     #$40
38         bcc     @end            ;(blt)
39         cmp     #$60
40         bcc     @sk2            ;(blt)
41         ;sec
42         adc     #$20 - $01
43 @sk2:   ;clc                    ; both above cmp and adc clear carry flag
44         adc     #$20
45 @end:   rts
46
47 @c80:
48         lda     SCREEN_PTR
49         ldy     SCREEN_PTR+1
50         clc
51         adc     CURS_X
52         bcc     @s
53         iny
54
55         ; get byte from VDC mem
56 @s:     ldx     #VDC_DATA_LO
57         stx     VDC_INDEX
58 @L0:    bit     VDC_INDEX
59         bpl     @L0
60         sta     VDC_DATA
61         dex
62         stx     VDC_INDEX
63         sty     VDC_DATA
64
65         ldx     #VDC_RAM_RW
66         stx     VDC_INDEX
67 @L1:    bit     VDC_INDEX
68         bpl     @L1             ; wait for blanking
69         lda     VDC_DATA
70         jmp     @return