Download and install uLisp
Release 4.6
Here's a summary of the new and updated features for the AVR, ARM, ESP, and RISCV versions of uLisp Release 4.6:
- A *features* variable that returns a list of keywords representing the capabilities of the version of uLisp.
For example:
> *features* (:floating-point :arrays :documentation :machine-code :error-handling :wi-fi :gfx)
For example, to check if your version has floating point you can do:
(member :floating-point *features*)
- A copy-list function that returns a copy of a list.
- In addition to the dolist and dotimes iteration constructs, uLisp 4.6 now includes the more flexible do and do* that allow an unlimited number of loop variables, each with an optional initial value and optional step-form, and an end test.
- uLisp 4.6 now provides three additional map functions: mapcon, mapl, and maplist. These complete the matrix of six map functions in Common Lisp, for flexibility with the way you can map a function over one or more lists of elements. See Processing items in a list.
- uLisp 4.6 now includes three additional string comparison functions: string/=, string<=, and string>=.
- A new :test keyword parameter allows you to specify an alternative test function for assoc, member, and search. For example you can do:
> (assoc "three" '(("one" . "eins") ("two" . "zwei") ("three" . "drei")) :test #'string=) ("three" . "drei")
- You can now use setf to modify a character in a string. For example:
> (let ((s "abc")) (setf (char s 1) #\r) s) "arc"
- User-defined keywords are now recognised as keywords that evaluate to themselves,:
> :fred :fred
- A number of minor bug fixes and improvements have been incorporated; thanks to @dragoncoder047 for many of these.
All of these improvements have been incorporated without having an impact of the performance of uLisp, or the amount of workspace available on each platform.
The AVR-Nano version of uLisp has also been updated to incorporate the bug fixes, but it was not possible to fit the new features in the 32Kbytes available on the platforms it supports.
Downloading uLisp
There are now five actively maintained versions of uLisp. Download the correct one for your platform:
AVR version
Download the AVR version of uLisp for AVR platforms with at least 64 Kbytes of program memory, including the Arduino Mega 2560, ATmega1284, and AVR DA/DB-series platforms:
AVR Release 4.6 - 13th June 2024
or get it from GitHub at https://github.com/technoblogy/ulisp.
AVR-Nano version
Download the AVR-Nano version for AVR platforms with 32 or 48 Kbytes of program memory, such as the Arduino Uno, Arduino Nano, and Arduino Nano Every:
AVR-Nano Release 4.6 - 13th June 2024
or get it from GitHub at https://github.com/technoblogy/ulisp.
ARM version
The ARM version of uLisp supports the Arduino Zero, Arduino MKRZero, Adafruit M0 boards, Adafruit M4 boards, Adafruit PyBadge/PyGamer, Adafruit nRF52840 boards, Adafruit Clue, BBC Micro Bit, Calliope mini, MAX32620FTHR, Teensy 4.0/4.1, RP2040-based boards, and Arduino Uno R4 boards:
ARM Release 4.6c - 6th October 2024
or get it from GitHub at https://github.com/technoblogy/ulisp-arm.
Release 4.6c adds support for the Raspberry Pi Pico 2, based on the RP2350 processor.
ESP version
Download the latest ESP version of uLisp for the ESP32 platforms here:
ESP Release 4.6d - 25th August 2024
or get it from GitHub at https://github.com/technoblogy/ulisp-esp.
Release 4.6c added support for PSRAM available on many ESP32 boards, allowing you to run larger Lisp programs, handle massive arrays, or process large text files.
Release 4.6 drops support for the ESP8266. Please get in touch via the forum if you still need support for this platform.
RISC-V version
Download the latest RISC-V version of uLisp for the Sipeed Maixduino, MAiX One Dock, and MAiX BiT boards here:
RISC-V Release 4.6a - 2nd August 2024
or get it from GitHub at https://github.com/technoblogy/ulisp-riscv.
Release 4.6a adds support for the full amount of RAM available on MAiX boards.
Commented versions
Commented versions are available from the above GitHub links which are identical to the above source files, but include comments to explain the C functions.
Installing uLisp
The download is a single text file. To compile it in the Arduino IDE either save it as a text file and rename it to a .cpp file, or copy and paste the text into a new empty project file. You can download the latest Arduino IDE from arduino.cc.
Select the correct Board option for your platform on the Tools menu, select the USB port from the Port menu, and upload uLisp. You should then be able to select Serial Monitor from the Tools menu, and interact with uLisp as described in Using uLisp.
The following pages give specific installation instructions for particular platforms:
BBC Micro:bit and Calliope Mini
If you're using uLisp with the Arduino IDE on Debian or OpenBSD see these threads on GitHub: https://github.com/technoblogy/ulisp/pull/2 and https://github.com/technoblogy/ulisp/pull/22.
Note that saved images are not generally compatible between different releases of uLisp.
Compile options
The uLisp sources provide the following compile options:
Option | Default | Description |
checkoverflow * | enabled | Generates an error if underflow/overflow occurs in arithmetic operations. |
resetautorun | disabled | Loads, and optionally runs, an image using load-image on reset. |
printfreespace | enabled | Prints the number of free objects before the uLisp prompt. |
printgcs | disabled | Prints the amount of space reclaimed after each garbage collection. |
sdcardsupport | disabled | Provides SD card support using with-sd-card. |
gfxsupport ** | disabled | Provides graphics extensions for use with a suitable display. |
lisplibrary | disabled | Evaluates the Lisp definitions provided in the Lisp Library on reset. |
assemblerlist *** | enabled | Generates an assembler listing from defcode. |
lineeditor | disabled | Provides a line editor for use when using uLisp from a terminal. |
vt100 | disabled | Provides parenthesis matching on VT100-compatible terminals. |
extensions **** | disabled | Includes Lisp functions defined in a separate extensions file. |
* Only applicable to the integer-only versions: currently AVR and AVR-Nano.
** Only applicable to the versions with graphics extensions; currently ARM, ESP, and RISC-V.
*** Only applicable to versions with defcode; currently ARM, RISC-V, and AVR.
**** Not applicable to the AVR-Nano version.
Other platforms
These versions are also available, but are not currently up to date with the newer features:
MSP430 version
Download the version of uLisp for the Energia MSP430 platforms here:
MSP430 Release 2.7c - 20th June 2019
or get it from GitHub at https://github.com/technoblogy/ulisp-msp430.
STM32 version
Download the STM32 version of uLisp for the Maple Mini and Blue Pill platforms here:
STM32 Release 3.0b - 11th January 2020
or get it from GitHub at https://github.com/technoblogy/ulisp-stm32.
Older releases
See Older releases.
Test suites
The following files contains test suites I use for testing each release of uLisp. You may find these useful if you are porting uLisp to another platform:
Test suite - 8/16-bit version (AVR uLisp)
Test suite - 32-bit version (ARM, ESP, and RISC-V uLisp)
Test suite - Floating point (ARM, ESP, and RISC-V uLisp)