Updating the Z-Machine Standard Documents

It’s probably because the first operand is always the number of the sound, which is because the use with just one operand (for beeps) was around first. And since the first operand is the sound number, well, it should be the number of the sound you’re trying to stop. But what if you just want to stop any sound that’s playing without keeping track?

The Standard, meanwhile, just tried to adapt to the separate music/sample channels situation, which was kinda forced on it by Blorb, and now you have the issue of, if music and a sample are both playing, what does “stop sound 0” even mean? Which sound do you stop?

That’s probably it.

Ah, but if you only ever play one sound at a time (ignoring 1.1 music), there is no need to keep track and stop 0 (or stop anything really) would be all you ever need, yet Infocom clearly employed both stop 0 and stop number. Infocom used zero as a wildcard to mean the most recently played sound, not all sounds. But again, if you only ever allow one at a time, there’s no need. So someone at Infocom clearly thought about multichannel sound. Adding a music channel in 1.1 just muddied the waters I think.

1 Like

Actually, looking at the Standard’s documentation on sound, using 0 as a sound number is poorly described. In section 9, it’s shown in the remarks with no explanation as to what it means, and in the opcode description, it’s only mentioned in a “clarification”. Indeed, the Standard states that the sound number must be 3 or greater if more than one operand is present.

The original 1.0 Standard didn’t mention using sound effect 0 at all, except in the example in the remarks. The “clarification” in section 15 is a result of me copying and pasting directly from the original 1.1 updates text file when trying to update the spec.

At the time, I was trying not to edit the text too much, but just find places to slot it in. Now, though, I think the explanation of what sound number 0 means should be edited into the main text a little better.

I remember this and I remember being surprised by 1.1’s interpretation of stop/unload all, because I’d already implemented it to behave like Infocom did and 1.1 required me to rewrite that.

I can think of a use case that just about makes sense where you’d want to stop a sound by number when there’s only one sound playing, which is:
One of either sound 3 or sound 4 may be playing. If sound 3 is playing, you want to stop it. If sound 4 is playing, you want it to continue.

I’ve no idea if Infocom’s interpreters actually allow for this. As for the difference between what Infocom meant by sound 0, and what the 1.1 spec declared it to mean, this is just down to having no access to Infocom’s documentation, no clear explanation in the Standard, and only a couple of uses in actual games to go off.

Part of the reasoning, probably, for sound 0 being “stop all sounds” is that originally, 1.1 proposed a much more complex update to the sound system, with multiple sample/music channels, which the interpreter kept track of. I can’t fully recall how it was supposed to work, only that I hated it, and it’s probably my fault it’s not in the final spec.

Nobody’s ever found it, as far as I know. Except for this:

(TRS-80 CoCo assembly. Background on finding it: Retro Tinker: Z Intepreter Source for CoCo Recovered )

Microsoft doesn’t seem to care about the Infocom source code. Someone should release the rest of the “Infocom Drive”.

No one knows what Microsoft cares about until they show up at your door. :wink:

When I say “nobody’s ever found it”, I’m including people who have looked through that drive data.

Let me refer you back to Jason Scott’s post from 2015: The Rest of the Infocom Cabinet « ASCII by Jason Scott

1 Like

I really wasn’t talknig about all the emails and stuff; just the code.

S provides the details of the header extension table, and is marked as ***, but in neither the 1.0 or the 1.1 specs does it specify which parts of the header extension table are new, and which were part of Infocom’s original design.

There may be other locations where a similar problem occurs, this seems largely due to the fact that the data is in a table.

S 9.4.2 is marked *** in 1.1, but not in 1.0. Most of the text is the same in both versions, and it is not clearly marked what is new in 1.1

In the github repository, sections 7.6.1,, and have two different versions each. Maybe I was trying to update them and never finished?

(I’m going through and making edits now, which is why I’m suddenly noticing all these issues. I’m posting them here mostly as a reminder to myself, but also partly to see if anyone else has input.)

Okay, I’ve updated the github repository with the changes I made this week. Most of this has been going through and adding internal links (which I’m still not done with), but I also

  • corrected the available z-machine versions in the header (1-8 instead of 1-6)
  • fixed the availability of output_stream 3 in the section 14 table to “3/4”
  • corrected the description of sound_effect to read “music and samples” instead of “music and effects”
  • fixed the read opcode’s operands to be “text-buffer” and “parse-buffer” in all parts of the spec
1 Like

A very important update: I plan to go through and change all the section references (where the document references another section) to use the § symbol (so § 1.1.3 instead of S 1.1.3). It was like this in the latex source, and I like it.


Copies exist. Just not publicly, apparently.

First I’ve heard of it.

I have the source of what is likely most of Infocom’s interpreters. Until you mentioned it, I had no idea it wasn’t publicly available.

1 Like