11 comments

[ 3.2 ms ] story [ 32.8 ms ] thread
This is awesome to see. There's been a lot of articles about zork lately, so I started writing my own interpreter, just to see what all the fuss is about. It's a pretty interesting system. I'm currently trying to step/debug through zork too see how they implemented the parsing, game state, and other such things, and it is really quite interesting.

I've considered trying to do a hardware implementation, but concluded it is beyond my skill. Some things like user input can be complicated. It is the interpreter's job to split the input on a program-defined set of delimiters, look up each token in a dictionary provided by the program, and copy a variable number of specified values it finds base on that info into other locations. That's really complicated for a single instruction, and makes it pretty apparent to me that their target from the beginning was interpreters, not any kind of special hardware.

Nevertheless, its an awesome project, and a really fun thought experiment. I'd love to see a physical version of something like this from 74xx chips.

I believe the hardware version traps to the OS for the aread instruction which then executes a bunch of low-level instructions to do IO and parsing.

You could start by making a CPU that traps to the OS for every single instruction (except for some minimal core), and then incrementally implement hardware versions to speed up execution.

> I'm currently trying to step/debug through zork too see how they implemented the parsing, game state, and other such things, and it is really quite interesting.

FYI: Allen Garvin has a set of tools to generate annotated disassemblies of many of Infocom's games -- not just Zork I:

https://github.com/allengarvin/reform-conf

> Save/Restore isn't currently supported (as my hardware hasn't any storage) and is the only notable omission.

That's an awfully notable omission.

Really cool project, still.

Is there an overview of the evolution of the Z-Machine through the years—what features were added and how the architecture changed in each version, and what these changes allowed that was previously difficult?

It'd also be interesting to see similar "release notes" for proprietary game VMs, like the runtimes of Game Maker Studio or RPG Maker—though these would probably have to be the result of reverse-engineering + wild-ass guessing.

Interestingly, the original developer of Game Maker (back when it was still called that) had a page with history of how it developed up to about version 4.0 or something. Wonder if it's still on the archive anywhere
ScummVM may interest you, although I don't know if the source/developer docs are laid out to expose the VMs' evolution over time. It implements the LucasArts and Sierra VMs, supporting games from the C64/Apple II era all the way through Win32.