Skip to content

ZX‐Spectrum

Juan Gonzalez-Gomez edited this page Jan 24, 2026 · 69 revisions

Introducción

Gracias a los trabajos de Jesús Arias, y a la nueva placa que ha creado, es posible construir ordenadores retro con la tarjeta Alhambra-II. En el grupo de FPGA está la información

Una de las cosas que ha realizado es la creación de un ZX-Spectrum capaz de ejecutar el juego Knight-Lore

El objetivo de esta documentación es crear un log con las pruebas para ponerlo en marcha en mi Alhambra-II

LOG

2026-01-14

En este post de FPGAWARs Jesús empezó a enviar "juegos" en ordenadores retro:

https://groups.google.com/g/fpga-wars-explorando-el-lado-libre/c/WhI3DWmgQOk

El primero que ha puesto es el DEFENDER

Defender: Puesta en marcha

Para ponerlo en marcha necesito:

  • ✅Alhambra-II con la placa multimedia

En este hilo de FPGAwars es donde Jesús comentó el diseño de la Multimedia Shield para la Alhambra-II: https://groups.google.com/g/fpga-wars-explorando-el-lado-libre/c/RlrsWJvY4Zk/m/j6bV3Q12AwAJ

En este repo de Github está la información de la placa: https://github.com/jesari-git/Alhambra2media

Estoy siguiendo las instrucciones del primer mensaje del hilo Videojuego en Alhambra II de FPGAwars, que comienza con el DEFENDER. He colcado el jumper que está junto al PS2 en la posición PS2 (Venía en la posición USB)

  • ✅Teclado PS2

Yo en su momento estuvo trabajando con el ps2, y tenía un teclado PS2 (que no se donde está). Voy a localizar primero esa documentación...

Este es el hilo de FPGAwars donde lo comenté: https://groups.google.com/g/fpga-wars-explorando-el-lado-libre/c/ysO-TZn8sEo/m/jZxRR-KRBgAJ

La documentación está aquí: https://github.com/Obijuan/PS2-KeyBoard-FPGA/wiki

Tengo que localizar ese teclado ps2...Listo! Lo tenía en el trastero

  • ✅Ninguna tarjeta SD insertada

  • ✅Monitor VGA

  • ✅Ampli de audio conectado al jack "AOUT":

No tengo amplificador, pero voy a usar unos cascos con jack. Me imagino que servirán

Este es el escenario que tengo montado:

En la derecha tengo el portátil, que sólo lo uso para cargar el bitstream en la FPGA, mediante un cable USB. La placa multimedia está conectada al monitor VGA, al teclado PS2 y a los cascos para el sonido

Me he descargado el fichero bitstream (combi.bin) de Jesús y lo he renombrado a defender-1.bin. Lo cargo en la FPGA con este comando:

apio raw "iceprog defender-1.bin"

Este es el comando completo con el resultado:

obijuan@JANEL:~/Develop/Cuadernos-tecnicos-FPGAs-libres/wiki/ZX-Spectrum/Bitstreams$ apio raw "iceprog defender-1.bin"
init..
cdone: high
reset..
cdone: low
flash ID: 0xEF 0x40 0x16 0x00
file size: 161724
erase 64kB sector at 0x000000..
erase 64kB sector at 0x010000..
erase 64kB sector at 0x020000..
programming..
done.                 
reading..
VERIFY OK             
cdone: high
obijuan@JANEL:~/Develop/Cuadernos-tecnicos-FPGAs-libres/wiki/ZX-Spectrum/Bitstreams$ 

Nada más cargarse el LED 7 se pone a parpadear. A los pocos segundos se empiezan a ver cosas en el monitor hasta que se alcanza la página de TEST. Todo ello sin emitir ningún sonido

Esto es lo primero que se ve:

Luego cambia a esta otra imagen, para indicar que se han pasado los tests

Y termina en esta otra pantalla, que es el menú principal de tests:

En este vídeo se muestra el proceso hasta llegar a esta pantalla. No se ve en el vídeo, pero con la mano derecha estoy enchufando la placa al USB del portátil para alimentarlo. A partir de ahí comienza a funcionar

vídeo de Youtube:

Click to see the youtube video

Pulsamos la tecla F12. Se realiza un nuevo test, mostrando las mismas pantallas anteriores, pero ahora se reproduce un sonido al comienzo y aparece esta pantalla:

El sonido desaparece, y la máquina entra en el modo demo (en silencio), en el que se muestran diferentes pantallas cíclicamente. Comienza por la de los records:

Y tras esta comimenza una mini-demo del juego (sin sonido también)

En este vídeo de youtube vemos esta parte, y escuchamos el sonido inicial

Click to see the youtube video

Jugando al Defender

Las teclas del juego son las siguientes:

  • F1, F2, F3: Insertar moneda
  • 1: Arrancar la partida con 1 jugador
  • 2: Arrancar la partida con 2 jugadores
  • Q: Subir
  • A: Bajar
  • Alt: Propulsión
  • Shift derecho: Cambio de sentido de la nave
  • Ctrl: Disparo
  • B: Bomba
  • H: Hiperespacio

Para jugar primero apretamos F1, que simula la introducción de una moneda, y luego pulsamos en 1 para comenzar la partida con 1 jugador

Este es un pantallazo del juego:

En este Vídeo de Youtube lo vemos en acción, con sonido:

Click to see the youtube video

Fuentes y documentación del Defender

ZX Spectrum

Para tener un ZX Spectrum con la Alhambra-II + Multimedia shield se usa la misma configuración que con el defender. La única diferencia es que ahora hay que cargar este otro bitstream: zx-spectrum-1.bin

Para configura la FPGA se usa este comando:

apio raw "iceprog zx-spectrum-1.bin"

Esto es lo que ocurre al ejecutarlo:

obijuan@JANEL:~/Develop/Cuadernos-tecnicos-FPGAs-libres/wiki/ZX-Spectrum/Bitstreams$ apio raw "iceprog zx-spectrum-1.bin"
init..
cdone: high
reset..
cdone: low
flash ID: 0xEF 0x40 0x16 0x00
file size: 151484
erase 64kB sector at 0x000000..
erase 64kB sector at 0x010000..
erase 64kB sector at 0x020000..
programming..
done.                 
reading..
VERIFY OK             
cdone: high
Bye.
obijuan@JANEL:~/Develop/Cuadernos-tecnicos-FPGAs-libres/wiki/ZX-Spectrum/Bitstreams$

En cuanto acaba la carga aparece la pantalla de inicio del ZX-Spectrum!!

Además, el LED 2 de la Alhambra estará parpadeando, para indicar que el sistema está vivo

En este vídeo de youtube se puede ver en acción. Conecto la Alhambra-II a la alimentación (por USB), y aparece el flamante ZX-Spectrum!. Escribo un mini-programa de pruebas y lo ejecuta. Luego se resetea la placa para volver al comienzo

Click to see the youtube video

Documentación técnica

En este documento de Jesús Arias, se puede encontrar información técnica sobre la implementación del ZX-Spectrum en la FPGA:

Teclado

Este es el teclado original del spectrum 48k. Es necesario tenerlo a mano para saber qué símbolo e instrucción está asociado a cada tecla

Esta es la correspondencia de teclas entre el teclado PS2 y el del Spectrum real:

  • SHIFT -> CAPS SHIFT: Seleccionar la letra en mayúsculas. Para los números permite realizar una acción: Mover cursor, borrar, editar, cambiar atributos, fijar las mayúsculas
  • Control -> SYMBOL shift: Selecciona los símbolos en rojo

Este es el teclado del spectrum 48k+. Algunas de las funciones que más se usan se han metido en su propia tecla, como por ejemplo borrar, mover el cursor, break...

Estas son algunas de las combinaciones frecuencias, que conviene conocer:

  • ESC: RESET! Es el pulsador de reset para inicializar el spectrum (CUIDADO!!!)
  • Control-Shift: Pasar al modo extendido
  • Shift-0: Delete: Borrar el carácter que está a la izquierda del cursor
  • Shift-space: BREAK
  • Shift-2: CAPS LOCK: Fijar a mayúsculas
  • Shift-5: Cursor izquierda
  • Shift-8: Cursor derecha
  • Shift-6: Cursor abajo
  • Shift-7: Cursor arriba
  • Shift-1: EDIT
  • Shift-9: Pasar a modo gráfico (para pintar caracteres)
  • Control-P: Comillas "
  • Control-O: Punto y coma ;
  • Control-M: Punto .
  • Control-N: Coma ,

Intérprete de instrucciones

Por defecto el spectrum funciona en modo intérprete de basic. En este modo podemos ejecutar directamente instrucciones basic. Aquí se resumen algunas de las más usas:

  • CLS -> V. Borrar la pantalla y llevar el cursor a la esquina superior izquierda
  • BORDER -> B. Cambiar el color del borde de la pantalla
  • LIST -> K. Mostrar el listo del programa actual
  • LOAD -> J. Cargar un programa desde la cinta
  • RUN -> R. Ejecutar el programa actual
  • PAUSE n -> M. Realizar una pausa. Si es 0, se hace una pausa hasta que se apriete una tecla. Este comando es muy util para depurar y hacer pruebas con el código
  • NEW -> Hacer un reset

Mi primer programa de ejemplo

Comenzamos por el Hola mundo. El programa es este

10 CLS
20 PRINT "Hola Mundo"

Se teclea apretando las siguientes teclas:

10V
20P<Ctrl-P>Hola Mundo<Ctrl-P>

El programa queda así:

Ahora lo ejecutamos con el comando RUN. Pulsamos R + ENTER

Este es el resultado:

Cargando el Knight Lore

Vamos a cargar el juego del Knight Lore. El proceso de carga es exactamente igual que en el Spectrum original. Hay que emitir la señal de audio del juego, con el volumen correcto, y meterla por la entrada de audio de la Multimedia shield

Lo que necesitamos es un cable de audio desde el PC hacia la Multimedia-Shield que termine en un conector Jack macho. En mi caso voy a usar la salida USB C del portátil, por lo que primero uso un conversor USB-C a conector jack hembra. Además uso un cable con dos terminadores jack-macho:

Este es el cable final, que se conecta por un lado al USB-C del portátil y por el otro a la Multimedia Shield:

Esta es la conexión a la Multimedia-Shield:

En el PC cargamos el fichero de audio del Knith-Lore (loreturbo.wav) con el programa Audacity

Tiene una duración de 3 minutos, que es lo que tarda en cargarse

En el Spectrum tecleamos el comando LOAD "" (Teclas: J<Ctrl-P><Ctrl-P>), y desde el Audacity pulsamos el botón de Play. El volumen es importante. En mi caso lo tengo que poner casi al máximo. Los LEDs3-7 de la Alhambra II marcan el nivel recibido. Para que la carga sea correcta tienen que encenderse entre 3 y 4 leds (Leds de 3 al 6)

Empieza la típica carga del Spectrum!. No oiremos nada durante la carga

Carga del primer bloque de datos

Se carga la pantalla de inicio, y comienza el último bloque con el juego

Al cabo de 3 minutos desde el comienzo, y si todo ha ido bien, ¡ya tenemos el knight lore cargado!

Y aquí ya estamos jugando

En este vídeo se puede ver en acción:

Click to see the youtube video

2026-01-24

Amstrad CPC

Jesús Arias lo ha vuelto a hacer. Ha crado una réplica del ordenador Amstrad CPC que se puede meter en la FPGA de la Alhambra-II con la Multimedia Shield

Esta vez el fichero .bin lo he grabado con el OpenFPGALoader. Este es el comando para grabarlo con apio, desde la versión 0.95

apio raw "openFPGALoader -b ice40_generic -f CPC-1.bin"

Este es el resultado. Tarde muy poco en grabarse:

obijuan@JANEL:~/Develop/Cuadernos-tecnicos-FPGAs-libres/wiki/ZX-Spectrum/Bitstreams$ apio raw "openFPGALoader -b ice40_generic -f CPC-1.bin"
empty
write to flash
Can't read iSerialNumber field from FTDI: considered as empty string
Jtag frequency : requested 6.00MHz   -> real 6.00MHz  
Parse file DONE
JEDEC ID: 0xef4016
Detected: Winbond W25Q32 64 sectors size: 32Mb
00
JEDEC ID: 0xef4016
Detected: Winbond W25Q32 64 sectors size: 32Mb
00000000 00000000 00000000 00
start addr: 00000000, end_addr: 00030000
Erasing: [==================================================] 100.00%
Done
Writing: [==================================================] 100.00%
Done
Wait for CDONE DONE
obijuan@JANEL:~/Develop/Cuadernos-tecnicos-FPGAs-libres/wiki/ZX-Spectrum/Bitstreams$

Una vez grabado el bitstream y las conexiones con el Teclado y la pantalla hechas, aparece el flamante CPC!!!

Teclas

Estas son algunas teclas remapeadas en el teclado PS2:

  • AltGr -> ; +
  • Windows -> :
  • Ç -> @ |
  • Bloq. Desp -> Reset

Documentación técnica: ZX_CPC_Alhambra.pdf

Jugando al Kight Lore

La carga del knight lore es similar a la del spectrum. Usamos el mismo cable de audio y el mismo reproductor. En el Amstrad CPC tecleamos este comando:

  • RUN"

Y reproducimos la cinta: Knight_Lore.wav

Al cabo de 5 minutos ya lo tenemos cargado, y podemos jugar!!

🚧 TODO 🚧

Clone this wiki locally