Leer teclas con IN

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Responder
Bubu
Freddy Hardest
Mensajes: 544
Registrado: Mié Oct 31, 2007 12:15 am

Leer teclas con IN

Mensaje por Bubu » Lun Ene 07, 2008 8:53 pm

Buenas,

tengo 2 métodos que yo sepa para leer el teclado del Spectrum. P.ej. para leer la semifila Q a T:

Método 1:

Código: Seleccionar todo

   ld   a, $FB
   in   a, ($FE)


Método 2:

Código: Seleccionar todo

   ld   bc, $FEFB
   in   a, (c)


¿Son válidos ambos 2? Es que el método del BC parece no funcionarme...

Avatar de Usuario
decicoder
Jack The Nipper
Mensajes: 176
Registrado: Jue Jul 19, 2007 10:37 am

Re: Leer teclas con IN

Mensaje por decicoder » Lun Ene 07, 2008 9:14 pm

Ojo a los contenidos de B i C

ld bc, $FBFE
in a, (c)

en lugar de

ld bc, $FEFB
in a, (c)

$FE al final. Con este método puedes usar cualquier registro para leer el teclado y dejar el A para otros menesteres.
Última edición por decicoder el Lun Ene 07, 2008 9:18 pm, editado 1 vez en total.
xor a
ld R,a
b1 in f,(c)
jp pe , b1
ld a,R

Bubu
Freddy Hardest
Mensajes: 544
Registrado: Mié Oct 31, 2007 12:15 am

Re: Leer teclas con IN

Mensaje por Bubu » Lun Ene 07, 2008 9:16 pm

¡¡ Sí, señor !! Premio para el caballero. Pensaba que había que leer el puerto $FE, y que el puerto se refería a la parte alta de los 16 bits, jiji, pero no, es la parte baja. ¡¡ Gracias !!

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3984
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Leer teclas con IN

Mensaje por mcleod_ideafix » Mar Ene 08, 2008 2:08 am

El teclado del Spectrum tiene más cosillas... por ejemplo, poniendo a 0 más de un bit de los 8 altos, consigues leer a la vez más de una semifila. Echale un vistazo al programa que se ofrece en este post y que permite leer el teclado semifila a semifila, y además, leer todas las semifilas a la vez en un solo IN.
Web: ZX Projects | Twitter: @zxprojects

Bubu
Freddy Hardest
Mensajes: 544
Registrado: Mié Oct 31, 2007 12:15 am

Re: Leer teclas con IN

Mensaje por Bubu » Mié Ene 09, 2008 1:08 am

Gracias, mc, por la nota, pero he descargado el código, y me he puesto un rato a debugarlo a ver si veo lo de los bits altos, pero no lo encuentro, y se me están ya cayendo los ojitos... ¿Tú me podrías más o menos cómo va el tema?

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3984
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Leer teclas con IN

Mensaje por mcleod_ideafix » Mié Ene 09, 2008 9:43 am

Los 8 bits altos de la dirección de puerto se corresponde, cada uno, con una semifila: cuando quieres leer una semifila, pones un determinado bit a 0. Por ejemplo, si quieres leer la semifila del 1 al 5, usas el puerto F7FE: la parte alta es F7, que en binario es 11110111. Analogamente, la semifila de... por ejemplo, de la B al SPACE se lee con el puerto 7FFE: la parte alta es 7F, que se corresponde en binario con 01111111.

Pues bien, si quisieras leer esas dos semifilas a la vez tienes que generar una dirección de puerto que tenga a 0 los dos bits que están a 0 en cada uno de los puertos originales, esto es, una dirección cuya parte alta en binario sea 01110111 (77 en hex). Es decir, leer el puerto 77FE

Puede ser útil, combinado con alguna que otra esotérica combinación de teclas de control, para poder leer en un sólo IN, todas las teclas de un juego. Por ejemplo, imagina que eliges para un juego las teclas Q (arriba), S (abajo), R (izquierda), T (derecha), y X (disparo). No es una combinación muy cómoda quizás, pero tiene la ventaja de poder leerse de una vez: Q. R y T se leen de una semifila, la que tiene por dirección FB, la S, de FD, y la X de FE. Combinando estas tres direcciones, tenemos:
FB = 11111011
FD = 11111101
FE = 11111110

FB and FD and FE = 11111000 = F8

Así que leyendo F8FE, estamos leyendo esas tres semifilas a la vez: el bit 0 sería Q, el bit 1, S; el bit 2, X; el bit 3, R y el bit 4, T.

En realidad existen muchas más combinaciones: de hecho, el bit 0 corresponde a Q, A o CAPS SHIFT, el bit 1 a W, S o Z, el bit 2 a E, D o X, el bit 3 a R, F o C, y así sucesivamente. Como puedes imaginar, con este método no puedes discernir si has pulsado Q o A, ya que ambas ponen a 0 el mismo bit.

Esto se puede hacer con cualquier combinación de las 8 semifilas: otra combinación que podría funcionar es: Q, Z, Y, I y N. No tienes más que coger el test de teclado del post que te he comentado, ejecutarlo en un Spectrum real y probar combinaciones de teclas de tal forma que al pulsar las 5 a la vez, obtengas 5 ceros en el puerto FE (el de abajo del todo, que lee TODAS las semifilas).
Web: ZX Projects | Twitter: @zxprojects

Bubu
Freddy Hardest
Mensajes: 544
Registrado: Mié Oct 31, 2007 12:15 am

Re: Leer teclas con IN

Mensaje por Bubu » Mié Ene 09, 2008 11:14 pm

Aaaamigo, uséase que se puede hacer un AND con los puertos de las semifilas para mezclarlos. Pos muuuchas gracias por la aclaración, mc.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados