Files
libretro/emulators/dingooemu.yml
T

102 lines
5.1 KiB
YAML

emulator: DingooEmu
type: standalone + libretro
core_classification: pure_libretro
source: "https://github.com/AloysHF/DingooEmu"
upstream: "https://github.com/AloysHF/DingooEmu"
profiled_date: "2026-09-17"
source_commit: "f57c9339e6021cd37c4bd694c14b0813a9b5ee72"
core_version: "0.3.0"
display_name: "Dingoo - A320 / Gemei A330 (DingooEmu)"
cores:
- dingooemu
systems:
- dingoo-a320
- gemei-a330
notes: |
Dingoo A320 and Gemei A330 emulator written in Rust by AloysHF. The
libretro core and the dingoo-emu standalone binary share the
dingooemu-core crate. Content is read from its full path (need_fullpath
= true, crates/dingooemu-libretro/src/api.rs:87;
crates/dingooemu/src/main.rs:226; crates/dingooemu-core/src/emulator.rs:33-37;
crates/dingooemu-core/src/package.rs:124-135). The CCDL package's load
address selects the runtime: a .app loaded in the 0x8xxxxxxx range runs on
the MIPS32 interpreter as an A320, a .cc, .c2s or .c3s loaded at
0x10100000 (retail SDK) or 0x13800000 (homebrew SDK) runs on the
ARM32/Thumb interpreter as an A330
(crates/dingooemu-core/src/content.rs:66-74, 104-121;
crates/dingooemu-core/src/emulator.rs:44-55). Both runtimes bind the
package's imports to Rust implementations of the device SDK
(crates/dingooemu-core/src/a320/runtime/sdk_hle/mod.rs:22-30;
crates/dingooemu-core/src/a330/runtime/sdk_hle/mod.rs:226-234). No
firmware code is executed and no font or system file backs those calls.
The A320 guest file API
(crates/dingooemu-core/src/a320/runtime/sdk_hle/files.rs:43-128)
resolves a name in three steps: a file under the save directory, a
resource packed inside the .app, then a host file relative to the .app's
own directory (crates/dingooemu-core/src/a320/runtime.rs:1645-1665,
crates/dingooemu-core/src/a320/runtime.rs:1592-1618,
crates/dingooemu-core/src/a320/runtime.rs:1424-1428,
crates/dingooemu-core/src/a320/runtime.rs:1449-1462). fsys_findfirst
enumerates the .app's directory and refuses to leave it
(crates/dingooemu-core/src/a320/runtime.rs:1519-1529).
The A330 guest file API
(crates/dingooemu-core/src/a330/runtime/sdk_hle/files.rs:74-135)
resolves a name in five steps: a file under the save directory, a host
file relative to the content's directory, a resource packed inside the
package, the zip payload appended to the package, then an entry of the
firmware archive mounted from the content's directory; a name none of
them answers fails the open. fsys_findfirst enumerates the content's
directory and refuses to leave it
(crates/dingooemu-core/src/a330/runtime/sdk_hle/files.rs:381-395).
Files the game creates land in the frontend save directory
(crates/dingooemu-libretro/src/api.rs:150-155,
crates/dingooemu-core/src/emulator.rs:173-179) or, when the frontend
gives none and in the standalone, beside the content
(crates/dingooemu-core/src/a320/runtime.rs:372,
crates/dingooemu-core/src/a330/runtime.rs:415-417). The core queries
RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY only
(crates/dingooemu-libretro/src/constants.rs:30); no system directory
constant exists in the crate.
With the diagnostic core option on, dingooemu-diagnostic.txt is written
to the save directory, or beside the content without one
(crates/dingooemu-libretro/src/api.rs:156-159,
crates/dingooemu-libretro/src/diagnostics.rs:8,
crates/dingooemu-libretro/src/diagnostics.rs:83-89,
crates/dingooemu-libretro/src/diagnostics.rs:310-318). No include_bytes!
data is compiled in. The .info declares firmware_count = 0: the one file
below is read from the content's directory, never from the system
directory.
files:
- name: "A330.HXF"
system: gemei-a330
required: false
storage: large_file
load_from: content_dir
size: 76352901
validation: [signature]
md5: "d8e1849773223a842076ca04053a13a4"
sha1: "69b3544d992a23e8b736c61837914a4d1b4e7bb5"
description: "Gemei A330 firmware update archive, V1.1 build3 of 2011-02-13"
note: >-
Mounted when an A330 package loads: 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; the V1.10 image of 2011-01-25
indexes the same way.
source_ref: "crates/dingooemu-core/src/a330/runtime.rs:415-418, 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"