Leigh Klotz was the man who ported MIT Logo to the Apple ][ and then the Commodore 64. According to him “The Commodore 64 CPU 6510 has a bidirectional parallel port at location 0 and 1, taking up 2 of the 256 "page zero" locations, which are the only ones you can indirect through. When I ported MIT Logo from the Apple II, there were lots of places that dereferenced nil without checking, and those caused crashes. Commodore gave me a chip they fabbed in qty 12 yield that brought out the I/D decide status as a pin, and we used a Nicolet-Paratronica logic analyzer to feed the address and data bus to a Pet running a BASIC disassembler. I could then set a breakpoint in-circuit to see the 256 instructions prior to or after the errant memory access, so I could go put on guard code...”
I got it from Jamie Zawinski's weblog. Be forewarned. Following the link from Hacker News will lead to an unsavory image. Just copy & paste it, instead.
https://www.jwz.org/blog/2018/11/weird-machines/#comment-192...
http://www.dereferer.org/?https%3A%2F%2Fwww%2Ejwz%2Eorg%2Fbl...
<3
(Lots of useless moves happen while the pen is up)
http://imgur.com/gallery/7PmEM5p
It didn't take too long, the pen up movements were fine
It even comes with an option to optimize the paths to minimize pen travel for plotters :)
https://github.com/jncraton/connectiongrammar
The "API" is admittedly quite poor currently, as I just quickly hacked this together on top of NLTK, but I was able to put together some fun results.
One feature I'd like: A way to slow down the render so we can see the whole generation in slow-motion.
the async way doesn't seem to work inside the walk function, but the older (and uglier imo) way does
As an example here is the modified code for https://turtletoy.net/turtle/eed0f57234
// You can find the Turtle API reference here: https://turtletoy.net/syntax
Canvas.setpenopacity(1);
// Global code will be evaluated once.
const turtle = new Turtle();
turtle.penup();
turtle.goto(0,0);
turtle.pendown();
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function pausecomp(millis)
{
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < millis);
}
// The walk function will be called until it returns false.
function walk(i) {
turtle.forward(i);
turtle.right(150);
//await sleep(100); //await not valid inside the walk function
pausecomp(50)
return i < 200;
}
edit: implemented: https://turtletoy.net/turtle/e99ca811adIf only I could remember the name of it...
EDIT: soda constructor by sodaplay.
http://maciejmatyka.blogspot.com/2018/02/soda-constructor-re...
EDIT2: from that link, here is a playable open source recreation linked at the bottom
Of course Logo wasn't the most complex language ever but I remember being pretty pleased with myself having written a computer program on a bit of paper and it doing exactly what I'd visualised it to do.
Logo's turtle graphics aren't the most complex language ever, but underneath of it is a Lisp without the parentheses, which is quite powerful including list processing and recursion.
Edit: I meant directly from the site. I could do it from my desktop using python.
PS, this is awesome!
This line in particular stands out: const code = String(work).trim().split("{").slice(1).join("{").slice(0, - 1).trim().replace("/0/", _turtlevmapi).replace("/1/", strCode);
It looks like the author is injecting the turtle code written by the user into a "work" function that removes dangerous objects (XMLHttpRequest, WebSocket, etc).
Can someone with experience writing a VM in JS point to a good reference on the topic?
Click [Help] button to get an idea of how it works. It was heavily inspired by Structure Synth but written from scratch to work with CSS3 in a modern browser.
One feature that I wish existed was library import. Or community accepted set of extension modules. An easy way to call polar coordinates, Spirographs, matrix transforms, etc.
They developed their own declarative language for generating art.
Also reminds me of the Forth Haiku Salon: https://forthsalon.appspot.com/
But I also like the approach here of using Turtle as a way to introduce JavaScript syntax. :)