]> git.sur5r.net Git - cc65/blob - libsrc/atmos/cgetc.s
Merge pull request #249 from polluks/master
[cc65] / libsrc / atmos / cgetc.s
1 ;
2 ; 2003-04-13, Ullrich von Bassewitz
3 ; 2014-09-04, Greg King
4 ;
5 ; char cgetc (void);
6 ;
7
8         .export         _cgetc
9         .constructor    initcgetc
10
11         .import         cursor
12         .forceimport    disable_caps
13
14         .include        "atmos.inc"
15
16
17 ; ------------------------------------------------------------------------
18 ;
19
20 .proc   _cgetc
21
22         lda     KEYBUF          ; Do we have a character?
23         bmi     @L2             ; Yes: Get it
24
25 ; No character, enable cursor and wait
26
27         lda     cursor          ; Should cursor be off?
28         beq     @L1             ; Skip if so
29         lsr     STATUS
30         sec                     ; Cursor ON
31         rol     STATUS
32 @L1:    lda     KEYBUF
33         bpl     @L1
34
35 ; If the cursor was enabled, disable it now
36
37         ldx     cursor
38         beq     @L2
39         dec     STATUS          ; Clear bit zero
40
41 ; We have the character, clear the "available" flag
42
43 @L2:    and     #$7F            ; Mask out avail flag
44         sta     KEYBUF
45         ldx     #>$0000
46         ldy     MODEKEY
47         cpy     #FUNCTKEY
48         bne     @L3
49         ora     #$80            ; FUNCT-key pressed
50
51 ; Done
52
53 @L3:    rts
54
55 .endproc
56
57 ; ------------------------------------------------------------------------
58 ; Switch the cursor off. Code goes into the INIT segment
59 ; which may be reused after it is run.
60
61 .segment        "INIT"
62
63 initcgetc:
64         lsr     STATUS
65         asl     STATUS          ; Clear bit zero
66         rts