Página principal
ESP32
Emulador
ZX SPECTRUM - PAL
Cada uno tiene mitificado el ordenador en
el cual empezó, y el mio es el ZX SPECTRUM.
Otro circuito que encontré para hacer con el ESP32 es un emulador de
Spectrum.
https://github.com/sdima1357/spectrum128_esp32_usb_host_pal_tv
Existe otro emulador pero la salida es por VGA, es mucha de mejor su
calidad de video, pero no se podría conectar a televisiones
antiguas.
El entorno de desarrollo es MX21, es una distribución basada en
Debian, pero bastante mas actualizada, recomiendo que la probéis.
$ python3 --version
Python 3.9.2
$ uname -a
Linux mx21 6.0.0-6mx-amd64 #1 SMP PREEMPT_DYNAMIC
Debian 6.0.12-1~mx21+1 (2022-12-15) x86_64 GNU/Linux
El primer paso es instalar el entorno de desarrollo ESP, esto me dio
mucho trabajo, hasta que descubrí que con la última versión la 5,
producía errores en la compilación, por lo que tuve que instalar la
versión 4.4.4
mkdir -p ~/esp
cd ~/esp
git clone -b v4.4.4 --recursive
https://github.com/espressif/esp-idf.git
cd ~/esp/esp-idf
./install.sh esp32
cd esp-idf/
. ./export.sh
Este último paso
./export.sh configura el entorno del
terminal, si se cierra el terminal deberemos volver a ejecutarlo.
Ahora nos toca bajar el emulador desde la página del proyecto.
cd ..
git clone
https://github.com/sdima1357/spectrum128_esp32_usb_host_pal_tv
No metemos en el directorio del proyecto y lo compilamos y grabamos
el ejecutable en la ESP32 .
cd spectrum128_esp32_usb_host_pal_tv-main/
idf.py -p /dev/ttyUSB0 flash
Si todo fue bien, después de un
rato de compilación, grabará los ficheros *.bin en el ESP32,
para luego reiniciarse.
....
....
Writing at 0x000665df... (100 %)
Wrote 368880 bytes (223758 compressed) at 0x00010000
in 5.2 seconds (effective 567.4 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 103...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (103 compressed) at 0x00008000 in
0.1 seconds (effective 377.3 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
Done
Si tenemos
conectado la salida de vídeo a un televisor, veremos que arranca
el emulador de el Spectrum.
Aconsejo que no conectéis la tarjeta SD la primera vez, de esta
forma entraremos en el menú de selección de tipo 48K/128K
Tal y como compilamos las fuentes originales, el brillo es muy
bajo, por lo que decidí estudiar el código.
En el fichero smain.c debemos retocar un poco el
código para aumentar los niveles de salida de video.
Existen 2 líneas una comentada y otra descomentada, cambiarlas
de forma que queden así.
//#define
IRE(_x)
((uint32_t)(((_x)+40)*255/3.3/147.5) << 8)
// 3.3V DAC
#define
IRE(_x)
((uint32_t)(((_x)+40)*255*2/3.3/147.5) <<
8) // 3.3V DAC
Esto lo que hace es cambiar los niveles iniciales de la señal de
vídeo.
Ahora el nivel de brillo es bastante mejor, y aún se podría
poner mejor, pero no he querido retocar el código original.
Las ROMS de programas del Spectrum deberán grabarse dentro de un
directorio z48 si son del modelo 48K y en un directorio
z128 si son del modelo de 128K.
Todo esto está documentado en el fichero README.md que
se encuentra en las fuentes.
En este mismo fichero se explica la conexiones del ESP32 al
teclado y a la SD.
1 Analog color PAL-TV 50 Hz output: (GPIO25)
2 Two (bitband) USB-HID controllers
(DP/DM) GPIO16/ GPIO17 - USB 1 GPIO18/ GPIO19 - USB 2
3 Emulation AY-3-8910 (GPIO27)
4 SDCard control (.tap .z80 .sna) read pins:
PIN_NUM_MISO
2
PIN_NUM_MOSI 15
PIN_NUM_CLK 14
PIN_NUM_CS 13
5 Screen width F4/F5
6 Tape speed normal/fast F11/F12
Esquema de conexión.
He utilizado la placa de mi anterior montaje.
Menú de selección de ROMS
Jugando al JET PAC.
Muestra de una línea de la señal PAL.
Ya puedo jugar a mi juego preferido en el ZX
Spectrum PENETRATOR
Como podemos observar, la calidad del video compuesto no es el
mejor, y sobre todo si utilizamos las pantalla planas, pero se
puede jugar perfectamente.
Gracias Samsonov Dima
Saludos.
Juan Galaz
Bibliografía:
https://github.com/sdima1357
https://github.com/sdima1357/spectrum128_esp32_usb_host_pal_tv