Skip to content

Emulator overview

Kokoromi builds on a Rust core, a Qt front end, emulated ARM cores, a stand-in service registry, an NVIDIA instruction table and a SPIR-V writer. The current path connects those foundations into one machine: the loader starts one of the project's AArch64 images, the kernel handles its calls, the stand-in services drive graphics and audio, and the window presents the result. Nintendo's OS is not emulated.

Part Where What works today
CPU core/src/cpu Dynarmic and Unicorn execute eight AArch64 cores over one RAM block
Kernel core/src/kernel Threads, scheduling, handles, memory regions, events and IPC dispatch
Services core/src/nn Stand-ins for the GPU driver, display, binder, audio, input, time and filesystem paths used by the test programs
Loader core/src/loader NRO and flat-image loading
Audio core/src/audio Voices, mixes, effects, output, measured HRIR spatialisation and raw audio output
GPU core/src/gpu Command processing, SASS translation, compute, graphics, textures, tensors and ray queries
Front end gui-qt Input, demo controls, frames and sound
Demo images guest, scene no_std AArch64 images and shared scene encoders

How does a frame reach the window?

An image loaded by the emulator calls the GPU driver stand-ins, writes commands into emulated RAM and submits them. The GPU engine translates the Ampere machine code, runs it through Vulkan and writes the result back. The display stand-in queues that buffer, then display::present notifies the Qt window.

The same route runs the Dungeon, ray-traced BoomBox, Mandelbrot precision dive, solar-system birth and the smaller demos. Tests may call lower layers directly as oracles, but the demo buttons use the emulator path.

No retail or third-party binary has run. No Switch 2 binary, shader or firmware was used to build this path.

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

Sources: core/src/{guest,kernel}.rs, core/src/cpu, core/src/nn, core/src/audio, core/src/gpu, guest, scene, gui-qt.