Emulation core · .NET 8
Dorado-EMU
A Zune HD application emulator. Dorado loads and runs Zune HD
.zcp / .ccgame packages — XNA Game Studio 3.1
managed apps — and is designed to be embedded in the Dorado-HD Android client.
What it is
A Zune HD .zcp is an NX container holding an XNA 3.1 / .NET Compact
Framework 3.5 managed application. Dorado parses the container, then executes the
app’s IL against a clean-room Microsoft.Xna.Framework 3.1
compatibility shim, mapping XNA graphics, audio and input onto the host platform.
.zcp (NX, AES-ECB DRM) ─┐
.ccgame (MSCF cabinet) ─┼─▶ Dorado.Containers ─▶ managed .exe + .xnb content
│ │
│ ▼
│ Dorado.Runtime (CF 3.5 → .NET identity remap)
│ │
│ ▼
└─▶ Microsoft.Xna.Framework 3.1 shim (Dorado.Xna)
│
┌─────────────────────────────┼─────────────────────────────┐
▼ ▼
Dorado.Platform.Desktop (SDL/OpenGL) Dorado.Platform.Android (EGL/GLES3/AAudio)
Status
There is no working Zune emulator anywhere in the world — Dorado is deliberately early. Container parsing and a desktop runtime are implemented.
| Milestone | Scope | Status |
|---|---|---|
| M0 | .ccgame + .zcp parsers, CLI, tests | Done |
| M1 | Desktop XNA 3.1 shim; run homebrew apps; golden frames | Done |
| M2 | Android host (EGL/GLES3/AAudio) + dorado-hd module | Planned |
| M3 | Corpus coverage, XNB types, .ccgame→.zcp writer | Planned |
| M4 | User-supplied DRM key bridge | Planned |
| M5 | Optional full-system Tegra APX 2600 + WinCE 6.0 core | Planned |
M1 results
- Runtime — extracts a package, then loads its managed assembly in a custom
AssemblyLoadContextmapping Compact Framework and XNA 3.1 identities onto the framework and shims. The realZunePong.exe/ZuneHDDemo.exeentry points execute. - Shims — clean-room, identity-matched (
3.1.0.0) assemblies covering Game loop, SpriteBatch, GraphicsDevice, ContentManager + XNB, Color/Vector/Rectangle/BoundingBox, Viewport, RenderTarget2D, and Keyboard/GamePad/Touch/Accelerometer. - Backend — a deterministic headless software rasterizer with premultiplied blitting, rotation/scale/flip, render targets and a PNG writer.
- Verified — XNA Pong and Etch-A-Sketch render deterministic 480×272 frames; golden hashes are asserted and a scripted touch stream draws strokes.
Container formats
| Format | Container | Notes |
|---|---|---|
.ccgame | MSCF cabinet (MSZIP) | Numbered payload files plus a XCabInfo.resources mapping. Unencrypted. |
.zcp | NX container | Header, Authenticode blob, plaintext manifest, then an AES-ECB encrypted payload. Marketplace DRM keys are not public. |
Build & quick start
dotnet build Dorado.sln -c Release
dotnet test Dorado.sln
# fetch a local test corpus (git-ignored; see corpus/LICENSE-MANIFEST.md)
tools/corpus-fetch.sh
CLI="dotnet run --project src/Dorado.Cli --"
$CLI inspect "corpus/XNA Pong.ccgame" # container metadata + files
$CLI refs path/to/App.exe # assembly/member references
$CLI unpack "corpus/XNA Pong.ccgame" out/ # extract an unencrypted package
$CLI run "corpus/XNA Pong.ccgame" --frames 20 --hash
$CLI run "corpus/Etch-A-Sketch.ccgame" --frames 20 --out frame.png
net8.0-android)
additionally requires the android workload, added in M2.
Licensing
MIT. Dorado is an independent homage and ships no Microsoft content — no
.zcp / .ccgame payloads, firmware, fonts or DRM keys.
Help build the first Zune HD emulator.
Containers are untrusted input — parsing is defensive and every behavior ships with tests.