This release adds SPC7110 emulation, without the need for graphics packs!!, and a rewritten S-RTC (real-time clock) emulator.
SPC7110 support means that Far East of Eden Zero, FEoEZ: Shounen Jump Edition, Momotarou Dentetsu Happy and Super Power League 4 are now all fully playable. I will warn you, the emulation is very slow in this version -- while most areas of each game will run at the same speed as other games, there are a few peak moments where speed will drop by up to ~50%. The reason for the slow-down is that I am currently uncertain how to determine the amount of data to decompress in advance, so I default to the maximum amount possible. The reason I am releasing now anyway, is because I beleive in the "release early, release often" paradigm. It will likely take me a few weeks to finish researching this chip, and I didn't want to keep the work I had private during that time. But rest assured, bsnes v034 should feature much faster SPC7110 emulation.
neviksti, Andreas Naive and jolly_codger worked non-stop on the SPC7110 decompression algorithm for the past two weeks. caitsith2 provided valuable data to the effort. I only wish that I could've been of some use, but alas, I had no role in this. In the end, it was neviksti who managed to crack all three(!!) compression modes of this chip, which turned out to be a customized 8-bit QM-coder with a prediction model. You can read more about this here. I would also like to thank Dark Force and John Weidman (aka The Dumper) for their research notes on the SPC7110 register interface.
For those who don't understand the hoopla about figuring out this compression algorithm when we already had graphics pack simulation, I should note that we have since found a few errors in these packs. Not to mention, you no longer need ~4-16MB packs for each game you wish to run. They work like any other game now. Better still, the chip can now be used to compress new graphics, eg for any future translation efforts on these titles.
The real-time clocks in both Far East of Eden Zero and Dai Kaijuu Monogatari 2 will now save a ".rtc" file in your save folder, which contains the clock as set by the video game, as well as a timestamp from your computer when the time was last updated. It uses the difference between the saved timestamp and current time to update the time. This allows you to specify any time you like, whereas previously bsnes would just use your computer's current time, ignoring the time you set in-game. It also allows the "round clock by 30 seconds" option in both games to work. I avoided this before because this method makes supporting daylight savings time and such impractical, although I should note that the original hardware did not support DST, either. This method was required to pass the SPC7110 tests, and is overall much more faithful to how the original chips worked.
Once again, I'd really like to personally thank neviksti for his tireless efforts. Eliminating graphics packs from SNES emulation was one of my primary reasons for getting involved in the SNES emulation scene. That neviksti managed to crack this algorithm means a lot to me. Thank you so much, neviksti. This release is dedicated to you, now go get some sleep ;)


The reason for the lack of updates in the past month is because I am taking a short break from working on bsnes. I'm using this time both to relax a bit, and to work on some side projects I've put off for far too long. One of which is a sprite viewer for Windows / Linux, another is polishing up my cross assembler, xkas.
I'm not sure how long I'll be taking a break from bsnes right now, but it will likely be a few months. I'll of course work on any serious issues that arise right away, as well as merge any patches provided to me.
Oh, and I wanted to say thanks publicly to Marty/Nestopia and AamirM/Regen for adding UPS soft-patching support to their respective emulators -- it's a huge help. Soft-patching emulator support is essential for this format to catch on. I believe Nach is intending to add UPS support to VBA-M in the future as well, but don't quote me on that.
I've posted new versions of xkas, hiro and libco to the programming page.
For xkas v0.11, the cross assembler, I've added GBA THUMB support, fixed a bug involving apostrophes inside comments, and added namespace support to defines. Windows and Linux binaries are supplied along with the source code.
For hiro v0.005, the GUI toolkit library, I've added improved font handling, an improved message passing system, and better consistency between ports.
For libco v0.13, the cooperative-multithreading library, I've added improvements by blargg to the x86 and x86-64 targets, and simulataneously ported those two targets to C, using inline assembler for both GCC/MinGW and Visual C++. This allows the platform to be automatically selected at compile-time, among other advantages.
Very sorry for the inconvenience. Some last minute bugs snuck into the last release.
Also, I've added three new localizations: French (by tukuyomi), Portuguese - Brazillain (by Hunter) and Russian (by Hatsuyuki). Dutch, Finnish and German should follow shortly, so be sure to check back in a week or so if you'd like one of those.
I forgot to mention this on the last update, but for any sites hosting the bsnes executable, you are free to distribute the archive with any locale you'd like. In fact, I'd prefer if you did, as it makes it easier for those who cannot read English.
Four more localizations: Dutch (by ShadowFX), German (by creaothceann), Spanish (by wushu) and Italian. I actually received two Italian translations. One by Lorenzo Gatti, and one by Vecna. You can get Lorenzo's here, and Vecna's here.
I've updated the simplified Chinese translation by Itol and the Italian translation by Lorenzo Gatti.
A new version of bsnes has been released. This version includes multiple user interface enhancements, including localization support.
If so, I'd certainly appreciate it. So far, I have volunteers for Dutch, Finnish, French and German. I also created my own very mediocre Japanese localization, but I'm hoping someone with more experience can help me improve the Japanese one.
You can view my reference Japanese translation here. Encoding is UTF-8, as it needs to be for all localizations.
Note that some strings are used in more than one place, yet only appear in the config file once. Other than that, I don't mind if translations are not 100% literal, so long as they get the general idea across well enough.
Lastly, note that I will, as a matter of necessity, be changing the GUI strings with each new release, so translations will typically need to be updated for each new version. But we can at least use older versions for reference. The above locale.cfg file is finalized for the upcoming v032 release. If you need to know where the strings appear, simply run bsnes v031, as they're almost identical. I can also send you a v032 WIP to test with, if you like.
If you're interested, simply e-mail me a completed locale.cfg file to setsunakun0 at hotmail, or stop by the bsnes board and post there. Many thanks in advance!
Update:
Hatsuyuki has provided a Russian translation. I'd also like to thank
neoforma for also offering a Russian translation. Oh, and I've updated
the Japanese locale file above to fix some glaring mistakes. I also
forgot to mention that I received a lot of help from reading z_adorer's
awesome bsnes notes, found
here.
Thank you, z_adorer!
... hahahah. Yeah, just kidding. But seriously, I did recently install OS X 10.5.2. I wrote up an article on it, which contains a nifty restart patch, for those interested. You can check it out here.
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.
Okay, I've rewritten my UPS patcher and library. I've fixed a few bugs, improved usability by an order of magnitude, and completely rewrote the file handling. It will now use file-based memory mapping, rather than the old file buffering trick. This should help speed out a lot. I also changed the name, as the patcher is not the specification. The name is an adage to one of the most well known and polished IPS patchers around.
The only small concern right now is that applying a patch requires allocating memory the size of the destination file. This means patching a 64MB image will require 64MB of memory. This will be addressed in a future release, but it shouldn't present a real problem, given the amount of memory available on today's computers.
Also, this release works on Linux/GTK+ and Windows 2000+ only. It will not run on Windows 9x, sorry. I'll have a command-line parser available shortly, and others should have Win9x UI patchers in the future.