Home | ER-101 | ER-102 | ER-301 | Wiki | Contact

V0.6.x Release Candidate: Packages and Mods

:tongue: v0.6.xx (codename: Thoon) :tongue:

The quest for this release is to support the sharing of your work created on and for the ER-301. This includes:

  • Unit presets (*.unit) created using the ER-301 user interface. Shall we call this the high-level API?
  • New units created using the mid-level API (aka lua scripting of the functionality exposed by the low-level API).
  • Extensions of the base firmware via the low-level API (aka C/C++ coding).

Here are some of the highlights of v0.6 firmware:

Package Manager on the Device

Sharing of code and presets via packages. Low-level (c/c++) developers, mid-level (lua) developers, high-level (presets) developers will all share their work using the same file format (i.e. a package). From the user’s perspective there will be no difference. For example, if you want to package any number of presets so that you can share them with other users, ER-301’s package manager will collect all the necessary assets and create the package archive for you. Others can install your presets on to their ER-301 by just copying your package archive to the ER-301/packages folder of their front SD card and installing it from the package manager. One file, a few clicks, and no faffing with paths or folder names.

Run-time linking of shared libraries (*.so)

It is now possible to dynamically link shared libraries (*.so) to the bare-metal firmware during runtime. (Yes, I had to write my own dynamic linker. Yes, I now know way more than I want to about ELF files and the ARM/Thumb instruction set. :puke:) This functionality is accessible via lua’s require and package.loadlib interfaces. Please refer to the core and teletype mod source code for a comprehensive example. To the non-technical reader: This means almost any C/C++ code when properly compiled and prepared can be run on the ER-301. This includes both audio and graphics code and I’ve made sure the API is maximally expressive by forcing all of the factory units to use the same. In fact, the factory units are now implemented and packaged in exactly the same way you would package your own work.

Linux Desktop emulation of the Firmware

I wish I had done this years ago. This tool can be used to test new code before running it on an actual ER-301. This tightens the compile-run cycle a lot and gives you access to much more powerful debugging tools.

USB device functions

The ER-301 can now enumerate as a mass storage device or a virtual serial port when connected to a host PC. The mass storage function provides access to the front SD card and the virtual serial port provides console output. Once you enable the USB functionality in the General Settings, switching the STORAGE toggle to ‘eject’ will unmount your front SD card and allow the host PC to mount the SD card. Eject from the host PC to allow the ER-301 to mount the SD card again.

Open-sourcing the ER-301 firmware

This is a scary step for such a large project but in the end, the best developer documentation is the source code itself.

Download here…

Please read the change log for a full listing of the changes of each release.

WIKI: How to install firmware on the ER-301

:warning: Backwards Compatibility Warning :warning:
As in previous versions, this firmware will create its system files in its own folder (ER-301/v0.6) and initially populate the quicksaves by copying them from the v0.5 system folders. However, presets that live outside of the system folders are not touched. More importantly, do not expect presets/quicksaves created with this firmware to be compatible with earlier firmwares.


It’s here! Thanks, digging in!

Before installing I have a few questions:

  1. Should I be able to upgrade and continue where I left off (no promises)?
  2. I’m worried that the 2ms slew on SC.CV means (fast) chirp/glissando on notes, should I be? Probably I don’t understand it, could you elaborate on why this was added, what was “broken”, and how it differs from the 0.5 + users adding a slew themselves?
  3. How would you rate the “speed” of 0.6 compared to 0.5? Comparable, slightly faster, slightly slower?
  4. Could you elaborate a bit on the new garbage collection, how will this change affect the user?

Super wow on many levels, big surprise on the open source move, very cool with the linux emulator, .so support is gonna eat my time (eventually), packing scheme will most likely be a huge community boost!

Super cool!!!


Oh and there is a LOT to document, so I will be focusing on that for the next month or so.


Brilliant! Fantastic release. I’m definitely gonna code for the 301 and create some unit with this awesome toolset. Congrats and thanks a lot Brian :slight_smile:


Congrats Brian :wink:

1 Like

Exciting stuff! Sounds like this has been a monumental effort. Thanks very much, and looking forward to it! :slight_smile:


Congrats Brian!!

1 Like


Can’t say I’m sufficiently technical to appreciate the implications of all these changes - but wow! Looks like a really fantastic update and can’t wait to see what new things await with this module and from the community. Thanks

The PANDORA BOX :orange_heart:


Great update!
Thanks Brian!

The name of SC.CV was changed and had to be reassigned, custom units in Accents were not loaded, so if you’ve already built a set, you should be careful.

awesome news! testing!
confirm: no external lib is present in the device list. is it because they have to be reformatted in some way?

Purely guessing at this point that Accents will need to be re-packaged, and will also need some minor refactoring due to some of the syntax changes for the Lua functions…


None of the bespoke units (i.e. middle layer) from before v0.6 will work without some adjustments to the lua code. I tried to keep the changes to the API minimal but in the end there were some. I will be working with anyone who needs help bringing their contributions to the new API.


Thanks, since I’m in the middle of preparing a set, and use a lot of diy lua, I’ll kick and let the dust settle! Thanks!


Thanks for chuckles :stuck_out_tongue_winking_eye:


2 posts were merged into an existing topic: ER-301 Emulator for Linux

I can’t to seem to find the reason for this change either :grin: It was made quite early and I seem to have lost the context for it. I’ll try and post back if I can remember…


Speed of DSP should be the same. Graphics and UI events should be a bit more efficient and snappy. That is where the new garbage collection comes in mostly. I don’t allow memory allocation/deallocation in the audio thread.


I’m running an embedded linux version of Ubuntu in Windows 10 and now struggling to make alsa work :confounded: Reminds me of the days I decided to transition completely to Linux for both development and creative work (I failed miserably)…

@odevices The build was very smooth though so that’s a great sign!

1 Like