From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

libfat (with a lower case l) is a FAT library made by Michael "Chishm" Chisholm for the Nintendo DS[1] to code Nintendo DS Homebrew applications. It is the successor of the dual GBA NDS FAT library, which was also used, like libfat, to code Nintendo DS homebrew applications. It is packaged as part of DevKitARM, a software development kit, or Devkit for ARM microprocessor microprocessors namely the ARM7TDMI(-S)[2] and ARM946E-S[3] cores used in the Nintendo DS.[4]


DLDI (or Dynamically-Linked Device Interface)[5] is a technology created by Michael "Chishm" Chisholm as an interface for libfat that developers attach to their projects. libfat is programmed in a single language, but different flashcarts, such as the R4DS, use different read/write commands. The DLDI Patch fixes this, as explained below.

Without DLDI, libfat receives encrypted commands from the flashcart, and cannot act accordingly, so it sends an error to the homebrew explaining that it cannot understand the commands, which then presents this information to the flashcart, and the user, in the form of a black screen.

With the correct DLDI patch[6] applied to the homebrew,[7] the DLDI patch acts as an interface between the flashcart/user and the homebrew. It unencrypts the flashcart's specific read/write commands and converts them into a libfat-specific programming language, which libfat can understand and present the homebrew with information which can then be passed onto the flashcart/user.

Using libfat[edit]

libfat, like any FAT library, uses a main source file. The library's operations are conducted by a single fat.h file in the source file with the code:

 #include <fat.h>

libfat can be uniquely programmed to use the slots on the Nintendo DS[8] Slot 1 being the main DS cartridge slot, Slot 2 being the GBA slot on the Nintendo DS and DS Lite, and SD Card slot on the DSi and DSiXL. libfat can use or boot from two slots at the same time, as in taking information from a SLOT 2 device while running the main program from SLOT 1. This can be programmed by using the following codes:

 fat: -- the default device
 fat0: -- same as fat:
 fat1: -- the device in Slot-1 of the NDS
 fat2: -- the device in Slot-2 of the NDS
 fat3: -- a custom mounted device


  1. ^ Chisholm, Michael. "libfat site". Retrieved 2022-04-14.
  2. ^
  3. ^
  4. ^[dead link]
  5. ^ Chisholm, Michael. "DLDI site". Retrieved 2022-04-14.
  6. ^ Chisholm, Michael. "Patches section of the DLDI site". Retrieved 2022-04-14.
  7. ^
  8. ^ Chisholm, Michael. "Using files section of the libfat site". Retrieved 2022-04-14.

See also[edit]