
Tiny Lisp Computer - jabits
http://www.technoblogy.com/show?1GX1
======
Lerc
uLisp is cool (code is a bit scary in places though),

I'm working on a virtual game console which uses an AVR.

I added some simple drawing functions.

[http://fingswotidun.com/cruft/lisptri.gif](http://fingswotidun.com/cruft/lisptri.gif)

The emulator is at
[http://fingswotidun.com/avr/](http://fingswotidun.com/avr/) but it's very
alpha. If you have a small screen you can't even click on the run button
because of an old debugging div is sitting on top of it.

~~~
eriknstr
I would like to read a blog post about your virtual game console if you have
or ever write one.

~~~
Lerc
I have one from the very early days.

[http://blag.fingswotidun.com/2015/09/8-bit-
machine.html](http://blag.fingswotidun.com/2015/09/8-bit-machine.html)

I've been planning on an update talking about Getting C programs running on it
then building avr BASIC and Lisp for run time languages.

Probably far more likely to do updates given someone has actually shown
interest in reading them. I kind of assumed My blog posts went into a void.

It's also on github
[https://github.com/Lerc/kwak-8](https://github.com/Lerc/kwak-8)

------
randrews
Huh. I thought about doing this, figured it would be impossible / pointless,
and that (apparently wrong) assumption led me on a year-long journey:

The core problem, I thought, would be that AVRs have very very little memory.
316 Lisp cells sounds about right. I figured, well that's pointless. How can I
do better?

I wasn't able to find a microcontroller that you can attach external memory to
(without cheating and using something like an SPI RAM chip, although that's
super easy). So I ended up figuring out how to build a real computer instead,
around a Z80, with 64k total address space. The one I'm working on now has 32k
RAM (still not great for Lisp) but you can divide up the address space between
RAM and ROM however you want, so I'm planning for the next version to have the
whole thing be RAM and use an AVR to "boot" it by loading code into RAM from
an SD card.

~~~
mikepavone
Some of the devices in the Mega AVR line support external memory. The
ATmega640 is an example. Generally you'll only find it on higher pin-count
devices which aren't available in DIP packages. If you need something that's a
bit easier to work with, the Teensy 2.0++ is an option.

As for your Z80 computer, another option would be to add some simple bank-
switching hardware to allow you to boot from ROM. Probably more work and less
flexible than just using an AVR for boot though.

~~~
randrews
I'm fine working with surface-mount stuff, I can solder it by hand, it's not
actually as hard as it looks. Bank switching seems like a pain to manage
though.

I wish I had learned this stuff in school. I majored in CS, and we didn't go
any lower level than C++.

------
analog31
Nice work. Now you can make a programmable pocket calculator, that's
programmed in Lisp!

------
eriknstr
The article links to
[http://www.technoblogy.com/list?1GLV](http://www.technoblogy.com/list?1GLV)
calling it the full code listing for this Tiny Lisp Computer, however, that
link leads to code for a ATtiny841 "I2C Display Module" which is from the
"Make your own I2C peripherals" blog post at
[http://www.technoblogy.com/show?1G29](http://www.technoblogy.com/show?1G29).
Hope the author sees this so he can change the link to be the correct one.

~~~
eriknstr
I notified the author about it on the uLisp forums. He has now updated the
link.

------
Annatar
In my opinion, this is among the coolest / revolutionary computer products
that I have seen in the last 30 years of my usage of computers. It is also
great to see that LISP is gaining more and more popularity as people realize
the advantages of the stateless, reentrant, idempotent functional programming
paradigm.

~~~
ballooney
I don't mean to sound snarky in the least, genuinely curious, but haven't a
large proportion of tinkerers, especially with an EE bent, tried to put a
simple lisp interpreter on some limited hardware at some point in their lives?
I certainly know that a bunch of people learning FPGA programming in a user
group i once belonged to all tried to put a lisp machine on one after working
through the last chapter of SICP, and there's that lovely article about lisp
interpreters running on old JPL probes back in the day. What about this makes
it revolutionary?

~~~
pjc50
Of course it's not revolutionary. Lisp is the past technology of the future.
And indeed lots of people have done things like this, with Lisp or Forth or
Basic or microPython or Lua.

I believe a very early Raspberry Pi prototype was an Atmel chip that ran a Lua
interpreter with bit-banged VGA display. It was _extremely_ cheap but
ultimately deemed not capable enough.

------
msl
Another option for running a lisp (like language) on a small package is esp-
lisp [1] running on ESP8622. The ESP8622 has a 32 bit processor running quite
fast, and comes with 64K of RAM, so it's clearly not as challenging a platform
to run lisp on as the Atmega used here. Its just a software project, though,
and leaves the hardware part for others to design.

[1] [https://github.com/yesco/esp-lisp](https://github.com/yesco/esp-lisp)

------
gcb0
it's basically a uLisp shell on Arduino?

it will be shuned by the Haskell elite unless you need a monad to toggle the
led, since it's intrinsically a non functional side effect :)

~~~
na85
>it will be shuned by the Haskell elite

Seems like a feature, not a bug :^)

