articulos

¿Podemos usar Inteligencia Artificial para programar en ZX Spectrum?

Por su alto interés, reproducimos un artículo de Óscar González publicado en Linkedin titulado: «Fusionando pasado y futuro: Desarrollo en lenguaje natural de código máquina para ZX Spectrum mediante LLMs«. Agradecemos a nuestro amigo César Valencia que haya compartido con nosotros un artículo tan interesante.

¿Será la nueva fase en el homebrew tras los motores que simplifican la posibilidad de crear nuevos videojuegos para Spectrum? ¿Podremos pedir a la carta el juego que queramos? ¿Podremos mejorar los juegos de los 80 a nuestro antojo? A continuación os dejamos con el artículo:

O cómo hacer que un Spectrum del 82 dialogue con ChatGPT como en Black Mirror…

Como friki de la retroinformática y adicto actual a la IA, desde hace un tiempo llevo soñando despierto con una forma de unir estos dos mundos.

Hace «más años que un Spectrum de teclas de goma», cuando mi colega César Valencia y yo éramos dos chavalitos con acné y sueños pixelados, creamos «Zampabolas» (un juego que, entre nosotros, tenía más bugs que un hormiguero, pero que hoy es cultura retro española).

Aquella época fue nuestra «edad de oro», y ahora, décadas después, vuelvo a la carga con otra idea tan absurda como inútil en la práctica: LLMZ80, un modelo de generación de código (juegos, si, hablamos de juegos) mediante lenguaje natural para nuestros Z80 a 3.5 MHz (¡sí, solo 3.5… y MHz, no GHz… no es un error tipográfico!)

Entendimiento de tecnologías (o cómo hacer que ChatGPT entienda que «OUT (C),0» no es un insulto)

La pregunta que originó todo fue: «¿Y si le pido a una IA que escriba código para una máquina que ni siquiera tenía disco duro ni USB?». El resultado es esta pequeña suite de desarrollo que incluye:

  • Generación de código C para Spectrum usando LLMs (próximamente para Amstrad CPC, ¡que no se enfaden los CPCeros!).
  • Compilación automática a Z80 con Z88DK (el «navaja suiza» del desarrollo retro).
  • Generación automática de .TAP para poder cargar el programa en nuestros emuladores preferidos.
  • Pruebas en emuladores como ZEsarUX (con su opción –realvideo que simula hasta el parpadeo de un CRT de los 80).

El desarrollo para sistemas ZX Spectrum (léase otros, Amstrad, Commodore 64, etc.) era árduo y dificil. Largos listados de código máquina, en los que el mínimo error causaba un cuelgue del equipo y vuelta a empezar. Larguísimas jornadas de desarrollo y depuración, en los que una coma o un número mal puesto te retrasaban horas e incluso días. Nada de ayudas, consultas a Internet, ni documentación. Todo a pelo.

Ojito ChatGPT, que sabes mucho de Javascript, pero esto son ¡palabras mayores!

Y una tarea enorme de optimización.

Qué bonito sería ahora decirle a nuestra LLM: «Oye, quiero un juego para Spectrum, que sea parecido al Manic Miner, pero con una temática post-industrial, con 20 pantallas distintas y, si, añade música»…

El Z80 corre a 3.5 MHz, pero ChatGPT-4 funciona en servidores con GPUs que consumen más energía que un pueblo entero en 1982.

Zampabolas, mi incipiente incursión en el software «comercial» junto con mi amigo y hermano Cesar Valencia

Detalles Técnicos (con chistes malos incluidos)

Sistema de compilación

Un batiburrillo de shell scripts que harían llorar a un purista de Python, pero que incluye:

  • Uso ede Virtualenvs para no liarla con dependencias (porque «en mi máquina funciona» es el lema del diablo).
  • Optimizaciones Z88DK que exprimen el Z80 como si fuera un limón en verano.
  • Emuladores configurados al milímetro: FUSE sin escalado (para puristas) y ZEsarUX con efectos CRT (para nostálgicos con gafas de sol).

El ZX Spectrum tenía solo 16 colores (mahou-meno), pero ¡menos es más! (dicho por nadie en 2025).

Stack Tecnológico

  • Lenguajes: Python (para lo moderno) y C con extensions de Z88DK (para lo retro).
  • LLM: GPT-4: que sabe más de Z80 que mi abuela de TikTok.
  • Compilador: SDCC (Small Device C Compiler), el «traductor de lujo» que convierte C en Z80.
  • Target: ZX Spectrum 48K (3.5 MHz, 16 KB RAM, y sí, 16 KB no es un maldito error).

Antes de continuar… una pequeña demostración

¡Mira qué bien funciona con un prompt tan genérico como «Quiero un Telesketch en mi Spectrum«….

Ejemplos incluidos (o «cómo hacer que un Spectrum dibuje algo que no sean UDGs»)

Los ejemplos son tan básicos como un «Hola mundo», pero demuestran que esto funciona:

  1. Border: Cambiar el borde de pantalla (el «Hola mundo» del Spectrum).
  2. Screen: Acceso directo a la memoria de video (0x4000, ¡apúntalo en la pared!).
  3. Graphics: Dibujar líneas sin usar el UDG (¡herejía en los 80!).
  4. Keyboard: Leer el teclado mediante I/O ports (más lento que un caracol con sueño).
  5. Sprites: Gráficos móviles (sin flicker, ¡milagro!).
  6. Sound: Pitidos gloriosos con el beeper (el auténtico ASMR retro).

Estos ejemplos sirven a la vez de tests unitarios como de pequeño RAG, así que los iré ampliando según llegue a la generación del «Profanation» por completo!!!

Detalle: La memoria de video del Spectrum está mapeada en 0x4000-0x57FF, y si no lo sabías, ¡eres un newbie!

Integración con IA (o cómo evitar que GPT-4 sugiera usar ChatGPT en el código)

La IA no solo genera código, sino que:

  • Corrige errores como el clásico «¡Has olvidado preservar los registros BC y DE!» (sí, soy ese pesado).
  • Optimiza código para que quepa en 48 KB (¡GPT-4, tú que cabes en 175 billones de parámetros, ayúdanos!).
  • Documenta con contexto histórico, porque «antes los programadores cargaban juegos desde casete… en 10 minutos… cuesta arriba… ambos sentidos».
ZEsarUX
ZEsarUX, una pequeña maravilla para los amantes del Gomas

«Programar el Z80 es como hacer malabares con cuchillos… pero sin manos»Mel Croucher, creador de Deus Ex Machina (el p*to mejor juego de la historia y esto no es opinión mia, es una verdad como un templo.

Conclusión (o por qué esto no es solo nostalgia barata)

Este proyecto es un puente entre épocas. No es solo codificar para una reliquia, sino preservar su ADN tecnológico usando herramientas modernas, y permitir que todos aquellos que se quedaron con el gusanillo de desarrollar algo para su vieja máquina,j puedan hacerlo ahora. Y quien diga que es cosa del pasado, que recuerde que el Z80 aún se usa en lavadoras y semáforos…

El Z80 se fabrica hoy en día… ¡y tiene un modo de compatibilidad con el 8080 de Intel!

Como siempre, te comparto todo el código diponible en Github.

Firma: Oscar González

Fuente.

El Mundo del Spectrum

El Mundo del Spectrum es un medio digital dedicado al Sinclair ZX Spectrum, a los 80 y al Retro en general. Nació como homenaje a Microhobby en 1996 en formato revista mensual evolucionando hasta esta cuarta época. Como medio audiovisual se publica regularmente el Podcast llamado El Mundo del Spectrum Podcast y material en vídeo en el canal de Youtube. Publicados dos libros de gran éxito editorial. Si te gusta el Retro y el Spectrum en particular, esta es tu web. Bienvenido/a.

Un comentario

  1. Muy buenas. Un artículo bastante interesante. Voy a compartir mi experiencia sobre el tema, por si a algún incauto le interesa. En general no está muy en línea con el contenido del artículo. Resumiendo mucho: es bastante difícil conseguir algo más complicado que un «Hello, World» y que se tarde menos que haciéndolo uno mismo.

    Respecto a pedir a las IAs generar código ensamblador, el resultado es bastante uniforme entre diferentes plataformas: son capaces de generar las estructuras generales del código, como si se tratase de un lenguaje de alto nivel, pero son incapaces de absorber las sutilizas de muchas instrucciones, su afección a los flags, etc…incluso se inventan instrucciones considerando que todas las opciones son posibles. No es extraño encontrarse un ADD D, E en una pieza de código. También les cuesta mucho, por no decir que les imposible, corregir un código generado con errores.

    Si les pregunto el motivo de estos errores a ellas mismas, plantean dos principales:
    – les cuesta menos trabajar con lenguajes de alto nivel, porque son mucho más parecidos al lenguaje natural.
    – hay mucho menos código en ensamblador z80 que de otros lenguajes que puedan utilizar para entrenar sus modelos.

    En lo que sí coincido, es que es bastante más práctico pedirles un código de alto nivel (p.e. C para Z88DK) y compilarlo para el ZX.

    Aprovecho para comentar que tengo publicado y mantengo un compilador de JavaScript para Z80 y, concretamente, para ZX Spectrum. Se incluye el código en python, manuales y ejemplos:
    https://github.com/reeagbo/Jassco

    Un saludo
    Álex

Deja una respuesta

Botón volver arriba