Arduino ATmega platforms
Download the latest version of uLisp for the Arduino ATmega platforms here:
uLisp ATmega Version 1.9 - 16th May 2017
or get it from GitHub at https://github.com/technoblogy/ulisp.
Energia MSP430 platforms
Download the latest version of uLisp for the Energia MSP430 platforms here:
uLisp MSP430 Version 1.9 - 16th May 2017
or get it from GitHub at https://github.com/technoblogy/ulisp-msp430.
Changes in Version 1.9
uLisp Version 1.9 adds a number of new features, including: support for characters and the character functions char, char-code, code-char, and characterp; additional string functions string<, string>, read-from-string, prin1-to-string, and princ-to-string; the additional I/O functions read-line, write-line, and write-string which support input/output via serial, SPI, and I2C where appropriate; and a sort function.
It also includes several bug fixes.
This download is a text file. To compile it in the Arduino or Energia 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.
Note that saved images are not generally compatible between different versions of uLisp.
uLisp Version 1.8 allows arbitrary symbol names on platforms with more than the minimum 2Kbytes of RAM.
It also supports the MSP430F5529 and MSP430FR5969 LaunchPad boards, using the Energia IDE.
uLisp ATmega Version 1.8 - 15th April 2017
uLisp MSP430 Version 1.8 - 15th April 2017
uLisp Version 1.7 adds the pretty printer function pprint, which allows you to print functions in a nicely formatted way, and a trace feature using trace and untrace, allowing you to trace the calls to and returns from up to three functions at a time.
It also fixes a long-standing bug which could give incorrect results when two functions using the same symbols called each other.
uLisp Version 1.7 - 27th March 2017
uLisp Version 1.6 adds the &rest keyword to defun and lambda to allow you to define a function with a variable number of arguments, and adds the string functions concatenate and read-line.
It also improves the efficiency of save-image.
uLisp Version 1.6 - 4th March 2017
uLisp Version 1.5 adds support for strings, allowing you to write programs that prompt the user for input, or manipulate strings. It includes the string functions subseq for extracting a substring from a string, string= for comparing strings, length for finding the length of a string, and stringp for testing for strings. It also includes several minor bug fixes.
1.5a fixes a problem affecting save-image/load-image.
uLisp Version 1.5a - 2nd March 2017
uLisp Version 1.4 adds a built-in program editor edit that lets you step through a function definition, editing it a bit at a time, using a set of simple single-key editing commands you type at the keyboard; see Using the program editor.
It also includes room, which returns the number of free Lisp cells remaining.
uLisp Version 1.4 - 18th October 2016
- Adds setf which allows you to modify lists in place, allowing you to use lists as index-addressible arrays, and use association lists for efficient data storage.
- The other in-place operations push, pop, incf, and decf have been extended in the same way.
- Fixes two bugs that affected append with null arguments, and with-spi.
uLisp Version 1.3 - 24th July 2016
- A simple, unified I2C and SPI interface using read-byte and write-byte to transmit data via the appropriate interface, and streams to identify which interface is being used. For more details see I2C and SPI serial interfaces.
- The bitwise logical operators logand, logior, logxor, lognot, logbitp, and the bitwise shift operator ash.
- 1.2a included a minor change that fixed a subtle problem affecting dolist.
uLisp Version 1.2a - 18th June 2016
- save-image and load-image allow you to save the uLisp image to EEPROM and reload it.
- #x, #o, and #b allow you to enter numbers in hexadecimal, octal, or binary respectively.
- note now supports the ATmega1284P.
uLisp Version 1.1 - 6th June 2016
uLisp Version 1.0 - 25th May 2016
The following file contains a test suite I use for testing each release of uLisp. You may find this useful if you are porting uLisp to another platform: