FakeNES is a portable Open Source NES emulator. FakeNES project is a portable, Open Source NES emulator which is written mostly in pure C, while using the Allegro library for multi-platform capabilities.Currently supported systems are Windows 9x/2000/Me/XP, 32-bit DOS, Linux, FreeBSD, QNX, BeOS, and Mac OS X. However, it should run on any system that Allegro supports. This includes, but is not limited to: any version of Windows released after 1995, any 32-bit DOS compatible, and many POSIX compliant systems and UNIX clones such as Linux, FreeBSD, QNX, BeOS, and Mac OS X.ConfigurationFakeNES uses a standard configuration system similar to that used by many DOS, Windows, and UNIX applications.Each item in the configuration file that is not surrounded by square brackets ([ and ]) defines an 'element' or 'key'.The equal sign (=) is used to assign a value to that element.Items which are surrounded by brackets are called headers. Headers define a section or group of related elements.Comments are delimeted by the pound (#) sign and are ignored by the configuration file parser.At this time, command-line options are not supported. However, you may supply the name of an NES ROM file that you would like to load on the command-line instead of loading it from the GUI.Input engineCurrently, FakeNES supports two different keyboard layouts on a single keyboard, and up to two (2) joystick-like devices such as joypads. Each device may be assigned to any player, you can even assign a single device to multiple players.All configuration of the controls is done in the configuration file, under the [input] header. You can assign a specific device to each player by modifying the player_#_device elements (replace # with the associated player number).The following values are permitted:0: No input (disables all input for this player). 1: Keyboard layout #12: Keyboard layout #2 There are two (2) configurable keyboard layouts which are present on the same keyboard, and may define overlapping keys without conflicts. Modifying the key1_scancodes and key2_scancodes elements allow you to customize the key mappings for each layout.Note that due to portability reasons, FakeNES does not accept standard IBM scancodes. Instead, you need to supply a sequence of 8 integer scancodes as defined by the Allegro multimedia library.The order in which the scancodes are applied is very important, and corresponds to the associated NES standard controller buttons: A, B, Select, Start, Up, Down, Left, and Right. If a complete sequence of 8 scancodes cannot be found, then the defaults will be used.For layout #1, they are X, Z, Tab, and Enter, respectively, combined with the arrow keys for directional control.3: Joystick device #14: Joystick device #2Core timingFakeNES contains an automatic speed throttling system. By modifying the frame_skip_min and frame_skip_max elements under the [timing] header in the configuration file, you can toggle speed cap and set the parameters for frame skipping.Frame skipping is a technique that allows the emulation to run much faster, at the cost of fewer frames-per-second (FPS) being rendered, which results in more latent or choppy gameplay.Speed capping effectively limits the maximum amount of FPS to be rendered to match that of the NES itself, which keeps the emulation from running too fast on fast processors or when frame skipping is being used.frame_skip_min defines the least amount of frames to be skipped, setting it to zero (0) effectively disables minimum frame skipping and enables the speed capping mechanism.frame_skip_max defines the highest allowable amount of frames to be skipped. FakeNES will never skip more frames than is defined by this element, even if full speed is not obtained.Setting frame_skip_min and frame_skip_max to equal values effectively sets a fixed amount of frames to be skipped.If the speed cap is enabled, you can use the fast forward key to surpass the speed cap and skip frame_skip_max frames as long as the key is being held down. By default, the fast forward key is defined as the tilde key above the Tab key on most keyboards.The machine_type element allows you to select which standard is to be used by the speed throttling system and sound/graphics engines. Set it to zero (0) for NTSC or one (1) for PAL. There are not many PAL NES games, and many of them should run fine in NTSC mode. Only modify this element if you have problems.What's New in This Release:· AUDIO: Fixed all while() loops in the APU to never be truely infinite (thus preventing hard lock-ups), removed a previous hack that was added to get around such a thing.· AUDIO: Implemented a new ExSound API.· AUDIO: Added full save state support to VRC6 Sound and MMC5 Sound.· AUDIO: Rreduced default audio buffer length from 6 to 4 frames to reduce latency.· AUDIO: Added in mixing of MMC5's digital audio channel (untested).· CODE: Moved a bunch of code out of 'gui.c' and into the GUI header files.· CODE: Various code edits.· DOCS: Updated docs.· GUI: Added a GUI menu to configure the audio buffer length.· GUI: Added a GUI menu to configure video buffer size.· GUI: Enabled double buffered GUI while in OpenGL mode.· GUI: Added custom drawing code for the 'sl_radiobox' object.· GUI: Cleaned up the Help->About dialog and added 'loomsoft' under 'Special thanks to'.· GUI: Added more splitters to the Audio and Video menus to better group submenus.· GUI: Added a 'Close' button to the Help->Shortcuts dialog.· GUI: Hide some menus when their respective features aren't available for whatever reason.· GUI: Made 'sl_frame' object behave properly in a double buffered environment.· GUI: Removed extended video resolutions, since if anyone wants to actually use any of the obscure things, they can set them manually via the configuration file.· INPUT: Overhauled input system and input configuration system.· MISC: Fixed a cosmetic bug where the 'enabled' flag of CPU patches were written to the *.fpt file with the value of '2' instead of '1' when enabled.· VIDEO: Added (buggy) OpenGL support.· VIDEO: Added support for a screen buffer smaller or larger than the actual screen (it will be scaled to fit).· VIDEO: Set all bitmaps to NULL after destroying them in video_exit(), fixes various problems.· VIDEO: Improved the operation of video_blit().· VIDEO: Improved efficiency of HQ4X slightly by removing extra assertions.· VIDEO: Added size checking to the 'Normal' and 'Stretched' blitters.· VIDEO: Changed blitter error message.