Dualis is a plugin-based DS emulator for x86/Win32 computers. It is written in x86 assembly and C++.

Important information:

Dualis is not able to run dumps of NDS cartridges. Do not ask me if/when it will be able to run said dumps. Also, do not ask me how/where to get non-public material concerning the DS.
If you didn't understand the last three sentences then get the f*** out. Thanks.

2007-05-27

Fixed a bug in the backdrop color selection that would sometimes occur

GPU:

Fixed a bug in the rendering of 256-color r/s BGs (mode 4)

GPU:

Modfied palette offset calculation for 256-color textures

GUI:

Fixed a bug where the emulator would occationally freeze for a couple of seconds

GUI:

Fixed a bug where CFlash initialization would sometimes fail when loading a ROM through the File menu

GUI:

CFlash emulation is now automatically disabled when a compressed ROM is loaded (.zip/.7z)

GUI:

Added a dummy sound emulation mode that works on computers with no DirectSound (EmulateSound=2 in dualis.ini)

GUI:

Fixed a bug related to loading a ROM by double-clicking it in explorer

GUI:

Added a "Recent" menu

GUI:

Fixed some bugs in the map viewer

MMU:

Fixed an LZ77 decompression bug

The full source of emulator is available (I use VS2005, but VS6 might also work), so if you're unhappy about some feature that is missing/broken, feel free to fix it yourself.

2006-05-03

CPU:

Fixed a bug in the division SWI

GPU:

Fixed some tile flipping bugs

GPU:

Optimized rendering of extended palette BGs a bit

GPU:

Disabled rendering of OBJ windows

MMU:

The FAT is now writeable

INP:

The keyboard layout can now be configured in dualis.ini

GUI:

Improved the texture viewer

FAT write operations are fairly restricted at this point, see the README section on GBAMP emulation for more details.

2006-04-30

CPU:

Fixed updates of some function pointers after changing the ITCM size

MMU:

Added support for send FIFO flushing

MMU:

Added support for send FIFO empty IRQs

MMU:

Added support for IPCSYNC IRQs

MMU:

Fixed a bug in the handling of FAT long filename entries

MMU:

Fixed some bugs in the FAT emulation that would occur if a directory contained more than 256 directory entries

GUI:

Modified CPU synchronization

2006-04-21

GPU:

Fixed some texture transparency problems

GPU:

Fixed some bugs when rendering 16-color rotoscale OBJs

GPU:

Fixed some bugs when rendering extended palette rotoscale BGs

MMU:

Added experimental SPI touchscreen handling

MMU:

Fixed some bugs in the handling of long filenames in the FAT

GUI:

Improved timer event handling a bit

GUI:

Fixed .zip loading

GUI:

Added support for .7z loading

The SPI touchscreen handling is not perfect yet and only works somewhat, so the old faked method is still used as a fallback for homebrew ROMs using libnds.

2006-04-13

CPU:

Fixed some problems with mode changes after SUBS

CPU:

Fixed some problems with SWI 6

CPU:

Fixed some problems with address writeback for LDM instructions

CPU:

Modified interrupt return address handling a bit

CPU:

Added a few missing LDM/STM instructions

CPU:

Added the Thumb BLX instructions

GPU:

Fixed alpha blending for extended palette BGs

GPU:

Added the possibility to turn off 3D emulation

APU:

Added support for ADPCM audio

MMU:

Fixed some destination address control bugs in DMA transfers

MMU:

Fixed some problems with the IPC FIFO

MMU:

Added support for IPC FIFO interrupts

MMU:

Added support for virtual ITCM resizing (up to 32 MB)

MMU:

Added support for 64bit/64bit->64bit operations to the hardware divider

GUI:

Fixed some problems with the keyboard shortcuts when using the debugging windows

When running the demos from E3 2005 you should generally use the GDI renderer and disable 3D emulation in the video settings. It should also be noted that touchscreen input does not work in those demos at this point.

2006-03-28

GPU:

Added support for the A3I5 and A5I3 texture formats

GPU:

Fixed some errors in color selection for paletted textures

MMU:

Upped the FAT limits to max 32768 files/directories with a total size of 256 MB

MMU:

Added support for long filenames in the FAT

GUI:

GBAMP emulation can be turned off (on memory tab, or in dualis.ini)

GUI:

Switched from WM_TIMER to a multimedia timer callback

Note that the max number of directory entries at the root level still is 512, and that the max total number of files/directories will be lower than 32768 if there are files that uses long filenames.

2006-03-24

*Update: The original version of Dualis 19 would freeze if you loaded a ROM by double-clicking it in explorer. This should now be fixed.

CPU:

Added the LZ77UnCompVram SWI (callbacks are ignored)

APU:

Added support for PSG noise

MMU:

Fixed a problem with the IRQ flags sometimes being set when they shouldn't be

MMU:

Added some support for ATAPI and FAT16 (GBAMP)

GUI:

Screenshots are saved in the same directory as the ROM file

GUI:

Various small changes to allow the FAT emulation to work

Some current limitations of the FAT emulation: Only read operations are supported, max number of files/directories: 256, max combined file size: 32 MB, only 8.3 format filenames.

2006-03-20

CPU:

Added the LZ77UnCompWram SWI

CPU:

Fixed a typo in the SWI 3 emulation that caused single cycle waits

GPU:

Added the option to display only one of the DS' screens (useful in fullscreen mode if only one of the screens are used)

GPU:

Added support for texture alpha bits (for 16-bit textures)

APU:

Optimized the resampling filter a bit, and applied filter to PCM16 samples as well

APU:

Added PSG emulation (rectangle waves only)

GUI:

Added fullscreen support (toggle with Alt+Return)

GUI:

Added a couple more registers to the I/O register viewers

The preferred fullscreen resolution can be specified in dualis.ini.
Some new keyboards shortcuts have been added: Ctrl+Shift+1..Ctrl+Shift+3 to select which of the screens are displayed, and Ctrl+Shift+F to toggle on-screen fps display while in fullscreen mode.
I've also written a little PSG demo that plays 3-channel rectangle wave music - you can find it here.

2006-03-17

CPU:

Modified the code for SWI 3-6 a bit

APU:

Reduced sound latency. If this causes problems on slower computers you can enable a larger buffer in dualis.ini

APU:

Corrected sound looping in most cases

APU:

Improved resampling quality a bit (PCM8 only)

APU:

Added a sampling rate option in the .ini file

MMU:

Added support for the timer registers on the ARM7 side

MMU:

Corrected mirroring at 0x3800000-0x3FFFFFF on the ARM9 when WRAM is split

GUI:

Added a viewer for the ARM7 I/O registers

GUI:

Added support for .ds.gba files (the 512-byte loader is skipped so they are effectively treated as .nds files)

GUI:

Fixed problems with reading from the upper 32kB of ARM7 RAM in the disassembler

2006-03-15

*BLEEP BLEEP BLOP*

APU:

Added rudimentary sound emulation

MMU:

Added handling of sound registers

GUI:

Added a sound master enable option on the audio tab

GUI:

Fixed a bug where multiple instances of the same dialog window could be opened at once

Only the PCM8 and PCM16 audio formats are handled right now. Sound mixing is currently fixed at 32kHz mono, so panning doesn't work. If it becomes too painful to listen to you can disable sound altogether through the gui or in the .ini file ;)

2006-03-14

CPU:

Added a few missing LDM/STM instructions

CPU:

Added MRS/MSR SPSR

CPU:

SWI 3 emulation is more accurate

MMU:

Fixed some timer bugs

MMU:

Fixed some VRAM mapping bugs

MMU:

Fixed handling of out-of-bounds ROM accesses

GUI:

Fixed some bugs in the disassembler and memory viewer

GUI:

Added an auto update mode to the I/O register viewer

GUI:

DMA transfers can be logged to the debug console

The CPU plugins is this release are not compatible with earlier versions of the MMU and GUI.

2006-03-11

GPU:

Fixed some errors in the OpenGL and Direct3D renderers when alpha blending was used

MMU:

Added the 64 kB of GBA cart save RAM

MMU:

Fixed mirrored 8-bit writes to WRAM

GUI:

Added an auto update mode to the disassembler

GUI:

Fixed some minor bugs in the disassembler and palette viewer

2006-03-03

CPU:

Added SWI 3 and 6

CPU:

Fixed some problems with SWI 5

CPU:

Modfied MSR a bit

GPU:

Added support for the VTX_DIFF command

GPU:

Fixed some bugs with rotation parameters on the sub core

GPU:

Fixed the GL_INVALID_OPERATION error that could occur when switching back and forth between different renderers

MMU:

Fixed accesses by the ARM7 in the 0x02100000-0x023FFFFF memory range

MMU:

Changed initial value of WRAMCNT to 3

MMU:

Fixed a typo that lead to bad 16/32-bit WRAM writes from the ARM7

GUI:

Added a few more Thumb opcodes to the disassembler

GUI:

Added a "Turbo SWI" option on the CPU tab for ARM7 binaries that mainly sit and wait for vblanks

2006-03-01

Two are better than one.

This release features the addition of the second CPU (ARM7TDMI). Touchscreen access is still faked in the same manner as in earlier versions, and not all parts of ARM7 memory are handled correctly yet.
Note that earlier versions of the plugins are more or less incompatible with this version.

CPU:

Added emulation of the ARM7TDMI

GPU:

Modified the hblank/vblank code to handle both processors

MMU:

Added the ARM7TDMI memory space (incomplete)

MMU:

Added some support for the WRAM control register

GUI:

The disassembler can now be used for both processors

GUI:

The disassembler now shows the CPSR mode bits

GUI:

Fixed overwriting of program code for programs loaded at 0x02000000

2006-02-25

Due to some technical problems the site has been down on and off during the past 24 hours. But now it's up again, and with a new release.

GPU:

Fixed rendering of transparent areas on 256-color bitmap BGs

GPU:

Fixed background color in the OpenGL renderer when luma effects are used

MMU:

Added support for 64bit/32bit operations to the hardware divider

MMU:

Fixed 32-bit reads from the IF register

MMU:

Modified IRQ handling a bit

2006-02-25

CPU:

Changed CPSR bits when entering IRQ mode

MMU:

Fixed some bugs introduced in Dualis 14.1

MMU:

Fixed writes to the DMA0 registers

GUI:

.nds files are now entirely loaded into memory (for romfs/gbfs)

GUI:

Fixed some bugs in the disassembler (CLZ, register-specified shifts)

2006-02-23

CPU:

Added SWI 11 (CpuSet)

GPU:

Added support for some paletted texture formats

GPU:

Added support for some more vertex formats (VTX_XY, VTX_XZ, ...)

GPU:

Added support for multiple textures

GUI:

Improved the texture viewer

2006-02-21

GPU:

Added support for texture wrapping

GPU:

Added support polygon alpha and wireframe rendering

GPU:

Added support for material commands

GPU:

Added polygon depth comparisons

GPU:

Fixed OpenGL errors that occured when VTX_BEGIN/END pairs spanned across more than one frame

GPU:

Fixed MTX_MULT_4X4 (missing break)

2006-02-20

CPU:

Added one of the missing CP15 operations

CPU:

Fixed flag updates for MVN instructions

GPU:

Added preliminary support for lighting

GPU:

Fixed rendering of extended palette OBJs in the D3D renderer

GPU:

Added support for display lists

GPU:

Added support for viewport commands

MMU:

Fixed a bug with fixed destination DMA transfers

MMU:

Fixed some bugs when writing to VRAMCNT_*

GUI:

Fixed some bugs in the disassembler

GUI:

Fixed some bugs in the texture viewer

2006-02-17

Three bloodclot dee.

Today marks the one year anniversary of the Dualis project. And what better way to celebrate that than with another release? This installment features much improved 3D emulation.

GPU:

Fixed some matrix operation bugs (OGL only)

GPU:

Modified 3D layer rendering (OGL only)

GPU:

Added limited texture mapping support (OGL only)

GPU:

Fixed capture source blending in the D3D renderer

GPU:

Added support for luma effects on extended palette OBJs (non-scaled)

GPU:

Master screen/char offset is now supported for rotoscale BGs

2006-02-13

GPU:

Added partial support for capturing

GPU:

Added support for luma effects on bitmap OBJs

GPU:

Fixed luma increase for BGs

GPU:

Fixed a bug with luma decrease enabled and no target layers selected

GPU:

Corrected the master brightness algorithm

2006-02-11

GPU:

Added support for flipping of bitmap OBJs

GPU:

Fixed a clipping bug for rotoscaled bitmap OBJs

MMU:

Fixed a bug that would sometimes result in bad 32-bit reads from VRAM

GUI:

Added support for zipped ROMs (only .nds)

GUI:

Added support for the master char/screen offsets in the map viewer

GUI:

Tile information is now diplayed when clicking on the map in the map viewer

GUI:

Added a texture viewer (supports only 15-bit textures at this point)

2006-02-09

GPU:

Fixed rendering of rotoscaled 1D bitmap sprites

GPU:

Added support for the master char/screen offset setting (text BGs)

GUI:

Map viewer and OAM viewer now support extended palettes

GUI:

Map viewer now supports tile flipping

GUI:

Map viewer now supports viewing of VRAM banks in LCDC mode

GUI:

Fixed rendering of 16-color OBJs with palette number >=8 in the OAM viewer

GUI:

Fixed rendering of 1D bitmap OBJs in the OAM viewer

2006-02-08

Some updates today..

CPU:

Fixed crashes when using SWIs in Thumb mode

GPU:

Fixed colors of extended palette OBJs in OpenGL mode

GPU:

Added emulation of the master brightness setting

GUI:

Improved the map viewer

The updated components are available individually, or as a complete package with all the latest components.

2006-02-07

CPU:

Optimized Thumb emulation

CPU:

Added support for mode changes on MOVS

CPU:

The IntrWait SWI can now be interrupted even when IME=0 (as it would on a real DS)

GPU:

Added support for main memory (FIFO) display mode

GPU:

Modfied reference coordinate calculation for rotoscale OBJs

GPU:

Fixed vertical OBJ clipping

GPU:

Fixed a problem with 1D bitmap OBJ mapping

GPU:

Fixed a bug where BGs would not be drawn if the VRAM selection bits in DISPCNT were non-zero

MMU:

Fixed 16- and 32-bit writes to VRAMCNT_*

MMU:

VRAM banks mapped to extended palettes are no longer accessible

GUI:

Added an OBJ viewer

GUI:

Added a map viewer (does not yet support all types of maps)

GUI:

Improved the tile viewer (VRAM bank selection)

GUI:

Changed the screenshot keyboard shortcuts to Ctrl+1..Ctrl+3 so as to not interfere with dialogs were entering numbers is needed