SkillAgentSearch skills...

Cxnes

Cross-Platform NES/Famicom Emulator

Install / Use

/learn @perilsensitive/Cxnes
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

cxNES Documentation

Version 0.3.3 Updated 2016-05-04

Website: http://perilsensitive.github.io/cxnes

Intro

cxNES is an open source, cross-platform NES/Famicom emulator. It is mainly written as a part-time hobby project to suit the needs of its author, but with accuracy, performance and portability as primary goals.

cxNES is written in C and uses SDL 2.0 for graphics, sound and input, and GTK+ for the GUI toolkit. It should have the same functionality and roughly the same look and feel on all supported platforms. Currently only Windows and Linux are supported; OS X support will be coming as soon as the author can get a Mac for development and testing. Other unix variants may work as well provided they have working SDL 2.0 and GTK+ libraries, but none have been tested.

You can contact the author at perilsensitive@gmail.com.

Features

Supported Image/ROM Formats

  • iNES/NES 2.0
  • UNIF
  • FDS
    • fwNES format, with or without header
    • "Raw" format (includes gaps, start marks and checksums)
  • NSF
  • Any of the above in a ZIP or 7-Zip container
  • Split ROMs inside a ZIP or 7-Zip container (provided split ROM checksums exist in the database)

Input Devices/Accessories

  • Standard Controllers
  • Four-player adapters (NES and Famicom types)
  • Arkanoid Controllers (NES and Famicom variants)
  • Zapper
  • Bandai Hyper Shot
  • Power Pad
  • Family Trainer
  • Family BASIC Keyboard
  • Konami Hyper Shot
  • SUBOR Keyboard
  • SNES Mouse
  • VS. Unisystem support

Supported Expansion Audio Chips

  • Nintendo MMC5
  • Konami VRC6
  • Konami VRC7
  • Sunsoft 5B
  • Namco 163
  • Famicom Disk System

iNES Mapper Support

  • 0, 1, 2, 3, 4, 5, 7, 9, 10, 11, 13, 14
  • 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 28, 29
  • 30, 31, 32, 33, 34, 36, 37, 38, 39, 41, 44, 46
  • 47, 48, 49, 58, 60, 61, 62, 64, 65, 66, 67, 68
  • 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 80, 82
  • 85, 86, 87, 88, 89, 90, 91, 93, 94, 95, 97, 99
  • 105, 107, 112, 113, 115, 118, 119, 133, 137, 138, 139, 140
  • 141, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153
  • 154, 155, 158, 159, 166, 167, 178, 180, 182, 184, 185, 189,
  • 192, 193, 200, 201, 202, 203, 205, 206, 207, 209, 210, 211,
  • 218, 225, 226, 228, 230, 231, 232, 234, 240, 241, 245, 246

Patching

  • Supports IPS, UPS and BPS patch formats
  • Autopatching support
  • Soft-patching
  • Patches may be applied via GUI or specified on the command line
  • Patches may be included with ROM inside ZIP archive

Video

  • Bisquit's NTSC palette generator
  • Blargg's nes_ntsc filter
  • User can specify a 64 or 512 color external palette file to be used instead of the generated palette.
  • Enhanced sprite limit workaround: limits sprites for scanlines where the limit appears to be exploited intentionally, otherwise does not limit sprites.
  • Supports correct TV aspect ratios for NTSC and PAL consoles
  • PNG screenshots

Input

  • Flexible input binding support
    • Nearly all emulator actions can have custom keyboard and/or joystick mappings
    • User-defined 'modifiers' useful for button combos on gamepads with few buttons (such as standard NES controllers)
  • Joysticks are automatically configured when plugged in or unplugged; no need to restart the emulator.
  • SDL GameController API
    • Allows supported joysticks (including XInput devices) to have a common set of mappings; remapping is not required when switching between multiple supported devices.
    • Additional gamepads may be added by editing a plain-text mapping database
    • SDL Joystick API also supported for devices not recognized by the GameController API.
  • Turbo support for controllers
    • Supports dedicated turbo buttons
    • Supports toggle buttons to enable/disable turbo on the standard A and B buttons.

Misc

  • Savestates
    • Can auto-load/save states on ROM load/unload
    • Can auto-save state at a user-specified interval
  • Dynamic audio resampling
    • Uses Blargg's blip_buf resampler
  • Cheat support (Game Genie, Pro Action Rocky, and raw formats)
    • Cheats can be auto-loaded/saved on ROM load/unload
  • ROM Database (optional) for handling ROMs with incorrect or missing headers.
  • Can be compiled or run without the GUI
  • Can specify configuration options, patches and cheats on command line
  • FDS enhancements
    • High-level optimizations of FDS disk I/O routines (optional)
    • Automatic disk selection and change for most FDS games (optional)
    • Writes to FDS images saved as IPS patches
  • Windows builds can be configured to run in portable mode, storing all user data (save files, states, etc.) in the application directory.
  • Overclocking support

Portable Mode (Windows only)

The Windows build of cxNES stores all user data (save files, state files, cheats, etc.) in %APPDATA%\cxnes by default. To run cxNES as a portable app so that user data is stored in the same folder as cxNES itself, you can enable portable mode. This can be done by passing '--portable' on the cxNES command line, but this will only enable portable mode until you exit cxNES. To make cxNES always use portable mode, follow these steps:

  1. Create a folder named 'userdata' in the same folder where you extracted cxNES.

  2. If you have user data in %APPDATA%\cxnes already, you may want to copy it to userdata inside the folder where cxNES is installed.

cxNES should now always look for user data in the 'userdata' folder inside the folder where cxNES is located rather than in %APPDATA%\cxnes.

To upgrade a portable installation, you can unzip the new version of cxNES into the same folder as the old one. User data (stuff in the userdata folder) will not be touched, so you don't need to worry about wiping out your save states or save files. Alternatively, you can just extract the new version of cxNES to a new folder and copy or move the userdata folder from the old version to the new one.

Default Bindings

| Action | Binding(s) | | --------------------------- | --------------------------------------------- | | Controller 1 Up | Up, Joystick 0 D-Pad Up / Left Y - | | Controller 1 Down | Down, Joystick 0 D-Pad Down / Left Y + | | Controller 1 Left | Left, Joystick 0 D-Pad Down / Left X - | | Controller 1 Right | Right, Joystick 0 D-Pad Down / Left Y + | | Controller 1 A | F, Joystick 0 A | | Controller 1 B | D, Joystick 0 X | | Controller 1 Select | S, Joystick 0 Back | | Controller 1 Start | Enter, Joystick 0 Start | | Controller 2 Up | Joystick 1 D-Pad Up / Left Y - | | Controller 2 Down | Joystick 1 D-Pad Down / Left Y + | | Controller 2 Left | Joystick 1 D-Pad Down / Left X - | | Controller 2 Right | Joystick 1 D-Pad Down / Left Y + | | Controller 2 A | Joystick 1 A | | Controller 2 B | Joystick 1 X | | Controller 2 Select | Joystick 1 Back | | Controller 2 Start | Joystick 1 Start | | Controller 3 Up | Joystick 2 D-Pad Up / Left Y - | | Controller 3 Down | Joystick 2 D-Pad Down / Left Y + | | Controller 3 Left | Joystick 2 D-Pad Down / Left X - | | Controller 3 Right | Joystick 2 D-Pad Down / Left Y + | | Controller 3 A | Joystick 2 A | | Controller 3 B | Joystick 2 X | | Controller 3 Select | Joystick 2 Back | | Controller 3 Start | Joystick 2 Start | | Controller 4 Up | Joystick 3 D-Pad Up / Left Y - | | Controller 4 Down | Joystick 3 D-Pad Down / Left Y + | | Controller 4 Left | Joystick 3 D-Pad Down / Left X - | | Controller 4 Right | Joystick 3 D-Pad Down / Left Y + | | Controller 4 A | Joystick 3 A | | Controller 4 B | Joystick 3 X | | Controller 4 Select | Joystick 3 Back | | Controller 4 Start | Joystick 3 Start | | Arkanoid Dial | Mouse | | Arkanoid Button | Mouse Button 1 | | Power Pad (Port 2) Pad 1 | U | | Power Pad (Port 2) Pad 2 | I | | Power Pad (Port 2) Pad 3 | O | | Power Pad (Port 2) Pad 4 | P | | Power Pad (Port 2) Pad 5 | J | | Power Pad (Port 2) Pad 6 | K | | Power Pad (Port 2) Pad 7 | L | | Power Pad (Port 2) Pad 8 | ; | | Power Pad (Port 2) Pad 9 | M | | Power Pad (Port 2) Pad 10 | , | | Power Pad (Port 2) Pad 11 | . | | Power Pad (Port 2) Pad 12 | / | | Zapper (Port 2) | Mouse | | Zapper Trigger (Port 2) | Mouse Button 1 (Left Button) | | VS. Light Gun | Mouse | | VS. Light Gun | Mouse Button 1 (Left Button) | | Mouse (Port 2) X/Y | Mouse | | Mouse (Port 2) Left Button | Mouse Button 1 (Left Button) | | Mouse (Port 2) Right Button | Mouse Button 3 (Right Button) | | Famicom Keyboard Toggle | Home | | Famicom Keyboard Yen Key | + | | Famicom Keyboard Stop Key | End | | Famicom Keyboard Kana Key | Left Alt | | Famicom Keyboard Grph Key | Right Alt | | Load Newest State | 0 | | Load State 1 | 1

View on GitHub
GitHub Stars15
CategoryDevelopment
Updated1mo ago
Forks2

Languages

C

Security Score

90/100

Audited on Feb 24, 2026

No findings