0.5.8
AUDIO: Fixed OpenAL once and for all.
AUDIO: Fixed a bug where the APU and DSP sections of the configuration file were not loaded or saved until a ROM was loaded, causing various goofs in the GUI such as channels appearing to be disabled when they really weren't.
AUDIO: Fixed a bug in the API that might cause some games with ExSound to crash with an arithmetic exception.
AUDIO: Fixed a bug that would cause some games to not have sound output from the square wave channels until a rewind or state restore.
AUDIO: Fixed the Delta-Sigma filter.
AUDIO: Quadrupled the size of the main APU queue to help prevent overflows (harmless looping around that creates audio artifacts) in some games.
CORE: Implemented a new timing system.
CORE: Added the ability to set the emulation speed based upon a percentage value, and a cooresponding GUI interface for it.
CORE: Changed the behavior of 'Soft Reset' and 'Hard Reset' to be more correct.
CODE: Implemented a new build system.
CODE: Restructured the main loop.
CODE: Restructured the main GUI loop.
CODE: Restructured the init/reset system.
CODE: Reorganized Source Code tree.
CODE: Fixed some warnings when building under GCC with -W.
DOCS: Added FAQ, which was supposed to be added earlier but wasn't for some reason.
DOCS: Updated docs.
GUI: Fixed a bug where you could close the ROM while a replay was recording or playing.
GUI: Fixed a bug where a dialog would disappear if moved off-screen.
GUI: Fixed shortcut keys not working in some dialogs.
GUI: Redid all menu shortcuts to fix several obvious conflicts.
GUI: Added a new, custom, OpenGL-compatible file selector.
GUI: Added a real-time game clock to the status display.
GUI: Added a GUI interface to configure open and save paths.
GUI: Added the ability to lock the open path so that it is not changed by the Main->Open dialog.
GUI: Added the ability to disable or set frame skip amount from the GUI.
GUI: Added the ability to disable/enable the speed cap from the GUI.
GUI: Added the ability to specify a custom autosave interval from the GUI.
GUI: Added the ability to specify a custom audio mixing frequency, audio buffer size, and audio volume level from the GUI.
GUI: Added the ability to set custom resolutions and video buffer sizes from the GUI.
GUI: Added the ability to configure parameters for some blitters.
GUI: Added configuration dialogs for the 'nes_ntsc' and 'stretched' blitters to the GUI.
GUI: Added the ability to step through the emulation one frame at a time.
GUI: Rewrote the status display and moved it upward as to not conflict with messages.
GUI: Added confirmation (of success) of save states created during gameplay.
GUI: Removed superfluous newlines in GUI log messages.
GUI: Added functionality to view the console and log (via Main->View Console and Main->View Log in the GUI, respectively).
GUI: Switched from Help->Version dialog to Main->View Console dialog for first run 'welcome message'.
GUI: Fixed a cosmetic bug where the 1024x proportionate resolution selections in the GUI were listed as 1152x instead, added 1280x960 standard resolution.
GUI: Removed an excess menu splitter in the Video->Blitter menu.
GUI: Removed the ability to disable the GUI.
GUI: General GUI fixes and improvements.
INPUT: Fixed a bug that prevented automapping of controls for players 2, 3, and 4 from working properly.
INPUT: Added autofire and turbofire.
INPUT: Added an option to merge players 3 & 4 with players 1 & 2, so that on 2-player only games a single player can have multiple input configurations.
INPUT: Added detection of modifier keys (SHIFT, ALT, CTRL, etc.) to the automapper.
INPUT: Only poll keyboard/mouse when necessary.
INPUT: Changed default keyboard configuration.
MISC: Expanded save state, replay, and cheat titles from 16 bytes maximum to 255 bytes maximum.
MISC: PCX and WAV files are now stored in the save path, using the filename of the ROM along with '_XXX' appended, where 'XXX' is a number from 0-999.
MISC: Improved logging facilities.
MISC: Removed console window under Windows.
MISC: Started logging all calls to WARN().
VIDEO: Fixed a possible crash upon exit or when changing various video options.
VIDEO: Lots of fixes for OpenGL.
VIDEO: More fixes in order to play nice with the double-buffered GUI.
VIDEO: Updated to nes_ntsc v0.2.0.
VIDEO: Improved nes_ntsc blitter interface.
VIDEO: Added more video color controls (hue, saturation, contrast, gamma) in addition to brightness, and a cooresponding GUI interface to configure all of them.
VIDEO: Moved video_create_color() to video.h and made it inline and as fast as possible.
VIDEO: Removed color LUT usage for 15- and 16-bit color modes in favor of fast inline truecolor pixel packing instead.
VIDEO: Reduced color LUT depth from 18-bit down to 15-bit since it is only used for 256 color modes now.
VIDEO: Re-merged HQ2X, HQ3X, and HQ4X in a way as to not cause pixel artifacts to form in HQ4X due to conflicts.
VIDEO: Added 400x300 as a standard resolution in the GUI.
VIDEO: Renamed 'hq' blitter interface to 'hqx', which seems to be the accepted standard.

0.5.7
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.


0.5.6
AUDIO: Overhauled entire audio system almost completely.
AUDIO: Added auto-detection of sound system sampling rate and sample depth on first run.
AUDIO: Added a master volume control with GUI interface.
AUDIO: Added support for recording audio to WAV files.
AUDIO: Improved OpenAL support (still not correct).
AUDIO: Renamed 'Pseudo Stereo' to 'Virtual Stereo', per Astxist's suggestion.
AUDIO: Changed default audio mixing mode to Virtual Stereo Mode 2.
AUDIO: Separated APU updates from resets, allowing APU parameters to be updated without adversely affecting gameplay.
AUDIO: Disabled reinitialization of the audio system during a hard reset, since there is no longer any need for it, and it might've been causing problems.
CODE: General code clean-ups.
CODE: Split platform-specific initialization code into it's own file.
CODE: Merged pAPU with APU.
CODE: Merged HQ2X, HQ3X, and HQ4X into a single file.
CORE: Quick and dirty clean-up of the CPU interface.
CODE: Added support for linking against Allegro statically under Mingw32.
CODE: Implemented separate directories for optimized, debug, and static builds under Mingw32.
CODE: Added 'VERBOSE' makefile macro that passes -Q to gcc when defined (DJGPP/Mingw32).
CODE: Now linking against ALUT when FakeNES is built with OpenAL support.
CODE: Reorganized input handling code.
CODE: Updated copyright messages.
CODE: Removed Clarified Artistic License notice from file headers.
CODE: Removed 'build.h' since DJGPP is no longer a primary development platform anyway.
GUI: Fixed a crash in the Cheat Manager.
GUI: Fixed a bug in the input configuration dialog.
GUI: Added an entry to the Video menu to enable/disable page buffering.
GUI: Updated and cleaned up the Help->Shortcuts dialog.
GUI: Moved a few menus around.
GUI: Reorganized Video menu a bit.
INPUT: Made all input Unicode-compatible.
MISC: Added real-time game rewinding (activated by holding down the backslash key on US keyboards).
MISC: More reliable FPS reporting.
MISC: Fixed a problem with the generic mouse pointer used by the color themes.
MISC: Removed resync, since it is no longer required.
MISC: Increased default maximum frame skip setting from 3 to 4 to improve performance on slow machines.
VIDEO: Fixed a possible crash when the screen resolution was not sufficient for the selected blitter.
VIDEO: Added support for multiple video filters of the same type.
VIDEO: Reduced edge clipping from 12 to 8 pixels, which still seems sufficient enough to hide most scrolling artifacts.
VIDEO: Added check for VRAM-based destination bitmap before attempting page buffering.
VIDEO: Disabled page buffering by default, since it causes a significant speed hit.
VIDEO: Disabled the drawing of message history when the chat box is not open.

0.5.5
AUDIO: Hard Sync option will now honor the current CPU usage setting.
CODE: Moved GUI configuration saving code to gui_exit().
CODE: Improved error handling in blitters.
CODE: Minor clean ups and improved error handling in the MMC emulations.
CODE: Greatly reduced redundancy in theme handling code.
CODE: Made all MMC interfaces static.
CODE: Fixed a GCC warning about a 'possibly uninitialized' variable in 'papu.c'.
CODE: Replaced all references to 'state' with 'save state'.
GUI: Added support for generic themes.
GUI: Added 5 new color themes (Xodiac, Monochrome, Essence, Voodoo, Hugs and Kisses).
GUI: Added custom drawing code for 'sl_checkbox' object.
GUI: Fixed a cosmetic bug where save state loading and saving menu items in the GUI had the wrong function keys assigned.
GUI: Considerable menu reorganizations.
GUI: Added a recent files menu.
GUI: Increased maximum number of replays to 10 (up from 5).
GUI: General clean-ups.
MISC: Fixed a bug where the FPS counters were never cleared when frame skipping was disabled, causing them to accumulate indefinitely.
MISC: Changed default debug and optimization flags when building under DJGPP/Mingw32
MISC: Minor cosmetic improvements to the build process.
MISC: Added a soft reset feature.
VIDEO: Implemented new blitter architecture.
VIDEO: Re-added ability to flip PPU mirroring (this ability was previously assigned to a shortcut key that was removed in a recent version).
VIDEO: Removed 'first_blit_line' and 'last_blit_line' (since they don't work with the new blitter setup).
VIDEO: Removed color (de)emphasis overlays (color math will be re-added later as a native part of the PPU emulation).
VIDEO: Added optional horizontal and vertical edge clipping to help hide scrolling.

0.5.4
CODE: Switched to zlib/libpng license.
GUI:  Cleaned up input configuration dialog a bit.
INPUT: Added ability to calibrate joystick devices.
VIDEO: Added Blargg's 'nes_ntsc' as a selectable blitter (palettes are not supported).
VIDEO: Removed support for image offset/zooming (as these features were never used anyway).
VIDEO: Renamed 'light_adjustment' to 'brightness' and changed it's absolute range from 63 to 100.

0.5.3
CODE: Cleaned up timing code slightly.
GUI: Removed all remaining hacks leftover from the old GUI menu code.
MISC: Added quick save/quick load feature which uses it's own independant state slot.  Note that quicksave files have an extension of .fsv.
MISC: Cleaned up ROM loading code.
MISC: Made most code that deals with ROM filenames Unicode safe.
MISC: Changed behavior upon task switch while running in windowed modes from 'SWITCH_PAUSE' to 'SWITCH_BACKGROUND'.
MISC: Added callbacks to stop and later resume audio playback when a task switch occurs while running in fullscreen mode.
MISC: Added region auto-detection for PAL (E) games (currently it defaults to NTSC for all others).  Note that this feature must be enabled from the System->Region menu by setting Region to 'Automatic'.
NET: Initial work on new NetPlay engine.

0.5.2
AUDIO: Temporarily disabled OpenAL by default - There is nothing wrong with the code but OpenAL implementations don't like buffers as small as FakeNES uses, and thus produce silence.  That will be fixed when the audio system is overhauled.
CORE: Fixed a runtime assertion error by adding a check for the existence of CHR-ROM before attempting to build a CRC32 of it.
GUI: Fixed a bug that caused some GUI fonts to get screwed up after a moveable dialog was drawn.
NET: Temporarily disabled all references to NetPlay, since it was never implemented in the first place.

0.5.1
AUDIO: Added audio Delta-Sigma filter.
AUDIO: Fixed pseudo stereo mode 2 by disabling noise cycling.
CODE: Changed default minimum CPU requirement on DJGPP and Mingw32 compiled builds to i586 (Pentium class), up from i486.
CODE: Makefile improvements, including automagic dependancy list generation.
CODE: Centralized all save data functions into 'save.c' and 'save.h'.
CODE: Split 'misc.h' into 'common.h' and 'types.h'.
CODE: Renamed 'crc32.c' and 'crc32.h' to 'crc.c' and 'crc.h', respectively, to allow for future additions to the CRC generation API.
CODE: Fixed version number to read 0.5.1 instead of 0.4.0 - it was broken in the January 13th WIP release, which was supposed to be 0.5.0. x_x
CORE: Removed x86 optimized core since it's benefits these days are questionable compared to the overhead it induces.
GUI: GUI overhaul, partial Unicode support, and more.
GUI: Added GUI toggle for Zapper emulation.
GUI: Changed default GUI theme to 'Panta'.
GUI: Changed display method for backgrounds less than 200 pixels high from stretched to centered.
GUI: Fixed background drawing in color depths higher than 8 bits-per-pixel.
INPUT: Added support for using the mouse as an input device.
MISC: Added a CPU usage option and subsequently a GUI menu with which to configure it.
VIDEO: Added support for 24-bit video modes (fullscreen and windowed).
VIDEO: Removed outdated 2xSOE blitters.
VIDEO: Overhauled all remaining blitters and combined multiple blitter variants together.
VIDEO: Added new DES and DESii blitters.
VIDEO: Added makeshift support for HQ2X, HQ3X, and HQ4X.
VIDEO: Changed default display mode under windowed environments from fullscreen to windowed; use a platform-specific driver or the 'Force Fullscreen' option to override.

Version 0.3.1
====--

Note: NetPlay is incomplete and replays are semi-broken in this release.
Trying to use NetPlay in this will get you nothing!

This version is experimental.  I am releasing it for Christmas so that I can
worry about more important things, such as (eventually) finishing NetPlay.

Miscellaneous changes:
  Input 'Start' and 'Select' buttons configuration reversed fix.
  Increased chat message buffer size from 4 to 10 lines. 

Build system & code changes:
  Added CPU_TYPE and CPU_ARCH and improved some behavior.
  Separated blitters into individual header files. 

GUI changes:
  Added numbers to the items in Video > Blitter menu.
  Overhauled dithering functions.

Video output changes:
  (Super) 2xSCL crash in high resolutions fix.
  Added 32-bit support.
  Added color indexing for all non-32-bit modes. 
  Made all blitters work in any supported color depth.
  Renamed interpolated blitter to interpolated 2x.
  Added interpolated 3x blitter.


Version 0.3.0
====--

This release is dedicated to those who fell in the 9/11 attacks.

Note: NetPlay is incomplete and replays are semi-broken in this release.
Trying to use NetPlay in this will get you nothing!

Mac OS X is officially supported by this release, in addition to Windows
9x/NT/Me/2k/XP, 32-bit DOS, Linux, FreeBSD, QNX, and BeOS.

Miscellaneous changes:
  Infamous ROM load memory protection crash bug fix.
  Overhauled CPU emulation core.
  Added x86 assembly optimized CPU core components.
  Fixed branch wrap detection bug.
  Added CRC calculation for PRG ROM, CHR ROM, and ROM trainers.
  Added support for CPU memory space patching (raw or Game Genie w/ GUI).
  Added slow (half FPS) mode.
  Corrected mirroring of uneven size ROMs.
  Added save state support (may not work for all supported games).
  Added automatic machine state saving accurate up to every frame.
  Added support for replays (currently buggy).
  Altered memory map for performance.
  Added exit confirmation when ROM loaded.
  Significant improvements to the timing system.

Configuration changes:
  Added configurable save state and Save RAM (SRAM) output path.
  Configuration file and log file are now stored with the executable.
  Changed Win32 configuration file to 'fakenesw.cfg'
  Fixed several input configuration bugs.

Build system & code changes:
  Updated and added copyright messages.
  USE_CONSOLE changed to ALLEGRO_USE_CONSOLE to solve compilation problems (Mac OS X).
  Encapsulated datafile 'fakenes.dat' into build.
  Replaced all references to `NULL' with `NIL' to avoid compiler conflicts.
  Added object file suffixes to the build system (all platforms).
  Changed binary installation location from '/usr/bin' to /'usr/local/bin' (POSIX)
  Allegro compatibility fixes.
  Cleaned-up, overhauled, and optimized most GUI-related code.
  Added code to prevent registering conflicting digital directions in input.
  Added ability to use `usleep' instead of `yield_timeslice' in speed throttling.

GUI changes:
  Repaired all key mappings.
  Various GUI dialog enhancements and fixes.
  Added GUI patch manager with Game Genie support only.
  Added platform-specific video driver selection menus.
  Added multiple message system and input chat capabilities.
  Added input configuration dialog.
  Fixed various bugs related to repeated initialization of the GUI.
  Added GUI messages (log file) viewer.
  Added GUI toggle for the 'swap_channels' configuration file setting.
  Added GUI audio mixing speed selection menu.
  Added fast (passive) automatic blitter selection.
  Fixed default palette not being selected at startup.
  Improved operation of Video > Palette menu items.

Video output changes:
  Added 15- and 16-bit color depth support.
  Added 25% and 50% scanlines (currently very slow).
  Added several new resolutions, including 512x480 (for windowed mode).
  Added Super 2xSOE and Super 2xSCL anti-aliasing blitters.
  Added simple interpolated blitter.
  Fixed behavior of the 'last_blit_line' configuration file setting.
  Added keys to adjust light (palette intensity) from inside the emulation.

PPU rendering changes:
  Minor optimizations to background rendering.

Memory mapper support changes:
  Cleaned up and extended IRQ interface.
  Improved IRQ support in MMC3, MMC5, and Bandai mappers.
  Fixed MMC5 IRQ generation (greatly improves many games).
  Added MMC5 WRAM automatic size detection.
  Minor corrections of MMC3 behavior when no CHR-ROM is present.

Audio rendering & output changes:
  Changed default sampling rate to 96 kHz and buffer length to 6.


Version 0.2.0
====--

Miscellaneous changes:
  Added fast zero-page memory access to CPU emulation.
  Eliminated some obsolete return values in CPU emulation.
  Changed the CPU execution dispatcher to be inline to the main execution loop.
  Fixed a serious bug in address wrapping of ROMs that weren't an even power of 2.
  Fixed a bug which caused executed-frames counter to only count unrendered frames.
  Improved POSIX base support and the autoconf-based build system.
  Implemented loading of ROMs from ZIP files, must be the first file.
  Fixed a serious bug in video mode initialization.

Video output changes:
  Added the ability to specify blit region, to hide vertical scrolling.
  Added a toggle to the Options > Video menu in the GUI for 'force_window'.
  Added 2xSCL blitter (similar to 2xSOE, only better and slower).
  Improved the overall performance of basic blitting routines.

PPU rendering changes:
  Moved checks for sprites/background enabled outside of drawing loops.
  Altered cache-preloading in display rendering.

Memory mapper support changes:
  Fixed a serious addressing bug in Bandai mapper.
  Fixed a serious IRQ timing structure bug in Bandai mapper.
  Added FFE F3 series (iNES mapper 8) support.
  Added Konami VRC6 and VRC6V (iNES mappers 24 and 26) support.
  Added preliminary MMC5 (iNES mapper 5) support.
  Implemented partial ExSound support for both VRC6 and MMC5 mappers.

Audio rendering & output changes:
  Fixed initialization accepting a null driver, causing the emulator to freeze.
  Added random noise addition dithering for low quality output.


0.1.5
Miscellaneous changes
Fixed a serious masking bug in PRG banking.
Added support for ROM trainers.

Video output changes
Ability to implement combined filters added.
Basic scanlines filter added.


0.1.4
Miscellaneous changes
Fixed a serious bug in non-gzip ROM loading code.
ROM init and deinit cleaned up.
Grayscale palette added.
In-GUI resolution switching added.
In-GUI selection of stretched/normal blitters added.
Machine status now displayed separate from gameplay area.
Zapper position inconsistency when clipped fixed.

PPU rendering changes
Fixed color used when background clipped or disabled.
Optimizations to background rendering.

Video output changes
Ability to implement separate blitters added.
2xSOE blitter added (similar to EAGLE).
Screen flicker on zoom out bug fixed.
Made both zoom X axis and Y axis factors defineable.
Minimum/maximum zoom ratio limiting added.
Palette light level correction added (doesn't affect color 0).

Memory mapper support changes
Many changes and tweaks to MMC3 IRQs (Crystalis, SMB3 improved).
Partial Bandai (iNES mapper 16) support added.

Audio rendering & output changes
Enhanced and accurate variations of pseudo stereo added.


0.1.3
Miscellaneous changes
PRG allocation, banking, and masking centralized.
Eliminated 0-byte allocations when no CHR ROM was present.
ROM loading code merged.

Timing changes
Minor CPU core IRQ fixes.

Memory mapper support changes
MMC interface overhauled.
MMC3 IRQ improvements.
MMC3 PRG banking fixed.

Audio rendering & output changes
Default sampling rate changed to 44.1 kHz.
Default buffer length (in frames) changed to 4.
Various recording bugs fixed.
Linear echo effect tweaked and intensified.
Default filter changed to weighted low pass.


0.1.2
Miscellaneous changes
PPU source split into multiple files.
PPU source cleanup.
Audio base completely overhauled.
Audio interface completely overhauled.
NESticle palette added.
Custom palette feature added.
Snapshot now saves with the active palette.
ROM filename displayed in the titlebar.
MMC source cleanup.

GUI input changes
Toggle sprites shortcut key (F7) added.
Toggle background shortcut key (F8) added.
Most Fx shortcut keys remapped.

PPU rendering changes
Sprites split into two separate layers.

Memory mapper support changes
Nina-1 (iNES mapper 34) support added.

Audio rendering & output changes
Surround sound effect added.
Linear echo effect added.
High pass filter added.
Dynamic low pass filter rewritten.


0.1.1
Miscellaneous changes
Four-screen mirroring support added.

PPU rendering changes
Tile cache memory leak fixed.

Memory mapper support changes
Sunsoft mapper 4 (iNES mapper 68) support added.
MMC3 SRAM disable bit ignored (to fix Star Tropics).


0.1.0
Miscellaneous changes
CPU core optimizations, bug fixes, and timing corrections.
PPU register read behavior corrected.
Keyboard shortcut list dialog added.
Emulated frame counter fixed.
Zoom feature with definable zoom factor added.
Crash-on-exit fix for ROMs without trainers.
Zapper target sprite changed.

Timing changes
PAL/NTSC emulation select added.
Sprite #0 collision detection added with fairly accurate timing.
Sprite overflow detection added.
Sprite DMA timing added.
Sprite #0 collisions and zapper handled during skipped frames.
Vblank NMI state on power-on changed to disabled.
Zapper emulation corrected with fairly accurate timing.
Overall timing fixes and corrections.

PPU rendering changes
Tile caching added.
Line-based sprite emulation.
Background left-edge clipping support added.
Sprite left-edge clipping support corrected.

Memory mapper support changes
Color Dreams PRG banking fixed.
GNROM (iNES mapper 66) support added.
MMC2 CHR banking fixed.
MMC3 four-screen mirroring fixed.
