¡Hola! Hace poco trasteando con algunos juegos de Spectrum y el BASIC me di cuenta de algo que quizás se me pasó por alto en su momento original:
Me da la impresión de que el Spectrum no lee el teclado a intervalos regulares, o que lo hace de una manera muy cuantizada. Esto hace que los juegos no reaccionen siempre a los comandos que se introducen justo en el momento de pulsar una tecla y que por ejemplo sea imposible escribir en BASIC al ritmo que se escribiría en un PC actual.
Esto último de la velocidad de escritura, he comprobado que en Amstrad no pasa y puedes escribir sin ningún problema a alta velocidad sin que haya letras que no aparezcan.
¿A qué es debido? ¿Quizás tenga algo que ver con la dificultad de los juegos de Spectrum? ¿Había alguna solución?
Desde mi ignorancia sospecho que quizás la CPU solo lea la entrada de teclado en los "ratos libres" en los juegos...pero, ¿y en el editor de basic del +2/+3? ¿por qué incluso ahí o en Tasword ocurre igual haciendo imposible escribir rápidamente?
¡Saludos!
Duda "lag" entrada teclado Spectrum
- zx81
- Mensajes: 386
- Registrado: 23 Feb 2013 21:31
- Agradecido : 69 veces
- Agradecimiento recibido: 138 veces
Re: Duda "lag" entrada teclado Spectrum
La ROM del Spectrum va leyendo las filas del teclado y, cuando encuentra una pulsada, para la lectura y pasa a procesarla, con lo que no se lee más que una tecla por cuadro (unos 50 por segundo).
Otra cosa son los juegos, que leen cuando quieren, y lo que quieren, sin limitación, porque no usan por lo general las rutinas de la ROM. Ahora bien, hace poco tuneé mi emulador Java para observar cuando leían el puerto Kempston (es de esperar que con el teclado hagan lo mismo) y la disparidad es abrumadora: desde juegos que leen una vez por cuadro, otros incluso leen 5 veces por cuadro, pasando por los que leen en cuadros alternos, cada 3, 5 y hasta 11 cuadros. No es raro que lean de manera irregular, con cadencias tipo 3,3,3,5 o similares. Depende de las necesidades del juego.
No sé mucho de Amstrad, pero creo que se lee a través del puerto PIO del AY-3-8910. Probablemente las rutinas de la ROM del Amstrad están mejor hechas en ese aspecto, no creo que haya otra razón.
Pero programas como Tasword leen a su ritmo, seguro, no dependen de la ROM en absoluto. Y los juegos lo aseguro.
Otra cosa son los juegos, que leen cuando quieren, y lo que quieren, sin limitación, porque no usan por lo general las rutinas de la ROM. Ahora bien, hace poco tuneé mi emulador Java para observar cuando leían el puerto Kempston (es de esperar que con el teclado hagan lo mismo) y la disparidad es abrumadora: desde juegos que leen una vez por cuadro, otros incluso leen 5 veces por cuadro, pasando por los que leen en cuadros alternos, cada 3, 5 y hasta 11 cuadros. No es raro que lean de manera irregular, con cadencias tipo 3,3,3,5 o similares. Depende de las necesidades del juego.
No sé mucho de Amstrad, pero creo que se lee a través del puerto PIO del AY-3-8910. Probablemente las rutinas de la ROM del Amstrad están mejor hechas en ese aspecto, no creo que haya otra razón.
Pero programas como Tasword leen a su ritmo, seguro, no dependen de la ROM en absoluto. Y los juegos lo aseguro.
Cuando utilizo una palabra, esa palabra significa, exactamente, lo que yo quiero que signifique. Ni más, ni menos.
Humpty Dumpty
Empieza a jugar sin tener que compilar: Emulador JSpeccy
ZX Spectrum bare-metal para Raspberry PI ZXBaremulator
Humpty Dumpty
Empieza a jugar sin tener que compilar: Emulador JSpeccy
ZX Spectrum bare-metal para Raspberry PI ZXBaremulator
- Jinks
- Mensajes: 2100
- Registrado: 09 Oct 2013 16:47
- Agradecido : 202 veces
- Agradecimiento recibido: 279 veces
- Contactar:
Re: Duda "lag" entrada teclado Spectrum
Yo copié un programa en ensamblador de una revista, que solo era ilustrativo de la velocidad del código máquina. Lo único que hacía era poner un carácter negro en la esquina superior izquierda de la pantalla y leer el teclado esperando a que se pulsara una tecla. Mientras la tecla estaba pulsada el carácter negro iba avanzando de posición hacia la derecha, y al llegar al final bajaba una línea (vamos, como el cursor según vas escribiendo). Y al soltar la tecla, el carácter negro paraba.
Bueno, pues por muy corta que fuese la pulsación de la tecla, el carácter negro terminaba casi siempre en la esquina inferior derecha de la pantalla.
Vamos, que si la pulsación duraba 0,1 segundos, el cursor avanzaba las 32x24 (768) posiciones de la pantalla, así que ese código leía el teclado 768/0,1 (7680) veces por segundo. Cálculo aproximado porque no sé exactamente cuánto duraba la pulsación.
Bueno, pues por muy corta que fuese la pulsación de la tecla, el carácter negro terminaba casi siempre en la esquina inferior derecha de la pantalla.
Vamos, que si la pulsación duraba 0,1 segundos, el cursor avanzaba las 32x24 (768) posiciones de la pantalla, así que ese código leía el teclado 768/0,1 (7680) veces por segundo. Cálculo aproximado porque no sé exactamente cuánto duraba la pulsación.
- flopping
- Mensajes: 2658
- Registrado: 26 Jun 2011 17:50
- Agradecido : 3 veces
- Agradecimiento recibido: 148 veces
Re: Duda "lag" entrada teclado Spectrum
En el spectrum, la lectura del teclado se hace cada 20ms, si se teclea más rápido que eso, el sistema no reconocerá todos los caracteres o tendrá inputlag, otra cosa son los juegos o programas que no usen la rutina de lectura de teclado de la rom y usen una propia u otro sistema de lectura del teclado, en ese caso puede haber más o menos retardo, según esté implementado el sistema.
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, por la esquizofrenia paranoide que padezco.
(C) 1982-2021, 39 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".
(C) 1982-2021, 39 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".
- Kyp
- Mensajes: 585
- Registrado: 03 Oct 2013 17:13
- Agradecido : 55 veces
- Agradecimiento recibido: 194 veces
Re: Duda "lag" entrada teclado Spectrum
A nivel de hardware no hay ningún 'intermediario' que pueda causar lag. Lo único que hace la ULA es proporcionar el estado de la matriz solo cuando la CPU pide leer ese estado. Cualquier otro retardo es software. La ROM lee el teclado en la rutina de interrupción de retrazo que es cada 20 ms pero creo que ignora las pulsaciones si hay más de una tecla pulsada al mismo tiempo. Eso, aunque no lo parezca, causa bastantes pérdidas de pulsaciones, sobre todo si se escribe muy deprisa. Los juegos, como ya han comentado, cada uno lo hace a su manera pero sigue siendo una cuestión de software.
Volver a “Ordenadores Sinclair”
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado