Firmware modifications for slightly different platform?


I’d like to draw your attention to a very similar device (currently not available anymore) called “Keyboard FeatherWing” (

Since I have one of those sitting around I wonder how difficult it might be to adapt the Lisp Lilygo firmware for it.
The device can hold MCUs like the Feather M0 oder M4 series etc. The keyboard is attached via I2C, but the screen uses SPI and the ILI 9341 driver. The resolution is the same as on the Lilypad, though.

I’d be willing to make necessary modifications of the firmware myself since I’m somewhat “fluent” in C, but I’d be grateful for some hints:

  1. Do you think it’s feasible for an ordinary mortal to make these modifications in a finite time frame?
  2. Could you provide me with some insight concerning the firmware parts that would need to be modified? Where should I start? I guess one would need to work with the M0/M4 version of uLisp, of course.

I’d be grateful for some thoughts on this idea.

(I’m new to uLisp and appreciate its existence very much! I actually had a Lisp course at university many years ago - and hated it because it seemed like endless counting of parentheses and not much else… clear misjudgement. But uLisp just brought me back to Lisp since it’s a real high level language that runs on ATMega MCUs as well. It’s quite irresistible. Thank you for providing us with this awesome software!)


Initial thoughts:

  • I’m familiar with the Keyboard FeatherWing, although I’ve never played with one. I assume the I2C keyboard interface is similar to the LilyGO T-Deck one, so you should be able to copy the keyboard code from the T-deck firmware.

  • The version of uLisp you start from depends on which Feather board you choose. An M4 one would be a good choice. In this case you should start from the ARM version of uLisp. This already has graphics display support, so you could probably drive the Keyboard FeatherWing display without much change to the code.

It sounds like you should be able to do the necessary changes yourself, but feel free to ask if you have problems.


Having done some of the initial port for the t-deck and knowing mostly C and never having touched ulisp before I’d say it was quite straightforward and took me probably less than 10 hours (tho @johnsondavies finished it in ways I couldn’t have). Just get the arm or t-deck port, make a list of drivers/features you’d want and do them one by one while checking the t-deck version for reference on design decisions.


Thanks for your suggestions and your encouragement! I’ll try my best and hopefully get back with some results.


Success! The Keyboard FeatherWing already is running as intended (REPL on on-board screen, typing/programming with thumb keyboard) - thanks to all your work already done before. So indeed it wasn’t really hard to modify the ARM version of uLisp appropriately. The existing keyboard firmware for KBFW delivers key events just as needed, so no hassle there. Currently, I even use a Feather M0 for this, since that was readily available right now. Still works perfect, just scrolling is a bit slow which I don’t mind.
Now I will add functionality for the other hardware features and adapt the .ino for other ARM feather types like M4, NRF and RP2040 one by one.
In what way do you want me to share the firmware once I feel it should be tidy enough for others to use?


In what way do you want me to share the firmware once I feel it should be tidy enough for others to use?

I suggest a GitHub repository, plus an announcement on this forum about its availability, if that’s convenient - thanks!