ZXDS is an emulator of Sinclair ZX Spectrum for Nintendo DS, written by Patrik Rak. It accurately emulates Spectrum 48k, 128k and Pentagon, and supports SNA/Z80/SZX snapshots, TAP/TZX/PZX tape files, TRD/SCL disk files and RZX replay files. It has some other noteworthy features, like the ability to download all these files online over WiFi, the peer-to-peer WiFi multiplayer, or Kempston mouse emulation.
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 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 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.
- Good TRD/SCL support - both TRD/SCL disk files can be loaded and saved. The autoboot feature is included, too.
- Builtin disk browser - it is possible to examine the TR-DOS 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. 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, each using your own DS. Simple like that.
- Save state support - there are nine builtin 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. Of course, you are not limited to these handy save slots only - you can save any amount of SZX/Z80 snapshots using the save requester, too.
- 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.
- 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. In 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 viewer to examine the content of any file available locally or online. Handy for reading the instructions or walkthroughs for 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 each 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 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 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.
- 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...
- Improved TR-DOS support - there is still few more things to do. Formatting should be eventually implemented, even though it's not a high priority anymore.
- Better homebrew integration - I should check what are the ways of improving the integration with various homebrew launchers.
- ULA+ support - explore the possibility of adding the ULA+ compatible palette support.
- Custom ROM support - perhaps let people choose what ROMs they want to use.
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.