• Please review our updated Terms and Rules here

Looking for all Infocom Adventures for CP/M

I have made a program called INFORUN to run all V3 games, even those which may not have been released for CP/M. Uses the original ZORK interpreter, assembles with z80asm.

I tried the following games: ZORK 1-3, ENCHANTER, SOURCERER, SPELLBREAKER, PLANETFALL, STATIONFALL, PLUNDERED HEARTS, BALLYHOO, STARCROSS, DEADLINE. Others, such as Hitchhikers Guide, may also work.
 

Attachments

  • inforun.txt
    2.1 KB · Views: 22
Starcross was the one that hooked me… then Infadel and planetfall and then the enchanter series… Then I discovered Roberta Williams adventure titles… good times!
 
Whats needed is a LOADER to load and run .Z5 files in CP/M, is that possible ?
I don't think it is possible. Infocom never released a CP/M interpreter for anything newer than V3. I am not aware of any third-party interpreters (for any version) for CP/M either.
My gut feeling tells me that CP/M machines simply lack the ability to run newer adventures efficiently, due to lack of memory and address space.
 
I've heard people say that so many times, I specifically address it in the porting guide.
I have a Microbee 512k unit that runs CP/M 2.2 (actually ZCPR2) that gives me a 414k RAM drive (M: ) So reading your Porting Guide -
  • If you've got large amounts of spare banked memory (~256k) it's just a matter of rewriting the memory paging code for your new target system.
I'm not a programmer but are you able to assist there ?
 
The more you know! XD
Also have a look at other people who have ported John's excellent work (including myself). Someone has done a page-file based CP/M version, and I've done reduced game support TRS-80 versions that run inside a 64K or even a 48K footprint.
 
I don't think it is possible. Infocom never released a CP/M interpreter for anything newer than V3. I am not aware of any third-party interpreters (for any version) for CP/M either.
My gut feeling tells me that CP/M machines simply lack the ability to run newer adventures efficiently, due to lack of memory and address space.
I would suggest the main limitation is proper screen control. To run V4 and higher, you need a lot of control over cursor positioning and scroll protect for split-screen, and to get the most out of it, highlighting as well. For some games yes the memory model is a challenge too, but I'm able to run Arthur: The Quest for Excalibur, a version 6 game, on my TRS-80 model I or model 3 (2MHz Z80, 64x16 display, 48K RAM).
Is there a good "universal" terminal code framework lying around or has everyone simply made their own way of getting around the diversity of screen controls?
 
Last edited:
Oh, a recent Z3 text adventure is Tristam Island from https://hlabrande.itch.io/tristam-island for both a demo & payed version.
There are quite a few post-infocom z3 games, and now thanks to the PunyInform library there are very recent ones. Hibernated 1 (Director's Cut) is commercial quality (including available for some platforms on actual media) which you can check out at https://8bitgames.itch.io/hibernated1
The main reason why PunyInform is recommended is that not only will the game be in z3 format, but the library itself is kept very light and designed with a view to work well on 8 bit platforms. Any of the z3 games on the following page will be a great place to start: https://github.com/johanberntsson/PunyInform#articles
 
Updating this thread with the good news - I've pulled together a new CP/M Infocom game loader. Depending on your CP/M configuration it can load most or all infocom games in z1-z5 format, with some limited text-only support for some z6 games.
The code history comes originally from @JohnElliott 's hard work with ZXZVM, and involves speed rewrites, extra version support and other features like disk cache. The main compromise needed for the CP/M version was that speed was prioritised, so the larger games such as Trinity can only load in the large TPA versions.
I've called this new version Vezza, and have included more details as well as over 20 versions to cover different platforms/configurations; all on Gitlab - if you can't find a version that suits or have any other feedback, let me know!
Main features:
* z1, z2, z3, z4, z5, z6, z7 and z8 games can execute
* Supports full screen width and multi line status (where terminal allows)
* Named game save and load
* Timed input on CP/M 3 and MSX-DOS (to support game such as BorderZone)
* Reverse text highlighting, including when selected using colour changing codes (or substituted e.g. for MSX)
* Underline and/or Bold where available on the terminal
* Colour where available (currently MicroBee & VT100, using VT100/ANSI colour codes)
* Accented chatacters are converted to a printable character
* Fast execution of games (even z3 games now execute faster than the original)
* z3 status line supports am/pm time including Cut Throats easter egg
* Non-banked CP/M supports up to 22K DynMem games (won't load Trinity or Beyond Zork for example)
* Banked CP/M version supports up to 37k DynMem (will load Trinity + Beyond Zork)
* 2KB z-machine stack size (over 50 call levels deep)
* Uses standard BDOS calls
 
The cut down Fweep I use in Fuzix will run almost any v1-5/8 game in 32K of RAM. The approach used would also work for ZXZVM I think if you wanted a portable CP/M + RAMDISK version. You'll need a good fast ram disc and some patience to run the bigger Inform ones though as they have a very bloated working set.


Rather than fetching bytes from banked RAM it keeps a cache of roughly least-regularly-used blocks and fetches from disk as needed, as well as keeping a backing file for the writable parts of the game state. Providing that disk is fast (RAM, CF, etc) then all but a few Inform games run at a nice speed. If you've got more memory (it doesn't dynamic size which it should) it'll work even better

So I'd guess if you nicked the algorithm from fweeplet and pasted it into ZxZVM and used a ram disc you'd get the result you needed for a CP/M 3 version using the ramdisc via the CP/M API. You might need 512 byte blocks not 256 so that you avoid any extra copies (physical block size, and the CP/M 3 fast paths for block copies) but that shouldn't reduce performance too much. Anyone who wants to do so has my permission

On my RC2014 systems the CF card appears to be faster than the RAMdisc 8)
 
The cut down Fweep I use in Fuzix will run almost any v1-5/8 game in 32K of RAM. The approach used would also work for ZXZVM I think if you wanted a portable CP/M + RAMDISK version. You'll need a good fast ram disc and some patience to run the bigger Inform ones though as they have a very bloated working set.


Rather than fetching bytes from banked RAM it keeps a cache of roughly least-regularly-used blocks and fetches from disk as needed, as well as keeping a backing file for the writable parts of the game state. Providing that disk is fast (RAM, CF, etc) then all but a few Inform games run at a nice speed. If you've got more memory (it doesn't dynamic size which it should) it'll work even better

So I'd guess if you nicked the algorithm from fweeplet and pasted it into ZxZVM and used a ram disc you'd get the result you needed for a CP/M 3 version using the ramdisc via the CP/M API. You might need 512 byte blocks not 256 so that you avoid any extra copies (physical block size, and the CP/M 3 fast paths for block copies) but that shouldn't reduce performance too much. Anyone who wants to do so has my permission

On my RC2014 systems the CF card appears to be faster than the RAMdisc 8)
Interesting idea. I've seen a few cut down versions of fweep. Does yours support the status lines, highlighting and all versions from the one binary? I'm interested because it may solve another use case.

Virtualising the DynMEM is certainly an option, however, performance on vintage hardware was my main objective for this project which is why I have written Vezza in handcrafted assembler.
 
Back
Top