Skip to content

Latest commit

 

History

History
191 lines (156 loc) · 11.5 KB

readmeSpanish.md

File metadata and controls

191 lines (156 loc) · 11.5 KB

Tiny Fairchild Channel F

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.

He realizado varias modificaciones:
  • 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



Versión precompilada

En la carpeta precompile se encuentra una versión ya compilada para poder ser grabada con el flash download tool 3.9.2. Se trata de una versión con resolución 200x150 con los juegos de demostración en FLASH.

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.



Requerimientos

Se requiere:
  • 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)

La imagen adjunta es de mi placa TTGO VGA32 v1.2 sin psram ni módulo de SD.



PlatformIO

Se debe instalar el PLATFORMIO 2.2.0 desde las extensiones del Visual Studio.

Luego se seleccionará el directorio de trabajo TinyFairChildttgovga32. Debemos modificar el fichero platformio.ini la opción upload_port para seleccionar el puerto COM donde tenemos nuestra placa TTGO VGA32.

Luego procederemos a compilar y subir a la placa. No se usa particiones, así que debemos subir todo el binario compilado. Está todo preparado para no tener que instalar ninguna librería.



ArduinoDroid

Se debe ejecutar, sólo una vez, el script makeandroid.bat, que nos deja toda la estructura de datos del directorio dataFlash en el directorio raiz, así como reemplazando las archivos principales con llamadas de los .h sin usar el directorio de datos dataFlash.
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.



Arduino Web Editor

Se debe ejecutar, sólo una vez, el script makeandroid.bat. Una vez finalizado, se sube a la nube como un proyecto cualquiera, ya sea comprimido en zip o por archivos.



Arduino IDE

Todo el proyecto es compatible con la estructura de Arduino 1.8.11. Tan sólo tenemos que abrir el fairChild.ino del directorio fairChild.

Para el modo normal, ya está preparado el proyecto, de forma que no se necesita ninguna librería. Debemos desactivar la opción de PSRAM, y en caso de superar 1 MB de binario, seleccionar 4 MB de partición a la hora de subir. Aunque el código no use PSRAM, si la opción está activa y nuestro ESP32 no dispone de ella, se generará una excepción y reinicio del mismo en modo bucle.



Teclado

El teclado está dividido en 3 partes
  • Control de Sistema: 0,1,2,3
  • Control A: Izquierda, Derecha, Arriba, Abajo, o,p
  • Control B: a,d,w,s c,v



Opciones

El archivo gbConfig.h se seleccionan las opciones:
  • 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

He creado una herramienta muy básica, para convertir los archivos .chf en .h en modo lista para ser procesados por el emulador. Tan sólo tenemos que dejar los archivos .chf en la carpeta input/cart y ejecutar el archivo chf2h.exe, de forma que se generará una salida en el directorio output/dataFlash. Para pruebas, se ha dejado un archivo en el directorio input/cart, que se recomienda borrar en caso de realizar una nueva lista personalizada. También se recomienda borrar los archivos del directorio fairChild/dataFlash/gbcart.h y fairChild/dataFlash/cart para tener un proyecto limpio.

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.csv
En el Arduino IDE, debemos elegir la opción Partition Scheme (Huge APP).



Soporte WIFI

Se ha añadido para TEST un soporte básico de WIFI, para poder cargar los cartuchos (chf) desde un servidor básico HTML, sin necesidad de CORS, por lo que el despliegue es muy rápido. Se puede usar un Servidor Apache, NGINX, etc...
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