Notes from the Author

I wish to apologize in advance for the linguistic errors in this help file. Please bear in mind that English is not my first language.

I'm also sorry for all the legalese but when batch files(!) are distributed as shareware and companies make millions of dollars by giving away their software (think about it), people can be pretty touchy when it comes to infringement of their copyrights and end-users expect support for software that they didn’t pay for. I’m not going to apologize for any tongue-in-cheek humor you may encounter, though. I do not believe a help file has to be serious to be useful, and I’ll blame it on my limited knowledge of the English language and culture at best, if you find anything that offends you. You’ve been warned!

Finally I want to thank

•	All the individuals mentioned in the Acknowledgments topic. Here’s the list once more: Bernd Schmidt, Gerton Lunter, Damien Burke, Mark Adler and the Info-ZIP group.

•	Borland for their excellent line of Pascal products (although zx32 is written in C and Assembly · ),

•	Amstrad for making the CPC, and allowing distribution of the ZX Spectrum and CPC ROMs, and of course

•	Sir Clive Sinclair for making it all possible.

In addition

•	Arnt Gulbrandsen for the coolest Spectrum emulator of them all. JPP may not be the emulator of choice for most people nowadays, but it still looks way better than any other, in my opinion.

•	Nicola Salmoria, Mirko Buffoni and the MAME team, for the coolest emulator in general.

•	Rui Ribeiro for creating the very first Spectrum emulator for Windows and not making a fuss about me using WSpecEm’s icon in previous releases of zx32 · .

•	Damien Burke (again) for trying (most of the time · ) to make me and my emulator's users not feel like outsiders at comp.sys.sinclair.

•	All the people at comp.sys.sinclair who offered to buy me drinks · .

•	Andy who sent me e-mail at the exact time I had decided to discontinue development of the emulator.

•	Malyrules (and the Illusion group) for keeping my mailbox filled with new messages.

•	All the people who send me e-mail from all over the world (and especially the ones who send me postcards · ).

•	Alexis, Dimitris, Manolis, Panos, Thodoros, the Greek Computer Technology Institute and all the others that let me use their Net resources from time to time.

And last but not least

•	My brother Axilleas Kapartzianis for, well, being my brother · and

•	My mother and father Athena and Sotiris Kapartzianis for everything.

Related Topics


Comments and Suggestions

You can send me e-mail or write to me including your ideas, suggestions, bug reports or anything but large-font-display problems · .

Please refer to the Help Wanted topic for points of interest to me, if you think you can contribute to zx32's support and development and especially if you are reporting a bug. Please do not e-mail me any binaries or exceptionally large messages without asking first, too.

You can contact me in the following ways:

e-mail:	zx32@usa.net

World Wide Web:	http://zx32.home.ml.org

address:	Vaggelis Kapartzianis

Pyrgetou 24, Agia Moni

Trikala 421 00

GREECE

Hint “I like zx32” postcards can be sent to the address above.

Whatever way you may choose to contact me, you should bear in mind that a long time will, most probably, pass before I'm able to read your message. It can take me even longer to reply, but I will do it (eventually · ).

Related Topics


Copyright Notice

•	The ZX Spectrum Emulator distribution package contains memory, tape and disk images of computer programs for the Sinclair ZX Spectrum. These programs are copyrighted software. Therefore, any of these programs may ONLY be used by you if you own a copy of it YOURSELF, in the originally distributed format. In that case, you are IN PRINCIPLE able to LEGALLY transport the code from your ZX Spectrum to your PC.

Any usage of a computer program by people NOT owning a legal copy of it, is in conflict with copyright laws. The author WILL NOT be held responsible for acts of copyright violation.

Some companies have given explicit permission for distribution of their software for the ZX Spectrum. A list of such companies is at:

 http://www.jetman.demon.co.uk/speccy/permits.html

•	Amstrad Consumer Electronics plc. permits the use of the included ROM images with an emulator, but retains the copyright.

Related Topics


License Agreement

You are hereby licensed to: use this version of the ZX Spectrum Emulator computer program (the “software”) for an unlimited period; make as many copies of this version of the software and documentation as you wish; give exact copies of the original version to anyone; and distribute this version of the software and documentation in its unmodified form via electronic means. There is no charge for any of the above.

You are specifically prohibited from charging, or requesting donations, for any such copies, however made; and from distributing the software and|or documentation with other products (commercial or otherwise) without prior written permission from the author, with the following exceptions: The software may be included in its unmodified form, on freeware|shareware collections on CD-ROM and on magazine cover disks, without specific written permission.

Related Topics


Disclaimer of Warranty

THIS SOFTWARE AND THE ACCOMPANYING FILES ARE DISTRIBUTED “AS IS” AND WITHOUT ANY WARRANTIES WHETHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT WILL THE AUTHOR BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF THE USE OF THE PROGRAM, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

Related Topics


Acknowledgments

•	ZX Spectrum 48K, ZX Spectrum 128, ZX Spectrum +2 and ZX Spectrum +2A|+3 ROM Copyright ©1982, 1986, 1987 Amstrad Consumer Electronics plc.

•	, ZX Spectrum +, ZX Spectrum 128, ZX Spectrum +2, ZX Spectrum +2A and ZX Spectrum +3 are Trademarks of Amstrad Consumer Electronics plc.

•	All other names are trademarks of their respective owners.

•	The original Real-Mode version of the Z80 emulation code is Copyright © 1991-1995 Bernd Schmidt, from his Amstrad CPC Emulator CPE 5.0i.

•	The Spectrum keyboard layout screen is Copyright © 1994 G. A. Lunter, from his Sinclair ZX Spectrum Emulator Z80 3.02.

•	The comp.sys.sinclair Sinclair ZX Spectrum FAQ distributed with zx32 is maintained by Damien Burke.

•	The Spectrum hardware emulation is based mostly on the (rather excellent) documentation provided by Gerton Lunter with the Sinclair ZX Spectrum Emulator Z80, and additional information found in the comp.sys.sinclair Sinclair ZX Spectrum FAQ maintained by Damien Burke.

•	zx32 incorporates compression code by the Info-ZIP group and Mark Adler in particular. The original compression sources are freely available from CompuServe in the IBMPRO forum and by anonymous ftp from the Internet site ftp.uu.net:/pub/archiving/zip.

Related Topics


System Requirements

Minimum Requirements	Recommended Configuration
486DX2/66 processor, and Windows 95 with DirectX, Windows 95 OSR2 or Windows NT 4.00.	P75 processor, Windows 95 with DirectX 5, 12Mb RAM,  sound card & DirectSound certified driver, and accelerated video card & DirectDraw certified driver.
The behavior of the ZX Spectrum Emulator under alternative shells (i.e., Program Manager) or operating systems (Win32s, Windows NT 3.XX) is undefined. The ZX Spectrum Emulator may exhibit problems when in fullscreen mode under early betas of Windows 98 and Internet Explorer 4 previews. These problems were fixed in the final release of Internet Explorer 4 and will hopefully not be present in the release version of Windows 98.

This version of the ZX Spectrum Emulator will take advantage of DirectX 2 or higher features wherever possible. No specific DirectX version is required, but no extensive testing was performed on early versions. In addition, problems were reported when running previous releases of the ZX Spectrum Emulator under the aforementioned DirectX versions. A DirectX 5 installation is recommended therefore.

Problems may arise when running the ZX Spectrum Emulator on Windows NT 4.00 (service packs 1, 2 and 3 included). This is due to the lack of direct hardware support for the majority of display and sound cards (although the situation is reportedly better with service pack 3), on the version of DirectX that is built into this release of the operating system. New DirectX components that may solve these problems, should be available in future NT 4.00 service pack releases. Release 5.00 of Windows NT is expected to provide the same level of hardware support available on Windows 95|98 and do away with any problems altogether.

Related Topics


Package Contents

FILE_ID.DIZ	Description-In-Zip

*.DAT	Install/Uninstall support file

*.DLL	Install/Uninstall support file

UNZX32.EXE	Install/Uninstall support file

INSTALL.TXT	Install/Uninstall support file

SPEC310.FAQ	Sinclair ZX Spectrum FAQ 3.10

ZX32.EXE	Main executable

ZX32.CNT	Help support file

ZX32.FT*	Help support file

ZX32.GID	Help support file

ZX32.HLP	Help file

ZX32.URL	Internet shortcut

ZX32SX.DLL	Shell extension

*.ZXS	ZX Spectrum RIFF files

The ZX Spectrum Emulator installation executable is compatible with programs that read the standard ZIP file format. If your copy is missing one or more of these files, it may be damaged or incomplete.

Related Topics


UnInstallation

Follow these steps to remove the ZX Spectrum Emulator from your computer.

1.	Click here  [image]  to open the Add/Remove Programs Control Panel.

2.	Close the ZX Spectrum Emulator and|or this help file. If you uninstall the ZX Spectrum Emulator while it is running or this help file is open, some files may not be removed from your system.

3.	Select “ZX Spectrum Emulator 1.03”, then click the button marked “Add/Remove”.

Related Topics


A Brief History of the Emulated Machines

The Sinclair ZX Spectrum 48K made its debut in 1983, quickly replacing its immediate predecessor a 16K model and proceeded to become one of the most successful ‘home’ computers of all time. What made it an instant success? The rubber keys? The overheats? Its messy screen? What made it stand out from the VICs, the Dragons, the BBCs, the Ataris and the Orics of the time? I can’t tell. Beyond my wishes I joined in a few years later, when the dust in the format wars had settled. My guess is that the ‘Speccy’ as it’s known to its friends, had two irresistible factors going for it: Its sleek black case and its price. Using just a custom chip besides the Zilog Z80A CPU and an ingenious design the machine was able to offer much more than its price suggested.

Millions were sold anyway, and the first industry crisis after Christmas ’84 and pretenders to the 8-bit throne like the Commodore 64 and the Amstrad CPC464 weren’t able to touch the machine. Seer installed user base size countered for everything. Things weren’t so rosy for the company, nonetheless. Sir Clive Sinclair was busy inventing things like the microdrive (Sinclair QL owners are cursing him ever since) and the C5 (luckily, it flopped instantly and truck drivers don’t have one more reason to curse everyone), with no success. The QL was a bit ahead of its time apparently and the Spectrum+ was just a 48K with little legs and a real keyboard.

The British government’s promises in ’85 and the Spectrum 128 introduced at Christmas of the same year, couldn’t save the troubled company. At May ’86 the news spread like the plague: Sinclair Research was sold to its British computer industry arch rival, Alan Sugar’s Amstrad. I bought my first computer a month later. It was a CPC6128 surely enough.

Amstrad didn’t buy Sinclair to kill off the Spectrums and put its marketing muscle behind them in the subsequent years (CPC owners are cursing Sugar for this, ever since). The Spectrum +2 emerged promptly. It had 128K of memory like the machine it replaced, a better keyboard and a built-in tape deck. And it continued to sell by the lorry-load at the lowest (by now) end of the market.

16-bit computers were making a stand in ’87 and Amstrad introduced the +3 and +2A (the former with a built-in disk drive) as cheaper alternatives to its CPC6128 and CPC464. The machines were pushed again for Christmas (more curses from the CPC side) and made some more sales, even though it was obvious by now that Sinclair loyals were hating Sugar as much and more than the CPC’ers and the new machines exhibited some compatibility problems.

The 16-bit scene boomed and died (along with the ‘home’ computer scene) in the next few years. Eventually all former Speccy owners moved to other platforms. The machines’ cheap and cheerful design and software base made them obvious candidates for the evolving Eastern European market though, and the Speccy lived on. Arguably the machine will die a very slow death (if at all). People in the Eighties did not just buy ‘home’ computers. They fell in love with them. And first loves tend to stick with you for the rest of your life.

Related Topics


The Hardware

zx32 emulates all Sinclair ZX Spectrum models except the 16K (which was basically a 48K with limited memory and self life). The Spectrum 48K and Spectrum+ models are exactly the same since no notable hardware differences existed between them.

The basic storage medium for all models was the tape and all available software was distributed on it. The exception was the +3 which used 3” floppy disks but could still load from tape and did never really catch on apparently. In later years devices were available that could ‘freeze’ the machine, save its current state and restore it later (much as zx32 does when you select Save [F2]). Many standard file formats were defined to store digital copies of the tapes, disks and ‘snapshots’ on the PC. The emulator supports the most widespread of them, and will normally load them without further ado than a double-click. Subtle differences between models, inefficient file formats and the seer number of software titles available mean that this can’t be always possible.

Early Spectrum models had a really peculiar keyboard arrangement. The number of keys was limited and all kinds of combinations were necessary to get some characters on the screen. In addition, when in BASIC, a single key press could generate a whole keyword. 128K models could be programmed in a more standard way but, for compatibility reasons, keyboard arrangements remained basically the same. If the need for keyboard input arises, remember that: capital letters can be entered by holding down [CAPS SHIFT] (the left [Shift] key, by default); commas, periods and other symbols need [SYMBOL SHIFT] (the right [Shift] key); and Backspace is [CAPS SHIFT]+[0]. Some symbols (like the curly brackets) need an extended input mode: You have to press [CAPS SHIFT]+[SYMBOL SHIFT] first, then enter them with [SYMBOL SHIFT] pressed. You can display a keyboard layout help screen at any time using [Alt]+[F1].

The Spectrum 48K had no joystick port. Through the years 3 different joystick standards prevailed and the emulator supports all of them, using either the cursor keys and [Insert] or any joystick connected to your PC. The Kempston joystick interface became the de facto standard and is emulated by default. Should you face the need to change this option, check Joystick and Keyboard tabs in zx32’s Options [F9].

The original machine’s expansion potential was very limited. Nonetheless, a huge range of peripherals became available. They were typically messy to setup and often conflicting with each other. zx32 emulates none of them. Later models had standard serial and parallel interfaces, and zx32 may emulate loopback connections or an off-line printer attached to them. In any case, this emulator does not provide for any peripheral hardware except a joystick to be used with the emulated machines. I sincerely hope that this won’t limit your enjoyment in the least bit.

Related Topics


The Software

Software is what the Spectrum was all about. Sure other machines were faster, had better graphics and sound, but for every game available for them the humble Speccy had two (at least). Many weren’t good enough, others were and some are all time classics.

Your one stop search for software begins at ftp://ftp.nvg.unit.no/pub/sinclair. Do not expect an index to help you there or to be able to sample the titles in a few hours. This is simply not humanly possible. Ask a hundred people to name you their Top-100 Spectrum games and chances are that no single title will make it to all the lists. Go on, determine for yourself. But when you start, remember that other members of your family should get to use the PC, too.

Related Topics


Features (Lack of)

Rather than a list of program features (these are readily discoverable and not much to talk about anyway) here is a list of features that zx32 lacks:

•	Sinclair Interface I/II, Sinclair ZX Printer, 128K keypad, Mirage Microdrive, MGT Disciple/+D disk interface, Romantic Robot Multiface I/128, AMX Mouse support.

•	Implementation of undocumented Z80 flags (and correct implementation of the official ones, in some cases).

•	Built-in debugger/monitor.

•	Real Disk Drive/Printer/Tape support.

•	ACH, MDR, PRG, RAW, SEM, SIT, SNX, SP, SPC, ZX file format support (Z80 snapshots that rely on un-implemented hardware, non-RIFF ZXS files and Warajevo TAP files are not supported either.)

•	Support for 4/24/32-bit color resolutions.

•	Sound output through the PC Speaker and/or an AdLib-compatible sound card.

•	Beta testers and a price tag · .

Related Topics


Quality Assurance (Complete Lack of)

The following people were involved in providing Quality UnAssurance™ for zx32, in chronological order:

•	Manolis Koukaras: Downloaded some files for me to test the emulator with. I asked for 48K snapshots. I got tape images (and as a bonus, some of them 128K-only). zx32 from then on, provides for TAP files. 128K support took a bit longer.

•	Panos Malakoudis: Pointed out to ME, that Virtual Gameboy/OS2  (VGB/2) sometimes had trouble when saving. That’s how zx32 acquired its somewhat longer “ZX Spectrum Emulator for Windows 95” title.

•	Thodoros Kolliopoulos: (Author’s note: This is a long-winded one so pay attention) It was a rainy December afternoon when I decided to visit Thodoros, an old friend of mine. I was a little excited; I had just finished a new version of an emulator for the old Speccy, and an opportunity to show it to someone else.

 Floppy disk in hand, I knocked on the door. He welcomed me with a smile. “What’s happening?”, he asked. “Well, I’ve been doing some work on an emulator for the Spectrum. Here’s the ZIP file.” He inserted the floppy in his computer’s 3½ drive. After starting Explorer and peeking at the disk contents, he took a blank stare at me: “How do I install it?”…

Half a minute spent at playing Manic Miner, came the expected follow-up question: “That’s nice, but I have a cool Coleco emulator for DOS to show you. How do I remove this thing?”

The moral of this story is, that emulators (those who go by the name of zx32, in particular) should come with a built-in Install/Uninstall feature.

•	Axilleas Kapartzianis: Installed the program on his hard disk and kept it there for a record-breaking 2 weeks, without actually running it. This has inspired me to continue development of the emulator.

•	Axilleas Mitsikos: After playing Zynaps for a while, he asked for something similar to Sega Rally. Since then I have started work on saturn32 · .

•	Panos Malakoudis (again) and Christos Papaterpos: “There’s a hole in our kitchen’s roof where cockroaches abide,” said Panos to his roommate Christos. “Only, they’re brown and they fly. Only they don’t fly but they jump very high. We’ve got to exterminate them”…

fsssssttt… fsssssttt…

Tons of pesticide sprayed all over the place, did nothing but emphasize the fact that a program’s development cycle is not complete until the beta-testers (or is it bug-hunters?) have participated in it.

•	Andrew Cadley, Derek Jolly and Paul A. Hodgson: Here are a few excerpts from a discussion on zx32 in comp.sys.sinclair:

“If I try and switch to either the +2A or +3 emulation, NT crashes with a memory dump.  All the other machines work fine.” - Derek Jolly

“Well if it crashes when +3 is selected then the majority of people would probably say its a good emulation · ” - Paul A. Hodgson

“Ha, ha. Trust it to be those two that don't work properly (perhaps the

emulator is even better than I thought · )” - Andrew Cadley

“Yep, it seems to be emulating the true incompatibility perfectly. · ” - Derek Jolly

It’s quite obvious I believe, that even stray bugs can be regarded as ‘features’ and please people no end.

•	Panos Malakoudis (yep, you’ve seen that name before): “Let’s see then what this chip can really do” I said. “I think I have a beta of zx32 with me.”

Three days ago I had gone by Panos’ place to watch a basketball game on TV. He was desperate, trying to get a couple of graphics cards sporting NVidia’s Riva 128 chip to work at all. “I’ve spent days trying any Windows 95 version or Windows 98 beta with any driver for the chip available, with no success. I have these hot CDs a friend gave to me and I CANNOT USE THEM!” he cried. “Well, I wasn’t aware that ‘adult’ CDs use 3D acceleration nowadays” I replied.

As it turned out, DirectX 5 doesn’t behave itself unless you pretend to be a U.S. citizen (and video CDs can do with MPEG acceleration only · ). By the time we discovered that the Riva can stretch and interpolate Speccy screens as effortlessly as naughty videos, Panos knew by heart the effect of every BIOS and Windows system setting, plus how to recover lost partition tables on any hard disk…

Related Topics


A Message in Greek

If no other topic in this help file seemed like Greek to you, wait till you get a load of this*:

Aí ðåñéìÝíáôå åäþ ìçíýìáôá ãéá ôçí Åëëçíéêüôçôá ôçò Ìáêåäïíßáò ìáò, îáíáóêåöôåßôå ôï.

ºóùò âÝâáéá, ìéáò êáé ðñüêåéôáé ãéá åëåýèåñá äéáèÝóéìï Åëëçíéêü ëïãéóìéêü, íá ðåñéìÝíáôå åäþ, Ýíá ôñßùñï âßíôåï ìå ôç ãéáãéÜ ìïõ ñéãìÝíç óå ðçãÜäé íá ðåñéãñÜöåé ôçí ðåñéÞãçóÞ ôçò óôï http://www.nvg.unit.no/spectrum, áëëÜ äõóôõ÷þò ç ãéáãéÜ ìïõ äåí æåé ðéá êáé ôï site ìåôáêüìéóå.

Áí åëðßæáôå óå ìéá, óýíôïìç Ýóôù, âïÞèåéá óôá ÅëëçíéêÜ, êáëýôåñá íá îåóêïíßæåôå ôá (Åëëçíï · )ÁããëéêÜ óáò. ºóùò üìùò äéáèÝôåôå õðïìïíÞ êáé åðéìïíÞ, Ý÷åôå ôåëåéþóåé ôï Äçìïôéêü (Ýóôù êÜðïéá áðü ôéò ðñþôåò ôÜîåéò ôïõ) êáé ç ãëùóóïðëáóôéêÞ óáò éêáíüôçôá åßíáé åöÜìéëëç íçðßïõ (îÝñåôå, íéíß ôï íéíß… ðéóß ôï ðéóß), åíþ ç åîïéêåßùóÞ óáò ìå üñïõò ÐëçñïöïñéêÞò îåðåñíÜ áõôÞ ðéèÞêïõ ìðñïóôÜ óå ðëçêôñïëüãéï*. Áí ëïéðüí ðëçñïßôå ôéò ðñïûðïèÝóåéò êáé åßóôå êÜôï÷ïò ¢ããëï-Åëëçíéêïý ëåîéêïý ôóÝðçò (ü÷é áðáñáßôçôï), ôüôå åðéêïéíùíÞóôå ìáæß ìïõ ãéá íá õëïðïéÞóïõìå áðü êïéíïý ôïí Æ× ÓðÝêôñïõì Åîïì/ôÞ ãéá Ìßêñïóïöô ÐáñÜè. åíåíçíôáêÜôé.

Áí, ôÝëïò, óôç âéâëéïèÞêç óáò ðåñéóóåýåé êÜðïéï Åëëçíï-Áããëéêü ëåîéêü Þ êÜðïéá “ÅéóáãùãÞ óôç ãëþóóá ðñïãñáììáôéóìïý C”, ôüôå åðéôñÝøôå ìïõ íá óáò ãíùñßóù Ýíá õðïøÞöéï ðáñáëÞðôç...

¸ôóé êé áëëéþò, åõ÷áñéóôþ ãéá ôçí ðñïóï÷Þ óáò.

ÂáããÝëçò ÊáðáñôæéÜíçò


A Unicode version of the Arial font is needed for this topic to display properly. Knowledge of the Greek language would be preferred if you’d like to read it.


Áðü ôá  áíåðáíÜëçðôá åîþöõëëá ôïõ PCW ãéá ôá ìç÷áíÞìáôá ôïõ èåßïõ Clive.


Åßíáé ßóùò ëõðçñü ôï öáéíüìåíï üôé ôá üóá áíáöÝñèçêáí, áöïñïýí ôï “ðñïçãìÝíï” ôìÞìá ôçò ÐëçñïöïñéêÞò óôç ÷þñá ìáò. Åßíáé ôá Üôïìá ðïõ óôç äåêáåôßá ôïõ ’80, “åéóÞãáãáí” ëïãéóìéêü ãéá ôïí Spectrum êáé ôá Üëëá home ìç÷áíÞìáôá êáé “áöáéñïýóáí” ôçí üðïéá ðñïóôáóßá, áíôéêáèéóôþíôáò ôï üíïìá ôïõ áëëïäáðïý cracker ìå ôï diko tous. Óôç óõíÝ÷åéá ôá ðñïùèïýóáí óôïí çëåêôñïëüãï ôçò ãåéôïíéÜò ôïõò (ðïõ äéÝèåôå óôçí áãïñÜ êáé ôá ìç÷áíÞìáôá) áëëÜ êáé óôçí åðáñ÷ßá, üðïõ áíÜëïãá  “ëáìðñïß” íÝïé åöÜñìïæáí åðßóçò åðéôõ÷þò ôïí áëãüñéèìï ‘áíáæÞôçóç ïíüìáôïò - áíôéêáôÜóôáóç ïíüìáôïò - äéÜèåóç ðáñáêÜôù’.

Óôï ìåãÜëï áíôßóôïé÷ï ôìÞìá ðïõ èåùñåß áêüìç ôï MSDOS 4 áíáîéüðéóôï êáé ðéóôåýåé üôé äåí õðÜñ÷åé ëïãéóìéêü ðïõ íá áîéïðïéåß ôéò äõíáôüôçôåò ôïõ 80286, äåí èá Þèåëá íá áíáöåñèþ.


Technical Tips

Note All registry values specified in the following paragrpaphs can be found under the ‘HKEY_CURRENT_USER\Software\VK\zx32\1.03’ key. A setting of FALSE is equal to ’00 00 00 00’. Any other setting is equal to TRUE (’01 00 00 00’ will do).

•	There’s more to the way files are handled in zx32 than is apparent at first glance. This emulator manages files quite differently than any other Spectrum emulator in the scene, I believe. For a detailed explanation of why this is the case refer to Technical Notes.

To start off with you should know that holding down [Shift] while opening a disk or tape image will prevent any reset or automatic loading from taking place. In addition, this guarantees that disk and tape data can coexist and remain in memory until replaced. You should also keep in mind that tape and disk files are not updated directly (i.e., changes to the disk or tape image in memory are not reflected to the files on your hard disk), but you can use the Save As option to export data to CPD|DSK and TAP files at any time. The last thing to remember is that although data may remain in memory, they may be lost as far as ZXS files are concerned. If you press Reset [F5] while loading a tape, for example, and subsequently Save As to a ZXS file, tape data will not be appended. You can hold down [Ctrl] while clicking Save to force existing data to be appended regardless of what zx32 may have decided to do with them.

It may all seem very complicated at first but it works smoothly for me and I believe it will do so for you too, if you give it a try. Trying to cater for novices and experienced users alike and for all the file formats zx32 supports using just three options (Open, Save and Save As) is no simple thing. If you have a simpler approach in mind or find out things don't work as they should, let me know.

•	There are a few more features that will help you to create RIFF files for distribution: You can hold down [Shift] while saving to prevent memory image data from being appended to the file (this way you can create tape- or disk-only RIFF files); and you can set the registry value bFDCSaveHack to TRUE (this will allow saves while the emulated disk motor is on but the status of the floppy disk controller is READY).

Although I have not done so for some of the files currently distributed with zx32, it is recommended that you do not create snapshots while the DISK or TAPE indicator is lit. Tape ROM patches may change in the future, and even if the status of the emulated floppy disk controller is READY, trouble may arise when the snapshot is loaded at a later date.

•	As already noted the preferred way of updating CPD or DSK disk images is by using the Save As dialog. An unsupported method of updating them directly does exist, however. Select +3 as the default Spectrum model and press Reset [F5]. Following that you can press [Alt]+[Insert] to select a disk image file that will be ‘inserted’ in the emulated drive and updated directly, and [Alt]+[Delete] to ‘remove’ it.

If you set bTwoDrives to TRUE in the registry, then a second floppy drive will be emulated. You can use [Alt]+[Home] and [Alt]+[End] to ‘insert’ and ‘remove’ disk images from this drive.

•	I’ve tried to ensure that every change that zx32 makes to your system, is undone when the uninstallation procedure is finished*. There are still some things you should know about though, if you select to use the automatic uninstall method:

Changes in associations for cpd, dsk, sna, tap, z80, zip, zxd, zxs and zxt file types that may have happened in the meantime (i.e., by another Spectrum emulator), will be undone.

Snapshots that you saved with the same name as the ones created during installation, will be removed.

Any new snapshot files that you may have created, will not be removed.

•	Here is an outline of the features of each specific ZX Spectrum model in the emulator:

Model	Memory	ROM	AY-3-8912	uPD765A
ZX Spectrum 48K/+	48K	48K
ZX Spectrum 128	128K	128	+
ZX Spectrum +2	128K	+2	+
ZX Spectrum +2A	128K	+3	+
ZX Spectrum +3	128K	+3	+	+
•	The emulator can draw on your screen using an alternate routine that can speed up this operation up to 1000%. This mode is not automatically enabled however, since I cannot determine which video adapters can elegantly handle it at all times. It can be enabled by setting bDDrawVidBlt to TRUE in the registry.

This trick works if your display adapter can do BLTs in hardware (all accelerated video cards should be able to do it, but your display driver may not support it),  and the emulator window is at normal size. If you resize the emulator window though, screen refresh may be appallingly slow.

As I’ve already said, I can’t determine the exact capabilities a display adapter should have, in order to achieve optimal BLT speed at all times. I have managed to encounter a combination of display adapter and DirectX driver that can accomplish this though, and it was absolutely stunning: NVidia’s Riva 128 chip and its latest drivers, can do any frame rate zx32 can throw at them, at 1600 by 1200, 16-bit color, interpolated(!) and without raising an eyebrow (i.e., using 1% -2% of CPU time). I’ve seen it happen at 1280x1024 and all I can say is that the [not so - see Quality Assurance (Complete Lack of)] lucky owner is NOT WORTHY!

•	If you abhor the ‘PAUSED’ bitmap or prefer to do screen captures the hard way, then change bPausedInfo to FALSE in the registry.

•	If you select to emulate a Cursor joystick using the cursor keys, then CAPS SHIFT will be pressed for you automatically, too. This is really handy in BASIC, but can cause problems in other programs. It does not happen if you emulate a Cursor joystick with the PC joystick though, and you can disable it altogether by setting the registry value bShiftedCursor to FALSE.

•	If you are using TZX files frequently, then disable Simultaneous Key Press Matrix Effect in Options. This setting doubles the response time to a ULA input request, and disabling it will reduce CPU overhead and help you achieve a better maximum emulation speed (which is the recommended speed when loading TZX files · ).

•	zx32 counts the time spent in various parts of the emulation code. You can display these values by pressing [Alt]+[D]. You should take into account though, that on multitasking operating systems, these numbers can be nothing but indicative. If sound support is enabled, for example, all percentages will increase accordingly. Keep in mind, also, that this ‘feature’ is meant to be used for debugging purposes so screen corruption and other glitches should be expected.

Here is an explanation of the acronyms used:

FPS	Frames Per Second. Note that the emulator constantly updates your display even if the contents of the Spectrum screen haven’t changed at all.
CPU	CPU percentage allotted to the emulator that is actually used. This value is also displayed on the status bar.
Z80	Time spent emulating the Z80 processor. Values may vary wildly depending on the executed instruction mix.
ZLT	Percentage of processor time used to translate the Spectrum screen layout (what a mess!) to an 8|16-bit color bitmap. The translation happens every time a frame is displayed, even if the Spectrum screen contents haven’t changed at all.
RLT	Border update time. The border is built pixel by pixel even if it’s single color all the way. This happens only in fullscreen mode and will be avoided if unnecessary, though.
BLT	BLT time. This value may not be accurate if your display driver supports asynchronous blit operations.
SND	Sound buffer update time. Total CPU time for sound support may be 5% to 25% higher, depending on your sound card, DirectX driver and CPU speed.
JOY	Time spent polling the joystick.
•	You can quickly reset to a Spectrum+, +2 or +3 model using [Ctrl]+[Alt] and [1], [2] or [3] on the numeric keypad.

•	Here are some other shortcuts to features that you may find useful, but do not have equivalent menu options and are not documented in Tips of the Day:

[Alt]+[T]	Displays the Browse Tape Image dialog which allows you to set the virtual tape ‘head’ position at (almost) any time.
[Alt]+[U]	Allows you to fiddle with ULA delays. The effect of the numbers you enter in this dialog is difficult to explain in a paragraph (they are more of a delay duration alignment than actual delay values). You should treat them as a magic numbers (and try 64, 96 or 128 for the second one, first).
[Alt]+[X]	Displays the subset of your system’s DirectX capabilities that zx32 can use for better performance.
[Alt]+[F10]	Changes the default model to the next available, and resets the emulated Spectrum.
[Alt]+[Pause]	Pauses or restarts the emulated tape when a TZX file is loaded.
Related Topics


In particular, the installation of zx32 on your system and an ensuing uninstallation procedure will not

“update” your system DLLs with older or buggy versions,

dump several megabytes of files in the SYSTEM and various other folders on your disk and then “forget” to remove them, and

leave behind program, system and file association entries in the registry.


The ZXS File Format

With version 0.99 of zx32 a new file format (ZXS) was introduced, and enhanced in versions 1.01 and 1.02. This is meant to replace all the other Spectrum-related file formats in existence (NOT! · ). ZXS files use the Resource Interchange File Format (RIFF). The following is an excerpt adapted from the Microsoft Multimedia API (MAPI) Programmer's Guide.

RIFF files use four-character codes to identify file elements. These codes are 32-bit quantities representing a sequence of one to four ASCII alphanumeric characters, padded on the right with space characters.

The basic building block of a RIFF file is a chunk. A chunk is a logical unit of multimedia data, such as a single frame in a video clip. Each chunk contains the following fields:

•	A four-character code specifying the chunk identifier

•	A doubleword value specifying the size of the data member in the chunk

•	A data field

The following illustration shows a "RIFF" chunk that contains two subchunks

A chunk contained in another chunk is a subchunk. The only chunks allowed to contain subchunks are those with a chunk identifier of "RIFF" or "LIST". A chunk that contains another chunk is called a parent chunk. The first chunk in a RIFF file must be a "RIFF" chunk. All other chunks in the file are subchunks of the "RIFF" chunk.

"RIFF" chunks include an additional field in the first four bytes of the data field. This additional field provides the form type of the field. The form type is a four-character code identifying the format of the data stored in the file. For example, Microsoft waveform-audio files have a form type of "WAVE".

"LIST" chunks also include an additional field in the first four bytes of the data field. This additional field contains the list type of the field. The list type is a four-character code identifying the contents of the list. For example, a "LIST" chunk with a list type of "INFO" can contain "ICOP" and "ICRD" chunks providing copyright and creation date information. The following illustration shows a "RIFF" chunk that contains a "LIST" chunk and one other subchunk (the "LIST" chunk contains two subchunks).

ZXS files have a form type of "SNAP". Subchunks that are defined, for now, are:

"fmtz"	File format information #define ZXM_DEFAULT_    0 #define ZXM_048K____    0x0010  // ZX Spectrum 48K (Model 2) #define ZXM_048K_P__    0x0020  // ZX Spectrum +   (Model 3) #define ZXM_128K____    0x0030  // ZX Spectrum 128 #define ZXM_128K_P2_    0x0040  // ZX Spectrum +2 #define ZXM_128K_P2A    0x0050  // ZX Spectrum +2A #define ZXM_128K_P3_    0x0060  // ZX Spectrum +3 #define ZXH_NONSTANDARD 0x0001  // peripheral hardware #define ZIP_STORED      0       // compression methods #define ZIP_SHRUNK      0x0001 #define ZIP_REDUCED1    0x0002 #define ZIP_REDUCED2    0x0003 #define ZIP_REDUCED3    0x0004 #define ZIP_REDUCED4    0x0005 #define ZIP_IMPLODED    0x0006 #define ZIP_TOKENIZED   0x0007 #define ZIP_DEFLATED    0x0008 #define ZIP_NOTZIPPED   0xFFFF typedef struct _ZIPCHUNKHEADER                {                DWORD dwSize     // structure size                DWORD dwCRC32;   // crc                DWORD dwLength;  // uncompressed size                } ZIPCHUNKHEADER; typedef struct _FMTZ                {                WORD  wVersion;                WORD  wHardwareModel;                WORD  wHardwareFlags;                WORD  wCompressionMethod;                } FMTZ; wVersion is the file format version, with the high-order byte specifying the major version number and the low-order byte specifying the minor version (revision). The current file format version is 0x0101 (i.e., 1.01). In general, an emulator shouldn’t attempt to read the rest of the subchunks if the major file version is greater than the one it knows about. The user should be warned if the minor file version is greater than the one supported. Additionally, the value stored should be the lowest possible. For example if disk subchunks are not present 0x0100 (1.00) should be used. wHardwareModel specifies the Spectrum model. If a Model 3 48K Spectrum is emulated this value should be ZXM_048K_P__. If this value is undefined (model-specific subchunks are not present), then ZXM_DEFAULT_ should be stored. wHardwareFlags is used to represent the existence of any peripheral hardware devices like the Sinclair Interface I. Only ZXH_NONSTANDARD can be specified in v1.01-. If any non-standard device is actually used, NOT just enabled, emulators should set this flag and store any device-specific data in their own subchunk (refer to the definition of the "zx32" subchunk, later on, for details). wCompressionMethod specifies the ZIP-compatible method used to compress data subchunks (RAM pages,  the tape image and the disk images in v1.01-). If this value is not ZIP_NOTZIPPED, then all data subchunks should be compressed and stored prefixed by a ZIPCHUNKHEADER structure.
"rZ80"	Z80 processor registers typedef struct _RZ80                {                WORD   zFA; WORD   zBC;                WORD   zDE; WORD   zHL;                WORD  _zFA; WORD  _zBC;                WORD  _zDE; WORD  _zHL;                WORD   zIX; WORD   zIY;                WORD   zPC; WORD   zSP;                BYTE    zI; BYTE    zR;                BYTE zIFF1; BYTE zIFF2;                BYTE   zIM;                                   DWORD dwTicks;                } RZ80; dwTicks is the number of the Z80 clock ticks elapsed since the last interrupt occurred. The function of the other members of this structure should be obvious.
"r048"	48K I/O buffer typedef struct _R048                {                BYTE bufULA;                BYTE bufKey[8];                } R048; bufULA holds the last byte written to a ULA port and can be used to determine the border color. The lowest five bits of each byte in bufKey represent the state of the corresponding half-row of Spectrum keys. If a bit is SET the key is pressed.
"r128"	128K I/O buffer typedef struct _R128                {                BYTE buf7FFD;                BYTE bufFFFD;                BYTE bufPSG[16];                } R128; buf7FFD holds the last value sent to port 0x7FFD and can be used to determine the memory organization in effect. bufFFFD is the last byte written to the AY-3-8912 control port and bufPSG holds the values in the corresponding registers of this chip.
"r+3 "	+2A|+3 I/O buffer typedef struct _RPL3                {                BYTE buf1FFD;                } RPL3; buf1FFD holds the last value sent to port 0x1FFD and can be used to determine the extended memory organization in effect. This structure will be expanded in the future to include status buffers for ports 0x2FFD and 0x3FFD (the uPD765A control and data ports).
"ram0".. "ram7"	Memory pages For 48K snapshots "ram5", "ram2" and "ram0" subchunks should be present. They should hold the memory contents at address 0x4000, 0x8000 and 0xC000 respectively. For 128K snapshots all memory pages must be present, even if they are empty. Note Memory pages are data subchunks and may be compressed.
"tape"	Tape image typedef struct _TAPE                {                DWORD dwCurrentPosition;                DWORD dwRemainBlockLength;                DWORD dwDataSize;                BYTE  cbData[1];                } TAPE; The format utilized for cbData is the TAP file format, as defined by Gerton Lunter for the Sinclair ZX Spectrum Emulator Z80, and adopted by many other emulators. dwDataSize holds the size of cbData. dwCurrentPosition is the offset in cbData of the next byte to be read and dwRemainBlockLength represents the byte count from that position until the end of the current block. Note The tape image is a data subchunk and may be compressed.
"dsk0".. "dsk1"	Disk images These should reflect disks inserted in drive 0 and 1 respectively. The presence of "dsk1" is not recommended unless absolutely necessary. In fact it shouldn’t be present unless "dsk0" already exists. I’m not making the same mistake I did, in defining extra data and a specific format for the "tape" chunk, again. Any file format can be used as long as its first 4 bytes allow it to be uniquely identified. Disk-controller-specific data like head position and  motor status will be defined in the future either by expanding the "r+3 " structure or in a separate "rfdc" subchunk. zx32 currently supports DSK (signature "MV -") and uncompressed CPD (signature "NORM") data formats. These are used in Marco Vieth’s CPCEMU and Bernd Schmidt’s  CPE Amstrad CPC emulators, respectively. The DSK format is highly recommended since it’s very versatile and more widely supported. Note Disk images are data subchunks and may be compressed.
"zx32"	Reserved for use by zx32 Other emulators can reserve a subchunk for their own requirements, provided that the name selected: • matches closely the name of the emulator, and • is not in conflict with the ones already defined here, or may be defined in the future for common use. For example, "rfdc" and "mdr " are not good ideas. In general any signature using all upper-case letters should be avoided, since these types of signatures are usually defined for use in all RIFF chunks. Please contact me if you’d like to reserve a subchunk or define one for common use. Do NOT feel free to extend the file format to suit your needs, in any other way.

All structures are packed at an 1-byte boundary (that is, alignment of structure fields is disabled), and values are stored with LSB first (this is inherent in the RIFF specification - subchunk sizes are stored this way, too). As any structure may be expanded in the future, data should be loaded based on the supported structure size and not the size of the subchunk. For example

    mmioRead(hmmio, (HPSTR)&fmtz, ck.cksize);           // WRONG!

    mmioRead(hmmio, (HPSTR)&fmtz, sizeof(FMTZ));        // CORRECT

Subchunks may be saved in any order. None of them is required, but the presence of one may imply the presence of another. If "r048" is present then "rZ80", "ram5", "ram2" and "ram0" need be present, and "r048", "rZ80" and "ram0".."ram7" must be included with "r128". The presence of the "fmtz" subchunk is strongly recommended. It is definitely required if compression is used, a +2A or +3 is emulated or any non-standard (i.e., all of them · ) hardware peripheral is present. I have to state again here, that the file version number stored should be the lowest possible.

The ZXS file extension is not obligatory, but the “zx” prefix is, in order for the file type to be clearly related with a ZX Spectrum emulator. For example, if only the "tape" chunk is present, the extension could be ZXT or zxtape. ZXD or zxdisk are the recommended extensions for disk-only files.

The only compression methods supported by zx32 are ZIP_STORED and ZIP_DEFLATED. The rest of the compression methods are old and inefficient and their use limited by copyrights and patents. They are defined and can be used if necessary, nonetheless.

Since version 1.03, zx32 supports standard "INAM", "ICOP", "ICRD", "IGNR", "IKEY" and "ICMT" subchunks of LIST chunks with a list type of "INFO". Most of them are useful mainly to search engines; any other standard subchunk may be used; and the Comments("ICMT") subchunk should be able to cover a large area of needs. It’s highly probable that no extra information subchunks will be defined, therefore.

Revision History

In version 1.01 of the file format specification "dsk0".."dsk1" subchunks are defined.

In version 1.00 "fmtz" and "r+3 " subchunks were defined.

Related Topics


Technical Notes

Here are some notes about the past, present and future of zx32. I’ve written them in a fairly formal tone, since I think I can impress simple-minded people more easily this way · .

Design Philosophy

This emulator aims to be primarily an emulator for people that have never owned a real ZX Spectrum or if they did, they couldn’t follow anything but the simplest loading instructions. The design tries to adhere to the Windows 95 Interface Guidelines while still retaining an emulator approach and compatibility with existing file formats and trends.

There are hundreds of thousands of people who used to own a real Spectrum machine, but let’s face it, there are a thousand times more ones who didn’t [and more are born every minute · ]. I believe it has been proved, that it’s the software available for it that makes or breaks a computer system. Surely enough, the Speccy didn’t break and there are MBs of data at NVG [especially in that ‘incoming’ directory · ] to certify it. There were some brilliant moments in Speccy gaming software that deserve to live on. On the other hand the machines themselves are long dead, and I don’t think anyone would use them for serious work if they could afford to do otherwise. Furthermore, their user interface isn’t what you'd call ‘friendly’ these days.

My aim, since the first day I started work on zx32, was to create an emulator for  the Windows 95 environment, not one that would just run on it. I wanted the user to be able to have a peek at computer gaming history with the minimum of hassle, not create an environment for him to run a real word processor instead of the puny Microsoft attempts. You be the judge of whether I have succeeded or not. Please, do not complain if you find that zx32 is not able to let you load your dusty tapes [and wait for them to do so, the exact time they used to · ], debug your Z80 code, print to your Sinclair ZX Printer or run it on your 386 processor. My ten year old nephew, after all, doesn’t.

File Formats

While zx32 will load from and save to established snapshot formats (that is SNA and Z80) and support and use internally widely adopted disk|tape image formats (CPD, DSK and TAP), the introduction of a new file format was really necessary if design philosophy criteria were to be met.

This emulator supports ZX Spectrum models that the other snapshot formats weren’t designed to handle, and besides that my impression is that these formats were meant to be an easy way to store internal data structures, without considering how another emulator might use them, or future expansion in mind. The file format I’m proposing provides for version numbering, extensible data structures, exact hardware peripheral description, additional hardware models and a way for emulators to store information for their own use that others may safely ignore.

Additionally the user of a modern windowed environment (and this doesn’t refer to Windows 95 specifically) is used to selecting Save to commit any changes that were made to a ‘document’ or using Open to restore this ‘document’ to the exact state it was when saved. This wouldn’t be true if a program changed data on a disk image without the user’s intervention or a further selection of tape|disk images and emulated hardware would be required whenever a snapshot was loaded.

Finally the established extensions for tape|disk images may be used to contain either data that is irrelevant to the ZX Spectrum or in an entirely different format. For example CPD is primarily used to store Amstrad CPC disk images and DSK and TAP are commonly used to store all types of disk and tape images in incompatible formats. My aim is to use ZXD|ZXT and zxdisk|zxtape extensions for RIFF files that encompass these file formats, can use ZIP-compatible compression and may contain minimal information of the hardware required.

I’m not claiming that my file format specification solves all the problems mentioned, I’m still developing it and I believe now that some basic decisions I’ve made in the past were wrong, but I think that it’s a step to the right direction.

Direct Hardware Support

This emulator does not, and never will, provide for ZX Spectrum hardware connected to the PC in some way or another. Doing so would not conform to it’s design philosophy and ease of use. Furthermore, this would not be possible on the multitasking and|or protected operating systems it’s designed to run on.

Finally, there are shareware MSDOS emulators of the ZX Spectrum, that are excellent in this respect and more suited to the task. To be frank, even if there was an easy way to implement direct hardware support in zx32, I wouldn’t do it. There are people who think that you should pay for the privilege, and although I may disagree, I have to respect their pioneering work in creating the ZX Spectrum emulator scene and documenting the way for the rest of us to follow.

Execution Speed

I have to admit that zx32 isn’t as fast as I would like it to be. My initial aim was for it to be able to run on any platform that could support Windows 95 with a minimal degree of comfort, that is a 486SX/25 with 8MB of memory and a half-decent video card. This was approximately true for earlier versions that emulated a 48K Spectrum and had no support for sound output or video synchronization. Version 0.97 introduced ROM protection and decent sound support, version 0.98 did the same for high video synchronization, version 0.99 had 128K support and I’ve never looked back since.

As any programmer could testify, code running in protected mode under a multitasking windowed operating system will be 25% or more slower than under real-mode MSDOS. RAM paging (for 128K support) and ROM protection are hard to implement, without a significant speed degradation, if no help from the processor is available. Additionally, the emulator has to maintain at least two threads most of the time: one that emulates the Z80 processor and ZX Spectrum hardware, and one that responds to Windows messages. Depending on the hardware present on the PC and DirectX support for it, other zx32-specific threads that update the screen asynchronously, mix sound buffers and produce sound, may be running.

Even when running in a default-sized window in 256-color mode the emulator has to shift 4 times as much data per screen frame, that MSDOS-based emulators do (8-bit instead of 4-bit color is used and the ZX Spectrum screen is translated to a 256-color bitmap buffer that is afterwards copied to video memory). You can double this amount for 16-bit color displays and quadruple it for full screen mode, since this runs in 640x480 and 256 colors. Besides that, even if the default sized window is used, refreshing, say, an 800x600 display at 75Hz, requires much more work on the part of the video hardware, than 320x200 at 60Hz. It may introduce a huge number of wait states on video memory accesses, if a slow, non-VRAM-based chipset is used. By roughly approximate calculations, 20MB/sec of screen data have to be processed (not just shifted) for the emulator to run at 50fps in full screen mode. Around 15MB of this have to be transferred to video memory, so ISA cards are way outclassed.

Sound support can be another bottleneck that can consume more than 20% percent of the total CPU time allotted to the emulator and DirectSound components, if an ISA sound card (this is the vast majority) is present and|or no hardware sound buffer mixing is available. An additional 10% is required when the AY-3-8912 programmable sound generator is emulated, as the output of this chip has to be synthesized in software (not emulated using another hardware FM-synthesizer).

Sound and video bottlenecks can be eliminated if hardware acceleration exists for the devices used, but some user intervention may be required. For detailed information on how zx32 handles bottlenecks refer to Revision History and Technical Tips.

The Issue 2|Issue 3 Issue

Can anyone confirm that there really exists a difference between these Spectrum models? Gerton Lunter states so in his documentation for Z80, and every other emulator implements it, so the question might seem a bit ludicrous, but I think it isn’t.

My experiments with Abu Simbel Profanation indicate that bit 5 · (value 64) of IN-port FE, simply reflects the MIC output if the line is silent. Spinads that Gerton mentions, leaves the MIC output bit enabled and expects a matching input (I think), and surely the programmer of Abu Simbel didn't expect the Spectrum model to change while the program was running (a continuous Issue 2|Issue 3 toggle is required on Z80 and all other emulators for it to behave correctly).

I haven’t researched this any further, but my guess is that all programs that require ‘Issue 2’ on other emulators, will work correctly with any emulated model in versions 1.02.0920+ of zx32 (if  the Spectrum activates the MIC when the EAR is written to, as Gerton additionally states). If this is not the case, please let me know.

Bugs

There is no denying the fact that there are bugs creeping in the dark corners of this emulator’s code. I’ve been developing zx32 at a hectic pace, releasing a new version every month, constantly adding new features and polishing the existing ones, working almost exclusively at late hours. Naturally, this left me no time to spare debugging existing code. Moreover, I’ve had but a few decent bug reports in all this time.

If you ever did any programming, you‘ll know that the easier a program is to use, the harder it is to develop. This deceiving simplicity on the surface leads many users to consider bugs things that have nothing to do with the program at all. Never mind corrupted snapshots, bad tapes, inefficient file formats, hardware that other emulators support but zx32 doesn’t, bugs in other programs (ddtrans, spconv and others), specific model requirements or non-existent hardware on the PC, if you double click on it and it doesn’t load successfully, then it’s sloppy programming on my part.

Anyway, if you spot one of these critters roaming around send me a report, detailing any information about your system you have available, but if you are going to complain, at least do it nicely, okay?

Related Topics


Known Bugs

The following list is only an indication of the amount of bugs that are known to creep in zx32 code.

•	Parts of the emulator windows and this help file, may not look exactly right if your display is set to use large fonts, or your appearance scheme is way off the standard one.

•	Error checking, especially where memory allocation is involved, is limited to say the least. The emulator loads all files in memory before any actual processing takes place on them. So, if you’re in the habit of concatenating all of your TAP files into a single one or want to open that Z80 file in the beginning of a 30MB ZIP, you’ve been warned.

•	The emulator window may remain black, if the system fails to produce icons for the recently used file list fast enough or the Spectrum emulation thread cannot begin for some reason. This bug is so old now, that it has acquired a nickname: “eternal blackness”.

•	Execution speed may some times be slower than normal. This seems to be the case if “eternal blackness” is barely avoided, the emulator window is not properly aligned in video memory, or just at random.

•	Help is not available when in full screen mode. This is due to DirectX-imposed limitations.

•	The emulator window disappears and cannot be restored if you request context-sensitive help in full screen mode.

•	Snapshots loaded from inside a ZIP file cannot be updated.

•	48K snapshots can be saved even if an 128K Spectrum model is emulated. Additionally, Z80 snapshots can be saved when a +2, +2A or +3 Spectrum is selected. In Microsoft speak: “This is not a bug. This is by design.”

•	Floppy disk support for the +3 is highly experimental. As an immediate consequence, snapshots saved while disks in the emulated floppy drives are accessed may not only fail to load but crash the emulator altogether.

•	Screen update may be horribly slow on Windows NT in windowed 256-color mode.

•	Sound support may fail to start, again on Windows NT.

Related Topics


Help Wanted

This emulator is relatively new on the scene and on many aspects does things its own way. Although it's getting friendlier with each release and its documentation getting larger (and hopefully clearer · ), there are still many features that aren’t well documented and shortcomings that need be addressed.

I haven’t actively supported zx32 in the past, and it will be virtually impossible to do so for a very long time in the future. I have tried to ensure that you can obtain the distribution packages at absolutely no charge, but I have other things to do and I’m hard to contact. For these reasons, I’m welcoming your help in supporting and developing the emulator. Here are the main points of interest to me, in no particular order:

•	If you’ve spotted inaccuracies in hardware emulation, then send me a report. Please be as specific as you can - at least specify the URL (i.e., ftp://here.or.there/.../somefile.zip) of the file in question, so that I can download and test it myself.

Bear in mind that if you simply notify me that “Ghosts'n Goblins doesn't work”, then chances are that it will continue to do so in the future. If, on the other hand, you send me a report like this one:

“Testing the 1.02.0716 [patch] on my 5100 (Win95), I saw something very strange. I was running Fighter Pilot (from your examples) when I noticed that the numeric output from Fighter Pilot (not the emulator!) was corrupted. Between 300 and 359 degrees, e.g., on the compass, the output showed 200-259 degrees. Fighter Pilot worked, I was able to land the plane OK, it was only numeric values on the display (compass, altitude, speed etc) that was corrupted in certain value ranges. The very same Fighter Pilot was quite OK with e.g. 1.02.0708.”

as Bengt Ekberg did, then the DAA bug will be fixed(?) in the next release · .

•	If you discover any other bug in the emulator, then please report to me the steps required to reproduce it. You should also detail any information about your system that you have available - at least specify zx32, DirectX and Windows versions.

•	If you are uploading ZX Spectrum software then

•	You may use ZXS snapshots or RIFF tape and disk images (ZXT and ZXD), if required. Please fill in all the details in file Properties, and check the Technical Tips topic for additional information.

Be aware that only zx32 supports these file formats for now and the situation is very unlikely to change in the future.

•	Do upload disk images. I don't believe that the contents of the disks/plus3/ NVG directory reflect the amount of software released on +3 disks. Furthermore, I can't test how trustworthy my uPD765A emulation really is now and I fail to see any reason to improve it, if no one actually uses this feature.

I can't tell you exactly how to make disk images of your existing floppies but you can try posting to comp.sys.amstrad.8bit. They do it all the time · .

•	For TAP tape images of programs that require a specific hardware model, append a short loader at the beginning, that behaves accordingly to the hardware model emulated

•	For disk images, use a 360K or 720K disk format instead of multiple files (if required), and make sure that the ‘DISK’ (or ‘*’) file needed to auto-load the disk, is present.

•	Finally, ensure that the main file (be it CPD, DSK, SLT, SNA, TAP, TZX, Z80, ZXD, ZXS or ZXT) is the first file in any ZIP archive that you may create, and this file is deflated or stored. This warranties that zx32 will be able to open it directly from inside the archive.

•	Please contact me if you'd like to help me improve zx32’s homepages or even better, maintain them yourself in the future.

•	If you are artistically inclined, I’d welcome icon redesigns, especially for the (uncharacteristic · ) 16 by 16 pixel ones.

•	If you are fairly technically minded, have a good grasp of the Windows 95|NT environment and would like to help other people with problems they may encounter installing or using the emulator, then drop me a note and I’ll list your e-mail address in the next release and in zx32’s homepages.

•	Topics in the Getting Started section of this help file are meant to refer to the history of the emulated machines and explain in a friendly and concise manner technicalities like joystick interfaces, model differences, snapshots, tapes and floppy disks. I believe that I’m not in the ideal position to write that section, and I would appreciate your help in improving or completely re-writing my rudimentary effort.

Some people may doubt it, but I can assure you that you’ll receive full credit for any of your work that I may use. If you’re interested, e-mail or write to me.

•	I'm still looking for answers to questions regarding exactness of hardware emulation in zx32. I’d be grateful if anyone with an intimate knowledge of ZX Spectrum hardware could provide me the following information:

•	When and how much exactly, the ULA holds the processor for each model.

•	+3DOS ROM patches that will speed up disk accesses.

•	Pointers to decent documentation for the uPD765A floppy disk controller.

•	An explanation of the Issue 2 and Issue 3+ model differences, if they exist at all. Refer to the Technical Notes topic, for details.

•	If you are a programmer and you would like to contribute to zx32 by developing a ‘satellite’ utility feel free to contact me and I’ll help you in any way I can.

In any case, if you like zx32, at least let me know. E-mail is fine and thanks again to all the people who’ve sent me any. I’d much prefer a postcard, if it’s not too much to ask · , though.

Related Topics


Revision History

Not all the versions whose numbers appear in the list below have been released publicly.

[1.03]

•	For a complete list of changes in this release, click here.

•	I can’t come up with yet another dumb line to introduce the latest bug fixes. Here they are, anyway:

Piotr Slawinski (a.k.a. Malyrules) pointed out that the difference in intensity between normal and bright colors was too great. Here’s what I did: I’ve used maximum (and then some · ) intensity for colors when scanlines are used in full screen mode and tried to approximate their perceived brightness for the default palette. Anyone tells me they are not bright enough now, and I’ll change them all to bright white · .

Two lines of code were in incorrect order in the SLT loader. File offset calculations were completely wrong, therefore. How did ever MontyPython.SLT work beats me, but both it and OUTRUN.SLT (and hopefully all other SLT files) load successfully now.

The emulator will no longer crash when loading Z80 v3.05 snapshots. This wasn’t entirely my fault, since there was no indication in the documentation for previous versions of the file format that a compressed block would never exceed 16KB in size. Indeed, I think it shouldn’t have taken so long for Gerton to realize that his compression scheme could in fact have negative results, if applied to data that have been tightly packed already.

Thanks to Damien Burke, Bengt Ekberg, Gerardo Oporto Jorrin, Mark Incley, Panos Malakoudis, Stuart Michie, Ken Teuchler and Lee Tonks (a.k.a. Blood) for reporting other bugs that were fixed in this version.

•	Still with me? Good! You may take a deep breath now while you have the time, because new features follow:

Properties for RIFF files are introduced in this version. A shell extension that can display them in Explorer will be included with zx32, from now on.

This version has scanlines and a real border (top, bottom, vertical resolution and all) in fullscreen mode. Screen update routines are totally revamped as a result and will be much slower if your display driver or video hardware is substandard. On the other hand, if your blitter hardware is up to scratch, the performance penalty should not exceed 2% for 50fps, at all times.

Very basic support for TZX files has been added. Blocks with IDs of 10, 11, 12, 13, 14, 15, 20, 21, 22 and 30 are handled, the rest are ignored for now. There isn’t much to tell you here that you can’t find out about it yourself, except that [Alt]+[Pause] pauses or starts the tape and that TZX data are destroyed as soon as you load another file and will not be attached to ZXS snapshots.

The toolbar is now flat. I’ve found out the new look is an acquired taste, but it saves on resources, rationalizes the Z-order a bit and it’s definitely the shape of things to come for Windows 98. The status bar is redesigned and has acquired the ‘flat’ look, too.

I've half optimized AY-3-8912 routines, so emulation is now slower(!). That’s because a lot less detail is dropped. I’ve also corrected the volume calculations to allow sampled tracks to be heard. All these changes were made possible by information provided by Gerton Lunter in the documentation for Z80 v3.05. This information on the AY-3-8912 chip, was collected by him from comp.sys.sinclair and mainly originated from Alastair Booker and Ian Collier.

The Save As dialog can be used to export tape and disk images to TAP and CPD|DSK files. You have to go through this dialog to export SNA and Z80 snapshots too. The emulator will save only ZXS files from now on, when the Save option is selected.

I’ve tried to increase functionality of the Open|Save|Save As routines since inexperienced users could be baffled sometimes. The icon for the currently open file type is displayed on the title bar; the default filename and directory is preserved if an action fails; and the extension changes to reflect the selected file type in Save As dialogs, among other enhancements.

I’ve also tried to rationalize the way files can be handled by experienced users. You can press [Alt]+[T] to position the virtual ‘tape head’ at (almost) any time and hold down [Shift] to prevent reset for disk and tape images, for starters. Check Techical Tips, for details.

ZIP compatible compression for RIFF files is here, as promised. Use the Compression slider in the File tab in Options to specify a compression level. Higher compression levels are much slower and will decrease file size by a few KBs at most. The default value should achieve the best tradeoff between speed and file size most of the time.

A lot of people suggested, hinted at, begged for · , or just gave me ideas for features (or other improvements) introduced in this version. Here are the ones that got lucky · : Blood, Damien Burke, Stefano Donati, Kriss, Malyrules and Scalman from Illusion, Alan Jones, Paul Jenkinson, Junior from Brazil, Panos Malakoudis, Stuart Michie, Graham Young, and Zani from Australia.

•	And that’s a wrap.

[1.02]

•	These are the most recent additions to the zx32 Hall of Bugs-No-More:

Due to a confusing statement in Gerton Lunter’s documentation for his Z80 Spectrum emulator (“Bit 5 (value 64) of IN-port FE is the ear input bit.”), ULA input wasn’t emulated correctly. As a consequence zx32 emulated something between a Model 2 and Model 3 Spectrum or neither at all times. This bug is fixed in this version (well, at least Abu Simbel Profanation does work), since I’ve noticed that the tape-loading ROM routine does an RRA before testing the value of bit 5.

The emulation of the AY-3-8912 programmable sound generator of the 128K Spectrums was shut down if the registers on this chip weren’t updated during an interrupt cycle. This affected programs, like La Abadia Del Crimen, that produce notes sparingly. From now on, two emulated seconds must pass since the last note, before music output is disabled.

Another AY-3-8912-related one: Programs like Robocop that did a lot of output to the chip during an interrupt cycle, trying to emulate sampled speech, would crash the emulator.

In previous releases of zx32, dark red displayed as black in the ‘PAUSED’ bitmap on some 16-bit color displays (15-bit, actually). This was “fixed” in version 1.01, but then white was visible where the bitmap should be transparent. In this version this oversight is corrected, too (hopefully · ).

In version 1.01, system colors weren’t set correctly when switching to full screen mode on 16-bit displays, until after a dialog box was closed. This was especially obvious on Windows NT, where black was the foreground and background color in menus and dialogs. In this release, zx32 will try to set system colors to their appropriate values, as soon as full screen mode is entered.

The Sound button on the toolbar wasn’t disabled even if no DirectSound supported sound board was present. Since I’ve eye-witnessed people pushing it repeatedly, hoping to get some noise out of thin air, this is the case no more.

Since some 128K Z80 snapshots crashed with the +2 ROM (Z80 doesn’t emulate this Spectrum model), the emulator will always switch to Spectrum 128 emulation when loading them.

The routine that updated emulator statistics depended on WM_TIMER messages to arrive at each second, but if smooth zx32 performance was favored when selecting multitasking options, zx32 consumed a lot of CPU cycles and the message timing was a bit off. As I’ve updated the high resolution timer routines to allow for delays in the routines themselves (we are talking microseconds here), I’ve fixed this slight inaccuracy, too.

In order to get floppy drive emulation for the +3 in working shape, bugs in some of the more esoteric Z80 instructions had to be fixed. INI/INIR and IND/INDR didn’t work at all (a “B” should be “C”). The behavior of OUTI/OTIR and OUTD/OTDR is now implemented as undocumented (I have discovered, as I’m sure many people did before me, by examining the +3 ROM code, that the B register is decreased before the OUT takes place).

While working on the previous bug fix, I discovered that RES bit,(IX|IY+d),reg and SET bit,(IX|IY+d),reg instructions were not implemented in Bernd Schmidt’s original Z80 emulation code, and got left out of all my revisions until now. It’s not clear to me whether they are documented or undocumented by Zilog, but I’ve implemented them anyway.

•	This version should really be called 1.01a or something, as almost all the “new” features were already in the final stages of completion when 1.01 was released and this is mainly a bug-fix release, but I hate letters in version numbers and the whole version numbering thing in general. Besides that, this release is distributed in two packages, ZX32102.EXE which includes SNA,  TAP  and DSK files, and ZX32102A.EXE where the “A” stands for “application files only”.

Although it may seem otherwise (only major bug fixes and new features in previous releases were documented here), I haven’t spent much time on this release of zx32 so not all the new stuff may work as expected. It’s even possible that things that worked on previous versions are broken in this one.

•	The aforementioned (not so) new features:

High color synchronization along with contended RAM emulation can be enabled in this version, making high video synchronization (an option in previous releases) mandatory.

Code to support these features has been there ever since version 0.97. Contended RAM emulation (which I think is essential for rainbowing to be properly emulated) however, slowed down the emulator significantly. I’ve taken a look at what Damien Burke thinks of zx32, and since this emulator is now officially “very fast”, I thought I’d do something to slow it down · .

The only reliable information I could obtain on timings, was from the online version of the +3 manual transcribed by Russell Marks: “During 128 out of every 228 CPU T states (1 TV line), and during 192 out of every 311 TV lines (1 frame) the CPU is allowed only 1 access to contended RAM in every 8 T states”. This slowdown on contended memory accesses is approximately implemented for ALL emulated models (and for ULA I/O also), as all the code I’ve written so far depends on constant values for the number of clock ticks per video line and per screen frame, and I have no exact numbers for any other model.

The screen border is (imperfectly) emulated in full screen mode, on Windows 95 only*. This has topped zx32’s most requested useless feature list for months now (the matrix effect, implemented in version 1.01, was a close second), so there.

Pokes seem to be another thing some people just can’t do without. To keep them happy, a Poke Memory dialog where up to 20 pokes can be entered at a time, has been added.

The apparently obligatory for all Windows 95 programs Tip of the Day, makes an appearance each time you start the emulator without specifying a filename.

Experimental emulation of the uPD765A floppy disk controller has been implemented. The ZXS File Format has been updated for that matter.

You may double click on a disk image and if it contains a file named “DISK” this will be loaded. Both uncompressed CPD (used by Bernd Schmidt’s Amstrad CPC emulator CPE) and DSK (used by Marco Vieth’s CPCEMU) file formats are supported, non-standard disk formats are not. Refer to Technical Notes and Technical Tips for details on the way disk images are handled.

There were two ZIP files containing disk images at NVG, last time I checked (and a lot that did not and should be on a different directory). The amstrad_plus_3_compilation.zip contains disk images created with Thomas Kjaer’s ddtrans v0.1. This program contains a serious bug that renders all +3 format disk images created by it, unusable in zx32 (sector IDs start at 0 instead of 1). Bear this in mind, before blaming me for inefficient coding.

[Really New] Since support for SLT files seems to be a hot feature (while support for such exotic file types as ZIP, isn’t worth a mention) in the ZX Spectrum FAQ, zx32 will now load them. I’ve only tested this feature with one file (MontyPython.SLT), so it may not be 100% correct.

[Really New] ZXT, ZXD and DSK file types are associated with zx32 and an “Open With The ZX Spectrum Emulator” option is now added to the context menu of ZIP and Z80 files, when zx32 is installed. I’ve included icons for the latter files types in the main executable, but the installation routine won’t register them to avoid upsetting existing associations. It’s easy to do it yourself, through the File Types tab in Explorer options. While at it, you may also want to associate CPD and SLT file types with zx32 (and if you think that the situation with file extensions is getting a bit silly, you are probably right).

[Really New] The tape-loading sound was getting on my nerves a bit, some people don’t have sound cards and a disk LED was needed for this version. So I’ve added an indicator of disk or tape activity on the status bar.

Having admitted defeat in my efforts to popularize the ZXS file format, I’ve enabled SNA and Z80 options in Save As dialogs. I still think it’s better than the horse-designed-by-a-committee-like SLT.

•	The wave-goodbye part:

This is more or less the final version of zx32. See Technical Notes for details. It’s been fun but it has to end.

[1.01]

•	Bug exterminations. The particularly-nasty-but-very-easy-to-fix ones were:

Z80 files larger than 64K would crash the emulator (missed the “D” in “DWORD”).

The 128K shadow screen didn’t display at all (an 11 should be 12).

One of the routines that handle Spectrum I/O operations contained an error so important, that it’s a miracle the emulated Spectrums did any I/O port input at all, and for so long (sufficient to say that an “o” should be “i”).

Wait… There’s another one… SPLAT!

•	Partially implemented ZX Spectrum +2A|+3 support. A floppy drive is emulated at the hardware level (this means the ROM is not patched) for the +3, but no disk may be inserted in the drive, in this version (VERY useful, isn’t it? · ).

•	Performance upgrade. ZLT speed has doubled on 16-bit and almost quadrupled on 8-bit displays, while Z80 emulation is 35% faster on 486 processors. Many optimizations that would benefit Pentium-class processors (i.e., more instructions that can execute concurrently instead of the dreaded branch,) were removed since I’ve figured that 486 owners were the ones that would gain from faster execution speeds. The emulated Z80 is 40% faster when accessing memory, 25% faster on BIT instructions and, additionally, 10% faster in general.

The following chart displays the relative execution speed of zx32 versions, compared to version 0.97.

•	Enhanced ZXS file format. Refer to the ZXS File Format documentation for details.

•	Bits of improvement here and there.

The clock speed of the emulated Z80 processor is now displayed on the status bar. It can be changed by pressing Alt and one of the gray Plus or Minus keys*.

A File tab has been added to the Options dialog, since some people had trouble spotting the “Browse|Attach Tape Images” check boxes. Other tabs in this dialog are superficially modified, too.

Selection of the keys that act as [CAPS SHIFT] and [SYMBOL SHIFT], and emulation of the matrix effect on the Spectrum keyboard, have been implemented.

There is now a better chance that screen update will be optimal on Windows NT in windowed 256-color mode. A slight delay may occur at load time, as the palette is redefined until all colors are at place. If this doesn’t happen, the emulator will give up trying after half a second or so.

zx32 now supports the industry standard compression format [No that’s not the CABinet file format, you MS PR person, you! - author]. Some limitations apply here: the emulator can only open the first file in the ZIP archive and this file must be deflated or stored and not encrypted.

•	Half of the TAP and SNA files distributed with zx32 in previous versions have been removed, to make room for the larger size of the application files and reduce the size of the distribution executable to around 1MB.

•	Web links and the Sinclair ZX Spectrum FAQ have been updated.

[1.00]

•	BUGS: can’t live with them, can do without them.

•	This is NOT a true version 1.00, since a lot of things need fixing and some features are not implemented, BUT I’ve run out of version numbers.

•	Many people wanted a toolbar because selecting the same function from the menu required TWO clicks. Now, once they realize it’s there, they try to drag it to a new location. This won’t be implemented. EVER.

•	Since I was there, I’ve added a status bar that does almost nothing, other than display a description of the obvious.

•	Dialogs now sport context-sensitive help.

•	The documentation has moved from Microsoft Word to the standard Windows Help format. Tables and justified paragraphs will be missed.

•	Updated joystick support. As the one and only AMAZING zxBUGHUNTER™ Panos Malakoudis pointed out, the old one didn’t cater for truly analog joysticks.

•	Somewhat better AY-3-8912 emulation. A peek at the source code for xzx 2.1.0 by Des Herriott (©1993, 1994) and Erik Kunze (©1995, 1996), helped.

•	Minor tweaks.

•	C++ compiler switch.

Exit stage left for the ultra-buggy Borland C++ 5.0 Intel Reference compiler, enter the over-inflated, oldest kid in the Windows95 block, Microsoft Visual C++ 4.0.

TASM remains the default assembler, however (and yes, I have a cup of coffee during the OMF to COFF stuff).

[0.99]

•	Some bugs were fixed (and new ones introduced · .)

•	ZX Spectrum 128/+2 support.

•	New file format.

•	100% faster high video synchronization.

•	Numerous small improvements.

•	50%-100% slower emulation.

This is largely due to 128K support. The emulated Z80 processor is 600% slower when accessing a memory byte and approximately 1500% slower when accessing a word of memory. A MAJOR part of the Z80 emulation code was re-written too, for modularity and improved compatibility and this resulted in another (more or less) significant speed decrease. Finally the AY-3-8912 sound chip of the Spectrum 128K computers is emulated at a 10% processor overhead on a 486DX2/66.

To remedy the situation, improvements were made in other parts of the emulator. The Spectrum screen layout is translated to something the PC can display at half to one third of the time of previous versions (since a 486DX4/100 could spend over 50% of its time to do it at 50fps, this helps a LOT). Beeps and music are approximated at a rate of 27300Hz. This reduces overhead in the emulator, but may place a burden on DirectX, when sound is actually reproduced. Finally, the emulator is now smarter (and more accurate if smooth performance is favored when selecting multitasking options) when counting time between cycles. It will try to catch up later if a cycle takes too long to complete.

[0.98]

•	Bug fixes.

•	ZX Spectrum Issue 2 support.

•	High video synchronization (still no rainbowing though).

•	Recently used file list.

•	New document icons.

[0.97]

•	First public release.

Related Topics


Complete List of Changes in Release 1.03

•	Changes since version 1.03.97.1129 (1.03 Preview 2 as it turned out to be) are:

As Panos Malakoudis helped me realize, the Lucida Console font that includes IBM (MSDOS) graphic characters is not a standard Windows 95 font (it comes with the Plus! pack), so it’s not used in Properties anymore.

If you resize the emulator window by dragging its lower right corner the current aspect ratio will be retained. Panos Malakoudis suggested that, so it’s bound to be useful for everyone who uses zx32 in ridiculously high resolutions · .

CAPS SHIFTed Cursor joystick emulation should now work properly. It was broken when extended SHIFT handling was introduced in version 1.01 (I think), but no one complained · .

The emulator is now paused momentarily, when sound is turned on or off. Random crashes could occur otherwise.

SCR files can now be saved. The active filename will not change when opening or saving these files (since they are not really snapshots or anything), too.

You can quickly reset to a Spectrum+, +2 or +3 model using [Ctrl]+[Alt] and [1], [2] or [3] on the numeric keypad, from now on.

AY envelopes are fixed again · . Resets of the various counters on this chip should occur as specified in Z80 v3.05 TECHINFO.DOC, also.

Some minor bugs in TZX loading are fixed and Direct Recordings (block ID: 15) are now supported. In addition, the ROMs are not patched anymore (since this served almost no purpose and prevented some protection schemes from working). I believe that the majority of these files will now load successfully (I have tested well over a hundred of them and they all did).

•	Changes since version 1.02.9991 (1.03 Preview 1) are:

Properties for RIFF files are introduced in this version. A shell extension that can display them in Explorer will be included with zx32, from now on.

Debug statitistics are properly displayed in fullscreen mode.

High color and border effects are properly displayed even if the emulator is paused.

Registry entries that will allow you to skip the ‘PAUSED’ bitmap; disable CAPS SHIFT with Cursor joystick emulation; and save while the disk LED is on, have been added. Check Technical Tips for details.

You can now press [Alt]+[Gray *] and [Alt]+[Gray /] to quickly set maximum or normal emulation speed.

The Speccy joystick emulated with the cursor keys should now work correctly, even if the same joystick is emulated by the PC joystick too.

A Cancel button has been added to the Browse Tape Image dialog displayed with [Alt]+[T].

TZX blocks with IDs of 12, 13, 14, 21 and 22 are now supported. This leaves out only Direct Recordings from the supported data blocks and a fair number of files should work correctly.

TZX files can be loaded from inside ZIPs, too. This was an oversight in previous versions.

The High Color Synchronization option is now always enabled, since some people couldn’t spot the warning (in bold · ) in the context-sensitive help which mentioned that Slow RAM Emulation should be enabled first.

Minor bugs in Tip of the Day and Options dialogs are fixed. Thanks to  Gerardo Oporto Jorrin and Stuart Michie respectively, for spotting them.

•	Changes since version 1.02.0920 are:

An updated version of COMCTL32.DLL is no longer required. If you don’t have one you are missing a flat toolbar and gridlines in the Poke Memory dialog. If this means I’m participating in another one of Big Bill’s schemes to get users upgrading en masse to Windows 98 (before it’s even released) or leave Netscape users out in the cold, then so be it.

If you exited the emulator while in fullscreen mode you couldn’t start another instance until after a reboot, in previous versions and on some system configurations. All around nice Speccy guy Damien Burke pointed that out and it’s hopefully fixed in this version.

An automatic reset no longer occurs if you change the default Spectrum model with no file loaded. I can’t even remember why this particular ‘feature’ existed at all.

TZX blocks with IDs of 24, 25, 26, 27 and 28 are now ignored, too.

•	Bugs fixed in versions up to 1.02.0920:

Status bar LEDs are updated 50 times per emulated second at most. They are not as accurate now as they used to be, but the dreaded thread synchronization problem is (or should be · ) eliminated.

ED70 and ED71 instructions behaved as IN (HL),(C) and OUT (C),(HL) if slow RAM emulation was enabled. An incorrect number of clock ticks was used for some Z80 instructions (DD96, FD96, EDA3, EDBB and some pretty obscure and undocumented ones), too. No more, I believe.

Due to a silly mistake pokes previously entered in the Poke Memory dialog remained in effect as long as zx32 was running. Lee Tonks (a.k.a. Blood) pointed that out, I fixed it, and while I was at it I enhanced the dialog slightly.

The emulator would crash if a Z80 v2 snapshot decompressed to more(!) than 48K. Piotr Slawinski (a.k.a. Malyrules) from Illusion sent me a snapshot that exhibited this problem.

Malyrules also pointed out that the difference in intensity between normal and bright colors was too great. Here’s what I did: I’ve used maximum (and then some · ) intensity for colors when scanlines are used in full screen mode and tried to approximate their perceived brightness for the default palette. Anyone tells me they are not bright enough now, and I’ll change them all to bright white · .

I’ve implemented handling of bits 3 and 5 of the flags register for the ADD A,nn instruction. This is needed for Ghosts'n Goblins to run and was documented by James McKay in X128 v0.7. I hope Mark and Damien are happy now · .

AY-3-8912 envelopes are emulated more accurately since I grew tired of the crap engine sound in Wec Le Mans (not that it sounds a lot better now · ).

Two lines of code were in incorrect order in the SLT loader. File offset calculations were completely wrong, therefore. How did ever MontyPython.SLT work beats me, but both it and OUTRUN.SLT (and hopefully all other SLT files) load successfully now.

A line (SUB EAX,63) was commented out by mistake in the Speccy ports emulation code, and as a result not only the floating bus wasn’t emulated correctly, but GPEs could occur. The floating bus logic has been slightly updated, too. It seems that I incorrectly assumed that, while updating the screen, the ULA reads first a screen byte and then an attribute when it’s the other way around (or my floating bus logic and|or memory contention system are just crap · ). Anyway, Arkanoid, Ricochet and Top Gun are the only programs in my (limited) collection that use this feature, and all seem to work now.

Another omitted line (MOV CH,AL) caused the high port byte of all ‘OUT (nn),A’ Z80 instructions to be the B register and not the A one. This mainly affected 128K demos which don’t use standard port addresses (you rarely want to write 07Fh to port 07FFDh, for example). Dies Irae, Eye Ache, Illusion, Inner Universe and Russian Prestige are the ones that I know of. The Graphics viewer for screens on Enlight’96, btw, hangs because it expects an AMX mouse where the Kempston joystick responds. As this is the only program I’ve seen to exhibit this problem, I didn’t bother to do anything about it.

The emulator will no longer crash when loading Z80 v3.05 snapshots. This wasn’t entirely my fault, since there was no indication in the documentation for previous versions of the file format that a compressed block would never exceed 16KB in size. Indeed, I think it shouldn’t have taken so long for Gerton to realize that his compression scheme could in fact have negative results, if applied to data that have been tightly packed already.

I’ve used the library routines for handling 64-bit integers, instead of my QAD (Quick And Dirty) ones. This will hopefully fix the ‘CPU usage starts at 100% and drops by one percent every now and then’ problem.

•	Features introduced in versions up to 1.02.0920:

This version has a real border in fullscreen mode (top, bottom, vertical resolution and all). The border is built pixel by pixel at all times (even if it’s single color all the way) and the routines are highly unoptimized but speed is not that bad. It should require an additional 8%-10% of CPU processing power at 50fps on a 486DX4/100.

Every even line is left blank in full screen mode, which means a TV screen display is simulated (no 50Hz refresh though · ), too.

I have revamped fullscreen mode update routines, as a direct result of these changes. I was trying to cater for so many different situations in previous versions, that I just couldn’t spot the places to insert the updated border handling code.

The emulator will update the display in fullscreen mode, from now on, in a unified way and without drawing direct to the video frame buffer. This means you get scanlines and border at all times but updates will be much slower if your display driver or video hardware is substandard. On the other hand, if your blitter hardware is up to scratch, the performance penalty should not exceed 2% for 50fps, at all times.

You can now press [Alt]+[U] to fiddle with ULA delays. The effect of the numbers you enter in this dialog is difficult to explain in a paragraph (they are more of a delay duration alignment than actual delay values). You should treat them as a magic numbers (and try 64, 96 or 128 for the second one, first).

I haven’t discovered a case in which fiddling with these values doesn’t align high resolution color or border effects perfectly. This means that each line on the screen should have the correct color attributes. If a program (the Overscan demo, for example) updates color attributes in the full width of the screen, some pixels in each line may always be off. Nonetheless, if you manage to find such a case then let me know.

DirectX capabilities (DirectDraw ones only in this version) can be checked at any time by pressing [Alt]+[X]. This should give you an indication of why performance may suffer (or be extremely smooth · ).

Very basic support for TZX files is introduced in this version. Blocks with IDs of 10, 11, 20 and 30 are handled, the rest are ignored for now. There isn’t much to tell you here that you can’t find out about it yourself, except that [Alt]+[Pause] pauses or starts the tape and that TZX data are destroyed as soon as you load another file and will not be attached to ZXS snapshots.

I’ve tested this feature with a limited number of files (OINK.TZX most notably) and a lot of the rest will inevitably fail to load. When this happens try to find one that is OINK-compatible · or post to c.s.s. and they’ll name you a real emulator that will load it. Just DON’T bug me.

The toolbar is now flat. I’ve found out the new look is an acquired taste, but it saves on resources, rationalizes the Z-order a bit and it’s definitely the shape of things to come for Windows 98.

The status bar is redesigned and has acquired the ‘flat’ look, too. It’s going to be active and customizable (shock · ) in the future, if all goes well.

I've half optimized AY-3-8912 routines, so emulation is now slower(!). That’s because a lot less detail is dropped. I’ve also corrected the volume calculations to allow sampled tracks to be heard. All these changes were made possible by information provided by Gerton Lunter in the documentation for Z80 v3.05. This information on the AY-3-8912 chip, was collected by him from comp.sys.sinclair and mainly originated from Alastair Booker and Ian Collier. For sampletracks in particular, as Gerton states: “even when a channel is disabled, changing the volume level changes the final output.”

I’m actually trying to detect when sampled tracks are playing and I give them a double volume boost, but you may still have to crank up the amplification manually.

Saving to TAP files is implemented in this version, especially for Scalman and Kriss from Illusion and Junior from Brazil (it’s a country not a group · ).

The implementation is incomplete for now, i.e., the whole ROM routine is substituted; the TAPE activity indicator doesn’t flash; and the tape speed setting has no effect. To actually save the data to a TAP file you have to use the Save As dialog. The actual tape image on your hard disk will not be updated otherwise.

The Save As dialog can be used to export disk images, also. This is now the preferred way of updating CPD and DSK files. The [Alt]+[Insert] method still works but is no longer supported.

You have to go through the Save As dialog to export SNA and Z80 snapshots too. The emulator will save only ZXS files from now on, when the Save option is selected.

I’ve tried to increase functionality of the Open|Save|Save As routines since inexperienced users could be baffled sometimes. The icon for the currently open file type is displayed on the title bar; the default filename and directory is preserved if an action fails; and the extension changes to reflect the selected file type in Save As dialogs, among other enhancements.

I’ve also tried to rationalize the way files can be handled by experienced users. You can press [Alt]+[T] to position the virtual ‘tape head’ at (almost) any time and hold down [Shift] to prevent reset for disk and tape images, for starters. Check Techical Tips, for details.

ZIP compatible compression for RIFF files is here, as promised. Use the Compression slider in the File tab in Options to specify a compression level. Higher compression levels are much slower and will decrease file size by a few KBs at most. The default value should achieve the best tradeoff between speed and file size most of the time.

Emulator statistics are now toggled with [Alt]+[D] at all times (no need anymore to hold down [Shift] too, if Caps Lock is off).

Tips of the Day are implemented a bit differently. This does not necessarily mean better but the new implementation is faster since WinHelp doesn’t have to start.

I’ve updated the ROM patches to emulate ‘seeks’ and the whole tape loading routine slightly better. As a result, snapshots created while a program was loading from tape, in previous versions, may fail to load now. If other loading problems are encountered, let me know.

Beeper approximation should be more accurate than before (and it had better be so, as it’s a lot slower most of the time).

A DISK|TAPE activity indicator is available in fullscreen mode, now.

Finally, since using WSpecEm’s icon implies that zx32 is a shameless copy of Rui F.F. Ribeiro’s work, I’ve made a new one, based on the garish +2 design. I hope you like it more than I do, nevertheless I’m going to use it as long as I don’t receive a better replacement.


I’ve had enough with (Non)DirectX on Windows NT 4.00.


If you are short on stamps or time is of the essence, try malakoudi@ceid.upatras.gr, until the end of June.

This is a friend’s e-mail address so use it sparingly.


The [Gray +] key pressed alone, by the way, emulates pressing [Q],[A],[Z],[P],[L] and [M] together. This can’t be done easily by any other means, since Windows seems to have trouble notifying zx32, and subsequently the emulated Spectrum of multiple keys pressed at once.

If you are wondering what’s this good for, try pressing it at the +2A|+3 TV test screen.


How can I open BLK|SCR|SLT|TZX files?

Although zx32 does not register an icon for them and they are not listed as available file types in the Open dialog, you can select and load them using this dialog, just as you would with the ‘officially’ supported ones.

You should bear in mind though, that support for these file types is limited and|or incomplete in the emulator.


I’m trying to open a ZIP file with zx32, but I receive an error message. Why?

Sigh! It's probably using an old compression method, or contains some other file (README.TXT or something) before the memory, disk or tape image (assuming it contains one at all).


This <tape|disk image> file fails to load. Is it a bug?

This may happen for a lot of reasons. Specific solutions to the most common problems are mentioned in Tips of the Day and various parts of the help file and this FAQ section specifically. Have you tried any of them?

Oh, well! You’ve probably just gone ahead and reported a bug (without even mentioning a filename, since I obviously have a copy of every Speccy program ever released lying on my hard disk · ), but if you didn’t, try selecting a different default model in Options; using 48K|USR0 mode in an 128K model; using the specific loading instructions that the program may require; converting the TAP file to TZX format; LOADing a .BAS or any other file that seems appropriate if the disk image cannot autoload; or posting to comp.sys.sinclair (and waiting until Damien Burke answers your message or downloading the emulators everyone else will suggest · ).


I can’t save anything but invalid or no data to a tape|disk image. Why?

You can only export to a tape or disk image data of the same format, that was previously loaded (and possibly modified) in memory. You can not create a tape image from data loaded from a memory image, for example.

Format translations (e.g., SNA to TAP, or TAP to DSK) like these, although possible, are out of the scope of this emulator.


How can I use the ‘disks’ at NVG in zx32?

Most of the ZIPs available in the /pub/sinclair/disks/plus3/ directory contain files that need be copied in a disk image before they can be used in zx32. I have done this for many of them but they are not available from any ftp site as I’m writing this. Check zx32’s homepages, for updated information.

Alternatively you can do it yourself, using various methods. I have used the NIRVANA Disc Management Suite on Marco Vieth’s Amstrad CPC Emulator CPCEMU. According to a posting made by John Elliott to comp.sys.sinclair, an even easier way to do this is by using CPCFS available “somewhere at NVG”.


How can I change the loading speed for TZX files?

The Tape Speed setting in Options has no effect when a TZX file is being loaded. It is possible for it to work, but it would require a lot of effort and guesswork from my part since the file format specification doesn’t help at all.

You can try and change the emulated Spectrum’s speed, if your computer is fast enough, instead. Check Tips of the Day for some useful shortcuts.


Help! I can’t get the <keyboard key> to work.

The Spectrums had a really peculiar keyboard arrangement and strange keyboard combinations may be needed to get some symbols on the screen. Check the beginners’ Hardware topic for details.

You can display a keyboard layout help screen at any time using [Alt]+[F1], and Backspace is [Left Shift]+[0], by the way.


I press <some 17 keys> simultaneously, but they don’t get detected. Why?

Windows seems to have trouble notifying zx32, and subsequently the emulated Spectrum of multiple keys pressed at once. There are ways to circumvent this problem, but I see no serious reason to.

If the keys in question are [Q], [A], [Z], [P], [L] and [M], then you’re in luck. Just press the [Gray Plus(+)] key.


The speed control setting seems to do nothing. Why?

Assuming that your computer is fast enough to achieve that setting and without getting too technical here: Some ‘speed’ settings are not obtainable on Windows NT 4.00 if system responsiveness is favored when setting zx32’s multitasking behavior (this is the default on this operating system).

If this is the case, the setting will have an effect if you change it by five steps at a time.


Why does the emulator pause when I switch away from it?

Believe me, this saves you (and me) a lot of trouble.


How can I start the emulator in full screen mode?

You can’t. This is quite a requested feature and I have tried to implement it, but it just doesn’t work as elegantly as I would like. I did not plan for it from the beginning, so starting zx32 in full screen mode now, would mean that switching to windowed mode wouldn’t be an option for that instance of the program, and this is simply not acceptable for me.

Now, I know that I’m probably the only one that doesn’t use the emulator in full screen mode, but I’m the one that counts · .


Where’s the context-sensitive help in Options, mentioned in the Tips of the Day?

Help is not available when the emulator runs in full screen mode. This is due to DirectDraw-imposed limitations and there’s nothing, sort of writing my own help system, that I can do about it.


Whenever I try and switch to full screen mode the emulator crashes. What’s going on?

This problem is entirely unrelated with zx32 and there’s not much I can do to help you, I’m sorry to say. It’s a DirectX-related problem so try re-installing DirectX first, and if this doesn’t work (although it seems to do so in many cases), then contact your video board manufacturer or Microsoft.

A good place to start in the latter case would be Microsoft’s DirectX page at http://www.microsoft.com/directx/.


I have <this> or <that> problem with the Microsoft Office toolbar.

There are known problems with interactions between all kinds of desktop toolbars and DirectX-based applications that run in full screen mode. The only way to avoid them, is to turn the toolbars off, or upgrade to a newer version of the software that knows about DirectX.


I own a <snazzy video card> but zx32 runs s-l-o-w-l-y on it. What’s the problem?

Many chip or video board manufacturers have released DirectDraw ‘compatible’ drivers that provide no hardware support at all (known culprits are Diamond Multimedia, Number Nine and S3, but this doesn’t mean there are no others). If this is the case, zx32 will update your display very slowly, especially in full screen mode.

You should upgrade to the latest drivers the manufacturer provides, or use the Microsoft supplied ones.


I’m experiencing sound latency problems | random noise...

Unfortunately Microsoft has not released DirectSound compatible drivers for many of the lesser known audio boards. Since DirectSound can use the existing audio driver and sound output is not a major bottleneck in most cases, the audio board manufacturers didn’t bother, also. Only Aztech, Creative Labs, ESS, MediaVision and Microsoft chipsets|products are catered for by Microsoft in DirectX 3.

There is no way to resolve latency problems, other than updating your audio drivers. You can try to eliminate random noise by fiddling with the Frequency slider in the Sound tab of zx32’s Options.


I have tried all options but I still can’t get smooth performance. What should I do?

On a multitasking operating system any process running could be the cause of this type of problems.

•	On really fast systems zx32 may require a very low percentage of the processor’s time, yet it requires this amount in regular intervals. Tasks like the Microsoft Plus! System Agent that appear to just add an icon in the taskbar (or display no icon at all) and do nothing until an event awakens them, can still need a large portion of the processor’s attention.

•	Even if no other process is active, the system may decide to steal away the CPU for a housekeeping task such as flushing its cache buffers. Furthermore, seemingly non important activities like moving your mouse or holding down a key, may generate a large amount of messages that have to be processed immediately so that the system doesn’t appear unresponsive.

•	This may appear unrelated but it was proved to be the source of all problems in at least one similar situation: If joystick support is enabled in the emulator and the joystick is not connected or set up properly (and on rare occasions even if it is), even extremely fast Pentiums may spend as much as a quarter of their time listening to the joystick port.

If you want to run other applications besides the emulator or have to keep background tasks active, your best bet is to favor system responsiveness when setting zx32’s multitasking behavior, especially on Windows NT (that multitasks much smoother than Windows 95). This way the emulator relinquishes the CPU when it no longer needs it and hopefully other processes may have done so by the time it wants the processor back.


How can I save <bitmap format> screenshots?

When zx32 is in the foreground press [Alt]+[Print Screen]. Then, fire up your favorite bitmap editor, and choose Edit|Paste (or whatever).


How can I load demos that require 48K|USR0 mode from tape images?

Here is a way (but not the only one) to do it:

1.	Make sure the required ZX Spectrum model is selected as the default (select ZX Spectrum +2 if unsure), and press Reset [F5].

2.	Select Open [F2] and click on the tape image in question. Hold down [Shift] and click Open. You may have to keep holding down [Shift] for a short moment afterwards.

3.	Select 128K Basic from the emulated Spectrum’s menu (use [Left Shift]+[6]) and press [Enter]. Type "usr0" (without the quotation marks) and press [Enter] again. When the emulated Spectrum resets, press [J] then [Right Shift]+[P] and [Right Shift]+[P] again, then press [Enter].


What do red asterisks* mean?

You won’t find out until you’ve clicked on them .


Yes, that’s the idea.


How can I register zx32?

You don’t have to. In fact, you should be able to get and use the distribution packages at absolutely no charge. Take a look at zx32’s License Agreement for details.

See Comments and Suggestions if you want to contact me or (hint) send me a postcard.


Will development of the emulator continue?

There’s no way to tell at the moment what the future has in store for zx32. Take it as it comes, okay?


Why is zx32 so slow? How can I speed it up?

This is a large topic and, frankly, I’m tired of the “so slow” type of comments. In short, I think that zx32 can easily emulate a lot more than 100% of Spectrum speed on a P75 with decent hardware peripherals. You can get more than 500% speed on this setup if you use the lowest setting for the display update rate and turn sound and CPU consuming options off -- although I can see no reason to.

Moreover, it could do much more than that if I was able to use a 320x200 16 color video mode, the Speaker|Adlib combination for sound output and hardware assist for memory paging. Refer to Technical Notes for more information.


Why do I have to install DirectX since I want to run the emulator in a window?

zx32 uses DirectDraw and DirectSound components all the time, whether running in a window or in full screen. It won't run on any system, unless DirectX and appropriate drivers are installed.

If a program uses DirectX, it doesn’t mean it has to run ‘full screen’. And moreover this ‘mode’ is a bit of a trick. In most occasions, DirectDraw

•	switches the desktop resolution to the program’s preferred one (usually 640x480 and 8|16-bit color),

•	maximizes the program’s window and puts it in the top of the z-order, so other applications using GDI won’t inadvertently try to write to the screen,

•	starts a helper app that runs in the background and takes care of the program’s cooperation with Windows (for example the [Alt]+[Tab] switching), and

•	tries to satisfy the program’s screen drawing needs, communicating with the display driver (or more correctly the Hardware Abstraction Layer (HAL) the chip manufacturer, board producer, or original equipment manufacturer has to implement as part of the display driver, to support DirectDraw) and implementing in software functions not supported by the hardware.


Why do I have to switch to 256 colors to start zx32?

This is not exactly true. The emulator supports 8-, 15- and 16-bit color depths when running in a window.

To the best of my knowledge, DirectDraw components in all DirectX versions so far, do not support 16 color (4-bit) displays. You might have noticed that if you try to run zx32 in this color resolution the message you receive has “Microsoft DirectDraw” and not “zx32” on the title bar. I would have used 16 colors for the full screen mode if I could, but the fact is, technology advances and complaining about lack of provision for old standards gets you nothing.

True color (24-bit or 32-bit) displays are at the other end of the spectrum [multiple pan intended · ]. If you are a programmer, using the Windows API guarantees that you can draw on the display without caring whatever the color depth may be, but at a significant speed penalty. DirectDraw on the other hand, gives you direct (shock) access to the video frame buffer (on Windows 95 and on most cases), but leaves color depth support to you. Providing for 15-bit and 16-bit displays (confusingly Microsoft refers to both as 16-bit) resulted in a different set of instructions for me to optimize, a lot of bugs to fix and people with ISA display adapters (who shouldn’t use these color depths in the first place) complaining about lack of speed. I won’t go through any of this, again.


Selects multitasking behavior.

If smooth performance is favored, zx32 consumes all of the CPU time allotted to it by the system. If system responsiveness is favored unused CPU time is returned for use by other processes, but emulation timing may not be exact.


Selects an alternate style for the Open|Save As dialogs.

If your system is low on memory and you find that the default dialogs take too long to appear, check this box.


Displays all dialogs centered over the main emulator window.

Note Some dialogs may obscure completely the emulator window in its default size. If you don’t want this to happen leave this box unchecked.


Saves all options when zx32 is closed.


Selects RIFF file compression level.

Higher compression levels are much slower and will decrease file size by a few KBs at most. The default value should achieve the best tradeoff between speed and file size most of the time.


Enables browsing of tape images.

Some tape images may contain more than one executable program file. By default the emulator will open the first one it encounters. To select which program file gets loaded, check this box.


Enables attachment of tape and disk images.

If a tape or disk image is opened, the emulator will, by default, embed a copy of it in all subsequent RIFF files created. If you don’t want this to happen leave this box unchecked.

Note A ZX Spectrum program loaded from tape|disk, is very likely to crash or enter an infinite loop, if  it subsequently tries to load data from a non-existent tape|disk.


Adjusts the speed of the emulated Z80 processor.

The clock speed of the Z80 was approximately 3.5MHz in all the ZX Spectrum models. This value is reflected in the middle position of the slider.

If the slider is moved to the High position the clock speed is limited only by the speed of your computer.


Enables emulation of the Z80 Refresh register.

Note This option is always enabled in this version of the ZX Spectrum Emulator.


Lists the ZX Spectrum models that you can choose from.

The default ZX Spectrum model is used if the emulator is unable to determine the specific requirements of a program loaded from a memory or tape image.


Adjusts the speed at which a program loads from tape.


Selects slow RAM emulation.

The lower 16K block of memory on a real ZX Spectrum 48K, is a bit slower than the upper 32K. This is also true for half the memory on the 128K models.

Some programs may rely on this fact to control their execution speed or produce unusual color effects. If this option is enabled, an approximation of the real delay occurs when slow RAM is accessed in the emulator.

Note Slow RAM emulation is a prerequisite for High Color Synchronization to work correctly and requires additional CPU processing power. If you notice a decrease in performance leave this box unchecked.


Selects a window size.

The default resolution of the ZX Spectrum screen is 256 by 192 pixels. You can select to use some predefined window size that is a multiple of this resolution, or resize the emulator window manually.

Note Using a window size other than the default may require additional CPU processing power, or significantly slow down the emulator.


Selects a monitor frequency for full screen mode.

Only the default (***) frequency will be listed if the current display driver does not support this capability.

Note This option is available on DirectX 2 and later versions.


Adjusts the rate at which the screen is updated.

By default, the emulator will update the screen 50 times per emulated second. You can select to skip some of the frames if your computer can’t keep up.

Values range 	from 	1:5 (Low,  one in five frames displayed)

 	to 	1:1 (High, all frames displayed).


Enables high color synchronization.

The ZX Spectrum screen was originally intended to display color in 8x8 pixel squares. By using carefully timed routines programmers were able to achieve different color attributes for 8x1 squares, instead.

If this option is enabled, zx32 tries to emulate this effect by translating color attributes for each screen line separately, at the approximate time they would be displayed by a real ZX Spectrum.

Note High color synchronization works best if Slow RAM Emulation is enabled and requires additional CPU processing power. If you notice a decrease in performance leave this box unchecked.


Adjusts the relative volume of all the sounds the emulator produces.


Adjusts the frequency of all the sounds the emulator produces.

You may want to fine-tune this setting if

 	you adjust the emulated Z80 processor clock speed,

 	the emulator produces random noise every so often,

 	the speed of the emulator isn’t 100% on your system or

 	your sound card induces a processing overhead to the CPU.


Enables noise reduction.

The emulator filters some of the noise that would be produced by a real ZX Spectrum, when approximating sound output. If this box is checked, an additional low-pass filter, over this output, is enabled.

Note Noise reduction requires additional CPU processing power. If you notice a decrease in performance leave this box unchecked.


Selects the keys that act as [CAPS SHIFT] and [SYMBOL SHIFT] on the ZX Spectrum keyboard.


Selects the ZX Spectrum-supported joystick type the cursor keys and [Insert] emulate.


Enables emulation of the matrix effect that occurs when three or more keys are pressed simultaneously on the ZX Spectrum keyboard.

For example, if this box is checked, [CAPS SHIFT], [B] and [V] pressed together will generate BREAK as they would on a real ZX Spectrum.

Note Emulation of this effect, may slow down programs that check the keyboard repeatedly. If you notice a decrease in performance for such programs, leave this option disabled.


Lists joysticks.

If you have more than one joystick, select the one you want to use with the emulator.


Selects the ZX Spectrum-supported joystick type, your joystick emulates.


Enables joystick support in the emulator.


Changes settings for joystick devices.