Ensamblador - Teclado

 
Vista:

Teclado

Publicado por Federico (2 intervenciones) el 30/11/2004 13:47:39
Hola tengo la siguiente duda yo estoy realizando un controlador de eventos y necesito controlar el teclado, yo se que esta conectado al IRQ1 y que para controlar las pulsaciones de tecla se usa la interrupcion 9, ahora yo con esta interrupcion logre que me retorne el codigo de scan, pero yo necesito el codigo ascii, para lo cual debo acceder al buffer circular del teclado, es aqui donde aparece mi complejidadad(Pocos conocimientos de ASM), alguien me podria decir como acceder al mismo y tomar el ascii, y luego borrar el buffer, necesito si o si manejar las rutinas del bios para que el controlador se transportable.

Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Teclado

Publicado por vaca_loca (12 intervenciones) el 30/11/2004 17:56:07
Podrias utilizar la interrupcion 16h, funcion 00h o 10h.

ejemplo 1
xor ah , ah
int 16h
retorna el scancode en AH y el ASCII en AL

ejemplo 2
mov ah , 10h
int 16h
retorna el scancode en AH y el ASCII en AL

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Teclado

Publicado por federico (2 intervenciones) el 01/12/2004 13:50:57
Ahora las interrupciones que me dijiste detienen el programa?

Ya que lo que yo necesito es que no tengan eco y no detengan la ejecucion del programa

Muchas Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Teclado

Publicado por vaca_loca (12 intervenciones) el 01/12/2004 22:32:39
ok Federico
entonces deberias usar la int 16 funcion 11h.
Si hay una pulsacion disponible retorna el flag Z en cero,
scancode en AH y ASCII en AL.

No he podido comprobar que esta o las otras func. mencionadas
borren el buffer, a pesar de que en la documentacion corrrespondiente
se informa que si.

En los AT compatibles el buffer abarca desde 0040:001E hasta
0040:003E. Podria ser la siguiente rutina para borrar.

push ax
mov ax,40h
mov es,ax
pop ax
mov di,1Eh
mov cx,10h
xor ax,ax ; ax=0
rep stosw
ret

buena suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar