Browsed by
Tag: firmware

Firmware v1.11.0 released

Firmware v1.11.0 released

This release has been long overdue. In the past years things had become quite chaotic for me, and I have been able to achieve much less then I had anticipated to. In doing so I have not only let all of you down but KRIKzz as well. For that, I would like to offer my sincere apologies.

This release does not contain any new features with respect to v1.11.0b1 but some bug fixes and support for a new hardware platform (FXPAK Pro Rev. D).

FXPAK Pro Rev. D is a hardware refresh replacing the main controller due to supply chain issues. The new controller is roughly as powerful as the old one, give or take a few percent. While the CPU is basically the same, all the peripheral devices need to be programmed differently, and that is what makes up the bulk of the changes in this release while having no positive impact on the user other than maintaining the status quo. Ah well 🙂

All other parts, including the FPGA, remain the same.

Download here: https://sd2snes.de/files/sd2snes_firmware_v1.11.0.zip

Since the previous release was a beta, the following list of changes is compiled with respect to v1.10.3, not v1.11.0b1 so the rest of this post will be largely identical to the v1.11.0b1 one. New changes from v1.11.0b1 to v1.11.0 are listed at the top respectively.

The tribute screen for Near is still contained in this release, even if it has been a long time now. I wanted it to be at least in one official release.

Features added:

  • First firmware release to support FXPAK Pro Rev. D
  • [All] USB (usb2snes) support by RedGuy
  • [All] save state support (via USB/savestate2snes) by acmlm, total, Myria, RedGuy, FURiOUS, ikari_01
  • [All] stand-alone save state features by FURiOUS
  • [All] some compatibility improvements and optimizations for stand-alone save states by ikari_01
    • Add support for YAML list items for multiple savestate_fixes entries per game
    • Add support for simple bitwise operations on savestate_fixes patches
    • Add support for verbatim code execution on savestate_fixes patches – notably fixes Star Ocean (decompressed) save states (however the save state hook still needs CPU time optimization to prevent music glitches in Star Ocean.)
    • Add IRQ support on top of NMI for the save state hook – this enables save states on Out Of This World and possibly other games that only use IRQ. Also fixes controller input capture on a number of games so the game-specific input hacks could be eliminated.
    • Moved save state code outside of the USB hook area to make room for USB hook execution.
  • [All] SGB support by Redacted173.
  • [All] favorite games list by freelancer42

Fixes:

  • [All] Fixed savestates crashing occasionally when loading (and sometimes saving)
  • [All] Fixed Star Fox locking up during sortie sequence when in-game hooks are enabled
  • [All] Updated FURiOUS’s Savestates Readme to reflect changes pertaining to In-game hook
  • [All] Fixed data caching bug in MSU1 data extension which could cause wrong data to be streamed
  • [All] Savestates: do not try to capture data that is already in cartridge space anyway (e.g. SRAM). Fixes text distortion in Near’s Bahamut Lagoon translation when loading a state.
  • [All] Fixed YAML config parser to support comment signs after list start items
  • [All] Fixed SNES open-bus contamination (fixes sprite flickering in Near’s Bahamut Lagoon translation, certain speed runs that rely on open bus behaviour)
  • [All] (hopefully) fixed rapid data line toggling sometimes resulting in address line glitches, causing random crashes in extreme cases, and occasional garbled graphics on SMRPG among others
  • [All] Fixed data integrity problems when loading BSX games

Known issues:

  • Due to integration of the savestate handler into the in-game hook, the SNES CPU cycle cost for the in-game hook has increased. This reintroduces some issues when in-game hook+savestates are enabled, such as a corrupted Equip menu in Final Fantasy III/VI. I am planning to do an overhaul of the savestate code which will address this issue as well.
  • When in-game savestates are enabled and set to the default button combination, pushing the buttons to temporarily or permanently disable the in-game hook will result in a crash. This happens due to overlap with the savestate button combination.
  • When in-game savestates are enabled and the “load state” button combination is pressed, the handler will try to load a state even if no state exists yet for the current game. This will lead to a crash and sometimes results in a still image being displayed from a previously played game’s savestate.

Usage Notes:

SGB

Note: SGB support requires at least two additional supplementary files:

  • sgb#_boot.bin: The internal boot ROM of the SGB-CPU
  • sgb#_snes.bin: the SGB BIOS ROM that runs on the SNES when you use the SGB.
  • ‘#’ in the filename is replaced with a 1 or 2 depending on the BIOS version you select in the SGB Settings menu, e.g. if you select BIOS version 1 it will look for sgb1_boot.bin / sgb1_snes.bin.
  • The status of the required files can be viewed on the System Information screen.
  • SGB In-game hooks and save states only work when the files match known samples.
  • Please also refer to README.SGB.txt in the sd2snes folder.

Save States

Important notes:

  1. Save states are currently only available on games that do not use expansion chips.
  2. Save states are not currently expected to be fully compatible with 100% of games. If you find a game that does not work with save states, please report – I will be working to improve compatibility.
  3. Save states do not include the state of the SNES’s audio subsystem (APU) due to technical restrictions of the SNES hardware design. Therefore music, sound effects, etc. will remain unchanged after loading a state. Some games maintain close synchronisation between game logic and APU state, requiring (usually) a 1-byte patch to bring them up to date with the APU. These patches are maintained in the file savestate_fixes.yml. For anyone proficient in debugging SNES games who wants to add their own patches, possible formats for patches are outlined in the file.
  4. If you succeed in making a save state fix patch for a new game, please share it 🙂
  5. To use standalone (non-USB) in-game save states, “In-game hook” must be enabled in the “In-game Settings” menu, and “In-game savestates” must be enabled in the “Savestates Settings” menu.
  6. Please also refer to README.Savestates.FURiOUS.md in the sd2snes folder.

When the “Savestate slots” option is enabled, one of four save state slots can be selected in-game using a button combination.

“Load delay (frames)” is used to set a delay after loading a save state before returning control to the game. This gives you some time to let go of the save state buttons and get your fingers back into the normal playing position.

Save states can be saved and loaded in-game using button combinations on controller 1:

ButtonsFunction
Start+LLoad state
Start+RSave state
Select+D-PadSelect save state slot

NOTE: In-game Savestates button combinations can be overridden per game. Please check savestate_inputs.yml for any entries if the usual buttons aren’t working for you on a specific game.

Using the D-pad one of four save state slots may be selected (Default: Slot 1):

ButtonsSlot number
Select+UpSlot 1
Select+RightSlot 2
Select+DownSlot 3
Select+LeftSlot 4

Favorites List

The favorites list can be viewed from the Main Menu (X button).

To add a game to the favorites list, simply navigate to it in the file browser and press Y to pull up a context menu that displays actions that can be performed on the current selection. (Right now this menu only contains a single entry – “Add to favorites”.

To remove a game from the favorites list, open the “Favorite games” list from the Main Menu, select the entry to remove, and again use the context menu (Y button) and select “Remove from favorites”.

Reporting issues

Please report any issues preferrably on Github, or in the comment section, on Discord (#fxpak-general), or Twitter (@orzvektor).

ATTN: Anyone who received their FXPAK Pro just now

ATTN: Anyone who received their FXPAK Pro just now

It was brought to my attention that the newly shipped FXPAK Pro carts only come up with a black screen. This is due to the currently released firmware being incompatible with the new hardware. This is simply bad timing and an oversight on my part.

I was crunching to make USB work with the new Rev.D hardware in the past three weeks – at the same time failing to realize that the cartridges don’t ship with cards containing the firmware build I sent to krikzz for burn-in testing earlier. The new hardware, besides using a new microcontroller, also needs slightly adjusted FPGA core files due to differences in clocking so the existing ones are not compatible.

I was going to release the 1.11.0 firmware right about now anyway but I’m trying to tackle a savestates issue first, where it sometimes crashes after saving or loading a state in standalone savestate mode.
QUSB2SNES / SaveState2Snes appears to work fine though.
Here is the current build. I will publish a proper release within the next few days.

Note: This is for Rev.D owners only who have been currently left with a non-operating cartridge. Final release with support for all sd2snes/FXPAK Pro versions will follow up within the next few days.

https://sd2snes.de/files/sd2snes_firmware_v1.11.0b2-RevD.zip

Please let me know if this solves your immediate issues.

Again, I’m sorry for the inconvenience and hassle caused.

Firmware v1.11.0 beta 1

Firmware v1.11.0 beta 1

At long last I am starting to feel confident about this release. Due to the amount of features added and since a lot of time passed since the release of v1.10.3 I figured it might be wise to do a beta version first.

As such, use at your own peril. 😉

Download here: https://sd2snes.de/files/sd2snes_firmware_v1.11.0b1.zip

Features added:

  • [All] USB (usb2snes) support by RedGuy
  • [All] save state support (via USB/savestate2snes) by RedGuy
  • [All] stand-alone save state features by FURiOUS
  • [All] some compatibility improvements and optimizations for stand-alone save states by ikari_01
    • Add support for YAML list items for multiple savestate_fixes entries per game
    • Add support for simple bitwise operations on savestate_fixes patches
    • Add support for verbatim code execution on savestate_fixes patches – notably fixes Star Ocean (decompressed) save states (however the save state hook still needs CPU time optimization to prevent music glitches in Star Ocean.)
    • Add IRQ support on top of NMI for the save state hook – this enables save states on Out Of This World and possibly other games that only use IRQ. Also fixes controller input capture on a number of games so the game-specific input hacks could be eliminated.
    • Moved save state code outside of the USB hook area to make room for USB hook execution.
  • [All] SGB support by Redacted173.
  • [All] favorite games list by freelancer42

Fixes:

  • [All] Fixed data caching bug in MSU1 data extension which could cause wrong data to be streamed
  • [All] Savestates: do not try to capture data that is already in cartridge space anyway (e.g. SRAM). Fixes text distortion in Near’s Bahamut Lagoon translation when loading a state.
  • [All] Fixed YAML config parser to support comment signs after list start items
  • [All] Fixed SNES open-bus contamination (fixes sprite flickering in Near’s Bahamut Lagoon translation, certain speed runs that rely on open bus behaviour)
  • [All] (hopefully) fixed rapid data line toggling sometimes resulting in address line glitches, causing random crashes in extreme cases, and occasional garbled graphics on SMRPG among others
  • [All] Fixed data integrity problems when loading BSX games

Usage / Testing Notes:

SGB

Note: SGB support requires at least two additional supplementary files:

  • sgb#_boot.bin: The internal boot ROM of the SGB-CPU
  • sgb#_snes.bin: the SGB BIOS ROM that runs on the SNES when you use the SGB.
  • ‘#’ in the filename is replaced with a 1 or 2 depending on the BIOS version you select in the SGB Settings menu, e.g. if you select BIOS version 1 it will look for sgb1_boot.bin / sgb1_snes.bin.
  • The status of the required files can be viewed on the System Information screen.
  • SGB In-game hooks and save states only work when the files match known samples.
  • Please also refer to README.SGB.txt in the sd2snes folder.

Save States

Important notes:

  1. Save states are currently only available on games that do not use expansion chips.
  2. Save states are not currently expected to be fully compatible with 100% of games. If you find a game that does not work with save states, please report – I will be working to improve compatibility.
  3. Save states do not include the state of the SNES’s audio subsystem (APU) due to technical restrictions of the SNES hardware design. Therefore music, sound effects, etc. will remain unchanged after loading a state. Some games maintain close synchronisation between game logic and APU state, requiring (usually) a 1-byte patch to bring them up to date with the APU. These patches are maintained in the file savestate_fixes.yml. For anyone proficient in debugging SNES games who wants to add their own patches, possible formats for patches are outlined in the file.
  4. If you succeed in making a save state fix patch for a new game, please share them 🙂
  5. To use standalone (non-USB) in-game save states, “In-game hook” must be enabled in the “In-game Settings” menu, and “In-game savestates” must be enabled in the “Savestates Settings” menu.
  6. Please also refer to README.Savestates.FURiOUS.md in the sd2snes folder.

When the “Savestate slots” option is enabled, one of four save state slots can be selected in-game using a button combination.

“Load delay (frames)” is used to set a delay after loading a save state before returning control to the game. This gives you some time to let go of the save state buttons and get your fingers back into the normal playing position.

Save states can be saved and loaded in-game using button combinations on controller 1:

ButtonsFunction
Start+LLoad state
Start+RSave state
Select+D-PadSelect save state slot

Using the D-pad one of four save state slots may be selected (Default: Slot 1):

ButtonsSlot number
Select+UpSlot 1
Select+RightSlot 2
Select+DownSlot 3
Select+LeftSlot 4

Favorites List

The favorites list can be viewed from the Main Menu (X button).

To add a game to the favorites list, simply navigate to it in the file browser and press Y to pull up a context menu that displays actions that can be performed on the current selection. (Right now this menu only contains a single entry – “Add to favorites”.

To remove a game from the favorites list, open the “Favorite games” list from the Main Menu, select the entry to remove, and again use the context menu (Y button) and select “Remove from favorites”.

Reporting issues

Please report any issues in the comment section, on Github, Discord (#fxpak-general), or Twitter (@orzvektor).


On a personal note

I regret to say that this release is overshadowed by a recent tragic event.

Near (formerly known as byuu) has passed away on June 27, 2021. To this day I cannot grasp the reality of it all.

On top of his outstanding contributions to the emulation and ROM hacking scene, Near was always a source of inspiration and creativity. Although there were not many occasions on which we worked together, whenever we did it was a blast and put a smile on my face. Near came up with the MSU-1 spec, I made the first hardware implementation of it – thereby turning the sd2snes into a marketable design in the first place. I made a custom SuperCIC specifically for his cartridge dumping project back in 2010. We discovered and got to the bottom of various SNES hardware quirks together. “Professional” endeavours aside, he also encouraged me in getting to know myself better.

I owe Near a lot, and wish I could have thanked him in person one day. I will miss him. A lot.

To honor Near’s memory this release contains a very brief farewell message that will be shown for a few seconds on first boot only (provided that your SD card is not write protected). I hope that you find this tolerable; it was important to me.