Programando la SEGA Master System en MacOS [Parte 1: El entorno]

El reto: programar un videojuego para la SEGA Master System (fue mi primera video consola).

Existe mucha documentación sobre como programar para esta consola. Sin embargo, la mayoría de tutoriales están escritos para Windows.

La Sega Master System (o SMS) era una consola de 8-bits, basada en el microprocesador Z80. Así, para poder programar “algo” que pueda correr sobre esta plataforma, necesitaremos:

  • Un compilador, que compile código (ensamblador)  a código máquina.
  • Un enlazador que “linque” el objeto compilado con los símbolos del sistema específicos y genere un ejecutable en formato ROM.
  • Una máquina (o emulador) que ejecute dicho ejecutable.

En la mayoría de los foros se recomienda wla-dx. Es un paquete que incluye varios compiladores, para varias plataformas, y un enlazador.

Tenemos dos opciones para MacOS:

    1. Lo compilas tú mismo (es open source. Código en Github).
    2. Lo instalas utilizando Hombrew (yo he usado esta última).
      $>brew install wla-dx

    Podemos comprobar si wla-dx se instaló correctamente ejecutando:
    $>wla-z80

    Deberá de mostrar algo parecido a lo siguiente:

    WLA Z80 Macro Assembler v9.6
    Written by Ville Helin in 1998-2008 - In GitHub since 2014: https://github.com/vhelin/wla-dx
    USAGE: wla-z80 -[iMqtvx]{lo} [DEFINITIONS] [OUTPUT FILE]
    Commands: Options:
    l Library file i Add list file information
    o Object file M Output makefile rules
    q Quiet
    t Test compile
    v Verbose messages
    x Extra compile time definitions

    Una vez instalado, necesitaremos un emulador para poder ejecutar nuestro programa compilado. Yo estoy usando SMS Plus, que corre perfectamente en MacOS Sierra.

    Una vez tengamos este entorno funcionando, podemos probar a compilar nuestro primer “Hola Mundo”.

    En smspower.org tienen un fantástico tutorial de como comenzar a programar tus primeros juegos para SMS (Windows only, 🙁 ). Tienen un ejemplo, para poder compilar el entorno, que además puede servir como plantilla para siguientes juegos, ya que incluye las rutinas necesarias para configurar la SMS. Puedes descargar el código de ese tutorial en su enlace.

    Ahora, solo tenemos que:

    1. Descomprimir el código fuente. Tendremos una carpeta helloworld, con un archivo hello.asm (el código fuente).
    2. Dentro de esa carpeta, abrir un terminal y ejecutar:
      $>wla-z80 -o 'hello.asm' hello.o
      Este comando compila nuestro código en ensamblador (hello.asm), generando un archivo objeto (hello.o).
    3. En esa misma carpeta, crear un archivo de enlazado, que contenga las siguientes 2 líneas:
      [objects]
      hello.o
      Yo al mío lo llamé linkfile.
    4. Una vez tengas esos dos archivos en tu carpeta (el linkfile y el hello.o), ejecuta:
      $>wlalink -drvs linkfile hello.sms
      Free space at $003a-$0065.
      Free space at $0ce1-$7fdf.
      Free space at $7ff8-$7ff9.
      Free space at $7ffc-$7ffe.
      Bank 00 has 29488 bytes (89.99%) free.
      29488 unused bytes of total 32768.
    5. Si todo ha salido bien, se habrá generado un archivo hello.sms: ¡nuestro primer ROM ejecutable!
    6. Para ejecutar el ROM hello.sms, solo habra que abrirlo desde el SMS Plus. Deberá de aparecer una pantalla similar a la siguiente:

      SMS Hello World!