I bought an Arduino GIGA board a couple of weeks ago with the aim of porting my Lisp interpreter, uLisp, to it. It's an attractive platform for uLisp, with plenty of RAM and a fast processor, and it would be one of the fastest and most fully-featured platforms for uLisp.
I have a version of uLisp running well (and fast) on the GIGA. However, there are a few features of uLisp I'm struggling to get working on the board, and I'm reluctant to release uLisp for the GIGA with only partial support.
I would therefore be really grateful for help in getting the following features working:
1. Saving/loading the Lisp workspace
On most other platforms uLisp allows you to save the entire Lisp workspace to non-volatile memory, so you can restore it at a later date and carry on working where you left off.
On other platforms this is supported either by writing it to an external DataFlash chip (Adafruit Express boards, Wio Terminal) or by writing it to flash using LittleFS (eg Teensy 4.0/4.1, RP2040, ESP32).
However, I haven't been able to get my DataFlash code to work on the GIGA; for more details see:
https://forum.arduino.cc/t/problems-using-the-nor-flash-for-storage/1135931
I also haven't had any success running LittleFS on the GIGA. The following post gives a short example that demonstrates the problem:
https://forum.arduino.cc/t/examples-please-for-littlefs/1136267/5
2. Programming in ARM assembler/machine code
uLisp allows you to create ARM machine-code programs and execute them in RAM. There's an ARM assembler (written in Lisp) that lets you write programs in assembler.
This is supported on all other ARM platforms. However, I haven't been able to get it to work on the GIGA.
The following post gives a short example that demonstrates the problem:
https://forum.arduino.cc/t/executing-code-in-ram-causes-mbedos-crash/1137643/3
3. Wireless extensions
On platforms that include Wi-Fi capabilities uLisp allows you to take advantage of them through a consistent Lisp interface.
However, I've had a problem getting some of my routines to work on the GIGA, so I currently only have partial Wi-Fi support.
One problem is that I can't use a global variable for an instance of WiFiClient
, which my code depends on:
https://forum.arduino.cc/t/call-to-server-available-fails-if-client-is-a-global-variable/1137604
Any help with these would be much appreciated!