Updated for October 7th/1.7 BIOS version

Looks like there's a new official firmware version out, and it's got a critical bug with SNES save states - avoid this one!

Updated the tools I host to support the new firmware, complete with warnings about it. Also updated the main Github document with the first details about the firmware, more will come later when my own download of it has completed.
This commit is contained in:
vonmillhausen 2023-10-12 11:24:01 +01:00
parent 9b411a0200
commit 06d2126247
5 changed files with 54 additions and 15 deletions

View File

@ -74,7 +74,7 @@ Some downsides to the device: it's mono only (you only get the left-channel audi
So is the "Data Frog" any good? Only you can answer that question for yourself. There are certainly more powerful devices out there, more fully featured devices, devices with better hardware, etc. - but almost all of those devices cost a lot more than the SF2000. At the end of the day, you have to look at the features offered at the given price-point, and only then can you decide if you're interested in the device or not. So is the "Data Frog" any good? Only you can answer that question for yourself. There are certainly more powerful devices out there, more fully featured devices, devices with better hardware, etc. - but almost all of those devices cost a lot more than the SF2000. At the end of the day, you have to look at the features offered at the given price-point, and only then can you decide if you're interested in the device or not.
### Is there any custom firmware? ### Is there any custom firmware?
As of October 10th 2023, **no**, not yet; however efforts are underway. While an SDK for the CPU has been identified, the developers working on custom firmware have generally reached the conclusion that the SDK is unfinished and of low quality. While it has been used to produce experimental builds of Retroarch, demonstrating various game systems operating on the SF2000, there are notable problems - core features like video and audio drivers are missing (and thus would have to be developed from scratch), and overall system stability is very low. Additionally, most of the experimental system builds had audio and/or video performance issues, and most also caused the SF2000 to run "hot", which may impact the lifespan of the device. [A GitLab repo](https://git.maschath.de/ignatz/hcrtos) has been set up by `ignatzdraconis` for the work based on this SDK. As of October 12th 2023, **no**, not yet; however efforts are underway. While an SDK for the CPU has been identified, the developers working on custom firmware have generally reached the conclusion that the SDK is unfinished and of low quality. While it has been used to produce experimental builds of Retroarch, demonstrating various game systems operating on the SF2000, there are notable problems - core features like video and audio drivers are missing (and thus would have to be developed from scratch), and overall system stability is very low. Additionally, most of the experimental system builds had audio and/or video performance issues, and most also caused the SF2000 to run "hot", which may impact the lifespan of the device. [A GitLab repo](https://git.maschath.de/ignatz/hcrtos) has been set up by `ignatzdraconis` for the work based on this SDK.
Most recently, a new tack is being tried by the development team - they're trying to modify the stock SF2000 firmware to add additional functionality. Theoretically, this would come with the benefit of having audio and video drivers already built, providing no worse performance than stock firmware, while providing features like support for additional emulated systems. An experimental developer build has been produced which demonstrates additional systems like Atari 2600 and PC-Engine running under the stock firmware. [A GitLab repo](https://gitlab.com/kobily/sf2000_multicore) has been set up by `kobil` for the work on modifying the stock firmware. Most recently, a new tack is being tried by the development team - they're trying to modify the stock SF2000 firmware to add additional functionality. Theoretically, this would come with the benefit of having audio and video drivers already built, providing no worse performance than stock firmware, while providing features like support for additional emulated systems. An experimental developer build has been produced which demonstrates additional systems like Atari 2600 and PC-Engine running under the stock firmware. [A GitLab repo](https://gitlab.com/kobily/sf2000_multicore) has been set up by `kobil` for the work on modifying the stock firmware.
@ -287,6 +287,8 @@ I was curious to see how the included ROMs matched up against the current "[No-I
## Firmware/BIOS (bisrv.asd) ## Firmware/BIOS (bisrv.asd)
The firmware for the SF2000 is actually located on the microSD card, in a file called `bisrv.asd` located in the BIOS folder. This file is a monolithic binary blob, which contains the device's OS, the emulators, their settings... basically everything. Data Frog have issued some firmware updates for the device since launch; the updates have added new features (e.g., additional language support, favourites, history, etc.), but have also introduced bugs (e.g., some SNES games run very slowly until they are quit and launched again, etc.). Data Frog have published a YouTube video showing how to update the firmware on the device, which [you can find here](https://www.youtube.com/watch?v=j8dT2fdGfck); the video's description contains a link to where you can download the latest firmware. Note that Data Frog's official firmware update/reinstallation process involves fully erasing the device's microSD card and replacing its contents with a fresh set of files - this will also erase any user-created files including saves states or user-installed ROMs. You can learn more about save state files and how to back them up in [the Save States section](#save-states). The firmware for the SF2000 is actually located on the microSD card, in a file called `bisrv.asd` located in the BIOS folder. This file is a monolithic binary blob, which contains the device's OS, the emulators, their settings... basically everything. Data Frog have issued some firmware updates for the device since launch; the updates have added new features (e.g., additional language support, favourites, history, etc.), but have also introduced bugs (e.g., some SNES games run very slowly until they are quit and launched again, etc.). Data Frog have published a YouTube video showing how to update the firmware on the device, which [you can find here](https://www.youtube.com/watch?v=j8dT2fdGfck); the video's description contains a link to where you can download the latest firmware. Note that Data Frog's official firmware update/reinstallation process involves fully erasing the device's microSD card and replacing its contents with a fresh set of files - this will also erase any user-created files including saves states or user-installed ROMs. You can learn more about save state files and how to back them up in [the Save States section](#save-states).
**WARNING: The latest October 7th/1.7 firmware version has a critical issue with SNES save states; SNES save states are not created correctly, and will hang the device if you attempt to load one created using this firmware version. As such, it is highly recommended that you avoid the October 7th/1.7 firmware version.**
Note that Data Frog's official server for downloading firmware is _very_ slow, with typical transfers taking many hours to complete as their firmware images are full images including ROM files. If you don't care about the stock ROM files, an alternative method for downloading the latest firmware _without_ the ROM files is to use [Tadpole](https://github.com/EricGoldsteinNz/tadpole). Refer to Tadpole's documentation for more information. Note that Data Frog's official server for downloading firmware is _very_ slow, with typical transfers taking many hours to complete as their firmware images are full images including ROM files. If you don't care about the stock ROM files, an alternative method for downloading the latest firmware _without_ the ROM files is to use [Tadpole](https://github.com/EricGoldsteinNz/tadpole). Refer to Tadpole's documentation for more information.
Known firmware versions are currently (dates approximate): Known firmware versions are currently (dates approximate):
@ -298,6 +300,7 @@ Known firmware versions are currently (dates approximate):
| May 15th | ? | Added a built-in UI for global button mapping (which is broken in several ways, mainly SNES and Genesis controls are swapped, and no support for setting Player 2 controls), added a History feature, added a Favourites feature | | May 15th | ? | Added a built-in UI for global button mapping (which is broken in several ways, mainly SNES and Genesis controls are swapped, and no support for setting Player 2 controls), added a History feature, added a Favourites feature |
| May 22nd | 1.5V | First firmware with an official version number. Fixed the SNES/Genesis swapped button mappings, and now sets Player 2 controls to be identical to Player 1 (no way to set independently). There's some evidence of undocumented emulation improvements; some GBA homebrew that was non-functional in previous firmwares now loads correctly, and some GBA titles see marginally improved performance | | May 22nd | 1.5V | First firmware with an official version number. Fixed the SNES/Genesis swapped button mappings, and now sets Player 2 controls to be identical to Player 1 (no way to set independently). There's some evidence of undocumented emulation improvements; some GBA homebrew that was non-functional in previous firmwares now loads correctly, and some GBA titles see marginally improved performance |
| August 3rd | 1.6V | The only official release note indicates that the issue with low sound volume when using A/V out was fixed. Aside from that, community members have noticed that the inability of the SF2000 to work with in-game saves appears to have been fixed for GBA (but not other emulators), and that the CPU clock has been changed from 810 MHz to 918 MHz (an overclock); this may be responsible for some community reports of slightly better performance for some games | | August 3rd | 1.6V | The only official release note indicates that the issue with low sound volume when using A/V out was fixed. Aside from that, community members have noticed that the inability of the SF2000 to work with in-game saves appears to have been fixed for GBA (but not other emulators), and that the CPU clock has been changed from 810 MHz to 918 MHz (an overclock); this may be responsible for some community reports of slightly better performance for some games |
| October 7th | 1.7 | No official release notes yet, but there is a new critical bug in SNES save-states - they're not created correctly, and attempting to load one created with this firmware version hangs the device. Other than that, the "have to load SNES games twice" bug appears to have been fixed, although the community has created [a fix for that](#snes-games-run-really-slowly-whats-wrong) for the other firmware versions already |
If you want to check which version of the firmware you currently have on your SF2000, you can [use the Data Frog SF2000 Firmware Version Checker tool here](https://vonmillhausen.github.io/sf2000/tools/firmwareVersionChecker.htm). If you want to check which version of the firmware you currently have on your SF2000, you can [use the Data Frog SF2000 Firmware Version Checker tool here](https://vonmillhausen.github.io/sf2000/tools/firmwareVersionChecker.htm).
@ -676,6 +679,8 @@ All of these are linked above already in their relevant sections, but just in ca
--- ---
## Document Version History ## Document Version History
- `20231012 - 1.41`: Added basic information about the new (and critically broken) October 7th/1.7 firmware version to the [Firmware](#firmwarebios-bisrvasd) section (I'm waiting for my official copy to finish downloading before updating the tables in the [Resources](#resources) sections).
- `20231010 - 1.40`: Updated [CFW FAQ](#is-there-any-custom-firmware) with the latest details, and did a little re-arranging of existing info. Changed several links to Data Frog's YouTube firmware update process to links to the [Firmware](#firmwarebios-bisrvasd) section instead, as that section has more information about other options for firmware updates (e.g., Tadpole). Added links to `dteyn`'s SNES fix tool, and information about `bnister`'s discovery as to why SNES games had to be launched twice for full speed. - `20231010 - 1.40`: Updated [CFW FAQ](#is-there-any-custom-firmware) with the latest details, and did a little re-arranging of existing info. Changed several links to Data Frog's YouTube firmware update process to links to the [Firmware](#firmwarebios-bisrvasd) section instead, as that section has more information about other options for firmware updates (e.g., Tadpole). Added links to `dteyn`'s SNES fix tool, and information about `bnister`'s discovery as to why SNES games had to be launched twice for full speed.
- `20231003 - 1.39`: Updated [CFW FAQ](#is-there-any-custom-firmware) with the latest details. Corrected a detail about the relationship between arcade `.zfb` files and the `.zip` files they point to (thanks `.ericgoldstein`!). Added a note to the [Firmware](#firmwarebios-bisrvasd) section about the official firmware update process wiping the microSD card, and a note to the [Save States](#save-states) section about how to back up game saves (thanks for the suggestion `@uli42`!). Added [a simple firmware version checking tool](https://vonmillhausen.github.io/sf2000/tools/firmwareVersionChecker.htm), so that folks don't have to use the boot logo changer to check (which always seemed clunky to me). Added a link to `dteyn`'s Silent Sounds pack. Fixed some small typos. - `20231003 - 1.39`: Updated [CFW FAQ](#is-there-any-custom-firmware) with the latest details. Corrected a detail about the relationship between arcade `.zfb` files and the `.zip` files they point to (thanks `.ericgoldstein`!). Added a note to the [Firmware](#firmwarebios-bisrvasd) section about the official firmware update process wiping the microSD card, and a note to the [Save States](#save-states) section about how to back up game saves (thanks for the suggestion `@uli42`!). Added [a simple firmware version checking tool](https://vonmillhausen.github.io/sf2000/tools/firmwareVersionChecker.htm), so that folks don't have to use the boot logo changer to check (which always seemed clunky to me). Added a link to `dteyn`'s Silent Sounds pack. Fixed some small typos.

View File

@ -90,6 +90,12 @@
setMessage("info", "bisrvMessages", "INFO: August 3rd <code>bisrv.asd</code> detected."); setMessage("info", "bisrvMessages", "INFO: August 3rd <code>bisrv.asd</code> detected.");
break; break;
// October 7th BIOS...
case "10.07":
logoOffset = 0x9B1FE8;
setMessage("warning", "bisrvMessages", "WARNING: October 7th <code>bisrv.asd</code> detected; this version has known issues with SNES save states and is not recommended for use.");
break;
default: default:
// Huh... wasn't false so had bisrv.asd structure, but didn't return // Huh... wasn't false so had bisrv.asd structure, but didn't return
// a known hash... a new BIOS version? Unknown anyway! // a known hash... a new BIOS version? Unknown anyway!
@ -226,6 +232,6 @@
} }
</script> </script>
<hr> <hr>
<p><a rel="license" href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a>: public domain. Version 1.4, 20230819.1</p> <p><a rel="license" href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a>: public domain. Version 1.4, 20231012.1</p>
</body> </body>
</html> </html>

View File

@ -126,6 +126,14 @@
step1BRequired = true; step1BRequired = true;
setMessage("info", "fileMessages", "INFO: August 3rd <code>bisrv.asd</code> detected."); setMessage("info", "fileMessages", "INFO: August 3rd <code>bisrv.asd</code> detected.");
break; break;
// October 7th BIOS...
case "10.07":
mappingTableOffset = 0;
mappingConsoles = ["NES", "SNES", "Genesis/Mega Drive, Master System", "Game Boy, Game Boy Color", "Game Boy Advance", "Arcade"];
step1BRequired = true;
setMessage("warning", "fileMessages", "WARNING: October 7th <code>bisrv.asd</code> detected; this version has known issues with SNES save states and is not recommended for use.");
break;
default: default:
// Huh... wasn't false so had bisrv.asd structure, but didn't return // Huh... wasn't false so had bisrv.asd structure, but didn't return
@ -353,7 +361,7 @@
// bytes are in here. If they do other weird stuff in the future, // bytes are in here. If they do other weird stuff in the future,
// it'll probably be here that needs to change! // it'll probably be here that needs to change!
var buttonByteOrder = ['X', 'Y' ,'L', 'A', 'B', 'R']; var buttonByteOrder = ['X', 'Y' ,'L', 'A', 'B', 'R'];
if (mappingConsoles[currentConsole] == "Game Boy Advance" && ["05.15", "05.22", "08.03"].includes(firmwareVersion)) { if (mappingConsoles[currentConsole] == "Game Boy Advance" && ["05.15", "05.22", "08.03", "10.07"].includes(firmwareVersion)) {
buttonByteOrder = ['L', 'R', 'X', 'A', 'B', 'Y']; buttonByteOrder = ['L', 'R', 'X', 'A', 'B', 'Y'];
} }
@ -493,7 +501,7 @@
// the bytes are in here. If they do other weird stuff in the // the bytes are in here. If they do other weird stuff in the
// future, it'll probably be here that needs to change! // future, it'll probably be here that needs to change!
var buttonByteOrder = ['X', 'Y' ,'L', 'A', 'B', 'R']; var buttonByteOrder = ['X', 'Y' ,'L', 'A', 'B', 'R'];
if (mappingConsoles[currentConsole] == "Game Boy Advance" && ["05.15", "05.22", "08.03"].includes(firmwareVersion)) { if (mappingConsoles[currentConsole] == "Game Boy Advance" && ["05.15", "05.22", "08.03", "10.07"].includes(firmwareVersion)) {
buttonByteOrder = ['L', 'R', 'X', 'A', 'B', 'Y']; buttonByteOrder = ['L', 'R', 'X', 'A', 'B', 'Y'];
} }
@ -530,6 +538,6 @@
} }
</script> </script>
<hr> <hr>
<p><a rel="license" href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a>: public domain. Version 1.4, 20230819.1</p> <p><a rel="license" href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a>: public domain. Version 1.4, 20231012.1</p>
</body> </body>
</html> </html>

View File

@ -55,27 +55,32 @@
// Mid-March BIOS... // Mid-March BIOS...
case "03.15": case "03.15":
setMessage("info", "bisrvMessages", "Mid-March <code>bisrv.asd</code> detected. Newer firmware is available, see link above for more information."); setMessage("warning", "bisrvMessages", "Mid-March <code>bisrv.asd</code> detected. Newer firmware is available, see the link above for more information.");
break; break;
// April 20th BIOS... // April 20th BIOS...
case "04.20": case "04.20":
setMessage("info", "bisrvMessages", "April 20th <code>bisrv.asd</code> detected. Newer firmware is available, see link above for more information."); setMessage("warning", "bisrvMessages", "April 20th <code>bisrv.asd</code> detected. Newer firmware is available, see the link above for more information.");
break; break;
// May 15th BIOS... // May 15th BIOS...
case "05.15": case "05.15":
setMessage("info", "bisrvMessages", "May 15th <code>bisrv.asd</code> detected. Newer firmware is available, see link above for more information."); setMessage("warning", "bisrvMessages", "May 15th <code>bisrv.asd</code> detected. Newer firmware is available, see the link above for more information.");
break; break;
// May 22nd BIOS... // May 22nd BIOS...
case "05.22": case "05.22":
setMessage("info", "bisrvMessages", "May 22nd <code>bisrv.asd</code> detected. Newer firmware is available, see link above for more information."); setMessage("warning", "bisrvMessages", "May 22nd <code>bisrv.asd</code> detected. Newer firmware is available, see the link above for more information.");
break; break;
// August 3rd BIOS... // August 3rd BIOS...
case "08.03": case "08.03":
setMessage("info", "bisrvMessages", "August 3rd <code>bisrv.asd</code> detected. This is the latest known official firmware version."); setMessage("info", "bisrvMessages", "August 3rd <code>bisrv.asd</code> detected. This is the latest known <em>stable</em> official firmware version.");
break;
// October 7th BIOS...
case "10.07":
setMessage("error", "bisrvMessages", "October 7th <code>bisrv.asd</code> detected. While this is the latest known official firmware version, it has a critical issue with SNES save states, and is not recommended for use. Current recommended official firmware version is August 3rd/1.6. See the link above for more information.");
break; break;
default: default:
@ -97,6 +102,6 @@
} }
</script> </script>
<hr> <hr>
<p><a rel="license" href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a>: public domain. Version 1.0, 20231003.1</p> <p><a rel="license" href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a>: public domain. Version 1.1, 20231012.1</p>
</body> </body>
</html> </html>

View File

@ -12,6 +12,9 @@
Just like the tools themselves, this file should be considered CC0 Public Just like the tools themselves, this file should be considered CC0 Public
Domain (https://creativecommons.org/publicdomain/zero/1.0/) Domain (https://creativecommons.org/publicdomain/zero/1.0/)
Version 1.5: Added support for the (broken) October 7th BIOS in
getFirmwareHash() and knownHash()
Version 1.4: Re-ordered the getFirmwareHash() zeroing-out checks to match the Version 1.4: Re-ordered the getFirmwareHash() zeroing-out checks to match the
expected order to find them in in the BIOS file - just some future-proofing expected order to find them in in the BIOS file - just some future-proofing
in case some user-substituted content (e.g., a boot logo) happens to contain in case some user-substituted content (e.g., a boot logo) happens to contain
@ -71,10 +74,10 @@ function getFirmwareHash(data) {
if (dataCopy.length > 12600000) { if (dataCopy.length > 12600000) {
// First, replace CRC32 bits with 00... // First, replace CRC32 bits with 00...
dataCopy[396] = 0x00; dataCopy[0x18C] = 0x00;
dataCopy[397] = 0x00; dataCopy[0x18D] = 0x00;
dataCopy[398] = 0x00; dataCopy[0x18E] = 0x00;
dataCopy[399] = 0x00; dataCopy[0x18F] = 0x00;
// Next we'll look for (and zero out) the five bytes that the power // Next we'll look for (and zero out) the five bytes that the power
// monitoring functions of the SF2000 use for switching the UI's battery // monitoring functions of the SF2000 use for switching the UI's battery
@ -129,6 +132,15 @@ function getFirmwareHash(data) {
dataCopy[0x356594] = 0x00; dataCopy[0x356594] = 0x00;
dataCopy[0x3565B0] = 0x00; dataCopy[0x3565B0] = 0x00;
break; break;
case 0x356638:
// Seems to match October 7th layout...
dataCopy[0x356638] = 0x00;
dataCopy[0x356640] = 0x00;
dataCopy[0x3566D8] = 0x00;
dataCopy[0x3566E0] = 0x00;
dataCopy[0x3566FC] = 0x00;
break;
default: default:
return false; return false;
@ -276,6 +288,9 @@ function knownHash(hash) {
case "5335860d13214484eeb1260db8fe322efc87983b425ac5a5f8b0fcdf9588f40a": case "5335860d13214484eeb1260db8fe322efc87983b425ac5a5f8b0fcdf9588f40a":
return "08.03"; return "08.03";
case "b88458bf2c25d3a34ab57ee149f36cfdc6b8a5138d5c6ed147fbea008b4659db":
return "10.07"
default: default:
return false; return false;