Skip to content

Latest commit

 

History

History
135 lines (117 loc) · 8.22 KB

readmeSpanish.md

File metadata and controls

135 lines (117 loc) · 8.22 KB

Tiny ESP32 NES

Port del emulador NES Master de PC de Jens Nyberg a la placa TTGO VGA32 v1.x (1.0, 1.1, 1.2, 1.4) con ESP32.

He realizado varias modificaciones:
  • Portado de x86 PC 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
  • Emulación de ricoh2A03 (libreria fabgl) versión reducida de dcrespo3d(David Crespo Tascón)
  • Ajuste de pantalla X
  • Menú de velocidad de CPU de emulación (AUTO), sonido, teclado
  • Soporte para modo 8 y 64 colores (versión reducida de Ricardo Massaro).
  • VGA 320x240
  • Se recomienda sólo usar cartuchos simples sin conmutación de bancos
  • Se usa un DIRTY Sound de 3 canales que no es fiel a la emulación real
  • Cursores arriba, abajo, izquierda, derecha
  • Tecla X (botón A), tecla Z (botón B)
  • Tecla C (botón SELECT), tecla V (botón START)

Requerimientos

Se requiere:
  • TTGO VGA32 v1.x (1.0, 1.1, 1.2, 1.4)
  • Visual Studio 1.48.1 PLATFORMIO 2.2.1 Espressif32 v3.3.2
  • Arduino IDE 1.8.11 Espressif System 1.0.6
  • ArduinoDroid (6.3.1)
  • Librería reducida Arduino fabgl 0.9.0 (incluida en proyecto PLATFORMIO)
  • Librería reducida Arduino bitluni 0.3.3 (incluida en proyecto)



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.



PlatformIO

Se debe instalar el PLATFORMIO 2.2.1 desde las extensiones del Visual Studio. Se requiere también Espressif32 v3.3.2.

Luego se seleccionará el directorio de trabajo TinyNesMasterttgovga32. 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 bitluni ni fabgl.



Arduino IDE

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

Debemos instalar las extensiones de spressif en el gestor de urls adicionales de tarjetas https://dl.espressif.com/dl/package_esp32_index.json
Ya está preparado el proyecto, de forma que no se necesita ninguna librería de bitluni ni fabgl. 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 permiten las siguientes acciones desde el menú (tecla F1):
  • Seleccionar ROM permite elegir ROM de juego.
  • Offset X de la pantalla
  • Cambiar los milisegundos de polling para video, teclado, ratón y sonido
  • Sonido Volumen (100%, 75,%, 50%, 25%, 5%)
  • Sonido activo o en silencio
  • Espera de CPU en modo AUTO (ajuste 20 ms por frame real) o la espera en ms que queramos
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



Opciones

El archivo gbConfig.h se seleccionan las opciones:
  • 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).
  • use_lib_sound_ricoh2A03: Se utiliza un mezclador de 3 canales en modo dirty, emulando el ricoh2A03. Consume un poco de RAM. Se requiere la librería fabgl 0.9.0 reducida, ya incluida en el proyecto
  • use_lib_log_serial: Se envian logs por puerto serie usb
  • gb_ms_keyboard: Se debe especificar el número de milisegundos de polling para el teclado.
  • gb_ms_sound: Se debe especificar el número de milisegundos de polling para el sonido.
  • gb_delay_emulate_ms: Milisegundos de espera por cada frame completado.
  • use_lib_fix_double_precision: No usar FPU para el cálculo del PLL.
  • use_lib_debug_i2s: Información detallada de la inicialización del modo de video.
  • use_lib_measure_time: Muestra estadísticas del consumo de CPU y fps.
  • use_lib_vga320x240x60hz_bitluni: Usa el modo de video 320x240 de bitluni.
  • use_lib_vga320x240x60hz_fabgl: Usa el modo de video 320x240 con los parámetros de fabgl.
  • use_lib_vga320x240x60hz_bitluni_apll_fix: Usa el modo de video 320x240 de bitluni con la corección del fallo del PLL.



Tool rom2h

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

Tool rom2h

 input/
  roms/
   AlfonzoMeleeHB.nes
   ChaseHB.nes
 output/
  dataFlash/
   rom/
Posteriormente debemos copiar el directorio dataFlash en el proyecto TinyNesMasterttgovga32\nes 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).



DIY circuito

Si no queremos usar una placa TTGO VGA32 v1.x, podemos construirla siguiendo el esquema de fabgl: