jueves, 15 de febrero de 2018

Cómo escribir juegos para el ZX Spectrum. Apendice B

Índice de entradas

Esta serie de artículos han sido traducidos a partir del documento "How to Write ZX Spectrum Games" con permiso de su autor, Jonathan Cauldwell, un gran desarrollador de juegos para el Spectrum, os recomiendo visitar su Web donde está el texto original. El documento original, y por tanto esta traducción, tiene © Jonathan Cauldwell y solo puede duplicarse con permiso expreso por escrito de su autor.

APENDICE B

Este apéndice no forma parte del documento original, es un añadido para explicar como se pueden probar los programas que se describen, y como ejecutar los que se incluyen para su descarga.

Para programar en ensamblador para el Spectrum en nuestro PC necesitamos un editor de textos, un programa ensamblador y un emulador. Esto se puede tener de forma separada o en un solo programa, lo que siempre es más cómodo, pero explicaré ambos sistemas.

Elegir un editor para programar

Lo único que hace falta para escribir código a la antigua usanza es un programa que permita escribir texto y un ensamblador. El Notepad incluido en windows es un editor muy sencillo pero suficiente, no hace falta más realmente, aunque hoy día estamos acostumbrados al coloreado del código o a que se auto complete (eso en ensamblador es menos útil), pero no tenemos porque renunciar a ello.

Si queremos un editor un poco mas potente existen muchas mas opciones, aunque no todas van bien con ensamblador del Z80 para el coloreado, pero como editores generales funcionan muy bien, existiendo muchos gratuitos muy buenos. Yo uso Notepad++  pero solo funciona en Windows (o en Linux con Vine), me parece muy bueno y completo, pero os doy otras opciones:
  • SublimeText no es gratuito, es muy espartano de aspecto pero tiene muchos seguidores
  • UltaEdit no es gratuito pero si muy completo, tiene una extensión llamada UltraCompare que va muy bien para comparar el contenido de ficheros.
  • Atom está basado en Sublime pero es gratuito.
  • Crimson Editor es gratuito y muy recomendado por programadores retro.
  • Syncplify es gratuito, menos potente que los otros pero tiene un modo para su uso con pantallas táctiles, por lo que va muy bien en tablets.
  • Textwrangler sería una buena alternativa si usamos Apple.
  • Visual Studio Code de Microsoft es la alternativa mas profesional, y además es gratuito pero no lo recomiendo para principiantes, es un buen IDE pero tiene demasiadas cosas que no vamos a usar, dispone de varias extensiones para trabajar en ensamblador del Z80, incluso una para trabajar en el Basic del Spectrum.

Configurar el Notepad++ para ensamblador del Z80

Notepad++ dispone de configuración específica para muchos lenguajes de programación, incluyendo ensamblador de Intel, pero como siempre se le pueden añadir mas, existen variantes para la sintaxis del Z80. Hay un fichero de configuración que podéis localizar en los foros de CPCWiki (está en inglés pero es muy sencillo de entender), que funciona muy bien. Está desarrollado para usar fondo negro en la pantalla, yo he modificado el fichero para usar fondo blanco, podéis descarga de aquí los dos ficheros:


y según mas os guste el fondo con el que trabajar ponéis uno u otro, incluso podéis trastear un poco y cambiar los colores a vuestro gusto, aquí tenéis el mismo ejemplo con ambos fondos para que elijáis mejor:


Para instalarlo, guardamos el que queramos (o los dos) en un directorio de nuestra maquina, abrimos Notepad++, vamos en el menú superior a "Lenguaje", opción "Defina su lenguaje...", en la pantalla nueva damos a importar, elegimos el fichero que queremos subir, y  cerramos esa ventana. Ahora cerramos y abrimos Notepad++, y en la opción de "Lenguaje" nos aparecerá la opción importada, la seleccionamos y ya tenemos coloreado de sintaxis en el editor. También recomiendo quitar la vinificación gramatical, ya que cualquier directiva no la reconocerá y nos dirá que está mal escrita, para ello en la opción "Plugins", vamos a "DSpellCheck" y desmarcamos la opción "Spell Check Document Automatically".

Ahora podemos abrir un fichero existente o crear uno nuevo y comenzar a programar en ensamblador del Z80 con nuestro Notepad++

Generando el código máquina

Ahora que tenemos un programa escrito, hay que convertirlo en código máquina que pueda ejecutarse en el Spectrum, para lo que se usa un programa ensamblador específico para el Z80. Existen varios programas disponibles, el mas usado siempre ha sido PASMO, pero existe una buen alternativa llamada SjASMPlus, ambos están diseñado para Windows pero se pueden compilar para ejecutar en Linux o Apple ya que incluyen los fuentes, y como no usan ventanas sino que funcionan a partir de la línea de comando, son sencillos de portar. Los dos programas son antiguos y no se actualizan hace años, pero funcionan a la perfección.

Los ejemplos los he probado con ambos compiladores, la diferencia principal es que SjASMPlus admite mas directivas que PASMO, pero no permite que las directivas estén al principio de la línea por lo que hay que dejar espacios (se puede usar un parámetro al lanzarlo para oviarlo), y que es necesario añadir al inicio del programa una línea en la que se indica el nombre del fichero de destino como por ejemplo:

OUTPUT "destino.com"

Ambos funcionan igual, hay que ir a la línea de comando de windows (usar buscar y escribir CMD), y lanzar la ejecución con estos parámetros, para PASMO origen y destino, para SJ solo origen:

  • pasmo fuente.asm destino.com
  • sjplusasm fuente.asm

Probando el programa en un emulador

Para ejecutar sirve cualquier emulador, Spectaculator tiene fama de ser el mejor, pero es de pago, yo prefiero usar ZXSpin (ya no tiene página propia, pero lo podéis descargar de aquí por ejemplo), ya que dispone de utilidades para desarrollo de programas en ensamblador, incluyendo editor, ensamblador y debuger, pero hay muchos donde elegir.

Descargas en programa, lo descomprimes y lo ejecutas, se abre una pantalla de Spectrum. En el menú de "File" seleccionas la opción "Load Binary File..." y se abre una pantalla, la rellenamos con el fichero generado y la dirección de comienzo:


Luego hay que ejecutar el programa, por ejemplo para la dirección que hemos puesto debemos escribir: CLEAR 25000 : RANDOMICE USR 25000 lo que se consigue en un spectrum con las teclas X (CLEAR), el número deseado, Simbol Shift mas Z (:), T (RANDOMICE), Caps Shift mas Simbol Shift mas L (USR), y luego el número otra vez.


Esto ejecuta el programa cargado y podemos ver ya el resultado en la pantalla, este ejemplo es el hola mundo del primer capítulo:


Todo en uno con el emulador

si usamos ZXSpin o hace falta nada mas, ya que el emulador tiene su propio editor y ensamblador, para ello hay que ir a la opción "Tools", elegir "Z80 Assembler", y aparece una nueva ventana con el editor, podemos cargar allí el fuente, editarlo, ensamblarlo, ejecutarlo, incluso ejecutarlo paso a paso, lo que nos ahorra un poco de trabajo. el editor no es la quinta maravilla, pero tiene coloreado y lista de símbolos navegable, podemos cargar o guardar programas en la opción File, ensamblarlos en la opción File (cuidado de poner en esa pantalla la dirección de comienzo para evitar errores de ejecución), y ejecutarlos en la opción Program (permite ejecutar normal, paso a paso, detener la ejecución en cualquier momento, o detener y reiniciar los contadores):


Un todo en uno, que da a veces problemas con el uso de la memoria del PC si a la hora de ensablar no le ponemos la dirección de comienzo, pues el programa no funciona todo lo fino que debería, pero una gran ayuda para el desarrollo y pruebas de los programas.