Zeta is a small emulator, implementing a fraction of a DOS-compatible environment just large enough to run ZZT and Super ZZT, allowing user-friendly and accurate usage of them in modern
environments, as well as easy packaging, distribution and embedding of ZZT games.
Features
- 100% gameplay accuracy - it's an emulator, not a clone,
- Automatic, CPU-friendly speed scaling, taking into account ZZT's engine design,
- Easy to port to various platforms, including:
- SDL (Windows, Linux, BSD, macOS, ...),
- Web (WebAssembly-based; modern web browsers),
- Curses (play ZZT in your terminal!),
- Small footprint.
Downloads
To run the desktop version of the emulator, you'll need a copy of ZZT or Super ZZT extracted in the same directory!
- Zeta beta 29 (Windows, 32-bit)
- Zeta beta 29 (Windows, 64-bit)
- Zeta beta 29 (HTML5)
- Zeta beta 29 (source code)
- Zeta Git repository
For distribution, including usage with the HTML5 port, I highly recommend using the following MIT-licensed releases of ZZT:
- Reconstruction of ZZT (source)
- Reconstruction of Super ZZT (source)
- PSA: Hard drives and floppy drives containing many potentially unpreserved, historical ZZT worlds are rapidly decaying. If you have any archives of your own that you'd like to share, please contact me (kontakt at this domain)! I will do my best to ensure adequate preservation of the contained ZZT/Super ZZT/ZIG/MegaZeux/etc. worlds/games, as well as other utilities and periphery.
- Museum of ZZT - find games and articles here!
Controls
- SDL port (Windows/Linux/etc.):
- Ctrl+F6 - toggle audio recording (start/stop)
- Ctrl+Plus/Minus - resize Zeta window by integer amounts
- F9 - hold for "turbo" mode (no speed limit)
- F12 - take screenshot
- ALT+ENTER - toggle fullscreen/windowed
Advice
- To use Zeta with ZZT, just drop it into a directory with ZZT or Super ZZT and double-click the executable!
- If you want to release a ZZT game stand-alone, you can just rename the Zeta emulator to match your game.
For example, if your game file is "COOLGAME.ZZT", just rename Zeta to "COOLGAME.EXE"!
- If you want to release a ZZT game in browser form on itch.io:
- Use the HTML5 download as a base,
- Edit index.html to point to your game's ZIP file and the ZZT .ZIP file,
- Set the canvas size to 640x350.
You may also find Dr. Dos's guide helpful.
- If you want to release a ZZT game in browser form on your own website:
- If you're running into a TypeError "streaming compile failed" error, make sure that your web server returns the "application/wasm" MIME type for .wasm files!
- To get WiL's ZZT 4.0/4.1 running, use UPX to decompress the EXE first - the decompression stub used by those executables requires a 386+, which Zeta does not emulate!
Known bugs
- The desktop/SDL version does not translate filenames to 8.3 yet. Long .ZZT/.SZT filenames are ignored as of beta 25.
- The desktop/SDL version does not automatically resize the window when loading a non-8x14 character set.
Changelog
beta 29 - 20th Jaunary 2021
- [SDL] Use linear interpolation instead of band-limited synthesis due to performance issues. Will have to go back to the drawing board on this one.
- [Web] Fix regression in PNG charset override support.
- [Web] Fix regression in Super ZZT/40-column mode support.
- [Windows] Updated SDL to 2.0.14.
beta 28 - 5th December 2020
- [SDL] Implement band-limited sound synthesis for PC Speaker emulation. Should greatly improve audio quality. (Special thanks to Noser for pointing me in the right direction.)
- [SDL] Add the Zeta version to the window title.
- [Web] Implement linear interpolation for PC Speaker emulation. May slightly improve audio quality.
beta 27 - 9th November 2020
- [SDL] Add support for directory traversal, for those ZZT forks which utilize it.
- [SDL] Fix support for non-USA keyboard layouts.
- [Web] Fix disabling blinking via object configuration (regression).
- Minor improvements.
beta 26 - 19th September 2020
- [SDL] Fix memory allocation-related crash in beta 25 VFS code.
- [SDL] Minor optimizations to fallback software renderer.
- [Web] Fix browser crash when using a function-based filenameMapper.
- Add support for INT 10 calls which change palette and/or blinking settings (f.e. Quantum P.'s TSR).
- Fix speaker buffer size overruns on a popular ZZT fork.
beta 25 - 25th August 2020
- Taken down due to unrelated reliability issues in both the web and desktop version.
- [SDL] Allow using numpad/unshifted keys to control in-window zoom.
- [SDL] Add sorting filenames in a directory by name.
- [SDL, Web] Fix incorrect mouse button mappings.
- [Web] Attempt to fix rendering glitches on zoomed-in canvases.
- [Web] New filesystem configuration format - make sure to update your HTML file!
- Minor improvements - updating Emscripten, minor optimizations, etc.
beta 24 - 16th March 2020
- [Windows] Updated SDL to 2.0.12.
- Project relicensed under the terms of the MIT license.
beta 23 - 8th February 2020
- [SDL] Fixed K/C skip holding the ENTER key on auto-repeat.
- [Web] Fixed crash in Firefox's private mode, or when IndexedDB is present but disabled.
- [Web] Decreased filesize - smaller downloads!
beta 22 - 29th January 2020
- [SDL] Add CTRL+Plus/Minus for window scaling.
- [SDL] Add F9 turbo option.
- [Web] Add backwards compatibility for older browsers for IndexedDB logic
- Refactoring and cleanup.
beta 21 - 10th December 2019
- [SDL, Web] Rewritten audio logic! Proper handling of repeated notes (as opposed to long notes) and fixed bugs regarding high-latency environments.
- [SDL, Web] Added an option to configure the memory limit, between 64 and 640 KB! Use this to ensure your game would run on a real DOS machine.
- [SDL/Windows] Added an icon to the executable.
- [Web] Fixed a bug where holding certain keys then going out of focus could cause the keys to get stuck in-game.
beta 20 - 4th December 2019
- Quick hotfix release.
- [SDL, Web] Fix bug where a large stream of notes in one CPU cycle could cause a non-stop sound to be emitted.
- [Web] Update Emscripten and reduce runtime size by a few kilobytes.
beta 19 - 31st October 2019
- [SDL, Web] Fix regression with walking step sounds being far too noticeable.
beta 18 - 27th October 2019
- [SDL, Web] Rewritten audio logic! Performance improvements and accuracy improvements (including drums)!
- [SDL] Add audio capture support - press Ctrl+F6 to toggle.
- Note that audio capture uses its own version of the audio engine, prioritizing audio "accuracy" - as it doesn't have to worry about latency.
- As for "accuracy", I am still not sure if Zeta is 100% accurate - will need to compare with real hardware at some point...
beta 17 - 5th October 2019
- [Web] Filenames in .ZIP files are now automatically translated to 8.3!
- [SDL, Web] Fixed support of character sets between 8x8 and 8x16.
- [SDL] Fixed bug where Super ZZT would not show more than one .SZT file in a directory.
beta 16 - 20th September 2019
- [SDL, Web] Timing accuracy improvements, particularly with regards to the default blinking rate.
- [SDL] Fix blinking characters not updating the screen when OpenGL is used.
- [SDL] Support outputting PNGs instead of BMPs for screenshots.
beta 15 - 23rd August 2019
- [SDL, Web] Added the ability to load custom charsets and palettes in .CHR/.PAL/.PLD format!
- [Web] Added a new audio engine, matching the sound output of the SDL version.
- [Web] Added methods to control certain aspects of the engine (charsets, palettes, volume, blink cycles) during runtime from scripts.
- [Web] Added the ability to pass in extra commands to run before starting the engine.
- [Web] Minor fixes and updates.
beta 14 - 16th August 2019
- [SDL] Updated official Windows builds to use SDL 2.0.10.
- [Web]
- Persistent game saves!
- New configuration options - covering aspects of rendering, audio, and more advanced ZIP file loading.
- Added (limited) documentation - see readme.txt for details.
- Added on-canvas messages for emulation stopping and file download errors.
- Added version information to the JavaScript console and loading screen.
beta 12 - 7th July 2019
- [SDL] Fix HiDPI support on Windows (as found by lynn)
- Fixed in-emulator time not being set correctly
beta 11 - 16th June 2019
- [SDL] Fix rare screenshot corruption bug (as found by Dr_Dos)
- [Web] Minor code cleanup; recompiled with Emscripten 1.38.36
beta 10 - 3rd May 2019
- [Curses] Add new port! (Unfortunately, no builds at this time)
- [SDL] Add screenshot key - F12
- [SDL] Minor fixes
- [SDL] New software/fallback renderer - much more efficient (still worse than OpenGL, of course)
- [Web] Custom character set installer support
- [Web] Improved timing accuracy
- [Web] Significant code refactors
- Allow changing the 'typematic rate' via interrupts (in-emulation)
beta 9 - 17th March 2019
- [SDL] Add fullscreen toggle - ALT+ENTER
- [SDL] Allow loading multiple executables in a row with "-e"
- [SDL] Allow disabling blinking with "-b"
- [SDL] Custom character set installer support
- [Web] First public release
- Fix CPU usage regression
beta 8 - 16th March 2019
License
Copyright (c) 2018, 2019, 2020 Adrian Siekierka
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Different licensing terms can be discussed, if necessary - contact me.
If you appreciate the work, please consider supporting me on Liberapay.