In the future I will use this post to announce new releases and changes.
puNES is an emulator under development that works on Linux32/64 and Windows32/64. The SDL version, of course, needs of SDL libraries to run. Uncompress the zip/tar file in a subdirectory and use. The emulator, finally, support compressed archives.
Current version : 0.90
- Fixed a lot of bugs in the mappers MMC1, FM7, 28, 176, 178, and FDS.
- Full support for the format NES 2.0.
- Implemented the filter xBRZ.
- Implemented the UNIF mappers FK23C, FK23CA, D1038, MARIO1-MALEE2.
Given the large amount of revised code, if someone were to find roms that worked properly with the 0.89 but not with this release, please contact me.
0.89 (Bugfix release)
In some circumstances, the audio could not be played correctly (crackling and pops). Fixed
Added the possibility to save and load the color palette to/from file. The file format is the same used by FCEUX:
"Palette files are expected to Contain 64 8-bit RGB triplets (each in that order, red comes first in the triplet in the file, then green, then blue).".
To experiment take a look at this post http://forums.nesdev.com/viewtopic.php?f=21&t=11281
0.87 (Massive bugfix release)
Fixed all the bugs that did not allow the proper functioning of many gamepads. Are now properly recognized all those tested (XBOX 360 controller, DualShock 2, DualShock 3, DualShock 4, Twin USB Joystick and many other [Thx to Kirkor and to the other "volunteers"]). Linux and Windows versions.
Added support for the UNIF mappers : UOROM, TC-U01-1.5M, SA-NROM, SLROM, 22211, TLROM, TBROM, TKROM, Sachen-8259C, SA-016-1M, Sachen-8259D, ANROM.
Added sample rate of 48 kHz.
Doubled the overall volume level.
Starting to implement the UNIF (NROM, NROM-128, NROM-256, Sachen-74LS374N, A65AS) format and the Nes 2.0.
Fixed obscure bug that occurred when the code was executed from RAM (Tetris 2 + BomBliss (J) [!].nes now works fine).
Fixed all the bugs with the mapper 31 (2A03 Puritans works well now).
I continued to work hard on the synchronization between CPU/PPU and CPU/APU to make it more accurate. Now "Micro Machines (Camerica) [!]. nes" works without any graphical glitches also "Huge Insect (Sachen) [!].nes" finally works perfectly (viewtopic.php?f=3&t=465
). Considering that the changes affecting the core of the emulator, I have tested many roms (tests and games) and it seems that everything is running smoothly, but if someone were to find some roms that gives problems with this release, please contact me. Thanks to x0000 for the help on the front of the CPU/APU.
Fixed some bugs in the handling of compressed files with the game genie active (thx Chad).
Added an option to pause the emulator when it is in the background.
Added the mapper 31 (2A03 Puritans Album http://rainwarrior.ca/projects/nes/2a03puritans.html
In the windows version fixed a bug that did not allow proper recognition of the keys with some keyboard layouts.
Thanks to rom test "scanline.nes" I have corrected a timing issue between the CPU and PPU making it even more accurate, while with the test rom "dpcmletterbox.nes" I found and corrected an error in the management of the color pallete. If someone were to find some rom that worked with previous releases and with this not, please contact me.
Added the real TV NTSC pixel aspect ratio and the option to mitigate the effect of the stretch.
Rewritten and cleaned up the code for the management of shaders (including some shaders like Phosphor).
With compressed roms the Game Genie did not work. Fixed.
With the portable version, if you tried to load a compressed rom, the emulator could crash. Fixed.
Correct Scale2x with Interpolation active in the SDL version.
Added options to disable text on screen.
Added the ability to set the size of the borders of the overscan.
With the overscan active not passed the correct size of the virtual screen to the shader and this involved distortions (see, for example, the filter "CRT" with overscan active in the old version). Fixed.
Fixed a bug in the management of the IRQ of the FDS and now "Kaettekita Mario Bros. (1988) (Nintendo) (J). Fds" is fully playable.
Fixed a serious bug that did not pass the correct size of the window of the emulator to the shader, producing undesirable results (such as, for example, with the scanlines filter).
Added option "TV Aspect Ratio" in the video settings that simulates the screen format of the old televisions (4:3).
Added option "Interpolation" which enables, regardless of the type of filter used, the bilinear interpolation of the image.
Set to "1" the default value for the delay of the turbo buttons.
Fixed a memory leak in version D3D9.
Completed porting to DirectX. Both versions are now available for windows (SDL and D3D). I tried to share as much code as possible in order to make maintenance easier and this has led me to heavy internal changes so if someone finds some roms that worked with the previous version, can contact me. In addition, this revision work has brought to light many existing bugs that have been fixed (maybe replaced by others) for all versions (Linux and Windows). I stopped to make a list of all fixes some time ago so I can only advise you to download it, you will find it more stable and more efficient. A big thank you to all those who gave me a hand in the beta testing phase (Eugene.s, Kirkor, OldGhost, kaz321123, sedusg, Darkness Knight, mangamuscle and the other guys).
0.79 (Bugfix release)
In the Windows version, the implementation of the openbus in the reading of reg $4016 and $4017 I had introduced a bug that did not allow the correct reading of the pressure of the turbo buttons. Correct. (thx qinvhi)
Always in the Windows version removed the input lag when using joysticks and gamepads. (thx kaz321123)
Fixed a bug that did not allow for the proper handling of compressed archives with more than 100 roms.
In preparation of the implementation of the header NES 2.0 I cleaned and reorganized the code of mappers. If someone were to find roms that worked with the previous version but not with this please contact me.
Implemented mappers 28, 42, 91, 105, 153.
Implemented the openbus on the read from $4016 and $4017 (for improved accuracy).
Improved handling of IRQ in the mapper 64 ("Hard Drivin.nes" now works correctly).
I've forgotten to implement the scrollbar in the window of uncompress roms (that only appears when there are more roms in the same archive). Fixed.
Now the minimum version of supported gtk2 is 2.18, so the emulator can also run on older distributions (eg Ubuntu 10.10 or Linux Mint 9).
Fixed a bug in the management of the turbo buttons that did not allow proper operation.
0.77 (Bugfix release)
In compressed files were not handled correctly the long names of files. Fixed.
In some circumstances, in the Win64 version, there might be an error loading the necessary dll. Fixed.
Also in the windows version, it could happen that the list of files in the open rom dialog (Ctrl + O) was not updated when changing the filter. Fixed.
(thanks to mangamuscle for all reports)
Added support for compressed archives.
For the windows version is required the "7z.dll" (already included in the installation's zip).
For the linux version is necessary that the package p7zip is installed in the system.
Compressed archives supported : 7z, ZIP and RAR (in the linux version only if p7zip is istalled with RAR extension).
If 7zip/p7zip library are not found, are managed natively just zip archives.
Implemented mappers 83, 90, 163, 164, 209, 211, 249.
Rewrite the GUI for the input configuration that now are more user friendly (at least for me). I've eliminated the check on the conflicts and if you want (for some reason) use the same keyboard/joystick configuration for all players, now you can (for me it was very useful to do so). Adde an option to permit "Up+Down" and "Left+Right".
Added the support for 4 players (Famicom and Four Score).
I forgot to add support for the roms with the trainer. Done. Now even the rom "Dragon Ball - Shen Long no Nazo (J) [hM34] [T + Eng1.11_TransBRC]" works.
0.73 (Bugfix release)
Fixed a problem with the simultaneous pressing of buttons A+B that was not handled correctly;
Added a menu that keeps track of the latest opened roms.
Added the setting of the delay of the stereo effect.
Added a new configuration window in which you can enable, disable, and adjust the volume of each APU channel.
Added the setting of the sensitivity of the "TURBO A" and "TURBO B".
0.71 (Bugfix release)
In linux version the menu bar is not displayed correctly. Fixed.
Fixed some memory leaks (thanks to Valgrind).
A restriction in the code of mapper UnROM prevented the start of the "Battle Kids 2 - Mountain of Torment". Fixed.
*** Windows Version ***
In this version I've rewritten from scratch the Audio stack. I abandoned the use of SDL replaced with the XAudio2 (DirectX). With this I hope I have permanently removed the audio lag problem experienced by many.
Improved handling of reading from gamepads, now the sensitivity and accuracy are significantly better. Increased compatibility with many gamepad (thanks OldGhost).
Fixed a bug which allowed the start of the screensaver during the game session.
MMC3A and MMC3C are now full implemented.
Fixed a bug in MMC3 code and now the status bar in Mickey's Safari in Letterland is displayed correctly.
Added an option in the Audio Settings that enables the sound output of a early Famicom-clone consoles (swaps the duty cycles 25% and 50%).
Fixed a bug introduced in a previous version that did not allow the start of the "Batman - Return of the Joker".
Added support for Windows 8.
Added CLI option "--portable" for run puNES in portable mode (is no longer necessary to rename the executable even if it is still possible to do so for backwards compatibility).
Fixed the display of the parameters of the command line in the Windows version.
0.68 (bugfix release)
Correct a bug introduced in version 0.66 that in some circumstances, did not allow the filling of the audio buffer in time, producing a sound skipping.
Correct the support for the D-pad in the Windows version (reported by Alterac).
In the "Standard Pad" setup added a button (1 for Keyboard and 1 for Joystick) to unbind all buttons (suggested by Alterac).
Implemented the support of Drag & Drop of roms directly in the emulator window to load them (suggested by thefox).
Other small bugfixes.
Fixed some little bugs in the apu engine (sweep and triangle) and implemented the non-linearity and interaction between audio channels. Now (finally) the apu_mixer (http://wiki.nesdev.com/w/index.php/Emulator_tests
) test roms works well in puNES (I hope).
0.65 (bugfix relase)
Fixed a small bug introduced in version 0.64.
Adjusted slightly to stereo mode
Rewrite from scratch the audio subsytem and now there are two new options in the "Audio" menu, "Low" and "High" quality.
"Low" is the old engine, "High" is the new engine. Just try to hear the difference.
Fixed many bugs in APU emulation which is now much more accurate.
Added the ability to have a portable version of the emulator. Just rename the executable:
punes32 -> punes32_p
punes64 -> punes64_p
punes32.exe -> punes32_p.exe
punes64.exe -> punes64_p.exe
When the executable becomes a portable version, it create and use the folder where is the exe as the root folder.
0.63 (bugfix relase)
Correct a pitch and envelope problem reported from Dwedit (thanks for your help and for your patience).
Fixed a bug that could create sound skip and noise in the audio buffer.
Correct a bug introduced in version 0.62 of win64 that did not allow the emulator to start correctly.
Other small bugfixes.
Rewritten from scratch the OpenGL stack. Added new rendering mode "OpenGL GLSL" that use shaders for all filters (except for NTSC and HQ3x), of course if video card and its driver support it. In GLSL mode, add more filters. Many other bugfixes.
Added mappers 44, 45, 46, 47, 49, 50, 51, 52, 53, 57, 58, 60, 61, 62, 74, 116, 165, 191, 192, 194, 195, 199, 242, 245, 246.
Added Game Genie emulation. You need that the Game Genie rom (that should have the name "gamegenie.rom") is located in "$HOME/.puNES/bios" on linux or "$Documents$/puNES/bios" on Windows.
Correct a bug in the frameskip code.
Added FDS audio channel emulation.
0.58 (bugfix relase)
Correct a crash with some fds roms (thx Gokun for reporting).
Any volunteers who wants draw a new icon? You will be rewarded with a nice cold beer
If anyone is interested can contact me at this address <punes dot emulator at gmail dot com>
Added FDS emulation (read and write, not sound yet).You need of the FDS bios rom located in one of these folders:
1) the working directory,
2) the folder where is the fds file,
3) "$HOME/.puNES/bios" on linux or "$Documents$/puNES/bios" on Windows.
The bios file must be called "disksys.rom" and must have a size of 8192 bytes.
Added mapper 37.
Corrected some bugs in the cpu emulation discovered thanks to test roms made by Bisqwit
Fixed a bug that in some circumstances, when attempting to load a save state, it crashed the emulator.
Added mappers 200, 201, 202, 203, 204, 205, 207, 212, 213, 214, 215, 216, 217, 222, 240, 241, 244.
Correct a bug in the Windows version that did not allow proper configuration of some gamepads / joysticks.
0.55 (bugfix release)
Fixed another bug in the square emulation.
Thanks to Eugene.s for the reporting.
0.54 (bugfix release)
I've forgotten to uncomment same code in new squares emulation that results in distorted sound. Correct.
0.53 (massive bugfix release)
Correct frequency pitch emulation in Dandy mode.
Fixed all the bugs that were going to crash the emulator in the Windows version, now are really stable.
Correct a lots of bugs in the apu emulation and now the sound is much more cleaner and precise.
Rewrite from scratch the popping sound reducer.
Thx Eugene.S for suggestions, feedback and patience.
Added Dendy Emulation.
Implemented mappers 221, 225, 226, 227, 228, 229, 230, 231, 233, 234, 235.
Implemented a sort of "FCEUX Compatibility mode" and now many other FM2 works well (at least several of the most recent).
Added initial support for FM2 files (tas movies). I tested the fm2 files found at http://tasvideos.org/Movies-Verified.html
and they all work perfectly. The file must be in the same directory of rom to work properly.
Added a system to display messages on screen.
Implemented mappers VRC6 (24 and 26) and VRC7 (85) including their extra audio channels.
Added extra audio on the mapper Sunsoft 5B (69).
Added emulation of Turbo A and Turbo B on Standard Controller.
The Zapper coordinates, in some circumstances, could be read wrong, fixed.
More accurate Zapper emulation (thx tepples). Right button of mouse emulates the pointing of the Zapper outside the TV screen. So, to make a shoot offscreen, you must press the left mouse button while holding down the right.
Added Bilinear filter.
Rearranged the menu filter (Hint: reselect the desired filter and then save the configuration).
Fixed many bugs in opengl codes (now, on fullscreen, aspect ratio is maintained properly).
Added Zapper emulation.
Lots of bug fixes.
Added option to enable or disable the Vsync.
Added Hqx (2x, 3x, 4x) video filter.
Added a native version for windows 64bit.
Added the option to choose between mono or stereo (default from now) sound.
OK, I admit, this release is an excuse to wish a happy new year to all you guys!!
0.44 (bugfix release)
I discovered that the fullscreen does not work properly in a multi-heads scenario. Fixed for both Windows and Linux (xinerama and multi-desktop).
Rewritten from scratch sdl sound and optimized most of the code. All this has led an increase in performance between 20 and 30 percent. Now everything is more responsive and fast even on slower computers.
Added in video settings a "FPS" limiter and a "frame skip" menu to play with in order to find the best configuration for your PC.
Added "Audio menu".
Added fastforward key, when you press Shift on the keyboard, the emu runs at double speed.
Added a popping sound reducer for games (like Castelvania II, Batman, Ninja Gaiden 3) that have a drum imitation that causing a large jump in the output level for a short period of time through the register $4011 (thx to Eugene.s for the report and Tepples for the help).
Added "Overscan" option in the video menu that reduce the visible scanline from 240 to 224 by cutting the first and the last 8 scanlines. This setting is specific for the rom in use. If you change it, will be remembered when you open them again. If you set to "Default", puNES will always use the setting checked in "Default value" menu.
0.41 (bugfix release)
In the previous release I have fixed many bugs but it is also true that others have been added, such as an annoying disturbance of sound that, under certain circumstances, could afflict the windows version. Fixed.
I'have rewritten from scratch the input system and now are supported 2 players, joysticks, it's possible redefine the button of the control pad and also I can implement the emulation of other input devices much more easily.
Fixed various bugs .
Implemented mappers 114, 150, 176, 177, 178, 180, 182, 183, 186, 243.
Implemented mappers 56, 121, 132, 133, 136, 137, 138, 139, 141, 142, 143, 145, 146, 147, 149, 156, 171, 172, 173, 175, 184, 185, 189, 208.
Implemented mappers 16, 108, 112, 113, 115, 117, 118, 119, 120, 148, 158, 159, 193.
Fixed a bug in delta modulation channel (DMC) codes that now works well.
Implemented mappers 69, 70, 76, 77, 79, 80, 82, 86, 88, 89, 93, 94, 95, 96, 97, 99, 107, 152, 154, 206.
Fixed a bug in the APU codes that produced a distorted sound in some games.
Implemented mappers 12, 15, 38, 41, Namcot (19), Irem (32, 65), Tengen (64), Sunsoft (67, 68 ).
Implemented Jaleco mappers (18, 72, 78, 87, 92, 140), VRC1 (75), VRC2 (22 and 23), VRC3 (73) and VRC4 (21, 23, 25).
Implemented MMC5 mapper (5).
0.32 (bugfix release)
correct another bug in the save system. I have tested many roms and now everything (hopefully) works perfectly. Delete (for the last time [hopefully]) the directory "save" located in the folder "$HOME/.puNES" on linux or "$Documents$/puNES" on Windows.
for a bug in the save system, the file created on a 32bit machine was different from the one created on a 64bit and one created on a Linux system they could not be used on a Windows system. The error has been corrected but the saves already made are no longer usable. Delete the directory "save" located in the folder "$HOME/.puNES" on linux or "$Documents$/puNES" on Windows. To make better use of the combobox, the used slots will have a black text while the empty ones will have gray text, also passing the mouse over the used slots, will be automatically displayed a screenshot captured at the time of the save. For every laoded rom will always be remembered the last used slot.
In the Windows version I'have redesigned the toolbar.
added a save/load state system with 6 slots.
F1 = save state
F2 = dec slot
F3 = inc slot
F4 = load state
0.29 (bugfix release)
correct some bugs and redesigned the timeline in the windows version.
In the linux version i dropped the dependency with some libraries (such as the libpng 1.4) and this should make the emulator also run correctly on distributions like Ubuntu.
in this release I have implemented a "Timeline" bar. In the lower left corner there is now a bar with which you can go "back in time" up to a maximum of 60 seconds. Each tick corresponds to 5 seconds. If you don't want to use the mouse you can also use the keyboard. Pressing CTRL will pause the emulator and, while keeping CTRL pressed, you can move the bar with the left and right buttons.
I had forgotten to enable the save of configuration, fixed.
I built an internal database to automatically recognize the rom type (PAL or NTSC). If the Mode is setting to "Auto", the emulator will try to recognize the rom otherwise it will use the preferred mode.
Added native GUI for Linux (GTK+2) and for Windows.
Implemented Taito mapper (33).
Implemented Hard Reset (F11 key) and Soft Reset (F12 key).
Implemented switch from PAL system and NTSC with F8 Key.
Implemented PPU Open Bus and correct some bugs in DMC emulation.
Implemented AxROM, BxROM, GxROM and CPROM mappers.
I finally manage to pass all the Blargg's tests that I've found on the internet (including sprdma_and_dmc_dma.nes and sprdma_and_dmc_dma_512.nes).
Implemented emulation of mappers MMC2, MMC4, ColorDreams and Camerica.
Correct a little bug and now "Time Lord (U) [!].nes" work without glitches.
Implemented the save on file for the PRG Ram battery packed.
Rewrite MMC1 emulation and tested with all GoodNES MMC1 roms.
Now work without glitches the MMC3 chinese roms that in the previous version had problems (Aladdin 2 (Unl), Bing Kuang Ji Dan Zi - Flighty Chicken (Ch), Chu Han Zheng Ba - The War Between Chu & Han (Ch) an many others).
Implemented all illegal opcode.
Rewrite from scratch MMC3 emulation and now really work with every rom that I've tested (for two weeks I've tryed all 5118 MMC3 GoodNES roms including Blargg mmc3 test) except for few bootleg and some chinese roms (why??).
Implemented fix for young indiana jones chronicles (thx James).
Correct some bugs in the MMC3 (NTSC and PAL) and now
all the roms that I'have tried works well.
Implemented illegal opcode 0x80 for the "Beauty and the Beast (E) [!].nes" rom
complete APU emulation.
This is my first attempt with sdl sound and perhaps there may be some bugs. For now, without the implementation of frameskip, the emulator has to work 100% for not having problems with sound skip and crackle.
Changed the structure of the code and now the emu takes less than 100Kb.
Correct many many many bugs.
added AxROM (mapper 7) emulation.
fixed another bug and now Incredible Crash Dummies run without problems.
correct a couple of bugs in the mmc3 emulation.
added MMC3 emulation.
Correct a a bug in the controller routine (thanks Dwedit).
Correct a little bug and now all cpu_interrupts_v2 test roms passed.
Implemented reading of $2004 during the rendering.
(thx to Quietust for the info and for the read2004.nes test rom).
I worked hard on the CPU and PPU emulation and now many
of test roms worked perfectly (thanks blargg).
Added OpenGL support.
Implemented APU Frame Interrupt (only this for now).
Many bugs are gone.
Mappers supported : 0, 1, 2, 3, 4, 5, 7, 9, 10, 11, 12, 13, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 28, 31, 32, 33, 34, 37, 38, 41, 42, 44, 45, 46, 47, 49, 50, 51, 52, 53, 56, 57, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 99, 105, 107, 108, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 132, 133, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 147, 148, 149, 150, 152, 153, 154, 156, 158, 159, 163, 164, 165, 171, 172, 173, 175, 176, 177, 178, 180, 182, 183, 184, 185, 186, 189, 191, 192, 193, 194, 195, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, 217, 221, 222, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 240, 241, 242, 243, 244, 245, 246, 249.
UNIF boards supported: NROM, NROM-128, NROM-256, Sachen-74LS374N, A65AS, UOROM, TC-U01-1.5M, SA-NROM, SLROM, 22211, TLROM, TBROM, TKROM, Sachen-8259C, SA-016-1M, Sachen-8259D, ANROM, FK23C, FK23CA, D1038, MARIO1-MALEE2.
Sound : Implemented.
FDS : Implemented.
Game Genie : Implemented.
ALt + Enter = toggle fullscreen
Shift = Fastforward 2x
P = toggle stretch in fullscreen
F6 = PAL
F7 = NTSC
F8 = Dendy
F9 = Auto Mode
F11 = Hard Reset
F12 = Soft Reset
F1 = save state
F2 = dec slot
F3 = inc slot
F4 = load state
Links always updated:http://dl.dropbox.com/u/21595068/punes.32bit.tar.gzhttp://dl.dropbox.com/u/21595068/punes.64bit.tar.gzhttp://dl.dropbox.com/u/21595068/punes.win32.sdl.ziphttp://dl.dropbox.com/u/21595068/punes.win64.sdl.ziphttp://dl.dropbox.com/u/21595068/punes.win32.d3d9.ziphttp://dl.dropbox.com/u/21595068/punes.win64.d3d9.zip
comments and suggestions are welcome