; 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 $1F 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