Ensamblador - int 9h teclado por hardware

 
Vista:

int 9h teclado por hardware

Publicado por amuchamu (1 intervención) el 12/05/2004 17:43:11
Hola. Estoy haciendo un juego y necesito utilizar la interrupción 09h, que se activa cuando se pulsa o suelta una tecla (creo). Quiero que cuando salte la interrupción, el programa vaya a una dirección que yo le ponga, no sé si me explico. Lo que hago es meter en 00:36 y 00:38 los cs e ip a los que quiero que salte, parando antes las interrupciones etc. así, cuando salte la interrupción, irá a mi código "teclado:", ejecutará unas instrucciones y volverá, mediante iret, a la instrucción siguiente a la última ejecutada antes de la interrupción x hardware... pero no me sale. alguien me puede ayudar? 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:solucionado

Publicado por Jjavier (27 intervenciones) el 19/05/2004 17:18:04
Creo que todas las interrupciones hardware apuntan a zona de ROM. Por eso no te sale. Tendrás que crear la rutina y regrabarla en un chip, sustituyendo el original.....y para eso tendrás que tener muy bien currada la rutina. Todo lo que has dicho es OK pero la rutina a la que apuntan todas las interrupciones hard están en ROM.

Lo mejor es que uses la int 16h que es la de teclado del keyb. Se llama con dos servicios fundamentales:
1.- mov ah,1
int 16h
para ver o saber si hay una tecla pulsada. Al volver de esa llamada, la interrupcion te activa o desactiva el flag de Z.
2- mov ah,0
int 16h
para recoger la tecla. Te devuelve en ah el código de rastreo de la tecla pulsada y en al el código ASCII de dicha tecla pulsada.

[email protected]
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:como ya dije, solucionado

Publicado por amuchamu (3 intervenciones) el 19/05/2004 18:24:44
lo 1º, gracias por tu respuesta Jjavier, pero como ya he dicho, lo tengo solucionado. No quería usar la 16h porque es para un juego y no kiero que se pare esperando que el jugador toque una tecla, prefiero que ejecute el código q yo kiero cuando está activo el jugador. se modifica, al principio del programa principal, el vector de interrupciones (0000h:0036d y 0000h:0038d para la interrupción 9h) para que apunte a tu código, el cual termina con un iret y, al final del programa principal, se recupera el vector de interrupciones a su estado anterior (para lo q habrá q haber guardado en 2 words la ip y el cs que había en las direcciones del vector de interrupciones que hemos modificado). algo así.
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:como ya dije, solucionado

Publicado por Jjavier (27 intervenciones) el 20/05/2004 16:39:35
Como accedes a la lectura del teclado sin usar la int 16h ? Cual es el puerto del teclado y como lo haces ?
[email protected]
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:como ya dije, solucionado

Publicado por amuchamu (3 intervenciones) el 20/05/2004 20:20:10
una vez que he modificado el vector de interrupciones, cada vez q el usuario pulse una tecla se ejecutará el código al q he hecho q apunte la 9h. para coger la pulsación, en el código al q apunta la 9h, pues usas el puerto 60h (in <registro>, 60h). acuérdate de terminar "tu interrupción" con el estrobe del teclado (mov al, 20h ,, out 20h, al) para reactivar la 9h. y x fin un iret. acuérdate también de restaurar el vector de interrupciones al terminar el programa. no sé si me he explicado bien, soy novatillo =)
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:como ya dije, solucionado

Publicado por Jjavier (27 intervenciones) el 21/05/2004 18:37:45
Pues para ser novatillo te defiendes muy bien....En realidad, la dirección del puerto la sabía y alguna prueba había realizado. Sin embargo lo que desconozco es lo del Strobe. Comentame mejor este tema.....please.

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:como ya dije, solucionado

Publicado por amuchamu (3 intervenciones) el 21/05/2004 21:08:11
la verdad es q yo tampoco me enteré mucho cuando me lo explicó el profesor... pero weno, en conclusión, cuando pulsas una tecla se ejecuta tu código, pero tienes q volver a darle permiso a la interrupción para que cuando se vuelva a pulsar una tecla salte de nuevo la interrupción. para eso es el strobe del teclado. tengo x ahí un dibujillo pero tampoco me enteré mucho así q no te lo sé explicar mejor
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
sin imagen de perfil

RE:como ya dije, solucionado

Publicado por zzz (11 intervenciones) el 22/05/2004 06:09:10
Hola! a mi me explicaron un programa parecido, donde tu le cambias la direccion de inicio a una interrupcion para que cada vez que se manda llamar a una interrupcion se ejecute tu codigo, y era justamente para hacer una funcion que capturaba un caracter del teclado, leia el buffer de teclado y te mostraba su scancode, su valor ascii, el head, y el tail y preguntaba el estado del teclado luego regresas los valores iniciales a la interrupcion
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