* -*- outline -*- Monmaz81 3D Monster Maze (for the ZX81) patched to run on the 128k Spectrum. * License 3D Monster Maze is copyright M. E. Evans. A small portion of the ZX81 ROM - the character set - is used (copyright Amstrad). All the stuff I did (emulation etc.) is public domain. * Why Monmaz81? Nostalgia, mostly. Many people, when they think of the ZX81, think of three things - the terrible keyboard, the RAM-pack wobble, and 3D Monster Maze. Certainly I'm one of them. As with my similar `port' of Frogger, it occurred to me that relatively few people have ZX81 emulators and fewer still a copy of the game - and the easiest way to make the game available to the maximum number of people was to emulate it on the speccy. (NB: The TAP and Z80 are equivalent, there's no advantage to using one over the other. BTW, if you have a ZX81 emulator which supports Xtender-style .P files, you could run monster.p (in emu_src.tgz) on that instead.) * Why is it 128-specific? ZX81 programs run in the 4000-7FFFh area of memory. This includes the screen memory, so while you could in theory run the program on a 48k speccy you'd never know it was running. :-) 128s have an alternative screen in page 7 which you can use to work around this problem. * Playing 3D Monster Maze It's explained by the game itself if you ask for instructions when it prompts you. Since you may not be completely familiar with what a ZX81 keyboard looks like :-), here are some translations of the keywords used by the game: keyword key STOP A LIST K CONT C For those who (like me) find waiting for the initial scrolly message to crawl by rather annoying after a while, I added an escape route - if you press caps shift while that's running it skips to the end of the message and makes the scrolling considerably faster (the latter will apply to all future scrolly messages too). "The mists of time will pass over you for about 30 seconds" is no longer even remotely true. For a start, there's no FAST mode to produce suitable "mists" on the speccy; however, the main problem is that instead of 30 seconds, it takes less than *one*. (Ironically, it could have taken less than a second on the ZX81, too - if the author had bothered to code that bit in Z80 rather than basic.) Apologies for not reproducing the full retro effect, but I think most of us will be happier not to have to wait half a minute, yes? :-) * Problems with the emulation The emulation works pretty well. The only problem is the speed - since the game isn't entirely machine code, but has about 120 lines of basic which oversee things and read the keyboard (even when the game proper is running...!), and there's no way I could have used the ZX81 rom to run the basic, I had to translate that all into Z80 and make a guesstimate of how much the delay loops and the basic itself would slow things down. I'm pretty sure I've got everything within about 10% of the correct speed (except the 30-second maze generation as mentioned above), but it's not perfect. Oh, come to think of it, there's one other problem. On a real speccy, it'll run up to 7% slower as the game's code (which runs for about 25% of the time) has to be in contended memory. This probably isn't too noticeable though. * Assembling You don't have to assemble the patch/emulation, TAP and Z80 files are included here. But, since I'm distributing the source (in emu_src.tgz), it makes sense to describe how to assemble it. You'll need a Unix box, and the source to zmac (the URL is http://www.nenie.org/cpcip/index.html#zmac at the time of writing). Compile and install zmac. Now do `make' and it should build monmaz81.tap. (The Z80 file is built `by hand' using an emulator. :-)) (BTW, `code2zxf' and `zxftotap' are quick-and-dirty tools included with the source which help make the TAP file.) * Contacting me You can email me at russell.marks@ntlworld.com.