10 de Febrero, 2016

Nuevo juego en camino

Estas navidades me puse a programar un juego de plataformas para el ZX Spectrum, a ver si me salía algo para enviar al concurso ZX Dev 2015 (que acaba en el 2016 :P), y el resultado es Castaway que, si no pasa nada, estará acabado a finales de este mes.

Castaway para el ZX Spectrum 48K
Una pantalla del juego

Me está costando mucho, porque como ya me pasó con Escape from Colony 8, el 48K es poca cosa si usas Z88DK y la librería SP1 implementada especialmente para este compilador cruzado.

Básicamente SP1 hace todo lo posible para dar el mejor rendimiento en su motor de tiles y sprites (y funciona muy bien), pero para conseguirlo usa un buffer doble y muchas tablas pre-calculadas que... usan mucha memoria.

Al final resulta que de esos 48 KB (que no son tales, porque eso incluye la memoria de video y la pila), tenemos para trabajar unos 26 KB; y aún utilzando compresión y mil trucos, el código y los gráficos usan espacio.

Así que estoy dedicando mucho tiempo a reescribir código C en ensamblador del Z80, y poco a poco le voy cogiendo el truquillo. Las rutinas que son fáciles de convertir resulta que son las que menos beneficio aportan, pero solo por eliminar variables y mover las operaciones a usar registros, se suele ganar en espacio (¡y velocidad!).

No es que Z88DK sea tan malo, pero no es el mejor compilador con el que he trabajado, y solo implementa optimizaciones peephole, con lo que el ensamblador escrito a mano suele ser más compacto.

Ya me queda poco código para reescribir, que es precisamente la parte más complicada (la lógica de las plataformas, por ejemplo; ya es bastante liado en C), pero estoy acabando el juego... así que al final va a quedar bastante bien.

Estoy pensando seriamente en dejar finalmente el 48K y empezar a hacer cosas para el 128K, que tiene sus propios retos, como el chip de audio AY-3-8912 o usar los bancos de memoria para acceder a todos esos 128 KB. Igual no significa dejar de lado completamente el 48K, pero creo que merece la pena al menos para juegos como este que son ya demasiado grandes para usar la librería SP1 en tan poco espacio.

Anotación por Juan J. Martínez, clasificada en: programming, speccy.

Hay 2 comentarios

Gravatar

pintaza, ánimo colega. Yo también sufrí para meter todo el Justin en 48k pero da para mucho ^^_

por D_Skywalk, en 2016-02-10 12:10:51

Gravatar

Gracias :)

La verdad es que aún queda trabajo, pero ver que es posible que todo “quepa” anima bastante.

por Juanjo, en 2016-02-10 12:22:28

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: