Closed athornton closed 5 years ago
The ZIL toolchain for TOPS-20, including ZIP, was written in MDL. The PDP-10 group has done quite a bit of work on resurrecting MDL from fragmentary sources over the last couple of years; see Make runnable Zork for progress.
@larsbrinkhoff is currently looking at this 1981 ZIL toolchain source, which includes an early version of the ZIP interpreter. There's some internal evidence that it ran both on TOPS-20 and ITS at one point.
Many points:
There is now a working Frotz for Tops-20 (dumb interface only). Follow the github links above. Praxix,z5 behaves identically on it and x86_64. It plays at least the first couple dozen moves of Zork 1, Trinity, Curses r10 (z3), Curses (z5), and Jigsaw (z8); I would be surprised if it didn't work on any Z-machine 1.0-compliant (or earlier) zcode story file.
This is clearly an issue that's larger than just Zork 1, but it's the obvious place to start.
I'm trying to get a generic Z-Machine interpreter running on a PDP-10, so that we can once again play the games where they're developed.
My work so far is at https://github.com/athornton/gnusto-frotz-tops20 , and it pulls from https://github.com/athornton/tops20-frotz ; the "unix-orig" branch there is the "dumb-2.32r1" branch of https://gitlab.com/DavidGriffith/frotz. I'm changing that in the "unix" branch, and then running gnusto-frotz-tops20 over it to mangle the symbols so that the PDP-10 linker can cope with it. That's the "master" branch.
I'm building the PDP-version under TOPS-20, using the "kcc" compiler that is part of the "pandas" distribution (I got mine from http://panda.trailing-edge.com/). Syntactically the sources need mangling so that all symbols linked externally are 6 characters or less and case-insensitive. The rest of the problem is that
char
is 9 bits, andshort
18 bits, on TOPS-20, and Frotz is assuming 8/16. That part, I'm still working through.The reasons for this particular combo of tools and versions are: that release of Frotz was back before it required C99, and kcc implements a pretty complete ANSI C so I didn't need to screw around finding a way to run
unprotoize
in a modern environment, and I don't know much about TOPS-20, so starting with a prebuilt distribution was a good idea.All of which is a really long-winded way of saying: there obviously was a DECSystem-20 interpreter for the Z-machine at one point; this appears in
frotz.h
:#define INTERP_DEC_20 1
And indeed in the Z-machine standard (https://www.inform-fiction.org/zmachine/standards/z1point1/) we find (https://www.inform-fiction.org/zmachine/standards/z1point1/sect11.html):
My guess is that this interpreter may appear somewhere on the Infocom Drive. If we're very lucky, its source code (no idea what language it's in) will be there too.
Now, I think we actually want to use Frotz rather than the Infocom interpreter even if we locate it, because it will run all existing Infocom games, plus all the Z-machine games from the community through the 90s and 00s (more recently everyone's moved to the
glulx
format which is 32- rather than 16- bit). I suspect, based on the Infocom development strategy that there isn't a single generic DEC-20 interpreter but rather a bunch of slightly hacked game-specific interpreters (although maybe not! I remember how pleasantly surprised I was when I inserted the Zork disk after getting the prompt from a more recent Apple II Infocom game I had as a kid, and not only did Zork I run, it ran in mixed case even though the terp that came with Zork I was uppercase-only).But it sure would be handy to see how the Implementors handled emulating a 16-bit machine on a 36-bit one, and I suspect it would save me some time while poking around in the guts of Frotz.
So, that brings me to the real question: can you make an image of the Infocom Drive available somewhere, so I can grab it, mount it to my emulated PDP-10, and poke around looking for the Z-machine interpreter sources? (Or if it's already in this collection somewhere, point me to where it is?)