0x00 Ensamblador ZX Spectrum Marciano – Introducción
Iniciamos un nuevo tutorial de programación en ensamblador para ZX Spectrum. Si eres nuevo, te recomiendo que primero visites el tutorial en el que vemos como programar un clon de Pong para ZX Spectrum.
Tabla de contenidos
- Mata marcianos en ensamblador
- Herramientas necesarias
- Estructura del tutorial
- Entorno de trabajo
- El resultado final
- Conclusión
- Enlaces de interés
Mata marcianos en ensamblador
En este caso vamos a desarrollar un mata marcianos, Batalla espacial, siendo este el primer programa que desarrollé en ensamblador para ZX Spectrum, quitándome de esta manera la espina que tenía clavada desde pequeño. Batalla espacial no es más que una prueba de los conocimientos adquiridos siguiendo el curso Curso de Ensamblador Z80 de Compiler Software.
Ya publiqué Batalla espacial anteriormente, aunque durante el desarrollo de este tutorial han cambiado varias cosas.
En Batalla espacial los gráficos son de un carácter, se usan UDG (User-Defined Graphic) y el movimiento es carácter a carácter, por lo que las diferencias con respecto a PorompomPong son patentes.
Batalla espacial hace uso de las interrupciones, cosa que en PorompomPong no hace, también hace un mayor uso de las rutinas de la ROM y al usar UDG y RST $10 para pintar, es necesario cambiar de canal para pintar en la parte superior de la pantalla, o en la línea de comandos.
Herramientas necesarias
- Editor de texto, ya sea Notepad, Notepad++, Visual Studio Code o cualquier otro con el que os sintáis cómodos.
- Compilador de ensamblador PASMO: está disponible para Windows, Linux y Mac, y es compatible con Raspberry Pi OS, que es el sistema desde el que estoy redactando el presente tutorial.
- Emulador de ZX Spectrum: aquí tenéis varios para elegir como ZEsarUX, Fuse, Retro Virtual Machine, etc., dependiendo del sistema operativo que uséis. En mi caso vuelvo a optar por ZEsarUX.
Con respecto a PASMO, recomiendo a los usuarios de Windows que incluyan la ruta del ejecutable en la variable de entorno Path. Aquí tenéis un vídeo que muestra como hacerlo en Windows 10.
Estructura del tutorial
A diferencia de PorompomPong, Batalla espacial no se desarrolló con idea de realizar un tutorial, por lo que la estructura es distinta, no voy a ir desarrollando, haciendo y deshaciendo como hice en PorompomPong, en esta ocasión ya lo tengo terminado y ahora toca escribir “Cómo se hizo”, aunque si hay cambios en el código con respecto de lo que hay publicado.
En lo primeros pasos vamos a definir la nave, la vamos a mover, luego vamos a abordar los enemigos y el disparo. Una vez realizado lo anterior, vamos a implementar la mecánica del juego, las colisiones, las puntuaciones, las vidas disponibles, etc.
En los últimos pasos vamos a implementar el menú de inicio, la selección de controles, inicio y fin de partida, marcadores, los efectos de sonido y, en general, a decorar un poco el resultado final.
Lo último será añadir una pantalla de carga, a ver que tal nos sale esta vez.
Entorno de trabajo
Esta vez no voy a trabajar bajo Windows, voy a usar el reciente regalo que me han hecho, lo que algunos llaman el Spectrum del siglo XXI, una Raspberry Pi 400.
El emulador que voy a usar es ZEsarUX, el compilador PASMO y el editor Visual Studio Code, por lo que en este aspecto no cambio nada con respecto a PorompomPong.
En esta ocasión voy a mostrar algo que no mostré en el tutorial anterior, la forma de depurar con ZEsarUX, cosa que espero que os sea de utilidad, aunque lo dejaremos para el final.
El resultado final
Batalla espacial es un sencillo juego mata marcianos, compatible con los modelos de ZX Spectrum 16K, 48K, +2 y +3, manejable con teclado, joystick Sinclair y Kempstom, y que consta de treinta niveles.
Decir que consta de treinta niveles quizá sea algo pretencioso, ya que la mecánica del juego no cambia, aunque lo que sí cambia son los enemigos, habiendo un total de treinta distintos, uno por cada nivel.
El movimiento de nuestra nave es horizontal, por lo que solo es necesario un gráfico, mientras que el movimiento de los enemigos es diagonal, siendo necesarios cuatro gráficos (arriba-derecha, arriba-izquierda, abajo-derecha, abajo-izquierda). El disparo de nuestra nave consta también de un solo gráfico, mientras que la explosión de la nave, cuando nos matan, consta de cuatro gráficos, con lo que haremos una pequeña animación cuando nos maten.
Vamos a definir otros ocho gráficos para el marco de la pantalla, y un gráfico más en blanco para borrar gráficos impresos en pantalla.
Conclusión
Poco más se puede añadir, espero que este tutorial os sirva para aprender y sobre todo que os divierta.
Gran parte de lo que vamos a ver en Batalla espacial lo expliqué en PorompomPong, motivo por el cual en ocasiones no pararé a explicar muchas instrucciones.
En la próxima entrega empezamos definiendo los gráficos y practicando la conversión hexadecimal/binario.
Enlaces de interés
- Notepad++
- Visual Studio Code
- Sublime Text
- ZEsarUX
- PASMO
- Git
- Curso de ensamblador Z80 de Compiler Software
- Referencia Z80
- Ensamblador Z80 en Telegram
- Tutorial completo en formato PDF y EPUB
- Proyecto en itch.io
- Archivo .dsk con los juegos de los tutoriales
- Personalización y depuración con ZEsarUX
Ensamblador para ZX Spectrum Batalla espacial por Juan Antonio Rubio García.
Esta obra está bajo licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.
También puedes visitar el resto de tutoriales:
Y recuerda, si lo usas no te limites a copiarlo, intenta entenderlo y adaptarlo a tus necesidades.
Pingback: 0x01 Ensamblador ZX Spectrum OXO - tablero de juego - Espamática