Libfat

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]

It is a replacement SDK (Devkit) for the commercial Nintendo SDK. It is a minimalist-style library, easier to use than the Nintendo SDK. Libfat, like libnds, supports nearly all features of the DS including touch screen, microphone, 3D hardware, 2D hardware, and IEEE 802.11b Wi-Fi via the dswifi library. Multiple slot booting is a feature unique to libfat.

DLDI

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][7] applied to the homebrew,[8] 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

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 [9] 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

References

  1. Chisholm, Michael. "libfat site".
  2. http://www.arm.com/products/processors/classic/arm7/arm7tdmi.php
  3. http://www.arm.com/products/processors/classic/arm9/arm946.php
  4. http://www.nintendo.com/ds
  5. http://chishm.drunkencoders.com/DLDI/
  6. http://dldi.drunkencoders.com/index.php?title=R4TF
  7. http://dldi.drunkencoders.com/index.php?title=Main_Page
  8. http://hive.ndshb.com/
  9. "libfat on ndscene".

See also