EasyFlash Infocom images

It turns out that EasyFlash support was a hell of a lot easier than I thought it would be, and it is very fast.

I am reluctant to implement saving games to flash; there’s not enough free memory to include EasyAPI for all three official interpreter versions (three pages needed? Really?) and I do not want to bang on the hardware directly.

I have combined the games into three EasyFlash images, roughly sorted by type or genre.

The first v3 image contains:

  • Zork I
  • Zork II
  • Zork III
  • Enchanter
  • Sorcerer
  • Spellbreaker
  • Deadline
  • Witness
  • Suspect

(i.e., the Zork double-trilogy and the murder mystery trilogy)

The second v3 image contains:

  • Planetfall
  • Stationfall
  • Starcross
  • Suspended
  • Hitchhiker’s Guide To The Galaxy
  • Leather Goddesses of Phobos
  • Seastalker
  • Wishbringer

(i.e., the science-fiction games, although “Seastalker” and “Wishbringer” sort of stretch that definition)

The third v3 image contains:

  • Ballyhoo
  • Cutthroats
  • Hollywood Hijinx
  • Infidel
  • Lurking Horror
  • Moonmist
  • Plundered Hearts

(i.e., everything else v3)

The v4 image contains:

  • Nord and Bert
  • Bureaucracy
  • Trinity
  • AMFV

There are no real functional changes between the standalone images I made last night and these images — they’re just consolidated, with a very simple pre-game selection menu.

They can be downloaded at:

Saving game files to EasyFlash will not be implemented, at least not by me. Here’s why:

The EAPI requires three pages. With careful pruning, I think I can free up enough memory between the end of the interpreter and the beginning of the resident data to accomodate that. I’d remove the printer transcript routine (which I suspect wouldn’t be missed), relocate the story selection menu to ROM (where it should be anyway), and a couple of other optimizations.

The self-imposed constraint that I’m working with here is that there will be one executable per version that handles all hardware cases — uIEC-only, uIEC/REU, uIEC/GeoRAM, uIEC/EasyFlash, EasyFlash-only. This is to make my life easier, as I was having a hell of a time keeping things straight when everything was selectively #ifdef’ed for specific hardware.

I believe that I can bump up the resident start address a page or two. I’ve tested this with the v3 interpreter with no apparent ill effects, and I don’t believe that there are any v3 story files floating around that even come close to hitting the $D000 cutoff. I haven’t tried this with v4 or v5 yet.

The second bullet point is a bit more troublesome. The save files are essentially a memory dump of the entire Z-machine state. That’s 52 blocks for v3 (so 13k), 66 blocks for v5 (so 16k), and a whopping 131 blocks for v4 (so 32k). Setting aside three to five extra banks per game for savefiles is doable but would permit fewer story files per image.

I honestly think it’s better/safer to keep the EasyFlash as a read-only REU substitute, keeping save game functionality on the serial bus. This project started as a way to play Infocom games on the uIEC (with the nice side-effect of removing the need for RAM expansion); since the EasyFlash and the GeoRAM share identical paging schemes, read-only EasyFlash support was easy. Writing save game files to EasyFlash will significantly shorten the lifespan of the EasyFlash and severely reduce the number of games per image. Sorry.

About Chris Kobayashi

I'm a security systems engineer, specializing in UNIX, network, and physical security. I'm in Tokyo, and I'm mostly retired now. I'm well-versed in both electrical and software engineering, with a particular interest in old computers and game consoles. You can contact me here.
This entry was posted in Commodore. Bookmark the permalink.

1 Response to EasyFlash Infocom images

  1. Alan Reed says:

    Is the functionality to change colors broken in these images? You have press F1/F2 to cycle foreground, F2/F3 background, F4/F5 prompt. Shouldn’t that be F1/F2, F3/F4, and F5/F6?

Leave a Reply

Your email address will not be published. Required fields are marked *