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.

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.

Batalla Espacial, ensamblador para ZX Spectrum
Mata marcianos en ensamblador para ZX Spectrum

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

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.

Aquí puedes ver más cosas que he desarrollado para .Net, y aquí las desarrolladas en ensamblador para Z80.

Y recuerda, si lo usas no te limites a copiarlo, intenta entenderlo y adaptarlo a tus necesidades.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies
A %d blogueros les gusta esto: