ZXDS is an emulator of Sinclair ZX Spectrum for Nintendo DS and 3DS, written by Patrik Rak. It accurately emulates Spectrum 48k, 128k, +2/+2A/+3, and Pentagon, and supports SNA/Z80/SZX snapshots, TAP/TZX/PZX tape files, TRD/SCL/DSK disk files and RZX replay files.
It has some other noteworthy features, like the ability to download all these files online over WiFi, peer-to-peer WiFi multiplayer, or Kempston mouse emulation.
Unpack the downloaded archive, remove the SD card from your handheld, insert it into your computer, and copy only the entire ZXDS directory (not just its content, but the directory itself) to the root of the SD card. Make sure that even the empty subdirectories are copied properly (in particular, make sure the /ZXDS/Saves directory is created, otherwise the save slots won't be saved permanently to your card). Then copy the ZXDS.3dsx to the /3ds directory on your SD card (or whichever place you run the homebrew applications from).
If you have used ZXDS on a DS before, note that you may copy your entire ZXDS directory from your DS card to this SD card, too. All the files are compatible, with the only exception of files in /ZXDS/Graphics, which are now 320x240 instead of 256x192.
Note that in order to run properly and generate audio, ZXDS needs the DSP firmware installed. It's quite likely you have it already, but if you haven't done so yet, ZXDS will let you know. In such case I suggest you google for "3DS guide DSP setup" and follow the steps regarding DSP firmware installation which should create the /3ds/dspfirm.cdc file on your SD card.
Unpack the downloaded archive and copy only the entire ZXDS directory (not just its content, but the directory itself) to the root of whatever device you use to run homebrew on your DS. Make sure that even the empty subdirectories are copied properly (in particular, make sure the /ZXDS/Saves directory is created, otherwise the save slots won't be saved permanently to your card). If you wish so, you may then relocate the ZXDS.nds to elsewhere on the card, like to the root itself, to make it more accessible.
The provided binary ZXDS.nds is primarily intended for Slot-1 (DS slot) based cards. Most of these cards now support automatic DLDI patching, so you likely won't have to bother with that at all. Just give it a try and you will see. If it won't work for you right away (meaning you won't be able to see any files to load in the load requester) you might need to patch it with a specific DLDI driver for your card with a DLDI patcher, both of which you can find here. If you need the ZXDS.ds.gba version which is better suited for Slot-2 (GBA slot) based cards, simply follow the instructions provided here. Note that you will likely need to DLDI patch it first in this case. If it still doesn't work, I am really sorry, but there is not much I can do about it. Please do NOT contact me regarding if it works or doesn't work on your card. Thanks.
Other directories in the archive contain optional extras, so check the README files in each and install their content to the right place only if you want to. For example, you may want to copy the custom keyboard examples to /ZXDS/Data/Keyboards.
You should also copy some tape, disk, snapshot or replay files to your card. Either TAP/TZX/PZX tape files, TRD/SCL/DSK disk files, SNA/Z80/SZX snapshots or RZX replay files are supported. You can place them anywhere you want, however the /ZXDS/Data directory is looked up first by default. For your convenience, I have included few Spectrum games and demos in the archive itself, so you can at least give it a go. And you can find pointers to much more software further down this page.
Alternatively, if you have WiFi access, you can just rely on the /ZXDS/Data/Online directory and browse the plethora of files available online. If you want that, read the online.txt included in the ZXDS archive for more info.
Using the emulator
Simply run ZXDS the same way you run any other application.
Upon startup, just follow the builtin online help which shall provide you with all the instructions you will need (remember to turn the help off once you get familiar with individual icons and menus, it would only slow you down otherwise). You will basically need to load some file via Load File screen of I/O menu (pressing START gets you there quickly by default), then perhaps adjust controls via the Controls screen, and you are all set.
The control mapping can really make a difference, so make sure you customize it the way you like it most for any serious gaming. For example, in case you have problems pressing the diagonals, it helps to map the up direction to the B button as well. This way you can jump sideways with ease. And mapping the quick save and quick load actions to the shoulder buttons gives you an instant save and load at the touch of the button, priceless feature for the hardest parts of the game you are playing. And for even more complex game controls or for text adventure typing, the custom keyboard feature is a godsend, too. Make sure to check the bundled custom keyboard examples, and don't hesitate to create your own.
There are quite a few features already implemented, and some still ahead of me. Please do not bother me asking for features, though. I still have some which might be implemented before I will reconsider what next. Thanks.
Features already implemented:
- Solid Z80 core - the Z80 emulation includes all documented and undocumented instructions, each modifying both documented and undocumented flags as a real Zilog Z80 CPU. Each instruction modifies the T state counter properly as well, including delays caused by memory and I/O contention. The emulator also implements all other subtle details of Z80 I know of, including authentic SCF/CCF behavior, MEMPTR, proper IRQ sampling and blocking (missed/double IRQ, delayed EI, IX/IY prefix blocking) and P/V fix for interrupted LD A,I/R instruction.
- Full 128k paging support - the memory paging of ZX Spectrum 128k is fully implemented. This includes both ROM and RAM bank paging and shadow screen support, as well as all-RAM mode of +2A/+3 models.
- Accurate 48k and 128k sound emulation - both 48k speaker and 128k AY-3-8912 chip are emulated, including ABC and ACB stereo modes. The emulation is pretty much exact, and the speaker even uses accurate synthesis instead of discrete sampling.
- Precise screen emulation - the screen display code renders color, bright and flash as expected. The screen is sampled with T state accuracy, so even the most timing-sensitive multicolor effects work like on real machines. Finally, the LCD refresh rate is synchronized to match the 50Hz screen update, resulting in amazingly smooth and tearing-free display.
- ULA+ emulation - The ULA+ 64 color mode extension is supported, too, including ULA+ screenshot saving and loading and instant ULA+ palette switching.
- Proper border emulation - The 3DS models feature accurate border emulation, so you can enjoy all the games and demos using fancy border effects. On DS, the border color is simply mapped to the background color of the touch screen.
- Accurate +2/+2A/+3 emulation - in addition to the original Sinclair 48k and 128k models, the newer Amstrad models are fully emulated, including +3DOS and both 3″ and 3.5″ disk drives.
- Reasonable Pentagon emulation - the Pentagon is fairly accurately emulated, too, including TR-DOS and disk drive.
- Custom ROM and IF2 ROM support - it is possible to emulate even some other Spectrum clones, such as TK90X and TK95, simply by replacing the standard ROMs with the right custom ones. Both custom ROMs and Interface 2 ROMs can be also easily loaded and switched at runtime.
- Good 48k/128k snapshot support - the emulator supports all SNA, Z80, and SZX snapshots, including compression and button config settings.
- Virtual tape deck - the emulator features a virtual tape deck with both manual and automatic control and convenient tape browser for precise tape positioning. The tape recording is supported, too. And you can even listen to the tape sound if you wish.
- Full TAP support - TAP files are fully supported, and loaded at high speed whenever possible.
- Reasonable TZX support - apart from few flow control blocks (call, jump, select) and CSW and GDB data blocks, the TZX files are fully supported. Loading at high speeds is used whenever possible as well.
- Full PZX support - PZX tape files are fully supported, too. You can find more about this format here.
- Beta 48/128 emulation - the Beta Disk is usable even with standard 48k and 128k models, not Pentagon only. Both Beta 48 and Beta 128 variants are supported in 48k mode.
- Good TRD/SCL support - both TRD and SCL TR-DOS disk files can be loaded and saved. Formatting of all four possible TR-DOS disk types is supported. The autoboot feature is included, too.
- Good DSK/EDSK support - +3DOS DSK and EDSK disk images can be loaded, saved, and formatted, too. All advanced features such as random/weak sectors and jumbo sectors are supported, so even the copy protected disks work just fine. The autoboot and side flipping features are included, too.
- Builtin disk browser - you can examine the content of the TR-DOS and +3DOS disk images, including both the disk directory as well as the individual sectors.
- Good RZX support - it is possible to play back the RZX recordings now. No recording support yet, though.
- POK files support - cheating is easy thanks to the use of the POK files. And whenever you load a game, if present, the associated POK file is conveniently loaded as well.
- ZIP archives support - no need to unpack ZIP archives anymore. Browsing and reading everything directly from ZIP archives is supported.
- Online WiFi access - builtin HTTP and FTP client allows getting files from major Spectrum sites over WiFi. It ties in seamlessly thanks to the virtual directory system, which allows browsing of arbitrary listings of both local and remote files.
- Peer-to-peer WiFi multiplayer - playing 2 player games was never this good. Grab a mate, tap the WiFi host/join icons, and you can play the game together, each using your own DS. Simple like that.
- Save slot support - there are sixteen (nine on DS) builtin save slots for storing the save state in SZX snapshot format, each featuring miniature screenshot thumbnail. One additional save slot is used for both recovering the previous state and preserving the state across sessions after shut down. The associated disk/tape file is saved to its own file if needed, too, meaning you can really stop and resume your game session whenever, wherever.
- Save requester - of course, you are not limited to those builtin save slots only - you can save any amount of SZX and Z80 snapshots using the save requester, too, as well as any of the other supported file types. The save requester also supports basic file and directory management operations. The option of alternating two directories and the handy prefix/substring based file name search are available in both save and load requester.
- Screenshot support - you can save SCR and BMP screenshots anytime you wish, either from the save requester or by simple press of the screenshot action button. You can even load the SCR files back for viewing.
- Configurable input - all buttons can be configured to simulate any keyboard key or joystick movement as well as any of the actions accessible via menus.
- Fully customizable keyboard - complex game and application controls are no longer a problem with the ability to define a custom keyboard of 60 custom keys and action buttons.
- Kempston mouse emulation - the Kempston mouse interface is emulated, featuring both relative and absolute mouse modes. During WiFi multiplayer it even supports dual master/slave mouse interfaces.
- Memory viewer and disassembler - you can explore the content of the Spectrum memory, shown as bytes, words, characters, BASIC tokens, text or Z80 disassembly. You can also use it to enter POKEs manually.
- Text and binary file viewer - you can use the builtin file viewer to examine the content of any file available locally or online. Handy for reading the instructions or walkthroughs of the game you are playing.
- Statistics tracking - the system keeps track of various usage statistics and the games and applications launched. Ever wanted to know how much time you spent doing something? Now you can.
- Favorite/recent files tracking - the collected game and application statistics are also used to generate a list of 500 of both most and last used files.
- Battery friendly - the CPUs enter a sleep mode whenever possible to minimize the consumption, and when not in use, the backlight of the bottom screen is also turned off to preserve more battery power. And when the lid is closed, the handheld enters a deep sleep mode which can last for many hours. Note that the current state is automatically saved in this case, too, so you can relax, knowing you won't loose anything even if the battery would run out.
- Skinning support - it is possible to change graphics and color of every UI element with custom backgrounds, icon sets and style configs.
- Builtin help system - the builtin help system explains in detail the functionality of each UI element, ensuring comfortable and friendly user experience.
Features which might be eventually implemented:
- RZX recording - RZX recording might be a nice feature to have. Not sure if it really pays off to spend the time on this, though.
Features unlikely to be implemented:
- Complete TZX support - I am not really eager to implement the missing TZX 1.20 features, they are just too much pain and little gain. Simply use PZX tools and convert any problematic TZX to PZX if you want to use it.
- ZX Printer support - I just have no idea how this would be useful.
- Interface I and Microdrive emulation - although I own one IF 1 myself, I don't think it is really necessary for anything you would want to do on a DS.
- Multiface/other peripherals support - why bother.
- Timex and other clones emulation - I have no intention to extend the list of supported models any further.
by Patrik Rak.