Ayuda código detección si se presionó tecla

Iniciado por 0x0309, 18 Julio 2009, 01:38 AM

0 Miembros y 1 Visitante están viendo este tema.

0x0309

Hola, quiero conseguir emular la función kbhit() de conio.h pero para dos.
Conseguí el siguiente código en este libro (1001 trucos para DOS y PC y 111 Trucos más de DOS 6 - Kris Jamsa)

que se ensambla con el debug.exe así:


N CHECKKEY.COM

A 100
MOV AH,B
INT 21
AND AL,1
MOV AH,4C
INT 21

R CX
A
W
Q




Funciona, pero el problema es que tengo es que no me reconoce las teclas de las flechas. Alguien que sepa de ensamblador podría por favor ayudarme con el código de arriba, qué le falta para que me detecte las teclas de las flechas.


Yo lo construyo así dentro de cmd:

debug.exe < arhivo.txt


y lo pruebo con este batch:


@ECHO OFF
:ini
cls
CHECKKEY.COM
if errorlevel 1 echo.Presiono una tecla&pause
goto ini


Cuando presiono una tecla como las del abecedario, el espacio, cambia el errorlevel, pero cuando presiono las flechas o las teclas insertar, avanzar página no las detecta, y se marea para seguir detectando.

Eternal Idol

#1
No me parece una forma muy util realmente ... para probar lo logico seria hacer un bucle y ensamblar el codigo.

Esto es lo que estas usando:
http://www.ctyme.com/intr/rb-2565.htm

Y con estas dos si funcionan todas las teclas:
http://www.ctyme.com/intr/rb-1755.htm
http://www.ctyme.com/intr/rb-1754.htm

Primero haces el check y si hay tecla entonces la lees, sino la siguiente vez te dira que hay tecla por la anterior.

La logica de la funcion vendria a ser algo asi:

Código (asm) [Seleccionar]
kbhit:
 mov ah, 01h
 int 16h ;llamamos a la BIOS para comprobar si alguna tecla fue pulsada
 pushf ;el resultado esta en el flag Z, sexto bit del registro de flags
 pop ax
 and ax, 64
 ret
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

YST

#2
No se si es mas o menos a si lo que quieres .

Código (asm) [Seleccionar]

org 100h
bucle:
mov ah,00h
int 16h
cmp al,13
jne @f
mov dx,intro
jmp imprimir
@@:
cmp ah,'M'
jne @f
mov dx,Right
jmp imprimir
@@:
cmp ah,'K'
jne @f
mov dx,left
jmp imprimir
@@:
cmp ah,'H'
jne @f
mov dx,up
jmp imprimir
@@:
cmp ah,'P'
jne @f
mov dx,down
jmp imprimir
@@:
mov byte[Cadena],al
mov dx,Cadena
imprimir:
mov ah,09h
int 21h
jmp bucle
Right db "->",13,10,24h
left db "<-",13,10,24h
up db "[UP]",13,10,24h
down db "[Down]",13,10,24h
intro db '[Intro]',13,10,24h
Cadena db 0,13,10,24h       


Yo le enseñe a Kayser a usar objetos en ASM

Eternal Idol

No YST, mejor consulta la documentacion sobre kbhit.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

YST

#4
Cita de: Eternal Idol en 18 Julio 2009, 20:27 PM
No YST, mejor consulta la documentacion sobre kbhit.
Tienes toda la razón , no lei esa parte o cuando lei el post no estaba
Citar
« Última modificación: Ayer a las 01:58 por 0x0309 »
EDIT:
Según entendi por esta explicación :
CitarLa función kbhit retorna 0 si no se ha registrado una pulsada de tecla; si hay una disponible, entonces el valor retornado es distinto a cero
La función seria algo a si :P
Código (ASM) [Seleccionar]
kbhit:
mov ah, 01h
int 16h
jz a1
xor ax,ax
jmp a1.salir
a1:
mov ax,1
.salir:
ret    


Yo le enseñe a Kayser a usar objetos en ASM

Eternal Idol

Cita de: YST en 19 Julio 2009, 00:39 AMTienes toda la razón , no lei esa parte o cuando lei el post no estaba

Siempre estuvo, en la primera oracion del hilo.

Cita de: YST en 19 Julio 2009, 00:39 AMLa función seria algo a si

Ahora si, aunque me gusto mas la forma que use para el valor de retorno.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

YST

Cita de: Eternal Idol en 19 Julio 2009, 10:14 AM
Cita de: YST en 19 Julio 2009, 00:39 AMTienes toda la razón , no lei esa parte o cuando lei el post no estaba

Siempre estuvo, en la primera oracion del hilo.
Entonces ya es hora que me compre lentes :xD


Yo le enseñe a Kayser a usar objetos en ASM