martes, 28 de marzo de 2023

ESP32 emulador de consolas

Página principal

ESP32
Emulador
esp_8_bit



Buscando montajes curiosos con la ESP32 encontré esp_8_bit ,un emulador de:

Atari 400/800, XL, XEGS, 5200
Sega Master System, Game Gear
Nintendo Entertainment System


y los mas interesante es que genera video compuesto, tanto PAL o NTSC.
Generar video compuesto(color) con arduino era realmente difícil, pero con el ESP32 de doble núcleo es posible.

    -----------
    |         |
    |      25 |------------------> video out
    |         |
    |      18 |---/\/\/\/----|---> audio out
    |         |     1k       |
    |         |             ---
    |  ESP32  |             --- 10nf
    |         |              |
    |         |              v gnd
    |         |
    |         |     3.3v <--+-+   IR Receiver
    |         |      gnd <--|  )  TSOP4838 etc.
    |       0 |-------------+-+   (Optional)
    -----------

Al disponer el ESP32 de conexión bluetooth, he utilizado un viejo mando de la consola wii, que funciona perfectamente.

El entorno de trabajo y compilación fué Debian 11 y el IDE de arduino VER. 1.9.19 .
Una de las cosas que me llevo mas tiempo fue un error en la compilación bajo Debian 11, decía que no tenia instalado la librería serial de python.
Para instalar la librería serie para python se puede hacer de dos métodos:
   sudo pip3 install pyserial
  python3 -m pip install pyserial
y la respuesta era : Requirement already satisfied: pyserial in /usr/lib/python3/dist-packages (3.5b0)
En teoría ya las tenía instalada.
Después de muchas pruebas descubrí que en Debian 11 el enlace directo de python apunta al python2,  y debía apuntar a python3.
Muchas de estas cosas pasan con Debian, al ser en muchos casos demasiado conservador.
Para cambiar el enlace directo tecleamos desde root:
   rm /usr/bin/python
  ln -s /usr/bin/python3 /usr/bin/python

Para compilar nuestro emulador, debemos bajar las fuentes de: esp_8_bit
Descomprimimos en el directorio de compilación, en mi caso es Arduino.
Arrancamos la IDE de arduino y configuramos el tipo de emulador y el sistema de televisión (PAL o NTSC) en el fichero config.h.
Si todo fue bien nos saldrán el video compuesto por el pin25 y el audio por el pin18.

Existen unos cuantos incluidos en el emulador, pero si queremos incluir otros juegos debemos instalar una utilidad en la IDE de arduino, ESP32FS.
El ESP32 normal tiene 4Mbytes de memoria, de los cuales para nuestro proyecto utilizamos la mitad para el programa, y la otra mitad para una especie de disco con el formato SPIFSS.
Las ROMS de los juegos se almacenan en el disco SPIFF, y para subir ficheros a este disco utilizamos ESP32FS.
Para instalar la utilidad ESP32FS la descargamos y la descomprimimos en:
~/Arduino/tools/   quedando como    ~/Arduino/tools/ESP32FS/tool/esp32fs.jar  .

Cuando reiniciamos la IDE de arduino nos aparecerá en el menu de Herramientas/ESP32_Sketch_Data_Upload
Si ejecutamos esta opción del menú, los ficheros (ROMS) que se encuentran en el directorio de esp_8_bit/data se subirán a la memoria del ESP32.


En algún caso algunas entradas de video compuesto la impedancia es bastante baja y la salida del ESP32 no alcanza a dar la señal correcta.
Para estos casos he creado un pequeño circuito:

 
Como me funcionaba en la protoboard , lo he pasado a circuito impreso.


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.
También he observado que con algunas ROMS se bloquea el emulador en algún momento.

Gracias Peter Barrett


Saludos.
Juan Galaz



Bibliografía:

https://github.com/rossumur/esp_8_bit
https://github.com/me-no-dev/arduino-esp32fs-plugin/releases/