Mega65 una retromáquina moderna: primera toma de contacto mediante su emulador

Hace unos años me enteré de la existencia del Mega651, un nuevo ordenador de 8 bits que pretende ser el Commodore C65 que nunca salió a la luz. De hecho esta máquina está basada en prototipos del C65 y su ROM parte de la del C65 que lógicamente contenía muchos errores por pulir ya que sólo era un prototipo en desarrollo.
Este ordenador utiliza un FPGA y aparte de ser un Commodore C65 mejorado tiene compatibildad con un C64 tanto desde el propio core del Mega65, que imita la capa de compatibilidad que tenían prevista incluir los ingenieros de Commodore en el C65, como un core propio que imita un Commodore C64 completo. Ahora mismo hay otros cores como uno de ZX Spectrum y otro de GameBoy.
Hace unos días quise echarle un vistazo de nuevo al proyecto para ver cómo había evolucionado. Me interesó sobre todo ver que aparte de en BASIC y en ensamblador, se podía ya programar en C e incluso hay un PASCAL para este sistema. También ví que había un emulador llamado Xemu2 así que me decidí a instalarlo y probar el Mega65.
Instalación y configuración del emulador Xemu
Aunque se puede instalar desde el código fuente que está en GitHub3, el desarrolador proporciona algunos paquetes4 entre los cuales se encuentra uno para Ubuntu que funciona perfectamente en mi sistema Devuan GNU+Linux. Así que lo descargué y lo instalé.
Como es habitual, el emulador requiere de la ROM del sistema. Yo he seguido los pasos indicados en la documentación oficial de Xemu5 para obtenerla. El proceso no es muy complicado pero requiere algo de trabajo por nuestra parte ya que por un lado debemos obtener la ROM original del Commodore C65 que puedes encontrar en internet (suele estar bajo el nombre 910828.bin) y por otro lado debemos obtener los archivos con los cambios propios de la ROM del Mega65 que son software libre y que puedes descargar desde el repositorio de archivos oficial6 (busca por BDF).
Una vez que tenemos todos los archivos hay que parchear la ROM del C65 para aplicarle los cambios de Mega65. Para parchear la ROM en mi sistema Devuan GNU+Linux instalé bsdiff y luego utilicé el comando bspatch que forma parte de bsdiff.
sudo apt install bsdiff
bspatch 910828.bin new-920364.bin 920413/920413.bdf
910828
es la ROM original del C65new-920364.bin
es la ROM parcheada que vamos a utilizar920413/920413.bdf
son los cambios en la ROM del Mega65
Ahora que tenemos la ROM y el emulador instalado solamente nos queda ejecutar el emulador y configurarlo. Lo podemos ejecutar desde el entorno gráfico o desde la terminal con el comando
xemu-xmega65
Durante el primer arranque nos pedirá si queremos que nos cree el archivo SD virtual necesario por el emulador y demás cosas necesarias. Le indicamos que sí y una vez que esté todo arrancado y ejecutado procedemos a añadir la ROM haciendo click derecho sobre la ventana del emulador y seleccionando "Disks" -> "SD-card" -> "Update files on SD image".
Una vez hecho esto hacemos click derecho sobre la ventana del emulador y seleccionamos "Reset/ROM Switching" -> "Reset". En este momento ya debería de arrancar el emulador en el modo Mega65.

Probando y disfrutando el Mega65
Lo siguiente que hice fue descargar la documentación oficial del Mega65 para saber cómo funcionaba el sistema por encima e hice un par de pruebas muy simples en BASIC. También me descargué y probé el juego "Meteor Defense" para comprobar si el emulador funcionaba. Puedes descargarte el juego, la documentación y más cosas desde el repositorio oficial de archivos del Mega65 (ver notas al pie).

Tras comprobar su funcionamiento me decidí a transcribir un programa más grande así que tecleé el programa "Monster Chase" del libro Stimulating Simulations de C. William Engel7, lo ejecuté, lo guardé en una imagen de diskette virtual, lo volví a cargar y lo volví a ejecutar.
El juego en BASIC funcionó sin problemas y la verdad es que me agradó mucho tanto el hecho de que funcionara como la experiencia de tener que escribir en un ordenador un juego en BASIC copiándolo de un libro para poder jugar con él. Aunque esto hoy en día pueda parecer una broma, cuando yo empecé con los ordenadores en los 80 era muy habitual y dudo que alguien que no haya pasado por este ritual pueda entenderlo o apreciarlo en su justa medida.

Tras la experienca con BASIC que me sirvió para comprobar si el emulador funcionaba, instalé el compilador llvm-mos8 para compilar el código en C ya que este compilador tiene tanto un target mos-c64-clang para Commodore C64 como un target propio para el Mega65, mos-mega65-clang. Aquí debo decir que las cosas no fueron tan bien como me habría gustado.
Compilándolo para el C64 y ejecutándolo en el emulador con la capa de compatibilidad del C64 en Mega65 el programa funcionaba sin problemas, sin embargo compilándolo para el Mega65 y ejecutándolo en el emulador en modo Mega65 el programa no funcionaba. No tengo muy claro si el problema está en el compilador o en el emulador pero por lo que he visto incluso la gente que dispone del hardware real tiene ciertos problemas, de momento, con sus programas en C.


Conclusión
Tengo sentimientos encontrados con esta máquina ya que el precio no es precisamente bajo y el hecho de que no funcionara un programa tan simple hecho en C me desanimó bastante, pero seguiré pendiente de la evolución del proyecto. Mientras tanto seguiré disfrutando del Mega65 mediante el emulador Xemu.
¡Quién sabe que sorpresas podría deparar esta máquina en un futuro!