RedGuy’s SuperFX implementation has been around for a while now as an “unofficial” build.
I merged it into the official firmware just now. Some testing has to be done and probably adjustments have to be made. Expect a release before long. ;)
Firmware 0.1.7e is out. Download here! This is mainly a long overdue maintenance release.
- Fixed a long standing critical DAC timing quirk causing audio distortion with MSU1 on any revision except Rev.G
- Fixed a clock glitch on SD card access from FPGA that could lead to audio/video distortion with MSU1
- Properly map SRAM to Banks f0-ff instead of f0-fb in Mode 20 (“LoROM”) memory map
- Added support for headered bsxbios.bin too
- Slight SD card read performance optimization for MSU1 (avoid unaligned reads)
- Change initial SRAM fill value (courtesy of devinacker) – fixes Ken Griffey Jr., Ou-Chan, and possibly other games that don’t perform a proper SRAM content sanity check
- Always start game on PPU2 field 0. This doesn’t fix any known issue but is put in for compatibility’s sake.
Firmware 0.1.7d is out. Get it here! Lots of critical fixes and a little surprise in this one.
- reworked the in-game hook code again, squeezing out a couple more CPU cycles – compatibility improved further. The in-game hook compatibility list has been updated accordingly!
- BS-X: new bsx page file by LuigiBlood!
- contains a proper channel map, notably fixes Fuurai no Shiren: Surara o sukue and most likely more games
- revives the town :)
- BS-X: better detection for script-type ROMs (e.g. various magazines)
- Cx4 SKIP instruction timing sped up a bit. Core felt a bit too slow. (this is a makeshift “fix” until I implement the proper Cx4 instruction timing I recently figured out)
- fixed occasional black screen after soft reset (L+R+Select+Start)
- in-game hook memory area visibility quirks fixed in various situations, notably fixes BS Kirby no Omochabako: Pinball
- BS-X: fix PSRAM corruption on SNES WRAM writes, fixes a number of games, notably BS Kirby no Omochabako: Pinball (tough one)
- PPU2 H/V count odd/even read flag is reset on ROM load, this fixes games that depend on it when run after games that leave it in a dirty state – notably audio glitches and freezes in Super Punch-Out when run after Fuurai no Shiren.
- SPC Player: Fixed a long-standing transfer corruption bug that occurred because the original bulk transfer routine didn’t account for CPU stalls by HDMA (which is abundant in the sd2snes menu). This fixes occasionally missing instruments, corrupted samples etc.
- fixed an occasional deadlock on bootup where the menu would hang at the “Loading…” screen.
- fixed hard freeze when selecting a file immediately after disabling the “Hide file extensions” option
- fixed persistent hard freeze in recent games list handling when running games with long path names (> ~120 characters)
- revert DAC I2S timing to pre-v0.1.7c behaviour, hopefully reducing audio glitches for sd2snes Rev.G units
- fixed corrupted file list display after playing an SPC file with a scrolled file name
- cosmetic changes:
- “Loading” window is replaced by status bar notification to be less disruptive with very short load times
- configuration settings no longer have the wrong color when changed
Firmware 0.1.7c is out. Get it here!
- major overhaul of the in-game hook code, with more help from the FPGA, to significantly reduce CPU footprint. This improves hook compatibility with a variety of games.
- in-game hook: avoid disruption of manual controller reads (fixes controls in Super Star Wars games)
- new option: “Hide file extensions” (effective after next directory change)
- do not silently fail to load saved games when the sd2snes/saves folder does not exist (create the folder instead)
- do not silently fail to load/save cheat files when the sd2snes/cheats folder does not exist (create the folder instead)
- Cx4 core now runs at exactly 20MHz
- MSU1: avoid missed control register status changes on rapid rewrites (fixes FF3 Dancing Mad, Zelda FMV missing audio)
- fix auto region patch timing (hopefully)
- fix DSP1 header detection (fixes Ballz 3D JPN)
- add reset hook to boot games on start of frame only (fixes Boogerman PAL)
- clear entire SPC700 RAM (do not spare IPL area) – fixes echo artifacts in many games
- minor cosmetic changes:
- resize SPC player loading window
- prevent flickering letters on System Information screen
The in-game hook compatibility chart will be updated shortly.
I’ve started a new page to list games that have issues with the in-game hooks: In-game hook compatibility
Columns will be added to the right with upcoming firmware releases to reflect changes (hopefully improvements!) in compatibility.
So far the list is fairly short and I probably forgot to add some of them based on reports I got. Contributions are welcome. ;)
Firmware 0.1.7b is out with a number of fixes. Get it here!
- BS-X boots correctly again after a soft reset.
- OBC1 works again (accidentally was permanently disabled)
- Fixed garbled time on initial clock setting (new unit or battery replacement)
- fixed a firmware crash when saving after using the serial command line
- sd2snes folder is always hidden again
Another maintenance release, yay! Get it here.
This fixes a critical bug and two minor bugs reported yesterday:
- Firmware locked up when loading Zelda 3 after soft-reset. I am surprised that it actually worked so well with all other games.
- Auto Region Patch setting wasn’t saved properly.
- Satellaview custom time had a garbled default value (year 1035). The default has now been fixed. If you’d like to apply it you can delete your config.yml or just the “BSXTime” entry from it to load the new default.
Obligatory service announcement! A bug snuck into the firmware where the ROM file could get overwritten with your save data when saving or resetting. On the bright side you’d never lose your save data… ;)
I just replaced the download with the fixed version. If you already downloaded v0.1.7, please re-download and replace it on your card. Sorry for the inconvenience!
OK, so I decided to release v0.1.7 ;) There is one feature missing out from the milestone (interactive cheat menu) but I really didn’t want to delay the release EVEN longer. Grab it here!
Here’s what’s new since preview 4:
- Configuration menu. All settings are now available through the menu. Changes take effect immediately after confirming a setting with the A button. It can use some polish but should work fine. Note that the Video Mode settings are only effective on SuperCIC modded consoles.
- SRM files (save files) are now stored in sd2snes/saves/<romname>.srm – existing save files will be moved upon save, there is no batch migration.
- Game fixes:
- DMA de-initialization has been reintroduced and changed from $00 to $ff. This reflects a real SNES better and hopefully finally fixes sprite corruption with SGnG and SSF2, AND title screen glitches/crashes with Pocky&Rocky US.
- APU RAM is initialized to $AA (same as specific model SNESes). This fixes stuttering drums due to bugs in sound programming in the intro of Soul Blader on some consoles (not just 1CHIP!)
- Data written by the SNES CPU is sampled to obtain valid data on certain time points. This should fix Mario Kart track/driver glitches everywhere.
- All faulty multicycle constraints from Cx4 have been removed. There should be no random “register file error” messages or similar anymore.
- MSU1 enhancements:
- MSU1 volume boost: In case MSU1 audio is too quiet you can now increase volume in several steps. Available via Configuration->Chip Options.
- Interpolation filter to reduce aliasing, resulting in cleaner sound
- Fixed a bug where volume calculation introduced DC offset to the waveform output. This eliminates clicking or humming on volume changes/fades.
- Changed MSU1 audio playback rate to exactly 44100Hz to match bsnes/higan implementation. Sound that syncs on bsnes should now also sync properly on sd2snes.
- MSU1 resume feature implemented (Thanks to Michaël Larouche!)
- Missing ROM files are automatically removed from the “Recent Games” list. (Thanks to borti4938!)
- Background text is now properly greyed out in the SPC player
- Ultra16 awareness (mostly thanks to borti4938!):
- Ultra16 serial number and autoboot setting is displayed in the System Information screen.
- Exiting from the SPC player doesn’t crash the menu anymore on Ultra16 consoles.
- Soft reset is prolonged a bit on Ultra16 consoles so you have the opportunity to release the controller buttons, not entering the Ultra16 menu by accident.
- Auto region patching is disabled on Ultra16 consoles so it doesn’t interfere with the Ultra16’s own facilities.
Preview 4 of the notorious 0.1.7 firmware is available. Download here!
Changes in no particular order:
- Prevent software from using uninitialized DMA ch.0 transfer to corrupt the stack (fixes Nightmare Busters)
- Disable PPU region patching during the menu
- MSU1: Stop audio playback on reset (fixes static buzzing noise in games after soft-resetting out of an MSU1 game)
- Cx4: Add a switch for original/fast mode. “Original” mimics the Cx4 timing better (Megaman doesn’t die in MMX2 attract mode) whereas “Fast” uses a single CPU cycle for every instruction, improving frame rate when drawing polygons (rotating head in MMX2 intro).
- Hide dot files and directories again (Regression in 0.1.7).
- “Stealth Mode” for in-game hook memory area hides the memory region used by in-game routines from games. (Fixes Equinox, Lion King)
- In-game hooks are a bit less intrusive in terms of CPU time, hopefully reducing glitches a bit with problematic games.
- System Information screen shows file system usage on card.
- Slow down DSPx a bit to better match original speed (should have no noticeable effect)
- Font height is reduced by one pixel to increase readability (lines of text are more distinguishable). This has an effect on the font style so some might not like it…? ;)
- Background is greyed out when a window is active in foreground
- Menu now uses the dynamic hierarchical menu system, with automatic calculation of window dimensions, etc. Not much of it can be seen at the moment due to the lack of menu entries.
- Experimental SRAM mapping for Cx4
- FPGA: adjust address sampling time for “end-of-cycle” events. Should help primarily with DSP1 glitches.
- MSU1: initial volume now adheres to the latest spec (initial volume = 0) so it must be initialized by software to the desired level. This actually breaks my own example player :D I will post an updated version of it shortly.
- Text file based configuration. Allows you to change some settings while I procrastinate writing the config GUI :P The following options are currently implemented (taken directly from the config file, sd2snes\config.yml, as generated by sd2snes, along with their default values):
# Allow SuperCIC Pair Mode (required for video mode setting)
# Video mode (0 = 60Hz, 1 = 50Hz, 2 = Auto (game only))
# Satellaview Settings
# BSXUseUsertime: use user defined time instead of real time
# BSXTime: user defined Satellaview broadcast time (format: YYYYMMDDhhmmss)
# Enable PPU region flag patching
# IRQ hook related settings
# EnableIRQHook: Overall enable IRQ hooks (required for in-game buttons & WRAM cheats)
# EnableIRQButtons: Enable in-game buttons (en/disable cheats, reset sd2snes...)
# EnableIRQHoldoff: Enable 10s grace period after reset before enabling in-game hooks
# Screensaver settings
# EnableScreensaver: Enable screensaver
# UI related settings
# SortDirectories: Sort directories (slower but files are guaranteed to be in order)
# Enhancement chip settings
# Cx4Speed: Cx4 core speed (0: original, 1: fast, all instructions are single cycle)
- Text file based cheat support. Cheat files are expected in YAML format with the filename “sd2snes\Cheats\<romname>.yml“. Multiple codes per cheat are supported. The expected data structure is as shown in this example:
- Name: Invincibility
Code: "AAAA-AAAA" # this is an example GG code
- Name: Infinite Money
- "7E0345AA" # this is an example PAR code
- "809AB001" # and another one
Cheats are applied immediately after loading a ROM (if they are enabled). 6 ROM patches and 26 RAM patches can be active simultaneously. Currently there is no sanity check so things probably won’t work correctly if you exceed these limits ;) At the moment sd2snes will re-write the cheat file every time it is loaded so its look will change after the first run. GameHacking can now export cheats in sd2snes format. Awesome!
- Minor cosmetic changes.