]> git.sur5r.net Git - cc65/blob - libsrc/c128/cgetc.s
em drivers for VDC (both C128 native and C128 in C64 mode)
[cc65] / libsrc / c128 / cgetc.s
1 ;
2 ; Ullrich von Bassewitz, 06.08.1998
3 ;
4 ; char cgetc (void);
5 ;
6
7         .export         _cgetc
8         .constructor    initcgetc
9         .destructor     donecgetc
10
11         .import         cursor
12
13         .include        "c128.inc"
14
15 ;--------------------------------------------------------------------------
16
17 _cgetc: lda     KEY_COUNT       ; Get number of characters
18         bne     L2              ; Jump if there are already chars waiting
19
20 ; Switch on the cursor if needed
21
22         lda     cursor
23         beq     L1
24         jsr     CURS_ON
25         jmp     L2
26 L1:     lda     #$01
27         jsr     CURS_OFF
28 L2:     lda     KEY_COUNT       ; Check characters again
29         beq     L2
30         jsr     CURS_OFF        ; Switch cursor off, if characters available
31
32         jsr     KBDREAD         ; Read char and return in A
33         ldx     #0
34         rts
35
36 ;--------------------------------------------------------------------------
37 ; Module constructor/destructor
38
39 .bss
40 keyvec: .res    2
41
42 .code
43 initcgetc:
44
45 ; Save the old vector
46
47         lda     KeyStoreVec
48         sta     keyvec
49         lda     KeyStoreVec+1
50         sta     keyvec+1
51
52 ; Set the new vector. I can only hope that this works for other C128
53 ; versions...
54
55         lda     #<$C6B7
56         ldx     #>$C6B7
57
58 SetVec: sei
59         sta     KeyStoreVec
60         stx     KeyStoreVec+1
61         cli
62         rts
63
64 donecgetc:
65         lda     #$00
66         sta     SCROLL
67         lda     keyvec
68         ldx     keyvec+1
69         bne     SetVec
70