News
bsnes v060 released2010-02-08
This is a long-term stable release. A full changelog will be available at the forum link below later in the day. Also, please note that I have merged all of the various distributions into two packages. The Windows binary package now contains both the profile-optimized (fast) build, and the debugger build. The source code package now contains sources for bsnes, snesreader, snesfilter and supergameboy.
bsnes v059.06 released2010-01-24
This is an experimental release, as such it is posted only to Google Code.
Changelog:- 21fx API moved to pre-finalized form as S-MSU1; more about this on the forum
- OpenGL driver now uses GL_CLAMP_TO_BORDER instead of GL_CLAMP_TO_EDGE to support screen curvature shader
- rewrote file open dialog; code is greatly simplified, interface is improved
- all cheat code columns are now enquoted, and empty codes at the bottom of the file are omitted (format is compatible with previous releases still)
- debugger: added missing DMA variables to S-CPU properties viewer
- snesfilter: added OpenMP (multi-threading) support to HQ2x filter
- lots of other miscellaneous code cleanup work
Snes9X v1.52 released2010-01-14
Fantastic news!! The SNES scene is finally starting to pick back up again with a new release of Snes9X. You can read the full changelog at the link below. But to me, the most important features are blargg's cycle-accurate S-SMP and S-DSP cores; true SPC7110 emulation and the elimination of those abhorrent graphics packs; and UPS soft-patching support.
Binaries are available for Windows, OS X and Linux. The Linux port also gains a brand new GTK+ interface, making it a first-class citizen for the very first time.
My sincerest thanks and congratulations go to zones, BearOso and OV2 for putting in so much hard work to continue the Snes9X legacy!
snesfilter v009 released2010-01-14
This version modifies the HQ2x filter to take advantage of multi-core processors using OpenMP. On my dual-core E8400 at stock speeds, I get 177fps with no filter at all, and I get 123fps with HQ2x. Yes, it's a very intensive filter; and it's been meticulously optimized by both blargg and myself. By using HQ2x+OpenMP, the framerate increses to 143fps. Similarly, a quad core would easily double that again to something like 155-160fps.
This really isn't a huge deal for HQ2x, as any dual core system is probably already fast enough to reach fullspeed. But it will serve a very useful purpose upon adding HQ3x, HQ4x and the Phosphor3x and Phosphor5x filters in the future. As well as any other filters that really consume a lot of processing power.
bsnes distribution model changes -> v059.02 released2010-01-11
bsnes is a fairly complex application that is developed very rapidly. As a result of this, it's not always possible for the beta testers to catch all regressions prior to release; even when the final release is staggered a few days between private and public distribution.
However, I wish to provide stable, well-tested binaries for the casual gamers who aren't as concerned about having every last up-to-the-minute new feature. To do this, I am going to change the distribution model around a bit.
From now on, I will be maintaining two branches of bsnes. The main branch will be considered unstable, and is where new features will be added. Once this branch is stable enough, or enough features have been added since the last stable release; a new stable branch will be created. The stable branch will be what is posted on the bsnes download page. This stable branch will receive backported bug fixes, but it will not receive untested new features.
I also aim to combat two other problems with this model. First, it is an unfortunate reality that save states (not save RAM files) are not always compatible between releases. Second, localization files have to be updated every time a new build is available. Both of these problems are greatly exacerbated by bsnes' monthly release schedule. So starting with v060, stable releases will be posted approximately every several months instead of every single month.
And on the other hand, for those who do want to see the latest and greatest, the unstable branch will allow me to release even faster. This will ensure more testing, and thus, more stability. Instead of every month, these could appear every fortnight or so.
To facilitate all this, I have set up a new Google Code project, which can be accessed here. As you can see, v059.02 has been posted there already. I don't plan to always post a changelog here when new unstable releases are made, but since I'm already posting here now ...
v059.02 changelog:- added folder-up button to the file loading window
- hid new-folder button except on path selection window
- removed "Assign Modifiers as Keys" button; replaced with input.modifierEnable in the configuration file
- fixed a Qt signal issue that was causing ROM loading to take an extra second or two longer than necessary
- scale 5x setting will now maintain an exact multiple in both width and height for both NTSC and PAL modes
- re-added group assignment and unassignment to the input settings window
- re-wrote mouse capture code to be more intuitive, now uses buttons to set assignment
- re-added input.allowInvalidInput check to stop up+down and left+right key combinations by default [Jonas Quinn]
- split "Tools Dialog" menu option into separate items for each tool (Cheat Editor, Cheat Finder, State Manager)
- added S-SMP and S-DSP property information readouts to the debugger
bsnes v0.059 released2010-01-06
This is mostly a polishing release. There's lots of nice little improvements over the last release, so it should be well worth the update.
Changelog:- fixed a bug in the save state manager that was allowing saves for unsupported special chips
- added save state support for SuperFX games
- added save state support for SA-1 games
- the "Apply UPS" checkbox actually works now; allows bypassing of patching prior to ROM loading
- ROM loader will display internal ROM title and header info for uncompressed files ending in ".sfc"
- added Shift JIS to UTF-8 conversion for internal ROM titles
- "open-folder" concept now requires folders to end in ".sfc" to avoid false positives
- shrunk all GUI buttons and right-aligned them, as some of them were ridiculously long before
- rewrote settings and tools windows to be driven via tabs instead of lists; this saves a lot of screen space
- rewrote input mapping system to use a tree view instead of the confusing combo box hierarchy; hopefully more people will find the user interface GUI hotkey remapping section now
- added support to map modifiers as individual keys (eg you can map the shift key to the SNES select button)
- rewrote the cheat code editor, it behaves exactly like the state manager now; there are 128 pre-defined slots, and it is easy to clear any or all of them
- the cheat file will auto erase itself upon exit if all codes and descriptions have been erased
- fixed title bar game name ordering; was "bsnes v058 - Game Name", is now "Game Name - bsnes v059"
- fixed a bug where pressing escape inside the main window's menus would cause the program to quit
- Windows: worked around QTBUG-7188 to fix the multi-file archive loading dialog; it was not updating properly before
- Linux: added full-API PulseAudio driver with synchronization and latency control [RedDwarf]
- Linux: fixed a crashing bug involving OpenGL and glXSwapIntervalEXT()
- Linux: X-Video driver texture now resizes dynamically to support > 1024x1024 for any future filters to use
- Debugger: single-stepping instructions now updates all windows marked to "auto update"
- Debugger: fixed execute breakpoints, they were disassembling at the wrong offset
- Debugger: S-CPU bus breakpoints now mirror WRAM $7e:0000-1fff to $00-3f|80-bf:0000-1fff
- Debugger: fixed a rendering issue when stepping through hires games
- Debugger: added property system; can now view internal register states of all S-CPU and S-PPU registers (S-SMP and S-DSP coming soon)
- Debugger: added CGRAM palette viewer
- Debugger: added OAM sprite viewer (no graphical output yet)
- Debugger: added options window -- so far only to control output of memory / execution usage tables
- Debugger: updated usage and memory export file names to start with the loaded cartridge name
- Source: cleaned Utility class, split some of the functionality out to Cartridge class
- Source: greatly simplified SNES::Cheat class, SNES::Cartridge class; etc
A note to Windows Vista and Windows 7 users: there is still an open bug in Qt 4.6.0 that causes menus attached to popup buttons to initially appear invisible. See QTBUG-6645 for reference. As it is a bug with Qt itself, there is nothing I can do about it but wait patiently. You can work around this by pressing the tab key after you click the button. This affects the options buttons on the file load dialog, and on the input settings window.
Also, mudlord has submitted an updated Direct3D driver that adds HLSL pixel shader support. It was too close to get into this release, I'd like some time to test it. But hopefully it will get in by v060, or at the very worst, v061. Many, many thanks to mudlord for the awesome work :D
GUI enhancement preview2010-01-05
Lots of work hsa been going into the GUI lately. Here's a screenshot showing off the rewritten input setting and cheat code editor windows: bsnes 2010-01-05
RedDwarf donated a PulseAudio-full driver for Linux audio, which adds synchronization and latency support; I fixed a bug with OpenGL Vsync that was causing a crash on some cards; I fixed an issue where escape would close the emulator when the main window's menu was open; and a few similar things.
Save state improvements and other things2009-12-21
I've finally gotten around to updating the core to allow serialization of complex co-processor threading. With that, I've added save state support for SuperFX and SA-1 games. So at this point, only the following chips lack save state support: BS-X, DSP-3, DSP-4, ST-0011, ST-0018. Given that none of those are fully emulated, it shouldn't be too much of an inconvenience.
In other news, I wanted to clarify that the current 21fx emulation interface should be considered a prototype. I don't advise anyone to attempt a project with it, unless they are willing to update it once the hardware is ready.
Speaking of the hardware: right now, we're looking into using a cartridge pass-through due to difficulty in locating a suitable 28-pin edge connector for a base unit. neviksti, vladitx and Exophase have been helping with the layout planning, and Matthew Callis generously offered to help fund the project if needed. Between the two of us, we should be able to push as much as ~$3,000 or so if need be. So money wise, we're looking very good. At this point, we're just trying to determine the best MCU and CPLD to use for the project.
Lastly, the debugger is still being enhanced. Lots of bug fixes, lots of new stuff. I finally feel it's complete enough to replace all other debuggers I've had to use in the past. Which is quite nice considering no other debugger runs on Linux (my native operating system) or OS X.
21fx Demo Added + looking for edgeboard connector2009-12-14
smkdan has once again outdone himself, this time with an awesome use of 21fx. He's added the Chrono Trigger PSX animated intro the SNES game. You can download that here, or watch a Youtube video of it here.
Next up, the first hardware hurdle: I need to locate a 28-pin 2mm edgeboard connector. It needs to look exactly like this to work. Any help would be greatly appreciated!
Debugger enhancements + 21fx2009-12-12
Rather than explain, I'll just post a picture of all the new stuff.
I've also updated the 21fx page, splitting it into categorical pages. And I've posted a help wanted page. I'm looking for an electrical engineer who is willing to help make a hardware implementation a reality. I'm willing to compensate for the trouble. If you or anyone you know could help, please get in touch. My e-mail is at the bottom of that page.
bsnes v0.058 released2009-12-09
We've tested the latest release on at least a dozen computers now, all seems to be in order for a release.
Changelog:- added 21fx support
- added movie recording and playback support
- added rewind support (enable under Settings->Configuration->Advanced, use backspace key to rewind)
- added speedup (fast forward) and slowdown key bindings
- audio no longer stutters on Windows when moving or resizing the main window
- co-processors can now specify their own clock rates instead of sharing the S-CPU clock rate
- Super Game Boy 2 now runs at the correct hardware speed, and not 2.4% faster like the Super Game Boy 1 does
- added Vsync support to the Windows OpenGL driver (Intel graphics drivers do not support this option, because their engineers are lazy)
- OpenGL driver no longer re-initializes when changing video synchronization, helps pixel shaders
- refactored user interface compilation; now split into several object files, auto-generated MOC files placed under src/obj/
- worked around a bug in the PulseAudio sound server that was causing the ALSA output driver to lock up [BearOso]
- rewrote and simplified the save state manager, it is no longer a part of the core
- S-DD1 and SPC7110 can now access up to 256MB via their MMCs
- re-added background and OAM layer toggling under the tools dialog
- added config file options to adjust emulation speed levels (config.system.speed*)
- added snesreader, snesfilter and supergameboy support to the OS X port
- added a really neat pixel shader that can perform point scaling to non-even multiples, eg it looks great even with aspect correction [Fes]
- upgraded to Qt 4.6.0 official
- added memory export and import to the memory editor
- added bus usage analyzer: logs opcodes, memory reads, memory writes and M/X states to usage.bin file
- added disassembler that can trace both forward and backward from the current execution address
- extended read/write breakpoints to the S-SMP
- re-added trace masking option
Errata: there is one known bug in Qt 4.6.0 that affects the Windows port: menus attached to buttons show up as invisible on Windows Vista and above. I only use this on the file load dialog options button, and only to toggle the information pane on and off. Given that this is less severe than the bugs in the beta versions, I've upgraded anyway. I'll submit a bug report to the Qt team for this shortly. Also, my sincerest thanks to Bradley Hughes from the Qt development team for quickly fixing this show-stopper bug that greatly affected performance in bsnes v056.
New pages: I've added a new page to the navigation menu to explain 21fx, and I've also added a bsnes compilation guide on the main bsnes page. Please check those out for more information.
bsnes v0.058 released to testers2009-12-08
I've seeded the next release to testers, so if all goes well, look for the next official release here very shortly.
Release changes, movie support, credits2009-11-24
To try and prevent the need for bugfix releases, starting with v058 the final release will be distributed only to testers for a period of roughly 72 hours. If no issues are spotted, I'll then release that binary. Otherwise, I'll fix any issues and possibly reset the timer. As a single developer working on a part-time hobby, that's about the best I can do.
I've added movie playback and recording support. You can record from any position in-game, as it saves the current state before starting to record. There are no tool-assisted speedrun functions added at this time. I'm not sure if it's best to put these inside bsnes, or if they belong in a fork. It would have to be the latter if the changes are too intense to the core, so ... we'll see how things go I guess.
Lastly, I mistakenly attributed the HDRTV pixel shader to guest(r). That was written by SimoneT. guest(r) created the HQ2x shader, and Pete created the Scale2x shader. krom was responsible for the initial GLSL support, and mudlord has recently added Direct3D HLSL, which may make it into a future release if we can address some issues with d3dx. Also, thanks again to tukuyomi for hosting the bsnes releases.
bsnes v0.057 released2009-11-22
I'm really sorry about this, but a major issue snuck into v056. It was caused by a bug in the newly released Qt 4.6.0 RC1. Whenever one moved the mouse cursor over the main window in the Windows port, the frame rate was immediately cut in half, which effectively ruined Mouse, Super Scope and Justifier support. As for how this could happen, well ... I'm ... really at a loss for words about this.
This release does not change the source code at all except to increment the version number, and it is built against Qt 4.6.0 beta 1 instead of 4.6.0 release candidate 1 as v055 was.
I will file an official bug complaint and post a link to it here during next week. Again, my apologies for any inconvenience. I incorrectly assumed it would be safe to update to RC1, and didn't spot the bug in time.
bsnes v0.056 released2009-11-22
This release adds a lot of new user interface features, and polishes Super Game Boy support.
Note that many pixel shaders need to be coded specifically for bsnes, eg ones designed for Pete's OpenGL2 plugin will not work. I will maintain a pixelshaders archive on the bsnes download page with a collection of working shaders. Right now, there are three: HDR TV, Scale2x and HQ2x; written by guest(r) and Pete, and ported by myself.
Changelog:- lowered Game Boy audio volume so that it matches SNES audio volume
- fixed Super Game Boy multi-player support
- fixed Super Game Boy swapped player bug
- compressed Game Boy cartridges can now be loaded
- added save state support for Super Game Boy games
- blocked illegal Super Game Boy packets, fixes Zelda DX, Akumajou Dracula, etc palette issues
- main window once again shrinks on size changes
- joypads can now control the file loading window (support is very rudimentary)
- cleaned up video and audio sliders, increased audio input frequency range for 59hz monitors
- rewrote all of the input capture system from scratch
- added dozens of additional GUI hotkey bindings to resize the main window, control synchronization, control speed, etc
- it is now possible to map keyboard modifiers (shift, control, alt, super) to any input or hotkey; eg alt+enter = fullscreen
- merged all input capture windows into the main settings panel
- added turbo button support; hold down turbo buttons to send a 30hz input pulse
- added asciiPad controller emulation; contains off/turbo/auto fire toggles and slow-motion mode
- asciiPad support allows for quick switching between keyboard and gamepad input
- merged scanline filter into the user interface (under Video Settings) to allow it to work on all filters; including the NTSC filter
- killed off an evil QString <> string intermediary class called utf8; string class can convert to and from QString directly now
- added fast BS-X, Sufami Turbo and Game Boy cartridge loading: use the filter list under "Load Cartridge" to bypass the BIOS selection screen
- added pixel shader support to the OpenGL driver on Windows and Linux; note that it only really works well on Linux at the moment
- added proper Vsync support to the OpenGL driver on Windows and Linux using GL extensions; again this really only works well on Linux
- added unique path memory for shaders, folders, cartridges, BS-X, Sufami Turbo and Game Boy images
- upgraded to Qt 4.6.0 release candidate 1; fixes an issue with the first checkbox in lists not updating when clicked
OpenGL pixel shaders2009-11-19
krom donated some code to get pixel shaders working under the wgl and glX OpenGL implementations, eg for Windows and Linux. Seems to work pretty well. Example screenshot here, which shows off a high dynamic range GLSL shader, plus the NTSC software filter, plus OpenGL smooth scaling. I would've shown off the new ability to use software scanlines on any software filter, but the HDR filter appears to add its own scanlines anyway.
Minor updates2009-11-15
I've added turbo button support to bsnes. It's a 2:2 trigger to hold rate that maps the B, A, X and Y buttons on gamepads. It doesn't make sense to have turbo on other buttons or controller devices. I also put the SNES controller graphic back inside the window, and added a help button for the instructions instead. It looks a little bare now when mapping GUI commands, but people like the controller graphic, so what can I do? New screenshot is here.
I've also updated snesreader and snesfilter. There's no reason at all to download them, the only real change was making Qt an optional dependency, which is so that Richard Bannister can compile them on OS X without it. Since these two will always use Qt with my builds, the DLLs are essentially identical to the old versions.
Input system rewrite2009-11-14
The old input system was quite poorly written and didn't utilize class inheritance properly; so I spent the last three days ripping it out completely and replacing it with a new version that's less than half the size, but which actually does a bit more.
The major new addition is the use of modifiers. That is, the shift, control, alt and super (Windows) keys. Instead of treating them as ordinary keys, bsnes will now treat them as modifiers. Thus, you can map the enter key to the SNES controller's start button, and also map Alt+Enter to fullscreen. And when you do enter fullscreen mode, it won't send a phantom start button press to the emulated game. Any combination of modifiers are supported, giving you up to 16*95 individual keys to map.
Most importantly for me with the rewrite though, was greatly simplifying the process of adding new GUI hotkeys. Instead of having to edit five files to bind them to the main input list, the config file, the utility keyboard capture file and various header files; entire hotkeys are now defined in one solid block in only one file, and they're far more compact. I've used this to add 44 hotkeys for the GUI so far. Yes, it's quite a bit for a single program; but the idea is if you don't want them, you don't use them. They won't get in your way otherwise.
I also reduced the window clutter of the old system. Instead of spawning four different types of capture windows, I've merged it all into the main input settings window, so no additional windows are needed anymore.
With the system cleaned up, I should now be able to work on other abstract features like macros, input playback and recording, etc. Not that I'm making any promises to work on that stuff right now.
Here's some pictures of the new input system:
Main window
Digital button capture window
Analog axis capture window
supergameboy v0.012 released2009-11-04
Don't worry, the rapid updates should slow as these codebases mature a bit. This version works around an issue where some games (Akumajou Dracula, Zelda DX v1.1 and below) were unintentionally invoking the SGB packet transfer mode while intending to only poll controllers. This was generating empty PAL01 packets that would turn most or all of the onscreen video output black. With this fix, all known SGB issues should be resolved. The only bugs remaining should be those due to using a CGB core for a DMG device.
supergameboy v0.011, snesreader v0.008 released2009-11-03
I'd like to finish polishing Super Game Boy support before making another release. However, thanks to the DLLs, I can update parts without having to release a new binary.
I've posted supergameboy v0.011, which fixes multi-player support. This allows games such as Bomberman 2 and Wario Blast to use the SNES multi-tap for four-player mode.
I've also posted snesreader v0.008, which fixes a bug where compressed Game Boy images weren't loading properly. A little background—many archives often have extra files other than games in them, such as text documents. To avoid accidentally loading one of those, or unnecessarily presenting the file load dialog, I used a filter to only match valid SNES image extensions. I had to extend that to look for *.gb and *.gbc as well.
To get these updates, simply go to the bsnes page, download the respective files, and take the DLLs and overwrite the ones that come with bsnes v055 official. I'm not going to update the v055 archive, for the sake of other sites that mirror it.
Lastly, there were two more changes, but they won't be available until the next release. I've added save state support for Super Game Boy games, and I've also added a new moving-average audio resampler, courtesy of blargg. It's supposed to sound a good deal better than my hermite resampler for Game Boy audio. Though while I admit my ears are bad, I really can't hear much of a difference. Well, until next time.