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.

.NET 8 Clean-room XNA 3.1 shim Zero-warning policy

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.

MilestoneScopeStatus
M0.ccgame + .zcp parsers, CLI, testsDone
M1Desktop XNA 3.1 shim; run homebrew apps; golden framesDone
M2Android host (EGL/GLES3/AAudio) + dorado-hd modulePlanned
M3Corpus coverage, XNB types, .ccgame.zcp writerPlanned
M4User-supplied DRM key bridgePlanned
M5Optional full-system Tegra APX 2600 + WinCE 6.0 corePlanned

M1 results

  • Runtime — extracts a package, then loads its managed assembly in a custom AssemblyLoadContext mapping Compact Framework and XNA 3.1 identities onto the framework and shims. The real ZunePong.exe / ZuneHDDemo.exe entry 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

FormatContainerNotes
.ccgameMSCF cabinet (MSZIP)Numbered payload files plus a XCabInfo.resources mapping. Unencrypted.
.zcpNX containerHeader, 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
Requires the .NET 8 SDK. The Android host (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.