EDIT: Before I finished writing this message, vaporware replied, mentioning a lot of good points too. Nevertheless I decided to keep the message I wrote but in a “rant” box. (The only thing is that vaporware write “which also exhibits bugs under standard interpreters” although in my opinion it should say “which also exhibits bugs under Standard interpreters”; this spelling error is a minor issue, however.)
Both games run fine under Infocom’s interpreters (Solter Solitaire originally didn’t, but that was due to a bug in their interpreter; I changed it simply so that I could test it although as it turned out the fix also made a better written program anyways; I am thinking this may be why Infocom consequently never tested this feature).
[rant]
Unfortunately, it was standardized in the wrong way.
Actually, Infocom’s interpreters have some defects too, such as, INC 0 and DEC 0 do not work (it is supposed to work; they documented it but the interpreter just sets the result to zero by mistake). Infocom’s documentation also contains a mistake, such as saying that the fwords table contains quad-pointers, even though they are actually word-pointers. But Z-Machine Standards Document also has defects, and so do most new interpreters. I believe that the subset of Z-machine that Aimfiz implements at all, is implemented correctly without defects (although it is possible I am wrong).
And yet there are still unknown things (although I have managed to figure out how font 2 is supposed to work; Aimfiz implements it (although this is an untested feature)). One is how the joystick functions works; this was never used, implemented, or documented. Another is how exactly the MIDI is supposed to work. Infocom’s interpreters implement it in different ways which are klugy and also very buggy and only work with the MIDI files that are included with the game (although they did also implement some things that weren’t used, such as omitting the status byte if it is the same as before), and I haven’t seen any Infocom’s documentation mentioning the format of these files. I have figured out some things about it; they consist of a note on command, a 0xFF command (probably some kind of delay, although I don’t know the units (can someone help?) and their interpreters don’t implement it), and then a note off command (well, it is encoded as a note on command with a velocity of zero; in MIDI this is the same as a note off command though, even though for some reason MIDI note off commands can also have a velocity).
It has been suggested to call this (more accurate) construction of Z-machine (even though it has some extensions too (such as version 7 and 8, and some others), but they are all optional; however, some of the things the Z-Machine Standards Document doesn’t mention but which is included in this one, still are considered normal and aren’t considered extensions, such as permanent shifts, and the MARGIN command in version 5) to given a different name, but you can’t do that; this is Z-machine. Another suggestion is to use a different filename extension; but that is unknown too (I suggested “.DAT” but also suggested why that is no good, and other peoples agrees too that it is no good).
So now you see that the situation isn’t quite as simple as you may have believed it to be![/rant]