Releases: 32blit/32blit-sdk
Test: Do Not Eat!
CI: Switch to action-gh-release. Switch from the long deprecated upload-release-asset to action-gh-release and attempt to replicate the same behaviour. Avoids nodejs and set-output deprecation warnings: - https://github.blog/changelog/2023-06-13-github-actions-all-actions-will-run-on-node16-instead-of-node12-by-default/ - https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
Version 0.3.2
Less is More
This release is all about removing things, but in a good way.
delete[] examples
The examples now live over at https://github.com/32blit/32blit-examples. However if you still want to build them with the SDK , you can clone that repo to [sdk root]/examples
like it was before.
duplication--
Some code is now shared between 32blit-stm32 and 32blit-pico as part of the ongoing quest of adding more features to -pico.
broken = false
Finally, this release is less broken due to being built with the latest tools. There's also fixes for building with pico-sdk 2.0.
What's Changed
- Tweak Windows CLI docs by @Gadgetoid in #692
- Revise Windows docs, prefer CMake by @Gadgetoid in #691
- pico: move drivers into subdirs by @Daft-Freak in #850
- De-duplicate blit API -> fatfs glue by @Daft-Freak in #852
- pico-sdk 2.0 fixes by @Daft-Freak in #854
- Split examples v2 by @Daft-Freak in #849
- RP2350 bits by @Daft-Freak in #855
Full Changelog: v0.3.1...v0.3.2
v0.3.1
A Pico... Vision?
Realising that it's been ages since the last release, changes have piled up and I can make releases now... Here's a release!
New Hardware
The biggest change in this release is support for the PicoVision, which includes USB HID input and SD card storage (also available on the VGA board). Most code should port over easily with the exception that you can't directly access screen.data
. It's possible to blit a Surface
in the same format as a partial workaround though.
static uint16_t temp_framebuffer[160 * 120];
static blit::Surface temp_screen((uint8_t *)temp_framebuffer, blit::PixelFormat::BGR555, {160, 120});
...
screen.blit(&temp_screen, {0, 0, 160, 120}, {0, 0});
The "pico" port also has a lot more configuration, making it a easier to support new devices with st7789 displays and buttons wired to GPIO pins. An example of this is the Tufty2040, which is now supported as much as it can be with only five buttons.
Other Additions
blit_executable(name INTERNAL_FLASH src.cpp)
can be used to build a "firmware" executable for the 32blit. This was previously done withblit_executable_int_flash
, which was internal to the SDK.Surface::get_pixel
allows reading back data fromSurface
s, without needing to accessdata
or know the format. It also works in the PicoVision port.set_screen_mode
now takes an optional resolution, currently only used for the PicoVision.- The launcher is a bit more helpful about incompatible blit files instead of just going "Oops".
- The usual bug fixes all over.
Compatibility
As usual, old .blit files should continue to work. This version does contain a minor API bump though, so new .blit files will not run on older firmware.
Aditionally, some loooong-deprecated wrappers have been removed. (SpriteSheet
-> Surface
, a few blit
variants and 32blit.cmake
)
What's Changed
- Fix builds using pico.toochain with SDK 1.5.0 by @Daft-Freak in #797
- Remove deprecated compatibility wrapper by @Daft-Freak in #795
- Remember launched item in launcher + font changes by @Daft-Freak in #796
- CI: Upload install results as artifacts. by @Gadgetoid in #798
- Pico board config improvements by @Daft-Freak in #794
- Only build picosystem hardware test for picosystem by @Daft-Freak in #799
- Fix the message displayed when no launcher is installed by @ali1234 in #800
- STM32: Use defined SD_DETECT GPIO by @ali1234 in #805
- Firmware: reject erase commands beyond the end of external flash by @ali1234 in #809
- pico: use pico_rand for random API by @Daft-Freak in #811
- Pico build size improvements by @Daft-Freak in #810
- stm32: "fix" the Reset_Handler warning by @Daft-Freak in #812
- Update CubeMX project clocks to match final hardware by @ali1234 in #806
- Sync some blit_metadata changes to 32blit-pico by @Daft-Freak in #807
- ci: enable ccache for macOS by @Daft-Freak in #814
- include cstdint in point.hpp by @Daft-Freak in #816
- firmware: fix launch early-out errors by @Daft-Freak in #815
- pico: HID input by @Daft-Freak in #769
- Avoid DMA channel/PIO SM conflicts from scanvideo/audio by @Daft-Freak in #801
- Launcher refactoring by @Daft-Freak in #804
- blit_executable(_int_flash) improvements by @Daft-Freak in #813
- pico: usb host multiplayer by @Daft-Freak in #817
- Delete old stdlibs files when redownloading by @Daft-Freak in #825
- sdl: set SDL_WINDOW_ALLOW_HIDPI by @Daft-Freak in #823
- Search for the 32blit executable if the module fails by @Daft-Freak in #824
- SDL screen mode/size improvements by @Daft-Freak in #826
- Misc patches by @Daft-Freak in #820
- More pico config by @Daft-Freak in #827
- Add Surface::get_pixel and remove special case from blit code by @Daft-Freak in #828
- pico: SPI-mode SD card support by @Daft-Freak in #819
- pico: remove blit_executable_common by @Daft-Freak in #831
- docs: update pico support by @Daft-Freak in #833
- Optimise stretch_blit_vspan by @Daft-Freak in #830
- pico: include config in led.cpp by @Daft-Freak in #834
- pico: 8BitDo Zero 2 HID mapping by @Daft-Freak in #832
- Add VERBATIM to CMake custom commands by @Daft-Freak in #835
- Some screen mode refactoring by @Daft-Freak in #836
- Pico audio improvements by @Daft-Freak in #837
- sdl: add extra search dir for fixup_bundle by @Daft-Freak in #838
- PicoVision by @Daft-Freak in #829
- st7789 config and parallel support by @Daft-Freak in #821
- pico: generic st7789 rotation config by @Daft-Freak in #844
- Fix actions by @Daft-Freak in #846
- Fix pico metadata title by @Daft-Freak in #847
- More PicoVision modes by @Daft-Freak in #840
- Add can_launch API by @Daft-Freak in #843
- Generic GPIO input driver by @Daft-Freak in #842
- Extend .blit header with api/device info by @Daft-Freak in #822
Full Changelog: v0.3.0...v0.3.1
Version 0.3.0
Community Handover
Version 0.3.0 marks a major milestone in the 32blit project; its transfer into the capable hands of the most invested community members.
Why? There wont be another production run of the STM32-based 32blit handheld, and there may never be another handheld from Pimoroni bearing the 32blit moniker. We cannot sensibly afford to pour time into maintaining the 32blit tooling, but I think it's valuable enough that it deserves to live on.
The 32blit SDK has outlasted its namesake and now exists as a set of tools for building games targeting microcontrollers, with additional support for SDL to target Windows, Mac and Linux, and Emscripten for the web. We have hardware ports for the O.G. 32blit and many new RP2040/Raspberry Pi Pico based boards including PicoSystem.
The 32blit SDK is permissively licensed and we've handed the reins over to some community members so that they can continue to improve and build upon it while we might be busy elsewhere.
Thank You
You - the community - really took 32blit and ran, achieving something truly incredible and beyond our wildest expectations or imagination. Thank you!
I remain personally invested in the 32blit SDK and tooling, and will remain as a maintainer here. I will, however, take a back seat and let the community contributors guide the project. Where it goes from here is up to you.
But... I hope we'll see a full rebirth of the 32blit firmware/launcher on a PicoSystem someday.
What's Changed
- Clean up the Emscripten SDL flags space hacks by @Daft-Freak in #762
- Adjust SDL DLL copying to handle VS generators by @Daft-Freak in #763
- Pico display cleanup by @Daft-Freak in #764
- Actions tweaks by @Daft-Freak in #765
- Update USB device library to v2.6.0 by @Daft-Freak in #774
- Rescan flash after flashing from SD by @Daft-Freak in #775
- stm32: work around QSPI failing to read the last 32 bytes by @Daft-Freak in #773
- Pico examples changes by @Daft-Freak in #772
- pico: "Fix" PWM audio clock div by @Daft-Freak in #771
- Warning fixes (everywhere) by @Daft-Freak in #766
- Add optional support for filtering in list_files by @Daft-Freak in #767
- Fix unused variable in launcher by @Daft-Freak in #777
- Update to latest SDL for macOS/Windows builds by @Daft-Freak in #783
- Firmware cleanup by @Daft-Freak in #778
- Fix delayed game switch by @Daft-Freak in #782
- User I2C support v2 by @Daft-Freak in #781
- Flight demo improvements by @ThePythonator in #780
- Fixed definition inconsistencies and rotation matrix generation. Technically a breaking change! by @ThePythonator in #779
- Update actions for deprecation warnings by @Daft-Freak in #787
- Minor firmware blit flashing improvements by @Daft-Freak in #785
- sdl: don't return error when reading 0 bytes by @Daft-Freak in #784
- pico: scanvideo improvements by @Daft-Freak in #768
- Adjust SDL loop timing a bit by @Daft-Freak in #752
- pico: More metadata by @Daft-Freak in #770
- Update stdlibs by @Daft-Freak in #788
- Update GCC version in linux docs by @Daft-Freak in #789
- stm32: remove readelf from post build commands by @Daft-Freak in #790
- Update emscripten actions to fix deprecation warnings by @Daft-Freak in #791
- Increase Emscripten stack size (+options update) by @Daft-Freak in #792
- Raycster: improve sprite rendering and more by @Gadgetoid in #704
- docs: Make emscripten path warning more obvious. by @Gadgetoid in #793
Full Changelog: v0.2.3...v0.3.0
Version 0.2.3
Some Light Maintenance
Swept up some bugfixes and improvements made by @Daft-Freak into a release for your viewing pleasure.
Should also fix some of the examples for Pico/RP2040 which previously suffered from an uninitiated screen!
What's Changed
- Fix DIR leak in blit::list_files by @Daft-Freak in #761
- Fix exit(0) crashing by @Daft-Freak in #760
- Avoid hardcoding the screen size for SDL everywhere by @Daft-Freak in #757
- pico: Fix default screen mode by @Daft-Freak in #753
- pico: Don't sleep when we need to render by @Daft-Freak in #754
- pico: Delcare screen_fb as uint16_t by @Daft-Freak in #756
- Update Windows setup docs for VS2022 by @Daft-Freak in #759
- Misc pico docs fixes by @Daft-Freak in #758
Full Changelog: v0.2.2...v0.2.3
Version 0.2.2
sudo Make My Code Faster
@Daft-Freak still seems to be finding things to tweak and fix, is code... ever done? This release includes lots of overdue cleanup, tidying and rejiggling of some untouched dark corners of the SDK plus some juicy new features to boot.
Perhaps the most notable is the availability of 30k of user ITCM RAM for 32blit hardware users.
ITCM RAM
ITCM stands for "Instruction Tightly Coupled Memory." This is super fast instruction RAM that's directly accessible to the ARM Cortex core on the STM32H750 in 32blit (This doesn't apply to PicoSystem, sorry!). That means it acts sort-of like an instruction cache, avoiding the actual instruction cache and making larger, time critical functions always fast without trampling the regular instruction cache (that sits between the CPU and QSPI flash to make it not utterly painful to use.)
Since QSPI accesses are - by comparison - low, putting some time critical code in ITCM can make an enormous difference to performance. Note this works best on chunks of code where you're negotiating a lot of instructions- Lua's bytecode interpreter is a good example -and wont have such a big impact to code that's bottlenecked by heavy computation or blocking on some other IO.
This change introduces blit_fast_code
and blit_no_inline_fast_code
which are convenience wrappers around the attributes that bump code into the .itcm
section. Decorate up to 30K of your most sprawling, critical-path functions to turbo-boost your games.
See #737 for more information.
Screen Mode API Enhancements
The Screen Mode API has been changed to decouple resolution from colour depth bringing support for palette mode to both low/high resolution modes. There are six supported modes - two resolutions, and three pixel formats (RGB, RGB565, P) with different tradeoffs, the most memory efficient is - unsurprisingly - lores/paletted.
See #730
Let's Get Ready to Rumble
Thanks to @LordEidi we now have controller rumble support available in SDL builds. This makes testing rumble a little easier and means your rumble-enabled games can be shipped to regular ol' computer users without sacrificing your carefully crafted bzzt.
You don't need to change your code to take advantage of this. Just recompile against the latest SDK and your controllers should emit a little bzzzt when detected to let you know it's working.
See #729
Another World, another time?
The Another World game engine has been migrated to its own GitHub repository, complete with instructions for getting it up and running.
It hasn't worked properly for a long, long time now (ever?) and hopefully this should make it easier for an enterprising user to pop up and tinker with the code. Fancy a challenge? It lives here now: https://github.com/32blit/32blit-another-world
Save-b-Gone
Thanks to @Blackhawk-TA you can now remove savegames. Pooof. Gone. Self-destructing roguelike, anyone?
See #750
All The Things
- Reset sleep timer/wake up when receiving CDC data by @Daft-Freak in #727
- Set 32BLIT_DIR in the Pico toolchain too by @Daft-Freak in #728
- Start documenting the firmware/launcher/PIC magic by @Daft-Freak in #732
- Fix double promotion warning by @mslinklater in #735
- Improve feedback for trying to use storage mode with no SD card by @Daft-Freak in #731
- Add memory layout to internals by @Daft-Freak in #742
- Screen mode cleanup and extended API by @Daft-Freak in #730
- Blit function consistency shuffle by @Daft-Freak in #733
- ITCM for "user" code by @Daft-Freak in #737
- Contributors script fix + list update by @Daft-Freak in #738
- Delete things by @Daft-Freak in #739
- Prepend target name to generated metadata.cpp by @Daft-Freak in #740
- Use asset packer for voxel map data by @Daft-Freak in #743
- Introducing game controller rumble in SDL builds by @LordEidi in #729
- Fix mipmap boundary check by @Blackhawk-TA in #741
- Remove examples/another-world by @Gadgetoid in #745
- Some example changes by @Daft-Freak in #747
- Fix load_tmx flags typo by @Daft-Freak in #746
- SDL file path fixes by @Daft-Freak in #749
- Firmware tidying by @Daft-Freak in #748
- Add remove_save method to delete existing save data by @Blackhawk-TA in #750
- Bump required tools version to 0.7.2 by @Gadgetoid in #751
New Contributors
- @mslinklater made their first contribution in #735
- @Blackhawk-TA made their first contribution in #741
Full Changelog: v0.2.1...v0.2.2
Version 0.2.1
Pico Fixes
It's been a little over a month since we released @Daft-Freak's Pico SDK support as part of the 32blit SDK.
In the interim various rough edges have been bashed off and things tweaked. Nothing groundbreaking, but the ebb and flow of fixes that characterise a - I suppose - mature SDK.
PicoSystem users have been badgering away making games with the 32blit SDK, the PicoSystem C++ SDK and the PicoSystem MicroPython SDK. The 32blit SDK remains the best choice for games you want to ship on Itch.io and build cross-platform.
Moar Volts
Most notably we've raised the core voltage for RP2040 from 1.10v to 1.20v to help maintain a stable 250MHz clock on some marginal RP2040 chips. I think we've replaced most marginal PicoSystems (after figuring out that overclock was the issue) but this shouldd hopefully fix them once and for all. Note: I've run happily with 1.25v and 1.30v overclocks, and pushing the envelope is not uncommon with RP2040- this should have no noticable affect on battery or device lifespan.
Salient Changes
Special thanks to @ali1234 for fixing the Pico SDK cmake build, and adding a pico.toolchain
.
@Daft-Freak has found and fixed an issue with GCC 10 which has been plaguing Arch users and Linux trailblazers for a while.
I've swapped us over to the new DFU tool built into the 32blit tools- and thus the minimum tools version is now 0.7.1. Don't forget to python3 -m pip install 32blit --upgrade
.
That's it! That's the release.
All The Things
- Pico ST7789 refactoring by @Daft-Freak in #718
- Some pico config changes by @Daft-Freak in #717
- Switch to 32blit tools DFU tool by @Gadgetoid in #687
- Update the pico extras helper to fix fetching from git by @ali1234 in #713
- SDL: Call multiplayer->update() from the user code thread by @ali1234 in #716
- Fix GCC 10 by @Daft-Freak in #720
- Allow building for pico by specifying a toolchain, same as 32blit by @ali1234 in #714
- Docs: minor tweaks & a docs landing page by @Gadgetoid in #719
- No more 32BLIT_DIR for STM32 builds by @Daft-Freak in #721
- PicoSystem: update docs to use new picosystem-boilerplate by @Gadgetoid in #723
- Bind MENU to escape for SDL by @Daft-Freak in #722
- Two small pico fixes by @Daft-Freak in #724
- Pico: 1.20v overvolt for stable 250MHz by @Gadgetoid in #725
Full Changelog: v0.2.0...v0.2.1
Version 0.2.0
RC-omg-it-supports-Pico-now?
We originally planned for the PicoSystem to be a simple, PCB-based, RP2040 handheld that we cast out into the world to see what people would make of it.
Due to a few design tweaks here and there, it turned out nicer than expected. As a consequence we felt it deserved a bit more fanfare and support.
Cue @Daft-Freak who had (is anyone surprised?) quietly ported the 32blit SDK to Pico/RP2040.
The community has made the Pico SDK and tools indespensible for working on embedded games, indeed it was painful trying to port a game without the 32blit SDK. It made sense to bring PicoSystem under the same umbrella.
A few PicoSystem specific tweaks to @Daft-Freak's port later, we could build many 32blit examples and games for PicoSystem. A little effort to support the screen resolutions (120x120 and 240x240) made many of them very playable.
It all sort of fell into place.
I'm hoping this will be a win/win situation between PicoSystem and 32blit, injecting a little gusto into the thriving (but admittedly small) 32blit community while also giving PicoSystem users a running start.
Targeting PicoSystem has already brought some minor improvements back to the 32blit SDK, and some significant improvements and performance tweaks to some games.
Porting Games
The PicoSystem is a subset of the 32blit, with fewer buttons, no analog stick, less grunt, less memory and less screen real estate. Here's a comparison:
32blit | PicoSystem | |
---|---|---|
CPU | 480MHz | 250MHz † |
RAM | 611K § | 151K to 207K (lores only ¶) |
FPU | Yes | No |
Buttons | 6 + reset | 4 + power |
Joystick | Yes | No |
Tilt | Yes | No |
Sound | 8CH mini speaker | 1CH piezo booper ‡ |
Storage | 32MB XiP QSPI + 128K Flash | 12MB XiP QSPI |
SD card for data | 4MB QSPI for data (FAT) | |
Screen | 320x240 (160x120 lores) | 240x240 (120x120 lores) |
Firmware | Yes | No |
Launcher | Browse + Launch Games | No |
- † - technically 2 cores overclocked from 133MHz to 250MHz but the 32Blit SDK uses only one
- ‡ - makes a best-effort attempt to play any
SQUARE
waveforms (single-channel) - § - 362K main RAM, 64K D3 RAM, 127K DTCMRAM, 58K ITCMRAM
- ¶ - setting
ALLOW_HIRES=0
allocates a doubled buffered 120x120 16bit framebuffer (56.25k) and disables the hires screen mode.
The key differences between the RP2040 in the PicoSystem and STM32H750 in the 32blit are the slower CPU (32blit SDK doesn't use the second core), lack of FPU (floating point acellerator) and the single, small RAM region (the 32blit's main RAM is bigger than the PicoSystem's entire RAM!).
When porting games of any complexity you'll have to pay special attention to RAM usage and your use of floating point calculations. Simpler games will generally port over easily, with a little consideration for the smaller screen resolution.
Finally, the PicoSystem doesn't have a beefy speaker like 32blit. Audio is limited to a simple piezo sounder that can play a single channel at a time. PicoSystem will run the audio subsystem and make a best effort attempt output any channel configured with a SQUARE
wave using the specified frequency and duty-cycle. Noise/sine/triangle waveforms, mp3s and wave audio are not compatible.
Example: Rainbow Ascent
Here's the complete diff for the Rainbow Ascent port: f35eab3
- Some text strings were changed in consideration of the 120x120 screen resolution.
- A simple camera transform was added to keep the player in focus as they move left/right in the 160px (16 tile) wide level on a 120px wide screen.
- Collision was fixed to check against the game bounds, since the level is - on PicoSystem at least - larger than the screen.
- The jump sound just works on PicoSystem, but the swooshing waves noise does not.
The port also required @Daft-Freak's performance optimisation: 0e88007
New Stuff
- PicoSystem/RP2040 support
- (limited) RGB565 Surface and bitmap support
- Optimisations for PicoSystem which apply to 32blit, too!
- Emscripten-based ports now have "image-rendering" set on the canvas to avoid blurry upscaling on hi-dpi screens
- Bugfix to menu clip rectangle to avoid crashes when drawing out-of-bounds
- Tweaks & fixes to SDL port video capture
- Fixed final 99% bug for installing games using 32blit tools
- Geometry is now a playable game
- Faster scrolly-tile (Rainbow Ascent) rendering
- Bugfix to the envelope generator that prevents audio from sticking on
Final 99% bug
This deserves a special mention, since it might be the last holdout 99% bug that plagued the game flashing process on 32blit.
@Daft-Freak finally found a .blit that would reliably fail at 99% and traced the cause of the bug. Flashing games should now be 100% reliable!
See 5368ff3 for more information.
Sticky Audio Bug
There was a bug that would result in an envelope generator never decaying fully to 0. The ADSR now clamps to the sustain volume when proceeding to the sustain phase. If sustain is 0, the ADSR will turn off.
Geometry
In part motivated by the PicoSystem, and by using it as an excuse to sink some time into the 32blit examples I've finally managed to turn Geometry from a tech demo into a loosely playable game.
Split the asteroids, collect them to score, and keep an eye on your energy levels.
Version bump to 0.2.0
Since the PicoSystem/RP2040 support is a big deal, I've bumped the minor version number from 1, to 2. Bold. I know.
This is to make it easier to disambiguate pre and post PicoSystem SDK versions at a glance, but doesn't mean anything much otherwise.
Summary
For the full list of changes see: v0.1.14...v0.2.0
Version 0.1.14 RC5
RC5
We're still finding things to fix, including updating the FatFS library and making many, many little optimizations and quality of life improvements.
Timers
Prompted by me trying to shoe-horn "userdata" into Timers/Tweens so that I could the Lua state for 32blit-Lua, @Daft-Freak has made some fixes/tweaks to them both:
- The
blit::Timer
callback is now astd::function
giving timer callbacks access to the scope of your application - Loop count is now reset upon restarting a timer
- Timers can now be
pause
d. Inspired by commits from @Loxrie - https://github.com/Loxrie/32blit-beta/tree/feature/pause - Timers can be initialized through their constructor which now accepts
callback
,duration
andloop
.init
is kept for backwards compatibility - The same applies to Tweens
File Metadata
Non .blit
files can now have associated metadata by placing a <filename>.blmeta
file alongside them. This is useful for identifying files such as game ROMs so they look shiny in the launcher.
FatFS & Filesystem
The FatFS library underpinning filesystem access to the SD card has been updated from R0.12C to R0.14b. This includes a number of fixes mostly for ExFAT (which we don't officially use) but for our purposes specifically fixes paths that include a tailing slash so that dir
and dir/
are equivalent.
See the FatFS changelog for a complete list of fixes: http://www.elm-chan.org/fsw/ff/updates.txt
@Daft-Freak has added tracking of open files and ensured files are closed when switching game.
General Fixes & Tweaks
- CMake will now check to see if the 32Blit tools fail and throw a fatal error rather than breaking
- Emscripten version has been bumped from 2.0.4 to 2.0.18 fixing reliability issues downloading
libjpeg
. (This is forced to-O2
for faster CI builds) transparent_index
is now used by Palette to Palette blending operationsRect.size
is now const- Closing the system menu now avoids a huge timeskip in the game and Timers/Tweens are corrected
- System name for 32Blit is now explicitly "32BLIT_HW" rather than "Generic"
- Optimized
hsv_to_rgba
- Fixed SDL
get_metadata
description - Fix corner case off-by-one in RLE sprite unpacking
- Fixes & tweaks to the battery I2C comms and status
- Assorted preparations to bring 32blit-sdk support to PicoSystem
Raycaster
Working Bug spray! Plus lots of small tweaks and fixes.
All The Things
Once again, all of the changes in this release can be browsed in detail here: v0.1.13...v0.1.14
Version 0.1.13
RC4
Wow. It's been a while.
More of you have got hold of your 32Blits and started experimenting, running into some of the remaining rough edges. @Daft-Freak, @ahnlak and @davidskeck have stepped in with edge case bugfixes, quality of life improvements, documentation tweaks and typo fixes.
There's nothing too groundbreaking here, save for general improvements.
USB Serial
USB serial has been run through the ringer by those of you experimenting with web USB. Installing games to 32Blit is now more robust than it's ever been and I regularly get away with running for f in examples/*/*.blit; do 32blit install $f; done
without error. Thanks to @Daft-Freak for getting suck in this seemingly never ending chasm of issues.
Android!?
Someone asked about building on Android... so of course @Daft-Freak took that as a challenge accepted moment and made some tweaks to the SDK. I've always wanted to see how far the 32Blit SDK could go in terms of third-party devices, so this is really cool. Right now we don't have official support for Android in the continuous-integration or releases, but at least we know it's not outside the realm of possibility.
Sleep
While the 32Blit doesn't really have a real sleep mode yet, it pretends to be off if left idle by dimming the screen. Some miscellaneous changes have improved this behaviour and given better idle battery life.
Additionally the system will really sleep between updates, albeit in practise the continuous audio interrupt makes a mockery of this.
Tiled/TMX Tweaks
Loading a TMX-style map from a Tiled asset is less breaky and flags have been added to denote 16-bit data and indicate if transform data is included. You will need to update the 32Blit Tools for your map data to build/load correcty.
All The Changes
Find the complete list of changes here: v0.1.12...v0.1.13