msx

Espacio de trabajo en Linux para Fusion-C 1.2

Espacio de trabajo en Linux para la librería Fusion C 1.2, creada por Eric Boez en Linux (probado en Kubuntu 23.04)

Requisitos:

SDCC 3.6.0: Instalar sdcc 3.6.0 (incluido en la carpeta requirements), y luego hacer los siguientes cambios:

openMSX:

sudo apt install openmsx

Añada el systemroms (incluido en la carpeta requirements) a la carpeta de openMSX, /home/yourUser/.openMSX/share/systemroms

Cómo utilizarlo:

./run.sh archivo.c

No dejen de visitar la brillante página web de MoltSXalats

Enlace a Github

#3 Ensamblador MSX (sub ,carry flag, djnz)

En esta ocasión vamos a tratar un texto introducido por el usuario, gracias a la función INLINE de la BIOS de MSX.

En este programa, nuestro MSX nos pedirá que introduzcamos una cadena de texto por teclado, la convertirá a mayúsculas, y la mostrará por pantalla.

A continuación un pantallazo del programa con su explicación en cada línea y su enlace de descarga.

Descargar: https://www.darknd.net/wp-content/uploads/prog3.asm

Puntos importantes en este programa:

  • Carry: bandera que se activa cuando se produce un desbordamiento (número negativo), recordar que al tratar con registros de 8 bits, estamos limitados a valores comprendidos entre 0 y 255.
  • Sub: en el último programa usamos add para sumar, en este caso sub realiza la resta.
  • Djnz: función que comprueba valor cero en el acumulador, y en cada itinerancia hace un b–.

#2 Ensamblador MSX (cp, jp, inc)

En este segundo programa veremos tres comandos nuevos:

-. cp 'valor': compara 'valor' con el valor almacenado en el acumulador.
-. jp nz, etiqueta: si la comparación previa fue FALSE (nz, non zero), salta al código asignado a la etiqueta, si es TRUE (z, zero), continua la ejecución del código.
-. inc: realiza un +1 en el registro asignado.

El siguiente código esperará a que pulsemos una tecla (CHGET), y comparará su código ASCII con el del la letra q. Mientras no coincida, nos irá imprimiendo por pantalla (CHPUT) en las coordenadas que le asignemos (POSIT) el caracter que vayamos pulsando (un máximo de 10 veces). Una vez pulsemos la letra q, el programa finalizará al cumplirse la condición.

Como vimos en el anterior post, hemos creado unos alias al inicio del código, los cuales son funciones predefinidas de la BIOS de nuestro MSX.

Descargar: https://www.darknd.net/wp-content/uploads/prog2.asm

#1 Ensamblador MSX (ld, add, equ)

Hace poco comentaba como el ensamblador es una de mis asignaturas pendientes, así que con la excusa del blog, voy a obligarme un poco a retomarlo, a continuación voy a exponer un programa sencillo, el cual me ayudo mucho a iniciarme con el ensamblador, gracías a los vídeos de Fernando García de BitVision (BitVision – Curso Assembler Rápido para MSX (z80st.es)).

El código es el siguiente:

Descargar: https://www.darknd.net/wp-content/uploads/prog1.asm

Cosas a tener en cuenta:

ld (destino, origen) : cargamos el valor de origen, en destino.
add (destino, origen): sumamos el valor de origen, con el valor de destino, y lo guardamos en este último.

Una vez escrito el programa, lo compilaremos con sjasm (http://www.xl2s.tk/sjasm42c.zip), y nos generará un fichero .bin, que podremos añadir a un disquete virtual con Catapult de OpenMSX por ejemplo.

Una vez hecho esto, arrancamos nuestro OpenMSX, y ejecutamos los siguientes comandos:

Los comandos poke(dirección memoria, valor), grabaran en las direcciones de memoria los valores asignados, en este caso (2 y 3, en h8600 y h8601 respectivamente).

Luego cargaremos nuestro programa con bload, y se ejecutará, la suma de los valores, que se guardará en la dirección h8602. Con print peek podremos ver el valor guardado en dicha dirección.

Algo interesante que podemos hacer, y que en un futuro nos vendrá genial para las funciones de la BIOS, es añadir un alias a diferentes valores de memoria.

El MSX en su bios trae funciones predefinidas, las cuales podemos consultar en la siguiente web, MSX BIOS calls (grauw.nl) .

En este caso, vamos a asignarles a las direcciones h8600 y h8601 los alias, NUM1 y NUM2, y a h8602 el alias RESULT. Esto no cambiará el funcionamiento del programa, pero más adelante, nos puede ayudar a identificar direcciones que definamos para un uso concreto de una manera más agradable a la vista.

Fusion-C, librería para MSX

Fusion-C es una biblioteca diseñada específicamente para el entorno MSX, que se basa completamente en el lenguaje C. Esta biblioteca ofrece una amplia gama de funciones especializadas para aprovechar al máximo el hardware del MSX, permitiendo así la programación sencilla de juegos y herramientas para diferentes versiones de las máquinas MSX, como MSX1, MSX2, MSX2+ o MSX turbo R. La principal ventaja de FUSION-C es su compatibilidad con MSX-DOS 1 o 2, lo que significa que los programas escritos con esta biblioteca pueden ejecutarse sin problemas en estos sistemas operativos. Además, si así lo deseas, tienes la posibilidad de transformar tus programas en formato ROM para una distribución más conveniente.

Para empezar a trabajar con ella, deberás instalar el SDCC (Small Device C Compiler – Browse Files at SourceForge.net) nuestro compilador en C. En el siguiente enlace te dejo todo preparado para empezar a trabajar, incluido un fichero «test.c» con un Hola Mundo, así como diferentes utilidades en la carpeta «tools».

#include "fusion-c/header/msx_fusion.h"

void main(void) 
{
  Print("Hola Mundo! Desde darknd.net");
}

Deberemos entrar en el directorio «Working Folder» y ejecutar el script. «compil.bat», el cual nos ejecutará openMSX (incluido en el fichero), con el directorio «dsk» como disquete virtual

Descargar Fusion-C MSX

asMSX – Compilador ensamblador MSX

Una de mis grandes espinitas, es realizar algún tipo de programa/utilidad/juego para MSX en ensamblador. He empezado muchas veces, pero nunca llego a realizar nada concreto, ya que me abruma el ensamblador, y más estando acostumbrado al lenguaje de alto nivel, como puede ser Angular y .Net Core que es lo que actualmente he venido usando estos últimos años.

A continuación adjunto un fichero en el que se incluye un pequeño script «run.bat», dicho script compila el fichero prueba.asm, borra el fichero prueba.rom y prueba.sym, y ejecuta el .rom resultante de la compilación a través de openMSX (con todas sus roms/machines, etc…).

del .\prueba.rom
del .\prueba.sym
.\asmsx.exe .\prueba.asm
.\openMSX\openmsx.exe .\prueba.rom
Descargar openMSX + asmsx