Tulip in action

I want to tell the world about a very fun side project I’ve been working on this past year, on and off. My new startup (not this!) is starting to get busy – I’ll share more details about it soon – and I know from experience I’ll need to put down my soldering plate and copy of EAGLE for a while. I thought I should share where I got to and hope that others can take care of it and help me make it even better.

I built a computer meant for being creative, the Tulip Creative Computer. It’s a computer you can carry with you, with a keyboard, screen, and battery. When you turn it on, you see a Python prompt, immediately. The “OS” of the computer itself is Python. It’s not running something else with a shell on top. You write and execute programs on the device itself. You have access to the entire hardware: a dual core 240MHz CPU with 8MB RAM, a 2D GPU with hardware sprites and scrolling bitmap planes, a 1024×600 color display with touchscreen, Wi-Fi, a 32-voice sound synthesizer, stereo audio, hardware MIDI in and out (with very precise timing!), 8 or 32MB of storage.

My custom Tulip with hinge, keyboard and integrated board and battery

You can build a Tulip yourself. Even if you don’t have a lot of electronics experience! There are three ways to build a Tulip, in order of stability:

I meant Tulip to be a thing that anyone can put together, without spending a lot of money or having to learn complicated assembly techniques. You can take advantage of other cheap development boards to put together your own Tulip in no time. Or, if you’re more interested in a ‘real’ PCB that can fit inside a custom case, check out our designs for a integrated board.

A Tulip built with no soldering, on a breadboard

But there’s even an easier way to get started. When I was building the display core of Tulip, I found myself annoyed at the time to build and flash the hardware target chip. I decided to put together a “simulator” that booted the code underlying the Tulip OS and graphics and sound into a window on my desktop computer. This is now called Tulip Desktop, and if you’re put off by the hardware, definitely give this a go. It’s got all of the same features and limitations as the hardware Tulip computer, running in a window on your computer. It’s very handy to make changes to Tulip itself, or just to work on Tulip programs if you don’t have access to the real thing.

The built in text editor running on Tulip Desktop

Tulip comes with a built in text editor, and soon a music editor. If you connect to Wi-Fi you’re able to join T U L I P ~ W O R L D, a Tulip-only chat room where you talk to other Tulip users and (soon) share what you’ve made! You can also use Python sockets and urllib to access network resources, as well as use Tulip as a controller for an Alles synthesizer mesh. Instant surround sound!

Tulip is for making things. I am sure many of you understand the draw of sitting at a device that just allows for creativity – think a drum machine, or a modular synthesizer, or a typewriter. Something that’s personal to you with everything you need built in. And something that’s built only to do what it can do for you – where it’s impossible (or at least very hard!) to see a web page or a tweet, or get a text. It can be a great device to compose music, or write, or make video games or other creative software.

I’ve really enjoyed working on and using Tulip. I love carrying my Tulip somewhere and coming back an hour later with a new song, or neat little game, or some writing. It’s a pleasure to use and the limitations of the hardware really do set up your mind to be creative.

Sprites and background tiles in the REPL on Tulip CC hardware

Under the hood, Tulip is a (complicated!) “port” of the great MicroPython project running on the Espressif ESP32-S3 – a cheap (and in stock!) MCU with 8 or 32MB flash storage and 8MB of SPI-attached RAM. It stands on the great work of ESP32 porters (namely “loboris”) who were able to wire in the features of the microcontroller to the Python process. I was able to get the large display running at stable frame rates on one core of the the ESP32-S3 through the help of some Espressif people and their ESP-IDF toolchain. After that, most of the development time was spent getting a Python REPL drawn on screen and building out the features of the “GPU,” editor, and sound system, (powered by DAn & my’s AMY synthesis engine.)

Working on Tulip itself has been a great joy. Putting pieces together from so much great scaffolding over the years of computer history to stand up a new kind of system is a particularly fun puzzle. From little things like getting USB key repeat going, or teaching myself how to solder those tiny FPC connectors, or constrained hardware challenges like optimizing the pipeline for scanline-based character drawing, or getting the ESP’s GDMA to buffer from slower SPI RAM to draw from faster RAM in pieces to support a bigger display. If this sort of stuff speaks to you, please come join us and make Tulip even better.

Please try it out – get the macOS app or buy the parts to build your own – and I’d really welcome changes, new capabilities, and issues you’re having. (Can someone make us a touchscreen sprite and tile editor for 2d games?) I welcome issue or pull requests on GitHub, and my email for any other thoughts. See you on T U L I P ~ W O R L D, and have fun!

Brooklyn NYC, February 2023

Tulip would not be possible without the constant help and support from the group chat / soldering tip line of Dan Ellis and Douglas Repetto, and tons of help and early PCB designs by Matt Mets. Thanks also to all my friends who have heard nothing but Tulip status updates from me over the years.

Breakout board version of Tulip in the forest

Read More