Dusting off the Stacks

Ancient/Modern Development on Modern/Ancient machines


Getting into the nitty gritty of what technology we used, and what we learned about programming for older systems. Figuring out the best way to emulate, code, compile, upload, and run new software on old and new hardware and operating systems, was both a technical and research challenge. This talk walks through some of the process and learning from a development and research perspective.


I like to connect random inputs and outputs to see what people will do with them. I often take virtual streams and provide them physical facilities to exaggerate their impact on our lives. I am equally  comfortable coding in C, C++, Rust, Javascript, Coffeescript, Python,  Piet, Basic, Hypercard, and Bash. I painted a simple echo program and  could very easily see myself holed up for the winter just with canvas  and wine.


So, when Kimon messaged me about the project, I kinda thought he was crazy.

And, he didn’t know it at the time, but ... I had no idea if I could program even half of the devices he was asking about.

( In fact, I was pretty sure there was no way I’d be able to write something for the Palm Pilot )

But the thought of being paid to program something in hypercard, just made me giddy with excitement. So I responded with an ’oh absolutely we can get all of this done, no problem’. So I must  apologize to Kimon for that half-truth, and thank him for trusting me enough to follow through with it.

If he had asked me the same thing just three months earlier, I don’t think I would have even tried.

What happened in those three months? Well, mainly hackerschool. Without going into too much details, while in hackerschool I learned to a bit more fearless, and also how to ask for help.

It also helped that the timeline was, well, at Museum-speed. Pretty fast for museum speed, but that still meant we were in first gear. Maybe a 4-cylinder car instead of a scooter, but that left plenty of time to come up with alternate suggestions on how we could go ahead with only some native apps and still execute on his vision for the focus gallery. Cuz there was still no way 5 applications, on 5 platforms (3 of them completely obsolete), could be designed, programmed, tested, installed, and survive the first 15 minutes of exhibition.

The thing was...it looked FUN.

And maybe I was feeling cocky because I messed with an NES while working for Don Undeen in the Media Lab at The Met. 

And with a ton of help from everyone, over the next couple of months, we actually managed to build everything I thought was impossible at the beginning.


Well, there’s a few pieces of what needed to happen - I’m going to skip over a lot of the awesome work we did with all the students in his class and focus on two thing: the technical setup and the research aspect. And I am mostly going to focus on the three earliest machines - the Commodore 64, the Mac Plus, and the Palm Pilot. If you want to talk about programming on the iPad and kinect - which has some pretty non-standard and interesting tech stacks, feel free to ask during the QA or afterwards.


In order to develop comfortably, I needed a repeatable,  understandable way to work off my laptop for all these systems. The  general idea was to use emulators to do local development, to understand  the languages and limitations and then to transfer them to real  hardware for testing. What did this require?

Emulators Emulators Emulators

vice - commodore 64 

mini vmac - which on linux had a drawing issue. It’s ok though - its open source. Except the source is distributed as a mini vmac application archive. Which means you need to inception your mini vmac source to modify it. Also, its not under version control. I managed to rewrite a line to fix the draw routine, and now could comfortably run hypercard on mini vmac. 

phem - the best emulator is actually for....android! its great!

Software Software Software

Some software is on archive.org. Some are not. For the c64, it was easy to grab software. For the Mac Plus, it was considerably harder. Apple USED TO (as in, up to a month into the project) host software on... http://apple.com/oldsoftware but then they took that site down without warning. Also, in typical Apple fashion, they have been agressively pruning all mirrors and copies of their software off http/ftp servers on the web. So, whats someone to do?

Join IRC :)

Even then, there was some piece that just couldn’t be found - like hypercard 2.1. So after buying it on ebay, popping it into my computer and realizing WTF apple was the only company to use variable speed hard drives instead of constant speed hard drives meant I was SoL...until I found the Kyroflux.

Did I mention how it just takes one awesome/obsessive person to preserve this for generations to come? The Kyroflux is a custom floppy disk controller that can do what no other floppy drive gives you - raw magnetic values on the floppy for archival. And it can even convert sectors for you. Its a hardware emulator for old floppy drives. I had no idea if there was a bunch of format conversions - but happily after messing around with options I just dragged a dumped hypercard rom into my emulator and... IT WORKED!

// customize mini vmac here

Hardware Hardware Hardware

SD2IEC - sd card - made with recycled c64 case plastic!

Came with a full sd card of games and software which we totally, definitely, reformatted. Theres no way you could hit reset on the c64, type load fb64,8, and navigate your way to find a terrifying game called "monster dance" where you blow the limbs of a monster to transform him into a xanadu-disco-dancer.

// mac sd card reader here

People People People

There  was also an artist I found whose work was mainly drawn in hypercard,  but he couldn’t find the exact setup he used 5 years ago to make the  art. It is super apparant that digital bit rot is real. And that you  need people who actively revisit old hardware and software to make sure  it can still run.

Eventually I found a copy of Hypercard 2.1 on eBay. At this point I’d spent more money than I was comfortable on various versions, all with limitations that wouldn’t fit the project, and this version was about 5x as expensive as any of the others, because it was new in box. I had to call a dude from Tennesee to check the documentation to see if it was comptable with System 6. So his partner went to the storeroom and read the box to see if it was compatable. It felt kinda irresponsible to break the shrink wrap, but I told myself it would be donated to the Computer History Museum or the Internet Archive once I was done with it.

First, when trying to get a dev environment for Hypercard, I called someone who ran a magazine in the 90s about hypercard. Turns out its very easy to find email and phone numbers, but he didn’t have a digital copy or a hard copy I could be sent of the program, so I was out of luck. Thankfully the website was still online though - nothing is worse than a 404 not found.

Stuff I learned

The older the software, the EASIER it was to understand. There wasn’t much it could do. The Palm Pilot SDK, was a dozen .c and .h files. Compared to say, the iPhone (which has tens of thousands of .c files, many of which you are not allowed to view), or even a modern javascript stack - the number of possible function calls was TINY.

Each system had its own metaphors and terminology to learn. This is nothing new, but it was refreshing to see what ideas have survived - like hypertalk’s event system which I can see mirrored in the way clicks bubble up in javascript. The design of older languages, they had the author’s stamp everywhere. This is exactly the opposite of what is recommended at places like google, where no one author should be identifiable for any line of code.

Many crucial pieces of software and hardware, are maintained by ONE person. Small communities form around these people (often on IRC and forums) and are often incredibly patient and welcoming to anyone who is clear about thier intentions for learning / working with old hardware.

Research is mostly about finding the right keywords, by reading things you are not sure why you are reading. Once these keywords are found, finding more information becomes 10x easier. This is common when learning a new programming language, technique, or framework.

Old documentation was sometimes written with way more prose, and was enjoyable to read on the subway. Hypercard 2.1 was way bigger than I thought it should be because the box came with 7 books of documentation - a reference, a quick start, a tutorial, etc... This was a different style of reading and learning than I was used to - normally I look at a lot of examples, a lot of references. This was more about spending time on the subway reading a book, absorbing it, and maybe when writing, some of the ideas would fit naturally. Reading without searching.

Version hell was 1000x worse in the old days than today - Hypercard 2.0 often was just the player, 1.x didn’t have support for modifying menus, and anything over 2.1 required system 7, so finding Hypercard 2.1 - there was only one person in the world who had a copy. They were in Tennessee and I had to call them to double check that the system requirements printed on the side of the box specifically noted it would run on system 6 because that information was NOT on the internet! And that doesn’t sound so bad until you realize that the only way to find out if a file was the correct version, like say, SIT archive 2.1 instead of SIT 1.0, was to just try opening it up, and letting the program crash. So you aren’t sure if the file was corrupt or just made in a different piece of software.

Sandboxing ah ha ha ha. You could break your machine very very easily - locking yourself out permanently. Since you could control everything. But then, you learned novel techniques for un-breaking your machine, since you had full control over the bytes running. For example, you could write a handler for menu selection in hypertalk. And if you forgot to pass the message, good luck even opening the script editor! This could be unbroken, by writing a more global script in another stack, to always enable a keyboard shortcut to immediately run a command, like one that would then open up the script editor, or change userLevel. Still I had to learn the hard way.

Technical Achievements

Calling people who ran hobbyist magazines that are 10years + defunct 

Getting docker to run a version of linux from 1995 just to compile PalmOS apps 

How many lines of code the entire Palm OS SDK is How to setup a modern development environment for any of these systems (and why you’d want to)

...or are more interested in the art / ux history such as ...

How smaller the divide between consumer and producer used to be 

Why words like "natural" and "intuitive" to describe interfaces are complete bullshit 

What ideas survived hypertalk and became a part of applescript, ecmascript, actionscript, and modern javascript

 Just how much we are re-inventing the wheel