Next Steps with uLisp
I've been thinking about what to do next on the PicoCalc. I have a laundry list of items to work on. There's also a tie-in to some of the other ideas I have. I'll start with the bigger idea first, then discuss PicoCalc-specific things.
A Short History of Lisping
I've been writing Common Lisp for at least a decade in earnest, though the amount of time I spend on it ebbs and flows. I've written production CL and Clojure, and written a fair amount of hobby racket, scheme, and elisp. My imagination was captured early on by the book Let Over Lambda, and of course all the AI books piqued my interest.
I found uLisp a few years ago, but I didn't really have a use for it at first. I don't need a serial terminaly-only Lisp system given my comfort in writing Arduino C++. I started work on an ARM SAMD-51 system using a Blackberry Featherwing from Solder Party, but never got uLisp building with PlatformIO (where all my other tooling was).
When the PicoCalc came out and I saw it included a uLisp image, I immediately bought one. This was quickly followed by T-Deck and repurposing some existing Teensy 4.1s. I found a GameBoy cartridge form-factor for the Teensy, and I have this idea of building a uLisp Teensy cartridge with the additional PSRAM and an RTC, and building a case for the PicoCalc that allows me offload expensive computations to the Teensy. Alternatively, I could build a LoRa cartridge to combine some of my radio interests.
My goal is to have a handheld Lisp platform that I can extend and customize as needed to explore various maths and physics things, take some notes on, and generally interact with the world. The T-Deck is acceptable for now, but I'd much rather build on the PicoCalc.
The Multi-Device Conundrum
I currently have three platforms that I'm running uLisp on:
- The PicoCalc
- A pair of Teensy 4.1s
- The T-Deck
I'd like to have a way to generate a uLisp build that keeps the Lisp
libraries generally in sync (with perhaps a few variations based on
the platform, e.g. LoRa support on the T-Deck), as well as keeping my
extensions synced. I have a repository of Lisp programs too, that I
would like to keep synced to the SD cards. Maybe the move is to figure
out how to generate this in uLisp Builder
and keep some #if defined(feature)
flags in a Lisp library.
I'd also like to have system be able to check for a boot.lsp
file an
execute that on startup.
Finally, it would be nice to be able not have to swap out graphics libraries (e.g. the T-Deck TFT code vs the PicoCalc TFT code).
PicoCalc work
There's a bunch of things not working on the PicoCalc:
- The directional buttons don't do anything. I should integrate this
into the line editor at least, and also into
edit
and a port ofdoc-browser
. - Most of the function buttons don't do anything. Again, I should find a way to make these useful. For example, maybe an ability to bind keys to the F\(n\) buttons.
- The I2C buses don't seem to be working. I2C scanner shows nothing on either bus, and it should at a minimum see the keyboard. The same code picks up the RTC plugged into a teensy.
- Occasionally, the system drops back to the serial console only, accepting no input from the keyboard and not outputting anything to the screen.
Various uLisp project ideas
- I'd like to build out a package system, similar to some of what
I've seen on the forums. Even more so, I'd like to integrate this
into a "graphical" code editor like
doc-browser
. I have some ideas for this, but I need to flesh it out on paper. The big utility with this is being able to load and save packages, then unload them when they're not needed. - A note-taking system: jot down quick notes by day, with the ability to tag notes. It should be searchable by tag, day, or text.
- Similar to the code editor above, building out a scratchpad editor. The screen should have a tab for editing (e.g. via F1) and an output tab (e.g. via F2). This might be pushing the limits, though.
- Flesh out the cartridge approach idea: how should I integrate the pins into the formfactor I have? I'd like connectors for I2C, power, and serial.
- Adapt specs like Gemini, Guppy, or Gopher to build a network for small devices with small memories and small (e.g. 320x320 or 320x240) displays.