historicalsource/zork1

Bringing Zork home: is the Infocom Drive image available?

athornton opened this issue · 3 comments

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, and short 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):

11.1.3
Infocom used the interpreter numbers:

   1   DECSystem-20     5   Atari ST           9   Apple IIc
   2   Apple IIe        6   IBM PC            10   Apple IIgs
   3   Macintosh        7   Commodore 128     11   Tandy Color
   4   Amiga            8   Commodore 64
(The DECSystem-20 was Infocom's own in-house mainframe.) 

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?)

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:

  • It's unlikely someone will provide the entire Infocom drive.
  • It's not a TOPS-20 disk image, but files from a Sun server.
  • I looked at the ZIL toolchain but concluded some MDL parts are still missing for it to be run as is.
  • I have looked more seriously at a ZAP assembler written in MIDAS.
  • My goal would be getting MDL Zork to run. The ZIL stuff is quite tangential.
  • I agree Frotz may be a more featureful Z-code interpreter anyway.

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.