ZXDS home page
Welcome to ZXDS homepage.
ZXDS is an emulator of Sinclair ZX Spectrum for Nintendo DS,
written by Patrik Rak.
Although it is not yet considered complete (at least by its author, that is),
it already has many noteworthy features,
like accurate emulation of Spectrum 48k, 128k and Pentagon models (including sound),
or support for TAP/TZX/PZX tape files, TRD/SCL disk files and RZX playback files,
not to mention the ability to download these files online over WiFi,
or the peer-to-peer WiFi multiplayer.
It is available entirely for free,
but any donations are always welcome,
see the details further down the page.
Download and installation
Just download the archive using the link below, unpack it and copy 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.
Download ZXDS 0.9.2 beta 1
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, at least at this point of time.
You should also copy some tape, disk, snapshot or playback files to your card.
Either TAP/TZX/PZX tape files, TRD/SCL disk files, SNA/Z80/SZX snapshots or RZX playback files are supported.
You can place them anywhere you want, although 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 wish, 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 adjusting 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.
Please do NOT contact me regarding if some games do or do not work.
The emulation itself should be near perfect, so it's much more likely you are either
loading the game in wrong mode (48k vs 128k tape loader vs 128k USR 0),
or you have broken copy of the game,
or the game is for some other model and would not work on a real machine either,
and I can't afford to waste my time helping you with issues like this.
Only if you have the knowledge to diagnose what exactly might be buggy and
you can prove that, preferably with a piece of Z80 code, I would like to hear from you.
So let me repeat that once again,
please don't waste my time contacting me regarding game compatibility,
unless you can pinpoint the actual bugs.
Thanks.
Software for the emulator
To download more games and other software for use with the emulator, the first thing to check out is
definitely the huge
World of Spectrum archive
collection,
closely followed by
the TZX Vault.
In case you can read some Czech,
this site
is very well worth visiting, too.
And if you want a suggestion of which games are worth trying,
here
is my list of recommended games.
In case you are interested in some demos,
check out the
ZX AAA Demo,
Demotopia,
Pouët.net,
or
Virtual TR-DOS
sites.
You won't regret it, as it is really amazing to see and hear what some people have achieved to do on the Spectrum.
The RZX playback files can be obtained from the
RZX Archive.
Best way to check out the games you always liked but never managed to finish.
And if there is something else you are looking for, it never hurts to ask on the friendly
World of Spectrum forums.
Features
There are few features already implemented, and many more still ahead of me.
Please do not bother me asking for features. I still have plenty of those
which have to be implemented before I can reconsider what next. Thanks.
Features already implemented:
- Solid Z80 core - the Z80 emulation is as complete as I want it to be.
It includes all documented and undocumented instructions, each modifying both
documented and undocumented flags as it should (the only little exception
being the BIT N,(HL) which modifies the undocumented flags 5 and 3
differently, as the MEMPTR register is deliberately not emulated).
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 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.
- Reasonable Pentagon emulation - the Pentagon is
fairly accurately emulated, too, including TR-DOS and disk drive.
- 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.
- Primitive border emulation - the border color is simply mapped to
the background color of the touch screen. Not as good as the real thing, but
at least it avoids the scaling problem.
- Good 48k/128k snapshot support - the emulator supports all SNA, Z80, and SZX snapshots,
including compression and button config settings.
- 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.
- Virtual tape deck - the emulator features virtual tape deck
with both manual and automatic control and convenient tape browser for
precise tape positioning. And you can even listen to the tape sound if you wish.
- Fair TRD/SCL support - both TRD/SCL disk files can be loaded.
The autoboot feature is included, too.
- 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.
Whenever you load a game, 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,
with the comfort of each using your own DS. Simple like that.
- Save state support - there are nine save slots for storing the
save state both in memory and (when possible) on card in SZX snapshot
format, plus one save slot used for both recovering the lost 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.
- Screenshot support - you can save SCR/BMP screenshots anytime you wish.
You can even load the SCR files back for viewing.
- Configurable input support - the buttons can be configured to
simulate any keyboard key or joystick movement as well as any of the actions
accessible via menus.
- Memory viewer and disassembler - you can explore the content of the
Spectrum memory, shown as bytes, words, characters, BASIC tokens, text or Z80 disassembly.
- 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 DS 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 to be implemented soon:
- Tape recording - saving to tapes is one of the most requested features,
and for a good reason too. Shouldn't be really difficult to implement now.
- Improved TR-DOS support - there is still few more
things to do. Making the save disk feature accessible separately is necessary.
Formatting should be implemented, too.
And a disk content browser just to top it off.
- General UI polish - there are several things which may still be
improved, and little features added here and there. Confirmation requesters
are one of them. Favorites/latest menu would be nice, too.
And stats tracking would be interesting as well.
- Improved save file requester - the save requester could still
use lot of work. Renaming of files is necessary, as is deleting and copying of files.
Features to be implemented one day:
- Proper border emulation - it should be quite easy to emulate
border precisely now, the key question is how to display it? There is one
idea I have, see how it turns out...
- Better POKE support - being able to use POKEs directly would be nice.
Eventually try to implement automatic POKE finder, too.
Features which might be eventually implemented:
- RZX recording support - RZX recording might be a nice feature to
have. Not sure if it really pays off to spend the time on this, though.
- Better homebrew integration - I should check what are the ways of
improving the integration with various homebrew launchers.
- Mouse emulation - being able to use Art Studio with the stylus
might be fun, after all.
- ULA+ support - explore the possibility of adding the ULA+
compatible palette support.
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
(which you can find here)
and convert any problematic TZX to PZX in case you want to use it.
- ZX Printer support - I just have no idea how this would be
useful.
- Interface I support - although I own one 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.
- +2A/+3 and clones support - I have never been fond of the new
Amstrad models, and I see no reason why emulating them on DS would be useful. As
for other clones, I just do not want to waste my time on things which are
not necessary. I might be convinced to emulate something if it is really
worth it, but don't hold your breath.
Developer's diary
For those of you who are technically inclined or just plain curious, I have written a
little diary of how I implemented ZXDS over the course of time. You can find it
here.
I haven't had enough time to update it for quite some time now,
but some say it's still an interesting read nevertheless.
Donations
If you would like to express your appreciation of ZXDS, consider supporting
it by donating whatever you think it is worth.
Remember that even the smallest amount you can afford will make a difference.
To donate, simply click the button below and follow the instructions.
By donating you appreciate what you have already got for free and encourage further development at the same time.
Thank you very much for both.
Legalese
You know, the usual disclaimer stuff. I can not be held responsible for
anything this program or any actions related to the use of this program will
cause to you, your hardware, or anyone or anything else. You use this software
entirely on your own risk.
Any trademarks or registered trademarks I might have mentioned in this text
or elsewhere on this website are owned by their respective owners.
Contact
Apart from things explicitly mentioned above, I am NOT interested in bug reports
of any kind at this time. However, if you still wish to contact me
for some reason, please write to zxds at raxoft dot cz.
Afterall, I don't mind getting encouraging emails every now and then.
Be warned, though, I am extremely busy person, so please don't expect me to write back
immediately. At my discretion, I may even choose not to answer at all.
There is no need to hammer my mailbox in either case. Thanks.