And in-between times I am playing with a new (to me) Z-Code interpreter called Vezza in RunCPM.
So far so good... Running all my favourites (inc all the Zorks), so far as high as some Z5's.
Loving an easy single interpreter that I can just chuck data files at as CMD line parameters!
https://sijnstra.itch.io/vezza
And/Or
The Grundy #NewBrain was an interesting #z80 based machine from 1982. One of its more remarkable features was a built-in single line display in addition to the video out, allowing for some portable use. The machine was targeted at business use and didn't get a large amount of platform specific software. It ran a version of #CP/M 2.2 with an efficient implementation giving it a large TPA. The platform also supports inverse characters, although without a specific control code to toggle so I need to manually track reverse character mode and toggle the top bit accordingly. With some gymnastics in memory management, a 50Hz timer is available, allowing me to count the ticks for the 10Hz timer expected by a full featured #Zmachine
Now that it's properly tested and running, you can download the latest addition to the #Vezza family from https://gitlab.com/sijnstra1/vezza and if you are curious about the NewBrain you can get the emulator and other info from https://newbrainemu.eu/new/
I've attached screenshots of the Bomber game in action, as well as the #Infocom classic A Mind Forever Voyaging.
While porting #Vezza for another #z80 platform (the Grundy #NewBrain), I noticed that there was an issue with the timer routine for the #MSX version. It turns out that the code was in there for the MSX version was using the MSX clock, however, it was not calculating the time properly, The MSX has a fine-grained timer which allows me to measure the time to the nearest 0.1 second as required for the #Zmachine standard. This makes the MSX version one of the few that I have written which supports the full fine-grained time requirement.
While for normal text adventures, this timer resolution might not make much difference, some of the fun post-#Infocom games, this distinction is used. One of the games that I've tested which works properly now is the `bomber.z5`, a real time game where you need to drop bombs from the plane to create a flat landing for your plane. Check the screenshot below for the action! Download the latest from https://sijnstra.itch.io/vezza
#retrogaming #retrocomputing
After much testing and code comparison, the new Feb 2025 Release of #Vezza - my #z80 high speed #zmachine is ready! Took way longer than expected to synchronize across all of the code bases, particularly making sure that all optimizations made it across all platforms - TRS-80 model 1, TRS-80 model 3, TRS-80 model 4, the CP/M versions (~18 platforms), the embedded versions (Spectrum tape, TEC-1G), and slowly pushing into the Agon Light version (which has even more updates still in progress). Lots of individual tweaks, and some major rethinks and rewrites have come together to accelerate game play.
The hardest part of rewriting in this update involved rewriting the dictionary search code. I ended up going back to the original jzip interpreter, written in C for Unix waaay back when. Jzip provided much of the logic that went into ZXZVM, which provided the base for #M4ZVM #M3ZVM and #Vezza. Going back to Jzip made sense as Jzip has an even longer history; and is highly tested and stable and still maintained. This research gave me the confidence that the streamlining and changes I was making to such a fundamental part of the game would work, making all inputted dictionary searching more efficient.
To work around how CP/M stores executable files I spent a lot of time re-organising the memory map to make the executable smaller. This involved rearranging where the initialization code was stored inside the increasingly complex layout. Support across multiple versions means I needed to break up variable sized code and strings to sit inside variable sized gaps, while still compiling all the CP/M versions from the same interconnected set of source files. It needed quite a few manual checks to ensure that it all worked.
What this all means is that your favourite #infocom #punyinform and other text adventures will all play on your favourite z80 #retrocomputing platforms even faster than before!
More details in the devlog and downloads can be found at:
#TRS80 versions https://sijnstra.itch.io/m4zvm
#CPM #CPM80 versions https://sijnstra.itch.io/vezza