2020-11-01 13:06:01 +01:00
|
|
|
; Keyboard driver
|
|
|
|
; @author Daniele Verducci
|
|
|
|
;
|
|
|
|
; Requires declaration of following pointers, one for every column of the keys grid:
|
|
|
|
; KEYB_A0_REG
|
|
|
|
; KEYB_A1_REG
|
|
|
|
; KEYB_A2_REG
|
|
|
|
; KEYB_A3_REG
|
|
|
|
; KEYB_A4_REG
|
|
|
|
; These address must be exclusive if a decoder is not present.
|
|
|
|
;
|
|
|
|
; Example (no decoder):
|
|
|
|
; KEYB_A0_REG = 0000001
|
|
|
|
; KEYB_A1_REG = 0000010
|
|
|
|
; KEYB_A2_REG = 0000100
|
|
|
|
; KEYB_A3_REG = 0001000
|
|
|
|
; etc...
|
|
|
|
;
|
|
|
|
; Example (with decoder):
|
|
|
|
; KEYB_A0_REG = 0000000
|
|
|
|
; KEYB_A1_REG = 0000001
|
|
|
|
; KEYB_A2_REG = 0000010
|
|
|
|
; KEYB_A3_REG = 0000011
|
|
|
|
; etc...
|
|
|
|
|
2020-11-22 23:01:22 +01:00
|
|
|
; Keyboard config (IO port 1)
|
|
|
|
KEYB_A0_REG: EQU IO_1 + %00000001
|
|
|
|
KEYB_A1_REG: EQU IO_1 + %00000010
|
|
|
|
KEYB_A2_REG: EQU IO_1 + %00000100
|
|
|
|
KEYB_A3_REG: EQU IO_1 + %00001000
|
|
|
|
KEYB_A4_REG: EQU IO_1 + %00010000
|
2020-11-01 13:06:01 +01:00
|
|
|
|
|
|
|
; Reads the keyboard
|
|
|
|
; @return: a 0-terminated array of keycodes representing the pressed keys
|
|
|
|
Keyb_read:
|
2020-11-01 21:11:42 +01:00
|
|
|
in a, (KEYB_A0_REG)
|
|
|
|
cp 0
|
|
|
|
jp z, _keyb_read_a1
|
|
|
|
add a, %01000000
|
|
|
|
call Lcd_printc ; A already contains char to print
|
|
|
|
_loop:
|
|
|
|
in a, (KEYB_A0_REG)
|
|
|
|
cp 0
|
|
|
|
jp nz, _loop
|
|
|
|
ret
|
|
|
|
_keyb_read_a1:
|
|
|
|
in a, (KEYB_A1_REG)
|
|
|
|
cp 0
|
|
|
|
ret z
|
|
|
|
add a, %01010000
|
|
|
|
call Lcd_printc ; A already contains char to print
|
|
|
|
_loop2:
|
|
|
|
in a, (KEYB_A1_REG)
|
|
|
|
cp 0
|
|
|
|
jp nz, _loop2
|
|
|
|
ret
|