; Visualizando los scancodes de las teclas codificadas con "Find_Key" ORG 50000 Bucle_entrada: call Wait_For_Key Pedir_Tecla: call Find_Key ; Llamamos a la rutina jr nz, Pedir_Tecla ; Repetir si la tecla no es valida inc d jr z, Pedir_Tecla ; Repetir si no se pulsa ninguna tecla dec d ld a, d ; Guardamos en A copia del resultado cp $21 ; Comprobamos si A == 21h (enter) ret z ; Si no lo es, repetir call PrintHex ; Imprimimos el scancode hex en pantalla call PrintSpace ; Espacio para separar call Wait_For_No_Key ; Esperamos a que el usuario SUELTE la tecla jr Pedir_Tecla ; Repetir hasta que arriba un ENTER ; ($21 pulsado) haga el ret z a BASIC INCLUDE "utils.asm" ; Debemos incluir, además, el código de Find_Key dentro de ; este ejemplo para que ensamble correctamente. ;----------------------------------------------------------------------- ; Chequea el teclado para detectar la pulsacion de una tecla. ; Devuelve un codigo en el registro D que indica: ; Bits 0, 1 y 2 de "D": Fila de teclas (puerto) detectada. ; Bits 3, 4 y 5 de "D": Posicion de la tecla en esa media fila ; ; Flags: ZF desactivado: Mas de una tecla pulsada ; ZF activado: Tecla correctamente leida ;----------------------------------------------------------------------- Find_Key: ld de, $ff2f ; Valor inicial D = "ninguna tecla" ld bc, $fefe ; Puerto NXHALF: in a, (c) cpl and %00011111 jr z, NPRESS ; Saltar si ninguna tecla pulsada inc d ; Comprobamos si hay mas de 1 tecla pulsada ret nz ; Si es asi, volver con Z a 0 ld h, a ; Calculo del valor de la tecla ld a, e KLOOP: sub 8 srl h jr nc, KLOOP ret nz ; Comprobar si mas de una tecla pulsada ld d, a ; Guardar valor de tecla en D NPRESS: ; Comprobar el resto de semifilas dec e rlc b jr c, NXHALF ; Repetimos escaneo para otra semifila cp a ; Ponemos flag a zero ret z ; Volvemos END 50000