Jnes
Nintendo Entertainment System Emulator for Windows
Coded by Jabo


INTRODUCTION

Jnes is a personal project to explore a love of the NES and learn more about programming. Development of Jnes started many years ago, around 1999, it was a very exciting to engage in a thriving community of reverse engineers and emulator developers. Today Jnes is a more mature piece of software that is capable of playing most games and as best it can, emulating the original NES.

Important Jnes is freeware, it is not to be distributed with games, it is not to be modified, sold, or repackaged in any way. See the disclaimer for further information.


FEATURES
Hardware Features
  • All CPU, PPU, and APU features of the original NES
  • Cart battery backed RAM
  • Konami VRC6 Sound
  • NES mappers 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 21, 23, 24, 25, 26, 32, 34, 66, 68, 69, 70, 71, 75, 79, 85, 113, 152, 225, 234
  • Zapper gun
Emulator Features
  • Game Genie and Pro Action Replay cheat support with search
  • Fullscreen and Windowed mode with graphics filters
  • Record gameplay to video, image, or audio file
  • Save and Load nes state from file (11 slots)
  • Configurable input
  • Sound visualization
  • Rom browser
  • Realtime patching of ROMS using the IPS format
  • ZIP file loading
  • Nintendo Sound Format (NSF) playback
  • Netplay via Kaillera

SYSTEM REQUIREMENTS

Windows Vista, 7, 8, 8.1, 10

Direct3D 9.0 capable 2D acceleration


Jnes is a Unicode application targetting Windows XP and higher. NES emulation by todays standards requires only a modest amount of computing power. The emulation core in Jnes leans towards performance than accuracy in most cases.

Helpful Graphics filters require significantly more processing time.


USING JNES

In this section you will find more detailed information about various topics that are either commonly asked or worth documenting. While Jnes is very easy to pick up and learn to use, this document is not intended as an end user guide. If you are not familiar with emulation it may be a good idea to familiarize yourself with the basics before embarking on trying to use this.


Zapper emulation is available by using the mouse to simulate both aiming and the trigger via left mouse click. To enable zapper emulation navigate to: Menu ▶ Options ▶ Input ▶ Player 2


IPS files are patches that alter a game for purposes such as language translation or to create a new game experience. Jnes has the ability to apply IPS files if they are in the same folder as the rom image automatically.

Consider the following file names for example:
Game file Patch file
Megaman 2 (U).nes Megaman 2 (U).ips

If you prefer to not have Jnes ask before applying an IPS patch you can change this in the settings dialog. A resource for downloading patches may be found at romhacking.net


There are many keyboard shortcuts available in Jnes for convenience, below a list of some of the more common ones to learn:

Keys Action
Alt + Enter Toggle fullscreen
Esc Return to windowed
F1 Reset
F2 Pause or Resume
F3 Capture screen image
F4 Record sound
F5 Save state
F7 Load state
Tilde, 0-9 Quick change save slot

Save files are stored in a sub folder relative to Jnes called 'saves'. In order to import or export files from this location you may simply move files in and out of this directory.

Helpful Files are named according to the game that is played, when importing saves take special care to ensure that save file names match the game file or Jnes will be unable to find your saves.

There are two types of save files in Jnes:
File Extension Type of save
.JST, .JS0-9 Captures entire system state and restores to a point in time
.SAV Memory that resides on the cartridge for saving game progress, battery backed

If you intend on using the cartridge save data it is worth familiarizing yourself with a game's save system prior to playing it. For example, most games require you to explicitly save your progress and will not do so automatically.

Cartridge saves are automatically stored to disk when emulation ends if present.


Due to limitations with the kaillera API, it's not possible for Jnes to know when the chat window is closed. To safely end your gameplay use the following steps:

  1. Menu ▶ File ▶ Close
  2. Select cancel in Kaillera chat window
  3. Close Kaillera chat window
  4. Close Kaillera server selection dialog

Jnes.exe ?-switches? "game"

Switches are as follows:
Switch Description
-relaunchmce when Jnes exits it will bring Windows Media Center (ehome.exe) back to the foreground
-exitonclose when emulation ends the application closes instead of bringing you back to a rom browser
-disablestatekeys disables the save state shortcut keys

VERSIONS
Version 1.2.1 1/15/2017
  • fixed pov inputs
  • fixed windows xp
Version 1.2 12/25/2016
  • bugfix: mouse is no longer required
  • bugfix: konami vrc2 games
  • bugfix: puzznic, bases loaded 2
  • bugfix: large IPS files
  • better support for mmc5 graphics
  • improved emulation accuracy
  • cheat search workspace auto-saves in case of crash
  • upgraded to Direct3D 9.0 and DirectInput 8.0
  • added konami mappers 75 (vrc1), 85 (vrc7)
  • replaced audio channel menu with volume mixer
  • updated app icon
Version 1.1.1 6/8/2013
  • bugfix: editing par codes
  • bugfix: saving settings on exit
  • bugfix: proper handling of 6502 B-flag
  • bugfix: megaman audio artifacts
  • bugfix: zelda intro scrolling
  • bugfix: ninja gaiden 2 train level
  • bugfix: tmnt1 technodrome crash
  • bugfix: apu envelope resets correctly now
  • bugfix: vrc6 phase was broken
  • improved ppu sprite0 emulation
  • dpcm and triangle channels should decay better
  • added mapper vrc6b
Version 1.1 2/20/2012
  • bugfix: window sizing was slightly wrong on windows 7
  • bugfix: window icon would disappear when coming out of fullscreen on windows 7
  • bugfix: rom browser mode changes didn't update the window properly
  • bugfix: multiple monitors should work now
  • bugfix: input Z-axis was be read incorrectly
  • bugfix: california games bmx event fixed
  • bugfix: NSF works again properly
  • bugfix: stereo audio splits channels again
  • all save and open dialogs now default to the user documents folder
  • rom browser is now faster when used with a network share
  • kaillera should be significantly more reliable to use
  • improved timing and removed extended vblank
  • rewrote artwork rom browser mode into tile view
  • cheat memory search
  • replaced 2xSaI with HQ filters
Version 1.0.2 2/6/2010
  • bugfix: full screen filters were broken
  • bugfix: video dialog would accidently clear the filter while changing resolutions
  • bugfix: rewrote mapper 23 (vrc2) vrom handling to fix Crisis Force
Version 1.0.1 9/6/2008
  • bugfix: PAR cheats value selection
  • bugfix: mapper 69 irq default value
  • bugfix: solar jetman sound issue
  • bugfix: bank masking issue
  • rewrote fullscreen network chat to be faster
  • added command line option -disablestatehotkeys
  • custom palettes subfolder with drop down list
Version 1.0 12/25/2007
  • bugfix: command line arguments, added switches -relaunchmce -exitonclose
  • bugfix: fixed multiple rom browser sorting issues
  • bugfix: fixed input POV-hat diagonals
  • bugfix: fixed palette dialog
  • bugfix: PAL raw audio timing
  • bugfix: vsync no longer lags
  • upgraded to a static zlib 1.2.3
  • options are now stored in Jnes.ini instead of registry
  • added software filter to 4x windowed and fullscreen
  • added windowed mode vsync (experimental)
  • added fullscreen status messages for states, kaillera, low battery
  • added setup and autoconfig buttons to input dialog
  • added a limit fps option
  • added mapper #225,#235
  • new browser artwork display mode available in settings dialog
  • rom browser now caches things quietly for quicker startup
  • support for capturing movies and rendering them to an AVI
  • new kaillera dialog to streamline using it
  • support for external languages in utf-8 format
  • redid rom info dialog into a nicer table
  • new system information dialog
  • added warning for netplay regarding extended vblank
  • extended kaillera packets with mini state information
  • kaillera chat via Ctrl+T in fullscreen
  • new palette options
  • added blargg's nes_ntsc filter



Version 0.6 2/5/2005
  • zapper now changes cursor to crosshair in game
  • rom browser part of main window, auto selects last rom, recent dir list
  • fixed mutex for video dialog
  • major cheats rewrite and database update, support for PAR codes
  • automatic region setting (uses GoodRom name convention)
  • added some simple mappers: 32,71,79,113
  • fixed sleep in background issues introduced in last release
  • support for ppu monochrome mode
  • input now supports Z,Rx,Ry,Rz axis
  • turbo buttons are mappable separately
  • slot menu now has the timestamp of the state
Version 0.5.3 6/5/2004
  • fixed browser with zip files
  • netplay now caches rom list, useful if you have thousands of roms
  • fixed auto full screen preference saving bug from 0.5.2
  • fixed audio graph performance on XP
  • fixed NSF playback timing
  • palette open default current dir, and saving fixed
  • added support for PAL 50fps
  • updated dinput from 6.0 to 7.0
  • fixed windows 98 compatibility bug from 0.5.2
  • updated documentation slightly
  • modified audio timing slightly to reduce lag
Version 0.5.2 11/5/2003
  • Added 48x48 icon for Windows XP view
  • Now supports play/stop on some multimedia keyboards
  • Fixed windows message queue handling problem
  • Rom Browser separates path now
  • Full screen resolutions can use Super 2x SaI
  • A stretched version of Super 2x SaI added to 3x and 4x
Version 0.5.1 02/28/2003
  • Fixed multiple audio thread creation (woops)
  • Centered full screen non-stretched screen updates
  • Joypad reads now have correct upper 4 bit bus data
  • Fixed joypad configuaration bug
  • Added turbo fire for buttons A & B option
  • Kaillera rom directory is now global, and supports .ZIP files
  • Fixed some MMC5 things, still doesnt work great tho
  • Updated direct draw to newer interface
Version 0.50 01/17/2003
  • Audio thread now runs all the time, stopping emulation is faster
  • Full screen clears all buffers for triple buffering, and correctly saves window position
  • Fixed some minor user interface bugs
  • Fixed NSF screen and made look nicer
  • Implemented more input axes such as POV and slider
  • more cheats, dbase also works better on win9x
  • changed dpcm frequencies slightly, older style
Version 0.50 Beta 2 07/20/2002
  • Fixed recent menu saving to registry
  • Fixed status bar when rom is opened
  • Windowed blitter now has choice adds Super2xSai and Scanlines
  • Fixed mask generation, more roms should work
  • Main window and rom browser positions saved on exit
  • Cheats window moved around, multi-line cheats in dbase supported
  • Packed more into each 24bpp xlation write, hopefully improves speed
  • Fixed 15 bit color mode
  • Cheats file has seen some enhancements
Version 0.50 Beta 1 07/10/2002
  • Fixed Deady Towers, Mapper 34
  • Fixed an issue with palettes that affected Archon
  • Added code toggling to the game genie interface (usually works without reset)
  • Cheats are now a single file, and some popular ones are included
  • Game genie usage in MMC3 games is now fixed
  • Tweaked noise a little bit, more like 0.30a which was better
  • Added a NES stereo sound option, usually pretty nice!
  • Better menu handling while files are not active
  • Recent menu is a little nicer, stamping is better, also deletes invalid entries
  • Fixed bitmap capturing in triple buffer full screen
  • Rewrote Direct Draw locking logic
  • Direct Sound library used is same as other projects
  • Using accelerators now, keyboard shortcuts improved and more reliable
  • PPU rendering rewritten for palette based rendering (slower, more accurate..)
  • Added network play support via the Kaillera 0.90
  • Added a video timing option to allow and extra line of vblank (fixes graphics glitches in bubble bobble 2, blades of steel, etc)
  • Window position remembered when returning to windowed mode from full screen
  • Put back 24-bit rendering (works?) and removed 8-bit from full screen
  • Rom Browser added, sort by name, mapper, and battery saves
  • j6502 was ported back to C from X86 assembly (hopefully no difference... maybe slower on old computers)
  • New settings dialog: file association (thanks zilmar), IPS patching functionality, directory paths
  • Direct Input library has improved error detection for disconnected joypads on load, and tabbed dialog
  • New video dialog, replaces the old series of menus, also adds enumeration of full screen display modes
  • Brand new help file (thanks to smiff for the inspiration)
  • ZIP file support using ZLIB 1.1.4 DLL, only for NES roms
  • Almost every other aspect has seen rewrites and cleanups over time..
Version 0.40 beta 2 01/21/2001
  • Put a cap on direct input error handling during game play
  • Rewrote some window handling routines for full screen
  • Fixed a bug in the window size menu-check handling
  • Initialized the task variable to zero correctly, hopefully this fixes problems people experienced with save states doing odd stuff!
Version 0.40 beta 1 01/06/2001
  • Implemented audio updates 4 times per frame via queue, might slow down performance so I waited this long to do something drastic like this, sounds great tho
  • 16-bit audio and mixing
  • Raw PCM emulated nicer now..
  • Noise and Pulse volume enveloping corrected I hope
  • Tri counters fixed? (Thanks to Matt Conte for the doc on nesdev a while back)
  • Pulse freq sweeps rewritten finally, put this off a long time
  • DPCM rewritten from scratch, big difference in beat style
  • Vertical scroll problem fixed in TMNT
  • Changed the scanlines back to 262, this makes a game I know not work right but I feel having correct timing is the right way to go
  • Another NSF loading problem fixed
  • Sunsoft Mapper fixes and speedups
  • Implemented an accurate real-time zapper read handler, didnt realize necessary..
  • Small transparency fix for some games (Windowed only)
  • Added ability to load external palettes or keep default, 3-byte RGB triplets
  • Integrated NSF support into the j6502 main cpu core, via small hack
  • Rewrote sign flag, and IP handling in j6502, speedup
  • Window 3X mode added
  • Added an option for NES 8-pixel clipping emulation
  • Sprite0 hits tweaked a little
  • Rewritten Game Genie from scratch, max codes is 64 per game
  • Rewritten PPU Rendering, which removed MMX/ASM speedups, still fast tho
  • Rewrote direct draw frame locking technique, dangerous when jnes crashes..
  • Removed 24bpp rendering support, useless, slow etc, use 16/32
  • Rewritten entire banking system for cpu and ppu, speed boost
  • Added a recent menu into the interface, quite nice
  • Rewrote every mapper, less memory used, faster speed, save state friendly
  • Rewrote sound graph, more friendly to direct draw these days
  • Rewrote bitmap capture code from scratch, faster and nicer.
  • Finally released the partial MMC5 support, not the most accurate emulation, but it is good enough to play Castlevania III US well, which is good enough..
  • Tweaked save states to save the new structures as well
  • Rewrote ppu mapper tile handling, works right now, no hack
  • Started allocating and releasing large chunks of memory nicely
  • Direct Input 2-Player code rewritten, smaller, easier to maintain, as well as the option to completely? tweak the devices
  • Changed quick-save to F7 key, F6 was too close to F5 really, you could hit it accidently
  • Added save slots selection to the Cpu menu, it might of been confusing because it was previously only accessible on the keyboard
Version 0.30a 01/04/2000
  • PCM exception problem solved
  • NSF Banking fixed
Version 0.30 12/25/1999
  • Internal NSF Player
  • Added nsf files to command line load
  • Added NINA-1 Emulation (iNES #34)
  • Fullscreen Triple Buffering
  • Improvements to PCM decoding
  • Solved an mmc3 IRQ problem
  • Fixed sprite priorities a little more
  • Fixed zapper in 24/32 bpp
  • Screen captures work in 8bpp
  • Performance enhancements
  • Keyboard reading now includes the numkeys for d-pad.
  • DirectX dialog more informative
  • Fixed the CPUID problem on Cyrix CPU's
  • Removed surface fills at the beginning of frame, this reduces DirectDraw overhead for old hardware
Version 0.26c 10/26/1999
  • Corrected registry alignment issues
  • Saves last directory to registry
Version 0.26b 10/23/1999
  • PCM channel improvements
  • Higher quality audio generation
  • Direct Input interface fixes
Version 0.26a 10/20/1999
  • Direct Input enumerator supports multiple gamepads that are under the same name.
  • Corrected the new dpcm buffering for games that use large buffers with low frequencies.
  • Implemented zapper into the via the mouse, preliminary but works in a few games
Version 0.26 10/09/1999
  • Added Konami VRC4 Emulation (iNES #21)
  • Added Konami VRC2b Emulation (iNES #23)
  • Added Konami VRC4b Emulation (iNES #25)
  • Added Konami VRC6 Sound Emulation, Thanks to Kevin Horton for his docs
  • Improved PCM channel emulation
  • Minor MMC1/MMC3 mirroring change
  • Tweaked MMC3 IRQ
  • Fixed 4-window vram
  • Support for Controller #2
  • Put back correct palette reading
  • Fixed game genie length detection
  • Major 6502 core optimizations
  • MMX enhanced PPU emulation
  • DirectSound is now used again
  • Dialog for input devices with button config
  • Background Sleep is now an option
  • Sound output graph
Version 0.21 08/25/1999
  • Added MMC4 Emulation (iNES #10)
  • Added Sunsoft Mapper #4 (iNES #68)
  • Tweaked MMC3 IRQ Slightly
  • MMC1 Bankswitching changed
  • PPU moved into seperate assembly files
  • Fixed a long time Vertical scroll bug
  • Minor GameGenie save fix
  • Modified the Direct Input Axis mode
  • Documentation updated for Sidewinders
  • Fixed small windowing problem.
  • Removed DirectSound, switched to a hopefully more reliable audio method
  • Vsync removed as a result of timing.
  • FPS meter disabled in full screen
  • Lots of other options were taken out
  • Keyboard reading works on NT4 SP4 (DX3)
Version 0.20 08/20/1999
  • Fixed triangle frequencies and hold note
  • Fixed flag sets when RTI,NMI,BRK happens
  • Well, RCR/RCL doesn't set ZF
  • Added MMC1 512/1024 kb ROM support
  • Added Konami VRC6 (iNES #24)
  • Added Nintendo MMC2 (iNES #9)
  • Better MMC3 IRQ
  • Improved Sprite priorities and hits
  • Improved Frequency Sweeping
  • Preliminary RAW PCM sound emulation
  • Noise channel enveloping fixes
  • DPCM Irq's Disabled
  • Changed save state format to save all audio data, added padding for future modifications
  • Game Genie Emulation is now alot better
  • Support for trained roms
  • Sprite priority in 24-bit are better
  • Small speed-up in 16-bit rendering
  • Windows 98 SE compatible
  • Rewritten interface, structured better
  • Record wave save dialog box
  • Read-only files open now
  • Frames per second counter available for full screen mode only if Vsync is turned on.
  • New Stretch mode added to full screen
  • Fixed bitmap writing in RGB555 mode
  • Wait for Vsync only affects full screen video mode
  • Timing uses new higher performance method
  • All threading and program halt problems are fixed
Version 0.10 08/05/1999
  • Initial release

THANKS

Jnes would not be possible without the work or assistance of the following people:

  • TNSe, Nyef, Xodnizel, FireBug, Loopy, Goroh
  • Jeremy Chadwick, Matthew Conte, Kevin Horton
  • Many others from the nesdev community

Gent for creating the cheats database and invaluable feedback through the years that has made Jnes even more special

Everyone who was kind to me through the years on IRC/Efnet and EmuTalk.net


Additionally Jnes uses the following libraries:

zlib - zip file decompression library

bootstrap - style framework that makes this documentation look good

kaillera - online gameplay network and library

2xsai - upscaling graphics filter


DISCLAIMER

Jnes, Copyright 1999-2016 Jabo

The NES is a registered trademark of Nintendo.
Game Genie is a registered trademark of Galoob.

The author is not affiliated with Nintendo of America, or any other company mentioned in this documentation. This software is freeware and may never be sold or repackaged in any way. You use this software at your own risk, the author is not responsible for any loss or damage resulting from the use of this software. If you do not agree with these terms do not use this software.