NES EMULATOR
zebes
Zebes is a cross-platform NES (Nintendo Entertainment System) emulator implemented from scratch in Rust. It focuses on accurate CPU and PPU behavior for learning and experimentation; audio (APU) is not implemented yet.

WHY IT MATTERS
Why this project exists
Zebes is a personal learning project by its author to study emulator internals and to improve Rust skills. The README states the emulator was created "for learning purposes and for fun."
BEST FOR
Notable characteristics
Cycle-accurate 6502 CPU implementation (Ricoh 2A03/MOS 6502 addressing modes and official instruction set), detailed PPU features (background rendering with proper scrolling, sprite zero hit, per-scanline evaluation, OAM DMA, PPUDATA buffering, nametable mirroring and NTSC odd-frame timing), and several supported mappers (NROM, MMC1, UxROM, CNROM, MMC3). The project also separates core, frontend, and a terminal debugger as a Cargo workspace.
The people behind zebes
History & status
The repository is an actively maintained personal project with commits and a documented history in its GitHub repo. The author describes it as "very green" and oriented toward learning; contributions are not currently being accepted. The project implements many core CPU and PPU behaviors but explicitly notes there is no audio (APU) emulation yet and that some mappers (for example MMC5) are still work-in-progress. The codebase is organized into three workspace members: zebes (frontend using macroquad), core (emulator core), and debugger (terminal-based debugger using ratatui).
What zebes supports
- Nintendo Entertainment System (NES)
- Frontends: graphical frontend (zebes) and terminal debugger (zebes-debugger)
- Platforms: cross-platform (buildable on systems supported by Rust and macroquad — typically Windows, macOS, Linux)
- download_text
Download and availability
OFFICIAL DOWNLOADS
Get zebes
Official releases and source are available from the project's GitHub repository and Releases page. The project is not published to crates.io; prebuilt binaries are not guaranteed — building from source is the supported route. Check the Releases tab on the GitHub repository for any published assets.
Get zebes ↗DOCUMENTATION
Official documentation
Read the official configuration, compatibility, and troubleshooting material before changing advanced options.
Read official documentation ↗zebes setup guide
Setup note: Zebes is intended to be built from source with Rust. The repository is a Cargo workspace; the frontend uses macroquad and the debugger uses ratatui. The steps below follow the project's README and reflect the supported build/run options documented by the author.
- Prerequisites: Install a recent Rust toolchain (rustup, cargo). Ensure your system has dependencies required by macroquad for windowing/graphics (these are platform-dependent: e.g., SDL2 or system OpenGL/Vulkan support on some platforms).
- Clone the repository: git clone https://github.com/dnlzrgz/zebes.git cd zebes
- Build the project: Build in release mode with Cargo from the workspace root: cargo build –release. This compiles the frontend, core, and debugger per the workspace configuration.
- Run the frontend: Run the graphical frontend directly from the workspace: cargo run –release. The frontend expects to be provided NES ROM files externally; the project does not include commercial games or BIOS files.
- Run the debugger: Run the terminal-based debugger: cargo run –release -p zebes-debugger. The debugger is a separate workspace member and is intended for inspecting core emulation state.
- Install locally (optional): Because zebes and zebes-debugger are not published to crates.io, the README suggests installing from the local clone: cargo install –path zebes and cargo install –path zebes-debugger. This installs binaries to your Cargo bin directory.
- Configuration & controls: Default keyboard controls are documented in the README (Z/X for A/B, Space Select, Enter Start, arrow keys for movement, F toggles FPS, R resets). Controller support is described as very basic (keyboard) and the author plans to add controller and customization later.
- Limitations & practical notes: There is currently no APU (audio) emulation. Only certain mappers are implemented (NROM, MMC1, UxROM, CNROM, MMC3); other mappers are WIP. Expect missing features and edge-case incompatibilities common to learning-stage emulators. Prebuilt binaries are not guaranteed — building from source is the standard method. Do not expect the project to include or supply NES ROMs; obtain game ROMs and any required firmware legally.
Software reminder: Zebes does not include commercial game ROMs, BIOS or firmware. Ensure you only use game images you legally own. Building requires Rust and any platform dependencies of macroquad; follow the README for current build instructions.
Sources and further reading
Detailed guides and tutorials
Explore step-by-step guides for zebes as they are published.
Retro Replay Retro Gaming History, Reviews & Emulation
