Skip to content

pinyol 0.6.0 — the console's firmware

Latest

Choose a tag to compare

@ipaud ipaud released this 23 Oct 19:46

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

New since 0.5.0 (17 commits):

  • A new example for each look. Cerezo (Game Boy: an island adventure in four greens), Socavón (ZX Spectrum: colour clash and the beeper), Tumba (PICO-8: a sliding-tomb puzzle with solver-checked pars), Malabarista (pocket LCD), Botín (Game Boy Advance: a four-world loot platformer, 50-57 fps on the board) and Paella de combate (Neo Geo: a run and gun with cooks, a tractor and a giant seagull, painted with gpt-image and fitted in code; 41-60 fps, mostly 48-55, played from the microSD because its 8 MB do not fit the flash). Pozo (vector) stays. The old examples they replace moved to the test games.
  • New in the engine: img(..., {outline, outline_width}) draws a ring round a sprite; distort(x, y, w, h, {kind = "heat" | "water", amp, period, speed}) sways or wobbles a rectangle of the world's picture (four a frame); crt({scan, persist}) puts scanlines and a phosphor afterglow on the world. Measured on the board with the sound off: scanlines are free (60 fps), a water zone of 80 rows plus a heat zone of 40 about 5 ms, an outline on six 176x120 sprites no extra frame, and persistence 3 to 9 ms (it keeps a 77 KB copy in PSRAM), see docs/measurements.md. Also lib/slices.lua with tools/slice_pic.py (a wide picture as columns, only the visible ones in memory) and lib/sheets.lua (png2asset now writes strips of more than 64 frames in pieces).
  • Looks as data. tools/looks.json describes the twelve looks (aliases in three languages, limits, rules, example, font pack); tools/looks.py "un juego de metal slug" turns a phrase into a look, tools/new_game.py --lua --look "game boy" starts a game made for it, and tools/look_check.py checks its palettes, sprite sizes and forbidden code.
  • The flash games are now: cerezo, socavon, tumba, malabar, pozo, botin, gotico, veloz, tormenta, costa_relampago, laberinto, museo_nocturno, raton_de_biblioteca, selva, niebla, recortes and cajas. Torneo, Duelo, Oxigeno, Paletes and the older small ones are no longer in the flash (they are in the site's gallery and play from a microSD).

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.6.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 cfab1d1 with ESP-IDF 5.4.2.

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; it booted (firmware cfab1d1 in ota_0) and ran at 59.6-60 fps with about 63 KB of internal RAM free and no error in its log. The full image itself was not written to a blank board.