My Nes Version 7.5.7202.39220
Core Version 7.5.7202.39201
Built at 20.09.2019 21:47 AM.
-------------
- Added: new audio mixer instead of the default lookup table.
- Fixed: audio sound filters (wrong high-pass equation and alpha calculation).

Notes:
------
- Please note that the external sound channels of mappers (i.e. mapper 5) are disabled in this version.
- All sound filters are 100% accurate now, the filters alpha calculations are 100% accurate as well. Also, the new mixer is 100% accurate, even better than the default lookup table which described in the wiki, which is token from nes hardware circuit.
  The point here that the mixer that built now in My Nes will make sure all channels outputs 100% presented without any loss, even the dmc channel now output 100% mixed with other channels.
  In other words, with My Nes, you will be hearing the best (accurate and clear without loss) sound ever produced by a nes emulator so far. I mean this: My Nes emulates the real nes sound filter plus a perfect mixer which mix channels audio without loss.
- Note: the other sound effects you may hear in sound (i.e. aliasing in some cases) is caused by the sound renderer and sound buffer writing (loop buffers), not by the sound itself. Just saying, it is not 100% perfect as the real hardware, 
  but it is the best possible as an emu.


--------------------------------------
My Nes Version 7.5.7100.2949; Built at 10, Jun, 2019 01:38.
-------------
- Added: enable filters in Audio option.
- Improved: sound playback quality (both renderers) by configuring buffer size and latency (buffer options are removed).

Core Version 7.5.7100.447; Built at 10, Jun, 2019 00:14.
-------------
- Fixed: Square sound channels sequencers (wrong counting through the look-up table). 
- Fixed: sound aliasing by implementing proper low-pass filter for down-sampling.
- Improved: sound quality by adding the proper filters as described in nes wiki.

Notes:
------
- It is recommended to switch into SlimDX renderers, for both video and sound for this version (unless there are quality issues).
- My Nes emulation engine outputs sound at ~1.79 MHz, in real nes (as described here <http://wiki.nesdev.com/w/index.php/APU_Mixer>) there are 3 filters:
. A first-order high-pass filter at 90 Hz
. Another first-order high-pass filter at 440 Hz
. A first-order low-pass filter at 14 kHz
Now My Nes implement all these filters after output in 1.79 MHz. All filters (low-pass and high-pass) are implemented as described in the wiki, in other words, they work using the actual physical equations.
After that, for down-sampling into the playback sound frequency, a low-pass filter is implemented at playback frequency as well.
- So, in My Nes, the audio process works like this:
EMU OUTPUT at ~1.79 MHz => high-pass filter at 90 Hz => high-pass filter at 440 Hz => low-pass filter at 14 kHz => low-pass filter at playback freq (i.e. 44100 Hz for default) => write samples into playback buffer (i.e. play sound).
- If you notice performance issues in this version or simply you don't like the sound quality, you can still disable this filters in the main menu: Audio>Enable Filters. 
When this option is disabled, the filters order will be like this:
EMU OUTPUT at ~1.79 MHz => low-pass filter at playback freq (i.e. 44100 Hz for default) => write samples into playback buffer (i.e. play sound).
This may cause some sound issues like aliasing, corrupted square melodies ...etc 
- Sound buffer size is now fixed for each renderer: 16 KB for SlimDX Direct sound and 5KB for SDL2Sound. These buffer sizes found best for quality and performance.


--------------------------------------
Version 7.5.6945
Built at 06, Jan, 2019 22:00.
-------------
* It is recommended to delete the setting files in My Nes folder in the user Documents folder for better experince.
  To do so, please go to 'C:\Users\<username>\Documents\MyNes' then delete: 'controls.mnc', 'emusettings.ini', 'renderersettings.ini' and 'winsettings.ini'. 
* This version is compatible with game states that made on the previous version.
* Sorry for the latest versions of My Nes, it was quit a mess, i was focusing on the core and totaly forgot about experience. 
  Consider this version as my apology, I tried my best to fix all the issues related to user interface and game play experience.
  I tested this version on both my Computer (mid range pc) and on my potato laptop (some laptop from 2009 lol), i ran My Nes
  for hours, carefully configured palette, sound, video, menus and even emulation speed to bring the best experience and quality possible.
  I know My Nes is the not the best Emu out there, but the way i see it after this version, it is really cool to play retro with
  My Nes now !! just relax, plug xbox 360 controller if you have one, run My Nes and Enjoy !! :D

- Added: load state open menu item, allows to quickly load a rom then load a state from selected state slot directly.
- Added: load state on recent open menu item, same as above, but this work on games open from recent menu.
- Added: Start game in fullscreen menu option, allows My Nes to switch My Nes into fullscreen mode each time a game is loaded.
- Added: SDL2 settings in video menu, allows to configure further options of SDL2 Video Renderer.
- Added: Shutdown emu/exit My Nes on Escape press menu option on preferences, this options allow My Nes to exit fullscreen, shutdown emu or exit My Nes with Escape press.
- Added: Interface languages switch in Preferences, currently only English and Arabic languages is supported. Sorry i cannot add more languages, i don't want to use translater services to add more languages ... i need help in this end :)
- Added: Ability to show supported boards list from Help menu.
- Added: Context menu that appears when right-mouse click anywhere in My Nes window (work on fullscreen too). This allow to access usefull menu items quickly during game play.
- Added: Auto mouse cursor hide.
- Improved: the default palette settings, carefully configured to produce a very good image quality.
- Improved: Sound is carefully configured to produce the highest sound quality possible with My Nes.
- Improved: if a x controller is connected, and start My Nes for the first time, My Nes will configure and switches automatically to that controller. (In other words, plug in your x controller and start playing !!)
- Improved: Getting started dialog, now it support more options and more detailed.
- Improved: Speed control in emulation, now My Nes run smoothly.
- Fixed: bug in SlimDX video renderer, keep aspect ratio was not working.
- Fixed: bug in SlimDX audio renderer, sound became corrupted most of the time.
- Fixed: fullscreen was not working probably (My Nes used to go Maximized window instead of normall fullscreen).
- Fixed: issues with notifications positions on the screen.
- Fixed: when to many notifications came at once, the video renderer was displaying the latest one only. Now it display them all one by one.
- Removed: The GameDB related features.


--------------------------------------


Version 7.4.6753
Built at 28, Jun, 2018 20:44.

- Added: Namco 163 sound channels (mapper 210 external sound channels)
- Fixed: save-load state in Namco 106 mappers (# 19 and 210)
- Fixed: channels cannot be silenced using Audio>Channels menu items from the last update.
- Improved: Audio filters order fixed to match what described in the wiki, it goes now like this: high-pass filter at 442 Hz => high-pass filter at 90 Hz => low-pass filter at 14 KHz.

--------------------------------------


Version 7.3.6725
Built at 31, Mai, 2018 23:08.

- Added: APU io-bus emulation.*
- Added: APU now emulates the real nes clock rates, which clocks on the other cpu's cycle.*
- Improved: Sound quality by adding high-pass filters as original nes hardware, see http://wiki.nesdev.com/w/index.php/APU_Mixer.
- Fixed: SDL2 video renderer eat up memory when FPS is shown.
- Fixed: SDL2 video renderer crashes in some cases.

IMPORTANT: this version is not compatible with state-saves data that are made by previous versions of My Nes.
Please go to \Documents\MyNes\States folder and either back up the data or delete them.

* Notes for whom interested in NES emulation:
- APU and PPU have io-bus. APU has once wich mapped between $4000 and $4019. $4020 is mapped to cart EX. 
  $4018 and $4019 are not used but still applied to the bus.

- For ppu, the bus works like this:
  - When cpu acces ppu io addresses (i.e. $200x, x can be 0-7), it sets the ppu-io-data bus value and ppu-io-address which it is 
    between 0 and 7 and finally sets the
    ppu-io-bus write flag for write access, or clear it for read access.
  - On writes, the ppu first finishes the current ppu cycle, then when done, it checks out the ppu-io-bus status, if there is an 
    access, ppu acknowledge: flags get reset, data updated ...etc.
  - On reads, the ppu immediately updates the ppu-io-data bus then returns it to the cpu, then the ppu finishes the current ppu 
    cycle. After that, it check out
    the bus status (for example, on $2002 reads, it first returns the vbl flag status immediately, finishes the current cycle then 
    finally it clears the vbl flag) and does the prober actions such updating flags.

- For APU, the bus work the same, except that the bus check happens on the end of the apu cycle:
  - When cpu acces apu io addresses (i.e. $40xx, x can be 0-17), it sets the apu-io-data bus value and apu-io-address which it is 
    between 0 and 17 and finally sets the
    apu-io-bus write flag for write access, not set for read access.
  - On writes, the apu first finishes the current apu cycle (on the other cpu's cycle), then when done, it checks out the apu-io-bus
    status, if there is an access, 
    apu acknowledge: flags get reset, data updated ...etc.
  - On reads, the apu immediately updates the apu-io-data bus then returns it to the cpu, then the apu finishes the current apu 
    cycle (on the other cpu cycle). After that, it check out
    the bus status (for example, on $4015 reads, it first returns the irq status immediately, finishes the current apu cycle then 
    finally it clears the irq flag)

- NOTES: the ppu bus get checked immediately after the ppu cycle finishes, this is what causes the vbl latency effects when reading 
         from $2002 and writing on $2000 
         (see vbl-nmi tests for more details).
         For APU, the apu check the bus after the apu cycle finishes, **on the other cpu cycle**. So, when writing to $4017 to reset 
         the sequences, the effect takes 3 to 4
	 cpu cycles to take effect due to this mechanism. Also, the clock-jitter effect (see apu jitter tests) is caused by this as
         well (My Nes now passes these tests by emulating the
	 actual apu cycle rate, there is no cycle numbers add (i.e. add additional cycle to cpu in the odd cycle to pass tests))
    
	Example:
	Let's write something into the $4017 reg, this is what happens:
	
	- if the write occur on apu cycle:
	. cycle1: apu finishes first the cycle then reset the sequence.
	. cycle2: onther cpu clocks, but this time the apu doesn't
	. cycle3: cpu clocks as well as apu, since the sequencers are reset, it all starts from beginning
    
	- if the write doesn't occur on apu cycle:
	. cycle1: nothing happen, it is not an apu clock
	. cycle2: apu clocks and finishes the cycle then reset the sequence.
	. cycle3: onther cpu clocks, but this time the apu doesn't
	. cycle4: cpu clocks as well as apu, since the sequencers are reset, it all starts from beginning

	Same work for vbl flag on ppu.

Also, this is may sound crazy, but the truth i found is, the APU has no sequencer inside it. For enveloper and length units,
it clocks on rates, not in sequences.
- The flag irq check clocks on every 14914 apu cycle (29828 cpus), almost at 60 Hz
- The envelope units clock on every 3728 apu cycle (7456 cpus), almost at 240 Hz. 
  It clocks always EXCEPT WHEN: it is an irq flag check clock (which clocks at 60Hz) and the seq mode is 1.
- The length units clock on every 7456 apu cycle (14912 cpus), almost at 120 Hz. 
  It clocks always EXCEPT WHEN: it is an irq flag check clock (which clocks at 60Hz) and the seq mode is 1.
- This is the difference between mode 0 and 1, in mode 0 there is no skip, in mode 1 the skip happens on irq flag check time,
  and the irq flag check get skipped in this mode instead.

- For length clocks, at 120 Hz, there is some kind of flip-flop. This flip-flop toggled when the clock occur, then it adds 2 apus 
  cycle after the first clock and 1 cycle for the second clock.
  This flip-flop get reset on $4017 writes. Also it works on mode 1, instead of length units clock, it add about 3728 apu cycles 
  plus 2 cycles.

After applying these information into My Nes, all tests passes (except for the apu reset tests). Also some issues in some games 
are fixed, such as Battletoads, it was
hangs on the second stage now it doesn't. Also, My Nes fits exactly the numbers (cycles count, clock rates) as descried in the 
nes wiki, so, these information is accurate, awaits for actual
confirmation and proves in the actual device or on the virtual apu.
For more info how's this theory is applied and how it works, please refer to My Nes source code, there are notes every where about 
this.

--------------------------------------


Version 7.2.6715
Built at 21, Mai, 2018 18:42.

* Improved: Sound quality by adding high-pass filters as original nes hardware, see http://wiki.nesdev.com/w/index.php/APU_Mixer.
* Fixed: SDL2 video renderer eat up memory when FPS is shown.
* Fixed: SDL2 video renderer crashes in some cases.

--------------------------------------


Version 7.2.6677
Built at 13, Apr, 2018 21:44.

* My Nes old GUI is back, along side with the Launcher.
* Fixed issues in the emu core.


--------------------------------------


Version 7.1.6596 
Built at 22, Jan, 2018 22:22.

* Added support for mapper # 163.
* Added multilingual interface support.
* Added ability to render UTF8 texts (in the game browser for non-English game names).
* Added support for Game Genie (ability to enter cheating codes for games).
* Added ability to change the sound buffer size in the audio menu.
* Added some video settings for rendering quality and misc.
* Improved sound configurations, now My Nes sounds better.
* Removed blipbuffer implementation and replaced it with an implementation of the "Band-Limited Sound Synthesis" algorithm.

