better handling of the cursor, use kernal function to read key, not the UART directly
This commit is contained in:
@@ -244,4 +244,5 @@ UDTIM := $FFEA
|
||||
KBDREAD := $D8C1
|
||||
.elseif .def(__C65__) || .def(__MEGA65__)
|
||||
; CLRSCR := $E0EC ; ???
|
||||
KBDREAD := $E006
|
||||
.endif
|
||||
|
||||
32
libsrc/c65/cgetc.s
Normal file
32
libsrc/c65/cgetc.s
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
|
||||
.include "cbm_kernal.inc"
|
||||
.import cursor
|
||||
.export _cgetc
|
||||
_cgetc:
|
||||
|
||||
lda cursor
|
||||
beq nocursor
|
||||
|
||||
; enable the cursor
|
||||
clc
|
||||
jsr CURSOR
|
||||
|
||||
nocursor:
|
||||
; wait for a key
|
||||
; FIXME: is $d610 mega65 specific?
|
||||
:
|
||||
lda $d610
|
||||
beq :-
|
||||
|
||||
jsr KBDREAD
|
||||
|
||||
pha
|
||||
; disable the cursor
|
||||
sec
|
||||
jsr CURSOR
|
||||
|
||||
pla
|
||||
ldx #0
|
||||
rts
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
;
|
||||
; unsigned char cursor (unsigned char onoff);
|
||||
;
|
||||
|
||||
.include "cbm_kernal.inc"
|
||||
|
||||
.export _cursor
|
||||
.import cursor
|
||||
|
||||
.proc _cursor
|
||||
pha
|
||||
; A != 0 to enable, 0 to disable
|
||||
cmp #0
|
||||
beq disable ; C = 1
|
||||
clc
|
||||
disable:
|
||||
; C = 0 to enable, 1 to disable
|
||||
jsr CURSOR
|
||||
|
||||
ply ; onoff into Y
|
||||
ldx #0 ; High byte of result
|
||||
lda cursor ; Get old value
|
||||
sty cursor ; Set new value
|
||||
rts
|
||||
.endproc
|
||||
|
||||
@@ -1,17 +1,7 @@
|
||||
|
||||
|
||||
; FIXME: is $d610 mega65 specific?
|
||||
; FIXME: this should rather use the kernal (with keyboard buffer etc)
|
||||
|
||||
.export _cgetc
|
||||
_cgetc:
|
||||
|
||||
: lda $d610
|
||||
beq :-
|
||||
ldx #0
|
||||
stx $d610
|
||||
rts
|
||||
|
||||
.export _kbhit
|
||||
_kbhit:
|
||||
lda $d610
|
||||
@@ -19,6 +9,6 @@ _kbhit:
|
||||
|
||||
lda #1
|
||||
:
|
||||
ldx #0
|
||||
ldx #>$0000
|
||||
rts
|
||||
|
||||
|
||||
32
libsrc/mega65/cgetc.s
Normal file
32
libsrc/mega65/cgetc.s
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
|
||||
.include "cbm_kernal.inc"
|
||||
.import cursor
|
||||
.export _cgetc
|
||||
_cgetc:
|
||||
|
||||
lda cursor
|
||||
beq nocursor
|
||||
|
||||
; enable the cursor
|
||||
clc
|
||||
jsr CURSOR
|
||||
|
||||
nocursor:
|
||||
; wait for a key
|
||||
; FIXME: is $d610 mega65 specific?
|
||||
:
|
||||
lda $d610
|
||||
beq :-
|
||||
|
||||
jsr KBDREAD
|
||||
|
||||
pha
|
||||
; disable the cursor
|
||||
sec
|
||||
jsr CURSOR
|
||||
|
||||
pla
|
||||
ldx #0
|
||||
rts
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
;
|
||||
; unsigned char cursor (unsigned char onoff);
|
||||
;
|
||||
|
||||
.include "cbm_kernal.inc"
|
||||
|
||||
.export _cursor
|
||||
.import cursor
|
||||
|
||||
.proc _cursor
|
||||
pha
|
||||
; A != 0 to enable, 0 to disable
|
||||
cmp #0
|
||||
beq disable ; C = 1
|
||||
clc
|
||||
disable:
|
||||
; C = 0 to enable, 1 to disable
|
||||
jsr CURSOR
|
||||
|
||||
ply ; onoff into Y
|
||||
ldx #0 ; High byte of result
|
||||
lda cursor ; Get old value
|
||||
sty cursor ; Set new value
|
||||
rts
|
||||
.endproc
|
||||
|
||||
@@ -1,17 +1,7 @@
|
||||
|
||||
|
||||
; FIXME: is $d610 mega65 specific?
|
||||
; FIXME: this should rather use the kernal (with keyboard buffer etc)
|
||||
|
||||
.export _cgetc
|
||||
_cgetc:
|
||||
|
||||
: lda $d610
|
||||
beq :-
|
||||
ldx #0
|
||||
stx $d610
|
||||
rts
|
||||
|
||||
.export _kbhit
|
||||
_kbhit:
|
||||
lda $d610
|
||||
|
||||
Reference in New Issue
Block a user