RADASPALBANK : demo para mostrar más de 16 colores en modo Radastan
Publicado: 21 Dic 2017, 20:09
Antes de comenzar la explicación, pido disculpas de antemano por no dar también una versión en inglés. En estos momentos no tengo cabeza para hacer una traducción, así que de momento, lo explico en español. Espero que Google haga un trabajo decente para el resto de idiomas.
Uto ya tiene actualizada la FAQ (yo aun no he actualizado la Wiki) con el nuevo registro (bueno, lleva ya meses en EXP25) RADASPALBANK. Esto viene de hace tiempo, que se pidió o sugirió esta característica.
http://uto.speccy.org/zxunofaq.html#7085 (español)
http://uto.speccy.org/zxunofaq_en.html#7045 (english)
En el repositorio, en \software\modo_radastan\multiple_palettes he dejado dos programas que ilustran cómo se puede usar este registro para cambiar rapidamente de paleta.
240col.asm muestra una cuadrícula de 16x16 cuadros en la zona de paper, cada uno de un color. En realidad, las 16 filas de cuadros contienen los mismos valores para sus píxeles, ya que en modo radastaniano un pixel sólo puede tomar valores del 0 al 15. Si no cambiáramos la paleta, veríamos 16 columnas de cuadros verticales, cada uno de un color.
Se usa RADASPALBANK para ir cambiando de paleta rapidamente (un cambio cada 12 lineas ráster ULA, o cada 6 lineas radastanianas), y así tener tiempo de sobra (6 lineas radastanianas = 12 lineas de ULA, a 224 estados por linea ULA = 2688 T-estados) para actualizar un banco de la paleta ULAplus mientras se usa otro. Como tenemos 4 bancos, siempre voy 3 bancos por delante actualizando. La demo no muestra en realidad 256 colores, sino 240.
Cada 12 lineas ráster una interrupción cambia el rango de entradas que usa el modo radastaniano. Para que los cambios en la paleta no afecten al borde, hago que la primera entrada de la paleta sea siempre el color negro. Por eso el número de colores que se muestran no son 256 sino 240, y como ese color es el primero de la paleta, afecta al primer cuadro de cada fila, así que el borde izquierdo se verá un poco más grueso que el derecho.
He comentado el código fuente lo mejor que he podido (en español), así que espero que el mecanismo quede un poco más claro leyéndolo. Cualquier duda, en este mismo hilo (en cualquiera de los idiomas para los cuales hay traducción automática en el foro).
Como comparación, he dejado también un programa equivalente (240feo.asm), que hace lo mismo pero suponiendo que RADASPALBANK no existiera. Aquí, en cada interrupción ráster se debe cambiar el contenido de la única paleta de 16 colores disponible. Podeis ver que en este último caso, a la velocidad estándar de 3.5 MHz sencillamente no hay tiempo (en lugar de tener 2688 estados para actualizar la paleta tenemos poco menos de 96), y el cambio de paleta ocurre demasiado tarde. Hay que poner la máquina a 28 MHz para que el efecto sea equivalente al del primer programa, que funciona perfectamente a 3.5 MHz.
PD: seguramente alguno de nuestos amigos rusos es capaz de mejorar el segundo programa para que funcione igual de bien que el primero, a 3.5 MHz.
Para salir de cualquiera de ambos programas, pulsar SPACE.
Uto ya tiene actualizada la FAQ (yo aun no he actualizado la Wiki) con el nuevo registro (bueno, lleva ya meses en EXP25) RADASPALBANK. Esto viene de hace tiempo, que se pidió o sugirió esta característica.
http://uto.speccy.org/zxunofaq.html#7085 (español)
http://uto.speccy.org/zxunofaq_en.html#7045 (english)
En el repositorio, en \software\modo_radastan\multiple_palettes he dejado dos programas que ilustran cómo se puede usar este registro para cambiar rapidamente de paleta.
240col.asm muestra una cuadrícula de 16x16 cuadros en la zona de paper, cada uno de un color. En realidad, las 16 filas de cuadros contienen los mismos valores para sus píxeles, ya que en modo radastaniano un pixel sólo puede tomar valores del 0 al 15. Si no cambiáramos la paleta, veríamos 16 columnas de cuadros verticales, cada uno de un color.
Se usa RADASPALBANK para ir cambiando de paleta rapidamente (un cambio cada 12 lineas ráster ULA, o cada 6 lineas radastanianas), y así tener tiempo de sobra (6 lineas radastanianas = 12 lineas de ULA, a 224 estados por linea ULA = 2688 T-estados) para actualizar un banco de la paleta ULAplus mientras se usa otro. Como tenemos 4 bancos, siempre voy 3 bancos por delante actualizando. La demo no muestra en realidad 256 colores, sino 240.
Cada 12 lineas ráster una interrupción cambia el rango de entradas que usa el modo radastaniano. Para que los cambios en la paleta no afecten al borde, hago que la primera entrada de la paleta sea siempre el color negro. Por eso el número de colores que se muestran no son 256 sino 240, y como ese color es el primero de la paleta, afecta al primer cuadro de cada fila, así que el borde izquierdo se verá un poco más grueso que el derecho.
He comentado el código fuente lo mejor que he podido (en español), así que espero que el mecanismo quede un poco más claro leyéndolo. Cualquier duda, en este mismo hilo (en cualquiera de los idiomas para los cuales hay traducción automática en el foro).
Como comparación, he dejado también un programa equivalente (240feo.asm), que hace lo mismo pero suponiendo que RADASPALBANK no existiera. Aquí, en cada interrupción ráster se debe cambiar el contenido de la única paleta de 16 colores disponible. Podeis ver que en este último caso, a la velocidad estándar de 3.5 MHz sencillamente no hay tiempo (en lugar de tener 2688 estados para actualizar la paleta tenemos poco menos de 96), y el cambio de paleta ocurre demasiado tarde. Hay que poner la máquina a 28 MHz para que el efecto sea equivalente al del primer programa, que funciona perfectamente a 3.5 MHz.
PD: seguramente alguno de nuestos amigos rusos es capaz de mejorar el segundo programa para que funcione igual de bien que el primero, a 3.5 MHz.
Para salir de cualquiera de ambos programas, pulsar SPACE.