{
  "commit": "d38cd580364b2c788e633b9e51c15e1668f726c0",
  "count": 1,
  "generated_at": "2026-11-03T13:36:34Z",
  "items": [
    {
      "id": "dingooemu",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v0.3.0",
        "cores": [
          "dingooemu"
        ],
        "display_name": "Dingoo - A320 / Gemei A330 (DingooEmu)",
        "emulator": "DingooEmu",
        "files": [
          {
            "description": "Gemei A330 firmware update archive, V1.1 build3 of 2011-02-13",
            "load_from": "content_dir",
            "md5": "d8e1849773223a842076ca04053a13a4",
            "name": "A330.HXF",
            "note": "Mounted when an A330 package loads (crates/dingooemu-core/src/a330/runtime.rs:415-418): the content's directory is scanned and the first entry whose extension is hxf, in any case, is read whole. The file must start with WADF0100 and declare at offset 20 a size within its own length. Each record is a u32 name length, the name, one byte, a u32 data length and the data, and a zero name length ends the table. Names are lowercased, backslashes turned to slashes and a leading drive letter dropped, so Z:\\SYSTEM\\nls\\c_936.nls and system/nls/c_936.nls reach the same entry. The archive is the last source consulted when a game opens a file the save directory, the content directory, the package's resources and its appended zip payload do not hold. Without it such an open fails and the runtime goes on. The image itself is never hashed, and the hashes here name the last firmware Gemei published, and the V1.10 image of 2011-01-25 indexes the same way.",
            "required": false,
            "sha1": "69b3544d992a23e8b736c61837914a4d1b4e7bb5",
            "size": 76352901,
            "source_ref": "crates/dingooemu-core/src/a330/firmware_archive.rs:16-50, 54-58, 63-96, 117-124, crates/dingooemu-core/src/a330/runtime/sdk_hle/files.rs:108-133",
            "storage": "large_file",
            "system": "gemei-a330",
            "validation": [
              "signature"
            ]
          }
        ],
        "notes": "Dingoo A320 and Gemei A330 emulator written in Rust by AloysHF. The\nlibretro core and the dingoo-emu standalone binary share the\ndingooemu-core crate. Content is read from its full path (need_fullpath\n= true, crates/dingooemu-libretro/src/api.rs:87,\ncrates/dingooemu/src/main.rs:226, crates/dingooemu-core/src/emulator.rs:33-37,\ncrates/dingooemu-core/src/package.rs:124-135). The CCDL package's load\naddress selects the runtime: a .app loaded in the 0x8xxxxxxx range runs on\nthe MIPS32 interpreter as an A320, a .cc, .c2s or .c3s loaded at\n0x10100000 (retail SDK) or 0x13800000 (homebrew SDK) runs on the\nARM32/Thumb interpreter as an A330\n(crates/dingooemu-core/src/content.rs:66-74, 104-121,\ncrates/dingooemu-core/src/emulator.rs:44-55). Both runtimes bind the\npackage's imports to Rust implementations of the device SDK\n(crates/dingooemu-core/src/a320/runtime/sdk_hle/mod.rs:22-30,\ncrates/dingooemu-core/src/a330/runtime/sdk_hle/mod.rs:226-234). No\nfirmware code is executed and no font or system file backs those calls.\n\nThe A320 guest file API\n(crates/dingooemu-core/src/a320/runtime/sdk_hle/files.rs:43-128)\nresolves a name in three steps: a file under the save directory, a\nresource packed inside the .app, then a host file relative to the .app's\nown directory (crates/dingooemu-core/src/a320/runtime.rs:1645-1665,\ncrates/dingooemu-core/src/a320/runtime.rs:1592-1618,\ncrates/dingooemu-core/src/a320/runtime.rs:1424-1428,\ncrates/dingooemu-core/src/a320/runtime.rs:1449-1462). fsys_findfirst\nenumerates the .app's directory and refuses to leave it\n(crates/dingooemu-core/src/a320/runtime.rs:1519-1529).\n\nThe A330 guest file API\n(crates/dingooemu-core/src/a330/runtime/sdk_hle/files.rs:74-135)\nresolves a name in five steps: a file under the save directory, a host\nfile relative to the content's directory, a resource packed inside the\npackage, the zip payload appended to the package, then an entry of the\nfirmware archive mounted from the content's directory. A name none of\nthem answers fails the open. fsys_findfirst enumerates the content's\ndirectory and refuses to leave it\n(crates/dingooemu-core/src/a330/runtime/sdk_hle/files.rs:381-395).\n\nFiles the game creates land in the frontend save directory\n(crates/dingooemu-libretro/src/api.rs:150-155,\ncrates/dingooemu-core/src/emulator.rs:173-179) or, when the frontend\ngives none and in the standalone, beside the content\n(crates/dingooemu-core/src/a320/runtime.rs:372,\ncrates/dingooemu-core/src/a330/runtime.rs:415-417). The core queries\nRETRO_ENVIRONMENT_GET_SAVE_DIRECTORY only\n(crates/dingooemu-libretro/src/constants.rs:30), and no system directory\nconstant exists in the crate.\n\nWith the diagnostic core option on, dingooemu-diagnostic.txt is written\nto the save directory, or beside the content without one\n(crates/dingooemu-libretro/src/api.rs:156-159,\ncrates/dingooemu-libretro/src/diagnostics.rs:8,\ncrates/dingooemu-libretro/src/diagnostics.rs:83-89,\ncrates/dingooemu-libretro/src/diagnostics.rs:310-318). No include_bytes!\ndata is compiled in. The .info declares firmware_count = 0: the one file\nbelow is read from the content's directory, never from the system\ndirectory.\n",
        "profiled_date": "2026-09-17",
        "source": "https://github.com/AloysHF/DingooEmu",
        "source_commit": "f57c9339e6021cd37c4bd694c14b0813a9b5ee72",
        "systems": [
          "dingoo-a320",
          "gemei-a330"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/AloysHF/DingooEmu",
        "version_basis": {
          "distance": 0,
          "kind": "tag",
          "tag": "v0.3.0"
        }
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
