This repository is a bare-metal custom bootloader and graphical recovery environment for the Nintendo Switch (Tegra T210/T210B01). It boots Horizon OS, Linux4Tegra, and third-party payloads by decrypting and patching the encrypted HOS boot chain (package1, package2, package3), deriving console keys from TSEC/EKS data, and applying version-specific binary patches. It also provides emuMMC creation and migration, eMMC and SD card tools, USB gadget modes (mass storage and HID), AutoRCM, fuel gauge/thermal diagnostics, and a full hardware bring-up path including display, touch, Joy-Con input, DRAM training, and power management. The code clearly reflects the bootloader's actual production role: a user-triggered payload running from RCM on real Switch hardware, with a text TUI in the main bootloader and a separate LVGL-based graphical frontend called Nyx. Architecturally, the repo is organized into a hardware abstraction layer called BDK (Board Development Kit), the bootloader core, the Nyx GUI application, and dynamically loadable ELF modules for DRAM training and SDRAM LP0 sleep state. The BDK provides drivers for SoC peripherals, power management ICs, storage controllers, the security engine, USB, input, and display, all written as bare-metal C with direct MMIO register access and no OS dependencies. The bootloader uses an INI-based configuration system, a small graphics console, and a module loader that can load ELF shared objects from SD or eMMC. Nyx is a separate application built on a heavily customized fork of LittlevGL v5, with custom themes, fonts, resource packing, and hardware tools. The code demonstrates strong embedded systems skill: meticulous hardware register definitions, retry and error-counting logic in storage drivers, cryptographic key derivation routines updated through many firmware generations, and carefully structured patch tables for firmware signatures. The main weaknesses are the aging bundled libraries (FatFs and LVGL forks are old and diverged from upstream), duplicated graphics implementations between bootloader and sample module, and a large amount of hardcoded hardware-specific constants and addresses. This is not general-purpose software; it is tightly coupled to Tegra X1 hardware and the Nintendo Switch modding ecosystem, but the BDK driver organization, ELF loader, INI parser, list macros, and compression utilities are genuinely reusable in other low-level projects.
This repository contains Pound, a Nintendo Switch emulator focused on emulating Switch 1 and 2 hardware. The emulator features a modular architecture with CPU emulation handled by the Ballistic ARM recompiler for performance, GPU emulation translating Switch graphics commands to host APIs (Vulkan, OpenGL, DirectX, Metal), and SDL-based cross-platform windowing, input, and audio systems. Dear ImGui integration provides debugging and configuration interfaces. The codebase demonstrates careful separation of concerns, with distinct subsystems for memory management, CPU state, platform abstraction, and hardware emulation. Notable engineering practices include the clean interface boundary with the Ballistic recompiler, memory allocation abstraction via a host allocator interface, and platform detection utilities. While the project shows active development and solid engineering, it faces typical emulator challenges including platform-specific maintenance burdens and dependency on external shader translation tools.
SysDVR is a Nintendo Switch homebrew streaming tool that captures the console's video and audio output and streams it to external clients via USB, TCP, or RTSP. The system comprises three main components: a sysmodule (C code) running on the Switch that interfaces with the grc:d service to capture frames and audio, a cross-platform client (C# .NET 9) that receives the stream, decodes it with FFmpeg, and renders/records using SDL2 and ImGui, and a configuration app (C++ ImGui) that runs on the Switch to manage streaming modes and patches. The architecture is modular with clear separation between capture, transport, and playback layers. The client uses a custom binary protocol with handshake, packet headers, and NAL replay for efficient streaming. External dependencies include libnx (Switch), FFmpeg, SDL2, libusb, ImGui, and .NET 9. The codebase demonstrates solid engineering with reusable patterns like buffer pools, pipeline chains, and platform abstraction, though it carries some technical debt from outdated third-party bindings and platform-specific workarounds.