This is a new(ish), modern polished Z-Machine interpreter for the TRS-80 Model 4 supporting z1-z8* games. It requires a minimum of 128k of memory and is purpose built to take maximum advantage of TRS-80 model 4 hardware including:
- reverse characters
- displays accented characters (limited set that exists in hardware)
- keyboard mapping includes Fn keys, supporting Beyond Zork function key macros
- renders full 80x24 screen including split screen for Seastalker
- support for up to 64k Dynamic Memory
- timed input (interrupt driven)
- cached Disk I/O
- support for expanded memory above 128k
- high speed story execution - faster than the z3 only terp available at the time
- written in hand crafted z80 assembler
- debug mode available (can be toggled while in play on an emulator)
There is also a command line switch to optionally enable the Tandy bit, which seemed an appropriate feature for a Tandy machine.
*z6 support is limited and somewhat experimental - excludes mouse,graphics and complex screen operations.
I’ve been developing and updating releases of M4ZVM for some months now, so the code is reasonably well tested, with continued development on minor enhancements, so it’s about time it was announced here. It’s currently at Release 10, which has been used in the Puddlebuid toolchain to add TRS-80 Model 4 to the available platforms for Hibernated 1. M4ZVM Release 11 is undergoing testing and is expected shortly, bringing even more speed and minor features, along with some other minor bugfixes.
I’ve spent a lot of time on optimising the code, so most stories compiled with Inform 6 and earlier are very playable. PunyInform story files will play well, as do the original Infocom games. Specifically on the z6 front, Arthur and Shogun work albeit with some minor screen glitches. Zork 0 and Journey are not playable due to complex screen usage although their z5 early development versions play just fine. Ziptest.z6 also passes (in my opinion anyway) all the non-screen/graphics/mouse tests (disagrees with some WinFrotz results which I’m working through reporting), meaning that the unreleased Milliways as well as the German version of Zork also execute as-is. Inform 7 games will load but I would not call them playable, and they will eventually run out of stack.
The code is based on ZXZVM, and inherits the GPL2.0 license. Some of the updates for speed and minor bugfixes that I’ve made have already been ported back into the core, and more are expected to follow as time allows. So many people to thank, but in particular a shout out to Fredrik Ramsberg for much support on ideas and motivation to keep improving and debugging my code. Z-machine racing is way more fun than I ever expected.
If you are after the binaries and more screenshots, head to:
https://sijnstra.itch.io/m4zvm
Full source code and binaries including history are available from:
https://gitlab.com/sijnstra1/m4zvm/
Comments, feedback, feature suggestions and bug reports are welcome.
A Mind Forever Voyaging
Beyond Zork