Port del emulador de retroarch FreeChaF (FairChild Channel F) a la placa TTGO VGA32 v1.0, v1.1, v1.2 y v1.4 con ESP32.
- Portado de retroarch a ESP32
- No se usa PSRAM, funcionando en ESP32 de 520 KB de RAM (TTGO VGA32 v1.x)
- Uso de un sólo core
- OSD de bajos recursos
- Creado proyecto compatible con Arduino IDE y Platform IO
- Proyecto compatible con Web Editor y ArduinoDroid (6.3.1) con tool makeandroid.bat
- Se puede usar cualquier pin digital para el audio (SPEAKER_PIN en hardware.h)
- Se puede usar cualquier pin digital para el video (hardware.h)
- Ajuste de pantalla X e Y
- Menú de velocidad de video de emulación, teclado
- Soporte para modo 64 colores y 8 colores.
- VGA 200x150
- VGA 320x200
- No se requiere la libreria de bitluni completa. He reducido a lo mínimo, ahorrando RAM y FLASH, basado en la librería de Ricardo Massaro
- Soporte para leer cartuchos via WIFI
- Versión precompilada (flash download 3.9.2) 200x150
https://github.com/rpsubc8/ESP32TinyFairChild/tree/main/ESP32/precompile
Debemos de elegir el tipo ESP32: Posteriormente, seleccionaremos los archivos tal y como la captura adjunta, con los mismos valores de offset: Y le daremos a start. Si todo ha sido correcto, sólo tendremos que reiniciar el ESP32.
- TTGO VGA32 v1.x (1.0, 1.1, 1.2, 1.4) o Single core ESP32
- Visual Studio 1.48.1 PLATFORMIO 2.2.0
- Arduino IDE 1.8.11
- ArduinoDroid (6.3.1)
Al finalizar, el propio script, termina borrando el directorio dataFlash.
El script utiliza el fart.exe (find and replace text).
Una vez, se haya ejecutado con éxito, se puede usar con el ArduinoDroid.
- Control de Sistema: 0,1,2,3
- Control A: Izquierda, Derecha, Arriba, Abajo, o,p
- Control B: a,d,w,s c,v
- use_lib_200x150: Se usa modo de vídeo 200x150. Se tiene que elegir sólo un modo de video, o bien 200x150 o 320x200
- use_lib_320x200: Se usa modo de vídeo 320x200.
- use_lib_vga8colors: Obliga a usar RGB modo de 8 colores (3 pines). Saca 8 colores, frente a los 64 del modo normal (6 pines RRGGBB).
- FIX_PERIBOARD_NOT_INITING: En aquellos teclados que necesitan ECO para inicializarse. Sólución de David Crespo Tascón.
- use_lib_log_serial: Permite dejar trazas por el puerto serie usb. Si se activa, consume un poco más de RAM, CPU y FLASH.
- gb_ms_keyboard: Se debe especificar el número de milisegundos de polling para el teclado.
- gb_ms_vga: Se debe especificar el número de milisegundos de polling para el frame VGA.
- gb_add_offset_x: Desplazamiento a la derecha del frame en múltiplos de 4 pixels.
- gb_add_offset_y: Desplazamiento hacia abajo del frame en pixels.
- use_lib_delay_tick_cpu_auto: Si es 1, se autoajusta la velocidad de emulación a 14914 ticks de 20 milis. Si es 0, se espera los milis especificados en use_lib_delay_tick_cpu_micros
- use_lib_delay_tick_cpu_micros: Se debe especificar el número de milisegundos a esperar la CPU, mientras que use_lib_delay_tick_cpu_auto sea 0.
- use_lib_wifi:Activa la WIFI para poder cargar cartuchos desde un servidor web. Al requerir mucha RAM, se aconseja usar un servidor http, en lugar de https. Se debe introducir el nombre de red y clave en el fichero gbWifiConfig.h
Tool chf2h
input/ cart/ ColorOrgan.chf output/ dataFlash/ cart/Posteriormente debemos copiar el directorio dataFlash en el proyecto TinyFairChildttgovga32\fairChild sobreescribiendo la carpeta dataFlash previa. Se recomienda limpiar el proyecto y volver a compilar.
Esta herramienta es muy simple, y no controla los errores, por lo que se recomienda dejarle los archivos con nombres muy simples y lo más sencillo posible.
El proyecto en PLATFORM.IO está preparado para 1 MB de Flash. Si necesitamos los 4MB de flash, tendremos que modificar la entrada del archivo platformio.ini
board_build.partitions = huge_app.csvEn el Arduino IDE, debemos elegir la opción Partition Scheme (Huge APP).
Por defecto, se ha dejado apuntando al servidor pages de github del proyecto. El consumo de RAM con https es mayor que con http:
https://rpsubc8.github.io/ESP32TinyFairChild/www/fairchild/output
Para activar este modo, se debe descomentar la línea use_lib_wifi en el gbConfig.h
Debemos configurar en el archivo gbWIFIConfig.h los datos:
#define gb_wifi_ssd "nombreDeNuestraRedWIFIdelRooter" #define gb_wifi_pass "passwordDeNuestraRedWIFIdelRooter" //#define gb_wifi_url_base_path "http://192.168.0.36/fairchild/output" #define gb_wifi_url_base_path "https://rpsubc8.github.io/ESP32TinyFairChild/www/fairchild/output" //millisecons delay stream read #define gb_wifi_delay_available 0 #define use_lib_wifi_debug
Por ahora, la configuración está fijada en nuestro gbWIFIConfig.h que tendremos que recompilar, de manera, que sólo se conectará a nuestra red del rooter. Por tanto debemos de cambiar gb_wifi_ssd y gb_wifi_pass.
El gb_wifi_url_base_path es la ruta en donde se encuentran nuestros directorios outlist y outdat, que contienen el listado de archivos, así como los mismos, por lo que dicho path será diferente si usamos un servidor local.
El concepto es simple, se dispone de:
outlist --> Fichero con la lista de nombres (longitud 8) de chf. Límite de 128 ficheros outdat --> Los ficheros chf.
Por ahora, para optimizar el consumo de RAM, se ha dejado una estructura de longitud de nombres 8:3, es decir, 8 caracteres de nombre y 3 de extensión. Dejo unas tools intermedias para preparar y hacer la conversión:
build.bat --> Lanza todos los bats, procesando input en output data83.bat --> Convierte todos los archivos input a formato 8:3 list.bat --> Genera los outlist (lista de archivos). dsk.exe --> Genera un txt que dentro contiene la lista de archivos con longitud de nombre 8. lowercart.bat --> Convierte las extensiones CHF a .chf
Un ejemplo de outlist, por ejemplo de cart.txt, que contiene:
AlienInvBaseballBoogie2 Bowling CheckersColorOrgF8NationFninja Football
Siempre que se añada un fichero, debemos de regenerar la lista con el list.bat o bien llamando a todo el proceso build.bat.
Dentro esta la lista de archivos con longitud máxima de 8 caracteres, que es la que se mostrará en el menu de selección de cartucho en el ESP32. Estos archivos, por ahora están pensados para un máximo de 128 entradas, que equivale a 1024 bytes (128 x 8).
Cada vez que se hace una petición a un tipo, se carga el fichero .TXT con la lista (1024 bytes, 128 nombres). Y cuando se selecciona, se hace la petición al fichero que se encuentra en el outdat.
Cuando se seleccione un archivo, se procederá a cargarlo en outdat con su ruta. Los archivos tienen que tener la extensión en minúsculas.
Si se usa un servidor externo WEB, es posible, que por políticas impida realizar peticiones seguidas, así que es recomendable no hacer peticiones muy seguidas.
Para depurar la WIFI, se debe descomentar use_lib_wifi_debug en el fichero gbWifiConfig.h