Nikilite 44b9429390 [*] refactor: consolidate services with macro, improve memory safety
- Replace 150+ individual service files with define_service! macro
- Add Pin<Box<[u8]>> for shared memory to prevent pointer invalidation
- Remove misleading Clone impl from UnicornCPU
- Complete sys::State with Services struct
- Add SPIR-V emitter validation
- Simplify fs::File::open (remove async)
- Remove broken branch test
- Add log dependency to core
2026-01-13 22:00:46 +01:00
2025-11-10 23:47:37 +01:00
2025-08-02 22:55:50 +02:00
2025-11-21 23:42:21 +01:00
2025-11-21 23:42:21 +01:00
2025-12-20 15:46:28 +01:00

oboromi logo

License Discord

(◕‿◕)  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 CpuManager with shared memory access.
  • Full ARM64 register access (X0-X30, SP, PC) per core.
  • Memory mapping with permission control
  • Breakpoint handling via BRK instructions
  • 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.



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