jueves, 28 de mayo de 2026

Cadence, emulador Amstrad CPC enfocado al desarrollo, exclusivo GNU/Linux y Apple

Cadence es un nuevo emulador exclusivo de GNU/Linux, ordenadores Apple y probablemente otros unixes que está desarrollando Abalore, conocido en la escena Amstrad por hacer diversos desarrollos interesantes como su juego Alcon 2020, por nombrar un botón de muestra.


A pesar de estar en desarrollo, lo he probado como un emulador normal y me ha parecido que va muy fino y preciso, incluso con juegos tan exigentes como Pinball Dreams y algunos demos difíciles de emular.

Abalore ha preparado un appimage en su página de proyectos para simplemente descargar, darle permisos y ejecutar, si tienes una distro Linux actual es muy buena opción, por ejemplo Debian 13.

Sin embargo yo tuve algunos problemas con equipos con la versión anterior de Debian por versiones de una librería, además de que no serviría para una raspberri pi al ser otra arquitectura de hardware distinta.

Ambos problemas los solucioné compilando el código desde su repositorio en github, algo tan sencillo como ejecutar los siguientes comandos en tu terminal:

Nos hacemos administradores con los comandos sudo bash o su- y tecleamos:

apt install git qt6-base-dev qt6-svg-dev libqt6opengl6-dev libportaudio2 portaudio19-dev build-essential
git clone https://github.com/abalore/Cadence
cd Cadence
qmake6 Cadence.pro
make -j"$(nproc)" 

O lo instalamos con RetroMultiInstaller que ya incluye este emulador y hasta crea el acceso directo.

El funcionamiento es muy sencillo:

  • Abajo puedes ver unos botones alargamos para cargar cintas o discos, tanto en la unidad A: como en la B:, para cargar o expulsar hay que hacer doble clic en el botón correspondiente.
    •  También tiene un testigo como los CPC reales mostrando la actividad de las disqueteras.
  • Arriba tienes los menús para seleccionar el modelo de CPC, reseteo, selección de medios y la joya de la corona: las herramientas para desarrollo, debug, inspeccionar memoria, puntos de ruptura...
  • También puedes usar las teclas de función para diferentes operaciones, de entre las que destacamos:
    • F1: Insertar cinta
      • Mayus + F1: rebobina
      • Ctrl + F1: expulsa la cinta.
    • F2, insertar disco en la unidad A:
      • Ctrl + F2: expulsa disco en A:.
    • F3, insertar disco en la unidad B:
      • Ctrl + F3: expulsa disco en B;.
    • F5: muestra el depurador.
    • F6: muestra el ensamblador.
    • F9: desbloquea el límite de la velocidad real del CPC.
    • F10: activa la emulación de joystick.
    • F11: muestra el emulador a pantalla completa.
      • Mayus + F11: monitor fósforo verde.
      • Ctrl + F11: escalado suave.
    • F12: reset.
    • Ctrl + un número del 0 al 5: activa la persistencia del fósforo.
    • Alt + F4: salir del emulador.
  • Todos atajos de pantalla en el depurador y ensamblador podéis verlo mediante la opciones de Menú:
    • Help ► Shotcuts...

 

Un emulador llamado a ayudar a los desarrolladores del CPC. 

viernes, 22 de mayo de 2026

Hacer juegos con bash

SÍ, no lo has leído mal pone "Hacer juegos con bash" no "Hacer juegos para bash", sabíamos que bash es un lenguaje de scripting para GNU/Linux muy potente pero, ¿tanto como para crear un videojuego? Pues sí, de hecho se han creado unos cuantos con él.

Lógicamente, no esperes un juego espectacular, pero hay varios creados para consola que se pueden hasta disfrutar. 

Algunos ejemplos:

  1. Basheroids: estilo Asteroids en Bash. Lo puedes descargar de https://github.com/Kafito/BashGameEngine
  2. Bash 2048: versión del juego 2048 programada en Bash. Lo puedes descargar de https://github.com/JosefZIla/bash2048
  3. bashcrawl: aventura de texto en Bash para aprender a moverte por la terminal y encontrar un tesoro. Se puede descargar de https://github.com/planetacomputer/bashcrawl
  4. Bash Hangman: ahorcado implementado en Bash. Lo puedes descargar de https://github.com/akshayub/Hangman-Bash
  5. Bash Invaders: clon de Space Invaders hecho en script Bash. Lo puedes descargar de https://github.com/Datron/space_invaders
  6. Bash minesweeper: buscaminas en Bash, normalmente en versión ASCII. Lo puedes descargar de https://github.com/matman26/shell-sweeper
  7. Bash Quiz games: cuestionarios interactivos hechos con Bash. Lo puedes descargar de https://github.com/AleksandarKostovic/bash-game
  8. Bash RPGs simples: aventuras de texto y combates por turnos en shell script. Lo puedes descargar de https://github.com/wolandark/bash-dungeon
  9. Bash Snake: versión de Snake escrita en Bash. Lo puedes descargar de https://draft.blogger.com/#
  10. Bash Tetris: Tetris hecho en bash. Lo puedes descargar de https://draft.blogger.com/#
    Bashtris: clon de Tetris hecho en Bash. Lo puedes descargar de https://github.com/dereksgithub/bash-tetris 
  11. Bash Tic-Tac-Toe: tres en raya hecho en shell script. Lo puedes descargar de https://github.com/AshutoshNirkhe/tic-tac-toe
  12. BashVenture: framework clásico de aventura textual para Bash. Se puede descargar de https://github.com/apetro/BashVenture 
  13. Playground: buscaminas para la consola. Lo puedes descagar de https://github.com/abhiTamrakar/playground
  14. Sausage: juego de palabras para terminal escrito en Bash, inspirado en Bookworm. Se puede descargar de https://gitlab.com/christosangel/sausage
  15. shell-adventure: aventura de texto pequeña escrita en Bash. Se puede descargar de https://github.com/aafrecct/shell-adventure
  16. tetri.sh: Tetris sencillo programado en Bash. Se puede descargar de https://github.com/psykulsk/tetri.sh

Algunos de estos programas los podéis encontrar en los repositorios de tu distro, por ejemplo en el paquete bash_games.

 


 

viernes, 15 de mayo de 2026

Crear una imagen para una microSD a partir de los archivos y directorios que hay en una ruta de directorio

Supongamos que queremos crear una imagen para distribuir entre dispositivos que consiste en un conjunto de archivos y directorios contenidos en un archivo ZIP que hay que volcar en una microSD con formato FAT32, por ejemplo para usar algún desarrollo baremetal para algún dispositivo ARM, real o emulado.

Vamos a tomar como ejemplo el paquete del software Symbos40pack para Amstrad CPC del que se habló hace poco en este artículo de AUA.

Para empezar hay que instalarse las dostools ya que vamos usar el formato FAT32:
sudo apt install dosfstools

  1. Descargar el sofware de la dirección:
    https://mega.nz/file/GMAHEQBQ#HGBzIviRVH5PZsMNnPDGBu-B3oa9764b-2vyph3bu_k 

    Cuando descargamos la distribución obtenemos un archivo ZIP que hay que descomprimir en una tarjeta SD que hay que meter en el M4, por tanto el primer paso va a ser descomprimir, lo podemos hacer desde el explorador del sistema o desde consola con el comando unzip.

  2. Para no liarla recomiendo descomprimir en una carpeta donde solo esté el contenido del zip, asumiendo que estamos en la ruta donde hemos descargado Symbos40pack.zip :
    mkdir symbos40
    cd symbos40
    unzip ../Symbos40pack.zip

  3. Hay que averiguar el tamaño del sistema descomprimido.

    du . -sh

    Que nos da un tamaño de 658M, así que habrá que crear una imagen de un tamaño algo más grande, por ejemplo de 1000Mb.

  4. Nos aseguramos que están instaladas las dostools:
    sudo apt install dosfstools
     
  5.  Creamos la imagen de la tarjeta SD:

    dd if=/dev/zero of=../symbos40pack.img bs=1M count=1024
    /sbin/mkfs.vfat ../symbos40pack.img
    mkdir /tmp/imgmnt
    sudo mount -o loop ../symbos40pack.img /tmp/imgmnt
    sudo cp -a . /tmp/imgmnt/
    sudo umount /tmp/imgmnt

Ahora esta imagen la podríamos "tostar" en una microSD o pendrive con el comando dd o usar en un entorno de virtualización, emulación, etc...

viernes, 8 de mayo de 2026

Elegir el mando correcto para tu televisor Samsung

Os comparto mi experiencia con los mandos de televisores Samsung, porque no todos son iguales ni mucho menos.

 


Hace tiempo os comenté que el proceso para quitar la telemetría a mi televisor Samsung y convertirlo en un sencillo televisor tonto de 65" tuve que cambiar el desastroso mando que traía, primero de la foto, por uno comprado de los chinos que iba a las mil maravillas, tercero de la foto.

Desgraciadamente, como suele ser habitual, los mandos se nos caen al suelo y con el tiempo se terminan rompiendo, en este caso varios botones dejaron de funcionar, toda la pinta de que algo se ha soltado en la placa del mismo pero para intentar su reparación tengo que abrirlo, localizar las soldaduras y otros daños y repararlo manualmente, mientras saco tiempo y ganas me he ido a la solución más sencilla: comprar otro mando en una droguería de barrio.

Se trata del mando que aparece en la parte central de foto, un mando de la marca "S&N" que es un auténtico desastre: cuando dejas pulsado los botones para subir o bajar el volumen o cambiar de canal solo reconoce una pulsación y solo si lo tienes perfectamente alineado frontalmente con el sensor del televisor, también hace pulsaciones ghosting cuando le da la gana.

Afortunadamente conseguí cambiarlo por unos productos de limpieza a buen precio, nada de devolver el dinero por un producto defectuoso, pero ahora hay otro problema, ¿cómo acierto comprando otro? Lo que plantea dos problemas:

1. Identificar al buen mando:

En un grupo de hardware de Telegram me han recordado el truco de encender la cámara del móvil y enfocar al mando mientras pulso el botón de subir volumen. Hice la prueba con los dos mandos clónicos y mientras el viejo mostraba un fuerte parpadeo constante y el nuevo apenas mostraba un tímido encendido y apagado.

2. Que me dejen probarlo:

La cosa está clara, o me dejan probarlo con unas pilas con el móvil antes o me aseguran que me devuelven el dinero o no lo compro.

Hay que andarse con mil ojos para que no te la cuelen. 

Si pone la marca S&N ni me molesto en preguntar.

Al final me pillé uno que era aparentemente muy parecido comprado en una plataforma muy conocida donde SÍ me devuelven el dinero sin preguntas, aparte de poder preguntar antes si funcionaba en ráfagas. Lo siento por el comercio local pero en esto se tienen que poner las pilas para mantener la clientela, se tienen que grabar a fuego que un cliente satisfecho es un cliente que fidelizas aunque ahora le tengas que devolver el dinero. 

viernes, 1 de mayo de 2026

Instalar PiApps en Raspberry Pi OS

PiApps es un script para instalar aplicaciones en Raspberry Pi OS adaptadas específicamente para este tipo de placas.


 

Es un buen complemento para completar la terna de instaladores con synaptic, para instalar software genérico de la familia Debian y RetroMultiInstaller, la colección de scripts para hacer triviales instalaciones complejas.

Si no lo tienes instalado lo puedes instalar desde el propio RetroMultiInstaller o manualmente tecleando estos comandos desde la consola de GNU/Linux:

sudo apt install curl
curl -fsSL https://raw.githubusercontent.com/Botspot/pi-apps/master/install | bash

Ahora tienes un nuevo acceso a PiApps en la categoría Accesorios del menú de aplicaciones.

También se crea un acceso en el escritorio, en este caso si hacemos doble clic nos aparece un aviso de que es una secuencia de órdenes, nosotros pulsamos ejecutar.

 

Cuando ejecutes el programa aparecerán las categorías en las que se clasifican, haciendo clic en cada una de ellas s aparecen los programas con una opción de 'Back' para volver al menú anterior.

Las aplicaciones instaladas aparecerán en un color verde, reconoce las que ya estaban instaladas con apt (todas las instaladas con synaptic y algunas con RMI)

Al hacer clic en un programa aparece la descripción del mismo ofreciendo la opción de instalarla o desinstalarla. 

Al pulsar Instalar se ejecuta el script personalizado de instalación. 

viernes, 24 de abril de 2026

Copiar archivos de disco a cinta y viceversa con Discology ejecutando en Retro Virtual Machine

Para copiar archivos desde un disco virtual (DSK) a un cassette virtual (CDT) hay que seguir los siguientes pasos:

  1. Arrancamos RVM 
  2. Insertamos Discology desde la unidad A
  3. Arrancamos Discology
  4. Creamos un disco nuevo y formateado en la Unidad B
  5. Insertamos la cinta, para lo cual hacemos clic en el cassette que aparece en el emulador, en el botón de STOP.
  6. Seleccionamos el archivo CDT marcando la cinta NO protegida contra escritura.
  7. Si son varios archivos los vamos eligiendo EN EL ORDEN que queremos que se grabe en la cinta.
  8. Si hay un cargador Basic, posiblemente tengamos que modificarlo para que no salga continuamente mensajes y requerimientos poniendo el caracter "!" antes del nombre del archivo. 
  9. Pulsamos Record
  10. Vamos a las opciones Copier
  11. Vamos a "Options".
  12. Elegimos "Dest, drive B:"
  13. Seleccionamos "File".
  14. Elegimos "Destination: Tape" y "Source: Disc".
  15. Elegimos "File > Copy".
  16. Seleccionamos los archivos deseados en el orden que queremos que esté en la cinta.
  17. Pulsamos la tecla "Intro".
  18. Esperamos a que se complete el proceso. Tardará un rato.

Para hacer la operación contraria son los mismos pasos pero cambiando "Destination: Disc" y "Source: Tape".

 


 

viernes, 17 de abril de 2026

Leer parte de una URL de otra URL y con plan B

Supongamos que queremos descargar mediante un script un archivo, pero con estas circunstancias:

  1. Cuando cambia de versión, la URL cambia porque el número de versión es parte de la descarga.
  2. Si accedemos a una dirección concreta obtendremos el número de versión actual. Para ello usamos el comando wget URL -q -O - que nos devolverá el contenido del archivo descargado, si no tiene éxito nos devolverá una cadena vacía. El resultado de la operación lo pasamos una variable.
  3. En el caso de haber obtenido una cadena vacía, por estar la dirección que nos devuelve la versión fuera de línea, indicamos una versión que sabemos que siempre vamos a tener disponible. Así al menos poder instalar el programa aunque no sea la última versión.

En el script de descarga del emulador ZESarUX, tenemos un buen ejemplo de implementación de todo lo explicado:

#/bin/bash
software="zesarux"
carpeta="zesaruxpack"
latestversionurl="http://51.83.33.13/check_updates/stable.txt"
versionpack=$(wget $latestversionurl -q -O -)
if ["$versionpack" == ""]; then
    versionpack="12.0"
fi
echo "ZESarUX $versionpack"
../commonscripts/instalator.sh git build-essential libsdl1.2-dev libsdl2-dev libncurses5-dev libaal-dev libcaca-dev wget
wget -c https://github.com/chernandezba/zesarux/releases/download/ZEsarUX-$versionpack/ZEsarUX_src-$versionpack.tar.gz -O $software.tar.gz
tar -zxvf $software.tar.gz
mv ZEsarUX-$versionpack $carpeta
cd $carpeta
# compilar
git pull
cd src
./configure
make
sudo make install

Este script descarga la última versión estable de código, que tenemos en http://51.83.33.13/check_updates/stable.txt tal y como me indicó su creador.