|
|
||
|---|---|---|
| .github | ||
| assets | ||
| benchmarks | ||
| core | ||
| docs | ||
| examples | ||
| gui | ||
| scripts | ||
| .gitignore | ||
| .gitmodules | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CONTRIBUTING.md | ||
| license.txt | ||
| README.md | ||
(◕‿◕) Join our Discord here 🢰
oboromi
a proof-of-concept Nintendo Switch 2 emulator foundation written in Rust
Overview
oboromi is a modular and work-in-progress emulator foundation for the Nintendo Switch 2. It's built in Rust and focuses on correctness, clarity, and traceability rather than performance at this stage. It currently emulates an 8-core ARM64 CPU with 12GB of shared memory.
Important
oboromi is not (yet) a full Switch 2 emulator. It does not run any Nintendo firmware or games.
Current Features
ARM64 CPU Emulation (Unicorn Engine)
oboromi uses Unicorn Engine for ARM64 instruction emulation. The UnicornCPU and CpuManager provide:
- 8-Core CPU Architecture: Orchestrated via
CpuManagerwith shared memory access. - Full ARM64 register access (X0-X30, SP, PC) per core.
- Memory mapping with permission control
- Breakpoint handling via
BRKinstructions - Safe Rust interface with proper error handling
Comprehensive Instruction Testing
- Reliable test framework using breakpoints and
run()for stable execution - 10/10 instruction tests passing covering core ARM64 operations:
- NOP, ADD (immediate/register), SUB (immediate)
- MOV (register), RET, B (branch)
- Multi-instruction sequences and memory access patterns
- Fast execution
Memory Management
- 12GB Combined Emulated RAM (Lazily allocated)
- 32-bit and 64-bit load/store operations with little-endian byte ordering
- Direct memory read/write primitives for testing
GPU Emulation (Work in Progress)
- SM86 Instruction Decoding: Implementation of NVIDIA SM86 shader instruction decoding (128-bit instructions).
- SPIR-V Generation: translating decoded instructions (like
al2p) into SPIR-V intermediate representation. - Foundation for future compute and graphics shader translation.
GUI (via eframe)
- Built-in GUI based on
egui - Provides:
- Real-time test result display with pass/fail indicators
- Execution timing statistics
- Clean, responsive interface
How to Run
git clone https://github.com/0xNikilite/oboromi
cd oboromi
# Build and run (requires CMake and Ninja)
cargo run
The build system will automatically:
- Compile the Unicorn Engine C++ bindings
- Link required libraries
- Launch the GUI with integrated test suite
Prerequisites
- Rust (latest stable)
- CMake (3.16+)
- Ninja build system
- C++ compiler: MSVC (Windows), Clang (macOS/Linux)
Contributing
Pull requests are welcome! Feel free to fork the repo, open issues, or suggest improvements.
📜 License
This project is licensed under the GNU General Public License v3.
See LICENSE for details.
Useful Links
[!WARNING] oboromi is not affiliated with Nintendo. This project does not contain any copyrighted firmware or ROMs.