Skip to content

Latest commit

 

History

389 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cupid NES

Cupid is an NES and Famicom emulator for Windows and Linux. It supports NTSC, PAL, and Dendy timing, cartridge games, Disk System images, NSF/NSFe music, StudyBox media, and supported VS System arcade images.

The GTK4 desktop has native menus, a compact toolbar, and separate windows for settings and tools. Keep the debugger, memory editor, or TAS timeline beside the game. Windows follows the system light or dark appearance. Controls have no surrounding borders; keyboard focus stays visible in both themes. The desktop paces emulation independently of expensive display updates. When presentation falls behind, it shows the latest frame while preserving audio, movie input, and captured frames. See performance troubleshooting. Frame waits use the high-resolution clock and service pending desktop paints between frames. Windows uses an accelerated SDL game viewport even when GTK uses Cairo for desktop widgets. Game Information shows the game renderer and refreshes when a game is replaced or unloaded. Frame Timing Statistics reports emulation and display draw rates separately, with interval jitter to help diagnose uneven motion.

Cupid desktop

Download and start

Get the Windows ZIP from Releases. Extract it into a new folder and run cupid-nes.cmd. The package includes GTK and its runtime libraries. Preview releases are available while the desktop changes are under review.

Linux x64 previews are available as cupid-linux-x64.tar.gz for Ubuntu 24.04. See Linux download instructions for runtime dependencies.

Use File > Open Game, press Ctrl+O, or drop an image onto the game window. Recent games remember archive members and patches. Opening another image switches games in the same window; a failed load keeps the current session available. Disk System and StudyBox images need their respective BIOS files.

Settings and tools

Open Settings from the toolbar or press Ctrl+Comma. Choose a category on the left. Video, audio, input, media, and hardware pages divide longer lists into tabs. Apply saves validated changes; Cancel discards pending changes. File fields have native pickers. Audio settings list detected output devices.

Video settings

Memory Search keeps results beside range and comparison controls. The debugger places registers and breakpoints beside disassembly. The header editor separates ROM, RAM, and console fields; format, mirroring, and region use named choices.

Debugger

Task Tools and guide
Inspect code and memory Debugger, assembler, memory search, watches, hex editor, and PPU viewers
Analyze execution Coverage, profiles, events, symbols, source, traces, and text extraction
Edit input movies TAS timeline, branches, markers, bookmarks, checkpoints, Lua, and splicing
Manage cheats Cheat editor and Game Genie conversion, checksum-matched database
Change presentation Shader presets, HD drafts, frame timing, history, and audio output
Record output Screenshots, WAV, raw or ZMBV AVI, animated GIF, and overlays
Manage sessions Automatic resume, state recording, game settings, and update checks
Edit cartridge metadata iNES and NES 2.0 header editor
Use expansion input Controllers and peripherals, Family BASIC keyboard

The TAS editor opens FM2 movies and FM3 projects. Its input grid sits beside a resizable game preview and editing tabs. Save the full editing session as CTAS or export a movie. The converter handles supported power-on FCM movies after checking game identity.

TAS editor

These screenshots come from the native GTK regression application using a generated diagnostic cartridge and input movie. The desktop guide explains the menus, individual windows, and settings.

Default controls

Key Action
Z / X A / B
Right Shift / Enter Select / Start
Arrow keys D-pad
Ctrl+O Open a game
Ctrl+P / Ctrl+. Pause or resume / advance one frame
Ctrl+R / Ctrl+Shift+R Soft reset / power cycle
F5 / F6 Save / load the selected state slot
F12 Screenshot
Ctrl+F12 / Shift+F12 Audio / video recording
Ctrl+Shift+F12 Stop and finalize recording

Settings can change keyboard and gamepad assignments and select another input profile. The first SDL controller drives player 1 by default. See controls for device-specific input and shortcut precedence.

Build from source

The core uses C11, with C++17 cartridge modules and the EPSM sound engine. GTK4 provides desktop widgets; SDL2 handles the emulation video pipeline, audio, and controllers. Both a C and a C++ compiler are required.

On Ubuntu:

sudo apt install build-essential libgtk-4-dev libsdl2-dev libcurl4-openssl-dev
git clone https://github.com/cupidthecat/cupid-nes.git
cd cupid-nes
make -j4
./cupid-nes path/to/game.nes

On Windows, from the repository root:

.\scripts\setup-gtk-windows.ps1
.\scripts\build-gtk-windows.ps1 -Jobs 8 -Package
Expand-Archive .\build\release\cupid-windows-x64.zip .\build\cupid-preview
.\build\cupid-preview\cupid-nes.cmd

Add -Test to run hardware regressions. make GTK=0 test builds the headless regression suite. See getting started for toolchains, output paths, Clang, and sanitizer builds.

Hardware, saves, and accuracy

Cupid supports iNES, NES 2.0, and named UNIF boards. The optional NesDB.txt database supplies legacy corrections and recognized headerless images. Explicit command-line settings take precedence. The hardware reference lists mapper families, expansion sound, controller devices, supported layouts, and remaining limits. Mapper support is not a per-game compatibility guarantee.

Cartridge saves normally live beside the ROM. Disk System writes default to a separate IPS overlay. Quitting or replacing an image finalizes recordings and persistent data first; failed writes leave the session available for retry. See saves and media, states and replay, netplay, and HD packs.

The recorded accuracy checkpoint passed all 144 AccuracyCoin tests with none skipped or unfinished, the 91-ROM diagnostic collection, and the 8,991-state canonical CPU trace in normal and sanitizer builds. Separate regressions cover mappers, storage, input, and expansion audio. Results apply to the tested revision and configuration; see accuracy notes for coverage and limits.

The GTK workflow checks settings transactions, input handling, debugger and assembler edits, TAS interactions, window resizing, and rendered screenshots. It also builds and checks the Windows package. Development and testing describes how to reproduce checks.

Documentation and license

Start with the documentation index, configuration reference, or troubleshooting guide. See support for bug reports and contributing for changes.

Cupid is GPL-3.0-or-later; see LICENSE. Imported components retain their licenses, including emu2413 and ymfm. Credits lists component attribution, diagnostic sources, and hardware references.

About

High-accuracy NES/Famicom emulator with NTSC, PAL & Dendy timing, FDS, VS System, NSF/NSFe, broad mapper and peripheral support, TAS editing, debugger/PPU tools, rewind, netplay, cheats, HD packs, and recording. AccuracyCoin: 144/144.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages