Faq

From DeSmuME
Jump to: navigation, search

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 for that version:


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 forums. If it seems that the forum functions according to arbitrary or subtle rules, then it is because it does, and it you may get an inkling of them here: How To Ask Questions The Smart Way

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.

Contents

Pokemon questions

We put these at the top, hoping that it will cover 90% of questions and cut down noise in the forum.

How to get to the menu in Pokemon?

You may remember these screens, which you skipped? [1] [2]

For extra credit, contemplate why this might have changed.

The main game graphics are missing! The screen is black! I'm not getting experience!

  • Make sure you are using the latest version of the emulator.
  • Delete your ini file and re-run the emulator.
  • Quit using patched ROMs. Remove the AP (Anti-Piracy) patch from the ROM.
  • Quit using cheats.
  • Try using external firmware/BIOS.

Why can't I play Pokemon Diamond / Pearl / HeartGold / SoulSilver / Black / White ? Why aren't they supported?

We are not going to support these games. 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.

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.

Why does HeartGold / SoulSilver have freezes and graphics glitches?

Emulation bugs. Errors accumulate. Stop using savestates. Save in-game and reset the emulator.

When I beat the Pokemon league, I can't save the game because a save already exists and it can't possibly save another.

Next time, try saving earlier and dont ignore this warning: [3]

When I beat the elite four, the game saves and resets and it tries to start a new game!

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.

I got to the end of Pokemon and now I can't reset and load my save file!

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.

Big Questions

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

  • Read the KnowledgeBase
  • Try deleting your ini file.
  • 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.
  • Change display method to DirectDraw SW. Change 3D renderers. Quit using frameskip.
  • Do not use patched ROMs. Never use patched ROMs.
  • 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.
  • Stop using savestates. Use in-game saves.

The emulator crashes / freezes

DeSmuME is not perfect yet. Sometimes nothing will work and you're just out of luck. Here are some things you can try:

  • Reboot your host machine.
  • Go to our official Downloads page and make sure you are using the latest version, which is currently v0.9.11. Any older versions are unsupported.
  • 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.
  • Enable "Advanced Bus-Level Timing". Doing this will slow down emulation, but fix some games.
  • Disable "Dynamic Recompiler". Doing this will greatly slow down emulation, but will fix many games.
  • Use external BIOS images. Try it with and without "Emulate SWIs with BIOS images"
  • Delete your DeSmuME configuration file. It may have options that are breaking your DeSmuME.
    • Windows: Your configuration file is located in the same directory as the DeSmuME program. Delete the file named "desmume.ini".
    • 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.
    • Linux: Your configuration file is located at "~/.config/desmume". Delete the file named "config".
  • Turn off your virus scanner.


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.

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.

My computer overheats and freezes or reboots while using DeSmuME!

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.

Graphics / screens are missing, corrupted, swapped, switched, or black!

  • Manipulate View > LCDs Layout tools to fix swapped/switched screens
  • You must be using an old ini or config file. Delete it and re-run the emulator.
  • Try switching between OpenGL Renderer and Software Rasterizer.
  • Try the above troubleshooting steps for freezing games. Oftentimes the problems are similar.

Every button I press is shown on the screen! Or, a counter that keeps going up is displayed!

View > HUD > Uncheck display input

DeSmuME runs too slow!

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.

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.


First of all, check that the host hardware is configured for best performance:

  • Ensure that you meet the minimum requirements for running DeSmuME.
  • 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.
  • 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.
  • 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.


Here are the biggest factors for improving emulation performance. They are listed from most performance impact to least performance impact:

  • 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.
  • Use official DeSmuME releases from our 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.
  • 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.
  • (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.
  • Disable all video filters, and set your display window's pixel scaler to None.
  • Use the Dynamic Recompiler (JIT) CPU emulation engine. (Doing this may break some games.)
  • Disable Advanced Bus-Level Timing. (Doing this may break some games.)
  • Try switching the 3D renderer between OpenGL and SoftRasterizer. One 3D renderer may work faster than the other, depending on the situation.
  • (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.
  • (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.
  • (Linux only) Do not scale the display window beyond 1x, as this can result in a substantial performance hit.
  • Disable Advanced SPU Logic, and use the Dual SPU Sync/Async synchronization method.


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:

  • If you are using SoftRasterizer, disable edge marking and fog. Note that games that don't use these features will be unaffected.
  • Disable unneeded GPU layers.
  • Disable sound emulation altogether.
  • Don't use external BIOS images. But if you must, try enabling Patch DelayLoop SWI.

What is the turbo button / speed up button / magic fast-forward button?

You are probably wanting to increase the execution speed. There are two ways of doing this:

  • 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)
  • Disable the execution speed limiter. This will run the emulation as fast as the host hardware will allow.

To change your execution speed options:

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

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.

Savegames and Savestates

Every time I run DeSmuME, my save files are gone and I have to start over

See #Every_time_I_run_the_program_my_settings_are_gone.21_I_have_to_keep_entering_them_over_and_over.21

My saved games are gone when I upgraded!

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.

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.

The only known game which does this is Dawn of Sorrow, but there may be others.

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

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.

A few games save files fail to autodetect. Here is a list of the cases we know:

  • Spider-Man 3 (should be autodetect_size=1, detected as 3)
  • Over The Hedge (should be autodetect_size=1, detected as 3; same failure mechanism)

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.

Can I use my save states across versions?

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

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.

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?

  1. first, try importing the save file:
    1. close the emulator and delete any existing .DSV and .SAV file for that game
    2. open the emulator and the game. wait for the game to settle down on the title screen
    3. import the save file. reset the rom.
    4. now, if your save files appear, you have succeeded. otherwise, you need to take other measures.
  2. Convert the save file using [4] or [5]

Target format should be DeSmuME or RAW

  1. Load the game. Let it get to the main menu
  2. Select the correct backup size*, as specified by advanscene.com (which is not always right, by the way)
  3. Use File > Import Backup Memory and pick the converted save file
  4. Reset the emulator

(* 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)

Can I convert a DeSmuME .dsv to No$gba or Nocash .sav savefile?

  1. Use File > Export Backup Memory
  2. Name the save file
  3. Import the battery into the emulator you are using.


Troubleshooting and Errors

Every time I run the program my settings are gone! I have to keep entering them over and over!

Don't run DeSmuME from the zip file you received it in. Extract it to your desktop and run it from there.

My DeSmuME window disappeared! / I can hear sound and it is in the taskbar but I can't see the window!

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:

[Video]
Window Size=0
Window width=0
Window height=0
WindowPosX=-32000
WindowPosY=-32000

Delete the -32000 items

Why does my touch screen not work? Oh yes you did read my mind, I was using external firmware

It's a bug. It is not a high priority since nobody yet has proven that they actually need the external firmware. If there was a way around it, I would've just told you. You may observe this error as incorrect touch screen coordinates, or totally failing touch screen.

I have a gameplay related question

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.

Why doesn't OpenGL 3D work in Linux?

Blame NVIDIA and AMD for putting out shoddy and/or closed source drivers. Then switch to software rasterizer.

Why doesn't OpenGL 3D work in windows?

Update your video card drivers.


Using The Emulator

What are the minimum hardware requirements for DeSmuME?

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:

  • Windows: Windows XP SP2 or later
  • Mac: OS X v10.5.8 Leopard or later
  • Linux: Any recent Linux distribution with a 2.6 kernel
  • CPU: 2.0 GHz Intel Core 2 Duo or equivalent
  • RAM: 1 GB

What are the recommended hardware requirements for DeSmuME?

The following configuration should assure that almost every game can be played at full speed:

  • Windows: Windows Vista SP2 or later
  • Mac: OS X v10.6.8 Snow Leopard or later
  • Linux: Any recent Linux distribution with a 2.6 kernel.
  • CPU: 3.0 GHz Intel Core 2 Duo or equivalent
  • RAM: 2 GB

There are several different DeSmuME executables available. Which EXE do I use?

  • 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.
    • 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.
    • 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.
    • If you want to use the developer features, use the dev build. It includes extra debugging code and logging.
  • 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.
    • 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.)
    • To run as 32-bit x86: Enable "Open in 32-bit mode".
    • To run as 64-bit x64: Disable both "Open in 32-bit mode" and "Open using Rosetta" options.
  • 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.

Does DeSmuME make use of multiple CPUs or multiple CPU cores?

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.

Can I force DeSmuME to "detect" an arbitrary number of CPUs?

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.

  • Windows: Use the command line argument, "--num-cores=n", where n is the number of cores to detect.
  • 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.
  • Linux: Use the command line argument, "--num-cores=n", where n is the number of cores to detect.

What do the three numbers or the percentage in the FPS display mean?

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

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.

How can I make the DS screens better fill my widescreen monitor?

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.

  • 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.
  • 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.
  • Linux (GTK and Glade only):
    • 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.
    • Glade: To change to a horizontal layout, choose Config > Right Screen. However, changing the display mode on Glade is unsupported.

Does DeSmuME support full-screen mode?

Yes, you can display the DS screens in full screen mode.

  • Windows: Click the DeSmuME window and press Alt-Enter.
  • Mac: Click the display window that you want to make full screen, then choose View > Enter Full Screen.
  • Linux (GTK only): Choose View > Window Size > Scale to Window, then choose View > Window Size > Fullscreen.

Is it possible to display each DS screen in separate windows?

Yes, you can display each DS screen in separate windows. (This feature is only available for Mac.)

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

Is it possible to display each DS screen at different sizes within a single window?

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.

How do I customize the appearance of the emulated DS video output?

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.

  • Windows:
    • Pixel Upscale: To change the pixel scaler, choose View > Magnification Filters, and then select one of the menu options.
    • 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.
      • 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.
      • DirectDraw SW: Your output filter will always be Nearest Neighbor.
      • OpenGL: If Config > Display Method > Filter is checked, then your output filter will be Bilinear. Otherwise, your output filter will be Nearest Neighbor.
    • 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.
    • Screen Separation: Choose View > Screen Gap, and then select one of the menu options.
    • Rotation: Choose View > Rotation, and then select one of the menu options.
  • Mac:
    • 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.
    • 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.
    • 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.
    • 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%.
    • 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.
  • Linux:
    • Pixel Upscale (GTK and Qt only):
      • GTK: Choose View > Video Filter, and then select one of the menu options.
      • Qt: Choose View > Video Filter, and then select one of the menu options.
    • 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.
      • GTK: Choose View > Secondary Video Filter, and then select one of the menu options.
    • Display Resize (GTK and Qt only):
      • 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.
      • 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.
    • Screen Separation (GTK and Glade only):
      • GTK: Choose View > Screen Gap. Note that this is only a toggle option which only supports a separation of 0px or 90px.
      • 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.
    • Rotation (GTK and Glade only):
      • GTK: Choose View > Rotation, and then select one of the menu options.
      • 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.

How do I enter 'cheat codes' in DeSmuME?

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.

Can DeSmuME emulate the DS microphone?

Yes, DeSmuME can emulate the DS microphone. However, microphone emulation may not be fully supported for all platforms. See NDS Microphone Support for more information.

  • Windows
    • 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".
    • 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".
  • Mac
    • 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.
    • 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.
  • Linux
    • 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.
    • Software Generated Samples: This feature is unsupported on Linux.

Additional Notes:

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

Does the 'GBA slot' option let me play GBA games?

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

How do I "Close the DS" like in Zelda when you have to draw the crest and then mash it into the map?

This can be done by using the 'Lid' control. By default, the Lid control is Backspace on your keyboard.

How do I use the stylus (pen) to 'touch' the screen?

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.

Can I run 2 sessions of the emulator linked together as if two different NDSs linked?

No. A real NDS uses Wi-Fi for multiplayer, and that isn't emulated in DeSmuME yet. For more information, see Wi-Fi Hardware Support

How can I touch two points on the screen at once, as required by Hotel Dusk or Phoenix Wright?

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.

Here is a thread discussing it in Phoenix Wright where you may get a different description of this technique: Thread

How can I run homebrew games that require DLDI patching ?

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


Wi-Fi and WFC

Does DeSmuME support 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.

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. When we say that Wi-Fi is unsupported, we mean it.

With that said, any developers interested in working on Wi-Fi support are welcome to join us at our IRC channel. We would appreciate the assistance!

What is WFC / Nintendo WiFi Connection?

See the article Nintendo wifi config utility for more information.


General Questions

What does DeSmuME emulate and on what systems?

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.

Will DeSmuME ever support Nintendo 3DS/2DS emulation in the future?

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.

What does DeSmuME mean?

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

  • LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card
  • 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.
  • FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.
  • 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.

Its name is derived from emu which is short for emulator, DS and me. It's possibly supposed to mean "DS emulator for me".

How is the name DeSmuME pronounced?

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"

Under what license is DeSmuME distributed?

DeSmuME is distributed under the GNU General Public License, or GPL: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html

Can I freely copy DeSmuME?

Yes you can, as long as you adhere to the license as specified in the GNU GPL.

Where can I report bugs?

You can report bugs using our 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.

Can I attach files to bug reports I did not create myself?

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.

What is 'TAS'?

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.

What hardware features are emulated?

User Controls

  • The D-pad, buttons, and touch screen are fully emulated.
  • The ability to toggle the folded/unfolded state of the NDS is emulated through the Lid control.
  • Adjustable stylus pressure is only supported on Windows. However, the vast majority of games don't use this feature.
  • Emulation of stylus jitter is only supported on Windows. However, the vast majority of games don't use this feature.

2D Graphics System

  • All known 2D graphics features are supported, with the exception of mosaics.
  • Mosaics work somewhat, but are imperfect. Also, mosaics may not show up properly in some games.
  • There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.
  • Big-endian systems may not render the correct colors in some areas.

3D Rendering

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.

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.

SoftRasterizer Renderer
  • All 3D features are emulated, except for wireframes and antialiasing.
  • There are issues with line rendering. However, it is possible to work around most of these issues by using the Line Hack.
  • 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)
  • 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)
  • There are some issues with shadow polygons. However, SoftRasterizer works better than OpenGL at rendering shadow polygons.
OpenGL Renderer
  • All 3D features are emulated, except for fog and edge marking.
  • There are issues with depth rendering and Z-fighting. However, there is no workaround for this issue like there is with SoftRasterizer.
  • There are some major issues with shadow polygons. If you find the shadow polygon bugs unacceptable, then you will have to switch to SoftRasterizer.

Sound

  • All sound features are emulated.
  • For complete SPU emulation, two requirements must be met:
    • Advanced SPU Logic must be enabled.
    • One of the SPU sound synchronization methods must be used (N, Z, or P).
  • 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.)
  • 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.

Microphone

  • All microphone features are emulated.
  • DeSmuME supports either receiving audio samples from a hardware audio input device, or generating audio samples in software.
  • Hardware audio input is only supported on Mac. Windows and Linux are currently broken and unsupported.
  • DeSmuME includes the following software sample generators:
    • Internal Noise Samples
    • White Noise (Windows and Mac only)
    • Sine Wave (Mac only)
    • Audio File (Windows -- only WAV files in 16000Hz 8-bit mono LPCM format are supported / Mac -- any audio file compatible with CoreAudio is supported)

CPU

  • CPU emulation is supported through either the Interpreter engine or the Dynamic Recompiler engine.
  • The Interpreter engine is available on all platforms. However, Dynamic Recompiler only works on x86 or x64 systems.
  • We are unaware of any huge problems with the Interpreter engine, but there are still some issues.
  • 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.
  • 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.

Memory and System Bus

  • We are unaware of any huge problems with the MMU and DMA systems, but there are still some issues.
  • 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.

BIOS and Firmware

  • 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.
  • DeSmuME supports configuring all of the NDS profile information through the internal BIOS and firmware alone. This information includes:
    • Nickname (Windows and Mac only)
    • Message (Windows and Mac only)
    • Favorite Color (Windows and Mac only)
    • Birthday (Windows and Mac only)
    • Language
  • DeSmuME can also load external BIOS and firmware images from a hardware NDS, gaining additional features by doing so.
  • 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.
  • Loading of external BIOS images is supported on Windows, Mac, and Linux.
  • Loading of an external firmware image is only supported on Windows and Mac. Linux is not supported.

NDS Slot (SLOT-1)

  • The following NDS slot devices are supported:
    • Standard Retail MC + ROM
    • Retail w/ NAND Flash
    • R4
  • DeSmuME can display the header information of loaded ROMs. (Windows and Mac only)
  • We are unaware of any huge problems with loading NDS ROMs. However, there are some issues with loading NDS ROMs on big-endian systems.
  • There are some issues with DSi ROMs, as they are not fully supported yet.

GBA Slot (SLOT-2)

  • The following GBA slot devices are supported:
    • Compact Flash Card
    • Rumble Pak (Windows and Mac only)
    • GBA Cartridge
    • Guitar Grip (Windows and Mac only)
    • Memory Expansion Pak (Windows and Mac only)
    • EasyPiano (Windows and Mac only)
    • Taito Paddle (Windows and Mac only)
    • PassME (Windows and Mac only)

Wi-Fi

  • Wi-Fi emulation is currently in an experimental stage, and many Wi-Fi features are either broken or non-working.
  • Here is what we currently know about Wi-Fi so far: Wi-Fi Notes

Dynamically Linked Driver Interface (DLDI)

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.

  • LFN is currently unsupported.


Does the GDB stub still work?

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.

How do I enable the GDB stub?

  • Windows: You must make a custom build using #define GDB_STUB.
  1. Copy the "userconfig.h" file from "src\windows\defaultconfig" to "src\windows\userconfig".
  2. In the "src\windows\userconfig\userconfig.h" file, add "#define GDB_STUB".
  3. Build DeSmuME.
  4. 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.
  • 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.
  • 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.

Where/what is IRC?

IRC is an online communications system.

The DeSmuME team uses IRC to discuss DeSmuME's development. You will need an IRC client in order to participate is these discussions.

Recommended IRC Clients

DeSmuME IRC Channel

To connect to the DeSmuME IRC channel, you will need to enter the following information in your IRC client:

  • Server: irc.freenode.net
  • Port: 6667
  • Channel: #desmume

As far as language is concerned, most of the people on the channel speak English.

Where is the manual?

Over here. It may not have the information that other entries in this FAQ promised that it would.

What is DLDI?

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

How can I post a save file or AVI capture on the DeSmuME forum?

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.

How can I record an AVI with a gap between the screens?

Learn how to use virtualdub and avisynth. Then use the following avisynth script which we have developed for this purpose:

####configuration####
gap = 64
#color = $aaaaaa
#color = $000000
color = $ffffff
##################
A = AviSource("c:\ds.avi", pixel_type="RGB32")
B = AviSource("c:\ds.avi", pixel_type="RGB32")
C = blankclip(fps=A.FrameRate, width=256, height=192+gap+192, color=color, length=A.FrameCount)
A = A.crop(0,0,256,192)
B = B.crop(0,192,256,192)
D = overlay(C,A)
D = overlay(D,B,0,192+gap)
return AudioDub(D,A)

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.

Here is a script that crops the movie down to just one of the screens

#########
#aviysnth script for cropping a ds avi down to one screen
#uncomment one of the lines below depending on which screen you want
#########
A = AviSource("c:\ds.avi", pixel_type="RGB32")
#if you want the top screen, uncomment this
#A = A.crop(0,0,256,192)
#if you want the bottom screen, uncomment this
#A = A.crop(0,192,256,192)
return A

Here is a rather unimaginative re-working of the first script which sets the two screens side by side

A = AviSource("c:\ds.avi", pixel_type="RGB32")
B = AviSource("c:\ds.avi", pixel_type="RGB32")
C = blankclip(fps=A.FrameRate, width=512, height=192, color=$000000, length=A.FrameCount)
A = A.crop(0,0,256,192)
B = B.crop(0,192,256,192)
D = overlay(C,A)
D = overlay(D,B,256,0)
return AudioDub(D,A)

There are more scripts and more pro users of avisynth for these purposes at this forum:

http://tasvideos.org/forum/viewtopic.php?t=7715

How can I post a large log or other text file on the DeSmuME IRC chat room?

Make use of an external text storage site, such as 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.

What are the origins of DeSmuME?

DeSmuME is a freeware emulator for the Nintendo DS originally created by YopYop156. The original website was http://yopyop156.ifrance.com

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.

Yopyop said:

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.


The latest statement heard from yopyop was:

DeSmuME project is over.
You may don’t know but there are a new law in France that could put me in big trouble.
With DeSmuME, I have closed the doors of game company but I can not offer to pay for it.
The worst thing is that I have found the bad coded instructions.
For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.
Sorry for the home brew programmers.
For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.
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 .
Thus I will not do something of useless and illegal.
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.
And for the sources it is the same problem as for the project.
good week end
yopyop
edit the law relates to the royalties and the rights close, not?

However, when Guillaume later asked for permission to use the DeSmuME name, yopyop told a somewhat different story:

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.

That can be translated to

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.

You can get the full thread here: http://www.playeradvance.org/forum/showthread.php?t=385&page=9


SVN and Compiling

What is 'SVN' ?

SVN is a tool that is used by multiple developers to work on the same codebase without conflicts. See Wikipedia for more information.

Where do I get SVN builds?

We officially use the automated SVN builds provided by DeSmuME user, Orphis.

Other third-parties may offer SVN builds, such as EmuCR. Please note that any third-party build is both unofficial and unsupported.

How do I get the latest SVN code and build DeSmuME myself?

See: Installing DeSmuME from source.

What compilers are supported for building DeSmuME from source?

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

I'm Compiling using MSVC Express On Windows, and I get the error : "ml.exe" not found.

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

Microsoft hid the Visual C++ Express 2008 installer and I can't find it.

Download link: http://download.microsoft.com/download/A/5/4/A54BADB6-9C3F-478D-8657-93B3FC9FE62D/vcsetup.exe


Homebrew, Development, and Technical Questions

I have a patch, modification or other code addition

Patches may be submitted to our 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.

I'm a developer, and would like to contribute to the codebase. What can I do?

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.

I'm not a developer, but would like to help out anyway. What can I do?

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 DeSmuME forum.

What is this Lua stuff I see?

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

How do I easily capture the ASM code for troubleshooting purposes?

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.

Where can I find technical details on the Nintendo DS and GBA?

http://problemkaputt.de/gbatek.htm

How can I do a printf to the emulator console?

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.

Tell me about nitroFS or libFAT or compact flash emulation

libFAT has been working for quite some time, via MPCF DLDI as mentioned earlier in the faq. 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.

See this File:Empty 128M fat image for desmume.zip for help making a Compact Flash image


Mac Users

I just downloaded DeSmuME, but I can't launch it because "it is from an unidentified developer." What gives?

Apple introduced a security policy called 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 official Downloads page.

If OS X prevents you from launching DeSmuME.app because "it is from an unidentified developer", do this:

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

Can DeSmuME be used on a PowerPC Mac?

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.

Are DeSmuME files created on my Mac compatible with DeSmuME files created on Windows?

Yes, all files created with DeSmuME files are cross-compatible between Mac and Windows.

Where are DeSmuME's file directories located in OS X?

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.

Why doesn't a menu option or tool exist in my Mac build?

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:

  • The HUD
  • Custom path settings
  • AVI / WAV recording
  • The various tools listed in the Tools menu
  • RAM Watch / RAM Search
  • Lua scripting

While we are actively working to attain full feature parity between the Mac and Windows ports, this will still take some time to achieve.


Linux Users

Why doesn't a menu option or tool exist in my Linux build?

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

Personal tools