Skip to content
uplushPublic
forked from AloysHF/DingooEmu

About

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

Dingoo A320 Emulator — A Dingoo A320 emulator written in Rust

Dingoo A320 Emulator

Website CI Gitlab Pipeline Status Release Downloads Quality Gate Status License: BSD 3-Clause Discord QQ Group

Dingoo A320 is a handheld game console powered by the Ingenic JZ4740 MIPS SoC. This emulator runs .app game files from the Dingoo ecosystem through high-level emulation of the MIPS32 CPU and Dingoo SDK.

Features

  • Tiered MIPS32 CPU execution — Cached interpreter on every platform, plus native translation of hot blocks on 64-bit Android
  • Real-time scheduling — Guest timing stays at 60 Hz without requiring one host-side dispatch per hardware clock cycle
  • HLE (High-Level Emulation) — Dingoo SDK functions for graphics, focused-window key callbacks, audio, timing, files, and companion-content discovery implemented in Rust
  • Auditable compatibility diagnostics — Aggregate unknown SDK calls and emit per-game JSON reports for review
  • .app file support — Parse and load Dingoo A320 game container format
  • Frame rendering — Native 320×240 RGB565 framebuffer output
  • PCM audio output — Dingoo waveout playback with format conversion, volume, and resampling
  • Screenshot mode — Headless frame capture for automated testing and preview generation
  • Batch screenshot — Process multiple .app files with scripts/batch-screenshots.ps1
  • RetroArch integration — libretro core with video, asynchronous audio delivery, RetroPad input, reset, and persistent game saves
  • Cross-platform — Windows, Linux, macOS

Usage

Standalone Mode

Download the latest binary from the Releases page and run:

dingooemu path/to/game.app

See the Standalone Emulator guide for installation, keyboard controls, screenshot mode, and all command-line options.

RetroArch Mode

Install Dingoo A320 (DingooEmu) from RetroArch's Core Downloader, or install the release files manually, then load a .app game through Load Content.

See the RetroArch Core guide for installation, supported platforms and features, RetroPad mapping, core options, and cheats.

Building

Requires Rust (stable).

Standalone Mode (Default)

cargo build -p dingooemu --release
cargo run -p dingooemu --release -- path/to/game.app
cargo run -p dingooemu --release -- --fullscreen path/to/game.app

The binary is produced at target/release/dingoo-emu (dingoo-emu.exe on Windows).

Libretro Core (for RetroArch)

cargo build -p dingooemu-libretro --release

Cargo names the cdylib after its lib target, so this produces dingooemu_libretro.dll on Windows, libdingooemu_libretro.so on Linux, or libdingooemu_libretro.dylib on macOS under target/release/. RetroArch expects the core file to be named dingooemu_libretro.<ext>, so remove the leading lib from the Linux or macOS output before copying it into RetroArch's cores/ directory.

For Android cross-compilation, see Android Libretro Core. For iOS, see iOS Libretro Core.

Testing

Run the unit tests:

cargo test --workspace

Architecture

crates/
├── dingooemu-core/              # Platform-independent emulator engine (library)
│   └── src/
│       ├── lib.rs               # Crate root (module declarations)
│       ├── emulator.rs          # Shared Emulator (both front-ends)
│       ├── emulator/
│       │   └── sdk_hle/         # Runtime SDK dispatch and implementations
│       │       ├── mod.rs       # Single HLE dispatcher
│       │       ├── graphics.rs  # LCD and framebuffer calls
│       │       ├── gui.rs       # Focused-window key message dispatch
│       │       ├── input.rs     # Buttons and input events
│       │       ├── audio.rs     # PCM and wave output
│       │       ├── files.rs     # Resources, files, and saves
│       │       ├── tasks.rs     # Tasks and semaphores
│       │       └── system.rs    # Memory, timing, and system calls
│       ├── cpu.rs               # Cached-block MIPS32 CPU interpreter
│       ├── jit.rs               # Optional native translator for hot MIPS32 blocks
│       ├── memory.rs            # Memory bus (32MB address space)
│       ├── video.rs             # Framebuffer and screen rendering
│       ├── audio.rs             # Audio engine (PCM output)
│       ├── input.rs             # Button state management
│       ├── app_loader.rs        # .app container parser
│       └── error.rs             # Error types
├── dingooemu/                   # Standalone binary (-> dingooemu)
│   └── src/
│       └── main.rs              # Window loop and CLI front-end
└── dingooemu-libretro/          # libretro cdylib (-> dingooemu_libretro.{dll,so,dylib})
    ├── dingooemu_libretro.info  # RetroArch core metadata
    └── src/
        ├── lib.rs               # cdylib crate root
        └── libretro/
            ├── api.rs           # Exported libretro functions
            ├── callbacks.rs     # Callback management
            └── types.rs         # libretro type definitions

Game Compatibility

Compatibility results are experimental and cover startup and initial rendering only. See Game Compatibility for the current 39-build results and screenshots.

Keyboard Controls

Key Dingoo Button
Arrow keys D-pad
X A
Z B
S X
A Y
Enter START
Right Shift SELECT
Q L shoulder
W R shoulder
Esc Exit

The standalone defaults match RetroArch's standard keyboard bindings for the equivalent RetroPad buttons.

Contribute

Contributions are welcome! Whether you're interested in fixing bugs, adding features, improving documentation, or testing game compatibility, we'd love your help. See CONTRIBUTING.md for details.

License

This project is licensed under the BSD 3-Clause License. JIT-enabled Android binaries also contain compatible third-party components; their complete terms are included in THIRD_PARTY_LICENSES.md.

About

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages