oboromi logo

License Discord

(◕‿◕)  Join our Discord here 🢰

oboromi

a proof-of-concept Nintendo Switch 2 emulator written in Rust

Overview

oboromi is a modular and work-in-progress emulator for the 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.

Features

JIT Backend (Dynarmic)

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.

these core features below are not used, wait for next updates

Memory Management Unit (MMU)

  • Virtual to physical address translation via simple page table
  • 4KiB paging with TLB support (64 entries)
  • Page faults and access violations are logged
  • Mapping utility functions for identity and custom regions

Memory Subsystem

  • Custom memory backend with:
    • Region registration
    • Bounds-checked access
    • Load/store abstraction for 32-bit and 64-bit values
    • Endianness-aware access
end of features not used

Testing & Examples

  • 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 a test fails, its likely due to changes in the code or an unusual environment.
The test framework is designed to work reliably: if you run the program without modifying the code, you should see the marks for passing tests.
Any failures should prompt you to double-check recent changes or system configuration that might affect execution.

GUI (via eframe)

  • 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

How to Run

git clone --recurse-submodules https://github.com/0xNikilite/oboromi
cd oboromi

cargo run

Contributing

Pull requests are welcome! Feel free to fork the repo, open issues, or suggest improvements.

📜 License

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.

Description
⚠️ ARCHIVED: Original GitHub repository no longer exists. Preserved as backup on 2026-01-31T05:25:22.048Z
Readme 7.3 MiB
Languages
Rust 100%