CPCSFX: un diminuto motor de efectos de sonido para Amstrad CPC escrito en Z80

Un nuevo motor de efectos de sonido para Amstrad CPC acaba de ver la luz bajo el nombre de CPCSFX, un proyecto experimental y extremadamente ligero que demuestra cómo controlar directamente el chip de sonido PSG sin recurrir a firmware ni motores externos.

Desarrollado para el juego Reginald and the She Vampires, CPCSFX ocupa actualmente solo 299 bytes, a los que se suman 289 bytes de datos para ocho efectos de sonido de ejemplo. La versión actual es la 0.1, publicada el 18 de diciembre de 2025, y su código se distribuye bajo licencia GPLv2.

Lejos de competir con soluciones consolidadas como Arkos Tracker, el objetivo del proyecto es puramente educativo y experimental: mostrar cómo generar sonido directamente desde código máquina Z80, algo poco documentado en la escena CPC, donde la mayoría de ejemplos dependen de firmware o motores preconstruidos.

El autor reconoce que los sonidos son simples y que el motor aún puede contener errores, pero destaca el valor del aprendizaje desde cero. De hecho, aunque los valores de las notas fueron generados con ayuda de ChatGPT, toda la lógica del motor se desarrolló mediante prueba y error, partiendo únicamente de la generación de un tono básico.

Efectos de sonido incluidos

El proyecto incluye una imagen DSK lista para probar, junto a un ejemplo integrado en CPCTelera. Al ejecutar el disco y pulsar las teclas A a H, se reproducen distintos efectos de sonido, indicados además por un cambio de color en el borde de la pantalla:

  • A – Paso
  • B – Obtener objeto
  • C – Aparición de enemigo
  • D – Aviso de pista
  • E – Abrir puerta
  • F – Uso de bomba
  • G – Matar monstruo
  • H – Disparo

Todos los efectos se reproducen secuencialmente por el canal A del PSG.

Formato y uso del motor

Cada efecto está compuesto por una secuencia de notas, incluyendo opcionalmente silencios, con un formato compacto de 9 bytes por nota, donde se define el periodo, duración, volumen y parámetros como ruido, envolvente o vibrato.

Para integrarlo en un proyecto CPCTelera, basta con declarar el efecto y lanzarlo mediante sfx_start(), mientras que la reproducción real se gestiona llamando regularmente a sfx_update(), preferiblemente sincronizado con el refresco vertical o desde una interrupción. También se incluye una función sfx_stop() para detener el sonido de forma inmediata.

Compatibilidad y futuro

Un punto importante a tener en cuenta es que CPCSFX utiliza la nueva convención de llamadas de SDCC 4.5, por lo que requiere la rama CPCTeleraNext, desarrollada por Arnaud. El autor anima a la comunidad a bifurcar el proyecto, optimizarlo y añadir nuevas funciones, manteniendo como objetivo un reproductor de menos de 512 bytes y centrado exclusivamente en efectos de sonido.

Entre las posibles mejoras futuras se barajan:

  • Soporte multicanal
  • Deslizamiento de tono (pitch slide)

Un pequeño motor, humilde en ambición, pero muy interesante para quienes disfrutan explorando los límites del hardware clásico y la programación de bajo nivel en el Amstrad CPC.