Squeezed bytes and cycles out of the kbhit functions for almost all platforms.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4480 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz
2009-11-24 18:31:16 +00:00
parent 7357b44104
commit bfbf94404b
11 changed files with 111 additions and 80 deletions

View File

@@ -1,17 +1,23 @@
; ;
; Christian Groessler, 19-Feb-2000 ; Christian Groessler, 19-Feb-2000
; ;
; int kbhit (void); ; unsigned char kbhit (void);
; ;
.export _kbhit .export _kbhit
.import return0, return1 .import return1
.include "atari.inc" .include "atari.inc"
_kbhit: .proc _kbhit
ldx CH ; last pressed key
inx ; 255 means "no key" ldx CH ; last pressed key
bne L1 inx ; 255 means "no key"
jmp return0 bne L1
L1: jmp return1 txa ; X = A = 0
rts
L1: jmp return1
.endproc

View File

@@ -1,21 +1,25 @@
; ;
; Ullrich von Bassewitz, 18.08.1998 ; Ullrich von Bassewitz, 18.08.1998
; ;
; int kbhit (void); ; unsigned char kbhit (void);
; ;
.export _kbhit .export _kbhit
.import return0, return1
.include "c128.inc" .include "c128.inc"
_kbhit:
.proc _kbhit
ldx #0 ; High byte of return is always zero
lda KEY_COUNT ; Get number of characters lda KEY_COUNT ; Get number of characters
; ora FKEY_COUNT ; Or with number of chars from function keys ; ora FKEY_COUNT ; Or with number of chars from function keys
bne L1 beq L9
jmp return0 lda #1
L1: jmp return1 L9: rts
.endproc

View File

@@ -1,20 +1,25 @@
; ;
; Ullrich von Bassewitz, 06.08.1998 ; Ullrich von Bassewitz, 06.08.1998
; ;
; int kbhit (void); ; unsigned char kbhit (void);
; ;
.export _kbhit .export _kbhit
.import return0, return1
.include "plus4.inc" .include "plus4.inc"
_kbhit:
.proc _kbhit
ldx #0 ; High byte of return is always zero
lda KEY_COUNT ; Get number of characters lda KEY_COUNT ; Get number of characters
ora FKEY_COUNT ; Or with number of chars from function keys ora FKEY_COUNT ; Or with number of chars from function keys
bne L1 beq L9
jmp return0 lda #1
L1: jmp return1 L9: rts
.endproc

View File

@@ -1,20 +1,23 @@
; ;
; Ullrich von Bassewitz, 06.08.1998 ; Ullrich von Bassewitz, 06.08.1998
; ;
; int kbhit (void); ; unsigned char kbhit (void);
; ;
.export _kbhit .export _kbhit
.import return0, return1
.include "c64.inc" .include "c64.inc"
_kbhit:
.proc _kbhit
ldx #0 ; High byte of return is always zero
lda KEY_COUNT ; Get number of characters lda KEY_COUNT ; Get number of characters
bne L1 beq L9
jmp return0 lda #1
L1: jmp return1 L9: rts
.endproc

View File

@@ -1,23 +1,24 @@
; ;
; Ullrich von Bassewitz, 06.08.1998 ; Ullrich von Bassewitz, 06.08.1998
; ;
; int kbhit (void); ; unsigned char kbhit (void);
; ;
.export _kbhit .export _kbhit
.import return0, return1
.import keyidx: zp .import keyidx: zp
.proc _kbhit .proc _kbhit
lda keyidx ; Get number of characters
bne L1 ldx #0 ; High byte of return is always zero
jmp return0 lda keyidx ; Get number of characters
L1: jmp return1 beq L9
lda #1
L9: rts
.endproc .endproc

View File

@@ -1,23 +1,22 @@
; ;
; Ullrich von Bassewitz, 06.08.1998 ; Ullrich von Bassewitz, 06.08.1998
; ;
; int kbhit (void); ; unsigned char kbhit (void);
; ;
.export _kbhit .export _kbhit
.import return0, return1
.import keyidx: zp .import keyidx: zp
.proc _kbhit .proc _kbhit
lda keyidx ; Get number of characters
bne L1 ldx #0 ; High byte of return is always zero
jmp return0 lda keyidx ; Get number of characters
L1: jmp return1 beq L9
lda #1
L9: rts
.endproc .endproc

View File

@@ -7,12 +7,16 @@
; unsigned char kbhit (void); ; unsigned char kbhit (void);
.export _kbhit .export _kbhit
.import return0, return1
.include "../inc/geossym.inc" .include "../inc/geossym.inc"
_kbhit: .proc _kbhit
lda pressFlag
bmi L1 ldx #0 ; High byte of result
jmp return0 lda pressFlag
L1: jmp return1 rol ; Bit 7 is new key flag
txa ; A = 0
rol
rts
.endproc

View File

@@ -7,7 +7,7 @@
.export _kbhit .export _kbhit
.export KBEDG .export KBEDG
.export KBSTL .export KBSTL
.import return0, return1 .import return1
; -------------------------------------------------------------------------- ; --------------------------------------------------------------------------
; The Atari Lynx has a very small keyboard - only 3 keys ; The Atari Lynx has a very small keyboard - only 3 keys
@@ -49,7 +49,8 @@ _kbhit:
sta KBNPR ; inverted previous ones pressed sta KBNPR ; inverted previous ones pressed
stx KBPRV stx KBPRV
lda KBEDG lda KBEDG
beq @L1 beq @L1
jmp return1 ; Key hit jmp return1 ; Key hit
@L1:
jmp return0 ; No new keys hit @L1: tax ; No new keys hit
rts

View File

@@ -1,20 +1,22 @@
; ;
; Ullrich von Bassewitz, 26.11.1998 ; Ullrich von Bassewitz, 26.11.1998
; ;
; int kbhit (void); ; unsigned char kbhit (void);
; ;
.export _kbhit .export _kbhit
.import return0, return1
.include "pet.inc" .include "pet.inc"
_kbhit:
lda KEY_COUNT ; Get number of characters .proc _kbhit
bne L1
jmp return0 ldx #0 ; High byte of return is always zero
L1: jmp return1 lda KEY_COUNT ; Get number of characters
beq L9
lda #1
L9: rts
.endproc

View File

@@ -1,21 +1,24 @@
; ;
; Ullrich von Bassewitz, 06.08.1998 ; Ullrich von Bassewitz, 06.08.1998
; ;
; int kbhit (void); ; unsigned char kbhit (void);
; ;
.export _kbhit .export _kbhit
.import return0, return1
.include "plus4.inc" .include "plus4.inc"
_kbhit:
.proc _kbhit
ldx #0 ; High byte of return is always zero
lda KEY_COUNT ; Get number of characters lda KEY_COUNT ; Get number of characters
ora FKEY_COUNT ; Or with number of chars from function keys ora FKEY_COUNT ; Or with number of chars from function keys
bne L1 beq L9
jmp return0 lda #1
L1: jmp return1 L9: rts
.endproc

View File

@@ -1,20 +1,23 @@
; ;
; Ullrich von Bassewitz, 06.08.1998 ; Ullrich von Bassewitz, 06.08.1998
; ;
; int kbhit (void); ; unsigned char kbhit (void);
; ;
.export _kbhit .export _kbhit
.import return0, return1
.include "vic20.inc" .include "vic20.inc"
_kbhit:
.proc _kbhit
ldx #0 ; High byte of return is always zero
lda KEY_COUNT ; Get number of characters lda KEY_COUNT ; Get number of characters
bne L1 beq L9
jmp return0 lda #1
L1: jmp return1 L9: rts
.endproc