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.
- 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
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.
- 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)
- 240 x 224
- Tiles de 6 x 8 pixels
- 256 tiles
- 64 bytes por Tile
- Impresión de texto
- 240 x 224
- Pantalla de 32 x 32 Tiles
- Tiles de 8 x 8 pixels
- 256 tiles
- 64 bytes por Tile
- Test del gamepad
- 120 x 96 modo bitmap (framebuffer)
- 4 colores por pixel (2 bits)
- 4 paletas de 4 colores de los 256 posibles
Menú | Juego | SetRenderingParameters |
---|---|---|
- 240 x 224 resolución
- Pantalla de 40 x 28 Tiles
- Tiles de 6 x 8 pixels
- 48 bytes por Tile
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
- WaitVsync
- ClearVram
- DrawMap2
- FadeIn
- FadeOut
- Fill
- SetFontTable
- PrintChar
- 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