Here's the news post and changelog:
Get it here, people.The main change for this release is what I talked about in my last post. Because of this, I can finally time exact cycle positions for writes to take effect within the S-PPU core. So far, I've only added OAM reset at Y=240,H=10 and OBSEL fetching at H=1152. The latter hasn't been verified on hardware, but it does fix the single black scanlines evident in the intros to Mega Lo Mania and Winter Olympics. Previously, I had a setting named ppu.hack.obj_cache ... this essentially cached OBSEL at H=512, and without it, at H=512+1364. The setting was needed to fix these games, but would then cause sprite flickering in other games, such as Ninja Warriors and Lord of the Rings. With the new timing, all of these games work correctly with the same timing.
I should note, this is still a scanline-based renderer at its core. I'm not aiming for, nor do I believe it is possible to, obtain 100% perfect rendering compatibility with this approach. But I will continue to expand its cycle-level capabilities, as it will no doubt be much faster than a true, fully cycle-based S-PPU renderer.
All of that said, the extra state logging, decoupling of timing code in the most critical section of the emulator, etc means that a small speed hit was inevitable. I mitigated it as much as I could, but it appears that Core processors suffer a ~6% speed hit from the previous version. Oddly enough, AMD processors seem to be largely unaffected by the change.
I know these speed hits continue to stack, but that's the nature of the beast. I've added a link to tukuyomi's SNES emulator archive. If you're not able to get full speed, I'd strongly recommend using an older version of the emulator. v017 in particular is nearly twice as fast as the current version, while still being very close to bug-free.
On the bright side, the new synchronization model is 100% compatible between both the scanline renderer and a future cycle renderer. That will allow me to avoid a lot of timing code duplication, and it will also allow me to continue to offer a scanline renderer in future builds. And once I get the cycle renderer perfected, I would like to team up with some other people and work on a fast and accurate emulator.
Lastly, I'm changing up how the emulator is distributed. The readme and license files are now embedded inside the executabe, accessible from the help menu. As it is no longer required to include these text files, I can distribute the executable itself directly, ala uTorrent. For sites that mirror bsnes, but do not want to host it as a direct EXE file, feel free to put it inside a ZIP archive (along with a language locale file, if you wish.)
* eliminated S-DD1 DMA enslavement to the S-CPU; this allows the S-DD1 to behave more like the real chip, and it also simplifies the S-CPU DMA module
* eliminated S-PPU enslavement to the S-CPU; all processor cores now run independently of each other
* added cycle-level S-PPU timing for OAM address reset and OBSEL; fixes scanline glitches in Mega Lo Mania and Winter Olympics
* removed ppu.hack.* settings; as they are no longer needed due to above changes
* corrected VRAM tiledata cache bug; fixes Super Buster Bros v1.0 reset glitch
* added memory export and trace logging key bindings to user interface
* removed WAV logging (to trim the emulation core)
* embedded readme and license texts inside executable
* simplified S-CPU, S-SMP flag register handling
* source code cleanup for S-CPU timing module
* GUI-Linux: added style improvements to the listbox and combo box controls
* GUI-Linux: finally added filetype filter support to the file open dialog
* GUI-all: shrunk configuration panel [FitzRoy]
* GUI-all: modified paths panel descriptions for clarity [FitzRoy]