JavaScript got unexpectedly inconceivably stupidly fast. That code is not at all optimized (except that it tries to use efficient algorithms), and is very data driven and dynamically parametrizable with dictionaries, yet somehow it still runs really fast! JavaScript optimization is the new moon shot.

It can emulate the CAM6 hardware, which uses look-up tables pre-computed from FORTH (now JavaScript) functions, which don't need to be optimized because they're run once over all possible inputs to generate the table, instead of for every cell of every frame.

The trade-offs of hardware and software have changed a lot, and it's more than fast enough, so I optimized for readability and flexibility. It can run CAM6-compatible (but limited) lookup table based rules (for von Neumann, Moore and Margolus neighborhoods), and also run arbitrarily complex and multi-layered rules in JavaScript, that compute the cell value directly.

https://en.wikipedia.org/wiki/Von_Neumann_neighborhood

https://en.wikipedia.org/wiki/Moore_neighborhood

https://en.wikipedia.org/wiki/Block_cellular_automaton

The rules can be parameterized by dictionaries (including stuff like like simple numeric parameters, or arrays of convolution kernels, or additional lookup tables) that you can tweak while it's running.

(The CAM6 lookup table isn't related to hashlife -- it's simply indexed by concatenating all the bits of the neighborhood together to make a binary number indexing into the table of next states -- that's what the CAM6 hardware did directly at 60 frames a second, on a 256x256 matrix, of 8 bits per cell.)

https://en.wikipedia.org/wiki/Cam-6

CAM-6 Forth source code:

http://www.donhopkins.com/home/code/tomt-cam-forth-scr.txt

http://www.donhopkins.com/home/code/tomt-users-forth-scr.txt

Rudy Rucker writes about his CAM-6 in the CelLab manual:

http://www.fourmilab.ch/cellab/manual/chap5.html

Computer science is still so new that many of the people at the cutting edge have come from other fields. Though Toffoli holds degrees in physics and computer science, Bennett's Ph.D. is in physical chemistry. And twenty-nine year old Margolus is still a graduate student in physics, his dissertation delayed by the work of inventing, with Toffoli, the CAM-6 Cellular Automaton Machine.

After watching the CAM in operation at Margolus's office, I am sure the thing will be a hit. Just as the Moog synthesizer changed the sound of music, cellular automata will change the look of video.

I tell this to Toffoli and Margolus, and they look unconcerned. What they care most deeply about is science, about Edward Fredkin's vision of explaining the world in terms of cellular automata and information mechanics. Margolus talks about computer hackers, and how a successful program is called “a good hack.” As the unbelievably bizarre cellular automata images flash by on his screen, Margolus leans back in his chair and smiles slyly. And then he tells me his conception of the world we live in.

“The universe is a good hack.”

[...]

Margolus and Toffoli's CAM-6 board was finally coming into production around then, and I got the Department to order one. The company making the boards was Systems Concepts of San Francisco; I think they cost $1500. We put our order in, and I started phoning Systems Concepts up and asking them when I was going to get my board. By then I'd gotten a copy of Margolus and Toffoli's book, Cellular Automata Machines, and I was itching to start playing with the board. And still it didn't come. Finally I told System Concepts that SJSU was going to have to cancel the purchase order. The next week they sent the board. By now it was August, 1987.

The packaging of the board was kind of incredible. It came naked, all by itself, in a plastic bag in a small box of styrofoam peanuts. No cables, no software, no documentation. Just a three inch by twelve inch rectangle of plastic—actually two rectangles one on top of the other—completely covered with computer chips. There were two sockets at one end. I called Systems Concepts again, and they sent me a few pages of documentation. You were supposed to put a cable running your graphics card's output into the CAM-6 board, and then plug your monitor cable into the CAM-6's other socket. No, Systems Concepts didn't have any cables, they were waiting for a special kind of cable from Asia. So Steve Ware, one of the SJSU Math&CS Department techs, made me a cable. All I needed then was the software to drive the board, and as soon as I phoned Toffoli he sent me a copy.

Starting to write programs for the CAM-6 took a little bit of time because the language it uses is Forth. This is an offbeat computer language that uses reverse Polish notation. Once you get used to it, Forth is very clean and nice, but it makes you worry about things you shouldn't really have to worry about. But, hey, if I needed to know Forth to see cellular automata, then by God I'd know Forth. I picked it up fast and spent the next four or five months hacking the CAM-6.

The big turning point came in October, when I was invited to Hackers 3.0, the 1987 edition of the great annual Hackers' conference held at a camp near Saratoga, CA. I got invited thanks to James Blinn, a graphics wizard who also happens to be a fan of my science fiction books. As a relative novice to computing, I felt a little diffident showing up at Hackers, but everyone there was really nice. It was like, “Come on in! The more the merrier! We're having fun, yeeeeee-haw!”

I brought my AT along with the CAM-6 in it, and did demos all night long. People were blown away by the images, though not too many of them sounded like they were ready to a) cough up $1500, b) beg Systems Concepts for delivery, and c) learn Forth in order to use a CAM-6 themselves. A bunch of the hackers made me take the board out of my computer and let them look at it. Not knowing too much about hardware, I'd imagined all along that the CAM-6 had some special processors on it. But the hackers informed me that all it really had was a few latches and a lot of fast RAM memory chips.