From 06d2126247deef37bfdca46ab079974a932f5fe1 Mon Sep 17 00:00:00 2001 From: vonmillhausen Date: Thu, 12 Oct 2023 11:24:01 +0100 Subject: [PATCH] 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. --- README.md | 7 ++++++- tools/bootLogoChanger.htm | 8 +++++++- tools/buttonMappingChanger.htm | 14 +++++++++++--- tools/firmwareVersionChecker.htm | 17 +++++++++++------ tools/tools.js | 23 +++++++++++++++++++---- 5 files changed, 54 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 092416b..99c7448 100644 --- a/README.md +++ b/README.md @@ -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. ### 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. @@ -287,6 +287,8 @@ I was curious to see how the included ROMs matched up against the current "[No-I ## 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). +**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. 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 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 | +| 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). @@ -676,6 +679,8 @@ All of these are linked above already in their relevant sections, but just in ca --- ## 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. - `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. diff --git a/tools/bootLogoChanger.htm b/tools/bootLogoChanger.htm index 7b8f2df..1e0d1c9 100644 --- a/tools/bootLogoChanger.htm +++ b/tools/bootLogoChanger.htm @@ -90,6 +90,12 @@ setMessage("info", "bisrvMessages", "INFO: August 3rd bisrv.asd detected."); break; + // October 7th BIOS... + case "10.07": + logoOffset = 0x9B1FE8; + setMessage("warning", "bisrvMessages", "WARNING: October 7th bisrv.asd detected; this version has known issues with SNES save states and is not recommended for use."); + break; + default: // Huh... wasn't false so had bisrv.asd structure, but didn't return // a known hash... a new BIOS version? Unknown anyway! @@ -226,6 +232,6 @@ }
-

CC0: public domain. Version 1.4, 20230819.1

+

CC0: public domain. Version 1.4, 20231012.1

diff --git a/tools/buttonMappingChanger.htm b/tools/buttonMappingChanger.htm index 67ed309..6854b9a 100644 --- a/tools/buttonMappingChanger.htm +++ b/tools/buttonMappingChanger.htm @@ -126,6 +126,14 @@ step1BRequired = true; setMessage("info", "fileMessages", "INFO: August 3rd bisrv.asd detected."); 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 bisrv.asd detected; this version has known issues with SNES save states and is not recommended for use."); + break; default: // 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, // it'll probably be here that needs to change! 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']; } @@ -493,7 +501,7 @@ // the bytes are in here. If they do other weird stuff in the // future, it'll probably be here that needs to change! 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']; } @@ -530,6 +538,6 @@ }
-

CC0: public domain. Version 1.4, 20230819.1

+

CC0: public domain. Version 1.4, 20231012.1

\ No newline at end of file diff --git a/tools/firmwareVersionChecker.htm b/tools/firmwareVersionChecker.htm index 180a4bb..c079aa9 100644 --- a/tools/firmwareVersionChecker.htm +++ b/tools/firmwareVersionChecker.htm @@ -55,27 +55,32 @@ // Mid-March BIOS... case "03.15": - setMessage("info", "bisrvMessages", "Mid-March bisrv.asd detected. Newer firmware is available, see link above for more information."); + setMessage("warning", "bisrvMessages", "Mid-March bisrv.asd detected. Newer firmware is available, see the link above for more information."); break; // April 20th BIOS... case "04.20": - setMessage("info", "bisrvMessages", "April 20th bisrv.asd detected. Newer firmware is available, see link above for more information."); + setMessage("warning", "bisrvMessages", "April 20th bisrv.asd detected. Newer firmware is available, see the link above for more information."); break; // May 15th BIOS... case "05.15": - setMessage("info", "bisrvMessages", "May 15th bisrv.asd detected. Newer firmware is available, see link above for more information."); + setMessage("warning", "bisrvMessages", "May 15th bisrv.asd detected. Newer firmware is available, see the link above for more information."); break; // May 22nd BIOS... case "05.22": - setMessage("info", "bisrvMessages", "May 22nd bisrv.asd detected. Newer firmware is available, see link above for more information."); + setMessage("warning", "bisrvMessages", "May 22nd bisrv.asd detected. Newer firmware is available, see the link above for more information."); break; // August 3rd BIOS... case "08.03": - setMessage("info", "bisrvMessages", "August 3rd bisrv.asd detected. This is the latest known official firmware version."); + setMessage("info", "bisrvMessages", "August 3rd bisrv.asd detected. This is the latest known stable official firmware version."); + break; + + // October 7th BIOS... + case "10.07": + setMessage("error", "bisrvMessages", "October 7th bisrv.asd 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; default: @@ -97,6 +102,6 @@ }
-

CC0: public domain. Version 1.0, 20231003.1

+

CC0: public domain. Version 1.1, 20231012.1

diff --git a/tools/tools.js b/tools/tools.js index ec1db3e..a709718 100644 --- a/tools/tools.js +++ b/tools/tools.js @@ -12,6 +12,9 @@ Just like the tools themselves, this file should be considered CC0 Public 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 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 @@ -71,10 +74,10 @@ function getFirmwareHash(data) { if (dataCopy.length > 12600000) { // First, replace CRC32 bits with 00... - dataCopy[396] = 0x00; - dataCopy[397] = 0x00; - dataCopy[398] = 0x00; - dataCopy[399] = 0x00; + dataCopy[0x18C] = 0x00; + dataCopy[0x18D] = 0x00; + dataCopy[0x18E] = 0x00; + dataCopy[0x18F] = 0x00; // 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 @@ -129,6 +132,15 @@ function getFirmwareHash(data) { dataCopy[0x356594] = 0x00; dataCopy[0x3565B0] = 0x00; 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: return false; @@ -276,6 +288,9 @@ function knownHash(hash) { case "5335860d13214484eeb1260db8fe322efc87983b425ac5a5f8b0fcdf9588f40a": return "08.03"; + + case "b88458bf2c25d3a34ab57ee149f36cfdc6b8a5138d5c6ed147fbea008b4659db": + return "10.07" default: return false;