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
(i.e., the Zork double-trilogy and the murder mystery trilogy)
The second v3 image contains:
- Hitchhiker’s Guide To The Galaxy
- Leather Goddesses of Phobos
(i.e., the science-fiction games, although “Seastalker” and “Wishbringer” sort of stretch that definition)
The third v3 image contains:
- Hollywood Hijinx
- Lurking Horror
- Plundered Hearts
(i.e., everything else v3)
The v4 image contains:
- Nord and Bert
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.