MCPcopy Index your code
hub / github.com/0xNikilite/oboromi

github.com/0xNikilite/oboromi @v0.0.1-dynarmic

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.0.1-dynarmic ↗ · + Follow
113 symbols 243 edges 24 files 41 documented · 36%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

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 ARM64 CPU core using Dynarmic JIT compilation, comprehensive instruction testing, and cross-platform compatibility.

[!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.

Comprehensive Instruction Testing

  • Reliable test framework using breakpoints and run() instead of single-stepping
  • 10+ instruction tests covering core ARM64 operations:
  • NOP, ADD, SUB, MOV operations
  • Register and immediate arithmetic
  • Control flow (branches, returns)
  • Multi-instruction sequences

Memory Management

  • 32-bit and 64-bit load/store operations with proper alignment handling
  • Endianness-aware memory access using little-endian byte ordering
  • Virtual address translation support via MMU with 4KB paging and 64-entry TLB

Key Components:

Memory Backend (memory.rs) - 8MB RAM allocation with bounds checking on all accesses (dynarmic_interface.rs) - Atomic operations support (compare-and-swap, atomic add) - Exclusive monitor for ARM load/store exclusive instructions - Direct C interface for Dynarmic integration

Memory Management Unit (mmu/) - Virtual to physical address translation - Sparse page table implementation with permission flags - Translation Lookaside Buffer (TLB) with FIFO replacement

Testing & Verification

🧪 Starting Dynarmic JIT Instruction Tests...
  Base address: 0x0000000000001000
  Using run() with breakpoints for reliable execution

  ✅ NOP - PASS (24.3ms)
  ✅ ADD X1, X1, #2 - PASS (22.9ms)
  ✅ SUB X2, X2, #1 - PASS (23.4ms)
  ✅ ADD X0, X0, X1 - PASS (23.2ms)
  ✅ MOV X3, X4 - PASS (23.8ms)
  ✅ B +8 - PASS (24.1ms)
  ✅ RET - PASS (23.0ms)
  ✅ Atomic ADD Test - PASS (23.0ms)
  ✅ Memory Access Pattern - PASS (23.7ms)
  ✅ Multiple Arithmetic Ops - PASS (22.2ms)

📊 Test Summary:
  Total tests: 10
  Passed: 10 ✅
  Failed: 0 ❌
  Total time: 254.8ms

GUI (via eframe)

  • Built-in GUI based on egui
  • Provides:
  • Test result display
  • Real-time execution statistics

How to Run

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

cargo run

The build system will automatically: - Handle architecture-specific linking (Zydis/Zycore on x86_64 only) - Compile the C++ interface - Run the test suite when clicked on the main button

Platform-Specific Notes

Windows

  • Supports both MSVC and MinGW toolchains
  • Automatic library linking for Windows APIs

macOS

  • First test run may be slower due to JIT compilation
  • Native support for both Intel and Apple Silicon

Linux

  • nothing to note

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.


Useful Links


[!WARNING] oboromi is not affiliated with Nintendo. This project does not contain any copyrighted firmware or ROMs.

Core symbols most depended-on inside this repo

Shape

Method 72
Function 28
Class 13

Languages

Rust100%

Modules by API surface

oboromi-core/src/memory/memory.rs30 symbols
oboromi-core/src/tests/run.rs19 symbols
oboromi-core/src/cpu/old_cpu.rs17 symbols
oboromi-core/src/cpu/dynarmic_interface.rs14 symbols
oboromi-core/src/mmu/tlb.rs6 symbols
oboromi-core/src/mmu/paging.rs5 symbols
oboromi-core/src/mmu/mmu.rs5 symbols
oboromi-gui/src/main.rs4 symbols
oboromi-core/build.rs4 symbols
oboromi-gui/src/gui/gui.rs3 symbols
oboromi-core/src/tests/old_run.rs1 symbols
oboromi-core/src/input/mod.rs1 symbols

For agents

$ claude mcp add oboromi \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page