I did a few tests running ulisp on the new Teensy-4.0 board (I already wrote about it in this forum a few days ago, see: Suggested boards for running uLisp?)
Using the arm port of ulisp-2.8, it was easy to get ulisp compiled and running (link below).
Here are a few specifications of the Teensy-4.0 board (took from the PJRC Teensy-4.0 page):
- ARM Cortex-M7 at 600 MHz (can be changed from software) (NXP iMXRT1062 chip)
- 1024K RAM (512K is tightly coupled)
- 2048K Flash (64K reserved for recovery & EEPROM emulation)
- USB, I2S, I2C, SPI, SDIO, Serial
- Hardware floatingpoint unit, RTC
- input current: ~ 100mA (from homepage, I didn’t do own measurements)
and much more. See PJRC page for more details.
Here are some ulisp outputs:
uLisp 2.8 51199> (defun tak (x y z) (if (not (< y x)) z (tak (tak (1- x) y z) (tak (1- y) z x) (tak (1- z) x y)))) tak 51151> (tak 18 12 6) 7 51151> (for-millis () (tak 18 12 6)) 419 51151> (for-millis () (princ (tak 18 12 6))) 7 420 51151>
As you can see the board runs ulisp very fast ;-) (and I made no board-specific optimizations to ulisp!).
The board price is around $20 (I got mine from esp-tech (.de)).
I just did a few tests, some basic functions are untested (i2c, spi, probably many more) or missing (save-image, …), but I think most will work with small changes (defining pins, write to flash or eeprom etc.).
To use this board you’ll need the arduino-ide and the Teensyduino add-on. You can download my test-version of ulisp from my github page: https://github.com/Kaef/ulisp-teensy4, which uses a workspace-size of 48k lisp cells (for the output above I had a little bigger workspace-size).