pato-z80-home-computer/assembly/bios/drivers/keyboard.asm

57 lines
1.2 KiB
NASM
Raw Normal View History

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...
; 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