MOV is Turing-complete (2013) [pdf]
drwho.virtadpt.net
drwho.virtadpt.net
Apple didn't make an authoring tool for this feature, but another company did: “LiveStage” by Totally Hip.
As I mentioned, QuickTime Movies were to be the file format for HyperCard 3.0 stacks, with QuickTime the HyperCard 3.0 runtime. The QuickTime team demonstrated it at WWDC in 1996.
> Apple didn't make an authoring tool for this feature, but another company did: “LiveStage” by Totally Hip.
The two most Flash-like tools for authoring QuickTime's interactivity capabilities were LiveStage and Electrifier Pro[1]. Additionally, several other tools (like Adobe GoLive and Terran Cleaner) supported simpler forms of interactivity. I was in Apple evangelism/developer relations then, so I was the person working with QuickTime developers on the Apple side.
Chris Domas' movfuscator: https://github.com/xoreaxeaxeax/movfuscator
Presentation: https://www.youtube.com/watch?v=R7EEoWg6Ekk
Smart hire on their part, but his presentations are legendary to me!
"The inspiration for the compiler is the paper "mov is Turing-complete", by Stephen Dolan."
2013: https://news.ycombinator.com/item?id=6309631
(Links are for the curious. Reposts are fine after a year or so: https://news.ycombinator.com/newsfaq.html)
If I recall correctly tom7 had a cute trick to get looping behavior in his ASCII-only compiler for 16-bit Intel (http://tom7.org/abc/) which was to make the program 64KB exactly, such that the program counter just loops around at the end. I suppose that’s another option to get _pure_ mov-only code.
MOV -(PC), -(PC)
This is a 1-word self-replicating program that (when run from the topmost RAM address) will clobber entire RAM by copying itself all over it.[1] https://en.wikipedia.org/wiki/PDP-11_architecture#Addressing...
If X and Y are equal, then you would have written first 0 and then 1 to the same address, so the final read would give you 1.
If X and Y are different, then you would read back the 0 you wrote to address X.
Now, how would you do greater than / less than comparisons?
Probably a more clever trick out there though.
Put a guard value in address X. Write not-guard value to Y. Read X. If the value you just read wasn't the guard value, then Y was the same as X.