- Uso de vga y teclado
- Hasta 8 bancos de cache
- No se usa PSRAM, funcionando en ESP32 de 520 KB de RAM (TTGO VGA32 v1.2)
- Uso de un sólo core
- OSD de bajos recursos
- Creado proyecto compatible con Arduino IDE y Platform IO
- Sonido con la libreria fabgl
- Soporte para modo 8 y 64 colores.
- VGA 200x150 y 320x175
- Emulación de la Game Boy clásica
Se requiere:
- TTGO VGA32 v1.2
- Visual Studio 1.48.1 PLATFORMIO 2.2.0
- Arduino IDE 1.8.11
- Librería Arduino fabgl 0.9.0 (incluida en proyecto PLATFORMIO)
- Librería Arduino bitluni 0.3.3 (incluida en proyecto)
Se debe instalar el PLATFORMIO 2.2.0 desde las extensiones del Visual Studio. Luego se seleccionará el directorio de trabajo gameboy. 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. Sin embargo, si necesitamos las opciones de sonido, necesitaremos instalar las librerias de fabgl, sólo para el IDE de Arduino, dado que para PLATFORMIO he dejado las librerías en el proyecto.
Todo el proyecto es compatible con la estructura de Arduino 1.8.11. Tan sólo tenemos que abrir el gameboy.ino del directorio gameboy. Debemos instalar las extensiones de spressif en el gestor de urls adicionales de tarjetas https://dl.espressif.com/dl/package_esp32_index.json Para el modo normal, ya está preparado el proyecto, de forma que no se necesita ninguna librería de bitluni. Sin embargo, si necesitamos el soporte de sonido, se requiere instalar las librerias fabgl 0.9.0. Lo podemos hacer desde el administrador de bibliotecas. 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.
Se permiten las siguientes acciones desde el menú (tecla F1):
- Seleccionar ROM permite elegir el disco.
- Cambiar los milisegundos de polling para teclado
- Velocidad de CPU
- Activar y desactivar el sonido
- Reinicio del emulador y del chip
Teclado ESP32 Joystick GB ----------------------------------- Cursor arriba - arriba Cursor abajo - abajo Cursor izquierda - izquierda Cursor derecha - derecha a - A z - B Barra espaciadora - Start ENTER - SELECT
Se dispone de un OSD básico de bajos recursos, es decir, muy simple, que se visualiza pulsando la tecla F1. Para movernos por el OSD, usamos los cursores, el ENTER para aceptar y el ESC para cancelar. 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 Para las roms se debe utilizar la herramienta rom2h para generar los .h necesarios.
El archivo gbConfig.h se seleccionan las opciones:
- use_lib_200x150: Se usa modo de vídeo 200x150.
- use_lib_320x175: Se usa modo de vídeo 320x175.
- use_lib_vga8colors: Obliga a usar RGB modo de 8 colores (3 pines). Consume poca ram y es muy rápido, pero sólo saca 8 colores, frente a los 64 del modo normal (6 pines RRGGBB).
- use_lib_vga64colors: Obliga a usar RRGGBB modo de 64 colores (6 pines). Consume más ram y es más lento, pero saca 64 colores (escala de grises).
- use_lib_vga_low_memory: Modo experimental de bajo consumo de RAM de video, pero más lento.
- use_lib_fast_vga: Modo experimental ultra rápido, que se consigue casi el doble de velocidad de acceso a video. En el modo de 8 colores, saca una paleta estilo CGA clásica, y en el modo 64 colores, escala de grises.
- use_lib_fast_vgaBLUE8colors: Modo experimental ultra rápido para el modo de 8 colores, usando paleta azul.
- use_lib_fast_vgaRED8colors: Modo experimental ultra rápido para el modo de 8 colores, usando paleta roja.
- use_lib_fabgl_sound: Se utiliza un mezclador de 3 canales en modo dirty. Consume bastante ram. Se requiere la librería fabgl 0.9.0
- use_lib_log_serial: Se envian logs por puerto serie usb
- usb_lib_optimice_checkchange_bankswitch: Sólo conmuta bancos cuando son distintos, ganando velocidad.
- gb_ms_joy: Se debe especificar el número de milisegundos de polling para el teclado.
- gb_frame_crt_skip: Si es 1 se salta un frame.
- use_lib_vga_thread: Modo multihilo experimental, por ahora es muy lento.
- use_min_ram: No usa ningún banco de cache, ahorrando memoria, pero siendo más lento.
- use_half_ram: Usa 4 bancos de cache, ganando velocidad, sacrificando memoria.
- use_max_ram: Usa 8 bancos de cache, ganando velocidad, sacrificando memoria.
- use_lib_tinyFont: Usa rutinas propias para dibujar fuente de 6x8 sin usar las de bitluni, ahorrando memoria RAM y Flash
Podemos elegir los siguientes juegos:
- Last Crownr
- Retroid
He creado una tool para generar la estructura de las roms en .h:
https://github.com/rpsubc8/esp32gameboy/tree/master/arduino/tools
Los archivos roms .gb deben ser introducidos en el directorio:
input roms
Y se debe lanzar el ejecutable rom2h
Se generará en el directorio:
output dataFlash gbrom.h roms
Todos los .h que se generan, deben ser soltados al proyecto, sobreescribiendo los actuales del directorio dataFlash.