Z-machines for various 8-bit platforms

I’m in the process of writing my first text adventure and I’m wondering what z-machine interpreters are available on retro systems of the 80’s.

Platfom examples: Atari 8-bit, ADAM, Apple IIe, C64, etc.


A recent implementation for various Z80 based machines is Vezza (or its embedded version) – see also the forum threads (1, 2). Older Z80 ones include M4ZVM and M3ZVM (TRS-80) and ZXZVM (Amstrad/Spectrum).

It looks like the 6502 world is covered by Ozmoo.

Here’s an IFWiki query for the Z-code interpreters for 8-bit systems known to IFWiki (which might not be all of them).


Anything that had an Infocom interpreter plus a whole bunch that have come along since. It will depend on whether you’re compiling to z3 or z5. The z5 interpreters are preferable (if you have a choice) as these include UNDO.

If you write your game using the PunyInform library, then you can use the Puddle BuildTools to build disk images for the following platforms:

  • Acorn Electron
  • Amstrad CPC
  • Amstrad PCW
  • Apple II
  • Apple Macintosh (early models)
  • Atari 8-bit (400/800/XL/XE)
  • Atari ST
  • BBC
  • Commodore 64
  • Commodore 128
  • Commodore Amiga
  • Commodore Mega 65
  • Commodore PET
  • Commodore Plus 4
  • Commodore VIC-20
  • DEC Rainbow
  • Dragon 64
  • Kaypro
  • MS-DOS
  • MSX 1
  • MSX 2
  • Oric
  • Osborne 1
  • SAM Coupe
  • Spectrum +3
  • Spectrum Next
  • TI-99/4A
  • TRS-80 Color Computer
  • TRS-80 Model 3
  • TRS-80 Model 4
  • and a partridge in a pear tree

Thanks @JTN !
@TechCowboy The best reason to use one of these newer interpreters is that you’ll also get .z5 compatibility, which means a much richer experience for the player. Feel free to ask any questions :slight_smile: There’s also a toolchain (referred to above - Puddletools) which can help for multi-platform, but as of writing this now there’s some updates needed to get it to use the current interpreters across all platforms.


Just to clarify. The Puddle BuildTools are not limited to only PunyInform games. It can build all z-machine games from all compilers that output to that format (Zilf, Dialog and even Inform7 (probably a painful experience, though)). The important bit is that the game is small enough to be able to fit on the target platform.


A word of caution, if you’re using these old interpreters, do test your game on each platform you release your game on. I found that both the old single disk and later two disk Atari 8bit Infocom interpreters would not play my game, although it works fine on modern interpreters and Ozmoo. In retrospect I should have anticipated that. While it was possible to code round some of the issues, I was only able to get my game to work in the later two disk “G” interpreter.

For example, if you have class A and object B where B is of class A and a before routine exists in both A and B, then self is not set in A.Before() using either Atari interpreter. Or so it seems.

Also, although less important, the £ sign was not supported.

While there are bug lists for games online, I haven’t been able to find a list of known bugs for these vintage interpreters. If anyone has one, I’d be interested in seeing it.

Because of this, I chose to release my game only on platforms I’m familiar with and can test, albeit only under emulation.

As far as I know, OZMOO only exists for C64 and the BBC Micro families, it hasn’t been ported to the Atari.



Impressive list. The Coleco ADAM needs to be added :rofl:

Coleco Adam is totally on my to-do list, I just can’t find enough boot environment, emulator and documentation to make it run. I’ll put it to you this way… I made a custom interpreter to load Zork 1 (and some other smaller games) on the Spectrum 128k Tape (i.e. .TAP file).


Shawn beat me to it. The Infocom games all use CP/M when running on the Coleco Adam. Vezza supports CP/M on a large range of micros, so it’s probably just a case of sorting out the finer details to get it working on that machine. Shawn’s the expert in this area.


Check out the Fujinet for the ADAM. This open source project really makes it easy to develop on a lot of retro projects (Atari, Apple, ADAM, C64, etc.) https://fujinet.online/

Last but not least, I spotted your name on another forum. I also have an Agon Light version of Vezza so you can test your z-machine game there too! Vezza - Agon by sijnstra

1 Like

Yes, that’s right I also have an Agon. I will try this as well.

That’s an interesting observation. I didn’t know about this bug but I will need to check to verify. Actually I tested all the interpreters for conformity with Inform games, particularly PunyInform games, when I created the Puddle BuildTools. And based on my observations, I chose the ideal interpreter for every platform. So I know about the issues of various interpreters on different target systems, but I never really documented them in list. The interpreters the BuildTools use by standard are all safe to use, the late Atari 2-disk interpreter version G is the recommended one for Atari 8-bit. This is the interpreter that came with Plundered Hearts.

All interpreters had been tested with rather complex games, including my own Hibernated Director’s Cut.

One thing one should avoid is running games in debug mode on these old interpreters, as debug uses stuff like print to memory which really makes the interpreter break. So recommended is: turn debug mode off. Other than that you should be fine to compile the game to systems you’re not familiar with.

The only interpreter that seriously should be used with caution Infocom’s only Z5 interpreter for Amiga, it is the one that came with Sherlock. It has serious problems with the upper window and particularly the cursor position, which causes Puny games to not draw the Statusline correctly. You can work around this as well though by overriding the library’s DrawStatusLine routine with a more compatible one. There is an example in the Hibernated source if anyone is interested.


Just wondering… how much trouble would it be to have one of these tools target the P112 single board computer?


Having looked at the source to a few PunyInform games, I suspect I may have over implemented some things and pushed the interpreter over the edge. Unfortunately rewriting my game (again) to dial some of this back feels like work rather than fun, so that’s unlikely to happen.


The z5 standard (AKA Z-machine version 5) offers optional Undo support.

AFAIK, Ozmoo is the only 8-bit interpreter to support Undo, and even Ozmoo can only support it under certain circumstances.


What language/library do you aim to use?

1 Like

As it turns out, Vezza is already running on Atari via Fujinet - @8bit_era pointed this out as a possibility and then became my expert tester to get it all up and running.


Is an embedded CP/M box which yells at your computer over a serial connection “running on” that computer?

1 Like

I’m not sure if you’re referring to a P112, but a lot of people do use them that way.

1 Like