Announcing Release of PETI Firmware Version 0.3.0

Last Updated: 2023-10-04 05:00:00 -0500

A few weeks ago, I published the PETI 0.3.0 firmware update! This update included mostly power management changes and display driver fixes. Here’s a quick look at how to get it, what it does, and what’s coming next in 0.4.0, which I’m hoping to get out later this year.

PETI 0.3.0 Changes and New Features

The main driver for me behind selecting what went into the 0.3.0 firmware was the completion of the PETI Development Kits for revision C of the REB, wanting to figure out what the actual battery life ot the device was (as discussed last time, and then dealing with the aftermath of those conclusions.

For that reason, PETI’s 0.3.0 firmware update included the following major changes:

  • Added Low Battery Detection using the hardware signal for the same, and using that information to blink an alert LED as well as displaying an on-screen indicator that the battery is low.
  • Added hardware primitives to put the display to sleep and wake it back up, when called for. Currently these are unused by the main game code but present in the debug menu.
  • Made the LEDs (which are the main power hogs) blink instead of being steady-state. This reduces them to a 50% duty cycle, so they use half as much power.
  • Made the game state save itself to FRAM, allowing the game’s current state to persist through battery changes, and, finally;
  • Corrected a longstanding bug that was causing the display drivers to fully redraw the screen on each frame instead of only those lines which actually need to be updated. This reduces both microcontroller and screen power usage.

Getting and Installing 0.3.0

PETI firmware version 0.3.0 is the first firmware version “officially” released for the PETI development kit, though we didn’t issue the firmware as an actual packaged release. This is the last firmware version that won’t be released as pre-compiled binaries bundled with the documentation. For that reason, installing it is a mite complex.

This guide presumes you have a PETI development preconfigured. If you don’t, follow the instructions in that guide. If anything about the guide is unclear, which is highly likely, please let me know by opening an issue in the PETI source repo.

  1. Switch your PETI git branch to r/0.3.0 and pull to make sure it is up to date.
  2. Attach your Development Kit to the PC, making sure the jumpers are configured for programming as described in the service manual.
  3. Run make clean && make target-check to ensure that you have a blank slate and that the makefile can both find and talk to your development kit.
  4. Run make target-flash to compile and flash the v. 0.3.0 firmware to the PETI device.

This process is successful if there are no errors displayed on the PC terminal and the firmware version displayed under the “Arcana Labs” boot logo reads ‘v. 0.3.0’.

As noted above, future versions of the firmware, including version 0.4.0, will use a more standardized version of the flash process which does not require manual compilation from source, and instructions for that process will be added to the service manual when the time comes.

What’s coming in 0.4.0

Version 0.4.0 is a major update including two important gameplay features - the ability for the pet to Sleep, and the ability for the pet to “evolve” by growing between different stages or forms as it ages. The sleep ability is currently under active development and is roughly two-thirds implemented. Like many PETI functions, it has been the subject of active development on the regular Tuesday and Thursday Lab Streams. These were suspended in the past and I haven’t blogged about their comeback (a formal announcement on that is pending), but it’s been good going so far.

The evolution mechanic is slightly more complicated as it requires adding an additional scene and going back and cleaning up quite a bit of old housekeeping, such as completing the work of designing all the metanimations, and possibly several supporting refactors to the Stage struct itself to support that work.

0.4.0 will also include the following more minor changes:

  1. A revamped Development Kit Service Manual including more detailed instruction on performing specific tasks rather than just broad descriptions of the parts. Lack of the former in favour of the latter is part of what I personally don’t like about TI service manuals and data sheets, so I want to correct it.
  2. Improvements to the “idle animations” for pets at stages of life higher than the baby, which ties into that “metanimations” overhaul described above.
  3. A fix for bug #37, which is sometimes causing the main game screen idle animations to hang or freeze ever since we fixed the display delta code in 0.3.0. That bug is intermittent (which is how 0.3.0 got released with it in). I was considering releasing this fix as a seperate smaller fix to 0.3.0 (and still could), but all being equal it’s just as easy to build it into 0.4.0.

Currently, my broad goal with 0.4.0 is to release it by Christmas. I think it’s likely we’ll come out sooner than later on that specific date, but I’d rather under-promise than play the game development studio’s gambit of over-promsing and then under-delivering. Unlike a AAA gaming studio, I have no brand recognition to cash in against your patience.

If you wanted to show your support financially for Arcana Labs projects like PETI, but don’t need a virtual pet development kit, your best avenue is via my Github Sponsors account or by making a one-time donation to Arcana Labs via or through other avenues detailed here. Supporters also get access to a special patrons-only section of the Arcana Labs Discord Server as well, and new bonuses are soon to be introduced on the github side!


Using your Fediverse account, you can respond to this article's Mastodon Post. Embracing the spirit of decentralization inherent to the Fediverse, you can use your account on any compatible platform to post. Clicking the "load comments" button below will make your browser request all of the non-private comments and display them below.

This was built based on this reference implementation.