Jones is a Nintendo Entertainment System (NES) emulator and debugging-oriented tooling project implemented in modern C++.
This repository contains:
- A core NES emulation library (
source/jones) - Frontends for different platforms (
source/frontends) - Supporting tools (
source/tools) - Automated tests (
test) - Docker-based reproducible build environments (
cm/docker,docker-compose.yml)
source/jones: Core emulator subsystems (CPU, PPU, APU, memory, cartridge, input, logging, utilities)source/frontends/sdl: SDL frontendsource/frontends/flutter: Flutter frontend and native integrationsource/tools: Developer and data toolingtest: CPU traces and other validation testsdev/scripts/env.sh: Main build/test helper entrypointcm/docker: Base, Flutter, and dev Docker images
- Docker Engine with Compose plugin (
docker compose)
- CMake (3.14+)
- A C++20-capable compiler toolchain (
gcc/g++orclang) - Make
- SDL/Flutter-related dependencies if building frontends
The Docker workflow is recommended for consistent dependencies across machines and CI.
All helper commands are exposed through dev/scripts/env.sh.
Build default target:
./dev/scripts/env.sh jones_buildBuild SDL frontend:
./dev/scripts/env.sh jones_build_sdl./dev/scripts/env.sh jones_testRun tests with AddressSanitizer:
./dev/scripts/env.sh jones_test_asanGenerate code coverage report:
./dev/scripts/env.sh jones_test_code_coverageBuild SDL variant in container:
./dev/scripts/env.sh jones_build_cm sdlBuild Flutter artifacts in container:
./dev/scripts/env.sh jones_build_cm flutterRun containerized test flow (SDL):
./dev/scripts/env.sh jones_test_cm sdl- Native/core output:
out/default/jones/ - Flutter output:
out/flutter/
- Project build system: CMake
- C++ standard: C++20
- Git submodules are used for external dependencies
Update submodules:
./dev/scripts/env.sh jones_update_submodulesClean submodules:
./dev/scripts/env.sh jones_clean_submodulesThis project is released under the MIT License. See LICENSE for details.