1;
2; Ullrich von Bassewitz, 06.08.1998
3;
4; char cgetc (void);
5;
6
7        .export         _cgetc
8        .import         cursor
9
10        .include        "cbm_kernal.inc"
11        .include        "c64.inc"
12
13_cgetc: lda     KEY_COUNT       ; Get number of characters
14        bne     L3              ; Jump if there are already chars waiting
15
16; Switch on the cursor if needed
17
18        lda     CURS_FLAG
19        pha
20        lda     cursor
21        jsr     setcursor
22L1:     lda     KEY_COUNT
23        beq     L1
24        ldx     #0
25        pla
26        bne     L2
27        inx
28L2:     txa
29        jsr     setcursor
30
31L3:     jsr     KBDREAD         ; Read char and return in A
32        ldx     #0
33        rts
34
35
36; Switch the cursor on or off
37
38.proc   setcursor
39
40        tax                     ; On or off?
41        bne     seton           ; Go set it on
42        lda     CURS_FLAG       ; Is the cursor currently off?
43        bne     crs9            ; Jump if yes
44        lda     #1
45        sta     CURS_FLAG       ; Mark it as off
46        lda     CURS_STATE      ; Cursor currently displayed?
47        beq     crs8            ; Jump if no
48        ldy     CURS_X          ; Get the character column
49        lda     (SCREEN_PTR),y  ; Get character
50        eor     #$80
51        sta     (SCREEN_PTR),y  ; Store character back
52        lda     CURS_COLOR
53        sta     (CRAM_PTR),y    ; Store color back
54crs8:   lda     #0
55        sta     CURS_STATE      ; Cursor not displayed
56crs9:   rts
57
58seton:  lda     #0
59        sta     CURS_FLAG
60        rts
61
62.endproc
63