A86: Problem reading keyboard from port (1)
[Prev][Next][Index][Thread]
A86: Problem reading keyboard from port (1)
I am trying to make an input routine which can determine the current status
of the keyboard without pausing the keyboard. This is necessary in the
program I am making -- I want there to be a blinking cursor (not the default
system one.)
The algorithm I made so far works pretty well (except for the repetition of
characters -- I think I can fix that pretty easily, though,) however, when
you press Y it will show "YZYZYZYZYYZZYZ" etc and if you press Z, it shows
"Z Z ZZZ Z Z Z" etc. Does anyone know how to fix this?
Here's my code. Thanks!!
----------------------------------------------------------------------------
-----------------------------------------------------------------------
Input_Loop:
; ld a,(CursorTime)
; inc a
; ld (CursorTime),a
; cp 0
; jr z, CursorBlink
ld c,0
Input_PortLoop: ;Get keys
ld hl,PortMasks
ld d,0
ld e,c
add hl,de
ld a,(hl)
out (1),a
in a,(1)
call CheckAllBits
inc c
ld a,5
cp c
jr nz, Input_PortLoop
ld a,%00111111 ; Check for Exit because I don't want to get
stuck in the loop
out (1),a
in a,(1)
bit 6,a
jr nz, Input_Loop
ret
CheckAllBits:
ld b,0 ; I don't know a better way to do
this :-(
bit 5,a
jr z, GotKey
ld b,1
bit 4,a
jr z, GotKey
ld b,2
bit 3,a
jr z, GotKey
ld b,3
bit 2,a
jr z, GotKey
ld b,4
bit 1,a
jr z, GotKey
ld b,5
bit 0,a
jr z, GotKey
ret
GotKey:
ld hl,KeyMatrixU
ld d,0
ld e,5
xor a
cp b
jr z, GotKey_GotY
GotKey_MatrixYLoop:
add hl,de
djnz GotKey_MatrixYLoop
GotKey_GotY:
ld e,c
add hl,de
ld a,(Hl)
call _putc
ret
PortMasks:
.db %01011111
.db %01101111
.db %01110111
.db %01111011
.db %01111101
KeyMatrixU:
.db "ABCDE"
.db "FGHIJ"
.db "KLMNO"
.db "PQRST"
.db "'UVWX"
.db " YZ "