]> git.sur5r.net Git - cc65/blob - libsrc/osic1p/cgetc.s
Merge pull request #215 from greg-king5/c64-init
[cc65] / libsrc / osic1p / cgetc.s
1 ;\r
2 ; char cgetc (void);\r
3 ;\r
4 \r
5         .constructor    initcgetc\r
6         .export         _cgetc\r
7         .import         cursor\r
8 \r
9         .include        "osic1p.inc"\r
10         .include        "extzp.inc"\r
11         .include        "zeropage.inc"\r
12 \r
13 ; Initialize one-character buffer that is filled by kbhit()\r
14         .segment        "INIT"\r
15 initcgetc:\r
16         lda     #$00\r
17         sta     CHARBUF         ; No character in buffer initially\r
18         rts\r
19 \r
20 ; Input routine from 65V PROM MONITOR, show cursor if enabled\r
21         .code\r
22 _cgetc:\r
23         lda     CHARBUF         ; character in buffer available?\r
24         beq     nobuffer\r
25         tax                     ; save character in X\r
26         lda     #$00\r
27         sta     CHARBUF         ; empty buffer\r
28         beq     restorex        ; restore X and return\r
29 nobuffer:\r
30         lda     cursor          ; show cursor?\r
31         beq     nocursor\r
32         ldy     CURS_X\r
33         lda     (SCREEN_PTR),y  ; fetch current character\r
34         sta     tmp1            ; save it\r
35         lda     #$A1            ; full white square\r
36         sta     (SCREEN_PTR),y  ; store at cursor position\r
37 nocursor:\r
38         jsr     INPUTC          ; get input character in A\r
39         ldx     cursor\r
40         beq     done            ; was cursor on?\r
41         tax                     ; save A in X\r
42         lda     tmp1            ; fetch saved character\r
43         ldy     CURS_X\r
44         sta     (SCREEN_PTR),y  ; store at cursor position\r
45 \r
46 restorex:\r
47         txa                     ; restore saved character from X\r
48 done:\r
49         ldx     #$00            ; high byte of int return value\r
50         rts\r