https://wiki.desmume.org/index.php?title=Special:Contributions/Rogerman&feed=atom&deletedOnly=&limit=50&target=Rogerman&topOnly=&year=&month=DeSmuME - User contributions [en]2024-03-29T07:28:31ZFrom DeSmuMEMediaWiki 1.17.0https://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2022-05-14T07:35:11Z<p>Rogerman: /* Set Up the Build Environment */</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for macOS may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files, provided with the DeSmuME source code, include several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== macOS App ===<br />
These build targets produce a self-contained macOS application package (or "app bundle"). These builds use our official macOS frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with macOS 10.6 or later. (Also compatible with macOS 10.5 if building from the Xcode 3 project).<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different macOS versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 3.2.6, so any machine running macOS 10.6 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is much faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with macOS v10.5 requires Xcode 3 to build.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Intel; LLVM-Clang) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using Clang 1.7. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Intel; LLVM-GCC) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-Clang) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using Clang 1.7 for ppc and GCC 4.2.1 for ppc64. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-GCC) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 -- Xcode 8) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (dev+) ===<br />
This build target is just like the normal macOS App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of macOS.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 8.2.1, so any machine running macOS 10.11.5 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 8) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (v10.5 Leopard Final Release Build) ===<br />
This build target is for producing final release builds of DeSmuME. These builds will use our official macOS frontend contained in an macOS app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports PowerPC 32-bit, Intel 32-bit, Intel 64-bit, Intel 64-bit Haswell, and Apple Silicon.<br />
* Binaries are compatible with macOS 10.5 and later.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Building the app for release takes several more steps than other builds.<br />
* Performing proper PGO exercises requires additional time and effort.<br />
* Requires a separate Mac or virtual machine running macOS 10.9.5 in order to run Xcode 3.2.6 and Xcode 6.2 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running macOS 10.12.6 or macOS 10.13.6 in order to run Xcode 8.3.3 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running the latest macOS (12.3.1 as of this writing) in order to run the latest Xcode (13.3.1 as of this writing) for intermediate build steps.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 1 PowerPC32; Xcode 3) | ''Builds for ppc, requires Xcode 3.2.6. Runs on PowerPC 32-bit.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6) | ''Compiles nib file and copies resources only, requires Xcode 6.2. Base container that runs all binaries, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8) | ''Builds for i386, requires Xcode 8.3.3. Runs on Intel 32-bit.''<br />
** DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8) | ''Builds for x86_64, requires Xcode 8.3.3. Runs on Intel 64-bit.''<br />
** DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode) | ''Builds for x86_64h, requires latest Xcode (13.3.1 as of this writing). Runs on Intel 64-bit Haswell.''<br />
** DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires latest Xcode (13.3.1 as of this writing). Runs on Apple Silicon.''<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Builds require Xcode 12.4 minimum, which requires a machine running macOS 10.15 or later to make this build.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user. This is especially noticeable when running older versions of OpenEmu.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (OpenEmu Plug-in -- Latest Xcode) | ''Builds for x86_64/x86_64h/arm64, requires Xcode 12.4 minimum. Runs on Intel 64-bit, Intel 64-bit Haswell and Apple Silicon, minimum OpenEmu 1.0.4.''<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the "desmume/src/frontend/cocoa" folder of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="400" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.2.6 only (runs on 10.6.8 Snow Leopard to 10.9.5 Mavericks)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| Typical Usage: v8.2.1 or later (runs on 10.11.6 El Capitan to latest macOS)<br />
Final Release Builds: v6.2 only (runs on 10.9.5 Mavericks)<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3.2.6 if any of the following conditions apply:<br />
* The machine you are building from is running macOS 10.9.5 Mavericks or earlier.<br />
* You are building a macOS app that can run on macOS 10.5 Leopard.<br />
* You are building a macOS app that can run on PowerPC processors.<br />
<br />
<br />
You must use Xcode 8.2.1 to Xcode 9.4.1 if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 32-bit processors.<br />
* You are building a macOS app that can run on macOS 10.6 Snow Leopard.<br />
<br />
<br />
You must use Xcode 10.1 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 64-bit Haswell processors.<br />
* You are building a macOS app that can use SSE4.1 for Intel 64-bit development builds. (This requires an Intel Core 2 Duo Penryn processor, dropping support for Merom and Santa Rosa processors. This also requires macOS 10.12 Sierra or later.)<br />
<br />
<br />
You must use Xcode 12.4 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Apple Silicon processors.<br />
* You are building the OpenEmu plug-in.<br />
<br />
<br />
You must use the following versions of Xcode if you are making the Final Release Build of the macOS app:<br />
* Xcode 3.2.6 running on 10.9.5 Mavericks<br />
* Xcode 6.2 running on 10.9.5 Mavericks<br />
* Xcode 8.3.3 running on 10.12.6 Sierra or 10.13.6 High Sierra<br />
* Latest Xcode version (13.3.1 as of this writing) running on latest macOS version (12.3.1 Monterey as of this writing)<br />
<br />
<br />
'''Note:''' ''macOS 10.7 Lion, 10.8 Mountain Lion, and 10.10 Yosemite are 'dead zones' for development. Mavericks can run Xcode 3.2.6 and Xcode 6.2 while being able to run all of the same versions that Lion and Mountain Lion can, while El Capitan can run Xcode 8.2.1 while being able to run all of the same versions that Yosemite can. Therefore, we do not recommend using Lion, Mountain Lion, or Yosemite for any meaningful development work.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode 3.2.6 Direct Download Link (for Snow Leopard to Mavericks): https://download.developer.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running macOS Monterey and have any kind of Apple ID (you do not specifically need an Apple Developer ID), then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12<br />
<br />
If you are already logged into your ADC account, you can also find the latest version of Xcode here (it will be at the top of the list):<br />
* Latest Xcode Direct Download Link: https://developer.apple.com/download/all/?q=Xcode<br />
<br />
==== Download Additional Xcode Versions for the macOS App Final Release Build ====<br />
If you will be making a Final Release Build of the macOS app, then you will also need these versions of Xcode. Again, you will need to be logged into ADC to use these direct download links.<br />
* Xcode 6.2 Direct Download Link (for Stage 2): https://download.developer.apple.com/Developer_Tools/Xcode_6.2/Xcode_6.2.dmg<br />
* Xcode 8.3.3 Direct Download Link (for Stage 3 and Stage 4): https://download.developer.apple.com/Developer_Tools/Xcode_8.3.3/Xcode_8.3.3.xip<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* Unless you are planning on building other software that must run on OS X v10.4, you may deselect the Mac OS X 10.4 SDK. (DeSmuME can only run on OS X v10.5 or later.)<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up Other Versions of Xcode ====<br />
If you downloaded Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
But if you downloaded Xcode directly from ADC, then you will need to perform the following steps to install Xcode:<br />
<br />
1. Move the .xip file to your Applications folder.<br />
<br />
2. Open the .xip file. It will automatically start decompressing itself into Xcode.app in your Applications folder. ''This will take some time to finish, so be patient.''<br />
<br />
3. When Xcode.app finishes decompressing, you may rename it to something else now. This can be useful if you are planning to run multiple versions of Xcode, naming each Xcode.app to something that helps you stay organized.<br />
<br />
4. Launch the Xcode app. Depending on which version of macOS you are running, you may or may not see Xcode performing a validation check on itself. If it does, allow Xcode to complete the check. ''This will take some time to finish, so be patient.''<br />
<br />
5. Once Xcode finishes launching, it may ask you to install command line tools. Allow this installation, since DeSmuME can use them for certain tasks.<br />
<br />
6. After the command line tools finish installing, Xcode should now be ready for your use.<br />
<br />
7. The .xip file is no longer necessary. You can choose to move it to a different location or delete it at this time.<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using git and is hosted on GitHub.<br />
* DeSmuME "master" Branch Download Link: https://github.com/TASEmulators/desmume/archive/refs/heads/master.zip<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/desmume/src/frontend/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (Xcode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== macOS App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (Xcode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the following build targets:<br />
* DeSmuME (macOS App; Intel; LLVM-Clang) ''Makes i386/x86_64 binaries, uses Clang 1.7''<br />
* DeSmuME (macOS App; Intel; LLVM-GCC) ''Makes i386/x86_64 binaries, uses GCC 4.2.1''<br />
* DeSmuME (macOS App; PowerPC; LLVM-Clang) ''Makes ppc/ppc64 binaries, uses Clang 1.7 for ppc and GCC 4.2.1 for ppc64''<br />
* DeSmuME (macOS App; PowerPC; LLVM-GCC) ''Makes ppc/ppc64 binaries, uses GCC 4.2.1''<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
==== Building Using Xcode 8 or Later ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. In Xcode, choose File > Project Settings....<br />
<br />
3. Click Advanced....<br />
<br />
4. Choose Legacy, then click Done. Click Done again to exit Project Settings.<br />
<br />
5. In the Product > Scheme menu, choose one of the following:<br />
* DeSmuME (macOS App; Intel64 -- Latest Xcode) ''Makes x86_64/x86_64h binaries, requires Xcode 10.1 or later''<br />
* DeSmuME (macOS App; AppleSilicon -- Latest Xcode) ''Makes arm64 binary, requires Xcode 12.4 or later''<br />
* DeSmuME (macOS App; Intel32 Intel64 -- Xcode 8) ''Makes i386/x86_64 binaries, minimum Xcode 8.2.1 - maximum Xcode 9.4.1''<br />
<br />
6. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder. The built app will also include the current git commit number.<br />
<br />
=== macOS App dev+ Build ===<br />
The steps here are similar to that of the normal macOS App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 8.2.1 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. In Xcode, choose File > Project Settings....<br />
<br />
3. Click Advanced....<br />
<br />
4. Choose Legacy, then click Done. Click Done again to exit Project Settings.<br />
<br />
5. In the Product > Scheme menu, choose one of the following:<br />
* DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) ''Makes x86_64/x86_64h binaries, requires Xcode 10.1 or later''<br />
* DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) ''Makes arm64 binary, requires Xcode 12.4 or later''<br />
* DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 8) ''Makes i386/x86_64 binaries, minimum Xcode 8.2.1 - maximum Xcode 9.4.1''<br />
<br />
''If you want to run dev+ build with Xcode's LLDB debugger:''<br />
<br />
6a. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Debug" folder.<br />
<br />
''If you need to use the dev+ build without running the debugger:''<br />
<br />
6b. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app. (Note that this build does use program optimizations.)<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== macOS App Final Release Build ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode 3.2.6 and Xcode 6.2 installed on a system running macOS 10.9.5 Mavericks.<br />
* You must have Xcode 8.3.3 installed on a system running macOS 10.12.6 Sierra or macOS 10.13.6 High Sierra.<br />
* You must have the latest version of Xcode running on the latest version of macOS. (At the time of this writing, the latest version of Xcode is 13.3.1, and the latest version of macOS is 12.3.1.)<br />
<br />
<br />
1. Let's start with building on macOS Mavericks: Open the "DeSmuME (Xcode 3).xcodeproj" project file using Xcode 3.2.6.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (macOS App; Release Stage 1 PowerPC32 -- Xcode 3)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (ppc32).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
7. While still on macOS Mavericks: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 6.2.<br />
<br />
8. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6).<br />
<br />
9. In Xcode, choose File > Project Settings....<br />
<br />
10. Click Advanced....<br />
<br />
11. Choose Legacy, then click Done. Click Done again to exit Project Settings.<br />
<br />
12. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
13. Choose Product > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME.app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
14. Quit both Xcode 3.2.6 and Xcode 6.2 on macOS Mavericks.<br />
<br />
15. On the next system running macOS Sierra or High Sierra: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 8.3.3.<br />
<br />
16. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8).<br />
<br />
17. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
18. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
19. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
20. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME will automatically launch.<br />
<br />
21. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
22. After all PGO exercises are complete, quit DeSmuME. Xcode should now report that it has generated an optimization profile.<br />
<br />
23. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (i386).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
24. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8).<br />
<br />
25. Repeat Steps 14 - 19.<br />
<br />
26. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (x86_64).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
27. Quit Xcode 8.3.3 on macOS Sierra / High Sierra.<br />
<br />
28. On the next system running the latest macOS: Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
29. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode).<br />
<br />
30. Repeat Steps 14 - 19.<br />
<br />
31. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (x86_64h).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
32. Choose Product > Scheme > DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode).<br />
<br />
33. Repeat Steps 14 - 19.<br />
<br />
34. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (arm64).app" in the "/desmume/src/frontend/cocoa/build/Release" folder, as well as combining all of the previously built binaries into the same DeSmuME.app container.<br />
<br />
And you're done! The newly built DeSmuME.app will be present in the "/desmume/src/frontend/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the "desmume/src/frontend/cocoa/openemu" folder, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/refs/heads/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. In the left-hand sidebar, click the "OpenEmu-SDK" project icon. This should show the project file's settings.<br />
<br />
3. In the project file settings, in the left-hand sidebar, click "OpenEmu-SDK" under Project.<br />
<br />
4. Click "Build Settings", and then click "All" to show all of the build settings at the project file level.<br />
<br />
5. For the Architectures setting, click its associated drop-down menu, and choose "Other...".<br />
<br />
6. Delete all existing settings by clicking the "-" button. (The one existing setting should be "$(ARCHS_STANDARD)".)<br />
<br />
7. While in the Architectures setting, click the "+" button and enter the setting "x86_64".<br />
<br />
8. Click the "+" button and enter the setting "x86_64h".<br />
<br />
9. Click the "+" button and enter the setting "arm64".<br />
<br />
10. In the upper-left corner of the Project Build settings, there will be another "+" button, where mousing over it will read "Add a new conditional or user-defined build setting". Click that button and choose "Add User-Defined Setting".<br />
<br />
11. The new setting will read "NEW_SETTING"; replace this "VALID_ARCHS".<br />
<br />
12. Click the empty space directly to the right of VALID_ARCHS to enter its associated setting. For this setting, enter the following exactly as shown:<br />
x86_64 x86_64h arm64<br />
<br />
13. Choose Product > Scheme > OpenEmuBase.<br />
<br />
14. Choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
15. After the build finishes, choose Product > Show Build Folder in Finder. Then in the Finder window that appears, you should be in a folder named "Build". Open the Products folder, then the Release folder. The new OpenEmuBase.framework bundle should now be present in this folder.<br />
<br />
16. Move OpenEmuBase.framework into the "desmume/src/frontend/cocoa/openemu" folder.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the "desmume/src/frontend/cocoa/openemu" folder. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in -- Latest Xcode).<br />
<br />
3. Choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
''The following step depends on if you have set the Project Settings to use a Legacy build location.''<br />
<br />
4a. '''If you did not previously set the Project Settings to use a Legacy build location:''' After the build finishes, choose Product > Show Build Folder in Finder. Then in the Finder window that appears, you should be in a folder named "Build". Open the Products folder, then the Release folder. The new DeSmuME.oecoreplugin bundle should now be present in this folder.<br />
<br />
4b. '''If you have previously set the Project Settings to use a Legacy build location:''' After the build finishes, in the Finder, navigate to the "desmume/src/frontend/cocoa/build/Release". The new DeSmuME.oecoreplugin bundle should now be present in this folder.<br />
<br />
5. Choose New > New Finder Window.<br />
<br />
6. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
7. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
8. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app!<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="200" |<br />
! scope="col" width="200" | macOS App<br />
! scope="col" width="200" | macOS App (dev+)<br />
! scope="col" width="200" | macOS App (Final Release)<br />
! scope="col" width="200" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| NO<br />
| NO<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
<br />
YES w/ SSE4.1 (macOS 10.12)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
YES w/ SSE4.1 (Xcode 10.1 or later)<br />
| YES (macOS 10.5)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Intel, 64-bit Haswell<br />
| YES (macOS 10.12)<br />
| YES (Xcode 10.1 or later)<br />
| YES (macOS 10.9)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Apple Silicon, 64-bit<br />
| YES (macOS 11.0)<br />
| YES (Xcode 12.4 or later)<br />
| YES (macOS 11.0)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | macOS 10.5 Leopard<br />
| YES[1]<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.6 Snow Leopard<br />
| YES<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.7 Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.8 Mountain Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.9 Mavericks<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.10 Yosemite<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.11 El Capitan<br />
| YES<br />
| YES (Xcode 8.2.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.12 Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.2)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.13 High Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.4.1)<br />
<br />
YES (Xcode 10.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.14 Mojave<br />
| YES<br />
| YES (Xcode 9.4.1)<br />
YES (Xcode 11.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 10.15 Catalina<br />
| YES<br />
| YES (Xcode 12.4)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 11.0 Big Sur<br />
| YES<br />
| YES (Xcode 13.2.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 12.0 Monterey<br />
| YES<br />
| YES (Xcode 13.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|}<br />
<br />
1. Available only by building with the "DeSmuME (Xcode 3).xcodeproj" file using Xcode 3.2.6.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2022-05-09T22:46:24Z<p>Rogerman: </p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for macOS may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files, provided with the DeSmuME source code, include several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== macOS App ===<br />
These build targets produce a self-contained macOS application package (or "app bundle"). These builds use our official macOS frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with macOS 10.6 or later. (Also compatible with macOS 10.5 if building from the Xcode 3 project).<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different macOS versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 3.2.6, so any machine running macOS 10.6 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is much faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with macOS v10.5 requires Xcode 3 to build.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Intel; LLVM-Clang) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using Clang 1.7. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Intel; LLVM-GCC) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-Clang) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using Clang 1.7 for ppc and GCC 4.2.1 for ppc64. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-GCC) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 -- Xcode 8) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (dev+) ===<br />
This build target is just like the normal macOS App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of macOS.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 8.2.1, so any machine running macOS 10.11.5 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 8) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (v10.5 Leopard Final Release Build) ===<br />
This build target is for producing final release builds of DeSmuME. These builds will use our official macOS frontend contained in an macOS app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports PowerPC 32-bit, Intel 32-bit, Intel 64-bit, Intel 64-bit Haswell, and Apple Silicon.<br />
* Binaries are compatible with macOS 10.5 and later.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Building the app for release takes several more steps than other builds.<br />
* Performing proper PGO exercises requires additional time and effort.<br />
* Requires a separate Mac or virtual machine running macOS 10.9.5 in order to run Xcode 3.2.6 and Xcode 6.2 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running macOS 10.12.6 or macOS 10.13.6 in order to run Xcode 8.3.3 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running the latest macOS (12.3.1 as of this writing) in order to run the latest Xcode (13.3.1 as of this writing) for intermediate build steps.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 1 PowerPC32; Xcode 3) | ''Builds for ppc, requires Xcode 3.2.6. Runs on PowerPC 32-bit.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6) | ''Compiles nib file and copies resources only, requires Xcode 6.2. Base container that runs all binaries, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8) | ''Builds for i386, requires Xcode 8.3.3. Runs on Intel 32-bit.''<br />
** DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8) | ''Builds for x86_64, requires Xcode 8.3.3. Runs on Intel 64-bit.''<br />
** DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode) | ''Builds for x86_64h, requires latest Xcode (13.3.1 as of this writing). Runs on Intel 64-bit Haswell.''<br />
** DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires latest Xcode (13.3.1 as of this writing). Runs on Apple Silicon.''<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Builds require Xcode 12.4 minimum, which requires a machine running macOS 10.15 or later to make this build.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user. This is especially noticeable when running older versions of OpenEmu.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (OpenEmu Plug-in -- Latest Xcode) | ''Builds for x86_64/x86_64h/arm64, requires Xcode 12.4 minimum. Runs on Intel 64-bit, Intel 64-bit Haswell and Apple Silicon, minimum OpenEmu 1.0.4.''<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the "desmume/src/frontend/cocoa" folder of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.2.6 only (runs on 10.6.8 Snow Leopard to 10.9.5 Mavericks)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| Typical Usage: v8.2.1 or later (runs on 10.11.6 El Capitan to latest macOS)<br />
Final Release Builds: v6.2 only (runs on 10.9.5 Mavericks)<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3.2.6 if any of the following conditions apply:<br />
* The machine you are building from is running macOS 10.9.5 Mavericks or earlier.<br />
* You are building a macOS app that can run on macOS 10.5 Leopard.<br />
* You are building a macOS app that can run on PowerPC processors.<br />
<br />
<br />
You must use Xcode 8.2.1 to Xcode 9.4.1 if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 32-bit processors.<br />
* You are building a macOS app that can run on macOS 10.6 Snow Leopard.<br />
<br />
<br />
You must use Xcode 10.1 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 64-bit Haswell processors.<br />
* You are building a macOS app that can use SSE4.1 for Intel 64-bit development builds. (This requires a Core2Duo Penryn processor, dropping support for Merom processors, This also requires macOS 10.12 Sierra or later.)<br />
<br />
<br />
You must use Xcode 12.4 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Apple Silicon processors.<br />
* You are building the OpenEmu plug-in.<br />
<br />
<br />
You must use the following versions of Xcode if you are making the Final Release Build of the macOS app:<br />
* Xcode 3.2.6 running on 10.9.5 Mavericks<br />
* Xcode 6.2 running on 10.9.5 Mavericks<br />
* Xcode 8.3.3 running on 10.12.6 Sierra or 10.13.6 High Sierra<br />
* Latest Xcode version (13.3.1 as of this writing) running on latest macOS version (12.3.1 Monterey as of this writing)<br />
<br />
<br />
'''Note:''' ''macOS 10.7 Lion, 10.8 Mountain Lion, and 10.10 Yosemite are 'dead zones' for development. Mavericks can run Xcode 3.2.6 and Xcode 6.2 while being able to run all of the same versions that Lion and Mountain Lion can, while El Capitan can run Xcode 8.2.1 while being able to run all of the same versions that Yosemite can. Therefore, we do not recommend using Lion, Mountain Lion, or Yosemite for any meaningful development work.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode 3.2.6 Direct Download Link (for Snow Leopard to Mavericks): https://download.developer.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running macOS Monterey and have any kind of Apple ID (you do not specifically need an Apple Developer ID), then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12<br />
<br />
If you are already logged into your ADC account, you can also find the latest version of Xcode here (it will be at the top of the list):<br />
* Latest Xcode Direct Download Link: https://developer.apple.com/download/all/?q=Xcode<br />
<br />
==== Download Additional Xcode Versions for the macOS App Final Release Build ====<br />
If you will be making a Final Release Build of the macOS app, then you will also need these versions of Xcode. Again, you will need to be logged into ADC to use these direct download links.<br />
* Xcode 6.2 Direct Download Link (for Stage 2): https://download.developer.apple.com/Developer_Tools/Xcode_6.2/Xcode_6.2.dmg<br />
* Xcode 8.3.3 Direct Download Link (for Stage 3 and Stage 4): https://download.developer.apple.com/Developer_Tools/Xcode_8.3.3/Xcode_8.3.3.xip<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* Unless you are planning on building other software that must run on OS X v10.4, you may deselect the Mac OS X 10.4 SDK. (DeSmuME can only run on OS X v10.5 or later.)<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up Other Versions of Xcode ====<br />
If you downloaded Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
But if you downloaded Xcode directly from ADC, then you will need to perform the following steps to install Xcode:<br />
<br />
1. Move the .xip file to your Applications folder.<br />
<br />
2. Open the .xip file. It will automatically start decompressing itself into Xcode.app in your Applications folder. ''This will take some time to finish, so be patient.''<br />
<br />
3. When Xcode.app finishes decompressing, you may rename it to something else now. This can be useful if you are planning to run multiple versions of Xcode, naming each Xcode.app to something that helps you stay organized.<br />
<br />
4. Launch the Xcode app. Depending on which version of macOS you are running, you may or may not see Xcode performing a validation check on itself. If it does, allow Xcode to complete the check. ''This will take some time to finish, so be patient.''<br />
<br />
5. Once Xcode finishes launching, it may ask you to install command line tools. Allow this installation, since DeSmuME can use them for certain tasks.<br />
<br />
6. After the command line tools finish installing, Xcode should now be ready for your use.<br />
<br />
7. The .xip file is no longer necessary. You can choose to move it to a different location or delete it at this time.<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using git and is hosted on GitHub.<br />
* DeSmuME "master" Branch Download Link: https://github.com/TASEmulators/desmume/archive/refs/heads/master.zip<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/desmume/src/frontend/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (Xcode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== macOS App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (Xcode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the following build targets:<br />
* DeSmuME (macOS App; Intel; LLVM-Clang) ''Makes i386/x86_64 binaries, uses Clang 1.7''<br />
* DeSmuME (macOS App; Intel; LLVM-GCC) ''Makes i386/x86_64 binaries, uses GCC 4.2.1''<br />
* DeSmuME (macOS App; PowerPC; LLVM-Clang) ''Makes ppc/ppc64 binaries, uses Clang 1.7 for ppc and GCC 4.2.1 for ppc64''<br />
* DeSmuME (macOS App; PowerPC; LLVM-GCC) ''Makes ppc/ppc64 binaries, uses GCC 4.2.1''<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
==== Building Using Xcode 8 or Later ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. In Xcode, choose File > Project Settings....<br />
<br />
3. Click Advanced....<br />
<br />
4. Choose Legacy, then click Done. Click Done again to exit Project Settings.<br />
<br />
5. In the Product > Scheme menu, choose one of the following:<br />
* DeSmuME (macOS App; Intel64 -- Latest Xcode) ''Makes x86_64/x86_64h binaries, requires Xcode 10.1 or later''<br />
* DeSmuME (macOS App; AppleSilicon -- Latest Xcode) ''Makes arm64 binary, requires Xcode 12.4 or later''<br />
* DeSmuME (macOS App; Intel32 Intel64 -- Xcode 8) ''Makes i386/x86_64 binaries, minimum Xcode 8.2.1 - maximum Xcode 9.4.1''<br />
<br />
6. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder. The built app will also include the current git commit number.<br />
<br />
=== macOS App dev+ Build ===<br />
The steps here are similar to that of the normal macOS App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 8.2.1 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. In Xcode, choose File > Project Settings....<br />
<br />
3. Click Advanced....<br />
<br />
4. Choose Legacy, then click Done. Click Done again to exit Project Settings.<br />
<br />
5. In the Product > Scheme menu, choose one of the following:<br />
* DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) ''Makes x86_64/x86_64h binaries, requires Xcode 10.1 or later''<br />
* DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) ''Makes arm64 binary, requires Xcode 12.4 or later''<br />
* DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 8) ''Makes i386/x86_64 binaries, minimum Xcode 8.2.1 - maximum Xcode 9.4.1''<br />
<br />
''If you want to run dev+ build with Xcode's LLDB debugger:''<br />
<br />
6a. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Debug" folder.<br />
<br />
''If you need to use the dev+ build without running the debugger:''<br />
<br />
6b. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app. (Note that this build does use program optimizations.)<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== macOS App Final Release Build ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode 3.2.6 and Xcode 6.2 installed on a system running macOS 10.9.5 Mavericks.<br />
* You must have Xcode 8.3.3 installed on a system running macOS 10.12.6 Sierra or macOS 10.13.6 High Sierra.<br />
* You must have the latest version of Xcode running on the latest version of macOS. (At the time of this writing, the latest version of Xcode is 13.3.1, and the latest version of macOS is 12.3.1.)<br />
<br />
<br />
1. Let's start with building on macOS Mavericks: Open the "DeSmuME (Xcode 3).xcodeproj" project file using Xcode 3.2.6.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (macOS App; Release Stage 1 PowerPC32 -- Xcode 3)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (ppc32).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
7. While still on macOS Mavericks: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 6.2.<br />
<br />
8. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6).<br />
<br />
9. In Xcode, choose File > Project Settings....<br />
<br />
10. Click Advanced....<br />
<br />
11. Choose Legacy, then click Done. Click Done again to exit Project Settings.<br />
<br />
12. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
13. Choose Product > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME.app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
14. Quit both Xcode 3.2.6 and Xcode 6.2 on macOS Mavericks.<br />
<br />
15. On the next system running macOS Sierra or High Sierra: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 8.3.3.<br />
<br />
16. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8).<br />
<br />
17. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
18. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
19. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
20. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME will automatically launch.<br />
<br />
21. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
22. After all PGO exercises are complete, quit DeSmuME. Xcode should now report that it has generated an optimization profile.<br />
<br />
23. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (i386).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
24. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8).<br />
<br />
25. Repeat Steps 14 - 19.<br />
<br />
26. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (x86_64).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
27. Quit Xcode 8.3.3 on macOS Sierra / High Sierra.<br />
<br />
28. On the next system running the latest macOS: Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
29. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode).<br />
<br />
30. Repeat Steps 14 - 19.<br />
<br />
31. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (x86_64h).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
32. Choose Product > Scheme > DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode).<br />
<br />
33. Repeat Steps 14 - 19.<br />
<br />
34. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (arm64).app" in the "/desmume/src/frontend/cocoa/build/Release" folder, as well as combining all of the previously built binaries into the same DeSmuME.app container.<br />
<br />
And you're done! The newly built DeSmuME.app will be present in the "/desmume/src/frontend/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the "desmume/src/frontend/cocoa/openemu" folder, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/refs/heads/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. In the left-hand sidebar, click the "OpenEmu-SDK" project icon. This should show the project file's settings.<br />
<br />
3. In the project file settings, in the left-hand sidebar, click "OpenEmu-SDK" under Project.<br />
<br />
4. Click "Build Settings", and then click "All" to show all of the build settings at the project file level.<br />
<br />
5. For the Architectures setting, click its associated drop-down menu, and choose "Other...".<br />
<br />
6. Delete all existing settings by clicking the "-" button. (The one existing setting should be "$(ARCHS_STANDARD)".)<br />
<br />
7. While in the Architectures setting, click the "+" button and enter the setting "x86_64".<br />
<br />
8. Click the "+" button and enter the setting "x86_64h".<br />
<br />
9. Click the "+" button and enter the setting "arm64".<br />
<br />
10. In the upper-left corner of the Project Build settings, there will be another "+" button, where mousing over it will read "Add a new conditional or user-defined build setting". Click that button and choose "Add User-Defined Setting".<br />
<br />
11. The new setting will read "NEW_SETTING"; replace this "VALID_ARCHS".<br />
<br />
12. Click the empty space directly to the right of VALID_ARCHS to enter its associated setting. For this setting, enter the following exactly as shown:<br />
x86_64 x86_64h arm64<br />
<br />
13. Choose Product > Scheme > OpenEmuBase.<br />
<br />
14. Choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
15. After the build finishes, choose Product > Show Build Folder in Finder. Then in the Finder window that appears, you should be in a folder named "Build". Open the Products folder, then the Release folder. The new OpenEmuBase.framework bundle should now be present in this folder.<br />
<br />
16. Move OpenEmuBase.framework into the "desmume/src/frontend/cocoa/openemu" folder.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the "desmume/src/frontend/cocoa/openemu" folder. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in -- Latest Xcode).<br />
<br />
3. Choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
''The following step depends on if you have set the Project Settings to use a Legacy build location.''<br />
<br />
4a. '''If you did not previously set the Project Settings to use a Legacy build location:''' After the build finishes, choose Product > Show Build Folder in Finder. Then in the Finder window that appears, you should be in a folder named "Build". Open the Products folder, then the Release folder. The new DeSmuME.oecoreplugin bundle should now be present in this folder.<br />
<br />
4b. '''If you have previously set the Project Settings to use a Legacy build location:''' After the build finishes, in the Finder, navigate to the "desmume/src/frontend/cocoa/build/Release". The new DeSmuME.oecoreplugin bundle should now be present in this folder.<br />
<br />
5. Choose New > New Finder Window.<br />
<br />
6. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
7. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
8. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app!<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="200" |<br />
! scope="col" width="200" | macOS App<br />
! scope="col" width="200" | macOS App (dev+)<br />
! scope="col" width="200" | macOS App (Final Release)<br />
! scope="col" width="200" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| NO<br />
| NO<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
<br />
YES w/ SSE4.1 (macOS 10.12)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
YES w/ SSE4.1 (Xcode 10.1 or later)<br />
| YES (macOS 10.5)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Intel, 64-bit Haswell<br />
| YES (macOS 10.12)<br />
| YES (Xcode 10.1 or later)<br />
| YES (macOS 10.9)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Apple Silicon, 64-bit<br />
| YES (macOS 11.0)<br />
| YES (Xcode 12.4 or later)<br />
| YES (macOS 11.0)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | macOS 10.5 Leopard<br />
| YES[1]<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.6 Snow Leopard<br />
| YES<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.7 Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.8 Mountain Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.9 Mavericks<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.10 Yosemite<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.11 El Capitan<br />
| YES<br />
| YES (Xcode 8.2.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.12 Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.2)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.13 High Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.4.1)<br />
<br />
YES (Xcode 10.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.14 Mojave<br />
| YES<br />
| YES (Xcode 9.4.1)<br />
YES (Xcode 11.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 10.15 Catalina<br />
| YES<br />
| YES (Xcode 12.4)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 11.0 Big Sur<br />
| YES<br />
| YES (Xcode 13.2.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 12.0 Monterey<br />
| YES<br />
| YES (Xcode 13.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|}<br />
<br />
1. Available only by building with the "DeSmuME (Xcode 3).xcodeproj" file using Xcode 3.2.6.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2022-05-09T22:33:02Z<p>Rogerman: Account for the fact that the OpenEmu plug-in may not use the Legacy build location</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for macOS may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files, provided with the DeSmuME source code, include several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== macOS App ===<br />
These build targets produce a self-contained macOS application package (or "app bundle"). These builds use our official macOS frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with macOS 10.6 or later. (Also compatible with macOS 10.5 if building from the Xcode 3 project).<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different macOS versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 3.2.6, so any machine running macOS 10.6 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is much faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with macOS v10.5 requires Xcode 3 to build.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Intel; LLVM-Clang) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using Clang 1.7. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Intel; LLVM-GCC) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-Clang) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using Clang 1.7 for ppc and GCC 4.2.1 for ppc64. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-GCC) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (dev+) ===<br />
This build target is just like the normal macOS App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of macOS.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 8.2.1, so any machine running macOS 10.11.5 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (v10.5 Leopard Final Release Build) ===<br />
This build target is for producing final release builds of DeSmuME. These builds will use our official macOS frontend contained in an macOS app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports PowerPC 32-bit, Intel 32-bit, Intel 64-bit, Intel 64-bit Haswell, and Apple Silicon.<br />
* Binaries are compatible with macOS 10.5 and later.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Building the app for release takes several more steps than other builds.<br />
* Performing proper PGO exercises requires additional time and effort.<br />
* Requires a separate Mac or virtual machine running macOS 10.9.5 in order to run Xcode 3.2.6 and Xcode 6.2 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running macOS 10.12.6 or macOS 10.13.6 in order to run Xcode 8.3.3 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running the latest macOS (12.3.1 as of this writing) in order to run the latest Xcode (13.3.1 as of this writing) for intermediate build steps.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 1 PowerPC32; Xcode 3) | ''Builds for ppc, requires Xcode 3.2.6. Runs on PowerPC 32-bit.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6) | ''Compiles nib file and copies resources only, requires Xcode 6.2. Base container that runs all binaries, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8) | ''Builds for i386, requires Xcode 8.3.3. Runs on Intel 32-bit.''<br />
** DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8) | ''Builds for x86_64, requires Xcode 8.3.3. Runs on Intel 64-bit.''<br />
** DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode) | ''Builds for x86_64h, requires latest Xcode (13.3.1 as of this writing). Runs on Intel 64-bit Haswell.''<br />
** DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires latest Xcode (13.3.1 as of this writing). Runs on Apple Silicon.''<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Builds require Xcode 12.4 minimum, which requires a machine running macOS 10.15 or later to make this build.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user. This is especially noticeable when running older versions of OpenEmu.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (OpenEmu Plug-in -- Latest Xcode) | ''Builds for x86_64/x86_64h/arm64, requires Xcode 12.4 minimum. Runs on Intel 64-bit, Intel 64-bit Haswell and Apple Silicon, minimum OpenEmu 1.0.4.''<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the "desmume/src/frontend/cocoa" folder of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.2.6 only (runs on 10.6.8 Snow Leopard to 10.9.5 Mavericks)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| Typical Usage: v8.2.1 or later (runs on 10.11.6 El Capitan to latest macOS)<br />
Final Release Builds: v6.2 only (runs on 10.9.5 Mavericks)<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3.2.6 if any of the following conditions apply:<br />
* The machine you are building from is running macOS 10.9.5 Mavericks or earlier.<br />
* You are building a macOS app that can run on macOS 10.5 Leopard.<br />
* You are building a macOS app that can run on PowerPC processors.<br />
<br />
<br />
You must use Xcode 8.2.1 to Xcode 9.4.1 if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 32-bit processors.<br />
* You are building a macOS app that can run on macOS 10.6 Snow Leopard.<br />
<br />
<br />
You must use Xcode 10.1 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 64-bit Haswell processors.<br />
* You are building a macOS app that can use SSE4.1 for Intel 64-bit development builds. (This requires a Core2Duo Penryn processor, dropping support for Merom processors, This also requires macOS 10.12 Sierra or later.)<br />
<br />
<br />
You must use Xcode 12.4 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Apple Silicon processors.<br />
* You are building the OpenEmu plug-in.<br />
<br />
<br />
You must use the following versions of Xcode if you are making the Final Release Build of the macOS app:<br />
* Xcode 3.2.6 running on 10.9.5 Mavericks<br />
* Xcode 6.2 running on 10.9.5 Mavericks<br />
* Xcode 8.3.3 running on 10.12.6 Sierra or 10.13.6 High Sierra<br />
* Latest Xcode version (13.3.1 as of this writing) running on latest macOS version (12.3.1 Monterey as of this writing)<br />
<br />
<br />
'''Note:''' ''macOS 10.7 Lion, 10.8 Mountain Lion, and 10.10 Yosemite are 'dead zones' for development. Mavericks can run Xcode 3.2.6 and Xcode 6.2 while being able to run all of the same versions that Lion and Mountain Lion can, while El Capitan can run Xcode 8.2.1 while being able to run all of the same versions that Yosemite can. Therefore, we do not recommend using Lion, Mountain Lion, or Yosemite for any meaningful development work.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode 3.2.6 Direct Download Link (for Snow Leopard to Mavericks): https://download.developer.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running macOS Monterey and have any kind of Apple ID (you do not specifically need an Apple Developer ID), then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12<br />
<br />
If you are already logged into your ADC account, you can also find the latest version of Xcode here (it will be at the top of the list):<br />
* Latest Xcode Direct Download Link: https://developer.apple.com/download/all/?q=Xcode<br />
<br />
==== Download Additional Xcode Versions for the macOS App Final Release Build ====<br />
If you will be making a Final Release Build of the macOS app, then you will also need these versions of Xcode. Again, you will need to be logged into ADC to use these direct download links.<br />
* Xcode 6.2 Direct Download Link (for Stage 2): https://download.developer.apple.com/Developer_Tools/Xcode_6.2/Xcode_6.2.dmg<br />
* Xcode 8.3.3 Direct Download Link (for Stage 3 and Stage 4): https://download.developer.apple.com/Developer_Tools/Xcode_8.3.3/Xcode_8.3.3.xip<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* Unless you are planning on building other software that must run on OS X v10.4, you may deselect the Mac OS X 10.4 SDK. (DeSmuME can only run on OS X v10.5 or later.)<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up Other Versions of Xcode ====<br />
If you downloaded Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
But if you downloaded Xcode directly from ADC, then you will need to perform the following steps to install Xcode:<br />
<br />
1. Move the .xip file to your Applications folder.<br />
<br />
2. Open the .xip file. It will automatically start decompressing itself into Xcode.app in your Applications folder. ''This will take some time to finish, so be patient.''<br />
<br />
3. When Xcode.app finishes decompressing, you may rename it to something else now. This can be useful if you are planning to run multiple versions of Xcode, naming each Xcode.app to something that helps you stay organized.<br />
<br />
4. Launch the Xcode app. Depending on which version of macOS you are running, you may or may not see Xcode performing a validation check on itself. If it does, allow Xcode to complete the check. ''This will take some time to finish, so be patient.''<br />
<br />
5. Once Xcode finishes launching, it may ask you to install command line tools. Allow this installation, since DeSmuME can use them for certain tasks.<br />
<br />
6. After the command line tools finish installing, Xcode should now be ready for your use.<br />
<br />
7. The .xip file is no longer necessary. You can choose to move it to a different location or delete it at this time.<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using git and is hosted on GitHub.<br />
* DeSmuME "master" Branch Download Link: https://github.com/TASEmulators/desmume/archive/refs/heads/master.zip<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/desmume/src/frontend/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (Xcode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== macOS App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (Xcode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the following build targets:<br />
* DeSmuME (macOS App; Intel; LLVM-Clang) ''Makes i386/x86_64 binaries, uses Clang 1.7''<br />
* DeSmuME (macOS App; Intel; LLVM-GCC) ''Makes i386/x86_64 binaries, uses GCC 4.2.1''<br />
* DeSmuME (macOS App; PowerPC; LLVM-Clang) ''Makes ppc/ppc64 binaries, uses Clang 1.7 for ppc and GCC 4.2.1 for ppc64''<br />
* DeSmuME (macOS App; PowerPC; LLVM-GCC) ''Makes ppc/ppc64 binaries, uses GCC 4.2.1''<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
==== Building Using Xcode 8 or Later ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. In Xcode, choose File > Project Settings....<br />
<br />
3. Click Advanced....<br />
<br />
4. Choose Legacy, then click Done. Click Done again to exit Project Settings.<br />
<br />
5. In the Product > Scheme menu, choose one of the following:<br />
* DeSmuME (macOS App; Intel64 -- Latest Xcode) ''Makes x86_64/x86_64h binaries, requires Xcode 10.1 or later''<br />
* DeSmuME (macOS App; AppleSilicon -- Latest Xcode) ''Makes arm64 binary, requires Xcode 12.4 or later''<br />
* DeSmuME (macOS App; Intel32 Intel64 -- Xcode 9) ''Makes i386/x86_64 binaries, minimum Xcode 8.2.1 - maximum Xcode 9.4.1''<br />
<br />
6. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder. The built app will also include the current git commit number.<br />
<br />
=== macOS App dev+ Build ===<br />
The steps here are similar to that of the normal macOS App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 8.2.1 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. In Xcode, choose File > Project Settings....<br />
<br />
3. Click Advanced....<br />
<br />
4. Choose Legacy, then click Done. Click Done again to exit Project Settings.<br />
<br />
5. In the Product > Scheme menu, choose one of the following:<br />
* DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) ''Makes x86_64/x86_64h binaries, requires Xcode 10.1 or later''<br />
* DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) ''Makes arm64 binary, requires Xcode 12.4 or later''<br />
* DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 9) ''Makes i386/x86_64 binaries, minimum Xcode 8.2.1 - maximum Xcode 9.4.1''<br />
<br />
''If you want to run dev+ build with Xcode's LLDB debugger:''<br />
<br />
6a. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Debug" folder.<br />
<br />
''If you need to use the dev+ build without running the debugger:''<br />
<br />
6b. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app. (Note that this build does use program optimizations.)<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== macOS App Final Release Build ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode 3.2.6 and Xcode 6.2 installed on a system running macOS 10.9.5 Mavericks.<br />
* You must have Xcode 8.3.3 installed on a system running macOS 10.12.6 Sierra or macOS 10.13.6 High Sierra.<br />
* You must have the latest version of Xcode running on the latest version of macOS. (At the time of this writing, the latest version of Xcode is 13.3.1, and the latest version of macOS is 12.3.1.)<br />
<br />
<br />
1. Let's start with building on macOS Mavericks: Open the "DeSmuME (Xcode 3).xcodeproj" project file using Xcode 3.2.6.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (macOS App; Release Stage 1 PowerPC32 -- Xcode 3)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (ppc32).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
7. While still on macOS Mavericks: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 6.2.<br />
<br />
8. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6).<br />
<br />
9. In Xcode, choose File > Project Settings....<br />
<br />
10. Click Advanced....<br />
<br />
11. Choose Legacy, then click Done. Click Done again to exit Project Settings.<br />
<br />
12. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
13. Choose Product > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME.app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
14. Quit both Xcode 3.2.6 and Xcode 6.2 on macOS Mavericks.<br />
<br />
15. On the next system running macOS Sierra or High Sierra: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 8.3.3.<br />
<br />
16. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8).<br />
<br />
17. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
18. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
19. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
20. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME will automatically launch.<br />
<br />
21. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
22. After all PGO exercises are complete, quit DeSmuME. Xcode should now report that it has generated an optimization profile.<br />
<br />
23. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (i386).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
24. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8).<br />
<br />
25. Repeat Steps 14 - 19.<br />
<br />
26. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (x86_64).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
27. Quit Xcode 8.3.3 on macOS Sierra / High Sierra.<br />
<br />
28. On the next system running the latest macOS: Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
29. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode).<br />
<br />
30. Repeat Steps 14 - 19.<br />
<br />
31. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (x86_64h).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
32. Choose Product > Scheme > DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode).<br />
<br />
33. Repeat Steps 14 - 19.<br />
<br />
34. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (arm64).app" in the "/desmume/src/frontend/cocoa/build/Release" folder, as well as combining all of the previously built binaries into the same DeSmuME.app container.<br />
<br />
And you're done! The newly built DeSmuME.app will be present in the "/desmume/src/frontend/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the "desmume/src/frontend/cocoa/openemu" folder, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/refs/heads/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. In the left-hand sidebar, click the "OpenEmu-SDK" project icon. This should show the project file's settings.<br />
<br />
3. In the project file settings, in the left-hand sidebar, click "OpenEmu-SDK" under Project.<br />
<br />
4. Click "Build Settings", and then click "All" to show all of the build settings at the project file level.<br />
<br />
5. For the Architectures setting, click its associated drop-down menu, and choose "Other...".<br />
<br />
6. Delete all existing settings by clicking the "-" button. (The one existing setting should be "$(ARCHS_STANDARD)".)<br />
<br />
7. While in the Architectures setting, click the "+" button and enter the setting "x86_64".<br />
<br />
8. Click the "+" button and enter the setting "x86_64h".<br />
<br />
9. Click the "+" button and enter the setting "arm64".<br />
<br />
10. In the upper-left corner of the Project Build settings, there will be another "+" button, where mousing over it will read "Add a new conditional or user-defined build setting". Click that button and choose "Add User-Defined Setting".<br />
<br />
11. The new setting will read "NEW_SETTING"; replace this "VALID_ARCHS".<br />
<br />
12. Click the empty space directly to the right of VALID_ARCHS to enter its associated setting. For this setting, enter the following exactly as shown:<br />
x86_64 x86_64h arm64<br />
<br />
13. Choose Product > Scheme > OpenEmuBase.<br />
<br />
14. Choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
15. After the build finishes, choose Product > Show Build Folder in Finder. Then in the Finder window that appears, you should be in a folder named "Build". Open the Products folder, then the Release folder. The new OpenEmuBase.framework bundle should now be present in this folder.<br />
<br />
16. Move OpenEmuBase.framework into the "desmume/src/frontend/cocoa/openemu" folder.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the "desmume/src/frontend/cocoa/openemu" folder. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in -- Latest Xcode).<br />
<br />
3. Choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
''The following step depends on if you have set the Project Settings to use a Legacy build location.''<br />
<br />
4a. '''If you did not previously set the Project Settings to use a Legacy build location:''' After the build finishes, choose Product > Show Build Folder in Finder. Then in the Finder window that appears, you should be in a folder named "Build". Open the Products folder, then the Release folder. The new DeSmuME.oecoreplugin bundle should now be present in this folder.<br />
<br />
4b. '''If you have previously set the Project Settings to use a Legacy build location:''' After the build finishes, in the Finder, navigate to the "desmume/src/frontend/cocoa/build/Release". The new DeSmuME.oecoreplugin bundle should now be present in this folder.<br />
<br />
5. Choose New > New Finder Window.<br />
<br />
6. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
7. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
8. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app!<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="200" |<br />
! scope="col" width="200" | macOS App<br />
! scope="col" width="200" | macOS App (dev+)<br />
! scope="col" width="200" | macOS App (Final Release)<br />
! scope="col" width="200" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| NO<br />
| NO<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
<br />
YES w/ SSE4.1 (macOS 10.12)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
YES w/ SSE4.1 (Xcode 10.1 or later)<br />
| YES (macOS 10.5)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Intel, 64-bit Haswell<br />
| YES (macOS 10.12)<br />
| YES (Xcode 10.1 or later)<br />
| YES (macOS 10.9)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Apple Silicon, 64-bit<br />
| YES (macOS 11.0)<br />
| YES (Xcode 12.4 or later)<br />
| YES (macOS 11.0)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | macOS 10.5 Leopard<br />
| YES[1]<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.6 Snow Leopard<br />
| YES<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.7 Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.8 Mountain Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.9 Mavericks<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.10 Yosemite<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.11 El Capitan<br />
| YES<br />
| YES (Xcode 8.2.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.12 Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.2)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.13 High Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.4.1)<br />
<br />
YES (Xcode 10.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.14 Mojave<br />
| YES<br />
| YES (Xcode 9.4.1)<br />
YES (Xcode 11.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 10.15 Catalina<br />
| YES<br />
| YES (Xcode 12.4)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 11.0 Big Sur<br />
| YES<br />
| YES (Xcode 13.2.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 12.0 Monterey<br />
| YES<br />
| YES (Xcode 13.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|}<br />
<br />
1. Available only by building with the "DeSmuME (Xcode 3).xcodeproj" file using Xcode 3.2.6.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2022-05-09T22:23:36Z<p>Rogerman: Need to use Legacy build location in Project Settings</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for macOS may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files, provided with the DeSmuME source code, include several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== macOS App ===<br />
These build targets produce a self-contained macOS application package (or "app bundle"). These builds use our official macOS frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with macOS 10.6 or later. (Also compatible with macOS 10.5 if building from the Xcode 3 project).<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different macOS versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 3.2.6, so any machine running macOS 10.6 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is much faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with macOS v10.5 requires Xcode 3 to build.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Intel; LLVM-Clang) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using Clang 1.7. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Intel; LLVM-GCC) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-Clang) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using Clang 1.7 for ppc and GCC 4.2.1 for ppc64. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-GCC) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (dev+) ===<br />
This build target is just like the normal macOS App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of macOS.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 8.2.1, so any machine running macOS 10.11.5 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (v10.5 Leopard Final Release Build) ===<br />
This build target is for producing final release builds of DeSmuME. These builds will use our official macOS frontend contained in an macOS app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports PowerPC 32-bit, Intel 32-bit, Intel 64-bit, Intel 64-bit Haswell, and Apple Silicon.<br />
* Binaries are compatible with macOS 10.5 and later.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Building the app for release takes several more steps than other builds.<br />
* Performing proper PGO exercises requires additional time and effort.<br />
* Requires a separate Mac or virtual machine running macOS 10.9.5 in order to run Xcode 3.2.6 and Xcode 6.2 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running macOS 10.12.6 or macOS 10.13.6 in order to run Xcode 8.3.3 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running the latest macOS (12.3.1 as of this writing) in order to run the latest Xcode (13.3.1 as of this writing) for intermediate build steps.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 1 PowerPC32; Xcode 3) | ''Builds for ppc, requires Xcode 3.2.6. Runs on PowerPC 32-bit.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6) | ''Compiles nib file and copies resources only, requires Xcode 6.2. Base container that runs all binaries, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8) | ''Builds for i386, requires Xcode 8.3.3. Runs on Intel 32-bit.''<br />
** DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8) | ''Builds for x86_64, requires Xcode 8.3.3. Runs on Intel 64-bit.''<br />
** DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode) | ''Builds for x86_64h, requires latest Xcode (13.3.1 as of this writing). Runs on Intel 64-bit Haswell.''<br />
** DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires latest Xcode (13.3.1 as of this writing). Runs on Apple Silicon.''<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Builds require Xcode 12.4 minimum, which requires a machine running macOS 10.15 or later to make this build.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user. This is especially noticeable when running older versions of OpenEmu.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (OpenEmu Plug-in -- Latest Xcode) | ''Builds for x86_64/x86_64h/arm64, requires Xcode 12.4 minimum. Runs on Intel 64-bit, Intel 64-bit Haswell and Apple Silicon, minimum OpenEmu 1.0.4.''<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the "desmume/src/frontend/cocoa" folder of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.2.6 only (runs on 10.6.8 Snow Leopard to 10.9.5 Mavericks)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| Typical Usage: v8.2.1 or later (runs on 10.11.6 El Capitan to latest macOS)<br />
Final Release Builds: v6.2 only (runs on 10.9.5 Mavericks)<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3.2.6 if any of the following conditions apply:<br />
* The machine you are building from is running macOS 10.9.5 Mavericks or earlier.<br />
* You are building a macOS app that can run on macOS 10.5 Leopard.<br />
* You are building a macOS app that can run on PowerPC processors.<br />
<br />
<br />
You must use Xcode 8.2.1 to Xcode 9.4.1 if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 32-bit processors.<br />
* You are building a macOS app that can run on macOS 10.6 Snow Leopard.<br />
<br />
<br />
You must use Xcode 10.1 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 64-bit Haswell processors.<br />
* You are building a macOS app that can use SSE4.1 for Intel 64-bit development builds. (This requires a Core2Duo Penryn processor, dropping support for Merom processors, This also requires macOS 10.12 Sierra or later.)<br />
<br />
<br />
You must use Xcode 12.4 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Apple Silicon processors.<br />
* You are building the OpenEmu plug-in.<br />
<br />
<br />
You must use the following versions of Xcode if you are making the Final Release Build of the macOS app:<br />
* Xcode 3.2.6 running on 10.9.5 Mavericks<br />
* Xcode 6.2 running on 10.9.5 Mavericks<br />
* Xcode 8.3.3 running on 10.12.6 Sierra or 10.13.6 High Sierra<br />
* Latest Xcode version (13.3.1 as of this writing) running on latest macOS version (12.3.1 Monterey as of this writing)<br />
<br />
<br />
'''Note:''' ''macOS 10.7 Lion, 10.8 Mountain Lion, and 10.10 Yosemite are 'dead zones' for development. Mavericks can run Xcode 3.2.6 and Xcode 6.2 while being able to run all of the same versions that Lion and Mountain Lion can, while El Capitan can run Xcode 8.2.1 while being able to run all of the same versions that Yosemite can. Therefore, we do not recommend using Lion, Mountain Lion, or Yosemite for any meaningful development work.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode 3.2.6 Direct Download Link (for Snow Leopard to Mavericks): https://download.developer.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running macOS Monterey and have any kind of Apple ID (you do not specifically need an Apple Developer ID), then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12<br />
<br />
If you are already logged into your ADC account, you can also find the latest version of Xcode here (it will be at the top of the list):<br />
* Latest Xcode Direct Download Link: https://developer.apple.com/download/all/?q=Xcode<br />
<br />
==== Download Additional Xcode Versions for the macOS App Final Release Build ====<br />
If you will be making a Final Release Build of the macOS app, then you will also need these versions of Xcode. Again, you will need to be logged into ADC to use these direct download links.<br />
* Xcode 6.2 Direct Download Link (for Stage 2): https://download.developer.apple.com/Developer_Tools/Xcode_6.2/Xcode_6.2.dmg<br />
* Xcode 8.3.3 Direct Download Link (for Stage 3 and Stage 4): https://download.developer.apple.com/Developer_Tools/Xcode_8.3.3/Xcode_8.3.3.xip<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* Unless you are planning on building other software that must run on OS X v10.4, you may deselect the Mac OS X 10.4 SDK. (DeSmuME can only run on OS X v10.5 or later.)<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up Other Versions of Xcode ====<br />
If you downloaded Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
But if you downloaded Xcode directly from ADC, then you will need to perform the following steps to install Xcode:<br />
<br />
1. Move the .xip file to your Applications folder.<br />
<br />
2. Open the .xip file. It will automatically start decompressing itself into Xcode.app in your Applications folder. ''This will take some time to finish, so be patient.''<br />
<br />
3. When Xcode.app finishes decompressing, you may rename it to something else now. This can be useful if you are planning to run multiple versions of Xcode, naming each Xcode.app to something that helps you stay organized.<br />
<br />
4. Launch the Xcode app. Depending on which version of macOS you are running, you may or may not see Xcode performing a validation check on itself. If it does, allow Xcode to complete the check. ''This will take some time to finish, so be patient.''<br />
<br />
5. Once Xcode finishes launching, it may ask you to install command line tools. Allow this installation, since DeSmuME can use them for certain tasks.<br />
<br />
6. After the command line tools finish installing, Xcode should now be ready for your use.<br />
<br />
7. The .xip file is no longer necessary. You can choose to move it to a different location or delete it at this time.<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using git and is hosted on GitHub.<br />
* DeSmuME "master" Branch Download Link: https://github.com/TASEmulators/desmume/archive/refs/heads/master.zip<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/desmume/src/frontend/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (Xcode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== macOS App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (Xcode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the following build targets:<br />
* DeSmuME (macOS App; Intel; LLVM-Clang) ''Makes i386/x86_64 binaries, uses Clang 1.7''<br />
* DeSmuME (macOS App; Intel; LLVM-GCC) ''Makes i386/x86_64 binaries, uses GCC 4.2.1''<br />
* DeSmuME (macOS App; PowerPC; LLVM-Clang) ''Makes ppc/ppc64 binaries, uses Clang 1.7 for ppc and GCC 4.2.1 for ppc64''<br />
* DeSmuME (macOS App; PowerPC; LLVM-GCC) ''Makes ppc/ppc64 binaries, uses GCC 4.2.1''<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
==== Building Using Xcode 8 or Later ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. In Xcode, choose File > Project Settings....<br />
<br />
3. Click Advanced....<br />
<br />
4. Choose Legacy, then click Done. Click Done again to exit Project Settings.<br />
<br />
5. In the Product > Scheme menu, choose one of the following:<br />
* DeSmuME (macOS App; Intel64 -- Latest Xcode) ''Makes x86_64/x86_64h binaries, requires Xcode 10.1 or later''<br />
* DeSmuME (macOS App; AppleSilicon -- Latest Xcode) ''Makes arm64 binary, requires Xcode 12.4 or later''<br />
* DeSmuME (macOS App; Intel32 Intel64 -- Xcode 9) ''Makes i386/x86_64 binaries, minimum Xcode 8.2.1 - maximum Xcode 9.4.1''<br />
<br />
6. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder. The built app will also include the current git commit number.<br />
<br />
=== macOS App dev+ Build ===<br />
The steps here are similar to that of the normal macOS App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 8.2.1 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. In Xcode, choose File > Project Settings....<br />
<br />
3. Click Advanced....<br />
<br />
4. Choose Legacy, then click Done. Click Done again to exit Project Settings.<br />
<br />
5. In the Product > Scheme menu, choose one of the following:<br />
* DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) ''Makes x86_64/x86_64h binaries, requires Xcode 10.1 or later''<br />
* DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) ''Makes arm64 binary, requires Xcode 12.4 or later''<br />
* DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 9) ''Makes i386/x86_64 binaries, minimum Xcode 8.2.1 - maximum Xcode 9.4.1''<br />
<br />
''If you want to run dev+ build with Xcode's LLDB debugger:''<br />
<br />
6a. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Debug" folder.<br />
<br />
''If you need to use the dev+ build without running the debugger:''<br />
<br />
6b. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app. (Note that this build does use program optimizations.)<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== macOS App Final Release Build ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode 3.2.6 and Xcode 6.2 installed on a system running macOS 10.9.5 Mavericks.<br />
* You must have Xcode 8.3.3 installed on a system running macOS 10.12.6 Sierra or macOS 10.13.6 High Sierra.<br />
* You must have the latest version of Xcode running on the latest version of macOS. (At the time of this writing, the latest version of Xcode is 13.3.1, and the latest version of macOS is 12.3.1.)<br />
<br />
<br />
1. Let's start with building on macOS Mavericks: Open the "DeSmuME (Xcode 3).xcodeproj" project file using Xcode 3.2.6.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (macOS App; Release Stage 1 PowerPC32 -- Xcode 3)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (ppc32).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
7. While still on macOS Mavericks: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 6.2.<br />
<br />
8. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6).<br />
<br />
9. In Xcode, choose File > Project Settings....<br />
<br />
10. Click Advanced....<br />
<br />
11. Choose Legacy, then click Done. Click Done again to exit Project Settings.<br />
<br />
12. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
13. Choose Product > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME.app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
14. Quit both Xcode 3.2.6 and Xcode 6.2 on macOS Mavericks.<br />
<br />
15. On the next system running macOS Sierra or High Sierra: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 8.3.3.<br />
<br />
16. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8).<br />
<br />
17. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
18. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
19. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
20. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME will automatically launch.<br />
<br />
21. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
22. After all PGO exercises are complete, quit DeSmuME. Xcode should now report that it has generated an optimization profile.<br />
<br />
23. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (i386).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
24. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8).<br />
<br />
25. Repeat Steps 14 - 19.<br />
<br />
26. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (x86_64).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
27. Quit Xcode 8.3.3 on macOS Sierra / High Sierra.<br />
<br />
28. On the next system running the latest macOS: Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
29. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode).<br />
<br />
30. Repeat Steps 14 - 19.<br />
<br />
31. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (x86_64h).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
32. Choose Product > Scheme > DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode).<br />
<br />
33. Repeat Steps 14 - 19.<br />
<br />
34. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (arm64).app" in the "/desmume/src/frontend/cocoa/build/Release" folder, as well as combining all of the previously built binaries into the same DeSmuME.app container.<br />
<br />
And you're done! The newly built DeSmuME.app will be present in the "/desmume/src/frontend/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the "desmume/src/frontend/cocoa/openemu" folder, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/refs/heads/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. In the left-hand sidebar, click the "OpenEmu-SDK" project icon. This should show the project file's settings.<br />
<br />
3. In the project file settings, in the left-hand sidebar, click "OpenEmu-SDK" under Project.<br />
<br />
4. Click "Build Settings", and then click "All" to show all of the build settings at the project file level.<br />
<br />
5. For the Architectures setting, click its associated drop-down menu, and choose "Other...".<br />
<br />
6. Delete all existing settings by clicking the "-" button. (The one existing setting should be "$(ARCHS_STANDARD)".)<br />
<br />
7. While in the Architectures setting, click the "+" button and enter the setting "x86_64".<br />
<br />
8. Click the "+" button and enter the setting "x86_64h".<br />
<br />
9. Click the "+" button and enter the setting "arm64".<br />
<br />
10. In the upper-left corner of the Project Build settings, there will be another "+" button, where mousing over it will read "Add a new conditional or user-defined build setting". Click that button and choose "Add User-Defined Setting".<br />
<br />
11. The new setting will read "NEW_SETTING"; replace this "VALID_ARCHS".<br />
<br />
12. Click the empty space directly to the right of VALID_ARCHS to enter its associated setting. For this setting, enter the following exactly as shown:<br />
x86_64 x86_64h arm64<br />
<br />
13. Choose Product > Scheme > OpenEmuBase.<br />
<br />
14. Choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
15. After the build finishes, choose Product > Show Build Folder in Finder.<br />
<br />
16. In the Finder window that appears, you should be in a folder named "Build". Open the Products folder, then the Release folder.<br />
<br />
17. Move OpenEmuBase.framework into the "desmume/src/frontend/cocoa/openemu" folder.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the "desmume/src/frontend/cocoa/openemu" folder. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in -- Latest Xcode).<br />
<br />
3. Choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
4. After the build finishes, in the Finder, navigate to the "desmume/src/frontend/cocoa/build/Release". The new DeSmuME.oecoreplugin bundle should now be present in this folder.<br />
<br />
5. Choose New > New Finder Window.<br />
<br />
6. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
7. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
8. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app!<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="200" |<br />
! scope="col" width="200" | macOS App<br />
! scope="col" width="200" | macOS App (dev+)<br />
! scope="col" width="200" | macOS App (Final Release)<br />
! scope="col" width="200" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| NO<br />
| NO<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
<br />
YES w/ SSE4.1 (macOS 10.12)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
YES w/ SSE4.1 (Xcode 10.1 or later)<br />
| YES (macOS 10.5)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Intel, 64-bit Haswell<br />
| YES (macOS 10.12)<br />
| YES (Xcode 10.1 or later)<br />
| YES (macOS 10.9)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Apple Silicon, 64-bit<br />
| YES (macOS 11.0)<br />
| YES (Xcode 12.4 or later)<br />
| YES (macOS 11.0)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | macOS 10.5 Leopard<br />
| YES[1]<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.6 Snow Leopard<br />
| YES<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.7 Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.8 Mountain Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.9 Mavericks<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.10 Yosemite<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.11 El Capitan<br />
| YES<br />
| YES (Xcode 8.2.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.12 Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.2)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.13 High Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.4.1)<br />
<br />
YES (Xcode 10.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.14 Mojave<br />
| YES<br />
| YES (Xcode 9.4.1)<br />
YES (Xcode 11.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 10.15 Catalina<br />
| YES<br />
| YES (Xcode 12.4)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 11.0 Big Sur<br />
| YES<br />
| YES (Xcode 13.2.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 12.0 Monterey<br />
| YES<br />
| YES (Xcode 13.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|}<br />
<br />
1. Available only by building with the "DeSmuME (Xcode 3).xcodeproj" file using Xcode 3.2.6.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2022-05-09T22:11:50Z<p>Rogerman: Other versions of Xcode can use DeSmuME (Latest).xcodeproj</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for macOS may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files, provided with the DeSmuME source code, include several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== macOS App ===<br />
These build targets produce a self-contained macOS application package (or "app bundle"). These builds use our official macOS frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with macOS 10.6 or later. (Also compatible with macOS 10.5 if building from the Xcode 3 project).<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different macOS versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 3.2.6, so any machine running macOS 10.6 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is much faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with macOS v10.5 requires Xcode 3 to build.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Intel; LLVM-Clang) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using Clang 1.7. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Intel; LLVM-GCC) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-Clang) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using Clang 1.7 for ppc and GCC 4.2.1 for ppc64. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-GCC) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (dev+) ===<br />
This build target is just like the normal macOS App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of macOS.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 8.2.1, so any machine running macOS 10.11.5 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (v10.5 Leopard Final Release Build) ===<br />
This build target is for producing final release builds of DeSmuME. These builds will use our official macOS frontend contained in an macOS app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports PowerPC 32-bit, Intel 32-bit, Intel 64-bit, Intel 64-bit Haswell, and Apple Silicon.<br />
* Binaries are compatible with macOS 10.5 and later.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Building the app for release takes several more steps than other builds.<br />
* Performing proper PGO exercises requires additional time and effort.<br />
* Requires a separate Mac or virtual machine running macOS 10.9.5 in order to run Xcode 3.2.6 and Xcode 6.2 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running macOS 10.12.6 or macOS 10.13.6 in order to run Xcode 8.3.3 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running the latest macOS (12.3.1 as of this writing) in order to run the latest Xcode (13.3.1 as of this writing) for intermediate build steps.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 1 PowerPC32; Xcode 3) | ''Builds for ppc, requires Xcode 3.2.6. Runs on PowerPC 32-bit.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6) | ''Compiles nib file and copies resources only, requires Xcode 6.2. Base container that runs all binaries, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8) | ''Builds for i386, requires Xcode 8.3.3. Runs on Intel 32-bit.''<br />
** DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8) | ''Builds for x86_64, requires Xcode 8.3.3. Runs on Intel 64-bit.''<br />
** DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode) | ''Builds for x86_64h, requires latest Xcode (13.3.1 as of this writing). Runs on Intel 64-bit Haswell.''<br />
** DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires latest Xcode (13.3.1 as of this writing). Runs on Apple Silicon.''<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Builds require Xcode 12.4 minimum, which requires a machine running macOS 10.15 or later to make this build.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user. This is especially noticeable when running older versions of OpenEmu.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (OpenEmu Plug-in -- Latest Xcode) | ''Builds for x86_64/x86_64h/arm64, requires Xcode 12.4 minimum. Runs on Intel 64-bit, Intel 64-bit Haswell and Apple Silicon, minimum OpenEmu 1.0.4.''<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the "desmume/src/frontend/cocoa" folder of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.2.6 only (runs on 10.6.8 Snow Leopard to 10.9.5 Mavericks)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| Typical Usage: v8.2.1 or later (runs on 10.11.6 El Capitan to latest macOS)<br />
Final Release Builds: v6.2 only (runs on 10.9.5 Mavericks)<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3.2.6 if any of the following conditions apply:<br />
* The machine you are building from is running macOS 10.9.5 Mavericks or earlier.<br />
* You are building a macOS app that can run on macOS 10.5 Leopard.<br />
* You are building a macOS app that can run on PowerPC processors.<br />
<br />
<br />
You must use Xcode 8.2.1 to Xcode 9.4.1 if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 32-bit processors.<br />
* You are building a macOS app that can run on macOS 10.6 Snow Leopard.<br />
<br />
<br />
You must use Xcode 10.1 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 64-bit Haswell processors.<br />
* You are building a macOS app that can use SSE4.1 for Intel 64-bit development builds. (This requires a Core2Duo Penryn processor, dropping support for Merom processors, This also requires macOS 10.12 Sierra or later.)<br />
<br />
<br />
You must use Xcode 12.4 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Apple Silicon processors.<br />
* You are building the OpenEmu plug-in.<br />
<br />
<br />
You must use the following versions of Xcode if you are making the Final Release Build of the macOS app:<br />
* Xcode 3.2.6 running on 10.9.5 Mavericks<br />
* Xcode 6.2 running on 10.9.5 Mavericks<br />
* Xcode 8.3.3 running on 10.12.6 Sierra or 10.13.6 High Sierra<br />
* Latest Xcode version (13.3.1 as of this writing) running on latest macOS version (12.3.1 Monterey as of this writing)<br />
<br />
<br />
'''Note:''' ''macOS 10.7 Lion, 10.8 Mountain Lion, and 10.10 Yosemite are 'dead zones' for development. Mavericks can run Xcode 3.2.6 and Xcode 6.2 while being able to run all of the same versions that Lion and Mountain Lion can, while El Capitan can run Xcode 8.2.1 while being able to run all of the same versions that Yosemite can. Therefore, we do not recommend using Lion, Mountain Lion, or Yosemite for any meaningful development work.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode 3.2.6 Direct Download Link (for Snow Leopard to Mavericks): https://download.developer.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running macOS Monterey and have any kind of Apple ID (you do not specifically need an Apple Developer ID), then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12<br />
<br />
If you are already logged into your ADC account, you can also find the latest version of Xcode here (it will be at the top of the list):<br />
* Latest Xcode Direct Download Link: https://developer.apple.com/download/all/?q=Xcode<br />
<br />
==== Download Additional Xcode Versions for the macOS App Final Release Build ====<br />
If you will be making a Final Release Build of the macOS app, then you will also need these versions of Xcode. Again, you will need to be logged into ADC to use these direct download links.<br />
* Xcode 6.2 Direct Download Link (for Stage 2): https://download.developer.apple.com/Developer_Tools/Xcode_6.2/Xcode_6.2.dmg<br />
* Xcode 8.3.3 Direct Download Link (for Stage 3 and Stage 4): https://download.developer.apple.com/Developer_Tools/Xcode_8.3.3/Xcode_8.3.3.xip<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* Unless you are planning on building other software that must run on OS X v10.4, you may deselect the Mac OS X 10.4 SDK. (DeSmuME can only run on OS X v10.5 or later.)<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up Other Versions of Xcode ====<br />
If you downloaded Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
But if you downloaded Xcode directly from ADC, then you will need to perform the following steps to install Xcode:<br />
<br />
1. Move the .xip file to your Applications folder.<br />
<br />
2. Open the .xip file. It will automatically start decompressing itself into Xcode.app in your Applications folder. ''This will take some time to finish, so be patient.''<br />
<br />
3. When Xcode.app finishes decompressing, you may rename it to something else now. This can be useful if you are planning to run multiple versions of Xcode, naming each Xcode.app to something that helps you stay organized.<br />
<br />
4. Launch the Xcode app. Depending on which version of macOS you are running, you may or may not see Xcode performing a validation check on itself. If it does, allow Xcode to complete the check. ''This will take some time to finish, so be patient.''<br />
<br />
5. Once Xcode finishes launching, it may ask you to install command line tools. Allow this installation, since DeSmuME can use them for certain tasks.<br />
<br />
6. After the command line tools finish installing, Xcode should now be ready for your use.<br />
<br />
7. The .xip file is no longer necessary. You can choose to move it to a different location or delete it at this time.<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using git and is hosted on GitHub.<br />
* DeSmuME "master" Branch Download Link: https://github.com/TASEmulators/desmume/archive/refs/heads/master.zip<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/desmume/src/frontend/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (Xcode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== macOS App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (Xcode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the following build targets:<br />
* DeSmuME (macOS App; Intel; LLVM-Clang) ''Makes i386/x86_64 binaries, uses Clang 1.7''<br />
* DeSmuME (macOS App; Intel; LLVM-GCC) ''Makes i386/x86_64 binaries, uses GCC 4.2.1''<br />
* DeSmuME (macOS App; PowerPC; LLVM-Clang) ''Makes ppc/ppc64 binaries, uses Clang 1.7 for ppc and GCC 4.2.1 for ppc64''<br />
* DeSmuME (macOS App; PowerPC; LLVM-GCC) ''Makes ppc/ppc64 binaries, uses GCC 4.2.1''<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
==== Building Using Xcode 8 or Later ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. In the Product > Scheme menu, choose one of the following:<br />
* DeSmuME (macOS App; Intel64 -- Latest Xcode) ''Makes x86_64/x86_64h binaries, requires Xcode 10.1 or later''<br />
* DeSmuME (macOS App; AppleSilicon -- Latest Xcode) ''Makes arm64 binary, requires Xcode 12.4 or later''<br />
* DeSmuME (macOS App; Intel32 Intel64 -- Xcode 9) ''Makes i386/x86_64 binaries, minimum Xcode 8.2.1 - maximum Xcode 9.4.1''<br />
<br />
3. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder. The built app will also include the current git commit number.<br />
<br />
=== macOS App dev+ Build ===<br />
The steps here are similar to that of the normal macOS App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 8.2.1 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. In the Product > Scheme menu, choose one of the following:<br />
* DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) ''Makes x86_64/x86_64h binaries, requires Xcode 10.1 or later''<br />
* DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) ''Makes arm64 binary, requires Xcode 12.4 or later''<br />
* DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 9) ''Makes i386/x86_64 binaries, minimum Xcode 8.2.1 - maximum Xcode 9.4.1''<br />
<br />
''If you want to run dev+ build with Xcode's LLDB debugger:''<br />
<br />
3a. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Debug" folder.<br />
<br />
''If you need to use the dev+ build without running the debugger:''<br />
<br />
3b. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app. (Note that this build does use program optimizations.)<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== macOS App Final Release Build ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode 3.2.6 and Xcode 6.2 installed on a system running macOS 10.9.5 Mavericks.<br />
* You must have Xcode 8.3.3 installed on a system running macOS 10.12.6 Sierra or macOS 10.13.6 High Sierra.<br />
* You must have the latest version of Xcode running on the latest version of macOS. (At the time of this writing, the latest version of Xcode is 13.3.1, and the latest version of macOS is 12.3.1.)<br />
<br />
<br />
1. Let's start with building on macOS Mavericks: Open the "DeSmuME (Xcode 3).xcodeproj" project file using Xcode 3.2.6.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (macOS App; Release Stage 1 PowerPC32 -- Xcode 3)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (ppc32).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
7. While still on macOS Mavericks: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 6.2.<br />
<br />
8. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME.app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
11. Quit both Xcode 3.2.6 and Xcode 6.2 on macOS Mavericks.<br />
<br />
12. On the next system running macOS Sierra or High Sierra: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 8.3.3.<br />
<br />
13. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8).<br />
<br />
14. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
15. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
16. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
17. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME will automatically launch.<br />
<br />
18. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
19. After all PGO exercises are complete, quit DeSmuME. Xcode should now report that it has generated an optimization profile.<br />
<br />
20. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (i386).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
21. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8).<br />
<br />
22. Repeat Steps 14 - 19.<br />
<br />
23. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (x86_64).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
24. Quit Xcode 8.3.3 on macOS Sierra / High Sierra.<br />
<br />
25. On the next system running the latest macOS: Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
26. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode).<br />
<br />
27. Repeat Steps 14 - 19.<br />
<br />
28. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (x86_64h).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
29. Choose Product > Scheme > DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode).<br />
<br />
30. Repeat Steps 14 - 19.<br />
<br />
31. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (arm64).app" in the "/desmume/src/frontend/cocoa/build/Release" folder, as well as combining all of the previously built binaries into the same DeSmuME.app container.<br />
<br />
And you're done! The newly built DeSmuME.app will be present in the "/desmume/src/frontend/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the "desmume/src/frontend/cocoa/openemu" folder, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/refs/heads/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. In the left-hand sidebar, click the "OpenEmu-SDK" project icon. This should show the project file's settings.<br />
<br />
3. In the project file settings, in the left-hand sidebar, click "OpenEmu-SDK" under Project.<br />
<br />
4. Click "Build Settings", and then click "All" to show all of the build settings at the project file level.<br />
<br />
5. For the Architectures setting, click its associated drop-down menu, and choose "Other...".<br />
<br />
6. Delete all existing settings by clicking the "-" button. (The one existing setting should be "$(ARCHS_STANDARD)".)<br />
<br />
7. While in the Architectures setting, click the "+" button and enter the setting "x86_64".<br />
<br />
8. Click the "+" button and enter the setting "x86_64h".<br />
<br />
9. Click the "+" button and enter the setting "arm64".<br />
<br />
10. In the upper-left corner of the Project Build settings, there will be another "+" button, where mousing over it will read "Add a new conditional or user-defined build setting". Click that button and choose "Add User-Defined Setting".<br />
<br />
11. The new setting will read "NEW_SETTING"; replace this "VALID_ARCHS".<br />
<br />
12. Click the empty space directly to the right of VALID_ARCHS to enter its associated setting. For this setting, enter the following exactly as shown:<br />
x86_64 x86_64h arm64<br />
<br />
13. Choose Product > Scheme > OpenEmuBase.<br />
<br />
14. Choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
15. After the build finishes, choose Product > Show Build Folder in Finder.<br />
<br />
16. In the Finder window that appears, you should be in a folder named "Build". Open the Products folder, then the Release folder.<br />
<br />
17. Move OpenEmuBase.framework into the "desmume/src/frontend/cocoa/openemu" folder.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the "desmume/src/frontend/cocoa/openemu" folder. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in -- Latest Xcode).<br />
<br />
3. Choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
4. After the build finishes, in the Finder, navigate to the "desmume/src/frontend/cocoa/build/Release". The new DeSmuME.oecoreplugin bundle should now be present in this folder.<br />
<br />
5. Choose New > New Finder Window.<br />
<br />
6. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
7. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
8. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app!<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="200" |<br />
! scope="col" width="200" | macOS App<br />
! scope="col" width="200" | macOS App (dev+)<br />
! scope="col" width="200" | macOS App (Final Release)<br />
! scope="col" width="200" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| NO<br />
| NO<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
<br />
YES w/ SSE4.1 (macOS 10.12)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
YES w/ SSE4.1 (Xcode 10.1 or later)<br />
| YES (macOS 10.5)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Intel, 64-bit Haswell<br />
| YES (macOS 10.12)<br />
| YES (Xcode 10.1 or later)<br />
| YES (macOS 10.9)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Apple Silicon, 64-bit<br />
| YES (macOS 11.0)<br />
| YES (Xcode 12.4 or later)<br />
| YES (macOS 11.0)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | macOS 10.5 Leopard<br />
| YES[1]<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.6 Snow Leopard<br />
| YES<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.7 Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.8 Mountain Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.9 Mavericks<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.10 Yosemite<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.11 El Capitan<br />
| YES<br />
| YES (Xcode 8.2.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.12 Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.2)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.13 High Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.4.1)<br />
<br />
YES (Xcode 10.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.14 Mojave<br />
| YES<br />
| YES (Xcode 9.4.1)<br />
YES (Xcode 11.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 10.15 Catalina<br />
| YES<br />
| YES (Xcode 12.4)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 11.0 Big Sur<br />
| YES<br />
| YES (Xcode 13.2.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 12.0 Monterey<br />
| YES<br />
| YES (Xcode 13.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|}<br />
<br />
1. Available only by building with the "DeSmuME (Xcode 3).xcodeproj" file using Xcode 3.2.6.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2022-05-09T22:08:56Z<p>Rogerman: Update to reflect current knowledge and procedure</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for macOS may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files, provided with the DeSmuME source code, include several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== macOS App ===<br />
These build targets produce a self-contained macOS application package (or "app bundle"). These builds use our official macOS frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with macOS 10.6 or later. (Also compatible with macOS 10.5 if building from the Xcode 3 project).<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different macOS versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 3.2.6, so any machine running macOS 10.6 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is much faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with macOS v10.5 requires Xcode 3 to build.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Intel; LLVM-Clang) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using Clang 1.7. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Intel; LLVM-GCC) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-Clang) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using Clang 1.7 for ppc and GCC 4.2.1 for ppc64. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-GCC) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (dev+) ===<br />
This build target is just like the normal macOS App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of macOS.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 8.2.1, so any machine running macOS 10.11.5 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (v10.5 Leopard Final Release Build) ===<br />
This build target is for producing final release builds of DeSmuME. These builds will use our official macOS frontend contained in an macOS app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports PowerPC 32-bit, Intel 32-bit, Intel 64-bit, Intel 64-bit Haswell, and Apple Silicon.<br />
* Binaries are compatible with macOS 10.5 and later.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Building the app for release takes several more steps than other builds.<br />
* Performing proper PGO exercises requires additional time and effort.<br />
* Requires a separate Mac or virtual machine running macOS 10.9.5 in order to run Xcode 3.2.6 and Xcode 6.2 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running macOS 10.12.6 or macOS 10.13.6 in order to run Xcode 8.3.3 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running the latest macOS (12.3.1 as of this writing) in order to run the latest Xcode (13.3.1 as of this writing) for intermediate build steps.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 1 PowerPC32; Xcode 3) | ''Builds for ppc, requires Xcode 3.2.6. Runs on PowerPC 32-bit.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6) | ''Compiles nib file and copies resources only, requires Xcode 6.2. Base container that runs all binaries, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8) | ''Builds for i386, requires Xcode 8.3.3. Runs on Intel 32-bit.''<br />
** DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8) | ''Builds for x86_64, requires Xcode 8.3.3. Runs on Intel 64-bit.''<br />
** DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode) | ''Builds for x86_64h, requires latest Xcode (13.3.1 as of this writing). Runs on Intel 64-bit Haswell.''<br />
** DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires latest Xcode (13.3.1 as of this writing). Runs on Apple Silicon.''<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Builds require Xcode 12.4 minimum, which requires a machine running macOS 10.15 or later to make this build.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user. This is especially noticeable when running older versions of OpenEmu.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (OpenEmu Plug-in -- Latest Xcode) | ''Builds for x86_64/x86_64h/arm64, requires Xcode 12.4 minimum. Runs on Intel 64-bit, Intel 64-bit Haswell and Apple Silicon, minimum OpenEmu 1.0.4.''<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the "desmume/src/frontend/cocoa" folder of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.2.6 only (runs on 10.6.8 Snow Leopard to 10.9.5 Mavericks)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| Typical Usage: v8.2.1 or later (runs on 10.11.6 El Capitan to latest macOS)<br />
Final Release Builds: v6.2 only (runs on 10.9.5 Mavericks)<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3.2.6 if any of the following conditions apply:<br />
* The machine you are building from is running macOS 10.9.5 Mavericks or earlier.<br />
* You are building a macOS app that can run on macOS 10.5 Leopard.<br />
* You are building a macOS app that can run on PowerPC processors.<br />
<br />
<br />
You must use Xcode 8.2.1 to Xcode 9.4.1 if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 32-bit processors.<br />
* You are building a macOS app that can run on macOS 10.6 Snow Leopard.<br />
<br />
<br />
You must use Xcode 10.1 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 64-bit Haswell processors.<br />
* You are building a macOS app that can use SSE4.1 for Intel 64-bit development builds. (This requires a Core2Duo Penryn processor, dropping support for Merom processors, This also requires macOS 10.12 Sierra or later.)<br />
<br />
<br />
You must use Xcode 12.4 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Apple Silicon processors.<br />
* You are building the OpenEmu plug-in.<br />
<br />
<br />
You must use the following versions of Xcode if you are making the Final Release Build of the macOS app:<br />
* Xcode 3.2.6 running on 10.9.5 Mavericks<br />
* Xcode 6.2 running on 10.9.5 Mavericks<br />
* Xcode 8.3.3 running on 10.12.6 Sierra or 10.13.6 High Sierra<br />
* Latest Xcode version (13.3.1 as of this writing) running on latest macOS version (12.3.1 Monterey as of this writing)<br />
<br />
<br />
'''Note:''' ''macOS 10.7 Lion, 10.8 Mountain Lion, and 10.10 Yosemite are 'dead zones' for development. Mavericks can run Xcode 3.2.6 and Xcode 6.2 while being able to run all of the same versions that Lion and Mountain Lion can, while El Capitan can run Xcode 8.2.1 while being able to run all of the same versions that Yosemite can. Therefore, we do not recommend using Lion, Mountain Lion, or Yosemite for any meaningful development work.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode 3.2.6 Direct Download Link (for Snow Leopard to Mavericks): https://download.developer.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running macOS Monterey and have any kind of Apple ID (you do not specifically need an Apple Developer ID), then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12<br />
<br />
If you are already logged into your ADC account, you can also find the latest version of Xcode here (it will be at the top of the list):<br />
* Latest Xcode Direct Download Link: https://developer.apple.com/download/all/?q=Xcode<br />
<br />
==== Download Additional Xcode Versions for the macOS App Final Release Build ====<br />
If you will be making a Final Release Build of the macOS app, then you will also need these versions of Xcode. Again, you will need to be logged into ADC to use these direct download links.<br />
* Xcode 6.2 Direct Download Link (for Stage 2): https://download.developer.apple.com/Developer_Tools/Xcode_6.2/Xcode_6.2.dmg<br />
* Xcode 8.3.3 Direct Download Link (for Stage 3 and Stage 4): https://download.developer.apple.com/Developer_Tools/Xcode_8.3.3/Xcode_8.3.3.xip<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* Unless you are planning on building other software that must run on OS X v10.4, you may deselect the Mac OS X 10.4 SDK. (DeSmuME can only run on OS X v10.5 or later.)<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up Other Versions of Xcode ====<br />
If you downloaded Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
But if you downloaded Xcode directly from ADC, then you will need to perform the following steps to install Xcode:<br />
<br />
1. Move the .xip file to your Applications folder.<br />
<br />
2. Open the .xip file. It will automatically start decompressing itself into Xcode.app in your Applications folder. ''This will take some time to finish, so be patient.''<br />
<br />
3. When Xcode.app finishes decompressing, you may rename it to something else now. This can be useful if you are planning to run multiple versions of Xcode, naming each Xcode.app to something that helps you stay organized.<br />
<br />
4. Launch the Xcode app. Depending on which version of macOS you are running, you may or may not see Xcode performing a validation check on itself. If it does, allow Xcode to complete the check. ''This will take some time to finish, so be patient.''<br />
<br />
5. Once Xcode finishes launching, it may ask you to install command line tools. Allow this installation, since DeSmuME can use them for certain tasks.<br />
<br />
6. After the command line tools finish installing, Xcode should now be ready for your use.<br />
<br />
7. The .xip file is no longer necessary. You can choose to move it to a different location or delete it at this time.<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using git and is hosted on GitHub.<br />
* DeSmuME "master" Branch Download Link: https://github.com/TASEmulators/desmume/archive/refs/heads/master.zip<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/desmume/src/frontend/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (Xcode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== macOS App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (Xcode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the following build targets:<br />
* DeSmuME (macOS App; Intel; LLVM-Clang) ''Makes i386/x86_64 binaries, uses Clang 1.7''<br />
* DeSmuME (macOS App; Intel; LLVM-GCC) ''Makes i386/x86_64 binaries, uses GCC 4.2.1''<br />
* DeSmuME (macOS App; PowerPC; LLVM-Clang) ''Makes ppc/ppc64 binaries, uses Clang 1.7 for ppc and GCC 4.2.1 for ppc64''<br />
* DeSmuME (macOS App; PowerPC; LLVM-GCC) ''Makes ppc/ppc64 binaries, uses GCC 4.2.1''<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
==== Building Using the Latest Version of Xcode ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. In the Product > Scheme menu, choose one of the following:<br />
* DeSmuME (macOS App; Intel64 -- Latest Xcode) ''Makes x86_64/x86_64h binaries, requires Xcode 10.1 or later''<br />
* DeSmuME (macOS App; AppleSilicon -- Latest Xcode) ''Makes arm64 binary, requires Xcode 12.4 or later''<br />
* DeSmuME (macOS App; Intel32 Intel64 -- Xcode 9) ''Makes i386/x86_64 binaries, minimum Xcode 8.2.1 - maximum Xcode 9.4.1''<br />
<br />
3. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder. The built app will also include the current git commit number.<br />
<br />
<br />
=== macOS App dev+ Build ===<br />
The steps here are similar to that of the normal macOS App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 8.2.1 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. In the Product > Scheme menu, choose one of the following:<br />
* DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) ''Makes x86_64/x86_64h binaries, requires Xcode 10.1 or later''<br />
* DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) ''Makes arm64 binary, requires Xcode 12.4 or later''<br />
* DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 9) ''Makes i386/x86_64 binaries, minimum Xcode 8.2.1 - maximum Xcode 9.4.1''<br />
<br />
''If you want to run dev+ build with Xcode's LLDB debugger:''<br />
<br />
3a. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Debug" folder.<br />
<br />
''If you need to use the dev+ build without running the debugger:''<br />
<br />
3b. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app. (Note that this build does use program optimizations.)<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== macOS App Final Release Build ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode 3.2.6 and Xcode 6.2 installed on a system running macOS 10.9.5 Mavericks.<br />
* You must have Xcode 8.3.3 installed on a system running macOS 10.12.6 Sierra or macOS 10.13.6 High Sierra.<br />
* You must have the latest version of Xcode running on the latest version of macOS. (At the time of this writing, the latest version of Xcode is 13.3.1, and the latest version of macOS is 12.3.1.)<br />
<br />
<br />
1. Let's start with building on macOS Mavericks: Open the "DeSmuME (Xcode 3).xcodeproj" project file using Xcode 3.2.6.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (macOS App; Release Stage 1 PowerPC32 -- Xcode 3)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (ppc32).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
7. While still on macOS Mavericks: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 6.2.<br />
<br />
8. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME.app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
11. Quit both Xcode 3.2.6 and Xcode 6.2 on macOS Mavericks.<br />
<br />
12. On the next system running macOS Sierra or High Sierra: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 8.3.3.<br />
<br />
13. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8).<br />
<br />
14. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
15. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
16. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
17. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME will automatically launch.<br />
<br />
18. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
19. After all PGO exercises are complete, quit DeSmuME. Xcode should now report that it has generated an optimization profile.<br />
<br />
20. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (i386).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
21. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8).<br />
<br />
22. Repeat Steps 14 - 19.<br />
<br />
23. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (x86_64).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
24. Quit Xcode 8.3.3 on macOS Sierra / High Sierra.<br />
<br />
25. On the next system running the latest macOS: Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
26. Choose Product > Scheme > DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode).<br />
<br />
27. Repeat Steps 14 - 19.<br />
<br />
28. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (x86_64h).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
29. Choose Product > Scheme > DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode).<br />
<br />
30. Repeat Steps 14 - 19.<br />
<br />
31. In Xcode, choose Product > Build For > Profiling, and then wait for the build process to finish. This will make a new app called "DeSmuME (arm64).app" in the "/desmume/src/frontend/cocoa/build/Release" folder, as well as combining all of the previously built binaries into the same DeSmuME.app container.<br />
<br />
And you're done! The newly built DeSmuME.app will be present in the "/desmume/src/frontend/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the "desmume/src/frontend/cocoa/openemu" folder, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/refs/heads/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. In the left-hand sidebar, click the "OpenEmu-SDK" project icon. This should show the project file's settings.<br />
<br />
3. In the project file settings, in the left-hand sidebar, click "OpenEmu-SDK" under Project.<br />
<br />
4. Click "Build Settings", and then click "All" to show all of the build settings at the project file level.<br />
<br />
5. For the Architectures setting, click its associated drop-down menu, and choose "Other...".<br />
<br />
6. Delete all existing settings by clicking the "-" button. (The one existing setting should be "$(ARCHS_STANDARD)".)<br />
<br />
7. While in the Architectures setting, click the "+" button and enter the setting "x86_64".<br />
<br />
8. Click the "+" button and enter the setting "x86_64h".<br />
<br />
9. Click the "+" button and enter the setting "arm64".<br />
<br />
10. In the upper-left corner of the Project Build settings, there will be another "+" button, where mousing over it will read "Add a new conditional or user-defined build setting". Click that button and choose "Add User-Defined Setting".<br />
<br />
11. The new setting will read "NEW_SETTING"; replace this "VALID_ARCHS".<br />
<br />
12. Click the empty space directly to the right of VALID_ARCHS to enter its associated setting. For this setting, enter the following exactly as shown:<br />
x86_64 x86_64h arm64<br />
<br />
13. Choose Product > Scheme > OpenEmuBase.<br />
<br />
14. Choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
15. After the build finishes, choose Product > Show Build Folder in Finder.<br />
<br />
16. In the Finder window that appears, you should be in a folder named "Build". Open the Products folder, then the Release folder.<br />
<br />
17. Move OpenEmuBase.framework into the "desmume/src/frontend/cocoa/openemu" folder.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the "desmume/src/frontend/cocoa/openemu" folder. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in -- Latest Xcode).<br />
<br />
3. Choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
4. After the build finishes, in the Finder, navigate to the "desmume/src/frontend/cocoa/build/Release". The new DeSmuME.oecoreplugin bundle should now be present in this folder.<br />
<br />
5. Choose New > New Finder Window.<br />
<br />
6. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
7. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
8. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app!<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="200" |<br />
! scope="col" width="200" | macOS App<br />
! scope="col" width="200" | macOS App (dev+)<br />
! scope="col" width="200" | macOS App (Final Release)<br />
! scope="col" width="200" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| NO<br />
| NO<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
<br />
YES w/ SSE4.1 (macOS 10.12)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
YES w/ SSE4.1 (Xcode 10.1 or later)<br />
| YES (macOS 10.5)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Intel, 64-bit Haswell<br />
| YES (macOS 10.12)<br />
| YES (Xcode 10.1 or later)<br />
| YES (macOS 10.9)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Apple Silicon, 64-bit<br />
| YES (macOS 11.0)<br />
| YES (Xcode 12.4 or later)<br />
| YES (macOS 11.0)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | macOS 10.5 Leopard<br />
| YES[1]<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.6 Snow Leopard<br />
| YES<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.7 Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.8 Mountain Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.9 Mavericks<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.10 Yosemite<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.11 El Capitan<br />
| YES<br />
| YES (Xcode 8.2.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.12 Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.2)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.13 High Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.4.1)<br />
<br />
YES (Xcode 10.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.14 Mojave<br />
| YES<br />
| YES (Xcode 9.4.1)<br />
YES (Xcode 11.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 10.15 Catalina<br />
| YES<br />
| YES (Xcode 12.4)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 11.0 Big Sur<br />
| YES<br />
| YES (Xcode 13.2.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 12.0 Monterey<br />
| YES<br />
| YES (Xcode 13.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|}<br />
<br />
1. Available only by building with the "DeSmuME (Xcode 3).xcodeproj" file using Xcode 3.2.6.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2022-05-09T20:55:14Z<p>Rogerman: Also note that Lion and Mountain are pointless for development work</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for macOS may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files, provided with the DeSmuME source code, include several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== macOS App ===<br />
These build targets produce a self-contained macOS application package (or "app bundle"). These builds use our official macOS frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with macOS 10.6 or later. (Also compatible with macOS 10.5 if building from the Xcode 3 project).<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different macOS versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 3.2.6, so any machine running macOS 10.6 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is much faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with macOS v10.5 requires Xcode 3 to build.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Intel; LLVM-Clang) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using Clang 1.7. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Intel; LLVM-GCC) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-Clang) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using Clang 1.7 for ppc and GCC 4.2.1 for ppc64. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-GCC) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (dev+) ===<br />
This build target is just like the normal macOS App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of macOS.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 8.2.1, so any machine running macOS 10.11.5 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (v10.5 Leopard Final Release Build) ===<br />
This build target is for producing final release builds of DeSmuME. These builds will use our official macOS frontend contained in an macOS app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports PowerPC 32-bit, Intel 32-bit, Intel 64-bit, Intel 64-bit Haswell, and Apple Silicon.<br />
* Binaries are compatible with macOS 10.5 and later.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Building the app for release takes several more steps than other builds.<br />
* Performing proper PGO exercises requires additional time and effort.<br />
* Requires a separate Mac or virtual machine running macOS 10.9.5 in order to run Xcode 3.2.6 and Xcode 6.2 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running macOS 10.12.6 or macOS 10.13.6 in order to run Xcode 8.3.3 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running the latest macOS (12.3.1 as of this writing) in order to run the latest Xcode (13.3.1 as of this writing) for intermediate build steps.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 1 PowerPC32; Xcode 3) | ''Builds for ppc, requires Xcode 3.2.6. Runs on PowerPC 32-bit.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6) | ''Compiles nib file and copies resources only, requires Xcode 6.2. Base container that runs all binaries, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8) | ''Builds for i386, requires Xcode 8.3.3. Runs on Intel 32-bit.''<br />
** DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8) | ''Builds for x86_64, requires Xcode 8.3.3. Runs on Intel 64-bit.''<br />
** DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode) | ''Builds for x86_64h, requires latest Xcode (13.3.1 as of this writing). Runs on Intel 64-bit Haswell.''<br />
** DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires latest Xcode (13.3.1 as of this writing). Runs on Apple Silicon.''<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Builds require Xcode 12.4 minimum, which requires a machine running macOS 10.15 or later to make this build.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user. This is especially noticeable when running older versions of OpenEmu.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (OpenEmu Plug-in -- Latest Xcode) | ''Builds for x86_64/x86_64h/arm64, requires Xcode 12.4 minimum. Runs on Intel 64-bit, Intel 64-bit Haswell and Apple Silicon, minimum OpenEmu 1.0.4.''<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the "desmume/src/frontend/cocoa" folder of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.2.6 only (runs on 10.6.8 Snow Leopard to 10.9.5 Mavericks)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| Typical Usage: v8.2.1 or later (runs on 10.11.6 El Capitan to latest macOS)<br />
Final Release Builds: v6.2 only (runs on 10.9.5 Mavericks)<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3.2.6 if any of the following conditions apply:<br />
* The machine you are building from is running macOS 10.9.5 Mavericks or earlier.<br />
* You are building a macOS app that can run on macOS 10.5 Leopard.<br />
* You are building a macOS app that can run on PowerPC processors.<br />
<br />
<br />
You must use Xcode 8.2.1 to Xcode 9.4.1 if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 32-bit processors.<br />
* You are building a macOS app that can run on macOS 10.6 Snow Leopard.<br />
<br />
<br />
You must use Xcode 10.1 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 64-bit Haswell processors.<br />
* You are building a macOS app that can use SSE4.1 for Intel 64-bit development builds. (This requires a Core2Duo Penryn processor, dropping support for Merom processors, This also requires macOS 10.12 Sierra or later.)<br />
<br />
<br />
You must use Xcode 12.4 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Apple Silicon processors.<br />
* You are building the OpenEmu plug-in.<br />
<br />
<br />
You must use the following versions of Xcode if you are making the Final Release Build of the macOS app:<br />
* Xcode 3.2.6 running on 10.9.5 Mavericks<br />
* Xcode 6.2 running on 10.9.5 Mavericks<br />
* Xcode 8.3.3 running on 10.12.6 Sierra or 10.13.6 High Sierra<br />
* Latest Xcode version (13.3.1 as of this writing) running on latest macOS version (12.3.1 Monterey as of this writing)<br />
<br />
<br />
'''Note:''' ''macOS 10.7 Lion, 10.8 Mountain Lion, and 10.10 Yosemite are 'dead zones' for development. Mavericks can run Xcode 3.2.6 and Xcode 6.2 while being able to run all of the same versions that Lion and Mountain Lion can, while El Capitan can run Xcode 8.2.1 while being able to run all of the same versions that Yosemite can. Therefore, we do not recommend using Lion, Mountain Lion, or Yosemite for any meaningful development work.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode 3.2.6 Direct Download Link (for Snow Leopard to Mavericks): https://download.developer.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running macOS Monterey and have any kind of Apple ID (you do not specifically need an Apple Developer ID), then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12<br />
<br />
If you are already logged into your ADC account, you can also find the latest version of Xcode here (it will be at the top of the list):<br />
* Latest Xcode Direct Download Link: https://developer.apple.com/download/all/?q=Xcode<br />
<br />
==== Download Additional Xcode Versions for the macOS App Final Release Build ====<br />
If you will be making a Final Release Build of the macOS app, then you will also need these versions of Xcode. Again, you will need to be logged into ADC to use these direct download links.<br />
* Xcode 6.2 Direct Download Link (for Stage 2): https://download.developer.apple.com/Developer_Tools/Xcode_6.2/Xcode_6.2.dmg<br />
* Xcode 8.3.3 Direct Download Link (for Stage 3 and Stage 4): https://download.developer.apple.com/Developer_Tools/Xcode_8.3.3/Xcode_8.3.3.xip<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* Unless you are planning on building other software that must run on OS X v10.4, you may deselect the Mac OS X 10.4 SDK. (DeSmuME can only run on OS X v10.5 or later.)<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up Other Versions of Xcode ====<br />
If you downloaded Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
But if you downloaded Xcode directly from ADC, then you will need to perform the following steps to install Xcode:<br />
<br />
1. Move the .xip file to your Applications folder.<br />
<br />
2. Open the .xip file. It will automatically start decompressing itself into Xcode.app in your Applications folder. ''This will take some time to finish, so be patient.''<br />
<br />
3. When Xcode.app finishes decompressing, you may rename it to something else now. This can be useful if you are planning to run multiple versions of Xcode, naming each Xcode.app to something that helps you stay organized.<br />
<br />
4. Launch the Xcode app. Depending on which version of macOS you are running, you may or may not see Xcode performing a validation check on itself. If it does, allow Xcode to complete the check. ''This will take some time to finish, so be patient.''<br />
<br />
5. Once Xcode finishes launching, it may ask you to install command line tools. Allow this installation, since DeSmuME can use them for certain tasks.<br />
<br />
6. After the command line tools finish installing, Xcode should now be ready for your use.<br />
<br />
7. The .xip file is no longer necessary. You can choose to move it to a different location or delete it at this time.<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using git and is hosted on GitHub.<br />
* DeSmuME "master" Branch Download Link: https://github.com/TASEmulators/desmume/archive/refs/heads/master.zip<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/desmume/src/frontend/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (XCode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== OS X App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the four build targets.<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder. If you built the app using the "DeSmuME (XCode 3).xcodeproj" project file, then the built app will also include the current git commit number.<br />
<br />
==== Building Using the Latest Version of Xcode ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App).<br />
<br />
3. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Dev+ Build ===<br />
The steps here are similar to that of the normal OS X App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 4 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App, dev+).<br />
<br />
''If you want to run dev+ build with Xcode's LLDB debugger:''<br />
<br />
3a. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Debug" folder.<br />
<br />
''If you need to use the dev+ build without running the debugger:''<br />
<br />
3b. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app. (Note that this build does use program optimizations.)<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Build for Final Release ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode v3.2.6 and Xcode v6.2 installed on a system running OS X Mavericks v10.9.5.<br />
* You must have the latest version of Xcode running on the latest version of macOS. (At the time of this writing, the latest version of Xcode is v9.1, and the latest version of macOS is 10.13.1.)<br />
<br />
1. Let's start with building on OS X Mavericks: Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (OS X App; PowerPC Release Build)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (PPC).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
7. While still on OS X Mavericks: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 6.2.<br />
<br />
8. Choose Product > Scheme > DeSmuME (OS X App; Xcode 6 .XIB for v10.5 Leopard Release Build).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (Xcode 6).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
11. Quit both Xcode 3 and Xcode 6 on OS X Mavericks.<br />
<br />
12. On the latest macOS: Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
13. Choose Product > Scheme > DeSmuME (OS X App; v10.5 Leopard Release Build).<br />
<br />
14. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
15. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
16. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
17. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME.app will automatically launch.<br />
<br />
18. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
19. After all PGO exercises are complete, quit DeSmuME.app. Xcode should now report that it has generated an optimization profile.<br />
<br />
20. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the "desmume/src/frontend/cocoa/openemu" folder, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > OpenEmuBase.<br />
<br />
3. Click Run. This will build a Debug version of the framework.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show "OpenEmuBase.framework".<br />
<br />
6. Click "OpenEmuBase.framework", and then choose File > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version framework.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Move OpenEmuBase.framework into the "desmume/src/frontend/cocoa/openemu" folder.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the "desmume/src/frontend/cocoa/openemu" folder. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in).<br />
<br />
3. Click Run. This will build a Debug version of the plug-in.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show the "DeSmuME.oecoreplugin" bundle.<br />
<br />
6. Click "DeSmuME.oecoreplugin", and then choose Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click (or Control-click) the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version plug-in.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Choose New > New Finder Window.<br />
<br />
11. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
12. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
13. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app.<br />
<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="200" |<br />
! scope="col" width="200" | macOS App<br />
! scope="col" width="200" | macOS App (dev+)<br />
! scope="col" width="200" | macOS App (Final Release)<br />
! scope="col" width="200" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| NO<br />
| NO<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
<br />
YES w/ SSE4.1 (macOS 10.12)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
YES w/ SSE4.1 (Xcode 10.1 or later)<br />
| YES (macOS 10.5)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Intel, 64-bit Haswell<br />
| YES (macOS 10.12)<br />
| YES (Xcode 10.1 or later)<br />
| YES (macOS 10.9)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Apple Silicon, 64-bit<br />
| YES (macOS 11.0)<br />
| YES (Xcode 12.4 or later)<br />
| YES (macOS 11.0)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | macOS 10.5 Leopard<br />
| YES[1]<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.6 Snow Leopard<br />
| YES<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.7 Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.8 Mountain Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.9 Mavericks<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.10 Yosemite<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.11 El Capitan<br />
| YES<br />
| YES (Xcode 8.2.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.12 Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.2)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.13 High Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.4.1)<br />
<br />
YES (Xcode 10.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.14 Mojave<br />
| YES<br />
| YES (Xcode 9.4.1)<br />
YES (Xcode 11.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 10.15 Catalina<br />
| YES<br />
| YES (Xcode 12.4)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 11.0 Big Sur<br />
| YES<br />
| YES (Xcode 13.2.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 12.0 Monterey<br />
| YES<br />
| YES (Xcode 13.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|}<br />
<br />
1. Available only by building with the "DeSmuME (Xcode 3).xcodeproj" file using Xcode 3.2.6.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2022-05-09T20:35:26Z<p>Rogerman: Update DeSmuME master branch download link</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for macOS may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files, provided with the DeSmuME source code, include several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== macOS App ===<br />
These build targets produce a self-contained macOS application package (or "app bundle"). These builds use our official macOS frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with macOS 10.6 or later. (Also compatible with macOS 10.5 if building from the Xcode 3 project).<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different macOS versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 3.2.6, so any machine running macOS 10.6 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is much faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with macOS v10.5 requires Xcode 3 to build.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Intel; LLVM-Clang) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using Clang 1.7. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Intel; LLVM-GCC) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-Clang) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using Clang 1.7 for ppc and GCC 4.2.1 for ppc64. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-GCC) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (dev+) ===<br />
This build target is just like the normal macOS App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of macOS.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 8.2.1, so any machine running macOS 10.11.5 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (v10.5 Leopard Final Release Build) ===<br />
This build target is for producing final release builds of DeSmuME. These builds will use our official macOS frontend contained in an macOS app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports PowerPC 32-bit, Intel 32-bit, Intel 64-bit, Intel 64-bit Haswell, and Apple Silicon.<br />
* Binaries are compatible with macOS 10.5 and later.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Building the app for release takes several more steps than other builds.<br />
* Performing proper PGO exercises requires additional time and effort.<br />
* Requires a separate Mac or virtual machine running macOS 10.9.5 in order to run Xcode 3.2.6 and Xcode 6.2 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running macOS 10.12.6 or macOS 10.13.6 in order to run Xcode 8.3.3 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running the latest macOS (12.3.1 as of this writing) in order to run the latest Xcode (13.3.1 as of this writing) for intermediate build steps.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 1 PowerPC32; Xcode 3) | ''Builds for ppc, requires Xcode 3.2.6. Runs on PowerPC 32-bit.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6) | ''Compiles nib file and copies resources only, requires Xcode 6.2. Base container that runs all binaries, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8) | ''Builds for i386, requires Xcode 8.3.3. Runs on Intel 32-bit.''<br />
** DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8) | ''Builds for x86_64, requires Xcode 8.3.3. Runs on Intel 64-bit.''<br />
** DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode) | ''Builds for x86_64h, requires latest Xcode (13.3.1 as of this writing). Runs on Intel 64-bit Haswell.''<br />
** DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires latest Xcode (13.3.1 as of this writing). Runs on Apple Silicon.''<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Builds require Xcode 12.4 minimum, which requires a machine running macOS 10.15 or later to make this build.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user. This is especially noticeable when running older versions of OpenEmu.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (OpenEmu Plug-in -- Latest Xcode) | ''Builds for x86_64/x86_64h/arm64, requires Xcode 12.4 minimum. Runs on Intel 64-bit, Intel 64-bit Haswell and Apple Silicon, minimum OpenEmu 1.0.4.''<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the "desmume/src/frontend/cocoa" folder of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.2.6 only (runs on 10.6.8 Snow Leopard to 10.9.5 Mavericks)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| Typical Usage: v8.2.1 or later (runs on 10.11.6 El Capitan to latest macOS)<br />
Final Release Builds: v6.2 only (runs on 10.9.5 Mavericks)<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3.2.6 if any of the following conditions apply:<br />
* The machine you are building from is running macOS 10.9.5 Mavericks or earlier.<br />
* You are building a macOS app that can run on macOS 10.5 Leopard.<br />
* You are building a macOS app that can run on PowerPC processors.<br />
<br />
<br />
You must use Xcode 8.2.1 to Xcode 9.4.1 if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 32-bit processors.<br />
* You are building a macOS app that can run on macOS 10.6 Snow Leopard.<br />
<br />
<br />
You must use Xcode 10.1 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 64-bit Haswell processors.<br />
* You are building a macOS app that can use SSE4.1 for Intel 64-bit development builds. (This requires a Core2Duo Penryn processor, dropping support for Merom processors, This also requires macOS 10.12 Sierra or later.)<br />
<br />
<br />
You must use Xcode 12.4 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Apple Silicon processors.<br />
* You are building the OpenEmu plug-in.<br />
<br />
<br />
You must use the following versions of Xcode if you are making the Final Release Build of the macOS app:<br />
* Xcode 3.2.6 running on 10.9.5 Mavericks<br />
* Xcode 6.2 running on 10.9.5 Mavericks<br />
* Xcode 8.3.3 running on 10.12.6 Sierra or 10.13.6 High Sierra<br />
* Latest Xcode version (13.3.1 as of this writing) running on latest macOS version (12.3.1 Monterey as of this writing)<br />
<br />
<br />
'''Note:''' ''macOS 10.10 Yosemite is a 'dead zone' for development. If cannot run Xcode 3.2.6, while El Capitan can run all of the same versions of Xcode that Yosemite can. Therefore, we do not recommend using Yosemite for any meaningful development work.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode 3.2.6 Direct Download Link (for Snow Leopard to Mavericks): https://download.developer.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running macOS Monterey and have any kind of Apple ID (you do not specifically need an Apple Developer ID), then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12<br />
<br />
If you are already logged into your ADC account, you can also find the latest version of Xcode here (it will be at the top of the list):<br />
* Latest Xcode Direct Download Link: https://developer.apple.com/download/all/?q=Xcode<br />
<br />
==== Download Additional Xcode Versions for the macOS App Final Release Build ====<br />
If you will be making a Final Release Build of the macOS app, then you will also need these versions of Xcode. Again, you will need to be logged into ADC to use these direct download links.<br />
* Xcode 6.2 Direct Download Link (for Stage 2): https://download.developer.apple.com/Developer_Tools/Xcode_6.2/Xcode_6.2.dmg<br />
* Xcode 8.3.3 Direct Download Link (for Stage 3 and Stage 4): https://download.developer.apple.com/Developer_Tools/Xcode_8.3.3/Xcode_8.3.3.xip<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* Unless you are planning on building other software that must run on OS X v10.4, you may deselect the Mac OS X 10.4 SDK. (DeSmuME can only run on OS X v10.5 or later.)<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up Other Versions of Xcode ====<br />
If you downloaded Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
But if you downloaded Xcode directly from ADC, then you will need to perform the following steps to install Xcode:<br />
<br />
1. Move the .xip file to your Applications folder.<br />
<br />
2. Open the .xip file. It will automatically start decompressing itself into Xcode.app in your Applications folder. ''This will take some time to finish, so be patient.''<br />
<br />
3. When Xcode.app finishes decompressing, you may rename it to something else now. This can be useful if you are planning to run multiple versions of Xcode, naming each Xcode.app to something that helps you stay organized.<br />
<br />
4. Launch the Xcode app. Depending on which version of macOS you are running, you may or may not see Xcode performing a validation check on itself. If it does, allow Xcode to complete the check. ''This will take some time to finish, so be patient.''<br />
<br />
5. Once Xcode finishes launching, it may ask you to install command line tools. Allow this installation, since DeSmuME can use them for certain tasks.<br />
<br />
6. After the command line tools finish installing, Xcode should now be ready for your use.<br />
<br />
7. The .xip file is no longer necessary. You can choose to move it to a different location or delete it at this time.<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using git and is hosted on GitHub.<br />
* DeSmuME "master" Branch Download Link: https://github.com/TASEmulators/desmume/archive/refs/heads/master.zip<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/desmume/src/frontend/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (XCode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== OS X App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the four build targets.<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder. If you built the app using the "DeSmuME (XCode 3).xcodeproj" project file, then the built app will also include the current git commit number.<br />
<br />
==== Building Using the Latest Version of Xcode ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App).<br />
<br />
3. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Dev+ Build ===<br />
The steps here are similar to that of the normal OS X App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 4 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App, dev+).<br />
<br />
''If you want to run dev+ build with Xcode's LLDB debugger:''<br />
<br />
3a. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Debug" folder.<br />
<br />
''If you need to use the dev+ build without running the debugger:''<br />
<br />
3b. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app. (Note that this build does use program optimizations.)<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Build for Final Release ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode v3.2.6 and Xcode v6.2 installed on a system running OS X Mavericks v10.9.5.<br />
* You must have the latest version of Xcode running on the latest version of macOS. (At the time of this writing, the latest version of Xcode is v9.1, and the latest version of macOS is 10.13.1.)<br />
<br />
1. Let's start with building on OS X Mavericks: Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (OS X App; PowerPC Release Build)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (PPC).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
7. While still on OS X Mavericks: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 6.2.<br />
<br />
8. Choose Product > Scheme > DeSmuME (OS X App; Xcode 6 .XIB for v10.5 Leopard Release Build).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (Xcode 6).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
11. Quit both Xcode 3 and Xcode 6 on OS X Mavericks.<br />
<br />
12. On the latest macOS: Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
13. Choose Product > Scheme > DeSmuME (OS X App; v10.5 Leopard Release Build).<br />
<br />
14. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
15. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
16. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
17. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME.app will automatically launch.<br />
<br />
18. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
19. After all PGO exercises are complete, quit DeSmuME.app. Xcode should now report that it has generated an optimization profile.<br />
<br />
20. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the "desmume/src/frontend/cocoa/openemu" folder, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > OpenEmuBase.<br />
<br />
3. Click Run. This will build a Debug version of the framework.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show "OpenEmuBase.framework".<br />
<br />
6. Click "OpenEmuBase.framework", and then choose File > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version framework.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Move OpenEmuBase.framework into the "desmume/src/frontend/cocoa/openemu" folder.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the "desmume/src/frontend/cocoa/openemu" folder. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in).<br />
<br />
3. Click Run. This will build a Debug version of the plug-in.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show the "DeSmuME.oecoreplugin" bundle.<br />
<br />
6. Click "DeSmuME.oecoreplugin", and then choose Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click (or Control-click) the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version plug-in.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Choose New > New Finder Window.<br />
<br />
11. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
12. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
13. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app.<br />
<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="200" |<br />
! scope="col" width="200" | macOS App<br />
! scope="col" width="200" | macOS App (dev+)<br />
! scope="col" width="200" | macOS App (Final Release)<br />
! scope="col" width="200" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| NO<br />
| NO<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
<br />
YES w/ SSE4.1 (macOS 10.12)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
YES w/ SSE4.1 (Xcode 10.1 or later)<br />
| YES (macOS 10.5)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Intel, 64-bit Haswell<br />
| YES (macOS 10.12)<br />
| YES (Xcode 10.1 or later)<br />
| YES (macOS 10.9)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Apple Silicon, 64-bit<br />
| YES (macOS 11.0)<br />
| YES (Xcode 12.4 or later)<br />
| YES (macOS 11.0)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | macOS 10.5 Leopard<br />
| YES[1]<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.6 Snow Leopard<br />
| YES<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.7 Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.8 Mountain Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.9 Mavericks<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.10 Yosemite<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.11 El Capitan<br />
| YES<br />
| YES (Xcode 8.2.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.12 Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.2)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.13 High Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.4.1)<br />
<br />
YES (Xcode 10.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.14 Mojave<br />
| YES<br />
| YES (Xcode 9.4.1)<br />
YES (Xcode 11.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 10.15 Catalina<br />
| YES<br />
| YES (Xcode 12.4)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 11.0 Big Sur<br />
| YES<br />
| YES (Xcode 13.2.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 12.0 Monterey<br />
| YES<br />
| YES (Xcode 13.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|}<br />
<br />
1. Available only by building with the "DeSmuME (Xcode 3).xcodeproj" file using Xcode 3.2.6.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2022-05-09T20:34:02Z<p>Rogerman: Updates to reflect current operating systems, Xcode versions, OpenEmu versions, and integration knowledge</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for macOS may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files, provided with the DeSmuME source code, include several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== macOS App ===<br />
These build targets produce a self-contained macOS application package (or "app bundle"). These builds use our official macOS frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with macOS 10.6 or later. (Also compatible with macOS 10.5 if building from the Xcode 3 project).<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different macOS versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 3.2.6, so any machine running macOS 10.6 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is much faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with macOS v10.5 requires Xcode 3 to build.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Intel; LLVM-Clang) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using Clang 1.7. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Intel; LLVM-GCC) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-Clang) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using Clang 1.7 for ppc and GCC 4.2.1 for ppc64. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-GCC) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (dev+) ===<br />
This build target is just like the normal macOS App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of macOS.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 8.2.1, so any machine running macOS 10.11.5 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (v10.5 Leopard Final Release Build) ===<br />
This build target is for producing final release builds of DeSmuME. These builds will use our official macOS frontend contained in an macOS app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports PowerPC 32-bit, Intel 32-bit, Intel 64-bit, Intel 64-bit Haswell, and Apple Silicon.<br />
* Binaries are compatible with macOS 10.5 and later.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Building the app for release takes several more steps than other builds.<br />
* Performing proper PGO exercises requires additional time and effort.<br />
* Requires a separate Mac or virtual machine running macOS 10.9.5 in order to run Xcode 3.2.6 and Xcode 6.2 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running macOS 10.12.6 or macOS 10.13.6 in order to run Xcode 8.3.3 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running the latest macOS (12.3.1 as of this writing) in order to run the latest Xcode (13.3.1 as of this writing) for intermediate build steps.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 1 PowerPC32; Xcode 3) | ''Builds for ppc, requires Xcode 3.2.6. Runs on PowerPC 32-bit.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6) | ''Compiles nib file and copies resources only, requires Xcode 6.2. Base container that runs all binaries, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8) | ''Builds for i386, requires Xcode 8.3.3. Runs on Intel 32-bit.''<br />
** DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8) | ''Builds for x86_64, requires Xcode 8.3.3. Runs on Intel 64-bit.''<br />
** DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode) | ''Builds for x86_64h, requires latest Xcode (13.3.1 as of this writing). Runs on Intel 64-bit Haswell.''<br />
** DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires latest Xcode (13.3.1 as of this writing). Runs on Apple Silicon.''<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Builds require Xcode 12.4 minimum, which requires a machine running macOS 10.15 or later to make this build.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user. This is especially noticeable when running older versions of OpenEmu.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (OpenEmu Plug-in -- Latest Xcode) | ''Builds for x86_64/x86_64h/arm64, requires Xcode 12.4 minimum. Runs on Intel 64-bit, Intel 64-bit Haswell and Apple Silicon, minimum OpenEmu 1.0.4.''<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the "desmume/src/frontend/cocoa" folder of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.2.6 only (runs on 10.6.8 Snow Leopard to 10.9.5 Mavericks)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| Typical Usage: v8.2.1 or later (runs on 10.11.6 El Capitan to latest macOS)<br />
Final Release Builds: v6.2 only (runs on 10.9.5 Mavericks)<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3.2.6 if any of the following conditions apply:<br />
* The machine you are building from is running macOS 10.9.5 Mavericks or earlier.<br />
* You are building a macOS app that can run on macOS 10.5 Leopard.<br />
* You are building a macOS app that can run on PowerPC processors.<br />
<br />
<br />
You must use Xcode 8.2.1 to Xcode 9.4.1 if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 32-bit processors.<br />
* You are building a macOS app that can run on macOS 10.6 Snow Leopard.<br />
<br />
<br />
You must use Xcode 10.1 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 64-bit Haswell processors.<br />
* You are building a macOS app that can use SSE4.1 for Intel 64-bit development builds. (This requires a Core2Duo Penryn processor, dropping support for Merom processors, This also requires macOS 10.12 Sierra or later.)<br />
<br />
<br />
You must use Xcode 12.4 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Apple Silicon processors.<br />
* You are building the OpenEmu plug-in.<br />
<br />
<br />
You must use the following versions of Xcode if you are making the Final Release Build of the macOS app:<br />
* Xcode 3.2.6 running on 10.9.5 Mavericks<br />
* Xcode 6.2 running on 10.9.5 Mavericks<br />
* Xcode 8.3.3 running on 10.12.6 Sierra or 10.13.6 High Sierra<br />
* Latest Xcode version (13.3.1 as of this writing) running on latest macOS version (12.3.1 Monterey as of this writing)<br />
<br />
<br />
'''Note:''' ''macOS 10.10 Yosemite is a 'dead zone' for development. If cannot run Xcode 3.2.6, while El Capitan can run all of the same versions of Xcode that Yosemite can. Therefore, we do not recommend using Yosemite for any meaningful development work.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode 3.2.6 Direct Download Link (for Snow Leopard to Mavericks): https://download.developer.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running macOS Monterey and have any kind of Apple ID (you do not specifically need an Apple Developer ID), then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12<br />
<br />
If you are already logged into your ADC account, you can also find the latest version of Xcode here (it will be at the top of the list):<br />
* Latest Xcode Direct Download Link: https://developer.apple.com/download/all/?q=Xcode<br />
<br />
==== Download Additional Xcode Versions for the macOS App Final Release Build ====<br />
If you will be making a Final Release Build of the macOS app, then you will also need these versions of Xcode. Again, you will need to be logged into ADC to use these direct download links.<br />
* Xcode 6.2 Direct Download Link (for Stage 2): https://download.developer.apple.com/Developer_Tools/Xcode_6.2/Xcode_6.2.dmg<br />
* Xcode 8.3.3 Direct Download Link (for Stage 3 and Stage 4): https://download.developer.apple.com/Developer_Tools/Xcode_8.3.3/Xcode_8.3.3.xip<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* Unless you are planning on building other software that must run on OS X v10.4, you may deselect the Mac OS X 10.4 SDK. (DeSmuME can only run on OS X v10.5 or later.)<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up Other Versions of Xcode ====<br />
If you downloaded Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
But if you downloaded Xcode directly from ADC, then you will need to perform the following steps to install Xcode:<br />
<br />
1. Move the .xip file to your Applications folder.<br />
<br />
2. Open the .xip file. It will automatically start decompressing itself into Xcode.app in your Applications folder. ''This will take some time to finish, so be patient.''<br />
<br />
3. When Xcode.app finishes decompressing, you may rename it to something else now. This can be useful if you are planning to run multiple versions of Xcode, naming each Xcode.app to something that helps you stay organized.<br />
<br />
4. Launch the Xcode app. Depending on which version of macOS you are running, you may or may not see Xcode performing a validation check on itself. If it does, allow Xcode to complete the check. ''This will take some time to finish, so be patient.''<br />
<br />
5. Once Xcode finishes launching, it may ask you to install command line tools. Allow this installation, since DeSmuME can use them for certain tasks.<br />
<br />
6. After the command line tools finish installing, Xcode should now be ready for your use.<br />
<br />
7. The .xip file is no longer necessary. You can choose to move it to a different location or delete it at this time.<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using git and is hosted on GitHub.<br />
* DeSmuME "master" Branch Download Link: https://github.com/TASVideos/desmume/archive/master.zip<br />
<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/desmume/src/frontend/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (XCode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== OS X App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the four build targets.<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder. If you built the app using the "DeSmuME (XCode 3).xcodeproj" project file, then the built app will also include the current git commit number.<br />
<br />
==== Building Using the Latest Version of Xcode ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App).<br />
<br />
3. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Dev+ Build ===<br />
The steps here are similar to that of the normal OS X App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 4 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App, dev+).<br />
<br />
''If you want to run dev+ build with Xcode's LLDB debugger:''<br />
<br />
3a. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Debug" folder.<br />
<br />
''If you need to use the dev+ build without running the debugger:''<br />
<br />
3b. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app. (Note that this build does use program optimizations.)<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Build for Final Release ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode v3.2.6 and Xcode v6.2 installed on a system running OS X Mavericks v10.9.5.<br />
* You must have the latest version of Xcode running on the latest version of macOS. (At the time of this writing, the latest version of Xcode is v9.1, and the latest version of macOS is 10.13.1.)<br />
<br />
1. Let's start with building on OS X Mavericks: Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (OS X App; PowerPC Release Build)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (PPC).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
7. While still on OS X Mavericks: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 6.2.<br />
<br />
8. Choose Product > Scheme > DeSmuME (OS X App; Xcode 6 .XIB for v10.5 Leopard Release Build).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (Xcode 6).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
11. Quit both Xcode 3 and Xcode 6 on OS X Mavericks.<br />
<br />
12. On the latest macOS: Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
13. Choose Product > Scheme > DeSmuME (OS X App; v10.5 Leopard Release Build).<br />
<br />
14. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
15. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
16. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
17. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME.app will automatically launch.<br />
<br />
18. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
19. After all PGO exercises are complete, quit DeSmuME.app. Xcode should now report that it has generated an optimization profile.<br />
<br />
20. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the "desmume/src/frontend/cocoa/openemu" folder, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > OpenEmuBase.<br />
<br />
3. Click Run. This will build a Debug version of the framework.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show "OpenEmuBase.framework".<br />
<br />
6. Click "OpenEmuBase.framework", and then choose File > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version framework.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Move OpenEmuBase.framework into the "desmume/src/frontend/cocoa/openemu" folder.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the "desmume/src/frontend/cocoa/openemu" folder. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in).<br />
<br />
3. Click Run. This will build a Debug version of the plug-in.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show the "DeSmuME.oecoreplugin" bundle.<br />
<br />
6. Click "DeSmuME.oecoreplugin", and then choose Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click (or Control-click) the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version plug-in.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Choose New > New Finder Window.<br />
<br />
11. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
12. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
13. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app.<br />
<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="200" |<br />
! scope="col" width="200" | macOS App<br />
! scope="col" width="200" | macOS App (dev+)<br />
! scope="col" width="200" | macOS App (Final Release)<br />
! scope="col" width="200" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| YES[1] (macOS 10.5)<br />
| NO<br />
| NO<br />
| NO<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
| YES (macOS 10.5)<br />
| NO<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| YES[1] (macOS 10.5)<br />
YES (macOS 10.6)<br />
<br />
YES w/ SSE4.1 (macOS 10.12)<br />
| YES (Xcode 8.2.1 - 9.4.1)<br />
YES w/ SSE4.1 (Xcode 10.1 or later)<br />
| YES (macOS 10.5)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Intel, 64-bit Haswell<br />
| YES (macOS 10.12)<br />
| YES (Xcode 10.1 or later)<br />
| YES (macOS 10.9)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | Apple Silicon, 64-bit<br />
| YES (macOS 11.0)<br />
| YES (Xcode 12.4 or later)<br />
| YES (macOS 11.0)<br />
| YES (OpenEmu 1.0.4)<br />
|-<br />
! scope="row" | macOS 10.5 Leopard<br />
| YES[1]<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.6 Snow Leopard<br />
| YES<br />
| NO<br />
| YES<br />
| NO<br />
|-<br />
! scope="row" | macOS 10.7 Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.8 Mountain Lion<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.9 Mavericks<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.10 Yosemite<br />
| YES<br />
| NO<br />
| YES<br />
| YES (OpenEmu 1.0.4)<br />
YES (OpenEmu 2.0.1)<br />
|-<br />
! scope="row" | macOS 10.11 El Capitan<br />
| YES<br />
| YES (Xcode 8.2.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.12 Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.2)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.13 High Sierra<br />
| YES<br />
| YES (Xcode 8.3.3)<br />
YES (Xcode 9.4.1)<br />
<br />
YES (Xcode 10.1)<br />
| YES<br />
| YES (OpenEmu 2.0.9.1)<br />
|-<br />
! scope="row" | macOS 10.14 Mojave<br />
| YES<br />
| YES (Xcode 9.4.1)<br />
YES (Xcode 11.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 10.15 Catalina<br />
| YES<br />
| YES (Xcode 12.4)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 11.0 Big Sur<br />
| YES<br />
| YES (Xcode 13.2.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|-<br />
! scope="row" | macOS 12.0 Monterey<br />
| YES<br />
| YES (Xcode 13.3.1)<br />
| YES<br />
| YES (OpenEmu 2.3.3)<br />
|}<br />
<br />
1. Available only by building with the "DeSmuME (Xcode 3).xcodeproj" file using Xcode 3.2.6.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2022-05-09T19:12:37Z<p>Rogerman: Update to reflect current requirements and procedure</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for macOS may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files, provided with the DeSmuME source code, include several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== macOS App ===<br />
These build targets produce a self-contained macOS application package (or "app bundle"). These builds use our official macOS frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with macOS 10.6 or later. (Also compatible with macOS 10.5 if building from the Xcode 3 project).<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different macOS versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 3.2.6, so any machine running macOS 10.6 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is much faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with macOS v10.5 requires Xcode 3 to build.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Intel; LLVM-Clang) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using Clang 1.7. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Intel; LLVM-GCC) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-Clang) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using Clang 1.7 for ppc and GCC 4.2.1 for ppc64. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-GCC) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (dev+) ===<br />
This build target is just like the normal macOS App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of macOS.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 8.2.1, so any machine running macOS 10.11.5 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (v10.5 Leopard Final Release Build) ===<br />
This build target is for producing final release builds of DeSmuME. These builds will use our official macOS frontend contained in an macOS app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports PowerPC 32-bit, Intel 32-bit, Intel 64-bit, Intel 64-bit Haswell, and Apple Silicon.<br />
* Binaries are compatible with macOS 10.5 and later.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Building the app for release takes several more steps than other builds.<br />
* Performing proper PGO exercises requires additional time and effort.<br />
* Requires a separate Mac or virtual machine running macOS 10.9.5 in order to run Xcode 3.2.6 and Xcode 6.2 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running macOS 10.12.6 or macOS 10.13.6 in order to run Xcode 8.3.3 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running the latest macOS (12.3.1 as of this writing) in order to run the latest Xcode (13.3.1 as of this writing) for intermediate build steps.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 1 PowerPC32; Xcode 3) | ''Builds for ppc, requires Xcode 3.2.6. Runs on PowerPC 32-bit.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6) | ''Compiles nib file and copies resources only, requires Xcode 6.2. Base container that runs all binaries, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8) | ''Builds for i386, requires Xcode 8.3.3. Runs on Intel 32-bit.''<br />
** DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8) | ''Builds for x86_64, requires Xcode 8.3.3. Runs on Intel 64-bit.''<br />
** DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode) | ''Builds for x86_64h, requires latest Xcode (13.3.1 as of this writing). Runs on Intel 64-bit Haswell.''<br />
** DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires latest Xcode (13.3.1 as of this writing). Runs on Apple Silicon.''<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Builds require Xcode 12.4 minimum, which requires a machine running macOS 10.15 or later to make this build.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user. This is especially noticeable when running older versions of OpenEmu.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (OpenEmu Plug-in -- Latest Xcode) | ''Builds for x86_64/x86_64h/arm64, requires Xcode 12.4 minimum. Runs on Intel 64-bit, Intel 64-bit Haswell and Apple Silicon, minimum OpenEmu 1.0.4.''<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the "desmume/src/frontend/cocoa" folder of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.2.6 only (runs on 10.6.8 Snow Leopard to 10.9.5 Mavericks)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| Typical Usage: v8.2.1 or later (runs on 10.11.6 El Capitan to latest macOS)<br />
Final Release Builds: v6.2 only (runs on 10.9.5 Mavericks)<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3.2.6 if any of the following conditions apply:<br />
* The machine you are building from is running macOS 10.9.5 Mavericks or earlier.<br />
* You are building a macOS app that can run on macOS 10.5 Leopard.<br />
* You are building a macOS app that can run on PowerPC processors.<br />
<br />
<br />
You must use Xcode 8.2.1 to Xcode 9.4.1 if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 32-bit processors.<br />
* You are building a macOS app that can run on macOS 10.6 Snow Leopard.<br />
<br />
<br />
You must use Xcode 10.1 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Intel 64-bit Haswell processors.<br />
* You are building a macOS app that can use SSE4.1 for Intel 64-bit development builds. (This requires a Core2Duo Penryn processor, dropping support for Merom processors, This also requires macOS 10.12 Sierra or later.)<br />
<br />
<br />
You must use Xcode 12.4 or later if any of the following conditions apply:<br />
* You are building a macOS app that can run on Apple Silicon processors.<br />
* You are building the OpenEmu plug-in.<br />
<br />
<br />
You must use the following versions of Xcode if you are making the Final Release Build of the macOS app:<br />
* Xcode 3.2.6 running on 10.9.5 Mavericks<br />
* Xcode 6.2 running on 10.9.5 Mavericks<br />
* Xcode 8.3.3 running on 10.12.6 Sierra or 10.13.6 High Sierra<br />
* Latest Xcode version (13.3.1 as of this writing) running on latest macOS version (12.3.1 Monterey as of this writing)<br />
<br />
<br />
'''Note:''' ''macOS 10.10 Yosemite is a 'dead zone' for development. If cannot run Xcode 3.2.6, while El Capitan can run all of the same versions of Xcode that Yosemite can. Therefore, we do not recommend using Yosemite for any meaningful development work.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode 3.2.6 Direct Download Link (for Snow Leopard to Mavericks): https://download.developer.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running macOS Monterey and have any kind of Apple ID (you do not specifically need an Apple Developer ID), then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link: https://apps.apple.com/us/app/xcode/id497799835?mt=12<br />
<br />
If you are already logged into your ADC account, you can also find the latest version of Xcode here (it will be at the top of the list):<br />
* Latest Xcode Direct Download Link: https://developer.apple.com/download/all/?q=Xcode<br />
<br />
==== Download Additional Xcode Versions for the macOS App Final Release Build ====<br />
If you will be making a Final Release Build of the macOS app, then you will also need these versions of Xcode. Again, you will need to be logged into ADC to use these direct download links.<br />
* Xcode 6.2 Direct Download Link (for Stage 2): https://download.developer.apple.com/Developer_Tools/Xcode_6.2/Xcode_6.2.dmg<br />
* Xcode 8.3.3 Direct Download Link (for Stage 3 and Stage 4): https://download.developer.apple.com/Developer_Tools/Xcode_8.3.3/Xcode_8.3.3.xip<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* Unless you are planning on building other software that must run on OS X v10.4, you may deselect the Mac OS X 10.4 SDK. (DeSmuME can only run on OS X v10.5 or later.)<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up Other Versions of Xcode ====<br />
If you downloaded Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
But if you downloaded Xcode directly from ADC, then you will need to perform the following steps to install Xcode:<br />
<br />
1. Move the .xip file to your Applications folder.<br />
<br />
2. Open the .xip file. It will automatically start decompressing itself into Xcode.app in your Applications folder. ''This will take some time to finish, so be patient.''<br />
<br />
3. When Xcode.app finishes decompressing, you may rename it to something else now. This can be useful if you are planning to run multiple versions of Xcode, naming each Xcode.app to something that helps you stay organized.<br />
<br />
4. Launch the Xcode app. Depending on which version of macOS you are running, you may or may not see Xcode performing a validation check on itself. If it does, allow Xcode to complete the check. ''This will take some time to finish, so be patient.''<br />
<br />
5. Once Xcode finishes launching, it may ask you to install command line tools. Allow this installation, since DeSmuME can use them for certain tasks.<br />
<br />
6. After the command line tools finish installing, Xcode should now be ready for your use.<br />
<br />
7. The .xip file is no longer necessary. You can choose to move it to a different location or delete it at this time.<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using git and is hosted on GitHub.<br />
* DeSmuME "master" Branch Download Link: https://github.com/TASVideos/desmume/archive/master.zip<br />
<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/desmume/src/frontend/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (XCode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== OS X App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the four build targets.<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder. If you built the app using the "DeSmuME (XCode 3).xcodeproj" project file, then the built app will also include the current git commit number.<br />
<br />
==== Building Using the Latest Version of Xcode ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App).<br />
<br />
3. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Dev+ Build ===<br />
The steps here are similar to that of the normal OS X App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 4 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App, dev+).<br />
<br />
''If you want to run dev+ build with Xcode's LLDB debugger:''<br />
<br />
3a. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Debug" folder.<br />
<br />
''If you need to use the dev+ build without running the debugger:''<br />
<br />
3b. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app. (Note that this build does use program optimizations.)<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Build for Final Release ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode v3.2.6 and Xcode v6.2 installed on a system running OS X Mavericks v10.9.5.<br />
* You must have the latest version of Xcode running on the latest version of macOS. (At the time of this writing, the latest version of Xcode is v9.1, and the latest version of macOS is 10.13.1.)<br />
<br />
1. Let's start with building on OS X Mavericks: Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (OS X App; PowerPC Release Build)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (PPC).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
7. While still on OS X Mavericks: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 6.2.<br />
<br />
8. Choose Product > Scheme > DeSmuME (OS X App; Xcode 6 .XIB for v10.5 Leopard Release Build).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (Xcode 6).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
11. Quit both Xcode 3 and Xcode 6 on OS X Mavericks.<br />
<br />
12. On the latest macOS: Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
13. Choose Product > Scheme > DeSmuME (OS X App; v10.5 Leopard Release Build).<br />
<br />
14. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
15. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
16. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
17. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME.app will automatically launch.<br />
<br />
18. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
19. After all PGO exercises are complete, quit DeSmuME.app. Xcode should now report that it has generated an optimization profile.<br />
<br />
20. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the "desmume/src/frontend/cocoa/openemu" folder, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > OpenEmuBase.<br />
<br />
3. Click Run. This will build a Debug version of the framework.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show "OpenEmuBase.framework".<br />
<br />
6. Click "OpenEmuBase.framework", and then choose File > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version framework.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Move OpenEmuBase.framework into the "desmume/src/frontend/cocoa/openemu" folder.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the "desmume/src/frontend/cocoa/openemu" folder. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in).<br />
<br />
3. Click Run. This will build a Debug version of the plug-in.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show the "DeSmuME.oecoreplugin" bundle.<br />
<br />
6. Click "DeSmuME.oecoreplugin", and then choose Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click (or Control-click) the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version plug-in.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Choose New > New Finder Window.<br />
<br />
11. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
12. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
13. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app.<br />
<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="150" |<br />
! scope="col" width="150" | OS X App<br />
! scope="col" width="150" | OS X App (dev+)<br />
! scope="col" width="150" | OS X App (Final Release)<br />
! scope="col" width="150" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| Yes[1]<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| Yes[1]<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.5 (Leopard)<br />
| Yes<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.6 (Snow Leopard)<br />
| Yes<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.7 (Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.8 (Mountain Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.9 (Mavericks)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.10 (Yosemite)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.11 (El Capitan)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.12 (Sierra)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.13 (High Sierra)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|}<br />
<br />
1. Available only by configuration in Xcode 3.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2022-05-09T17:44:23Z<p>Rogerman: Update Build Targets info to reflect latest changes</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for macOS may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files, provided with the DeSmuME source code, include several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== macOS App ===<br />
These build targets produce a self-contained macOS application package (or "app bundle"). These builds use our official macOS frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with macOS 10.6 or later. (Also compatible with macOS 10.5 if building from the Xcode 3 project).<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different macOS versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 3.2.6, so any machine running macOS 10.6 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is much faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with macOS v10.5 requires Xcode 3 to build.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Intel; LLVM-Clang) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using Clang 1.7. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Intel; LLVM-GCC) | ''Builds for i386/x86_64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-Clang) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using Clang 1.7 for ppc and GCC 4.2.1 for ppc64. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
** DeSmuME (macOS App; PowerPC; LLVM-GCC) | ''Builds for ppc/ppc64, requires Xcode 3.2.6 using GCC 4.2.1. Runs on PowerPC 32-bit and PowerPC 64-bit, macOS 10.5 only.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (dev+) ===<br />
This build target is just like the normal macOS App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of macOS.<br />
* Quick debug-and-test of code changes.<br />
<br />
<br />
'''Advantages:'''<br />
* Builds only have a minimum requirement Xcode 8.2.1, so any machine running macOS 10.11.5 or later can make this build.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Intel64 dev+ -- Latest Xcode) | ''Builds for x86_64/x86_64h, requires Xcode 10.1 minimum. Runs on Intel 64-bit and Intel 64-bit Haswell, minimum macOS 10.12.''<br />
** DeSmuME (macOS App; AppleSilicon dev+ -- Latest Xcode) | ''Builds for arm64, requires Xcode 12.4 minimum. Runs on Apple Silicon, minimum macOS 11.0.''<br />
** DeSmuME (macOS App; Intel32 Intel64 dev+ -- Xcode 9) | ''Builds for i386/x86_64, requires Xcode 8.2.1 minimum to Xcode 9.4.1 maximum. Runs on Intel 32-bit and Intel 64-bit, minimum macOS 10.6.''<br />
<br />
<br />
=== macOS App (v10.5 Leopard Final Release Build) ===<br />
This build target is for producing final release builds of DeSmuME. These builds will use our official macOS frontend contained in an macOS app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports PowerPC 32-bit, Intel 32-bit, Intel 64-bit, Intel 64-bit Haswell, and Apple Silicon.<br />
* Binaries are compatible with macOS 10.5 and later.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Building the app for release takes several more steps than other builds.<br />
* Performing proper PGO exercises requires additional time and effort.<br />
* Requires a separate Mac or virtual machine running macOS 10.9.5 in order to run Xcode 3.2.6 and Xcode 6.2 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running macOS 10.12.6 or macOS 10.13.6 in order to run Xcode 8.3.3 for intermediate build steps.<br />
* Requires a separate Mac or virtual machine running the latest macOS (12.3.1 as of this writing) in order to run the latest Xcode (13.3.1 as of this writing) for intermediate build steps.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Xcode 3).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 1 PowerPC32; Xcode 3) | ''Builds for ppc, requires Xcode 3.2.6. Runs on PowerPC 32-bit.''<br />
<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (macOS App; Release Stage 2 Leopard NIB -- Xcode 6) | ''Compiles nib file and copies resources only, requires Xcode 6.2. Base container that runs all binaries, minimum macOS 10.5.''<br />
** DeSmuME (macOS App; Release Stage 3 Intel32 -- Xcode 8) | ''Builds for i386, requires Xcode 8.3.3. Runs on Intel 32-bit.''<br />
** DeSmuME (macOS App; Release Stage 4 Intel64 -- Xcode 8) | ''Builds for x86_64, requires Xcode 8.3.3. Runs on Intel 64-bit.''<br />
** DeSmuME (macOS App; Release Stage 5 Intel64 Haswell -- Latest Xcode) | ''Builds for x86_64h, requires latest Xcode (13.3.1 as of this writing). Runs on Intel 64-bit Haswell.''<br />
** DeSmuME (macOS App; Release Stage Final AppleSilicon -- Latest Xcode) | ''Builds for arm64, requires latest Xcode (13.3.1 as of this writing). Runs on Apple Silicon.''<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
<br />
'''Disadvantages:'''<br />
* Builds require Xcode 12.4 minimum, which requires a machine running macOS 10.15 or later to make this build.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user. This is especially noticeable when running older versions of OpenEmu.<br />
<br />
<br />
'''Builds For This Category:'''<br />
* DeSmuME (Latest).xcodeproj<br />
** DeSmuME (OpenEmu Plug-in -- Latest Xcode) | ''Builds for x86_64/x86_64h/arm64, requires Xcode 12.4 minimum. Runs on Intel 64-bit, Intel 64-bit Haswell and Apple Silicon, minimum OpenEmu 1.0.4.''<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the "desmume/src/frontend/cocoa" folder of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.1.4 (if running on Leopard); v3.2.6 (if running on Snow Leopard or later)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| v4.6.3 or later<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3 if any of the following conditions apply:<br />
* You are running OS X v10.5 or v10.6.<br />
* You are building an OS X App that runs on OS X v10.5.<br />
* You are building an OS X App that runs on PowerPC processors.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
You must use Xcode 4 or later if any of the following conditions apply:<br />
* You are running OS X v10.7 or later.<br />
* You are building an OpenEmu Plug-in.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
'''Note:''' ''Xcode 3 is not compatible with OS X v10.10 Yosemite. If you require the use of Xcode 3, you will need to run it on an older version of OS X.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode v3.1.4 Direct Download Link (for Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.1.4_developer_tools/xcode314_2809_developerdvd.dmg<br />
* Xcode v3.2.6 Direct Download Link (for Snow Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
If you will be building a Final Release build, then you also need Xcode 6.<br />
* Xcode v6.2 Direct Download Link (for Mavericks): http://download.developer.apple.com/Developer_Tools/Xcode_6.2/Xcode_6.2.dmg<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running Lion or later and have any Apple ID, then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link (for Lion or later): https://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* Unless you are planning on building other software that must run on OS X v10.4, you may deselect the Mac OS X 10.4 SDK. (DeSmuME can only run on OS X v10.5 or later.)<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up the Latest Version of Xcode ====<br />
When you download Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using git and is hosted on GitHub.<br />
* DeSmuME "master" Branch Download Link: https://github.com/TASVideos/desmume/archive/master.zip<br />
<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/desmume/src/frontend/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (XCode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== OS X App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the four build targets.<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder. If you built the app using the "DeSmuME (XCode 3).xcodeproj" project file, then the built app will also include the current git commit number.<br />
<br />
==== Building Using the Latest Version of Xcode ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App).<br />
<br />
3. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Dev+ Build ===<br />
The steps here are similar to that of the normal OS X App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 4 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App, dev+).<br />
<br />
''If you want to run dev+ build with Xcode's LLDB debugger:''<br />
<br />
3a. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Debug" folder.<br />
<br />
''If you need to use the dev+ build without running the debugger:''<br />
<br />
3b. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app. (Note that this build does use program optimizations.)<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Build for Final Release ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode v3.2.6 and Xcode v6.2 installed on a system running OS X Mavericks v10.9.5.<br />
* You must have the latest version of Xcode running on the latest version of macOS. (At the time of this writing, the latest version of Xcode is v9.1, and the latest version of macOS is 10.13.1.)<br />
<br />
1. Let's start with building on OS X Mavericks: Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (OS X App; PowerPC Release Build)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (PPC).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
7. While still on OS X Mavericks: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 6.2.<br />
<br />
8. Choose Product > Scheme > DeSmuME (OS X App; Xcode 6 .XIB for v10.5 Leopard Release Build).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (Xcode 6).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
11. Quit both Xcode 3 and Xcode 6 on OS X Mavericks.<br />
<br />
12. On the latest macOS: Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
13. Choose Product > Scheme > DeSmuME (OS X App; v10.5 Leopard Release Build).<br />
<br />
14. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
15. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
16. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
17. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME.app will automatically launch.<br />
<br />
18. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
19. After all PGO exercises are complete, quit DeSmuME.app. Xcode should now report that it has generated an optimization profile.<br />
<br />
20. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the "desmume/src/frontend/cocoa/openemu" folder, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > OpenEmuBase.<br />
<br />
3. Click Run. This will build a Debug version of the framework.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show "OpenEmuBase.framework".<br />
<br />
6. Click "OpenEmuBase.framework", and then choose File > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version framework.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Move OpenEmuBase.framework into the "desmume/src/frontend/cocoa/openemu" folder.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the "desmume/src/frontend/cocoa/openemu" folder. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in).<br />
<br />
3. Click Run. This will build a Debug version of the plug-in.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show the "DeSmuME.oecoreplugin" bundle.<br />
<br />
6. Click "DeSmuME.oecoreplugin", and then choose Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click (or Control-click) the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version plug-in.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Choose New > New Finder Window.<br />
<br />
11. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
12. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
13. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app.<br />
<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="150" |<br />
! scope="col" width="150" | OS X App<br />
! scope="col" width="150" | OS X App (dev+)<br />
! scope="col" width="150" | OS X App (Final Release)<br />
! scope="col" width="150" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| Yes[1]<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| Yes[1]<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.5 (Leopard)<br />
| Yes<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.6 (Snow Leopard)<br />
| Yes<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.7 (Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.8 (Mountain Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.9 (Mavericks)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.10 (Yosemite)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.11 (El Capitan)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.12 (Sierra)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.13 (High Sierra)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|}<br />
<br />
1. Available only by configuration in Xcode 3.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_LinuxInstalling DeSmuME from source on Linux2018-08-12T06:37:16Z<p>Rogerman: </p>
<hr />
<div>== Supported compilers ==<br />
On the Linux platform, only the GCC compiler and toolchain is supported.<br />
<br />
== Pre-requisites ==<br />
<br />
The Linux version of desmume comes in source code form only, and if your distribution does not package it or is packaging an old version you will have to compile the sources yourself. In order to compile desmume from a source tarball you'll need at least these packages:<br />
<br />
gcc make libglib2 libgtk2 libglade gettext libsdl zlib intltool agg libasound libpcap<br />
<br />
If you're compiling from svn, you'll need those one as well:<br />
<br />
autoconf automake<br />
<br />
If you want 3d engines alternatives to software rasterizer you may install libgtkglext or libosmesa.<br />
<br />
On debian you should have all the requirements installed with this command:<br />
<br />
sudo apt-get install build-essential autoconf automake libgtk2.0-dev libglu1-mesa-dev libsdl1.2-dev libglade2-dev gettext zlib1g-dev libosmesa6-dev intltool libagg-dev libasound2-dev libsoundtouch-dev libpcap-dev<br />
<br />
desmume requires libgtk 2.10 or higher.<br />
<br />
After successful compilation, you can start DeSmuME by running <code>desmume</code>. If you want to enable dynamic JIT recompiler, do this:<br />
<br />
desmume --cpu-mode=1<br />
<br />
== Install desmume from source tarball ==<br />
<br />
Go to http://desmume.org/download/ to check out the latest version of desmume available. At the time of writing the latest stable release of desmume is 0.9.11.<br />
<br />
Download the tarball and extract it:<br />
<br />
wget http://sourceforge.net/projects/desmume/files/desmume/0.9.11/desmume-0.9.11.tar.gz/download<br />
tar xvzf desmume-0.9.11.tar.gz<br />
<br />
Or if you don't want to save the archive locally:<br />
<br />
wget -O - http://sourceforge.net/projects/desmume/files/desmume/0.9.11/desmume-0.9.11.tar.gz/download | tar xvz<br />
<br />
Enter the desmume directory and build the source:<br />
<br />
cd desmume-0.9.11<br />
./configure<br />
make<br />
sudo make install<br />
<br />
If you are not using sudo the last command needs to be run as the <code>root</code> user.<br />
<br />
If you want to use offscreen mesa as alternative 3d engine use the <code>./configure --enable-osmesa</code> instead of just <code>./configure</code>.<br />
<br />
== Install desmume from git ==<br />
<br />
Grab the source from https://github.com/TASVideos/desmume<br />
<br />
Enter the desmume directory and build the source:<br />
<br />
cd desmume/src/frontend/posix/<br />
./autogen.sh<br />
./configure<br />
make<br />
sudo make install<br />
<br />
If you want to use offscreen mesa as alternative 3d engine use the <code>./configure --enable-osmesa</code> instead of just <code>./configure</code>.<br />
<br />
If you want to enable HUD display, use <code>./configure --enable-hud</code>.<br />
<br />
== Enabling compiler optimizations ==<br />
If you want to optimize the build on Linux, you should set the C++ compiler options to enable specific optimization for your processor:<br />
<br />
You can do this by setting the <code>CFLAGS</code> and <code>CXXFLAGS</code> variables like shown below:<br />
<br />
CFLAGS='-O2 -march=native' CXXFLAGS=$CFLAGS ./configure<br />
<br />
You may need to set the <code>-march=native</code> for example because by default, gcc under 32-bit Debian builds code that works on the 486 (which doesn't support SSE).<br />
<br />
On x86 / x86-64 machines you can squeeze the processor a bit more using:<br />
<br />
CXXFLAGS='-O2 -march=native -mfpmath=sse' ./configure<br />
<br />
For more optimization options, see [[Optimization#Linux]]<br />
<br />
== Known issues ==<br />
<br />
* If you have a crash on a 64bit environment while disabling/enabling sound during gameplay, deinstall agg (libagg-dev on Debian) and rebuild. This should solve the problem. (Alvin: Is this still applicable?)<br />
<br />
* Some people on MacOS X have a broken build environment, mixing pieces from fink / macports / source installation / etc... That is wrong and painful for both the user and the developers who have to sort out build issues. Please don't do that! To workaround the issue you can try passing the needed include paths to autoreconf. Modify autogen.sh adding -B/my/path/ to autoreconf invocation, the path should be -B/sw for fink and -B/opt/local for macports. After the modify rerun ./autogen.sh and ./configure.</div>Rogermanhttps://wiki.desmume.org/index.php?title=Faq_0_9_11Faq 0 9 112017-11-16T01:18:02Z<p>Rogerman: </p>
<hr />
<div>'''DeSmuME FAQ 0.9.11'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
* FAQ 0.9.9, [[Faq_099]]<br />
* FAQ 0.9.10, [[Faq_0_9_10]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped?<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_1.png]<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! I'm not getting experience! ===<br />
* Make sure you are using the latest version of the emulator.<br />
* Delete your ini file and re-run the emulator.<br />
* Quit using patched ROMs. Remove the AP (Anti-Piracy) patch from the ROM.<br />
* Quit using cheats.<br />
* Try using external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games.</strong> Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== Why does HeartGold / SoulSilver have freezes and graphics glitches? ===<br />
Emulation bugs. Errors accumulate. Stop using savestates. Save in-game and reset the emulator.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png] or [http://wiki.desmume.org/index.php?title=File:black2.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Read the [[KnowledgeBase]]<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3D renderers. Quit using frameskip.<br />
* Do not use patched ROMs. Never use patched ROMs.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
* Stop using savestates. Use in-game saves.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot your host machine.<br />
* Go to our [http://desmume.org/download official Downloads page] and make sure you are using the latest version, which is currently v0.9.11. Any older versions are unsupported.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary.<br />
* Enable "Advanced Bus-Level Timing". Doing this will slow down emulation, but fix some games.<br />
* Disable "Dynamic Recompiler". Doing this will greatly slow down emulation, but will fix many games.<br />
* Use external BIOS images. Try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your DeSmuME configuration file. It may have options that are breaking your DeSmuME.<br />
** Windows: Your configuration file is located in the same directory as the DeSmuME program. Delete the file named "desmume.ini".<br />
** Mac: Your configuration file is located at "~/Library/Preferences". Delete the file named "org.desmume.DeSmuME.plist". Alternatively, you may run "Delete DeSmuME Preferences.app", which is included with your installation package, which will perform this operation for you.<br />
** Linux: Your configuration file is located at "~/.config/desmume". Delete the file named "config".<br />
* Turn off your virus scanner.<br />
<br />
<br />
If a game really doesn't work, no matter what you try, you can submit a bug report for the game. See [[#Where can I report bugs?]] for more information.<br />
<br />
You might also find ways to patch the games to work better on emulators by searching on the Internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using DeSmuME! ===<br />
This is not DeSmuME's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers. If you are running DeSmuME on a laptop, then a laptop cooler might help.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
DeSmuME is a very CPU demanding app. While many users will see DeSmuME as a toy (and use it as such), it is actually a very sophisticated piece of software with lots of features. Also, DeSmuME focuses more on compatibility and features than on speed. Our philosophy is this: You can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility or gain new features. We take care of our side of things, so you should take care of yours.<br />
<br />
That being said, DeSmuME offers many options for you to find the best balance of compatibility, features, and performance. And remember that it is a balance -- gaining extra performance will always mean that you need to give up some features or reduce compatibility somewhere. How you make these tradeoffs is up to you. Listed below are things you can do to improve DeSmuME's performance.<br />
<br />
<br />
First of all, check that the host hardware is configured for best performance:<br />
* Ensure that you meet the [[#What are the minimum hardware requirements for DeSmuME?|minimum requirements]] for running DeSmuME.<br />
* DeSmuME is mostly CPU intensive and less GPU intensive. You'll want the fastest CPU possible (not necessarily the one with the most cores) for best performance.<br />
* The vast majority of older netbooks (and even newer ones) will have poor performance with any demanding software, including DeSmuME. Don't expect great performance out of these machines.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
<br />
<br />
Here are the biggest factors for improving emulation performance. They are listed from most performance impact to least performance impact:<br />
* Use a DeSmuME binary that works best for your machine. See [[#There are several different DeSmuME executables available. Which EXE do I use?]] for more details.<br />
* Use official DeSmuME releases from our [http://desmume.org/download Downloads page]. Our release versions always use the fastest and most aggressive program optimizations possible for maximum performance. Any unofficial, prerelease, or SVN builds are not guaranteed to have these same optimizations, resulting in lower performance.<br />
* Use frame skip. Even frame skipping by 1 will make many games become playable. However, note that some 3D games may not work well with frame skip, such as Golden Sun: Dark Dawn. If screens seem stuck or screen flickering becomes unacceptable, pick a different frame skip value.<br />
* ''(Windows only)'' Do not run the NDS tools (the ones from the Tools menu) unless absolutely necessary. If you must, try and keep the update interval as high as possible.<br />
* ''(Windows only)'' Try changing config > display method to different settings<br />
* Disable all video filters, and set your display window's pixel scaler to None.<br />
* Use the Dynamic Recompiler (JIT) CPU emulation engine. ''(Doing this may break some games.)''<br />
* Disable Advanced Bus-Level Timing. ''(Doing this may break some games.)''<br />
* Try switching the 3D renderer between OpenGL and SoftRasterizer. One 3D renderer may work faster than the other, depending on the situation.<br />
* ''(Mac only)'' If you are using a pixel scaler and your machine has an older GPU or an integrated GPU, it might help to run the pixel scaler on the CPU by disabling "Run filters on GPU if possible". However, if you are using a newer GPU, then enabling "Run filters on GPU if possible" will remove any performance penalties related to using any video filters.<br />
* ''(Mac only)'' Do not enable any source filters if you are running a pixel scaler on the CPU. This combination results in a substantial performance hit.<br />
* ''(Linux only)'' Do not scale the display window beyond 1x, as this can result in a substantial performance hit.<br />
* Disable Advanced SPU Logic, and use the Dual SPU Sync/Async synchronization method.<br />
<br />
<br />
There are some other things that may theoretically improve performance, but they are dubious at best. They are only included here for the sake of completeness:<br />
* If you are using SoftRasterizer, disable edge marking and fog. Note that games that don't use these features will be unaffected.<br />
* Disable unneeded GPU layers.<br />
* Disable sound emulation altogether.<br />
* Don't use external BIOS images. But if you must, try enabling Patch DelayLoop SWI.<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
You are probably wanting to increase the execution speed. There are two ways of doing this:<br />
* Raise the execution speed limit. This will run the emulation at the specified execution speed, provided that the host hardware is fast enough. The execution speed limit will always be expressed as a speed multiplier, where 1x is 60 FPS. ''(Windows and Mac only)''<br />
* Disable the execution speed limiter. This will run the emulation as fast as the host hardware will allow.<br />
<br />
To change your execution speed options:<br />
* Windows: By default, the '-' and '=' keyboard keys will adjust the speed multiplier between 0.0625x-4x. By default, the Tab keyboard key will disable the speed limiter while held down. You can change these hotkeys in Config > Hotkey Config. In the Main section, the commands are Fast Forward, Increase Speed, and Decrease Speed.<br />
* Mac: By default, the '=' keyboard key will speed up execution by 2x while held down. You can assign additional hotkeys for Set Speed, and then click Settings to choose any speed multiplier from 0x-10x. There is no default hotkey for disabling the speed limiter, but you can assign one to the Enable/Disable Speed Limiter command. Alternatively, you can choose Emulation > Show Execution Control and adjust the execution speed options within the Execution Speed Properties section.<br />
* Linux ''(GTK only)'': By default, the letter 'O' keyboard key will disable the execution speed limiter while held down. You can change this hotkey in Config > Edit Controls. The command is called Boost.<br />
<br />
Note that increasing the execution speed does not mean that DeSmuME is doing less emulation. In fact, DeSmuME must emulate every single frame regardless of execution speed, even if DeSmuME doesn't necessarily show it (most likely, DeSmuME will begin dropping video and audio frames at high execution speeds). This is normal behavior. To achieve higher execution speeds, you will need to configure DeSmuME to operate at the highest performance possible. Read [[#DeSmuME_runs_too_slow.21]] for more information on how to improve emulation performance.<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in OSX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmuME window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. DeSmuME tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows: Windows XP SP2 or later<br />
* Mac: OS X v10.5.8 Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows: Windows Vista SP2 or later<br />
* Mac: OS X v10.6.8 Snow Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
* Windows: For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
** If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
** If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
** If you want to use the developer features, use the dev build. It includes extra debugging code and logging.<br />
* Mac: DeSmuME.app contains binaries for PPC, x86, x64. OS X will automatically choose the best binary to run on your hardware. You can override the automatic selection in the Finder by selecting DeSmuME.app and choosing File > Get Info. Then in the Get Info panel, you can select which binary to run.<br />
** To run as 32-bit PPC: Enable "Open using Rosetta". ''(Note that this option is only available on OS X v10.5 Leopard and v10.6 Snow Leopard. Rosetta is not available on later OS X versions.)''<br />
** To run as 32-bit x86: Enable "Open in 32-bit mode".<br />
** To run as 64-bit x64: Disable both "Open in 32-bit mode" and "Open using Rosetta" options.<br />
* Linux: Linux users are expected to build DeSmuME from source and know the best configure settings for their hardware. See [[Installing DeSmuME from source on Linux]] for more information.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.9GHz CPU will run DeSmuME much faster than a 12-core 1.6GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
(''Windows only'') The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
* Windows: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > One LCD, and then either View > LCDs Layout > Top First (Default) or View > LCDs Layout > Bottom First.<br />
* Mac: First, click the display window that you want to change. To change to a horizontal layout, choose View > Display Orientation > Horizontal. To change the display mode, choose View > Display Mode > Main for the main screen, or choose View > Display Mode > Touch for the touch screen.<br />
* Linux ''(GTK and Glade only)'':<br />
** GTK: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > Single Screen, and then choose View > LCDs Layout > Swap Screens to toggle between each screen.<br />
** Glade: To change to a horizontal layout, choose Config > Right Screen. However, changing the display mode on Glade is unsupported.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
Yes, you can display the DS screens in full screen mode.<br />
<br />
* Windows: Click the DeSmuME window and press Alt-Enter. <br />
* Mac: Click the display window that you want to make full screen, then choose View > Enter Full Screen.<br />
* Linux ''(GTK only)'': Choose View > Window Size > Scale to Window, then choose View > Window Size > Fullscreen.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
Yes, you can display each DS screen in separate windows. ''(This feature is only available for Mac.)''<br />
<br />
* Mac: Choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
DeSmuME allows you to apply pixel scalers, adjust the size of the video output, simulate the separation between the main and touch screens, and run filters on the video output. You can also rotate the NDS displays for games that require you to rotate the hardware NDS in a certain way.<br />
<br />
* Windows: <br />
** Pixel Upscale: To change the pixel scaler, choose View > Magnification Filters, and then select one of the menu options.<br />
** Output Filter: Choose Config > Display Method, then choose either DirectDraw HW, DirectDraw SW, or OpenGL. Your output filter will depend on which option you chose.<br />
*** DirectDraw HW: Depending on OS and GPU driver, your output filter may be Nearest Neighbor or Bilinear. You have no control over which filter is used, as it is determined for you by the OS/driver.<br />
*** DirectDraw SW: Your output filter will always be Nearest Neighbor.<br />
*** OpenGL: If Config > Display Method > Filter is checked, then your output filter will be Bilinear. Otherwise, your output filter will be Nearest Neighbor.<br />
** Display Resize: To set the displays to a specific size, choose View > Window Size, and then choose one of the menu options. The video displays will grow and shrink with the size of its window. The minimum display size is 1x times the pixel scaling. Keep in mind that some pixel scalers, such as 5xBRZ, can cause a vertical layout display to grow up to 1280x1920 pixels in size. In this case, there would be nothing you can do to reduce the display size below 5x. If the window doesn't fit in your monitor while using a given pixel scaler, then you must choose a pixel scaler with a smaller scaling value.<br />
** Screen Separation: Choose View > Screen Gap, and then select one of the menu options.<br />
** Rotation: Choose View > Rotation, and then select one of the menu options.<br />
* Mac:<br />
** Pixel Upscale: Select the window you want to change, then choose View > Video Pixel Scaler, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Pixel Scalers from the Video Settings panel.<br />
** Output Filter: Select the window you want to change, then choose View > Video Output Filter, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Output Filters from the Video Settings panel.<br />
** Display Resize: Select the window you want to change. To set the displays to a specific size, choose View > Display Size, and then choose one of the menu options. Note that on Mac, the maximum window size will always be dependent on your monitor's current resolution. The video display will grow and shrink with the size of the window. If the View > Keep Minimum Display Size at 1x option is enabled, then the minimum display size is 1x. Otherwise, the minimum display size is 0.25x.<br />
** Screen Separation: Select the window you want to change, then choose View > Display Separation, and then choose one of the menu options. Note that the percentage number is relative to the true distance between the NDS displays, where a separation of 100% is approximately 87.65px. If you choose Custom, then you may freely separate the displays to any percentage value from 0%-200%.<br />
** Rotation: Select the window you want to change, then choose View > Display Rotation, and then choose one of the menu options. If you choose Custom, then you may free rotate the display to any rotation.<br />
* Linux:<br />
** Pixel Upscale ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Video Filter, and then select one of the menu options.<br />
*** Qt: Choose View > Video Filter, and then select one of the menu options.<br />
** Output Filter ''(GTK only)'': With the exception of GTK, this feature is unsupported on all frontends. The output filter will always be Nearest Neighbor on unsupported frontends.<br />
*** GTK: Choose View > Secondary Video Filter, and then select one of the menu options.<br />
** Display Resize ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Window Size, and then select on of the menu options to set the displays to a specific size. If you choose Scale to Window, then the displays will grow and shrink with the window size. The minimum display size is 1x.<br />
*** Qt: The displays will grow and shrink with the window size. However, there is no option to set the displays to a specific size. The minimum display size is 1x.<br />
** Screen Separation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Screen Gap. Note that this is only a toggle option which only supports a separation of 0px or 90px.<br />
*** Glade: Choose Config > True Gap to separate the screens by 90px, or choose Config > No Gap to separate the screens by 0px. If both options are not enabled, then the default separation is 5px.<br />
** Rotation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Rotation, and then select one of the menu options.<br />
*** Glade: For the normal display rotation, choose Config > Rotate Screen 0. To rotate the displays 90 degrees, choose Config > Rotate Screen 90. To rotate the displays 180 degrees, choose Config > Rotate Screen 180. To rotate the displays 270 degrees, choose Config > Rotate Screen 270.<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported for all platforms. See [[#Microphone|NDS Microphone Support]] for more information.<br />
<br />
* Windows<br />
** Hardware Audio Input Device: In Windows, first set up the default audio recording device in your Windows Control Panel. Then in DeSmuME, choose Config > Microphone Settings, and then choose "Use connected physical microphone".<br />
** Software Generated Samples: Assign the Microphone hotkey using Config > Hotkey Config, under the Main section. Then choose Config > Microphone Settings, and then choose one of the three options that is not "Use connected physical microphone".<br />
* Mac<br />
** Hardware Audio Input Device: In OS X, first set up the default audio input device in Apple > System Preferences. DeSmuME will then automatically switch to using the default audio input device. Choose Emulation > Show Microphone Settings to adjust gain or mute the microphone.<br />
** Software Generated Samples: Assign Microphone hotkeys in your DeSmuME Input Preferences. Every hotkey assigned to the Microphone command will have a corresponding Settings button. Click Settings to change which sample generator the hotkey activates. You can assign multiple generators at the same time by using multiple hotkeys.<br />
* Linux<br />
** Hardware Audio Input Device: You must first compile your own Linux build with libasound. Next, in Linux, you must set up you default audio input device using whatever configuration utility is available in your distro. Then when you launch DeSmuME, DeSmuME will read your audio input device.<br />
** Software Generated Samples: This feature is unsupported on Linux.<br />
<br />
Additional Notes:<br />
<br />
* If you are using software generated samples, you will have to experiment with the microphone hotkey timing. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
* Hardware audio input device support is currently broken for Windows and Linux, and so many instances where the NDS microphone is required, such as giving voice commands to your Nintendog, will fail. Windows can sometimes workaround this if you use software generated samples from an audio file, but be aware that you can only assign one audio file at a time. Unfortunately, Linux has no workarounds.<br />
* If you want to play games that rely heavily on real-time voice recognition, such as the Nintendogs series of games, then the Mac version is your only option right now.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
[[List_of_Nintendo_DS_games_with_GBA_connectivity]]<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked? ===<br />
No. A real NDS uses Wi-Fi for multiplayer, and that isn't emulated in DeSmuME yet. For more information, see [[Faq#Wi-Fi|Wi-Fi Hardware Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
Since there's no frame advance hotkey, you may have to do it this way in the linux ports: press the first spot, right click to open the menu, release left click and then left click again in the middle of the screen without releasing right click<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
[[#Wi-Fi|Read more information about the current state of DeSmuME's Wi-Fi support.]] Right now, it's an experimental feature, which means it is unsupported.<br />
<br />
If you are an end-user, then we strongly discourage the use of Wi-Fi. However, as an end-user, if you really want to use Wi-Fi that badly, then you are on your own. In that case, any posts on our forums about Wi-Fi being used by end-users for end-user applications (such as wanting to trade Pokemon) will be ignored. Also, any submissions to any of our SourceForge trackers under the same conditions will be immediately closed without further consideration. <strong>When we say that Wi-Fi is unsupported, we mean it.</strong><br />
<br />
With that said, any developers interested in working on Wi-Fi support are welcome to join us at [[#DeSmuME_IRC_Channel|our IRC channel]]. We would appreciate the assistance!<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is currently not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future? ===<br />
Most likely, DeSmuME will not support the emulation of the Nintendo 3DS or Nintendo 2DS in the future. The hardware of both a 3DS and a 2DS are very different from an NDS, so emulating a 3DS/2DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
You can report bugs using our [https://github.com/TASVideos/desmume/issues official bug tracker] on github or [https://github.com/TASVideos/desmume/issues official anonymous bug tracker] on SourceForge. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
<br />
==== User Controls ====<br />
* The D-pad, buttons, and touch screen are fully emulated.<br />
* The ability to toggle the folded/unfolded state of the NDS is emulated through the Lid control.<br />
* Adjustable stylus pressure is only supported on Windows. However, the vast majority of games don't use this feature.<br />
* Emulation of stylus jitter is only supported on Windows. However, the vast majority of games don't use this feature.<br />
<br />
==== 2D Graphics System ====<br />
* All known 2D graphics features are supported, with the exception of mosaics.<br />
* Mosaics work somewhat, but are imperfect. Also, mosaics may not show up properly in some games.<br />
* There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
* Big-endian systems may not render the correct colors in some areas.<br />
<br />
==== 3D Rendering ====<br />
DeSmuME includes two 3D renderers, our own custom software renderer we call SoftRasterizer, and an OpenGL-based renderer. Each renderer has its own strengths and weaknesses, so use the best renderer for your situation. For example, if certain buttons, labels, or menus rendered on the 3D screen are obscured (for example, a button with no label on it), then things might appear correctly if you use SoftRasterizer. If that doesn't work, then things might appear correctly with OpenGL. Both renderers are provided for the purposes of working around specific 3D rendering cases.<br />
<br />
Also, keep in mind that SoftRasterizer uses the CPU for rendering, while OpenGL uses the GPU for rendering. Therefore, you may experience a difference in performance with each 3D renderer, depending on the host machine's hardware and depending on how you've configured DeSmuME.<br />
<br />
===== SoftRasterizer Renderer =====<br />
* All 3D features are emulated, except for wireframes and antialiasing.<br />
* There are issues with line rendering. However, it is possible to work around most of these issues by using the Line Hack.<br />
* There are issues with inaccurate texture rendering. However, it is possible to work around some of these issues by using the Fragment Sampling Hack. ''(Windows and Mac only)''<br />
* There are issues with depth rendering and Z-fighting. However, it is possible to work around some of these issues by adjusting the depth comparison threshold. ''(Windows and Mac only)''<br />
* There are some issues with shadow polygons. However, SoftRasterizer works better than OpenGL at rendering shadow polygons.<br />
<br />
===== OpenGL Renderer =====<br />
* All 3D features are emulated, except for fog and edge marking.<br />
* There are issues with depth rendering and Z-fighting. However, there is no workaround for this issue like there is with SoftRasterizer.<br />
* There are some major issues with shadow polygons. If you find the shadow polygon bugs unacceptable, then you will have to switch to SoftRasterizer.<br />
<br />
==== Sound ====<br />
* All sound features are emulated.<br />
* For complete SPU emulation, two requirements must be met:<br />
** Advanced SPU Logic must be enabled.<br />
** One of the SPU sound synchronization methods must be used (N, Z, or P).<br />
* Disabling Advanced SPU Logic and using Dual SPU Sync/Async will result in the loss of some sound features, but will also improve emulation performance on Windows and Linux. (Audio processing is multithreaded on Mac, so Mac users should never need to disable Advanced SPU Logic or use Dual SPU Sync/Async except for testing purposes. There are no performance advantages for changing these two options on Mac.)<br />
* Audio samples can be post-processed with interpolation, resulting in a smoother sound than a hardware NDS. Linear and Cosine interpolation algorithms are included. You may also turn off interpolation to play back the samples exactly as a hardware NDS would receive them.<br />
<br />
==== Microphone ====<br />
* All microphone features are emulated.<br />
* DeSmuME supports either receiving audio samples from a hardware audio input device, or generating audio samples in software.<br />
* Hardware audio input is only supported on Mac. Windows and Linux are currently broken and unsupported.<br />
* DeSmuME includes the following software sample generators:<br />
** Internal Noise Samples<br />
** White Noise ''(Windows and Mac only)''<br />
** Sine Wave ''(Mac only)''<br />
** Audio File ''(Windows -- only WAV files in 16000Hz 8-bit mono LPCM format are supported / Mac -- any audio file compatible with [https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/CoreAudioOverview/SupportedAudioFormatsMacOSX/SupportedAudioFormatsMacOSX.html CoreAudio] is supported)''<br />
<br />
==== CPU ====<br />
* CPU emulation is supported through either the Interpreter engine or the Dynamic Recompiler engine.<br />
* The Interpreter engine is available on all platforms. However, Dynamic Recompiler only works on x86 or x64 systems.<br />
* We are unaware of any huge problems with the Interpreter engine, but there are still some issues.<br />
* Interpreter has better compatibility than Dynamic Recompiler. Some games that fail when using Dynamic Recompiler will work fine with Interpreter. The tradeoff here is that Interpreter has much lower performance than Dynamic Recompiler.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== Memory and System Bus ====<br />
* We are unaware of any huge problems with the MMU and DMA systems, but there are still some issues.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== BIOS and Firmware ====<br />
* DeSmuME uses its own internal BIOS and firmware, but only for the purposes of loading and executing ROMs. DeSmuME's internal BIOS and firmware do not emulate all of the original NDS features.<br />
* DeSmuME supports configuring all of the NDS profile information through the internal BIOS and firmware alone. This information includes:<br />
** Nickname ''(Windows and Mac only)''<br />
** Message ''(Windows and Mac only)''<br />
** Favorite Color ''(Windows and Mac only)''<br />
** Birthday ''(Windows and Mac only)''<br />
** Language<br />
* DeSmuME can also load external BIOS and firmware images from a hardware NDS, gaining additional features by doing so.<br />
* If DeSmuME has all the necessary external BIOS and firmware images loaded, then it is possible to perform a full NDS boot. It then becomes possible to configure the NDS profile information within the emulated NDS firmware interface.<br />
* Loading of external BIOS images is supported on Windows, Mac, and Linux.<br />
* Loading of an external firmware image is only supported on Windows and Mac. Linux is not supported.<br />
<br />
==== NDS Slot (SLOT-1) ====<br />
* The following NDS slot devices are supported:<br />
** Standard Retail MC + ROM<br />
** Retail w/ NAND Flash<br />
** R4<br />
* DeSmuME can display the header information of loaded ROMs. ''(Windows and Mac only)''<br />
* We are unaware of any huge problems with loading NDS ROMs. However, there are some issues with loading NDS ROMs on big-endian systems.<br />
* There are some issues with DSi ROMs, as they are not fully supported yet.<br />
<br />
==== GBA Slot (SLOT-2) ====<br />
* The following GBA slot devices are supported:<br />
** Compact Flash Card<br />
** Rumble Pak ''(Windows and Mac only)''<br />
** GBA Cartridge<br />
** Guitar Grip ''(Windows and Mac only)''<br />
** Memory Expansion Pak ''(Windows and Mac only)''<br />
** EasyPiano ''(Windows and Mac only)''<br />
** Taito Paddle ''(Windows and Mac only)''<br />
** PassME ''(Windows and Mac only)''<br />
<br />
==== Wi-Fi ====<br />
* Wi-Fi emulation is currently in an experimental stage, and many Wi-Fi features are either broken or non-working.<br />
* Here is what we currently know about Wi-Fi so far: [[Luigi's notes about WiFi|Wi-Fi Notes]]<br />
<br />
==== Dynamically Linked Driver Interface (DLDI) ====<br />
The Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
* LFN is currently unsupported.<br />
<br />
<br />
=== Does the GDB stub still work? ===<br />
GDB remote debugging does work to a certain degree. However, DeSmuME does not implement the entire GDB stub protocol, so there are still some bugs. Nevertheless, GDB remote debugging works well enough to do basic operations, like set breakpoints, step through code, watch memory locations for read/write operations, and other basic operations.<br />
<br />
=== How do I enable the GDB stub? ===<br />
* Windows: You must make a custom build using #define GDB_STUB.<br />
# Copy the "userconfig.h" file from "src\windows\defaultconfig" to "src\windows\userconfig".<br />
# In the "src\windows\userconfig\userconfig.h" file, add "#define GDB_STUB".<br />
# Build DeSmuME.<br />
# After DeSmuME is finished building, launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
* Mac: You must make a custom build using the "DeSmuME (OS X App; dev+)" build scheme, which is only available using the "Xcode (Latest)" project file. You must compile the dev+ build using Xcode 4 or later. When you do, a new menu option will be available: Tools > Show GDB Stub Control. In the GDB Stub Control panel, click Start to begin listening for the GDB debugging client.<br />
* Linux: When you generate your configure script, it must use the flag "--enable-gdb-stub". Build DeSmuME, then launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an online communications system.<br />
<br />
The DeSmuME team uses IRC to discuss DeSmuME's development. You will need an IRC client in order to participate is these discussions.<br />
<br />
==== Recommended IRC Clients ====<br />
* Windows: [http://www.mirc.com mIRC], [http://www.xchat.com XChat]<br />
* Mac: [http://colloquy.info Colloquy], [https://www.adium.im Adium]<br />
* Linux: [http://www.xchat.com XChat]<br />
* Firefox add-on: [https://addons.mozilla.org/en-us/firefox/addon/chatzilla/ ChatZilla]<br />
* Others: [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Wikipedia]<br />
<br />
==== DeSmuME IRC Channel ====<br />
To connect to the DeSmuME IRC channel, you will need to enter the following information in your IRC client:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
As far as language is concerned, most of the people on the channel speak English.<br />
<br />
=== Where is the manual? ===<br />
[http://wiki.desmume.org/index.php?title=Manual Over here.] It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
<br />
== SVN and Compiling ==<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ SVN] is a tool that is used by multiple developers to work on the same codebase without conflicts. See [http://en.wikipedia.org/wiki/Subversion_(software) Wikipedia] for more information.<br />
<br />
=== Where do I get SVN builds? ===<br />
We officially use the [http://buildbot.orphis.net/desmume/ automated SVN builds] provided by DeSmuME user, Orphis.<br />
<br />
Other third-parties may offer SVN builds, such as [http://www.emucr.com EmuCR]. Please note that any third-party build is both unofficial and unsupported.<br />
<br />
=== How do I get the latest SVN code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* Windows: At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
** Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
** Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* Mac: Any of the compilers built into Xcode 3.1.4 all the way up to the latest Xcode is supported. You may also use a non-Xcode toolchain, such as MacPorts GCC, but this is currently unsupported.<br />
* Linux: Any recent version of GCC and toolchain should work. However, we do not recommend GCC 4.9, since there are bugs with this GCC version that interfere with DeSmuME.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
(''Windows only'') For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the Visual C++ Express 2008 installer and I can't find it. ===<br />
Download link: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Patches may be submitted to our [https://sourceforge.net/p/desmume/patches/ patches tracker] on SourceForge. Any patches submitted will be subject to a code review by our developer team, where we will then determine if the patch should be included in the codebase or not.<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== I'm not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile SVN builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on IRC. Also, adding to or perfecting the documentation in the Wiki is useful. You could also watch for and help answer questions placed on the [http://forums.desmume.org DeSmuME forum].<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://problemkaputt.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a Compact Flash image<br />
<br />
<br />
== Mac Users ==<br />
<br />
=== I just downloaded DeSmuME, but I can't launch it because "it is from an unidentified developer." What gives? ===<br />
Apple introduced a security policy called [https://support.apple.com/en-us/HT202491 Gatekeeper] on OS X v10.8 Mountain Lion to help protect users from malware. However, since DeSmuME is a free open-source app, we don't want to invest money into properly code signing the app for the sake of proving that we are legitimate app and not just another piece of malware. If you are concerned about the legitimacy of DeSmuME.app, then always make sure to download it from our [http://desmume.org/download official Downloads page].<br />
<br />
If OS X prevents you from launching DeSmuME.app because "it is from an unidentified developer", do this:<br />
* In the Finder, right-click (or Control-click) DeSmuME.app, then in the contextual menu, choose Open. A warning box will appear, saying that DeSmuME.app "is from an unidentified developer." In the warning box, click Open to proceed with launching DeSmuME.app.<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories.<br />
<br />
Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
As of this release, all of the DeSmuME features that exist in the Windows port also exist in the Mac port, except for the following:<br />
* The HUD<br />
* Custom path settings<br />
* AVI / WAV recording<br />
* The various tools listed in the Tools menu<br />
* RAM Watch / RAM Search<br />
* Lua scripting<br />
<br />
While we are actively working to attain full feature parity between the Mac and Windows ports, this will still take some time to achieve.<br />
<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogermanhttps://wiki.desmume.org/index.php?title=Faq_0_9_11Faq 0 9 112017-11-16T01:17:48Z<p>Rogerman: Created page with "'''DeSmuME FAQ 0.9.11''' This FAQ holds a list of many commonly asked questions about DeSmuME. If you need information about an older version, refer to one of the older FAQs fo..."</p>
<hr />
<div>'''DeSmuME FAQ 0.9.11'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
* FAQ 0.9.9, [[Faq_099]]<br />
* FAQ 0.9.10, [[Faq_0_9_10]]<br />
* FAQ 0.9.11, [[Faq_0_9_11]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped?<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_1.png]<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! I'm not getting experience! ===<br />
* Make sure you are using the latest version of the emulator.<br />
* Delete your ini file and re-run the emulator.<br />
* Quit using patched ROMs. Remove the AP (Anti-Piracy) patch from the ROM.<br />
* Quit using cheats.<br />
* Try using external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games.</strong> Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== Why does HeartGold / SoulSilver have freezes and graphics glitches? ===<br />
Emulation bugs. Errors accumulate. Stop using savestates. Save in-game and reset the emulator.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png] or [http://wiki.desmume.org/index.php?title=File:black2.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Read the [[KnowledgeBase]]<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3D renderers. Quit using frameskip.<br />
* Do not use patched ROMs. Never use patched ROMs.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
* Stop using savestates. Use in-game saves.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot your host machine.<br />
* Go to our [http://desmume.org/download official Downloads page] and make sure you are using the latest version, which is currently v0.9.11. Any older versions are unsupported.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary.<br />
* Enable "Advanced Bus-Level Timing". Doing this will slow down emulation, but fix some games.<br />
* Disable "Dynamic Recompiler". Doing this will greatly slow down emulation, but will fix many games.<br />
* Use external BIOS images. Try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your DeSmuME configuration file. It may have options that are breaking your DeSmuME.<br />
** Windows: Your configuration file is located in the same directory as the DeSmuME program. Delete the file named "desmume.ini".<br />
** Mac: Your configuration file is located at "~/Library/Preferences". Delete the file named "org.desmume.DeSmuME.plist". Alternatively, you may run "Delete DeSmuME Preferences.app", which is included with your installation package, which will perform this operation for you.<br />
** Linux: Your configuration file is located at "~/.config/desmume". Delete the file named "config".<br />
* Turn off your virus scanner.<br />
<br />
<br />
If a game really doesn't work, no matter what you try, you can submit a bug report for the game. See [[#Where can I report bugs?]] for more information.<br />
<br />
You might also find ways to patch the games to work better on emulators by searching on the Internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using DeSmuME! ===<br />
This is not DeSmuME's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers. If you are running DeSmuME on a laptop, then a laptop cooler might help.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
DeSmuME is a very CPU demanding app. While many users will see DeSmuME as a toy (and use it as such), it is actually a very sophisticated piece of software with lots of features. Also, DeSmuME focuses more on compatibility and features than on speed. Our philosophy is this: You can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility or gain new features. We take care of our side of things, so you should take care of yours.<br />
<br />
That being said, DeSmuME offers many options for you to find the best balance of compatibility, features, and performance. And remember that it is a balance -- gaining extra performance will always mean that you need to give up some features or reduce compatibility somewhere. How you make these tradeoffs is up to you. Listed below are things you can do to improve DeSmuME's performance.<br />
<br />
<br />
First of all, check that the host hardware is configured for best performance:<br />
* Ensure that you meet the [[#What are the minimum hardware requirements for DeSmuME?|minimum requirements]] for running DeSmuME.<br />
* DeSmuME is mostly CPU intensive and less GPU intensive. You'll want the fastest CPU possible (not necessarily the one with the most cores) for best performance.<br />
* The vast majority of older netbooks (and even newer ones) will have poor performance with any demanding software, including DeSmuME. Don't expect great performance out of these machines.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
<br />
<br />
Here are the biggest factors for improving emulation performance. They are listed from most performance impact to least performance impact:<br />
* Use a DeSmuME binary that works best for your machine. See [[#There are several different DeSmuME executables available. Which EXE do I use?]] for more details.<br />
* Use official DeSmuME releases from our [http://desmume.org/download Downloads page]. Our release versions always use the fastest and most aggressive program optimizations possible for maximum performance. Any unofficial, prerelease, or SVN builds are not guaranteed to have these same optimizations, resulting in lower performance.<br />
* Use frame skip. Even frame skipping by 1 will make many games become playable. However, note that some 3D games may not work well with frame skip, such as Golden Sun: Dark Dawn. If screens seem stuck or screen flickering becomes unacceptable, pick a different frame skip value.<br />
* ''(Windows only)'' Do not run the NDS tools (the ones from the Tools menu) unless absolutely necessary. If you must, try and keep the update interval as high as possible.<br />
* ''(Windows only)'' Try changing config > display method to different settings<br />
* Disable all video filters, and set your display window's pixel scaler to None.<br />
* Use the Dynamic Recompiler (JIT) CPU emulation engine. ''(Doing this may break some games.)''<br />
* Disable Advanced Bus-Level Timing. ''(Doing this may break some games.)''<br />
* Try switching the 3D renderer between OpenGL and SoftRasterizer. One 3D renderer may work faster than the other, depending on the situation.<br />
* ''(Mac only)'' If you are using a pixel scaler and your machine has an older GPU or an integrated GPU, it might help to run the pixel scaler on the CPU by disabling "Run filters on GPU if possible". However, if you are using a newer GPU, then enabling "Run filters on GPU if possible" will remove any performance penalties related to using any video filters.<br />
* ''(Mac only)'' Do not enable any source filters if you are running a pixel scaler on the CPU. This combination results in a substantial performance hit.<br />
* ''(Linux only)'' Do not scale the display window beyond 1x, as this can result in a substantial performance hit.<br />
* Disable Advanced SPU Logic, and use the Dual SPU Sync/Async synchronization method.<br />
<br />
<br />
There are some other things that may theoretically improve performance, but they are dubious at best. They are only included here for the sake of completeness:<br />
* If you are using SoftRasterizer, disable edge marking and fog. Note that games that don't use these features will be unaffected.<br />
* Disable unneeded GPU layers.<br />
* Disable sound emulation altogether.<br />
* Don't use external BIOS images. But if you must, try enabling Patch DelayLoop SWI.<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
You are probably wanting to increase the execution speed. There are two ways of doing this:<br />
* Raise the execution speed limit. This will run the emulation at the specified execution speed, provided that the host hardware is fast enough. The execution speed limit will always be expressed as a speed multiplier, where 1x is 60 FPS. ''(Windows and Mac only)''<br />
* Disable the execution speed limiter. This will run the emulation as fast as the host hardware will allow.<br />
<br />
To change your execution speed options:<br />
* Windows: By default, the '-' and '=' keyboard keys will adjust the speed multiplier between 0.0625x-4x. By default, the Tab keyboard key will disable the speed limiter while held down. You can change these hotkeys in Config > Hotkey Config. In the Main section, the commands are Fast Forward, Increase Speed, and Decrease Speed.<br />
* Mac: By default, the '=' keyboard key will speed up execution by 2x while held down. You can assign additional hotkeys for Set Speed, and then click Settings to choose any speed multiplier from 0x-10x. There is no default hotkey for disabling the speed limiter, but you can assign one to the Enable/Disable Speed Limiter command. Alternatively, you can choose Emulation > Show Execution Control and adjust the execution speed options within the Execution Speed Properties section.<br />
* Linux ''(GTK only)'': By default, the letter 'O' keyboard key will disable the execution speed limiter while held down. You can change this hotkey in Config > Edit Controls. The command is called Boost.<br />
<br />
Note that increasing the execution speed does not mean that DeSmuME is doing less emulation. In fact, DeSmuME must emulate every single frame regardless of execution speed, even if DeSmuME doesn't necessarily show it (most likely, DeSmuME will begin dropping video and audio frames at high execution speeds). This is normal behavior. To achieve higher execution speeds, you will need to configure DeSmuME to operate at the highest performance possible. Read [[#DeSmuME_runs_too_slow.21]] for more information on how to improve emulation performance.<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in OSX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmuME window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. DeSmuME tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows: Windows XP SP2 or later<br />
* Mac: OS X v10.5.8 Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows: Windows Vista SP2 or later<br />
* Mac: OS X v10.6.8 Snow Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
* Windows: For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
** If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
** If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
** If you want to use the developer features, use the dev build. It includes extra debugging code and logging.<br />
* Mac: DeSmuME.app contains binaries for PPC, x86, x64. OS X will automatically choose the best binary to run on your hardware. You can override the automatic selection in the Finder by selecting DeSmuME.app and choosing File > Get Info. Then in the Get Info panel, you can select which binary to run.<br />
** To run as 32-bit PPC: Enable "Open using Rosetta". ''(Note that this option is only available on OS X v10.5 Leopard and v10.6 Snow Leopard. Rosetta is not available on later OS X versions.)''<br />
** To run as 32-bit x86: Enable "Open in 32-bit mode".<br />
** To run as 64-bit x64: Disable both "Open in 32-bit mode" and "Open using Rosetta" options.<br />
* Linux: Linux users are expected to build DeSmuME from source and know the best configure settings for their hardware. See [[Installing DeSmuME from source on Linux]] for more information.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.9GHz CPU will run DeSmuME much faster than a 12-core 1.6GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
(''Windows only'') The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
* Windows: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > One LCD, and then either View > LCDs Layout > Top First (Default) or View > LCDs Layout > Bottom First.<br />
* Mac: First, click the display window that you want to change. To change to a horizontal layout, choose View > Display Orientation > Horizontal. To change the display mode, choose View > Display Mode > Main for the main screen, or choose View > Display Mode > Touch for the touch screen.<br />
* Linux ''(GTK and Glade only)'':<br />
** GTK: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > Single Screen, and then choose View > LCDs Layout > Swap Screens to toggle between each screen.<br />
** Glade: To change to a horizontal layout, choose Config > Right Screen. However, changing the display mode on Glade is unsupported.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
Yes, you can display the DS screens in full screen mode.<br />
<br />
* Windows: Click the DeSmuME window and press Alt-Enter. <br />
* Mac: Click the display window that you want to make full screen, then choose View > Enter Full Screen.<br />
* Linux ''(GTK only)'': Choose View > Window Size > Scale to Window, then choose View > Window Size > Fullscreen.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
Yes, you can display each DS screen in separate windows. ''(This feature is only available for Mac.)''<br />
<br />
* Mac: Choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
DeSmuME allows you to apply pixel scalers, adjust the size of the video output, simulate the separation between the main and touch screens, and run filters on the video output. You can also rotate the NDS displays for games that require you to rotate the hardware NDS in a certain way.<br />
<br />
* Windows: <br />
** Pixel Upscale: To change the pixel scaler, choose View > Magnification Filters, and then select one of the menu options.<br />
** Output Filter: Choose Config > Display Method, then choose either DirectDraw HW, DirectDraw SW, or OpenGL. Your output filter will depend on which option you chose.<br />
*** DirectDraw HW: Depending on OS and GPU driver, your output filter may be Nearest Neighbor or Bilinear. You have no control over which filter is used, as it is determined for you by the OS/driver.<br />
*** DirectDraw SW: Your output filter will always be Nearest Neighbor.<br />
*** OpenGL: If Config > Display Method > Filter is checked, then your output filter will be Bilinear. Otherwise, your output filter will be Nearest Neighbor.<br />
** Display Resize: To set the displays to a specific size, choose View > Window Size, and then choose one of the menu options. The video displays will grow and shrink with the size of its window. The minimum display size is 1x times the pixel scaling. Keep in mind that some pixel scalers, such as 5xBRZ, can cause a vertical layout display to grow up to 1280x1920 pixels in size. In this case, there would be nothing you can do to reduce the display size below 5x. If the window doesn't fit in your monitor while using a given pixel scaler, then you must choose a pixel scaler with a smaller scaling value.<br />
** Screen Separation: Choose View > Screen Gap, and then select one of the menu options.<br />
** Rotation: Choose View > Rotation, and then select one of the menu options.<br />
* Mac:<br />
** Pixel Upscale: Select the window you want to change, then choose View > Video Pixel Scaler, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Pixel Scalers from the Video Settings panel.<br />
** Output Filter: Select the window you want to change, then choose View > Video Output Filter, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Output Filters from the Video Settings panel.<br />
** Display Resize: Select the window you want to change. To set the displays to a specific size, choose View > Display Size, and then choose one of the menu options. Note that on Mac, the maximum window size will always be dependent on your monitor's current resolution. The video display will grow and shrink with the size of the window. If the View > Keep Minimum Display Size at 1x option is enabled, then the minimum display size is 1x. Otherwise, the minimum display size is 0.25x.<br />
** Screen Separation: Select the window you want to change, then choose View > Display Separation, and then choose one of the menu options. Note that the percentage number is relative to the true distance between the NDS displays, where a separation of 100% is approximately 87.65px. If you choose Custom, then you may freely separate the displays to any percentage value from 0%-200%.<br />
** Rotation: Select the window you want to change, then choose View > Display Rotation, and then choose one of the menu options. If you choose Custom, then you may free rotate the display to any rotation.<br />
* Linux:<br />
** Pixel Upscale ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Video Filter, and then select one of the menu options.<br />
*** Qt: Choose View > Video Filter, and then select one of the menu options.<br />
** Output Filter ''(GTK only)'': With the exception of GTK, this feature is unsupported on all frontends. The output filter will always be Nearest Neighbor on unsupported frontends.<br />
*** GTK: Choose View > Secondary Video Filter, and then select one of the menu options.<br />
** Display Resize ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Window Size, and then select on of the menu options to set the displays to a specific size. If you choose Scale to Window, then the displays will grow and shrink with the window size. The minimum display size is 1x.<br />
*** Qt: The displays will grow and shrink with the window size. However, there is no option to set the displays to a specific size. The minimum display size is 1x.<br />
** Screen Separation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Screen Gap. Note that this is only a toggle option which only supports a separation of 0px or 90px.<br />
*** Glade: Choose Config > True Gap to separate the screens by 90px, or choose Config > No Gap to separate the screens by 0px. If both options are not enabled, then the default separation is 5px.<br />
** Rotation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Rotation, and then select one of the menu options.<br />
*** Glade: For the normal display rotation, choose Config > Rotate Screen 0. To rotate the displays 90 degrees, choose Config > Rotate Screen 90. To rotate the displays 180 degrees, choose Config > Rotate Screen 180. To rotate the displays 270 degrees, choose Config > Rotate Screen 270.<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported for all platforms. See [[#Microphone|NDS Microphone Support]] for more information.<br />
<br />
* Windows<br />
** Hardware Audio Input Device: In Windows, first set up the default audio recording device in your Windows Control Panel. Then in DeSmuME, choose Config > Microphone Settings, and then choose "Use connected physical microphone".<br />
** Software Generated Samples: Assign the Microphone hotkey using Config > Hotkey Config, under the Main section. Then choose Config > Microphone Settings, and then choose one of the three options that is not "Use connected physical microphone".<br />
* Mac<br />
** Hardware Audio Input Device: In OS X, first set up the default audio input device in Apple > System Preferences. DeSmuME will then automatically switch to using the default audio input device. Choose Emulation > Show Microphone Settings to adjust gain or mute the microphone.<br />
** Software Generated Samples: Assign Microphone hotkeys in your DeSmuME Input Preferences. Every hotkey assigned to the Microphone command will have a corresponding Settings button. Click Settings to change which sample generator the hotkey activates. You can assign multiple generators at the same time by using multiple hotkeys.<br />
* Linux<br />
** Hardware Audio Input Device: You must first compile your own Linux build with libasound. Next, in Linux, you must set up you default audio input device using whatever configuration utility is available in your distro. Then when you launch DeSmuME, DeSmuME will read your audio input device.<br />
** Software Generated Samples: This feature is unsupported on Linux.<br />
<br />
Additional Notes:<br />
<br />
* If you are using software generated samples, you will have to experiment with the microphone hotkey timing. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
* Hardware audio input device support is currently broken for Windows and Linux, and so many instances where the NDS microphone is required, such as giving voice commands to your Nintendog, will fail. Windows can sometimes workaround this if you use software generated samples from an audio file, but be aware that you can only assign one audio file at a time. Unfortunately, Linux has no workarounds.<br />
* If you want to play games that rely heavily on real-time voice recognition, such as the Nintendogs series of games, then the Mac version is your only option right now.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
[[List_of_Nintendo_DS_games_with_GBA_connectivity]]<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked? ===<br />
No. A real NDS uses Wi-Fi for multiplayer, and that isn't emulated in DeSmuME yet. For more information, see [[Faq#Wi-Fi|Wi-Fi Hardware Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
Since there's no frame advance hotkey, you may have to do it this way in the linux ports: press the first spot, right click to open the menu, release left click and then left click again in the middle of the screen without releasing right click<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
[[#Wi-Fi|Read more information about the current state of DeSmuME's Wi-Fi support.]] Right now, it's an experimental feature, which means it is unsupported.<br />
<br />
If you are an end-user, then we strongly discourage the use of Wi-Fi. However, as an end-user, if you really want to use Wi-Fi that badly, then you are on your own. In that case, any posts on our forums about Wi-Fi being used by end-users for end-user applications (such as wanting to trade Pokemon) will be ignored. Also, any submissions to any of our SourceForge trackers under the same conditions will be immediately closed without further consideration. <strong>When we say that Wi-Fi is unsupported, we mean it.</strong><br />
<br />
With that said, any developers interested in working on Wi-Fi support are welcome to join us at [[#DeSmuME_IRC_Channel|our IRC channel]]. We would appreciate the assistance!<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is currently not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future? ===<br />
Most likely, DeSmuME will not support the emulation of the Nintendo 3DS or Nintendo 2DS in the future. The hardware of both a 3DS and a 2DS are very different from an NDS, so emulating a 3DS/2DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
You can report bugs using our [https://github.com/TASVideos/desmume/issues official bug tracker] on github or [https://github.com/TASVideos/desmume/issues official anonymous bug tracker] on SourceForge. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
<br />
==== User Controls ====<br />
* The D-pad, buttons, and touch screen are fully emulated.<br />
* The ability to toggle the folded/unfolded state of the NDS is emulated through the Lid control.<br />
* Adjustable stylus pressure is only supported on Windows. However, the vast majority of games don't use this feature.<br />
* Emulation of stylus jitter is only supported on Windows. However, the vast majority of games don't use this feature.<br />
<br />
==== 2D Graphics System ====<br />
* All known 2D graphics features are supported, with the exception of mosaics.<br />
* Mosaics work somewhat, but are imperfect. Also, mosaics may not show up properly in some games.<br />
* There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
* Big-endian systems may not render the correct colors in some areas.<br />
<br />
==== 3D Rendering ====<br />
DeSmuME includes two 3D renderers, our own custom software renderer we call SoftRasterizer, and an OpenGL-based renderer. Each renderer has its own strengths and weaknesses, so use the best renderer for your situation. For example, if certain buttons, labels, or menus rendered on the 3D screen are obscured (for example, a button with no label on it), then things might appear correctly if you use SoftRasterizer. If that doesn't work, then things might appear correctly with OpenGL. Both renderers are provided for the purposes of working around specific 3D rendering cases.<br />
<br />
Also, keep in mind that SoftRasterizer uses the CPU for rendering, while OpenGL uses the GPU for rendering. Therefore, you may experience a difference in performance with each 3D renderer, depending on the host machine's hardware and depending on how you've configured DeSmuME.<br />
<br />
===== SoftRasterizer Renderer =====<br />
* All 3D features are emulated, except for wireframes and antialiasing.<br />
* There are issues with line rendering. However, it is possible to work around most of these issues by using the Line Hack.<br />
* There are issues with inaccurate texture rendering. However, it is possible to work around some of these issues by using the Fragment Sampling Hack. ''(Windows and Mac only)''<br />
* There are issues with depth rendering and Z-fighting. However, it is possible to work around some of these issues by adjusting the depth comparison threshold. ''(Windows and Mac only)''<br />
* There are some issues with shadow polygons. However, SoftRasterizer works better than OpenGL at rendering shadow polygons.<br />
<br />
===== OpenGL Renderer =====<br />
* All 3D features are emulated, except for fog and edge marking.<br />
* There are issues with depth rendering and Z-fighting. However, there is no workaround for this issue like there is with SoftRasterizer.<br />
* There are some major issues with shadow polygons. If you find the shadow polygon bugs unacceptable, then you will have to switch to SoftRasterizer.<br />
<br />
==== Sound ====<br />
* All sound features are emulated.<br />
* For complete SPU emulation, two requirements must be met:<br />
** Advanced SPU Logic must be enabled.<br />
** One of the SPU sound synchronization methods must be used (N, Z, or P).<br />
* Disabling Advanced SPU Logic and using Dual SPU Sync/Async will result in the loss of some sound features, but will also improve emulation performance on Windows and Linux. (Audio processing is multithreaded on Mac, so Mac users should never need to disable Advanced SPU Logic or use Dual SPU Sync/Async except for testing purposes. There are no performance advantages for changing these two options on Mac.)<br />
* Audio samples can be post-processed with interpolation, resulting in a smoother sound than a hardware NDS. Linear and Cosine interpolation algorithms are included. You may also turn off interpolation to play back the samples exactly as a hardware NDS would receive them.<br />
<br />
==== Microphone ====<br />
* All microphone features are emulated.<br />
* DeSmuME supports either receiving audio samples from a hardware audio input device, or generating audio samples in software.<br />
* Hardware audio input is only supported on Mac. Windows and Linux are currently broken and unsupported.<br />
* DeSmuME includes the following software sample generators:<br />
** Internal Noise Samples<br />
** White Noise ''(Windows and Mac only)''<br />
** Sine Wave ''(Mac only)''<br />
** Audio File ''(Windows -- only WAV files in 16000Hz 8-bit mono LPCM format are supported / Mac -- any audio file compatible with [https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/CoreAudioOverview/SupportedAudioFormatsMacOSX/SupportedAudioFormatsMacOSX.html CoreAudio] is supported)''<br />
<br />
==== CPU ====<br />
* CPU emulation is supported through either the Interpreter engine or the Dynamic Recompiler engine.<br />
* The Interpreter engine is available on all platforms. However, Dynamic Recompiler only works on x86 or x64 systems.<br />
* We are unaware of any huge problems with the Interpreter engine, but there are still some issues.<br />
* Interpreter has better compatibility than Dynamic Recompiler. Some games that fail when using Dynamic Recompiler will work fine with Interpreter. The tradeoff here is that Interpreter has much lower performance than Dynamic Recompiler.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== Memory and System Bus ====<br />
* We are unaware of any huge problems with the MMU and DMA systems, but there are still some issues.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== BIOS and Firmware ====<br />
* DeSmuME uses its own internal BIOS and firmware, but only for the purposes of loading and executing ROMs. DeSmuME's internal BIOS and firmware do not emulate all of the original NDS features.<br />
* DeSmuME supports configuring all of the NDS profile information through the internal BIOS and firmware alone. This information includes:<br />
** Nickname ''(Windows and Mac only)''<br />
** Message ''(Windows and Mac only)''<br />
** Favorite Color ''(Windows and Mac only)''<br />
** Birthday ''(Windows and Mac only)''<br />
** Language<br />
* DeSmuME can also load external BIOS and firmware images from a hardware NDS, gaining additional features by doing so.<br />
* If DeSmuME has all the necessary external BIOS and firmware images loaded, then it is possible to perform a full NDS boot. It then becomes possible to configure the NDS profile information within the emulated NDS firmware interface.<br />
* Loading of external BIOS images is supported on Windows, Mac, and Linux.<br />
* Loading of an external firmware image is only supported on Windows and Mac. Linux is not supported.<br />
<br />
==== NDS Slot (SLOT-1) ====<br />
* The following NDS slot devices are supported:<br />
** Standard Retail MC + ROM<br />
** Retail w/ NAND Flash<br />
** R4<br />
* DeSmuME can display the header information of loaded ROMs. ''(Windows and Mac only)''<br />
* We are unaware of any huge problems with loading NDS ROMs. However, there are some issues with loading NDS ROMs on big-endian systems.<br />
* There are some issues with DSi ROMs, as they are not fully supported yet.<br />
<br />
==== GBA Slot (SLOT-2) ====<br />
* The following GBA slot devices are supported:<br />
** Compact Flash Card<br />
** Rumble Pak ''(Windows and Mac only)''<br />
** GBA Cartridge<br />
** Guitar Grip ''(Windows and Mac only)''<br />
** Memory Expansion Pak ''(Windows and Mac only)''<br />
** EasyPiano ''(Windows and Mac only)''<br />
** Taito Paddle ''(Windows and Mac only)''<br />
** PassME ''(Windows and Mac only)''<br />
<br />
==== Wi-Fi ====<br />
* Wi-Fi emulation is currently in an experimental stage, and many Wi-Fi features are either broken or non-working.<br />
* Here is what we currently know about Wi-Fi so far: [[Luigi's notes about WiFi|Wi-Fi Notes]]<br />
<br />
==== Dynamically Linked Driver Interface (DLDI) ====<br />
The Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
* LFN is currently unsupported.<br />
<br />
<br />
=== Does the GDB stub still work? ===<br />
GDB remote debugging does work to a certain degree. However, DeSmuME does not implement the entire GDB stub protocol, so there are still some bugs. Nevertheless, GDB remote debugging works well enough to do basic operations, like set breakpoints, step through code, watch memory locations for read/write operations, and other basic operations.<br />
<br />
=== How do I enable the GDB stub? ===<br />
* Windows: You must make a custom build using #define GDB_STUB.<br />
# Copy the "userconfig.h" file from "src\windows\defaultconfig" to "src\windows\userconfig".<br />
# In the "src\windows\userconfig\userconfig.h" file, add "#define GDB_STUB".<br />
# Build DeSmuME.<br />
# After DeSmuME is finished building, launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
* Mac: You must make a custom build using the "DeSmuME (OS X App; dev+)" build scheme, which is only available using the "Xcode (Latest)" project file. You must compile the dev+ build using Xcode 4 or later. When you do, a new menu option will be available: Tools > Show GDB Stub Control. In the GDB Stub Control panel, click Start to begin listening for the GDB debugging client.<br />
* Linux: When you generate your configure script, it must use the flag "--enable-gdb-stub". Build DeSmuME, then launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an online communications system.<br />
<br />
The DeSmuME team uses IRC to discuss DeSmuME's development. You will need an IRC client in order to participate is these discussions.<br />
<br />
==== Recommended IRC Clients ====<br />
* Windows: [http://www.mirc.com mIRC], [http://www.xchat.com XChat]<br />
* Mac: [http://colloquy.info Colloquy], [https://www.adium.im Adium]<br />
* Linux: [http://www.xchat.com XChat]<br />
* Firefox add-on: [https://addons.mozilla.org/en-us/firefox/addon/chatzilla/ ChatZilla]<br />
* Others: [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Wikipedia]<br />
<br />
==== DeSmuME IRC Channel ====<br />
To connect to the DeSmuME IRC channel, you will need to enter the following information in your IRC client:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
As far as language is concerned, most of the people on the channel speak English.<br />
<br />
=== Where is the manual? ===<br />
[http://wiki.desmume.org/index.php?title=Manual Over here.] It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
<br />
== SVN and Compiling ==<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ SVN] is a tool that is used by multiple developers to work on the same codebase without conflicts. See [http://en.wikipedia.org/wiki/Subversion_(software) Wikipedia] for more information.<br />
<br />
=== Where do I get SVN builds? ===<br />
We officially use the [http://buildbot.orphis.net/desmume/ automated SVN builds] provided by DeSmuME user, Orphis.<br />
<br />
Other third-parties may offer SVN builds, such as [http://www.emucr.com EmuCR]. Please note that any third-party build is both unofficial and unsupported.<br />
<br />
=== How do I get the latest SVN code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* Windows: At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
** Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
** Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* Mac: Any of the compilers built into Xcode 3.1.4 all the way up to the latest Xcode is supported. You may also use a non-Xcode toolchain, such as MacPorts GCC, but this is currently unsupported.<br />
* Linux: Any recent version of GCC and toolchain should work. However, we do not recommend GCC 4.9, since there are bugs with this GCC version that interfere with DeSmuME.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
(''Windows only'') For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the Visual C++ Express 2008 installer and I can't find it. ===<br />
Download link: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Patches may be submitted to our [https://sourceforge.net/p/desmume/patches/ patches tracker] on SourceForge. Any patches submitted will be subject to a code review by our developer team, where we will then determine if the patch should be included in the codebase or not.<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== I'm not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile SVN builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on IRC. Also, adding to or perfecting the documentation in the Wiki is useful. You could also watch for and help answer questions placed on the [http://forums.desmume.org DeSmuME forum].<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://problemkaputt.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a Compact Flash image<br />
<br />
<br />
== Mac Users ==<br />
<br />
=== I just downloaded DeSmuME, but I can't launch it because "it is from an unidentified developer." What gives? ===<br />
Apple introduced a security policy called [https://support.apple.com/en-us/HT202491 Gatekeeper] on OS X v10.8 Mountain Lion to help protect users from malware. However, since DeSmuME is a free open-source app, we don't want to invest money into properly code signing the app for the sake of proving that we are legitimate app and not just another piece of malware. If you are concerned about the legitimacy of DeSmuME.app, then always make sure to download it from our [http://desmume.org/download official Downloads page].<br />
<br />
If OS X prevents you from launching DeSmuME.app because "it is from an unidentified developer", do this:<br />
* In the Finder, right-click (or Control-click) DeSmuME.app, then in the contextual menu, choose Open. A warning box will appear, saying that DeSmuME.app "is from an unidentified developer." In the warning box, click Open to proceed with launching DeSmuME.app.<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories.<br />
<br />
Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
As of this release, all of the DeSmuME features that exist in the Windows port also exist in the Mac port, except for the following:<br />
* The HUD<br />
* Custom path settings<br />
* AVI / WAV recording<br />
* The various tools listed in the Tools menu<br />
* RAM Watch / RAM Search<br />
* Lua scripting<br />
<br />
While we are actively working to attain full feature parity between the Mac and Windows ports, this will still take some time to achieve.<br />
<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogermanhttps://wiki.desmume.org/index.php?title=KnowledgeBaseKnowledgeBase2017-11-16T01:14:19Z<p>Rogerman: </p>
<hr />
<div>This is a concise list of tips to get games running. This includes "known bugs" which users should work around themselves and not expect to be fixed any time soon.<br />
<br />
===== ------ Pokemon ------ =====<br />
* There are forums dedicated to pokemon gaming elsewhere on the web. Go there.<br />
* Pokemon HeartGold/SoulSilver <br />
** see [[#SAVEANDLOAD]] [https://sourceforge.net/p/desmume/bugs/1345/ #1345] (timing bugs accumulate; graphical corruption and freezes)<br />
** see [[#JIT]] [https://sourceforge.net/p/desmume/bugs/1272/ #1272]<br />
<br />
===== ------ Other games ------ =====<br />
* '''No snags, with updated desmume'''<br />
* '''No snags, with particular settings'''<br />
** Golden Sun: Dark Dawn - Use advanced SPU logic and synchronous sound options or else sound and music are broken [https://sourceforge.net/p/desmume/bugs/1342/ #1342]<br />
** Zelda: Phantom Hourglass - Use microphone samples [https://sourceforge.net/p/desmume/bugs/1327/ #1327]; Finetune SoftRasterizer "Depth Comparison Threshold"<br />
<span id="SAVEANDLOAD"><br />
* '''Text rendering is poor''' (toggle between opengl and softrasterizer renderers to get through game or use TXT hack in > 0.9.10 versions)<br />
** Shin Megami Tensei: Devil Survivor [https://sourceforge.net/p/desmume/bugs/1191/ #1191]<br />
* '''Other rendering is poor''' (toggle between opengl and softrasterizer renderers to get through game)<br />
* '''#SAVEANDLOAD''' Runtime snags, save in-game and reload frequently (most likely all timing bugs)<br />
** Digimon (freezes in conversation) [https://sourceforge.net/p/desmume/bugs/1040/ #1040]<br />
** Rune Factory (timing bugs accumulate; freezes) [https://sourceforge.net/p/desmume/bugs/1249/ #1249]<br />
* '''#TIMING''' Runtime snags, requires timing tweaks <br />
** Bowser's Inside Story - Very sensitive to timing. Try "Enable Advanced Bus-level Timing". See [https://sourceforge.net/p/desmume/bugs/1156/ #1156]<br />
<span id="JIT"><br />
* '''#JIT''' Runtime snags, JIT-related (change jit/recompiler blocksize or disable jit/recompiler)<br />
** Warioware Touched (nonplayable(?) behavioural bugs) [https://sourceforge.net/p/desmume/bugs/1178/ #1178]<br />
** Castlevania: Aria of Sorrow (graphical bugs) [https://sourceforge.net/p/desmume/bugs/1275/ #1275]<br />
** Final Fantasy IV (graphical bugs) [https://sourceforge.net/p/desmume/bugs/1180/ #1180]<br />
** Star Wars Revenge of The Sith (graphical bugs) [https://sourceforge.net/p/desmume/bugs/1179/ #1179]<br />
** Nintendogs (graphical bugs) [https://sourceforge.net/p/desmume/bugs/1371/ #1371]<br />
** Fossil Fighters - Champions (freezing) [https://sourceforge.net/p/desmume/bugs/1326/ #1326]<br />
** Starfy (graphical bugs) [https://sourceforge.net/p/desmume/bugs/1369/ #1369]<br />
* '''#INCONSEQUENTIAL''' Inconsequential Bugs<br />
** New Touch Party Game (Title screen logo corrupted) [https://sourceforge.net/p/desmume/bugs/655/ #665]<br />
</span><br />
<br />
===== ------ Homebrew ------ =====<br />
(When using 0.9.10, which is a turd, make sure you use "config > rom loading > load entirely to ram". Otherwise DLDI won't auto-patch and MPCF won't work.)<br />
* No snags<br />
** DSCraft [ http://www.smealum.net/dscraft/ ] - Works fine. Use FAT version and MPCF (it's faster, and advanced users might get files to save, even). <br />
* Snags<br />
** Herocat versus Univillain [ http://www.pouet.net/prod.php?which=58249 ] - Works fine via MPCF or GBAGAME; rom must be named uni.nds via MPCF due to hardcode in rom<br />
** R4 Firmware - Set Slot-1 Device R4, and specify the directory with your flash card firmware; Then load the NDS file which corresponds to the ROM contents of your flash card (we don't ship desmume with someone's copyrighted flash card roms)<br />
* '''MPCF Tip''' - config > slot 2 > MPCF flash card device. Use path of loaded ROM, usually.</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2017-11-16T01:07:09Z<p>Rogerman: </p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for OS X may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files, provided with the DeSmuME source code, include several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== OS X App ===<br />
These build targets produce a self-contained OS X application package (or "app bundle"). These builds use our official OS X frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with OS X v10.6 or later. (Also compatible with OS X v10.5 if building from the Xcode 3 project).<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different OS X versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running OS X v10.5 or later, and Xcode v3.1.4 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with OS X v10.5 requires Xcode 3 to build.<br />
<br />
<br />
=== OS X App (dev+) ===<br />
This build target is just like the normal OS X App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of OS X.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running Xcode v4.6.3 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.7 or later.<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
=== OS X App (Xcode 6 .XIB for v10.5 Leopard Release Build) ===<br />
This build target is a helper build target for producing final release builds of DeSmuME. It is used solely as an intermediate build step, and is not intended for normal usage. See [[#OS_X_App_Build_for_Final_Release]] for more details.<br />
<br />
<br />
=== OS X App (v10.5 Leopard Release Build) ===<br />
This build target is for producing final release builds of DeSmuME. These builds will use our official OS X frontend contained in an OS X app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports both 32-bit and 64-bit.<br />
* Binaries are compatible with OS X v10.5 and later.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running the latest version of OS X and Xcode.<br />
* Building the app for release takes more steps than other builds.<br />
* Requires a separate Mac or virtual machine running OS X Mavericks in order to run Xcode v3.2.6 and Xcode v6.2 for the intermediate build steps.<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.11 or later.<br />
* Binaries only run on machines with 64-bit Intel processors running OS X v10.11 or later.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user.<br />
<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the "desmume/src/frontend/cocoa" folder of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.1.4 (if running on Leopard); v3.2.6 (if running on Snow Leopard or later)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| v4.6.3 or later<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3 if any of the following conditions apply:<br />
* You are running OS X v10.5 or v10.6.<br />
* You are building an OS X App that runs on OS X v10.5.<br />
* You are building an OS X App that runs on PowerPC processors.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
You must use Xcode 4 or later if any of the following conditions apply:<br />
* You are running OS X v10.7 or later.<br />
* You are building an OpenEmu Plug-in.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
'''Note:''' ''Xcode 3 is not compatible with OS X v10.10 Yosemite. If you require the use of Xcode 3, you will need to run it on an older version of OS X.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode v3.1.4 Direct Download Link (for Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.1.4_developer_tools/xcode314_2809_developerdvd.dmg<br />
* Xcode v3.2.6 Direct Download Link (for Snow Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
If you will be building a Final Release build, then you also need Xcode 6.<br />
* Xcode v6.2 Direct Download Link (for Mavericks): http://download.developer.apple.com/Developer_Tools/Xcode_6.2/Xcode_6.2.dmg<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running Lion or later and have any Apple ID, then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link (for Lion or later): https://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* Unless you are planning on building other software that must run on OS X v10.4, you may deselect the Mac OS X 10.4 SDK. (DeSmuME can only run on OS X v10.5 or later.)<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up the Latest Version of Xcode ====<br />
When you download Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using git and is hosted on GitHub.<br />
* DeSmuME "master" Branch Download Link: https://github.com/TASVideos/desmume/archive/master.zip<br />
<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/desmume/src/frontend/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (XCode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== OS X App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the four build targets.<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder. If you built the app using the "DeSmuME (XCode 3).xcodeproj" project file, then the built app will also include the current git commit number.<br />
<br />
==== Building Using the Latest Version of Xcode ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App).<br />
<br />
3. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Dev+ Build ===<br />
The steps here are similar to that of the normal OS X App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 4 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App, dev+).<br />
<br />
''If you want to run dev+ build with Xcode's LLDB debugger:''<br />
<br />
3a. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Debug" folder.<br />
<br />
''If you need to use the dev+ build without running the debugger:''<br />
<br />
3b. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app. (Note that this build does use program optimizations.)<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Build for Final Release ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode v3.2.6 and Xcode v6.2 installed on a system running OS X Mavericks v10.9.5.<br />
* You must have the latest version of Xcode running on the latest version of macOS. (At the time of this writing, the latest version of Xcode is v9.1, and the latest version of macOS is 10.13.1.)<br />
<br />
1. Let's start with building on OS X Mavericks: Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (OS X App; PowerPC Release Build)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (PPC).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
7. While still on OS X Mavericks: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 6.2.<br />
<br />
8. Choose Product > Scheme > DeSmuME (OS X App; Xcode 6 .XIB for v10.5 Leopard Release Build).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (Xcode 6).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
11. Quit both Xcode 3 and Xcode 6 on OS X Mavericks.<br />
<br />
12. On the latest macOS: Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
13. Choose Product > Scheme > DeSmuME (OS X App; v10.5 Leopard Release Build).<br />
<br />
14. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
15. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
16. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
17. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME.app will automatically launch.<br />
<br />
18. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
19. After all PGO exercises are complete, quit DeSmuME.app. Xcode should now report that it has generated an optimization profile.<br />
<br />
20. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the "desmume/src/frontend/cocoa/openemu" folder, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > OpenEmuBase.<br />
<br />
3. Click Run. This will build a Debug version of the framework.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show "OpenEmuBase.framework".<br />
<br />
6. Click "OpenEmuBase.framework", and then choose File > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version framework.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Move OpenEmuBase.framework into the "desmume/src/frontend/cocoa/openemu" folder.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the "desmume/src/frontend/cocoa/openemu" folder. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in).<br />
<br />
3. Click Run. This will build a Debug version of the plug-in.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show the "DeSmuME.oecoreplugin" bundle.<br />
<br />
6. Click "DeSmuME.oecoreplugin", and then choose Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click (or Control-click) the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version plug-in.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Choose New > New Finder Window.<br />
<br />
11. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
12. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
13. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app.<br />
<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="150" |<br />
! scope="col" width="150" | OS X App<br />
! scope="col" width="150" | OS X App (dev+)<br />
! scope="col" width="150" | OS X App (Final Release)<br />
! scope="col" width="150" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| Yes[1]<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| Yes[1]<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.5 (Leopard)<br />
| Yes<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.6 (Snow Leopard)<br />
| Yes<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.7 (Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.8 (Mountain Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.9 (Mavericks)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.10 (Yosemite)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.11 (El Capitan)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.12 (Sierra)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.13 (High Sierra)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|}<br />
<br />
1. Available only by configuration in Xcode 3.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2017-11-16T00:14:54Z<p>Rogerman: </p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for OS X may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files, provided with the DeSmuME source code, include several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== OS X App ===<br />
These build targets produce a self-contained OS X application package (or "app bundle"). These builds use our official OS X frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with OS X v10.6 or later. (Also compatible with OS X v10.5 if building from the Xcode 3 project).<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different OS X versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running OS X v10.5 or later, and Xcode v3.1.4 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with OS X v10.5 requires Xcode 3 to build.<br />
<br />
<br />
=== OS X App (dev+) ===<br />
This build target is just like the normal OS X App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of OS X.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running Xcode v4.6.3 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.7 or later.<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
=== OS X App (Xcode 6 .XIB for v10.5 Leopard Release Build) ===<br />
This build target is a helper build target for producing final release builds of DeSmuME. It is used solely as an intermediate build step, and is not intended for normal usage. See [[#OS_X_App_Build_for_Final_Release]] for more details.<br />
<br />
<br />
=== OS X App (v10.5 Leopard Release Build) ===<br />
This build target is for producing final release builds of DeSmuME. These builds will use our official OS X frontend contained in an OS X app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports both 32-bit and 64-bit.<br />
* Binaries are compatible with OS X v10.5 and later.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running the latest version of OS X and Xcode.<br />
* Building the app for release takes more steps than other builds.<br />
* Requires a separate Mac or virtual machine running OS X Mavericks in order to run Xcode v3.2.6 and Xcode v6.2 for the intermediate build steps.<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.11 or later.<br />
* Binaries only run on machines with 64-bit Intel processors running OS X v10.11 or later.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user.<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the "desmume/src/frontend/cocoa" folder of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.1.4 (if running on Leopard); v3.2.6 (if running on Snow Leopard or later)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| v4.6.3 or later<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3 if any of the following conditions apply:<br />
* You are running OS X v10.5 or v10.6.<br />
* You are building an OS X App that runs on OS X v10.5.<br />
* You are building an OS X App that runs on PowerPC processors.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
You must use Xcode 4 or later if any of the following conditions apply:<br />
* You are running OS X v10.7 or later.<br />
* You are building an OpenEmu Plug-in.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
'''Note:''' ''Xcode 3 is not compatible with OS X v10.10 Yosemite. If you require the use of Xcode 3, you will need to run it on an older version of OS X.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode v3.1.4 Direct Download Link (for Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.1.4_developer_tools/xcode314_2809_developerdvd.dmg<br />
* Xcode v3.2.6 Direct Download Link (for Snow Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
If you will be building a Final Release build, then you also need Xcode 6.<br />
* Xcode v6.2 Direct Download Link (for Mavericks): http://download.developer.apple.com/Developer_Tools/Xcode_6.2/Xcode_6.2.dmg<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running Lion or later and have any Apple ID, then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link (for Lion or later): https://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* Unless you are planning on building other software that must run on OS X v10.4, you may deselect the Mac OS X 10.4 SDK. (DeSmuME can only run on OS X v10.5 or later.)<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up the Latest Version of Xcode ====<br />
When you download Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using git and is hosted on GitHub.<br />
* DeSmuME "master" Branch Download Link: https://github.com/TASVideos/desmume/archive/master.zip<br />
<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/desmume/src/frontend/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (XCode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== OS X App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the four build targets.<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder. If you built the app using the "DeSmuME (XCode 3).xcodeproj" project file, then the built app will also include the current git commit number.<br />
<br />
==== Building Using the Latest Version of Xcode ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App).<br />
<br />
3. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Dev+ Build ===<br />
The steps here are similar to that of the normal OS X App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 4 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App, dev+).<br />
<br />
If you want to run dev+ build with Xcode's LLDB debugger:<br />
3a. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Debug" folder.<br />
<br />
If you need to use the dev+ build without running the debugger:<br />
3b. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish building the app. (Note that this build does use program optimizations.)<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
<br />
=== OS X App Build for Final Release ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode v3.2.6 and Xcode v6.2 installed on a system running OS X Mavericks v10.9.5.<br />
* You must have the latest version of Xcode running on the latest version of macOS. (At the time of this writing, the latest version of Xcode is v9.1, and the latest version of macOS is 10.13.1.)<br />
<br />
1. Let's start with building on OS X Mavericks: Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (OS X App; PowerPC Release Build)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (PPC).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
7. While still on OS X Mavericks: Open the "DeSmuME (Latest).xcodeproj" project file using Xcode 6.2.<br />
<br />
8. Choose Product > Scheme > DeSmuME (OS X App; Xcode 6 .XIB for v10.5 Leopard Release Build).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Build, and then wait for the build process to finish. This will make a new app called "DeSmuME (Xcode 6).app" in the "/desmume/src/frontend/cocoa/build/Release" folder.<br />
<br />
11. Quit both Xcode 3 and Xcode 6 on OS X Mavericks.<br />
<br />
12. On the latest macOS: Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
8. Choose Product > Scheme > DeSmuME (OS X App; v10.5 Leopard Release Build).<br />
<br />
13. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
14. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
15. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
16. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME.app will automatically launch.<br />
<br />
17. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
18. After all PGO exercises are complete, quit DeSmuME.app. Xcode should now report that it has generated an optimization profile.<br />
<br />
19. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish.<br />
<br />
And you're done! The newly built app will be present in the "/desmume/src/frontend/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the "desmume/src/frontend/cocoa/openemu" folder, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > OpenEmuBase.<br />
<br />
3. Click Run. This will build a Debug version of the framework.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show "OpenEmuBase.framework".<br />
<br />
6. Click "OpenEmuBase.framework", and then choose File > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version framework.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Move OpenEmuBase.framework into the "desmume/src/frontend/cocoa/openemu" folder.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the "desmume/src/frontend/cocoa/openemu" folder. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in).<br />
<br />
3. Click Run. This will build a Debug version of the plug-in.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show the "DeSmuME.oecoreplugin" bundle.<br />
<br />
6. Click "DeSmuME.oecoreplugin", and then choose Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click (or Control-click) the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version plug-in.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Choose New > New Finder Window.<br />
<br />
11. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
12. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
13. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app.<br />
<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="150" |<br />
! scope="col" width="150" | OS X App<br />
! scope="col" width="150" | OS X App (dev+)<br />
! scope="col" width="150" | OS X App (Final Release)<br />
! scope="col" width="150" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| Yes[1]<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| Yes[1]<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.5 (Leopard)<br />
| Yes<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.6 (Snow Leopard)<br />
| Yes<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.7 (Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.8 (Mountain Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.9 (Mavericks)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.10 (Yosemite)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.11 (El Capitan)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.12 (Sierra)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.13 (High Sierra)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|}<br />
<br />
1. Available only by configuration in Xcode 3.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_LinuxInstalling DeSmuME from source on Linux2017-10-18T04:53:59Z<p>Rogerman: /* Pre-requisites */</p>
<hr />
<div>== Supported compilers ==<br />
On the Linux platform, only the GCC compiler and toolchain is supported.<br />
<br />
== Pre-requisites ==<br />
<br />
The Linux version of desmume comes in source code form only, and if your distribution does not package it or is packaging an old version you will have to compile the sources yourself. In order to compile desmume from a source tarball you'll need at least these packages:<br />
<br />
gcc make libglib2 libgtk2 libglade gettext libsdl zlib intltool agg libasound<br />
<br />
If you're compiling from svn, you'll need those one as well:<br />
<br />
autoconf automake<br />
<br />
If you want 3d engines alternatives to software rasterizer you may install libgtkglext or libosmesa.<br />
<br />
On debian you should have all the requirements installed with this command:<br />
<br />
sudo apt-get install build-essential autoconf automake libgtk2.0-dev libglu1-mesa-dev libsdl1.2-dev libglade2-dev gettext zlib1g-dev libosmesa6-dev intltool libagg-dev libasound2-dev libsoundtouch-dev<br />
<br />
desmume requires libgtk 2.10 or higher.<br />
<br />
After successful compilation, you can start DeSmuME by running <code>desmume</code>. If you want to enable dynamic JIT recompiler, do this:<br />
<br />
desmume --cpu-mode=1<br />
<br />
== Install desmume from source tarball ==<br />
<br />
Go to http://desmume.org/download/ to check out the latest version of desmume available. At the time of writing the latest stable release of desmume is 0.9.11.<br />
<br />
Download the tarball and extract it:<br />
<br />
wget http://sourceforge.net/projects/desmume/files/desmume/0.9.11/desmume-0.9.11.tar.gz/download<br />
tar xvzf desmume-0.9.11.tar.gz<br />
<br />
Or if you don't want to save the archive locally:<br />
<br />
wget -O - http://sourceforge.net/projects/desmume/files/desmume/0.9.11/desmume-0.9.11.tar.gz/download | tar xvz<br />
<br />
Enter the desmume directory and build the source:<br />
<br />
cd desmume-0.9.11<br />
./configure<br />
make<br />
sudo make install<br />
<br />
If you are not using sudo the last command needs to be run as the <code>root</code> user.<br />
<br />
If you want to use offscreen mesa as alternative 3d engine use the <code>./configure --enable-osmesa</code> instead of just <code>./configure</code>.<br />
<br />
== Install desmume from git ==<br />
<br />
Grab the source from https://github.com/TASVideos/desmume<br />
<br />
Enter the desmume directory and build the source:<br />
<br />
cd desmume/src/frontend/posix/<br />
./autogen.sh<br />
./configure<br />
make<br />
sudo make install<br />
<br />
If you want to use offscreen mesa as alternative 3d engine use the <code>./configure --enable-osmesa</code> instead of just <code>./configure</code>.<br />
<br />
If you want to enable HUD display, use <code>./configure --enable-hud</code>.<br />
<br />
== Enabling compiler optimizations ==<br />
If you want to optimize the build on Linux, you should set the C++ compiler options to enable specific optimization for your processor:<br />
<br />
You can do this by setting the <code>CFLAGS</code> and <code>CXXFLAGS</code> variables like shown below:<br />
<br />
CFLAGS='-O2 -march=native' CXXFLAGS=$CFLAGS ./configure<br />
<br />
You may need to set the <code>-march=native</code> for example because by default, gcc under 32-bit Debian builds code that works on the 486 (which doesn't support SSE).<br />
<br />
On x86 / x86-64 machines you can squeeze the processor a bit more using:<br />
<br />
CXXFLAGS='-O2 -march=native -mfpmath=sse' ./configure<br />
<br />
For more optimization options, see [[Optimization#Linux]]<br />
<br />
== Known issues ==<br />
<br />
* If you have a crash on a 64bit environment while disabling/enabling sound during gameplay, deinstall agg (libagg-dev on Debian) and rebuild. This should solve the problem. (Alvin: Is this still applicable?)<br />
<br />
* Some people on MacOS X have a broken build environment, mixing pieces from fink / macports / source installation / etc... That is wrong and painful for both the user and the developers who have to sort out build issues. Please don't do that! To workaround the issue you can try passing the needed include paths to autoreconf. Modify autogen.sh adding -B/my/path/ to autoreconf invocation, the path should be -B/sw for fink and -B/opt/local for macports. After the modify rerun ./autogen.sh and ./configure.</div>Rogermanhttps://wiki.desmume.org/index.php?title=Cocoa_frontend_todoCocoa frontend todo2017-09-11T23:39:32Z<p>Rogerman: /* Implementation TODO and notes */</p>
<hr />
<div>== Overview of Release History ==<br />
<br />
=== The First Cocoa Front End ===<br />
The first release of the Cocoa front end was v0.7.3, released on August 12, 2007.<br />
<br />
=== The Temporary Move to the GTK Front End ===<br />
Due to lack of developer support, the Cocoa code base was shelved after the release of v0.9.4. On November 27, 2009, v0.9.5 was released for OS X using the GTK front end. The last release using the GTK front end was v0.9.6, released on May 19, 2010.<br />
<br />
=== The Return to the Cocoa Front End ===<br />
On February 1, 2011, v0.9.7 was released for Windows, and also for Linux using the GTK. However, there were issues that were specific to the OS X GTK build which prevented its release for months. At this time, the Cocoa code base from v0.9.4 was updated to work with v0.9.7, and was finally released for OS X on April 30, 2011.<br />
<br />
<br />
== v0.9.7 (Released on April 30, 2011) ==<br />
This version returns the OS X port back to its Cocoa roots. Returning the OS X port to a Cocoa codebase is extremely important for improving the UI, optimizing performance, and improving stability.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The GTK front end had a UI that was not Mac-friendly.<br />
* The application was unstable and frequently suffered application-level crashes, especially when the UI was manipulated.<br />
* Performance was poor all around. Emulation performance was especially poor.<br />
* Universal binaries are not possible for the GTK front end.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Make the Cocoa front end the primary Mac front end.<br />
* Make the Cocoa code base the main code base for the OS X port.<br />
* Greatly improve application stability.<br />
* Bring back universal binaries.<br />
* Get this version released as quickly as possible, since the OS X port is already months behind the others.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Unshelve the code base from v0.9.4 and update it to v0.9.7 standards. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The OS X port no longer suffers from application-level crashes, the UI is now Mac-native, and the application bundle now has a universal binary.<br />
* Overall performance has improved significantly since v0.9.6. UI performance is greatly improved, but emulation performance is still at least 20%-40% slower than the Windows port for most games.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Even though v0.9.7 has binary compatibility with OS X v10.4, there are many issues when running on v10.4, especially with missing 3D graphics.<br />
* The Cocoa code base is extremely messy and uses many older coding conventions. This makes it difficult to maintain and even more difficult to add new features. Due to these reasons, a total rewrite of the Cocoa code base is necessary in order to move the OS X port forward.<br />
* There was an uncaught bug in this release where touch coordinates didn't map correctly on rotated screens. This bug will need to be fixed.<br />
<br />
<br />
== v0.9.8 (Released on April 9, 2012) ==<br />
This version is all about building a better future for the OS X port. Although this means having to rebuild the Cocoa code base from scratch, this is a necessary first step in providing a stable foundation for future enhancements.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Emulation performance is still poor.<br />
* The UI is very clunky, and certain parts of the UI are broken.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Completely rewrite the Cocoa code base from the ground up, using Objective-C 2.0, modern coding conventions, and Cocoa-bindings.<br />
* Transition the legacy Cocoa code base out of the current code base.<br />
* Expose as many settings in the user interface as possible.<br />
* Improve emulation performance.<br />
* Improve the user interface.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the project files to be compatible with both Xcode 3 and Xcode 4. (DONE!)<br />
* Update build targets to prefer the latest version of LLVM/Clang. (DONE!)<br />
* Transition all legacy files out of the main project files, and rename legacy files with a legacy suffix. (DONE!)<br />
<br />
<br />
* Add finder icons for readable files. (DONE!)<br />
* Expose all emulation, firmware, SPU, and SoftRasterizer options in the UI. (DONE!)<br />
* Add mouseover tooltips for all settings. (DONE!)<br />
* Add a toolbar to the main emulation window. (DONE!)<br />
* Add more user feedback messages to the status bar. (DONE!)<br />
* Add a volume slider to the status bar, and remove the Sound menu. (DONE!)<br />
* Completely revamp the DeSmuME Preferences window. (DONE!)<br />
* Make external save state files behave like normal document files. (DONE!)<br />
* Expose all available ROM information in the ROM Info panel. (DONE!)<br />
* Make ROM title strings Unicode aware. (DONE!)<br />
* Change the behavior of the close window control, where clicking on it while a ROM is loaded will close the ROM. (DONE!)<br />
<br />
<br />
* Add the ability to change the window display mode. (DONE!)<br />
* Add Bilinear Filtering option for the display window. (DONE!)<br />
* Add video filter support for the display window. (DONE!)<br />
* Add the ability to rotate the display to any arbitrary rotation angle. (DONE!)<br />
* Add the ability to take screenshots using Edit > Copy. (DONE!)<br />
* Add the ability to save screenshot files in several different image file formats. (DONE!)<br />
* Add support for using an ADVANsCEne database for checking ROM properties. (DONE!)<br />
* Add the Cheat Manager, allowing for Action Replay codes and an internal value search tool. (DONE!)<br />
* Add the ability to import Action Replay codes from an R4 Cheat Database. (DONE!)<br />
* Add the ability to import and export ROM save files in RAW and No$GBA formats. (DONE!)<br />
* Add the File Migration Assistant to help users migrate files from previous versions. (DONE!)<br />
<br />
<br />
* Add support for mapping Lid and Debug controls. (DONE!)<br />
* Add fake mic support. (WORKING)<br />
* Add the ability to map input to user-defined touch coordinates. (DROPPED)<br />
* Allow for all non-modifier keys on a keyboard to be used as an input mapping. (DONE!)<br />
* Allow all HID devices to be used for input mappings. (DONE!)<br />
<br />
<br />
* Add automatic frameskip. (DONE!)<br />
* Make ROM cartridge files load on a separate thread. (DONE!)<br />
* Rework the main emulation loop to be as lightweight as possible. (DONE!)<br />
* Rework the multithreading code to work with SoftRasterizer. (DONE!)<br />
* Remove all Objective-C code from the sound code and optimize it. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Fake mic support only works with internal noise samples and white noise samples. External audio files didn't make it into the final release.<br />
* The feature to map inputs to user-defined touch coordinates was dropped due to release time constraints.<br />
* Performance is greatly improved in this version. UI performance is now "snappy". A combination of Cocoa-bindings, code design choices, and UI optimizations have made for an extremely responsive and usable UI. Emulation performance is also dramatically improved, now being only 5% slower than the Windows port.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Users running OS X v10.8 Mountain Lion are having issues with blank/white screens. This is most likely a bug related to the OpenGL blitter, and is considered critical.<br />
* A new bug was introduced where using Dual SPU Synch/Asynch mode would cause an application-level crash. This is a critical bug that is related to the sound threading code.<br />
* Physical microphone support seems to be an important feature to include in the next version.<br />
* Input handling was rewritten for this release and is an improvement compared to the last version, but the code is already showing its limitations. The input handling code will need to be rewritten once again in the next release.<br />
* This release has been considered a very large success for the OS X port.<br />
<br />
<br />
== v0.9.8b (Released on August 6, 2012) ==<br />
This version is different from all other versions in that this version is purely a bug-fix release. This version is being released in response to Apple's release of OS X v10.8 Mountain Lion.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the critical bugs.<br />
* Get this version released as quickly as possible, in response to the Mountain Lion release.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix the critical bugs. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The display window now works with Mountain Lion, and using Dual SPU Synch/Asynch no longer crashes the application.<br />
* Besides the bug fixes, this version is identical to v0.9.8.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* None.<br />
<br />
<br />
== v0.9.9 (Released on April 30, 2013) ==<br />
Initially, this version was meant to be an optimization and maintenance release. It was also meant to further modernize the code base in response to the further obsolescence of Xcode 3 in Mountain Lion. However, due to the length of time since the last release, this version also added several new features.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Transition the code base from using the 10.5 SDK and being forward compatible to using the latest SDK and being backwards compatible to OS X v10.5.<br />
* Integrate the new JIT CPU emulation engine.<br />
* Update the OpenGL blitter to use modern OpenGL functions, and then optimize it.<br />
* Add support for the OpenGL 3D renderer.<br />
* Refactor the input handling code so that it's all gathered in one place, and also sits at the UI level.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the Xcode project files to use the latest installed SDK, then add new build targets specifically for OS X v10.5 releases. (DONE!)<br />
* Add support for the JIT CPU emulation engine. (DONE!)<br />
* Add support for the OpenGL 3D renderer. (DONE!)<br />
* Completely eliminate the usage of fixed-function pipeline OpenGL code from the OpenGL blitter. (DONE!)<br />
* Refactor and rewrite the input handling code. (DONE!)<br />
<br />
<br />
* Add Rigorous 3D Rendering Timing option. (DONE!)<br />
* Add the SLOT-1 Manager, allowing the configuration of SLOT-1 properties. (DONE!)<br />
<br />
<br />
* Add the ability to use multiple display windows, each with individual display settings. (DONE!)<br />
* Show the ROM name and ROM icon of the currently loaded ROM in the display window title bar. (DONE!)<br />
* Add support for the HUD. (DROPPED)<br />
* Add Vertical Sync option for display windows. (DONE!)<br />
* Add Display Orientation option for display windows. (DONE!)<br />
* Add Display Order option for display windows. (DONE!)<br />
* Add Display Separation option for display windows. (DONE!)<br />
* Add HQ4xS video filter. (DONE!)<br />
<br />
<br />
* Add the ability to map multiple input devices to the same command. (DONE!)<br />
* Add the ability to map mice and other pointer-type devices to commands other than Touch. (DONE!)<br />
* Add the ability to map an input device to any command. (DONE!)<br />
* Add the ability to map an input device to user-defined touch coordinates. (DONE!)<br />
* Add the ability to save and load input profiles. (DONE!)<br />
* Complete microphone support. (WORKING)<br />
* Revamp the Input Preferences UI to accommodate all the new input handling features. (DONE!)<br />
<br />
<br />
* Make the items in the File Migration Window properly sorted by version. (DONE!)<br />
* Add Select All and Select None commands in the File Migration Window. (DONE!)<br />
* Add some user-friendly forms for users to receive technical support and submit bug reports. (DONE!)<br />
* Add more system information to the About box. (DONE!)<br />
* Add Help documentation. (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version, and more.<br />
* The input handling code is now where it needs to be. No more rewrites are necessary anymore.<br />
* External audio files may now be used for the fake mic, but physical mic support still isn't there. This will have to be a top priority for the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* A bug was introduced where setting the display mode to Main or Touch as default would create display windows that draw incorrectly.<br />
* A bug was introduced where the R4 path in the SLOT-1 Manager wouldn't properly set.<br />
* A bug was introduced where loading certain audio files for the audio sample generator would cause a crash.<br />
* A bug was introduced where analog HID-inputs would sometimes fail to register.<br />
<br />
<br />
== v0.9.10 (November 28, 2013) ==<br />
This release is meant to further modernize DeSmuME to use the latest and greatest optimizations from the new Xcode 5, as well as modernize the UI with new OS X human interface paradigms. Finally, the Legacy port needs to be obsoleted.<br />
<br />
This release was supposed to be the "add new features" release, and some of those features already made it into v0.9.9. This release is here to finish the work that was started in v0.9.9, with the most important features being SLOT-2 device support and physical microphone support.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The v0.9.9 release brought a lot of new features. But along with those new features, came some new bugs. Those bugs will need to be fixed.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the bugs introduced from the v0.9.9 release.<br />
* Finish adding the features that were first started in v0.9.9:<br />
** Add full support for all SLOT-2 devices.<br />
** Complete the microphone feature by adding physical microphone support.<br />
** Add HUD support.<br />
** Add support for basic replay recording and playback.<br />
** Add TAS-friendly controls.<br />
** Make displays go full screen.<br />
* With the recent release of Xcode 5, try out some new optimizations and see if they improve performance without breaking anything.<br />
* Begin modernizing the UI. Some specific elements would include:<br />
** ROM Info panel<br />
** SLOT-1 Manager window<br />
** File Migration Assistant window<br />
** Change radio button lists w/ button into pull-down menus as appropriate<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further reduce reliance on the user interacting with the file system directly.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DROPPED)<br />
* Complete microphone feature by adding physical microphone support. (DROPPED)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (DROPPED)<br />
* Add Frame Advance control. (DROPPED)<br />
* Show the frame number. (DROPPED)<br />
* Reintegrate GDB stub support. (DROPPED)<br />
<br />
<br />
* Use Xcode 5's new -Ofast and -fvectorize optimizations. (DONE!)<br />
* Use --ffast-math optimization. (DONE!)<br />
<br />
<br />
* Add the ability for display windows to enter full screen mode. (DONE!)<br />
* Save the positions and settings of any remaining display windows upon app exit. (DONE!)<br />
* Create AppleScript for deleting the user defaults files. (DONE!)<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* The goals of adding new features were not met for this version.<br />
* Due to this release happening much quicker than anticipated, many planned features for this release were dropped.<br />
* In the end, this turned out to be more of a modernization and bug fix release more than anything else. New features will have to be pushed to the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* During release testing, it was found that recent code changes broke the loading of ROMs on big-endian systems. Therefore, PPC support was dropped during release testing in order to get this release out on time. There will need to be a maintenance release made to address this issue.<br />
* SourceForge changed their URLs the DeSmuME project, so the Bug Report URL is now incorrect.<br />
* A user complained about choppy video, which was determined to be auto frameskip being too aggressive. This will need to be dealt with somehow, as FPS can have some wild jumps under certain conditions.<br />
<br />
* Saving the positions and settings of the remaining display windows upon app exit is a great feature. It would be a good idea to save more settings upon app exit as appropriate. OS X is heading in a direction where app settings should be restorable between app launches, and DeSmuME needs to start doing the same.<br />
<br />
<br />
== v0.9.10b (December 18, 2013) ==<br />
This is strictly a maintenance release made to address the post-release issues from v0.9.10.<br />
<br />
=== Major issues from the previous version ===<br />
* Fix ROM loading on PPC.<br />
* Fix auto frameskip being overly aggressive.<br />
<br />
=== Main goals for this version ===<br />
* Fix the noted issues from the previous version.<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix ROM loading on big-endian systems. (DONE!)<br />
* Make frame rate transitions smoother, and make auto frame skip slightly less aggressive. (DONE!)<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Besides being able to load ROMs on PPC and the better auto frame skip algorithm, this version is identical to v0.9.10.<br />
<br />
=== Post-release issues and notes ===<br />
* This version has the stability that v0.9.9 was intended to bring. The next version really needs to push new features.<br />
* The most glaring missing features are the lack of SLOT-2 device support and the lack of the physical microphone. Adding these features should be top priority.<br />
* The font changes in OS X Yosemite have affected the appearance of text in some UI controls. This will need to be fixed.<br />
<br />
<br />
== v0.9.11 (April 14, 2015) ==<br />
This version is meant above all else to be a features release. The improved stability and modernized code base of v0.9.10 gave a strong foundation to build upon, so now it's time to take advantage of it!<br />
<br />
=== Major issues from the previous version ===<br />
* New features intended to be present in the previous release were not added.<br />
<br />
=== Main goals for this version ===<br />
* Add new features!<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further modernize the UI with current Apple human interface paradigms. Ensure that the UI looks good for all OS X versions from Leopard to Yosemite.<br />
* Try out Xcode 6's new PGO optimization.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DONE!)<br />
* Complete microphone feature by adding physical microphone support. (DONE!)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (PARTIAL)<br />
* Add new Execution Control panel, that adds new Frame Advance and Frame Jump controls, as well as integrates the execution speed controls, all in one single panel. (DONE!)<br />
* Reintegrate GDB stub support. (DONE!)<br />
* Add ability to run pixel scalers on the GPU. (DONE!)<br />
* Add additional video output filters. (DONE!)<br />
* Add support for turbo and autohold. (DONE!)<br />
<br />
* Use Xcode 6's new PGO optimization. (DONE!)<br />
* Obsolete the Legacy port. (DONE!)<br />
<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window. (DONE!)<br />
* Add support for App Nap in OS X Mavericks and later. (DONE!)<br />
* Fix UI issues with OS X Yosemite. (DONE!)<br />
<br />
=== Final results ===<br />
* Most of the goals were met for this version. Many new features were added, including some which were not originally planned in v0.9.10.<br />
* The only features that were not included were:<br />
** HUD support: It would be better to run this within OpenGL instead of hacking libagg to work in the Cocoa port. Of course, running the entire HUD in OpenGL will require an entirely new drawing engine, so this will take some time to figure out.<br />
** Replay Record/Playback: Basic functionality is included. However, full functionality, in which the user can viably edit replays within DeSmuME, is going to be a long road ahead. HUD support, Lua support, RAM Watch/Search, and a replay editor like Bizhawk's TAS Studio will be required. This will be a major undertaking.<br />
* Now that the Legacy port is gone, the project has been modernized a great deal. This should make it much easier for new Mac developers to jump into the project.<br />
* Overall, I'm very happy with this release. There was a lot of time between this release and v0.9.10, so it was possible to get a lot of testing done for this one, despite the many new features. I feel like this release is stable enough to warrant the next release, v0.9.12, to be another feature-focused release.<br />
<br />
=== Post-release issues and notes ===<br />
* On Retina displays, the display window OpenGL context as well as other various UI elements are still rendered in normal resolution.<br />
* On OS X Mavericks and later, running a full screen display on any monitor other than the primary monitor will cause the dock and menu bar to remain visible, unless the primary monitor is also running a full screen display.<br />
<br />
== v0.9.12 (TBD) ==<br />
This version will focus on adding to the Cocoa port any remaining features that are currently present in the Windows port. The final goal: Full feature parity with the Windows port. Once this is achieved, then a lot of options open up for adding brand new features, as well as restructuring of the core itself to bring new levels of emulation compatibility and performance.<br />
<br />
I've also noticed, after doing much testing of v0.9.11 and comparing it to the Windows port, as well as the various Linux ports, it's very clear that the feature disparity between frontends is becoming greater. In the future, we will need to unify the look and feel of the various frontends for the purpose of improving the user experience and making our tech support easier. While this release will not focus on actually unifying the frontends, it will lay down much of the groundwork for doing so in v0.9.13.<br />
<br />
=== Major issues from the previous version ===<br />
* Need to fully support Retina displays.<br />
* Fix full screen display behaviors on OS X Mavericks and later.<br />
<br />
=== Main goals for this version ===<br />
* Full feature parity with the Windows port.<br />
* Refactor the core source functionality so that all communication between core and high-level UI goes through a common frontend layer. Have the Cocoa port make use of the common frontend layer.<br />
* Ensure build compatibility through Xcode 7.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add HUD support. (IN PROGRESS)<br />
** Currently, there is support for displaying the Video FPS, 3D Renderer FPS, Frame Index, Lag Frame Count, CPU Load Average, Real-Time Clock and Input.<br />
** Improve the appearance of Inputs by using actual images of buttons instead of textual characters. (Do this in this release cycle?)<br />
** Add support for Graphical Input. (Is this even necessary if the previously proposed improvements to HUD Inputs are done? Do this in this release cycle?)<br />
** Would also be nice to add some app status animations to the HUD. Some important app status things to show would be: When no ROM is loaded, when a save state is loaded/unloaded, which execution state the emulator is in (Execute/Pause/Frame Step/Frame Jump), and so on. (Do this in this release cycle?)<br />
* Add replay editing tools that are viable for TAS users. (Likely will be pushed to the next release cycle.)<br />
* Add support for the various NDS tools. (Likely will be pushed to the next release cycle.)<br />
* Add support for recording audio and video. (Likely will be pushed to the next release cycle.)<br />
* Complete support for Retina displays. (DONE!)<br />
* Fix full screen display behaviors on OS X Mavericks and later. (DONE!)<br />
* Confirm compiling and building on Xcode 7 and Xcode 8. (DONE!)<br />
<br />
=== Final results ===<br />
TBD. This version is yet to be released.<br />
<br />
=== Post-release issues and notes ===<br />
TBD. This version is yet to be released.</div>Rogermanhttps://wiki.desmume.org/index.php?title=Cocoa_frontend_todoCocoa frontend todo2016-02-12T19:06:52Z<p>Rogerman: /* v0.9.12 (TBD) */</p>
<hr />
<div>== Overview of Release History ==<br />
<br />
=== The First Cocoa Front End ===<br />
The first release of the Cocoa front end was v0.7.3, released on August 12, 2007.<br />
<br />
=== The Temporary Move to the GTK Front End ===<br />
Due to lack of developer support, the Cocoa code base was shelved after the release of v0.9.4. On November 27, 2009, v0.9.5 was released for OS X using the GTK front end. The last release using the GTK front end was v0.9.6, released on May 19, 2010.<br />
<br />
=== The Return to the Cocoa Front End ===<br />
On February 1, 2011, v0.9.7 was released for Windows, and also for Linux using the GTK. However, there were issues that were specific to the OS X GTK build which prevented its release for months. At this time, the Cocoa code base from v0.9.4 was updated to work with v0.9.7, and was finally released for OS X on April 30, 2011.<br />
<br />
<br />
== v0.9.7 (Released on April 30, 2011) ==<br />
This version returns the OS X port back to its Cocoa roots. Returning the OS X port to a Cocoa codebase is extremely important for improving the UI, optimizing performance, and improving stability.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The GTK front end had a UI that was not Mac-friendly.<br />
* The application was unstable and frequently suffered application-level crashes, especially when the UI was manipulated.<br />
* Performance was poor all around. Emulation performance was especially poor.<br />
* Universal binaries are not possible for the GTK front end.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Make the Cocoa front end the primary Mac front end.<br />
* Make the Cocoa code base the main code base for the OS X port.<br />
* Greatly improve application stability.<br />
* Bring back universal binaries.<br />
* Get this version released as quickly as possible, since the OS X port is already months behind the others.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Unshelve the code base from v0.9.4 and update it to v0.9.7 standards. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The OS X port no longer suffers from application-level crashes, the UI is now Mac-native, and the application bundle now has a universal binary.<br />
* Overall performance has improved significantly since v0.9.6. UI performance is greatly improved, but emulation performance is still at least 20%-40% slower than the Windows port for most games.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Even though v0.9.7 has binary compatibility with OS X v10.4, there are many issues when running on v10.4, especially with missing 3D graphics.<br />
* The Cocoa code base is extremely messy and uses many older coding conventions. This makes it difficult to maintain and even more difficult to add new features. Due to these reasons, a total rewrite of the Cocoa code base is necessary in order to move the OS X port forward.<br />
* There was an uncaught bug in this release where touch coordinates didn't map correctly on rotated screens. This bug will need to be fixed.<br />
<br />
<br />
== v0.9.8 (Released on April 9, 2012) ==<br />
This version is all about building a better future for the OS X port. Although this means having to rebuild the Cocoa code base from scratch, this is a necessary first step in providing a stable foundation for future enhancements.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Emulation performance is still poor.<br />
* The UI is very clunky, and certain parts of the UI are broken.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Completely rewrite the Cocoa code base from the ground up, using Objective-C 2.0, modern coding conventions, and Cocoa-bindings.<br />
* Transition the legacy Cocoa code base out of the current code base.<br />
* Expose as many settings in the user interface as possible.<br />
* Improve emulation performance.<br />
* Improve the user interface.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the project files to be compatible with both Xcode 3 and Xcode 4. (DONE!)<br />
* Update build targets to prefer the latest version of LLVM/Clang. (DONE!)<br />
* Transition all legacy files out of the main project files, and rename legacy files with a legacy suffix. (DONE!)<br />
<br />
<br />
* Add finder icons for readable files. (DONE!)<br />
* Expose all emulation, firmware, SPU, and SoftRasterizer options in the UI. (DONE!)<br />
* Add mouseover tooltips for all settings. (DONE!)<br />
* Add a toolbar to the main emulation window. (DONE!)<br />
* Add more user feedback messages to the status bar. (DONE!)<br />
* Add a volume slider to the status bar, and remove the Sound menu. (DONE!)<br />
* Completely revamp the DeSmuME Preferences window. (DONE!)<br />
* Make external save state files behave like normal document files. (DONE!)<br />
* Expose all available ROM information in the ROM Info panel. (DONE!)<br />
* Make ROM title strings Unicode aware. (DONE!)<br />
* Change the behavior of the close window control, where clicking on it while a ROM is loaded will close the ROM. (DONE!)<br />
<br />
<br />
* Add the ability to change the window display mode. (DONE!)<br />
* Add Bilinear Filtering option for the display window. (DONE!)<br />
* Add video filter support for the display window. (DONE!)<br />
* Add the ability to rotate the display to any arbitrary rotation angle. (DONE!)<br />
* Add the ability to take screenshots using Edit > Copy. (DONE!)<br />
* Add the ability to save screenshot files in several different image file formats. (DONE!)<br />
* Add support for using an ADVANsCEne database for checking ROM properties. (DONE!)<br />
* Add the Cheat Manager, allowing for Action Replay codes and an internal value search tool. (DONE!)<br />
* Add the ability to import Action Replay codes from an R4 Cheat Database. (DONE!)<br />
* Add the ability to import and export ROM save files in RAW and No$GBA formats. (DONE!)<br />
* Add the File Migration Assistant to help users migrate files from previous versions. (DONE!)<br />
<br />
<br />
* Add support for mapping Lid and Debug controls. (DONE!)<br />
* Add fake mic support. (WORKING)<br />
* Add the ability to map input to user-defined touch coordinates. (DROPPED)<br />
* Allow for all non-modifier keys on a keyboard to be used as an input mapping. (DONE!)<br />
* Allow all HID devices to be used for input mappings. (DONE!)<br />
<br />
<br />
* Add automatic frameskip. (DONE!)<br />
* Make ROM cartridge files load on a separate thread. (DONE!)<br />
* Rework the main emulation loop to be as lightweight as possible. (DONE!)<br />
* Rework the multithreading code to work with SoftRasterizer. (DONE!)<br />
* Remove all Objective-C code from the sound code and optimize it. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Fake mic support only works with internal noise samples and white noise samples. External audio files didn't make it into the final release.<br />
* The feature to map inputs to user-defined touch coordinates was dropped due to release time constraints.<br />
* Performance is greatly improved in this version. UI performance is now "snappy". A combination of Cocoa-bindings, code design choices, and UI optimizations have made for an extremely responsive and usable UI. Emulation performance is also dramatically improved, now being only 5% slower than the Windows port.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Users running OS X v10.8 Mountain Lion are having issues with blank/white screens. This is most likely a bug related to the OpenGL blitter, and is considered critical.<br />
* A new bug was introduced where using Dual SPU Synch/Asynch mode would cause an application-level crash. This is a critical bug that is related to the sound threading code.<br />
* Physical microphone support seems to be an important feature to include in the next version.<br />
* Input handling was rewritten for this release and is an improvement compared to the last version, but the code is already showing its limitations. The input handling code will need to be rewritten once again in the next release.<br />
* This release has been considered a very large success for the OS X port.<br />
<br />
<br />
== v0.9.8b (Released on August 6, 2012) ==<br />
This version is different from all other versions in that this version is purely a bug-fix release. This version is being released in response to Apple's release of OS X v10.8 Mountain Lion.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the critical bugs.<br />
* Get this version released as quickly as possible, in response to the Mountain Lion release.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix the critical bugs. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The display window now works with Mountain Lion, and using Dual SPU Synch/Asynch no longer crashes the application.<br />
* Besides the bug fixes, this version is identical to v0.9.8.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* None.<br />
<br />
<br />
== v0.9.9 (Released on April 30, 2013) ==<br />
Initially, this version was meant to be an optimization and maintenance release. It was also meant to further modernize the code base in response to the further obsolescence of Xcode 3 in Mountain Lion. However, due to the length of time since the last release, this version also added several new features.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Transition the code base from using the 10.5 SDK and being forward compatible to using the latest SDK and being backwards compatible to OS X v10.5.<br />
* Integrate the new JIT CPU emulation engine.<br />
* Update the OpenGL blitter to use modern OpenGL functions, and then optimize it.<br />
* Add support for the OpenGL 3D renderer.<br />
* Refactor the input handling code so that it's all gathered in one place, and also sits at the UI level.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the Xcode project files to use the latest installed SDK, then add new build targets specifically for OS X v10.5 releases. (DONE!)<br />
* Add support for the JIT CPU emulation engine. (DONE!)<br />
* Add support for the OpenGL 3D renderer. (DONE!)<br />
* Completely eliminate the usage of fixed-function pipeline OpenGL code from the OpenGL blitter. (DONE!)<br />
* Refactor and rewrite the input handling code. (DONE!)<br />
<br />
<br />
* Add Rigorous 3D Rendering Timing option. (DONE!)<br />
* Add the SLOT-1 Manager, allowing the configuration of SLOT-1 properties. (DONE!)<br />
<br />
<br />
* Add the ability to use multiple display windows, each with individual display settings. (DONE!)<br />
* Show the ROM name and ROM icon of the currently loaded ROM in the display window title bar. (DONE!)<br />
* Add support for the HUD. (DROPPED)<br />
* Add Vertical Sync option for display windows. (DONE!)<br />
* Add Display Orientation option for display windows. (DONE!)<br />
* Add Display Order option for display windows. (DONE!)<br />
* Add Display Separation option for display windows. (DONE!)<br />
* Add HQ4xS video filter. (DONE!)<br />
<br />
<br />
* Add the ability to map multiple input devices to the same command. (DONE!)<br />
* Add the ability to map mice and other pointer-type devices to commands other than Touch. (DONE!)<br />
* Add the ability to map an input device to any command. (DONE!)<br />
* Add the ability to map an input device to user-defined touch coordinates. (DONE!)<br />
* Add the ability to save and load input profiles. (DONE!)<br />
* Complete microphone support. (WORKING)<br />
* Revamp the Input Preferences UI to accommodate all the new input handling features. (DONE!)<br />
<br />
<br />
* Make the items in the File Migration Window properly sorted by version. (DONE!)<br />
* Add Select All and Select None commands in the File Migration Window. (DONE!)<br />
* Add some user-friendly forms for users to receive technical support and submit bug reports. (DONE!)<br />
* Add more system information to the About box. (DONE!)<br />
* Add Help documentation. (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version, and more.<br />
* The input handling code is now where it needs to be. No more rewrites are necessary anymore.<br />
* External audio files may now be used for the fake mic, but physical mic support still isn't there. This will have to be a top priority for the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* A bug was introduced where setting the display mode to Main or Touch as default would create display windows that draw incorrectly.<br />
* A bug was introduced where the R4 path in the SLOT-1 Manager wouldn't properly set.<br />
* A bug was introduced where loading certain audio files for the audio sample generator would cause a crash.<br />
* A bug was introduced where analog HID-inputs would sometimes fail to register.<br />
<br />
<br />
== v0.9.10 (November 28, 2013) ==<br />
This release is meant to further modernize DeSmuME to use the latest and greatest optimizations from the new Xcode 5, as well as modernize the UI with new OS X human interface paradigms. Finally, the Legacy port needs to be obsoleted.<br />
<br />
This release was supposed to be the "add new features" release, and some of those features already made it into v0.9.9. This release is here to finish the work that was started in v0.9.9, with the most important features being SLOT-2 device support and physical microphone support.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The v0.9.9 release brought a lot of new features. But along with those new features, came some new bugs. Those bugs will need to be fixed.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the bugs introduced from the v0.9.9 release.<br />
* Finish adding the features that were first started in v0.9.9:<br />
** Add full support for all SLOT-2 devices.<br />
** Complete the microphone feature by adding physical microphone support.<br />
** Add HUD support.<br />
** Add support for basic replay recording and playback.<br />
** Add TAS-friendly controls.<br />
** Make displays go full screen.<br />
* With the recent release of Xcode 5, try out some new optimizations and see if they improve performance without breaking anything.<br />
* Begin modernizing the UI. Some specific elements would include:<br />
** ROM Info panel<br />
** SLOT-1 Manager window<br />
** File Migration Assistant window<br />
** Change radio button lists w/ button into pull-down menus as appropriate<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further reduce reliance on the user interacting with the file system directly.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DROPPED)<br />
* Complete microphone feature by adding physical microphone support. (DROPPED)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (DROPPED)<br />
* Add Frame Advance control. (DROPPED)<br />
* Show the frame number. (DROPPED)<br />
* Reintegrate GDB stub support. (DROPPED)<br />
<br />
<br />
* Use Xcode 5's new -Ofast and -fvectorize optimizations. (DONE!)<br />
* Use --ffast-math optimization. (DONE!)<br />
<br />
<br />
* Add the ability for display windows to enter full screen mode. (DONE!)<br />
* Save the positions and settings of any remaining display windows upon app exit. (DONE!)<br />
* Create AppleScript for deleting the user defaults files. (DONE!)<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* The goals of adding new features were not met for this version.<br />
* Due to this release happening much quicker than anticipated, many planned features for this release were dropped.<br />
* In the end, this turned out to be more of a modernization and bug fix release more than anything else. New features will have to be pushed to the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* During release testing, it was found that recent code changes broke the loading of ROMs on big-endian systems. Therefore, PPC support was dropped during release testing in order to get this release out on time. There will need to be a maintenance release made to address this issue.<br />
* SourceForge changed their URLs the DeSmuME project, so the Bug Report URL is now incorrect.<br />
* A user complained about choppy video, which was determined to be auto frameskip being too aggressive. This will need to be dealt with somehow, as FPS can have some wild jumps under certain conditions.<br />
<br />
* Saving the positions and settings of the remaining display windows upon app exit is a great feature. It would be a good idea to save more settings upon app exit as appropriate. OS X is heading in a direction where app settings should be restorable between app launches, and DeSmuME needs to start doing the same.<br />
<br />
<br />
== v0.9.10b (December 18, 2013) ==<br />
This is strictly a maintenance release made to address the post-release issues from v0.9.10.<br />
<br />
=== Major issues from the previous version ===<br />
* Fix ROM loading on PPC.<br />
* Fix auto frameskip being overly aggressive.<br />
<br />
=== Main goals for this version ===<br />
* Fix the noted issues from the previous version.<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix ROM loading on big-endian systems. (DONE!)<br />
* Make frame rate transitions smoother, and make auto frame skip slightly less aggressive. (DONE!)<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Besides being able to load ROMs on PPC and the better auto frame skip algorithm, this version is identical to v0.9.10.<br />
<br />
=== Post-release issues and notes ===<br />
* This version has the stability that v0.9.9 was intended to bring. The next version really needs to push new features.<br />
* The most glaring missing features are the lack of SLOT-2 device support and the lack of the physical microphone. Adding these features should be top priority.<br />
* The font changes in OS X Yosemite have affected the appearance of text in some UI controls. This will need to be fixed.<br />
<br />
<br />
== v0.9.11 (April 14, 2015) ==<br />
This version is meant above all else to be a features release. The improved stability and modernized code base of v0.9.10 gave a strong foundation to build upon, so now it's time to take advantage of it!<br />
<br />
=== Major issues from the previous version ===<br />
* New features intended to be present in the previous release were not added.<br />
<br />
=== Main goals for this version ===<br />
* Add new features!<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further modernize the UI with current Apple human interface paradigms. Ensure that the UI looks good for all OS X versions from Leopard to Yosemite.<br />
* Try out Xcode 6's new PGO optimization.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DONE!)<br />
* Complete microphone feature by adding physical microphone support. (DONE!)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (PARTIAL)<br />
* Add new Execution Control panel, that adds new Frame Advance and Frame Jump controls, as well as integrates the execution speed controls, all in one single panel. (DONE!)<br />
* Reintegrate GDB stub support. (DONE!)<br />
* Add ability to run pixel scalers on the GPU. (DONE!)<br />
* Add additional video output filters. (DONE!)<br />
* Add support for turbo and autohold. (DONE!)<br />
<br />
* Use Xcode 6's new PGO optimization. (DONE!)<br />
* Obsolete the Legacy port. (DONE!)<br />
<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window. (DONE!)<br />
* Add support for App Nap in OS X Mavericks and later. (DONE!)<br />
* Fix UI issues with OS X Yosemite. (DONE!)<br />
<br />
=== Final results ===<br />
* Most of the goals were met for this version. Many new features were added, including some which were not originally planned in v0.9.10.<br />
* The only features that were not included were:<br />
** HUD support: It would be better to run this within OpenGL instead of hacking libagg to work in the Cocoa port. Of course, running the entire HUD in OpenGL will require an entirely new drawing engine, so this will take some time to figure out.<br />
** Replay Record/Playback: Basic functionality is included. However, full functionality, in which the user can viably edit replays within DeSmuME, is going to be a long road ahead. HUD support, Lua support, RAM Watch/Search, and a replay editor like Bizhawk's TAS Studio will be required. This will be a major undertaking.<br />
* Now that the Legacy port is gone, the project has been modernized a great deal. This should make it much easier for new Mac developers to jump into the project.<br />
* Overall, I'm very happy with this release. There was a lot of time between this release and v0.9.10, so it was possible to get a lot of testing done for this one, despite the many new features. I feel like this release is stable enough to warrant the next release, v0.9.12, to be another feature-focused release.<br />
<br />
=== Post-release issues and notes ===<br />
* On Retina displays, the display window OpenGL context as well as other various UI elements are still rendered in normal resolution.<br />
* On OS X Mavericks and later, running a full screen display on any monitor other than the primary monitor will cause the dock and menu bar to remain visible, unless the primary monitor is also running a full screen display.<br />
<br />
== v0.9.12 (TBD) ==<br />
This version will focus on adding to the Cocoa port any remaining features that are currently present in the Windows port. The final goal: Full feature parity with the Windows port. Once this is achieved, then a lot of options open up for adding brand new features, as well as restructuring of the core itself to bring new levels of emulation compatibility and performance.<br />
<br />
I've also noticed, after doing much testing of v0.9.11 and comparing it to the Windows port, as well as the various Linux ports, it's very clear that the feature disparity between frontends is becoming greater. In the future, we will need to unify the look and feel of the various frontends for the purpose of improving the user experience and making our tech support easier. While this release will not focus on actually unifying the frontends, it will lay down much of the groundwork for doing so in v0.9.13.<br />
<br />
=== Major issues from the previous version ===<br />
* Need to fully support Retina displays.<br />
* Fix full screen display behaviors on OS X Mavericks and later.<br />
<br />
=== Main goals for this version ===<br />
* Full feature parity with the Windows port.<br />
* Refactor the core source functionality so that all communication between core and high-level UI goes through a common frontend layer. Have the Cocoa port make use of the common frontend layer.<br />
* Ensure build compatibility through Xcode 7.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add HUD support. (IN PROGRESS)<br />
** All of the foundation work is finished with the new OpenGL-based text renderer, as well as the related UI work.<br />
** Currently, there is support for displaying the Video FPS, 3D Renderer FPS, Frame Index, Lag Frame Count, CPU Load Average and Real-Time Clock.<br />
** Adding a HUD display for the Input is in progress.<br />
** Would also be nice to add some app status animations to the HUD. Some important app status things to show would be: When no ROM is loaded, when a save state is loaded/unloaded, which execution state the emulator is in (Execute/Pause/Frame Step/Frame Jump), and so on.<br />
* Add replay editing tools that are viable for TAS users.<br />
* Add support for the various NDS tools.<br />
* Add support for recording audio and video.<br />
* Complete support for Retina displays. (DONE!)<br />
* Fix full screen display behaviors on OS X Mavericks and later. (DONE!)<br />
* Confirm compiling and building on Xcode 7. (DONE!)<br />
<br />
=== Final results ===<br />
TBD. This version is yet to be released.<br />
<br />
=== Post-release issues and notes ===<br />
TBD. This version is yet to be released.</div>Rogermanhttps://wiki.desmume.org/index.php?title=Cocoa_frontend_todoCocoa frontend todo2015-10-28T07:45:20Z<p>Rogerman: /* v0.9.12 (TBD) */</p>
<hr />
<div>== Overview of Release History ==<br />
<br />
=== The First Cocoa Front End ===<br />
The first release of the Cocoa front end was v0.7.3, released on August 12, 2007.<br />
<br />
=== The Temporary Move to the GTK Front End ===<br />
Due to lack of developer support, the Cocoa code base was shelved after the release of v0.9.4. On November 27, 2009, v0.9.5 was released for OS X using the GTK front end. The last release using the GTK front end was v0.9.6, released on May 19, 2010.<br />
<br />
=== The Return to the Cocoa Front End ===<br />
On February 1, 2011, v0.9.7 was released for Windows, and also for Linux using the GTK. However, there were issues that were specific to the OS X GTK build which prevented its release for months. At this time, the Cocoa code base from v0.9.4 was updated to work with v0.9.7, and was finally released for OS X on April 30, 2011.<br />
<br />
<br />
== v0.9.7 (Released on April 30, 2011) ==<br />
This version returns the OS X port back to its Cocoa roots. Returning the OS X port to a Cocoa codebase is extremely important for improving the UI, optimizing performance, and improving stability.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The GTK front end had a UI that was not Mac-friendly.<br />
* The application was unstable and frequently suffered application-level crashes, especially when the UI was manipulated.<br />
* Performance was poor all around. Emulation performance was especially poor.<br />
* Universal binaries are not possible for the GTK front end.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Make the Cocoa front end the primary Mac front end.<br />
* Make the Cocoa code base the main code base for the OS X port.<br />
* Greatly improve application stability.<br />
* Bring back universal binaries.<br />
* Get this version released as quickly as possible, since the OS X port is already months behind the others.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Unshelve the code base from v0.9.4 and update it to v0.9.7 standards. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The OS X port no longer suffers from application-level crashes, the UI is now Mac-native, and the application bundle now has a universal binary.<br />
* Overall performance has improved significantly since v0.9.6. UI performance is greatly improved, but emulation performance is still at least 20%-40% slower than the Windows port for most games.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Even though v0.9.7 has binary compatibility with OS X v10.4, there are many issues when running on v10.4, especially with missing 3D graphics.<br />
* The Cocoa code base is extremely messy and uses many older coding conventions. This makes it difficult to maintain and even more difficult to add new features. Due to these reasons, a total rewrite of the Cocoa code base is necessary in order to move the OS X port forward.<br />
* There was an uncaught bug in this release where touch coordinates didn't map correctly on rotated screens. This bug will need to be fixed.<br />
<br />
<br />
== v0.9.8 (Released on April 9, 2012) ==<br />
This version is all about building a better future for the OS X port. Although this means having to rebuild the Cocoa code base from scratch, this is a necessary first step in providing a stable foundation for future enhancements.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Emulation performance is still poor.<br />
* The UI is very clunky, and certain parts of the UI are broken.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Completely rewrite the Cocoa code base from the ground up, using Objective-C 2.0, modern coding conventions, and Cocoa-bindings.<br />
* Transition the legacy Cocoa code base out of the current code base.<br />
* Expose as many settings in the user interface as possible.<br />
* Improve emulation performance.<br />
* Improve the user interface.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the project files to be compatible with both Xcode 3 and Xcode 4. (DONE!)<br />
* Update build targets to prefer the latest version of LLVM/Clang. (DONE!)<br />
* Transition all legacy files out of the main project files, and rename legacy files with a legacy suffix. (DONE!)<br />
<br />
<br />
* Add finder icons for readable files. (DONE!)<br />
* Expose all emulation, firmware, SPU, and SoftRasterizer options in the UI. (DONE!)<br />
* Add mouseover tooltips for all settings. (DONE!)<br />
* Add a toolbar to the main emulation window. (DONE!)<br />
* Add more user feedback messages to the status bar. (DONE!)<br />
* Add a volume slider to the status bar, and remove the Sound menu. (DONE!)<br />
* Completely revamp the DeSmuME Preferences window. (DONE!)<br />
* Make external save state files behave like normal document files. (DONE!)<br />
* Expose all available ROM information in the ROM Info panel. (DONE!)<br />
* Make ROM title strings Unicode aware. (DONE!)<br />
* Change the behavior of the close window control, where clicking on it while a ROM is loaded will close the ROM. (DONE!)<br />
<br />
<br />
* Add the ability to change the window display mode. (DONE!)<br />
* Add Bilinear Filtering option for the display window. (DONE!)<br />
* Add video filter support for the display window. (DONE!)<br />
* Add the ability to rotate the display to any arbitrary rotation angle. (DONE!)<br />
* Add the ability to take screenshots using Edit > Copy. (DONE!)<br />
* Add the ability to save screenshot files in several different image file formats. (DONE!)<br />
* Add support for using an ADVANsCEne database for checking ROM properties. (DONE!)<br />
* Add the Cheat Manager, allowing for Action Replay codes and an internal value search tool. (DONE!)<br />
* Add the ability to import Action Replay codes from an R4 Cheat Database. (DONE!)<br />
* Add the ability to import and export ROM save files in RAW and No$GBA formats. (DONE!)<br />
* Add the File Migration Assistant to help users migrate files from previous versions. (DONE!)<br />
<br />
<br />
* Add support for mapping Lid and Debug controls. (DONE!)<br />
* Add fake mic support. (WORKING)<br />
* Add the ability to map input to user-defined touch coordinates. (DROPPED)<br />
* Allow for all non-modifier keys on a keyboard to be used as an input mapping. (DONE!)<br />
* Allow all HID devices to be used for input mappings. (DONE!)<br />
<br />
<br />
* Add automatic frameskip. (DONE!)<br />
* Make ROM cartridge files load on a separate thread. (DONE!)<br />
* Rework the main emulation loop to be as lightweight as possible. (DONE!)<br />
* Rework the multithreading code to work with SoftRasterizer. (DONE!)<br />
* Remove all Objective-C code from the sound code and optimize it. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Fake mic support only works with internal noise samples and white noise samples. External audio files didn't make it into the final release.<br />
* The feature to map inputs to user-defined touch coordinates was dropped due to release time constraints.<br />
* Performance is greatly improved in this version. UI performance is now "snappy". A combination of Cocoa-bindings, code design choices, and UI optimizations have made for an extremely responsive and usable UI. Emulation performance is also dramatically improved, now being only 5% slower than the Windows port.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Users running OS X v10.8 Mountain Lion are having issues with blank/white screens. This is most likely a bug related to the OpenGL blitter, and is considered critical.<br />
* A new bug was introduced where using Dual SPU Synch/Asynch mode would cause an application-level crash. This is a critical bug that is related to the sound threading code.<br />
* Physical microphone support seems to be an important feature to include in the next version.<br />
* Input handling was rewritten for this release and is an improvement compared to the last version, but the code is already showing its limitations. The input handling code will need to be rewritten once again in the next release.<br />
* This release has been considered a very large success for the OS X port.<br />
<br />
<br />
== v0.9.8b (Released on August 6, 2012) ==<br />
This version is different from all other versions in that this version is purely a bug-fix release. This version is being released in response to Apple's release of OS X v10.8 Mountain Lion.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the critical bugs.<br />
* Get this version released as quickly as possible, in response to the Mountain Lion release.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix the critical bugs. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The display window now works with Mountain Lion, and using Dual SPU Synch/Asynch no longer crashes the application.<br />
* Besides the bug fixes, this version is identical to v0.9.8.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* None.<br />
<br />
<br />
== v0.9.9 (Released on April 30, 2013) ==<br />
Initially, this version was meant to be an optimization and maintenance release. It was also meant to further modernize the code base in response to the further obsolescence of Xcode 3 in Mountain Lion. However, due to the length of time since the last release, this version also added several new features.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Transition the code base from using the 10.5 SDK and being forward compatible to using the latest SDK and being backwards compatible to OS X v10.5.<br />
* Integrate the new JIT CPU emulation engine.<br />
* Update the OpenGL blitter to use modern OpenGL functions, and then optimize it.<br />
* Add support for the OpenGL 3D renderer.<br />
* Refactor the input handling code so that it's all gathered in one place, and also sits at the UI level.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the Xcode project files to use the latest installed SDK, then add new build targets specifically for OS X v10.5 releases. (DONE!)<br />
* Add support for the JIT CPU emulation engine. (DONE!)<br />
* Add support for the OpenGL 3D renderer. (DONE!)<br />
* Completely eliminate the usage of fixed-function pipeline OpenGL code from the OpenGL blitter. (DONE!)<br />
* Refactor and rewrite the input handling code. (DONE!)<br />
<br />
<br />
* Add Rigorous 3D Rendering Timing option. (DONE!)<br />
* Add the SLOT-1 Manager, allowing the configuration of SLOT-1 properties. (DONE!)<br />
<br />
<br />
* Add the ability to use multiple display windows, each with individual display settings. (DONE!)<br />
* Show the ROM name and ROM icon of the currently loaded ROM in the display window title bar. (DONE!)<br />
* Add support for the HUD. (DROPPED)<br />
* Add Vertical Sync option for display windows. (DONE!)<br />
* Add Display Orientation option for display windows. (DONE!)<br />
* Add Display Order option for display windows. (DONE!)<br />
* Add Display Separation option for display windows. (DONE!)<br />
* Add HQ4xS video filter. (DONE!)<br />
<br />
<br />
* Add the ability to map multiple input devices to the same command. (DONE!)<br />
* Add the ability to map mice and other pointer-type devices to commands other than Touch. (DONE!)<br />
* Add the ability to map an input device to any command. (DONE!)<br />
* Add the ability to map an input device to user-defined touch coordinates. (DONE!)<br />
* Add the ability to save and load input profiles. (DONE!)<br />
* Complete microphone support. (WORKING)<br />
* Revamp the Input Preferences UI to accommodate all the new input handling features. (DONE!)<br />
<br />
<br />
* Make the items in the File Migration Window properly sorted by version. (DONE!)<br />
* Add Select All and Select None commands in the File Migration Window. (DONE!)<br />
* Add some user-friendly forms for users to receive technical support and submit bug reports. (DONE!)<br />
* Add more system information to the About box. (DONE!)<br />
* Add Help documentation. (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version, and more.<br />
* The input handling code is now where it needs to be. No more rewrites are necessary anymore.<br />
* External audio files may now be used for the fake mic, but physical mic support still isn't there. This will have to be a top priority for the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* A bug was introduced where setting the display mode to Main or Touch as default would create display windows that draw incorrectly.<br />
* A bug was introduced where the R4 path in the SLOT-1 Manager wouldn't properly set.<br />
* A bug was introduced where loading certain audio files for the audio sample generator would cause a crash.<br />
* A bug was introduced where analog HID-inputs would sometimes fail to register.<br />
<br />
<br />
== v0.9.10 (November 28, 2013) ==<br />
This release is meant to further modernize DeSmuME to use the latest and greatest optimizations from the new Xcode 5, as well as modernize the UI with new OS X human interface paradigms. Finally, the Legacy port needs to be obsoleted.<br />
<br />
This release was supposed to be the "add new features" release, and some of those features already made it into v0.9.9. This release is here to finish the work that was started in v0.9.9, with the most important features being SLOT-2 device support and physical microphone support.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The v0.9.9 release brought a lot of new features. But along with those new features, came some new bugs. Those bugs will need to be fixed.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the bugs introduced from the v0.9.9 release.<br />
* Finish adding the features that were first started in v0.9.9:<br />
** Add full support for all SLOT-2 devices.<br />
** Complete the microphone feature by adding physical microphone support.<br />
** Add HUD support.<br />
** Add support for basic replay recording and playback.<br />
** Add TAS-friendly controls.<br />
** Make displays go full screen.<br />
* With the recent release of Xcode 5, try out some new optimizations and see if they improve performance without breaking anything.<br />
* Begin modernizing the UI. Some specific elements would include:<br />
** ROM Info panel<br />
** SLOT-1 Manager window<br />
** File Migration Assistant window<br />
** Change radio button lists w/ button into pull-down menus as appropriate<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further reduce reliance on the user interacting with the file system directly.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DROPPED)<br />
* Complete microphone feature by adding physical microphone support. (DROPPED)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (DROPPED)<br />
* Add Frame Advance control. (DROPPED)<br />
* Show the frame number. (DROPPED)<br />
* Reintegrate GDB stub support. (DROPPED)<br />
<br />
<br />
* Use Xcode 5's new -Ofast and -fvectorize optimizations. (DONE!)<br />
* Use --ffast-math optimization. (DONE!)<br />
<br />
<br />
* Add the ability for display windows to enter full screen mode. (DONE!)<br />
* Save the positions and settings of any remaining display windows upon app exit. (DONE!)<br />
* Create AppleScript for deleting the user defaults files. (DONE!)<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* The goals of adding new features were not met for this version.<br />
* Due to this release happening much quicker than anticipated, many planned features for this release were dropped.<br />
* In the end, this turned out to be more of a modernization and bug fix release more than anything else. New features will have to be pushed to the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* During release testing, it was found that recent code changes broke the loading of ROMs on big-endian systems. Therefore, PPC support was dropped during release testing in order to get this release out on time. There will need to be a maintenance release made to address this issue.<br />
* SourceForge changed their URLs the DeSmuME project, so the Bug Report URL is now incorrect.<br />
* A user complained about choppy video, which was determined to be auto frameskip being too aggressive. This will need to be dealt with somehow, as FPS can have some wild jumps under certain conditions.<br />
<br />
* Saving the positions and settings of the remaining display windows upon app exit is a great feature. It would be a good idea to save more settings upon app exit as appropriate. OS X is heading in a direction where app settings should be restorable between app launches, and DeSmuME needs to start doing the same.<br />
<br />
<br />
== v0.9.10b (December 18, 2013) ==<br />
This is strictly a maintenance release made to address the post-release issues from v0.9.10.<br />
<br />
=== Major issues from the previous version ===<br />
* Fix ROM loading on PPC.<br />
* Fix auto frameskip being overly aggressive.<br />
<br />
=== Main goals for this version ===<br />
* Fix the noted issues from the previous version.<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix ROM loading on big-endian systems. (DONE!)<br />
* Make frame rate transitions smoother, and make auto frame skip slightly less aggressive. (DONE!)<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Besides being able to load ROMs on PPC and the better auto frame skip algorithm, this version is identical to v0.9.10.<br />
<br />
=== Post-release issues and notes ===<br />
* This version has the stability that v0.9.9 was intended to bring. The next version really needs to push new features.<br />
* The most glaring missing features are the lack of SLOT-2 device support and the lack of the physical microphone. Adding these features should be top priority.<br />
* The font changes in OS X Yosemite have affected the appearance of text in some UI controls. This will need to be fixed.<br />
<br />
<br />
== v0.9.11 (April 14, 2015) ==<br />
This version is meant above all else to be a features release. The improved stability and modernized code base of v0.9.10 gave a strong foundation to build upon, so now it's time to take advantage of it!<br />
<br />
=== Major issues from the previous version ===<br />
* New features intended to be present in the previous release were not added.<br />
<br />
=== Main goals for this version ===<br />
* Add new features!<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further modernize the UI with current Apple human interface paradigms. Ensure that the UI looks good for all OS X versions from Leopard to Yosemite.<br />
* Try out Xcode 6's new PGO optimization.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DONE!)<br />
* Complete microphone feature by adding physical microphone support. (DONE!)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (PARTIAL)<br />
* Add new Execution Control panel, that adds new Frame Advance and Frame Jump controls, as well as integrates the execution speed controls, all in one single panel. (DONE!)<br />
* Reintegrate GDB stub support. (DONE!)<br />
* Add ability to run pixel scalers on the GPU. (DONE!)<br />
* Add additional video output filters. (DONE!)<br />
* Add support for turbo and autohold. (DONE!)<br />
<br />
* Use Xcode 6's new PGO optimization. (DONE!)<br />
* Obsolete the Legacy port. (DONE!)<br />
<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window. (DONE!)<br />
* Add support for App Nap in OS X Mavericks and later. (DONE!)<br />
* Fix UI issues with OS X Yosemite. (DONE!)<br />
<br />
=== Final results ===<br />
* Most of the goals were met for this version. Many new features were added, including some which were not originally planned in v0.9.10.<br />
* The only features that were not included were:<br />
** HUD support: It would be better to run this within OpenGL instead of hacking libagg to work in the Cocoa port. Of course, running the entire HUD in OpenGL will require an entirely new drawing engine, so this will take some time to figure out.<br />
** Replay Record/Playback: Basic functionality is included. However, full functionality, in which the user can viably edit replays within DeSmuME, is going to be a long road ahead. HUD support, Lua support, RAM Watch/Search, and a replay editor like Bizhawk's TAS Studio will be required. This will be a major undertaking.<br />
* Now that the Legacy port is gone, the project has been modernized a great deal. This should make it much easier for new Mac developers to jump into the project.<br />
* Overall, I'm very happy with this release. There was a lot of time between this release and v0.9.10, so it was possible to get a lot of testing done for this one, despite the many new features. I feel like this release is stable enough to warrant the next release, v0.9.12, to be another feature-focused release.<br />
<br />
=== Post-release issues and notes ===<br />
* On Retina displays, the display window OpenGL context as well as other various UI elements are still rendered in normal resolution.<br />
* On OS X Mavericks and later, running a full screen display on any monitor other than the primary monitor will cause the dock and menu bar to remain visible, unless the primary monitor is also running a full screen display.<br />
<br />
== v0.9.12 (TBD) ==<br />
This version will focus on adding to the Cocoa port any remaining features that are currently present in the Windows port. The final goal: Full feature parity with the Windows port. Once this is achieved, then a lot of options open up for adding brand new features, as well as restructuring of the core itself to bring new levels of emulation compatibility and performance.<br />
<br />
I've also noticed, after doing much testing of v0.9.11 and comparing it to the Windows port, as well as the various Linux ports, it's very clear that the feature disparity between frontends is becoming greater. In the future, we will need to unify the look and feel of the various frontends for the purpose of improving the user experience and making our tech support easier. While this release will not focus on actually unifying the frontends, it will lay down much of the groundwork for doing so in v0.9.13.<br />
<br />
=== Major issues from the previous version ===<br />
* Need to fully support Retina displays.<br />
* Fix full screen display behaviors on OS X Mavericks and later.<br />
<br />
=== Main goals for this version ===<br />
* Full feature parity with the Windows port.<br />
* Refactor the core source functionality so that all communication between core and high-level UI goes through a common frontend layer. Have the Cocoa port make use of the common frontend layer.<br />
* Ensure build compatibility through Xcode 7.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add HUD support. (IN PROGRESS)<br />
** All of the foundation work is finished with the new OpenGL-based text renderer, as well as the related UI work.<br />
** Currently, there is support for displaying the Video FPS, 3D Renderer FPS, Frame Index, Lag Frame Count, CPU Load Average and Real-Time Clock.<br />
** Adding a HUD display for the Input is in progress.<br />
** Would also be nice to add some app status animations to the HUD. Some important app status things to show would be: When no ROM is loaded, when a save state is loaded/unloaded, which execution state the emulator is in (Execute/Pause/Frame Step/Frame Jump), and so on.<br />
* Add replay editing tools that are viable for TAS users.<br />
* Add support for the various NDS tools.<br />
* Add support for recording audio and video.<br />
* Complete support for Retina displays. (DONE!)<br />
* Confirm compiling and building on Xcode 7. (DONE!)<br />
<br />
=== Final results ===<br />
TBD. This version is yet to be released.<br />
<br />
=== Post-release issues and notes ===<br />
TBD. This version is yet to be released.</div>Rogermanhttps://wiki.desmume.org/index.php?title=Cocoa_frontend_todoCocoa frontend todo2015-10-16T21:32:42Z<p>Rogerman: /* Implementation TODO and notes */</p>
<hr />
<div>== Overview of Release History ==<br />
<br />
=== The First Cocoa Front End ===<br />
The first release of the Cocoa front end was v0.7.3, released on August 12, 2007.<br />
<br />
=== The Temporary Move to the GTK Front End ===<br />
Due to lack of developer support, the Cocoa code base was shelved after the release of v0.9.4. On November 27, 2009, v0.9.5 was released for OS X using the GTK front end. The last release using the GTK front end was v0.9.6, released on May 19, 2010.<br />
<br />
=== The Return to the Cocoa Front End ===<br />
On February 1, 2011, v0.9.7 was released for Windows, and also for Linux using the GTK. However, there were issues that were specific to the OS X GTK build which prevented its release for months. At this time, the Cocoa code base from v0.9.4 was updated to work with v0.9.7, and was finally released for OS X on April 30, 2011.<br />
<br />
<br />
== v0.9.7 (Released on April 30, 2011) ==<br />
This version returns the OS X port back to its Cocoa roots. Returning the OS X port to a Cocoa codebase is extremely important for improving the UI, optimizing performance, and improving stability.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The GTK front end had a UI that was not Mac-friendly.<br />
* The application was unstable and frequently suffered application-level crashes, especially when the UI was manipulated.<br />
* Performance was poor all around. Emulation performance was especially poor.<br />
* Universal binaries are not possible for the GTK front end.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Make the Cocoa front end the primary Mac front end.<br />
* Make the Cocoa code base the main code base for the OS X port.<br />
* Greatly improve application stability.<br />
* Bring back universal binaries.<br />
* Get this version released as quickly as possible, since the OS X port is already months behind the others.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Unshelve the code base from v0.9.4 and update it to v0.9.7 standards. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The OS X port no longer suffers from application-level crashes, the UI is now Mac-native, and the application bundle now has a universal binary.<br />
* Overall performance has improved significantly since v0.9.6. UI performance is greatly improved, but emulation performance is still at least 20%-40% slower than the Windows port for most games.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Even though v0.9.7 has binary compatibility with OS X v10.4, there are many issues when running on v10.4, especially with missing 3D graphics.<br />
* The Cocoa code base is extremely messy and uses many older coding conventions. This makes it difficult to maintain and even more difficult to add new features. Due to these reasons, a total rewrite of the Cocoa code base is necessary in order to move the OS X port forward.<br />
* There was an uncaught bug in this release where touch coordinates didn't map correctly on rotated screens. This bug will need to be fixed.<br />
<br />
<br />
== v0.9.8 (Released on April 9, 2012) ==<br />
This version is all about building a better future for the OS X port. Although this means having to rebuild the Cocoa code base from scratch, this is a necessary first step in providing a stable foundation for future enhancements.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Emulation performance is still poor.<br />
* The UI is very clunky, and certain parts of the UI are broken.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Completely rewrite the Cocoa code base from the ground up, using Objective-C 2.0, modern coding conventions, and Cocoa-bindings.<br />
* Transition the legacy Cocoa code base out of the current code base.<br />
* Expose as many settings in the user interface as possible.<br />
* Improve emulation performance.<br />
* Improve the user interface.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the project files to be compatible with both Xcode 3 and Xcode 4. (DONE!)<br />
* Update build targets to prefer the latest version of LLVM/Clang. (DONE!)<br />
* Transition all legacy files out of the main project files, and rename legacy files with a legacy suffix. (DONE!)<br />
<br />
<br />
* Add finder icons for readable files. (DONE!)<br />
* Expose all emulation, firmware, SPU, and SoftRasterizer options in the UI. (DONE!)<br />
* Add mouseover tooltips for all settings. (DONE!)<br />
* Add a toolbar to the main emulation window. (DONE!)<br />
* Add more user feedback messages to the status bar. (DONE!)<br />
* Add a volume slider to the status bar, and remove the Sound menu. (DONE!)<br />
* Completely revamp the DeSmuME Preferences window. (DONE!)<br />
* Make external save state files behave like normal document files. (DONE!)<br />
* Expose all available ROM information in the ROM Info panel. (DONE!)<br />
* Make ROM title strings Unicode aware. (DONE!)<br />
* Change the behavior of the close window control, where clicking on it while a ROM is loaded will close the ROM. (DONE!)<br />
<br />
<br />
* Add the ability to change the window display mode. (DONE!)<br />
* Add Bilinear Filtering option for the display window. (DONE!)<br />
* Add video filter support for the display window. (DONE!)<br />
* Add the ability to rotate the display to any arbitrary rotation angle. (DONE!)<br />
* Add the ability to take screenshots using Edit > Copy. (DONE!)<br />
* Add the ability to save screenshot files in several different image file formats. (DONE!)<br />
* Add support for using an ADVANsCEne database for checking ROM properties. (DONE!)<br />
* Add the Cheat Manager, allowing for Action Replay codes and an internal value search tool. (DONE!)<br />
* Add the ability to import Action Replay codes from an R4 Cheat Database. (DONE!)<br />
* Add the ability to import and export ROM save files in RAW and No$GBA formats. (DONE!)<br />
* Add the File Migration Assistant to help users migrate files from previous versions. (DONE!)<br />
<br />
<br />
* Add support for mapping Lid and Debug controls. (DONE!)<br />
* Add fake mic support. (WORKING)<br />
* Add the ability to map input to user-defined touch coordinates. (DROPPED)<br />
* Allow for all non-modifier keys on a keyboard to be used as an input mapping. (DONE!)<br />
* Allow all HID devices to be used for input mappings. (DONE!)<br />
<br />
<br />
* Add automatic frameskip. (DONE!)<br />
* Make ROM cartridge files load on a separate thread. (DONE!)<br />
* Rework the main emulation loop to be as lightweight as possible. (DONE!)<br />
* Rework the multithreading code to work with SoftRasterizer. (DONE!)<br />
* Remove all Objective-C code from the sound code and optimize it. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Fake mic support only works with internal noise samples and white noise samples. External audio files didn't make it into the final release.<br />
* The feature to map inputs to user-defined touch coordinates was dropped due to release time constraints.<br />
* Performance is greatly improved in this version. UI performance is now "snappy". A combination of Cocoa-bindings, code design choices, and UI optimizations have made for an extremely responsive and usable UI. Emulation performance is also dramatically improved, now being only 5% slower than the Windows port.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Users running OS X v10.8 Mountain Lion are having issues with blank/white screens. This is most likely a bug related to the OpenGL blitter, and is considered critical.<br />
* A new bug was introduced where using Dual SPU Synch/Asynch mode would cause an application-level crash. This is a critical bug that is related to the sound threading code.<br />
* Physical microphone support seems to be an important feature to include in the next version.<br />
* Input handling was rewritten for this release and is an improvement compared to the last version, but the code is already showing its limitations. The input handling code will need to be rewritten once again in the next release.<br />
* This release has been considered a very large success for the OS X port.<br />
<br />
<br />
== v0.9.8b (Released on August 6, 2012) ==<br />
This version is different from all other versions in that this version is purely a bug-fix release. This version is being released in response to Apple's release of OS X v10.8 Mountain Lion.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the critical bugs.<br />
* Get this version released as quickly as possible, in response to the Mountain Lion release.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix the critical bugs. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The display window now works with Mountain Lion, and using Dual SPU Synch/Asynch no longer crashes the application.<br />
* Besides the bug fixes, this version is identical to v0.9.8.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* None.<br />
<br />
<br />
== v0.9.9 (Released on April 30, 2013) ==<br />
Initially, this version was meant to be an optimization and maintenance release. It was also meant to further modernize the code base in response to the further obsolescence of Xcode 3 in Mountain Lion. However, due to the length of time since the last release, this version also added several new features.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Transition the code base from using the 10.5 SDK and being forward compatible to using the latest SDK and being backwards compatible to OS X v10.5.<br />
* Integrate the new JIT CPU emulation engine.<br />
* Update the OpenGL blitter to use modern OpenGL functions, and then optimize it.<br />
* Add support for the OpenGL 3D renderer.<br />
* Refactor the input handling code so that it's all gathered in one place, and also sits at the UI level.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the Xcode project files to use the latest installed SDK, then add new build targets specifically for OS X v10.5 releases. (DONE!)<br />
* Add support for the JIT CPU emulation engine. (DONE!)<br />
* Add support for the OpenGL 3D renderer. (DONE!)<br />
* Completely eliminate the usage of fixed-function pipeline OpenGL code from the OpenGL blitter. (DONE!)<br />
* Refactor and rewrite the input handling code. (DONE!)<br />
<br />
<br />
* Add Rigorous 3D Rendering Timing option. (DONE!)<br />
* Add the SLOT-1 Manager, allowing the configuration of SLOT-1 properties. (DONE!)<br />
<br />
<br />
* Add the ability to use multiple display windows, each with individual display settings. (DONE!)<br />
* Show the ROM name and ROM icon of the currently loaded ROM in the display window title bar. (DONE!)<br />
* Add support for the HUD. (DROPPED)<br />
* Add Vertical Sync option for display windows. (DONE!)<br />
* Add Display Orientation option for display windows. (DONE!)<br />
* Add Display Order option for display windows. (DONE!)<br />
* Add Display Separation option for display windows. (DONE!)<br />
* Add HQ4xS video filter. (DONE!)<br />
<br />
<br />
* Add the ability to map multiple input devices to the same command. (DONE!)<br />
* Add the ability to map mice and other pointer-type devices to commands other than Touch. (DONE!)<br />
* Add the ability to map an input device to any command. (DONE!)<br />
* Add the ability to map an input device to user-defined touch coordinates. (DONE!)<br />
* Add the ability to save and load input profiles. (DONE!)<br />
* Complete microphone support. (WORKING)<br />
* Revamp the Input Preferences UI to accommodate all the new input handling features. (DONE!)<br />
<br />
<br />
* Make the items in the File Migration Window properly sorted by version. (DONE!)<br />
* Add Select All and Select None commands in the File Migration Window. (DONE!)<br />
* Add some user-friendly forms for users to receive technical support and submit bug reports. (DONE!)<br />
* Add more system information to the About box. (DONE!)<br />
* Add Help documentation. (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version, and more.<br />
* The input handling code is now where it needs to be. No more rewrites are necessary anymore.<br />
* External audio files may now be used for the fake mic, but physical mic support still isn't there. This will have to be a top priority for the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* A bug was introduced where setting the display mode to Main or Touch as default would create display windows that draw incorrectly.<br />
* A bug was introduced where the R4 path in the SLOT-1 Manager wouldn't properly set.<br />
* A bug was introduced where loading certain audio files for the audio sample generator would cause a crash.<br />
* A bug was introduced where analog HID-inputs would sometimes fail to register.<br />
<br />
<br />
== v0.9.10 (November 28, 2013) ==<br />
This release is meant to further modernize DeSmuME to use the latest and greatest optimizations from the new Xcode 5, as well as modernize the UI with new OS X human interface paradigms. Finally, the Legacy port needs to be obsoleted.<br />
<br />
This release was supposed to be the "add new features" release, and some of those features already made it into v0.9.9. This release is here to finish the work that was started in v0.9.9, with the most important features being SLOT-2 device support and physical microphone support.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The v0.9.9 release brought a lot of new features. But along with those new features, came some new bugs. Those bugs will need to be fixed.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the bugs introduced from the v0.9.9 release.<br />
* Finish adding the features that were first started in v0.9.9:<br />
** Add full support for all SLOT-2 devices.<br />
** Complete the microphone feature by adding physical microphone support.<br />
** Add HUD support.<br />
** Add support for basic replay recording and playback.<br />
** Add TAS-friendly controls.<br />
** Make displays go full screen.<br />
* With the recent release of Xcode 5, try out some new optimizations and see if they improve performance without breaking anything.<br />
* Begin modernizing the UI. Some specific elements would include:<br />
** ROM Info panel<br />
** SLOT-1 Manager window<br />
** File Migration Assistant window<br />
** Change radio button lists w/ button into pull-down menus as appropriate<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further reduce reliance on the user interacting with the file system directly.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DROPPED)<br />
* Complete microphone feature by adding physical microphone support. (DROPPED)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (DROPPED)<br />
* Add Frame Advance control. (DROPPED)<br />
* Show the frame number. (DROPPED)<br />
* Reintegrate GDB stub support. (DROPPED)<br />
<br />
<br />
* Use Xcode 5's new -Ofast and -fvectorize optimizations. (DONE!)<br />
* Use --ffast-math optimization. (DONE!)<br />
<br />
<br />
* Add the ability for display windows to enter full screen mode. (DONE!)<br />
* Save the positions and settings of any remaining display windows upon app exit. (DONE!)<br />
* Create AppleScript for deleting the user defaults files. (DONE!)<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* The goals of adding new features were not met for this version.<br />
* Due to this release happening much quicker than anticipated, many planned features for this release were dropped.<br />
* In the end, this turned out to be more of a modernization and bug fix release more than anything else. New features will have to be pushed to the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* During release testing, it was found that recent code changes broke the loading of ROMs on big-endian systems. Therefore, PPC support was dropped during release testing in order to get this release out on time. There will need to be a maintenance release made to address this issue.<br />
* SourceForge changed their URLs the DeSmuME project, so the Bug Report URL is now incorrect.<br />
* A user complained about choppy video, which was determined to be auto frameskip being too aggressive. This will need to be dealt with somehow, as FPS can have some wild jumps under certain conditions.<br />
<br />
* Saving the positions and settings of the remaining display windows upon app exit is a great feature. It would be a good idea to save more settings upon app exit as appropriate. OS X is heading in a direction where app settings should be restorable between app launches, and DeSmuME needs to start doing the same.<br />
<br />
<br />
== v0.9.10b (December 18, 2013) ==<br />
This is strictly a maintenance release made to address the post-release issues from v0.9.10.<br />
<br />
=== Major issues from the previous version ===<br />
* Fix ROM loading on PPC.<br />
* Fix auto frameskip being overly aggressive.<br />
<br />
=== Main goals for this version ===<br />
* Fix the noted issues from the previous version.<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix ROM loading on big-endian systems. (DONE!)<br />
* Make frame rate transitions smoother, and make auto frame skip slightly less aggressive. (DONE!)<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Besides being able to load ROMs on PPC and the better auto frame skip algorithm, this version is identical to v0.9.10.<br />
<br />
=== Post-release issues and notes ===<br />
* This version has the stability that v0.9.9 was intended to bring. The next version really needs to push new features.<br />
* The most glaring missing features are the lack of SLOT-2 device support and the lack of the physical microphone. Adding these features should be top priority.<br />
* The font changes in OS X Yosemite have affected the appearance of text in some UI controls. This will need to be fixed.<br />
<br />
<br />
== v0.9.11 (April 14, 2015) ==<br />
This version is meant above all else to be a features release. The improved stability and modernized code base of v0.9.10 gave a strong foundation to build upon, so now it's time to take advantage of it!<br />
<br />
=== Major issues from the previous version ===<br />
* New features intended to be present in the previous release were not added.<br />
<br />
=== Main goals for this version ===<br />
* Add new features!<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further modernize the UI with current Apple human interface paradigms. Ensure that the UI looks good for all OS X versions from Leopard to Yosemite.<br />
* Try out Xcode 6's new PGO optimization.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DONE!)<br />
* Complete microphone feature by adding physical microphone support. (DONE!)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (PARTIAL)<br />
* Add new Execution Control panel, that adds new Frame Advance and Frame Jump controls, as well as integrates the execution speed controls, all in one single panel. (DONE!)<br />
* Reintegrate GDB stub support. (DONE!)<br />
* Add ability to run pixel scalers on the GPU. (DONE!)<br />
* Add additional video output filters. (DONE!)<br />
* Add support for turbo and autohold. (DONE!)<br />
<br />
* Use Xcode 6's new PGO optimization. (DONE!)<br />
* Obsolete the Legacy port. (DONE!)<br />
<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window. (DONE!)<br />
* Add support for App Nap in OS X Mavericks and later. (DONE!)<br />
* Fix UI issues with OS X Yosemite. (DONE!)<br />
<br />
=== Final results ===<br />
* Most of the goals were met for this version. Many new features were added, including some which were not originally planned in v0.9.10.<br />
* The only features that were not included were:<br />
** HUD support: It would be better to run this within OpenGL instead of hacking libagg to work in the Cocoa port. Of course, running the entire HUD in OpenGL will require an entirely new drawing engine, so this will take some time to figure out.<br />
** Replay Record/Playback: Basic functionality is included. However, full functionality, in which the user can viably edit replays within DeSmuME, is going to be a long road ahead. HUD support, Lua support, RAM Watch/Search, and a replay editor like Bizhawk's TAS Studio will be required. This will be a major undertaking.<br />
* Now that the Legacy port is gone, the project has been modernized a great deal. This should make it much easier for new Mac developers to jump into the project.<br />
* Overall, I'm very happy with this release. There was a lot of time between this release and v0.9.10, so it was possible to get a lot of testing done for this one, despite the many new features. I feel like this release is stable enough to warrant the next release, v0.9.12, to be another feature-focused release.<br />
<br />
=== Post-release issues and notes ===<br />
* On Retina displays, the display window OpenGL context as well as other various UI elements are still rendered in normal resolution.<br />
* On OS X Mavericks and later, running a full screen display on any monitor other than the primary monitor will cause the dock and menu bar to remain visible, unless the primary monitor is also running a full screen display.<br />
<br />
== v0.9.12 (TBD) ==<br />
This version will focus on adding to the Cocoa port any remaining features that are currently present in the Windows port. The final goal: Full feature parity with the Windows port. Once this is achieved, then a lot of options open up for adding brand new features, as well as restructuring of the core itself to bring new levels of emulation compatibility and performance.<br />
<br />
I've also noticed, after doing much testing of v0.9.11 and comparing it to the Windows port, as well as the various Linux ports, it's very clear that the feature disparity between frontends is becoming greater. In the future, we will need to unify the look and feel of the various frontends for the purpose of improving the user experience and making our tech support easier. While this release will not focus on actually unifying the frontends, it will lay down much of the groundwork for doing so in v0.9.13.<br />
<br />
=== Major issues from the previous version ===<br />
* Need to fully support Retina displays.<br />
* Fix full screen display behaviors on OS X Mavericks and later.<br />
<br />
=== Main goals for this version ===<br />
* Full feature parity with the Windows port.<br />
* Refactor the core source functionality so that all communication between core and high-level UI goes through a common frontend layer. Have the Cocoa port make use of the common frontend layer.<br />
* Ensure build compatibility through Xcode 7.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add HUD support. (IN PROGRESS)<br />
** All of the foundation work is finished with the new OpenGL-based text renderer, as well as the related UI work.<br />
** Currently, there is support for displaying the Video FPS, 3D Renderer FPS, Frame Index, Lag Frame Count, and Real-Time Clock.<br />
** Adding HUD displays for the CPU Load Average, and Input are in progress.<br />
** Would also be nice to add some app status animations to the HUD. Some important app status things to show would be: When no ROM is loaded, when a save state is loaded/unloaded, which execution state the emulator is in (Execute/Pause/Frame Step/Frame Jump), and so on.<br />
* Add replay editing tools that are viable for TAS users.<br />
* Add support for the various NDS tools.<br />
* Add support for recording audio and video.<br />
* Complete support for Retina displays. (DONE!)<br />
* Confirm compiling and building on Xcode 7. (DONE!)<br />
<br />
=== Final results ===<br />
TBD. This version is yet to be released.<br />
<br />
=== Post-release issues and notes ===<br />
TBD. This version is yet to be released.</div>Rogermanhttps://wiki.desmume.org/index.php?title=Cocoa_frontend_todoCocoa frontend todo2015-10-16T18:04:50Z<p>Rogerman: /* v0.9.12 (TBD) */</p>
<hr />
<div>== Overview of Release History ==<br />
<br />
=== The First Cocoa Front End ===<br />
The first release of the Cocoa front end was v0.7.3, released on August 12, 2007.<br />
<br />
=== The Temporary Move to the GTK Front End ===<br />
Due to lack of developer support, the Cocoa code base was shelved after the release of v0.9.4. On November 27, 2009, v0.9.5 was released for OS X using the GTK front end. The last release using the GTK front end was v0.9.6, released on May 19, 2010.<br />
<br />
=== The Return to the Cocoa Front End ===<br />
On February 1, 2011, v0.9.7 was released for Windows, and also for Linux using the GTK. However, there were issues that were specific to the OS X GTK build which prevented its release for months. At this time, the Cocoa code base from v0.9.4 was updated to work with v0.9.7, and was finally released for OS X on April 30, 2011.<br />
<br />
<br />
== v0.9.7 (Released on April 30, 2011) ==<br />
This version returns the OS X port back to its Cocoa roots. Returning the OS X port to a Cocoa codebase is extremely important for improving the UI, optimizing performance, and improving stability.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The GTK front end had a UI that was not Mac-friendly.<br />
* The application was unstable and frequently suffered application-level crashes, especially when the UI was manipulated.<br />
* Performance was poor all around. Emulation performance was especially poor.<br />
* Universal binaries are not possible for the GTK front end.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Make the Cocoa front end the primary Mac front end.<br />
* Make the Cocoa code base the main code base for the OS X port.<br />
* Greatly improve application stability.<br />
* Bring back universal binaries.<br />
* Get this version released as quickly as possible, since the OS X port is already months behind the others.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Unshelve the code base from v0.9.4 and update it to v0.9.7 standards. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The OS X port no longer suffers from application-level crashes, the UI is now Mac-native, and the application bundle now has a universal binary.<br />
* Overall performance has improved significantly since v0.9.6. UI performance is greatly improved, but emulation performance is still at least 20%-40% slower than the Windows port for most games.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Even though v0.9.7 has binary compatibility with OS X v10.4, there are many issues when running on v10.4, especially with missing 3D graphics.<br />
* The Cocoa code base is extremely messy and uses many older coding conventions. This makes it difficult to maintain and even more difficult to add new features. Due to these reasons, a total rewrite of the Cocoa code base is necessary in order to move the OS X port forward.<br />
* There was an uncaught bug in this release where touch coordinates didn't map correctly on rotated screens. This bug will need to be fixed.<br />
<br />
<br />
== v0.9.8 (Released on April 9, 2012) ==<br />
This version is all about building a better future for the OS X port. Although this means having to rebuild the Cocoa code base from scratch, this is a necessary first step in providing a stable foundation for future enhancements.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Emulation performance is still poor.<br />
* The UI is very clunky, and certain parts of the UI are broken.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Completely rewrite the Cocoa code base from the ground up, using Objective-C 2.0, modern coding conventions, and Cocoa-bindings.<br />
* Transition the legacy Cocoa code base out of the current code base.<br />
* Expose as many settings in the user interface as possible.<br />
* Improve emulation performance.<br />
* Improve the user interface.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the project files to be compatible with both Xcode 3 and Xcode 4. (DONE!)<br />
* Update build targets to prefer the latest version of LLVM/Clang. (DONE!)<br />
* Transition all legacy files out of the main project files, and rename legacy files with a legacy suffix. (DONE!)<br />
<br />
<br />
* Add finder icons for readable files. (DONE!)<br />
* Expose all emulation, firmware, SPU, and SoftRasterizer options in the UI. (DONE!)<br />
* Add mouseover tooltips for all settings. (DONE!)<br />
* Add a toolbar to the main emulation window. (DONE!)<br />
* Add more user feedback messages to the status bar. (DONE!)<br />
* Add a volume slider to the status bar, and remove the Sound menu. (DONE!)<br />
* Completely revamp the DeSmuME Preferences window. (DONE!)<br />
* Make external save state files behave like normal document files. (DONE!)<br />
* Expose all available ROM information in the ROM Info panel. (DONE!)<br />
* Make ROM title strings Unicode aware. (DONE!)<br />
* Change the behavior of the close window control, where clicking on it while a ROM is loaded will close the ROM. (DONE!)<br />
<br />
<br />
* Add the ability to change the window display mode. (DONE!)<br />
* Add Bilinear Filtering option for the display window. (DONE!)<br />
* Add video filter support for the display window. (DONE!)<br />
* Add the ability to rotate the display to any arbitrary rotation angle. (DONE!)<br />
* Add the ability to take screenshots using Edit > Copy. (DONE!)<br />
* Add the ability to save screenshot files in several different image file formats. (DONE!)<br />
* Add support for using an ADVANsCEne database for checking ROM properties. (DONE!)<br />
* Add the Cheat Manager, allowing for Action Replay codes and an internal value search tool. (DONE!)<br />
* Add the ability to import Action Replay codes from an R4 Cheat Database. (DONE!)<br />
* Add the ability to import and export ROM save files in RAW and No$GBA formats. (DONE!)<br />
* Add the File Migration Assistant to help users migrate files from previous versions. (DONE!)<br />
<br />
<br />
* Add support for mapping Lid and Debug controls. (DONE!)<br />
* Add fake mic support. (WORKING)<br />
* Add the ability to map input to user-defined touch coordinates. (DROPPED)<br />
* Allow for all non-modifier keys on a keyboard to be used as an input mapping. (DONE!)<br />
* Allow all HID devices to be used for input mappings. (DONE!)<br />
<br />
<br />
* Add automatic frameskip. (DONE!)<br />
* Make ROM cartridge files load on a separate thread. (DONE!)<br />
* Rework the main emulation loop to be as lightweight as possible. (DONE!)<br />
* Rework the multithreading code to work with SoftRasterizer. (DONE!)<br />
* Remove all Objective-C code from the sound code and optimize it. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Fake mic support only works with internal noise samples and white noise samples. External audio files didn't make it into the final release.<br />
* The feature to map inputs to user-defined touch coordinates was dropped due to release time constraints.<br />
* Performance is greatly improved in this version. UI performance is now "snappy". A combination of Cocoa-bindings, code design choices, and UI optimizations have made for an extremely responsive and usable UI. Emulation performance is also dramatically improved, now being only 5% slower than the Windows port.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Users running OS X v10.8 Mountain Lion are having issues with blank/white screens. This is most likely a bug related to the OpenGL blitter, and is considered critical.<br />
* A new bug was introduced where using Dual SPU Synch/Asynch mode would cause an application-level crash. This is a critical bug that is related to the sound threading code.<br />
* Physical microphone support seems to be an important feature to include in the next version.<br />
* Input handling was rewritten for this release and is an improvement compared to the last version, but the code is already showing its limitations. The input handling code will need to be rewritten once again in the next release.<br />
* This release has been considered a very large success for the OS X port.<br />
<br />
<br />
== v0.9.8b (Released on August 6, 2012) ==<br />
This version is different from all other versions in that this version is purely a bug-fix release. This version is being released in response to Apple's release of OS X v10.8 Mountain Lion.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the critical bugs.<br />
* Get this version released as quickly as possible, in response to the Mountain Lion release.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix the critical bugs. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The display window now works with Mountain Lion, and using Dual SPU Synch/Asynch no longer crashes the application.<br />
* Besides the bug fixes, this version is identical to v0.9.8.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* None.<br />
<br />
<br />
== v0.9.9 (Released on April 30, 2013) ==<br />
Initially, this version was meant to be an optimization and maintenance release. It was also meant to further modernize the code base in response to the further obsolescence of Xcode 3 in Mountain Lion. However, due to the length of time since the last release, this version also added several new features.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Transition the code base from using the 10.5 SDK and being forward compatible to using the latest SDK and being backwards compatible to OS X v10.5.<br />
* Integrate the new JIT CPU emulation engine.<br />
* Update the OpenGL blitter to use modern OpenGL functions, and then optimize it.<br />
* Add support for the OpenGL 3D renderer.<br />
* Refactor the input handling code so that it's all gathered in one place, and also sits at the UI level.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the Xcode project files to use the latest installed SDK, then add new build targets specifically for OS X v10.5 releases. (DONE!)<br />
* Add support for the JIT CPU emulation engine. (DONE!)<br />
* Add support for the OpenGL 3D renderer. (DONE!)<br />
* Completely eliminate the usage of fixed-function pipeline OpenGL code from the OpenGL blitter. (DONE!)<br />
* Refactor and rewrite the input handling code. (DONE!)<br />
<br />
<br />
* Add Rigorous 3D Rendering Timing option. (DONE!)<br />
* Add the SLOT-1 Manager, allowing the configuration of SLOT-1 properties. (DONE!)<br />
<br />
<br />
* Add the ability to use multiple display windows, each with individual display settings. (DONE!)<br />
* Show the ROM name and ROM icon of the currently loaded ROM in the display window title bar. (DONE!)<br />
* Add support for the HUD. (DROPPED)<br />
* Add Vertical Sync option for display windows. (DONE!)<br />
* Add Display Orientation option for display windows. (DONE!)<br />
* Add Display Order option for display windows. (DONE!)<br />
* Add Display Separation option for display windows. (DONE!)<br />
* Add HQ4xS video filter. (DONE!)<br />
<br />
<br />
* Add the ability to map multiple input devices to the same command. (DONE!)<br />
* Add the ability to map mice and other pointer-type devices to commands other than Touch. (DONE!)<br />
* Add the ability to map an input device to any command. (DONE!)<br />
* Add the ability to map an input device to user-defined touch coordinates. (DONE!)<br />
* Add the ability to save and load input profiles. (DONE!)<br />
* Complete microphone support. (WORKING)<br />
* Revamp the Input Preferences UI to accommodate all the new input handling features. (DONE!)<br />
<br />
<br />
* Make the items in the File Migration Window properly sorted by version. (DONE!)<br />
* Add Select All and Select None commands in the File Migration Window. (DONE!)<br />
* Add some user-friendly forms for users to receive technical support and submit bug reports. (DONE!)<br />
* Add more system information to the About box. (DONE!)<br />
* Add Help documentation. (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version, and more.<br />
* The input handling code is now where it needs to be. No more rewrites are necessary anymore.<br />
* External audio files may now be used for the fake mic, but physical mic support still isn't there. This will have to be a top priority for the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* A bug was introduced where setting the display mode to Main or Touch as default would create display windows that draw incorrectly.<br />
* A bug was introduced where the R4 path in the SLOT-1 Manager wouldn't properly set.<br />
* A bug was introduced where loading certain audio files for the audio sample generator would cause a crash.<br />
* A bug was introduced where analog HID-inputs would sometimes fail to register.<br />
<br />
<br />
== v0.9.10 (November 28, 2013) ==<br />
This release is meant to further modernize DeSmuME to use the latest and greatest optimizations from the new Xcode 5, as well as modernize the UI with new OS X human interface paradigms. Finally, the Legacy port needs to be obsoleted.<br />
<br />
This release was supposed to be the "add new features" release, and some of those features already made it into v0.9.9. This release is here to finish the work that was started in v0.9.9, with the most important features being SLOT-2 device support and physical microphone support.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The v0.9.9 release brought a lot of new features. But along with those new features, came some new bugs. Those bugs will need to be fixed.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the bugs introduced from the v0.9.9 release.<br />
* Finish adding the features that were first started in v0.9.9:<br />
** Add full support for all SLOT-2 devices.<br />
** Complete the microphone feature by adding physical microphone support.<br />
** Add HUD support.<br />
** Add support for basic replay recording and playback.<br />
** Add TAS-friendly controls.<br />
** Make displays go full screen.<br />
* With the recent release of Xcode 5, try out some new optimizations and see if they improve performance without breaking anything.<br />
* Begin modernizing the UI. Some specific elements would include:<br />
** ROM Info panel<br />
** SLOT-1 Manager window<br />
** File Migration Assistant window<br />
** Change radio button lists w/ button into pull-down menus as appropriate<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further reduce reliance on the user interacting with the file system directly.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DROPPED)<br />
* Complete microphone feature by adding physical microphone support. (DROPPED)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (DROPPED)<br />
* Add Frame Advance control. (DROPPED)<br />
* Show the frame number. (DROPPED)<br />
* Reintegrate GDB stub support. (DROPPED)<br />
<br />
<br />
* Use Xcode 5's new -Ofast and -fvectorize optimizations. (DONE!)<br />
* Use --ffast-math optimization. (DONE!)<br />
<br />
<br />
* Add the ability for display windows to enter full screen mode. (DONE!)<br />
* Save the positions and settings of any remaining display windows upon app exit. (DONE!)<br />
* Create AppleScript for deleting the user defaults files. (DONE!)<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* The goals of adding new features were not met for this version.<br />
* Due to this release happening much quicker than anticipated, many planned features for this release were dropped.<br />
* In the end, this turned out to be more of a modernization and bug fix release more than anything else. New features will have to be pushed to the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* During release testing, it was found that recent code changes broke the loading of ROMs on big-endian systems. Therefore, PPC support was dropped during release testing in order to get this release out on time. There will need to be a maintenance release made to address this issue.<br />
* SourceForge changed their URLs the DeSmuME project, so the Bug Report URL is now incorrect.<br />
* A user complained about choppy video, which was determined to be auto frameskip being too aggressive. This will need to be dealt with somehow, as FPS can have some wild jumps under certain conditions.<br />
<br />
* Saving the positions and settings of the remaining display windows upon app exit is a great feature. It would be a good idea to save more settings upon app exit as appropriate. OS X is heading in a direction where app settings should be restorable between app launches, and DeSmuME needs to start doing the same.<br />
<br />
<br />
== v0.9.10b (December 18, 2013) ==<br />
This is strictly a maintenance release made to address the post-release issues from v0.9.10.<br />
<br />
=== Major issues from the previous version ===<br />
* Fix ROM loading on PPC.<br />
* Fix auto frameskip being overly aggressive.<br />
<br />
=== Main goals for this version ===<br />
* Fix the noted issues from the previous version.<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix ROM loading on big-endian systems. (DONE!)<br />
* Make frame rate transitions smoother, and make auto frame skip slightly less aggressive. (DONE!)<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Besides being able to load ROMs on PPC and the better auto frame skip algorithm, this version is identical to v0.9.10.<br />
<br />
=== Post-release issues and notes ===<br />
* This version has the stability that v0.9.9 was intended to bring. The next version really needs to push new features.<br />
* The most glaring missing features are the lack of SLOT-2 device support and the lack of the physical microphone. Adding these features should be top priority.<br />
* The font changes in OS X Yosemite have affected the appearance of text in some UI controls. This will need to be fixed.<br />
<br />
<br />
== v0.9.11 (April 14, 2015) ==<br />
This version is meant above all else to be a features release. The improved stability and modernized code base of v0.9.10 gave a strong foundation to build upon, so now it's time to take advantage of it!<br />
<br />
=== Major issues from the previous version ===<br />
* New features intended to be present in the previous release were not added.<br />
<br />
=== Main goals for this version ===<br />
* Add new features!<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further modernize the UI with current Apple human interface paradigms. Ensure that the UI looks good for all OS X versions from Leopard to Yosemite.<br />
* Try out Xcode 6's new PGO optimization.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DONE!)<br />
* Complete microphone feature by adding physical microphone support. (DONE!)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (PARTIAL)<br />
* Add new Execution Control panel, that adds new Frame Advance and Frame Jump controls, as well as integrates the execution speed controls, all in one single panel. (DONE!)<br />
* Reintegrate GDB stub support. (DONE!)<br />
* Add ability to run pixel scalers on the GPU. (DONE!)<br />
* Add additional video output filters. (DONE!)<br />
* Add support for turbo and autohold. (DONE!)<br />
<br />
* Use Xcode 6's new PGO optimization. (DONE!)<br />
* Obsolete the Legacy port. (DONE!)<br />
<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window. (DONE!)<br />
* Add support for App Nap in OS X Mavericks and later. (DONE!)<br />
* Fix UI issues with OS X Yosemite. (DONE!)<br />
<br />
=== Final results ===<br />
* Most of the goals were met for this version. Many new features were added, including some which were not originally planned in v0.9.10.<br />
* The only features that were not included were:<br />
** HUD support: It would be better to run this within OpenGL instead of hacking libagg to work in the Cocoa port. Of course, running the entire HUD in OpenGL will require an entirely new drawing engine, so this will take some time to figure out.<br />
** Replay Record/Playback: Basic functionality is included. However, full functionality, in which the user can viably edit replays within DeSmuME, is going to be a long road ahead. HUD support, Lua support, RAM Watch/Search, and a replay editor like Bizhawk's TAS Studio will be required. This will be a major undertaking.<br />
* Now that the Legacy port is gone, the project has been modernized a great deal. This should make it much easier for new Mac developers to jump into the project.<br />
* Overall, I'm very happy with this release. There was a lot of time between this release and v0.9.10, so it was possible to get a lot of testing done for this one, despite the many new features. I feel like this release is stable enough to warrant the next release, v0.9.12, to be another feature-focused release.<br />
<br />
=== Post-release issues and notes ===<br />
* On Retina displays, the display window OpenGL context as well as other various UI elements are still rendered in normal resolution.<br />
* On OS X Mavericks and later, running a full screen display on any monitor other than the primary monitor will cause the dock and menu bar to remain visible, unless the primary monitor is also running a full screen display.<br />
<br />
== v0.9.12 (TBD) ==<br />
This version will focus on adding to the Cocoa port any remaining features that are currently present in the Windows port. The final goal: Full feature parity with the Windows port. Once this is achieved, then a lot of options open up for adding brand new features, as well as restructuring of the core itself to bring new levels of emulation compatibility and performance.<br />
<br />
I've also noticed, after doing much testing of v0.9.11 and comparing it to the Windows port, as well as the various Linux ports, it's very clear that the feature disparity between frontends is becoming greater. In the future, we will need to unify the look and feel of the various frontends for the purpose of improving the user experience and making our tech support easier. While this release will not focus on actually unifying the frontends, it will lay down much of the groundwork for doing so in v0.9.13.<br />
<br />
=== Major issues from the previous version ===<br />
* Need to fully support Retina displays.<br />
* Fix full screen display behaviors on OS X Mavericks and later.<br />
<br />
=== Main goals for this version ===<br />
* Full feature parity with the Windows port.<br />
* Refactor the core source functionality so that all communication between core and high-level UI goes through a common frontend layer. Have the Cocoa port make use of the common frontend layer.<br />
* Ensure build compatibility through Xcode 7.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add HUD support. (IN PROGRESS)<br />
** All of the foundation work is finished with the new OpenGL-based text renderer, as well as the related UI work.<br />
** Currently, there is support for displaying the Video FPS, 3D Renderer FPS, Frame Index, and Lag Frame Count.<br />
** Adding HUD displays for the CPU Load Average, Input, and Real-Time Clock are in progress.<br />
** Would also be nice to add some app status animations to the HUD. Some important app status things to show would be: When no ROM is loaded, when a save state is loaded/unloaded, which execution state the emulator is in (Execute/Pause/Frame Step/Frame Jump), and so on.<br />
* Add replay editing tools that are viable for TAS users.<br />
* Add support for the various NDS tools.<br />
* Add support for recording audio and video.<br />
* Complete support for Retina displays. (DONE!)<br />
* Confirm compiling and building on Xcode 7. (DONE!)<br />
<br />
=== Final results ===<br />
TBD. This version is yet to be released.<br />
<br />
=== Post-release issues and notes ===<br />
TBD. This version is yet to be released.</div>Rogermanhttps://wiki.desmume.org/index.php?title=Cocoa_frontend_todoCocoa frontend todo2015-08-07T06:18:31Z<p>Rogerman: /* Post-release issues and notes */</p>
<hr />
<div>== Overview of Release History ==<br />
<br />
=== The First Cocoa Front End ===<br />
The first release of the Cocoa front end was v0.7.3, released on August 12, 2007.<br />
<br />
=== The Temporary Move to the GTK Front End ===<br />
Due to lack of developer support, the Cocoa code base was shelved after the release of v0.9.4. On November 27, 2009, v0.9.5 was released for OS X using the GTK front end. The last release using the GTK front end was v0.9.6, released on May 19, 2010.<br />
<br />
=== The Return to the Cocoa Front End ===<br />
On February 1, 2011, v0.9.7 was released for Windows, and also for Linux using the GTK. However, there were issues that were specific to the OS X GTK build which prevented its release for months. At this time, the Cocoa code base from v0.9.4 was updated to work with v0.9.7, and was finally released for OS X on April 30, 2011.<br />
<br />
<br />
== v0.9.7 (Released on April 30, 2011) ==<br />
This version returns the OS X port back to its Cocoa roots. Returning the OS X port to a Cocoa codebase is extremely important for improving the UI, optimizing performance, and improving stability.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The GTK front end had a UI that was not Mac-friendly.<br />
* The application was unstable and frequently suffered application-level crashes, especially when the UI was manipulated.<br />
* Performance was poor all around. Emulation performance was especially poor.<br />
* Universal binaries are not possible for the GTK front end.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Make the Cocoa front end the primary Mac front end.<br />
* Make the Cocoa code base the main code base for the OS X port.<br />
* Greatly improve application stability.<br />
* Bring back universal binaries.<br />
* Get this version released as quickly as possible, since the OS X port is already months behind the others.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Unshelve the code base from v0.9.4 and update it to v0.9.7 standards. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The OS X port no longer suffers from application-level crashes, the UI is now Mac-native, and the application bundle now has a universal binary.<br />
* Overall performance has improved significantly since v0.9.6. UI performance is greatly improved, but emulation performance is still at least 20%-40% slower than the Windows port for most games.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Even though v0.9.7 has binary compatibility with OS X v10.4, there are many issues when running on v10.4, especially with missing 3D graphics.<br />
* The Cocoa code base is extremely messy and uses many older coding conventions. This makes it difficult to maintain and even more difficult to add new features. Due to these reasons, a total rewrite of the Cocoa code base is necessary in order to move the OS X port forward.<br />
* There was an uncaught bug in this release where touch coordinates didn't map correctly on rotated screens. This bug will need to be fixed.<br />
<br />
<br />
== v0.9.8 (Released on April 9, 2012) ==<br />
This version is all about building a better future for the OS X port. Although this means having to rebuild the Cocoa code base from scratch, this is a necessary first step in providing a stable foundation for future enhancements.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Emulation performance is still poor.<br />
* The UI is very clunky, and certain parts of the UI are broken.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Completely rewrite the Cocoa code base from the ground up, using Objective-C 2.0, modern coding conventions, and Cocoa-bindings.<br />
* Transition the legacy Cocoa code base out of the current code base.<br />
* Expose as many settings in the user interface as possible.<br />
* Improve emulation performance.<br />
* Improve the user interface.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the project files to be compatible with both Xcode 3 and Xcode 4. (DONE!)<br />
* Update build targets to prefer the latest version of LLVM/Clang. (DONE!)<br />
* Transition all legacy files out of the main project files, and rename legacy files with a legacy suffix. (DONE!)<br />
<br />
<br />
* Add finder icons for readable files. (DONE!)<br />
* Expose all emulation, firmware, SPU, and SoftRasterizer options in the UI. (DONE!)<br />
* Add mouseover tooltips for all settings. (DONE!)<br />
* Add a toolbar to the main emulation window. (DONE!)<br />
* Add more user feedback messages to the status bar. (DONE!)<br />
* Add a volume slider to the status bar, and remove the Sound menu. (DONE!)<br />
* Completely revamp the DeSmuME Preferences window. (DONE!)<br />
* Make external save state files behave like normal document files. (DONE!)<br />
* Expose all available ROM information in the ROM Info panel. (DONE!)<br />
* Make ROM title strings Unicode aware. (DONE!)<br />
* Change the behavior of the close window control, where clicking on it while a ROM is loaded will close the ROM. (DONE!)<br />
<br />
<br />
* Add the ability to change the window display mode. (DONE!)<br />
* Add Bilinear Filtering option for the display window. (DONE!)<br />
* Add video filter support for the display window. (DONE!)<br />
* Add the ability to rotate the display to any arbitrary rotation angle. (DONE!)<br />
* Add the ability to take screenshots using Edit > Copy. (DONE!)<br />
* Add the ability to save screenshot files in several different image file formats. (DONE!)<br />
* Add support for using an ADVANsCEne database for checking ROM properties. (DONE!)<br />
* Add the Cheat Manager, allowing for Action Replay codes and an internal value search tool. (DONE!)<br />
* Add the ability to import Action Replay codes from an R4 Cheat Database. (DONE!)<br />
* Add the ability to import and export ROM save files in RAW and No$GBA formats. (DONE!)<br />
* Add the File Migration Assistant to help users migrate files from previous versions. (DONE!)<br />
<br />
<br />
* Add support for mapping Lid and Debug controls. (DONE!)<br />
* Add fake mic support. (WORKING)<br />
* Add the ability to map input to user-defined touch coordinates. (DROPPED)<br />
* Allow for all non-modifier keys on a keyboard to be used as an input mapping. (DONE!)<br />
* Allow all HID devices to be used for input mappings. (DONE!)<br />
<br />
<br />
* Add automatic frameskip. (DONE!)<br />
* Make ROM cartridge files load on a separate thread. (DONE!)<br />
* Rework the main emulation loop to be as lightweight as possible. (DONE!)<br />
* Rework the multithreading code to work with SoftRasterizer. (DONE!)<br />
* Remove all Objective-C code from the sound code and optimize it. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Fake mic support only works with internal noise samples and white noise samples. External audio files didn't make it into the final release.<br />
* The feature to map inputs to user-defined touch coordinates was dropped due to release time constraints.<br />
* Performance is greatly improved in this version. UI performance is now "snappy". A combination of Cocoa-bindings, code design choices, and UI optimizations have made for an extremely responsive and usable UI. Emulation performance is also dramatically improved, now being only 5% slower than the Windows port.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Users running OS X v10.8 Mountain Lion are having issues with blank/white screens. This is most likely a bug related to the OpenGL blitter, and is considered critical.<br />
* A new bug was introduced where using Dual SPU Synch/Asynch mode would cause an application-level crash. This is a critical bug that is related to the sound threading code.<br />
* Physical microphone support seems to be an important feature to include in the next version.<br />
* Input handling was rewritten for this release and is an improvement compared to the last version, but the code is already showing its limitations. The input handling code will need to be rewritten once again in the next release.<br />
* This release has been considered a very large success for the OS X port.<br />
<br />
<br />
== v0.9.8b (Released on August 6, 2012) ==<br />
This version is different from all other versions in that this version is purely a bug-fix release. This version is being released in response to Apple's release of OS X v10.8 Mountain Lion.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the critical bugs.<br />
* Get this version released as quickly as possible, in response to the Mountain Lion release.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix the critical bugs. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The display window now works with Mountain Lion, and using Dual SPU Synch/Asynch no longer crashes the application.<br />
* Besides the bug fixes, this version is identical to v0.9.8.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* None.<br />
<br />
<br />
== v0.9.9 (Released on April 30, 2013) ==<br />
Initially, this version was meant to be an optimization and maintenance release. It was also meant to further modernize the code base in response to the further obsolescence of Xcode 3 in Mountain Lion. However, due to the length of time since the last release, this version also added several new features.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Transition the code base from using the 10.5 SDK and being forward compatible to using the latest SDK and being backwards compatible to OS X v10.5.<br />
* Integrate the new JIT CPU emulation engine.<br />
* Update the OpenGL blitter to use modern OpenGL functions, and then optimize it.<br />
* Add support for the OpenGL 3D renderer.<br />
* Refactor the input handling code so that it's all gathered in one place, and also sits at the UI level.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the Xcode project files to use the latest installed SDK, then add new build targets specifically for OS X v10.5 releases. (DONE!)<br />
* Add support for the JIT CPU emulation engine. (DONE!)<br />
* Add support for the OpenGL 3D renderer. (DONE!)<br />
* Completely eliminate the usage of fixed-function pipeline OpenGL code from the OpenGL blitter. (DONE!)<br />
* Refactor and rewrite the input handling code. (DONE!)<br />
<br />
<br />
* Add Rigorous 3D Rendering Timing option. (DONE!)<br />
* Add the SLOT-1 Manager, allowing the configuration of SLOT-1 properties. (DONE!)<br />
<br />
<br />
* Add the ability to use multiple display windows, each with individual display settings. (DONE!)<br />
* Show the ROM name and ROM icon of the currently loaded ROM in the display window title bar. (DONE!)<br />
* Add support for the HUD. (DROPPED)<br />
* Add Vertical Sync option for display windows. (DONE!)<br />
* Add Display Orientation option for display windows. (DONE!)<br />
* Add Display Order option for display windows. (DONE!)<br />
* Add Display Separation option for display windows. (DONE!)<br />
* Add HQ4xS video filter. (DONE!)<br />
<br />
<br />
* Add the ability to map multiple input devices to the same command. (DONE!)<br />
* Add the ability to map mice and other pointer-type devices to commands other than Touch. (DONE!)<br />
* Add the ability to map an input device to any command. (DONE!)<br />
* Add the ability to map an input device to user-defined touch coordinates. (DONE!)<br />
* Add the ability to save and load input profiles. (DONE!)<br />
* Complete microphone support. (WORKING)<br />
* Revamp the Input Preferences UI to accommodate all the new input handling features. (DONE!)<br />
<br />
<br />
* Make the items in the File Migration Window properly sorted by version. (DONE!)<br />
* Add Select All and Select None commands in the File Migration Window. (DONE!)<br />
* Add some user-friendly forms for users to receive technical support and submit bug reports. (DONE!)<br />
* Add more system information to the About box. (DONE!)<br />
* Add Help documentation. (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version, and more.<br />
* The input handling code is now where it needs to be. No more rewrites are necessary anymore.<br />
* External audio files may now be used for the fake mic, but physical mic support still isn't there. This will have to be a top priority for the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* A bug was introduced where setting the display mode to Main or Touch as default would create display windows that draw incorrectly.<br />
* A bug was introduced where the R4 path in the SLOT-1 Manager wouldn't properly set.<br />
* A bug was introduced where loading certain audio files for the audio sample generator would cause a crash.<br />
* A bug was introduced where analog HID-inputs would sometimes fail to register.<br />
<br />
<br />
== v0.9.10 (November 28, 2013) ==<br />
This release is meant to further modernize DeSmuME to use the latest and greatest optimizations from the new Xcode 5, as well as modernize the UI with new OS X human interface paradigms. Finally, the Legacy port needs to be obsoleted.<br />
<br />
This release was supposed to be the "add new features" release, and some of those features already made it into v0.9.9. This release is here to finish the work that was started in v0.9.9, with the most important features being SLOT-2 device support and physical microphone support.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The v0.9.9 release brought a lot of new features. But along with those new features, came some new bugs. Those bugs will need to be fixed.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the bugs introduced from the v0.9.9 release.<br />
* Finish adding the features that were first started in v0.9.9:<br />
** Add full support for all SLOT-2 devices.<br />
** Complete the microphone feature by adding physical microphone support.<br />
** Add HUD support.<br />
** Add support for basic replay recording and playback.<br />
** Add TAS-friendly controls.<br />
** Make displays go full screen.<br />
* With the recent release of Xcode 5, try out some new optimizations and see if they improve performance without breaking anything.<br />
* Begin modernizing the UI. Some specific elements would include:<br />
** ROM Info panel<br />
** SLOT-1 Manager window<br />
** File Migration Assistant window<br />
** Change radio button lists w/ button into pull-down menus as appropriate<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further reduce reliance on the user interacting with the file system directly.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DROPPED)<br />
* Complete microphone feature by adding physical microphone support. (DROPPED)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (DROPPED)<br />
* Add Frame Advance control. (DROPPED)<br />
* Show the frame number. (DROPPED)<br />
* Reintegrate GDB stub support. (DROPPED)<br />
<br />
<br />
* Use Xcode 5's new -Ofast and -fvectorize optimizations. (DONE!)<br />
* Use --ffast-math optimization. (DONE!)<br />
<br />
<br />
* Add the ability for display windows to enter full screen mode. (DONE!)<br />
* Save the positions and settings of any remaining display windows upon app exit. (DONE!)<br />
* Create AppleScript for deleting the user defaults files. (DONE!)<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* The goals of adding new features were not met for this version.<br />
* Due to this release happening much quicker than anticipated, many planned features for this release were dropped.<br />
* In the end, this turned out to be more of a modernization and bug fix release more than anything else. New features will have to be pushed to the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* During release testing, it was found that recent code changes broke the loading of ROMs on big-endian systems. Therefore, PPC support was dropped during release testing in order to get this release out on time. There will need to be a maintenance release made to address this issue.<br />
* SourceForge changed their URLs the DeSmuME project, so the Bug Report URL is now incorrect.<br />
* A user complained about choppy video, which was determined to be auto frameskip being too aggressive. This will need to be dealt with somehow, as FPS can have some wild jumps under certain conditions.<br />
<br />
* Saving the positions and settings of the remaining display windows upon app exit is a great feature. It would be a good idea to save more settings upon app exit as appropriate. OS X is heading in a direction where app settings should be restorable between app launches, and DeSmuME needs to start doing the same.<br />
<br />
<br />
== v0.9.10b (December 18, 2013) ==<br />
This is strictly a maintenance release made to address the post-release issues from v0.9.10.<br />
<br />
=== Major issues from the previous version ===<br />
* Fix ROM loading on PPC.<br />
* Fix auto frameskip being overly aggressive.<br />
<br />
=== Main goals for this version ===<br />
* Fix the noted issues from the previous version.<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix ROM loading on big-endian systems. (DONE!)<br />
* Make frame rate transitions smoother, and make auto frame skip slightly less aggressive. (DONE!)<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Besides being able to load ROMs on PPC and the better auto frame skip algorithm, this version is identical to v0.9.10.<br />
<br />
=== Post-release issues and notes ===<br />
* This version has the stability that v0.9.9 was intended to bring. The next version really needs to push new features.<br />
* The most glaring missing features are the lack of SLOT-2 device support and the lack of the physical microphone. Adding these features should be top priority.<br />
* The font changes in OS X Yosemite have affected the appearance of text in some UI controls. This will need to be fixed.<br />
<br />
<br />
== v0.9.11 (April 14, 2015) ==<br />
This version is meant above all else to be a features release. The improved stability and modernized code base of v0.9.10 gave a strong foundation to build upon, so now it's time to take advantage of it!<br />
<br />
=== Major issues from the previous version ===<br />
* New features intended to be present in the previous release were not added.<br />
<br />
=== Main goals for this version ===<br />
* Add new features!<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further modernize the UI with current Apple human interface paradigms. Ensure that the UI looks good for all OS X versions from Leopard to Yosemite.<br />
* Try out Xcode 6's new PGO optimization.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DONE!)<br />
* Complete microphone feature by adding physical microphone support. (DONE!)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (PARTIAL)<br />
* Add new Execution Control panel, that adds new Frame Advance and Frame Jump controls, as well as integrates the execution speed controls, all in one single panel. (DONE!)<br />
* Reintegrate GDB stub support. (DONE!)<br />
* Add ability to run pixel scalers on the GPU. (DONE!)<br />
* Add additional video output filters. (DONE!)<br />
* Add support for turbo and autohold. (DONE!)<br />
<br />
* Use Xcode 6's new PGO optimization. (DONE!)<br />
* Obsolete the Legacy port. (DONE!)<br />
<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window. (DONE!)<br />
* Add support for App Nap in OS X Mavericks and later. (DONE!)<br />
* Fix UI issues with OS X Yosemite. (DONE!)<br />
<br />
=== Final results ===<br />
* Most of the goals were met for this version. Many new features were added, including some which were not originally planned in v0.9.10.<br />
* The only features that were not included were:<br />
** HUD support: It would be better to run this within OpenGL instead of hacking libagg to work in the Cocoa port. Of course, running the entire HUD in OpenGL will require an entirely new drawing engine, so this will take some time to figure out.<br />
** Replay Record/Playback: Basic functionality is included. However, full functionality, in which the user can viably edit replays within DeSmuME, is going to be a long road ahead. HUD support, Lua support, RAM Watch/Search, and a replay editor like Bizhawk's TAS Studio will be required. This will be a major undertaking.<br />
* Now that the Legacy port is gone, the project has been modernized a great deal. This should make it much easier for new Mac developers to jump into the project.<br />
* Overall, I'm very happy with this release. There was a lot of time between this release and v0.9.10, so it was possible to get a lot of testing done for this one, despite the many new features. I feel like this release is stable enough to warrant the next release, v0.9.12, to be another feature-focused release.<br />
<br />
=== Post-release issues and notes ===<br />
* On Retina displays, the display window OpenGL context as well as other various UI elements are still rendered in normal resolution.<br />
* On OS X Mavericks and later, running a full screen display on any monitor other than the primary monitor will cause the dock and menu bar to remain visible, unless the primary monitor is also running a full screen display.<br />
<br />
== v0.9.12 (TBD) ==<br />
This version will focus on adding to the Cocoa port any remaining features that are currently present in the Windows port. The final goal: Full feature parity with the Windows port. Once this is achieved, then a lot of options open up for adding brand new features, as well as restructuring of the core itself to bring new levels of emulation compatibility and performance.<br />
<br />
I've also noticed, after doing much testing of v0.9.11 and comparing it to the Windows port, as well as the various Linux ports, it's very clear that the feature disparity between frontends is becoming greater. In the future, we will need to unify the look and feel of the various frontends for the purpose of improving the user experience and making our tech support easier. While this release will not focus on actually unifying the frontends, it will lay down much of the groundwork for doing so in v0.9.13.<br />
<br />
=== Major issues from the previous version ===<br />
* Need to fully support Retina displays.<br />
* Fix full screen display behaviors on OS X Mavericks and later.<br />
<br />
=== Main goals for this version ===<br />
* Full feature parity with the Windows port.<br />
* Refactor the core source functionality so that all communication between core and high-level UI goes through a common frontend layer. Have the Cocoa port make use of the common frontend layer.<br />
* Ensure build compatibility through Xcode 7.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add HUD support.<br />
* Add replay editing tools that are viable for TAS users.<br />
* Add support for the various NDS tools.<br />
* Add support for recording audio and video.<br />
* Complete support for Retina displays. (DONE!)<br />
<br />
=== Final results ===<br />
TBD. This version is yet to be released.<br />
<br />
=== Post-release issues and notes ===<br />
TBD. This version is yet to be released.</div>Rogermanhttps://wiki.desmume.org/index.php?title=FaqFaq2015-07-17T15:56:00Z<p>Rogerman: /* DeSmuME runs too slow! */</p>
<hr />
<div>'''DeSmuME FAQ 0.9.11'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
* FAQ 0.9.9, [[Faq_099]]<br />
* FAQ 0.9.10, [[Faq_0_9_10]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped?<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_1.png]<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! I'm not getting experience! ===<br />
* Make sure you are using the latest version of the emulator.<br />
* Delete your ini file and re-run the emulator.<br />
* Quit using patched ROMs. Remove the AP (Anti-Piracy) patch from the ROM.<br />
* Quit using cheats.<br />
* Try using external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games.</strong> Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== Why does HeartGold / SoulSilver have freezes and graphics glitches? ===<br />
Emulation bugs. Errors accumulate. Stop using savestates. Save in-game and reset the emulator.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Read the [[KnowledgeBase]]<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3D renderers. Quit using frameskip.<br />
* Do not use patched ROMs. Never use patched ROMs.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
* Stop using savestates. Use in-game saves.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot your host machine.<br />
* Go to our [http://desmume.org/download official Downloads page] and make sure you are using the latest version, which is currently v0.9.11. Any older versions are unsupported.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary.<br />
* Enable "Advanced Bus-Level Timing". Doing this will slow down emulation, but fix some games.<br />
* Disable "Dynamic Recompiler". Doing this will greatly slow down emulation, but will fix many games.<br />
* Use external BIOS images. Try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your DeSmuME configuration file. It may have options that are breaking your DeSmuME.<br />
** Windows: Your configuration file is located in the same directory as the DeSmuME program. Delete the file named "desmume.ini".<br />
** Mac: Your configuration file is located at "~/Library/Preferences". Delete the file named "org.desmume.DeSmuME.plist". Alternatively, you may run "Delete DeSmuME Preferences.app", which is included with your installation package, which will perform this operation for you.<br />
** Linux: Your configuration file is located at "~/.config/desmume". Delete the file named "config".<br />
* Turn off your virus scanner.<br />
<br />
<br />
If a game really doesn't work, no matter what you try, you can submit a bug report for the game. See [[#Where can I report bugs?]] for more information.<br />
<br />
You might also find ways to patch the games to work better on emulators by searching on the Internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using DeSmuME! ===<br />
This is not DeSmuME's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers. If you are running DeSmuME on a laptop, then a laptop cooler might help.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
DeSmuME is a very CPU demanding app. While many users will see DeSmuME as a toy (and use it as such), it is actually a very sophisticated piece of software with lots of features. Also, DeSmuME focuses more on compatibility and features than on speed. Our philosophy is this: You can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility or gain new features. We take care of our side of things, so you should take care of yours.<br />
<br />
That being said, DeSmuME offers many options for you to find the best balance of compatibility, features, and performance. And remember that it is a balance -- gaining extra performance will always mean that you need to give up some features or reduce compatibility somewhere. How you make these tradeoffs is up to you. Listed below are things you can do to improve DeSmuME's performance.<br />
<br />
<br />
First of all, check that the host hardware is configured for best performance:<br />
* Ensure that you meet the [[#What are the minimum hardware requirements for DeSmuME?|minimum requirements]] for running DeSmuME.<br />
* DeSmuME is mostly CPU intensive and less GPU intensive. You'll want the fastest CPU possible (not necessarily the one with the most cores) for best performance.<br />
* The vast majority of older netbooks (and even newer ones) will have poor performance with any demanding software, including DeSmuME. Don't expect great performance out of these machines.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
<br />
<br />
Here are the biggest factors for improving emulation performance. They are listed from most performance impact to least performance impact:<br />
* Use a DeSmuME binary that works best for your machine. See [[#There are several different DeSmuME executables available. Which EXE do I use?]] for more details.<br />
* Use official DeSmuME releases from our [http://desmume.org/download Downloads page]. Our release versions always use the fastest and most aggressive program optimizations possible for maximum performance. Any unofficial, prerelease, or SVN builds are not guaranteed to have these same optimizations, resulting in lower performance.<br />
* Use frame skip. Even frame skipping by 1 will make many games become playable. However, note that some 3D games may not work well with frame skip, such as Golden Sun: Dark Dawn. If screens seem stuck or screen flickering becomes unacceptable, pick a different frame skip value.<br />
* ''(Windows only)'' Do not run the NDS tools (the ones from the Tools menu) unless absolutely necessary. If you must, try and keep the update interval as high as possible.<br />
* Disable all video filters, and set your display window's pixel scaler to None.<br />
* Use the Dynamic Recompiler (JIT) CPU emulation engine. ''(Doing this may break some games.)''<br />
* Disable Advanced Bus-Level Timing. ''(Doing this may break some games.)''<br />
* Try switching the 3D renderer between OpenGL and SoftRasterizer. One 3D renderer may work faster than the other, depending on the situation.<br />
* ''(Mac only)'' If you are using a pixel scaler and your machine has an older GPU or an integrated GPU, it might help to run the pixel scaler on the CPU by disabling "Run filters on GPU if possible". However, if you are using a newer GPU, then enabling "Run filters on GPU if possible" will remove any performance penalties related to using any video filters.<br />
* ''(Mac only)'' Do not enable any source filters if you are running a pixel scaler on the CPU. This combination results in a substantial performance hit.<br />
* ''(Linux only)'' Do not scale the display window beyond 1x, as this can result in a substantial performance hit.<br />
* Disable Advanced SPU Logic, and use the Dual SPU Sync/Async synchronization method.<br />
<br />
<br />
There are some other things that may theoretically improve performance, but they are dubious at best. They are only included here for the sake of completeness:<br />
* If you are using SoftRasterizer, disable edge marking and fog. Note that games that don't use these features will be unaffected.<br />
* Disable unneeded GPU layers.<br />
* Disable sound emulation altogether.<br />
* Don't use external BIOS images. But if you must, try enabling Patch DelayLoop SWI.<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
You are probably wanting to increase the execution speed. There are two ways of doing this:<br />
* Raise the execution speed limit. This will run the emulation at the specified execution speed, provided that the host hardware is fast enough. The execution speed limit will always be expressed as a speed multiplier, where 1x is 60 FPS. ''(Windows and Mac only)''<br />
* Disable the execution speed limiter. This will run the emulation as fast as the host hardware will allow.<br />
<br />
To change your execution speed options:<br />
* Windows: By default, the '-' and '=' keyboard keys will adjust the speed multiplier between 0.0625x-4x. By default, the Tab keyboard key will disable the speed limiter while held down. You can change these hotkeys in Config > Hotkey Config. In the Main section, the commands are Fast Forward, Increase Speed, and Decrease Speed.<br />
* Mac: By default, the '=' keyboard key will speed up execution by 2x while held down. You can assign additional hotkeys for Set Speed, and then click Settings to choose any speed multiplier from 0x-10x. There is no default hotkey for disabling the speed limiter, but you can assign one to the Enable/Disable Speed Limiter command. Alternatively, you can choose Emulation > Show Execution Control and adjust the execution speed options within the Execution Speed Properties section.<br />
* Linux ''(GTK only)'': By default, the letter 'O' keyboard key will disable the execution speed limiter while held down. You can change this hotkey in Config > Edit Controls. The command is called Boost.<br />
<br />
Note that increasing the execution speed does not mean that DeSmuME is doing less emulation. In fact, DeSmuME must emulate every single frame regardless of execution speed, even if DeSmuME doesn't necessarily show it (most likely, DeSmuME will begin dropping video and audio frames at high execution speeds). This is normal behavior. To achieve higher execution speeds, you will need to configure DeSmuME to operate at the highest performance possible. Read [[#DeSmuME_runs_too_slow.21]] for more information on how to improve emulation performance.<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in OSX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmuME window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. DeSmuME tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows: Windows XP SP2 or later<br />
* Mac: OS X v10.5.8 Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows: Windows Vista SP2 or later<br />
* Mac: OS X v10.6.8 Snow Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
* Windows: For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
** If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
** If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
** If you want to use the developer features, use the dev build. It includes extra debugging code and logging.<br />
* Mac: DeSmuME.app contains binaries for PPC, x86, x64. OS X will automatically choose the best binary to run on your hardware. You can override the automatic selection in the Finder by selecting DeSmuME.app and choosing File > Get Info. Then in the Get Info panel, you can select which binary to run.<br />
** To run as 32-bit PPC: Enable "Open using Rosetta". ''(Note that this option is only available on OS X v10.5 Leopard and v10.6 Snow Leopard. Rosetta is not available on later OS X versions.)''<br />
** To run as 32-bit x86: Enable "Open in 32-bit mode".<br />
** To run as 64-bit x64: Disable both "Open in 32-bit mode" and "Open using Rosetta" options.<br />
* Linux: Linux users are expected to build DeSmuME from source and know the best configure settings for their hardware. See [[Installing DeSmuME from source on Linux]] for more information.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.9GHz CPU will run DeSmuME much faster than a 12-core 1.6GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
(''Windows only'') The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
* Windows: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > One LCD, and then either View > LCDs Layout > Top First (Default) or View > LCDs Layout > Bottom First.<br />
* Mac: First, click the display window that you want to change. To change to a horizontal layout, choose View > Display Orientation > Horizontal. To change the display mode, choose View > Display Mode > Main for the main screen, or choose View > Display Mode > Touch for the touch screen.<br />
* Linux ''(GTK and Glade only)'':<br />
** GTK: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > Single Screen, and then choose View > LCDs Layout > Swap Screens to toggle between each screen.<br />
** Glade: To change to a horizontal layout, choose Config > Right Screen. However, changing the display mode on Glade is unsupported.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
Yes, you can display the DS screens in full screen mode.<br />
<br />
* Windows: Click the DeSmuME window and press Alt-Enter. <br />
* Mac: Click the display window that you want to make full screen, then choose View > Enter Full Screen.<br />
* Linux ''(GTK only)'': Choose View > Window Size > Scale to Window, then choose View > Window Size > Fullscreen.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
Yes, you can display each DS screen in separate windows. ''(This feature is only available for Mac.)''<br />
<br />
* Mac: Choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
DeSmuME allows you to apply pixel scalers, adjust the size of the video output, simulate the separation between the main and touch screens, and run filters on the video output. You can also rotate the NDS displays for games that require you to rotate the hardware NDS in a certain way.<br />
<br />
* Windows: <br />
** Pixel Upscale: To change the pixel scaler, choose View > Magnification Filters, and then select one of the menu options.<br />
** Output Filter: Choose Config > Display Method, then choose either DirectDraw HW, DirectDraw SW, or OpenGL. Your output filter will depend on which option you chose.<br />
*** DirectDraw HW: Depending on OS and GPU driver, your output filter may be Nearest Neighbor or Bilinear. You have no control over which filter is used, as it is determined for you by the OS/driver.<br />
*** DirectDraw SW: Your output filter will always be Nearest Neighbor.<br />
*** OpenGL: If Config > Display Method > Filter is checked, then your output filter will be Bilinear. Otherwise, your output filter will be Nearest Neighbor.<br />
** Display Resize: To set the displays to a specific size, choose View > Window Size, and then choose one of the menu options. The video displays will grow and shrink with the size of its window. The minimum display size is 1x times the pixel scaling. Keep in mind that some pixel scalers, such as 5xBRZ, can cause a vertical layout display to grow up to 1280x1920 pixels in size. In this case, there would be nothing you can do to reduce the display size below 5x. If the window doesn't fit in your monitor while using a given pixel scaler, then you must choose a pixel scaler with a smaller scaling value.<br />
** Screen Separation: Choose View > Screen Gap, and then select one of the menu options.<br />
** Rotation: Choose View > Rotation, and then select one of the menu options.<br />
* Mac:<br />
** Pixel Upscale: Select the window you want to change, then choose View > Video Pixel Scaler, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Pixel Scalers from the Video Settings panel.<br />
** Output Filter: Select the window you want to change, then choose View > Video Output Filter, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Output Filters from the Video Settings panel.<br />
** Display Resize: Select the window you want to change. To set the displays to a specific size, choose View > Display Size, and then choose one of the menu options. Note that on Mac, the maximum window size will always be dependent on your monitor's current resolution. The video display will grow and shrink with the size of the window. If the View > Keep Minimum Display Size at 1x option is enabled, then the minimum display size is 1x. Otherwise, the minimum display size is 0.25x.<br />
** Screen Separation: Select the window you want to change, then choose View > Display Separation, and then choose one of the menu options. Note that the percentage number is relative to the true distance between the NDS displays, where a separation of 100% is approximately 87.65px. If you choose Custom, then you may freely separate the displays to any percentage value from 0%-200%.<br />
** Rotation: Select the window you want to change, then choose View > Display Rotation, and then choose one of the menu options. If you choose Custom, then you may free rotate the display to any rotation.<br />
* Linux:<br />
** Pixel Upscale ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Video Filter, and then select one of the menu options.<br />
*** Qt: Choose View > Video Filter, and then select one of the menu options.<br />
** Output Filter ''(GTK only)'': With the exception of GTK, this feature is unsupported on all frontends. The output filter will always be Nearest Neighbor on unsupported frontends.<br />
*** GTK: Choose View > Secondary Video Filter, and then select one of the menu options.<br />
** Display Resize ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Window Size, and then select on of the menu options to set the displays to a specific size. If you choose Scale to Window, then the displays will grow and shrink with the window size. The minimum display size is 1x.<br />
*** Qt: The displays will grow and shrink with the window size. However, there is no option to set the displays to a specific size. The minimum display size is 1x.<br />
** Screen Separation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Screen Gap. Note that this is only a toggle option which only supports a separation of 0px or 90px.<br />
*** Glade: Choose Config > True Gap to separate the screens by 90px, or choose Config > No Gap to separate the screens by 0px. If both options are not enabled, then the default separation is 5px.<br />
** Rotation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Rotation, and then select one of the menu options.<br />
*** Glade: For the normal display rotation, choose Config > Rotate Screen 0. To rotate the displays 90 degrees, choose Config > Rotate Screen 90. To rotate the displays 180 degrees, choose Config > Rotate Screen 180. To rotate the displays 270 degrees, choose Config > Rotate Screen 270.<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported for all platforms. See [[#Microphone|NDS Microphone Support]] for more information.<br />
<br />
* Windows<br />
** Hardware Audio Input Device: In Windows, first set up the default audio recording device in your Windows Control Panel. Then in DeSmuME, choose Config > Microphone Settings, and then choose "Use connected physical microphone".<br />
** Software Generated Samples: Assign the Microphone hotkey using Config > Hotkey Config, under the Main section. Then choose Config > Microphone Settings, and then choose one of the three options that is not "Use connected physical microphone".<br />
* Mac<br />
** Hardware Audio Input Device: In OS X, first set up the default audio input device in Apple > System Preferences. DeSmuME will then automatically switch to using the default audio input device. Choose Emulation > Show Microphone Settings to adjust gain or mute the microphone.<br />
** Software Generated Samples: Assign Microphone hotkeys in your DeSmuME Input Preferences. Every hotkey assigned to the Microphone command will have a corresponding Settings button. Click Settings to change which sample generator the hotkey activates. You can assign multiple generators at the same time by using multiple hotkeys.<br />
* Linux<br />
** Hardware Audio Input Device: You must first compile your own Linux build with libasound. Next, in Linux, you must set up you default audio input device using whatever configuration utility is available in your distro. Then when you launch DeSmuME, DeSmuME will read your audio input device.<br />
** Software Generated Samples: This feature is unsupported on Linux.<br />
<br />
Additional Notes:<br />
<br />
* If you are using software generated samples, you will have to experiment with the microphone hotkey timing. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
* Hardware audio input device support is currently broken for Windows and Linux, and so many instances where the NDS microphone is required, such as giving voice commands to your Nintendog, will fail. Windows can sometimes workaround this if you use software generated samples from an audio file, but be aware that you can only assign one audio file at a time. Unfortunately, Linux has no workarounds.<br />
* If you want to play games that rely heavily on real-time voice recognition, such as the Nintendogs series of games, then the Mac version is your only option right now.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
[[List_of_Nintendo_DS_games_with_GBA_connectivity]]<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked? ===<br />
No. A real NDS uses Wi-Fi for multiplayer, and that isn't emulated in DeSmuME yet. For more information, see [[Faq#Wi-Fi|Wi-Fi Hardware Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
[[#Wi-Fi|Read more information about the current state of DeSmuME's Wi-Fi support.]] Right now, it's an experimental feature, which means it is unsupported.<br />
<br />
If you are an end-user, then we strongly discourage the use of Wi-Fi. However, as an end-user, if you really want to use Wi-Fi that badly, then you are on your own. In that case, any posts on our forums about Wi-Fi being used by end-users for end-user applications (such as wanting to trade Pokemon) will be ignored. Also, any submissions to any of our SourceForge trackers under the same conditions will be immediately closed without further consideration. <strong>When we say that Wi-Fi is unsupported, we mean it.</strong><br />
<br />
With that said, any developers interested in working on Wi-Fi support are welcome to join us at [[#DeSmuME_IRC_Channel|our IRC channel]]. We would appreciate the assistance!<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is currently not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future? ===<br />
Most likely, DeSmuME will not support the emulation of the Nintendo 3DS or Nintendo 2DS in the future. The hardware of both a 3DS and a 2DS are very different from an NDS, so emulating a 3DS/2DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
You can report bugs using our [https://sourceforge.net/p/desmume/bugs/ official bug tracker] on SourceForge. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
<br />
==== User Controls ====<br />
* The D-pad, buttons, and touch screen are fully emulated.<br />
* The ability to toggle the folded/unfolded state of the NDS is emulated through the Lid control.<br />
* Adjustable stylus pressure is only supported on Windows. However, the vast majority of games don't use this feature.<br />
* Emulation of stylus jitter is only supported on Windows. However, the vast majority of games don't use this feature.<br />
<br />
==== 2D Graphics System ====<br />
* All known 2D graphics features are supported, with the exception of mosaics.<br />
* Mosaics work somewhat, but are imperfect. Also, mosaics may not show up properly in some games.<br />
* There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
* Big-endian systems may not render the correct colors in some areas.<br />
<br />
==== 3D Rendering ====<br />
DeSmuME includes two 3D renderers, our own custom software renderer we call SoftRasterizer, and an OpenGL-based renderer. Each renderer has its own strengths and weaknesses, so use the best renderer for your situation. For example, if certain buttons, labels, or menus rendered on the 3D screen are obscured (for example, a button with no label on it), then things might appear correctly if you use SoftRasterizer. If that doesn't work, then things might appear correctly with OpenGL. Both renderers are provided for the purposes of working around specific 3D rendering cases.<br />
<br />
Also, keep in mind that SoftRasterizer uses the CPU for rendering, while OpenGL uses the GPU for rendering. Therefore, you may experience a difference in performance with each 3D renderer, depending on the host machine's hardware and depending on how you've configured DeSmuME.<br />
<br />
===== SoftRasterizer Renderer =====<br />
* All 3D features are emulated, except for wireframes and antialiasing.<br />
* There are issues with line rendering. However, it is possible to work around most of these issues by using the Line Hack.<br />
* There are issues with inaccurate texture rendering. However, it is possible to work around some of these issues by using the Fragment Sampling Hack. ''(Windows and Mac only)''<br />
* There are issues with depth rendering and Z-fighting. However, it is possible to work around some of these issues by adjusting the depth comparison threshold. ''(Windows and Mac only)''<br />
* There are some issues with shadow polygons. However, SoftRasterizer works better than OpenGL at rendering shadow polygons.<br />
<br />
===== OpenGL Renderer =====<br />
* All 3D features are emulated, except for fog and edge marking.<br />
* There are issues with depth rendering and Z-fighting. However, there is no workaround for this issue like there is with SoftRasterizer.<br />
* There are some major issues with shadow polygons. If you find the shadow polygon bugs unacceptable, then you will have to switch to SoftRasterizer.<br />
<br />
==== Sound ====<br />
* All sound features are emulated.<br />
* For complete SPU emulation, two requirements must be met:<br />
** Advanced SPU Logic must be enabled.<br />
** One of the SPU sound synchronization methods must be used (N, Z, or P).<br />
* Disabling Advanced SPU Logic and using Dual SPU Sync/Async will result in the loss of some sound features, but will also improve emulation performance on Windows and Linux. (Audio processing is multithreaded on Mac, so Mac users should never need to disable Advanced SPU Logic or use Dual SPU Sync/Async except for testing purposes. There are no performance advantages for changing these two options on Mac.)<br />
* Audio samples can be post-processed with interpolation, resulting in a smoother sound than a hardware NDS. Linear and Cosine interpolation algorithms are included. You may also turn off interpolation to play back the samples exactly as a hardware NDS would receive them.<br />
<br />
==== Microphone ====<br />
* All microphone features are emulated.<br />
* DeSmuME supports either receiving audio samples from a hardware audio input device, or generating audio samples in software.<br />
* Hardware audio input is only supported on Mac. Windows and Linux are currently broken and unsupported.<br />
* DeSmuME includes the following software sample generators:<br />
** Internal Noise Samples<br />
** White Noise ''(Windows and Mac only)''<br />
** Sine Wave ''(Mac only)''<br />
** Audio File ''(Windows -- only WAV files in 16000Hz 8-bit mono LPCM format are supported / Mac -- any audio file compatible with [https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/CoreAudioOverview/SupportedAudioFormatsMacOSX/SupportedAudioFormatsMacOSX.html CoreAudio] is supported)''<br />
<br />
==== CPU ====<br />
* CPU emulation is supported through either the Interpreter engine or the Dynamic Recompiler engine.<br />
* The Interpreter engine is available on all platforms. However, Dynamic Recompiler only works on x86 or x64 systems.<br />
* We are unaware of any huge problems with the Interpreter engine, but there are still some issues.<br />
* Interpreter has better compatibility than Dynamic Recompiler. Some games that fail when using Dynamic Recompiler will work fine with Interpreter. The tradeoff here is that Interpreter has much lower performance than Dynamic Recompiler.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== Memory and System Bus ====<br />
* We are unaware of any huge problems with the MMU and DMA systems, but there are still some issues.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== BIOS and Firmware ====<br />
* DeSmuME uses its own internal BIOS and firmware, but only for the purposes of loading and executing ROMs. DeSmuME's internal BIOS and firmware do not emulate all of the original NDS features.<br />
* DeSmuME supports configuring all of the NDS profile information through the internal BIOS and firmware alone. This information includes:<br />
** Nickname ''(Windows and Mac only)''<br />
** Message ''(Windows and Mac only)''<br />
** Favorite Color ''(Windows and Mac only)''<br />
** Birthday ''(Windows and Mac only)''<br />
** Language<br />
* DeSmuME can also load external BIOS and firmware images from a hardware NDS, gaining additional features by doing so.<br />
* If DeSmuME has all the necessary external BIOS and firmware images loaded, then it is possible to perform a full NDS boot. It then becomes possible to configure the NDS profile information within the emulated NDS firmware interface.<br />
* Loading of external BIOS images is supported on Windows, Mac, and Linux.<br />
* Loading of an external firmware image is only supported on Windows and Mac. Linux is not supported.<br />
<br />
==== NDS Slot (SLOT-1) ====<br />
* The following NDS slot devices are supported:<br />
** Standard Retail MC + ROM<br />
** Retail w/ NAND Flash<br />
** R4<br />
* DeSmuME can display the header information of loaded ROMs. ''(Windows and Mac only)''<br />
* We are unaware of any huge problems with loading NDS ROMs. However, there are some issues with loading NDS ROMs on big-endian systems.<br />
* There are some issues with DSi ROMs, as they are not fully supported yet.<br />
<br />
==== GBA Slot (SLOT-2) ====<br />
* The following GBA slot devices are supported:<br />
** Compact Flash Card<br />
** Rumble Pak ''(Windows and Mac only)''<br />
** GBA Cartridge<br />
** Guitar Grip ''(Windows and Mac only)''<br />
** Memory Expansion Pak ''(Windows and Mac only)''<br />
** EasyPiano ''(Windows and Mac only)''<br />
** Taito Paddle ''(Windows and Mac only)''<br />
** PassME ''(Windows and Mac only)''<br />
<br />
==== Wi-Fi ====<br />
* Wi-Fi emulation is currently in an experimental stage, and many Wi-Fi features are either broken or non-working.<br />
* Here is what we currently know about Wi-Fi so far: [[Luigi's notes about WiFi|Wi-Fi Notes]]<br />
<br />
==== Dynamically Linked Driver Interface (DLDI) ====<br />
The Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
* LFN is currently unsupported.<br />
<br />
<br />
=== Does the GDB stub still work? ===<br />
GDB remote debugging does work to a certain degree. However, DeSmuME does not implement the entire GDB stub protocol, so there are still some bugs. Nevertheless, GDB remote debugging works well enough to do basic operations, like set breakpoints, step through code, watch memory locations for read/write operations, and other basic operations.<br />
<br />
=== How do I enable the GDB stub? ===<br />
* Windows: You must make a custom build using #define GDB_STUB.<br />
# Copy the "userconfig.h" file from "src\windows\defaultconfig" to "src\windows\userconfig".<br />
# In the "src\windows\userconfig\userconfig.h" file, add "#define GDB_STUB".<br />
# Build DeSmuME.<br />
# After DeSmuME is finished building, launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
* Mac: You must make a custom build using the "DeSmuME (OS X App; dev+)" build scheme, which is only available using the "Xcode (Latest)" project file. You must compile the dev+ build using Xcode 4 or later. When you do, a new menu option will be available: Tools > Show GDB Stub Control. In the GDB Stub Control panel, click Start to begin listening for the GDB debugging client.<br />
* Linux: When you generate your configure script, it must use the flag "--enable-gdb-stub". Build DeSmuME, then launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an online communications system.<br />
<br />
The DeSmuME team uses IRC to discuss DeSmuME's development. You will need an IRC client in order to participate is these discussions.<br />
<br />
==== Recommended IRC Clients ====<br />
* Windows: [http://www.mirc.com mIRC], [http://www.xchat.com XChat]<br />
* Mac: [http://colloquy.info Colloquy], [https://www.adium.im Adium]<br />
* Linux: [http://www.xchat.com XChat]<br />
* Firefox add-on: [https://addons.mozilla.org/en-us/firefox/addon/chatzilla/ ChatZilla]<br />
* Others: [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Wikipedia]<br />
<br />
==== DeSmuME IRC Channel ====<br />
To connect to the DeSmuME IRC channel, you will need to enter the following information in your IRC client:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
As far as language is concerned, most of the people on the channel speak English.<br />
<br />
=== Where is the manual? ===<br />
[http://wiki.desmume.org/index.php?title=Manual Over here.] It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
<br />
== SVN and Compiling ==<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ SVN] is a tool that is used by multiple developers to work on the same codebase without conflicts. See [http://en.wikipedia.org/wiki/Subversion_(software) Wikipedia] for more information.<br />
<br />
=== Where do I get SVN builds? ===<br />
We officially use the [http://buildbot.orphis.net/desmume/ automated SVN builds] provided by DeSmuME user, Orphis.<br />
<br />
Other third-parties may offer SVN builds, such as [http://www.emucr.com EmuCR]. Please note that any third-party build is both unofficial and unsupported.<br />
<br />
=== How do I get the latest SVN code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* Windows: At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
** Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
** Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* Mac: Any of the compilers built into Xcode 3.1.4 all the way up to the latest Xcode is supported. You may also use a non-Xcode toolchain, such as MacPorts GCC, but this is currently unsupported.<br />
* Linux: Any recent version of GCC and toolchain should work. However, we do not recommend GCC 4.9, since there are bugs with this GCC version that interfere with DeSmuME.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
(''Windows only'') For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the Visual C++ Express 2008 installer and I can't find it. ===<br />
Download link: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Patches may be submitted to our [https://sourceforge.net/p/desmume/patches/ patches tracker] on SourceForge. Any patches submitted will be subject to a code review by our developer team, where we will then determine if the patch should be included in the codebase or not.<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== I'm not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile SVN builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on IRC. Also, adding to or perfecting the documentation in the Wiki is useful. You could also watch for and help answer questions placed on the [http://forums.desmume.org DeSmuME forum].<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://problemkaputt.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a Compact Flash image<br />
<br />
<br />
== Mac Users ==<br />
<br />
=== I just downloaded DeSmuME, but I can't launch it because "it is from an unidentified developer." What gives? ===<br />
Apple introduced a security policy called [https://support.apple.com/en-us/HT202491 Gatekeeper] on OS X v10.8 Mountain Lion to help protect users from malware. However, since DeSmuME is a free open-source app, we don't want to invest money into properly code signing the app for the sake of proving that we are legitimate app and not just another piece of malware. If you are concerned about the legitimacy of DeSmuME.app, then always make sure to download it from our [http://desmume.org/download official Downloads page].<br />
<br />
If OS X prevents you from launching DeSmuME.app because "it is from an unidentified developer", do this:<br />
* In the Finder, right-click (or Control-click) DeSmuME.app, then in the contextual menu, choose Open. A warning box will appear, saying that DeSmuME.app "is from an unidentified developer." In the warning box, click Open to proceed with launching DeSmuME.app.<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories.<br />
<br />
Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
As of this release, all of the DeSmuME features that exist in the Windows port also exist in the Mac port, except for the following:<br />
* The HUD<br />
* Custom path settings<br />
* AVI / WAV recording<br />
* The various tools listed in the Tools menu<br />
* RAM Watch / RAM Search<br />
* Lua scripting<br />
<br />
While we are actively working to attain full feature parity between the Mac and Windows ports, this will still take some time to achieve.<br />
<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogermanhttps://wiki.desmume.org/index.php?title=Cocoa_frontend_todoCocoa frontend todo2015-07-13T04:00:35Z<p>Rogerman: /* Major issues from the previous version */</p>
<hr />
<div>== Overview of Release History ==<br />
<br />
=== The First Cocoa Front End ===<br />
The first release of the Cocoa front end was v0.7.3, released on August 12, 2007.<br />
<br />
=== The Temporary Move to the GTK Front End ===<br />
Due to lack of developer support, the Cocoa code base was shelved after the release of v0.9.4. On November 27, 2009, v0.9.5 was released for OS X using the GTK front end. The last release using the GTK front end was v0.9.6, released on May 19, 2010.<br />
<br />
=== The Return to the Cocoa Front End ===<br />
On February 1, 2011, v0.9.7 was released for Windows, and also for Linux using the GTK. However, there were issues that were specific to the OS X GTK build which prevented its release for months. At this time, the Cocoa code base from v0.9.4 was updated to work with v0.9.7, and was finally released for OS X on April 30, 2011.<br />
<br />
<br />
== v0.9.7 (Released on April 30, 2011) ==<br />
This version returns the OS X port back to its Cocoa roots. Returning the OS X port to a Cocoa codebase is extremely important for improving the UI, optimizing performance, and improving stability.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The GTK front end had a UI that was not Mac-friendly.<br />
* The application was unstable and frequently suffered application-level crashes, especially when the UI was manipulated.<br />
* Performance was poor all around. Emulation performance was especially poor.<br />
* Universal binaries are not possible for the GTK front end.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Make the Cocoa front end the primary Mac front end.<br />
* Make the Cocoa code base the main code base for the OS X port.<br />
* Greatly improve application stability.<br />
* Bring back universal binaries.<br />
* Get this version released as quickly as possible, since the OS X port is already months behind the others.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Unshelve the code base from v0.9.4 and update it to v0.9.7 standards. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The OS X port no longer suffers from application-level crashes, the UI is now Mac-native, and the application bundle now has a universal binary.<br />
* Overall performance has improved significantly since v0.9.6. UI performance is greatly improved, but emulation performance is still at least 20%-40% slower than the Windows port for most games.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Even though v0.9.7 has binary compatibility with OS X v10.4, there are many issues when running on v10.4, especially with missing 3D graphics.<br />
* The Cocoa code base is extremely messy and uses many older coding conventions. This makes it difficult to maintain and even more difficult to add new features. Due to these reasons, a total rewrite of the Cocoa code base is necessary in order to move the OS X port forward.<br />
* There was an uncaught bug in this release where touch coordinates didn't map correctly on rotated screens. This bug will need to be fixed.<br />
<br />
<br />
== v0.9.8 (Released on April 9, 2012) ==<br />
This version is all about building a better future for the OS X port. Although this means having to rebuild the Cocoa code base from scratch, this is a necessary first step in providing a stable foundation for future enhancements.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Emulation performance is still poor.<br />
* The UI is very clunky, and certain parts of the UI are broken.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Completely rewrite the Cocoa code base from the ground up, using Objective-C 2.0, modern coding conventions, and Cocoa-bindings.<br />
* Transition the legacy Cocoa code base out of the current code base.<br />
* Expose as many settings in the user interface as possible.<br />
* Improve emulation performance.<br />
* Improve the user interface.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the project files to be compatible with both Xcode 3 and Xcode 4. (DONE!)<br />
* Update build targets to prefer the latest version of LLVM/Clang. (DONE!)<br />
* Transition all legacy files out of the main project files, and rename legacy files with a legacy suffix. (DONE!)<br />
<br />
<br />
* Add finder icons for readable files. (DONE!)<br />
* Expose all emulation, firmware, SPU, and SoftRasterizer options in the UI. (DONE!)<br />
* Add mouseover tooltips for all settings. (DONE!)<br />
* Add a toolbar to the main emulation window. (DONE!)<br />
* Add more user feedback messages to the status bar. (DONE!)<br />
* Add a volume slider to the status bar, and remove the Sound menu. (DONE!)<br />
* Completely revamp the DeSmuME Preferences window. (DONE!)<br />
* Make external save state files behave like normal document files. (DONE!)<br />
* Expose all available ROM information in the ROM Info panel. (DONE!)<br />
* Make ROM title strings Unicode aware. (DONE!)<br />
* Change the behavior of the close window control, where clicking on it while a ROM is loaded will close the ROM. (DONE!)<br />
<br />
<br />
* Add the ability to change the window display mode. (DONE!)<br />
* Add Bilinear Filtering option for the display window. (DONE!)<br />
* Add video filter support for the display window. (DONE!)<br />
* Add the ability to rotate the display to any arbitrary rotation angle. (DONE!)<br />
* Add the ability to take screenshots using Edit > Copy. (DONE!)<br />
* Add the ability to save screenshot files in several different image file formats. (DONE!)<br />
* Add support for using an ADVANsCEne database for checking ROM properties. (DONE!)<br />
* Add the Cheat Manager, allowing for Action Replay codes and an internal value search tool. (DONE!)<br />
* Add the ability to import Action Replay codes from an R4 Cheat Database. (DONE!)<br />
* Add the ability to import and export ROM save files in RAW and No$GBA formats. (DONE!)<br />
* Add the File Migration Assistant to help users migrate files from previous versions. (DONE!)<br />
<br />
<br />
* Add support for mapping Lid and Debug controls. (DONE!)<br />
* Add fake mic support. (WORKING)<br />
* Add the ability to map input to user-defined touch coordinates. (DROPPED)<br />
* Allow for all non-modifier keys on a keyboard to be used as an input mapping. (DONE!)<br />
* Allow all HID devices to be used for input mappings. (DONE!)<br />
<br />
<br />
* Add automatic frameskip. (DONE!)<br />
* Make ROM cartridge files load on a separate thread. (DONE!)<br />
* Rework the main emulation loop to be as lightweight as possible. (DONE!)<br />
* Rework the multithreading code to work with SoftRasterizer. (DONE!)<br />
* Remove all Objective-C code from the sound code and optimize it. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Fake mic support only works with internal noise samples and white noise samples. External audio files didn't make it into the final release.<br />
* The feature to map inputs to user-defined touch coordinates was dropped due to release time constraints.<br />
* Performance is greatly improved in this version. UI performance is now "snappy". A combination of Cocoa-bindings, code design choices, and UI optimizations have made for an extremely responsive and usable UI. Emulation performance is also dramatically improved, now being only 5% slower than the Windows port.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Users running OS X v10.8 Mountain Lion are having issues with blank/white screens. This is most likely a bug related to the OpenGL blitter, and is considered critical.<br />
* A new bug was introduced where using Dual SPU Synch/Asynch mode would cause an application-level crash. This is a critical bug that is related to the sound threading code.<br />
* Physical microphone support seems to be an important feature to include in the next version.<br />
* Input handling was rewritten for this release and is an improvement compared to the last version, but the code is already showing its limitations. The input handling code will need to be rewritten once again in the next release.<br />
* This release has been considered a very large success for the OS X port.<br />
<br />
<br />
== v0.9.8b (Released on August 6, 2012) ==<br />
This version is different from all other versions in that this version is purely a bug-fix release. This version is being released in response to Apple's release of OS X v10.8 Mountain Lion.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the critical bugs.<br />
* Get this version released as quickly as possible, in response to the Mountain Lion release.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix the critical bugs. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The display window now works with Mountain Lion, and using Dual SPU Synch/Asynch no longer crashes the application.<br />
* Besides the bug fixes, this version is identical to v0.9.8.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* None.<br />
<br />
<br />
== v0.9.9 (Released on April 30, 2013) ==<br />
Initially, this version was meant to be an optimization and maintenance release. It was also meant to further modernize the code base in response to the further obsolescence of Xcode 3 in Mountain Lion. However, due to the length of time since the last release, this version also added several new features.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Transition the code base from using the 10.5 SDK and being forward compatible to using the latest SDK and being backwards compatible to OS X v10.5.<br />
* Integrate the new JIT CPU emulation engine.<br />
* Update the OpenGL blitter to use modern OpenGL functions, and then optimize it.<br />
* Add support for the OpenGL 3D renderer.<br />
* Refactor the input handling code so that it's all gathered in one place, and also sits at the UI level.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the Xcode project files to use the latest installed SDK, then add new build targets specifically for OS X v10.5 releases. (DONE!)<br />
* Add support for the JIT CPU emulation engine. (DONE!)<br />
* Add support for the OpenGL 3D renderer. (DONE!)<br />
* Completely eliminate the usage of fixed-function pipeline OpenGL code from the OpenGL blitter. (DONE!)<br />
* Refactor and rewrite the input handling code. (DONE!)<br />
<br />
<br />
* Add Rigorous 3D Rendering Timing option. (DONE!)<br />
* Add the SLOT-1 Manager, allowing the configuration of SLOT-1 properties. (DONE!)<br />
<br />
<br />
* Add the ability to use multiple display windows, each with individual display settings. (DONE!)<br />
* Show the ROM name and ROM icon of the currently loaded ROM in the display window title bar. (DONE!)<br />
* Add support for the HUD. (DROPPED)<br />
* Add Vertical Sync option for display windows. (DONE!)<br />
* Add Display Orientation option for display windows. (DONE!)<br />
* Add Display Order option for display windows. (DONE!)<br />
* Add Display Separation option for display windows. (DONE!)<br />
* Add HQ4xS video filter. (DONE!)<br />
<br />
<br />
* Add the ability to map multiple input devices to the same command. (DONE!)<br />
* Add the ability to map mice and other pointer-type devices to commands other than Touch. (DONE!)<br />
* Add the ability to map an input device to any command. (DONE!)<br />
* Add the ability to map an input device to user-defined touch coordinates. (DONE!)<br />
* Add the ability to save and load input profiles. (DONE!)<br />
* Complete microphone support. (WORKING)<br />
* Revamp the Input Preferences UI to accommodate all the new input handling features. (DONE!)<br />
<br />
<br />
* Make the items in the File Migration Window properly sorted by version. (DONE!)<br />
* Add Select All and Select None commands in the File Migration Window. (DONE!)<br />
* Add some user-friendly forms for users to receive technical support and submit bug reports. (DONE!)<br />
* Add more system information to the About box. (DONE!)<br />
* Add Help documentation. (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version, and more.<br />
* The input handling code is now where it needs to be. No more rewrites are necessary anymore.<br />
* External audio files may now be used for the fake mic, but physical mic support still isn't there. This will have to be a top priority for the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* A bug was introduced where setting the display mode to Main or Touch as default would create display windows that draw incorrectly.<br />
* A bug was introduced where the R4 path in the SLOT-1 Manager wouldn't properly set.<br />
* A bug was introduced where loading certain audio files for the audio sample generator would cause a crash.<br />
* A bug was introduced where analog HID-inputs would sometimes fail to register.<br />
<br />
<br />
== v0.9.10 (November 28, 2013) ==<br />
This release is meant to further modernize DeSmuME to use the latest and greatest optimizations from the new Xcode 5, as well as modernize the UI with new OS X human interface paradigms. Finally, the Legacy port needs to be obsoleted.<br />
<br />
This release was supposed to be the "add new features" release, and some of those features already made it into v0.9.9. This release is here to finish the work that was started in v0.9.9, with the most important features being SLOT-2 device support and physical microphone support.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The v0.9.9 release brought a lot of new features. But along with those new features, came some new bugs. Those bugs will need to be fixed.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the bugs introduced from the v0.9.9 release.<br />
* Finish adding the features that were first started in v0.9.9:<br />
** Add full support for all SLOT-2 devices.<br />
** Complete the microphone feature by adding physical microphone support.<br />
** Add HUD support.<br />
** Add support for basic replay recording and playback.<br />
** Add TAS-friendly controls.<br />
** Make displays go full screen.<br />
* With the recent release of Xcode 5, try out some new optimizations and see if they improve performance without breaking anything.<br />
* Begin modernizing the UI. Some specific elements would include:<br />
** ROM Info panel<br />
** SLOT-1 Manager window<br />
** File Migration Assistant window<br />
** Change radio button lists w/ button into pull-down menus as appropriate<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further reduce reliance on the user interacting with the file system directly.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DROPPED)<br />
* Complete microphone feature by adding physical microphone support. (DROPPED)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (DROPPED)<br />
* Add Frame Advance control. (DROPPED)<br />
* Show the frame number. (DROPPED)<br />
* Reintegrate GDB stub support. (DROPPED)<br />
<br />
<br />
* Use Xcode 5's new -Ofast and -fvectorize optimizations. (DONE!)<br />
* Use --ffast-math optimization. (DONE!)<br />
<br />
<br />
* Add the ability for display windows to enter full screen mode. (DONE!)<br />
* Save the positions and settings of any remaining display windows upon app exit. (DONE!)<br />
* Create AppleScript for deleting the user defaults files. (DONE!)<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* The goals of adding new features were not met for this version.<br />
* Due to this release happening much quicker than anticipated, many planned features for this release were dropped.<br />
* In the end, this turned out to be more of a modernization and bug fix release more than anything else. New features will have to be pushed to the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* During release testing, it was found that recent code changes broke the loading of ROMs on big-endian systems. Therefore, PPC support was dropped during release testing in order to get this release out on time. There will need to be a maintenance release made to address this issue.<br />
* SourceForge changed their URLs the DeSmuME project, so the Bug Report URL is now incorrect.<br />
* A user complained about choppy video, which was determined to be auto frameskip being too aggressive. This will need to be dealt with somehow, as FPS can have some wild jumps under certain conditions.<br />
<br />
* Saving the positions and settings of the remaining display windows upon app exit is a great feature. It would be a good idea to save more settings upon app exit as appropriate. OS X is heading in a direction where app settings should be restorable between app launches, and DeSmuME needs to start doing the same.<br />
<br />
<br />
== v0.9.10b (December 18, 2013) ==<br />
This is strictly a maintenance release made to address the post-release issues from v0.9.10.<br />
<br />
=== Major issues from the previous version ===<br />
* Fix ROM loading on PPC.<br />
* Fix auto frameskip being overly aggressive.<br />
<br />
=== Main goals for this version ===<br />
* Fix the noted issues from the previous version.<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix ROM loading on big-endian systems. (DONE!)<br />
* Make frame rate transitions smoother, and make auto frame skip slightly less aggressive. (DONE!)<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Besides being able to load ROMs on PPC and the better auto frame skip algorithm, this version is identical to v0.9.10.<br />
<br />
=== Post-release issues and notes ===<br />
* This version has the stability that v0.9.9 was intended to bring. The next version really needs to push new features.<br />
* The most glaring missing features are the lack of SLOT-2 device support and the lack of the physical microphone. Adding these features should be top priority.<br />
* The font changes in OS X Yosemite have affected the appearance of text in some UI controls. This will need to be fixed.<br />
<br />
<br />
== v0.9.11 (April 14, 2015) ==<br />
This version is meant above all else to be a features release. The improved stability and modernized code base of v0.9.10 gave a strong foundation to build upon, so now it's time to take advantage of it!<br />
<br />
=== Major issues from the previous version ===<br />
* New features intended to be present in the previous release were not added.<br />
<br />
=== Main goals for this version ===<br />
* Add new features!<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further modernize the UI with current Apple human interface paradigms. Ensure that the UI looks good for all OS X versions from Leopard to Yosemite.<br />
* Try out Xcode 6's new PGO optimization.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DONE!)<br />
* Complete microphone feature by adding physical microphone support. (DONE!)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (PARTIAL)<br />
* Add new Execution Control panel, that adds new Frame Advance and Frame Jump controls, as well as integrates the execution speed controls, all in one single panel. (DONE!)<br />
* Reintegrate GDB stub support. (DONE!)<br />
* Add ability to run pixel scalers on the GPU. (DONE!)<br />
* Add additional video output filters. (DONE!)<br />
* Add support for turbo and autohold. (DONE!)<br />
<br />
* Use Xcode 6's new PGO optimization. (DONE!)<br />
* Obsolete the Legacy port. (DONE!)<br />
<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window. (DONE!)<br />
* Add support for App Nap in OS X Mavericks and later. (DONE!)<br />
* Fix UI issues with OS X Yosemite. (DONE!)<br />
<br />
=== Final results ===<br />
* Most of the goals were met for this version. Many new features were added, including some which were not originally planned in v0.9.10.<br />
* The only features that were not included were:<br />
** HUD support: It would be better to run this within OpenGL instead of hacking libagg to work in the Cocoa port. Of course, running the entire HUD in OpenGL will require an entirely new drawing engine, so this will take some time to figure out.<br />
** Replay Record/Playback: Basic functionality is included. However, full functionality, in which the user can viably edit replays within DeSmuME, is going to be a long road ahead. HUD support, Lua support, RAM Watch/Search, and a replay editor like Bizhawk's TAS Studio will be required. This will be a major undertaking.<br />
* Now that the Legacy port is gone, the project has been modernized a great deal. This should make it much easier for new Mac developers to jump into the project.<br />
* Overall, I'm very happy with this release. There was a lot of time between this release and v0.9.10, so it was possible to get a lot of testing done for this one, despite the many new features. I feel like this release is stable enough to warrant the next release, v0.9.12, to be another feature-focused release.<br />
<br />
=== Post-release issues and notes ===<br />
- On Retina displays, the display window OpenGL context as well as other various UI elements are still rendered in normal resolution.<br />
- On OS X Mavericks and later, running a full screen display on any monitor other than the primary monitor will cause the dock and menu bar to remain visible, unless the primary monitor is also running a full screen display.<br />
<br />
<br />
== v0.9.12 (TBD) ==<br />
This version will focus on adding to the Cocoa port any remaining features that are currently present in the Windows port. The final goal: Full feature parity with the Windows port. Once this is achieved, then a lot of options open up for adding brand new features, as well as restructuring of the core itself to bring new levels of emulation compatibility and performance.<br />
<br />
I've also noticed, after doing much testing of v0.9.11 and comparing it to the Windows port, as well as the various Linux ports, it's very clear that the feature disparity between frontends is becoming greater. In the future, we will need to unify the look and feel of the various frontends for the purpose of improving the user experience and making our tech support easier. While this release will not focus on actually unifying the frontends, it will lay down much of the groundwork for doing so in v0.9.13.<br />
<br />
=== Major issues from the previous version ===<br />
* Need to fully support Retina displays.<br />
* Fix full screen display behaviors on OS X Mavericks and later.<br />
<br />
=== Main goals for this version ===<br />
* Full feature parity with the Windows port.<br />
* Refactor the core source functionality so that all communication between core and high-level UI goes through a common frontend layer. Have the Cocoa port make use of the common frontend layer.<br />
* Ensure build compatibility through Xcode 7.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add HUD support.<br />
* Add replay editing tools that are viable for TAS users.<br />
* Add support for the various NDS tools.<br />
* Add support for recording audio and video.<br />
* Complete support for Retina displays. (DONE!)<br />
<br />
=== Final results ===<br />
TBD. This version is yet to be released.<br />
<br />
=== Post-release issues and notes ===<br />
TBD. This version is yet to be released.</div>Rogermanhttps://wiki.desmume.org/index.php?title=Cocoa_frontend_todoCocoa frontend todo2015-07-13T03:59:31Z<p>Rogerman: </p>
<hr />
<div>== Overview of Release History ==<br />
<br />
=== The First Cocoa Front End ===<br />
The first release of the Cocoa front end was v0.7.3, released on August 12, 2007.<br />
<br />
=== The Temporary Move to the GTK Front End ===<br />
Due to lack of developer support, the Cocoa code base was shelved after the release of v0.9.4. On November 27, 2009, v0.9.5 was released for OS X using the GTK front end. The last release using the GTK front end was v0.9.6, released on May 19, 2010.<br />
<br />
=== The Return to the Cocoa Front End ===<br />
On February 1, 2011, v0.9.7 was released for Windows, and also for Linux using the GTK. However, there were issues that were specific to the OS X GTK build which prevented its release for months. At this time, the Cocoa code base from v0.9.4 was updated to work with v0.9.7, and was finally released for OS X on April 30, 2011.<br />
<br />
<br />
== v0.9.7 (Released on April 30, 2011) ==<br />
This version returns the OS X port back to its Cocoa roots. Returning the OS X port to a Cocoa codebase is extremely important for improving the UI, optimizing performance, and improving stability.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The GTK front end had a UI that was not Mac-friendly.<br />
* The application was unstable and frequently suffered application-level crashes, especially when the UI was manipulated.<br />
* Performance was poor all around. Emulation performance was especially poor.<br />
* Universal binaries are not possible for the GTK front end.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Make the Cocoa front end the primary Mac front end.<br />
* Make the Cocoa code base the main code base for the OS X port.<br />
* Greatly improve application stability.<br />
* Bring back universal binaries.<br />
* Get this version released as quickly as possible, since the OS X port is already months behind the others.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Unshelve the code base from v0.9.4 and update it to v0.9.7 standards. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The OS X port no longer suffers from application-level crashes, the UI is now Mac-native, and the application bundle now has a universal binary.<br />
* Overall performance has improved significantly since v0.9.6. UI performance is greatly improved, but emulation performance is still at least 20%-40% slower than the Windows port for most games.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Even though v0.9.7 has binary compatibility with OS X v10.4, there are many issues when running on v10.4, especially with missing 3D graphics.<br />
* The Cocoa code base is extremely messy and uses many older coding conventions. This makes it difficult to maintain and even more difficult to add new features. Due to these reasons, a total rewrite of the Cocoa code base is necessary in order to move the OS X port forward.<br />
* There was an uncaught bug in this release where touch coordinates didn't map correctly on rotated screens. This bug will need to be fixed.<br />
<br />
<br />
== v0.9.8 (Released on April 9, 2012) ==<br />
This version is all about building a better future for the OS X port. Although this means having to rebuild the Cocoa code base from scratch, this is a necessary first step in providing a stable foundation for future enhancements.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Emulation performance is still poor.<br />
* The UI is very clunky, and certain parts of the UI are broken.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Completely rewrite the Cocoa code base from the ground up, using Objective-C 2.0, modern coding conventions, and Cocoa-bindings.<br />
* Transition the legacy Cocoa code base out of the current code base.<br />
* Expose as many settings in the user interface as possible.<br />
* Improve emulation performance.<br />
* Improve the user interface.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the project files to be compatible with both Xcode 3 and Xcode 4. (DONE!)<br />
* Update build targets to prefer the latest version of LLVM/Clang. (DONE!)<br />
* Transition all legacy files out of the main project files, and rename legacy files with a legacy suffix. (DONE!)<br />
<br />
<br />
* Add finder icons for readable files. (DONE!)<br />
* Expose all emulation, firmware, SPU, and SoftRasterizer options in the UI. (DONE!)<br />
* Add mouseover tooltips for all settings. (DONE!)<br />
* Add a toolbar to the main emulation window. (DONE!)<br />
* Add more user feedback messages to the status bar. (DONE!)<br />
* Add a volume slider to the status bar, and remove the Sound menu. (DONE!)<br />
* Completely revamp the DeSmuME Preferences window. (DONE!)<br />
* Make external save state files behave like normal document files. (DONE!)<br />
* Expose all available ROM information in the ROM Info panel. (DONE!)<br />
* Make ROM title strings Unicode aware. (DONE!)<br />
* Change the behavior of the close window control, where clicking on it while a ROM is loaded will close the ROM. (DONE!)<br />
<br />
<br />
* Add the ability to change the window display mode. (DONE!)<br />
* Add Bilinear Filtering option for the display window. (DONE!)<br />
* Add video filter support for the display window. (DONE!)<br />
* Add the ability to rotate the display to any arbitrary rotation angle. (DONE!)<br />
* Add the ability to take screenshots using Edit > Copy. (DONE!)<br />
* Add the ability to save screenshot files in several different image file formats. (DONE!)<br />
* Add support for using an ADVANsCEne database for checking ROM properties. (DONE!)<br />
* Add the Cheat Manager, allowing for Action Replay codes and an internal value search tool. (DONE!)<br />
* Add the ability to import Action Replay codes from an R4 Cheat Database. (DONE!)<br />
* Add the ability to import and export ROM save files in RAW and No$GBA formats. (DONE!)<br />
* Add the File Migration Assistant to help users migrate files from previous versions. (DONE!)<br />
<br />
<br />
* Add support for mapping Lid and Debug controls. (DONE!)<br />
* Add fake mic support. (WORKING)<br />
* Add the ability to map input to user-defined touch coordinates. (DROPPED)<br />
* Allow for all non-modifier keys on a keyboard to be used as an input mapping. (DONE!)<br />
* Allow all HID devices to be used for input mappings. (DONE!)<br />
<br />
<br />
* Add automatic frameskip. (DONE!)<br />
* Make ROM cartridge files load on a separate thread. (DONE!)<br />
* Rework the main emulation loop to be as lightweight as possible. (DONE!)<br />
* Rework the multithreading code to work with SoftRasterizer. (DONE!)<br />
* Remove all Objective-C code from the sound code and optimize it. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Fake mic support only works with internal noise samples and white noise samples. External audio files didn't make it into the final release.<br />
* The feature to map inputs to user-defined touch coordinates was dropped due to release time constraints.<br />
* Performance is greatly improved in this version. UI performance is now "snappy". A combination of Cocoa-bindings, code design choices, and UI optimizations have made for an extremely responsive and usable UI. Emulation performance is also dramatically improved, now being only 5% slower than the Windows port.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Users running OS X v10.8 Mountain Lion are having issues with blank/white screens. This is most likely a bug related to the OpenGL blitter, and is considered critical.<br />
* A new bug was introduced where using Dual SPU Synch/Asynch mode would cause an application-level crash. This is a critical bug that is related to the sound threading code.<br />
* Physical microphone support seems to be an important feature to include in the next version.<br />
* Input handling was rewritten for this release and is an improvement compared to the last version, but the code is already showing its limitations. The input handling code will need to be rewritten once again in the next release.<br />
* This release has been considered a very large success for the OS X port.<br />
<br />
<br />
== v0.9.8b (Released on August 6, 2012) ==<br />
This version is different from all other versions in that this version is purely a bug-fix release. This version is being released in response to Apple's release of OS X v10.8 Mountain Lion.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the critical bugs.<br />
* Get this version released as quickly as possible, in response to the Mountain Lion release.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix the critical bugs. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The display window now works with Mountain Lion, and using Dual SPU Synch/Asynch no longer crashes the application.<br />
* Besides the bug fixes, this version is identical to v0.9.8.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* None.<br />
<br />
<br />
== v0.9.9 (Released on April 30, 2013) ==<br />
Initially, this version was meant to be an optimization and maintenance release. It was also meant to further modernize the code base in response to the further obsolescence of Xcode 3 in Mountain Lion. However, due to the length of time since the last release, this version also added several new features.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Transition the code base from using the 10.5 SDK and being forward compatible to using the latest SDK and being backwards compatible to OS X v10.5.<br />
* Integrate the new JIT CPU emulation engine.<br />
* Update the OpenGL blitter to use modern OpenGL functions, and then optimize it.<br />
* Add support for the OpenGL 3D renderer.<br />
* Refactor the input handling code so that it's all gathered in one place, and also sits at the UI level.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the Xcode project files to use the latest installed SDK, then add new build targets specifically for OS X v10.5 releases. (DONE!)<br />
* Add support for the JIT CPU emulation engine. (DONE!)<br />
* Add support for the OpenGL 3D renderer. (DONE!)<br />
* Completely eliminate the usage of fixed-function pipeline OpenGL code from the OpenGL blitter. (DONE!)<br />
* Refactor and rewrite the input handling code. (DONE!)<br />
<br />
<br />
* Add Rigorous 3D Rendering Timing option. (DONE!)<br />
* Add the SLOT-1 Manager, allowing the configuration of SLOT-1 properties. (DONE!)<br />
<br />
<br />
* Add the ability to use multiple display windows, each with individual display settings. (DONE!)<br />
* Show the ROM name and ROM icon of the currently loaded ROM in the display window title bar. (DONE!)<br />
* Add support for the HUD. (DROPPED)<br />
* Add Vertical Sync option for display windows. (DONE!)<br />
* Add Display Orientation option for display windows. (DONE!)<br />
* Add Display Order option for display windows. (DONE!)<br />
* Add Display Separation option for display windows. (DONE!)<br />
* Add HQ4xS video filter. (DONE!)<br />
<br />
<br />
* Add the ability to map multiple input devices to the same command. (DONE!)<br />
* Add the ability to map mice and other pointer-type devices to commands other than Touch. (DONE!)<br />
* Add the ability to map an input device to any command. (DONE!)<br />
* Add the ability to map an input device to user-defined touch coordinates. (DONE!)<br />
* Add the ability to save and load input profiles. (DONE!)<br />
* Complete microphone support. (WORKING)<br />
* Revamp the Input Preferences UI to accommodate all the new input handling features. (DONE!)<br />
<br />
<br />
* Make the items in the File Migration Window properly sorted by version. (DONE!)<br />
* Add Select All and Select None commands in the File Migration Window. (DONE!)<br />
* Add some user-friendly forms for users to receive technical support and submit bug reports. (DONE!)<br />
* Add more system information to the About box. (DONE!)<br />
* Add Help documentation. (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version, and more.<br />
* The input handling code is now where it needs to be. No more rewrites are necessary anymore.<br />
* External audio files may now be used for the fake mic, but physical mic support still isn't there. This will have to be a top priority for the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* A bug was introduced where setting the display mode to Main or Touch as default would create display windows that draw incorrectly.<br />
* A bug was introduced where the R4 path in the SLOT-1 Manager wouldn't properly set.<br />
* A bug was introduced where loading certain audio files for the audio sample generator would cause a crash.<br />
* A bug was introduced where analog HID-inputs would sometimes fail to register.<br />
<br />
<br />
== v0.9.10 (November 28, 2013) ==<br />
This release is meant to further modernize DeSmuME to use the latest and greatest optimizations from the new Xcode 5, as well as modernize the UI with new OS X human interface paradigms. Finally, the Legacy port needs to be obsoleted.<br />
<br />
This release was supposed to be the "add new features" release, and some of those features already made it into v0.9.9. This release is here to finish the work that was started in v0.9.9, with the most important features being SLOT-2 device support and physical microphone support.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The v0.9.9 release brought a lot of new features. But along with those new features, came some new bugs. Those bugs will need to be fixed.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the bugs introduced from the v0.9.9 release.<br />
* Finish adding the features that were first started in v0.9.9:<br />
** Add full support for all SLOT-2 devices.<br />
** Complete the microphone feature by adding physical microphone support.<br />
** Add HUD support.<br />
** Add support for basic replay recording and playback.<br />
** Add TAS-friendly controls.<br />
** Make displays go full screen.<br />
* With the recent release of Xcode 5, try out some new optimizations and see if they improve performance without breaking anything.<br />
* Begin modernizing the UI. Some specific elements would include:<br />
** ROM Info panel<br />
** SLOT-1 Manager window<br />
** File Migration Assistant window<br />
** Change radio button lists w/ button into pull-down menus as appropriate<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further reduce reliance on the user interacting with the file system directly.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DROPPED)<br />
* Complete microphone feature by adding physical microphone support. (DROPPED)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (DROPPED)<br />
* Add Frame Advance control. (DROPPED)<br />
* Show the frame number. (DROPPED)<br />
* Reintegrate GDB stub support. (DROPPED)<br />
<br />
<br />
* Use Xcode 5's new -Ofast and -fvectorize optimizations. (DONE!)<br />
* Use --ffast-math optimization. (DONE!)<br />
<br />
<br />
* Add the ability for display windows to enter full screen mode. (DONE!)<br />
* Save the positions and settings of any remaining display windows upon app exit. (DONE!)<br />
* Create AppleScript for deleting the user defaults files. (DONE!)<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* The goals of adding new features were not met for this version.<br />
* Due to this release happening much quicker than anticipated, many planned features for this release were dropped.<br />
* In the end, this turned out to be more of a modernization and bug fix release more than anything else. New features will have to be pushed to the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* During release testing, it was found that recent code changes broke the loading of ROMs on big-endian systems. Therefore, PPC support was dropped during release testing in order to get this release out on time. There will need to be a maintenance release made to address this issue.<br />
* SourceForge changed their URLs the DeSmuME project, so the Bug Report URL is now incorrect.<br />
* A user complained about choppy video, which was determined to be auto frameskip being too aggressive. This will need to be dealt with somehow, as FPS can have some wild jumps under certain conditions.<br />
<br />
* Saving the positions and settings of the remaining display windows upon app exit is a great feature. It would be a good idea to save more settings upon app exit as appropriate. OS X is heading in a direction where app settings should be restorable between app launches, and DeSmuME needs to start doing the same.<br />
<br />
<br />
== v0.9.10b (December 18, 2013) ==<br />
This is strictly a maintenance release made to address the post-release issues from v0.9.10.<br />
<br />
=== Major issues from the previous version ===<br />
* Fix ROM loading on PPC.<br />
* Fix auto frameskip being overly aggressive.<br />
<br />
=== Main goals for this version ===<br />
* Fix the noted issues from the previous version.<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix ROM loading on big-endian systems. (DONE!)<br />
* Make frame rate transitions smoother, and make auto frame skip slightly less aggressive. (DONE!)<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Besides being able to load ROMs on PPC and the better auto frame skip algorithm, this version is identical to v0.9.10.<br />
<br />
=== Post-release issues and notes ===<br />
* This version has the stability that v0.9.9 was intended to bring. The next version really needs to push new features.<br />
* The most glaring missing features are the lack of SLOT-2 device support and the lack of the physical microphone. Adding these features should be top priority.<br />
* The font changes in OS X Yosemite have affected the appearance of text in some UI controls. This will need to be fixed.<br />
<br />
<br />
== v0.9.11 (April 14, 2015) ==<br />
This version is meant above all else to be a features release. The improved stability and modernized code base of v0.9.10 gave a strong foundation to build upon, so now it's time to take advantage of it!<br />
<br />
=== Major issues from the previous version ===<br />
* New features intended to be present in the previous release were not added.<br />
<br />
=== Main goals for this version ===<br />
* Add new features!<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further modernize the UI with current Apple human interface paradigms. Ensure that the UI looks good for all OS X versions from Leopard to Yosemite.<br />
* Try out Xcode 6's new PGO optimization.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DONE!)<br />
* Complete microphone feature by adding physical microphone support. (DONE!)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (PARTIAL)<br />
* Add new Execution Control panel, that adds new Frame Advance and Frame Jump controls, as well as integrates the execution speed controls, all in one single panel. (DONE!)<br />
* Reintegrate GDB stub support. (DONE!)<br />
* Add ability to run pixel scalers on the GPU. (DONE!)<br />
* Add additional video output filters. (DONE!)<br />
* Add support for turbo and autohold. (DONE!)<br />
<br />
* Use Xcode 6's new PGO optimization. (DONE!)<br />
* Obsolete the Legacy port. (DONE!)<br />
<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window. (DONE!)<br />
* Add support for App Nap in OS X Mavericks and later. (DONE!)<br />
* Fix UI issues with OS X Yosemite. (DONE!)<br />
<br />
=== Final results ===<br />
* Most of the goals were met for this version. Many new features were added, including some which were not originally planned in v0.9.10.<br />
* The only features that were not included were:<br />
** HUD support: It would be better to run this within OpenGL instead of hacking libagg to work in the Cocoa port. Of course, running the entire HUD in OpenGL will require an entirely new drawing engine, so this will take some time to figure out.<br />
** Replay Record/Playback: Basic functionality is included. However, full functionality, in which the user can viably edit replays within DeSmuME, is going to be a long road ahead. HUD support, Lua support, RAM Watch/Search, and a replay editor like Bizhawk's TAS Studio will be required. This will be a major undertaking.<br />
* Now that the Legacy port is gone, the project has been modernized a great deal. This should make it much easier for new Mac developers to jump into the project.<br />
* Overall, I'm very happy with this release. There was a lot of time between this release and v0.9.10, so it was possible to get a lot of testing done for this one, despite the many new features. I feel like this release is stable enough to warrant the next release, v0.9.12, to be another feature-focused release.<br />
<br />
=== Post-release issues and notes ===<br />
- On Retina displays, the display window OpenGL context as well as other various UI elements are still rendered in normal resolution.<br />
- On OS X Mavericks and later, running a full screen display on any monitor other than the primary monitor will cause the dock and menu bar to remain visible, unless the primary monitor is also running a full screen display.<br />
<br />
<br />
== v0.9.12 (TBD) ==<br />
This version will focus on adding to the Cocoa port any remaining features that are currently present in the Windows port. The final goal: Full feature parity with the Windows port. Once this is achieved, then a lot of options open up for adding brand new features, as well as restructuring of the core itself to bring new levels of emulation compatibility and performance.<br />
<br />
I've also noticed, after doing much testing of v0.9.11 and comparing it to the Windows port, as well as the various Linux ports, it's very clear that the feature disparity between frontends is becoming greater. In the future, we will need to unify the look and feel of the various frontends for the purpose of improving the user experience and making our tech support easier. While this release will not focus on actually unifying the frontends, it will lay down much of the groundwork for doing so in v0.9.13.<br />
<br />
=== Major issues from the previous version ===<br />
- Need to fully support Retina displays.<br />
- Fix full screen display behaviors on OS X Mavericks and later.<br />
<br />
=== Main goals for this version ===<br />
* Full feature parity with the Windows port.<br />
* Refactor the core source functionality so that all communication between core and high-level UI goes through a common frontend layer. Have the Cocoa port make use of the common frontend layer.<br />
* Ensure build compatibility through Xcode 7.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add HUD support.<br />
* Add replay editing tools that are viable for TAS users.<br />
* Add support for the various NDS tools.<br />
* Add support for recording audio and video.<br />
* Complete support for Retina displays. (DONE!)<br />
<br />
=== Final results ===<br />
TBD. This version is yet to be released.<br />
<br />
=== Post-release issues and notes ===<br />
TBD. This version is yet to be released.</div>Rogermanhttps://wiki.desmume.org/index.php?title=Release_0.9.11Release 0.9.112015-04-15T00:09:39Z<p>Rogerman: </p>
<hr />
<div>'''Release Date: April 14, 2015 (r4908-r5146)'''<br />
<br />
In this version, we have focused on the Cocoa frontend, but there have been some good core fixes over so long. Notably, the save-related issues resulting in the advice "dont use 0.9.10" have been resolved.<br />
<br />
General/Core:<br />
bug: fix large numbers of games not being able to save anymore<br />
bug: fix some missing sound effects due to wrong volumes in some boot scenarios and other things<br />
bug: fix freezes due to tiny looping sounds<br />
bug: fix many big endian issues<br />
bug: fix some apparently rarely-used CPU instructions, no known consequences<br />
bug: fix (block) reading of some GPU registers<br />
bug: fix action replay code type 0xE<br />
bug: fix reading of last 4 bytes of rom<br />
bug: large improvements to stability of GDB stub<br />
bug: support w-buffer support in OpenGL renderers<br />
bug: fix unpredictable crashes in some 3d scenes from w=0<br />
enh: better loading of roms (bad patches) with wrong size info in header<br />
enh: warn user sometimes when 'stream rom from disk' will create malfunctions<br />
enh: add xBRZ filters<br />
enh: add "TXT Hack" for software rasterizer to improve text rendering in some games<br />
<br />
Windows:<br />
bug: fix 5x filters<br />
enh: support import of action replay save files (.dss)<br />
enh: add antialiasing option for OpenGL renderers<br />
enh: don't malfunction if saveram is unavailable or read-only<br />
<br />
Cocoa:<br />
bug: 16-bit to 32-bit color space conversions no longer darken video or images<br />
bug: fix intermittent issues with loading user defaults on app startup<br />
bug: fix rendering inaccuracies of the video preview in the app display preferences<br />
bug: fix various UI font rendering and text alignment issues on OS X Yosemite<br />
bug: fix crackly sound from N-sync and Z-sync methods<br />
enh: make N-sync method the default sound sync method since it has much lower latency than P-sync method<br />
enh: add support for gdbstub (Tools > Show GDB Stub Control) (only available on custom builds using the dev+ build target)<br />
enh: optimize input handling to use less CPU<br />
enh: add support for App Nap when the app is in an idle state (only supported on OS X Mavericks and later)<br />
enh: add Execution Control panel (Emulation > Show Execution Control), now with frame advance and frame jump controls<br />
enh: auto frame skip is now smoother<br />
enh: further improve execution timing accuracy<br />
enh: improve overall video performance<br />
enh: render video through a 3-stage filtering pipeline, (Video Source)-->(Pixel Scaler)-->(Video Output)<br />
enh: add the following video source filters - Deposterize<br />
enh: add the following video output filters - Bicubic B-Spline, Bicubic Mitchell-Netravali, Lanczos2, Lanczos3<br />
enh: add ability to run all existing pixel scalers on either the CPU or the GPU<br />
enh: add ability to toggle the main and touch display positions (View > Toggle All Displays)<br />
enh: add preliminary support for replay playback and recording<br />
enh: add support for turbo and autohold<br />
enh: add support for the entire suite of slot-2 devices (Emulation > Show SLOT-2 Manager)<br />
enh: add support for using the host machine's audio input device for emulating the NDS microphone (Emulation > Show Microphone Settings)<br />
enh: change the sine wave tone generator's range from 100Hz-5000Hz to 40Hz-4000Hz<br />
enh: reorganize the menu options to more logical locations<br />
enh: greatly improve the File Migration Assistant (now renamed Game Data Migration Assistant) and ROM Info panel with a more modern and space efficient look and feel<br />
enh: miscellaneous user interface improvements<br />
<br />
Linux:<br />
bug: fix screen gap bug<br />
bug: workaround for std::bad_alloc exceptions compiler bugs<br />
enh: add experimental AV recording<br />
enh: generally improve main loop throttling and skipping<br />
enh: massive improvements to HUD and menu layout<br />
enh: add window sizing options and sound interpolation options<br />
enh: add Lid button; disallow U+D, L+R; manual option saving</div>Rogermanhttps://wiki.desmume.org/index.php?title=Cocoa_frontend_todoCocoa frontend todo2015-04-05T06:26:25Z<p>Rogerman: </p>
<hr />
<div>== Overview of Release History ==<br />
<br />
=== The First Cocoa Front End ===<br />
The first release of the Cocoa front end was v0.7.3, released on August 12, 2007.<br />
<br />
=== The Temporary Move to the GTK Front End ===<br />
Due to lack of developer support, the Cocoa code base was shelved after the release of v0.9.4. On November 27, 2009, v0.9.5 was released for OS X using the GTK front end. The last release using the GTK front end was v0.9.6, released on May 19, 2010.<br />
<br />
=== The Return to the Cocoa Front End ===<br />
On February 1, 2011, v0.9.7 was released for Windows, and also for Linux using the GTK. However, there were issues that were specific to the OS X GTK build which prevented its release for months. At this time, the Cocoa code base from v0.9.4 was updated to work with v0.9.7, and was finally released for OS X on April 30, 2011.<br />
<br />
<br />
== v0.9.7 (Released on April 30, 2011) ==<br />
This version returns the OS X port back to its Cocoa roots. Returning the OS X port to a Cocoa codebase is extremely important for improving the UI, optimizing performance, and improving stability.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The GTK front end had a UI that was not Mac-friendly.<br />
* The application was unstable and frequently suffered application-level crashes, especially when the UI was manipulated.<br />
* Performance was poor all around. Emulation performance was especially poor.<br />
* Universal binaries are not possible for the GTK front end.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Make the Cocoa front end the primary Mac front end.<br />
* Make the Cocoa code base the main code base for the OS X port.<br />
* Greatly improve application stability.<br />
* Bring back universal binaries.<br />
* Get this version released as quickly as possible, since the OS X port is already months behind the others.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Unshelve the code base from v0.9.4 and update it to v0.9.7 standards. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The OS X port no longer suffers from application-level crashes, the UI is now Mac-native, and the application bundle now has a universal binary.<br />
* Overall performance has improved significantly since v0.9.6. UI performance is greatly improved, but emulation performance is still at least 20%-40% slower than the Windows port for most games.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Even though v0.9.7 has binary compatibility with OS X v10.4, there are many issues when running on v10.4, especially with missing 3D graphics.<br />
* The Cocoa code base is extremely messy and uses many older coding conventions. This makes it difficult to maintain and even more difficult to add new features. Due to these reasons, a total rewrite of the Cocoa code base is necessary in order to move the OS X port forward.<br />
* There was an uncaught bug in this release where touch coordinates didn't map correctly on rotated screens. This bug will need to be fixed.<br />
<br />
<br />
== v0.9.8 (Released on April 9, 2012) ==<br />
This version is all about building a better future for the OS X port. Although this means having to rebuild the Cocoa code base from scratch, this is a necessary first step in providing a stable foundation for future enhancements.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Emulation performance is still poor.<br />
* The UI is very clunky, and certain parts of the UI are broken.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Completely rewrite the Cocoa code base from the ground up, using Objective-C 2.0, modern coding conventions, and Cocoa-bindings.<br />
* Transition the legacy Cocoa code base out of the current code base.<br />
* Expose as many settings in the user interface as possible.<br />
* Improve emulation performance.<br />
* Improve the user interface.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the project files to be compatible with both Xcode 3 and Xcode 4. (DONE!)<br />
* Update build targets to prefer the latest version of LLVM/Clang. (DONE!)<br />
* Transition all legacy files out of the main project files, and rename legacy files with a legacy suffix. (DONE!)<br />
<br />
<br />
* Add finder icons for readable files. (DONE!)<br />
* Expose all emulation, firmware, SPU, and SoftRasterizer options in the UI. (DONE!)<br />
* Add mouseover tooltips for all settings. (DONE!)<br />
* Add a toolbar to the main emulation window. (DONE!)<br />
* Add more user feedback messages to the status bar. (DONE!)<br />
* Add a volume slider to the status bar, and remove the Sound menu. (DONE!)<br />
* Completely revamp the DeSmuME Preferences window. (DONE!)<br />
* Make external save state files behave like normal document files. (DONE!)<br />
* Expose all available ROM information in the ROM Info panel. (DONE!)<br />
* Make ROM title strings Unicode aware. (DONE!)<br />
* Change the behavior of the close window control, where clicking on it while a ROM is loaded will close the ROM. (DONE!)<br />
<br />
<br />
* Add the ability to change the window display mode. (DONE!)<br />
* Add Bilinear Filtering option for the display window. (DONE!)<br />
* Add video filter support for the display window. (DONE!)<br />
* Add the ability to rotate the display to any arbitrary rotation angle. (DONE!)<br />
* Add the ability to take screenshots using Edit > Copy. (DONE!)<br />
* Add the ability to save screenshot files in several different image file formats. (DONE!)<br />
* Add support for using an ADVANsCEne database for checking ROM properties. (DONE!)<br />
* Add the Cheat Manager, allowing for Action Replay codes and an internal value search tool. (DONE!)<br />
* Add the ability to import Action Replay codes from an R4 Cheat Database. (DONE!)<br />
* Add the ability to import and export ROM save files in RAW and No$GBA formats. (DONE!)<br />
* Add the File Migration Assistant to help users migrate files from previous versions. (DONE!)<br />
<br />
<br />
* Add support for mapping Lid and Debug controls. (DONE!)<br />
* Add fake mic support. (WORKING)<br />
* Add the ability to map input to user-defined touch coordinates. (DROPPED)<br />
* Allow for all non-modifier keys on a keyboard to be used as an input mapping. (DONE!)<br />
* Allow all HID devices to be used for input mappings. (DONE!)<br />
<br />
<br />
* Add automatic frameskip. (DONE!)<br />
* Make ROM cartridge files load on a separate thread. (DONE!)<br />
* Rework the main emulation loop to be as lightweight as possible. (DONE!)<br />
* Rework the multithreading code to work with SoftRasterizer. (DONE!)<br />
* Remove all Objective-C code from the sound code and optimize it. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Fake mic support only works with internal noise samples and white noise samples. External audio files didn't make it into the final release.<br />
* The feature to map inputs to user-defined touch coordinates was dropped due to release time constraints.<br />
* Performance is greatly improved in this version. UI performance is now "snappy". A combination of Cocoa-bindings, code design choices, and UI optimizations have made for an extremely responsive and usable UI. Emulation performance is also dramatically improved, now being only 5% slower than the Windows port.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Users running OS X v10.8 Mountain Lion are having issues with blank/white screens. This is most likely a bug related to the OpenGL blitter, and is considered critical.<br />
* A new bug was introduced where using Dual SPU Synch/Asynch mode would cause an application-level crash. This is a critical bug that is related to the sound threading code.<br />
* Physical microphone support seems to be an important feature to include in the next version.<br />
* Input handling was rewritten for this release and is an improvement compared to the last version, but the code is already showing its limitations. The input handling code will need to be rewritten once again in the next release.<br />
* This release has been considered a very large success for the OS X port.<br />
<br />
<br />
== v0.9.8b (Released on August 6, 2012) ==<br />
This version is different from all other versions in that this version is purely a bug-fix release. This version is being released in response to Apple's release of OS X v10.8 Mountain Lion.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the critical bugs.<br />
* Get this version released as quickly as possible, in response to the Mountain Lion release.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix the critical bugs. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The display window now works with Mountain Lion, and using Dual SPU Synch/Asynch no longer crashes the application.<br />
* Besides the bug fixes, this version is identical to v0.9.8.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* None.<br />
<br />
<br />
== v0.9.9 (Released on April 30, 2013) ==<br />
Initially, this version was meant to be an optimization and maintenance release. It was also meant to further modernize the code base in response to the further obsolescence of Xcode 3 in Mountain Lion. However, due to the length of time since the last release, this version also added several new features.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Transition the code base from using the 10.5 SDK and being forward compatible to using the latest SDK and being backwards compatible to OS X v10.5.<br />
* Integrate the new JIT CPU emulation engine.<br />
* Update the OpenGL blitter to use modern OpenGL functions, and then optimize it.<br />
* Add support for the OpenGL 3D renderer.<br />
* Refactor the input handling code so that it's all gathered in one place, and also sits at the UI level.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the Xcode project files to use the latest installed SDK, then add new build targets specifically for OS X v10.5 releases. (DONE!)<br />
* Add support for the JIT CPU emulation engine. (DONE!)<br />
* Add support for the OpenGL 3D renderer. (DONE!)<br />
* Completely eliminate the usage of fixed-function pipeline OpenGL code from the OpenGL blitter. (DONE!)<br />
* Refactor and rewrite the input handling code. (DONE!)<br />
<br />
<br />
* Add Rigorous 3D Rendering Timing option. (DONE!)<br />
* Add the SLOT-1 Manager, allowing the configuration of SLOT-1 properties. (DONE!)<br />
<br />
<br />
* Add the ability to use multiple display windows, each with individual display settings. (DONE!)<br />
* Show the ROM name and ROM icon of the currently loaded ROM in the display window title bar. (DONE!)<br />
* Add support for the HUD. (DROPPED)<br />
* Add Vertical Sync option for display windows. (DONE!)<br />
* Add Display Orientation option for display windows. (DONE!)<br />
* Add Display Order option for display windows. (DONE!)<br />
* Add Display Separation option for display windows. (DONE!)<br />
* Add HQ4xS video filter. (DONE!)<br />
<br />
<br />
* Add the ability to map multiple input devices to the same command. (DONE!)<br />
* Add the ability to map mice and other pointer-type devices to commands other than Touch. (DONE!)<br />
* Add the ability to map an input device to any command. (DONE!)<br />
* Add the ability to map an input device to user-defined touch coordinates. (DONE!)<br />
* Add the ability to save and load input profiles. (DONE!)<br />
* Complete microphone support. (WORKING)<br />
* Revamp the Input Preferences UI to accommodate all the new input handling features. (DONE!)<br />
<br />
<br />
* Make the items in the File Migration Window properly sorted by version. (DONE!)<br />
* Add Select All and Select None commands in the File Migration Window. (DONE!)<br />
* Add some user-friendly forms for users to receive technical support and submit bug reports. (DONE!)<br />
* Add more system information to the About box. (DONE!)<br />
* Add Help documentation. (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version, and more.<br />
* The input handling code is now where it needs to be. No more rewrites are necessary anymore.<br />
* External audio files may now be used for the fake mic, but physical mic support still isn't there. This will have to be a top priority for the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* A bug was introduced where setting the display mode to Main or Touch as default would create display windows that draw incorrectly.<br />
* A bug was introduced where the R4 path in the SLOT-1 Manager wouldn't properly set.<br />
* A bug was introduced where loading certain audio files for the audio sample generator would cause a crash.<br />
* A bug was introduced where analog HID-inputs would sometimes fail to register.<br />
<br />
<br />
== v0.9.10 (November 28, 2013) ==<br />
This release is meant to further modernize DeSmuME to use the latest and greatest optimizations from the new Xcode 5, as well as modernize the UI with new OS X human interface paradigms. Finally, the Legacy port needs to be obsoleted.<br />
<br />
This release was supposed to be the "add new features" release, and some of those features already made it into v0.9.9. This release is here to finish the work that was started in v0.9.9, with the most important features being SLOT-2 device support and physical microphone support.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The v0.9.9 release brought a lot of new features. But along with those new features, came some new bugs. Those bugs will need to be fixed.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the bugs introduced from the v0.9.9 release.<br />
* Finish adding the features that were first started in v0.9.9:<br />
** Add full support for all SLOT-2 devices.<br />
** Complete the microphone feature by adding physical microphone support.<br />
** Add HUD support.<br />
** Add support for basic replay recording and playback.<br />
** Add TAS-friendly controls.<br />
** Make displays go full screen.<br />
* With the recent release of Xcode 5, try out some new optimizations and see if they improve performance without breaking anything.<br />
* Begin modernizing the UI. Some specific elements would include:<br />
** ROM Info panel<br />
** SLOT-1 Manager window<br />
** File Migration Assistant window<br />
** Change radio button lists w/ button into pull-down menus as appropriate<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further reduce reliance on the user interacting with the file system directly.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DROPPED)<br />
* Complete microphone feature by adding physical microphone support. (DROPPED)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (DROPPED)<br />
* Add Frame Advance control. (DROPPED)<br />
* Show the frame number. (DROPPED)<br />
* Reintegrate GDB stub support. (DROPPED)<br />
<br />
<br />
* Use Xcode 5's new -Ofast and -fvectorize optimizations. (DONE!)<br />
* Use --ffast-math optimization. (DONE!)<br />
<br />
<br />
* Add the ability for display windows to enter full screen mode. (DONE!)<br />
* Save the positions and settings of any remaining display windows upon app exit. (DONE!)<br />
* Create AppleScript for deleting the user defaults files. (DONE!)<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* The goals of adding new features were not met for this version.<br />
* Due to this release happening much quicker than anticipated, many planned features for this release were dropped.<br />
* In the end, this turned out to be more of a modernization and bug fix release more than anything else. New features will have to be pushed to the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* During release testing, it was found that recent code changes broke the loading of ROMs on big-endian systems. Therefore, PPC support was dropped during release testing in order to get this release out on time. There will need to be a maintenance release made to address this issue.<br />
* SourceForge changed their URLs the DeSmuME project, so the Bug Report URL is now incorrect.<br />
* A user complained about choppy video, which was determined to be auto frameskip being too aggressive. This will need to be dealt with somehow, as FPS can have some wild jumps under certain conditions.<br />
<br />
* Saving the positions and settings of the remaining display windows upon app exit is a great feature. It would be a good idea to save more settings upon app exit as appropriate. OS X is heading in a direction where app settings should be restorable between app launches, and DeSmuME needs to start doing the same.<br />
<br />
<br />
== v0.9.10b (December 18, 2013) ==<br />
This is strictly a maintenance release made to address the post-release issues from v0.9.10.<br />
<br />
=== Major issues from the previous version ===<br />
* Fix ROM loading on PPC.<br />
* Fix auto frameskip being overly aggressive.<br />
<br />
=== Main goals for this version ===<br />
* Fix the noted issues from the previous version.<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix ROM loading on big-endian systems. (DONE!)<br />
* Make frame rate transitions smoother, and make auto frame skip slightly less aggressive. (DONE!)<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Besides being able to load ROMs on PPC and the better auto frame skip algorithm, this version is identical to v0.9.10.<br />
<br />
=== Post-release issues and notes ===<br />
* This version has the stability that v0.9.9 was intended to bring. The next version really needs to push new features.<br />
* The most glaring missing features are the lack of SLOT-2 device support and the lack of the physical microphone. Adding these features should be top priority.<br />
* The font changes in OS X Yosemite have affected the appearance of text in some UI controls. This will need to be fixed.<br />
<br />
<br />
== v0.9.11 (April ???, 2015) ==<br />
This version is meant above all else to be a features release. The improved stability and modernized code base of v0.9.10 gave a strong foundation to build upon, so now it's time to take advantage of it!<br />
<br />
=== Major issues from the previous version ===<br />
* New features intended to be present in the previous release were not added.<br />
<br />
=== Main goals for this version ===<br />
* Add new features!<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further modernize the UI with current Apple human interface paradigms. Ensure that the UI looks good for all OS X versions from Leopard to Yosemite.<br />
* Try out Xcode 6's new PGO optimization.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DONE!)<br />
* Complete microphone feature by adding physical microphone support. (DONE!)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (PARTIAL)<br />
* Add new Execution Control panel, that adds new Frame Advance and Frame Jump controls, as well as integrates the execution speed controls, all in one single panel. (DONE!)<br />
* Reintegrate GDB stub support. (DONE!)<br />
* Add ability to run pixel scalers on the GPU. (DONE!)<br />
* Add additional video output filters. (DONE!)<br />
* Add support for turbo and autohold. (DONE!)<br />
<br />
* Use Xcode 6's new PGO optimization. (DONE!)<br />
* Obsolete the Legacy port. (DONE!)<br />
<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window. (DONE!)<br />
* Add support for App Nap in OS X Mavericks and later. (DONE!)<br />
* Fix UI issues with OS X Yosemite. (DONE!)<br />
<br />
=== Final results ===<br />
* Most of the goals were met for this version. Many new features were added, including some which were not originally planned in v0.9.10.<br />
* The only features that were not included were:<br />
** HUD support: It would be better to run this within OpenGL instead of hacking libagg to work in the Cocoa port. Of course, running the entire HUD in OpenGL will require an entirely new drawing engine, so this will take some time to figure out.<br />
** Replay Record/Playback: Basic functionality is included. However, full functionality, in which the user can viably edit replays within DeSmuME, is going to be a long road ahead. HUD support, Lua support, RAM Watch/Search, and a replay editor like Bizhawk's TAS Studio will be required. This will be a major undertaking.<br />
* Now that the Legacy port is gone, the project has been modernized a great deal. This should make it much easier for new Mac developers to jump into the project.<br />
* Overall, I'm very happy with this release. There was a lot of time between this release and v0.9.10, so it was possible to get a lot of testing done for this one, despite the many new features. I feel like this release is stable enough to warrant the next release, v0.9.12, to be another feature-focused release.<br />
<br />
=== Post-release issues and notes ===<br />
TBD. This version is still too new to determine any post-release issues.<br />
<br />
<br />
== v0.9.12 (TBD) ==<br />
This version will focus on adding to the Cocoa port any remaining features that are currently present in the Windows port. The final goal: Full feature parity with the Windows port. Once this is achieved, then a lot of options open up for adding brand new features, as well as restructuring of the core itself to bring new levels of emulation compatibility and performance.<br />
<br />
I've also noticed, after doing much testing of v0.9.11 and comparing it to the Windows port, as well as the various Linux ports, it's very clear that the feature disparity between frontends is becoming greater. In the future, we will need to unify the look and feel of the various frontends for the purpose of improving the user experience and making our tech support easier. While this release will not focus on actually unifying the frontends, it will lay down much of the groundwork for doing so in v0.9.13.<br />
<br />
=== Major issues from the previous version ===<br />
TBD. The previous version is still too new to determine any post-release issues.<br />
<br />
=== Main goals for this version ===<br />
* Full feature parity with the Windows port.<br />
* Refactor the core source functionality so that all communication between core and high-level UI goes through a common frontend layer. Have the Cocoa port make use of the common frontend layer.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add HUD support.<br />
* Add replay editing tools that are viable for TAS users.<br />
* Add support for the various NDS tools.<br />
* Add support for recording audio and video.<br />
<br />
=== Final results ===<br />
TBD. This version is yet to be released.<br />
<br />
=== Post-release issues and notes ===<br />
TBD. This version is yet to be released.</div>Rogermanhttps://wiki.desmume.org/index.php?title=Cocoa_frontend_todoCocoa frontend todo2015-04-04T23:36:21Z<p>Rogerman: </p>
<hr />
<div>== Overview of Release History ==<br />
<br />
=== The First Cocoa Front End ===<br />
The first release of the Cocoa front end was v0.7.3, released on August 12, 2007.<br />
<br />
=== The Temporary Move to the GTK Front End ===<br />
Due to lack of developer support, the Cocoa code base was shelved after the release of v0.9.4. On November 27, 2009, v0.9.5 was released for OS X using the GTK front end. The last release using the GTK front end was v0.9.6, released on May 19, 2010.<br />
<br />
=== The Return to the Cocoa Front End ===<br />
On February 1, 2011, v0.9.7 was released for Windows, and also for Linux using the GTK. However, there were issues that were specific to the OS X GTK build which prevented its release for months. At this time, the Cocoa code base from v0.9.4 was updated to work with v0.9.7, and was finally released for OS X on April 30, 2011.<br />
<br />
<br />
== v0.9.7 (Released on April 30, 2011) ==<br />
This version returns the OS X port back to its Cocoa roots. Returning the OS X port to a Cocoa codebase is extremely important for improving the UI, optimizing performance, and improving stability.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The GTK front end had a UI that was not Mac-friendly.<br />
* The application was unstable and frequently suffered application-level crashes, especially when the UI was manipulated.<br />
* Performance was poor all around. Emulation performance was especially poor.<br />
* Universal binaries are not possible for the GTK front end.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Make the Cocoa front end the primary Mac front end.<br />
* Make the Cocoa code base the main code base for the OS X port.<br />
* Greatly improve application stability.<br />
* Bring back universal binaries.<br />
* Get this version released as quickly as possible, since the OS X port is already months behind the others.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Unshelve the code base from v0.9.4 and update it to v0.9.7 standards. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The OS X port no longer suffers from application-level crashes, the UI is now Mac-native, and the application bundle now has a universal binary.<br />
* Overall performance has improved significantly since v0.9.6. UI performance is greatly improved, but emulation performance is still at least 20%-40% slower than the Windows port for most games.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Even though v0.9.7 has binary compatibility with OS X v10.4, there are many issues when running on v10.4, especially with missing 3D graphics.<br />
* The Cocoa code base is extremely messy and uses many older coding conventions. This makes it difficult to maintain and even more difficult to add new features. Due to these reasons, a total rewrite of the Cocoa code base is necessary in order to move the OS X port forward.<br />
* There was an uncaught bug in this release where touch coordinates didn't map correctly on rotated screens. This bug will need to be fixed.<br />
<br />
<br />
== v0.9.8 (Released on April 9, 2012) ==<br />
This version is all about building a better future for the OS X port. Although this means having to rebuild the Cocoa code base from scratch, this is a necessary first step in providing a stable foundation for future enhancements.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Emulation performance is still poor.<br />
* The UI is very clunky, and certain parts of the UI are broken.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Completely rewrite the Cocoa code base from the ground up, using Objective-C 2.0, modern coding conventions, and Cocoa-bindings.<br />
* Transition the legacy Cocoa code base out of the current code base.<br />
* Expose as many settings in the user interface as possible.<br />
* Improve emulation performance.<br />
* Improve the user interface.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the project files to be compatible with both Xcode 3 and Xcode 4. (DONE!)<br />
* Update build targets to prefer the latest version of LLVM/Clang. (DONE!)<br />
* Transition all legacy files out of the main project files, and rename legacy files with a legacy suffix. (DONE!)<br />
<br />
<br />
* Add finder icons for readable files. (DONE!)<br />
* Expose all emulation, firmware, SPU, and SoftRasterizer options in the UI. (DONE!)<br />
* Add mouseover tooltips for all settings. (DONE!)<br />
* Add a toolbar to the main emulation window. (DONE!)<br />
* Add more user feedback messages to the status bar. (DONE!)<br />
* Add a volume slider to the status bar, and remove the Sound menu. (DONE!)<br />
* Completely revamp the DeSmuME Preferences window. (DONE!)<br />
* Make external save state files behave like normal document files. (DONE!)<br />
* Expose all available ROM information in the ROM Info panel. (DONE!)<br />
* Make ROM title strings Unicode aware. (DONE!)<br />
* Change the behavior of the close window control, where clicking on it while a ROM is loaded will close the ROM. (DONE!)<br />
<br />
<br />
* Add the ability to change the window display mode. (DONE!)<br />
* Add Bilinear Filtering option for the display window. (DONE!)<br />
* Add video filter support for the display window. (DONE!)<br />
* Add the ability to rotate the display to any arbitrary rotation angle. (DONE!)<br />
* Add the ability to take screenshots using Edit > Copy. (DONE!)<br />
* Add the ability to save screenshot files in several different image file formats. (DONE!)<br />
* Add support for using an ADVANsCEne database for checking ROM properties. (DONE!)<br />
* Add the Cheat Manager, allowing for Action Replay codes and an internal value search tool. (DONE!)<br />
* Add the ability to import Action Replay codes from an R4 Cheat Database. (DONE!)<br />
* Add the ability to import and export ROM save files in RAW and No$GBA formats. (DONE!)<br />
* Add the File Migration Assistant to help users migrate files from previous versions. (DONE!)<br />
<br />
<br />
* Add support for mapping Lid and Debug controls. (DONE!)<br />
* Add fake mic support. (WORKING)<br />
* Add the ability to map input to user-defined touch coordinates. (DROPPED)<br />
* Allow for all non-modifier keys on a keyboard to be used as an input mapping. (DONE!)<br />
* Allow all HID devices to be used for input mappings. (DONE!)<br />
<br />
<br />
* Add automatic frameskip. (DONE!)<br />
* Make ROM cartridge files load on a separate thread. (DONE!)<br />
* Rework the main emulation loop to be as lightweight as possible. (DONE!)<br />
* Rework the multithreading code to work with SoftRasterizer. (DONE!)<br />
* Remove all Objective-C code from the sound code and optimize it. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Fake mic support only works with internal noise samples and white noise samples. External audio files didn't make it into the final release.<br />
* The feature to map inputs to user-defined touch coordinates was dropped due to release time constraints.<br />
* Performance is greatly improved in this version. UI performance is now "snappy". A combination of Cocoa-bindings, code design choices, and UI optimizations have made for an extremely responsive and usable UI. Emulation performance is also dramatically improved, now being only 5% slower than the Windows port.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Users running OS X v10.8 Mountain Lion are having issues with blank/white screens. This is most likely a bug related to the OpenGL blitter, and is considered critical.<br />
* A new bug was introduced where using Dual SPU Synch/Asynch mode would cause an application-level crash. This is a critical bug that is related to the sound threading code.<br />
* Physical microphone support seems to be an important feature to include in the next version.<br />
* Input handling was rewritten for this release and is an improvement compared to the last version, but the code is already showing its limitations. The input handling code will need to be rewritten once again in the next release.<br />
* This release has been considered a very large success for the OS X port.<br />
<br />
<br />
== v0.9.8b (Released on August 6, 2012) ==<br />
This version is different from all other versions in that this version is purely a bug-fix release. This version is being released in response to Apple's release of OS X v10.8 Mountain Lion.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the critical bugs.<br />
* Get this version released as quickly as possible, in response to the Mountain Lion release.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix the critical bugs. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The display window now works with Mountain Lion, and using Dual SPU Synch/Asynch no longer crashes the application.<br />
* Besides the bug fixes, this version is identical to v0.9.8.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* None.<br />
<br />
<br />
== v0.9.9 (Released on April 30, 2013) ==<br />
Initially, this version was meant to be an optimization and maintenance release. It was also meant to further modernize the code base in response to the further obsolescence of Xcode 3 in Mountain Lion. However, due to the length of time since the last release, this version also added several new features.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Transition the code base from using the 10.5 SDK and being forward compatible to using the latest SDK and being backwards compatible to OS X v10.5.<br />
* Integrate the new JIT CPU emulation engine.<br />
* Update the OpenGL blitter to use modern OpenGL functions, and then optimize it.<br />
* Add support for the OpenGL 3D renderer.<br />
* Refactor the input handling code so that it's all gathered in one place, and also sits at the UI level.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the Xcode project files to use the latest installed SDK, then add new build targets specifically for OS X v10.5 releases. (DONE!)<br />
* Add support for the JIT CPU emulation engine. (DONE!)<br />
* Add support for the OpenGL 3D renderer. (DONE!)<br />
* Completely eliminate the usage of fixed-function pipeline OpenGL code from the OpenGL blitter. (DONE!)<br />
* Refactor and rewrite the input handling code. (DONE!)<br />
<br />
<br />
* Add Rigorous 3D Rendering Timing option. (DONE!)<br />
* Add the SLOT-1 Manager, allowing the configuration of SLOT-1 properties. (DONE!)<br />
<br />
<br />
* Add the ability to use multiple display windows, each with individual display settings. (DONE!)<br />
* Show the ROM name and ROM icon of the currently loaded ROM in the display window title bar. (DONE!)<br />
* Add support for the HUD. (DROPPED)<br />
* Add Vertical Sync option for display windows. (DONE!)<br />
* Add Display Orientation option for display windows. (DONE!)<br />
* Add Display Order option for display windows. (DONE!)<br />
* Add Display Separation option for display windows. (DONE!)<br />
* Add HQ4xS video filter. (DONE!)<br />
<br />
<br />
* Add the ability to map multiple input devices to the same command. (DONE!)<br />
* Add the ability to map mice and other pointer-type devices to commands other than Touch. (DONE!)<br />
* Add the ability to map an input device to any command. (DONE!)<br />
* Add the ability to map an input device to user-defined touch coordinates. (DONE!)<br />
* Add the ability to save and load input profiles. (DONE!)<br />
* Complete microphone support. (WORKING)<br />
* Revamp the Input Preferences UI to accommodate all the new input handling features. (DONE!)<br />
<br />
<br />
* Make the items in the File Migration Window properly sorted by version. (DONE!)<br />
* Add Select All and Select None commands in the File Migration Window. (DONE!)<br />
* Add some user-friendly forms for users to receive technical support and submit bug reports. (DONE!)<br />
* Add more system information to the About box. (DONE!)<br />
* Add Help documentation. (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version, and more.<br />
* The input handling code is now where it needs to be. No more rewrites are necessary anymore.<br />
* External audio files may now be used for the fake mic, but physical mic support still isn't there. This will have to be a top priority for the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* A bug was introduced where setting the display mode to Main or Touch as default would create display windows that draw incorrectly.<br />
* A bug was introduced where the R4 path in the SLOT-1 Manager wouldn't properly set.<br />
* A bug was introduced where loading certain audio files for the audio sample generator would cause a crash.<br />
* A bug was introduced where analog HID-inputs would sometimes fail to register.<br />
<br />
<br />
== v0.9.10 (November 28, 2013) ==<br />
This release is meant to further modernize DeSmuME to use the latest and greatest optimizations from the new Xcode 5, as well as modernize the UI with new OS X human interface paradigms. Finally, the Legacy port needs to be obsoleted.<br />
<br />
This release was supposed to be the "add new features" release, and some of those features already made it into v0.9.9. This release is here to finish the work that was started in v0.9.9, with the most important features being SLOT-2 device support and physical microphone support.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The v0.9.9 release brought a lot of new features. But along with those new features, came some new bugs. Those bugs will need to be fixed.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the bugs introduced from the v0.9.9 release.<br />
* Finish adding the features that were first started in v0.9.9:<br />
** Add full support for all SLOT-2 devices.<br />
** Complete the microphone feature by adding physical microphone support.<br />
** Add HUD support.<br />
** Add support for basic replay recording and playback.<br />
** Add TAS-friendly controls.<br />
** Make displays go full screen.<br />
* With the recent release of Xcode 5, try out some new optimizations and see if they improve performance without breaking anything.<br />
* Begin modernizing the UI. Some specific elements would include:<br />
** ROM Info panel<br />
** SLOT-1 Manager window<br />
** File Migration Assistant window<br />
** Change radio button lists w/ button into pull-down menus as appropriate<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further reduce reliance on the user interacting with the file system directly.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DROPPED)<br />
* Complete microphone feature by adding physical microphone support. (DROPPED)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (DROPPED)<br />
* Add Frame Advance control. (DROPPED)<br />
* Show the frame number. (DROPPED)<br />
* Reintegrate GDB stub support. (DROPPED)<br />
<br />
<br />
* Use Xcode 5's new -Ofast and -fvectorize optimizations. (DONE!)<br />
* Use --ffast-math optimization. (DONE!)<br />
<br />
<br />
* Add the ability for display windows to enter full screen mode. (DONE!)<br />
* Save the positions and settings of any remaining display windows upon app exit. (DONE!)<br />
* Create AppleScript for deleting the user defaults files. (DONE!)<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* The goals of adding new features were not met for this version.<br />
* Due to this release happening much quicker than anticipated, many planned features for this release were dropped.<br />
* In the end, this turned out to be more of a modernization and bug fix release more than anything else. New features will have to be pushed to the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* During release testing, it was found that recent code changes broke the loading of ROMs on big-endian systems. Therefore, PPC support was dropped during release testing in order to get this release out on time. There will need to be a maintenance release made to address this issue.<br />
* SourceForge changed their URLs the DeSmuME project, so the Bug Report URL is now incorrect.<br />
* A user complained about choppy video, which was determined to be auto frameskip being too aggressive. This will need to be dealt with somehow, as FPS can have some wild jumps under certain conditions.<br />
<br />
* Saving the positions and settings of the remaining display windows upon app exit is a great feature. It would be a good idea to save more settings upon app exit as appropriate. OS X is heading in a direction where app settings should be restorable between app launches, and DeSmuME needs to start doing the same.<br />
<br />
<br />
== v0.9.10b (December 18, 2013) ==<br />
This is strictly a maintenance release made to address the post-release issues from v0.9.10.<br />
<br />
=== Major issues from the previous version ===<br />
* Fix ROM loading on PPC.<br />
* Fix auto frameskip being overly aggressive.<br />
<br />
=== Main goals for this version ===<br />
* Fix the noted issues from the previous version.<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix ROM loading on big-endian systems. (DONE!)<br />
* Make frame rate transitions smoother, and make auto frame skip slightly less aggressive. (DONE!)<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Besides being able to load ROMs on PPC and the better auto frame skip algorithm, this version is identical to v0.9.10.<br />
<br />
=== Post-release issues and notes ===<br />
* This version has the stability that v0.9.9 was intended to bring. The next version really needs to push new features.<br />
* The most glaring missing features are the lack of SLOT-2 device support and the lack of the physical microphone. Adding these features should be top priority.<br />
* The font changes in OS X Yosemite have affecting the appearance of text in some UI controls. This will need to be fixed.<br />
<br />
<br />
== v0.9.11 (April ???, 2015) ==<br />
This version is meant above all else to be a features release. The improved stability and modernized code base of v0.9.10 gave a strong foundation to build upon, so now it's time to take advantage of it!<br />
<br />
=== Major issues from the previous version ===<br />
* New features intended to be present in the previous release were not added.<br />
<br />
=== Main goals for this version ===<br />
* Add new features!<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further modernize the UI with current Apple human interface paradigms. Ensure that the UI looks good for all OS X versions from Leopard to Yosemite.<br />
* Try out Xcode 6's new PGO optimization.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add support for SLOT-2 devices. (DONE!)<br />
* Complete microphone feature by adding physical microphone support. (DONE!)<br />
* Add HUD support. (DROPPED)<br />
* Add support for replay recording and playback. (PARTIAL)<br />
* Add new Execution Control panel, that adds new Frame Advance and Frame Jump controls, as well as integrates the execution speed controls, all in one single panel. (DONE!)<br />
* Reintegrate GDB stub support. (DONE!)<br />
* Add ability to run pixel scalers on the GPU. (DONE!)<br />
* Add additional video output filters. (DONE!)<br />
* Add support for turbo and autohold. (DONE!)<br />
<br />
* Use Xcode 6's new PGO optimization. (DONE!)<br />
* Obsolete the Legacy port. (DONE!)<br />
<br />
* Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window (DONE!)<br />
* Add support for App Nap in OS X Mavericks and later. (DONE!)<br />
* Fix UI issues with OS X Yosemite. (DONE!)<br />
<br />
=== Final results ===<br />
* Most of the goals were met for this version. Many new features were added, including some which were not originally planned in v0.9.10.<br />
* The only features that were not included were:<br />
** HUD support: It would be better to run this within OpenGL instead of hacking libagg to work in the Cocoa port. Of course, running the entire HUD in OpenGL will require an entirely new drawing engine, so this will take some time to figure out.<br />
** Replay Record/Playback: Basic functionality is included. However, full functionality, in which the user can viably edit replays within DeSmuME, is going to be a long road ahead. HUD support is required, Lua support, RAM Watch/Search, and a replay editor like Bizhawk's TAS Studio will be required. This will be a major undertaking.<br />
* Now that the Legacy port is gone, the project has been modernized a great deal. This should make it much easier for new Mac developers to jump into the project.<br />
* Overall, I'm very happy with this release. There was a lot of time between this release and v0.9.10, so it was possible to get a lot of testing done for this one, despite the many new features. I feel like this release is stable enough to warrant the next release, v0.9.12, to be another feature-focused release.<br />
<br />
=== Post-release issues and notes ===<br />
TBD. This version is still too new to determine any post-release issues.<br />
<br />
== v0.9.12 (TBD) ==<br />
This version will focus on adding to the Cocoa port any remaining features that are currently present in the Windows port. The final goal: Full feature parity with the Windows port. Once this is achieved, then a lot of options open up for adding brand new features, as well as restructuring of the core itself to bring new levels of emulation compatibility and performance.<br />
<br />
I've also noticed, after doing much testing of v0.9.11 and comparing it to the Windows port, as well as the various Linux ports, it's very clear that the feature disparity between frontends is becoming greater. In the future, we will need to unify the look and feel of the various frontends for the purpose of improving the user experience and making our tech support easier. While this release will not focus on actually unify the frontends, it will lay down much of the groundwork for doing so in v0.9.13.<br />
<br />
=== Major issues from the previous version ===<br />
TBD. The previous version is still too new to determine any post-release issues.<br />
<br />
=== Main goals for this version ===<br />
* Full feature parity with the Windows port.<br />
* Refactor the core source functionality so that all I/O to/from core goes through a common frontend layer. Have the Cocoa port make use of the common frontend layer.<br />
<br />
=== Implementation TODO and notes ===<br />
* Add HUD support.<br />
* Add replay editing tools that are viable for TAS users.<br />
* Add support for the various NDS tools.<br />
* Add support for recording audio and video.<br />
<br />
=== Final results ===<br />
TBD. This version is yet to be released.<br />
<br />
=== Post-release issues and notes ===<br />
TBD. This version is yet to be released.</div>Rogermanhttps://wiki.desmume.org/index.php?title=Cocoa_frontend_todoCocoa frontend todo2015-04-04T20:26:42Z<p>Rogerman: </p>
<hr />
<div>== Overview of Release History ==<br />
<br />
=== The First Cocoa Front End ===<br />
The first release of the Cocoa front end was v0.7.3, released on August 12, 2007.<br />
<br />
=== The Temporary Move to the GTK Front End ===<br />
Due to lack of developer support, the Cocoa code base was shelved after the release of v0.9.4. On November 27, 2009, v0.9.5 was released for OS X using the GTK front end. The last release using the GTK front end was v0.9.6, released on May 19, 2010.<br />
<br />
=== The Return to the Cocoa Front End ===<br />
On February 1, 2011, v0.9.7 was released for Windows, and also for Linux using the GTK. However, there were issues that were specific to the OS X GTK build which prevented its release for months. At this time, the Cocoa code base from v0.9.4 was updated to work with v0.9.7, and was finally released for OS X on April 30, 2011.<br />
<br />
<br />
== v0.9.7 (Released on April 30, 2011) ==<br />
This version returns the OS X port back to its Cocoa roots. Returning the OS X port to a Cocoa codebase is extremely important for improving the UI, optimizing performance, and improving stability.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The GTK front end had a UI that was not Mac-friendly.<br />
* The application was unstable and frequently suffered application-level crashes, especially when the UI was manipulated.<br />
* Performance was poor all around. Emulation performance was especially poor.<br />
* Universal binaries are not possible for the GTK front end.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Make the Cocoa front end the primary Mac front end.<br />
* Make the Cocoa code base the main code base for the OS X port.<br />
* Greatly improve application stability.<br />
* Bring back universal binaries.<br />
* Get this version released as quickly as possible, since the OS X port is already months behind the others.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Unshelve the code base from v0.9.4 and update it to v0.9.7 standards. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The OS X port no longer suffers from application-level crashes, the UI is now Mac-native, and the application bundle now has a universal binary.<br />
* Overall performance has improved significantly since v0.9.6. UI performance is greatly improved, but emulation performance is still at least 20%-40% slower than the Windows port for most games.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Even though v0.9.7 has binary compatibility with OS X v10.4, there are many issues when running on v10.4, especially with missing 3D graphics.<br />
* The Cocoa code base is extremely messy and uses many older coding conventions. This makes it difficult to maintain and even more difficult to add new features. Due to these reasons, a total rewrite of the Cocoa code base is necessary in order to move the OS X port forward.<br />
* There was an uncaught bug in this release where touch coordinates didn't map correctly on rotated screens. This bug will need to be fixed.<br />
<br />
<br />
== v0.9.8 (Released on April 9, 2012) ==<br />
This version is all about building a better future for the OS X port. Although this means having to rebuild the Cocoa code base from scratch, this is a necessary first step in providing a stable foundation for future enhancements.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Emulation performance is still poor.<br />
* The UI is very clunky, and certain parts of the UI are broken.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Completely rewrite the Cocoa code base from the ground up, using Objective-C 2.0, modern coding conventions, and Cocoa-bindings.<br />
* Transition the legacy Cocoa code base out of the current code base.<br />
* Expose as many settings in the user interface as possible.<br />
* Improve emulation performance.<br />
* Improve the user interface.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the project files to be compatible with both Xcode 3 and Xcode 4. (DONE!)<br />
* Update build targets to prefer the latest version of LLVM/Clang. (DONE!)<br />
* Transition all legacy files out of the main project files, and rename legacy files with a legacy suffix. (DONE!)<br />
<br />
<br />
* Add finder icons for readable files. (DONE!)<br />
* Expose all emulation, firmware, SPU, and SoftRasterizer options in the UI. (DONE!)<br />
* Add mouseover tooltips for all settings. (DONE!)<br />
* Add a toolbar to the main emulation window. (DONE!)<br />
* Add more user feedback messages to the status bar. (DONE!)<br />
* Add a volume slider to the status bar, and remove the Sound menu. (DONE!)<br />
* Completely revamp the DeSmuME Preferences window. (DONE!)<br />
* Make external save state files behave like normal document files. (DONE!)<br />
* Expose all available ROM information in the ROM Info panel. (DONE!)<br />
* Make ROM title strings Unicode aware. (DONE!)<br />
* Change the behavior of the close window control, where clicking on it while a ROM is loaded will close the ROM. (DONE!)<br />
<br />
<br />
* Add the ability to change the window display mode. (DONE!)<br />
* Add Bilinear Filtering option for the display window. (DONE!)<br />
* Add video filter support for the display window. (DONE!)<br />
* Add the ability to rotate the display to any arbitrary rotation angle. (DONE!)<br />
* Add the ability to take screenshots using Edit > Copy. (DONE!)<br />
* Add the ability to save screenshot files in several different image file formats. (DONE!)<br />
* Add support for using an ADVANsCEne database for checking ROM properties. (DONE!)<br />
* Add the Cheat Manager, allowing for Action Replay codes and an internal value search tool. (DONE!)<br />
* Add the ability to import Action Replay codes from an R4 Cheat Database. (DONE!)<br />
* Add the ability to import and export ROM save files in RAW and No$GBA formats. (DONE!)<br />
* Add the File Migration Assistant to help users migrate files from previous versions. (DONE!)<br />
<br />
<br />
* Add support for mapping Lid and Debug controls. (DONE!)<br />
* Add fake mic support. (WORKING)<br />
* Add the ability to map input to user-defined touch coordinates. (DROPPED)<br />
* Allow for all non-modifier keys on a keyboard to be used as an input mapping. (DONE!)<br />
* Allow all HID devices to be used for input mappings. (DONE!)<br />
<br />
<br />
* Add automatic frameskip. (DONE!)<br />
* Make ROM cartridge files load on a separate thread. (DONE!)<br />
* Rework the main emulation loop to be as lightweight as possible. (DONE!)<br />
* Rework the multithreading code to work with SoftRasterizer. (DONE!)<br />
* Remove all Objective-C code from the sound code and optimize it. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Fake mic support only works with internal noise samples and white noise samples. External audio files didn't make it into the final release.<br />
* The feature to map inputs to user-defined touch coordinates was dropped due to release time constraints.<br />
* Performance is greatly improved in this version. UI performance is now "snappy". A combination of Cocoa-bindings, code design choices, and UI optimizations have made for an extremely responsive and usable UI. Emulation performance is also dramatically improved, now being only 5% slower than the Windows port.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Users running OS X v10.8 Mountain Lion are having issues with blank/white screens. This is most likely a bug related to the OpenGL blitter, and is considered critical.<br />
* A new bug was introduced where using Dual SPU Synch/Asynch mode would cause an application-level crash. This is a critical bug that is related to the sound threading code.<br />
* Physical microphone support seems to be an important feature to include in the next version.<br />
* Input handling was rewritten for this release and is an improvement compared to the last version, but the code is already showing its limitations. The input handling code will need to be rewritten once again in the next release.<br />
* This release has been considered a very large success for the OS X port.<br />
<br />
<br />
== v0.9.8b (Released on August 6, 2012) ==<br />
This version is different from all other versions in that this version is purely a bug-fix release. This version is being released in response to Apple's release of OS X v10.8 Mountain Lion.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the critical bugs.<br />
* Get this version released as quickly as possible, in response to the Mountain Lion release.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix the critical bugs. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The display window now works with Mountain Lion, and using Dual SPU Synch/Asynch no longer crashes the application.<br />
* Besides the bug fixes, this version is identical to v0.9.8.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* None.<br />
<br />
<br />
== v0.9.9 (Released on April 30, 2013) ==<br />
Initially, this version was meant to be an optimization and maintenance release. It was also meant to further modernize the code base in response to the further obsolescence of Xcode 3 in Mountain Lion. However, due to the length of time since the last release, this version also added several new features.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Transition the code base from using the 10.5 SDK and being forward compatible to using the latest SDK and being backwards compatible to OS X v10.5.<br />
* Integrate the new JIT CPU emulation engine.<br />
* Update the OpenGL blitter to use modern OpenGL functions, and then optimize it.<br />
* Add support for the OpenGL 3D renderer.<br />
* Refactor the input handling code so that it's all gathered in one place, and also sits at the UI level.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the Xcode project files to use the latest installed SDK, then add new build targets specifically for OS X v10.5 releases. (DONE!)<br />
* Add support for the JIT CPU emulation engine. (DONE!)<br />
* Add support for the OpenGL 3D renderer. (DONE!)<br />
* Completely eliminate the usage of fixed-function pipeline OpenGL code from the OpenGL blitter. (DONE!)<br />
* Refactor and rewrite the input handling code. (DONE!)<br />
<br />
<br />
* Add Rigorous 3D Rendering Timing option. (DONE!)<br />
* Add the SLOT-1 Manager, allowing the configuration of SLOT-1 properties. (DONE!)<br />
<br />
<br />
* Add the ability to use multiple display windows, each with individual display settings. (DONE!)<br />
* Show the ROM name and ROM icon of the currently loaded ROM in the display window title bar. (DONE!)<br />
* Add support for the HUD. (DROPPED)<br />
* Add Vertical Sync option for display windows. (DONE!)<br />
* Add Display Orientation option for display windows. (DONE!)<br />
* Add Display Order option for display windows. (DONE!)<br />
* Add Display Separation option for display windows. (DONE!)<br />
* Add HQ4xS video filter. (DONE!)<br />
<br />
<br />
* Add the ability to map multiple input devices to the same command. (DONE!)<br />
* Add the ability to map mice and other pointer-type devices to commands other than Touch. (DONE!)<br />
* Add the ability to map an input device to any command. (DONE!)<br />
* Add the ability to map an input device to user-defined touch coordinates. (DONE!)<br />
* Add the ability to save and load input profiles. (DONE!)<br />
* Complete microphone support. (WORKING)<br />
* Revamp the Input Preferences UI to accommodate all the new input handling features. (DONE!)<br />
<br />
<br />
* Make the items in the File Migration Window properly sorted by version. (DONE!)<br />
* Add Select All and Select None commands in the File Migration Window. (DONE!)<br />
* Add some user-friendly forms for users to receive technical support and submit bug reports. (DONE!)<br />
* Add more system information to the About box. (DONE!)<br />
* Add Help documentation. (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version, and more.<br />
* The input handling code is now where it needs to be. No more rewrites are necessary anymore.<br />
* External audio files may now be used for the fake mic, but physical mic support still isn't there. This will have to be a top priority for the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* A bug was introduced where setting the display mode to Main or Touch as default would create display windows that draw incorrectly.<br />
* A bug was introduced where the R4 path in the SLOT-1 Manager wouldn't properly set.<br />
* A bug was introduced where loading certain audio files for the audio sample generator would cause a crash.<br />
* A bug was introduced where analog HID-inputs would sometimes fail to register.<br />
<br />
== v0.9.10 (November 28, 2013) ==<br />
This release is meant to further modernize DeSmuME to use the latest and greatest optimizations from the new Xcode 5, as well as modernize the UI with new OS X human interface paradigms. Finally, the Legacy port needs to be obsoleted.<br />
<br />
This release was supposed to be the "add new features" release, and some of those features already made it into v0.9.9. This release is here to finish the work that was started in v0.9.9, with the most important features being SLOT-2 device support and physical microphone support.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The v0.9.9 release brought a lot of new features. But along with those new features, came some new bugs. Those bugs will need to be fixed.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the bugs introduced from the v0.9.9 release.<br />
* Finish adding the features that were first started in v0.9.9:<br />
** Add full support for all SLOT-2 devices.<br />
** Complete the microphone feature by adding physical microphone support.<br />
** Add HUD support.<br />
** Add support for basic replay recording and playback.<br />
** Add TAS-friendly controls.<br />
** Make displays go full screen.<br />
* With the recent release of Xcode 5, try out some new optimizations and see if they improve performance without breaking anything.<br />
* Begin modernizing the UI. Some specific elements would include:<br />
** ROM Info panel<br />
** SLOT-1 Manager window<br />
** File Migration Assistant window<br />
** Change radio button lists w/ button into pull-down menus as appropriate<br />
* Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.<br />
* Further reduce reliance on the user interacting with the file system directly.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
- Add support for SLOT-2 devices. (DROPPED)<br />
- Complete microphone feature by adding physical microphone support. (DROPPED)<br />
- Add HUD support. (DROPPED)<br />
- Add support for replay recording and playback. (DROPPED)<br />
- Add Frame Advance control. (DROPPED)<br />
- Show the frame number. (DROPPED)<br />
- Reintegrate GDB stub support. (DROPPED)<br />
<br />
<br />
- Use Xcode 5's new -Ofast and -fvectorize optimizations. (DONE!)<br />
- Use --ffast-math optimization. (DONE!)<br />
<br />
<br />
- Add the ability for display windows to enter full screen mode. (DONE!)<br />
- Save the positions and settings of any remaining display windows upon app exit. (DONE!)<br />
- Create AppleScript for deleting the user defaults files. (DONE!)<br />
- Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* The goals of adding new features were not met for this version.<br />
* Due to this release happening much quicker than anticipated, many planned features for this release were dropped.<br />
* In the end, this turned out to be more of a bug fix release more than anything else. New features will have to be pushed to the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* During release testing, it was found that recent code changes broke the loading of ROMs on big-endian systems. Therefore, PPC support was dropped during release testing in order to get this release out on time. There will need to be a maintenance release made to address this issue.<br />
* SourceForge changed their URLs the DeSmuME project, so the Bug Report URL is now incorrect.<br />
* A user complained about choppy video, which was determined to be auto frameskip being too aggressive. This will need to be dealt with somehow, as FPS can have some wild jumps under certain conditions.<br />
<br />
* Saving the positions and settings of the remaining display windows upon app exit is a great feature. It would be a good idea to save more settings upon app exit as appropriate. OS X is heading in a direction where app settings should be restorable between app launches, and DeSmuME needs to start doing the same.<br />
<br />
<br />
== v0.9.10b (December 18, 2013) ==<br />
This is strictly a maintenance release made to address the post-release issues from v0.9.10.<br />
<br />
=== Major issues from the previous version ===<br />
* Fix ROM loading on PPC.<br />
* Fix auto frameskip being overly aggressive.<br />
<br />
=== Main goals for this version ===<br />
* Fix the noted issues from the previous version.<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix ROM loading on big-endian systems. (DONE!)<br />
* Make frame rate transitions smoother, and make auto frame skip slightly less aggressive. (DONE!)<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Besides being able to load ROMs on PPC and the better auto frame skip algorithm, this version is identical to v0.9.10.<br />
<br />
=== Post-release issues and notes ===<br />
* This version has the stability that v0.9.9 was intended to bring. The next version really needs to push new features.<br />
* The most glaring missing features are the lack of SLOT-2 device support and the lack of the physical microphone. Adding these features should be top priority.<br />
* The font changes in OS X Yosemite have affecting the appearance of text in some UI controls. This will need to be fixed.<br />
<br />
== v0.9.11 (April ???, 2015) ==<br />
TBD<br />
<br />
=== Major issues from the previous version ===<br />
TBD<br />
<br />
=== Main goals for this version ===<br />
TBD<br />
<br />
=== Implementation TODO and notes ===<br />
TBD<br />
<br />
=== Final results ===<br />
TBD<br />
<br />
=== Post-release issues and notes ===<br />
TBD</div>Rogermanhttps://wiki.desmume.org/index.php?title=Cocoa_frontend_todoCocoa frontend todo2015-04-04T18:43:45Z<p>Rogerman: </p>
<hr />
<div>== Overview of Release History ==<br />
<br />
=== The First Cocoa Front End ===<br />
The first release of the Cocoa front end was v0.7.3, released on August 12, 2007.<br />
<br />
=== The Temporary Move to the GTK Front End ===<br />
Due to lack of developer support, the Cocoa code base was shelved after the release of v0.9.4. On November 27, 2009, v0.9.5 was released for OS X using the GTK front end. The last release using the GTK front end was v0.9.6, released on May 19, 2010.<br />
<br />
=== The Return to the Cocoa Front End ===<br />
On February 1, 2011, v0.9.7 was released for Windows, and also for Linux using the GTK. However, there were issues that were specific to the OS X GTK build which prevented its release for months. At this time, the Cocoa code base from v0.9.4 was updated to work with v0.9.7, and was finally released for OS X on April 30, 2011.<br />
<br />
<br />
== v0.9.7 (Released on April 30, 2011) ==<br />
This version returns the OS X port back to its Cocoa roots. Returning the OS X port to a Cocoa codebase is extremely important for improving the UI, optimizing performance, and improving stability.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* The GTK front end had a UI that was not Mac-friendly.<br />
* The application was unstable and frequently suffered application-level crashes, especially when the UI was manipulated.<br />
* Performance was poor all around. Emulation performance was especially poor.<br />
* Universal binaries are not possible for the GTK front end.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Make the Cocoa front end the primary Mac front end.<br />
* Make the Cocoa code base the main code base for the OS X port.<br />
* Greatly improve application stability.<br />
* Bring back universal binaries.<br />
* Get this version released as quickly as possible, since the OS X port is already months behind the others.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Unshelve the code base from v0.9.4 and update it to v0.9.7 standards. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The OS X port no longer suffers from application-level crashes, the UI is now Mac-native, and the application bundle now has a universal binary.<br />
* Overall performance has improved significantly since v0.9.6. UI performance is greatly improved, but emulation performance is still at least 20%-40% slower than the Windows port for most games.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Even though v0.9.7 has binary compatibility with OS X v10.4, there are many issues when running on v10.4, especially with missing 3D graphics.<br />
* The Cocoa code base is extremely messy and uses many older coding conventions. This makes it difficult to maintain and even more difficult to add new features. Due to these reasons, a total rewrite of the Cocoa code base is necessary in order to move the OS X port forward.<br />
* There was an uncaught bug in this release where touch coordinates didn't map correctly on rotated screens. This bug will need to be fixed.<br />
<br />
<br />
== v0.9.8 (Released on April 9, 2012) ==<br />
This version is all about building a better future for the OS X port. Although this means having to rebuild the Cocoa code base from scratch, this is a necessary first step in providing a stable foundation for future enhancements.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Emulation performance is still poor.<br />
* The UI is very clunky, and certain parts of the UI are broken.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Completely rewrite the Cocoa code base from the ground up, using Objective-C 2.0, modern coding conventions, and Cocoa-bindings.<br />
* Transition the legacy Cocoa code base out of the current code base.<br />
* Expose as many settings in the user interface as possible.<br />
* Improve emulation performance.<br />
* Improve the user interface.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the project files to be compatible with both Xcode 3 and Xcode 4. (DONE!)<br />
* Update build targets to prefer the latest version of LLVM/Clang. (DONE!)<br />
* Transition all legacy files out of the main project files, and rename legacy files with a legacy suffix. (DONE!)<br />
<br />
<br />
* Add finder icons for readable files. (DONE!)<br />
* Expose all emulation, firmware, SPU, and SoftRasterizer options in the UI. (DONE!)<br />
* Add mouseover tooltips for all settings. (DONE!)<br />
* Add a toolbar to the main emulation window. (DONE!)<br />
* Add more user feedback messages to the status bar. (DONE!)<br />
* Add a volume slider to the status bar, and remove the Sound menu. (DONE!)<br />
* Completely revamp the DeSmuME Preferences window. (DONE!)<br />
* Make external save state files behave like normal document files. (DONE!)<br />
* Expose all available ROM information in the ROM Info panel. (DONE!)<br />
* Make ROM title strings Unicode aware. (DONE!)<br />
* Change the behavior of the close window control, where clicking on it while a ROM is loaded will close the ROM. (DONE!)<br />
<br />
<br />
* Add the ability to change the window display mode. (DONE!)<br />
* Add Bilinear Filtering option for the display window. (DONE!)<br />
* Add video filter support for the display window. (DONE!)<br />
* Add the ability to rotate the display to any arbitrary rotation angle. (DONE!)<br />
* Add the ability to take screenshots using Edit > Copy. (DONE!)<br />
* Add the ability to save screenshot files in several different image file formats. (DONE!)<br />
* Add support for using an ADVANsCEne database for checking ROM properties. (DONE!)<br />
* Add the Cheat Manager, allowing for Action Replay codes and an internal value search tool. (DONE!)<br />
* Add the ability to import Action Replay codes from an R4 Cheat Database. (DONE!)<br />
* Add the ability to import and export ROM save files in RAW and No$GBA formats. (DONE!)<br />
* Add the File Migration Assistant to help users migrate files from previous versions. (DONE!)<br />
<br />
<br />
* Add support for mapping Lid and Debug controls. (DONE!)<br />
* Add fake mic support. (WORKING)<br />
* Add the ability to map input to user-defined touch coordinates. (DROPPED)<br />
* Allow for all non-modifier keys on a keyboard to be used as an input mapping. (DONE!)<br />
* Allow all HID devices to be used for input mappings. (DONE!)<br />
<br />
<br />
* Add automatic frameskip. (DONE!)<br />
* Make ROM cartridge files load on a separate thread. (DONE!)<br />
* Rework the main emulation loop to be as lightweight as possible. (DONE!)<br />
* Rework the multithreading code to work with SoftRasterizer. (DONE!)<br />
* Remove all Objective-C code from the sound code and optimize it. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* Fake mic support only works with internal noise samples and white noise samples. External audio files didn't make it into the final release.<br />
* The feature to map inputs to user-defined touch coordinates was dropped due to release time constraints.<br />
* Performance is greatly improved in this version. UI performance is now "snappy". A combination of Cocoa-bindings, code design choices, and UI optimizations have made for an extremely responsive and usable UI. Emulation performance is also dramatically improved, now being only 5% slower than the Windows port.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* Users running OS X v10.8 Mountain Lion are having issues with blank/white screens. This is most likely a bug related to the OpenGL blitter, and is considered critical.<br />
* A new bug was introduced where using Dual SPU Synch/Asynch mode would cause an application-level crash. This is a critical bug that is related to the sound threading code.<br />
* Physical microphone support seems to be an important feature to include in the next version.<br />
* Input handling was rewritten for this release and is an improvement compared to the last version, but the code is already showing its limitations. The input handling code will need to be rewritten once again in the next release.<br />
* This release has been considered a very large success for the OS X port.<br />
<br />
<br />
== v0.9.8b (Released on August 6, 2012) ==<br />
This version is different from all other versions in that this version is purely a bug-fix release. This version is being released in response to Apple's release of OS X v10.8 Mountain Lion.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Fix the critical bugs.<br />
* Get this version released as quickly as possible, in response to the Mountain Lion release.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Fix the critical bugs. (DONE!)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version. The display window now works with Mountain Lion, and using Dual SPU Synch/Asynch no longer crashes the application.<br />
* Besides the bug fixes, this version is identical to v0.9.8.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* None.<br />
<br />
<br />
== v0.9.9 (Released on April 30, 2013) ==<br />
Initially, this version was meant to be an optimization and maintenance release. It was also meant to further modernize the code base in response to the further obsolescence of Xcode 3 in Mountain Lion. However, due to the length of time since the last release, this version also added several new features.<br />
<br />
<br />
=== Major issues from the previous version ===<br />
* Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.<br />
* Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.<br />
<br />
<br />
=== Main goals for this version ===<br />
* Transition the code base from using the 10.5 SDK and being forward compatible to using the latest SDK and being backwards compatible to OS X v10.5.<br />
* Integrate the new JIT CPU emulation engine.<br />
* Update the OpenGL blitter to use modern OpenGL functions, and then optimize it.<br />
* Add support for the OpenGL 3D renderer.<br />
* Refactor the input handling code so that it's all gathered in one place, and also sits at the UI level.<br />
<br />
<br />
=== Implementation TODO and notes ===<br />
* Update the Xcode project files to use the latest installed SDK, then add new build targets specifically for OS X v10.5 releases. (DONE!)<br />
* Add support for the JIT CPU emulation engine. (DONE!)<br />
* Add support for the OpenGL 3D renderer. (DONE!)<br />
* Completely eliminate the usage of fixed-function pipeline OpenGL code from the OpenGL blitter. (DONE!)<br />
* Refactor and rewrite the input handling code. (DONE!)<br />
<br />
<br />
* Add Rigorous 3D Rendering Timing option. (DONE!)<br />
* Add the SLOT-1 Manager, allowing the configuration of SLOT-1 properties. (DONE!)<br />
<br />
<br />
* Add the ability to use multiple display windows, each with individual display settings. (DONE!)<br />
* Show the ROM name and ROM icon of the currently loaded ROM in the display window title bar. (DONE!)<br />
* Add support for the HUD. (DROPPED)<br />
* Add Vertical Sync option for display windows. (DONE!)<br />
* Add Display Orientation option for display windows. (DONE!)<br />
* Add Display Order option for display windows. (DONE!)<br />
* Add Display Separation option for display windows. (DONE!)<br />
* Add HQ4xS video filter. (DONE!)<br />
<br />
<br />
* Add the ability to map multiple input devices to the same command. (DONE!)<br />
* Add the ability to map mice and other pointer-type devices to commands other than Touch. (DONE!)<br />
* Add the ability to map an input device to any command. (DONE!)<br />
* Add the ability to map an input device to user-defined touch coordinates. (DONE!)<br />
* Add the ability to save and load input profiles. (DONE!)<br />
* Complete microphone support. (WORKING)<br />
* Revamp the Input Preferences UI to accommodate all the new input handling features. (DONE!)<br />
<br />
<br />
* Make the items in the File Migration Window properly sorted by version. (DONE!)<br />
* Add Select All and Select None commands in the File Migration Window. (DONE!)<br />
* Add some user-friendly forms for users to receive technical support and submit bug reports. (DONE!)<br />
* Add more system information to the About box. (DONE!)<br />
* Add Help documentation. (DROPPED)<br />
<br />
<br />
=== Final results ===<br />
* All goals were met for this version.<br />
* The input handling code is now where it needs to be. No more rewrites are necessary anymore.<br />
* External audio files may now be used for the fake mic, but physical mic support still isn't there. This will have to be a top priority for the next release.<br />
<br />
<br />
=== Post-release issues and notes ===<br />
* A bug was introduced where setting the display mode to Main or Touch as default would create display windows that draw incorrectly.<br />
* A bug was introduced where the R4 path in the SLOT-1 Manager wouldn't properly set.<br />
<br />
<br />
== v0.9.10 (November 28, 2013) ==<br />
TBD<br />
<br />
=== Major issues from the previous version ===<br />
TBD<br />
<br />
=== Main goals for this version ===<br />
TBD<br />
<br />
=== Implementation TODO and notes ===<br />
TBD<br />
<br />
=== Final results ===<br />
TBD<br />
<br />
=== Post-release issues and notes ===<br />
TBD<br />
<br />
== v0.9.10b (December 18, 2013) ==<br />
TBD<br />
<br />
=== Major issues from the previous version ===<br />
TBD<br />
<br />
=== Main goals for this version ===<br />
TBD<br />
<br />
=== Implementation TODO and notes ===<br />
TBD<br />
<br />
=== Final results ===<br />
TBD<br />
<br />
=== Post-release issues and notes ===<br />
TBD<br />
<br />
== v0.9.11 (April ???, 2015) ==<br />
TBD<br />
<br />
=== Major issues from the previous version ===<br />
TBD<br />
<br />
=== Main goals for this version ===<br />
TBD<br />
<br />
=== Implementation TODO and notes ===<br />
TBD<br />
<br />
=== Final results ===<br />
TBD<br />
<br />
=== Post-release issues and notes ===<br />
TBD</div>Rogermanhttps://wiki.desmume.org/index.php?title=Release_0.9.11Release 0.9.112015-04-02T04:37:45Z<p>Rogerman: Created page with "'''Release Date: TBD (r4908-r5146)''' In this version, we have focused on the Cocoa frontend, but there have been some good core fixes over so long. Notably, the save-related is..."</p>
<hr />
<div>'''Release Date: TBD (r4908-r5146)'''<br />
<br />
In this version, we have focused on the Cocoa frontend, but there have been some good core fixes over so long. Notably, the save-related issues resulting in the advice "dont use 0.9.10" have been resolved.<br />
<br />
General/Core:<br />
bug: fix large numbers of games not being able to save anymore<br />
bug: fix some missing sound effects due to wrong volumes in some boot scenarios and other things<br />
bug: fix freezes due to tiny looping sounds<br />
bug: fix many big endian issues<br />
bug: fix some apparently rarely-used CPU instructions, no known consequences<br />
bug: fix (block) reading of some GPU registers<br />
bug: fix action replay code type 0xE<br />
bug: fix reading of last 4 bytes of rom<br />
bug: large improvements to stability of GDB stub<br />
bug: support w-buffer support in OpenGL renderers<br />
bug: fix unpredictable crashes in some 3d scenes from w=0<br />
enh: better loading of roms (bad patches) with wrong size info in header<br />
enh: warn user sometimes when 'stream rom from disk' will create malfunctions<br />
enh: add xBRZ filters<br />
enh: add "TXT Hack" for software rasterizer to improve text rendering in some games<br />
<br />
Windows:<br />
bug: fix 5x filters<br />
enh: support import of action replay save files (.dss)<br />
enh: add antialiasing option for OpenGL renderers<br />
enh: don't malfunction if saveram is unavailable or read-only<br />
<br />
Cocoa:<br />
bug: 16-bit to 32-bit color space conversions no longer darken video or images<br />
bug: fix intermittent issues with loading user defaults on app startup<br />
bug: fix rendering inaccuracies of the video preview in the app display preferences<br />
bug: fix various UI font rendering and text alignment issues on OS X Yosemite<br />
bug: fix crackly sound from N-sync and Z-sync methods<br />
enh: make N-sync method the default sound sync method since it has much lower latency than P-sync method<br />
enh: add support for gdbstub (Tools > Show GDB Stub Control) (only available on custom builds using the dev+ build target)<br />
enh: optimize input handling to use less CPU<br />
enh: add support for App Nap when the app is in an idle state (only supported on OS X Mavericks and later)<br />
enh: add Execution Control panel (Emulation > Show Execution Control), now with frame advance and frame jump controls<br />
enh: auto frame skip is now smoother<br />
enh: further improve execution timing accuracy<br />
enh: improve overall video performance<br />
enh: render video through a 3-stage filtering pipeline, (Video Source)-->(Pixel Scaler)-->(Video Output)<br />
enh: add the following video source filters - Deposterize<br />
enh: add the following video output filters - Bicubic B-Spline, Bicubic Mitchell-Netravali, Lanczos2, Lanczos3<br />
enh: add ability to run all existing pixel scalers on either the CPU or the GPU<br />
enh: add ability to toggle the main and touch display positions (View > Toggle All Displays)<br />
enh: add preliminary support for replay playback and recording<br />
enh: add support for turbo and autohold<br />
enh: add support for the entire suite of slot-2 devices (Emulation > Show SLOT-2 Manager)<br />
enh: add support for using the host machine's audio input device for emulating the NDS microphone (Emulation > Show Microphone Settings)<br />
enh: change the sine wave tone generator's range from 100Hz-5000Hz to 40Hz-4000Hz<br />
enh: reorganize the menu options to more logical locations<br />
enh: greatly improve the File Migration Assistant (now renamed Game Data Migration Assistant) and ROM Info panel with a more modern and space efficient look and feel<br />
enh: miscellaneous user interface improvements<br />
<br />
Linux:<br />
bug: fix screen gap bug<br />
bug: workaround for std::bad_alloc exceptions compiler bugs<br />
enh: add experimental AV recording<br />
enh: generally improve main loop throttling and skipping<br />
enh: massive improvements to HUD and menu layout<br />
enh: add window sizing options and sound interpolation options<br />
enh: add Lid button; disallow U+D, L+R; manual option saving</div>Rogermanhttps://wiki.desmume.org/index.php?title=Main_PageMain Page2015-04-02T04:35:35Z<p>Rogerman: </p>
<hr />
<div>* Releases<br />
** [[Release 0.9.11]]<br />
** [[Release 0.9.10]]<br />
** [[Release 0.9.9]]<br />
** [[Release 0.9.8]]<br />
** [[Release 0.9.7]]<br />
** [[Release 0.9.6]]<br />
** [[Release 0.9.5]]<br />
** [[Release 0.9.4]]<br />
** [[Release 0.9.2]]<br />
** [[Release 0.9.1]]<br />
** [[Release 0.9]]<br />
** [[Release 0.8]]<br />
** [[Release 0.7.3]]<br />
** [[Release 0.7.2]]<br />
** [[Release 0.7.1]]<br />
** [[Release 0.7.0]]<br />
** [[Release 0.6.0]]<br />
** [[Release 0.5.0]]<br />
** [[Changelog|Entire changelog]]<br />
<br />
* Documentation<br />
** [[faq|FAQ]] (this is where we stuff most of our documentation)<br />
** [[KnowledgeBase|Knowledge Base]]<br />
** [[Manual|DeSmuME Manual]]<br />
** [[Using Cheats in DeSmuMe|Using cheats in DeSmuME ]]<br />
** [[Installing DeSmuME from source]]<br />
** [[Savefile or savestate|Savefiles and savestates]]<br />
** [[List_of_Nintendo_DS_games_with_GBA_connectivity|List of Nintendo DS games with GBA connectivity]]<br />
<br />
* World Domination Plan aka TODO<br />
** [[General todo]]<br />
** [[Cocoa frontend todo]]<br />
** [[Linux frontends todo]]<br />
<br />
* External Links<br />
** [http://desmume.org Website]<br />
** [http://sourceforge.net/projects/desmume SourceForge project page]<br />
<br />
<br />
<nowiki /><hr><br />
* [[Special:AllPages|Sitemap]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=FaqFaq2015-03-31T09:03:05Z<p>Rogerman: </p>
<hr />
<div>'''DeSmuME FAQ 0.9.11'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
* FAQ 0.9.9, [[Faq_099]]<br />
* FAQ 0.9.10, [[Faq_0_9_10]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped?<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_1.png]<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! ===<br />
* Make sure you are using the latest version of the emulator.<br />
* Delete your ini file and re-run the emulator.<br />
* Quit using patched ROMs. Remove the AP (Anti-Piracy) patch from the ROM.<br />
* Quit using cheats.<br />
* Use/dump external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games.</strong> Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Read the [[KnowledgeBase]]<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3D renderers. Quit using frameskip.<br />
* Do not use patched ROMs. Never use patched ROMs.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
* Stop using savestates. Use in-game saves.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot your host machine.<br />
* Go to our [http://desmume.org/download official Downloads page] and make sure you are using the latest version, which is currently v0.9.11. Any older versions are unsupported.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary.<br />
* Enable "Advanced Bus-Level Timing". Doing this will slow down emulation, but fix some games.<br />
* Disable "Dynamic Recompiler". Doing this will greatly slow down emulation, but will fix many games.<br />
* Use external BIOS images. Try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your DeSmuME configuration file. It may have options that are breaking your DeSmuME.<br />
** Windows: Your configuration file is located in the same directory as the DeSmuME program. Delete the file named "desmume.ini".<br />
** Mac: Your configuration file is located at "~/Library/Preferences". Delete the file named "org.desmume.DeSmuME.plist". Alternatively, you may run "Delete DeSmuME Preferences.app", which is included with your installation package, which will perform this operation for you.<br />
** Linux: Your configuration file is located at "~/.config/desmume". Delete the file named "config".<br />
* Turn off your virus scanner.<br />
<br />
<br />
If a game really doesn't work, no matter what you try, you can submit a bug report for the game. See [[#Where can I report bugs?]] for more information.<br />
<br />
You might also find ways to patch the games to work better on emulators by searching on the Internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using DeSmuME! ===<br />
This is not DeSmuME's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers. If you are running DeSmuME on a laptop, then a laptop cooler might help.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
DeSmuME is a very CPU demanding app. While many users will see DeSmuME as a toy (and use it as such), it is actually a very sophisticated piece of software with lots of features. Also, DeSmuME focuses more on compatibility and features than on speed. Our philosophy is this: You can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility or gain new features. We take care of our side of things, so you should take care of yours.<br />
<br />
That being said, DeSmuME offers many options for you to find the best balance of compatibility, features, and performance. And remember that it is a balance -- gaining extra performance will always mean that you need to give up some features or reduce compatibility somewhere. How you make these tradeoffs is up to you. Listed below are things you can do to improve DeSmuME's performance.<br />
<br />
<br />
First of all, check that the host hardware is configured for best performance:<br />
* Ensure that you meet the [[#What are the minimum hardware requirements for DeSmuME?|minimum requirements]] for running DeSmuME.<br />
* DeSmuME is mostly CPU intensive and less GPU intensive. You'll want the fastest CPU possible (not necessarily the one with the most cores) for best performance.<br />
* The vast majority of older netbooks (and even newer ones) will have poor performance with any demanding software, including DeSmuME. Don't expect great performance out of these machines.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
<br />
<br />
Here are the biggest factors for improving emulation performance. They are listed from most performance impact to least performance impact:<br />
* Use a DeSmuME binary that works best for your machine. See [[#There are several different DeSmuME executables available. Which EXE do I use?]] for more details.<br />
* Use official DeSmuME releases from our [http://desmume.org/download Downloads page]. Our release versions always use the fastest and most aggressive program optimizations possible for maximum performance. Any unofficial, prerelease, or SVN builds are not guaranteed to have these same optimizations, resulting in lower performance.<br />
* Use frame skip. Even frame skipping by 1 will make many games become playable. However, note that some 3D games may not work well with frame skip, such as Golden Sun: Dark Dawn. If screens seem stuck or screen flickering becomes unacceptable, pick a different frame skip value.<br />
* ''(Windows only)'' Do not run the NDS tools (the ones from the Tools menu) unless absolutely necessary. If you must, try and keep the update interval as low as possible.<br />
* Disable all video filters, and set your display window's pixel scaler to None.<br />
* Use the Dynamic Recompiler (JIT) CPU emulation engine. ''(Doing this may break some games.)''<br />
* Disable Advanced Bus-Level Timing. ''(Doing this may break some games.)''<br />
* Try switching the 3D renderer between OpenGL and SoftRasterizer. One 3D renderer may work faster than the other, depending on the situation.<br />
* ''(Mac only)'' If you are using a pixel scaler and your machine has an older GPU or an integrated GPU, it might help to run the pixel scaler on the CPU by disabling "Run filters on GPU if possible". However, if you are using a newer GPU, then enabling "Run filters on GPU if possible" will remove any performance penalties related to using any video filters.<br />
* ''(Mac only)'' Do not enable any source filters if you are running a pixel scaler on the CPU. This combination results in a substantial performance hit.<br />
* ''(Linux only)'' Do not scale the display window beyond 1x, as this can result in a substantial performance hit.<br />
* Disable Advanced SPU Logic, and use the Dual SPU Sync/Async synchronization method.<br />
<br />
<br />
There are some other things that may theoretically improve performance, but they are dubious at best. They are only included here for the sake of completeness:<br />
* If you are using SoftRasterizer, disable edge marking and fog. Note that games that don't use these features will be unaffected.<br />
* Disable unneeded GPU layers.<br />
* Disable sound emulation altogether.<br />
* Don't use external BIOS images. But if you must, try enabling Patch DelayLoop SWI.<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
You are probably wanting to increase the execution speed. There are two ways of doing this:<br />
* Raise the execution speed limit. This will run the emulation at the specified execution speed, provided that the host hardware is fast enough. The execution speed limit will always be expressed as a speed multiplier, where 1x is 60 FPS. ''(Windows and Mac only)''<br />
* Disable the execution speed limiter. This will run the emulation as fast as the host hardware will allow.<br />
<br />
To change your execution speed options:<br />
* Windows: By default, the '-' and '=' keyboard keys will adjust the speed multiplier between 0.0625x-4x. By default, the Tab keyboard key will disable the speed limiter while held down. You can change these hotkeys in Config > Hotkey Config. In the Main section, the commands are Fast Forward, Increase Speed, and Decrease Speed.<br />
* Mac: By default, the '=' keyboard key will speed up execution by 2x while held down. You can assign additional hotkeys for Set Speed, and then click Settings to choose any speed multiplier from 0x-10x. There is no default hotkey for disabling the speed limiter, but you can assign one to the Enable/Disable Speed Limiter command. Alternatively, you can choose Emulation > Show Execution Control and adjust the execution speed options within the Execution Speed Properties section.<br />
* Linux ''(GTK only)'': By default, the letter 'O' keyboard key will disable the execution speed limiter while held down. You can change this hotkey in Config > Edit Controls. The command is called Boost.<br />
<br />
Note that increasing the execution speed does not mean that DeSmuME is doing less emulation. In fact, DeSmuME must emulate every single frame regardless of execution speed, even if DeSmuME doesn't necessarily show it (most likely, DeSmuME will begin dropping video and audio frames at high execution speeds). This is normal behavior. To achieve higher execution speeds, you will need to configure DeSmuME to operate at the highest performance possible. Read [[#DeSmuME_runs_too_slow.21]] for more information on how to improve emulation performance.<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in OSX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmuME window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. DeSmuME tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows: Windows XP SP2 or later<br />
* Mac: OS X v10.5.8 Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows: Windows Vista SP2 or later<br />
* Mac: OS X v10.6.8 Snow Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
* Windows: For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
** If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
** If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
** If you want to use the developer features, use the dev build. It includes extra debugging code and logging.<br />
* Mac: DeSmuME.app contains binaries for PPC, x86, x64. OS X will automatically choose the best binary to run on your hardware. You can override the automatic selection in the Finder by selecting DeSmuME.app and choosing File > Get Info. Then in the Get Info panel, you can select which binary to run.<br />
** To run as 32-bit PPC: Enable "Open using Rosetta". ''(Note that this option is only available on OS X v10.5 Leopard and v10.6 Snow Leopard. Rosetta is not available on later OS X versions.)''<br />
** To run as 32-bit x86: Enable "Open in 32-bit mode".<br />
** To run as 64-bit x64: Disable both "Open in 32-bit mode" and "Open using Rosetta" options.<br />
* Linux: Linux users are expected to build DeSmuME from source and know the best configure settings for their hardware. See [[Installing DeSmuME from source on Linux]] for more information.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.9GHz CPU will run DeSmuME much faster than a 12-core 1.6GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
(''Windows only'') The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
* Windows: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > One LCD, and then either View > LCDs Layout > Top First (Default) or View > LCDs Layout > Bottom First.<br />
* Mac: First, click the display window that you want to change. To change to a horizontal layout, choose View > Display Orientation > Horizontal. To change the display mode, choose View > Display Mode > Main for the main screen, or choose View > Display Mode > Touch for the touch screen.<br />
* Linux ''(GTK and Glade only)'':<br />
** GTK: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > Single Screen, and then choose View > LCDs Layout > Swap Screens to toggle between each screen.<br />
** Glade: To change to a horizontal layout, choose Config > Right Screen. However, changing the display mode on Glade is unsupported.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
Yes, you can display the DS screens in full screen mode.<br />
<br />
* Windows: Click the DeSmuME window and press Alt-Enter. <br />
* Mac: Click the display window that you want to make full screen, then choose View > Enter Full Screen.<br />
* Linux ''(GTK only)'': Choose View > Window Size > Scale to Window, then choose View > Window Size > Fullscreen.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
Yes, you can display each DS screen in separate windows. ''(This feature is only available for Mac.)''<br />
<br />
* Mac: Choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
DeSmuME allows you to apply pixel scalers, adjust the size of the video output, simulate the separation between the main and touch screens, and run filters on the video output. You can also rotate the NDS displays for games that require you to rotate the hardware NDS in a certain way.<br />
<br />
* Windows: <br />
** Pixel Upscale: To change the pixel scaler, choose View > Magnification Filters, and then select one of the menu options.<br />
** Output Filter: Choose Config > Display Method, then choose either DirectDraw HW, DirectDraw SW, or OpenGL. Your output filter will depend on which option you chose.<br />
*** DirectDraw HW: Depending on OS and GPU driver, your output filter may be Nearest Neighbor or Bilinear. You have no control over which filter is used, as it is determined for you by the OS/driver.<br />
*** DirectDraw SW: Your output filter will always be Nearest Neighbor.<br />
*** OpenGL: If Config > Display Method > Filter is checked, then your output filter will be Bilinear. Otherwise, your output filter will be Nearest Neighbor.<br />
** Display Resize: To set the displays to a specific size, choose View > Window Size, and then choose one of the menu options. The video displays will grow and shrink with the size of its window. The minimum display size is 1x times the pixel scaling. Keep in mind that some pixel scalers, such as 5xBRZ, can cause a vertical layout display to grow up to 1280x1920 pixels in size. In this case, there would be nothing you can do to reduce the display size below 5x. If the window doesn't fit in your monitor while using a given pixel scaler, then you must choose a pixel scaler with a smaller scaling value.<br />
** Screen Separation: Choose View > Screen Gap, and then select one of the menu options.<br />
** Rotation: Choose View > Rotation, and then select one of the menu options.<br />
* Mac:<br />
** Pixel Upscale: Select the window you want to change, then choose View > Video Pixel Scaler, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Pixel Scalers from the Video Settings panel.<br />
** Output Filter: Select the window you want to change, then choose View > Video Output Filter, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Output Filters from the Video Settings panel.<br />
** Display Resize: Select the window you want to change. To set the displays to a specific size, choose View > Display Size, and then choose one of the menu options. Note that on Mac, the maximum window size will always be dependent on your monitor's current resolution. The video display will grow and shrink with the size of the window. If the View > Keep Minimum Display Size at 1x option is enabled, then the minimum display size is 1x. Otherwise, the minimum display size is 0.25x.<br />
** Screen Separation: Select the window you want to change, then choose View > Display Separation, and then choose one of the menu options. Note that the percentage number is relative to the true distance between the NDS displays, where a separation of 100% is approximately 87.65px. If you choose Custom, then you may freely separate the displays to any percentage value from 0%-200%.<br />
** Rotation: Select the window you want to change, then choose View > Display Rotation, and then choose one of the menu options. If you choose Custom, then you may free rotate the display to any rotation.<br />
* Linux:<br />
** Pixel Upscale ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Video Filter, and then select one of the menu options.<br />
*** Qt: Choose View > Video Filter, and then select one of the menu options.<br />
** Output Filter ''(GTK only)'': With the exception of GTK, this feature is unsupported on all frontends. The output filter will always be Nearest Neighbor on unsupported frontends.<br />
*** GTK: Choose View > Secondary Video Filter, and then select one of the menu options.<br />
** Display Resize ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Window Size, and then select on of the menu options to set the displays to a specific size. If you choose Scale to Window, then the displays will grow and shrink with the window size. The minimum display size is 1x.<br />
*** Qt: The displays will grow and shrink with the window size. However, there is no option to set the displays to a specific size. The minimum display size is 1x.<br />
** Screen Separation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Screen Gap. Note that this is only a toggle option which only supports a separation of 0px or 90px.<br />
*** Glade: Choose Config > True Gap to separate the screens by 90px, or choose Config > No Gap to separate the screens by 0px. If both options are not enabled, then the default separation is 5px.<br />
** Rotation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Rotation, and then select one of the menu options.<br />
*** Glade: For the normal display rotation, choose Config > Rotate Screen 0. To rotate the displays 90 degrees, choose Config > Rotate Screen 90. To rotate the displays 180 degrees, choose Config > Rotate Screen 180. To rotate the displays 270 degrees, choose Config > Rotate Screen 270.<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported for all platforms. See [[#Microphone|NDS Microphone Support]] for more information.<br />
<br />
* Windows<br />
** Hardware Audio Input Device: In Windows, first set up the default audio recording device in your Windows Control Panel. Then in DeSmuME, choose Config > Microphone Settings, and then choose "Use connected physical microphone".<br />
** Software Generated Samples: Assign the Microphone hotkey using Config > Hotkey Config, under the Main section. Then choose Config > Microphone Settings, and then choose one of the three options that is not "Use connected physical microphone".<br />
* Mac<br />
** Hardware Audio Input Device: In OS X, first set up the default audio input device in Apple > System Preferences. DeSmuME will then automatically switch to using the default audio input device. Choose Emulation > Show Microphone Settings to adjust gain or mute the microphone.<br />
** Software Generated Samples: Assign Microphone hotkeys in your DeSmuME Input Preferences. Every hotkey assigned to the Microphone command will have a corresponding Settings button. Click Settings to change which sample generator the hotkey activates. You can assign multiple generators at the same time by using multiple hotkeys.<br />
* Linux<br />
** Hardware Audio Input Device: You must first compile your own Linux build with libasound. Next, in Linux, you must set up you default audio input device using whatever configuration utility is available in your distro. Then when you launch DeSmuME, DeSmuME will read your audio input device.<br />
** Software Generated Samples: This feature is unsupported on Linux.<br />
<br />
Additional Notes:<br />
<br />
* If you are using software generated samples, you will have to experiment with the microphone hotkey timing. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
* Hardware audio input device support is currently broken for Windows and Linux, and so many instances where the NDS microphone is required, such as giving voice commands to your Nintendog, will fail. Windows can sometimes workaround this if you use software generated samples from an audio file, but be aware that you can only assign one audio file at a time. Unfortunately, Linux has no workarounds.<br />
* If you want to play games that rely heavily on real-time voice recognition, such as the Nintendogs series of games, then the Mac version is your only option right now.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
[[List_of_Nintendo_DS_games_with_GBA_connectivity]]<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked? ===<br />
No. A real NDS uses Wi-Fi for multiplayer, and that isn't emulated in DeSmuME yet. For more information, see [[Faq#Wi-Fi|Wi-Fi Hardware Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
[[#Wi-Fi|Read more information about the current state of DeSmuME's Wi-Fi support.]] Right now, it's an experimental feature, which means it is unsupported.<br />
<br />
If you are an end-user, then we strongly discourage the use of Wi-Fi. However, as an end-user, if you really want to use Wi-Fi that badly, then you are on your own. In that case, any posts on our forums about Wi-Fi being used by end-users for end-user applications (such as wanting to trade Pokemon) will be ignored. Also, any submissions to any of our SourceForge trackers under the same conditions will be immediately closed without further consideration. <strong>When we say that Wi-Fi is unsupported, we mean it.</strong><br />
<br />
With that said, any developers interested in working on Wi-Fi support are welcome to join us at [[#DeSmuME_IRC_Channel|our IRC channel]]. We would appreciate the assistance!<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is currently not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future? ===<br />
Most likely, DeSmuME will not support the emulation of the Nintendo 3DS or Nintendo 2DS in the future. The hardware of both a 3DS and a 2DS are very different from an NDS, so emulating a 3DS/2DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
You can report bugs using our [https://sourceforge.net/p/desmume/bugs/ official bug tracker] on SourceForge. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
<br />
==== User Controls ====<br />
* The D-pad, buttons, and touch screen are fully emulated.<br />
* The ability to toggle the folded/unfolded state of the NDS is emulated through the Lid control.<br />
* Adjustable stylus pressure is only supported on Windows. However, the vast majority of games don't use this feature.<br />
* Emulation of stylus jitter is only supported on Windows. However, the vast majority of games don't use this feature.<br />
<br />
==== 2D Graphics System ====<br />
* All known 2D graphics features are supported, with the exception of mosaics.<br />
* Mosaics work somewhat, but are imperfect. Also, mosaics may not show up properly in some games.<br />
* There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
* Big-endian systems may not render the correct colors in some areas.<br />
<br />
==== 3D Rendering ====<br />
DeSmuME includes two 3D renderers, our own custom software renderer we call SoftRasterizer, and an OpenGL-based renderer. Each renderer has its own strengths and weaknesses, so use the best renderer for your situation. For example, if certain buttons, labels, or menus rendered on the 3D screen are obscured (for example, a button with no label on it), then things might appear correctly if you use SoftRasterizer. If that doesn't work, then things might appear correctly with OpenGL. Both renderers are provided for the purposes of working around specific 3D rendering cases.<br />
<br />
Also, keep in mind that SoftRasterizer uses the CPU for rendering, while OpenGL uses the GPU for rendering. Therefore, you may experience a difference in performance with each 3D renderer, depending on the host machine's hardware and depending on how you've configured DeSmuME.<br />
<br />
===== SoftRasterizer Renderer =====<br />
* All 3D features are emulated, except for wireframes and antialiasing.<br />
* There are issues with line rendering. However, it is possible to work around most of these issues by using the Line Hack.<br />
* There are issues with inaccurate texture rendering. However, it is possible to work around some of these issues by using the Fragment Sampling Hack. ''(Windows and Mac only)''<br />
* There are issues with depth rendering and Z-fighting. However, it is possible to work around some of these issues by adjusting the depth comparison threshold. ''(Windows and Mac only)''<br />
* There are some issues with shadow polygons. However, SoftRasterizer works better than OpenGL at rendering shadow polygons.<br />
<br />
===== OpenGL Renderer =====<br />
* All 3D features are emulated, except for fog and edge marking.<br />
* There are issues with depth rendering and Z-fighting. However, there is no workaround for this issue like there is with SoftRasterizer.<br />
* There are some major issues with shadow polygons. If you find the shadow polygon bugs unacceptable, then you will have to switch to SoftRasterizer.<br />
<br />
==== Sound ====<br />
* All sound features are emulated.<br />
* For complete SPU emulation, two requirements must be met:<br />
** Advanced SPU Logic must be enabled.<br />
** One of the SPU sound synchronization methods must be used (N, Z, or P).<br />
* Disabling Advanced SPU Logic and using Dual SPU Sync/Async will result in the loss of some sound features, but will also improve emulation performance on Windows and Linux. (Audio processing is multithreaded on Mac, so Mac users should never need to disable Advanced SPU Logic or use Dual SPU Sync/Async except for testing purposes. There are no performance advantages for changing these two options on Mac.)<br />
* Audio samples can be post-processed with interpolation, resulting in a smoother sound than a hardware NDS. Linear and Cosine interpolation algorithms are included. You may also turn off interpolation to play back the samples exactly as a hardware NDS would receive them.<br />
<br />
==== Microphone ====<br />
* All microphone features are emulated.<br />
* DeSmuME supports either receiving audio samples from a hardware audio input device, or generating audio samples in software.<br />
* Hardware audio input is only supported on Mac. Windows and Linux are currently broken and unsupported.<br />
* DeSmuME includes the following software sample generators:<br />
** Internal Noise Samples<br />
** White Noise ''(Windows and Mac only)''<br />
** Sine Wave ''(Mac only)''<br />
** Audio File ''(Windows -- only WAV files in 16000Hz 8-bit mono LPCM format are supported / Mac -- any audio file compatible with [https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/CoreAudioOverview/SupportedAudioFormatsMacOSX/SupportedAudioFormatsMacOSX.html CoreAudio] is supported)''<br />
<br />
==== CPU ====<br />
* CPU emulation is supported through either the Interpreter engine or the Dynamic Recompiler engine.<br />
* The Interpreter engine is available on all platforms. However, Dynamic Recompiler only works on x86 or x64 systems.<br />
* We are unaware of any huge problems with the Interpreter engine, but there are still some issues.<br />
* Interpreter has better compatibility than Dynamic Recompiler. Some games that fail when using Dynamic Recompiler will work fine with Interpreter. The tradeoff here is that Interpreter has much lower performance than Dynamic Recompiler.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== Memory and System Bus ====<br />
* We are unaware of any huge problems with the MMU and DMA systems, but there are still some issues.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== BIOS and Firmware ====<br />
* DeSmuME uses its own internal BIOS and firmware, but only for the purposes of loading and executing ROMs. DeSmuME's internal BIOS and firmware do not emulate all of the original NDS features.<br />
* DeSmuME supports configuring all of the NDS profile information through the internal BIOS and firmware alone. This information includes:<br />
** Nickname ''(Windows and Mac only)''<br />
** Message ''(Windows and Mac only)''<br />
** Favorite Color ''(Windows and Mac only)''<br />
** Birthday ''(Windows and Mac only)''<br />
** Language<br />
* DeSmuME can also load external BIOS and firmware images from a hardware NDS, gaining additional features by doing so.<br />
* If DeSmuME has all the necessary external BIOS and firmware images loaded, then it is possible to perform a full NDS boot. It then becomes possible to configure the NDS profile information within the emulated NDS firmware interface.<br />
* Loading of external BIOS images is supported on Windows, Mac, and Linux.<br />
* Loading of an external firmware image is only supported on Windows and Mac. Linux is not supported.<br />
<br />
==== NDS Slot (SLOT-1) ====<br />
* The following NDS slot devices are supported:<br />
** Standard Retail MC + ROM<br />
** Retail w/ NAND Flash<br />
** R4<br />
* DeSmuME can display the header information of loaded ROMs. ''(Windows and Mac only)''<br />
* We are unaware of any huge problems with loading NDS ROMs. However, there are some issues with loading NDS ROMs on big-endian systems.<br />
* There are some issues with DSi ROMs, as they are not fully supported yet.<br />
<br />
==== GBA Slot (SLOT-2) ====<br />
* The following GBA slot devices are supported:<br />
** Compact Flash Card<br />
** Rumble Pak ''(Windows and Mac only)''<br />
** GBA Cartridge<br />
** Guitar Grip ''(Windows and Mac only)''<br />
** Memory Expansion Pak ''(Windows and Mac only)''<br />
** EasyPiano ''(Windows and Mac only)''<br />
** Taito Paddle ''(Windows and Mac only)''<br />
** PassME ''(Windows and Mac only)''<br />
<br />
==== Wi-Fi ====<br />
* Wi-Fi emulation is currently in an experimental stage, and many Wi-Fi features are either broken or non-working.<br />
* Here is what we currently know about Wi-Fi so far: [[Luigi's notes about WiFi|Wi-Fi Notes]]<br />
<br />
==== Dynamically Linked Driver Interface (DLDI) ====<br />
The Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
* LFN is currently unsupported.<br />
<br />
<br />
=== Does the GDB stub still work? ===<br />
GDB remote debugging does work to a certain degree. However, DeSmuME does not implement the entire GDB stub protocol, so there are still some bugs. Nevertheless, GDB remote debugging works well enough to do basic operations, like set breakpoints, step through code, watch memory locations for read/write operations, and other basic operations.<br />
<br />
=== How do I enable the GDB stub? ===<br />
* Windows: You must make a custom build using #define GDB_STUB.<br />
# Copy the "userconfig.h" file from "src\windows\defaultconfig" to "src\windows\userconfig".<br />
# In the "src\windows\userconfig\userconfig.h" file, add "#define GDB_STUB".<br />
# Build DeSmuME.<br />
# After DeSmuME is finished building, launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
* Mac: You must make a custom build using the "DeSmuME (OS X App; dev+)" build scheme, which is only available using the "Xcode (Latest)" project file. You must compile the dev+ build using Xcode 4 or later. When you do, a new menu option will be available: Tools > Show GDB Stub Control. In the GDB Stub Control panel, click Start to begin listening for the GDB debugging client.<br />
* Linux: When you generate your configure script, it must use the flag "--enable-gdb-stub". Build DeSmuME, then launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an online communications system.<br />
<br />
The DeSmuME team uses IRC to discuss DeSmuME's development. You will need an IRC client in order to participate is these discussions.<br />
<br />
==== Recommended IRC Clients ====<br />
* Windows: [http://www.mirc.com mIRC], [http://www.xchat.com XChat]<br />
* Mac: [http://colloquy.info Colloquy], [https://www.adium.im Adium]<br />
* Linux: [http://www.xchat.com XChat]<br />
* Firefox add-on: [https://addons.mozilla.org/en-us/firefox/addon/chatzilla/ ChatZilla]<br />
* Others: [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Wikipedia]<br />
<br />
==== DeSmuME IRC Channel ====<br />
To connect to the DeSmuME IRC channel, you will need to enter the following information in your IRC client:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
As far as language is concerned, most of the people on the channel speak English.<br />
<br />
=== Where is the manual? ===<br />
[http://wiki.desmume.org/index.php?title=Manual Over here.] It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
<br />
== SVN and Compiling ==<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ SVN] is a tool that is used by multiple developers to work on the same codebase without conflicts. See [http://en.wikipedia.org/wiki/Subversion_(software) Wikipedia] for more information.<br />
<br />
=== Where do I get SVN builds? ===<br />
We officially use the [http://buildbot.orphis.net/desmume/ automated SVN builds] provided by DeSmuME user, Orphis.<br />
<br />
Other third-parties may offer SVN builds, such as [http://www.emucr.com EmuCR]. Please note that any third-party build is both unofficial and unsupported.<br />
<br />
=== How do I get the latest SVN code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* Windows: At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
** Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
** Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* Mac: Any of the compilers built into Xcode 3.1.4 all the way up to the latest Xcode is supported. You may also use a non-Xcode toolchain, such as MacPorts GCC, but this is currently unsupported.<br />
* Linux: Any recent version of GCC and toolchain should work. However, we do not recommend GCC 4.9, since there are bugs with this GCC version that interfere with DeSmuME.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
(''Windows only'') For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the Visual C++ Express 2008 installer and I can't find it. ===<br />
Download link: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Patches may be submitted to our [https://sourceforge.net/p/desmume/patches/ patches tracker] on SourceForge. Any patches submitted will be subject to a code review by our developer team, where we will then determine if the patch should be included in the codebase or not.<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== I'm not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile SVN builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on IRC. Also, adding to or perfecting the documentation in the Wiki is useful. You could also watch for and help answer questions placed on the [http://forums.desmume.org DeSmuME forum].<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://problemkaputt.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a Compact Flash image<br />
<br />
<br />
== Mac Users ==<br />
<br />
=== I just downloaded DeSmuME, but I can't launch it because "it is from an unidentified developer." What gives? ===<br />
Apple introduced a security policy called [https://support.apple.com/en-us/HT202491 Gatekeeper] on OS X v10.8 Mountain Lion to help protect users from malware. However, since DeSmuME is a free open-source app, we don't want to invest money into properly code signing the app for the sake of proving that we are legitimate app and not just another piece of malware. If you are concerned about the legitimacy of DeSmuME.app, then always make sure to download it from our [http://desmume.org/download official Downloads page].<br />
<br />
If OS X prevents you from launching DeSmuME.app because "it is from an unidentified developer", do this:<br />
* In the Finder, right-click (or Control-click) DeSmuME.app, then in the contextual menu, choose Open. A warning box will appear, saying that DeSmuME.app "is from an unidentified developer." In the warning box, click Open to proceed with launching DeSmuME.app.<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories.<br />
<br />
Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
As of this release, all of the DeSmuME features that exist in the Windows port also exist in the Mac port, except for the following:<br />
* The HUD<br />
* Custom path settings<br />
* AVI / WAV recording<br />
* The various tools listed in the Tools menu<br />
* RAM Watch / RAM Search<br />
* Lua scripting<br />
<br />
While we are actively working to attain full feature parity between the Mac and Windows ports, this will still take some time to achieve.<br />
<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogermanhttps://wiki.desmume.org/index.php?title=FaqFaq2015-03-31T08:56:34Z<p>Rogerman: /* DeSmuME runs too slow! */</p>
<hr />
<div>'''DeSmuME FAQ 0.9.11'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
* FAQ 0.9.9, [[Faq_099]]<br />
* FAQ 0.9.10, [[Faq_0_9_10]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped?<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_1.png]<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! ===<br />
* Make sure you are using the latest version of the emulator.<br />
* Delete your ini file and re-run the emulator.<br />
* Quit using patched ROMs. Remove the AP (Anti-Piracy) patch from the ROM.<br />
* Quit using cheats.<br />
* Use/dump external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games.</strong> Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Read the [[KnowledgeBase]]<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3D renderers. Quit using frameskip.<br />
* Do not use patched ROMs. Never use patched ROMs.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
* Stop using savestates. Use in-game saves.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot your host machine.<br />
* Go to our [http://desmume.org/download official Downloads page] and make sure you are using the latest version, which is currently v0.9.11. Any older versions are unsupported.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary.<br />
* Enable "Advanced Bus-Level Timing". Doing this will slow down emulation, but fix some games.<br />
* Disable "Dynamic Recompiler". Doing this will greatly slow down emulation, but will fix many games.<br />
* Use external BIOS images. Try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your DeSmuME configuration file. It may have options that are breaking your DeSmuME.<br />
** Windows: Your configuration file is located in the same directory as the DeSmuME program. Delete the file named "desmume.ini".<br />
** Mac: Your configuration file is located at "~/Library/Preferences". Delete the file named "org.desmume.DeSmuME.plist". Alternatively, you may run "Delete DeSmuME Preferences.app", which is included with your installation package, which will perform this operation for you.<br />
** Linux: Your configuration file is located at "~/.config/desmume". Delete the file named "config".<br />
* Turn off your virus scanner.<br />
<br />
<br />
If a game really doesn't work, no matter what you try, you can submit a bug report for the game to [https://sourceforge.net/p/desmume/bugs/ our bug tracker] on SourceForge.<br />
<br />
You might also find ways to patch the games to work better on emulators by searching on the Internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using DeSmuME! ===<br />
This is not DeSmuME's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers. If you are running DeSmuME on a laptop, then a laptop cooler might help.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
DeSmuME is a very CPU demanding app. While many users will see DeSmuME as a toy (and use it as such), it is actually a very sophisticated piece of software with lots of features. Also, DeSmuME focuses more on compatibility and features than on speed. Our philosophy is this: You can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility or gain new features. We take care of our side of things, so you should take care of yours.<br />
<br />
That being said, DeSmuME offers many options for you to find the best balance of compatibility, features, and performance. And remember that it is a balance -- gaining extra performance will always mean that you need to give up some features or reduce compatibility somewhere. How you make these tradeoffs is up to you. Listed below are things you can do to improve DeSmuME's performance.<br />
<br />
<br />
First of all, check that the host hardware is configured for best performance:<br />
* Ensure that you meet the [[#What are the minimum hardware requirements for DeSmuME?|minimum requirements]] for running DeSmuME.<br />
* DeSmuME is mostly CPU intensive and less GPU intensive. You'll want the fastest CPU possible (not necessarily the one with the most cores) for best performance.<br />
* The vast majority of older netbooks (and even newer ones) will have poor performance with any demanding software, including DeSmuME. Don't expect great performance out of these machines.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
<br />
<br />
Here are the biggest factors for improving emulation performance. They are listed from most performance impact to least performance impact:<br />
* Use a DeSmuME binary that works best for your machine. See [[#There are several different DeSmuME executables available. Which EXE do I use?]] for more details.<br />
* Use official DeSmuME releases from our [http://desmume.org/download Downloads page]. Our release versions always use the fastest and most aggressive program optimizations possible for maximum performance. Any unofficial, prerelease, or SVN builds are not guaranteed to have these same optimizations, resulting in lower performance.<br />
* Use frame skip. Even frame skipping by 1 will make many games become playable. However, note that some 3D games may not work well with frame skip, such as Golden Sun: Dark Dawn. If screens seem stuck or screen flickering becomes unacceptable, pick a different frame skip value.<br />
* ''(Windows only)'' Do not run the NDS tools (the ones from the Tools menu) unless absolutely necessary. If you must, try and keep the update interval as low as possible.<br />
* Disable all video filters, and set your display window's pixel scaler to None.<br />
* Use the Dynamic Recompiler (JIT) CPU emulation engine. ''(Doing this may break some games.)''<br />
* Disable Advanced Bus-Level Timing. ''(Doing this may break some games.)''<br />
* Try switching the 3D renderer between OpenGL and SoftRasterizer. One 3D renderer may work faster than the other, depending on the situation.<br />
* ''(Mac only)'' If you are using a pixel scaler and your machine has an older GPU or an integrated GPU, it might help to run the pixel scaler on the CPU by disabling "Run filters on GPU if possible". However, if you are using a newer GPU, then enabling "Run filters on GPU if possible" will remove any performance penalties related to using any video filters.<br />
* ''(Mac only)'' Do not enable any source filters if you are running a pixel scaler on the CPU. This combination results in a substantial performance hit.<br />
* ''(Linux only)'' Do not scale the display window beyond 1x, as this can result in a substantial performance hit.<br />
* Disable Advanced SPU Logic, and use the Dual SPU Sync/Async synchronization method.<br />
<br />
<br />
There are some other things that may theoretically improve performance, but they are dubious at best. They are only included here for the sake of completeness:<br />
* If you are using SoftRasterizer, disable edge marking and fog. Note that games that don't use these features will be unaffected.<br />
* Disable unneeded GPU layers.<br />
* Disable sound emulation altogether.<br />
* Don't use external BIOS images. But if you must, try enabling Patch DelayLoop SWI.<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
You are probably wanting to increase the execution speed. There are two ways of doing this:<br />
* Raise the execution speed limit. This will run the emulation at the specified execution speed, provided that the host hardware is fast enough. The execution speed limit will always be expressed as a speed multiplier, where 1x is 60 FPS. ''(Windows and Mac only)''<br />
* Disable the execution speed limiter. This will run the emulation as fast as the host hardware will allow.<br />
<br />
To change your execution speed options:<br />
* Windows: By default, the '-' and '=' keyboard keys will adjust the speed multiplier between 0.0625x-4x. By default, the Tab keyboard key will disable the speed limiter while held down. You can change these hotkeys in Config > Hotkey Config. In the Main section, the commands are Fast Forward, Increase Speed, and Decrease Speed.<br />
* Mac: By default, the '=' keyboard key will speed up execution by 2x while held down. You can assign additional hotkeys for Set Speed, and then click Settings to choose any speed multiplier from 0x-10x. There is no default hotkey for disabling the speed limiter, but you can assign one to the Enable/Disable Speed Limiter command. Alternatively, you can choose Emulation > Show Execution Control and adjust the execution speed options within the Execution Speed Properties section.<br />
* Linux ''(GTK only)'': By default, the letter 'O' keyboard key will disable the execution speed limiter while held down. You can change this hotkey in Config > Edit Controls. The command is called Boost.<br />
<br />
Note that increasing the execution speed does not mean that DeSmuME is doing less emulation. In fact, DeSmuME must emulate every single frame regardless of execution speed, even if DeSmuME doesn't necessarily show it (most likely, DeSmuME will begin dropping video and audio frames at high execution speeds). This is normal behavior. To achieve higher execution speeds, you will need to configure DeSmuME to operate at the highest performance possible. Read [[#DeSmuME_runs_too_slow.21]] for more information on how to improve emulation performance.<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in OSX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmuME window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. DeSmuME tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows: Windows XP SP2 or later<br />
* Mac: OS X v10.5.8 Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows: Windows Vista SP2 or later<br />
* Mac: OS X v10.6.8 Snow Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
* Windows: For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
** If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
** If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
** If you want to use the developer features, use the dev build. It includes extra debugging code and logging.<br />
* Mac: DeSmuME.app contains binaries for PPC, x86, x64. OS X will automatically choose the best binary to run on your hardware. You can override the automatic selection in the Finder by selecting DeSmuME.app and choosing File > Get Info. Then in the Get Info panel, you can select which binary to run.<br />
** To run as 32-bit PPC: Enable "Open using Rosetta". ''(Note that this option is only available on OS X v10.5 Leopard and v10.6 Snow Leopard. Rosetta is not available on later OS X versions.)''<br />
** To run as 32-bit x86: Enable "Open in 32-bit mode".<br />
** To run as 64-bit x64: Disable both "Open in 32-bit mode" and "Open using Rosetta" options.<br />
* Linux: Linux users are expected to build DeSmuME from source and know the best configure settings for their hardware. See [[Installing DeSmuME from source on Linux]] for more information.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.9GHz CPU will run DeSmuME much faster than a 12-core 1.6GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
(''Windows only'') The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
* Windows: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > One LCD, and then either View > LCDs Layout > Top First (Default) or View > LCDs Layout > Bottom First.<br />
* Mac: First, click the display window that you want to change. To change to a horizontal layout, choose View > Display Orientation > Horizontal. To change the display mode, choose View > Display Mode > Main for the main screen, or choose View > Display Mode > Touch for the touch screen.<br />
* Linux ''(GTK and Glade only)'':<br />
** GTK: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > Single Screen, and then choose View > LCDs Layout > Swap Screens to toggle between each screen.<br />
** Glade: To change to a horizontal layout, choose Config > Right Screen. However, changing the display mode on Glade is unsupported.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
Yes, you can display the DS screens in full screen mode.<br />
<br />
* Windows: Click the DeSmuME window and press Alt-Enter. <br />
* Mac: Click the display window that you want to make full screen, then choose View > Enter Full Screen.<br />
* Linux ''(GTK only)'': Choose View > Window Size > Scale to Window, then choose View > Window Size > Fullscreen.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
Yes, you can display each DS screen in separate windows. ''(This feature is only available for Mac.)''<br />
<br />
* Mac: Choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
DeSmuME allows you to apply pixel scalers, adjust the size of the video output, simulate the separation between the main and touch screens, and run filters on the video output. You can also rotate the NDS displays for games that require you to rotate the hardware NDS in a certain way.<br />
<br />
* Windows: <br />
** Pixel Upscale: To change the pixel scaler, choose View > Magnification Filters, and then select one of the menu options.<br />
** Output Filter: Choose Config > Display Method, then choose either DirectDraw HW, DirectDraw SW, or OpenGL. Your output filter will depend on which option you chose.<br />
*** DirectDraw HW: Depending on OS and GPU driver, your output filter may be Nearest Neighbor or Bilinear. You have no control over which filter is used, as it is determined for you by the OS/driver.<br />
*** DirectDraw SW: Your output filter will always be Nearest Neighbor.<br />
*** OpenGL: If Config > Display Method > Filter is checked, then your output filter will be Bilinear. Otherwise, your output filter will be Nearest Neighbor.<br />
** Display Resize: To set the displays to a specific size, choose View > Window Size, and then choose one of the menu options. The video displays will grow and shrink with the size of its window. The minimum display size is 1x times the pixel scaling. Keep in mind that some pixel scalers, such as 5xBRZ, can cause a vertical layout display to grow up to 1280x1920 pixels in size. In this case, there would be nothing you can do to reduce the display size below 5x. If the window doesn't fit in your monitor while using a given pixel scaler, then you must choose a pixel scaler with a smaller scaling value.<br />
** Screen Separation: Choose View > Screen Gap, and then select one of the menu options.<br />
** Rotation: Choose View > Rotation, and then select one of the menu options.<br />
* Mac:<br />
** Pixel Upscale: Select the window you want to change, then choose View > Video Pixel Scaler, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Pixel Scalers from the Video Settings panel.<br />
** Output Filter: Select the window you want to change, then choose View > Video Output Filter, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Output Filters from the Video Settings panel.<br />
** Display Resize: Select the window you want to change. To set the displays to a specific size, choose View > Display Size, and then choose one of the menu options. Note that on Mac, the maximum window size will always be dependent on your monitor's current resolution. The video display will grow and shrink with the size of the window. If the View > Keep Minimum Display Size at 1x option is enabled, then the minimum display size is 1x. Otherwise, the minimum display size is 0.25x.<br />
** Screen Separation: Select the window you want to change, then choose View > Display Separation, and then choose one of the menu options. Note that the percentage number is relative to the true distance between the NDS displays, where a separation of 100% is approximately 87.65px. If you choose Custom, then you may freely separate the displays to any percentage value from 0%-200%.<br />
** Rotation: Select the window you want to change, then choose View > Display Rotation, and then choose one of the menu options. If you choose Custom, then you may free rotate the display to any rotation.<br />
* Linux:<br />
** Pixel Upscale ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Video Filter, and then select one of the menu options.<br />
*** Qt: Choose View > Video Filter, and then select one of the menu options.<br />
** Output Filter ''(GTK only)'': With the exception of GTK, this feature is unsupported on all frontends. The output filter will always be Nearest Neighbor on unsupported frontends.<br />
*** GTK: Choose View > Secondary Video Filter, and then select one of the menu options.<br />
** Display Resize ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Window Size, and then select on of the menu options to set the displays to a specific size. If you choose Scale to Window, then the displays will grow and shrink with the window size. The minimum display size is 1x.<br />
*** Qt: The displays will grow and shrink with the window size. However, there is no option to set the displays to a specific size. The minimum display size is 1x.<br />
** Screen Separation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Screen Gap. Note that this is only a toggle option which only supports a separation of 0px or 90px.<br />
*** Glade: Choose Config > True Gap to separate the screens by 90px, or choose Config > No Gap to separate the screens by 0px. If both options are not enabled, then the default separation is 5px.<br />
** Rotation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Rotation, and then select one of the menu options.<br />
*** Glade: For the normal display rotation, choose Config > Rotate Screen 0. To rotate the displays 90 degrees, choose Config > Rotate Screen 90. To rotate the displays 180 degrees, choose Config > Rotate Screen 180. To rotate the displays 270 degrees, choose Config > Rotate Screen 270.<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported for all platforms. See [[#Faq#Microphone|NDS Microphone Support]] for more information.<br />
<br />
* Windows<br />
** Hardware Audio Input Device: In Windows, first set up the default audio recording device in your Windows Control Panel. Then in DeSmuME, choose Config > Microphone Settings, and then choose "Use connected physical microphone".<br />
** Software Generated Samples: Assign the Microphone hotkey using Config > Hotkey Config, under the Main section. Then choose Config > Microphone Settings, and then choose one of the three options that is not "Use connected physical microphone".<br />
* Mac<br />
** Hardware Audio Input Device: In OS X, first set up the default audio input device in Apple > System Preferences. DeSmuME will then automatically switch to using the default audio input device. Choose Emulation > Show Microphone Settings to adjust gain or mute the microphone.<br />
** Software Generated Samples: Assign Microphone hotkeys in your DeSmuME Input Preferences. Every hotkey assigned to the Microphone command will have a corresponding Settings button. Click Settings to change which sample generator the hotkey activates. You can assign multiple generators at the same time by using multiple hotkeys.<br />
* Linux<br />
** Hardware Audio Input Device: You must first compile your own Linux build with libasound. Next, in Linux, you must set up you default audio input device using whatever configuration utility is available in your distro. Then when you launch DeSmuME, DeSmuME will read your audio input device.<br />
** Software Generated Samples: This feature is unsupported on Linux.<br />
<br />
Additional Notes:<br />
<br />
* If you are using software generated samples, you will have to experiment with the microphone hotkey timing. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
* Hardware audio input device support is currently broken for Windows and Linux, and so many instances where the NDS microphone is required, such as giving voice commands to your Nintendog, will fail. Windows can sometimes workaround this if you use software generated samples from an audio file, but be aware that you can only assign one audio file at a time. Unfortunately, Linux has no workarounds.<br />
* If you want to play games that rely heavily on real-time voice recognition, such as the Nintendogs series of games, then the Mac version is your only option right now.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
[[List_of_Nintendo_DS_games_with_GBA_connectivity]]<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked? ===<br />
No. A real NDS uses Wi-Fi for multiplayer, and that isn't emulated in DeSmuME yet. For more information, see [[Faq#Wi-Fi|Wi-Fi Hardware Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
[[#Faq#Wi-Fi|Read more information about the current state of DeSmuME's Wi-Fi support.]] Right now, it's an experimental feature, which means it is unsupported.<br />
<br />
If you are an end-user, then we strongly discourage the use of Wi-Fi. However, as an end-user, if you really want to use Wi-Fi that badly, then you are on your own. In that case, any posts on our forums about Wi-Fi being used by end-users for end-user applications (such as wanting to trade Pokemon) will be ignored. Also, any submissions to any of our SourceForge trackers under the same conditions will be immediately closed without further consideration. <strong>When we say that Wi-Fi is unsupported, we mean it.</strong><br />
<br />
With that said, any developers interested in working on Wi-Fi support are welcome to join us at [[#Faq#DeSmuME_IRC_Channel|our IRC channel]]. We would appreciate the assistance!<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is currently not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future? ===<br />
Most likely, DeSmuME will not support the emulation of the Nintendo 3DS or Nintendo 2DS in the future. The hardware of both a 3DS and a 2DS are very different from an NDS, so emulating a 3DS/2DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
You can report bugs using our [https://sourceforge.net/p/desmume/bugs/ official bug tracker] on SourceForge. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
<br />
==== User Controls ====<br />
* The D-pad, buttons, and touch screen are fully emulated.<br />
* The ability to toggle the folded/unfolded state of the NDS is emulated through the Lid control.<br />
* Adjustable stylus pressure is only supported on Windows. However, the vast majority of games don't use this feature.<br />
* Emulation of stylus jitter is only supported on Windows. However, the vast majority of games don't use this feature.<br />
<br />
==== 2D Graphics System ====<br />
* All known 2D graphics features are supported, with the exception of mosaics.<br />
* Mosaics work somewhat, but are imperfect. Also, mosaics may not show up properly in some games.<br />
* There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
* Big-endian systems may not render the correct colors in some areas.<br />
<br />
==== 3D Rendering ====<br />
DeSmuME includes two 3D renderers, our own custom software renderer we call SoftRasterizer, and an OpenGL-based renderer. Each renderer has its own strengths and weaknesses, so use the best renderer for your situation. For example, if certain buttons, labels, or menus rendered on the 3D screen are obscured (for example, a button with no label on it), then things might appear correctly if you use SoftRasterizer. If that doesn't work, then things might appear correctly with OpenGL. Both renderers are provided for the purposes of working around specific 3D rendering cases.<br />
<br />
Also, keep in mind that SoftRasterizer uses the CPU for rendering, while OpenGL uses the GPU for rendering. Therefore, you may experience a difference in performance with each 3D renderer, depending on the host machine's hardware and depending on how you've configured DeSmuME.<br />
<br />
===== SoftRasterizer Renderer =====<br />
* All 3D features are emulated, except for wireframes and antialiasing.<br />
* There are issues with line rendering. However, it is possible to work around most of these issues by using the Line Hack.<br />
* There are issues with inaccurate texture rendering. However, it is possible to work around some of these issues by using the Fragment Sampling Hack. ''(Windows and Mac only)''<br />
* There are issues with depth rendering and Z-fighting. However, it is possible to work around some of these issues by adjusting the depth comparison threshold. ''(Windows and Mac only)''<br />
* There are some issues with shadow polygons. However, SoftRasterizer works better than OpenGL at rendering shadow polygons.<br />
<br />
===== OpenGL Renderer =====<br />
* All 3D features are emulated, except for fog and edge marking.<br />
* There are issues with depth rendering and Z-fighting. However, there is no workaround for this issue like there is with SoftRasterizer.<br />
* There are some major issues with shadow polygons. If you find the shadow polygon bugs unacceptable, then you will have to switch to SoftRasterizer.<br />
<br />
==== Sound ====<br />
* All sound features are emulated.<br />
* For complete SPU emulation, two requirements must be met:<br />
** Advanced SPU Logic must be enabled.<br />
** One of the SPU sound synchronization methods must be used (N, Z, or P).<br />
* Disabling Advanced SPU Logic and using Dual SPU Sync/Async will result in the loss of some sound features, but will also improve emulation performance on Windows and Linux. (Audio processing is multithreaded on Mac, so Mac users should never need to disable Advanced SPU Logic or use Dual SPU Sync/Async except for testing purposes. There are no performance advantages for changing these two options on Mac.)<br />
* Audio samples can be post-processed with interpolation, resulting in a smoother sound than a hardware NDS. Linear and Cosine interpolation algorithms are included. You may also turn off interpolation to play back the samples exactly as a hardware NDS would receive them.<br />
<br />
==== Microphone ====<br />
* All microphone features are emulated.<br />
* DeSmuME supports either receiving audio samples from a hardware audio input device, or generating audio samples in software.<br />
* Hardware audio input is only supported on Mac. Windows and Linux are currently broken and unsupported.<br />
* DeSmuME includes the following software sample generators:<br />
** Internal Noise Samples<br />
** White Noise ''(Windows and Mac only)''<br />
** Sine Wave ''(Mac only)''<br />
** Audio File ''(Windows -- only WAV files in 16000Hz 8-bit mono LPCM format are supported / Mac -- any audio file compatible with [https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/CoreAudioOverview/SupportedAudioFormatsMacOSX/SupportedAudioFormatsMacOSX.html CoreAudio] is supported)''<br />
<br />
==== CPU ====<br />
* CPU emulation is supported through either the Interpreter engine or the Dynamic Recompiler engine.<br />
* The Interpreter engine is available on all platforms. However, Dynamic Recompiler only works on x86 or x64 systems.<br />
* We are unaware of any huge problems with the Interpreter engine, but there are still some issues.<br />
* Interpreter has better compatibility than Dynamic Recompiler. Some games that fail when using Dynamic Recompiler will work fine with Interpreter. The tradeoff here is that Interpreter has much lower performance than Dynamic Recompiler.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== Memory and System Bus ====<br />
* We are unaware of any huge problems with the MMU and DMA systems, but there are still some issues.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== BIOS and Firmware ====<br />
* DeSmuME uses its own internal BIOS and firmware, but only for the purposes of loading and executing ROMs. DeSmuME's internal BIOS and firmware do not emulate all of the original NDS features.<br />
* DeSmuME supports configuring all of the NDS profile information through the internal BIOS and firmware alone. This information includes:<br />
** Nickname ''(Windows and Mac only)''<br />
** Message ''(Windows and Mac only)''<br />
** Favorite Color ''(Windows and Mac only)''<br />
** Birthday ''(Windows and Mac only)''<br />
** Language<br />
* DeSmuME can also load external BIOS and firmware images from a hardware NDS, gaining additional features by doing so.<br />
* If DeSmuME has all the necessary external BIOS and firmware images loaded, then it is possible to perform a full NDS boot. It then becomes possible to configure the NDS profile information within the emulated NDS firmware interface.<br />
* Loading of external BIOS images is supported on Windows, Mac, and Linux.<br />
* Loading of an external firmware image is only supported on Windows and Mac. Linux is not supported.<br />
<br />
==== NDS Slot (SLOT-1) ====<br />
* The following NDS slot devices are supported:<br />
** Standard Retail MC + ROM<br />
** Retail w/ NAND Flash<br />
** R4<br />
* DeSmuME can display the header information of loaded ROMs. ''(Windows and Mac only)''<br />
* We are unaware of any huge problems with loading NDS ROMs. However, there are some issues with loading NDS ROMs on big-endian systems.<br />
* There are some issues with DSi ROMs, as they are not fully supported yet.<br />
<br />
==== GBA Slot (SLOT-2) ====<br />
* The following GBA slot devices are supported:<br />
** Compact Flash Card<br />
** Rumble Pak ''(Windows and Mac only)''<br />
** GBA Cartridge<br />
** Guitar Grip ''(Windows and Mac only)''<br />
** Memory Expansion Pak ''(Windows and Mac only)''<br />
** EasyPiano ''(Windows and Mac only)''<br />
** Taito Paddle ''(Windows and Mac only)''<br />
** PassME ''(Windows and Mac only)''<br />
<br />
==== Wi-Fi ====<br />
* Wi-Fi emulation is currently in an experimental stage, and many Wi-Fi features are either broken or non-working.<br />
* Here is what we currently know about Wi-Fi so far: [[Luigi's notes about WiFi|Wi-Fi Notes]]<br />
<br />
==== Dynamically Linked Driver Interface (DLDI) ====<br />
The Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
* LFN is currently unsupported.<br />
<br />
<br />
=== Does the GDB stub still work? ===<br />
GDB remote debugging does work to a certain degree. However, DeSmuME does not implement the entire GDB stub protocol, so there are still some bugs. Nevertheless, GDB remote debugging works well enough to do basic operations, like set breakpoints, step through code, watch memory locations for read/write operations, and other basic operations.<br />
<br />
=== How do I enable the GDB stub? ===<br />
* Windows: You must make a custom build using #define GDB_STUB.<br />
# Copy the "userconfig.h" file from "src\windows\defaultconfig" to "src\windows\userconfig".<br />
# In the "src\windows\userconfig\userconfig.h" file, add "#define GDB_STUB".<br />
# Build DeSmuME.<br />
# After DeSmuME is finished building, launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
* Mac: You must make a custom build using the "DeSmuME (OS X App; dev+)" build scheme, which is only available using the "Xcode (Latest)" project file. You must compile the dev+ build using Xcode 4 or later. When you do, a new menu option will be available: Tools > Show GDB Stub Control. In the GDB Stub Control panel, click Start to begin listening for the GDB debugging client.<br />
* Linux: When you generate your configure script, it must use the flag "--enable-gdb-stub". Build DeSmuME, then launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an online communications system.<br />
<br />
The DeSmuME team uses IRC to discuss DeSmuME's development. You will need an IRC client in order to participate is these discussions.<br />
<br />
==== Recommended IRC Clients ====<br />
* Windows: [http://www.mirc.com mIRC], [http://www.xchat.com XChat]<br />
* Mac: [http://colloquy.info Colloquy], [https://www.adium.im Adium]<br />
* Linux: [http://www.xchat.com XChat]<br />
* Firefox add-on: [https://addons.mozilla.org/en-us/firefox/addon/chatzilla/ ChatZilla]<br />
* Others: [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Wikipedia]<br />
<br />
==== DeSmuME IRC Channel ====<br />
To connect to the DeSmuME IRC channel, you will need to enter the following information in your IRC client:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
As far as language is concerned, most of the people on the channel speak English.<br />
<br />
=== Where is the manual? ===<br />
Over [http://wiki.desmume.org/index.php?title=Manual here]. It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
<br />
== SVN and Compiling ==<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ SVN] is a tool that is used by multiple developers to work on the same codebase without conflicts. See [http://en.wikipedia.org/wiki/Subversion_(software) Wikipedia] for more information.<br />
<br />
=== Where do I get SVN builds? ===<br />
We officially use the [http://buildbot.orphis.net/desmume/ automated SVN builds] provided by DeSmuME user, Orphis.<br />
<br />
Other third-parties may offer SVN builds, such as [http://www.emucr.com EmuCR]. Please note that any third-party build is both unofficial and unsupported.<br />
<br />
=== How do I get the latest SVN code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* Windows: At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
** Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
** Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* Mac: Any of the compilers built into Xcode 3.1.4 all the way up to the latest Xcode is supported. You may also use a non-Xcode toolchain, such as MacPorts GCC, but this is currently unsupported.<br />
* Linux: Any recent version of GCC and toolchain should work. However, we do not recommend GCC 4.9, since there are bugs with this GCC version that interfere with DeSmuME.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
(''Windows only'') For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the Visual C++ Express 2008 installer and I can't find it. ===<br />
Download link: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Patches may be submitted to our [https://sourceforge.net/p/desmume/patches/ patches tracker] on SourceForge. Any patches submitted will be subject to a code review by our developer team, where we will then determine if the patch should be included in the codebase or not.<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== I'm not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile SVN builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on IRC. Also, adding to or perfecting the documentation in the Wiki is useful. You could also watch for and help answer questions placed on the [http://forums.desmume.org DeSmuME forum].<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://problemkaputt.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a Compact Flash image<br />
<br />
<br />
== Mac Users ==<br />
<br />
=== I just downloaded DeSmuME, but I can't launch it because "it is from an unidentified developer." What gives? ===<br />
Apple introduced a security policy called [https://support.apple.com/en-us/HT202491 Gatekeeper] on OS X v10.8 Mountain Lion to help protect users from malware. However, since DeSmuME is a free open-source app, we don't want to invest money into properly code signing the app for the sake of proving that we are legitimate app and not just another piece of malware. If you are concerned about the legitimacy of DeSmuME.app, then always make sure to download it from our [http://desmume.org/download official Downloads page].<br />
<br />
If OS X prevents you from launching DeSmuME.app because "it is from an unidentified developer", do this:<br />
* In the Finder, right-click (or Control-click) DeSmuME.app, then in the contextual menu, choose Open. A warning box will appear, saying that DeSmuME.app "is from an unidentified developer." In the warning box, click Open to proceed with launching DeSmuME.app.<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories.<br />
<br />
Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
As of this release, all of the DeSmuME features that exist in the Windows port also exist in the Mac port, except for the following:<br />
* The HUD<br />
* Custom path settings<br />
* AVI / WAV recording<br />
* The various tools listed in the Tools menu<br />
* RAM Watch / RAM Search<br />
* Lua scripting<br />
<br />
While we are actively working to attain full feature parity between the Mac and Windows ports, this will still take some time to achieve.<br />
<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogermanhttps://wiki.desmume.org/index.php?title=FaqFaq2015-03-31T08:54:03Z<p>Rogerman: /* What is the turbo button / speed up button / magic fast-forward button? */</p>
<hr />
<div>'''DeSmuME FAQ 0.9.11'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
* FAQ 0.9.9, [[Faq_099]]<br />
* FAQ 0.9.10, [[Faq_0_9_10]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped?<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_1.png]<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! ===<br />
* Make sure you are using the latest version of the emulator.<br />
* Delete your ini file and re-run the emulator.<br />
* Quit using patched ROMs. Remove the AP (Anti-Piracy) patch from the ROM.<br />
* Quit using cheats.<br />
* Use/dump external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games.</strong> Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Read the [[KnowledgeBase]]<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3D renderers. Quit using frameskip.<br />
* Do not use patched ROMs. Never use patched ROMs.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
* Stop using savestates. Use in-game saves.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot your host machine.<br />
* Go to our [http://desmume.org/download official Downloads page] and make sure you are using the latest version, which is currently v0.9.11. Any older versions are unsupported.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary.<br />
* Enable "Advanced Bus-Level Timing". Doing this will slow down emulation, but fix some games.<br />
* Disable "Dynamic Recompiler". Doing this will greatly slow down emulation, but will fix many games.<br />
* Use external BIOS images. Try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your DeSmuME configuration file. It may have options that are breaking your DeSmuME.<br />
** Windows: Your configuration file is located in the same directory as the DeSmuME program. Delete the file named "desmume.ini".<br />
** Mac: Your configuration file is located at "~/Library/Preferences". Delete the file named "org.desmume.DeSmuME.plist". Alternatively, you may run "Delete DeSmuME Preferences.app", which is included with your installation package, which will perform this operation for you.<br />
** Linux: Your configuration file is located at "~/.config/desmume". Delete the file named "config".<br />
* Turn off your virus scanner.<br />
<br />
<br />
If a game really doesn't work, no matter what you try, you can submit a bug report for the game to [https://sourceforge.net/p/desmume/bugs/ our bug tracker] on SourceForge.<br />
<br />
You might also find ways to patch the games to work better on emulators by searching on the Internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using DeSmuME! ===<br />
This is not DeSmuME's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers. If you are running DeSmuME on a laptop, then a laptop cooler might help.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
DeSmuME is a very CPU demanding app. While many users will see DeSmuME as a toy (and use it as such), it is actually a very sophisticated piece of software with lots of features. Also, DeSmuME focuses more on compatibility and features than on speed. Our philosophy is this: You can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility or gain new features. We take care of our side of things, so you should take care of yours.<br />
<br />
That being said, DeSmuME offers many options for you to find the best balance of compatibility, features, and performance. And remember that it is a balance -- gaining extra performance will always mean that you need to give up some features or reduce compatibility somewhere. How you make these tradeoffs is up to you. Listed below are things you can do to improve DeSmuME's performance.<br />
<br />
<br />
First of all, check that the host hardware is configured for best performance:<br />
* Ensure that you meet the [[#Faq#What are the minimum hardware requirements for DeSmuME?|minimum requirements]] for running DeSmuME.<br />
* DeSmuME is mostly CPU intensive and less GPU intensive. You'll want the fastest CPU possible (not necessarily the one with the most cores) for best performance.<br />
* The vast majority of older netbooks (and even newer ones) will have poor performance with any demanding software, including DeSmuME. Don't expect great performance out of these machines.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
<br />
<br />
Here are the biggest factors for improving emulation performance. They are listed from most performance impact to least performance impact:<br />
* Use a DeSmuME binary that works best for your machine. See [[#There are several different DeSmuME executables available. Which EXE do I use?]] for more details.<br />
* Use official DeSmuME releases from our [http://desmume.org/download Downloads page]. Our release versions always use the fastest and most aggressive program optimizations possible for maximum performance. Any unofficial, prerelease, or SVN builds are not guaranteed to have these same optimizations, resulting in lower performance.<br />
* Use frame skip. Even frame skipping by 1 will make many games become playable. However, note that some 3D games may not work well with frame skip, such as Golden Sun: Dark Dawn. If screens seem stuck or screen flickering becomes unacceptable, pick a different frame skip value.<br />
* ''(Windows only)'' Do not run the NDS tools (the ones from the Tools menu) unless absolutely necessary. If you must, try and keep the update interval as low as possible.<br />
* Disable all video filters, and set your display window's pixel scaler to None.<br />
* Use the Dynamic Recompiler (JIT) CPU emulation engine. ''(Doing this may break some games.)''<br />
* Disable Advanced Bus-Level Timing. ''(Doing this may break some games.)''<br />
* Try switching the 3D renderer between OpenGL and SoftRasterizer. One 3D renderer may work faster than the other, depending on the situation.<br />
* ''(Mac only)'' If you are using a pixel scaler and your machine has an older GPU or an integrated GPU, it might help to run the pixel scaler on the CPU by disabling "Run filters on GPU if possible". However, if you are using a newer GPU, then enabling "Run filters on GPU if possible" will remove any performance penalties related to using any video filters.<br />
* ''(Mac only)'' Do not enable any source filters if you are running a pixel scaler on the CPU. This combination results in a substantial performance hit.<br />
* ''(Linux only)'' Do not scale the display window beyond 1x, as this can result in a substantial performance hit.<br />
* Disable Advanced SPU Logic, and use the Dual SPU Sync/Async synchronization method.<br />
<br />
<br />
There are some other things that may theoretically improve performance, but they are dubious at best. They are only included here for the sake of completeness:<br />
* If you are using SoftRasterizer, disable edge marking and fog. Note that games that don't use these features will be unaffected.<br />
* Disable unneeded GPU layers.<br />
* Disable sound emulation altogether.<br />
* Don't use external BIOS images. But if you must, try enabling Patch DelayLoop SWI.<br />
<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
You are probably wanting to increase the execution speed. There are two ways of doing this:<br />
* Raise the execution speed limit. This will run the emulation at the specified execution speed, provided that the host hardware is fast enough. The execution speed limit will always be expressed as a speed multiplier, where 1x is 60 FPS. ''(Windows and Mac only)''<br />
* Disable the execution speed limiter. This will run the emulation as fast as the host hardware will allow.<br />
<br />
To change your execution speed options:<br />
* Windows: By default, the '-' and '=' keyboard keys will adjust the speed multiplier between 0.0625x-4x. By default, the Tab keyboard key will disable the speed limiter while held down. You can change these hotkeys in Config > Hotkey Config. In the Main section, the commands are Fast Forward, Increase Speed, and Decrease Speed.<br />
* Mac: By default, the '=' keyboard key will speed up execution by 2x while held down. You can assign additional hotkeys for Set Speed, and then click Settings to choose any speed multiplier from 0x-10x. There is no default hotkey for disabling the speed limiter, but you can assign one to the Enable/Disable Speed Limiter command. Alternatively, you can choose Emulation > Show Execution Control and adjust the execution speed options within the Execution Speed Properties section.<br />
* Linux ''(GTK only)'': By default, the letter 'O' keyboard key will disable the execution speed limiter while held down. You can change this hotkey in Config > Edit Controls. The command is called Boost.<br />
<br />
Note that increasing the execution speed does not mean that DeSmuME is doing less emulation. In fact, DeSmuME must emulate every single frame regardless of execution speed, even if DeSmuME doesn't necessarily show it (most likely, DeSmuME will begin dropping video and audio frames at high execution speeds). This is normal behavior. To achieve higher execution speeds, you will need to configure DeSmuME to operate at the highest performance possible. Read [[#DeSmuME_runs_too_slow.21]] for more information on how to improve emulation performance.<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in OSX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmuME window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. DeSmuME tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows: Windows XP SP2 or later<br />
* Mac: OS X v10.5.8 Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows: Windows Vista SP2 or later<br />
* Mac: OS X v10.6.8 Snow Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
* Windows: For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
** If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
** If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
** If you want to use the developer features, use the dev build. It includes extra debugging code and logging.<br />
* Mac: DeSmuME.app contains binaries for PPC, x86, x64. OS X will automatically choose the best binary to run on your hardware. You can override the automatic selection in the Finder by selecting DeSmuME.app and choosing File > Get Info. Then in the Get Info panel, you can select which binary to run.<br />
** To run as 32-bit PPC: Enable "Open using Rosetta". ''(Note that this option is only available on OS X v10.5 Leopard and v10.6 Snow Leopard. Rosetta is not available on later OS X versions.)''<br />
** To run as 32-bit x86: Enable "Open in 32-bit mode".<br />
** To run as 64-bit x64: Disable both "Open in 32-bit mode" and "Open using Rosetta" options.<br />
* Linux: Linux users are expected to build DeSmuME from source and know the best configure settings for their hardware. See [[Installing DeSmuME from source on Linux]] for more information.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.9GHz CPU will run DeSmuME much faster than a 12-core 1.6GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
(''Windows only'') The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
* Windows: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > One LCD, and then either View > LCDs Layout > Top First (Default) or View > LCDs Layout > Bottom First.<br />
* Mac: First, click the display window that you want to change. To change to a horizontal layout, choose View > Display Orientation > Horizontal. To change the display mode, choose View > Display Mode > Main for the main screen, or choose View > Display Mode > Touch for the touch screen.<br />
* Linux ''(GTK and Glade only)'':<br />
** GTK: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > Single Screen, and then choose View > LCDs Layout > Swap Screens to toggle between each screen.<br />
** Glade: To change to a horizontal layout, choose Config > Right Screen. However, changing the display mode on Glade is unsupported.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
Yes, you can display the DS screens in full screen mode.<br />
<br />
* Windows: Click the DeSmuME window and press Alt-Enter. <br />
* Mac: Click the display window that you want to make full screen, then choose View > Enter Full Screen.<br />
* Linux ''(GTK only)'': Choose View > Window Size > Scale to Window, then choose View > Window Size > Fullscreen.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
Yes, you can display each DS screen in separate windows. ''(This feature is only available for Mac.)''<br />
<br />
* Mac: Choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
DeSmuME allows you to apply pixel scalers, adjust the size of the video output, simulate the separation between the main and touch screens, and run filters on the video output. You can also rotate the NDS displays for games that require you to rotate the hardware NDS in a certain way.<br />
<br />
* Windows: <br />
** Pixel Upscale: To change the pixel scaler, choose View > Magnification Filters, and then select one of the menu options.<br />
** Output Filter: Choose Config > Display Method, then choose either DirectDraw HW, DirectDraw SW, or OpenGL. Your output filter will depend on which option you chose.<br />
*** DirectDraw HW: Depending on OS and GPU driver, your output filter may be Nearest Neighbor or Bilinear. You have no control over which filter is used, as it is determined for you by the OS/driver.<br />
*** DirectDraw SW: Your output filter will always be Nearest Neighbor.<br />
*** OpenGL: If Config > Display Method > Filter is checked, then your output filter will be Bilinear. Otherwise, your output filter will be Nearest Neighbor.<br />
** Display Resize: To set the displays to a specific size, choose View > Window Size, and then choose one of the menu options. The video displays will grow and shrink with the size of its window. The minimum display size is 1x times the pixel scaling. Keep in mind that some pixel scalers, such as 5xBRZ, can cause a vertical layout display to grow up to 1280x1920 pixels in size. In this case, there would be nothing you can do to reduce the display size below 5x. If the window doesn't fit in your monitor while using a given pixel scaler, then you must choose a pixel scaler with a smaller scaling value.<br />
** Screen Separation: Choose View > Screen Gap, and then select one of the menu options.<br />
** Rotation: Choose View > Rotation, and then select one of the menu options.<br />
* Mac:<br />
** Pixel Upscale: Select the window you want to change, then choose View > Video Pixel Scaler, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Pixel Scalers from the Video Settings panel.<br />
** Output Filter: Select the window you want to change, then choose View > Video Output Filter, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Output Filters from the Video Settings panel.<br />
** Display Resize: Select the window you want to change. To set the displays to a specific size, choose View > Display Size, and then choose one of the menu options. Note that on Mac, the maximum window size will always be dependent on your monitor's current resolution. The video display will grow and shrink with the size of the window. If the View > Keep Minimum Display Size at 1x option is enabled, then the minimum display size is 1x. Otherwise, the minimum display size is 0.25x.<br />
** Screen Separation: Select the window you want to change, then choose View > Display Separation, and then choose one of the menu options. Note that the percentage number is relative to the true distance between the NDS displays, where a separation of 100% is approximately 87.65px. If you choose Custom, then you may freely separate the displays to any percentage value from 0%-200%.<br />
** Rotation: Select the window you want to change, then choose View > Display Rotation, and then choose one of the menu options. If you choose Custom, then you may free rotate the display to any rotation.<br />
* Linux:<br />
** Pixel Upscale ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Video Filter, and then select one of the menu options.<br />
*** Qt: Choose View > Video Filter, and then select one of the menu options.<br />
** Output Filter ''(GTK only)'': With the exception of GTK, this feature is unsupported on all frontends. The output filter will always be Nearest Neighbor on unsupported frontends.<br />
*** GTK: Choose View > Secondary Video Filter, and then select one of the menu options.<br />
** Display Resize ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Window Size, and then select on of the menu options to set the displays to a specific size. If you choose Scale to Window, then the displays will grow and shrink with the window size. The minimum display size is 1x.<br />
*** Qt: The displays will grow and shrink with the window size. However, there is no option to set the displays to a specific size. The minimum display size is 1x.<br />
** Screen Separation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Screen Gap. Note that this is only a toggle option which only supports a separation of 0px or 90px.<br />
*** Glade: Choose Config > True Gap to separate the screens by 90px, or choose Config > No Gap to separate the screens by 0px. If both options are not enabled, then the default separation is 5px.<br />
** Rotation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Rotation, and then select one of the menu options.<br />
*** Glade: For the normal display rotation, choose Config > Rotate Screen 0. To rotate the displays 90 degrees, choose Config > Rotate Screen 90. To rotate the displays 180 degrees, choose Config > Rotate Screen 180. To rotate the displays 270 degrees, choose Config > Rotate Screen 270.<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported for all platforms. See [[#Faq#Microphone|NDS Microphone Support]] for more information.<br />
<br />
* Windows<br />
** Hardware Audio Input Device: In Windows, first set up the default audio recording device in your Windows Control Panel. Then in DeSmuME, choose Config > Microphone Settings, and then choose "Use connected physical microphone".<br />
** Software Generated Samples: Assign the Microphone hotkey using Config > Hotkey Config, under the Main section. Then choose Config > Microphone Settings, and then choose one of the three options that is not "Use connected physical microphone".<br />
* Mac<br />
** Hardware Audio Input Device: In OS X, first set up the default audio input device in Apple > System Preferences. DeSmuME will then automatically switch to using the default audio input device. Choose Emulation > Show Microphone Settings to adjust gain or mute the microphone.<br />
** Software Generated Samples: Assign Microphone hotkeys in your DeSmuME Input Preferences. Every hotkey assigned to the Microphone command will have a corresponding Settings button. Click Settings to change which sample generator the hotkey activates. You can assign multiple generators at the same time by using multiple hotkeys.<br />
* Linux<br />
** Hardware Audio Input Device: You must first compile your own Linux build with libasound. Next, in Linux, you must set up you default audio input device using whatever configuration utility is available in your distro. Then when you launch DeSmuME, DeSmuME will read your audio input device.<br />
** Software Generated Samples: This feature is unsupported on Linux.<br />
<br />
Additional Notes:<br />
<br />
* If you are using software generated samples, you will have to experiment with the microphone hotkey timing. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
* Hardware audio input device support is currently broken for Windows and Linux, and so many instances where the NDS microphone is required, such as giving voice commands to your Nintendog, will fail. Windows can sometimes workaround this if you use software generated samples from an audio file, but be aware that you can only assign one audio file at a time. Unfortunately, Linux has no workarounds.<br />
* If you want to play games that rely heavily on real-time voice recognition, such as the Nintendogs series of games, then the Mac version is your only option right now.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
[[List_of_Nintendo_DS_games_with_GBA_connectivity]]<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked? ===<br />
No. A real NDS uses Wi-Fi for multiplayer, and that isn't emulated in DeSmuME yet. For more information, see [[Faq#Wi-Fi|Wi-Fi Hardware Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
[[#Faq#Wi-Fi|Read more information about the current state of DeSmuME's Wi-Fi support.]] Right now, it's an experimental feature, which means it is unsupported.<br />
<br />
If you are an end-user, then we strongly discourage the use of Wi-Fi. However, as an end-user, if you really want to use Wi-Fi that badly, then you are on your own. In that case, any posts on our forums about Wi-Fi being used by end-users for end-user applications (such as wanting to trade Pokemon) will be ignored. Also, any submissions to any of our SourceForge trackers under the same conditions will be immediately closed without further consideration. <strong>When we say that Wi-Fi is unsupported, we mean it.</strong><br />
<br />
With that said, any developers interested in working on Wi-Fi support are welcome to join us at [[#Faq#DeSmuME_IRC_Channel|our IRC channel]]. We would appreciate the assistance!<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is currently not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future? ===<br />
Most likely, DeSmuME will not support the emulation of the Nintendo 3DS or Nintendo 2DS in the future. The hardware of both a 3DS and a 2DS are very different from an NDS, so emulating a 3DS/2DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
You can report bugs using our [https://sourceforge.net/p/desmume/bugs/ official bug tracker] on SourceForge. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
<br />
==== User Controls ====<br />
* The D-pad, buttons, and touch screen are fully emulated.<br />
* The ability to toggle the folded/unfolded state of the NDS is emulated through the Lid control.<br />
* Adjustable stylus pressure is only supported on Windows. However, the vast majority of games don't use this feature.<br />
* Emulation of stylus jitter is only supported on Windows. However, the vast majority of games don't use this feature.<br />
<br />
==== 2D Graphics System ====<br />
* All known 2D graphics features are supported, with the exception of mosaics.<br />
* Mosaics work somewhat, but are imperfect. Also, mosaics may not show up properly in some games.<br />
* There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
* Big-endian systems may not render the correct colors in some areas.<br />
<br />
==== 3D Rendering ====<br />
DeSmuME includes two 3D renderers, our own custom software renderer we call SoftRasterizer, and an OpenGL-based renderer. Each renderer has its own strengths and weaknesses, so use the best renderer for your situation. For example, if certain buttons, labels, or menus rendered on the 3D screen are obscured (for example, a button with no label on it), then things might appear correctly if you use SoftRasterizer. If that doesn't work, then things might appear correctly with OpenGL. Both renderers are provided for the purposes of working around specific 3D rendering cases.<br />
<br />
Also, keep in mind that SoftRasterizer uses the CPU for rendering, while OpenGL uses the GPU for rendering. Therefore, you may experience a difference in performance with each 3D renderer, depending on the host machine's hardware and depending on how you've configured DeSmuME.<br />
<br />
===== SoftRasterizer Renderer =====<br />
* All 3D features are emulated, except for wireframes and antialiasing.<br />
* There are issues with line rendering. However, it is possible to work around most of these issues by using the Line Hack.<br />
* There are issues with inaccurate texture rendering. However, it is possible to work around some of these issues by using the Fragment Sampling Hack. ''(Windows and Mac only)''<br />
* There are issues with depth rendering and Z-fighting. However, it is possible to work around some of these issues by adjusting the depth comparison threshold. ''(Windows and Mac only)''<br />
* There are some issues with shadow polygons. However, SoftRasterizer works better than OpenGL at rendering shadow polygons.<br />
<br />
===== OpenGL Renderer =====<br />
* All 3D features are emulated, except for fog and edge marking.<br />
* There are issues with depth rendering and Z-fighting. However, there is no workaround for this issue like there is with SoftRasterizer.<br />
* There are some major issues with shadow polygons. If you find the shadow polygon bugs unacceptable, then you will have to switch to SoftRasterizer.<br />
<br />
==== Sound ====<br />
* All sound features are emulated.<br />
* For complete SPU emulation, two requirements must be met:<br />
** Advanced SPU Logic must be enabled.<br />
** One of the SPU sound synchronization methods must be used (N, Z, or P).<br />
* Disabling Advanced SPU Logic and using Dual SPU Sync/Async will result in the loss of some sound features, but will also improve emulation performance on Windows and Linux. (Audio processing is multithreaded on Mac, so Mac users should never need to disable Advanced SPU Logic or use Dual SPU Sync/Async except for testing purposes. There are no performance advantages for changing these two options on Mac.)<br />
* Audio samples can be post-processed with interpolation, resulting in a smoother sound than a hardware NDS. Linear and Cosine interpolation algorithms are included. You may also turn off interpolation to play back the samples exactly as a hardware NDS would receive them.<br />
<br />
==== Microphone ====<br />
* All microphone features are emulated.<br />
* DeSmuME supports either receiving audio samples from a hardware audio input device, or generating audio samples in software.<br />
* Hardware audio input is only supported on Mac. Windows and Linux are currently broken and unsupported.<br />
* DeSmuME includes the following software sample generators:<br />
** Internal Noise Samples<br />
** White Noise ''(Windows and Mac only)''<br />
** Sine Wave ''(Mac only)''<br />
** Audio File ''(Windows -- only WAV files in 16000Hz 8-bit mono LPCM format are supported / Mac -- any audio file compatible with [https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/CoreAudioOverview/SupportedAudioFormatsMacOSX/SupportedAudioFormatsMacOSX.html CoreAudio] is supported)''<br />
<br />
==== CPU ====<br />
* CPU emulation is supported through either the Interpreter engine or the Dynamic Recompiler engine.<br />
* The Interpreter engine is available on all platforms. However, Dynamic Recompiler only works on x86 or x64 systems.<br />
* We are unaware of any huge problems with the Interpreter engine, but there are still some issues.<br />
* Interpreter has better compatibility than Dynamic Recompiler. Some games that fail when using Dynamic Recompiler will work fine with Interpreter. The tradeoff here is that Interpreter has much lower performance than Dynamic Recompiler.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== Memory and System Bus ====<br />
* We are unaware of any huge problems with the MMU and DMA systems, but there are still some issues.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== BIOS and Firmware ====<br />
* DeSmuME uses its own internal BIOS and firmware, but only for the purposes of loading and executing ROMs. DeSmuME's internal BIOS and firmware do not emulate all of the original NDS features.<br />
* DeSmuME supports configuring all of the NDS profile information through the internal BIOS and firmware alone. This information includes:<br />
** Nickname ''(Windows and Mac only)''<br />
** Message ''(Windows and Mac only)''<br />
** Favorite Color ''(Windows and Mac only)''<br />
** Birthday ''(Windows and Mac only)''<br />
** Language<br />
* DeSmuME can also load external BIOS and firmware images from a hardware NDS, gaining additional features by doing so.<br />
* If DeSmuME has all the necessary external BIOS and firmware images loaded, then it is possible to perform a full NDS boot. It then becomes possible to configure the NDS profile information within the emulated NDS firmware interface.<br />
* Loading of external BIOS images is supported on Windows, Mac, and Linux.<br />
* Loading of an external firmware image is only supported on Windows and Mac. Linux is not supported.<br />
<br />
==== NDS Slot (SLOT-1) ====<br />
* The following NDS slot devices are supported:<br />
** Standard Retail MC + ROM<br />
** Retail w/ NAND Flash<br />
** R4<br />
* DeSmuME can display the header information of loaded ROMs. ''(Windows and Mac only)''<br />
* We are unaware of any huge problems with loading NDS ROMs. However, there are some issues with loading NDS ROMs on big-endian systems.<br />
* There are some issues with DSi ROMs, as they are not fully supported yet.<br />
<br />
==== GBA Slot (SLOT-2) ====<br />
* The following GBA slot devices are supported:<br />
** Compact Flash Card<br />
** Rumble Pak ''(Windows and Mac only)''<br />
** GBA Cartridge<br />
** Guitar Grip ''(Windows and Mac only)''<br />
** Memory Expansion Pak ''(Windows and Mac only)''<br />
** EasyPiano ''(Windows and Mac only)''<br />
** Taito Paddle ''(Windows and Mac only)''<br />
** PassME ''(Windows and Mac only)''<br />
<br />
==== Wi-Fi ====<br />
* Wi-Fi emulation is currently in an experimental stage, and many Wi-Fi features are either broken or non-working.<br />
* Here is what we currently know about Wi-Fi so far: [[Luigi's notes about WiFi|Wi-Fi Notes]]<br />
<br />
==== Dynamically Linked Driver Interface (DLDI) ====<br />
The Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
* LFN is currently unsupported.<br />
<br />
<br />
=== Does the GDB stub still work? ===<br />
GDB remote debugging does work to a certain degree. However, DeSmuME does not implement the entire GDB stub protocol, so there are still some bugs. Nevertheless, GDB remote debugging works well enough to do basic operations, like set breakpoints, step through code, watch memory locations for read/write operations, and other basic operations.<br />
<br />
=== How do I enable the GDB stub? ===<br />
* Windows: You must make a custom build using #define GDB_STUB.<br />
# Copy the "userconfig.h" file from "src\windows\defaultconfig" to "src\windows\userconfig".<br />
# In the "src\windows\userconfig\userconfig.h" file, add "#define GDB_STUB".<br />
# Build DeSmuME.<br />
# After DeSmuME is finished building, launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
* Mac: You must make a custom build using the "DeSmuME (OS X App; dev+)" build scheme, which is only available using the "Xcode (Latest)" project file. You must compile the dev+ build using Xcode 4 or later. When you do, a new menu option will be available: Tools > Show GDB Stub Control. In the GDB Stub Control panel, click Start to begin listening for the GDB debugging client.<br />
* Linux: When you generate your configure script, it must use the flag "--enable-gdb-stub". Build DeSmuME, then launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an online communications system.<br />
<br />
The DeSmuME team uses IRC to discuss DeSmuME's development. You will need an IRC client in order to participate is these discussions.<br />
<br />
==== Recommended IRC Clients ====<br />
* Windows: [http://www.mirc.com mIRC], [http://www.xchat.com XChat]<br />
* Mac: [http://colloquy.info Colloquy], [https://www.adium.im Adium]<br />
* Linux: [http://www.xchat.com XChat]<br />
* Firefox add-on: [https://addons.mozilla.org/en-us/firefox/addon/chatzilla/ ChatZilla]<br />
* Others: [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Wikipedia]<br />
<br />
==== DeSmuME IRC Channel ====<br />
To connect to the DeSmuME IRC channel, you will need to enter the following information in your IRC client:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
As far as language is concerned, most of the people on the channel speak English.<br />
<br />
=== Where is the manual? ===<br />
Over [http://wiki.desmume.org/index.php?title=Manual here]. It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
<br />
== SVN and Compiling ==<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ SVN] is a tool that is used by multiple developers to work on the same codebase without conflicts. See [http://en.wikipedia.org/wiki/Subversion_(software) Wikipedia] for more information.<br />
<br />
=== Where do I get SVN builds? ===<br />
We officially use the [http://buildbot.orphis.net/desmume/ automated SVN builds] provided by DeSmuME user, Orphis.<br />
<br />
Other third-parties may offer SVN builds, such as [http://www.emucr.com EmuCR]. Please note that any third-party build is both unofficial and unsupported.<br />
<br />
=== How do I get the latest SVN code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* Windows: At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
** Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
** Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* Mac: Any of the compilers built into Xcode 3.1.4 all the way up to the latest Xcode is supported. You may also use a non-Xcode toolchain, such as MacPorts GCC, but this is currently unsupported.<br />
* Linux: Any recent version of GCC and toolchain should work. However, we do not recommend GCC 4.9, since there are bugs with this GCC version that interfere with DeSmuME.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
(''Windows only'') For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the Visual C++ Express 2008 installer and I can't find it. ===<br />
Download link: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Patches may be submitted to our [https://sourceforge.net/p/desmume/patches/ patches tracker] on SourceForge. Any patches submitted will be subject to a code review by our developer team, where we will then determine if the patch should be included in the codebase or not.<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== I'm not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile SVN builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on IRC. Also, adding to or perfecting the documentation in the Wiki is useful. You could also watch for and help answer questions placed on the [http://forums.desmume.org DeSmuME forum].<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://problemkaputt.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a Compact Flash image<br />
<br />
<br />
== Mac Users ==<br />
<br />
=== I just downloaded DeSmuME, but I can't launch it because "it is from an unidentified developer." What gives? ===<br />
Apple introduced a security policy called [https://support.apple.com/en-us/HT202491 Gatekeeper] on OS X v10.8 Mountain Lion to help protect users from malware. However, since DeSmuME is a free open-source app, we don't want to invest money into properly code signing the app for the sake of proving that we are legitimate app and not just another piece of malware. If you are concerned about the legitimacy of DeSmuME.app, then always make sure to download it from our [http://desmume.org/download official Downloads page].<br />
<br />
If OS X prevents you from launching DeSmuME.app because "it is from an unidentified developer", do this:<br />
* In the Finder, right-click (or Control-click) DeSmuME.app, then in the contextual menu, choose Open. A warning box will appear, saying that DeSmuME.app "is from an unidentified developer." In the warning box, click Open to proceed with launching DeSmuME.app.<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories.<br />
<br />
Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
As of this release, all of the DeSmuME features that exist in the Windows port also exist in the Mac port, except for the following:<br />
* The HUD<br />
* Custom path settings<br />
* AVI / WAV recording<br />
* The various tools listed in the Tools menu<br />
* RAM Watch / RAM Search<br />
* Lua scripting<br />
<br />
While we are actively working to attain full feature parity between the Mac and Windows ports, this will still take some time to achieve.<br />
<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogermanhttps://wiki.desmume.org/index.php?title=FaqFaq2015-03-31T08:50:57Z<p>Rogerman: </p>
<hr />
<div>'''DeSmuME FAQ 0.9.11'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
* FAQ 0.9.9, [[Faq_099]]<br />
* FAQ 0.9.10, [[Faq_0_9_10]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped?<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_1.png]<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! ===<br />
* Make sure you are using the latest version of the emulator.<br />
* Delete your ini file and re-run the emulator.<br />
* Quit using patched ROMs. Remove the AP (Anti-Piracy) patch from the ROM.<br />
* Quit using cheats.<br />
* Use/dump external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games.</strong> Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Read the [[KnowledgeBase]]<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3D renderers. Quit using frameskip.<br />
* Do not use patched ROMs. Never use patched ROMs.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
* Stop using savestates. Use in-game saves.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot your host machine.<br />
* Go to our [http://desmume.org/download official Downloads page] and make sure you are using the latest version, which is currently v0.9.11. Any older versions are unsupported.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary.<br />
* Enable "Advanced Bus-Level Timing". Doing this will slow down emulation, but fix some games.<br />
* Disable "Dynamic Recompiler". Doing this will greatly slow down emulation, but will fix many games.<br />
* Use external BIOS images. Try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your DeSmuME configuration file. It may have options that are breaking your DeSmuME.<br />
** Windows: Your configuration file is located in the same directory as the DeSmuME program. Delete the file named "desmume.ini".<br />
** Mac: Your configuration file is located at "~/Library/Preferences". Delete the file named "org.desmume.DeSmuME.plist". Alternatively, you may run "Delete DeSmuME Preferences.app", which is included with your installation package, which will perform this operation for you.<br />
** Linux: Your configuration file is located at "~/.config/desmume". Delete the file named "config".<br />
* Turn off your virus scanner.<br />
<br />
<br />
If a game really doesn't work, no matter what you try, you can submit a bug report for the game to [https://sourceforge.net/p/desmume/bugs/ our bug tracker] on SourceForge.<br />
<br />
You might also find ways to patch the games to work better on emulators by searching on the Internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using DeSmuME! ===<br />
This is not DeSmuME's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers. If you are running DeSmuME on a laptop, then a laptop cooler might help.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
DeSmuME is a very CPU demanding app. While many users will see DeSmuME as a toy (and use it as such), it is actually a very sophisticated piece of software with lots of features. Also, DeSmuME focuses more on compatibility and features than on speed. Our philosophy is this: You can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility or gain new features. We take care of our side of things, so you should take care of yours.<br />
<br />
That being said, DeSmuME offers many options for you to find the best balance of compatibility, features, and performance. And remember that it is a balance -- gaining extra performance will always mean that you need to give up some features or reduce compatibility somewhere. How you make these tradeoffs is up to you. Listed below are things you can do to improve DeSmuME's performance.<br />
<br />
<br />
First of all, check that the host hardware is configured for best performance:<br />
* Ensure that you meet the [[#Faq#What are the minimum hardware requirements for DeSmuME?|minimum requirements]] for running DeSmuME.<br />
* DeSmuME is mostly CPU intensive and less GPU intensive. You'll want the fastest CPU possible (not necessarily the one with the most cores) for best performance.<br />
* The vast majority of older netbooks (and even newer ones) will have poor performance with any demanding software, including DeSmuME. Don't expect great performance out of these machines.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
<br />
<br />
Here are the biggest factors for improving emulation performance. They are listed from most performance impact to least performance impact:<br />
* Use a DeSmuME binary that works best for your machine. See [[#There are several different DeSmuME executables available. Which EXE do I use?]] for more details.<br />
* Use official DeSmuME releases from our [http://desmume.org/download Downloads page]. Our release versions always use the fastest and most aggressive program optimizations possible for maximum performance. Any unofficial, prerelease, or SVN builds are not guaranteed to have these same optimizations, resulting in lower performance.<br />
* Use frame skip. Even frame skipping by 1 will make many games become playable. However, note that some 3D games may not work well with frame skip, such as Golden Sun: Dark Dawn. If screens seem stuck or screen flickering becomes unacceptable, pick a different frame skip value.<br />
* ''(Windows only)'' Do not run the NDS tools (the ones from the Tools menu) unless absolutely necessary. If you must, try and keep the update interval as low as possible.<br />
* Disable all video filters, and set your display window's pixel scaler to None.<br />
* Use the Dynamic Recompiler (JIT) CPU emulation engine. ''(Doing this may break some games.)''<br />
* Disable Advanced Bus-Level Timing. ''(Doing this may break some games.)''<br />
* Try switching the 3D renderer between OpenGL and SoftRasterizer. One 3D renderer may work faster than the other, depending on the situation.<br />
* ''(Mac only)'' If you are using a pixel scaler and your machine has an older GPU or an integrated GPU, it might help to run the pixel scaler on the CPU by disabling "Run filters on GPU if possible". However, if you are using a newer GPU, then enabling "Run filters on GPU if possible" will remove any performance penalties related to using any video filters.<br />
* ''(Mac only)'' Do not enable any source filters if you are running a pixel scaler on the CPU. This combination results in a substantial performance hit.<br />
* ''(Linux only)'' Do not scale the display window beyond 1x, as this can result in a substantial performance hit.<br />
* Disable Advanced SPU Logic, and use the Dual SPU Sync/Async synchronization method.<br />
<br />
<br />
There are some other things that may theoretically improve performance, but they are dubious at best. They are only included here for the sake of completeness:<br />
* If you are using SoftRasterizer, disable edge marking and fog. Note that games that don't use these features will be unaffected.<br />
* Disable unneeded GPU layers.<br />
* Disable sound emulation altogether.<br />
* Don't use external BIOS images. But if you must, try enabling Patch DelayLoop SWI.<br />
<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
You are probably wanting to increase the execution speed. There are two ways of doing this:<br />
* Raise the execution speed limit. This will run the emulation at the specified execution speed, provided that the host hardware is fast enough. The execution speed limit will always be expressed as a speed multiplier, where 1x is 60 FPS. ''(Windows and Mac only)''<br />
* Disable the execution speed limiter. This will run the emulation as fast as the host hardware will allow.<br />
<br />
To change your execution speed options:<br />
* Windows: By default, the '-' and '=' keyboard keys will adjust the speed multiplier between 0.0625x-4x. By default, the Tab keyboard key will disable the speed limiter while held down. You can change these hotkeys in Config > Hotkey Config. In the Main section, the commands are Fast Forward, Increase Speed, and Decrease Speed.<br />
* Mac: By default, the '=' keyboard key will speed up execution by 2x while held down. You can assign additional hotkeys for Set Speed, and then click Settings to choose any speed multiplier from 0x-10x. There is no default hotkey for disabling the speed limiter, but you can assign one to the Enable/Disable Speed Limiter command. Alternatively, you can choose Emulation > Show Execution Control and adjust the execution speed options within the Execution Speed Properties section.<br />
* Linux ''(GTK only)'': By default, the letter 'O' keyboard key will disable the execution speed limiter while held down. You can change this hotkey in Config > Edit Controls. The command is called Boost.<br />
<br />
Note that increasing the execution speed does not mean that DeSmuME is doing less emulation. In fact, DeSmuME must emulate every single frame regardless of execution speed, even if DeSmuME doesn't necessarily show it (most likely, DeSmuME will begin dropping video and audio frames at high execution speeds). This is normal behavior. To achieve higher execution speeds, you will need to configure DeSmuME to operate at the highest performance possible. Read [[#Faq#DeSmuME_runs_too_slow.21]] for more information on how to improve emulation performance.<br />
<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in OSX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmuME window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. DeSmuME tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows: Windows XP SP2 or later<br />
* Mac: OS X v10.5.8 Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows: Windows Vista SP2 or later<br />
* Mac: OS X v10.6.8 Snow Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
* Windows: For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
** If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
** If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
** If you want to use the developer features, use the dev build. It includes extra debugging code and logging.<br />
* Mac: DeSmuME.app contains binaries for PPC, x86, x64. OS X will automatically choose the best binary to run on your hardware. You can override the automatic selection in the Finder by selecting DeSmuME.app and choosing File > Get Info. Then in the Get Info panel, you can select which binary to run.<br />
** To run as 32-bit PPC: Enable "Open using Rosetta". ''(Note that this option is only available on OS X v10.5 Leopard and v10.6 Snow Leopard. Rosetta is not available on later OS X versions.)''<br />
** To run as 32-bit x86: Enable "Open in 32-bit mode".<br />
** To run as 64-bit x64: Disable both "Open in 32-bit mode" and "Open using Rosetta" options.<br />
* Linux: Linux users are expected to build DeSmuME from source and know the best configure settings for their hardware. See [[Installing DeSmuME from source on Linux]] for more information.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.9GHz CPU will run DeSmuME much faster than a 12-core 1.6GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
(''Windows only'') The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
* Windows: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > One LCD, and then either View > LCDs Layout > Top First (Default) or View > LCDs Layout > Bottom First.<br />
* Mac: First, click the display window that you want to change. To change to a horizontal layout, choose View > Display Orientation > Horizontal. To change the display mode, choose View > Display Mode > Main for the main screen, or choose View > Display Mode > Touch for the touch screen.<br />
* Linux ''(GTK and Glade only)'':<br />
** GTK: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > Single Screen, and then choose View > LCDs Layout > Swap Screens to toggle between each screen.<br />
** Glade: To change to a horizontal layout, choose Config > Right Screen. However, changing the display mode on Glade is unsupported.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
Yes, you can display the DS screens in full screen mode.<br />
<br />
* Windows: Click the DeSmuME window and press Alt-Enter. <br />
* Mac: Click the display window that you want to make full screen, then choose View > Enter Full Screen.<br />
* Linux ''(GTK only)'': Choose View > Window Size > Scale to Window, then choose View > Window Size > Fullscreen.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
Yes, you can display each DS screen in separate windows. ''(This feature is only available for Mac.)''<br />
<br />
* Mac: Choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
DeSmuME allows you to apply pixel scalers, adjust the size of the video output, simulate the separation between the main and touch screens, and run filters on the video output. You can also rotate the NDS displays for games that require you to rotate the hardware NDS in a certain way.<br />
<br />
* Windows: <br />
** Pixel Upscale: To change the pixel scaler, choose View > Magnification Filters, and then select one of the menu options.<br />
** Output Filter: Choose Config > Display Method, then choose either DirectDraw HW, DirectDraw SW, or OpenGL. Your output filter will depend on which option you chose.<br />
*** DirectDraw HW: Depending on OS and GPU driver, your output filter may be Nearest Neighbor or Bilinear. You have no control over which filter is used, as it is determined for you by the OS/driver.<br />
*** DirectDraw SW: Your output filter will always be Nearest Neighbor.<br />
*** OpenGL: If Config > Display Method > Filter is checked, then your output filter will be Bilinear. Otherwise, your output filter will be Nearest Neighbor.<br />
** Display Resize: To set the displays to a specific size, choose View > Window Size, and then choose one of the menu options. The video displays will grow and shrink with the size of its window. The minimum display size is 1x times the pixel scaling. Keep in mind that some pixel scalers, such as 5xBRZ, can cause a vertical layout display to grow up to 1280x1920 pixels in size. In this case, there would be nothing you can do to reduce the display size below 5x. If the window doesn't fit in your monitor while using a given pixel scaler, then you must choose a pixel scaler with a smaller scaling value.<br />
** Screen Separation: Choose View > Screen Gap, and then select one of the menu options.<br />
** Rotation: Choose View > Rotation, and then select one of the menu options.<br />
* Mac:<br />
** Pixel Upscale: Select the window you want to change, then choose View > Video Pixel Scaler, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Pixel Scalers from the Video Settings panel.<br />
** Output Filter: Select the window you want to change, then choose View > Video Output Filter, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Output Filters from the Video Settings panel.<br />
** Display Resize: Select the window you want to change. To set the displays to a specific size, choose View > Display Size, and then choose one of the menu options. Note that on Mac, the maximum window size will always be dependent on your monitor's current resolution. The video display will grow and shrink with the size of the window. If the View > Keep Minimum Display Size at 1x option is enabled, then the minimum display size is 1x. Otherwise, the minimum display size is 0.25x.<br />
** Screen Separation: Select the window you want to change, then choose View > Display Separation, and then choose one of the menu options. Note that the percentage number is relative to the true distance between the NDS displays, where a separation of 100% is approximately 87.65px. If you choose Custom, then you may freely separate the displays to any percentage value from 0%-200%.<br />
** Rotation: Select the window you want to change, then choose View > Display Rotation, and then choose one of the menu options. If you choose Custom, then you may free rotate the display to any rotation.<br />
* Linux:<br />
** Pixel Upscale ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Video Filter, and then select one of the menu options.<br />
*** Qt: Choose View > Video Filter, and then select one of the menu options.<br />
** Output Filter ''(GTK only)'': With the exception of GTK, this feature is unsupported on all frontends. The output filter will always be Nearest Neighbor on unsupported frontends.<br />
*** GTK: Choose View > Secondary Video Filter, and then select one of the menu options.<br />
** Display Resize ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Window Size, and then select on of the menu options to set the displays to a specific size. If you choose Scale to Window, then the displays will grow and shrink with the window size. The minimum display size is 1x.<br />
*** Qt: The displays will grow and shrink with the window size. However, there is no option to set the displays to a specific size. The minimum display size is 1x.<br />
** Screen Separation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Screen Gap. Note that this is only a toggle option which only supports a separation of 0px or 90px.<br />
*** Glade: Choose Config > True Gap to separate the screens by 90px, or choose Config > No Gap to separate the screens by 0px. If both options are not enabled, then the default separation is 5px.<br />
** Rotation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Rotation, and then select one of the menu options.<br />
*** Glade: For the normal display rotation, choose Config > Rotate Screen 0. To rotate the displays 90 degrees, choose Config > Rotate Screen 90. To rotate the displays 180 degrees, choose Config > Rotate Screen 180. To rotate the displays 270 degrees, choose Config > Rotate Screen 270.<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported for all platforms. See [[#Faq#Microphone|NDS Microphone Support]] for more information.<br />
<br />
* Windows<br />
** Hardware Audio Input Device: In Windows, first set up the default audio recording device in your Windows Control Panel. Then in DeSmuME, choose Config > Microphone Settings, and then choose "Use connected physical microphone".<br />
** Software Generated Samples: Assign the Microphone hotkey using Config > Hotkey Config, under the Main section. Then choose Config > Microphone Settings, and then choose one of the three options that is not "Use connected physical microphone".<br />
* Mac<br />
** Hardware Audio Input Device: In OS X, first set up the default audio input device in Apple > System Preferences. DeSmuME will then automatically switch to using the default audio input device. Choose Emulation > Show Microphone Settings to adjust gain or mute the microphone.<br />
** Software Generated Samples: Assign Microphone hotkeys in your DeSmuME Input Preferences. Every hotkey assigned to the Microphone command will have a corresponding Settings button. Click Settings to change which sample generator the hotkey activates. You can assign multiple generators at the same time by using multiple hotkeys.<br />
* Linux<br />
** Hardware Audio Input Device: You must first compile your own Linux build with libasound. Next, in Linux, you must set up you default audio input device using whatever configuration utility is available in your distro. Then when you launch DeSmuME, DeSmuME will read your audio input device.<br />
** Software Generated Samples: This feature is unsupported on Linux.<br />
<br />
Additional Notes:<br />
<br />
* If you are using software generated samples, you will have to experiment with the microphone hotkey timing. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
* Hardware audio input device support is currently broken for Windows and Linux, and so many instances where the NDS microphone is required, such as giving voice commands to your Nintendog, will fail. Windows can sometimes workaround this if you use software generated samples from an audio file, but be aware that you can only assign one audio file at a time. Unfortunately, Linux has no workarounds.<br />
* If you want to play games that rely heavily on real-time voice recognition, such as the Nintendogs series of games, then the Mac version is your only option right now.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
[[List_of_Nintendo_DS_games_with_GBA_connectivity]]<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked? ===<br />
No. A real NDS uses Wi-Fi for multiplayer, and that isn't emulated in DeSmuME yet. For more information, see [[Faq#Wi-Fi|Wi-Fi Hardware Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
[[#Faq#Wi-Fi|Read more information about the current state of DeSmuME's Wi-Fi support.]] Right now, it's an experimental feature, which means it is unsupported.<br />
<br />
If you are an end-user, then we strongly discourage the use of Wi-Fi. However, as an end-user, if you really want to use Wi-Fi that badly, then you are on your own. In that case, any posts on our forums about Wi-Fi being used by end-users for end-user applications (such as wanting to trade Pokemon) will be ignored. Also, any submissions to any of our SourceForge trackers under the same conditions will be immediately closed without further consideration. <strong>When we say that Wi-Fi is unsupported, we mean it.</strong><br />
<br />
With that said, any developers interested in working on Wi-Fi support are welcome to join us at [[#Faq#DeSmuME_IRC_Channel|our IRC channel]]. We would appreciate the assistance!<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is currently not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future? ===<br />
Most likely, DeSmuME will not support the emulation of the Nintendo 3DS or Nintendo 2DS in the future. The hardware of both a 3DS and a 2DS are very different from an NDS, so emulating a 3DS/2DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
You can report bugs using our [https://sourceforge.net/p/desmume/bugs/ official bug tracker] on SourceForge. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
<br />
==== User Controls ====<br />
* The D-pad, buttons, and touch screen are fully emulated.<br />
* The ability to toggle the folded/unfolded state of the NDS is emulated through the Lid control.<br />
* Adjustable stylus pressure is only supported on Windows. However, the vast majority of games don't use this feature.<br />
* Emulation of stylus jitter is only supported on Windows. However, the vast majority of games don't use this feature.<br />
<br />
==== 2D Graphics System ====<br />
* All known 2D graphics features are supported, with the exception of mosaics.<br />
* Mosaics work somewhat, but are imperfect. Also, mosaics may not show up properly in some games.<br />
* There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
* Big-endian systems may not render the correct colors in some areas.<br />
<br />
==== 3D Rendering ====<br />
DeSmuME includes two 3D renderers, our own custom software renderer we call SoftRasterizer, and an OpenGL-based renderer. Each renderer has its own strengths and weaknesses, so use the best renderer for your situation. For example, if certain buttons, labels, or menus rendered on the 3D screen are obscured (for example, a button with no label on it), then things might appear correctly if you use SoftRasterizer. If that doesn't work, then things might appear correctly with OpenGL. Both renderers are provided for the purposes of working around specific 3D rendering cases.<br />
<br />
Also, keep in mind that SoftRasterizer uses the CPU for rendering, while OpenGL uses the GPU for rendering. Therefore, you may experience a difference in performance with each 3D renderer, depending on the host machine's hardware and depending on how you've configured DeSmuME.<br />
<br />
===== SoftRasterizer Renderer =====<br />
* All 3D features are emulated, except for wireframes and antialiasing.<br />
* There are issues with line rendering. However, it is possible to work around most of these issues by using the Line Hack.<br />
* There are issues with inaccurate texture rendering. However, it is possible to work around some of these issues by using the Fragment Sampling Hack. ''(Windows and Mac only)''<br />
* There are issues with depth rendering and Z-fighting. However, it is possible to work around some of these issues by adjusting the depth comparison threshold. ''(Windows and Mac only)''<br />
* There are some issues with shadow polygons. However, SoftRasterizer works better than OpenGL at rendering shadow polygons.<br />
<br />
===== OpenGL Renderer =====<br />
* All 3D features are emulated, except for fog and edge marking.<br />
* There are issues with depth rendering and Z-fighting. However, there is no workaround for this issue like there is with SoftRasterizer.<br />
* There are some major issues with shadow polygons. If you find the shadow polygon bugs unacceptable, then you will have to switch to SoftRasterizer.<br />
<br />
==== Sound ====<br />
* All sound features are emulated.<br />
* For complete SPU emulation, two requirements must be met:<br />
** Advanced SPU Logic must be enabled.<br />
** One of the SPU sound synchronization methods must be used (N, Z, or P).<br />
* Disabling Advanced SPU Logic and using Dual SPU Sync/Async will result in the loss of some sound features, but will also improve emulation performance on Windows and Linux. (Audio processing is multithreaded on Mac, so Mac users should never need to disable Advanced SPU Logic or use Dual SPU Sync/Async except for testing purposes. There are no performance advantages for changing these two options on Mac.)<br />
* Audio samples can be post-processed with interpolation, resulting in a smoother sound than a hardware NDS. Linear and Cosine interpolation algorithms are included. You may also turn off interpolation to play back the samples exactly as a hardware NDS would receive them.<br />
<br />
==== Microphone ====<br />
* All microphone features are emulated.<br />
* DeSmuME supports either receiving audio samples from a hardware audio input device, or generating audio samples in software.<br />
* Hardware audio input is only supported on Mac. Windows and Linux are currently broken and unsupported.<br />
* DeSmuME includes the following software sample generators:<br />
** Internal Noise Samples<br />
** White Noise ''(Windows and Mac only)''<br />
** Sine Wave ''(Mac only)''<br />
** Audio File ''(Windows -- only WAV files in 16000Hz 8-bit mono LPCM format are supported / Mac -- any audio file compatible with [https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/CoreAudioOverview/SupportedAudioFormatsMacOSX/SupportedAudioFormatsMacOSX.html CoreAudio] is supported)''<br />
<br />
==== CPU ====<br />
* CPU emulation is supported through either the Interpreter engine or the Dynamic Recompiler engine.<br />
* The Interpreter engine is available on all platforms. However, Dynamic Recompiler only works on x86 or x64 systems.<br />
* We are unaware of any huge problems with the Interpreter engine, but there are still some issues.<br />
* Interpreter has better compatibility than Dynamic Recompiler. Some games that fail when using Dynamic Recompiler will work fine with Interpreter. The tradeoff here is that Interpreter has much lower performance than Dynamic Recompiler.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== Memory and System Bus ====<br />
* We are unaware of any huge problems with the MMU and DMA systems, but there are still some issues.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== BIOS and Firmware ====<br />
* DeSmuME uses its own internal BIOS and firmware, but only for the purposes of loading and executing ROMs. DeSmuME's internal BIOS and firmware do not emulate all of the original NDS features.<br />
* DeSmuME supports configuring all of the NDS profile information through the internal BIOS and firmware alone. This information includes:<br />
** Nickname ''(Windows and Mac only)''<br />
** Message ''(Windows and Mac only)''<br />
** Favorite Color ''(Windows and Mac only)''<br />
** Birthday ''(Windows and Mac only)''<br />
** Language<br />
* DeSmuME can also load external BIOS and firmware images from a hardware NDS, gaining additional features by doing so.<br />
* If DeSmuME has all the necessary external BIOS and firmware images loaded, then it is possible to perform a full NDS boot. It then becomes possible to configure the NDS profile information within the emulated NDS firmware interface.<br />
* Loading of external BIOS images is supported on Windows, Mac, and Linux.<br />
* Loading of an external firmware image is only supported on Windows and Mac. Linux is not supported.<br />
<br />
==== NDS Slot (SLOT-1) ====<br />
* The following NDS slot devices are supported:<br />
** Standard Retail MC + ROM<br />
** Retail w/ NAND Flash<br />
** R4<br />
* DeSmuME can display the header information of loaded ROMs. ''(Windows and Mac only)''<br />
* We are unaware of any huge problems with loading NDS ROMs. However, there are some issues with loading NDS ROMs on big-endian systems.<br />
* There are some issues with DSi ROMs, as they are not fully supported yet.<br />
<br />
==== GBA Slot (SLOT-2) ====<br />
* The following GBA slot devices are supported:<br />
** Compact Flash Card<br />
** Rumble Pak ''(Windows and Mac only)''<br />
** GBA Cartridge<br />
** Guitar Grip ''(Windows and Mac only)''<br />
** Memory Expansion Pak ''(Windows and Mac only)''<br />
** EasyPiano ''(Windows and Mac only)''<br />
** Taito Paddle ''(Windows and Mac only)''<br />
** PassME ''(Windows and Mac only)''<br />
<br />
==== Wi-Fi ====<br />
* Wi-Fi emulation is currently in an experimental stage, and many Wi-Fi features are either broken or non-working.<br />
* Here is what we currently know about Wi-Fi so far: [[Luigi's notes about WiFi|Wi-Fi Notes]]<br />
<br />
==== Dynamically Linked Driver Interface (DLDI) ====<br />
The Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
* LFN is currently unsupported.<br />
<br />
<br />
=== Does the GDB stub still work? ===<br />
GDB remote debugging does work to a certain degree. However, DeSmuME does not implement the entire GDB stub protocol, so there are still some bugs. Nevertheless, GDB remote debugging works well enough to do basic operations, like set breakpoints, step through code, watch memory locations for read/write operations, and other basic operations.<br />
<br />
=== How do I enable the GDB stub? ===<br />
* Windows: You must make a custom build using #define GDB_STUB.<br />
# Copy the "userconfig.h" file from "src\windows\defaultconfig" to "src\windows\userconfig".<br />
# In the "src\windows\userconfig\userconfig.h" file, add "#define GDB_STUB".<br />
# Build DeSmuME.<br />
# After DeSmuME is finished building, launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
* Mac: You must make a custom build using the "DeSmuME (OS X App; dev+)" build scheme, which is only available using the "Xcode (Latest)" project file. You must compile the dev+ build using Xcode 4 or later. When you do, a new menu option will be available: Tools > Show GDB Stub Control. In the GDB Stub Control panel, click Start to begin listening for the GDB debugging client.<br />
* Linux: When you generate your configure script, it must use the flag "--enable-gdb-stub". Build DeSmuME, then launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an online communications system.<br />
<br />
The DeSmuME team uses IRC to discuss DeSmuME's development. You will need an IRC client in order to participate is these discussions.<br />
<br />
==== Recommended IRC Clients ====<br />
* Windows: [http://www.mirc.com mIRC], [http://www.xchat.com XChat]<br />
* Mac: [http://colloquy.info Colloquy], [https://www.adium.im Adium]<br />
* Linux: [http://www.xchat.com XChat]<br />
* Firefox add-on: [https://addons.mozilla.org/en-us/firefox/addon/chatzilla/ ChatZilla]<br />
* Others: [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Wikipedia]<br />
<br />
==== DeSmuME IRC Channel ====<br />
To connect to the DeSmuME IRC channel, you will need to enter the following information in your IRC client:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
As far as language is concerned, most of the people on the channel speak English.<br />
<br />
=== Where is the manual? ===<br />
Over [http://wiki.desmume.org/index.php?title=Manual here]. It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
<br />
== SVN and Compiling ==<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ SVN] is a tool that is used by multiple developers to work on the same codebase without conflicts. See [http://en.wikipedia.org/wiki/Subversion_(software) Wikipedia] for more information.<br />
<br />
=== Where do I get SVN builds? ===<br />
We officially use the [http://buildbot.orphis.net/desmume/ automated SVN builds] provided by DeSmuME user, Orphis.<br />
<br />
Other third-parties may offer SVN builds, such as [http://www.emucr.com EmuCR]. Please note that any third-party build is both unofficial and unsupported.<br />
<br />
=== How do I get the latest SVN code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* Windows: At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
** Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
** Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* Mac: Any of the compilers built into Xcode 3.1.4 all the way up to the latest Xcode is supported. You may also use a non-Xcode toolchain, such as MacPorts GCC, but this is currently unsupported.<br />
* Linux: Any recent version of GCC and toolchain should work. However, we do not recommend GCC 4.9, since there are bugs with this GCC version that interfere with DeSmuME.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
(''Windows only'') For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the Visual C++ Express 2008 installer and I can't find it. ===<br />
Download link: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Patches may be submitted to our [https://sourceforge.net/p/desmume/patches/ patches tracker] on SourceForge. Any patches submitted will be subject to a code review by our developer team, where we will then determine if the patch should be included in the codebase or not.<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== I'm not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile SVN builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on IRC. Also, adding to or perfecting the documentation in the Wiki is useful. You could also watch for and help answer questions placed on the [http://forums.desmume.org DeSmuME forum].<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://problemkaputt.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a Compact Flash image<br />
<br />
<br />
== Mac Users ==<br />
<br />
=== I just downloaded DeSmuME, but I can't launch it because "it is from an unidentified developer." What gives? ===<br />
Apple introduced a security policy called [https://support.apple.com/en-us/HT202491 Gatekeeper] on OS X v10.8 Mountain Lion to help protect users from malware. However, since DeSmuME is a free open-source app, we don't want to invest money into properly code signing the app for the sake of proving that we are legitimate app and not just another piece of malware. If you are concerned about the legitimacy of DeSmuME.app, then always make sure to download it from our [http://desmume.org/download official Downloads page].<br />
<br />
If OS X prevents you from launching DeSmuME.app because "it is from an unidentified developer", do this:<br />
* In the Finder, right-click (or Control-click) DeSmuME.app, then in the contextual menu, choose Open. A warning box will appear, saying that DeSmuME.app "is from an unidentified developer." In the warning box, click Open to proceed with launching DeSmuME.app.<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories.<br />
<br />
Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
As of this release, all of the DeSmuME features that exist in the Windows port also exist in the Mac port, except for the following:<br />
* The HUD<br />
* Custom path settings<br />
* AVI / WAV recording<br />
* The various tools listed in the Tools menu<br />
* RAM Watch / RAM Search<br />
* Lua scripting<br />
<br />
While we are actively working to attain full feature parity between the Mac and Windows ports, this will still take some time to achieve.<br />
<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogermanhttps://wiki.desmume.org/index.php?title=FaqFaq2015-03-30T23:44:01Z<p>Rogerman: </p>
<hr />
<div>'''DeSmuME FAQ 0.9.11'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
* FAQ 0.9.9, [[Faq_099]]<br />
* FAQ 0.9.10, [[Faq_0_9_10]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped?<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_1.png]<br />
[http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! ===<br />
* Make sure you are using the latest version of the emulator.<br />
* Delete your ini file and re-run the emulator.<br />
* Quit using patched ROMs. Remove the AP (Anti-Piracy) patch from the ROM.<br />
* Quit using cheats.<br />
* Use/dump external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games.</strong> Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Read the [[KnowledgeBase]]<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3D renderers. Quit using frameskip.<br />
* Do not use patched ROMs. Never use patched ROMs.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
* Stop using savestates. Use in-game saves.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot your computer.<br />
* Go to our official [http://desmume.org/download Downloads Page] and make sure you are using the latest version, which is currently v0.9.11. Any older versions are unsupported.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary.<br />
* Enable "Advanced Bus-Level Timing". Doing this will slow down emulation, but fix some games.<br />
* Disable "Dynamic Recompiler". Doing this will greatly slow down emulation, but will fix many games.<br />
* Use external BIOS images. Try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your DeSmuME configuration file. It may have options that are breaking your DeSmuME.<br />
** Windows: Your configuration file is located in the same directory as the DeSmuME program. Delete the file named "desmume.ini".<br />
** Mac: Your configuration file is located at "~/Library/Preferences". Delete the file named "org.desmume.DeSmuME.plist". Alternatively, you may run "Delete DeSmuME Preferences.app", which is included with your installation package, which will perform this operation for you.<br />
** Linux: Your configuration file is located at "~/.config/desmume". Delete the file named "config".<br />
* Turn off your virus scanner.<br />
<br />
If it really doesn't boot up no matter what you try, you can submit a bug report for the game on the SourceForge bugtracker.<br />
You might also find ways to patch the games to work better on emulators by searching on the Internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using DeSmuME! ===<br />
This is not DeSmuME's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers. If you are running DeSmuME on a laptop, then a laptop cooler might help.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
Yeah, for you and everyone else. New releases may always be a step backwards in some (or many) cases from earlier releases in terms of speed. There is a delicate balance between compatibility and speed and sometimes one advances further than the other. <br />
<br />
I will be frank: DeSmuME focuses more on compatibility and perks than on speed. Our philosophy is, you can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility and perks. We take care of our side of things, so you should take care of yours.<br />
<br />
At any rate, here is the master list of tricks to speed things up:<br />
<br />
* Use the Dynamic Recompiler (JIT) option.<br />
* Don't use external BIOS images.<br />
* If you ARE using external BIOS images, (or must for some reason) try enabling Patch DelayLoop SWI<br />
* Try switching between OpenGL Renderer and Software Rasterizer. You may not like the results, but it may get you more speed.<br />
* Disable this option: Config > Emulation Settings > Enable Advanced Bus-Level Timing.<br />
* Use Dual SPU in the Sound Settings, and don't use Advanced SPU Logic.<br />
* In the Sound Settings, set interpolation to none.<br />
* If you can handle it, turn off the sound altogether. Try listening to a shoutcast instead; I recommend happyday new age or ah.fm!<br />
* Don't use the NOSSE2 build.<br />
* Don't use someone else's unofficial "SVN" build, it probably is not fully optimized, since we make our Windows releases using some profiler-guided optimization, which helps by several FPS.<br />
* Use frame skip. Even frameskipping by 1 will help and many games will stay playable. Frameskipping is continually tweaked in each release to get more bang for the buck, but beware that dual screen 3d games still may not work well under frameskip. If screens seem stuck, pick a different frameskip value.<br />
* There is now the option of disabling an entire screen. (Tools > View Layers > Main GPU, etc) Consider disabling a screen which is useless in the game you are playing. NOTE: View > LCDs Layout > One LCD *WILL NOT* increase your speed. This merely hides the lcd, but it is still rendered. This is important for dual screen games and other weird cases.<br />
* Don't scale the window anything different than 1x and don't use resize filters.<br />
* If you are using the software rasterizer, disable edge marking and fog if you feel like they aren't needed. If the game isn't using those features then this won't help.<br />
* Buying a newer, faster computer is somewhat more expensive, but it has other side benefits. <br />
* Don't use a netbook.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
* Your graphics card is irrelevant. Upgrade your CPU.<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
You are probably wanting to increase the execution speed. There are two ways of doing this:<br />
* Raise the execution speed limit. This will run the emulation at the specified execution speed, provided that the host hardware is fast enough. The execution speed limit will always be expressed as a speed multiplier, where 1x is 60 FPS. ''(Windows and Mac only)''<br />
* Disable the execution speed limiter. This will run the emulation as fast as the host hardware will allow.<br />
<br />
To change your execution speed options:<br />
* Windows: By default, the '-' and '=' keyboard keys will adjust the speed multiplier between 0.0625x-4x. By default, the Tab keyboard key will disable the speed limiter while held down. You can change these hotkeys in Config > Hotkey Config. In the Main section, the commands are Fast Forward, Increase Speed, and Decrease Speed.<br />
* Mac: By default, the '=' keyboard key will speed up execution by 2x while held down. You can assign additional hotkeys for Set Speed, and then click Settings to choose any speed multiplier from 0x-10x. There is no default hotkey for disabling the speed limiter, but you can assign one to the Enable/Disable Speed Limiter command. Alternatively, you can choose Emulation > Show Execution Control and adjust the execution speed options within the Execution Speed Properties section.<br />
* Linux ''(GTK only)'': By default, the letter 'O' keyboard key will disable the execution speed limiter while held down. You can change this hotkey in Config > Edit Controls. The command is called Boost.<br />
<br />
Note that increasing the execution speed does not mean that DeSmuME is doing less emulation. In fact, DeSmuME must emulate every single frame regardless of execution speed, even if DeSmuME doesn't necessarily show it (most likely, DeSmuME will begin dropping video and audio frames at high execution speeds). This is normal behavior. To achieve higher execution speeds, you will need to configure DeSmuME to operate at the highest performance possible. Read [[#Faq#DeSmuME_runs_too_slow.21|this section]] for more information on how to improve emulation performance.<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in OSX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmuME window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. DeSmuME tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows: Windows XP SP2 or later<br />
* Mac: OS X v10.5.8 Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows: Windows Vista SP2 or later<br />
* Mac: OS X v10.6.8 Snow Leopard or later<br />
* Linux: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
* Windows: For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
** If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
** If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
** If you want to use the developer features, use the dev build. It includes extra debugging code and logging.<br />
* Mac: DeSmuME.app contains binaries for PPC, x86, x64. OS X will automatically choose the best binary to run on your hardware. You can override the automatic selection in the Finder by selecting DeSmuME.app and choosing File > Get Info. Then in the Get Info panel, you can select which binary to run.<br />
** To run as 32-bit PPC: Enable "Open using Rosetta". ''(Note that this option is only available on OS X v10.5 Leopard and v10.6 Snow Leopard. Rosetta is not available on later OS X versions.)''<br />
** To run as 32-bit x86: Enable "Open in 32-bit mode".<br />
** To run as 64-bit x64: Disable both "Open in 32-bit mode" and "Open using Rosetta" options.<br />
* Linux: Linux users are expected to build DeSmuME from source and know the best configure settings for their hardware. See [[Installing DeSmuME from source on Linux]] for more information.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.9GHz CPU will run DeSmuME much faster than a 12-core 1.6GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
(''Windows only'') The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
* Windows: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > One LCD, and then either View > LCDs Layout > Top First (Default) or View > LCDs Layout > Bottom First.<br />
* Mac: First, click the display window that you want to change. To change to a horizontal layout, choose View > Display Orientation > Horizontal. To change the display mode, choose View > Display Mode > Main for the main screen, or choose View > Display Mode > Touch for the touch screen.<br />
* Linux ''(GTK and Glade only)'':<br />
** GTK: To change to a horizontal layout, choose View > LCDs Layout > Horizontal. To change the display mode, choose View > LCDs Layout > Single Screen, and then choose View > LCDs Layout > Swap Screens to toggle between each screen.<br />
** Glade: To change to a horizontal layout, choose Config > Right Screen. However, changing the display mode on Glade is unsupported.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
Yes, you can display the DS screens in full screen mode.<br />
<br />
* Windows: Click the DeSmuME window and press Alt-Enter. <br />
* Mac: Click the display window that you want to make full screen, then choose View > Enter Full Screen.<br />
* Linux ''(GTK only)'': Choose View > Window Size > Scale to Window, then choose View > Window Size > Fullscreen.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
Yes, you can display each DS screen in separate windows. ''(This feature is only available for Mac.)''<br />
<br />
* Mac: Choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
DeSmuME allows you to apply pixel scalers, adjust the size of the video output, simulate the separation between the main and touch screens, and run filters on the video output. You can also rotate the NDS displays for games that require you to rotate the hardware NDS in a certain way.<br />
<br />
* Windows: <br />
** Pixel Upscale: To change the pixel scaler, choose View > Magnification Filters, and then select one of the menu options.<br />
** Output Filter: Choose Config > Display Method, then choose either DirectDraw HW, DirectDraw SW, or OpenGL. Your output filter will depend on which option you chose.<br />
*** DirectDraw HW: Depending on OS and GPU driver, your output filter may be Nearest Neighbor or Bilinear. You have no control over which filter is used, as it is determined for you by the OS/driver.<br />
*** DirectDraw SW: Your output filter will always be Nearest Neighbor.<br />
*** OpenGL: If Config > Display Method > Filter is checked, then your output filter will be Bilinear. Otherwise, your output filter will be Nearest Neighbor.<br />
** Display Resize: To set the displays to a specific size, choose View > Window Size, and then choose one of the menu options. The video displays will grow and shrink with the size of its window. The minimum display size is 1x times the pixel scaling. Keep in mind that some pixel scalers, such as 5xBRZ, can cause a vertical layout display to grow up to 1280x1920 pixels in size. In this case, there would be nothing you can do to reduce the display size below 5x. If the window doesn't fit in your monitor while using a given pixel scaler, then you must choose a pixel scaler with a smaller scaling value.<br />
** Screen Separation: Choose View > Screen Gap, and then select one of the menu options.<br />
** Rotation: Choose View > Rotation, and then select one of the menu options.<br />
* Mac:<br />
** Pixel Upscale: Select the window you want to change, then choose View > Video Pixel Scaler, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Pixel Scalers from the Video Settings panel.<br />
** Output Filter: Select the window you want to change, then choose View > Video Output Filter, and then choose one of the menu options. Alternatively, you can choose View > Show Video Settings, and then choose one of the Output Filters from the Video Settings panel.<br />
** Display Resize: Select the window you want to change. To set the displays to a specific size, choose View > Display Size, and then choose one of the menu options. Note that on Mac, the maximum window size will always be dependent on your monitor's current resolution. The video display will grow and shrink with the size of the window. If the View > Keep Minimum Display Size at 1x option is enabled, then the minimum display size is 1x. Otherwise, the minimum display size is 0.25x.<br />
** Screen Separation: Select the window you want to change, then choose View > Display Separation, and then choose one of the menu options. Note that the percentage number is relative to the true distance between the NDS displays, where a separation of 100% is approximately 87.65px. If you choose Custom, then you may freely separate the displays to any percentage value from 0%-200%.<br />
** Rotation: Select the window you want to change, then choose View > Display Rotation, and then choose one of the menu options. If you choose Custom, then you may free rotate the display to any rotation.<br />
* Linux:<br />
** Pixel Upscale ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Video Filter, and then select one of the menu options.<br />
*** Qt: Choose View > Video Filter, and then select one of the menu options.<br />
** Output Filter ''(GTK only)'': With the exception of GTK, this feature is unsupported on all frontends. The output filter will always be Nearest Neighbor on unsupported frontends.<br />
*** GTK: Choose View > Secondary Video Filter, and then select one of the menu options.<br />
** Display Resize ''(GTK and Qt only)'':<br />
*** GTK: Choose View > Window Size, and then select on of the menu options to set the displays to a specific size. If you choose Scale to Window, then the displays will grow and shrink with the window size. The minimum display size is 1x.<br />
*** Qt: The displays will grow and shrink with the window size. However, there is no option to set the displays to a specific size. The minimum display size is 1x.<br />
** Screen Separation ''(GTK and Glade only)'':<br />
*** GTK: Choose View > Screen Gap. Note that this is only a toggle option which only supports a separation of 0px or 90px.<br />
*** Glade: Choose Config > True Gap to separate the screens by 90px, or choose Config > No Gap to separate the screens by 0px. If both options are not enabled, then the default separation is 5px.<br />
** Rotation<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported for all platforms. See [[#Faq#Microphone|NDS Microphone Support]] for more information.<br />
<br />
* Windows<br />
** Hardware Audio Input Device: In Windows, first set up the default audio recording device in your Windows Control Panel. Then in DeSmuME, choose Config > Microphone Settings, and then choose "Use connected physical microphone".<br />
** Software Generated Samples: Assign the Microphone hotkey using Config > Hotkey Config, under the Main section. Then choose Config > Microphone Settings, and then choose one of the three options that is not "Use connected physical microphone".<br />
* Mac<br />
** Hardware Audio Input Device: In OS X, first set up the default audio input device in Apple > System Preferences. DeSmuME will then automatically switch to using the default audio input device. Choose Emulation > Show Microphone Settings to adjust gain or mute the microphone.<br />
** Software Generated Samples: Assign Microphone hotkeys in your DeSmuME Input Preferences. Every hotkey assigned to the Microphone command will have a corresponding Settings button. Click Settings to change which sample generator the hotkey activates. You can assign multiple generators at the same time by using multiple hotkeys.<br />
* Linux<br />
** Hardware Audio Input Device: You must first compile your own Linux build with libasound. Next, in Linux, you must set up you default audio input device using whatever configuration utility is available in your distro. Then when you launch DeSmuME, DeSmuME will read your audio input device.<br />
** Software Generated Samples: This feature is unsupported on Linux.<br />
<br />
Additional Notes:<br />
<br />
* If you are using software generated samples, you will have to experiment with the microphone hotkey timing. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
* Hardware audio input device support is currently broken for Windows and Linux, and so many instances where the NDS microphone is required, such as giving voice commands to your Nintendog, will fail. Windows can sometimes workaround this if you use software generated samples from an audio file, but be aware that you can only assign one audio file at a time. Unfortunately, Linux has no workarounds.<br />
* If you want to play games that rely heavily on real-time voice recognition, such as the Nintendogs series of games, then the Mac version is your only option right now.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
[[List_of_Nintendo_DS_games_with_GBA_connectivity]]<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked? ===<br />
No. A real NDS uses Wi-Fi for multiplayer, and that isn't emulated in DeSmuME yet. For more information, see [[Faq#Wi-Fi|Wi-Fi Hardware Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
[[#Faq#Wi-Fi|Read more information about the current state of DeSmuME's Wi-Fi support.]] Right now, it's an experimental feature, which means it is unsupported.<br />
<br />
If you are an end-user, then we strongly discourage the use of Wi-Fi. However, as an end-user, if you really want to use Wi-Fi that badly, then you are on your own. In that case, any posts on our forums about Wi-Fi being used by end-users for end-user applications (such as wanting to trade Pokemon) will be ignored. Also, any submissions to any of our SourceForge trackers under the same conditions will be immediately closed without further consideration. <strong>When we say that Wi-Fi is unsupported, we mean it.</strong><br />
<br />
With that said, any developers interested in working on Wi-Fi support are welcome to join us at [[#Faq#DeSmuME_IRC_Channel|our IRC channel]]. We would appreciate the assistance!<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is currently not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future? ===<br />
Most likely, DeSmuME will not support the emulation of the Nintendo 3DS or Nintendo 2DS in the future. The hardware of both a 3DS and a 2DS are very different from an NDS, so emulating a 3DS/2DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
You can report bugs using our [https://sourceforge.net/p/desmume/bugs/ official bug tracker] on SourceForge. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
<br />
==== User Controls ====<br />
* The D-pad, buttons, and touch screen are fully emulated.<br />
* The ability to toggle the folded/unfolded state of the NDS is emulated through the Lid control.<br />
* Adjustable stylus pressure is only supported on Windows. However, the vast majority of games don't use this feature.<br />
* Emulation of stylus jitter is only supported on Windows. However, the vast majority of games don't use this feature.<br />
<br />
==== 2D Graphics System ====<br />
* All known 2D graphics features are supported, with the exception of mosaics.<br />
* Mosaics work somewhat, but are imperfect. Also, mosaics may not show up properly in some games.<br />
* There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
* Big-endian systems may not render the correct colors in some areas.<br />
<br />
==== 3D Rendering ====<br />
DeSmuME includes two 3D renderers, our own custom software renderer we call SoftRasterizer, and an OpenGL-based renderer. Each renderer has its own strengths and weaknesses, so use the best renderer for your situation. For example, if certain buttons, labels, or menus rendered on the 3D screen are obscured (for example, a button with no label on it), then things might appear correctly if you use SoftRasterizer. If that doesn't work, then things might appear correctly with OpenGL. Both renderers are provided for the purposes of working around specific 3D rendering cases.<br />
<br />
Also, keep in mind that SoftRasterizer uses the CPU for rendering, while OpenGL uses the GPU for rendering. Therefore, you may experience a difference in performance with each 3D renderer, depending on the host machine's hardware and depending on how you've configured DeSmuME.<br />
<br />
===== SoftRasterizer Renderer =====<br />
* All 3D features are emulated, except for wireframes and antialiasing.<br />
* There are issues with line rendering. However, it is possible to work around most of these issues by using the Line Hack.<br />
* There are issues with inaccurate texture rendering. However, it is possible to work around some of these issues by using the Fragment Sampling Hack. ''(Windows and Mac only)''<br />
* There are issues with depth rendering and Z-fighting. However, it is possible to work around some of these issues by adjusting the depth comparison threshold. ''(Windows and Mac only)''<br />
* There are some issues with shadow polygons. However, SoftRasterizer works better than OpenGL at rendering shadow polygons.<br />
<br />
===== OpenGL Renderer =====<br />
* All 3D features are emulated, except for fog and edge marking.<br />
* There are issues with depth rendering and Z-fighting. However, there is no workaround for this issue like there is with SoftRasterizer.<br />
* There are some major issues with shadow polygons. If you find the shadow polygon bugs unacceptable, then you will have to switch to SoftRasterizer.<br />
<br />
==== Sound ====<br />
* All sound features are emulated.<br />
* For complete SPU emulation, two requirements must be met:<br />
** Advanced SPU Logic must be enabled.<br />
** One of the SPU sound synchronization methods must be used (N, Z, or P).<br />
* Disabling Advanced SPU Logic and using Dual SPU Sync/Async will result in the loss of some sound features, but will also improve emulation performance on Windows and Linux. (Audio processing is multithreaded on Mac, so Mac users should never need to disable Advanced SPU Logic or use Dual SPU Sync/Async except for testing purposes. There are no performance advantages for changing these two options on Mac.)<br />
* Audio samples can be post-processed with interpolation, resulting in a smoother sound than a hardware NDS. Linear and Cosine interpolation algorithms are included. You may also turn off interpolation to play back the samples exactly as a hardware NDS would receive them.<br />
<br />
==== Microphone ====<br />
* All microphone features are emulated.<br />
* DeSmuME supports either receiving audio samples from a hardware audio input device, or generating audio samples in software.<br />
* Hardware audio input is only supported on Mac. Windows and Linux are currently broken and unsupported.<br />
* DeSmuME includes the following software sample generators:<br />
** Internal Noise Samples<br />
** White Noise ''(Windows and Mac only)''<br />
** Sine Wave ''(Mac only)''<br />
** Audio File ''(Windows -- only WAV files in 16000Hz 8-bit mono LPCM format are supported / Mac -- any audio file compatible with [https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/CoreAudioOverview/SupportedAudioFormatsMacOSX/SupportedAudioFormatsMacOSX.html CoreAudio] is supported)''<br />
<br />
==== CPU ====<br />
* CPU emulation is supported through either the Interpreter engine or the Dynamic Recompiler engine.<br />
* The Interpreter engine is available on all platforms. However, Dynamic Recompiler only works on x86 or x64 systems.<br />
* We are unaware of any huge problems with the Interpreter engine, but there are still some issues.<br />
* Interpreter has better compatibility than Dynamic Recompiler. Some games that fail when using Dynamic Recompiler will work fine with Interpreter. The tradeoff here is that Interpreter has much lower performance than Dynamic Recompiler.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== Memory and System Bus ====<br />
* We are unaware of any huge problems with the MMU and DMA systems, but there are still some issues.<br />
* Timings are quite incorrect. However, this doesn't seem to hurt most titles. You can enable the Advanced Bus-Level Timing option to improve the timing accuracy, but at the cost of some emulation performance.<br />
<br />
==== BIOS and Firmware ====<br />
* DeSmuME uses its own internal BIOS and firmware, but only for the purposes of loading and executing ROMs. DeSmuME's internal BIOS and firmware do not emulate all of the original NDS features.<br />
* DeSmuME supports configuring all of the NDS profile information through the internal BIOS and firmware alone. This information includes:<br />
** Nickname ''(Windows and Mac only)''<br />
** Message ''(Windows and Mac only)''<br />
** Favorite Color ''(Windows and Mac only)''<br />
** Birthday ''(Windows and Mac only)''<br />
** Language<br />
* DeSmuME can also load external BIOS and firmware images from a hardware NDS, gaining additional features by doing so.<br />
* If DeSmuME has all the necessary external BIOS and firmware images loaded, then it is possible to perform a full NDS boot. It then becomes possible to configure the NDS profile information within the emulated NDS firmware interface.<br />
* Loading of external BIOS images is supported on Windows, Mac, and Linux.<br />
* Loading of an external firmware image is only supported on Windows and Mac. Linux is not supported.<br />
<br />
==== NDS Slot (SLOT-1) ====<br />
* The following NDS slot devices are supported:<br />
** Standard Retail MC + ROM<br />
** Retail w/ NAND Flash<br />
** R4<br />
* DeSmuME can display the header information of loaded ROMs. ''(Windows and Mac only)''<br />
<br />
==== GBA Slot (SLOT-2) ====<br />
* The following GBA slot devices are supported:<br />
** Compact Flash Card<br />
** Rumble Pak ''(Windows and Mac only)''<br />
** GBA Cartridge<br />
** Guitar Grip ''(Windows and Mac only)''<br />
** Memory Expansion Pak ''(Windows and Mac only)''<br />
** EasyPiano ''(Windows and Mac only)''<br />
** Taito Paddle ''(Windows and Mac only)''<br />
** PassME ''(Windows and Mac only)''<br />
<br />
==== Wi-Fi ====<br />
* Wi-Fi emulation is currently in an experimental stage, and many Wi-Fi features are either broken or non-working.<br />
<br />
==== Dynamically Linked Driver Interface (DLDI) ====<br />
The Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
* LFN is currently unsupported.<br />
<br />
<br />
=== Does the GDB stub still work? ===<br />
GDB remote debugging does work to a certain degree. However, DeSmuME does not implement the entire GDB stub protocol, so there are still some bugs. Nevertheless, GDB remote debugging works well enough to do basic operations, like set breakpoints, step through code, watch memory locations for read/write operations, and other basic operations.<br />
<br />
=== How do I enable the GDB stub? ===<br />
* Windows: You must make a custom build using #define GDB_STUB.<br />
# Copy the "userconfig.h" file from "src\windows\defaultconfig" to "src\windows\userconfig".<br />
# In the "src\windows\userconfig\userconfig.h" file, add "#define GDB_STUB".<br />
# Build DeSmuME.<br />
# After DeSmuME is finished building, launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
* Mac: You must make a custom build using the "DeSmuME (OS X App; dev+)" build scheme, which is only available using the "Xcode (Latest)" project file. You must compile the dev+ build using Xcode 4 or later. When you do, a new menu option will be available: Tools > Show GDB Stub Control. In the GDB Stub Control panel, click Start to begin listening for the GDB debugging client.<br />
* Linux: When you generate your configure script, it must use the flag "--enable-gdb-stub". Build DeSmuME, then launch it with the command line options "--arm9gdb=PORT_NUM" and/or "--arm7gdb=PORT_NUM". DeSmuME will automatically begin listening for the GDB debugging client after launching.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an online communications system.<br />
<br />
The DeSmuME team uses IRC to discuss DeSmuME's development. You will need an IRC client in order to participate is these discussions.<br />
<br />
==== Recommended IRC Clients ====<br />
* Windows: [http://www.mirc.com mIRC], [http://www.xchat.com XChat]<br />
* Mac: [http://colloquy.info Colloquy], [https://www.adium.im Adium]<br />
* Linux: [http://www.xchat.com XChat]<br />
* Firefox add-on: [https://addons.mozilla.org/en-us/firefox/addon/chatzilla/ ChatZilla]<br />
* Others: [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients Wikipedia]<br />
<br />
==== DeSmuME IRC Channel ====<br />
To connect to the DeSmuME IRC channel, you will need to enter the following information in your IRC client:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
As far as language is concerned, most of the people on the channel speak English.<br />
<br />
=== Where is the manual? ===<br />
Over [http://wiki.desmume.org/index.php?title=Manual here]. It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
<br />
== SVN and Compiling ==<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ SVN] is a tool that is used by multiple developers to work on the same codebase without conflicts. See [http://en.wikipedia.org/wiki/Subversion_(software) Wikipedia] for more information.<br />
<br />
=== Where do I get SVN builds? ===<br />
We officially use the automated SVN builds from DeSmuME user Orphis: [http://buildbot.orphis.net/desmume/]<br />
<br />
Other third-parties may offer SVN builds, such as [http://www.emucr.com EmuCR]. Please note that any third-party build is both unofficial and unsupported.<br />
<br />
=== How do I get the latest SVN code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
* Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
* Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* Mac: Any of the compilers built into Xcode 3.1.4 all the way up to the latest Xcode is supported. You may also use a non-Xcode toolchain, such as MacPorts GCC, but this is currently unsupported.<br />
* Linux: Any recent version of GCC and toolchain should work. However, we do not recommend GCC 4.9, since there are bugs with this GCC version that interfere with DeSmuME.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
[''Windows only''] For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the visual c++ express 2008 installer and I can't find it. ===<br />
Download link: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Patches may be submitted to our [https://sourceforge.net/p/desmume/patches/ patches tracker] on SourceForge. Any patches submitted will be subject to a code review by our developer team, where we will then determine if the patch should be included in the codebase or not.<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== Im not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile SVN builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on IRC. Also, adding to or perfecting the documentation in the Wiki is useful. You could also watch for and help answer questions placed on the [http://forums.desmume.org DeSmuME forum].<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://problemkaputt.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a Compact Flash image<br />
<br />
<br />
== Mac Users ==<br />
<br />
=== I just downloaded DeSmuME, but I can't launch it because "it is from an unidentified developer." What gives? ===<br />
Apple introduced a security policy called [https://support.apple.com/en-us/HT202491 Gatekeeper] on OS X v10.8 Mountain Lion to help protect users from malware. However, since DeSmuME is a free open-source app, we don't want to invest money into properly code signing the app for the sake of proving that we are legitimate app and not just another piece of malware. If you are concerned about the legitimacy of DeSmuME.app, then always make sure to download it from our [http://desmume.org/download official Downloads page].<br />
<br />
If OS X prevents you from launching DeSmuME.app because "it is from an unidentified developer", do this:<br />
* In the Finder, right-click (or Control-click) DeSmuME.app, then in the contextual menu, choose Open. A warning box will appear, saying that DeSmuME.app "is from an unidentified developer." In the warning box, click Open to proceed with launching DeSmuME.app.<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories.<br />
<br />
Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
As of this release, all of the DeSmuME features that exist in the Windows port also exist in the Mac port, except for the following:<br />
* The HUD<br />
* Custom path settings<br />
* AVI / WAV recording<br />
* The various tools listed in the Tools menu<br />
* RAM Watch / RAM Search<br />
* Lua scripting<br />
<br />
While we are actively working to attain full feature parity between the Mac and Windows ports, this will still take some time to achieve.<br />
<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogermanhttps://wiki.desmume.org/index.php?title=Faq_0_9_10Faq 0 9 102015-03-29T19:26:09Z<p>Rogerman: Created page with "'''DeSmuME FAQ 0.9.10''' This FAQ holds a list of many commonly asked questions about DeSmuME. If you need information about an older version, refer to one of the older FAQs fo..."</p>
<hr />
<div>'''DeSmuME FAQ 0.9.10'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
* FAQ 0.9.9, [[Faq_099]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped? [http://wiki.desmume.org/index.php?title=File:Xbutton_1.png] [http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! ===<br />
Make sure you are using the latest version of the emulator.<br />
Delete your ini file and re-run the emulator.<br />
Quit using patched roms. Remove the AP (Anti-piracy) patch from the rom.<br />
Quit using cheats.<br />
Use/dump external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games</strong>. Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Read the [[KnowledgeBase]]<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3d renderers. Quit using frameskip.<br />
* Do not use patched roms. Never use patched roms.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
* Stop using savestates. Use in-game saves.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot.<br />
* Go to desmume.org and make sure you are using the latest version. The latest version is 0.9.9. (DeSmuME 0.8 and 0.3.4 are old and unsupported)<br />
* Turn off your virus scanner.<br />
* Config > Emulation Settings > Enable Advanced Bus-Level Timing - this will slow down emulation, but fix some games.<br />
* Use external BIOS images; try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your .ini file which may have options that are breaking your DeSmuME.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary<br />
<br />
If it really doesn't boot up no matter what you try, you can submit a bug report for the game on the Sourceforge bugtracker.<br />
You might also find ways to patch the games to work better on emulators by searching on the internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using desmume! ===<br />
This is not desmume's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
Yeah, for you and everyone else. New releases may always be a step backwards in some (or many) cases from earlier releases in terms of speed. There is a delicate balance between compatibility and speed and sometimes one advances further than the other. <br />
<br />
I will be frank: DeSmuME focuses more on compatibility and perks than on speed. Our philosophy is, you can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility and perks. We take care of our side of things, so you should take care of yours.<br />
<br />
At any rate, here is the master list of tricks to speed things up:<br />
<br />
* Use the Dynamic Recompiler (JIT) option.<br />
* Don't use external BIOS images.<br />
* If you ARE using external BIOS images, (or must for some reason) try enabling Patch DelayLoop SWI<br />
* Try switching between OpenGL Renderer and Software Rasterizer. You may not like the results, but it may get you more speed.<br />
* Disable this option: Config > Emulation Settings > Enable Bus-Level Timing.<br />
* Use Dual SPU in the Sound Settings, and don't use Advanced SPU Logic.<br />
* In the Sound Settings, set interpolation to none.<br />
* If you can handle it, turn off the sound altogether. Try listening to a shoutcast instead; I recommend happyday new age or ah.fm!<br />
* Don't use the NOSSE2 build.<br />
* Don't use someone else's unofficial "SVN" build, it probably is not fully optimized, since we make our Windows releases using some profiler-guided optimization, which helps by several FPS.<br />
* Use frame skip. Even frameskipping by 1 will help and many games will stay playable. Frameskipping is continually tweaked in each release to get more bang for the buck, but beware that dual screen 3d games still may not work well under frameskip. If screens seem stuck, pick a different frameskip value.<br />
* There is now the option of disabling an entire screen. (Tools > View Layers > Main GPU, etc) Consider disabling a screen which is useless in the game you are playing. NOTE: View > LCDs Layout > One LCD *WILL NOT* increase your speed. This merely hides the lcd, but it is still rendered. This is important for dual screen games and other weird cases.<br />
* Don't scale the window anything different than 1x and don't use resize filters.<br />
* If you are using the software rasterizer, disable edge marking and fog if you feel like they aren't needed. If the game isn't using those features then this won't help.<br />
* Buying a newer, faster computer is somewhat more expensive, but it has other side benefits. <br />
* Don't use a netbook.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
* Your graphics card is irrelevant. Upgrade your CPU.<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
Try disabling the speed limiter and crank up the frameskip setting. They are both found in the config menu. Don't expect any miracles, more than 1.5 the base speed is unlikely.<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in O SX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
Additionally games using flash memory wont save due to that save type simply not being implemented fully. Here is a partial list of those:<br />
* Warioware D.I.Y.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmume window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. Desmume tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows OS: Windows XP SP2 or later<br />
* Mac OS: OS X v10.5.8 Leopard or later<br />
* Linux OS: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows OS: Windows Vista SP2 or later<br />
* Mac OS: OS X v10.6.8 Snow Leopard or later<br />
* Linux OS: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
[''Windows''] For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
<br />
* If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
* If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
* If you want to use the developer features, use the dev build. It includes extra debugging code and logging, as well as gdb_stub.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
[''Windows / Mac / Linux''] Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.4GHz CPU will run DeSmuME much faster than an 8-core 1.7GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
[''Windows / Mac / Linux''] Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
[''Windows''] The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
[''Windows / Mac / Linux''] By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
[''Windows / Mac''] Yes, you can display the DS screens in full-screen mode.<br />
<br />
* Windows: Click the DeSmuME window and press Alt-Enter. <br />
* Mac: Click the display window that you want to make full screen. Then choose View > Enter Full Screen.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
[''Mac''] Yes, you can display each DS screen in separate windows. In Mac DeSmuME, choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
[''Windows / Mac / Linux''] Each port supports most or all of the video output settings, but have different user interfaces for changing these settings.<br />
<br />
* Windows: To change the video filter, choose View > Magnification Filters. To toggle bilinear filtering, choose Config > Display Method. <br />
* Mac: To show all video settings, choose View > Show Display Video Settings. You can then change any video setting from the Display Video Settings panel.<br />
* Linux: To change the video filter, choose Config > Primary Interpolation. To change the final video output, choose Config > Secondary Interpolation.<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
[''Windows / Mac / Linux''] Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported in all DeSmuME versions.<br />
<br />
* Windows: Has full microphone support. If you want to use a physical microphone, you must configure it through your Windows Control Panel and set it up as the default audio input device. Be sure to set your mic gain to an appropriate level to avoid too much clipping.<br />
* Mac: Does not support using a physical microphone. Instead, you are limited to using one of the simulated microphone commands.<br />
* Linux: Requires libasound in order to use a physical microphone.<br />
<br />
If you are using a simulated microphone, you will have to experiment with the microphone hotkey timing. Each press of the hotkey simulates audio running through the DS microphone. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
<br />
'''TIP:''' Remove the 'wind deflector' that comes with most microphones these days for better results.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
[[List_of_Nintendo_DS_games_with_GBA_connectivity]]<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
[''Windows / Mac / Linux''] This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
[''Windows / Mac / Linux''] By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked ? ===<br />
No. A real NDS uses WIFI for multiplayer, and that isn't emulated in DeSmuME yet. Also, look at the questions on [[Faq#Wi-Fi and WFC|WIFI Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
Wifi is not supported. It isn't finished yet, it is experimental, and you're better off not wasting your time trying to use it. Don't bug us on the forums when you discover that it doesn't work; that's what "not supported" means.<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future? ===<br />
Most likely, DeSmuME will not support the emulation of the Nintendo 3DS or Nintendo 2DS in the future. The hardware of both a 3DS and a 2DS are very different from an NDS, so emulating a 3DS/2DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
In the [http://sourceforge.net/tracker/?group_id=164579&atid=832291 official bug tracker]. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
* All known 2D graphics features are correct. Mosaics work but are imperfect. There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
<br />
* With the software rasterizer, all 3D features are emulated, except the following: wireframes and antialising. The OpenGL Renderer fails for some other features; it is near its limit and may never be fixed. Both engines have trouble with some shadows, but software rasterizer is better. The software rasterizer has some noticeable texturing issues right now, especially in 2d games. In software rasterizer, there are issues similar to 2d with incorrect bit depth being used in the pipeline. <br />
<br />
One last thing -- if buttons and labels and menus rendering on the 3d screen are obscured (for example, a button but no label is on it) then you may need to use the software rasterizer. Or you may need to use OpenGL instead. Each renderer has strengths and weaknesses, which is why both are provided.<br />
<br />
* All sound features are emulated. The microphone support is new and the manual should be consulted, where you will find out, among other things, that it is only supported in windows right now.<br />
<br />
* We are unaware of any outstanding issues in the core system hardware (CPU, DMA, MMU) but there are certainly still some. The instruction and memory timings are quite incorrect; however, this seems not to hurt most titles.<br />
<br />
* DLDI - Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
'''Warning''' - As of june 2010, it has become suspected that our compact flash emulation has bugs which sometimes prevent access to the first subdirectory in the FAT filesystem; and that causes FAT images which are written to, to become corrupted. We need a FAT expert to help us out, as I think both bugs are related.<br />
'''Warning''' - As of september 2010, FAT support has been rewritten and indeed it fixed the bugs mentioned above, but it doesn't support LFN yet.<br />
<br />
=== Does the GDB stub still work? ===<br />
[''Windows''] It is present in the dev build.<br />
<br />
=== How do I enable the GDB stub? ===<br />
[''Windows''] Add #define GDB_STUB to src/windows/userconfig/userconfig.h which you have created according to the instructions in src/windows/defaultconfig/userconfig.h ; sorry for this confusing system, but that's how it is for now.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an on-line communications system. <br />
<br />
Information you'll need:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
Programs you'll need:<br />
* mIRC - Windows<br />
* ChatZilla - Firefox add-on<br />
* XChat - Linux, Windows<br />
* plenty other, see [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients wikipedia]<br />
<br />
Language:<br />
* Most of the people on the channel speak, or try to speak the English language.<br />
<br />
=== Where is the manual? ===<br />
Over [http://wiki.desmume.org/index.php?title=Manual here]. It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
== SVN and Compiling ==<br />
<br />
=== Where do I get svn builds? ===<br />
[http://www.emucr.com emucr]. Please note that these builds are unofficial and unsupported.<br />
<br />
=== Why doesn't the DeSmuME team release pre-build SVN binaries ? ===<br />
The DeSmuME team doesn't have trusted people to make the builds, and don't want to get involved on builds that could include whatever the author wants. Every newbie coder could do a version that, after 10 minutes of gameplay, for example, starts corrupting stuff from the hard disk. Also, anyone incapable of building it's own builds, probably isn't very helpful for submitting bug reports or helping the development team on SVN releases, so there isn't much point on them getting a SVN build.<br />
<br />
=== How do I get the latest svn code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ svn] is a developers tool. It's used to let multiple developers work on the same codebase without conflicts. If you're an end-user, don't worry about it. If you're a developer, see the question on how to get the latest svn code and build DeSmuME yourself. See [http://en.wikipedia.org/wiki/Subversion_(software) wikipedia] for more info.<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
* Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
* Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* For Linux, any recent version of GCC and toolchain should work.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the visual c++ express 2008 installer and I can't find it. ===<br />
It's there if you click around more. I'll save you time: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Please add them to the appropriate sourceforge tracker. Patches go to the 'Patches' tracker : http://sourceforge.net/tracker/?group_id=164579&atid=832293<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== Im not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile svn builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on irc. Also, adding to or perfecting the documentation in the wiki is useful. You could also watch for and answer questions placed on the DeSmuME forum.<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://nocash.emubase.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a compact flash image<br />
<br />
== Mac Users ==<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories. Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogermanhttps://wiki.desmume.org/index.php?title=Release_0.9.10Release 0.9.102015-03-11T06:58:34Z<p>Rogerman: </p>
<hr />
<div>'''Release Date: November 28, 2013 (r4623-r4908)'''<br />
<br />
In this version, we have focused on trying to clean up some complexities in the user experience and emulator internals. Pretty unglamorous stuff, but some games are newly compatible.<br />
<br />
General/Core:<br />
enh: break savestate back-compatibility<br />
bug: improve save size autodetection for some games<br />
bug: cpu: fix many basic jit cpu bugs<br />
bug: 3d: tweak softrasterizer edge marking<br />
bug: 3d: fix stale 4x4 texture palettes<br />
bug: fix some GPU sprite blending scenarios<br />
bug: fix bios HLE BitUnPack, UnCompHuffman<br />
enh: modular slot-1 device system, emulate GC bus more faithfully<br />
enh: support NAND slot-1 device<br />
enh: auto-detect appropriate slot-1 and slot-2 device<br />
enh: many revisions to firmware boot process for more authenticity. iQue and FlashME versions function, .dfc rewritten.<br />
enh: support streaming NDS file from disk (like an ISO, to avoid long initial load time)<br />
enh: run .dsv directly on disk, to save long flushing times. should speed backup operations.<br />
enh: spu synch mode and method on commandline<br />
<br />
Windows:<br />
bug: fixes to advanscene DB import<br />
bug: save opengl display method filter option<br />
bug: general bugfixes to various screen layout modes<br />
enh: add option to stop non-integer scaling during fullscreen or maximize<br />
enh: improvements to save import dialog<br />
enh: improved memory viewer tool<br />
enh: operate better when run, against our advice, from a zipfile<br />
enh: add slot-1 Nitro Filesystem viewer tool<br />
<br />
Cocoa:<br />
bug: fix slot1-R4 path saving<br />
bug: fix bug with mic samples < 16khz<br />
bug: fix bugs and enhancements in multi display windows<br />
bug: fix handling of some joystick analog inputs<br />
enh: save display windows configuration and emulation speed on app exit</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2015-02-14T23:21:42Z<p>Rogerman: /* Build Compatibility */</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for OS X may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files (provided with the DeSmuME source,) provide several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== OS X App ===<br />
These build targets produce a self-contained OS X application package (or "app bundle"). These builds use our official OS X frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with OS X v10.6 or later. (Also compatible with OS X v10.5 if building from the Xcode 3 project).<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different OS X versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running OS X v10.5 or later, and Xcode v3.1.4 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with OS X v10.5 requires Xcode 3 to build.<br />
<br />
<br />
=== OS X App (dev+) ===<br />
This build target is just like the normal OS X App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of OS X.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running Xcode v4.6.3 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.7 or later.<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
=== OS X App (Final Release) ===<br />
This build target is for producing final release versions of DeSmuME. These builds will use our official OS X frontend contained in an OS X app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports both 32-bit and 64-bit.<br />
* Binaries are compatible with OS X v10.5 and later.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running the latest version of OS X and Xcode.<br />
* Building the app for release takes more steps than other builds.<br />
* Requires Xcode 3 to build.<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.7 or later.<br />
* Binaries only run on machines with 64-bit Intel processors running OS X v10.7 or later.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user.<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the desmume/src/cocoa directory of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.1.4 (if running on Leopard); v3.2.6 (if running on Snow Leopard or later)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| v4.6.3 or later<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3 if any of the following conditions apply:<br />
* You are running OS X v10.5 or v10.6.<br />
* You are building an OS X App that runs on OS X v10.5.<br />
* You are building an OS X App that runs on PowerPC processors.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
You must use Xcode 4 or later if any of the following conditions apply:<br />
* You are running OS X v10.7 or later.<br />
* You are building an OpenEmu Plug-in.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
'''Note:''' ''Xcode 3 is not compatible with OS X v10.10 Yosemite. If you require the use of Xcode 3, you will need to run it on an older version of OS X.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode v3.1.4 Direct Download Link (for Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.1.4_developer_tools/xcode314_2809_developerdvd.dmg<br />
* Xcode v3.2.6 Direct Download Link (for Snow Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running Lion or later and have any Apple ID, then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link (for Lion or later): https://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* If you are planning on making legacy builds, select the Mac OS X 10.4 SDK.<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up the Latest Version of Xcode ====<br />
When you download Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using Subversion (SVN) and is hosted on SourceForge. In this section, we describe some common methods for downloading the source code. (In reality, there are many methods for downloading the source code, but those methods are beyond the scope of this document.)<br />
<br />
<br />
=== Download via SourceForge Web Interface ===<br />
These instructions will download the DeSmuME source code from the SourceForge Web Interface using your web browser.<br />
<br />
1. Follow this link to DeSmuME's SourceForge Web Interface: http://desmume.svn.sourceforge.net/viewvc/desmume/<br />
<br />
2. Click "Download GNU tarball" to start the download.<br />
<br />
3. Once the download completes, expand the tarball using your decompression program. (By default, you should be using OS X's built in decompressor. In this case, just open the .tar file to expand the tarball.)<br />
<br />
<br />
=== Download via Command Line ===<br />
These instructions will download the DeSmuME source code to your desktop.<br />
<br />
1. Open Terminal.app.<br />
<br />
2. In the command prompt, enter the following exactly as shown:<br />
svn co https://desmume.svn.sourceforge.net/svnroot/desmume ~/Desktop/desmume<br />
'''Note:''' ''If you want to change the destination directory to a directory other than your desktop, change the "~/Desktop/desmume" part to the directory of your choice.''<br />
<br />
3. At this point, the download should start. However, if instead there is a message about an untrusted certificate, enter the following exactly as shown:<br />
p<br />
<br />
<br />
=== Download via Xcode 4 Organizer ===<br />
These instructions are for Xcode 4 users that wish to use the Organizer for downloading the DeSmuME source code.<br />
<br />
1. Open Xcode.app.<br />
<br />
2. Choose Window > Organizer.<br />
<br />
3. In the Organizer window, click Repositories.<br />
<br />
4. In the bottom-left corner, click the + button, then choose Checkout or Clone Repository.<br />
<br />
5. In the Location field, enter the following exactly as shown:<br />
https://desmume.svn.sourceforge.net/svnroot/desmume<br />
<br />
6. After Xcode confirms that the host is reachable, click Checkout.<br />
<br />
7. In the file navigation sheet, choose a folder to save the source code to, then click Checkout.<br />
<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/trunk/desmume/src/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (XCode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== OS X App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the four build targets.<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/trunk/desmume/src/cocoa/build/Release" folder.<br />
<br />
==== Building Using the Latest Version of Xcode ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App).<br />
<br />
3. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
4. After the app launches, go back to Xcode.<br />
<br />
5. In Xcode, choose Product > Build For > Profiling.<br />
<br />
6. Right-click the DeSmuME (Debug) app in the dock, and then choose Options > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the app.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
And you're done! The newly built app will be present in the "Release" folder. You may quit the DeSmuME (Debug).app if you want.<br />
<br />
''Note: You may want to create an alias to this folder so that it is easier to access in the future.''<br />
<br />
<br />
=== OS X App Dev+ Build ===<br />
The steps here are similar to that of the normal OS X App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 4 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App, dev+).<br />
<br />
3. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
4. After the app launches, go back to Xcode.<br />
<br />
5. In Xcode, choose Product > Build For > Profiling.<br />
<br />
6. Right-click the DeSmuME (Debug, dev+) app in the dock, and then choose Options > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the app.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
And you're done! The newly built app will be present in the "Release" folder. You may quit the DeSmuME (Debug, dev+).app if you want.<br />
<br />
''Note: You may want to create an alias to this folder so that it is easier to access in the future.''<br />
<br />
<br />
=== OS X App Build for Final Release ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode 3.2.6 (this specific version) and the latest version of Xcode installed.<br />
* You must be running the latest version of OS X. At the time of this writing, the latest version is v10.10 Yosemite.<br />
<br />
<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (OS X App; PowerPC Release Build)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build. This will make a new app called "DeSmuME (PPC).app" in the "/trunk/desmume/src/cocoa/build/Release" folder.<br />
<br />
7. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
8. Choose Product > Scheme > DeSmuME (OS X App; v10.5 Leopard Release Build).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
11. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
12. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME.app will automatically launch.<br />
<br />
13. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
14. After all PGO exercises are complete, quit DeSmuME.app. Xcode should now report that it has generated an optimization profile.<br />
<br />
15. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish.<br />
<br />
And you're done! The newly built app will be present in the "/trunk/desmume/src/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the desmume/src/cocoa/openemu directory, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > OpenEmuBase.<br />
<br />
3. Click Run. This will build a Debug version of the framework.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show "OpenEmuBase.framework".<br />
<br />
6. Click "OpenEmuBase.framework", and then choose File > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version framework.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Move OpenEmuBase.framework into the desmume/src/cocoa/openemu directory.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the desmume/src/cocoa/openemu directory. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in).<br />
<br />
3. Click Run. This will build a Debug version of the plug-in.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show the "DeSmuME.oecoreplugin" bundle.<br />
<br />
6. Click "DeSmuME.oecoreplugin", and then choose Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version plug-in.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Choose New > New Finder Window.<br />
<br />
11. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
12. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
13. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app.<br />
<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="150" |<br />
! scope="col" width="150" | OS X App<br />
! scope="col" width="150" | OS X App (dev+)<br />
! scope="col" width="150" | OS X App (Final Release)<br />
! scope="col" width="150" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| Yes[1]<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| Yes[1]<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.5 (Leopard)<br />
| Yes<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.6 (Snow Leopard)<br />
| Yes<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | OS X v10.7 (Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.8 (Mountain Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.9 (Mavericks)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.10 (Yosemite)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|}<br />
<br />
1. Available only by configuration in Xcode 3.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2015-02-04T02:24:28Z<p>Rogerman: /* OpenEmu Plug-in */</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for OS X may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files (provided with the DeSmuME source,) provide several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== OS X App ===<br />
These build targets produce a self-contained OS X application package (or "app bundle"). These builds use our official OS X frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with OS X v10.6 or later. (Also compatible with OS X v10.5 if building from the Xcode 3 project).<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different OS X versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running OS X v10.5 or later, and Xcode v3.1.4 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with OS X v10.5 requires Xcode 3 to build.<br />
<br />
<br />
=== OS X App (dev+) ===<br />
This build target is just like the normal OS X App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of OS X.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running Xcode v4.6.3 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.7 or later.<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
=== OS X App (Final Release) ===<br />
This build target is for producing final release versions of DeSmuME. These builds will use our official OS X frontend contained in an OS X app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports both 32-bit and 64-bit.<br />
* Binaries are compatible with OS X v10.5 and later.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running the latest version of OS X and Xcode.<br />
* Building the app for release takes more steps than other builds.<br />
* Requires Xcode 3 to build.<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving that the core source code is modular enough to be integrated with third-party frontends.<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Plug-ins are much smaller in size compared to full application builds.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.7 or later.<br />
* Binaries only run on machines with 64-bit Intel processors running OS X v10.7 or later.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user.<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the desmume/src/cocoa directory of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.1.4 (if running on Leopard); v3.2.6 (if running on Snow Leopard or later)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| v4.6.3 or later<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3 if any of the following conditions apply:<br />
* You are running OS X v10.5 or v10.6.<br />
* You are building an OS X App that runs on OS X v10.5.<br />
* You are building an OS X App that runs on PowerPC processors.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
You must use Xcode 4 or later if any of the following conditions apply:<br />
* You are running OS X v10.7 or later.<br />
* You are building an OpenEmu Plug-in.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
'''Note:''' ''Xcode 3 is not compatible with OS X v10.10 Yosemite. If you require the use of Xcode 3, you will need to run it on an older version of OS X.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode v3.1.4 Direct Download Link (for Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.1.4_developer_tools/xcode314_2809_developerdvd.dmg<br />
* Xcode v3.2.6 Direct Download Link (for Snow Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running Lion or later and have any Apple ID, then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link (for Lion or later): https://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* If you are planning on making legacy builds, select the Mac OS X 10.4 SDK.<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up the Latest Version of Xcode ====<br />
When you download Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using Subversion (SVN) and is hosted on SourceForge. In this section, we describe some common methods for downloading the source code. (In reality, there are many methods for downloading the source code, but those methods are beyond the scope of this document.)<br />
<br />
<br />
=== Download via SourceForge Web Interface ===<br />
These instructions will download the DeSmuME source code from the SourceForge Web Interface using your web browser.<br />
<br />
1. Follow this link to DeSmuME's SourceForge Web Interface: http://desmume.svn.sourceforge.net/viewvc/desmume/<br />
<br />
2. Click "Download GNU tarball" to start the download.<br />
<br />
3. Once the download completes, expand the tarball using your decompression program. (By default, you should be using OS X's built in decompressor. In this case, just open the .tar file to expand the tarball.)<br />
<br />
<br />
=== Download via Command Line ===<br />
These instructions will download the DeSmuME source code to your desktop.<br />
<br />
1. Open Terminal.app.<br />
<br />
2. In the command prompt, enter the following exactly as shown:<br />
svn co https://desmume.svn.sourceforge.net/svnroot/desmume ~/Desktop/desmume<br />
'''Note:''' ''If you want to change the destination directory to a directory other than your desktop, change the "~/Desktop/desmume" part to the directory of your choice.''<br />
<br />
3. At this point, the download should start. However, if instead there is a message about an untrusted certificate, enter the following exactly as shown:<br />
p<br />
<br />
<br />
=== Download via Xcode 4 Organizer ===<br />
These instructions are for Xcode 4 users that wish to use the Organizer for downloading the DeSmuME source code.<br />
<br />
1. Open Xcode.app.<br />
<br />
2. Choose Window > Organizer.<br />
<br />
3. In the Organizer window, click Repositories.<br />
<br />
4. In the bottom-left corner, click the + button, then choose Checkout or Clone Repository.<br />
<br />
5. In the Location field, enter the following exactly as shown:<br />
https://desmume.svn.sourceforge.net/svnroot/desmume<br />
<br />
6. After Xcode confirms that the host is reachable, click Checkout.<br />
<br />
7. In the file navigation sheet, choose a folder to save the source code to, then click Checkout.<br />
<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/trunk/desmume/src/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (XCode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== OS X App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the four build targets.<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/trunk/desmume/src/cocoa/build/Release" folder.<br />
<br />
==== Building Using the Latest Version of Xcode ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App).<br />
<br />
3. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
4. After the app launches, go back to Xcode.<br />
<br />
5. In Xcode, choose Product > Build For > Profiling.<br />
<br />
6. Right-click the DeSmuME (Debug) app in the dock, and then choose Options > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the app.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
And you're done! The newly built app will be present in the "Release" folder. You may quit the DeSmuME (Debug).app if you want.<br />
<br />
''Note: You may want to create an alias to this folder so that it is easier to access in the future.''<br />
<br />
<br />
=== OS X App Dev+ Build ===<br />
The steps here are similar to that of the normal OS X App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 4 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App, dev+).<br />
<br />
3. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
4. After the app launches, go back to Xcode.<br />
<br />
5. In Xcode, choose Product > Build For > Profiling.<br />
<br />
6. Right-click the DeSmuME (Debug, dev+) app in the dock, and then choose Options > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the app.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
And you're done! The newly built app will be present in the "Release" folder. You may quit the DeSmuME (Debug, dev+).app if you want.<br />
<br />
''Note: You may want to create an alias to this folder so that it is easier to access in the future.''<br />
<br />
<br />
=== OS X App Build for Final Release ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode 3.2.6 (this specific version) and the latest version of Xcode installed.<br />
* You must be running the latest version of OS X. At the time of this writing, the latest version is v10.10 Yosemite.<br />
<br />
<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (OS X App; PowerPC Release Build)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build. This will make a new app called "DeSmuME (PPC).app" in the "/trunk/desmume/src/cocoa/build/Release" folder.<br />
<br />
7. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
8. Choose Product > Scheme > DeSmuME (OS X App; v10.5 Leopard Release Build).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
11. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
12. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME.app will automatically launch.<br />
<br />
13. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
14. After all PGO exercises are complete, quit DeSmuME.app. Xcode should now report that it has generated an optimization profile.<br />
<br />
15. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish.<br />
<br />
And you're done! The newly built app will be present in the "/trunk/desmume/src/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the desmume/src/cocoa/openemu directory, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > OpenEmuBase.<br />
<br />
3. Click Run. This will build a Debug version of the framework.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show "OpenEmuBase.framework".<br />
<br />
6. Click "OpenEmuBase.framework", and then choose File > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version framework.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Move OpenEmuBase.framework into the desmume/src/cocoa/openemu directory.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the desmume/src/cocoa/openemu directory. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in).<br />
<br />
3. Click Run. This will build a Debug version of the plug-in.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show the "DeSmuME.oecoreplugin" bundle.<br />
<br />
6. Click "DeSmuME.oecoreplugin", and then choose Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version plug-in.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Choose New > New Finder Window.<br />
<br />
11. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
12. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
13. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app.<br />
<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="150" |<br />
! scope="col" width="150" | OS X App<br />
! scope="col" width="150" | OS X App (dev+)<br />
! scope="col" width="150" | OS X App (Final Release)<br />
! scope="col" width="150" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| Yes[1]<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| Yes[1]<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.5 (Leopard)<br />
| Yes<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | OS X v10.6 (Snow Leopard)<br />
| Yes<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | OS X v10.7 (Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.8 (Mountain Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.9 (Mavericks)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.10 (Yosemite)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|}<br />
<br />
1. Available only by configuration in Xcode 3.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2015-02-04T02:16:24Z<p>Rogerman: /* Building and installing OpenEmuBase.framework from source */</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for OS X may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files (provided with the DeSmuME source,) provide several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== OS X App ===<br />
These build targets produce a self-contained OS X application package (or "app bundle"). These builds use our official OS X frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with OS X v10.6 or later. (Also compatible with OS X v10.5 if building from the Xcode 3 project).<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different OS X versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running OS X v10.5 or later, and Xcode v3.1.4 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with OS X v10.5 requires Xcode 3 to build.<br />
<br />
<br />
=== OS X App (dev+) ===<br />
This build target is just like the normal OS X App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of OS X.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running Xcode v4.6.3 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.7 or later.<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
=== OS X App (Final Release) ===<br />
This build target is for producing final release versions of DeSmuME. These builds will use our official OS X frontend contained in an OS X app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports both 32-bit and 64-bit.<br />
* Binaries are compatible with OS X v10.5 and later.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running the latest version of OS X and Xcode.<br />
* Building the app for release takes more steps than other builds.<br />
* Requires Xcode 3 to build.<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving good code modularity in the source.<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Built plug-ins are much smaller in size than full application builds.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.7 or later.<br />
* Binaries only run on machines with 64-bit Intel processors running OS X v10.7 or later.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user.<br />
<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the desmume/src/cocoa directory of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.1.4 (if running on Leopard); v3.2.6 (if running on Snow Leopard or later)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| v4.6.3 or later<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3 if any of the following conditions apply:<br />
* You are running OS X v10.5 or v10.6.<br />
* You are building an OS X App that runs on OS X v10.5.<br />
* You are building an OS X App that runs on PowerPC processors.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
You must use Xcode 4 or later if any of the following conditions apply:<br />
* You are running OS X v10.7 or later.<br />
* You are building an OpenEmu Plug-in.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
'''Note:''' ''Xcode 3 is not compatible with OS X v10.10 Yosemite. If you require the use of Xcode 3, you will need to run it on an older version of OS X.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode v3.1.4 Direct Download Link (for Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.1.4_developer_tools/xcode314_2809_developerdvd.dmg<br />
* Xcode v3.2.6 Direct Download Link (for Snow Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running Lion or later and have any Apple ID, then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link (for Lion or later): https://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* If you are planning on making legacy builds, select the Mac OS X 10.4 SDK.<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up the Latest Version of Xcode ====<br />
When you download Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using Subversion (SVN) and is hosted on SourceForge. In this section, we describe some common methods for downloading the source code. (In reality, there are many methods for downloading the source code, but those methods are beyond the scope of this document.)<br />
<br />
<br />
=== Download via SourceForge Web Interface ===<br />
These instructions will download the DeSmuME source code from the SourceForge Web Interface using your web browser.<br />
<br />
1. Follow this link to DeSmuME's SourceForge Web Interface: http://desmume.svn.sourceforge.net/viewvc/desmume/<br />
<br />
2. Click "Download GNU tarball" to start the download.<br />
<br />
3. Once the download completes, expand the tarball using your decompression program. (By default, you should be using OS X's built in decompressor. In this case, just open the .tar file to expand the tarball.)<br />
<br />
<br />
=== Download via Command Line ===<br />
These instructions will download the DeSmuME source code to your desktop.<br />
<br />
1. Open Terminal.app.<br />
<br />
2. In the command prompt, enter the following exactly as shown:<br />
svn co https://desmume.svn.sourceforge.net/svnroot/desmume ~/Desktop/desmume<br />
'''Note:''' ''If you want to change the destination directory to a directory other than your desktop, change the "~/Desktop/desmume" part to the directory of your choice.''<br />
<br />
3. At this point, the download should start. However, if instead there is a message about an untrusted certificate, enter the following exactly as shown:<br />
p<br />
<br />
<br />
=== Download via Xcode 4 Organizer ===<br />
These instructions are for Xcode 4 users that wish to use the Organizer for downloading the DeSmuME source code.<br />
<br />
1. Open Xcode.app.<br />
<br />
2. Choose Window > Organizer.<br />
<br />
3. In the Organizer window, click Repositories.<br />
<br />
4. In the bottom-left corner, click the + button, then choose Checkout or Clone Repository.<br />
<br />
5. In the Location field, enter the following exactly as shown:<br />
https://desmume.svn.sourceforge.net/svnroot/desmume<br />
<br />
6. After Xcode confirms that the host is reachable, click Checkout.<br />
<br />
7. In the file navigation sheet, choose a folder to save the source code to, then click Checkout.<br />
<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/trunk/desmume/src/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (XCode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== OS X App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the four build targets.<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/trunk/desmume/src/cocoa/build/Release" folder.<br />
<br />
==== Building Using the Latest Version of Xcode ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App).<br />
<br />
3. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
4. After the app launches, go back to Xcode.<br />
<br />
5. In Xcode, choose Product > Build For > Profiling.<br />
<br />
6. Right-click the DeSmuME (Debug) app in the dock, and then choose Options > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the app.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
And you're done! The newly built app will be present in the "Release" folder. You may quit the DeSmuME (Debug).app if you want.<br />
<br />
''Note: You may want to create an alias to this folder so that it is easier to access in the future.''<br />
<br />
<br />
=== OS X App Dev+ Build ===<br />
The steps here are similar to that of the normal OS X App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 4 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App, dev+).<br />
<br />
3. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
4. After the app launches, go back to Xcode.<br />
<br />
5. In Xcode, choose Product > Build For > Profiling.<br />
<br />
6. Right-click the DeSmuME (Debug, dev+) app in the dock, and then choose Options > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the app.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
And you're done! The newly built app will be present in the "Release" folder. You may quit the DeSmuME (Debug, dev+).app if you want.<br />
<br />
''Note: You may want to create an alias to this folder so that it is easier to access in the future.''<br />
<br />
<br />
=== OS X App Build for Final Release ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode 3.2.6 (this specific version) and the latest version of Xcode installed.<br />
* You must be running the latest version of OS X. At the time of this writing, the latest version is v10.10 Yosemite.<br />
<br />
<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (OS X App; PowerPC Release Build)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build. This will make a new app called "DeSmuME (PPC).app" in the "/trunk/desmume/src/cocoa/build/Release" folder.<br />
<br />
7. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
8. Choose Product > Scheme > DeSmuME (OS X App; v10.5 Leopard Release Build).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
11. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
12. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME.app will automatically launch.<br />
<br />
13. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
14. After all PGO exercises are complete, quit DeSmuME.app. Xcode should now report that it has generated an optimization profile.<br />
<br />
15. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish.<br />
<br />
And you're done! The newly built app will be present in the "/trunk/desmume/src/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the desmume/src/cocoa/openemu directory, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > OpenEmuBase.<br />
<br />
3. Click Run. This will build a Debug version of the framework.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the framework.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show "OpenEmuBase.framework".<br />
<br />
6. Click "OpenEmuBase.framework", and then choose File > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version framework.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Move OpenEmuBase.framework into the desmume/src/cocoa/openemu directory.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the desmume/src/cocoa/openemu directory. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in).<br />
<br />
3. Click Run. This will build a Debug version of the plug-in.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show the "DeSmuME.oecoreplugin" bundle.<br />
<br />
6. Click "DeSmuME.oecoreplugin", and then choose Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version plug-in.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Choose New > New Finder Window.<br />
<br />
11. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
12. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
13. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app.<br />
<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="150" |<br />
! scope="col" width="150" | OS X App<br />
! scope="col" width="150" | OS X App (dev+)<br />
! scope="col" width="150" | OS X App (Final Release)<br />
! scope="col" width="150" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| Yes[1]<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| Yes[1]<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.5 (Leopard)<br />
| Yes<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | OS X v10.6 (Snow Leopard)<br />
| Yes<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | OS X v10.7 (Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.8 (Mountain Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.9 (Mavericks)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.10 (Yosemite)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|}<br />
<br />
1. Available only by configuration in Xcode 3.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2015-01-20T19:39:48Z<p>Rogerman: /* Build Compatibility */</p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for OS X may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files (provided with the DeSmuME source,) provide several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== OS X App ===<br />
These build targets produce a self-contained OS X application package (or "app bundle"). These builds use our official OS X frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with OS X v10.6 or later. (Also compatible with OS X v10.5 if building from the Xcode 3 project).<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different OS X versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running OS X v10.5 or later, and Xcode v3.1.4 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with OS X v10.5 requires Xcode 3 to build.<br />
<br />
<br />
=== OS X App (dev+) ===<br />
This build target is just like the normal OS X App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of OS X.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running Xcode v4.6.3 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.7 or later.<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
=== OS X App (Final Release) ===<br />
This build target is for producing final release versions of DeSmuME. These builds will use our official OS X frontend contained in an OS X app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports both 32-bit and 64-bit.<br />
* Binaries are compatible with OS X v10.5 and later.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running the latest version of OS X and Xcode.<br />
* Building the app for release takes more steps than other builds.<br />
* Requires Xcode 3 to build.<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving good code modularity in the source.<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Built plug-ins are much smaller in size than full application builds.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.7 or later.<br />
* Binaries only run on machines with 64-bit Intel processors running OS X v10.7 or later.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user.<br />
<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the desmume/src/cocoa directory of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.1.4 (if running on Leopard); v3.2.6 (if running on Snow Leopard or later)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| v4.6.3 or later<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3 if any of the following conditions apply:<br />
* You are running OS X v10.5 or v10.6.<br />
* You are building an OS X App that runs on OS X v10.5.<br />
* You are building an OS X App that runs on PowerPC processors.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
You must use Xcode 4 or later if any of the following conditions apply:<br />
* You are running OS X v10.7 or later.<br />
* You are building an OpenEmu Plug-in.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
'''Note:''' ''Xcode 3 is not compatible with OS X v10.10 Yosemite. If you require the use of Xcode 3, you will need to run it on an older version of OS X.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode v3.1.4 Direct Download Link (for Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.1.4_developer_tools/xcode314_2809_developerdvd.dmg<br />
* Xcode v3.2.6 Direct Download Link (for Snow Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running Lion or later and have any Apple ID, then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link (for Lion or later): https://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* If you are planning on making legacy builds, select the Mac OS X 10.4 SDK.<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up the Latest Version of Xcode ====<br />
When you download Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using Subversion (SVN) and is hosted on SourceForge. In this section, we describe some common methods for downloading the source code. (In reality, there are many methods for downloading the source code, but those methods are beyond the scope of this document.)<br />
<br />
<br />
=== Download via SourceForge Web Interface ===<br />
These instructions will download the DeSmuME source code from the SourceForge Web Interface using your web browser.<br />
<br />
1. Follow this link to DeSmuME's SourceForge Web Interface: http://desmume.svn.sourceforge.net/viewvc/desmume/<br />
<br />
2. Click "Download GNU tarball" to start the download.<br />
<br />
3. Once the download completes, expand the tarball using your decompression program. (By default, you should be using OS X's built in decompressor. In this case, just open the .tar file to expand the tarball.)<br />
<br />
<br />
=== Download via Command Line ===<br />
These instructions will download the DeSmuME source code to your desktop.<br />
<br />
1. Open Terminal.app.<br />
<br />
2. In the command prompt, enter the following exactly as shown:<br />
svn co https://desmume.svn.sourceforge.net/svnroot/desmume ~/Desktop/desmume<br />
'''Note:''' ''If you want to change the destination directory to a directory other than your desktop, change the "~/Desktop/desmume" part to the directory of your choice.''<br />
<br />
3. At this point, the download should start. However, if instead there is a message about an untrusted certificate, enter the following exactly as shown:<br />
p<br />
<br />
<br />
=== Download via Xcode 4 Organizer ===<br />
These instructions are for Xcode 4 users that wish to use the Organizer for downloading the DeSmuME source code.<br />
<br />
1. Open Xcode.app.<br />
<br />
2. Choose Window > Organizer.<br />
<br />
3. In the Organizer window, click Repositories.<br />
<br />
4. In the bottom-left corner, click the + button, then choose Checkout or Clone Repository.<br />
<br />
5. In the Location field, enter the following exactly as shown:<br />
https://desmume.svn.sourceforge.net/svnroot/desmume<br />
<br />
6. After Xcode confirms that the host is reachable, click Checkout.<br />
<br />
7. In the file navigation sheet, choose a folder to save the source code to, then click Checkout.<br />
<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/trunk/desmume/src/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (XCode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== OS X App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the four build targets.<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/trunk/desmume/src/cocoa/build/Release" folder.<br />
<br />
==== Building Using the Latest Version of Xcode ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App).<br />
<br />
3. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
4. After the app launches, go back to Xcode.<br />
<br />
5. In Xcode, choose Product > Build For > Profiling.<br />
<br />
6. Right-click the DeSmuME (Debug) app in the dock, and then choose Options > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the app.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
And you're done! The newly built app will be present in the "Release" folder. You may quit the DeSmuME (Debug).app if you want.<br />
<br />
''Note: You may want to create an alias to this folder so that it is easier to access in the future.''<br />
<br />
<br />
=== OS X App Dev+ Build ===<br />
The steps here are similar to that of the normal OS X App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 4 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App, dev+).<br />
<br />
3. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
4. After the app launches, go back to Xcode.<br />
<br />
5. In Xcode, choose Product > Build For > Profiling.<br />
<br />
6. Right-click the DeSmuME (Debug, dev+) app in the dock, and then choose Options > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the app.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
And you're done! The newly built app will be present in the "Release" folder. You may quit the DeSmuME (Debug, dev+).app if you want.<br />
<br />
''Note: You may want to create an alias to this folder so that it is easier to access in the future.''<br />
<br />
<br />
=== OS X App Build for Final Release ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode 3.2.6 (this specific version) and the latest version of Xcode installed.<br />
* You must be running the latest version of OS X. At the time of this writing, the latest version is v10.10 Yosemite.<br />
<br />
<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (OS X App; PowerPC Release Build)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build. This will make a new app called "DeSmuME (PPC).app" in the "/trunk/desmume/src/cocoa/build/Release" folder.<br />
<br />
7. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
8. Choose Product > Scheme > DeSmuME (OS X App; v10.5 Leopard Release Build).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
11. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
12. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME.app will automatically launch.<br />
<br />
13. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
14. After all PGO exercises are complete, quit DeSmuME.app. Xcode should now report that it has generated an optimization profile.<br />
<br />
15. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish.<br />
<br />
And you're done! The newly built app will be present in the "/trunk/desmume/src/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the desmume/src/cocoa/openemu directory, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > OpenEmuBase.<br />
<br />
3. Click Run. This will build a Debug version of the framework.<br />
<br />
4. After the build finishes, choose Product > Build For > Archiving. This will start building the Release version of the framework.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show "OpenEmuBase.framework".<br />
<br />
6. Click "OpenEmuBase.framework", and then choose File > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version framework.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Move OpenEmuBase.framework into the desmume/src/cocoa/openemu directory.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the desmume/src/cocoa/openemu directory. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in).<br />
<br />
3. Click Run. This will build a Debug version of the plug-in.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show the "DeSmuME.oecoreplugin" bundle.<br />
<br />
6. Click "DeSmuME.oecoreplugin", and then choose Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version plug-in.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Choose New > New Finder Window.<br />
<br />
11. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
12. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
13. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app.<br />
<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="150" |<br />
! scope="col" width="150" | OS X App<br />
! scope="col" width="150" | OS X App (dev+)<br />
! scope="col" width="150" | OS X App (Final Release)<br />
! scope="col" width="150" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| Yes[1]<br />
| No<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| Yes[1]<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.5 (Leopard)<br />
| Yes<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | OS X v10.6 (Snow Leopard)<br />
| Yes<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | OS X v10.7 (Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.8 (Mountain Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.9 (Mavericks)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.10 (Yosemite)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|}<br />
<br />
1. Available only by configuration in Xcode 3.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=Installing_DeSmuME_from_source_on_OS_XInstalling DeSmuME from source on OS X2015-01-13T06:35:22Z<p>Rogerman: </p>
<hr />
<div>== About the Build Targets ==<br />
DeSmuME for OS X may be built using several different configurations. Each build configuration is listed in an Xcode project as a "build target." The Xcode project files (provided with the DeSmuME source,) provide several build targets to suit your needs. Many build targets are similar to each other, and so they have been organized into the following categories, based on what the build target produces.<br />
<br />
<br />
=== OS X App ===<br />
These build targets produce a self-contained OS X application package (or "app bundle"). These builds use our official OS X frontend to run the DeSmuME emulator, and are designed for the debugging and testing of pre-release builds. These app bundles are compatible with OS X v10.6 or later. (Also compatible with OS X v10.5 if building from the Xcode 3 project).<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest build compatibility with Xcode versions running different OS X versions.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running OS X v10.5 or later, and Xcode v3.1.4 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Binaries can be configured for PowerPC or Intel compatibility.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Binary compatibility with OS X v10.5 requires Xcode 3 to build.<br />
<br />
<br />
=== OS X App (dev+) ===<br />
This build target is just like the normal OS X App build, except it enables additional debugging features, such as the GDB remote stub. This build is meant for developer usage.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured, and includes additional debugging features.<br />
* Must be compatible with the latest version of Xcode running on the latest version of OS X.<br />
* Quick debug-and-test of code changes.<br />
<br />
'''Advantages:'''<br />
* Can be built on machines running Xcode v4.6.3 or later.<br />
* Binaries can be configured to run in debug mode or in release mode.<br />
* Building the app is faster than the final release build.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.7 or later.<br />
* Due to the additional debugging features, performance will be slightly lower compared to the other builds.<br />
<br />
<br />
=== OS X App (Final Release) ===<br />
This build target is for producing final release versions of DeSmuME. These builds will use our official OS X frontend contained in an OS X app bundle, and are tuned for the fastest possible performance and the widest binary and OS compatibility.<br />
<br />
'''Build Target Goals:'''<br />
* Fully featured.<br />
* Widest binary compatibility.<br />
* Widest OS compatibility.<br />
* Fastest performance.<br />
<br />
'''Advantages:'''<br />
* Produces the fastest running binaries compared to all other build targets.<br />
* Produces a universal binary that supports both 32-bit and 64-bit.<br />
* Binaries are compatible with OS X v10.5 and later.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running the latest version of OS X and Xcode.<br />
* Building the app for release takes more steps than other builds.<br />
* Requires Xcode 3 to build.<br />
<br />
<br />
=== OpenEmu Plug-in ===<br />
These build targets produce a plug-in bundle that is compatible with the OpenEmu application (http://openemu.org/). These build targets exist to prove that our DeSmuME source code is modular enough to be adapted easily into other applications. In this case, the plug-in contains the DeSmuME emulator backend, while OpenEmu acts as the frontend that runs the emulator.<br />
<br />
'''Build Target Goals:'''<br />
* Compatibility with OpenEmu.<br />
* Proving good code modularity in the source.<br />
<br />
'''Advantages:'''<br />
* Compatible with OpenEmu.<br />
* Built plug-ins are much smaller in size than full application builds.<br />
<br />
'''Disadvantages:'''<br />
* Must be built on a machine running OS X v10.7 or later.<br />
* Binaries only run on machines with 64-bit Intel processors running OS X v10.7 or later.<br />
* The frontend is handled by a third-party application, which will not expose all of DeSmuME's features to the user.<br />
<br />
<br />
== Set Up the Build Environment ==<br />
All DeSmuME build targets must be built using Apple's Xcode IDE. The Xcode project files, included in the desmume/src/cocoa directory of the source code, are supported for the following versions of Xcode:<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="250" | Project File Name<br />
! scope="col" width="200" | Supported Xcode Version<br />
|-<br />
| DeSmuME (Xcode 3).xcodeproj<br />
| v3.1.4 (if running on Leopard); v3.2.6 (if running on Snow Leopard or later)<br />
|-<br />
| DeSmuME (Latest).xcodeproj<br />
| v4.6.3 or later<br />
|}<br />
<br />
=== Xcode Setup ===<br />
Refer to the following conditions to determine which Xcode version you need to install.<br />
<br />
<br />
You must use Xcode 3 if any of the following conditions apply:<br />
* You are running OS X v10.5 or v10.6.<br />
* You are building an OS X App that runs on OS X v10.5.<br />
* You are building an OS X App that runs on PowerPC processors.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
You must use Xcode 4 or later if any of the following conditions apply:<br />
* You are running OS X v10.7 or later.<br />
* You are building an OpenEmu Plug-in.<br />
* You are building an OS X App for final release.<br />
<br />
<br />
'''Note:''' ''Xcode 3 is not compatible with OS X v10.10 Yosemite. If you require the use of Xcode 3, you will need to run it on an older version of OS X.''<br />
<br />
<br />
==== Download Xcode 3 ====<br />
You can download Xcode 3 from the Apple Developer Connection website. Note that before you can download anything from the ADC website, you must log in using an Apple Developer ID. Once you are logged in, you may use the provided download links to download Xcode 3.<br />
<br />
<br />
If you do not have an Apple Developer ID, you can register one for free.<br />
* ADC Registration: https://developer.apple.com/programs/start/register/create.php<br />
<br />
If you are not already logged in to ADC, you can log in by accessing the ADC Downloads page.<br />
* ADC Downloads: https://developer.apple.com/downloads<br />
<br />
Once you are logged in to ADC, you can use the following download links for Xcode 3.<br />
* Xcode v3.1.4 Direct Download Link (for Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.1.4_developer_tools/xcode314_2809_developerdvd.dmg<br />
* Xcode v3.2.6 Direct Download Link (for Snow Leopard): http://adcdownload.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg<br />
<br />
<br />
==== Download the Latest Version of Xcode ====<br />
Downloading the latest version of Xcode is very easy! If you are running Lion or later and have any Apple ID, then you can download Xcode directly from the Mac App Store.<br />
* Xcode Mac App Store Link (for Lion or later): https://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12<br />
<br />
<br />
==== Uninstall Previous Versions of Xcode ====<br />
We highly recommend that you uninstall any previous versions of Xcode before you begin your installation. Doing so will better guarantee that you will have a clean build environment for DeSmuME. The easiest method for uninstalling Xcode is to use the uninstall-devtools script, located in the Library folder of your Xcode installation.<br />
<br />
'''Note:''' ''You do not need to uninstall any versions of Xcode that are v4.3 or later. These versions of Xcode are self-contained application packages, which do not conflict with other Xcode versions.''<br />
<br />
To uninstall Xcode, open Terminal and type the following command into the command line:<br />
sudo /Developer/Library/uninstall-devtools -mode=all<br />
<br />
'''Note:''' ''You must be logged into an Administrator account to use this command.''<br />
<br />
'''Note:''' ''This command assumes that Xcode was installed at the default location, /Developer. The path to the uninstall-devtools script may be different if you did not use the default location when installing Xcode from before.''<br />
<br />
<br />
==== Set Up Xcode 3 ====<br />
'''Note:''' ''If you do not require the build options that Xcode 3 provides, then you may skip this step. See the Xcode Setup section for more details.''<br />
<br />
After Xcode 3 is downloaded, you will have a .dmg disk image containing a package installer. Start the Xcode 3 installation by opening the installer, and follow the onscreen instructions until you get to the installation list.<br />
<br />
Once the installation list is shown, do the following:<br />
* If you are planning on making legacy builds, select the Mac OS X 10.4 SDK.<br />
* If you are planning on installing the latest version of Xcode alongside Xcode 3, then deselect "System Tools" and "Essentials > iOS SDK". Since the latest Xcode will already have the newest version of the iOS SDK, installing the version included with Xcode 3 will be a waste of time and disk space.<br />
<br />
Continue the installation as normal and let the installation finish.<br />
<br />
<br />
==== Set Up the Latest Version of Xcode ====<br />
When you download Xcode from the Mac App Store, Xcode should automatically install itself to the Applications folder once the download is complete. There are no additional steps. Pretty easy, right?<br />
<br />
<br />
== Download the DeSmuME Source Code ==<br />
The DeSmuME source code is managed using Subversion (SVN) and is hosted on SourceForge. In this section, we describe some common methods for downloading the source code. (In reality, there are many methods for downloading the source code, but those methods are beyond the scope of this document.)<br />
<br />
<br />
=== Download via SourceForge Web Interface ===<br />
These instructions will download the DeSmuME source code from the SourceForge Web Interface using your web browser.<br />
<br />
1. Follow this link to DeSmuME's SourceForge Web Interface: http://desmume.svn.sourceforge.net/viewvc/desmume/<br />
<br />
2. Click "Download GNU tarball" to start the download.<br />
<br />
3. Once the download completes, expand the tarball using your decompression program. (By default, you should be using OS X's built in decompressor. In this case, just open the .tar file to expand the tarball.)<br />
<br />
<br />
=== Download via Command Line ===<br />
These instructions will download the DeSmuME source code to your desktop.<br />
<br />
1. Open Terminal.app.<br />
<br />
2. In the command prompt, enter the following exactly as shown:<br />
svn co https://desmume.svn.sourceforge.net/svnroot/desmume ~/Desktop/desmume<br />
'''Note:''' ''If you want to change the destination directory to a directory other than your desktop, change the "~/Desktop/desmume" part to the directory of your choice.''<br />
<br />
3. At this point, the download should start. However, if instead there is a message about an untrusted certificate, enter the following exactly as shown:<br />
p<br />
<br />
<br />
=== Download via Xcode 4 Organizer ===<br />
These instructions are for Xcode 4 users that wish to use the Organizer for downloading the DeSmuME source code.<br />
<br />
1. Open Xcode.app.<br />
<br />
2. Choose Window > Organizer.<br />
<br />
3. In the Organizer window, click Repositories.<br />
<br />
4. In the bottom-left corner, click the + button, then choose Checkout or Clone Repository.<br />
<br />
5. In the Location field, enter the following exactly as shown:<br />
https://desmume.svn.sourceforge.net/svnroot/desmume<br />
<br />
6. After Xcode confirms that the host is reachable, click Checkout.<br />
<br />
7. In the file navigation sheet, choose a folder to save the source code to, then click Checkout.<br />
<br />
<br />
== Build the DeSmuME Source ==<br />
Regardless of which build target you will be using, you will need to use one of the Xcode project files provided with the DeSmuME source code. For most cases, you will want to build the latest revision. So from the source code folder, navigate to the "/trunk/desmume/src/cocoa" folder.<br />
<br />
There should be two Xcode project files present in this folder:<br />
* DeSmuME (XCode 3).xcodeproj<br />
* DeSmuME (Latest).xcodeproj<br />
<br />
<br />
=== OS X App Build ===<br />
This is the quickest and easiest way to get started with using a pre-release build of DeSmuME. <br />
<br />
==== Building Using Xcode 3 ====<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose one of the four build targets.<br />
<br />
4. Choose Build > Build, and then wait for Xcode to finish building the app.<br />
<br />
And you're done! The newly built app will be present in the "/trunk/desmume/src/cocoa/build/Release" folder.<br />
<br />
==== Building Using the Latest Version of Xcode ====<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App).<br />
<br />
3. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
4. After the app launches, go back to Xcode.<br />
<br />
5. In Xcode, choose Product > Build For > Profiling.<br />
<br />
6. Right-click the DeSmuME (Debug) app in the dock, and then choose Options > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the app.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
And you're done! The newly built app will be present in the "Release" folder. You may quit the DeSmuME (Debug).app if you want.<br />
<br />
''Note: You may want to create an alias to this folder so that it is easier to access in the future.''<br />
<br />
<br />
=== OS X App Dev+ Build ===<br />
The steps here are similar to that of the normal OS X App build, but will produce the developer-oriented build instead. In addition, you must be using Xcode 4 or later to make this build.<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OS X App, dev+).<br />
<br />
3. Click Run. This will build a Debug version of the app, which will automatically launch when finished.<br />
<br />
4. After the app launches, go back to Xcode.<br />
<br />
5. In Xcode, choose Product > Build For > Profiling.<br />
<br />
6. Right-click the DeSmuME (Debug, dev+) app in the dock, and then choose Options > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the app.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
And you're done! The newly built app will be present in the "Release" folder. You may quit the DeSmuME (Debug, dev+).app if you want.<br />
<br />
''Note: You may want to create an alias to this folder so that it is easier to access in the future.''<br />
<br />
<br />
=== OS X App Build for Final Release ===<br />
This is the process that we use for our official release builds. To make this build, you must meet the following requirements:<br />
* You must have both Xcode 3.2.6 (this specific version) and the latest version of Xcode installed.<br />
* You must be running the latest version of OS X. At the time of this writing, the latest version is v10.10 Yosemite.<br />
<br />
<br />
1. Open the "DeSmuME (XCode 3).xcodeproj" project file using Xcode 3.<br />
<br />
2. In the Build Target menu (located in the upper-left corner of the project window), under Active Configuration, choose Release.<br />
<br />
3. In the Build Target menu, under Active Target, choose the build target "DeSmuME (OS X App; PowerPC Release Build)".<br />
<br />
4. Choose Build > Clean All Targets.<br />
<br />
5. In the Clean All Targets sheet, check all options, then click Clean, and then wait for the clean process to finish.<br />
<br />
6. Choose Build > Build. This will make a new app called "DeSmuME (PPC).app" in the "/trunk/desmume/src/cocoa/build/Release" folder.<br />
<br />
7. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
8. Choose Product > Scheme > DeSmuME (OS X App; v10.5 Leopard Release Build).<br />
<br />
9. Choose Product > Clean, and then wait for the clean process to finish.<br />
<br />
10. Choose Product > Perform Action > Generate Optimization Profile.<br />
<br />
11. In the Generate Optimization Profile sheet, ensure that Use Run Action is the selected option, and then click Run.<br />
<br />
12. Wait for Xcode to finish building the app. When Xcode finishes, DeSmuME.app will automatically launch.<br />
<br />
13. Perform the recommended PGO exercises listed on this page: TBD<br />
<br />
14. After all PGO exercises are complete, quit DeSmuME.app. Xcode should now report that it has generated an optimization profile.<br />
<br />
15. In Xcode, choose Product > Build For > Profiling, and then wait for Xcode to finish.<br />
<br />
And you're done! The newly built app will be present in the "/trunk/desmume/src/cocoa/build/Merged Release" folder.<br />
<br />
<br />
=== OpenEmu Plug-in Build ===<br />
The DeSmuME OpenEmu plug-in is used as an extension to the OpenEmu application. Installing the plug-in involves building OpenEmuBase.framework from source, then moving the framework to the desmume/src/cocoa/openemu directory, then building the plug-in from source, and then finally placing the plug-in into the ~/Library/Application Support/OpenEmu/Cores folder.<br />
<br />
<br />
You can download the OpenEmu SDK source code from here:<br />
* OpenEmu SDK Download Link: https://github.com/OpenEmu/OpenEmu-SDK/archive/master.zip<br />
<br />
<br />
==== Building and installing OpenEmuBase.framework from source ====<br />
1. Open the "OpenEmu-SDK.xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > OpenEmuBase.<br />
<br />
3. Click Run. This will build a Debug version of the framework.<br />
<br />
4. After the build finishes, choose Product > Build For > Archiving. This will start building the Release version of the framework.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show "OpenEmuBase.framework".<br />
<br />
6. Click "OpenEmuBase.framework", and then choose File > Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version framework.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Move OpenEmuBase.framework into the desmume/src/cocoa/openemu directory.<br />
<br />
==== Building the OpenEmu plug-in ====<br />
'''Note:''' ''In order to build the OpenEmu plug-in, it is mandatory that OpenEmuBase.framework is present in the desmume/src/cocoa/openemu directory. Otherwise, the build will fail due to missing frameworks.''<br />
<br />
1. Open the "DeSmuME (Latest).xcodeproj" project file using the latest version of Xcode.<br />
<br />
2. Choose Product > Scheme > DeSmuME (OpenEmu Plug-in).<br />
<br />
3. Click Run. This will build a Debug version of the plug-in.<br />
<br />
4. After the build finishes, choose Product > Build For > Profiling. This will start building the Release version of the plug-in.<br />
<br />
5. In the Xcode sidebar, expand the Products folder. This should show the "DeSmuME.oecoreplugin" bundle.<br />
<br />
6. Click "DeSmuME.oecoreplugin", and then choose Show in Finder.<br />
<br />
7. In the Finder window that appears, you should be in a folder named "Debug". Right-click the window title (which should read "Debug"), and then choose the "Products" folder underneath it.<br />
<br />
8. Wait for Xcode to finish building the Release version plug-in.<br />
<br />
9. In the Finder, from the "Products" folder, open the "Release" folder.<br />
<br />
10. Choose New > New Finder Window.<br />
<br />
11. With the new Finder window selected, choose Go > Go To Folder.<br />
<br />
12. In the drop-down sheet, in the "Go to the folder" text field, enter the following exactly as shown:<br />
~/Library/Application Support/OpenEmu/Cores<br />
<br />
13. Move the DeSmuME.oecoreplugin bundle from the Release folder into the Cores folder.<br />
<br />
And that's it! The DeSmuME OpenEmu plug-in should now be installed. You should now be able to run NDS ROMs from within OpenEmu.app.<br />
<br />
<br />
== Appendix A: Comparison Charts of Different Builds ==<br />
<br />
=== Build Compatibility ===<br />
The table below lists a summary of both binary and operating system compatibility for all possible builds.<br />
<br />
'''Note:''' ''All binaries will not be compatible with OS X v10.4 (Tiger) or earlier.''<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
! scope="col" width="150" |<br />
! scope="col" width="150" | OS X App<br />
! scope="col" width="150" | OS X App (dev+)<br />
! scope="col" width="150" | OS X App (Final Release)<br />
! scope="col" width="150" | OpenEmu Plug-in<br />
|-<br />
! scope="row" | PowerPC, 32-bit<br />
| Yes[1]<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | PowerPC, 64-bit<br />
| Yes[1]<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | Intel, 32-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| No<br />
|-<br />
! scope="row" | Intel, 64-bit<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.5 (Leopard)<br />
| Yes<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | OS X v10.6 (Snow Leopard)<br />
| Yes<br />
| No<br />
| No<br />
| No<br />
|-<br />
! scope="row" | OS X v10.7 (Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.8 (Mountain Lion)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.9 (Mavericks)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|-<br />
! scope="row" | OS X v10.10 (Yosemite)<br />
| Yes<br />
| Yes<br />
| Yes<br />
| Yes<br />
|}<br />
<br />
1. Available only by configuration in Xcode 3.<br />
<br />
== Appendix B: Installing DeSmuME From Source (Legacy Instructions) ==<br />
This is a document that described an older method for installing DeSmuME from the source code. It is now obsolete and no longer supported by the DeSmuME team. You can view it here: [[Installing DeSmuME from source on Mac OS X (Legacy Instructions)]]</div>Rogermanhttps://wiki.desmume.org/index.php?title=FaqFaq2013-12-01T01:51:18Z<p>Rogerman: /* Using The Emulator */</p>
<hr />
<div>'''DeSmuME FAQ 0.9.10'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
* FAQ 0.9.9, [[Faq_099]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped? [http://wiki.desmume.org/index.php?title=File:Xbutton_1.png] [http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! ===<br />
Make sure you are using the latest version of the emulator.<br />
Delete your ini file and re-run the emulator.<br />
Quit using patched roms. Remove the AP (Anti-piracy) patch from the rom.<br />
Quit using cheats.<br />
Use/dump external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games</strong>. Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3d renderers. Quit using frameskip.<br />
* Do not use patched roms. Never use patched roms.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
* Stop using savestates. Use in-game saves.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot.<br />
* Go to desmume.org and make sure you are using the latest version. The latest version is 0.9.9. (DeSmuME 0.8 and 0.3.4 are old and unsupported)<br />
* Turn off your virus scanner.<br />
* Config > Emulation Settings > Enable Advanced Bus-Level Timing - this will slow down emulation, but fix some games.<br />
* Use external BIOS images; try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your .ini file which may have options that are breaking your DeSmuME.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary<br />
<br />
If it really doesn't boot up no matter what you try, you can submit a bug report for the game on the Sourceforge bugtracker.<br />
You might also find ways to patch the games to work better on emulators by searching on the internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using desmume! ===<br />
This is not desmume's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
Yeah, for you and everyone else. New releases may always be a step backwards in some (or many) cases from earlier releases in terms of speed. There is a delicate balance between compatibility and speed and sometimes one advances further than the other. <br />
<br />
I will be frank: DeSmuME focuses more on compatibility and perks than on speed. Our philosophy is, you can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility and perks. We take care of our side of things, so you should take care of yours.<br />
<br />
At any rate, here is the master list of tricks to speed things up:<br />
<br />
* Use the Dynamic Recompiler (JIT) option.<br />
* Don't use external BIOS images.<br />
* If you ARE using external BIOS images, (or must for some reason) try enabling Patch DelayLoop SWI<br />
* Try switching between OpenGL Renderer and Software Rasterizer. You may not like the results, but it may get you more speed.<br />
* Disable this option: Config > Emulation Settings > Enable Bus-Level Timing.<br />
* Use Dual SPU in the Sound Settings, and don't use Advanced SPU Logic.<br />
* In the Sound Settings, set interpolation to none.<br />
* If you can handle it, turn off the sound altogether. Try listening to a shoutcast instead; I recommend happyday new age or ah.fm!<br />
* Don't use the NOSSE2 build.<br />
* Don't use someone else's unofficial "SVN" build, it probably is not fully optimized, since we make our Windows releases using some profiler-guided optimization, which helps by several FPS.<br />
* Use frame skip. Even frameskipping by 1 will help and many games will stay playable. Frameskipping is continually tweaked in each release to get more bang for the buck, but beware that dual screen 3d games still may not work well under frameskip. If screens seem stuck, pick a different frameskip value.<br />
* There is now the option of disabling an entire screen. (Tools > View Layers > Main GPU, etc) Consider disabling a screen which is useless in the game you are playing. NOTE: View > LCDs Layout > One LCD *WILL NOT* increase your speed. This merely hides the lcd, but it is still rendered. This is important for dual screen games and other weird cases.<br />
* Don't scale the window anything different than 1x and don't use resize filters.<br />
* If you are using the software rasterizer, disable edge marking and fog if you feel like they aren't needed. If the game isn't using those features then this won't help.<br />
* Buying a newer, faster computer is somewhat more expensive, but it has other side benefits. <br />
* Don't use a netbook.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
* Your graphics card is irrelevant. Upgrade your CPU.<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
Try disabling the speed limiter and crank up the frameskip setting. They are both found in the config menu. Don't expect any miracles, more than 1.5 the base speed is unlikely.<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in O SX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
Additionally games using flash memory wont save due to that save type simply not being implemented fully. Here is a partial list of those:<br />
* Warioware D.I.Y.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmume window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. Desmume tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows OS: Windows XP SP2 or later<br />
* Mac OS: OS X v10.5.8 Leopard or later<br />
* Linux OS: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows OS: Windows Vista SP2 or later<br />
* Mac OS: OS X v10.6.8 Snow Leopard or later<br />
* Linux OS: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
[''Windows''] For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
<br />
* If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
* If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
* If you want to use the developer features, use the dev build. It includes extra debugging code and logging, as well as gdb_stub.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
[''Windows / Mac / Linux''] Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.4GHz CPU will run DeSmuME much faster than an 8-core 1.7GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
[''Windows / Mac / Linux''] Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
[''Windows''] The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
[''Windows / Mac / Linux''] By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
[''Windows / Mac''] Yes, you can display the DS screens in full-screen mode.<br />
<br />
* Windows: Click the DeSmuME window and press Alt-Enter. <br />
* Mac: Click the display window that you want to make full screen. Then choose View > Enter Full Screen.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
[''Mac''] Yes, you can display each DS screen in separate windows. In Mac DeSmuME, choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
[''Windows / Mac / Linux''] Each port supports most or all of the video output settings, but have different user interfaces for changing these settings.<br />
<br />
* Windows: To change the video filter, choose View > Magnification Filters. To toggle bilinear filtering, choose Config > Display Method. <br />
* Mac: To show all video settings, choose View > Show Display Video Settings. You can then change any video setting from the Display Video Settings panel.<br />
* Linux: To change the video filter, choose Config > Primary Interpolation. To change the final video output, choose Config > Secondary Interpolation.<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
[''Windows / Mac / Linux''] Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported in all DeSmuME versions.<br />
<br />
* Windows: Has full microphone support. If you want to use a physical microphone, you must configure it through your Windows Control Panel and set it up as the default audio input device. Be sure to set your mic gain to an appropriate level to avoid too much clipping.<br />
* Mac: Does not support using a physical microphone. Instead, you are limited to using one of the simulated microphone commands.<br />
* Linux: Requires libasound in order to use a physical microphone.<br />
<br />
If you are using a simulated microphone, you will have to experiment with the microphone hotkey timing. Each press of the hotkey simulates audio running through the DS microphone. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
<br />
'''TIP:''' Remove the 'wind deflector' that comes with most microphones these days for better results.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
[[List_of_Nintendo_DS_games_with_GBA_connectivity]]<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
[''Windows / Mac / Linux''] This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
[''Windows / Mac / Linux''] By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked ? ===<br />
No. A real NDS uses WIFI for multiplayer, and that isn't emulated in DeSmuME yet. Also, look at the questions on [[Faq#Wi-Fi and WFC|WIFI Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
Wifi is not supported. It isn't finished yet, it is experimental, and you're better off not wasting your time trying to use it. Don't bug us on the forums when you discover that it doesn't work; that's what "not supported" means.<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future? ===<br />
Most likely, DeSmuME will not support the emulation of the Nintendo 3DS or Nintendo 2DS in the future. The hardware of both a 3DS and a 2DS are very different from an NDS, so emulating a 3DS/2DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
In the [http://sourceforge.net/tracker/?group_id=164579&atid=832291 official bug tracker]. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
* All known 2D graphics features are correct. Mosaics work but are imperfect. There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
<br />
* With the software rasterizer, all 3D features are emulated, except the following: wireframes and antialising. The OpenGL Renderer fails for some other features; it is near its limit and may never be fixed. Both engines have trouble with some shadows, but software rasterizer is better. The software rasterizer has some noticeable texturing issues right now, especially in 2d games. In software rasterizer, there are issues similar to 2d with incorrect bit depth being used in the pipeline. <br />
<br />
One last thing -- if buttons and labels and menus rendering on the 3d screen are obscured (for example, a button but no label is on it) then you may need to use the software rasterizer. Or you may need to use OpenGL instead. Each renderer has strengths and weaknesses, which is why both are provided.<br />
<br />
* All sound features are emulated. The microphone support is new and the manual should be consulted, where you will find out, among other things, that it is only supported in windows right now.<br />
<br />
* We are unaware of any outstanding issues in the core system hardware (CPU, DMA, MMU) but there are certainly still some. The instruction and memory timings are quite incorrect; however, this seems not to hurt most titles.<br />
<br />
* DLDI - Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
'''Warning''' - As of june 2010, it has become suspected that our compact flash emulation has bugs which sometimes prevent access to the first subdirectory in the FAT filesystem; and that causes FAT images which are written to, to become corrupted. We need a FAT expert to help us out, as I think both bugs are related.<br />
'''Warning''' - As of september 2010, FAT support has been rewritten and indeed it fixed the bugs mentioned above, but it doesn't support LFN yet.<br />
<br />
=== Does the GDB stub still work? ===<br />
[''Windows''] It is present in the dev build.<br />
<br />
=== How do I enable the GDB stub? ===<br />
[''Windows''] Add #define GDB_STUB to src/windows/userconfig/userconfig.h which you have created according to the instructions in src/windows/defaultconfig/userconfig.h ; sorry for this confusing system, but that's how it is for now.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an on-line communications system. <br />
<br />
Information you'll need:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
Programs you'll need:<br />
* mIRC - Windows<br />
* ChatZilla - Firefox add-on<br />
* XChat - Linux, Windows<br />
* plenty other, see [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients wikipedia]<br />
<br />
Language:<br />
* Most of the people on the channel speak, or try to speak the English language.<br />
<br />
=== Where is the manual? ===<br />
Over [http://wiki.desmume.org/index.php?title=Manual here]. It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
== SVN and Compiling ==<br />
<br />
=== Where do I get svn builds? ===<br />
[http://www.emucr.com emucr]. Please note that these builds are unofficial and unsupported.<br />
<br />
=== Why doesn't the DeSmuME team release pre-build SVN binaries ? ===<br />
The DeSmuME team doesn't have trusted people to make the builds, and don't want to get involved on builds that could include whatever the author wants. Every newbie coder could do a version that, after 10 minutes of gameplay, for example, starts corrupting stuff from the hard disk. Also, anyone incapable of building it's own builds, probably isn't very helpful for submitting bug reports or helping the development team on SVN releases, so there isn't much point on them getting a SVN build.<br />
<br />
=== How do I get the latest svn code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ svn] is a developers tool. It's used to let multiple developers work on the same codebase without conflicts. If you're an end-user, don't worry about it. If you're a developer, see the question on how to get the latest svn code and build DeSmuME yourself. See [http://en.wikipedia.org/wiki/Subversion_(software) wikipedia] for more info.<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
* Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
* Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* For Linux, any recent version of GCC and toolchain should work.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the visual c++ express 2008 installer and I can't find it. ===<br />
It's there if you click around more. I'll save you time: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Please add them to the appropriate sourceforge tracker. Patches go to the 'Patches' tracker : http://sourceforge.net/tracker/?group_id=164579&atid=832293<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== Im not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile svn builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on irc. Also, adding to or perfecting the documentation in the wiki is useful. You could also watch for and answer questions placed on the DeSmuME forum.<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://nocash.emubase.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a compact flash image<br />
<br />
== Mac Users ==<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories. Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogermanhttps://wiki.desmume.org/index.php?title=FaqFaq2013-12-01T01:23:01Z<p>Rogerman: </p>
<hr />
<div>'''DeSmuME FAQ 0.9.10'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
* FAQ 0.9.9, [[Faq_099]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped? [http://wiki.desmume.org/index.php?title=File:Xbutton_1.png] [http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! ===<br />
Make sure you are using the latest version of the emulator.<br />
Delete your ini file and re-run the emulator.<br />
Quit using patched roms. Remove the AP (Anti-piracy) patch from the rom.<br />
Quit using cheats.<br />
Use/dump external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games</strong>. Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3d renderers. Quit using frameskip.<br />
* Do not use patched roms. Never use patched roms.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
* Stop using savestates. Use in-game saves.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot.<br />
* Go to desmume.org and make sure you are using the latest version. The latest version is 0.9.9. (DeSmuME 0.8 and 0.3.4 are old and unsupported)<br />
* Turn off your virus scanner.<br />
* Config > Emulation Settings > Enable Advanced Bus-Level Timing - this will slow down emulation, but fix some games.<br />
* Use external BIOS images; try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your .ini file which may have options that are breaking your DeSmuME.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary<br />
<br />
If it really doesn't boot up no matter what you try, you can submit a bug report for the game on the Sourceforge bugtracker.<br />
You might also find ways to patch the games to work better on emulators by searching on the internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using desmume! ===<br />
This is not desmume's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
Yeah, for you and everyone else. New releases may always be a step backwards in some (or many) cases from earlier releases in terms of speed. There is a delicate balance between compatibility and speed and sometimes one advances further than the other. <br />
<br />
I will be frank: DeSmuME focuses more on compatibility and perks than on speed. Our philosophy is, you can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility and perks. We take care of our side of things, so you should take care of yours.<br />
<br />
At any rate, here is the master list of tricks to speed things up:<br />
<br />
* Use the Dynamic Recompiler (JIT) option.<br />
* Don't use external BIOS images.<br />
* If you ARE using external BIOS images, (or must for some reason) try enabling Patch DelayLoop SWI<br />
* Try switching between OpenGL Renderer and Software Rasterizer. You may not like the results, but it may get you more speed.<br />
* Disable this option: Config > Emulation Settings > Enable Bus-Level Timing.<br />
* Use Dual SPU in the Sound Settings, and don't use Advanced SPU Logic.<br />
* In the Sound Settings, set interpolation to none.<br />
* If you can handle it, turn off the sound altogether. Try listening to a shoutcast instead; I recommend happyday new age or ah.fm!<br />
* Don't use the NOSSE2 build.<br />
* Don't use someone else's unofficial "SVN" build, it probably is not fully optimized, since we make our Windows releases using some profiler-guided optimization, which helps by several FPS.<br />
* Use frame skip. Even frameskipping by 1 will help and many games will stay playable. Frameskipping is continually tweaked in each release to get more bang for the buck, but beware that dual screen 3d games still may not work well under frameskip. If screens seem stuck, pick a different frameskip value.<br />
* There is now the option of disabling an entire screen. (Tools > View Layers > Main GPU, etc) Consider disabling a screen which is useless in the game you are playing. NOTE: View > LCDs Layout > One LCD *WILL NOT* increase your speed. This merely hides the lcd, but it is still rendered. This is important for dual screen games and other weird cases.<br />
* Don't scale the window anything different than 1x and don't use resize filters.<br />
* If you are using the software rasterizer, disable edge marking and fog if you feel like they aren't needed. If the game isn't using those features then this won't help.<br />
* Buying a newer, faster computer is somewhat more expensive, but it has other side benefits. <br />
* Don't use a netbook.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
* Your graphics card is irrelevant. Upgrade your CPU.<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
Try disabling the speed limiter and crank up the frameskip setting. They are both found in the config menu. Don't expect any miracles, more than 1.5 the base speed is unlikely.<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in O SX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
Additionally games using flash memory wont save due to that save type simply not being implemented fully. Here is a partial list of those:<br />
* Warioware D.I.Y.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmume window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. Desmume tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows OS: Windows XP SP2 or later<br />
* Mac OS: OS X v10.5.8 Leopard or later<br />
* Linux OS: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows OS: Windows Vista SP2 or later<br />
* Mac OS: OS X v10.6.8 Snow Leopard or later<br />
* Linux OS: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
[''Windows''] For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
<br />
* If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
* If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
* If you want to use the developer features, use the dev build. It includes extra debugging code and logging, as well as gdb_stub.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
[''Windows / Mac / Linux''] Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.4GHz CPU will run DeSmuME much faster than an 8-core 1.7GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
[''Windows / Mac / Linux''] Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
[''Windows''] The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
[''Windows / Mac / Linux''] By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
[''Windows''] Yes, you can display the DS screens in full-screen mode. In Windows DeSmuME, click the DeSmuME window and press Alt-Enter.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
[''Mac''] Yes, you can display each DS screen in separate windows. In Mac DeSmuME, choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
[''Windows / Mac / Linux''] Each port supports most or all of the video output settings, but have different user interfaces for changing these settings.<br />
<br />
* Windows: To change the video filter, choose View > Magnification Filters. To toggle bilinear filtering, choose Config > Display Method. <br />
* Mac: To show all video settings, choose View > Show Display Video Settings. You can then change any video setting from the Display Video Settings panel.<br />
* Linux: To change the video filter, choose Config > Primary Interpolation. To change the final video output, choose Config > Secondary Interpolation.<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
[''Windows / Mac / Linux''] Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported in all DeSmuME versions.<br />
<br />
* Windows: Has full microphone support. If you want to use a physical microphone, you must configure it through your Windows Control Panel and set it up as the default audio input device. Be sure to set your mic gain to an appropriate level to avoid too much clipping.<br />
* Mac: Does not support using a physical microphone. Instead, you are limited to using one of the simulated microphone commands.<br />
* Linux: Requires libasound in order to use a physical microphone.<br />
<br />
If you are using a simulated microphone, you will have to experiment with the microphone hotkey timing. Each press of the hotkey simulates audio running through the DS microphone. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
<br />
'''TIP:''' Remove the 'wind deflector' that comes with most microphones these days for better results.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
[[List_of_Nintendo_DS_games_with_GBA_connectivity]]<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
[''Windows / Mac / Linux''] This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
[''Windows / Mac / Linux''] By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked ? ===<br />
No. A real NDS uses WIFI for multiplayer, and that isn't emulated in DeSmuME yet. Also, look at the questions on [[Faq#Wi-Fi and WFC|WIFI Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
Wifi is not supported. It isn't finished yet, it is experimental, and you're better off not wasting your time trying to use it. Don't bug us on the forums when you discover that it doesn't work; that's what "not supported" means.<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future? ===<br />
Most likely, DeSmuME will not support the emulation of the Nintendo 3DS or Nintendo 2DS in the future. The hardware of both a 3DS and a 2DS are very different from an NDS, so emulating a 3DS/2DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
In the [http://sourceforge.net/tracker/?group_id=164579&atid=832291 official bug tracker]. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
* All known 2D graphics features are correct. Mosaics work but are imperfect. There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
<br />
* With the software rasterizer, all 3D features are emulated, except the following: wireframes and antialising. The OpenGL Renderer fails for some other features; it is near its limit and may never be fixed. Both engines have trouble with some shadows, but software rasterizer is better. The software rasterizer has some noticeable texturing issues right now, especially in 2d games. In software rasterizer, there are issues similar to 2d with incorrect bit depth being used in the pipeline. <br />
<br />
One last thing -- if buttons and labels and menus rendering on the 3d screen are obscured (for example, a button but no label is on it) then you may need to use the software rasterizer. Or you may need to use OpenGL instead. Each renderer has strengths and weaknesses, which is why both are provided.<br />
<br />
* All sound features are emulated. The microphone support is new and the manual should be consulted, where you will find out, among other things, that it is only supported in windows right now.<br />
<br />
* We are unaware of any outstanding issues in the core system hardware (CPU, DMA, MMU) but there are certainly still some. The instruction and memory timings are quite incorrect; however, this seems not to hurt most titles.<br />
<br />
* DLDI - Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
'''Warning''' - As of june 2010, it has become suspected that our compact flash emulation has bugs which sometimes prevent access to the first subdirectory in the FAT filesystem; and that causes FAT images which are written to, to become corrupted. We need a FAT expert to help us out, as I think both bugs are related.<br />
'''Warning''' - As of september 2010, FAT support has been rewritten and indeed it fixed the bugs mentioned above, but it doesn't support LFN yet.<br />
<br />
=== Does the GDB stub still work? ===<br />
[''Windows''] It is present in the dev build.<br />
<br />
=== How do I enable the GDB stub? ===<br />
[''Windows''] Add #define GDB_STUB to src/windows/userconfig/userconfig.h which you have created according to the instructions in src/windows/defaultconfig/userconfig.h ; sorry for this confusing system, but that's how it is for now.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an on-line communications system. <br />
<br />
Information you'll need:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
Programs you'll need:<br />
* mIRC - Windows<br />
* ChatZilla - Firefox add-on<br />
* XChat - Linux, Windows<br />
* plenty other, see [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients wikipedia]<br />
<br />
Language:<br />
* Most of the people on the channel speak, or try to speak the English language.<br />
<br />
=== Where is the manual? ===<br />
Over [http://wiki.desmume.org/index.php?title=Manual here]. It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
== SVN and Compiling ==<br />
<br />
=== Where do I get svn builds? ===<br />
[http://www.emucr.com emucr]. Please note that these builds are unofficial and unsupported.<br />
<br />
=== Why doesn't the DeSmuME team release pre-build SVN binaries ? ===<br />
The DeSmuME team doesn't have trusted people to make the builds, and don't want to get involved on builds that could include whatever the author wants. Every newbie coder could do a version that, after 10 minutes of gameplay, for example, starts corrupting stuff from the hard disk. Also, anyone incapable of building it's own builds, probably isn't very helpful for submitting bug reports or helping the development team on SVN releases, so there isn't much point on them getting a SVN build.<br />
<br />
=== How do I get the latest svn code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ svn] is a developers tool. It's used to let multiple developers work on the same codebase without conflicts. If you're an end-user, don't worry about it. If you're a developer, see the question on how to get the latest svn code and build DeSmuME yourself. See [http://en.wikipedia.org/wiki/Subversion_(software) wikipedia] for more info.<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
* Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
* Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* For Linux, any recent version of GCC and toolchain should work.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the visual c++ express 2008 installer and I can't find it. ===<br />
It's there if you click around more. I'll save you time: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Please add them to the appropriate sourceforge tracker. Patches go to the 'Patches' tracker : http://sourceforge.net/tracker/?group_id=164579&atid=832293<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== Im not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile svn builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on irc. Also, adding to or perfecting the documentation in the wiki is useful. You could also watch for and answer questions placed on the DeSmuME forum.<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://nocash.emubase.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a compact flash image<br />
<br />
== Mac Users ==<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories. Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogermanhttps://wiki.desmume.org/index.php?title=Faq_099Faq 0992013-12-01T01:22:11Z<p>Rogerman: Created page with "'''DeSmuME FAQ 0.9.9''' This FAQ holds a list of many commonly asked questions about DeSmuME. If you need information about an older version, refer to one of the older FAQs for..."</p>
<hr />
<div>'''DeSmuME FAQ 0.9.9'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped? [http://wiki.desmume.org/index.php?title=File:Xbutton_1.png] [http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! ===<br />
Make sure you are using the latest version of the emulator.<br />
Delete your ini file and re-run the emulator.<br />
Quit using patched roms. Remove the AP (Anti-piracy) patch from the rom.<br />
Quit using cheats.<br />
Use/dump external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games</strong>. Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3d renderers. Quit using frameskip.<br />
* Do not use patched roms. Never use patched roms.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
* Stop using savestates. Use in-game saves.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot.<br />
* Go to desmume.org and make sure you are using the latest version. The latest version is 0.9.9. (DeSmuME 0.8 and 0.3.4 are old and unsupported)<br />
* Turn off your virus scanner.<br />
* Config > Emulation Settings > Enable Advanced Bus-Level Timing - this will slow down emulation, but fix some games.<br />
* Use external BIOS images; try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your .ini file which may have options that are breaking your DeSmuME.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary<br />
<br />
If it really doesn't boot up no matter what you try, you can submit a bug report for the game on the Sourceforge bugtracker.<br />
You might also find ways to patch the games to work better on emulators by searching on the internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using desmume! ===<br />
This is not desmume's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
Yeah, for you and everyone else. New releases may always be a step backwards in some (or many) cases from earlier releases in terms of speed. There is a delicate balance between compatibility and speed and sometimes one advances further than the other. <br />
<br />
I will be frank: DeSmuME focuses more on compatibility and perks than on speed. Our philosophy is, you can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility and perks. We take care of our side of things, so you should take care of yours.<br />
<br />
At any rate, here is the master list of tricks to speed things up:<br />
<br />
* Use the Dynamic Recompiler (JIT) option.<br />
* Don't use external BIOS images.<br />
* If you ARE using external BIOS images, (or must for some reason) try enabling Patch DelayLoop SWI<br />
* Try switching between OpenGL Renderer and Software Rasterizer. You may not like the results, but it may get you more speed.<br />
* Disable this option: Config > Emulation Settings > Enable Bus-Level Timing.<br />
* Use Dual SPU in the Sound Settings, and don't use Advanced SPU Logic.<br />
* In the Sound Settings, set interpolation to none.<br />
* If you can handle it, turn off the sound altogether. Try listening to a shoutcast instead; I recommend happyday new age or ah.fm!<br />
* Don't use the NOSSE2 build.<br />
* Don't use someone else's unofficial "SVN" build, it probably is not fully optimized, since we make our Windows releases using some profiler-guided optimization, which helps by several FPS.<br />
* Use frame skip. Even frameskipping by 1 will help and many games will stay playable. Frameskipping is continually tweaked in each release to get more bang for the buck, but beware that dual screen 3d games still may not work well under frameskip. If screens seem stuck, pick a different frameskip value.<br />
* There is now the option of disabling an entire screen. (Tools > View Layers > Main GPU, etc) Consider disabling a screen which is useless in the game you are playing. NOTE: View > LCDs Layout > One LCD *WILL NOT* increase your speed. This merely hides the lcd, but it is still rendered. This is important for dual screen games and other weird cases.<br />
* Don't scale the window anything different than 1x and don't use resize filters.<br />
* If you are using the software rasterizer, disable edge marking and fog if you feel like they aren't needed. If the game isn't using those features then this won't help.<br />
* Buying a newer, faster computer is somewhat more expensive, but it has other side benefits. <br />
* Don't use a netbook.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
* Your graphics card is irrelevant. Upgrade your CPU.<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
Try disabling the speed limiter and crank up the frameskip setting. They are both found in the config menu. Don't expect any miracles, more than 1.5 the base speed is unlikely.<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in O SX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
Additionally games using flash memory wont save due to that save type simply not being implemented fully. Here is a partial list of those:<br />
* Warioware D.I.Y.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmume window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. Desmume tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows OS: Windows XP SP2 or later<br />
* Mac OS: OS X v10.5.8 Leopard or later<br />
* Linux OS: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows OS: Windows Vista SP2 or later<br />
* Mac OS: OS X v10.6.8 Snow Leopard or later<br />
* Linux OS: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
[''Windows''] For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
<br />
* If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
* If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
* If you want to use the developer features, use the dev build. It includes extra debugging code and logging, as well as gdb_stub.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
[''Windows / Mac / Linux''] Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.4GHz CPU will run DeSmuME much faster than an 8-core 1.7GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
[''Windows / Mac / Linux''] Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
[''Windows''] The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
[''Windows / Mac / Linux''] By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
[''Windows''] Yes, you can display the DS screens in full-screen mode. In Windows DeSmuME, click the DeSmuME window and press Alt-Enter.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
[''Mac''] Yes, you can display each DS screen in separate windows. In Mac DeSmuME, choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
[''Windows / Mac / Linux''] Each port supports most or all of the video output settings, but have different user interfaces for changing these settings.<br />
<br />
* Windows: To change the video filter, choose View > Magnification Filters. To toggle bilinear filtering, choose Config > Display Method. <br />
* Mac: To show all video settings, choose View > Show Display Video Settings. You can then change any video setting from the Display Video Settings panel.<br />
* Linux: To change the video filter, choose Config > Primary Interpolation. To change the final video output, choose Config > Secondary Interpolation.<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
[''Windows / Mac / Linux''] Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported in all DeSmuME versions.<br />
<br />
* Windows: Has full microphone support. If you want to use a physical microphone, you must configure it through your Windows Control Panel and set it up as the default audio input device. Be sure to set your mic gain to an appropriate level to avoid too much clipping.<br />
* Mac: Does not support using a physical microphone. Instead, you are limited to using one of the simulated microphone commands.<br />
* Linux: Requires libasound in order to use a physical microphone.<br />
<br />
If you are using a simulated microphone, you will have to experiment with the microphone hotkey timing. Each press of the hotkey simulates audio running through the DS microphone. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
<br />
'''TIP:''' Remove the 'wind deflector' that comes with most microphones these days for better results.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
[[List_of_Nintendo_DS_games_with_GBA_connectivity]]<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
[''Windows / Mac / Linux''] This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
[''Windows / Mac / Linux''] By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked ? ===<br />
No. A real NDS uses WIFI for multiplayer, and that isn't emulated in DeSmuME yet. Also, look at the questions on [[Faq#Wi-Fi and WFC|WIFI Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
Wifi is not supported. It isn't finished yet, it is experimental, and you're better off not wasting your time trying to use it. Don't bug us on the forums when you discover that it doesn't work; that's what "not supported" means.<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future? ===<br />
Most likely, DeSmuME will not support the emulation of the Nintendo 3DS or Nintendo 2DS in the future. The hardware of both a 3DS and a 2DS are very different from an NDS, so emulating a 3DS/2DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
In the [http://sourceforge.net/tracker/?group_id=164579&atid=832291 official bug tracker]. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
* All known 2D graphics features are correct. Mosaics work but are imperfect. There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
<br />
* With the software rasterizer, all 3D features are emulated, except the following: wireframes and antialising. The OpenGL Renderer fails for some other features; it is near its limit and may never be fixed. Both engines have trouble with some shadows, but software rasterizer is better. The software rasterizer has some noticeable texturing issues right now, especially in 2d games. In software rasterizer, there are issues similar to 2d with incorrect bit depth being used in the pipeline. <br />
<br />
One last thing -- if buttons and labels and menus rendering on the 3d screen are obscured (for example, a button but no label is on it) then you may need to use the software rasterizer. Or you may need to use OpenGL instead. Each renderer has strengths and weaknesses, which is why both are provided.<br />
<br />
* All sound features are emulated. The microphone support is new and the manual should be consulted, where you will find out, among other things, that it is only supported in windows right now.<br />
<br />
* We are unaware of any outstanding issues in the core system hardware (CPU, DMA, MMU) but there are certainly still some. The instruction and memory timings are quite incorrect; however, this seems not to hurt most titles.<br />
<br />
* DLDI - Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
'''Warning''' - As of june 2010, it has become suspected that our compact flash emulation has bugs which sometimes prevent access to the first subdirectory in the FAT filesystem; and that causes FAT images which are written to, to become corrupted. We need a FAT expert to help us out, as I think both bugs are related.<br />
'''Warning''' - As of september 2010, FAT support has been rewritten and indeed it fixed the bugs mentioned above, but it doesn't support LFN yet.<br />
<br />
=== Does the GDB stub still work? ===<br />
[''Windows''] It is present in the dev build.<br />
<br />
=== How do I enable the GDB stub? ===<br />
[''Windows''] Add #define GDB_STUB to src/windows/userconfig/userconfig.h which you have created according to the instructions in src/windows/defaultconfig/userconfig.h ; sorry for this confusing system, but that's how it is for now.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an on-line communications system. <br />
<br />
Information you'll need:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
Programs you'll need:<br />
* mIRC - Windows<br />
* ChatZilla - Firefox add-on<br />
* XChat - Linux, Windows<br />
* plenty other, see [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients wikipedia]<br />
<br />
Language:<br />
* Most of the people on the channel speak, or try to speak the English language.<br />
<br />
=== Where is the manual? ===<br />
Over [http://wiki.desmume.org/index.php?title=Manual here]. It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
== SVN and Compiling ==<br />
<br />
=== Where do I get svn builds? ===<br />
[http://www.emucr.com emucr]. Please note that these builds are unofficial and unsupported.<br />
<br />
=== Why doesn't the DeSmuME team release pre-build SVN binaries ? ===<br />
The DeSmuME team doesn't have trusted people to make the builds, and don't want to get involved on builds that could include whatever the author wants. Every newbie coder could do a version that, after 10 minutes of gameplay, for example, starts corrupting stuff from the hard disk. Also, anyone incapable of building it's own builds, probably isn't very helpful for submitting bug reports or helping the development team on SVN releases, so there isn't much point on them getting a SVN build.<br />
<br />
=== How do I get the latest svn code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ svn] is a developers tool. It's used to let multiple developers work on the same codebase without conflicts. If you're an end-user, don't worry about it. If you're a developer, see the question on how to get the latest svn code and build DeSmuME yourself. See [http://en.wikipedia.org/wiki/Subversion_(software) wikipedia] for more info.<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
* Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
* Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* For Linux, any recent version of GCC and toolchain should work.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the visual c++ express 2008 installer and I can't find it. ===<br />
It's there if you click around more. I'll save you time: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Please add them to the appropriate sourceforge tracker. Patches go to the 'Patches' tracker : http://sourceforge.net/tracker/?group_id=164579&atid=832293<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== Im not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile svn builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on irc. Also, adding to or perfecting the documentation in the wiki is useful. You could also watch for and answer questions placed on the DeSmuME forum.<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://nocash.emubase.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a compact flash image<br />
<br />
== Mac Users ==<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories. Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogermanhttps://wiki.desmume.org/index.php?title=FaqFaq2013-08-28T22:33:16Z<p>Rogerman: /* Will DeSmuME ever support Nintendo 3DS emulation in the future? */</p>
<hr />
<div>'''DeSmuME FAQ 0.9.9'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped? [http://wiki.desmume.org/index.php?title=File:Xbutton_1.png] [http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! ===<br />
Make sure you are using the latest version of the emulator.<br />
Delete your ini file and re-run the emulator.<br />
Quit using patched roms. Remove the AP (Anti-piracy) patch from the rom.<br />
Quit using cheats.<br />
Use/dump external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games</strong>. Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3d renderers. Quit using frameskip.<br />
* Do not use patched roms. Never use patched roms.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
* Stop using savestates. Use in-game saves.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot.<br />
* Go to desmume.org and make sure you are using the latest version. The latest version is 0.9.9. (DeSmuME 0.8 and 0.3.4 are old and unsupported)<br />
* Turn off your virus scanner.<br />
* Config > Emulation Settings > Enable Advanced Bus-Level Timing - this will slow down emulation, but fix some games.<br />
* Use external BIOS images; try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your .ini file which may have options that are breaking your DeSmuME.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary<br />
<br />
If it really doesn't boot up no matter what you try, you can submit a bug report for the game on the Sourceforge bugtracker.<br />
You might also find ways to patch the games to work better on emulators by searching on the internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using desmume! ===<br />
This is not desmume's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
Yeah, for you and everyone else. New releases may always be a step backwards in some (or many) cases from earlier releases in terms of speed. There is a delicate balance between compatibility and speed and sometimes one advances further than the other. <br />
<br />
I will be frank: DeSmuME focuses more on compatibility and perks than on speed. Our philosophy is, you can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility and perks. We take care of our side of things, so you should take care of yours.<br />
<br />
At any rate, here is the master list of tricks to speed things up:<br />
<br />
* Use the Dynamic Recompiler (JIT) option.<br />
* Don't use external BIOS images.<br />
* If you ARE using external BIOS images, (or must for some reason) try enabling Patch DelayLoop SWI<br />
* Try switching between OpenGL Renderer and Software Rasterizer. You may not like the results, but it may get you more speed.<br />
* Disable this option: Config > Emulation Settings > Enable Bus-Level Timing.<br />
* Use Dual SPU in the Sound Settings, and don't use Advanced SPU Logic.<br />
* In the Sound Settings, set interpolation to none.<br />
* If you can handle it, turn off the sound altogether. Try listening to a shoutcast instead; I recommend happyday new age or ah.fm!<br />
* Don't use the NOSSE2 build.<br />
* Don't use someone else's unofficial "SVN" build, it probably is not fully optimized, since we make our Windows releases using some profiler-guided optimization, which helps by several FPS.<br />
* Use frame skip. Even frameskipping by 1 will help and many games will stay playable. Frameskipping is continually tweaked in each release to get more bang for the buck, but beware that dual screen 3d games still may not work well under frameskip. If screens seem stuck, pick a different frameskip value.<br />
* There is now the option of disabling an entire screen. (Tools > View Layers > Main GPU, etc) Consider disabling a screen which is useless in the game you are playing. NOTE: View > LCDs Layout > One LCD *WILL NOT* increase your speed. This merely hides the lcd, but it is still rendered. This is important for dual screen games and other weird cases.<br />
* Don't scale the window anything different than 1x and don't use resize filters.<br />
* If you are using the software rasterizer, disable edge marking and fog if you feel like they aren't needed. If the game isn't using those features then this won't help.<br />
* Buying a newer, faster computer is somewhat more expensive, but it has other side benefits. <br />
* Don't use a netbook.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
* Your graphics card is irrelevant. Upgrade your CPU.<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
Try disabling the speed limiter and crank up the frameskip setting. They are both found in the config menu. Don't expect any miracles, more than 1.5 the base speed is unlikely.<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in O SX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
Additionally games using flash memory wont save due to that save type simply not being implemented fully. Here is a partial list of those:<br />
* Warioware D.I.Y.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmume window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. Desmume tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows OS: Windows XP SP2 or later<br />
* Mac OS: OS X v10.5.8 Leopard or later<br />
* Linux OS: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows OS: Windows Vista SP2 or later<br />
* Mac OS: OS X v10.6.8 Snow Leopard or later<br />
* Linux OS: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
[''Windows''] For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
<br />
* If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
* If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
* If you want to use the developer features, use the dev build. It includes extra debugging code and logging, as well as gdb_stub.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
[''Windows / Mac / Linux''] Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.4GHz CPU will run DeSmuME much faster than an 8-core 1.7GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
[''Windows / Mac / Linux''] Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
[''Windows''] The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
[''Windows / Mac / Linux''] By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
[''Windows''] Yes, you can display the DS screens in full-screen mode. In Windows DeSmuME, click the DeSmuME window and press Alt-Enter.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
[''Mac''] Yes, you can display each DS screen in separate windows. In Mac DeSmuME, choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
[''Windows / Mac / Linux''] Each port supports most or all of the video output settings, but have different user interfaces for changing these settings.<br />
<br />
* Windows: To change the video filter, choose View > Magnification Filters. To toggle bilinear filtering, choose Config > Display Method. <br />
* Mac: To show all video settings, choose View > Show Display Video Settings. You can then change any video setting from the Display Video Settings panel.<br />
* Linux: To change the video filter, choose Config > Primary Interpolation. To change the final video output, choose Config > Secondary Interpolation.<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
[''Windows / Mac / Linux''] Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported in all DeSmuME versions.<br />
<br />
* Windows: Has full microphone support. If you want to use a physical microphone, you must configure it through your Windows Control Panel and set it up as the default audio input device. Be sure to set your mic gain to an appropriate level to avoid too much clipping.<br />
* Mac: Does not support using a physical microphone. Instead, you are limited to using one of the simulated microphone commands.<br />
* Linux: Requires libasound in order to use a physical microphone.<br />
<br />
If you are using a simulated microphone, you will have to experiment with the microphone hotkey timing. Each press of the hotkey simulates audio running through the DS microphone. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
<br />
'''TIP:''' Remove the 'wind deflector' that comes with most microphones these days for better results.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
[''Windows / Mac / Linux''] This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
[''Windows / Mac / Linux''] By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked ? ===<br />
No. A real NDS uses WIFI for multiplayer, and that isn't emulated in DeSmuME yet. Also, look at the questions on [[Faq#Wi-Fi and WFC|WIFI Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
Wifi is not supported. It isn't finished yet, it is experimental, and you're better off not wasting your time trying to use it. Don't bug us on the forums when you discover that it doesn't work; that's what "not supported" means.<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future? ===<br />
Most likely, DeSmuME will not support the emulation of the Nintendo 3DS or Nintendo 2DS in the future. The hardware of both a 3DS and a 2DS are very different from an NDS, so emulating a 3DS/2DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
In the [http://sourceforge.net/tracker/?group_id=164579&atid=832291 official bug tracker]. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
* All known 2D graphics features are correct. Mosaics work but are imperfect. There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
<br />
* With the software rasterizer, all 3D features are emulated, except the following: wireframes and antialising. The OpenGL Renderer fails for some other features; it is near its limit and may never be fixed. Both engines have trouble with some shadows, but software rasterizer is better. The software rasterizer has some noticeable texturing issues right now, especially in 2d games. In software rasterizer, there are issues similar to 2d with incorrect bit depth being used in the pipeline. <br />
<br />
One last thing -- if buttons and labels and menus rendering on the 3d screen are obscured (for example, a button but no label is on it) then you may need to use the software rasterizer. Or you may need to use OpenGL instead. Each renderer has strengths and weaknesses, which is why both are provided.<br />
<br />
* All sound features are emulated. The microphone support is new and the manual should be consulted, where you will find out, among other things, that it is only supported in windows right now.<br />
<br />
* We are unaware of any outstanding issues in the core system hardware (CPU, DMA, MMU) but there are certainly still some. The instruction and memory timings are quite incorrect; however, this seems not to hurt most titles.<br />
<br />
* DLDI - Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
'''Warning''' - As of june 2010, it has become suspected that our compact flash emulation has bugs which sometimes prevent access to the first subdirectory in the FAT filesystem; and that causes FAT images which are written to, to become corrupted. We need a FAT expert to help us out, as I think both bugs are related.<br />
'''Warning''' - As of september 2010, FAT support has been rewritten and indeed it fixed the bugs mentioned above, but it doesn't support LFN yet.<br />
<br />
=== Does the GDB stub still work? ===<br />
[''Windows''] It is present in the dev build.<br />
<br />
=== How do I enable the GDB stub? ===<br />
[''Windows''] Add #define GDB_STUB to src/windows/userconfig/userconfig.h which you have created according to the instructions in src/windows/defaultconfig/userconfig.h ; sorry for this confusing system, but that's how it is for now.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an on-line communications system. <br />
<br />
Information you'll need:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
Programs you'll need:<br />
* mIRC - Windows<br />
* ChatZilla - Firefox add-on<br />
* XChat - Linux, Windows<br />
* plenty other, see [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients wikipedia]<br />
<br />
Language:<br />
* Most of the people on the channel speak, or try to speak the English language.<br />
<br />
=== Where is the manual? ===<br />
Over [http://wiki.desmume.org/index.php?title=Manual here]. It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
== SVN and Compiling ==<br />
<br />
=== Where do I get svn builds? ===<br />
[http://www.emucr.com emucr]. Please note that these builds are unofficial and unsupported.<br />
<br />
=== Why doesn't the DeSmuME team release pre-build SVN binaries ? ===<br />
The DeSmuME team doesn't have trusted people to make the builds, and don't want to get involved on builds that could include whatever the author wants. Every newbie coder could do a version that, after 10 minutes of gameplay, for example, starts corrupting stuff from the hard disk. Also, anyone incapable of building it's own builds, probably isn't very helpful for submitting bug reports or helping the development team on SVN releases, so there isn't much point on them getting a SVN build.<br />
<br />
=== How do I get the latest svn code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ svn] is a developers tool. It's used to let multiple developers work on the same codebase without conflicts. If you're an end-user, don't worry about it. If you're a developer, see the question on how to get the latest svn code and build DeSmuME yourself. See [http://en.wikipedia.org/wiki/Subversion_(software) wikipedia] for more info.<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
* Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
* Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* For Linux, any recent version of GCC and toolchain should work.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the visual c++ express 2008 installer and I can't find it. ===<br />
It's there if you click around more. I'll save you time: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Please add them to the appropriate sourceforge tracker. Patches go to the 'Patches' tracker : http://sourceforge.net/tracker/?group_id=164579&atid=832293<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== Im not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile svn builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on irc. Also, adding to or perfecting the documentation in the wiki is useful. You could also watch for and answer questions placed on the DeSmuME forum.<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://nocash.emubase.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a compact flash image<br />
<br />
== Mac Users ==<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories. Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogermanhttps://wiki.desmume.org/index.php?title=FaqFaq2013-07-27T17:09:41Z<p>Rogerman: /* Using The Emulator */</p>
<hr />
<div>'''DeSmuME FAQ 0.9.9'''<br />
<br />
This FAQ holds a list of many commonly asked questions about DeSmuME.<br />
<br />
If you need information about an older version, refer to one of the older FAQs for that version:<br />
* FAQ 0.9.4, [[Faq_094]]<br />
* FAQ 0.9.5, [[Faq_095]]<br />
* FAQ 0.9.6, [[Faq_096]]<br />
<br />
<br />
If the FAQ is unable to answer any questions you have, then please make sure that you also consult the [[manual]]. If this doesn't help, either, post your question on the [http://forums.desmume.org forums]. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it <i>does</i>, and it you may get an inkling of them here: [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way]<br />
<br />
Also keep in mind that DeSmuME is a powerful tool and can't work by magic; it requires some careful operational skills. Think of a cross between a dental drill, a helicopter, and a swiss army knife.<br />
<br />
== Pokemon questions ==<br />
We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.<br />
<br />
=== How to get to the menu in Pokemon? ===<br />
You may remember these screens, which you skipped? [http://wiki.desmume.org/index.php?title=File:Xbutton_1.png] [http://wiki.desmume.org/index.php?title=File:Xbutton_2.png]<br />
<br />
For extra credit, contemplate why this might have changed.<br />
<br />
=== The main game graphics are missing! The screen is black! ===<br />
Make sure you are using the latest version of the emulator.<br />
Delete your ini file and re-run the emulator.<br />
Quit using patched roms. Remove the AP (Anti-piracy) patch from the rom.<br />
Quit using cheats.<br />
Use/dump external firmware/BIOS.<br />
<br />
=== Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported? ===<br />
<strong>We are not going to support these games</strong>. Don't waste time asking, it will only make us angry. If you can't make it work, then give up and go buy the cart. gbatemp.net and ds-scene.net may be more interested in this topic.<br />
<br />
If you create new threads in our forum about these games, don't be surprised if they get closed or deleted depending on how obnoxious they are.<br />
<br />
=== When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another. ===<br />
Next time, try saving earlier and dont ignore this warning: [http://wiki.desmume.org/index.php?title=File:Warning.png]<br />
<br />
=== When I beat the elite four, the game saves and resets and it tries to start a new game! ===<br />
Next time, try saving earlier, and if it doesnt work, think hard about whats going to happen, and try the suggestions under "I am having any problem whatsoever!" which used to be at the top of this file, but we had to put other Pokemon questions even higher.<br />
<br />
=== I got to the end of Pokemon and now I can't reset and load my save file! ===<br />
Too bad. Next time if you're going to play a game that requires that you make in-game saves consider making sure it works before you invest that much time in it.<br />
<br />
== Big Questions ==<br />
<br />
=== *I am having any problem whatsoever! For instance, files aren't being created, but this also includes every other problem! What should I try first?* ===<br />
* Try deleting your ini file.<br />
* Run DeSmuME out of a folder in your documents directory, and put all roms etc. in there as well. Don't run it out of the archive, from the program files, or from a flash drive. if you don't know how to do that, then ask someone near you that knows the first thing about using computers.<br />
* Change display method to DirectDraw SW. Change 3d renderers. Quit using frameskip.<br />
* Do not use patched roms. Never use patched roms.<br />
* Turn off your laptop's power management or set its performance profile to performance, or max speed. This solves weird issues where games slow to a crawl over time.<br />
<br />
=== The emulator crashes / freezes ===<br />
DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:<br />
* Reboot.<br />
* Go to desmume.org and make sure you are using the latest version. The latest version is 0.9.9. (DeSmuME 0.8 and 0.3.4 are old and unsupported)<br />
* Turn off your virus scanner.<br />
* Config > Emulation Settings > Enable Advanced Bus-Level Timing - this will slow down emulation, but fix some games.<br />
* Use external BIOS images; try it with and without "Emulate SWIs with BIOS images"<br />
* Delete your .ini file which may have options that are breaking your DeSmuME.<br />
* Using cheat codes modifies the game and can make it crash/freeze if it comes to an unexpected situation, delete the game's .dct if necessary<br />
<br />
If it really doesn't boot up no matter what you try, you can submit a bug report for the game on the Sourceforge bugtracker.<br />
You might also find ways to patch the games to work better on emulators by searching on the internet, but that is not something you should seek help with on the DeSmuME forums.<br />
<br />
=== My computer overheats and freezes or reboots while using desmume! ===<br />
This is not desmume's fault. Check for dusty fans, malfunctioning power control software, and update your video drivers.<br />
<br />
=== Graphics / screens are missing, corrupted, swapped, switched, or black! ===<br />
* Manipulate View > LCDs Layout tools to fix swapped/switched screens<br />
* You must be using an old ini or config file. Delete it and re-run the emulator.<br />
* Try switching between OpenGL Renderer and Software Rasterizer. <br />
* Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.<br />
<br />
=== Every button I press is shown on the screen! Or, a counter that keeps going up is displayed! ===<br />
View > HUD > Uncheck display input<br />
<br />
=== DeSmuME runs too slow! ===<br />
Yeah, for you and everyone else. New releases may always be a step backwards in some (or many) cases from earlier releases in terms of speed. There is a delicate balance between compatibility and speed and sometimes one advances further than the other. <br />
<br />
I will be frank: DeSmuME focuses more on compatibility and perks than on speed. Our philosophy is, you can always mow some extra lawns or babysit some more rugrats to buy upgrades for your computer; but there's nothing you can do to fix compatibility and perks. We take care of our side of things, so you should take care of yours.<br />
<br />
At any rate, here is the master list of tricks to speed things up:<br />
<br />
* Use the Dynamic Recompiler (JIT) option.<br />
* Don't use external BIOS images.<br />
* If you ARE using external BIOS images, (or must for some reason) try enabling Patch DelayLoop SWI<br />
* Try switching between OpenGL Renderer and Software Rasterizer. You may not like the results, but it may get you more speed.<br />
* Disable this option: Config > Emulation Settings > Enable Bus-Level Timing.<br />
* Use Dual SPU in the Sound Settings, and don't use Advanced SPU Logic.<br />
* In the Sound Settings, set interpolation to none.<br />
* If you can handle it, turn off the sound altogether. Try listening to a shoutcast instead; I recommend happyday new age or ah.fm!<br />
* Don't use the NOSSE2 build.<br />
* Don't use someone else's unofficial "SVN" build, it probably is not fully optimized, since we make our Windows releases using some profiler-guided optimization, which helps by several FPS.<br />
* Use frame skip. Even frameskipping by 1 will help and many games will stay playable. Frameskipping is continually tweaked in each release to get more bang for the buck, but beware that dual screen 3d games still may not work well under frameskip. If screens seem stuck, pick a different frameskip value.<br />
* There is now the option of disabling an entire screen. (Tools > View Layers > Main GPU, etc) Consider disabling a screen which is useless in the game you are playing. NOTE: View > LCDs Layout > One LCD *WILL NOT* increase your speed. This merely hides the lcd, but it is still rendered. This is important for dual screen games and other weird cases.<br />
* Don't scale the window anything different than 1x and don't use resize filters.<br />
* If you are using the software rasterizer, disable edge marking and fog if you feel like they aren't needed. If the game isn't using those features then this won't help.<br />
* Buying a newer, faster computer is somewhat more expensive, but it has other side benefits. <br />
* Don't use a netbook.<br />
* If you're using a laptop/notebook, try disabling power management or setting the system to run in maximum performance. Desktop users should consider investigating this too, just in case. Additionally, desktop users should investigate whether their system is clogged with dust, or a fan is malfunctioning, or a heatsink has fallen off of a chip. Tons of people run into these problems, believe it or not. Finally, all AMD users should disable Cool'n'quiet which doesn't work worth a crap.<br />
* Your graphics card is irrelevant. Upgrade your CPU.<br />
<br />
=== What is the turbo button / speed up button / magic fast-forward button? ===<br />
Try disabling the speed limiter and crank up the frameskip setting. They are both found in the config menu. Don't expect any miracles, more than 1.5 the base speed is unlikely.<br />
<br />
== Savegames and Savestates ==<br />
<br />
=== Every time I run DeSmuME, my save files are gone and I have to start over ===<br />
See [[#Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21]]<br />
<br />
=== My saved games are gone when I upgraded! ===<br />
In 0.9.5, the default location for .dsv files changed. Older versions would use the rom directory; and now in Windows it is the directory that the emulator runs from; and in O SX/Linux it is ~/.config/desmume. In Windows, use the path configuration to point to wherever your .dsv files are or copy them to the new spot. If you've been running into problems with this you can probably verify it by searching for *.dsv on your hard disk and finding duplicates. Be careful when copying files around that you don't overwrite files unintentionally.<br />
<br />
In 0.9.6 some save files are invalidated due a change in emulation. There is really nothing you can do about this. What's worse, the game will detect that its save data is invalid and wipe it when it boots up. So if you're reading this, it's too late for you. You should have heeded the warning we put on our press release.<br />
<br />
The only known game which does this is Dawn of Sorrow, but there may be others.<br />
<br />
=== Why does this game fail to save? / I get the error "Data could not be accessed. Turn off the power and reinsert the DS card." ===<br />
You may have data laying around from older versions of DeSmuME. If you can cope with starting over, try deleting all relevant .dsv and .sav files. Recovering that data for use in new emulators is an advanced, and older topic: check old versions of the FAQ.<br />
<br />
A few games save files fail to autodetect. Here is a list of the cases we know:<br />
<br />
* Spider-Man 3 (should be autodetect_size=1, detected as 3)<br />
* Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)<br />
If you find any other game for which automatic savetype detection does not work, please let the developers know by posting on the forum or submitting a bug. If you want to fix it yourself, you may need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.<br />
<br />
Additionally games using flash memory wont save due to that save type simply not being implemented fully. Here is a partial list of those:<br />
* Warioware D.I.Y.<br />
<br />
=== Can I use my save states across versions? ===<br />
Mileage may vary. Due to constant internal changes in DeSmuME, it is possible that a save state created with one version may not work with another version of DeSmuME. Savestate compatibility is preserved wherever possible, but it is not always possible. Please note that for easily confused gamers, the use of SAVESTATES is discouraged, as these are likely to break between emulator versions. Instead use SAVE FILES. These are likely to survive between emulator versions. This means that you will have to use save points within the game. SAVE FILES are stored in .dsv files. Also, see this article for further details: [[Savefile or savestate]]<br />
<br />
Savestates from 0.9.5 loaded in 0.9.6 may suffer from silenced audio or flipped screens. Try playing the game for a while to see if it fixes, but you probably should have heeded the advice above.<br />
<br />
=== Can I convert a save file from ideas or no$gba nocash or my flash cart to DeSmuME .dsv? or from a .duc or any other save file format? ===<br />
# first, try importing the save file:<br />
## close the emulator and delete any existing .DSV and .SAV file for that game<br />
## open the emulator and the game. wait for the game to settle down on the title screen<br />
## import the save file. reset the rom.<br />
## now, if your save files appear, you have succeeded. otherwise, you need to take other measures.<br />
# Convert the save file using [http://saves.uniquegeeks.net/g/index/page.aspx?id=16] or [http://www.shunyweb.info/convert.php]<br />
Target format should be DeSmuME or RAW<br />
# Load the game. Let it get to the main menu<br />
# Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)<br />
# Use File > Import Backup Memory and pick the converted save file<br />
# Reset the emulator<br />
(* Step 3 is not always necessary, if you are smart and lucky, however, it will never hurt to do it, unless you pick the wrong size)<br />
<br />
=== Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile? ===<br />
# Use File > Export Backup Memory<br />
# Name the save file<br />
# Import the battery into the emulator you are using.<br />
<br />
== Troubleshooting and Errors ==<br />
<br />
=== Every time I run the program my settings are gone! I have to keep entering them over and over! ===<br />
<br />
Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.<br />
<br />
=== My DeSmume window disappeared! / I can hear sound and it is in the taskbar but I can't see the window! ===<br />
<br />
Delete your ini file. This is caused by exiting the app while you have executed win+d show desktop mode. Desmume tries to remember the window position, but windows implements show desktop by setting the window position to something like x=-32000 and so that gets saved. There is supposed to be some code to handle that case, but I guess it is not working well. This is a problem in many windows apps and this solution will usually fix it. If you don't want to lose all the other settings in your ini file, poke around in it and find the offending items which should look like this:<br />
<br />
<code><pre><br />
[Video]<br />
Window Size=0<br />
Window width=0<br />
Window height=0<br />
WindowPosX=-32000<br />
WindowPosY=-32000<br />
</pre></code><br />
Delete the -32000 items<br />
<br />
=== Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware ===<br />
It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware.<br />
If there was a way around it, I would've just told you.<br />
You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.<br />
<br />
=== I have a gameplay related question ===<br />
Please check a site like http://www.gamefaqs.com, and don't post gameplay related questions on the forum or IRC *unless* you believe there is a bug in the emulation of DeSmuME.<br />
<br />
=== Why doesn't OpenGL 3D work in Linux? ===<br />
Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.<br />
<br />
=== Why doesn't OpenGL 3D work in windows? ===<br />
Update your video card drivers.<br />
<br />
== Using The Emulator ==<br />
<br />
=== What are the minimum hardware requirements for DeSmuME? ===<br />
From a purely technical standpoint, there are no real minimum requirements. However, for bearable speeds in most games (with a few exceptions), you would need at least the following:<br />
* Windows OS: Windows XP SP2 or later<br />
* Mac OS: OS X v10.5.8 Leopard or later<br />
* Linux OS: Any recent Linux distribution with a 2.6 kernel<br />
* CPU: 2.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 1 GB<br />
<br />
=== What are the recommended hardware requirements for DeSmuME? === <br />
The following configuration should assure that almost every game can be played at full speed:<br />
* Windows OS: Windows Vista SP2 or later<br />
* Mac OS: OS X v10.6.8 Snow Leopard or later<br />
* Linux OS: Any recent Linux distribution with a 2.6 kernel.<br />
* CPU: 3.0 GHz Intel Core 2 Duo or equivalent<br />
* RAM: 2 GB<br />
<br />
=== There are several different DeSmuME executables available. Which EXE do I use? ===<br />
[''Windows''] For most users, the best version to use is the 64-bit build. Most modern setups will support the 64-bit build, and it should always be your first choice in DeSmuME EXEs. However, if the 64-bit build doesn't work out for you, there are also the ''standard 32-bit'' and ''32-bit non-SSE2'' builds to choose from. Also, if you are a developer, you can use the ''dev'' build.<br />
<br />
* If you have a 32-bit CPU (or are running 32-bit Windows), use the standard 32-bit build. Note that this build is SSE2-enabled, and therefore requires an Intel Pentium 4, AMD Opteron, or AMD Athlon 64 CPU or newer in order to run.<br />
* If you have an older CPU, use the 32-bit non-SSE2 build. However, the non-SSE2 build has lower performance than the standard 32-bit build, so only use it if your CPU does not support SSE2.<br />
* If you want to use the developer features, use the dev build. It includes extra debugging code and logging, as well as gdb_stub.<br />
<br />
=== Does DeSmuME make use of multiple CPUs or multiple CPU cores? ===<br />
[''Windows / Mac / Linux''] Yes, DeSmuME takes advantage of multiple CPUs/cores. However, multiple CPU support varies with each port, so some ports may have different performance than others. Also note that, in general, DeSmuME benefits more from few fast CPUs than from many slow CPUs. For example, a dual-core 3.4GHz CPU will run DeSmuME much faster than an 8-core 1.7GHz CPU.<br />
<br />
=== Can I force DeSmuME to "detect" an arbitrary number of CPUs? ===<br />
[''Windows / Mac / Linux''] Yes, you can configure DeSmuME's CPU core detection. By default, DeSmuME automatically detects the number of CPU cores in your system, but it might be useful to force DeSmuME to detect one core and run it like you were using a single-core CPU system. It might also be useful to force DeSmuME to detect more cores than what your CPU actually has. In any case, there is a limit to how many CPU cores any given feature will take advantage of. For example, SoftRasterizer has a maximum limit of 32 threads it can use for processing 3D graphics.<br />
<br />
* Windows: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect. <br />
* Mac: Choose View > Show 3D Rendering Settings. Then in the 3D Rendering Settings panel, under Rendering Threads, select the number of threads you want to use.<br />
* Linux: Use the command line argument, "--num-cores=''n''", where ''n'' is the number of cores to detect.<br />
<br />
=== What do the three numbers or the percentage in the FPS display mean? ===<br />
[''Windows''] The first is your actual FPS which is how fast the emulator is running on your system. If it is less than 60 then you need speed hacks or a more powerful CPU. The second is the 3D FPS, which is a rough gauge of how fast the game is supposed to be running. If you are seeing 60/15 then the game will feel slow because it is sloppily coded but there's NOTHING YOU CAN DO ABOUT IT short of turning off speed throttling and playing at 100fps. The final number is the ARM9 load average, and for your purposes, it is the same as the second number. Don't start bragging about how your DeSmuME runs at 99% or you will be laughed at.<br />
<br />
The ARM9 load average became imprecise at some point. In 0.9.7 it will be more precise, and be accompanied by an ARM7 load average.<br />
<br />
=== How can I make the DS screens better fill my widescreen monitor? ===<br />
[''Windows / Mac / Linux''] By default, the two DS screens are arranged in a vertical layout, which is ill-suited for filling a widescreen monitor. However, DeSmuME allows you to arrange the DS screens in a horizontal layout. Alternatively, you can choose to display a single DS screen on your monitor.<br />
<br />
=== Does DeSmuME support full-screen mode? ===<br />
[''Windows''] Yes, you can display the DS screens in full-screen mode. In Windows DeSmuME, click the DeSmuME window and press Alt-Enter.<br />
<br />
=== Is it possible to display each DS screen in separate windows? ===<br />
[''Mac''] Yes, you can display each DS screen in separate windows. In Mac DeSmuME, choose File > New Display Window so that you have two display windows. Then for the first window, choose View > Display Mode > Main, and for the second window, choose View > Display Mode > Touch.<br />
<br />
=== Is it possible to display each DS screen at different sizes within a single window? ===<br />
No, you cannot display each DS screen at different sizes within a single window. Do note that there is a very strong chance that this particular feature will never be implemented in any future version of DeSmuME.<br />
<br />
=== How do I customize the appearance of the emulated DS video output? ===<br />
[''Windows / Mac / Linux''] Each port supports most or all of the video output settings, but have different user interfaces for changing these settings.<br />
<br />
* Windows: To change the video filter, choose View > Magnification Filters. To toggle bilinear filtering, choose Config > Display Method. <br />
* Mac: To show all video settings, choose View > Show Display Video Settings. You can then change any video setting from the Display Video Settings panel.<br />
* Linux: To change the video filter, choose Config > Primary Interpolation. To change the final video output, choose Config > Secondary Interpolation.<br />
<br />
=== How do I enter 'cheat codes' in DeSmuME? ===<br />
There are two types of cheat codes: Action Replay and 'raw' or 'internal' cheats. The 'raw' or 'internal' cheats include cheat-finding facilities where you may manually search for and alter the memory positions which work to your advantage. There's an excellent article on 'raw' or 'internal' cheats in the wiki on [[Using Cheats in DeSmuMe ]]. For Action Replay Cheats, You can find codes for the NTSC games at http://us.codejunkies.com/Departments/DS-and-GBA.aspx and for the PAL at http://uk.codejunkies.com/Departments/DS-and-GBA.aspx.<br />
<br />
=== Can DeSmuME emulate the DS microphone? ===<br />
[''Windows / Mac / Linux''] Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported in all DeSmuME versions.<br />
<br />
* Windows: Has full microphone support. If you want to use a physical microphone, you must configure it through your Windows Control Panel and set it up as the default audio input device. Be sure to set your mic gain to an appropriate level to avoid too much clipping.<br />
* Mac: Does not support using a physical microphone. Instead, you are limited to using one of the simulated microphone commands.<br />
* Linux: Requires libasound in order to use a physical microphone.<br />
<br />
If you are using a simulated microphone, you will have to experiment with the microphone hotkey timing. Each press of the hotkey simulates audio running through the DS microphone. Some games like quick tapping, others like longer presses. Learning the hotkey timings for your particular game is not an exact science, so you may need to experiment for a while until you finally get it to work.<br />
<br />
'''TIP:''' Remove the 'wind deflector' that comes with most microphones these days for better results.<br />
<br />
=== Does the 'GBA slot' option let me play GBA games? ===<br />
No. A 'real' DS can use the gba slot to play gba games, but DeSmuME does not emulate this. But a 'real' DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles; and that part is emulated by DeSmuME. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or VisualBoy Advance.<br />
<br />
=== How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map? ===<br />
[''Windows / Mac / Linux''] This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.<br />
<br />
=== How do I use the stylus (pen) to 'touch' the screen? ===<br />
[''Windows / Mac / Linux''] By default, your left mouse button is configured to control the DS stylus. Simply left-click the DS touch screen to emulate touching the DS stylus at that touch screen location.<br />
<br />
=== Can I run 2 sessions of the emulator linked together as if two different NDSs linked ? ===<br />
No. A real NDS uses WIFI for multiplayer, and that isn't emulated in DeSmuME yet. Also, look at the questions on [[Faq#Wi-Fi and WFC|WIFI Support]]<br />
<br />
=== How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright? ===<br />
One user got past this by first switching on one of the switches, then pausing the game, and sort of switching on an imaginary switch in the middle of the two switches while manipulating the frame advance hotkey. See, gbatek says that when two points are touched, that the hardware appears as if the average of the two points is actually pressed. But the game expects you to touch them at not-exactly-the-same-time.<br />
<br />
Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: [http://forums.desmume.org/viewtopic.php?pid=11864 Thread]<br />
<br />
=== How can I run homebrew games that require DLDI patching ? ===<br />
Games will be automatically DLDI-patched, but to get file access working, you must activate the slot-2 CompactFlash add-on and specify either a directory to read from or a FAT image (see [[#What_is_DLDI.3F|DLDI]] below). On Windows, click Emulation -> GBA slot, choose "MPCF Flash Card Device", and then specify a path or an image. The --cflash-image and --cflash-path command-line options are also available. Be warned that directories containing many files can take a long time to load.<br />
<br />
== Wi-Fi and WFC ==<br />
<br />
=== Does DeSmuME support Wi-Fi? ===<br />
Wifi is not supported. It isn't finished yet, it is experimental, and you're better off not wasting your time trying to use it. Don't bug us on the forums when you discover that it doesn't work; that's what "not supported" means.<br />
<br />
=== What is WFC / Nintendo WiFi Connection? ===<br />
See the article [[Nintendo wifi config utility]] for more information.<br />
<br />
== General Questions ==<br />
<br />
=== What does DeSmuME emulate and on what systems? ===<br />
DeSmuME attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (NDS). It currently runs on Windows, Linux, and Mac OS X. DSi is not supported.<br />
<br />
=== Will DeSmuME ever support Nintendo 3DS emulation in the future? ===<br />
Most likely, DeSmuME will not support Nintendo 3DS emulation in the future. The hardware of a 3DS is very different from an NDS, so emulating a 3DS would require making a whole new emulator.<br />
<br />
=== What does DeSmuME mean? === <br />
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)<br />
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:<br />
* LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card<br />
* PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.<br />
* FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.<br />
* WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.<br />
<br />
Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".<br />
<br />
=== How is the name DeSmuME pronounced? ===<br />
Try: phonetically. "dee-ess-emmyoo" isn't phonetic. Is it so hard? try "dezz-myoom" or "dezz-moom" or "dehs-moo-mee". You might also try the trick which enables us to pronounce the name of the director of the Sixth Sense as "shamma-lamma-ding-dong" and use "des-moomy-ding-dong-shaballa-smack"<br />
<br />
=== Under what license is DeSmuME distributed? ===<br />
DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html<br />
<br />
=== Can I freely copy DeSmuME? ===<br />
Yes you can, as long as you adhere to the license as specified in the GNU GPL.<br />
<br />
=== Where can I report bugs? ===<br />
In the [http://sourceforge.net/tracker/?group_id=164579&atid=832291 official bug tracker]. Feel free to post to the bug tracker as long as you are willing to take ownership of testing that bug and letting the developers know when it is resolved to your satisfaction. Just don't submit a bug report and run. You may also request features around the same location, too, but in the other trackers.<br />
<br />
=== Can I attach files to bug reports I did not create myself? ===<br />
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of DeSmuME may or may not agree with this point of view from SourceForge.<br />
<br />
=== What is 'TAS'? ===<br />
TAS is an acronym for "Tool-Assisted Speedrun." You can use DeSmuME to record your gameplay in TAS format. See http://tasvideos.org for more details on TAS.<br />
<br />
=== What hardware features are emulated? ===<br />
* All known 2D graphics features are correct. Mosaics work but are imperfect. There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.<br />
<br />
* With the software rasterizer, all 3D features are emulated, except the following: wireframes and antialising. The OpenGL Renderer fails for some other features; it is near its limit and may never be fixed. Both engines have trouble with some shadows, but software rasterizer is better. The software rasterizer has some noticeable texturing issues right now, especially in 2d games. In software rasterizer, there are issues similar to 2d with incorrect bit depth being used in the pipeline. <br />
<br />
One last thing -- if buttons and labels and menus rendering on the 3d screen are obscured (for example, a button but no label is on it) then you may need to use the software rasterizer. Or you may need to use OpenGL instead. Each renderer has strengths and weaknesses, which is why both are provided.<br />
<br />
* All sound features are emulated. The microphone support is new and the manual should be consulted, where you will find out, among other things, that it is only supported in windows right now.<br />
<br />
* We are unaware of any outstanding issues in the core system hardware (CPU, DMA, MMU) but there are certainly still some. The instruction and memory timings are quite incorrect; however, this seems not to hurt most titles.<br />
<br />
* DLDI - Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file. The MPCF driver (GBA MoviePlayer CF-version) is the only one that is supported, so you may need to install it into your application before using it in DeSmuME, though as of r3665 the patching should be automatic. You will find that a directory or fat image must be mounted via the commandline or UI for the "gbaslot" configuration. Right now, our codebase really only has libfat support for SLOT-2 devices and CF devices so more thorough support for other DLDI drivers is unlikely at this time.<br />
'''Warning''' - As of june 2010, it has become suspected that our compact flash emulation has bugs which sometimes prevent access to the first subdirectory in the FAT filesystem; and that causes FAT images which are written to, to become corrupted. We need a FAT expert to help us out, as I think both bugs are related.<br />
'''Warning''' - As of september 2010, FAT support has been rewritten and indeed it fixed the bugs mentioned above, but it doesn't support LFN yet.<br />
<br />
=== Does the GDB stub still work? ===<br />
[''Windows''] It is present in the dev build.<br />
<br />
=== How do I enable the GDB stub? ===<br />
[''Windows''] Add #define GDB_STUB to src/windows/userconfig/userconfig.h which you have created according to the instructions in src/windows/defaultconfig/userconfig.h ; sorry for this confusing system, but that's how it is for now.<br />
<br />
=== Where/what is IRC? ===<br />
[http://en.wikipedia.org/wiki/IRC IRC] is an on-line communications system. <br />
<br />
Information you'll need:<br />
* Server: irc.freenode.net<br />
* Port: 6667<br />
* Channel: #desmume<br />
<br />
Programs you'll need:<br />
* mIRC - Windows<br />
* ChatZilla - Firefox add-on<br />
* XChat - Linux, Windows<br />
* plenty other, see [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients wikipedia]<br />
<br />
Language:<br />
* Most of the people on the channel speak, or try to speak the English language.<br />
<br />
=== Where is the manual? ===<br />
Over [http://wiki.desmume.org/index.php?title=Manual here]. It may not have the information that other entries in this FAQ promised that it would.<br />
<br />
=== What is DLDI? ===<br />
DLDI is a patching system for homebrew ROMs using libfat which makes DS homebrew much easier to write and much more user friendly. As you may know, there are many various flash cartridges for DS. These 'flashcarts' use different hardware, so to make a program run on all cards, you’d have to write support for each and every card into the program. But no-one needs support for any other cards than their own.<br />
So a libfat developer, chism, developed DLDI. The program itself knows nothing about the hardware. However, when a “DLDI patch” is applied, libfat can use this patch to know how to write to the flashcart. So, if one user has an M3 flashcart, and downloads a program, they could patch it with the M3 DLDI patch and the program would work with it. Then, another user with a Supercart could download it, apply the Supercard DLDI patch, and it would work on their flashcart, too. The same patch should let the flashcart work with any libfat based program. <br />
<br />
=== How can I post a save file or AVI capture on the DeSmuME forum? ===<br />
After you created it, you can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.<br />
<br />
=== How can I record an AVI with a gap between the screens? ===<br />
<br />
Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:<br />
<br />
<code><pre><br />
####configuration####<br />
gap = 64<br />
#color = $aaaaaa<br />
#color = $000000<br />
color = $ffffff<br />
##################<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,0,192+gap)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
We really don't want to put any smarts into the DeSmuME avi dumper, preferring to do it with avisynth instead. It is a slippery slope, as there are about 50 things that people want avi dumpers to do and theyre better off learning how to do it outside the emu with other tools. To that end, if you have any particular needs regarding this do not hesitate to post in our forum and maybe we'll help you make a new avisynth script.<br />
<br />
Here is a script that crops the movie down to just one of the screens<br />
<br />
<code><pre><br />
#########<br />
#aviysnth script for cropping a ds avi down to one screen<br />
#uncomment one of the lines below depending on which screen you want<br />
#########<br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
#if you want the top screen, uncomment this<br />
#A = A.crop(0,0,256,192)<br />
#if you want the bottom screen, uncomment this<br />
#A = A.crop(0,192,256,192)<br />
return A<br />
</pre></code><br />
<br />
Here is a rather unimaginative re-working of the first script which sets the two screens side by side<br />
<br />
<code><pre><br />
A = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
B = AviSource("c:\ds.avi", pixel_type="RGB32")<br />
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)<br />
A = A.crop(0,0,256,192)<br />
B = B.crop(0,192,256,192)<br />
D = overlay(C,A)<br />
D = overlay(D,B,256,0)<br />
return AudioDub(D,A)<br />
</pre></code><br />
<br />
There are more scripts and more pro users of avisynth for these purposes at this forum:<br />
<br />
http://tasvideos.org/forum/viewtopic.php?t=7715<br />
<br />
=== How can I post a large log or other text file on the DeSmuME IRC chat room? ===<br />
Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.<br />
<br />
=== What are the origins of DeSmuME? ===<br />
<br />
DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com<br />
<br />
Due to change in French laws regarding emulation YopYop decided to stop development of DeSmuME. However, he released the source under the GPL, and other programmers have picked it up and kept it under active development.<br />
<br />
Yopyop said: <br />
:It’s release under GPL. I have just removed the new 3D engine because it’s too much bugged. Hopefully it will be helpful for some of you.<br />
<br />
<br />
The latest statement heard from yopyop was:<br />
<br />
:DeSmuME project is over.<br />
:You may don’t know but there are a new law in France that could put me in big trouble.<br />
:With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.<br />
<br />
:The worst thing is that I have found the bad coded instructions.<br />
:For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.<br />
:Sorry for the home brew programmers.<br />
<br />
:For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.<br />
<br />
:It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .<br />
:Thus I will not do something of useless and illegal.<br />
<br />
:For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.<br />
<br />
:And for the sources it is the same problem as for the project.<br />
<br />
:good week end<br />
<br />
:yopyop<br />
<br />
:edit the law relates to the royalties and the rights close, not?<br />
<br />
However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:<br />
:Pour la loi c’était juste un mauvais poisson d’Avril. En fait la loi et le 1 er Avril aussi proche étaient trop parfaits pour faire un petit poisson d’Avril. Mais bon avec des réactions comme celle de mon site préférait je préfère mettre un terme à ce projet perso qui est devait être amusant.<br />
That can be translated to<br />
:The law thing was just a bad April's fool. In fact, the law and April 1st were so close that I thought it would be the perfect April's fool. But after feedback like what I got from my favorite site, I prefer to stop that hobby project that should have been fun.<br />
You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9<br />
<br />
== SVN and Compiling ==<br />
<br />
=== Where do I get svn builds? ===<br />
[http://www.emucr.com emucr]. Please note that these builds are unofficial and unsupported.<br />
<br />
=== Why doesn't the DeSmuME team release pre-build SVN binaries ? ===<br />
The DeSmuME team doesn't have trusted people to make the builds, and don't want to get involved on builds that could include whatever the author wants. Every newbie coder could do a version that, after 10 minutes of gameplay, for example, starts corrupting stuff from the hard disk. Also, anyone incapable of building it's own builds, probably isn't very helpful for submitting bug reports or helping the development team on SVN releases, so there isn't much point on them getting a SVN build.<br />
<br />
=== How do I get the latest svn code and build DeSmuME myself? ===<br />
See: [[Installing DeSmuME from source]].<br />
<br />
=== What is 'SVN' ? ===<br />
[http://subversion.tigris.org/ svn] is a developers tool. It's used to let multiple developers work on the same codebase without conflicts. If you're an end-user, don't worry about it. If you're a developer, see the question on how to get the latest svn code and build DeSmuME yourself. See [http://en.wikipedia.org/wiki/Subversion_(software) wikipedia] for more info.<br />
<br />
=== What compilers are supported for building DeSmuME from source? ===<br />
* At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-C++ and msys/cygwin are not supported. Microsoft's Visual C++ Express is free to install and use, so there's no reason not to use it.<br />
* Visual C++ 2010 may work, but we don't support it, since there are known issues with it. Tell it to build DeSmuME lots of times until it finally works, and beware that there may be other subtle bugs. You might also have to go into the windows > libs folder in the project tree and manually compile the .7z files.<br />
* Visual C++ Express 2010 doesn't include x64 compiler support; to get that, you need to install the platform SDK from http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B<br />
* For Linux, any recent version of GCC and toolchain should work.<br />
<br />
=== I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found. ===<br />
For some reason known only to the Man at Microsoft Who Makes Arbitrary Soul-Crushingly Inconvenient Decisions (or possibly to the Department of Goofups), ml.exe was not included in earlier downloads of MSVC++ 2008 Express Edition. Uninstall, redownload and install again. 'ml.exe' shoud be located in the "Microsoft Visual Studio 9.0\VC\bin" directory.<br />
<br />
=== Microsoft hid the visual c++ express 2008 installer and I can't find it. ===<br />
It's there if you click around more. I'll save you time: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe<br />
<br />
== Homebrew, Development, and Technical Questions ==<br />
<br />
=== I have a patch, modification or other code addition ===<br />
Please add them to the appropriate sourceforge tracker. Patches go to the 'Patches' tracker : http://sourceforge.net/tracker/?group_id=164579&atid=832293<br />
<br />
=== I'm a developer, and would like to contribute to the codebase. What can I do? ===<br />
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.<br />
<br />
=== Im not a developer, but would like to help out anyway. What can I do? ===<br />
The most helpful thing you can do is use DeSmuME, learn its ins and outs, and learn how to compile svn builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on irc. Also, adding to or perfecting the documentation in the wiki is useful. You could also watch for and answer questions placed on the DeSmuME forum.<br />
<br />
=== What is this Lua stuff I see? ===<br />
It is sort of a macro language for interacting with the running game software. Here is an example of it working with an NES game in another emulator, and youtubing for "fceux lua" should suffice to explain it if you don't get the picture from this url: http://www.youtube.com/watch?v=1XNTjVScm_8<br />
<br />
=== How do I easily capture the ASM code for troubleshooting purposes? ===<br />
Search for LOG_ARM9 in ndssystem.cpp and uncomment it. You will also need to trigger the condition for logging by setting dolog=true. Beware that this is very verbose, and can dump around 100MBytes of logs per frame. Then redirect stdout to a file. I know it isn't easy but its what we have for now.<br />
<br />
=== Where can I find technical details on the Nintendo DS and GBA? ===<br />
http://nocash.emubase.de/gbatek.htm<br />
<br />
=== How can I do a printf to the emulator console? ===<br />
You may use Ideas-style printf by executing SWI 0xFC with the null terminated string address in R0. More info here: http://www.console-dev.de/2009/05/17/print-formatted-text-to-ideas-debug-console/ ; or you may use No$GBA debug message format. libnds supports No$GBA messages.<br />
<br />
=== Tell me about nitroFS or libFAT or compact flash emulation ===<br />
libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq.<br />
libnds argv is supported. This enables nitroFS to use libFAT to mount the nds rom, but it expects the rom to exist within the filesystem at fat:/rom.nds; if you supply a compactflash root directory equal to /path/to/ where your rom is at /path/to/rom.nds, (and of course ensure that the MPCF patch is operational), nitroFS will be able to initialize. Alternatively, use gbaslot-rom=path/to/rom.nds which will also support nitroFS via its gba-mounting mode.<br />
<br />
See this [[Image:Empty_128M_fat_image_for_desmume.zip]] for help making a compact flash image<br />
<br />
== Mac Users ==<br />
<br />
=== Can DeSmuME be used on a PowerPC Mac? ===<br />
You can use DeSmuME on a PowerPC G4 or G5, but it is officially unsupported due to certain critical bugs with the binary. In practice, running DeSmuME on a G4 will result in very poor performance. Even a Power Mac G5 2.5GHz Quad will struggle to run any games that are more complicated than Phoenix Wright: Ace Attorney.<br />
<br />
=== Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows? ===<br />
Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.<br />
<br />
=== Where are DeSmuME's file directories located in OS X? ===<br />
Use the menu option "File > Reveal Game Data Folder in Finder" if you want to access DeSmuME's file directories. Currently, Mac DeSmuME stores all of its files in "~/Library/Application Support/DeSmuME", but this location may change in future versions.<br />
<br />
=== Why doesn't a menu option or tool exist in my Mac build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].<br />
<br />
== Linux Users ==<br />
<br />
=== Why doesn't a menu option or tool exist in my Linux build? ===<br />
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the [http://wiki.desmume.org/index.php?title=Manual manual].</div>Rogerman