The Settings app now includes a System section with:
Current firmware version display
Update check action
Firmware update action
This will download the latest firmware and install it. Alternatively you
can download a firmware to /system/firmware.bin in the SD card and reboot.
App Management
Also, there is now a "Apps" tag in the settings app. Currently you can only use it to uninstall apps, but more is planned.
Reader App
Better progress saves! More reliable and consistent.
The latest addition to the app roster is a shell — a simple command-line
environment running in text mode on the 320x240 display. It supports ls,
cd, cp, and mv as builtins, and any two-token command that isn't a
builtin is treated as <app> <file>, launching Esposito apps directly
from the command line.
It features inline line editing with cursor movement (Fn+A/D), history
navigation (Fn+W/S), Ctrl+U to clear the line, and Ctrl+L to clear the
screen. The current working directory is displayed in a status bar and
persisted across sessions through the config API, along with up to 20
history entries.
The shell is deliberately barebones — no pipelines, no redirection, no
tab completion, no variable expansion. What it does provide is the right
foundation to add those things later.
When you are starting a new electronics project, you often need a bunch of controls to trigger things. Like, you want to have 4 or 6 or 10 buttons to do things.
This puts you in a complicated position because it means you need to build
a thing before you know if the thing is worth building. Wiring 10 buttons is a lot of work! so let's not do that.
Using bt2i2c then anything that can talk I2C (and that is a very low bar!) can use a full wireless keyboard, as long as you
connect three pins!
The basic concept is:
Get a Pico W
Get a Screen (optional, but useful)
Get a cheap BT keyboard (classic or BLE, both work)
Get the bt2i2c firmware onto the Pico W
Connect your project to the Pico W via I2C
Then, on your project side, use the client for the BBQ20 or BBQ10 keyboards
from solder party.This is (supposed to be) 100% compatible!
And that's it, you get keys via I2C, and can control your new project at will.
The screen will show you when it's scanning, or connected, or if you need to type a PIN. If you don't have a screen, use the pico's USB serial port.
Yes, really. The ESP32 CYD is now a Game Boy. Peanut-GB is a DMG emulator running
as an Esposito app, achieving 40-60 FPS at 240MHz with no PSRAM.
ROMs are loaded from the SD card into flash memory and memory-mapped for fast
access. The 160x144 Game Boy display is centered on the 320x240 screen with black
borders, just like the real thing.
Game Boy emulation on a $5 microcontroller
Controls
Action
Key
D-Pad
W/A/S/D
A Button
L
B Button
M
Select
O
Start
P
Save State
K
Load State
J
Exit
ESC
ROMs go in /sdcard/roms/ on the SD card. For legal homebrew Game Boy games, check out Homebrew Hub.
Sprite API and Flash ROM Loading
To make the emulator possible, the firmware gained two new systems:
Sprite API: Paletted sprites for efficient pixel-level rendering. The Game Boy
display uses a 2bpp sprite (5.7KB on system heap instead of a 23KB RGB565 buffer),
with one sprite_write_row call per scanline.
Flash ROM loading: ROMs are copied from SD card into the app_code flash partition
and memory-mapped. This gives zero-overhead pointer dereference instead of slow SD
card I/O during emulation.
Improved Event Handling
The OS event loop now drains all pending events instead of processing one per
iteration. This eliminates the input lag that was especially noticeable in
fast-paced apps like the emulator. The event queue was also doubled from 32 to
64 slots.
CPU at 240MHz
The CPU frequency was bumped from 160MHz to 240MHz, which — combined with
compiler optimizations and bank 0 RAM caching — is what makes Game Boy emulation
viable on this hardware.
Credits
The emulator core is Peanut-GB by
Mahyar Koshkouei, a remarkably fast single-header C99 Game Boy DMG emulator
library. Licensed under the MIT License.