Skip to content

Latest commit

 

History

History
201 lines (184 loc) · 7.6 KB

readmeSpanish.md

File metadata and controls

201 lines (184 loc) · 7.6 KB

Tiny ESP32 UZEBOX

Hace un año comencé el port del emulador UZEM (PC x86) al ESP32. Eliminé el soporte SD y el sonido, siendo muy fácil el port.
Se conseguía una velocidad ridícula de 1/2 fps. Optimizando y ajustando, se consiguió aumentar los fps, pero seguía siendo muy lento.
Decidí eliminar la interrupción del timer y del KERNEL, reimplementando algún modo de video, logrando 20 fps, pero emulando un AVR a 4 Mhz, en lugar de los 28 Mhz, por lo que no era muy prometedor.
Fue cuando decidí encaminar el proyecto por otro camino, que consiste en realizar el port de la API, logrando no sólo el tiempo real, sino superar los 28 Mhz con creces.



Características

Es una versión de prueba de concepto con 5 demos, que aún está muy inestable.
  • No se usa PSRAM, funcionando en ESP32 de 520 KB de RAM (TTGO VGA32 v1.0, v1.1, v1.2 y v1.4)
  • Uso de un sólo core
  • OSD de bajos recursos (Tecla F1)
  • Menú de velocidad de CPU (normal, Turbo)
  • Modo 64 colores
  • VGA 320x240
  • 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)
  • Versión precompilada (flash download 3.9.2) 320x240



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 320x240 con los juegos de demostración en FLASH.

https://github.com/rpsubc8/ESP32TinyUzebox/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)
  • El proyecto no está aún preparado para Arduino IDE
  • Librería reducida Arduino bitluni 0.3.3 (ya incluida en el proyecto)



Demo tutorial

Se ha testeado con éxito. Usa el modo de video 1.

  • 240 x 224
  • Tiles de 6 x 8 pixels
  • 256 tiles
  • 64 bytes por Tile
  • Impresión de texto



Demo controller tester

Se ha testeado con éxito. Usa el modo de video 3.

  • 240 x 224
  • Pantalla de 32 x 32 Tiles
  • Tiles de 8 x 8 pixels
  • 256 tiles
  • 64 bytes por Tile
  • Test del gamepad



Demo Bitmap

Se ha testeado con éxito. Usa el modo de video 8.
  • 120 x 96 modo bitmap (framebuffer)
  • 4 colores por pixel (2 bits)
  • 4 paletas de 4 colores de los 256 posibles



Demo chess4uzebox

Se ha testeado con éxito. Usa el modo de video 5.
Menú Juego SetRenderingParameters
  • 240 x 224 resolución
  • Pantalla de 40 x 28 Tiles
  • Tiles de 6 x 8 pixels
  • 48 bytes por Tile



Demo MegaSokoban

Se ha testeado con éxito. Usa el modo de video 10.
Creditos Tutorial Juego Nivel Juego
  • 192 x 192 resolución
  • Pantalla de 16 x 12 Tiles
  • Tiles de 12 x 16 pixels
  • 192 bytes por Tile



API

Se han portado las siguientes funciones al ESP32 TTGO VGA 1.x (1.0, 1.1, 1.2, 1.4):
  • WaitVsync
  • ClearVram
  • DrawMap2
  • FadeIn
  • FadeOut
  • Fill
  • SetFontTable
  • PrintChar
  • Print
  • SetFontTilesIndex
  • SetFont
  • SetTileTable
  • SetSpritesTileTable
  • SetTile
  • SetRenderingParameters
  • ReadJoypad
  • DetectControllers
  • EepromReadBlock
  • EepromWriteBlock
  • pgm_read_byte

El sonido lo dejo siempre para el final. Las siguientes funciones estás creadas para compilar proyectos, pero no reproducen ningun sonido.

  • InitMusicPlayer
  • ResumeSong
  • SetMasterVolume
  • StartSong
  • StopSong
  • TriggerFx
  • TriggerNote
  • EnableSoundEngine
  • DisableSoundEngine
También se ha implementado toda la estructura de vram, de manera que si en tiempo real escribimos en el buffer de vram, se verá por pantalla los cambios, es decir, recrea el comportamiento de la UZEBOX.