Skip to content

pinyol 0.4.0 — the console's firmware

Latest

Choose a tag to compare

@ipaud ipaud released this 22 Oct 16:11

The console's firmware: pinyol d1f8178, with the same seventeen games in its flash as 0.3.0 and the Cirera menu, so a console with no microSD has something to play.

New since 0.3.0 (71 commits):

  • The radio has room again. In 0.3.0 a game began with 19 KB of internal RAM free and the radio needs 27, so link play could not come on. A game now begins with about 70 KB free.
  • More memory for big games. Lua's small objects come from chunks instead of twelve thousand blocks of the heap; pictures are let go one at a time, and a picture that finds no memory is asked for again instead of staying missing; a canvas finds its block the same way. IL·LUSTRES, with two 600 KB sheets a fight, no longer loses a fighter on the console. tools/pk_split.py cuts a big sheet into pieces that fit.
  • Faster. The code and its constants run from PSRAM, at the cost of 1.7 MB of it, and the data cache is 32 KB: the world takes 10-30 % less, saving to the flash no longer stops the game, and a game runs with about 70 KB of internal RAM free instead of 40.
  • The menu lists up to 128 games, not 64 (a game past the 64th could not be launched), and every Lua game gets its settings, colour filter, favourites, achievements and a crash screen with a QR code.
  • New in the engine: XM and S3M modules, WAV markers, a blue-noise dissolve, an FM wave, voxel landscapes, a palette lit by a lamp, lockstep play and rollback netcode over the radio link, FamiStudio songs, sound buses with ducking and a voice library, actors and solids that move like Celeste's (move), autotile, buttons the player can remap, a pen and several fingers (pen(), touches()), .aseprite and LDtk importers, and a field of view and line of sight on grids.

Easiest: install it from the browser. Open https://pinyol.ipaud.dev/consola/#instalar in Chrome or Edge on a computer, plug the board in over USB and press Instalar en la consola.

With esptool, the whole flash in one image:

esptool.py --chip esp32s3 -b 921600 write_flash 0x0 pinyol-console-0.4.0-full.bin

or the five pieces where idf.py flash puts them:

esptool.py --chip esp32s3 -b 921600 write_flash 0x0 bootloader.bin 0x8000 partition-table.bin \
  0xf000 ota_data_initial.bin 0x20000 pinyol_console.bin 0x420000 game.bin

Built from a clean copy of commit d1f8178 with ESP-IDF 5.4.2, the way CI builds it; CI checks that the statics leave at least 80 000 bytes of internal RAM (84 870 here). The partition table and the OTA data are byte for byte those of 0.3.0, the flash image holds the same seventeen games and the menu, and the full image is the five pieces at their offsets.

Tested on a Freenove FNK0104N (ESP32-S3R8, 16 MB flash): this release's pinyol_console.bin and ota_data_initial.bin were written to it, keeping the board's own bootloader and flash games, and the console booted "firmware d1f8178 in ota_0", listed the games of its microSD and ran the menu at 59.9 fps with the amplifier on and no error in its log. The full image itself was not written to a blank board.