Bubu escribió:Es complicado explicarme con palabras, necesito expresarlo esquemáticamente. A ver dónde me estoy evivocando:
Código: Seleccionar todo
- Z80 ejecuta cosas, hasta que T=69888
- Z80 se para
- ULA se activa
- ULA lee valor del puerto 254, y lo memoriza.
- pinta la primera línea de las 296 líneas totales de imagen. En este caso es sólo borde, con el color que se memorizó.
- pinta la segunda línea de las 296 líneas totales de imagen. En este caso es sólo borde, con el color que se memorizó.
- etc
- pinta la línea número 100 de las 296 líneas totales de imagen. En este caso es 48 píxeles de borde (con el color que se memorizó), 256 píxeles de imagen, y 48 píxeles de borde
- etc
- pinta la última línea de las 296 líneas totales de imagen. En este caso es sólo borde, con el color que se memorizó.
- ULA se para
- Z80 se activa.
¿Ves bien implementar esto así?
Mientras la ULA pinta la pantalla el Z80 no se para, sigue trabajando, de lo contrario no se podrian hacer los efectos multicolor. De hecho decir que la pantalla se actualiza cada 69888 ciclos es incorrecto, lo correcto es decir que cada 69888 ciclos comienza a actualizarse la pantalla, y esto se puede entender mejor si vemos como se calcula esto:
La imagen se actualiza 50 veces por segundo, las mismas 50 veces que saltan las interupciones, por tanto cada 69888 ciclos comienza a actualizarse la imagen y salta una interrupción, y por que cada 69888 ciclos?, pues por que 69888 x 50 = 3494400 que son el total de ciclos que procesa el Z80 por segundo que curiosamente coincide con los 3,5 Mhz que es la frecuencia a la que trabaja el Z80 del Spectrum, si ahora dividimos esos 69888 ciclos entre las 296 lineas que tiene la pantalla pues nos sale que el Z80 procesa 236 ciclos cada vez que se actualiza una linea de la pantalla, por lo cual si yo en mi programa cambio el color del borde cada 236 ciclos conseguire poner cada una de las 296 lineas del borde de un color distinto.
Sencillo verdad...?

Por cierto, la ULA tampoco para nunca, en cuanto termina de dibujar la ultima linea comienza a dibujar la primera, aunque creo que hay una ligera espera que es lo que tarda el rayo catodico de la TV en saltar de la ultima a la primera linea.