![]() * Draft GPU3D renderer modularization * Update sources C++ standard to C++17 The top-level `CMakeLists.txt` is already using the C++17 standard. * Move GLCompositor into class type Some other misc fixes to push towards better modularity * Make renderer-implementation types move-only These types are going to be holding onto handles of GPU-side resources and shouldn't ever be copied around. * Fix OSX: Remove 'register' storage class specifier `register` has been removed in C++17... But this keyword hasn't done anything in years anyways. OSX builds consider this "warning" an error and it stops the whole build. * Add RestartFrame to Renderer3D interface * Move Accelerated property to Renderer3D interface There are points in the code base where we do: `renderer != 0` to know if we are feeding an openGL renderer. Rather than that we can instead just have this be a property of the renderer itself. With this pattern a renderer can just say how it wants its data to come in rather than have everyone know that they're talking to an OpenGL renderer. * Remove Accelerated flag from GPU * Move 2D_Soft interface in separate header Also make the current 2D engine an "owned" unique_ptr. * Update alignment attribute to standard alignas Uses standardized `alignas` rather than compiler-specific attributes. https://en.cppreference.com/w/cpp/language/alignas * Fix Clang: alignas specifier Alignment must be specified before the array to align the entire array. https://en.cppreference.com/w/cpp/language/alignas * Converted Renderer3D Accelerated to variable This flag is checked a lot during scanline rasterization. So rather than having an expensive vtable-lookup call during mainline rendering code, it is now a public constant bool type that is written to only once during Renderer3D initialization. |
||
---|---|---|
.github | ||
cmake | ||
icon | ||
src | ||
.gitignore | ||
CMakeLists.txt | ||
LICENSE | ||
README.md | ||
melon.icns | ||
melon.ico | ||
melon.plist.in | ||
melon.qrc | ||
melon.rc.in | ||
melon_grc.xml | ||
msys-dist.sh | ||
net.kuribo64.melonDS.desktop | ||
xp.manifest |
README.md
melonDS
DS emulator, sortaThe 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 libarchive-dev libepoxy-dev
- Compile:
mkdir -p build
cd build
cmake ..
make -j$(nproc --all)
Windows:
- Install MSYS2
- Open the MSYS2 MinGW 64-bit terminal
- Update the packages using
pacman -Syu
and reopen the terminal if it asks you to
Dynamic builds (with DLLs)
- Install dependencies:
pacman -S git make mingw-w64-x86_64-{cmake,mesa,SDL2,toolchain,qt5,libslirp,libarchive,libepoxy}
- 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)
- Install dependencies:
pacman -S git make mingw-w64-x86_64-{cmake,mesa,SDL2,toolchain,qt5-static,libslirp,libarchive,libepoxy}
- 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:
- Install the Homebrew Package Manager
- Install dependencies:
brew install git pkg-config cmake sdl2 qt@5 libslirp libarchive libepoxy
- 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
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.