#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

Node version manager (nvm)

Si has tenido experiencia con node js, habrás sufrido sus roturas de versiones debido a la constante actualización de la que ¿sufre?.

Existe una utilidad llamada nvm (coreybutler/nvm-windows: A node.js version management utility for Windows. Ironically written in Go. (github.com)) la cual permite instalar diferentes versiones de node js, y utilizarlas según convenga.

Su utilización es muy sencilla, si tienes un proyecto que funciona bajo node 12, tienes primero que instalar dicha versión, y luego indicar que quieres usarla:

nvm install 12.0.0
nvm use 12.0.0

¿Qué tienes otro proyecto que funciona bajo node 16?

nvm install 16.0.0
nvm use 16.0.0

Esto te permite ir cambiando entre versiones en unos segundos, y evitando esas roturas de paquetes tan temidas y difíciles de solucionar sin tener que actualizar medio proyecto (con los cambios de sintaxis que conlleva).

Librería EPPlus – .Net Core

Actualmente en mi trabajo, he desarrollado una intranet basada en .Net Core y Angular. En dicha intranet, algunas utilidades te permiten generar información en ficheros Excel, utilizando la librería EPPlus.

El servidor donde se encuentra alojado el backend en .Net Core, está bajo el sistema operativo Ubuntu 20.04 LTS, y he estado comiéndome la cabeza, ya que la generación de Excel no funcionaba en producción (Ubuntu), pero si en pruebas (Windows).

Lo he solucionado actualizando la versión de EPPlus a la versión 6.2.3 (anteriormente utilizaba la 4.5.2.1), ya que la antigua versión no disponía de soporte para Ubuntu.

            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

Esta versión obliga a poner la línea superior a la hora de utilizar la librería, ya que ha pasado a ser una librería de pago.

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

Galaxy Fräulein Yuna

Siempre me gusta de vez en cuando echar un vistazo a la página RomHacking, la cual tiene una comunidad inmensa de aficionados que realizan traducciones de videojuegos, tambien a la web CDRomance, la cual sube las imágenes de los juegos con los parches ya aplicados (a veces uno se hace un lío con las distintas versiones).

Hay un sistema en particular, llamado PC Engine, que nunca vio la luz fuera de Japón, y el cual dispone de un catálogo extensísimo de aventuras por descubrir (lamentablemente todas en íntegro japonés).

Galaxy Fräule Yuna, fue uno de estos descubrimientos. Con una duración aproximada de 6 – 7 horas de juego, se presenta como una novela visual con toques rpg, y un apartado artístico maravilloso.

El juego se desarrolla en 2499, en un futuro en el que los viajes interplanetarios son posibles, y en el que visitaremos diferentes planetas, por ejemplo, uno acuático, un planeta «máquina», un planeta selva tropical, e incluso un agujero negro.

El ritmo del juego es muy bueno, no llegando a aburrir ni a resultar pesado, aunque la trama no es nada del otro mundo (la eterna batalla de la luz contra la oscuridad), consigue mantenerte pegado al mando.

En cuanto pueda empezaré la segunda parte, ya que esta me ha dejado un muy buen sabor de boca, y por suerte esta segunda parte también se encuentra traducida al inglés por aficionados.