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!), Android (work in progress),

Small footprint.

Downloads

To run the emulator, you'll need a copy of ZZT or Super ZZT extracted in the same directory!

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.

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 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

First public release.

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.