News

bsnes v068.10 beta released2010-09-02

I've uploaded a technical preview to Google Code. This release contains only the source code, and profile-optimized bsnes-performance binary. Windows users will need the runtime DLLs from v068 official to use this.

This release is only to demonstrate a new S-PPU renderer I have been working on. The goal is to use it only for the performance core. It is feature complete, with a few caveats. The most noticeable is that save state support is not implemented yet, but it also handles mosaic support in a less precise manner to speed things up. Under the hood, it is still a scanline renderer, but each scanline pass renders whole tiles at a time rather than iterating over every pixel. It is also designed more like the accurate PPU in terms of code layout, with each component of the PPU isolated to its own class. As a result, the performance build as a whole runs 13.5% faster now; which means the new S-PPU is roughly 27% faster than the old one.

The bad news is that there's really nothing left to optimize anymore, unless I sacrifice more accuracy.

   

[ Download ]

bsnes v068 released2010-08-21

This release officially introduces the accuracy and performance cores, alongside the previously-existing compatibility core. The accuracy core allows the most accurate SNES emulation ever seen, with every last processor running at the lowest possible clock synchronization level. The performance core allows slower computers the chance to finally use bsnes. It is capable of attaining 60fps in standard games even on an entry-level Intel Atom processor, commonly found in netbooks.

The accuracy core is absolutely not meant for casual gaming at all. It is meant solely for getting as close to 100% perfection as possible, no matter the cost to speed. It should only be used for testing, development or debugging.

The compatibility core is identical to bsnes v067 and earlier, but is now roughly 10% faster. This is the default and recommended core for casual gaming.

The performance core contains an entirely new S-CPU core, with range-tested IRQs; and uses blargg's heavily-optimized S-DSP core directly. Although there are very minor accuracy tradeoffs to increase speed, I am confident that the performance core is still more accurate and compatible than any other SNES emulator. The S-CPU, S-SMP, S-DSP, SuperFX and SA-1 processors are all clock-based, just as in the accuracy and compatibility cores; and as always, there are zero game-specific hacks. Its compatibility is still well above 99%, running even the most challenging games flawlessly.

If you have held off from using bsnes in the past due to its system requirements, please give the performance core a try. I think you will be impressed. I'm also not finished: I believe performance can be increased even further.

I would also strongly suggest Windows Vista and Windows 7 users to take advantage of the new XAudio2 driver by OV2. Not only does it give you a performance boost, it also lowers latency and provides better sound by way of skipping an API emulation layer.

Changelog:
  • Split core into three profiles: accuracy, compatibility and performance
  • Accuracy core now takes advantage of variable-bitlength integers (eg uint24_t)
  • Performance core uses a new S-CPU core, written from scratch for speed
  • Performance core uses blargg's snes_dsp library for S-DSP emulation
  • Binaries are now compiled using GCC 4.5
  • Added a workaround in the SA-1 core for a bug in GCC 4.5+
  • The clock-based S-PPU renderer has greatly improved OAM emulation; fixing Winter Gold and Megalomania rendering issues
  • Corrected pseudo-hires color math in the clock-based S-PPU renderer; fixing Super Buster Bros backgrounds
  • Fixed a clamping bug in the Cx4 16-bit triangle operation [Jonas Quinn]; fixing Mega Man X2 "gained weapon" star background effect
  • Updated video renderer to properly handle mixed-resolution screens with interlace enabled; fixing Air Strike Patrol level briefing screen
  • Added mightymo's 2010-08-19 cheat code pack
  • Windows port: added XAudio2 output support [OV2]
  • Source: major code restructuring; virtual base classes for processor cores removed, build system heavily modified, etc.

[ Download ] •  [ Discuss ]

Upon further reflection2010-08-14

Thinking about the situation more, I really don't want to eliminate the current bsnes profile in favor of one more accurate core and one faster core. There's really a need for three profiles, and that is just too much to keep separate.

I have re-merged the accurate cores with the fast cores, and have created three compilation profiles: research (more accurate than v067), baseline (the same as v067) and performance (50% faster than v067). The goal is to allow this to be a run-time option in the next release.

Example:

I can't keep this a secret2010-08-10

Some pictures. Hint: look at the frame rates.

bsnes v067
bsnes v067.10
bsnes v067.11
bsnes v067.10 on an Atom netbook

EDIT: added v067.11 screenshot.

asnes announced2010-08-09

It's a long story, so I've posted an explanation of the new project in an article, A Fork in the Road.

It will be a while before I make an actual release.

bsnes v067 released2010-08-01

I apologize, bsnes v066 had a small error in the source that resulted in the PPU not synchronizing properly to the CPU. This bug was not exposed in the images I use to test releases. I have also updated the cheat code database, which is maintained by mightymo.

[ Download ]    [ Discuss ]

bsnes v066 released2010-07-31

Major features in this release are: serial controller emulation, a brand new scheduler that supports multiple simultaneous coprocessors, and accuracy improvements.

The serial controller is something devised by blargg. With the proper voltage adjustments (5v-9v), it is possible to wire an SNES controller to a serial port, which can then be used for bidirectional communication between the SNES, and (usually, but not only) a PC. The support in bsnes was added so that such programs could be debugged and ran from within an emulator, and not just on real hardware.

The scheduler rewrite was meant to allow the combination of coprocessors. It was specifically meant to allow the serial controller thread to run alongside the SuperFX and SA-1 coprocessor threads, but it also allows fun things like MSU1 support in SuperFX and SA-1 games, and even creating dev cartridges that utilize both the SuperFX and SA-1 at the same time. The one thing not yet allowed is running multiple instances of the exact same coprocessor at the same time, as this is due to design constraints favoring code inlining.

There are two important accuracy updates. The first is that when PAL video mode is used without being in overscan mode, black bars are shown. Emulators have always shown this black bar at the bottom of the screen, but this is actually incorrect. resxto took pictures from his PAL TV that shows the image is in fact vertically centered in the screen. bsnes has been updated to reflect this.
Also interesting is that I have backported some code from the dot-based PPU renderer. In the game Uniracers, it writes to OAM during Hblank, and expects the write to go to a specific address. In previous releases, that address was hard-coded to go to the required memory location. But the way the hardware really works is that the write goes to the extended attribute address for the last sprite that the PPU fetched, as the PPU is still asserting the OAM address bus. Now, due to the precision limitations, I was not able to also port timing access during the active display period. However, this is sufficient to at least remove the last global hack from the older, speed-focused scanline renderer.

[ Download ]    [ Discuss ]

SNES Preservation: USA gameset completed2010-07-31

I now have all USA titles. I appreciate the very generous donations I've received, which allowed this to be possible. At this time, I am not looking for any cartridges or donations. Once I complete the archival process for all of the USA games, I should be able to sell the complete set and use that money to then begin targeting the other regions. I do not want to take on other regions until the USA region is finished. Expect to hear more about this in the coming weeks.

BSV page and draft specification published2010-07-20

You can access that under the programming section.

As an aside, I've updated the SNES preservation project games list. I am down to only 60 games needed; but the prices have become prohibitive for the remaining titles. I can offer up to $10 for any of the remaining titles upon delivery.

embrace v01 released2010-07-18

I've posted the binaries and source code to embrace v01 up on Google Code.

embrace is a BSV editor, where BSV stands for brace-separated-value. It is meant as a replacement for CSV, to fix the problem that there is absolutely no meaningful standard for the CSV file format. BSV, by comparison, has a very rigid, strict format; and yet is still very simple to parse.

An example BSV file can be downloaded here.

I am a bit pressed for time at the moment, so I will post a textual specification up on a separate page a little later this evening.