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:

  1. The PicoCalc
  2. A pair of Teensy 4.1s
  3. 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:

  1. The directional buttons don't do anything. I should integrate this into the line editor at least, and also into edit and a port of doc-browser.
  2. 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.
  3. 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.
  4. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

Tags: ,