DS emulator, sorta
Go to file
RSDuck 6e8bac3909 Merge vram dirty tracking
Squashed commit of the following:

commit b463a05d4b909372f0cd1ad91caa0c77a25e5901
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Mon Nov 30 01:55:35 2020 +0100

    minor fix

commit ce73cebbdf5da243d7ebade82d8799ded9cd6b28
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Mon Nov 30 00:43:08 2020 +0100

    fix dirty flags of BG/OBJ mappings not being reset

commit fc5d73a6178e3adc444398bdd23de8314b5ca8f8
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Mon Nov 30 00:11:13 2020 +0100

    use flat vram for gpu2d everywhere

commit 34ee9fe2bf04fcfa2a5a1c8d78d70007e606f1a2
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Sat Nov 28 19:10:34 2020 +0100

    mark VRAM dirty for display capture

commit e8778fa2f429c6df0eece19d6a5ee83ae23a0cf4
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Sat Nov 28 18:59:31 2020 +0100

    use flat VRAM for textures and texpals
    also skip rendering if nothing changed and a bunch of fixes

commit 53f2041e2e1a28b35702a2ed51de885c36689f71
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Fri Nov 27 18:29:56 2020 +0100

    use vram dirty tracking for extpals
    also preparations to take this further

commit 4cdfa329e95aed26d3b21319c8fd86a04abf20f7
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Mon Nov 16 23:32:22 2020 +0100

    VRAM dirty tracking
2020-11-30 19:49:18 +01:00
.github Add support for macOS (#771) 2020-11-29 17:11:33 +01:00
cmake build: add mingw64 cross-compiling 2017-12-09 18:06:40 +08:00
flatpak Remove redundant desktop file and change desktop/icon file name to net.kuribo64.melonDS, also change melonds to melonDS. 2019-12-19 02:48:11 +01:00
icon gtk: add icon 2017-12-16 05:43:34 +01:00
src Merge vram dirty tracking 2020-11-30 19:49:18 +01:00
.gitignore implement block linking + some refactoring 2020-06-16 11:59:06 +02:00
CMakeLists.txt Add support for macOS (#771) 2020-11-29 17:11:33 +01:00
LICENSE reorganize repo, move shit around 2017-03-16 23:01:22 +01:00
melon_grc.xml gtk: add icon 2017-12-16 05:43:34 +01:00
melon.ico windows: add icon 2017-12-16 04:10:32 +01:00
melon.qrc add window icon 2020-05-20 03:01:09 +02:00
melon.rc muhhahahahahh 2020-09-04 10:36:50 +02:00
melonDS.icns Add support for macOS (#771) 2020-11-29 17:11:33 +01:00
melonDS.plist Add support for macOS (#771) 2020-11-29 17:11:33 +01:00
msys-dist.sh Deploy Qt libraries with dynamic Windows builds 2020-07-31 16:50:19 -04:00
net.kuribo64.melonDS.desktop Remove redundant desktop file and change desktop/icon file name to net.kuribo64.melonDS, also change melonds to melonDS. 2019-12-19 02:48:11 +01:00
README.md Add support for macOS (#771) 2020-11-29 17:11:33 +01:00
xp.manifest start work on the input config dialog. nonfunctional and looks like shit. 2017-03-23 23:38:40 +01:00

melonDS

DS emulator, sorta

The goal is to do things right and fast, akin to blargSNES (but hopefully better). But also to, you know, have a fun challenge :)


How to use

melonDS requires BIOS/firmware copies from a DS. Files required:

  • bios7.bin, 16KB: ARM7 BIOS
  • bios9.bin, 4KB: ARM9 BIOS
  • firmware.bin, 128/256/512KB: firmware

Firmware boot requires a firmware dump from an original DS or DS Lite. DS firmwares dumped from a DSi or 3DS aren't bootable and only contain configuration data, thus they are only suitable when booting games directly.

Possible firmware sizes

  • 128KB: DSi/3DS DS-mode firmware (reduced size due to lacking bootcode)
  • 256KB: regular DS firmware
  • 512KB: iQue DS firmware

DS BIOS dumps from a DSi or 3DS can be used with no compatibility issues. DSi BIOS dumps (in DSi mode) are not compatible. Or maybe they are. I don't know.

As for the rest, the interface should be pretty straightforward. If you have a question, don't hesitate to ask, though!

How to build

Linux:

  • Install dependencies:
sudo apt-get install cmake libcurl4-gnutls-dev libpcap0.8-dev libsdl2-dev qtbase5-dev qtdeclarative5-dev libslirp-dev
  • Compile:
mkdir -p build
cd build
cmake ..
make -j$(nproc --all)

Windows:

  1. Install MSYS2
  2. Open the MSYS2 MinGW 64-bit terminal
  3. Update the packages using pacman -Syu and reopen the terminal if it asks you to

Dynamic builds (with DLLs)

  1. Install dependencies: pacman -S git make mingw-w64-x86_64-{cmake,mesa,SDL2,toolchain,qt5,libslirp}
  2. Run the following commands
    git clone https://github.com/Arisotura/melonDS.git
    cd melonDS
    mkdir build
    cd build
    cmake .. -G "MSYS Makefiles"
    make -j$(nproc --all)
    ../msys-dist.sh
    

If everything went well, melonDS and the libraries it needs should now be in the dist folder.

Static builds (without DLLs, standalone executable)

  1. Install dependencies: pacman -S git make mingw-w64-x86_64-{cmake,mesa,SDL2,toolchain,qt5-static,libslirp}
  2. Run the following commands
    git clone https://github.com/Arisotura/melonDS.git
    cd melonDS
    mkdir build
    cd build
    cmake .. -G 'MSYS Makefiles' -DBUILD_STATIC=ON -DQT5_STATIC_DIR=/mingw64/qt5-static
    make -j$(nproc --all)
    mkdir dist && cp melonDS.exe dist
    

If everything went well, melonDS should now be in the dist folder.

macOS:

  1. Install the Homebrew Package Manager
  2. Install dependencies: brew install git pkg-config cmake sdl2 qt5 libslirp
  3. Compile:
    git clone https://github.com/Arisotura/melonDS.git
    cd melonDS
    mkdir build && cd build
    cmake .. -DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5
    make -j$(sysctl -n hw.ncpu)
    mkdir dist && cp -r melonDS.app dist
    

If everything went well, melonDS.app should now be in the dist folder.

TODO LIST

  • DSi emulation
  • the impossible quest of pixel-perfect 3D graphics
  • improve libui and the emulator UI
  • support for rendering screens to separate windows
  • emulating some fancy addons
  • other non-core shit (debugger, graphics viewers, cheat crapo, etc)

TODO LIST FOR LATER

  • better wifi
  • maybe emulate flashcarts or other fancy hardware
  • big-endian compatibility (Wii, etc)
  • LCD refresh time (used by some games for blending effects)
  • any feature you can eventually ask for that isn't outright stupid

Credits

  • Martin for GBAtek, a good piece of documentation
  • Cydrak for the extra 3D GPU research
  • limittox for the icon
  • All of you comrades who have been testing melonDS, reporting issues, suggesting shit, etc

License

GNU GPLv3 Image

melonDS is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.