Dualis logo

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.


CPU: Fixed a bug in the division SWI
CPU: Improved IRQ handling a bit
CPU: Added emulation of GetCrc16, GetSineTable, GetPitchTable and GetVolumeTable
GPU: 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.


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.


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


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.


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.


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.


*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.


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.


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



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 ;)


CPU: Added a few missing LDM/STM instructions
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.


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


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


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


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


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)


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


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)


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


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


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


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)


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


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.


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

Older news..

Design, content and whatnot © Mic 2006 - micol972<TheAtSign>