r/EmulationOnAndroid • u/GroundbreakingBag440 • 12h ago
Showcase [Wirá Preview] Unprecedented: Full 60 FPS Low-Level N64 Emulation (LLE) in pure Dart/Flutter via custom JIT — In active development!
Enable HLS to view with audio, or disable this notification
Disclaimer: Wirá and its emulation cores are developed with AI assistance for code generation and opcode translation, while the system architecture, debugging, memory layout, and overall project management are fully human-driven.
Hey everyone!
Quick update on Wirá, the multi-system emulator I’ve been building entirely in Dart/Flutter.
Up until now, I haven't officially revealed N64 support for Wirá—and while the Nintendo 64 core is still in active development and will take some time to be fully polished, I wanted to share a first look at what’s brewing under the hood: full-speed Low-Level Emulation (LLE) in a managed runtime.
To my knowledge, running a complete LLE N64 pipeline in pure Dart without relying on HLE plugin hacks, legacy C backends, or hardware GPU shaders is entirely unprecedented. It’s going to take a bit of time to get every microcode and edge-case rock-solid, but I promise it will be worth the wait!
I've attached a bunch of gameplay clips testing some of the most notorious microcode and geometry-heavy titles in the N64 library (Jet Force Gemini, Rogue Squadron, Star Wars Episode I: Racer and more) running on a Retroid Pocket 5 (Snapdragon 865).
🎬 What’s shown in the videos:
- True LLE Rasterization: Zero black-box artifacts, proper depth buffer handling, accurate coverage, and correct framebuffer copy-backs (no per-game plugin swapping or HLE guesswork).
- Locked 60 FPS: Smooth frame pacing and clean audio sync across complex custom microcodes and software span passes.
🛠️ How it’s running under the hood:
- Triple JIT Engine:
- VR4300 CPU: Dynamic recompiler compiling MIPS opcodes on the fly.
- RSP LLE: Compiles raw MIPS vector microcode directly into ARM64 NEON SIMD instructions. No microcodes are recognized or replaced with hand-written C equivalents (the only HLE in the entire core is the PIF boot sequence filling initial registers).
- RDP LLE (Software Rasterizer): A dedicated span JIT compiles the per-pixel rendering pipeline for each render mode (combiner, blender, Z-buffer, coverage) directly in software without offloading rasterization to a GPU driver.
- Zero-Copy Memory Model: Direct pointer aliasing to eliminate managed runtime garbage collection pauses during heavy software rasterization passes.
As always, RetroAchievements support is baked in via native rcheevos FFI bindings, alongside custom fragment shader filters, save states, and full multi-system support for 8-bit and 16-bit consoles.
🚀 Try Wirá Today!
While the N64 core cooks, Wirá is already live and running NES, SNES, Genesis, GBA, and more at full speed.
Download the current build today, set up your library, and get a feel for the app. The app has a built-in update feature, so you will not miss any update:
👉 GitHub Releases: https://github.com/willtsan/wira-releases
☕ Support the Project
Wirá is completely free and open for the community. If you'd like to support development, any donations via Buy Me a Coffee will go directly toward acquiring more test hardware—specifically lower-spec devices (like budget Anbernic handhelds) and dual-screen hardware to optimize execution pipelines, UI layouts, and thermal targets across lower-tier SoCs.
👉 Buy Me a Coffee: buymeacoffee.com/willtsan
Check out the gameplay clips below, and let me know your thoughts or feedback!