DLDI is the Dynamically Linked Disc Interface for Game Boy Advance and Nintendo DS. It works as a part of libfat to allow homebrew programs to read and write files on the memory card inserted into one of the system's slots. It has also been implemented for GBA_NDS_FAT and DSLinux.
By default, homebrew that utilizes the DLDI framework will probably work on a specific device (the one the author uses) but can be patched to work with any device listed in the devices section.
Some devices will patch the homebrew for you automatically when it is loaded. Just try the ROM to see if it works with your device. If it does, then great! If not, you will need to patch the file before transfering it to your device. In this case, after downloading the DLDI-enabled homebrew, you need to patch the .nds or .ds.gba depending on what device you are using.
First you need to download the DLDI driver patch for your device. So go to the devices section, find your device and download the .dldi file.
Next you need to obtain a patcher that can run on your computer's operating system. Go to the tools list and download your prefered tool and follow the given instructions.
Once you have patched the .nds or .gba file, you can copy it to your memory card and run it from your DS.
If you have multiple devices, it may be a good idea to rename the patched files something like this:
DLDIWiki has been closed down and all information moved to this page. An old copy of DLDIWiki can be found on the Internet Archive.
Device | Download | Source | Author | Read/Write | Tested? | Manufacturer | Last Modified | Notes |
---|---|---|---|---|---|---|---|---|
Default (No device) | DLDI | SRC | Chishm | -/- | - | Chishm | 2007-01-12 | |
AceKard+ | DLDI | --- | AceKard | R/W | Yes | AceKard | 2007-01-31 | |
CycloDS Mini/Micro | DLDI | --- | Team Cyclops | R/W | No | CycloDS | 2007-06-25 | |
Datel Games 'n' Music | DLDI v1 | SRC | Chishm | R/W | Yes | Datel | 2007-07-04 | Slower but more compatible |
DLDI v2 | SRC | Chishm | R/W | Yes | 2007-07-05 | Faster but requires an SDHC card, see this gbadev forum thread | ||
DSLink (microSD Card) | DLDI v1 | SRC | Rudolph (ported by Lick) | R/W | Failed | DSLink | 2006-12-26 | |
Moonshell DLDI/a> | --- | MoonLight | R/? | Yes | 2006-12-30 | Moonshell version | ||
DLDI v3 | SRC | Diddl | R/W | Yes | 2007-03-02 | This version does not work in DSLINUX because of an swiDelay() call. There is a bug that makes writes unpredictable. | ||
DLDI v4 | SRC | Amadeus | R/W | Yes | 2007-05-20 | Fixes the bugs present in version 3 | ||
DS-X | DLDI | SRC | DS-Xtreme Team | R/W | Yes | DS-X | 2007-02-12 | The DS-Xtreme does a form of auto-patching [2] |
Ewin2 (SD Card) | DLDI | SRC | Moonlight | R/W | Yes | Ewin flash | 2006-12-29 | |
EZ Flash 4 (SD Card) | DLDI | SRC | Rudolph (Original by EZ Team (aladdin)) | R/W | Yes | EZ Flash | 2006-12-27 | |
EZ Flash 5 | DLDI | SRC | Cory1942, ps2aich | R/W | Yes | EZ Flash | 2008-09-10 | Can be used for Wireless MultiBoot, etc. |
SDHC DLDI | SRC | Cory1942, ps2aich | R/W | Yes | 2008-09-10 | Can only be used when booting up via EZ-V+ [1]. For usage in EZ-V+, copy both EZ5 drivers into the moonshl folder. | ||
G6 Flash (version 0.19) | DLDI | SRC | viruseb | R/W | Yes | G6 Flash | 2007-04-12 | |
G6 Real | DLDI | --- | G6 Team | R/W | No | G6 Flash | 2007-07-12 | Also known as G6DS. This device supports automatic patching [2]. |
M3 Adapter (Compact Flash) | DLDI | SRC | Chishm | R/W | Fail | M3 Adapter | 2007-05-05 | Fails read alignment test. The built-in M3CF driver works fine so this DLDI may not be needed [2]. |
M3 Adapter (SD Card) | DLDI | SRC | Chishm | R/W | Yes | M3 Adapter | 2006-12-25 | |
Alt | SRC | agentq | R/W | Yes | 2007-01-20 | |||
Max Media Dock (Compact Flash) | DLDI | SRC | Chishm | R/W | Yes | Code Junkies | 2007-01-07 | |
GBA Movie Player (Compact Flash) | DLDI | SRC | Chishm | R/W | Yes | Movie Advance | 2006-12-25 | |
GBA Movie Player (SD Card) | DLDI | SRC | ps2aich (Original by Movie Advance) | R/W | No | Movie Advance | 2007-08-09 | Driver only works when the patched application is booted via the GBAMP SD itself [1] |
NEO Flash MK2 & MK3 (SD Card) | DLDI | SRC | NEO Flash Team | R/W | Yes | NEO Flash | 2006-12-25 | |
NEO Flash MK5 (NAND Flash) | DLDI | SRC | NEO Flash Team | R/- | No | NEO Flash | 2007-02-07 | |
NEO2 (SD Card) | DLDI | SRC | NEO Flash Team | R/W | Yes | NEO Flash | 2006-12-28 | |
DLDI | SRC | NEO Flash Team & Chishm | R/W | Yes | 2006-12-28 | Faster reads than version 1 | ||
Ninja DS (SD Card) | DLDI | SRC | NinjaMod team | R/W | Yes | NinjaDS | 2006-12-25 | |
Ninjapass X9 | DLDI | SRC | CJ Bell | R/W | Yes | Ninjapass | 2007-10-23 | |
R4(DS) - Revolution for DS M3 Simply compatible | DLDI v1 | SRC | R4DS | R/W | Yes | R4 (R4DS) - Revolution for DS | 2006-12-25 | Does not support ARM7. This device supports automatic patching [2]. |
DLDI v2 | SRC | R4DS, modified by Chishm | R/W | Yes | 2007-12-27 | Supports ARM7 | ||
SuperCard (Compact Flash) | DLDI | SRC | Chishm | R/W | Yes | SuperCard | 2006-12-26 | |
SuperCard DS (One) | DLDI v0 | SRC | SuperCard Team (ported by Lick) | R/? | Yes | SuperCard | 2006-12-25 | To use these files with the auto dldi patching feature: download the dldi, rename to dldi.bin and place it into the "scshell" folder of your microSD replacing the existing file. |
DLDI v1 | SRC | cluny | R/W | Yes | 2007-05-01 | |||
DLDI v2 | --- | Barni | R/W | Yes | 2007-09-14 | |||
SuperCard DS (One) SDHC | DLDI v0 | SRC | SuperCard Team | R/? | Failed | SuperCard | 2007-08-09 | To use these files with the auto dldi patching feature: download the dldi, rename to dldi.bin and place it into the "scshell" folder of your microSD replacing the existing file. |
DLDI v1 | SRC | cluny | R/W | Yes | 2007-12-07 | |||
SuperCard (SD Card) | DLDI | SRC | Chishm | R/W | Yes | SuperCard | 2006-12-25 | |
Alt | --- | MoonLight | R/W | Yes | 2007-02-14 | Based on code from MoonShell. Works on newer Supercards that may fail with other DLDIs. Must be booted from Supercard firmware. [1] | ||
SuperCard Lite (SD Card) | DLDI | SRC | brisssou | R/W | Yes | SuperCard | 2007-01-19 | |
SuperCard Rumble (SD Card) | DLDI | --- | Barni | R/W | Yes | SuperCard | 2007-08-28 | May work for other SuperCard devices that use SD cards |
[1] DLDIs that require the patched application to be run from the device menu may not work after ejecting and reinserting the card while the GBA or DS is still powered on. This means they may not run programs that back up data saved in the EEPROM, flash, or SRAM on GBA Game Paks. Additionally, these drivers may not work when started by other methods, for example Wireless MultiBoot (WMB) or Card Swap.
[2] The device firmware automatically patches loaded applications. This driver is provided for cases when automatic patching does not work, for example when booted via Wireless MultiBoot (WMB), or applications that boot other applications (like a homebrew menu). If you want to force the use of a DLDI patch then disable auto-patching of the application by using DLDI No-AutoPatch.
Executable Type | Download | Last Modified | Version | Creator | More Information |
---|---|---|---|---|---|
Source | GitHub | 2007-08-02 | 1.24 | Chishm, WinterMute, SmileyDude | |
Win32 CLI | Download | 2007-02-05 | 1.23 | Chishm | dlditool CLI instructions |
Win32 GUI | Download | 2007-01-13 | 1.23 | Adam Hodson (bob_fossil) / Maxim | Detailed instructions |
Simplified Chinese Download | 2007-01-13 | 1.22 | Translation by yeyezai | ||
Win32 Right Click | DLDIrcSetup.exe (Web page) | 2007-10-17 | 0.93 | PsychoWood | Detailed information |
Linux i686 CLI | Download | 2007-08-02 | 1.24 | WinterMute | dlditool CLI instructions |
Linux x86_64 CLI | Download | 2007-08-02 | 1.24 | WinterMute | dlditool CLI instructions |
Linux GUI | deb package or source | 2008-04-13 | 1.0 | Lucas van Dijk (Sh4wn) | Detailed information |
Linux GUI (alternative) | Download | 2007-07-15 | 1.0 | s0l1dsnak3123 | Linux GUI (alternative) instructions |
Nautilus script | Download (Direct) | 2007-04-24 | 1.0 | Richard Quirk (Quirky) | Nautilus Script |
MacOS X CLI | Download | 2007-08-02 | 1.24 | WinterMute | dlditool CLI instructions |
MacOS X DLDI Drop | Local copy or Web page | 2007-01-30 | 1.23 | Jan Kampling | Read Jan's blog (Internet Archive copy) |
No auto-patch CLI | Download | 2007-08-12 | PsychoWood | No auto-patch instructions | |
No auto-patch GUI | GUI | 2007-08-12 | Nphinity | No auto-patch instructions |
Extract the patch and patcher to the same directory as the ROM file. Open a command prompt in that directory. Type in:
dlditool <name_of_patch> <rom_file>Where <name_of_patch> is the name of the patch file (e.g. "mpcf.dldi") and <rom_file> is the name of the ROM (eg "libfat_tests.nds").
You should see something similar to this:
C:\rom_dir\>dlditool mpcf.dldi libfat_tests.nds Dynamically Linked Disk Interface patch tool by Michael Chisholm (Chishm) Old driver: Default (No interface) New driver: GBA Movie Player (Compact Flash) Position in file: 0x000062C0 Position in memory: 0x02000000 Patch base address: 0xBF800000 Relocation offset: 0x428060C0 Patched successfully
Once you have patched the ROM, copy it to your flash cart and run it.
The No-AutoPatch tool stops a DS application being patched with a new DLDI. Use this if you have already patched a DLDI into an application and don't want a device firmware to repatch it. The tool works by overwriting the DLDI header in the application so that auto-patchers can't find where to overwrite the DLDI section.
For the CLI version run dldinoap <rom_file> to disable auto-patching of <rom_file>. Run it again to re-enable auto-patching.
For the GUI version run DLDI No-Patch.exe, point it at the ROM file, then hit start. Run DLDI Yes-Patch.exe to re-enable auto-patching.
This is an alternative GUI for Linux users, written in realBASIC by s0l1dsnak3123.
Download the program, the right DLDI for your card, and of course the file you want patched. Unzip the program and run it.
Click on the first browse button and find the command line version of the DLDI patcher (dlditool) then double click on it. Click on the second browse button and find the location of the .DLDI file then double click on this also. Click on the last browse button and find the location of the file you want to patch. Finally click on Patch.
A Finished! message box should come up. Now you're done! All that is left to do is copy the patched file to your card and enjoy.
This is a script to enable DLDI patching in the Nautilus file manager.
Requires: Nautilus, dlditool CLI (put it in path), and zenity (try: sudo apt-get install zenity)
To install: Copy PatchDLDI to $HOME/.gnome2/nautilus-scripts. Place your dldi files in $HOME/data.
To use: Right click an NDS file and select scripts > PatchDLDI. Choose the patch type.
The DLDI IO_INTERFACE is included as part of libfat. It will be included when you use libfat within your project.
If you are still using gba_nds_fat, you can use a backported IO_INTERFACE. Copy it to your gba_nds_fat source directory and add io_dldi as the first driver in the initialization list.
You may wish to add a patching step to your makefile, following the dlditool instructions.
Some of the interfaces listed above have not been tested, or may appear to not work for you. If you wish to test an interface, download the DLDI Tester. Extract the contents to the root directory of the card you'll be testing, then patch it for the correct card, following the instructions above. Make sure you backup everything on the card, I accept no responsibilty if anything goes wrong. Follow the onscreen prompts and observe the outcome. Feel free to email me with results for a card that hasn't been tested already, or results contrary to those in the above table.
The following people either directly or indirectly helped to create the DLDI interface: