My Nes Version 7.7.7273.40370 Core Version 7.7.7273.40369 Built at 30.11.2019 22:25 ------------- - Fixed: palette emphasis and grayscale emulation. Notes: ------ - My Nes already emulates emphasis and grayscale, the problem with My Nes versions 7.xx.xx that the code line that apply the palette at output was wrong (which is fixed in this version). Now My Nes emulates emphasis and grayscale accuratly, you can check that with some tests like full_palette by blarrg or wall.nes here: http://nesdev.com/wall.zip Please refer to and/or for more details. -------------------------------------- My Nes Version 7.7.7263.2864 Core Version 7.7.7263.2862 Built at 20.11.2019 01:35 ------------- - Added: ability to toggle fullscreen by double-mouse clicking on the emu screen. - Added: ability to configure emulation shortcuts (via input settings, go to Input>Emulation Shortcuts). - Added: ability to change buffer size for sound playback (SlimDX Audio renderer only). - Fixed: ppu cycle timing, now it is 100% accurate (matches the rendering timing as described in wiki). - Fixed: ppu sprites render in the first 4 pixels as mirrors of last 4 pixels. - Fixed: game genie code edit function make My Nes crashes when the code file for a game is not presented. - Fixed: connect 4 players make My Nes crashes. Notes (Important): ------ - For best experience, please delete settings files (not folders) in My Nes settings folder before using this new version. THIS WILL RESET MY NES TO DEFAULT SETTINGS. The setting files can be found in: \Documents\MyNes The files are: controls.mnc, emusettings.ini, renderersettings.ini and winsettings.ini. This step is OPTIONAL, it will reset My Nes into default without LOSING ANY OTHER DATA, such as state saves, snapshots ...etc - Sound buffer size affect quality and performance, the lower the buffer size lower the quality and better the performance... 8 KB size found to be the lowest value possible before glitches can be heared in sound (lower values may do glitches). 24 KB size found to be the highst value possible before none-resolved latency appears. You can set custom buffer size value in the settings: go to \Documents\MyNes, edit renderersettings.ini, change line: Audio_PlaybackBufferSizeInKB=24 while 24 is buffer size then save the file. - You can use Keyboard, Joystick or Xbox 360 Controller for emulation shortucts. - Please make sure that audio frequency value (Audio>Frequency) matches the sound output frequency in your pc. You can set custom frequency value in the settings: go to \Documents\MyNes, edit renderersettings.ini, change line: Audio_Frequency=48000 while 48000 is audio frequency then save the file. -------------------------------------- My Nes Version 7.6.7241.40720 Core Version 7.6.7241.40719 Built at 29.10.2019 22:37 ------------- - Added: ability to switch audio mixer (between My Nes internal mixer and nes mixer that described in wiki). Details can be found in new page of the Getting Started dialog. - Imporved: FPS limiter, now it is 100% accurate (for all threads). - Fixed: DMC DMA and OAM DMA. Now all related tests pass (some games fixed such as Teenage Mutant Ninja Turtles sprite glitches). - Fixed: Sprites priority. (Can be noticed in Super Mario Bros 3 when you take the first maschrum) - Fixed: ppu timing (no bug, the timing was wrong with a cycle shift, now the timing matches exactly the diagram that provided in nes wiki here: ) Notes: ------ - Please note that the external sound channels of mappers (i.e. mapper 5) are enabled again in this version (it was disabled in the previous version). - If the sound went off after chosing an audio mixer, simply try to switch mixer again (From main menu: Audio > Use Mixer). - No changes for MyNesGTK nor MyNesSDL in this version, the Core is updated for this version though so it is up to date. The only thing you may want to do is to switch the audio mixer manually. To do so, simply go to Windows: C:\Users\\Documents\MyNes Linux: ./Home/MyNes Locate renderersettings.ini file, open it then locate this line (add it if it does not exist): Audio_UseDefaultMixer=0 0 means My Nes will use the internal mixer. This one is not as described in the wiki, it suppose to produce higher quality sound... Audio_UseDefaultMixer=1 1 means My Nes will use the defaul mixer as described in the wiki here: Save changes to apply then run MyNesSDL. Changing mixer will not affect performance, hence both mixers values are loaded into lookup table at game hard reset. Note that in Windows, MyNesSDL and MyNes share the same configuration file. -------------------------------------- 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 ) 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\\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.