{
  "count": 1,
  "generated_at": "2026-10-20T02:57:31Z",
  "items": [
    {
      "id": "dsperate",
      "profile": {
        "core_classification": "other",
        "core_version": "2.0.1",
        "cores": [
          "dsperate",
          "dsperate-sa"
        ],
        "display_name": "Nintendo - DS / DSi (DSperate)",
        "emulator": "DSperate",
        "files": [
          {
            "config_key": "paths.bios9",
            "description": "DS ARM9 BIOS",
            "hle_fallback": true,
            "name": "bios9.bin",
            "note": "Loaded only together with bios7.bin. Absent, FreeBIOS runs games by direct boot. Needed to boot the DS menu and for any DSi session.",
            "required": false,
            "size": 4096,
            "source_ref": "src/core/nds.cpp:105-108, src/core/mem/bus.h:130, src/frontend/sdl/main.cpp:1440-1460",
            "system": "nintendo-ds",
            "validation": [
              "size"
            ]
          },
          {
            "config_key": "paths.bios7",
            "description": "DS ARM7 BIOS",
            "hle_fallback": true,
            "name": "bios7.bin",
            "note": "Loaded only together with bios9.bin. Absent, FreeBIOS runs games by direct boot. Needed to boot the DS menu and for any DSi session.",
            "required": false,
            "size": 16384,
            "source_ref": "src/core/nds.cpp:105-109, src/core/mem/bus.h:131, src/frontend/sdl/main.cpp:1440-1460",
            "system": "nintendo-ds",
            "validation": [
              "size"
            ]
          },
          {
            "config_key": "paths.firmware",
            "description": "DS firmware",
            "hle_fallback": true,
            "name": "firmware.bin",
            "note": "Any non-empty file is accepted. Absent, a firmware is generated from [user]. Needed to boot the DS menu.",
            "required": false,
            "source_ref": "src/core/nds.cpp:110, src/core/nds.cpp:124-125, src/frontend/sdl/main.cpp:1441-1447",
            "system": "nintendo-ds"
          },
          {
            "config_key": "paths.bios9i",
            "description": "DSi ARM9 BIOS",
            "name": "dsi_bios9.bin",
            "note": "Loaded only together with dsi_bios7.bin. Without the pair DSiWare and --dsi-mode are refused, while DS games do not use it.",
            "required": false,
            "size": 65536,
            "source_ref": "src/core/nds_dsi.cpp:95-106, src/core/mem/bus.h:121, src/frontend/sdl/main.cpp:1301-1308",
            "system": "nintendo-dsi",
            "validation": [
              "size"
            ]
          },
          {
            "config_key": "paths.bios7i",
            "description": "DSi ARM7 BIOS",
            "name": "dsi_bios7.bin",
            "note": "Loaded only together with dsi_bios9.bin. Without the pair DSiWare and --dsi-mode are refused, while DS games do not use it.",
            "required": false,
            "size": 65536,
            "source_ref": "src/core/nds_dsi.cpp:95-106, src/core/mem/bus.h:122, src/frontend/sdl/main.cpp:1301-1308",
            "system": "nintendo-dsi",
            "validation": [
              "size"
            ]
          },
          {
            "config_key": "paths.dsi_firmware",
            "description": "DSi firmware",
            "name": "dsi_firmware.bin",
            "note": "Used instead of firmware.bin for a DSi session when no --firmware is given.",
            "required": false,
            "source_ref": "src/frontend/sdl/main.cpp:1294-1298",
            "system": "nintendo-dsi"
          },
          {
            "config_key": "paths.dsi_nand",
            "description": "DSi NAND image with nocash footer",
            "name": "dsi_nand.bin",
            "note": "Read only by --dsi-mode and NAND title shortcuts. DSiWare run from the game list does without it. Opened read-only, rejected without the \"DSi eMMC CID/CPU\" footer.",
            "required": false,
            "source_ref": "src/frontend/sdl/main.cpp:1263-1272, src/core/nds_dsi.cpp:121-127, src/core/io/dsi_sd.cpp:111-140",
            "system": "nintendo-dsi"
          },
          {
            "config_key": "paths.dsi_font",
            "description": "DSi system font (Japan, Americas, Europe, Australia)",
            "hle_fallback": true,
            "name": "TWLFontTable.dat",
            "note": "Used for DSiWare run without a NAND. Absent, DSperate's own font table is generated. ROCKNIX's ini leaves the key unset. A file under 256 bytes is refused. No hash is checked, only the layout bytes 0x84 and 0x86, and a table whose layout differs from the title's region draws a warning. This is the normal layout (0x84 = 3, 0x86 = 0), read from nand:/sys/TWLFontTable.dat of a retail DSi NAND dump. The FAT16 partition is AES-CTR encrypted with the normal key ROL128((KeyX XOR KeyY) + 0xFFFEFB4E295902582A680F5F1A4F3E79, 42), where KeyX is built from the console ID in the nocash footer and KeyY is 0x0AB9DC76 0xBD4DC4D3 0x202DDD1D 0xE1A00005. The counter is the first 16 bytes of SHA-1 of the footer's eMMC CID, and each 16-byte block is byte-reversed before and after AES. The USA, Europe, Japan and Australia consoles, four different console IDs, give the same bytes.",
            "required": false,
            "sha1": "c1101d7c9224acfa0350b5fc62da97d4c6d36141",
            "size": 863296,
            "source_ref": "src/core/nds_dsi.cpp:356-373, src/core/io/dsi_font.cpp:38-43, src/core/io/dsi_nand_fs.cpp:794-809, src/core/io/dsi_aes.cpp:39-47, src/frontend/sdl/main.cpp:1915-1919",
            "system": "nintendo-dsi"
          },
          {
            "config_key": "paths.dsi_font",
            "description": "DSi system font (China)",
            "hle_fallback": true,
            "name": "TWLFontTable.dat",
            "note": "The Chinese layout (0x84 = 9, 0x86 = 4), which Chinese DSiWare needs to find its fonts. Read from nand:/sys/TWLFontTable.dat of a retail Chinese DSi NAND dump, decrypted as for the normal table.",
            "required": false,
            "sha1": "5170aff7e9766baadbbf2943c41f5634e82aaf2d",
            "size": 581664,
            "source_ref": "src/core/nds_dsi.cpp:360-367, src/core/io/dsi_font.cpp:38-43, src/core/io/dsi_nand_fs.cpp:794-809, src/core/io/dsi_aes.cpp:39-47",
            "system": "nintendo-dsi"
          },
          {
            "config_key": "paths.dsi_font",
            "description": "DSi system font (Korea)",
            "hle_fallback": true,
            "name": "TWLFontTable.dat",
            "note": "The Korean layout (0x84 = 9, 0x86 = 5), which Korean DSiWare needs to find its fonts. Read from nand:/sys/TWLFontTable.dat of a retail Korean DSi NAND dump, decrypted as for the normal table.",
            "required": false,
            "sha1": "f0a37b073eb0208d3a54c9a6bb94292dbec1192a",
            "size": 162688,
            "source_ref": "src/core/nds_dsi.cpp:360-367, src/core/io/dsi_font.cpp:38-43, src/core/io/dsi_nand_fs.cpp:794-809, src/core/io/dsi_aes.cpp:39-47",
            "system": "nintendo-dsi"
          },
          {
            "category": "game_data",
            "config_key": "paths.cheats",
            "description": "Action Replay cheat database",
            "name": "usrcheat.dat",
            "note": "Looked up by game code and header checksum. Nothing is enabled by its presence.",
            "required": false,
            "source_ref": "src/frontend/sdl/main.cpp:709-735",
            "system": "nintendo-ds"
          }
        ],
        "notes": "Nintendo DS emulator for ARM handhelds with a DSi mode. ROCKNIX installs the\nrelease tarball for its architecture and runs it with --config pointing at\n/storage/.config/dsperate/dsperate.ini.\n\nNo file name is built in: every system file is a [paths] key of the ini (or\nthe matching command-line flag), and a key that is unset or names no file\ncounts as absent. The names below are the ones ROCKNIX's dsperate.ini gives,\nall in /storage/roms/bios/.\nref: src/frontend/sdl/config.cpp:184-205, src/frontend/sdl/main.cpp:1289-1303\n\nDS BIOS: both halves or neither, the ARM9 image 4 KB and the ARM7 image 16 KB\nexactly. Without them the built-in FreeBIOS runs games by direct boot. The\nfirmware may be any non-empty file. Without one a firmware is generated from\nthe [user] settings. Booting the DS menu needs both BIOS dumps and a real\nfirmware. No hash is checked: an FNV-1a of the loaded regions only tags save\nstates.\nref: src/core/nds.cpp:101-133, src/core/mem/bus.h:121-131,\n     src/frontend/sdl/main.cpp:1410, src/frontend/sdl/main.cpp:1440-1447\n\nDSi: DSiWare and --dsi-mode need the DSi BIOS pair, 64 KB each, and the DS\nBIOS dumps as well. FreeBIOS cannot run a DSi session. dsi_firmware replaces\nfirmware for a DSi session when no --firmware is given. The NAND is needed by\n--dsi-mode and by NAND title shortcuts only, and it must carry the nocash footer\n(at the end, or at 0x000FF800). DSiWare without a NAND runs on a generated\nconsole whose system font is DSperate's own unless dsi_font names a\nTWLFontTable.dat.\nref: src/frontend/sdl/main.cpp:1294-1308, src/frontend/sdl/main.cpp:1452-1460,\n     src/core/nds_dsi.cpp:95-112, src/core/nds_dsi.cpp:121-127,\n     src/core/io/dsi_sd.cpp:111-140, src/core/nds_dsi.cpp:356-373,\n     src/frontend/sdl/main.cpp:1915-1919\n\nCheats come from usrcheat.dat: the [paths] cheats entry, else beside the ROM,\nelse the config directory.\nref: src/frontend/sdl/main.cpp:709-735\n",
        "pin_frozen": "ROCKNIX 20261001 ships the v2.0.1 release binaries, built by CI from the v2.0.1 tag at this commit.",
        "profiled_date": "2026-10-17",
        "source": "https://github.com/beebono/DSperate",
        "source_commit": "81b73832c2e68e2b10cb5850f0a6d393ffc6fbb7",
        "systems": [
          "nintendo-ds",
          "nintendo-dsi"
        ],
        "type": "standalone"
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
