Skip to content

Releases: ipaud/pinyol

pinyol 0.6.0 — the console's firmware

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.

pinyol 0.5.0 — the console's firmware

Choose a tag to compare

@ipaud ipaud released this 23 Oct 10:32

The console's firmware: pinyol 3aff58e, with twenty-one games in its flash and the Cirera menu, so a console with no microSD has something to play.

New since 0.4.0 (27 commits):

  • mesh(): 3D models drawn in C. mesh_new() keeps a model of quads once; mesh() turns, projects, culls, lights and sorts it every frame (an ordering table of 256 slots, like a PlayStation's) and draws the faces as quads, a few hundred a frame instead of a few dozen, outside the 128 slots quad(), grad() and light() share. 48 models a game. camera.snap in views rounds projected points to whole pixels, the PlayStation's vertex wobble. quad() was checked against a real PlayStation cube (PSn00bSDK, IoU 0.99), and its set-up now works out only the attributes it uses.
  • Four new examples built on it, all measured on the board with the sound off: Selva (a 32-bit runner, about 29 fps), Niebla (a fixed-camera horror street, about 30 fps), Recortes (call-and-response rhythm with paper dolls, 30 fps) and Cajas (a one-on-one fight of boxy fighters, 30 fps). They need this firmware: 0.4.0 has no mesh().
  • Pozo (the vector look) takes the place of Rocas in the flash games.
  • Fixes: menuitem(label) and menuitem() took nothing away once the game had an item; pack_game packs strings.csv.

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.5.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 3aff58e with ESP-IDF 5.4.2. The flash image holds the games bolsillo, cinta, duelo, gotico, huevos, oxigeno, paletes, pozo, tormenta, torneo, veloz, costa_relampago, laberinto, ladrillos, museo_nocturno, plataformas, raton_de_biblioteca, selva, niebla, recortes and cajas, and the menu.

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 and ran at 59.9 fps with about 75 KB of internal RAM free and no error in its log. The four new examples were played from its microSD. The full image itself was not written to a blank board.

pinyol libretro core

Choose a tag to compare

@github-actions github-actions released this 15 Oct 16:31

The libretro core of ae31a86, for RetroArch and RetroPie on Linux: armhf (32-bit ARM, Raspberry Pi 2 and up), arm64 and x86_64. Each zip holds the core, its .info, LICENSE and THIRD_PARTY_NOTICES.md. How to install it: https://github.com/ipaud/pinyol/blob/main/docs/libretro.md

Cirera for Mac, Windows and Linux

Choose a tag to compare

@github-actions github-actions released this 16 Oct 07:28

Cirera for Mac, Windows and Linux: the console on your computer, with its menu and Pinyol's examples, from cfab1d1. Cirera-mac.zip: macOS 11 and up, Apple Silicon and Intel. Cirera-windows.zip: Windows 10 and up, 64-bit. Cirera-linux-x86_64.tar.gz and Cirera-linux-aarch64.tar.gz: Linux with glibc 2.35 and up (Ubuntu 22.04, Debian 12, a Raspberry Pi's 64-bit system...); installing a dropped game needs unzip. Drop any game's .zip on its window to install it. Not signed by Apple or Microsoft yet: how to open it the first time is on https://pinyol.ipaud.dev/consola/#escritorio . Each holds LICENSE and THIRD_PARTY_NOTICES.md.

pinyol 0.4.0 — the console's firmware

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.

pinyol 0.3.0 — the console's firmware

Choose a tag to compare

@ipaud ipaud released this 20 Oct 16:48

The console's firmware: pinyol 0a6687c, with seventeen games in its flash (the twelve looks' examples and the five games Codex made from one request each) and the Cirera menu, so a console with no microSD has something to play.

New since 0.2.0 (154 commits):

  • Smoother on the console. The panel's refresh is timed at start-up and set to 60.00 Hz (it ran at 61.14 on the first board, against the game's 60), and the game loop ticks with the panel's scans: the 24 ms jolts every second are gone. Lua runs twice as fast (the sandbox's guard against endless loops is now counted by the VM itself, not by a hook on every instruction), and its garbage is collected in generational mode, so a game that makes tables every frame no longer drops frames on a collection. A save no longer stalls the picture.
  • Every game opens with the careta, POWERED BY PINYOL.
  • New in the engine: a palette replaced line by line (line_pal, line_ramp), line_fx, the wall clock (clock(), set on the console whenever a game is sent over the cable), physics bodies the game drives (flippers, doors), instruments, sends and delay on sounds and the GBA's PSG options on tone, songs as MIDI with ADPCM samples, ADPCM music streams, lights, warp and linetint, perspective quads, cut-out animation (rig), particles and transitions, and saves with a checksum that never replace the last good one with a broken one.
  • Blocks: a platformer made in the editor whose player falls off the map now loses instead of stopping on an error.

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.3.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

Tested on a Freenove FNK0104N (ESP32-S3R8, 16 MB flash): the full image flashed in 104 s at 921600 baud and the console booted "firmware 0a6687c in ota_0", set its panel's rate and ran the Cirera menu at 60 fps with no error in its log; with no microSD, the menu listed the flash games and a game opened with its careta. Games on a microSD (games/<id>/, or any game's zip from the site unzipped there) are listed too.

pinyol 0.2.0 — the console's firmware

Choose a tag to compare

@ipaud ipaud released this 16 Oct 07:13

The console's firmware: pinyol a2b1506, with seventeen games in its flash (the twelve looks' examples and the five games Codex made from one request each) and the Cirera menu, so a console with no microSD has something to play.

New since 0.1.0: the console's menu is a pinyol game, Cirera (the logo's intro, the games' covers); the studio, a step sequencer in the audio with synth tracks and effects; saves that never freeze a game; HD sprites; the bag turns pages and the notebook keeps 64 entries; MENU reaches Lua games as MENU; the audio steals the voice closest to its end; and the console shows its commit.

Easiest: install it from the browser. Open https://ipaud.github.io/pinyol/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.2.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

Tested on a Freenove FNK0104N (ESP32-S3R8, 16 MB flash) with no microSD: the five pieces flashed in 102 s at 921600 baud, the console booted "firmware a2b1506 in ota_0", listed the seventeen flash games and ran the Cirera menu at 60 fps. Games on a microSD (games/<id>/, or any game's zip from the site unzipped there) are listed too.

pinyol 0.1.0 — the console's firmware

Choose a tag to compare

@ipaud ipaud released this 14 Oct 20:46

The console's first public firmware: pinyol 82e1a96, with fifteen games in its flash (the twelve looks' examples and the three games Codex made from one sentence each), so a console with no microSD has something to play.

Easiest: install it from the browser. Open https://ipaud.github.io/pinyol/#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.1.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

Tested on a Freenove FNK0104N (ESP32-S3R8, 16 MB flash): the five pieces flashed in 88 s at 921600 baud, the console booted "firmware 82e1a96 in ota_0" and listed the fifteen flash games next to the microSD's. Games on a microSD (games/<id>/, or any example zip from the site unzipped there) are listed too.