EmuZWin v2.3 release 1.3

(С) by Vladimir Kladov, 2003

I represent my ZX-Spectrum 128 and 48 emulator for Windows 95/98/ME/NT/2K/XP.

Download version 2.3 here: http://bonanzas.rinet.ru/EmuZWin23.zip
Still now, it is always possible to download most fresh version via following link: http://bonanzas.rinet.ru/EmuZWin.zip .

At this time, among other windowed emulators, EmuZWin is one of the fastest and correct. It emulates Spectrum-128K/48K, TR-DOS, supports most popular snap-formats (SNA, Z80), TR-DOS formats (TRD, SCL, Hobeta), loading from the most popular tape formats (TAP, TZX and other), saving screenshots (SCR, BMP, PNG) and this list can be extended writing plugins. There is very convenient feature in the EmuZWin: reprogramming keyboard (it is possible to define which Spectrum keys are pressed by certain PC keys). The EmuZWin also has very power built-in debugger/disassembler and also built-in assembler too.

In version 2.3, MULTICOLOR support added for Spectrum48, 128, 128+2, 128+2A/+3 and Pentagon. Also, custom timing models can be adjusted, and timing model can be changed on fly. In the multicolor mode, EmuZWin works fast as well in non-multicolor mode.

PC Speaker can be used for sound output only under Windows9x/ME, and sound quality in such case is absolutely disgust (but still sufficient to recognize puck-puck in most games). By default DirectX used, and AY sound is emulated only throught DirectX, with normal quality.

Video output in window mode uses GUI only, Direct-X used only in full-screen mode. Therefore under Windows98 runs on Pentium100 in a window with speed about 70-100% in comparison to speed of original Spectrum, and in full screen mode with 100-200% speed (and it is possible to change refresh rate to 25 frames/sec or to 10 frames/sec to make emulation even faster). Video output is emulated to one horizontal scanning line. I.e. writings on the border can not be viewed, but other border effects are preserved (though contended memory and ports are not emulated).

Kempston Joystick, Sinclair I (only with real joystick), Sinclair II and Fuller Box joysticks - both real and emulated on the num pad of the PC keyboard (work when Num Lock is turned on). Additionally drawn keyboard can help to enter Basic commands. Also it allows to fix some keys pressed down while playing game (right mouse click on a key). Also, this keyboard can be useful while reprogramming keyboard for a game.

For loading and saving state following snap-formats are supported: Z80, SNA, TAP (without Warajevo compression), TZX, BLK. Loading from ZIP supported (it is necessary to provide a path to PKUNZIP.EXE). To load and save TR-DOS disks following formats are supported now: TRD, SCL, Hobeta.

Pokes are loaded automatically from pok-file, named exactly as Spectrum file loaded, but with extension .pok. This file can be located anywhere in the directory where loaded file is from, or in any nested subdirectory (all subdirectories are listed recursively). Icons for trainers are assigned automatically when possible. If pokes are available after loading the state, a "smile" icon is appear on the toolbar (it is hidden if a tape is still reading), and opening pokes window at that time does not allow applying pokes anyway. It is possible to load external pok-file (File|Open Pokes...). In EZX format, pokes are stored in the EZX-file itself.

In version 2.3, MAP BUILDER added, which allows to... build maps :). Hope, this feature will be useful for adventure/quest games.

Working with the most formats (load and save snap-formats, load tape formats, load and save disk images) implemented via plugins, and the own format EZX supported natively, without plugins. Plugins should be located in the directory, where the application itself is placed. Documentation on writing plugins published, and if you wish, you can write your own plugins.

Also, plugins can be added for saving screenshot (File|Save screenshot, or F5) in different graphic formats. At least, plugins to save screenshot in SCR, BMP and PNG formats are provided in the distributive.

The default ROM image file Spectrum.rom, containing ROM 32K or 16K, must be located in the directory where the application is placed too. If its size is greater than 16K, then the first 16K are S128 ROM, and the second 16K are S48 ROM. Using command line option /ROM=path or selecting menu item File/New/Custom ROM Image, it is possible to select another ROM image.
TR-DOS ROM image should be located in TRDOS.ROM file, size is 16K, also in the directory where the application is installed.

The embedded power step-by-step and trace visual DEBUGGER can be used for different purposes. For me, it is useful to debug the emulator itself. Also, built-in assembler is there, now very correct and sufficiently power.


There were not planned in 2.1, but possibly in 2.2/2.3:

What were not planned in version 2.0 of the emulator:


Version 2.3 Release 1.3 (15-Feb-2004): Some bug fixes:

[-] In main window, View|Toolbar did not work
[-] Z80 load and save plugin fixed. Save did not work correctly at all (PC was written at place where SP should be stored, some bugs in compression algorithm implementation were found). Load fixed especially for case of loading 48K games in 128K mode.
[-] Bug fixed in Load Memory Block dialog (called from the Debugger): when [<>] button was pressed to find first difference, and blocks were identical, the emulator were getting caught in an endless loop.
[-] Some problems fixed with loading states having some dirty data in advanced fields (such as "tacts from the last int" in Z80).

Version 2.3 Release 1.1 Beta (8-Dec-2003): Multicolor support added (contended memory and ports, exact byte-aligned video output of the screen and the border, snow effect emulation, IN FF emulation, switching timing model between 48, 128, 128+2, 128+2A/+3, Pentagon and Custom on fly, adjusting timing configuration, saving/restoring it in EZX save format). Save screenshot capability added (File|Save screenshot, or F5). Map Builder added.

Here is a history of Alpha builds of the version 2.3:

1.0.B - storing MC settings in EZX format implemented, new chunk type 'MULT' added to the EZX format.

1.0.A - save screen shot (F5) added (plugins extendable). Load from ZIP using PKUNZIP fixed. Open recent list (up to 9 files) added. Crash on exit fixed (seems). Reanimate option added (by suggestion of Alex Medvedev).

1.0.9 - crash fixed (when debugger is closed and emulator works in MC). Snow effect controlled by the config now (and by default it is off for +2A/+3/Pentagon). Port recognision works now better (LD A,XX; OUT (FD) now works in most cases correctly).

1.0.8 - Loading TZX fixed in MC. Sealing of some ZX keys pressed with SHIFT+correspondent PC key (",:,+,<,>,{,},|) fixed. Open by F3 fixed for full-screen mode (now slow but mostly correct). IN FF for MC implemented. Bug Z80 with LD A,R / LD A,I (when IntSignal ON, but except after EI) - implemented (for MC). Also, snow effect (bug in ULA) implemented, now for for all Timing models including +2A/+3 (later will be configurable and by default off for +2A/+3).

1.0.7 - DirectX output (full screen mode), configs are reworked. Status bar added (leds in full screen) with speed % and FPS.

1.0.6 - fixed TR-DOS off with multicolor

1.0.5 - first (ugly) configuration for MC, View | Effects | Flip Vertical

1.0.4 - optimized MC for +2A/+3, some configurations added, Show Border Only (in the Debugger)

1.0.3 - optimized MC for 48, 128, +2

1.0.2 - menu settings for MC

1.0.1 - dirty multicolor (MC) mode

Version 2.2 Release 1.0 (3-Nov-2003):
[+]TR-DOS support added. Formats supported are TRD, SCL, Hobeta (.$?). Direct loading certain HoBeta-file (or file, selected in Disk Browser, ALT+D), Magic Button (ALT+M), boot from the disk A: (ALT+B). The Disk Browser has a set of utilities to work with TR-DOS-disks (creation, loading, saving disks; deleting and renaming files; squeeze; saving selecting files in HoBeta-format, adding HoBeta-files to the disk, including using drag'n'drop from the explorer). The EZX format is extended (chunks чунки DISK, BETA, PRVW are added), and interface with plugins is extended (compatibility is preserved with the existing).

[+]Some small changes in the interface. File|New|Spectrum48K now locks the emulator in emulating 48K machine only, until File|New|Spectrum128K or Custom ROM image, containing 128K ROM image. Double click with right mouse button does not switches to full screen mode, only double click with left mouse button (right mouse button is used to pause/resume emulation only). Configurations window can be called separately from the main menu or by key combination Alt+C. In the Debugger, disassembled code can be now scrolled with the mouse wheel or with the scroll thumb as usual. Tooltips in the Debugger's top toolbar can be turned off (right click in the toolbar). In the Open Dialog a button added to go up to the parent folder. Some icons are changed on toolbars.

[-]Serios corrections in the built-in Assembler (a lot of instructions were compiled incorrectly).

[+]A list of all available instructions is available now in Assembler window. Labels list is available in a separate window. User labels are shown in the debugger (which also became better).

[-]A lot of small fixes in the emulation. Debugger problem with F7/F8 keys (when pressed often) seems fixed.


V2.1 Release 8.0 (21-Sep-2003): Assembler fixed again.

V2.1 Release 7.0 (13-Sep-2003): Assembler fixed.

V2.1 Release 6.0 (17-July-2003): Assembler window added.

V2.1 Release 5.0 (15-Jun-2003): Some fixes and improvements in Debugger:
[+] Search by text, including case insensitive, added.
[-] Crash fixed when search window closed without setting any search pattern.
[-] Ctrl+F and other keys now work correctly in the Debugger.

V2.1 Release 4.0 (27-May-2003): Some small improvements:
[+] In windowed mode, main display can be easy dragged over desktop using left mouse button on the main display.
[*] For slow machines (detected as 386, 486 or Pentium, below then Pentium II or Pertium Pro) exact sound synchronization is turned off. A command line option /FAST added to ignore slow machine detection (all machines are treated as fast, since the sound synchronization is always on).
[+] Application priority can be changed between Normal/Above Normal using menu (useful to hear non-interraptable music in the background while a processor is very busy with other tasks).
[=] Going to full-screen mode when the main window is maximized and returning back to windowed mode fixed (if it was maximized, it restored first).
[-] Scrolling fixed in keyboard remapping (Configuration dialog).
[-] Direct Sound and Joysticks initialization begin now when main window is shown already. This makes startup faster a bit.
[=] Dropping ZIP-files on the main form fixed.

V2.1 Release 3.0 (27-May-2003): Tape loader improved: Flash load added, Auto Play/Stop tape option added. When Tape Catalog is visible, this does not prevent tape from fast loading as earlier. Append tape fixed and improvied (a little bit: -------- line added before block appended). SNA format handling changed a bit: when 48K sna loaded, last value popped from the stack, replaced there by 0000; when 48K state is saved and SP < 4002, 128K sna format forced. Pokes form fixed (bad scroll, bad images).

V2.1 Release 2.0 (26-May-2003): TZX loader improved, thanks to Alexander Medvedev for a bug report. Z80 loader fixed, thanks to Mark Woodmass for a bug report on it. About window and header both show version 2.1 now as it should. Some fixes and small improvements in debugger.

V2.1 Release 1.0 (24-May-2003): Full-screen mode added, with Direct-X used. (Alt+Enter, or double click on the main window). Right mouse click on the main window can be used to pause/resume the emulator. In full screen, menu and toolbar are not available, but all shortcut key combinations are still functioning. Opening any other window switches mode from full screen to normal one. Num[ + ] and Num[ - ] are used in full-screen mode to change scale for full-screen only. Options added: Interlaced in Full Screen (Alt+I) and Normal Refresh Rate in Full Screen (default true).
    Real PC Joysticks support added. It is possible to use one or two joysticks (in latter case assigned to Kempston / Sinclair-I / Sinclair-II / Fuller Box / Cursor). Both joysticks can be remapped to ZX keys as usual, using Remapping Keys feature. Before using it, joystick(s) should be turned on (via Alt+J, or menu, or Configuration dialog).


V2.0 Final release F1.5 (20-May-2003): Sound buffer made larger, so sound becomes more stable when PC is busy with other tasks, or window is resized or moved over desktop.

V2.0 Final release F1.4 (19-May-2003): Append tape operation was broken, fixed. After stopping tape Play button was not enabled in some cases, fixed. Now it is possible to set break points on tape block load using mouse left click at the icon area. Long loading process (TZX can be cancelled now).
    Pokes were not loaded from ZIP, fixed.
    More safe: now toolbar and main menu are not available while decoding file selected to open (this are enabled again when tape load process started or snap-file is loaded). Also, PC keyboard is ignored while entering ZX key via keyboard window shown modal in Key remapping dialog.
    More convenient: when Preview is on in the Open dialog, smiling face icon is shown in top-right corner indicating that POKes are available for a file (if any).

V2.0 Final release F1.3 (18-May-2003): Fast LDIR/LDDR/CPIR/CPDR emulation added (true by defaut, can be turned off for a certain game or by default, though it does not affect emulation accuracy at all).
    Video output optimized more, and own stretching procedure used, which speeds up stretched output.
    Pressing ALT resumed the emulator, fixed. Now any key press when keyboard window focused, pass focus to the main window in Keyboard Transparent mode.
    Restoring main window position to (0,0) did not occur, fixed. Also if the main emulator window positioned above desktop for less then 30 pixels, it does not repositioned to the top on start.
    When EZX was loading from ZIP, pokes and key and color remappings were not loaded from EZX itself, fixed.
    Some small enchancements in the interface (own semi-transparent cursor over main window, collecting current folder and storing it in the registry when Open Dialog closed, Small Keyboard window mode).

V2.0 Final release F1.25 (15-May-2003): Slow video output under Windows 98 (when size was not 1x1) fixed.

V2.0 Final release F1.2 (15-May-2003): A bug with application crash on termination if another speed was used then 100% and another refresh rate was used then 50 frames/second, fixed. A bug with application failure if while working with configuration dialog (key remapping) a key was pressed, which might resume the emulation, so auto-resuming now is disabled while configuration window is visible.
    Small improvement: emulation speed can be switched between 50% and 800% using Alt+Num[ * ], in addition to Num[ * ] used as earlier to switch between 100% and 200%. Small change: now toolbar button with "flare" sign is hold checked down when any speed selected greater then 100%.
    Video output is much smoother now for case when display size is other then 1x1 or 2x2. Also, an option Proportional Size added (available via menu View|Proportional Size).

V2.0 Final release F1.1 (13-May-2003): Removing keyboard remappings (specifying empty values for PC key and for both ZX keys) was leading to crash, fixed. Loading POK-file when tape was not loading yet was lead to crash, fixed. Pressing keys 'P', 'O', 'K', 'T' was not leading to resume from paused state, fixed. Path to root folder accessed last in Open Dialog was not used as default on restart the emulator, fixed. Keyboard settings Transparent and Stay On Top were not restored perfectly on restart, fixed.
    Note about "final" word. This means mainly that new features or serious changes are not planned, but bugs will be fixed as soon as possible.

V2.0 Final release F1 (11-May-2003): ZIP file support provided (pkunzip.exe used, not in the distributive).
    Association with EZX-files added (done automatically when the emulator started each time).
    Now EZX is loaded exactly in the same state as it was saved, e.g., it is possible now to continue loading tape if a state was saved while loading from the tape.
     Tokens in block names are partially supported in Tape Browser window.
    If Open Dialog is called while loading from tape, previewing screens of other snapshots does not clear tape content now, so if the Open Dilog cancelled, tape loading can be continued.
    Position and size of Tape Catalog, Open Dialog, and position of Game Configuration windows also stored in the registry. Folders, selected in Open Dialog using Browse key or entered manually also stored in registry (maximum 10).
    On Escape, the emulator now minimized to tray without animation (fast).
    Key PAUSE also pauses now the application (but it is ignored to resume it).
    Main window can not be increased now to triple size using key Num[ + ], if current desktop less then 768 pixels in height.
    A lot of other small changes.

Beta release B10 (8-May-2003): Colors mapping added. Key mapping improved (loop, fixed, auto-up implemented, enter key name by pressing it added). Some bugs with pokes fixed. Some improvements for Debugger (e.g. code disassembled immediately when RAM or ROM bank changed manually). Small fix in Open dialog: preview now always refreshed if the dialog opened again.
  Most impotant settings are stored now in the registry.

Beta release B9 (7-May-2003): Key mapping added. It is now possible to redefine keys for a game on the emulator level, and even define fixed, auto-up or looping keys. Keyboard layout window inmproved: now it can be "on top" of main form, transparent (in Win2K or XP), and drawing faster. EZX format changed a bit (chunk 'KEYS'), but this does not effect already saved states.

Beta release B8 (5-May-2003): Display refresh rate options added (accessible by menu): Max(50 frames/emulated sec), Normal (50 frames/real sec), Slower (25 frames/real sec), Rare (10 frames/real sec). With Slower refresh rate emulation is faster on slow machines. Sinclair II turned now off automatically whenever reading from port 1F (Kempston) detected.
  Keyboard layout window positioning changed to fit desktop and to place near the main form when shown.
  Pokes (.pok-files) support added, with automatic iconization (!).
  Append of tape image fixed.
B8.a: Menu command File|Open Pokes... added. In the EZX, pokes are stored internally and loaded together with the file.
  Crash on close fixed.

Beta release B7 (3-May-2003): Toolbar added, with tape loading progress bar. Tape loader now always starts from typing LOAD "" in 48K Basic automatically, rather then from 128K tape loader. Sound now synchronized more accurately (less or no artefacts while playing with 100%, 50% or 200% speed). Key option /NoMMTimer added to disable exact synchronization (worst). Some fixes in sound (both AY and MIC), tape loading, port recognition, interface, Z80 emulation. EZX format changed to provide later capability to load exact tape loading state, signature changed to prevent loading earlier saved EZX-files. You will need earlier version of EmuZWin to load older EZX files!

Beta release B6 (30-Apr-2003): AY sound improved a lot. Simplified port selection scheme added, it is turned on automatically when first time attempt to access incorrect port detected. Int generating fixed. Z80 format loader fixed (3.0 for case when it contins non-compressed memory banks) and saving to Z80 format added.

Beta release B5 (29-Apr-2003): Automated report tool added to provide me with feedback about finding unknowntape loader signatures. Drag files on the main window accepted. Some more fixes in sound.

Beta release B4 (28-Apr-2003): Fast tape load now is really FAST even for protected loaders (TZX). Automated report tool added to provide me with feedback about finding unknown loader signatures. Some fixes in sound. Command-line options added: /Sound8 and /SoundExclusive.

Beta release B3 (27-Apr-2003): Fixes in: AY sound emulation, OUTD/OTDR/OUTI/OTIR instructions, some interface improvements, a bit faster tape loading.

Beta release B2 (25-Apr-2003): SpeedLock1 and 2 loading fixed (TZX). IN FF implemented (required by some games for synchronization). AY sound emulation added.

Beta release B1 (22-Apr-2003): Video output optimized for 32bit and 24bit display color depth too (earlier versions worked good only with color depth 16bit).

pre-beta pre-release 10 (21-Apr-2003): Fixes to yesterday fixes, all (I hope) TZX files loaded normally.

pre-beta pre-release 9 (20-Apr-2003): Some more fixes, mainly in TZX format loading (but not yet completed).

pre-beta pre-release 8 (19-Apr-2003): Command line option /ROM= and File menu item File/New/Custom ROM Image added to simplify another ROM selection. Option /9x allows to select emulation mode the same as under Windows 9x (this affects memory usage and emulation algorithm). Option /PAUSED allows to start emulator initially paused. Some improvements of Debugger, some fixes in command emulation (flags, T-states). But speedlock-protected TZX-files still could not be loaded.

pre-beta pre-release 7 (16-Apr-2003): Emulating RLD/RRD instructions fixed, tact length for instructions having (IX+offset), (IY+offset) fixed. MIC sound become better since this change (I hope).
7.1: DAA instruction fixed.

pre-beta pre-release 6 (16-Apr-2003): Loading from TAP and partially from TZX fixed. Saving SNA under 9x/ME/XP fiixed. Debugger under 9x/ME/XP fixed (could not reset breakpoints, and those did not work). Key combination ALT+K added to call keyboard.


http://bonanzas.rinet.ru

mailto: bonanzas@online.sinor.ru

See also other my ZX-Spectrum 128K/48K emulators for DOS:

EMUZ, 1995. Written in C--. Source found recently (2003) and published too.

Z.com, 2003, written in assembler. Minimal by size (6K) but exact emulator (and playable) Spectrum-128K and 48K emulator. Published with source code.