oboromi is a modular and work-in-progress emulator for the upcoming Nintendo Switch 2. It's built in Rust and focuses on correctness, clarity, and traceability rather than performance at this stage. The current implementation includes a functioning CPU core, a memory management unit (MMU) with basic paging, and a custom memory subsystem.
Important
oboromi is not yet playable and does not emulate any commercial firmware or games.
oboromi uses Dynarmic as a JIT backend for AArch64 instruction translation.
The included version is a fork with custom modifications designed to integrate directly with DynarmicCPU
in oboromi.
- Virtual to physical address translation via simple page table
- 4 KiB paging with TLB support (64 entries)
- Page faults and access violations are logged
- Mapping utility functions for identity and custom regions
- Custom memory backend with:
- Region registration
- Bounds-checked access
- Load/store abstraction for 32-bit and 64-bit values
- Endianness-aware access
- Instruction-level test framework embedded in the project
- Tests cover:
- NOP
- ADD (immediate and register)
- SUB
- MOV
- Branching
- RET (using X30 as LR)
- Each test is run via
DynarmicCPU::step()
and results are shown in the GUI (and in the terminal) - Example:
✅ NOP - PASS (65.4881ms)
❌ ADD X1, X1, #2 - FAIL: Verification failed (12.6993ms)
...
Note
if it fails it's probably your problem, since it should work
- Built-in GUI based on
egui
- Always included and launched by default
- Provides:
- Partial memory viewer
- Manual test runner (via GUI button)
- Live output of instruction test results and stats
git clone --recurse-submodules https://github.com/0xNikilite/oboromi
cd oboromi
cargo run
Pull requests are welcome! Feel free to fork the repo, open issues, or suggest improvements.
This project is licensed under the Mozilla Public License 2.0.
See LICENSE for details.
Warning
oboromi is not affiliated with Nintendo. This project does not contain any copyrighted firmware or ROMs.