As i'm sure a lot of you who follow emulation and general gaming heard about the missing snes games that were worth $10k were lost in post, and did make major news posts on emulation sites and gaming sites alike.
But today the panic is officially over.
Heres what byuu said:
On February 21st, I received an e-mail on the missing mail search I had submitted on January 30th, informing me that my package had been located!
Excited, I contacted my CA rep.
Failure?
... who then proceeded to tell me that the search had failed, and that the e-mail notification was errant.
However, she promised to request all possible locations the package could have ended up at to do one last search.
Success again?
The CA rep called me late in the day advising that someone in the Atlanta, GA mail recovery center had just now located my package!
Thankfully, the photographs I took of the packages before sending back the first batch of 100 games proved useful with exact appearance, dimensions, weight, etc being available for the search team.
Still, given all the constant ups and downs, I wanted to wait until the package was in hand before giving anyone any false hope.
Success for real!
Finally, today, February 23rd, the ordeal is finally over!
Jason Ladere, author of Jario64 (N64 emulator), informed us about his new project - written in java SNES emulator - SuperJarioES. As you can see, for initial release, it works quite well.
Here's full info:
I have released the initial version of my snes emulator SuperJarioES which is based off of the higan/bsnes emulator. I have also released a newer version of my older Jario64 N64 emulator. Both of these emulators, along with my other emulators are built using a Fractal Component Architecture.
Visit official homepage at code goole for latest source s and binaries, and don't forget to leave your feedback at initial EmuTalk thread.
bsnes is a Nintendo, Super Nintendo, and Game Boy Color emulator, that began development on 2004. It focuses on accuracy and clean code above all else. It never uses speed or compatibilty hacks. As a result, the minimum system requirements are greater than with other emulators.
Here're release notes for v088 :
As promised from the last news update, this release adds preliminary Game Boy Advance emulation. It's not perfect by any means, but it's one of the better first releases I've put out. It emulates all GBA functionality with the exception of the link cable and ROM prefetch buffer, although being a first release, there are bound to be plenty of bugs lurking in the core. I'd of course love some help with bugfixes, if anyone is interested =)
It's important to note that the GBA emulation has not been optimized yet. The GBA is a more demanding system than the SNES, by way of a much faster CPU core and higher frequency audio. You can expect about ~150fps on average with a Core i7-class CPU for now, but please note that I do intend to improve upon this performance in future releases.
For a bit of backstory: this is basically a byproduct of SNES ST018 emulation. This processor ended up using an ARMv3 CPU core. And since the GBA uses an ARMv4 CPU core, it seemed like a good choice: we could improve the ARM emulation for the ST018, and emulate the final 2D-based Nintendo system.
In the end, it turned out to be harder than expected: it took about a month to complete the emulation core, and it was only this quick due to extensive help from Cydrak; who fixed numerous CPU bugs, emulated the affine and bitmap rendering modes, and also implemented the new GBA FIFO audio channel, among other things.
On a side note, thanks to Cydrak and krom's hardware testing, we do have a nice milestone right out of the gate: proper OBJ mosaic emulation, which seems to be a first. At the very least, hopefully this will be helpful to other emulators.
Note that you will need the GBA BIOS image to use this. There will not be any high-level emulation of the BIOS functions for obvious reasons. Name the file "bios.rom", and place it inside the "Game Boy Advance.sys" folder.
Check out project website for latest files and informations.
bsnes is a Nintendo, Super Nintendo, and Game Boy Color emulator, that began development on 2004. It focuses on accuracy and clean code above all else. It never uses speed or compatibilty hacks. As a result, the minimum system requirements are greater than with other emulators.
Changelog for v087 :
- emulated the 21.47MHz ST018 (ARMv3) coprocessor used by Hayazashi Nidan Morita Shougi 2
- fixed PPU TM/TS edge case; fixes bottom scanline of text boxes in Moryo Senki Madara 2
- fixed saving and loading of Super Game Boy save RAM
- NEC uPD7725,96050 ROMs now stored in little-endian format for consistency
- cartridge folder concept has been reworked to use fixed file names
- added emulation of serial USART interface (replaces asynchronous UART support previously)
Check out project website for latest files and informations.
bsnes is a Nintendo, Super Nintendo, and Game Boy Color emulator, that began development on 2004-10-14. It focuses on accuracy and clean code above all else. It never uses speed or compatibilty hacks. As a result, the minimum system requirements are greater than with other emulators.
Changelog for v086 :
- created ui-debugger target (Laevateinn)
- fixed multitap ports 2-4 [quequotion]
- fixed ui-libsnes target compilation
- fixed a crashing issue with NSS XML markup
- improved cartridge-folder loading support
- NES can now load .fc (headerless NES) or .prg+.chr (split NES) images
- fixed cursor being visible in fullscreen mode when using Linux/Metacity window manager [ncbncb]
- show normal cursor when using Linux/SDL video driver [ncbncb]
- added menu accelerators
- fixed a bug in performance profile SMP incw/decw instructions
- SNES core can now optionally be built without Game Boy emulation core
- added 2012-02-04 cheats.xml database [mightymo]
Check out project website for latest files and informations.
bsnes is a Nintendo, Super Nintendo, and Game Boy Color emulator, that began development on 2004-10-14. It focuses on accuracy and clean code above all else. It never uses speed or compatibilty hacks. As a result, the minimum system requirements are greater than with other emulators.
Changelog for v085 :
- fixed auto joypad polling edge case; fixes Ys 5 controls
- fixed Justifier polling code; Lethal Enforcers should be fully responsive once again
- rewrote SNES S-SMP processor core (~20% code reduction)
- fixed Game Boy 8x16 sprite mode; fixed some sprites in Zelda: Link's Awakening
- treat Game Boy HuC1 RAM enable flag as writable flag instead; fixes Pokemon Card GB
- created far faster XML parser; bsnes can now load XML files once again
- updated to mightymo's most recent cheat code database
- internal color calculations now performed at 30-bits per pixel
- gamma slider now acts as fine-tuned gamma ramp option
- Linux OpenGL driver will output at 30bpp on capable displays
- Linux port defaults to GTK+ now instead of Qt (both are still available)
Check out project website for latest files and informations.
bsnes v079.04 is released. bsnes is an emulator for the Super Famicom and SNES video game systems. The purpose of the emulator is a bit different from other emulators: it focuses on accuracy, debugging functionality, and clean code.
bsnes v079.04 Changelog:
bsnes v079.04 - Cx4 LLE support2011-06-20
Back from vacation. We were successful in emulating the Cx4 using LLE during my vacation. We finished on June 15th. And now that I'm back, I've rewritten the code and merged it into bsnes official. With that, the very last HLE emulation code in bsnes has now been purged.
I still have some more plans for bsnes v080, so I'm not going to bump the version number just yet. Plus I would like it if we could thoroughly test the new Cx4 LLE support to ensure it is bug-free. To that aim, if you have some time and would like to help test: please download bsnes v079.04 and cx4.bin. Place cx4.bin in the same folder as "Mega Man X 2 (U).sfc" and "Mega Man X 3 (U).sfc", and then do your best to play through the entire games with no cheat codes, and uncover all of the secrets that you can.
If you find any bugs, or if the console window prints "invalid opcode" at any time, please send me a note on my forums. Thanks in advance to anyone who can help test this.
Well then, moving on ... all that's left is the ST-0018. Dr. Decapitator is currently busy with the N64 CIC, but after that we should hopefully make some progress in dumping its internal ROMs.
byuu has released a new version of his SNES emulator bsnes.
Quote:
bsnes v078 released (2011-04-30)
Finally, a new release. I have been very busy finishing up SNES box, cartridge and PCB scanning plus cataloguing the data, however this release still has some significant improvements.
Most notably would be randomization on startup. This will help match the behavior of real hardware and uninitialized memory + registers. It should help catch homebrew software that forgets to initialize things properly. Of course, I was not able to test the complete library, so it is possible that if I´ve randomized anything that should be constant, that this could cause a regression. You can disable this randomization for netplay or to work around any incompatibilities by editing bsnes.cfg and setting snes.random to false.
The GUI also received some updates. Widget sizes are now computed based on font sizes, giving it a perfectly native look (because it is native.) I´ve also added a hotkey remapping screen to the input settings. Not only can you remap inputs to controllers now, but those who did not know the hotkey bindings can now quickly see which ones exist and what they are mapped to.
Please enjoy.
Changelog:
memory and most registers are now randomly initialized on power-up
fixed auto joypad polling issue in Super Star Wars
fixed .nec and .rtc file extensions (they were missing the dot) [krom]
PPU/accuracy now clears overscan region on any frame when it is disabled
PPU/compatibility no longer auto-blends hires pixels (use NTSC filter for this)
added hotkey remapping dialog to input settings window
added a few new hotkeys, including quick-reset
phoenix API now auto-sizes widgets based on font sizes
file dialog once again remembers previously selected file when possible
updated mightymo´s cheat code database to April 19th release
Super Nintendo Entertainment System emulator has been updated recently. Changes:
Rebuilt IRQ handling. (zones)
Improved overall timings, now Snes9x can handle events in a opcode a little. (zones)
Improved screen interlace and sprite interlace supports. (OV2, zones)
Fixed Hi-Res pixel plotter. (BearOso, zones, OV2)
Fixed C4 for Mega Man X2's "weapon get" screen. (Jonas Quinn)
Fixed Super Buster Bros. graphics after reset. (Jonas Quinn)
Improved SA-1 support. (zones)
Added SA-1 CC2 support. (Jonas Quinn, byuu)
Fixed SA-1 NMI override mode. (zones)
Fixed Dual Orb 2 sound glitch. (byuu)
New APU timing hack, fixes various games that exhibit problems with Blargg's SNES_SPC library. (OV2)
Fixed the problem that echo buffer breaks IPL ROM. (zones, OV2)
Fixed movie snapshot unfreeze inconsistency. (gocha)
Faster config file saving. (OV2)
Fixed BlockInvalidVRAMAccess config file option. (windows port, unix port and gtk legacy config) (Jonas Quinn)
Remove POSIX dup and access calls, and rename qword to fix compilation with Cell SDK. (BearOso)
Fixed PS3 version save state crash by using heap allocation for soundsnapshot. (danieldematteis)
Fixed crash relating to double-closed descriptor. (BearOso)
Removed CPUShutdown speedhack, DisableHDMA and DisableIRQ options. (zones)
Removed remaining outdated asm code. (zones)
JMA 64 bit support. (kode54, Nach, friedrich.goepel)
GTK+, Win32, Mac: Added optional Hi-Res blending. (BearOso, OV2, zones)
GTK+, Win32: Support for bsnes-style XML shaders. (BearOso, OV2)
Win32: Full unicode support. (OV2)
Win32: Restored OpenGL mode. (OV2)
Win32: x64 version. (OV2)
Win32: HLSL shader support. (mudlord)
Win32: Win7 jumplist synchronizes with recent roms list. (OV2)
Win32: Updated menu structure. (OV2)
Win32: Drag&Drop support for ROMs. (gocha, OV2)
Win32: Reworked movie-recording with size selection. (gocha, OV2)
Win32: Restored SPC save option. (OV2)
Win32: Fixed vsync in DirectDraw. (OV2)
Win32: Improved window position saving. (OV2)
Win32: Restored compile with DEBUGGER. (gocha)
Win32: Fixed various edge-case errors and/or possible leaks. (Brian Friesen)
Win32: Config file option to always center image. (OV2)
Win32: Fixed "Turbo Down mode" hotkey assignment. (gocha)
Win32: Added and fixed Autofire for D-pad. (gocha)
Win32: Fixed aggressive soundsync wait. (OV2)
Win32: Added window size presets. (OV2)
Mac : Added pause and frame advance functions. (zones)
Mac : Now you can choose any folder for saving files. (zones)
Mac : Updated Music Box (mostly internally). (zones)
Mac : Fixed gliches in open/save dialogs on 10.6. (zones)
Mac : Fixed display configuration in windowed mode. (zones)
Unix : Fixed segfault and hang-up with -DNOSOUND. (zones)
GTK+ : Added ability to set specific folders for SRAM, patches, snapshots, etc. (BearOso)
GTK+ : Fixed many permissions issues with config folders. (BearOso)
GTK+ : Updated compatibility with latest GTK+ and GtkBuilder. Added experimental support for GTK+ 3.x. (BearOso)
GTK+ : Updated software output to use cairo and added the ability to use bilinear-filtering with it. (BearOso)
GTK+ : Fixed issues where cheats wouldn't stay enabled. (BearOso)
GTK+ : Fixed focus issue when there is no window manager. (BearOso)
GTK+ : Fixed X Visual incompatibilities and expose problems in the Xv and OpenGL outputs. (BearOso)
GTK+ : Fixed vsync with new X Server and NVIDIA drivers. (BearOso)
GTK+ : Added "Reduce input lag" option to OpenGL output. (BearOso)
GTK+ : Added a visual indication of the expected video refresh rate for the currently selected sound input rate. (BearOso)
Here is an incomplete list of games that have been fixed/improved in 1.53:
Battle Blaze (glitched title screen)
Earthworm Jim 2 (freeze on start)
F1 Grand Prix (flickering in-game HUD)
Lion King (freeze on start, works after reset)
Ms Pacman (black screen on rom load)
Mutant Chronicles - Doom Troopers (freeze on start)
NBA Hang Time (freeze on start)
Primal Rage (freeze on start)
Robocop 3 (black screen on game start)
SD Gundam G-Next (garbled scenario map pictures)
Secret of Mana (mode7 flicker)
Sink or Swim (display corruption on scrolling)
Super Buster Bros 1.0 (garbled graphics after reset)
The King of Dragons (no sound effects)
The Mask (black screen on rom load)
byuu has released a new version of his highly accurate SNES emulator bsnes.
Quote:
bsnes v077 released
2011-03-16
Changelog:
* video filters and shaders now populate inside main menu; no longer have to select them as files
* fixed 2xSaI, Super 2xSaI and Super Eagle on 32-bit platforms; still buggy on 64-bit Windows
* fixed linear mirroring issues (fixes Mega Man X dash bug)
* fixed RAM memory mapping bug in Sufami Turbo games
* home folder is now %APPDATA%/bsnes or ~/.config/bsnes
* added paths.cfg file, which will allow you to specify custom paths for any file types
* save states and cheat files for multi-slot games are based on slot names instead of BIOS names
* fixed compilation warning on OS X with nall::decimal
* fixed calculation bug in nall::fp
* Makefile now has options variable, example: make options=debugger
* configuration files and cheat database can now reside in the same folder as the binary itself
* updated to 2011-03-11 release of mightymo´s cheat database
byuu has released a new version of his SNES emulator bsnes.
Quote:
bsnes v076 released2011-02-25
Most notable in this release is that sound support has been added to my own Super Game Boy emulation. The GUI toolkit, phoenix, has also received a complete rewrite; with the most visible change there being that windows are now resizable.
Changelog:
* added sound emulation to Game Boy core
* fixed Super Game Boy save state support
* added HexEdit widget to Windows and Qt targets; debugger can now be compiled on all platforms
* entering fullscreen now auto-hides mouse; and mouse capture is toggled otherwise by F12 key
* fullscreen command and geometry caching works much better on GTK+ and Qt targets
* phoenix rewritten from scratch; now supports resizable layout containers
* phoenix/Windows no longer relies on buggy SetParent API to reparent widgets
Super Nintendo emulator has been updated recently. Changes:
- completely rewrote memory sub-system to support 1-byte granularity in XML mapping;
- removed Memory inheritance and MMIO class completely, any address can be mapped to any function now;
- SuperFX: removed SuperFXBus : Bus, now implemented manually;
- SA-1: removed SA1Bus : Bus, now implemented manually;
- entire bus mapping is now static, happens once on cartridge load;
- as a result, read/write handlers now handle MMC mapping; slower average case, far faster worst case;
- namespace memory is no more, RAM arrays are stored inside the chips they are owned by now;
- GameBoy: improved CPU HALT emulation, fixes Zelda: Link's Awakening scrolling;
- GameBoy: added serial emulation (cannot connect to another GB yet), fixes Shin Megami Tensei - Devichil;
- GameBoy: improved LCD STAT emulation, fixes Sagaia;
- ui: added fullscreen support (F11 key), video settings allows for three scale settings;
- ui: fixed brightness, contrast, gamma, audio volume, input frequency values on program startup;
- ui: since Qt is dead, config file becomes bsnes.cfg once again;
- Super Game Boy: you can now load the BIOS without a game inserted to see a pretty white box;
- ui-gameboy: can be built without SNES components now;
- libsnes: now a UI target, compile with 'make ui=ui-libsnes';
- libsnes: added WRAM, APURAM, VRAM, OAM, CGRAM access (cheat search, etc);
- source: removed launcher/, as the Qt port is now gone;
- source: Makefile restructuring to better support new ui targets;
- source: lots of other internal code cleanup work.
New release posted. Perhaps the most important change was fixing a bug in the Windows port when the keyboard was used for input. For some reason, the IsDialogMessage() function I use for tab key support was causing the main window to emit the Windows error beep every time a key was pressed after a few minutes of use. I do not know why this is, so I have simply disabled the tab key support to prevent this from happening.
Other than that, lots of polishing went into this release. UPS soft-patching will work with the recently released Der Langrisser v1.02 translation, for those curious. You can also store the UPS patches in GZ/ZIP/JMA support, and bsnes will detect this and decompress the patches first. Use the same ".ups" file extension for this, as it detects via file header.
If you wish to try out the newly added OpenGL support: start bsnes, go to Settings->Configuration->Advanced and set system.video to "wgl" (or "glx" for Linux users), and then restart the emulator. Please bear in mind that ATI's OpenGL drivers are an industry-wide joke, so I'd only recommend trying this on an nVidia or Intel video card.
Changelog:
• Fixed bug and re-enabled HDMA bus sync delays
• Emulated newly discovered IRQ timing edge case
• Optimized offset-per-tile rendering
• Added state-machine implementation of S-DSP core, ~5% speedup
• Added SPC7110 detection, will now warn that this chip is unsupported
• Fixed very annoying Windows port OS beeping noise when using keyboard for input
• Linux port will now save most recent folder when no default ROM path is selected
• Added OpenGL rendering support to Windows port [krom]
• Fixed Direct3D pixel mode scaling bug [krom, sinamas, VG]
• Improved SNES controller graphic [FitzRoy]
• Added UPS (not IPS) soft-patching support; UPS patch must be made against unheadered ROM
• As always, cleaned up source code a bit
I didn't want to release a new version so soon, however there is a rather serious bug in bsnes v029 where the path information for the save RAM files is discarded when one has not selected a default save RAM / cheat path from the path settings tab in the configuration settings window. Because of this, it gets stored to the base directory. For Windows users, this is c:, and for Linux users, this is /
This bug forced my hand, so I'm releasing v030 to correct this issue. I also cleaned up the S-DSP emulation code to be more consistent with my programming style -- it gets bit-perfect matches to v029's wave output, so I don't foresee there being any problems.
A new version of bsnes has been released. It contains a few minor emulation fixes, as well as user interface improvements. Behind the scenes, the source has been cleaned up more in preparation for running the CPU and PPU (video processor) separately from each other (eg with no enslavement.) This is required for implementing a clock cycle based PPU renderer.
Changelog:
• Greatly improved invalid DMA transfer behavior, should be nearly perfect now
• Major code cleanup -- most importantly, almost all PPU timing-related settings moved back to PPU, from CPU
• Added option to auto-detect file type by inspecting file headers rather than file extensions
• Rewrote video filter system to move it out of the emulation core -- HQ2x and Scale2x will work even in hires and interlace modes now, 50% scanline filter added
• Re-added bsnes window icon
• Added new controller graphic when assigning joypad keys [FitzRoy]
• Redundant "Advanced" panel settings which can be configured via the GUI are no longer displayed
• Improved speed regulation settings
• XP and Vista themes will now apply to bsnes controls
• Added "Path Settings" window to allow easy selection of default file directories
• Tab key now mostly works throughout most of the GUI (needs improvement)
• Main window will no longer disappear when setting a video multipler which results in a window size larger than the current desktop resolution
• Added two new advanced options: one to control GUI window opacity, and one to adjust the statusbar text
While v0.028's release went a lot better than expected, there was one significant problem: it appears that the Linux OpenGL renderer did not work correctly on any of the four ATI graphics card drivers. It seems to be related to partial implementations of GLX v1.3 (you know, the ten year old Xlib interface for OpenGL?)
Rather than continue fighting these drivers, I instead opted to backport the driver to use GLX v1.2 instead. This seems to work on the fglrx, ati and radeon drivers. I don't know much of the radeonhd drivers, but I believe they lack 3D acceleration anyway.
sinamas also came up with an ingenius trick to work around the X Visual problem: that is to say, a GLX rendering context requires a window with the same X Visual as itself. But it's not possible to change the Visual of the existing window that is passed to the GLX driver. sinamas suggested creating this new window as a child window, and embedding that within the rendering window. This worked wonderfully, and eliminates the need for enumerating all available GLX contexts, which is why I needed the GLX 1.3 API in the first place. bsnes now uses the GLX-recommended Visual, which also eliminates a color problem that existed on the fglrx driver when using the default X11 visual.
I also removed the glClear command inside refresh(), as it was redundant and caused flickering on non-buffered visuals. It might even give a slight speed increase on some cards.
Lastly, [vEX] pointed out that I should use the -D flag for the install command in the Makefile. This has been fixed.
I'm not updating the Windows binary to v0.028.01, as absolutely nothing has changed in the Windows port yet. I'll update again when the Debian repository is synced with the new version.
bsnes v0.028 has been released. The major focus of this release was cleaning up the code even more, and greatly enhancing the Linux port to be an equal with the Windows port.
For Linux users, please note that the safest drivers were chosen by default, rather than the most full-featured drivers. The active driver can be changed by editing settings->configuration->advanced->system.(video, audio, input), and then restarting bsnes. You can also edit the drivers by hand, by editing ~/.bsnes/bsnes.cfg
Available Linux drivers are: video ("opengl", "xv", "sdl" (default)), audio ("openal", "oss", "ao" (default)), input ("sdl" (default), "x"). In particular, the SDL video driver and libao audio driver are very poor performers. The SDL video driver lacks hardware accelerated scaling, and runs tremendously slow. The libao audio driver has horrendous, ~150ms+ latency.
OpenGL is the best video driver, but it requires OpenGL graphics libraries to be installed to use. These do not typically come with open-source video drivers. The Xv driver will at least allow hardware accelerated scaling, offering a tremendous speedup, but some ATI drivers have poor (or even missing) X-Video implementations.
OpenAL is the best audio driver, but ALSA works very poorly with it. OSS4 works far better with the OpenAL driver. The OSS driver has the lowest latency (~15-20ms), but requires the most CPU power. It too has problems when using the ALSA emulation layer.
While the SDL input driver is superior to the X driver (and is the default), if your joypad fails to work correctly and prevents you from mapping any keys (highly unlikely), you can always revert to the keyboard-only X driver. The SDL input driver also appears to cause a ~5-8% performance penalty, so if you don't have any joypads, the X driver may be a better choice.
At any rate, I strongly encourage you to try out each driver and choose the ones that work best for you.
Changelog:
• OpenGL (with hardware filter mode support) and SDL video drivers added to Linux port
• OpenAL (with speed regulation disable support) and OSS audio drivers added to Linux port [Nach]
• SDL input driver (with joypad support) added to Linux port
• Emulator pause option added
• Added option to select behavior of bsnes when idle: allow input, ignore input or pause emulator
• Added support to remap common GUI actions to key/joypad presses on the "Input Configuration" screen
• bsnes will now clamp the video output size when it is larger than the screen resolution
• GUI library has been enhanced, and renamed to hiro
• Fullscreen mode now always centers video, rather than approximates
• Fullscreen mode now works correctly on Linux/Openbox
• Extra layer of abstraction in src/ui has been removed, as GUI lib unifies all ports anyway
• Video, audio and input drivers unified into standard library, named ruby
• All custom headers have been merged into a new template library, named nall
• Makefile rewritten, vastly improved. Allows quick toggling of compiled-in drivers
• Makefile: all object files now placed in /src/obj, binary placed in /
• libco greatly enhanced, no longer requires an assembler to build [byuu, blargg, Nach]
• libco SJLJ driver added; bsnes should now build on any Unix-derivative now (Solaris, OS X, PS3, etc) [Nach]
• Fixed register $213e.d4 PPU1 open bus behavior [zones]
• Windows port will not activate screensaver while bsnes is running [Nightcrawler]
• Visual C++ target no longer requires stdint.h
• And lots more -- mostly code refactoring related
This version replaces libui with miu -- a new GUI wrapper library, and cleans up large portions of the source code.
Unfortunately, the GUI rewrite took far, far longer than I ever imagined. As a result, no work has gone into the core emulation for this version. But with the GUI rewrite out of the way, that should change in the near future. And thanks to the new UI library, I can now begin work on adding a cross-platform debugger to bsnes, at long last.
Changelog:
• Major source code cleanup (lib/, ui/miu/, ui/vai/)
• Cheat code editor was broken in v0.026, this is now fixed
• Cheat code file format simplified for human readability
• Makefile install target improvements [belegdol]
• libui replaced with miu GUI library
• Custom video / audio / input drivers replaced with vai HW library
• ppc and ppc64 libco targets added [Vas Crabb]
• x86 and x86-64 libco targets now work on OS X [Lucas Newman]
Since the last public release, I've completely rewritten the memory mapping and cartridge loading systems. With this, I've added preliminary support for the Broadcast Satellaview (BS-X), however very few BS-X games will run at this time. I've also switched compilers from Visual C++/8 to MinGW/GCC4, which grants a ~5-10% speedup over the previous release.
Changelog:
• Major source code cleanup
• Completely rewrote memory mapper to support runtime MMCs
• Updated S-DD1 MMC to use new memory mapping interface
• Improved S-DD1 emulation, thanks to information from orwannon
• Added support for SameGame -- load via "Load Special -> Load BS-X Slotted Cart" menu option
• Completely rewrote cartridge loader to support BS-X, BS-X slotted carts and ST carts
• Created custom dialog windows for multicart loading
• Improved generic memory mapper, which eliminates the need for cart.db [Nach]
• Added BS-X slotted cart detection to generic memory mapper [Nach]
• Linux port will now ignore keypresses when window is inactive
• Linux port will use much less CPU power when idle
• Added detailed compilation instructions to Makefile for Linux port
• Added "make install" target and PNG program icon for Linux port
• Switched Windows compiler to MinGW/GCC4
• Windows executable is now packed with UPX to decrease filesize
• Removed .ufo, .gd7 and .078 ROM extensions; added .bs extension
• Added preliminary support for the BS-X base unit, BS-X base cartridge + MMC, and BS-X flash I/O
bsnes is exactly three years old today. I've posted a new version which adds DSP-3 and DSP-4 special chip support. The DSP-3 is used by SD Gundam GX, and the DSP-4 is used by Top Gear 3000. Please note that the DSP-3 is not fully emulated, thusly SD Gundam GX is not fully playable. Also, due to lack of timing emulation with the DSP-4, the Top Gear 3000 track sometimes flickers in split screen mode. However, it is believed that Top Gear 3000 is fully playable.
I should also note that I have started on SuperFX emulation, as some will inevitably see said code in my source releases. What I have now is nothing more than a skeleton implementation, and absolutely nothing using it is playable yet. I am making absolutely no promises that I will ever be able to emulate this chip. It will take at least several months of work, and even then, the speed will probably be too slow to reach 60fps on any system, but ... I'm working on it. While I have no way to run tests on the actual SuperFX hardware, I will do the best I can to emulate the chip accurately. I will be emulating the caching and cycle delays as best I can, but the information I have on this chip is extremely limited, so don't expect miracles.
Lastly, as promised, I have released the special chips I have personally emulated to the public domain. See license.txt for more information if interested. I cannot release the special chips whose code I did not write to the public domain, but all of that is already available under the GPLv2 (from ZSNES) or the SNES9x license.
Changelog:
• Added DSP-3 support, thanks to John Weidman, Kris Bleakley, Lancer, z80 gaiden
• Added DSP-4 support, thanks to Dreamer Nom, John Weidman, Kris Bleakley, Nach, z80 gaiden
• Started on support for SuperFX, no games playable as chip emulation is less than 1% complete
• Unsupported special chips will now display an alert
• Missing stbios.bin file when loading Sufami Turbo cartridges will now display an alert
• Video settings now saved separately for windowed and fullscreen mode
• Advanced option video<.mode>.synchronize can be enabled for vsync, but will cause sound crackling
• Added menu option to toggle FPS counter
• Minor source code cleanup
This is an interim release between some major changes to the video mode support, which may take a long time to complete. It also fixes a bug with CGRAM access timing, re-adds the Sufami Turbo load menu, and adds support for the ST-010 coprocessor, used by F1 Race of Champions.
To load Sufami Turbo cartridges, stbios.bin must be placed inside a folder named bios in the bsnes folder. There is not currently a warning if this file is missing.
• Improved CGRAM access timing restrictions, fixes a bug in WWF Super WrestleMania
• Re-added Sufami Turbo menu to load ST and ST dual cartridges
• Added support for the ST-010 coprocessor, used by F1 Race of Champions II
• Improved libui to automatically adjust control sizes based on platform, vastly improves Windows UI
• Fixed relative paths in config file for Windows port
• bsnes no longer consumes 100% CPU time when idle on Linux port, thanks [vEX]
• Fixed config file object to not rely on undefined C++ language behavior, thanks Nach
• Fixed serious bug in S-SMP incw and decw instructions -- fixes sound bug in Emerald Dragon
• Added Nach's MinGW fixes -- can now be compiled with MinGW/GCC3 or MinGW/GCC4
• Fixed const char* cast warnings in GCC 4.2, thanks to [vEX] for the feedback
• Updated source to use latest libraries for libco, libui, etc.
• Added new advanced options to adjust aspect ratio correction
• Cleaned up source code a bit
Today marks a milestone for bsnes, and possibly for SNES emulation as a whole. With this new release, bsnes' compatibility has now reached 100.0%, with zero game-specific hacks. With every last commercially released game tested by both FitzRoy and tetsuo55 for at least five minutes each, all known bugs have been resolved.
Now, needless to say, I am referring to the emulation of the base SNES unit. As many SNES cartridges contain additional coprocessors on their PCBs, there are still unplayable titles. So how can I claim compatibility of 100%? Because I don't consider special chips inside game cartridges as part of the base SNES hardware. I realize that many people enjoy these games, and I do actively attempt to emulate as many coprocessors as possible (six are supported thus far). However, coprocessors such as the SuperFX and SA-1 continue to pose very significant challenges.
So, after nearly three years of development, I've finally achieved my primary goal. But it wasn't a complete victory ... I've learned a lot over the years. Emulation accuracy is not black and white -- there are heavy costs to pay and forced tradeoffs to achieve it. I no longer believe there is only one absolute path for emulation, as I did in 2004.
So does this mean bsnes is now perfect? Of course not. There are many technical details that are not emulated correctly. This also does mean that there are no bugs, merely that there are no bugs that we are aware of. While absolute verification of 100% compatibility is obvioulsy impossible, even by actually beating every single game from start to finish, this very well should be the first time any SNES emulator could claim zero known bugs with all known games tested. I very much expect this announcement to entice many new users to begin actively searching for bugs, in an effort to discredit my above claim. My response? Go for it! I would very much appreciate any and all discovered bugs to be posted here, so that they can be verified and addressed.
One major thing that needs to be said, is that there consists of one major hack in all SNES emulators, including bsnes: the use of scanline-based PPU renderers. This necessitates global hacks in all emulators to minimize their inaccuracies. I was going to write up a very long post here, going into specifics, but I've decided an article would be a better place for that. I will hopefully be writing up this article in a few days to post here.
In the meantime, one very important issue does need to be addressed. This version fixes a bug in Uniracers 2-player mode, where the game writes to OAM during active display. Like other PPU global hacks, Uniracers required a special consession. But because this hack only affects one game, it can very fairly be seen as cheating. Suffice to say, bsnes does not contain a game-specific hack, and the change made to fix Uniracers affects all games, but I do still very much consider it to be a hack. The fix I have added is quite literally and honestly more accurate than the behavior of bsnes v0.021. Before, writes to OAM and CGRAM during active display went where a programmer would expect, which would cause bugs when ran on real hardware. Uniracers is the only game known to do this, and it is very dangerous to do so. The writes do go through, but not where one would expect. The access address basically changes as the screen is rendered. With a scanline-based PPU, it is not possible to emulate the individual steppings of the PPU, as there is not enough precision. Further, the entire SNES emulation community has virtually no information on how active display OAM and CGRAM writes work. Now, as Uniracers is the only game known to do this, I had the choice of either intentionally remapping the writes to an arbitrary location, or change it to the address Uniracers expects. Neither would be more accurate than the other, as both are completely wrong from a haradware standpoint. So the decision was to either fix Uniracers and deal with some calling it a game-specific hack, or to leave it broken with absolutely no gain to accuracy. Rather than decide for myself, I asked those who have supported me over the past three years for their opinions. The decision was unanimous to fix Uniracers. You can read the discussion, along with a more technical explanation of the issue, here. I will be addressing this topic in much greater detail in the article I will be writing up shortly.
Changelog:
• Fixed buffer overflow that was manifesting as corrupted tiles in Lemmings 2
• OAM and CGRAM addresses are now invalidated during active display, however the algorithms for how this address invalidation occurs is currently still unknown, so reads/writes are mapped to static addresses for now
• Re-added cheat code editor.
• Windows only: keypresses when main emulation window is not active are ignored once again
This is a maintainence release. I am mostly releasing this for the sake of the recently released Der Langrisser translation.
Changelog:
• Windows port can once again map joypads through the Input Configuration panel
• Using enter or spacebar to assign a key should no longer instantly map those keys
• F11 now toggles fullscreen mode
• Esc now toggles menu on and off (use F11+Esc combined to hide UI completely)
• Fixed a bug in King of Dragons (J, U, E), KOFF was not cleared during S-DSP power(), thanks to FitzRoy for the report, and blargg for assistance fixing the bug
• Fixed serious crashing error with File->Load on Linux/amd64 port
• Hopefully fixed min/max undefined error on GCC 4.2.0, but I am unable to test to verify
• Fixed many cast const char* to char* warnings for GCC 4.2.0, but some probably remain, as again, I am unable to test as I lack GCC 4.2.0
• Set XV_AUTO_COLORKEY to 1 for Video/Xv renderer. Should fix some video drivers where there was no output, especially after running mplayer, etc. Thanks to sinimas for the fix
• Added clear_video() to Video/Xv renderer. Green edges at the bottom and right sides of the video output are now gone, and unloading a ROM will clear video
I have finally figured out how to poll the keyboard status in real-time through Xorg: the XQueryKeymap function. I will be rewriting the Linux key capture system to use this, instead of capturing window key up / down messages through GTK+. This will finally allow me to completely abstract the UI from the hardware video, audio and input interfaces: a necessary step toward Linux joypad support.
UPDATE: The source package has been updated to fix some small issues for 64-bit systems.
First, it appears bsnes was crashing on Linux/amd64 platforms when selecting 'File->Load Cartridge'. The cause of this error was quite fun to track down. Luckily, I came across the fix in a kino changelog. It appears that gtk_file_chooser_dialog_new() is a vararg function. The very last parameter passed is pointer to a string. However, if you don't need this parameter (and I don't), you can pass it a null pointer. Well, null is defined as 0 in c++ (and (void*)0 in c). This is no problem on 32-bit architectures as an integer and pointer are the same length. But on Linux/amd64, an int is 32-bits, whereas a pointer is 64-bits. So, I was pushing half of the pointer, but the upper half was basically not set. So whenever the stack happened to contain a non-zero upper half, GTK+ would think the pointer was valid, and attempt to read from it. Quite a serious issue, I can see many people running into this problem. It's non-obvious, as non-vararg functions will promote int(0) to 64-bits automatically. The solution is to cast vararg null pointers explicitly. In my case, I had to replace 0 with (const gchar*)0.
Next, during the rewrite, I never added back command-line loading. Oops. This is now fixed.
Lastly, I came up with a proper fix for casting between integers and pointers: uintptr_t. This is a variable declared in stdint.h that states it is safe to cast a pointer to an integer, and then that integer back to a pointer. This is definitely the proper way to implement my window message passing system, and as such I have rewritten the relevent parts of libui and bsnes/lui to use uintptr_t. This should fix all compilation errors on Linux/amd64.
Five months and 43 WIP releases in the making, today I am releasing bsnes v0.020. I'd really like to express my thanks to blargg, for he has written a new S-DSP emulator that is an impressive 32 times more precise than all existing S-DSP emulators. It is now bus-accurate, and should produce bit-perfect sound output to that of a real SNES, excepting very minor, very extreme edge cases. Not only did he do this, he went out of his way to develop a special version exclusively for bsnes to ease licensing concerns and take advantage of bsnes' unique features, notably cothreads. I can't thank him enough. Unfortunately, bsnes has taken a ~10% speed hit over v0.019 by using this new S-DSP emulator, but I must stress the speed hit is entirely due to the way bsnes is implemented. blargg's standalone S-DSP emulator is very, very fast. Anyone is free to take a look at his S-DSP emulator, as he has released it as open source under the LGPL, by visiting his homepage, here.
Unfortunately, the new cross-platform UI is not entirely finished. Some sacrifices had to be made to support libui. Specifically, the following features are missing from v0.019, but will hopefully be added back in future releases:
• Fullscreen support
• Input Configuration panel cannot capture joypad input. Joypad support is still present, but it must be mapped manually through the Advanced panel or through editing bsnes.cfg by hand
• The Cheat Code Editor is missing, but cht files can still be used from bsnes v0.019, and created by hand
• Sufami Turbo support is not accessible from the UI
• The UI on Windows is slightly less polished due to compromises to allow the UI to be readable on Linux.
I am sorry for the rough edges listed above, but I wanted to get a new release out, as it has been over five months since the last release, and I really want the world to be able to experience blargg's new S-DSP emulator.
Changelog:
• Added blargg's new S-DSP emulator, runs at 1.024mhz. Many thanks to blargg for this, as this puts all portions of SNES emulation except for the S-PPU at bus-accuracy
• blargg's S-DSP core fixes bugs in both Koushien 2 (J) and Toy Story (U)
• Corrected all S-SMP cycle timings to be hardware accurate. Thanks to blargg for creating an amazing test ROM that tested every possible opcode
• Corrected S-CPU wai instruction timing, fixes Mortal Kombat II
• Reverted HDMA sync emulation once more to fix Breath of Fire II (G) and Secret of Mana (U)
• Completely rewrote user interface to use libui, which is a wrapper that allows the same code to produce the same UI on both Windows (through the Win32 API) and Linux (through the GTK+ API)
• Corrected $2100.d7 OAM reset behavior, thanks to research from anomie
• Massively revamped the Linux port, should compile with no warnings or errors now
• Added 64-bit support to libco, tested on FreeBSD/amd64, should work on Linux as well
• Revamped makefile with suggestions from Nach
• Improved Linux Xv renderer to use the far more common YUY2 format, which should work on most Xorg drivers, allowing hardware accelerated video scaling
• Completely rewrote config file system. bsnes.cfg is now saved to user's profile folder on both Windows and Linux, allowing multi-user support
• A lot more work has been done behind the scenes, including massive code cleanups and portability improvements
A new version of this SNES emulator has been posted, no list of changes is available in english though. Here's a crude translation by google langauge tools:
- envx of sound DSP, correcting the behavior of the outx register
-- 0.217 So [enbagu] correction of those which are done
- Correcting mounting the sprite priority rotation
-- Correction of the bug which damage indication of FF mystic QUEST turns to rear
- Correcting the address mirroring of the SPC port
-- MIGHTY MORPHIN POWER RANGERS operation
It is there is no excessive big renewal point but, bug entered to the relation of sound with 0.217, because sound has become strange with wide-ranging title, made to release new version.
A new version of this SNES emulator has been released, so far the changes seems to be posted in japanese only (here). This post will be updated once the english translation is available.
- Added DSP1 and SuperFX savestate support. (nitsuja)
- Added screen state GFX to save states. (optional) (nitsuja)
- Fixed desync when loading inconsistent state in playback. (nitsuja)
- When playback reaches a movie's end, recording continues instead of the movie suddenly closing. (after recording) (nitsuja)
- can now record resets and mouse/superscope/justifier(s) (nitsuja)
- Added same-line-comment support for config files. (nitsuja)
- input display for all controllers (including peripherals) (nitsuja)
- Win32: Now uses .cfg file instead of Windows registry. (nitsuja)
- Win32: open ROM dialog bugfixes and speedup and facelift (nitsuja)
- Win32: option to use standard file open dialog for ROMs (nitsuja)
- Win32: maintain aspect ratio and bilinear filter stretch (nitsuja)
- Win32: optional removal of the dreaded "black bar" (nitsuja)
- Win32: Added EPX,EPX2,EPX3,HQ2X,HQ3X,TV3X,DM3X filters. (nitsuja)
- Win32: Added hires support for Interlace and TV Mode. (nitsuja)
- Win32: text removed from .avi output (optional) (nitsuja)
- Win32: better directory management, customizeable (nitsuja)
- Win32: Screenshot support is back. (nitsuja)
- Win32: Netplay is back (but still not very good). (nitsuja)
- Win32: Made OpenGL Bi-linear an advanced .cfg option. (nitsuja)
- Win32: cheat search improvements (address, watch, SuperFX) (nitsuja)
- Win32: Added non-modal ("active") cheat search option. (nitsuja)
- Win32: new hotkey-config dialog and configurable hotkeys (nitsuja)
- Win32: Fixed joystick config in input dialog. (nitsuja)
- Win32: Fixed hires and extended height .avi output. (nitsuja)
- Win32: various small GUI improvements (nitsuja)
- Win32: Netplay fixes. (nitsuja)
- "Fake Mute" desync workaround option for movies, until all ports have deterministic sound. (Bisqwit, nitsuja)
- Fix for save state blocks > 999999 bytes. (Bisqwit)
- C4 games now save C4 data in save states. (DeHackEd)
- Unix: Framework for high-speed seeking. Specify a frame number in a movie, and the emulator will run at maximum speed to that frame. Untested. (DeHackEd)
- X11: Support for window exposure. When a window is damaged due to overlay, being iconified, etc. it will be repainted correctly. (DeHackEd)
- Unix: parameter: -autodemo loads a movie for playback on startup. Only the x11 code handles this right now. (DeHackEd)
- Unix: parameter: -oldturbo, the turbo button renders all frames when fast-forwarding. (DeHackEd)
- Unix: parameter: -upanddown, override U+D and L+R protection. (DeHackEd)
- Unix: parameter: -mute, currently linux only, blocks out audio output from your speakers while still emulating sound. Not fully tested. (DeHackEd)
- Unix: parameter: -maxframes during movie playback, snes9x will exit when the target is hit. (DeHackEd)
- Unix: parameter: -keypress shows to stderr and on-screen the currently pressed buttons on joypad 1. (DeHackEd)
- Unix: Stream dumping (NOT COMPLETE). With -dumpstreams, raw video and raw audio are dumped to videostream%d.dat and audiostream%d.dat, where %d increments on each CPU reset, starting at zero. (DeHackEd)
- Unix: Non-blocking sound on Linux. It makes seeking nicer.(DeHackEd)
- Unix: Configurable sound device. (pierredavidbelanger)
- configure.in now requires a sufficiently new version of autoconf. (anomie)
- Fixed slow versions of branch opcodes. (anomie)
- Fixed the mosaic offset bug. (anomie)
- No sorting by priority in C4 command 00 00. MegaMan X2 can go behind the legs of the intro stage boss. (anomie)
- New RTO discovery, fixes Super Conflict: The Mideast title screen. (anomie, byuu)
- A 1->0 transition on $2100.7 causes OAM Address Reset. (anomie, byuu)
- The final HDMA Indirect Address load is only weird on the last channel of the scanline. Touge Densetsu Saisoku Battle problem solved. (anomie, byuu)
- Fixed BGnVOFS bug. Only HOFS needs ~&7 update. (byuu)
- Fixed superfluous VIRQ triggers. (zones)
- Fixed missing IRQ trigger just after the previous one. (zones)
- Fixed missing IRQ while writing to $4200. (zones)
- Fixed IRQ timing after WRAM refresh. (zones)
- Fixed NMA timing after DMA transfer. (zones)
- Fixed superfluous auto-joypad-reading. (zones)
- Fixed missing WRAM refresh during DMA transfer. (zones)
- Fixed DMA so that HDMA and any HC triggered events can run during DMA transfer. (zones)
- Roughly fixed the case that HDMA and DMA use the same channel at the same time. HDMA kills DMA. Thanks byuu. (zones)
- Changed initial DMA registers values. (zones)
- Slightly modified APU execute timings. (zones)
- Fixed APU I/O registers to get/set the proper value. (zones)
- Blocked invalid VRAM writings, though you can turn off this option due to Snes9x's inaccurate timings. (zones)
- Omitted SPCTOOL, no one uses it. (zones)
- Added Sufami Turbo support. (zones)
- Added Same Game add-on cart support. (zones)
- Fixed HiROM SRAM and DSP1-4 memory maps a little. (zones)
- Improved mirroring. (Nach, grinvader, byuu)
- CRC32 on BS dumps now follows uCONSRT standard. (Nach)
- BS dumps now always run in NTSC mode. (Nach)
- Unknown regions (generally betas) default to NTSC. (Nach)
- Now support NSRT headers for setting up controllers. (Nach, nitsuja)
- Unix: Fixed command line help output. (Nach)
- Unix: Sound now defaults to 32KHz, Stereo, Interpolation so Snes9x finally sounds like a real SNES by default. (Nach)
- Win32: Saner defaults for movie record. (Nach)
- Unix: Fixed crashing with mouse or super scope. (Nach)
- Removed some weird code which was crashing Korean League and its varients. (Nach)
- Win32: Can now compile with MinGW. (Jonas Quinn, Nach)
- Win32: Can now cross compile Snes9xw. (Nach)
- Unix: SSnes9x compiles again. (Nach)
- Win32: ZSNES C4 and SuperFX compiles once again. (Jonas Quinn)
- Unix: Netplay Fixes. (Nach)
- Unix: Netplay Improvements. (Fabianx)
- CX4 coordinate conversion command is implemented.
- SRAM data is automatically saved at some fixed interval.
- Shortcut key is disabled in background mode.
- Fixed a bug of pseud hires mode.
Note:
The language files for Ver 0.215 are totally compatible with Ver 0.216.
All Ports:
----------
- Rejoice for finally having 224 lines and them being shown properly in all cases. [pagefault]
- IRQ and timing fixes (fixes Chrono Trigger issues, Super Mario World, and others). [pagefault]
- Fixed bug with certain commandline parameters permanently overwriting config file settings. [Nach]
- Fixed bug with loading new ZMVs of a different version. [Nach]
- Loading ZMV with ROM mismatch prints a message. [Nach]
- Movie menu now has tabs and only shows proper options when available. [Deathlike, Nach, grinvader]
- Slight improvement to the Custom Res functionality. [Deathlike, Nach]
- Keep4_3Ratio option now only shows when necessary. [Deathlike]
- PNG files now use extended height in extended height mode. [Nach]
- Pausing, rewinding, and fast fowarding are disabled during movie dumping. [Nach, SamB]
- You can now force a movie dump length shorter or longer than the actual ZMV length. [Nach, Deathlike]
- Fixes for MEncoder check; added LAME check. [Nach]
- Custom dumping with multiple passes implemented. [Nach]
- Fixed some bad memory reads in command-line parser. Thanks grinvader. [Nach]
- Now there's an option to switch to replay mode while recording movies when loading a state and vice versa. [Nach, Deathlike]
- Fixed a bunch of bugs with certain save selection techniques not working right. [Deathlike]
- Fixed gui font overwrite problem after fixing a cheat. The dots should be gone now. [Jonas Quinn]
- You can now select the level of HQ filtering where applicable. [Deathlike]
- Many tweaks made to reduce GUI mem usage on all ports. [Deathlike]
- ZSNES now properly adheres to the command-line when Auto State Save/Load is used. [Deathlike]
- Quick exit key now adheres to Auto State Save/Load. [Deathlike]
- Inc/Dec Gamma toggles actually DO something. Gamma level is now definable in the config file. [Deathlike]
- Fixed bugs with playing back ZMVs of 2+ players at once. [Nach]
- Fix crash if you rewind farther than the game start in Kirby Super Star, Secret of Mana and some other games. [Jonas Quinn]
- Fix crashing if using rewind in a movie before rewind slot is filled. Thanks BoltR. [Nach]
- Readded the smoke effect. [Jonas Quinn]
- Fixed the Winter Gold crash (but not the freeze). [Jonas Quinn]
- Fixed crash in Super Demo World and possibly certain other large games. [Jonas Quinn]
- Fixed loading many old ZSTs. [Jonas Quinn]
- Fixed some bugs with movies which load from power on with SRAM. [Nach]
- Fixed some issues with DSP-4 movies. [Nach]
- Added ability to have game-specific input. Main input is now stored in zinput.cfg. [Nach, Deathlike]
- Added option in Config->Options for Screenshot format. [Deathlike]
- Fix crash on creation of ZMV if save path does not exist. Thanks Maximus. [Nach]
- Logo support for AVI dumping. Set the logo file in zmovie.cfg; it can be gzip'd if you want. [Nach]
- Pick state menu (default - F3) now has wraparound. Praise Pac-Man! [Deathlike]
- Config file cleanup for more understandability. [Deathlike]
- New Don't Save SRAM option. [Deathlike]
- More GUI cleanup and tweaking, also reorganization. [Deathlike]
- Removed the horrible-sounding Mono Surround Sound code. [Deathlike]
- Source cleanup. [Deathlike, Phil^, Nach, grinvader]
- Parsegen now allows one to define inside a PSR file to have it reject arrays from older config files. [Nach]
- Our assembly syntax shortener now is case-insensitive with new case-insensitive string class. [Nach]
- Archopt has updated flags, added GCC 4.2's -march=native support. [Nach]
- Parsegen now has atoui() which should fix reading very large values. [Nach]
- Ported more assembly to C. [Jonas Quinn]
- Misc. bug fixes. [Deathlike, Jonas Quinn, SamB, Nach, grinvader]
DOS Port:
----------
- Fixed snapshots key from attempting to take a PNG when it cannot. [Deathlike]
- Removed old DOS debugger at last. [SamB]
- Clock box option now does something in 8-bit modes. [Deathlike]
Win Port:
----------
- Updated and improved NTSC filter. [Blargg, pagefault, Deathlike]
- Added 1600x1200 S Full to Windows port for consistency. Fixed details of 1600x1200 S Win. [Deathlike]
- Fixed crash with HQ4x in windowed mode with Hi-Res Mode 7 on. [Deathlike]
SDL Port:
----------
- Fixed broken option on Mac OS X; load menu shouldn't crash anymore. Thanks phf. [Nach]
- Made WIP launch message berate users for not using --enable-release if it was an official release. [Nach]
- Added option to define configuration directory. [Aerdan]
- Mac OS X config directory now defaults to Library/Application Support/ZSNES. [Nach]
- Symlink support for matching ROM name to files. [Nach]
- Updated and improved NTSC filter. [Blargg, pagefault, Deathlike]
- More accurate NTSC ratio. [pagefault]
- You can now use libao for sound, compile with --enable-libao, also see zsnes --help for a list of drivers to use. [Nach, Bisqwit, grinvader]
- Unit testing done; off by one errors in audio sample output fixed. Thanks hakonrk and grinvader. [Nach]
- Now supports ~ (home directory) in various places, most notably ROM loading. [Nach]
- Fixed some filtering and video refreshing issues. [Deathlike]
- Fixed Bilinear Filtering on startup. [Deathlike]
I'm releasing bsnes v0.019 today. This version contains Bandai Sufami Turbo support, new IRQ emulation code, and some various bugfixes.
Unfortunately, this release is not entirely cause for celebration. Due to fatal errors in Microsoft's "enterprise class" c++ compiler package, I am no longer able to compile bsnes with profile guided optimizations. I have tested v0.018 with and without these optimizations, and the difference is a 40% speedup when PGO is used, even more significant than I had previously believed. However, bsnes has now become too complex for Visual C++ to handle. Unfortunately, there is nothing I can do about this, except wait for Microsoft to fix their compiler.
(Warning: this paragraph contains personal opinions, skip it if you can't handle that) As if this wasn't enough, I'm now doing my best to wean my dependence from Microsoft's line of operating systems, as I'm particularly concerned about the black box nature of Vista and its' DRM control mechanisms. This isn't a road I wish to begin traveling down, and thusly have no interest in upgrading to future versions of Windows. Therefore, as of late, I've been writing a UI wrapper that will allow me to code applications that are truly platform independent. The biggest goal for this library is to design a GUI for bsnes that runs virtually identically on both Windows and Linux/BSD. This is mostly complete, however there were many tricks I used in bsnes using the win32 API that I simply cannot do with GTK+ on Linux/BSD, such as the memory editor window subclassing. I will be porting bsnes to use this new UI wrapper, and in turn this will lessen the attractiveness / functionality of the bsnes UI to a certain degree.
Perhaps the most devastating news is that I am still contemplating the idea of designing a dot-based PPU renderer for bsnes. As if the loss of PGO wasn't bad enough, this will likely eat away an unimaginable level of performance as well. I can only estimate the speed loss being between 100-500%. Yes, it will be that bad. And despite weeks of planning, I cannot think of a way to allow a scanline-based and dot-based renderer to coexist as selectable options, given their massive differences in implementation.
And let's not even joke about SA-1 or SuperFX support ... those processors are each four to eight times more powerful than the SNES' main CPU.
All of these speed losses will basically make bsnes mostly irrelevant as an alternative to ZSNES, SNES9x et al. Although I believe I really came close to a viable alternative with v0.018, I know that I cannot both create a mainstream emulator, as well as keep with my original goal to emulate the SNES as accurately as possible.
The past few months have been very tough for me; trying to decide which of the above two goals to pursue. I've still not absolutely made up my mind. But for now, I've been sitting on a mostly untouched version of bsnes for the last few months, and have decided to release it to the public, profile guided optimizations be damned.
I'm once again asking for help, if anyone can figure out why bsnes won't compile with PGO support, please let me know. I'd very much like to get one last PGO build of bsnes released before starting on a dot-based PPU renderer. But given the usual response I get from these requests for help, I'd suggest no one getting their hopes up that bsnes will ever be as fast as it once was again.
The new version can be downloaded at the usual place. I'm leaving v0.018 up, as it may very well be the last stable, fast version of bsnes ever released.
For this release we spent much time rewriting, porting, improving many internal subsystems. ZSNES is a program with over 200,000 lines of source code and in this release, over 25% of that has been modified. Also around 15% of assembly has been ported to C. The upcoming list while large can't fully describe the amount of work and the amount of improvements made. Make sure to see the readme to find out how to use all the new features.
Subsystem Additions/Updates/Rewrites/Fixes/Improvements
* Ryan C. Gordon's ManyMouse support added. [Nach, pagefault]
This allows the systems compatible with ManyMouse ((Windows XP, Linux via evdev if read permission set, Mac OS X) to handle each mouse plugged into the system separately. So now games with two mice using devices can be played with 2 player (or 1 player controlling both) on a single PC.
Left Handed Mouse Support. [Nach, Deathlike, Jonas Quinn]
So lefties can have the buttons for a particular mouse swapped if they so desire.
* Rewrote directory handling system. [Nach, Jonas Quinn, grinvader, Deathlike]
The old system dubbed "ZFile" only kept track of files in a limited manner allowing for many many bugs. The new system dubbed "ZPath" now tracks files and paths in a clean systematic manner to eliminate all file/path related bugs that have made previous versions annoying. All file handling code is now done in C and has many functions to make it easier for anyone else to jump right into this bit of development. This also allows for many new features to be written, and we wrote quite a few. A debug system has also been added making it easy to track file issues regardless of the operation system in question.
* ZMV Rewritten - Movie Support. [Nach, grinvader, ipher]
Added support for subtitles while playing a ZMV. [Nach]
Can now load movies via command line parameter. [Nach]
Added parameter to close ZSNES when movie is closed. [Nach]
Our movie subsystem - ZMV has been completely rewritten from the ground up. Now features such as rerecording (via states and rewind), appending, mouse recording, Super Scope recording (buggy), chapters, start types, frame count, input compression, among other things is now all supported. Note ZSNES can still load old ZMVs, however it should be noted that ZMVs are somewhat version reliant and may desync on a version it was not recorded with. Also most of the new features will not work when using an old ZMV.
* Can now dump ZMVs to AVI and WAV. [Nach, Bisqwit]
For years users have requested being able to convert a ZMV to something else, it is now possible.
* Added IPS multipatch support. Goes from IPS, IP0, IP1, IP2, ..., IP9. [Nach]
So you can have IPS autopatching apply more than one to a game loaded.
IPS files now loaded from save directory then ROM directory. [Nach]
Making it easier for a user to auto patch.
Fixed silly mistake with size adjustment of IPS patches. [Nach]
So now the very rare broken IPS should work.
* Rewind and ZST code fully merged rewind should now work where save states do (Fixes rewinding in Super Bomberman games). [grinvader, Nach]
Can now use 100 save states instead of 10. [Deathlike, Nach, Jonas Quinn]
SRAM is now stored in save states and can be optionally loaded from them. [grinvader, Nach]
Can now select how many rewind states you want. [grinvader, Nach, ipher]
Can now select how much time is in between rewinds. [grinvader, Nach, ipher]
Our state saving subsystem has been completely rewritten (although another rewrite is planned) to fix many bugs that used to be present. With the ZST and rewind code merged, it also means no more issues where one works but not the other. This is also now all done in C making it easier to deal with, as well as allowing many new features as listed above.
* Parsegen invented (thanks grinvader, gladius). [Nach]
Binary and text config files merged into one and heavily updated. [Nach, grinvader, Deathlike]
We invented a new programming language (PSR), and a compiler for it (parsegen), which allows one to keep track of variables in a simple manner for both developers and end users. Developers can just declare a particular variable to be tracked and forget about it, letting the system manage everything else, making it easy to add as many configuration options as one likes. For the end user, the config file is all in text, making it easy to modify any feature they like or features for advanced users not changeable from within the GUI. It also provides a level of future compatibility so users should normally not have to delete config files between versions. It also allows partial config files, so users can delete certain settings and have them restored to their defaults. All this is possible while maintaining a high level of flexibility.
* Netplay, Modem, IPX code removed. [grinvader, Nach. ipher]
As much as we hated to, we had to remove all computer to computer playing options in order to fix up the other subsystems since the code was spread throughout ZSNES. We hope to in future versions to reimplement it and also provide new features.
* Created new macros and greatly eased GUI development and cut down on size of GUI code. [ipher]
Cleaned up GUI and reorganized it. [ipher, Nach, grinvader, Deathlike, Jonas Quinn]
Added tab support to the GUI and made good use of it. [grinvader]
Rewrote the load game menu, it can now handle thousands upon thousands of ROMs at a time. [Nach, grinvader]
Added a custom font system. [ipher, Deathlike]
Nach input boxes (video, path) now have a normal blink rate. [Nach]
Now using our custom GUI should be easier and more straight forward. Almost everywhere you look you should see a cleaner design and new features, and less bugs. See below for more specifics.
* New unified ZSNES loader which is also less buggy. [Nach, grinvader, Deathlike, Jonas Quinn]
Now command line options are handled in a more efficient manner, as well as making it much easier for us to add more.
* Committed the ZSNES development toolkit. [Nach, grinvader]
Code is now always in executable sections, fixes NX and many other issues. [Nach]
Added utility to auto detect best -march option to compile with, SDL port uses it automatically. [Nach, grinvader]
For various developers, we now added many utilities to make working on ZSNES much easier. Some of these utilities should be built into the assembler but aren't. These new utilities have also allowed us to easily track down several critical bugs and fix them effortlessly. We also have a utility now to aid the person compiling to get the best optimization out of their build perhaps now allowing them to use HQ4x or other filters that weren't possible before.
* Updated build setups. [grinvader, Nach]
Added file dependency utility. [Nach]
All the build setups have been updated to make it easier and more flexible for one to compile ZSNES and encounter less bugs along the way. File dependencies can now also be calculated automatically (most notably for SDL), so one updating ZSNES doesn't run into weird issues with only half of a fix being compiled.
* Ported much assembly to C. [grinvader, Deathlike, Nach, Jonas Quinn, theoddone33, pagefault, byuu]
Removed dead code. [grinvader, Nach, pagefault, Jonas Quinn, Deathlike]
Lastly on our big rewrite, a lot of old junk went, and many complex are annoying features are now in C meaning if you know C, now is a good time to start helping out ZSNES development.
Special Chips:
* Fixed all remaining bugs with the SPC7110. SPL4 and MDH are working correctly, now. Special thanks to John Weidman and Dark Force for working on reverse engineering. [Jonas Quinn]
* Super FX updates (Starfox 2 now 99% working). [pagefault]
* OBC-1 code ported to C and integrated properly, Metal Combat doesn't have graphical problems anymore, thanks Nach. [Jonas Quinn]
* DSP-1 finished. [The Dumper, Andreas Naive, Nach]
* SA-1 detection updated (Fixed loading of SD F-1 Grand Prix (Sample)). [Nach]
* Partial Seta 11 emulation (thanks anonymous and Jonas Quinn). [Nach]
* DSP-3 support (opcodes RE'd by Overload and Feather). Thanks Jonas Quinn for finding a bug in my glue code. [Nach]
* DSP-4 Support (Top Gear 3000). [Nach, pagefault]
* C4 emulation should be virtually perfect now. [Nach, Jonas Quinn]
* Now got mapping done correctly for dual Sufami Turbo (thanks byuu), now have two sets of SRAM. [Nach, Jonas Quinn]
As for everything else, much was done including a multitude of emulation updates, it is even hard to count how many emulation bugs are no longer present. Several new features were also added.
* Many Mode 7 fixes, also implemented anomie's Matrix formula (Fixed Energy Breakers world map, IOG intro, Battlemanicas Battlecoptor intro). [Jonas Quinn]
* Added some preliminary NMI and IRQ timing, proper behavior of H-IRQ when V-IRQ is active, flickering fix in H-IRQ timing. [pagefault]
* Fixes for DMA, HDMA, so we can have the recent improvements without breaking tons of other game. (SSF2, SFA2, FFMQ, TOP, CT, YI, Probably others). [pagefault]
* Init DMA values to FF, thanks Overload. [pagefault]
* Fixed windowing issues in Dragon Quest, Star Ocean, Final Fantasy V, Gradius and probably other games. [Jonas Quinn, pagefault]
* Fixed transparency issues in several games including U.N. Squadron, Final Fantasy 3u/6j and Star Ocean. [Jonas Quinn, pagefault]
* Fixed SRAM Mapping. Ys III, Dezaemon, Tokimeki Memorial, Dragon Knight 4, Fire Emblem - Thracia 776, *should* all work nicely now. [Jonas Quinn, Nach]
* Fixed a special chip SRAM bug. [Nach]
* Fast ROM is now actually set. [Nach]
* Straightened out the 48Mb/64Mb ROM map. [Jonas Quinn, Nach]
* Fixed Uchuu no Kishi Tekkaman Blade. [Jonas Quinn]
* Fixed ENVxbehavior. [pagefault]
* Some fixes regarding WRAM. Some Open Bus. Thanks _Demo_ & byuu. [Nach, pagefault]
* Fixed the source of the Super Turrican crash. It also fixes my current Robotrek game. I pray this doesn't break anything else... [Deathlike]
* Behold true ROM mirroring. If your translation breaks now, fix it. [Nach, grinvader]
* Evened out ROM scoring quite a bit. A bunch of beta ROMs which didn't load before now should. Special thanks to Cowering for the Reset Vector Popular Opcode Check code. [Nach]
* Say goodbye to speedhacks. [pagefault]
* Changed cycles for scanline 0. [pagefault]
* Removed special timing for EHi roms. [Jonas Quinn]
* Fixed game title in SPC files for EHi Roms. [Jonas Quinn]
* Workaround to fix crashing of certain games (Sim City Pal and Super Tetris 2 + Bombliss) on resolution change. [Jonas Quinn]
* Silly DSP code removed, should fix a lot of games (including EWJ2) [pagefault].
* Fixed program counter in RET macro, Dirt Racer now plays with some blinking, making progress :) [pagefault]
* Implemented some RTO (fixes some FF3 issues). [pagefault]
* Many hacks removed (we now have less than a dozen, and we have the least of all the emulators that use hacks). [pagefault, grinvader, Nach, Jonas Quinn]
* Fixed small screen extra line issues (fixes Super Metroid annoying line issue, so now that guy who keeps on coming into the channel annoying us about it can rest in peace). [pagefault, Nach]
* Fixed bug in hires mode (for example Lufia 2 ending). [MaxSt]
* Fix some randomness in the SPC core for now. [pagefault]
* Fixed loading of small ROMs. [Nach]
* Fixed a bug when the background was cleared to a strange color. [pagefault]
* Updated the bg scroll registers, fixes a couple of games (thanks anomie, byuu). [pagefault, grinvader, Jonas Quinn]
* Memory mapping code is now somewhat sane and can be followed. [grinvader, Nach]
* Updated timing. [pagefault]
* Readded corrected noise frequencies. [TRAC]
* SPC RAM cleared properly on soft reset. [pagefault, Nach]
* Fixed some init glitches. [Nach]
* Pass some more tests on the test cart. [pagefault, Jonas Quinn]
* SPC700 init to ffc0. [byuu]
* Proper logic when when drawing sprites while subscreen is present, fixes SMRPG characters disappearing when entering buildings. [pagefault]
* Removed the Sound Buffering option because it isn't doing anything. [Jonas Quinn]
* GUI/Exiting SRAM saving only saves if SRAM Check+Save is off or it's on and SRAM has been modified recently without save. [Nach]
* Super Scope buttons are now configurable. [Deathlike]
* srand() is performed once! and always once per z execution. Water effect B now also has a lot more effecting. [Nach]
* Cleaned up GZip reader. GZip reader now also support transparent reading, namely a regular file with a .gz extension for no apparent reason. [Nach]
* Added "Show Clock Box" and "Show Rom Info On Load" to the Options menu. [Deathlike]
* Fixed some bugs that were discovered with Valgrind. [Nach]
* Changed the default keys for Player 2 to saner defaults. [Deathlike]
* Fixed some memory leaks. [Nach]
* Remove B CPU core. [pagefault]
* No more TURB! [Nach]
* FPS now displayed correctly for large numbers. [grinvader]
* Fixed crash after SuperFX savestates are loaded. [Jonas Quinn]
* No more alpha for PNGs. [Nach, grinvader]
* Removing unused and probably out of date SPCDUMP. [Nach]
* Prevented 'auto state save/load' & 'auto increment state slot' from interacting. Former takes precedence. [grinvader]
* ZSNES will no longer jump back into the GUI randomly if you press F2 / F4 or some other buttons repeatedly. Special thanks to Dan for the clues on how to recreate it. [Jonas Quinn]
* Added 12 hour clock toggle. [pagefault]
* GUI special case horizon fixed, thanks Motley, Dan. [Nach]
* Crammed a "Documentation" button right below the "WWW.ZSNES.COM" button. [ipher, Nach]
* Fixed crash after enabling Sound Interpolation mid game. Fixed Gaussian always selected bug when MMX Support is disabled. Some options that are only available with MMX enabled are now hidden if MMX is disabled. [Jonas Quinn]
* Fixed Clear2xSaIBuffer to clear the first line, too. [Jonas Quinn]
* Removed off by 1 line fix. [Jonas Quinn]
* Fixed burning effect in executables compiled with GCC. [Jonas Quinn]
* Removed some DOS only code from other ports and vica versa. [Jonas Quinn]
* Added "+ Gamma" and "- Gamma" hotkeys to the Misc Keys menu [pagefault, ipher]
* Hacks can now be disabled via command line (-dh). [Jonas Quinn]
* Get_Date returns correct year now. [Jonas Quinn]
* SPC filenames are no longer truncated if there is a dot in the filename. [Jonas Quinn]
* Made gui option save config override dontsave option. Fixed bug #13. [Nach]
* Fixed crash when mmx is disabled and 25% scanlines with interpolation is enabled (bug #142). [Jonas Quinn]
* Fixed corrupted graphics when alt-tabbing. [pagefault]
* Can now display batter power status on laptops. [Nach, pagefault, ipher, David Lee Lambert, drizztbsd]
* Stupid (and old) mistake successfully corrected after manual tracking, fixed bug #52, and probably lots of other sound issues upon state load... [grinvader, Jonas Quinn]
* Added new video modes. [Aerdan]
* Fixed vars in bss section that had no space reserved. Fixed bug #18 on bug tracker. [Jonas Quinn]
* ZSNES now decodes shift-jis headers correctly... but the font is still limited to 5x5. [grinvader]
* GCC 4.0 support. [Nach]
* Fixed a jump to not disable ENV when it shouldn't. [Jonas Quinn]
* Optimization to frame draw code, only draw frames that change. [pagefault, Nach]
* Added error message if hard patching fails. [Nach]
* Fixed the exit procedure. [Nach, Jonas Quinn]
* Updated license. [Nach]
* Option to allow Up+Down/Left+Right for speedruns' sake. [grinvader]
* New variable slow down/speed up options. [grinvader. ipher]
* Lower memory usage. [Nach, Jonas Quinn, Deathlike]
* Panic key now resets offset mode and windowing state. [pagefault]
* Primary Buffer option shouldn't be reversed anymore. [Jonas Quinn]
* Added pause and frame increment options (buggy). [Nach, grinvader, ipher]
* Key combos for player 5. [ipher]
* Mode 4 offset change overflow fix in rendering code. [pagefault]
* Fixed crashes related to wrong MMX detection. [Jonas Quinn, Deathlike, hector]
* Major framerate improvement when using new graphics engine. [pagefault]
* JMA: Fixed some bugs in decompression. Improved performance. Lower memory requirements. Support for JMA v1 files. [Nach]
* Changed video change accept key to spacebar. [Nach]
* Added info on load if ROM is patched. [Nach]
* Fixed 100% CPU usage when no game is running. [pagefault]
* ZSNESW can now be compiled in MinGW without any fancy NASM patches. [TRAC, Nach]
* Fixed bugs with SRAM Check+Save option. [grinvader, Nach, Jonas Quinn]
* Initialized many vars which were not. [Nach]
* Added comments so people have more of a clue. [pagefault, grinvader, Nach, ipher]
* Fixed warnings. [Nach, theoddone33, grinvader, Jonas Quinn]
* Configure script fix for Gentoo users, and debug builds now use -O0, because we can. [grinvader]
* Partial scons support [theoddone33, Aerdan, Snarius]
* Added CPU parameter for specific CPU optimizations when compiling for an MS platform. [Nach]
* Added debug build support for MS ports. [Nach]
* Can now compile without JMA support. [Nach]
* Greatly updated, overhauled, and unified documentation. [AspiringSquire, Deathlike, Nach, Jipcy, Noxious Ninja, Richard C., xamenus, and others]
DOS Port:
* Fixed sample rate to not be able to select 32000 Hz or bigger rates when they are not available under certain circumstances. [Jonas Quinn]
* 8 bit modes now save images as BMP. [Nach]
* Can now compile without a debugger. [Nach, Jonas Quinn]
* Can choose old or new debugger. [SamB]
* Fixed ROM loading from the command line for DOS when a VESA2 mode is selected. [Jonas Quinn]
* Now runs proper clean up code on exiting. [Nach]
* Updates to input code, now supports more parallel pads. [Deathlike]
* Can now set via command line player 1 and 2 to any input.
* Rewind can now be used. [Nach]
* Quick load menu now shows full internal names or if LFN, as much as the other ports show. [Nach]
Win Port:
* Fixed a really strange crash problem on Windows 2003 systems. [pagefault]
* You can now use gamepad in the background without ZSNES having focus. [pagefault]
* Fixed bugs so ZSNES can be ran in VMWare. [pagefault]
* Can pause emulation in the background. [pagefault]
* Fixed black screen after the computer was locked. [Jonas Quinn]
* Fixed inline assembler in winlink.cpp when compiled with optimizations. [Jonas Quinn]
* Added custom video modes. [Deathlike2, Nach]
* Debugger now works in this port. [SamB, pagefault]
* Added KitchenSyncPal and fixed a lot for KitchenSync issues [Deathlike, Poobah]
* Added ForceRefreshRate as a replacement for Force60Hz. I'm sure someone will fail reading the cfg file for help. [Deathlike]
* Added Keep 4:3 ratio as requested a while back by gltamarin. This is useful for laptops/LCDs that use non 4:3 resolutions. [Deathlike]
* Can now set joystick sensitivity. [Deathlike]
* Can now view ROMs by SNES internal name. [Nach, Deathlike]
* Changed default option the Windows port uses due to sanity reasons. Also, a check was added to prevent the black screen (and maybe double vision) issue. A message box will now pop up to tell you what options you have. [Deathlike]
* Disable Screensaver Option now disables all annoying power management stuff. [Deathlike]
* Changed "High Priority Mode" to "Use A Higher Priority" and Above Normal Priority is used on NT. [Deathlike]
* Nach input boxes (video, path) now allow pasting via ctrl+v. [Nach]
* Added NTSC filter. [Blargg, pagefault, ipher]
* Fixed strange sprite priority bugs after switch to window/fullscreen. [Jonas Quinn]
SDL Port:
* Fixed bilinear filter in GUI [grinvader]
* Fixed video change freeze problems in port. [Nach]
* Make sound processing use less CPU cycles. [Nach]
* Fixed input responsiveness for controllers 3+. [bssteph]
* Added freedesktop.org file [pagefault]
* Fixed screen refresh for SDL software modes when toggling hq2x. [grinvader]
* Fixed a key repeating bug when changing resolutions. [grinvader]
* Fixed bug where mouse buttons were conflicting, right mouse click by itself on 3+ button mouse. [Nach]
* Updated wheel handling. [Nach]
* Added a Variable OGL mode to center ZSNES output with proper ratio. [NBondoux]
* Added custom video modes. [Deathlike2, Nach]
* New scancode handling system, should fix problems with non US keyboard and Mac OS X. Thanks hector.
* Debugger now works in this port. [SamB]
* Can now set joystick sensitivity. [Nach]
* Added Keep 4:3 ratio as requested a while back by gltamarin. This is useful for laptops/LCDs that use non 4:3 resolutions. [Deathlike]
* Can now view ROMs by SNES internal name. [Nach, Deathlike]
* Hopefully fixed numlock keypad quick select in the F3 menu. [Deathlike]
* Fixed bug when trackballs are present, also cleaned up joystick code a bit. [spoon0042]
* Make stack non executable for ELF. Thanks drizztbsd. [Nach]
* Mac OS X support. [Nach, hector, BRPXQZME]
* Removed dangerous checking of environment variable for user's home path. [Nach]
* Fix compilation on OpenBSD. [pagefault, Nach]
* Added NTSC filter. [Blargg, pagefault, ipher]
• ALL: Reverted a fix for joystick 2 because it broke some games. [Jonas Quinn]
• ALL: Updated the bg scroll registers. Michael Jordan - Chaos in the Windy City is fixed. Thanks to byuu for the information. [Jonas Quinn]
• ALL: Player 2's default up key is now "J" instead of "K" (for your sanity). Also, the Keyboard/Gamepad option for the non-DOS ports has its option name expanded. [Deathlike]
• ALL: Seta 11 support. Thanks anonymous donor and Jonas Quinn. [Nach]
• ALL: Removed the "extra box" when clock or FPS counter is in use. Beware of the stack! [Deathlike]
• ALL: Improved support for SRAM concerning second ST cart. [Nach]
• ALL: Now got mapping done correctly for dual ST, no more special attack crashing. Note this code is messy and some things can be handled better. [Nach, Jonas Quinn]
• W_S: Added more restrictions to the Set Custom Res button. The resolution is set+changed only when the res inputted is within the possible min/max. Also, when the button sets a resolution that is less than 298x224, it will automatically turn off Keep4_3Ratio. [Deathlike]
• W_S: Fix the HQx mode from changing or possibly crashing ZSNES when toggling VSync or Triple Buffering. [Deathlike]
• WIN: Removed resolution resizing while using the NTSC filter under a Windowed mode. [Deathlike]
• SDL: Fixed weird battery stats on Linux with some strange Dell laptops. Thanks Dan for testing. [Nach]
• SDL: Battery support for FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, and FreeBSD derivitives such as Debian's kFreeBSD. [Nach]
• SDL: Battery code now works for Mac OS X too. [drizztbsd, Nach]
• SDL: Fixes for Mac OS X. [Nach]
• SDL: Make stack non executable for ELF. Thanks drizztbsd. [Nach]
• SDL: Made touch usage more compatible, also upped zlib version requirement. [Nach]
• SDL: 1024x896 ODR W should have been able to use HQ2x in the first place. [Deathlike]
• SDL: Fixed display for OpenGL modes for pressing the "+" button in the GUI state selection screen and frame/auto-frame skip screen. Some archaic code cleanup. [Deathlike]
• DOS: Cleaning up handling of input in zloader. Can now set via command line player 1 and 2 to any input in DOS. [Nach]
• MOV: Always delete old MZTs when creating a new ZMV. [Nach]
• MOV: Fixed crash when recording a movie from reset. [Nach]
• MOV: Movie appending now works if append data is there (basically there if you create a movie after this commit). [Nach]
• MOV: Some cleanup to movie related code. Movie stopping is now prepped to allow appending. [Nach]
• MOV: MZTs naming improvement, as well as code cleanup. Can now use 100 states there too. [Nach]
• GUI: Now selected input is highlighted in input selection box. [Nach, Jonas Quinn]
• GUI: For the sake of the GUI, some reordering had to be done. While doing this, I have unleashed the untested 5th player option for the parallel port. Make sure to reset your gamepad selection in the DOS port. [Deathlike]
• GUI: Fixed a cosmetical issue in the F3 menu after hitting up or down. [Jonas Quinn]
• GUI: Pgup/Pgdown now increments/decrements the GUI state slot loader. [Deathlike]
• GUI: Slot level selection is now available for the GUI save selector. [Deathlike]
• SRC: statefileloc is dead. Now ZSTs numbers are handled nicely [Deathlike, Nach]
• SRC: Code Cleanup/Trimming/Optimization [Nach, Jonas Quinn, Deathlike]
• SRC: Optimizations to deinterleave code. Fixed a minor issue with split ROMs. [Nach]
A new bsnes work in progress report has been posted today.
I rewrote a lot of the cartridge file processing code to support the Bandai Sufami Turbo. All thirteen games are playable, and all are dualable in any combination. There are a few technical limitations such as SRAM always mapping as 128kbit in all games and cheat files only loading from the first cartridge (ROM cheats being unreliable when you switch which slot a given game is plugged into anyway), however since all games are fully playable, and this technically has little to do with the SNES, I am very satisfied with the results. The technical limitations are mostly related to the abstraction of the bus controlling PCB-based memory mapping (the MMC obviously exists in the cartridge, whereas the memory mapper is the most logical location to decode addresses in an emulator), thusly expecting single linear blocks for ROM and RAM, and the Sufami Turbo requiring two separate ROMs and SRAM regions. While it's possible to get around this, I've decided the additional work and overcomplication of one of the most vital parts of emulation is not worth the effort for only thirteen games. Hopefully everyone will agree that my Sufami Turbo implementation is more than sufficient.
I also fixed a tiny glitch with IRQs affecting Final Fantasy: Mystic Quest (E) (yes, that's right, I'm calling the European version Final Fantasy, take that Square), which may or may not have affected the last public release. I'm currently working on an IRQ fix that will correct both R-Type III and Robocop at the same time, but every fix I come up with breaks one of my test ROMs, fun.
Lastly, a fix for Michael Jordan: Chaos in the Windy City, single writes to BGnVOFS registers appear to act differently than single writes to BGnHOFS registers. Check the ZSNES forum if you want to read my long-winded technical explanation of this. The maps now ... do whatever it is they do ... correctly.
Head on over to bsnes' WIP page to check out the screenshots and previous work in progress reports.
I began working on bsnes on October 14th, 2004. I am releasing bsnes v0.018 today to celebrate bsnes' two year anniversary. Please note that this release incurs a ~15% speed reduction since v0.017, due to IRQ and S-SMP timing improvements.
Changelog:
• Fixed many critical errors in IRQ timing, should be *very* close to real hardware now
• Corrected major CPU timing bug involving CPU I/O condition 4
• Corrected bug with generic HiROM / LoROM memory maps
• Corrected bug involving HDMA indirect channel termination [anomie]
• OAM address reset now occurs when screen display is enabled, per recent research
• Readded full DMA, HDMA and HDMA init bus sync timing
• Added preliminary emulation of S-SMP $00f0 TEST register (6 of 8 bits are supported)
• Readded emulation of known timing differences between CPU revisions 1 and 2
• Config file can now control scanline-based PPU render position. This will only be needed until a proper dot-based PPU renderer is added
• Removed core debugging hooks so that debugging console can remain in public releases, it now functions as a tracer and memory editor
• Config file paths once again work correctly even if missing trailing backslash
• Video configuration simplified, sorry in advance to those who enjoyed the profile mode used before
• Added new configuration screen to control some emulation settings
• Replaced bsnes program icon with a much nicer one [FitzRoy]
• Optimized memory speed detection algorithm
• Preliminary UPS soft-patching support (do not use this yet!)
• Decreased memory usage and optimized generic libraries used by bsnes (/src/lib)
• Now caching OAM by one line, somewhat similar to a real SNES. Fixes Winter Gold, but causes line rendering error in Mega lo Mania
• Lots more, as usual
The following games have been fixed since v0.017 by the above bugfixes:
• Battle Blaze (J, U)
• Circuit USA (J)
• F1 Grand Prix (J)
• Funaki Masakatsu no Hybrid Wrestler - Tougi Denshou (J)
• Jumbo Ozaki no Hole in One (J)
• Mahjongg Taikai II (J)
• RPG Tsukuru - Super Dante (J)
• Robocop Versus The Terminator (U, E)
• Sink or Swim (U, E)
• Street Racer (J)
• Touge Densetsu Saisoku Battle (J)
• Winter Olympics (U, E)