@Angstsmurf posted an interesting issue for my z-machine disassembler UnZ
"
There are two binaries of Zork Zero with release number 242 available at the Obsessively Complete Infocom Catalog: zork0-beta-r242-s880830.z6 and zork0-r242-s880901.z6.
With both of these, Unz fails to decode the routine at 0x1cc28 (referring to it as [Invalid routine: 0x1CC28]
.)
Fortunately, we have the ZIL source for this version, including this routine:
<CONSTANT WTBL <LTABLE 0>>
<ROUTINE WINPROP (WIN PROP)
<WINGET .WIN ,WTBL .PROP>
<GET ,WTBL 1>>
This code is still present in later sources, but commented out. It would seem that it targets a preliminary version of the v6 Z-machine, where WINGET takes an address to a table in addition to the property number. The WINPROP routine basically converts it to the later syntax.
Here is the output of Unz at address 0x1cc28:
Data/orphan fragment:
1CC20 02 BE 13 8B 01 70 8B 02 .....p..
1CC30 CF 1F 70 8B 01 00 B8 00 ..p.....
"
I’ve added the following comment to my code:
' zork0-beta-r242-s880830.z6 and zork0-r242-s880901.z6 contains code that uses 3 parameters for WINGET.
' Source code:
'
' <CONSTANT WTBL <LTABLE 0>>
' <ROUTINE WINPROP(WIN PROP)
' <WINGET .WIN ,WTBL .PROP>
' <GET ,WTBL 1>>
'
' Compiles to 02 BE 13 8B 01 70 8B 02 CF 1F 70 8B 01 00 B8 00 at address 0x1cc28.
'
' This is outside the standards of the z-machine and probably only was legel during development
' of z6 in an unreleased compiler.
' For completeness unz can disassemble it even though probably no interpreter can run it.
And in the new, yet unreleased, version this will decode as:
Inform syntax:
Routine: 0x1CC28 Called from routine(s) at 0x0F254, 0x1C1B8, 0x1C264, 0x1CC38, 0x2ECEC, 0x31070, 0x310D4, 0x31284,
0x312E0
1CC28 02 2 locals
(local0 local1)
1CC29 02 13 8B 01 70 8B 02 get_wind_prop local0 0x708b local1 "*** ILLEGAL SET OF PARAMETERS FOR THIS OPCODE, ONLY USED IN ZORK0 DURING DEVELOPMENT ***"
1CC30 CF 1F 70 8B 01 00 loadw 0x708b 0x01 -> sp
1CC36 B8 ret_popped
Padding:
1CC37 00
ZAP syntax:
Routine: 0x1CC28 Called from routine(s) at 0x0F254, 0x1C1B8, 0x1C264, 0x1CC38, 0x2ECEC, 0x31070, 0x310D4, 0x31284,
0x312E0
1CC28 02 2 locals
(L0 L1)
1CC29 02 13 8B 01 70 8B 02 WINGET L0,28811,L1 "*** ILLEGAL SET OF PARAMETERS FOR THIS OPCODE, ONLY USED IN ZORK0 DURING DEVELOPMENT ***"
1CC30 CF 1F 70 8B 01 00 GET 28811,1 >STACK
1CC36 B8 RSTACK
Padding:
1CC37 00
This may be interesting to add as a note in the revision of the z-machine standards document and developer of other disassembly tools (@cas, for zd maybe?).