Página 1 de 1

Sprites 8x8 al pixel en modo Radastan

Publicado: Vie Jun 23, 2017 8:12 pm
por frjanibo
Hola chicos, para la próxima zxdev me picaba el gusanillo de hacer algo en el modo Radastan para el ZX Uno. He estado buscando por los foros y lo mejor que llegué a encontrar es el kit que alguien (radastan mismo?) mantiene en el foro de zx-uno. El problema es que las funciones que incorpora para dibujar en pantalla los sprites tienen la limitación de sólo poder dibujar en los pixeles pares de la coordenada X.
Esto es así por la disposición 'especial' del modo Radastan. Es comprensible, pero al tener tan baja resolución horizontal (128px) el que el personaje se mueva de 2 en 2 pixeles se me antojaba un poco brusco. Así que he desempolvado algunos libros de asm que tengo por casa y he empezado una librería para dibujar sprites al pixel en modo Radastan.
He empezado copiando lo que encontré por ahí y le he añadido 2 funciones (en asm, pero embebido en el C de z88dk):
- put_sprite_x8: que recibe un *sprite de 8x8 pixels y lo posiciona en x,y.
- get_sprite_x8: que guarda en un *sprite de 8x8 el contenido de la pantalla desde las coordenadas x, y.

He intentado que vayan lo más rápido posible, pero aunque me he estrujado la media neurona, no termino de estar satisfecho con la velocidad. Soy consciente de que siempre puedo poner el modo turbo de 7mhz, pero antes quería pedir ayuda por aquí, que seguro hay mentes preclaras y veteranas en ASM para iluminar mi camino.

El código y un fichero tap de demostración lo he puesto en github: https://github.com/frjanibo/zumito

PD: en la demo, las teclas son QAOP
Enlace directo al tap: https://github.com/frjanibo/zumito/raw/master/test.tap

Os agradezco de antemano los consejos y fixeos! ;)

Re: Sprites 8x8 al pixel en modo Radastan

Publicado: Dom Jun 25, 2017 11:56 pm
por radastan
Tú mismo te contestas, al no usar posiciones exactas tienes que realizar cálculos y pierdes mucha velocidad.
La única opción es tener los sprites preshifteados, es decir, un sprite spara posiciones pares y otro para impares.

Gastas el doble de memoria en sprites, pero la velocidad la mantienes... y claro... mis rutinas ya sirven para eso. :mrgreen: