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.
- 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
.appfile 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
.appfiles withscripts/batch-screenshots.ps1 - RetroArch integration — libretro core with video, asynchronous audio delivery, RetroPad input, reset, and persistent game saves
- Cross-platform — Windows, Linux, macOS
Download the latest binary from the Releases page and run:
dingooemu path/to/game.appSee the Standalone Emulator guide for installation, keyboard controls, screenshot mode, and all command-line options.
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.
Requires Rust (stable).
cargo build -p dingooemu --release
cargo run -p dingooemu --release -- path/to/game.app
cargo run -p dingooemu --release -- --fullscreen path/to/game.appThe binary is produced at target/release/dingoo-emu (dingoo-emu.exe on
Windows).
cargo build -p dingooemu-libretro --releaseCargo 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.
Run the unit tests:
cargo test --workspacecrates/
├── 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
Compatibility results are experimental and cover startup and initial rendering only. See Game Compatibility for the current 39-build results and screenshots.
| 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.
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.
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.
