This repository holds the main firmware for the Fri3d Camp 2024 and 2026 badges, with MicroPythonOS as the main OS, responsible for Over-The-Air updates.
Total internal flash size: 16384KB
Partitions should be aligned to 64KB
64KB preamble:
- 0x0 images/bootloader.bin
- 0x8000 images/partition-table.bin
- 0x9000 otadata (size 0x2000)
- 0xb000 nvs (size 0x5000)
MicroPythonOS:
- 3584 KiB = 3.5 MiB ota0
- 3584 KiB = 3.5 MiB ota1
The current unified ESP32S3 build that has support for all ESP32S3-based devices that MicroPythonOS supports is 3386 KiB in size, so this leaves 140 KiB for future growth.
If at some point in the future, that turns out not to be enough, further size optimization can be achieved by making a non-unified, custom build for the Fri3d Camp badges, excluding all unnecessary drivers and board support.
Note that this is not a miracle space saver, as these are "frozen" (precompiled and builtin) so they don't take up that much space anyhow. But it could save an estimated 100 KiB, maybe 150 KiB, so that should provide enough leeway in case it's ever needed.
App partitions:
- 1024 - 64 KiB (taken by preamble) for retro-core to emulate Nintendo Entertainment System, GameBoy, GameBoy Color, Game & Watch, Sega Master System, Game Gear, Coleco ColecoVision, NEC PC Engine and Atari Lynx
- 1024KB duke3d-go (Duke Nukem 3D)
7 MiB LittleFS2 storage:
- 2 MiB Duke Nano 3D Duke Nukem 3D Shareware, repacked for size: 1.3 MiB (1 level, minimal) to 2.5 MiB (all 6 levels, near complete)
- 1 MiB MicroPythonOS apps (Retro-Core Launcher, Duke Nukem 3D Launcher, lots of other games, apps and utilities)
- 1 MiB NES games + cover art
- 1 MiB GameBoy games + cover art
- 0.5 MiB Fri3d Camp logo image and configuration files
- 1.5 MiB free space (for savegames, sound recordings, high scores, etc.)
- The config file
internalsd/2026/retro-go/config/global.jsonis currently set to "buzzer" to have some audio out, so to have headset output, the user has to change this in the Duke Launcher settings. This could be automated (for example, detecting the Communicator Add-On) but for now it's manual.