uLisp now supports the Adafruit Fruit Jam


#1

The Adafruit Fruit Jam is a single board computer based on the RP2350B, the 80-pin version of Raspberry Pi’s RP2350 microcontroller.

It features a wide selection of peripherals including: two USB-A ports for a keyboard, mouse, or game controller, a Micro SD Card, a TLV320DAC3100 capable of driving an I2S stereo headphone and mono loudspeaker, an ESP32-C6 for WiFi and Internet connectivity, five NeoPixels, three switches, and a DVI port that can drive an HDMI display using the RP2350’s High Speed Transmit (HSTX) peripheral:

It’s supported by the latest release of ARM uLisp, 4.8f. For more information see: Adafruit Fruit Jam.

See it on Adafruit: Adafruit Fruit Jam - Mini RP2350 Computer.


#2

Still to do:

  • Using Wi-Fi with the ESP32-C6 and the uLisp Wi-Fi extensions.

  • Sound output; eg from note.

  • IR Receiver input.

  • Using USB Host devices; eg keyboard, mouse, game controller.

  • Work out why the HSTX HDMI graphics doesn’t work with uLisp using PSRAM.

If anyone succeeds with any of these please let me know.


#3

This is super exciting!

I just got my Fruit Jam and got uLisp running on it. Now reviewing the uLisp code and documentation.

Do you have a branch or other way to help with adding more support? I’m not particularly confident in my abilities but I’d love to try to get at least USB Host working to be able to use the device in a keyboard-and-monitor arrangement independently of my other computer.


#4

Hi - good to hear you’ve got uLisp running on your Fruit Jam! I agree that it would make a great stand-alone computer with keyboard and display.

Do you mean a branch with other support, or where you can contribute code you’ve developed?

I managed to get a USB Host keyboard working on the Fruit Jam, based on this article here:

Using a Keyboard with USB Host

I’ve got my own simplified version of the file usbhost_keyboard_simpletest.ino which I can email you if it would be helpful, but I couldn’t get it to work alongside uLisp, so temporarily gave up on that.

The other problem I had, as mentioned above, is that the display stopped working when I enabled PSRAM. Do you get the same behaviour, and what display are you using it with?

Regards, David


#5

Yup, confirmed that enabling PSRAM with the original uLisp arm sketch makes the graphical things stop working. I’m trying with an LG 32UP83A monitor.

I meant that if we have a branch of code or shared repository of some kind we could collaborate on trying to sort out these issues.


#6

I’ve created a GitHub repository for it:

https://github.com/technoblogy/ulisp-fruit-jam

I couldn’t think of a better way of doing it.

Thanks, David


#7

Thank you so much!! I won’t have a chance to take a look at it for at least a week (traveling).

I was planning to take a look at it in the context of the official test stand app as mentioned in the note on the official guide. They say initialization order is important so I was going to see if there are some interesting discrepancies between them.


#8

After some dead ends and a slightly cursed USB stack, I’ve been able to make progress with significant LLM coding assistance.

The goal for me is to have a standalone lisp machine able to run and edit code and maybe even handle a bit of a GUI. Hooking it up to some midi controller and playing some music would be pretty swell, too.

I’ve got USB keyboard and mouse working (it still occasionally hangs, unfortunately).

There is a display now which renders a REPL in text mode and can switch to graphics mode to draw things. I tried going with a dual mode, using the Adafruit text display mode for higher resolution and nicer fonts, but switching to and from the 8bit graphics mode was way too flaky.

WiFi and SD card works.

The mouse gets a cursor in graphics mode.

Need to still figure out sound, better REPL interaction, a minimal text editor, buttons, neopixels, keyboard reporting, and probably PSRAM.

I’ve got a fork of the ulisp-fruit-jam repo but it’s rather a mess still, so I’m holding off pushing my code unless someone is super interested to see it in its intermediate state.


#9

That sounds great - well done! For the REPL have a look at the code for the PicoCalc uLisp Machine or Cardputer uLisp Machine which implement a line editor with parenthesis matching and autocomplete.


#10

Ok, i’ve got a four voice audio system, REPL with a bit of history, editing, and tab completion across the builtins and globals, buttons, neopixels, keyboard input for graphics, and PSRAM working. That last one unlocked a larger screen buffer in SRAM for higher resolution graphics and a nice 8x8 font. Also USB rock solid now.

I don’t think I have an IR emitter so I don’t have a way to test the IR receiver. Haven’t wired that up.

I’ve also got a minimal SD card package manager in the LispLibrary which works well enough with the built in edit function for coding. At least to get started.

Currently refactoring things to follow the documented library and extension approach, hopefully it will make ulisp upgrades easier. Also need to do a pretty hefty refactoring pass over the new code. It’s a bit of a tangled mess right now and I would hate to have to actually maintain it =]

There’s a small handful of other bugs I need to fix, but it’s just about a usable standalone machine now!


#11

it’s just about a usable standalone machine now!

Brilliant!

I don’t think I have an IR emitter

TV remote control?

and PSRAM working

Is that something I could easily add to the release version of uLisp? It would be good to have that fixed.


#12

PSRAM Fix: https://github.com/technoblogy/ulisp-arm/pull/58


#13

Thank you for the pull request. I don’t actually use GitHub to build uLisp (I have my own Builder program written in Lisp) so I won’t merge your pull request, but I’ll copy your changes to my Builder.

One query: is the test function just a demo to show that the PSRAM is working, or is it necessary in some way to calibrate the timing? If it’s just a demo I probably won’t include it in the uLisp source as it’s not relevant to other platforms.


#14

nope, the test lisp library entry is just a way to test that the psram and graphics are coexisting. no need to include it.


#15

Am I correct in thinking the braces aren’t strictly necessary around the extern declaration and call? I haven’t seen that construct before.


#16

Yup, not strictly necessary. For a extern function declaration there’s no resources to clean up afterwards so those can be omitted.


#17

Thanks.


#18

got a little carried away and i’m 80 commits along. but i think i’ve got the code in a reasonable state. the machine works okay standalone. i’ve added sprite drawing functionality. and refactored the heck out of it make it less intertwined. going to do a final read through the code and then push my fork in the next day or two.

(i’ll see if i can dig out an IR remote somewhere in the meantime. not quite sure what i’d actually use it for, but it might be interesting?)


#19

alrighty, here’s this beast: https://github.com/apiarian/ulisp-fruit-jam

it mostly works. the graphics occasionally dies (something to do with audio, i’ll see if i can find a reproducer, it’s just a little too rare to reliably debug for now, unfortunately). and i’ve started using it and putting together a list of followups. but it runs, standalone, and you can write and execute code. (definitely needs a more feature-full editor, tho.)

as i’ve said before, i used LLM assistance very extensively on this (this was in part a way to practice agentic development). i’m not an embedded engineer, so i’d welcome feedback and pull requests and issues.


#20

Brilliant work!

Any chance of a photo?