Skip to content

Emulator path

The included demos are the project's own no_std AArch64 images. The loader places an image in emulated RAM, starts it on the emulated CPU and lets it drive the hardware through a small stand-in service layer. That layer follows known Switch 1 interfaces; Nintendo's OS is not emulated.

flowchart TB
    P["AArch64 image"] -->|"SVC"| K["Kernel<br/>Threads, handles, IPC"]
    K --> NV["GPU driver services"]
    K --> AU["Audio services"]
    K --> VI["Display services"]
    NV --> GPU["GPU engine"]
    GPU --> RAM[("Emulated RAM")]
    VI --> WIN["Qt window"]
    AU --> OUT["Qt audio output"]
    P --- RAM

The images use the aarch64-unknown-none target and are built by scripts/build-guest.sh. Shared encoders in the scene crate build command lists, shader headers, texture headers and demo data without duplicating the oracle path.

What runs through this path?

Layer Current support
Loader NRO and flat images
Kernel System calls, threads, scheduler, memory, events and IPC
GPU service stand-ins Allocation, address mapping, channel submission and sync points
Display VI, binder, dequeue, queue and present
Audio Renderer updates, raw output and live sink
Input and files HID state and SD-card-backed demo assets

The Dungeon uses the full path for input, raster and ray-traced drawing, compute effects, display and measured-HRIR audio. The same runner drives the ray-traced BoomBox, the double-precision Mandelbrot dive and solar-system birth.

Tests keep direct reference renderers as oracles. The buttons and capture tool use the emulator path.

Verified by: the fixed-frame and PCM contracts in core/src/guest.rs, plus the loader, kernel, service and GPU suites.

Sources: core/src/{guest,kernel}.rs, core/src/loader, core/src/nn, guest, scene, scripts/build-guest.sh.