[Z-machine] What has been added/changed since Infocom?

As we’re trying to make sure PunyInform games run well on Infocom’s original interpreters for 8-bit computers, we run into some sursprises where those terps don’t adhere to the Z-machine standard.

Is there an easy way to list exactly what parts of the Z-machine standard one can not expect Infocom’s interpreters to follow?

I’ll give two examples:

According to the standard, it’s legal to call a routine with more arguments than the routine has local variables, and the extra arguments will just be thrown away. In many Infocom interpreters, on quite different platforms, extra arguments will instead change the value of local variables in the current routine, leading to all sorts of trouble.

According to the standard, output stream 3 (printing to memory instead of the scree) is supported in v3. In many Infocom interpreters, this doesn’t work at all - the text appears on screen and not in memory.


The standard itself spells out what features are extensions, but post-Infocom extensions are not likely the issue here.

The real problem is that Infocom’s interpreters were not always consistent, so behavior does vary across versions and platforms. The standard itself is a compromise - an amalgam of all the versions and interpreters presented in such a way that all of Infocom’s games will run on a standard interpreter, not the other way around. Getting modern standard games running on Infocom interpreters is a different problem altogether, and one where inconsistencies will exist.


It would be interesting to collect information on all of Infocom’s interpreters across the years for each and every platform with the goal of making a comprehensive report for each with regard to each portion of the standard.

That would be a herculean task though.


One can easily start small. Make a list of all known terps and all known deviations from the standard. Just add the information you have (Terp X has deviation Y, Terp Z lacks deviation Y). Quite soon, one or more people will take it upon themselves to fill in the blanks, I’m sure.