Skip to content

Latest commit

 

History

History
165 lines (136 loc) · 9.2 KB

readmeSpanish.md

File metadata and controls

165 lines (136 loc) · 9.2 KB

Tiny ESP32 Vectrex

Port x86 del emulador Vectrex de John Hawthorn al ESP32.

He realizado varias modificaciones:
  • Se ha portado al ESP32
  • No se usa PSRAM, funcionando en ESP32 de 520 KB de RAM (TTGO VGA32 v1.x)
  • Uso de un OSD de bajos recursos
  • Creado proyecto compatible con Arduino IDE y Platform IO
  • Modo blanco y negro 1 bpp (2 colores) VGA2Controller
  • Soporte de 640x480, 800x600 y 1024x768
  • Para video se usa fabgl 1.0.8
  • Emulación a la mitad de velocidad, 23 fps en 640x480 y 19 fps en 1024x768
  • No hay sonido por el momento
  • Soporte para leer cartuchos via WIFI
  • Versión precompilada (flash download 3.9.2) 1024x768



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 para el modo de video 1024x768 y los juegos de demostración en FLASH.

https://github.com/rpsubc8/ESP32TinyVectrex/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)
  • Visual Studio 1.66.1 PLATFORMIO 2.4.3 Espressif32 v3.5.0 (python 3.6)
  • Arduino IDE 1.8.11 Espressif System 1.0.6
  • Librería reducida Arduino fabgl 1.0.8 (incluida en proyecto PLATFORMIO)



PlatformIO

Se debe instalar el PLATFORMIO 2.4.3 desde las extensiones del Visual Studio. Se requiere también Espressif32 v3.5.0 (python 3.6).

Luego se seleccionará el directorio de trabajo TinyVectrex. 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 las librerias de fabgl.



Arduino IDE

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

Debemos instalar las extensiones de spressif en el gestor de urls adicionales de tarjetas https://dl.espressif.com/dl/package_esp32_index.json Para video se requiere instalar fabgl 1.0.8.

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.



Usabilidad

Se permite cargar:
  • Cartuchos de 32K
  • Reiniciar
Se dispone de un OSD básico de bajos recursos, es decir, muy simple, que se visualiza pulsando la tecla F1.

Los ficheros deben ser convertidos a .h en hexadecimal. Puede usarse la herramienta online:
http://tomeko.net/online_tools/file_to_hex.php?lang=en
Se permite usar:
  • Cursores izquierda, derecha, arriba, abajo
  • Teclas a, s, d, f



Opciones

El archivo gbConfig.h se seleccionan las opciones:
  • use_lib_vga640x480: Modo de video 640x480.
  • use_lib_vga800x600: Modo de video 800x600.
  • use_lib_vga1024x768: Modo de video 1024x768.
  • use_lib_gfx: Deshabilita la salida de video. No muestra nada por pantalla. Usar solo para medir tiempos de emulación.
  • 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



Soporte WIFI

Se ha añadido para TEST un soporte básico de WIFI, para poder cargar los cartuchos (bin) 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 local, dado que el pages de github del proyecto requiere https (consumo de RAM), y dará fallo de memoria:
https://rpsubc8.github.io/ESP32TinyVectrex/www/vectrex/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/vectrex/output"
  #define gb_wifi_url_base_path "https://rpsubc8.github.io/ESP32TinyVectrex/www/vectrex/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 bin. Límite de 128 ficheros
  outdat  --> Los fichero bin.
 

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 BIN a .bin  
 

Un ejemplo de outlist, por ejemplo de cart.txt, que contiene:

 ArmorAttBedlam  Berzerk BlitzActCleanBosCleanSweCosmicChDarkToweDEADLINEdemo2019
 

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



Aplicaciones Test

Se incluye el juego MineStorm:

  • rainy (demoscene)
  • OnslaughtElect (demoscene)
  • demo 2019 party (demoscene)
  • deadline 2019 (demoscene)
  • raiding party (demoscene)
  • trex