diff --git a/.gitignore b/.gitignore index da8d1e2..59b556f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ - .vscode/settings.json +tools/Private Tools/ diff --git a/README.md b/README.md index 46f007a..4e7afc5 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ This document is a collection of notes and information I've made about the devic - [Battery](#battery) - [Wireless Connectivity](#wireless-connectivity) - [A/V Output](#av-output) + - [USB-C Port](#usb-c-port) - [Emulators](#emulators) - [Arcade](#arcade) - [Neo Geo Unibios Menu](#neo-geo-unibios-menu) @@ -75,13 +76,13 @@ Some downsides to the device: There's a decent amount of screen-tearing, due to 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 (which often sells for just $15 to $20). 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 November 5th 2023, **no**, not yet; however, some already-useful advancements have been made which may be of interest. Two main development efforts have been made: +As of December 10th 2023, **no**, not yet; however, some already-useful advancements have been made which may be of interest. Two main development efforts have been made: #### hcRTOS (true CFW) Earlier this year, an SDK for the CPU in the SF2000 was been identified. Theoretically, this would allow a full custom firmware to be built and compiled for the device. The developers working on custom firmware spent some considerable time and effort working on porting Retroarch (as it seemed like it would be the quickest route to a custom firmware with support for many systems), however they ran into several problems. It appears that the SDK was unfinished and of low quality - core features like video and audio drivers were missing (and thus had to be developed from scratch), and overall system stability of the produced builds very low. When crashed happened with running cores (which was frequently) no useful debugging information was produced, and so tracking down the source of issues became a major time-sink. Additionally, most of the experimental builds when they did work had audio and/or video performance issues, and most also caused the SF2000 to run "hot", which would likely have impacted the lifespan of the device and thus are not recommended for usage beyond a few minutes at a time. [A GitLab repo](https://git.maschath.de/ignatz/hcrtos) was set up by `ignatzdraconis` for the work based on this SDK, however work on developing a full custom firmware using this SDK has been parked for now. #### Multicore (modified stock) -More 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 (the contractors producing the stock firmware for the SF2000 have access to these), providing no worse performance than stock firmware, while also providing features like support for additional emulated systems. An experimental developer build called the "multicore" build has been produced which hijacks the stock Game Boy Advance emulator to run additional systems like Atari 2600, PC-Engine, MAME2000, Sega 32X, etc., and some stand-alone engines for games like Doom and Cave Story, as well as alternatives for some of the stock emulators already included with the SF2000 (e.g., a more recent build of gpSP, Snes9x 2005 and 2002, etc.). Some of the new systems appear to run at full speed; some run without sound or with less than full speed, and others don't work at all yet. [A GitLab repo](https://gitlab.com/kobily/sf2000_multicore) has been set up by `kobil` for the work on modifying the stock firmware; additionally, [a GitHub repo](https://github.com/madcock/sf2000_multicore_cores) has been set up by `adcockm` for the code changes for the individual cores, and you can download the **experimental** alpha build from the "Releases" page there. If you want to follow along with the developer chat on this work, see the `SF2000 Dev` thread in the `🐸data_frog_sf2000` channel of the [`Retro Handhelds` Discord server](https://discord.gg/retrohandhelds). Please do read the pinned messages both in the main channel and the thread before asking any questions of the devs, their time is precious πŸ™‚ +More 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 (the contractors producing the stock firmware for the SF2000 have access to these), providing no worse performance than stock firmware, while also providing features like support for additional emulated systems. An experimental developer build called the "multicore" build has been produced which hijacks the stock Game Boy Advance emulator to run additional systems like Atari 2600, PC-Engine, MAME2000, Sega 32X, etc., and some stand-alone engines for games like Doom and Cave Story, as well as alternatives for some of the stock emulators already included with the SF2000 (e.g., a more recent build of gpSP, Snes9x 2005 and 2002, etc.). Some of the new systems appear to run at full speed; some run without sound or with less than full speed, and others don't work at all yet. [A GitLab repo](https://gitlab.com/kobily/sf2000_multicore) has been set up by `kobil` for the work on modifying the stock firmware; additionally, [a GitHub repo](https://github.com/madcock/sf2000_multicore_cores) has been set up by `adcockm` for the code changes for the individual cores, and you can download the **experimental** alpha build [from the "Releases" page there](https://github.com/madcock/sf2000_multicore_cores/releases/latest). If you want to follow along with the developer chat on this work, see the `SF2000 Dev` thread in the `🐸data_frog_sf2000` channel of the [`Retro Handhelds` Discord server](https://discord.gg/retrohandhelds). Please do read the pinned messages both in the main channel and the thread before asking any questions of the devs, their time is precious πŸ™‚ ### I just got my SF2000; what modding can I do with it? If you're planning to customise your SF2000 in _any_ way, then I **strongly** recommend the _very_ first thing you do is [fix an annoying bug in the device's bootloader](#bootloader-bug) - otherwise you're likely to end up with a non-booting device. Seriously - **do this before you do anything else!** @@ -195,6 +196,9 @@ On my own unit, plugging in a charging cable while outputting over A/V introduce While not strictly related to the A/V jack, Discord user `iq_132` has written a guide on how to add Bluetooth audio support to the SF2000 by feeding off of the contacts for the internal speaker; you can [find their guide here](https://neo-source.com/stuff/datafrog/). +### USB-C Port +The SF2000 has a USB-C port for charging the battery (see the [Battery](#battery) section for more information). As shipped, only USB-A to USB-C cables work for charging, as the SF2000 lacks the two resistors required for USB-C to USB-C cable compatibility. It has been reported that (if you have sufficient soldering skills) those two resistors can be added to enable USB-C to USB-C charging. Not all of the channels required to support data are connected, so you cannot plug in external devices like controllers, WiFi adapters, USB adapters, etc. and have them work. + --- ## Emulators @@ -204,7 +208,7 @@ The device advertises support for arcade, NES, SNES, Genesis/Mega Drive, Game Bo The SF2000 appears to be using Libretro with a custom front-end (i.e., not RetroArch). ### Arcade -The device is running Final Burn Alpha v0.2.97.42 (Git commit [`621e371`](https://github.com/Aftnet/fbalpha/commit/621e371)). Thanks to some truly exceptional work by `adcockm` from the Retro Handhelds Discord, we know it supports an unusual mix of ROM sets, largely based on MAME 0.106 and Final Burn Alpha v0.2.97.42. `adcockm` has gone ahead and compiled two separate [Clrmamepro](https://mamedev.emulab.it/clrmamepro/) dat files - [one for _all_ sets technically supported by the SF2000's current BIOS](/arcade/DataFrog_SF2000_FBA_v0.2.97.42.dat) (as of May 2023; though note that "supported" does not mean working or playable), and [one for all playable sets](/arcade/DataFrog_SF2000_FBA_v0.2.97.42_playable_no_dups.dat) with duplicates removed (and note, "playable" may include games with missing sound, graphical glitches, performance issues, but are otherwise technically functional). If you want to build a working set (must be non-merged) from the dat files, `adcockm` has further provided [a list of "hints"](/arcade/Building_the_DataFrog_SF2000_FBA_v0.2.97.42_set.txt) as the sets you'll need to track down - for obvious reasons neither I nor anyone else can provide links to such material, but hopefully the hints will get you something you can start searching for. Finally, there's also [a HTML document](/arcade/DataFrog_SF2000_FBA.html) with a list of all of the supported sets along with some useful metadata, such as the set's full name, playability information, screen orientation, etc.. The `inrom` column indicates if the ROM was included on the SF2000's stock microSD card; it's interesting to note that there were more ROMs located on the card than were defined in the `mswb7.tax` file (and thus available from the arcade game list); none of the unlisted games were actually playable on the SF2000, so it's possible someone from Data Frog actually tested the games to an extent, and removed ones from the available list that were broken. +The device is running a customised version of Final Burn Alpha, close to v0.2.96.86 (Git commit [`a324b2d`](https://github.com/dmitrysmagin/fba-a320/commit/a324b2ddb92f82a48b90e2ee6af0cf69403219ab)), but with a tacked-on Libretro interface from v0.2.97.42 (Git commit [`621e371`](https://github.com/Aftnet/fbalpha/commit/621e371)) and possibly some other custom changes made by Data Frog or the third-party company that produces firmware for them. Thanks to some truly exceptional work by `adcockm` from the Retro Handhelds Discord, we know it supports an unusual mix of ROM sets, largely based on MAME 0.106 and Final Burn Alpha v0.2.96.86. `adcockm` has gone ahead and compiled two separate [Clrmamepro](https://mamedev.emulab.it/clrmamepro/) dat files - [one for _all_ sets technically supported by the SF2000's current BIOS](/arcade/DataFrog_SF2000_FBA_v0.2.97.42.dat) (as of May 2023; though note that "supported" does not mean working or playable), and [one for all playable sets](/arcade/DataFrog_SF2000_FBA_v0.2.97.42_playable_no_dups.dat) with duplicates removed (and note, "playable" may include games with missing sound, graphical glitches, performance issues, but are otherwise technically functional). If you want to build a working set (must be non-merged) from the dat files, `adcockm` has further provided [a list of "hints"](/arcade/Building_the_DataFrog_SF2000_FBA_v0.2.97.42_set.txt) as the sets you'll need to track down - for obvious reasons neither I nor anyone else can provide links to such material, but hopefully the hints will get you something you can start searching for. Finally, there's also [a HTML document](/arcade/DataFrog_SF2000_FBA.html) with a list of all of the supported sets along with some useful metadata, such as the set's full name, playability information, screen orientation, etc.. The `inrom` column indicates if the ROM was included on the SF2000's stock microSD card; it's interesting to note that there were more ROMs located on the card than were defined in the `mswb7.tax` file (and thus available from the arcade game list); none of the unlisted games were actually playable on the SF2000, so it's possible someone from Data Frog actually tested the games to an extent, and removed ones from the available list that were broken. `adcockm` also provided the following interesting statistics: @@ -234,7 +238,7 @@ You can [learn more about save states below](#save-states). #### .zfb Files Due to the different nature of arcade emulation compared to any of the other systems the SF2000 supports, the ROM layout for the arcade section is different as well. Inside the `/ARCADE` folder in the root of the microSD card you'll find a `bin` subfolder, and a bunch of `.zfb` files. The `bin` folder contains `.zip` files with an enforced 8.3 file naming scheme, and they contain the actual ROM data for the FBA emulator. The `.zfb` files are used to populate the arcade game list when you go into the arcade section on the SF2000's menu, and their file structure is as follows: -* The first 59,905 bytes are an RGB565 image for the game thumbnail art shown in the menu (208px by 144px) +* The first 59,905 bytes are an RGB565 image for the game thumbnail art shown in the menu (`144px * 208px`) * The next four bytes are `0x00` * The next sequence of bytes is the name of a `.zip` file in the `bin` folder, without any path (SF2000's firmware automatically looks for the `.zip` in a `bin` subfolder relative to where the `.zfb` file is stored - thanks `.ericgoldstein` for the testing!), e.g. `gamename.zip` * Finally, the file ends with two `0x00` bytes @@ -282,7 +286,9 @@ The save state files themselves contain two zlib-compressed data blobs, plus ass If you want to mess around with SF2000 save states, you can [do so using my SF2000 Save State Tool, which you can find here](https://vonmillhausen.github.io/sf2000/tools/saveStateTool.htm). ### Default ROMs -The default full firmware for the SF2000 comes with over 6000 ROMs across the seven supported systems. The manual suggests these are for "demonstration purposes" only, and should be deleted by the owner (with any failure to do so not being their responsibility) - despite the fact that the SF2000's menus are hard-coded for this specific list of ROMs. The ROM files themselves are a custom bundle format; the first `59,904 bytes` are an RGB565 image shown as a thumbnail beside the game when selected in a game-list, and the remainder of the file is a slightly mangled/obfuscated ZIP file containing the game's single ROM file. The only exception to this format are the arcade ROMs, which consist of a plain-old Final Burn Alpha ROM zip file, coupled with a `.zfb` file containing the thumbnail image and a pointer to the ROM zip file name. +The default full firmware for the SF2000 comes with over 6000 ROMs across the seven supported systems. The manual suggests these are for "demonstration purposes" only, and should be deleted by the owner (with any failure to do so not being their responsibility) - despite the fact that the SF2000's menus are hard-coded for this specific list of ROMs. + +The ROM files themselves are a custom bundle format; the first `59,904 bytes` are a `144px x 208px` RGB565 image shown as a thumbnail beside the game when selected in a game-list, and the remainder of the file is a slightly mangled/obfuscated ZIP file containing the game's single ROM file. The only exception to this format are the arcade ROMs, which consist of a plain-old Final Burn Alpha ROM zip file, coupled with a `.zfb` file containing the thumbnail image and a pointer to the ROM zip file name; you can [find a deeper dive in the format of `.zfb` files here](#zfb-files). I was curious to see how the included ROMs matched up against the current "[No-Intro](https://no-intro.org/)" catalogue for each of the non-arcade systems, so I wrote a small script to extract the ROMs from the SF2000's bundles (taken from the 1.5 full firmware image), and compare the hashes against the current (June 9th, 2023) set of No-Intro DAT files. You can [find a big HTML file with all of the results here](/defaultRoms/defaultRomsNoIntroCheck.htm), and [a raw CSV file of the same data here](/defaultRoms/defaultRomsNoIntroCheck.csv). You can click most of the column headers in the HTML version to sort the table by that column. The NES ROMs had their first 16-bytes stripped to remove their "iNES" header (thanks for the tip, `bnister`!), and were compared against the "header-less" No-Intro NES dat file. @@ -442,7 +448,7 @@ As far as I am aware, all of the below images are actively used by the latest fi | `ucby4.aax` | 1008x164 | BRGA | | ✨ | 🚩 | βœ… | βœ… | βœ… | βœ… | User settings screen icons and labels in Arabic | [view](/images/ucby4.aax.png) | | `urlkp.bvs` | 640x480 | RGB565 Little Endian | ✨ | βœ… | βœ… | βœ… | βœ… | βœ… | βœ… | NES game-list background | [view](/images/urlkp.png) | | `uyhbc.dck` | 640x480 | RGB565 Little Endian | | | ✨ | βœ… | βœ… | βœ… | βœ… | Favourites game-list background | [view](/images/uyhbc.dck.png) | -| `vidca.bvs` | 1008x164 | BRGA | | ✨ | 🚩 | βœ… | βœ… | βœ… | βœ… | User settings screen icons and labels in Hebrew | [view](/images/vidca.bvs.png) | +| `vidca.bvs` | 1008x164 | BRGA | | ✨ | 🚩 | βœ… | βœ… | βœ… | βœ… | User settings screen icons and labels in Hebrew; has in inaccurate translation, see SF2000 FixHebrew by `amir16yp` in the [Tools and Links](#tools-and-links) section | [view](/images/vidca.bvs.png) | | `vssvc.nec` | 1008x164 | BRGA | | ✨ | 🚩 | βœ… | βœ… | βœ… | βœ… | User settings screen icons and labels in Malay | [view](/images/vssvc.nec.png) | | `wshrm.nec` | 217x37 | BGRA | ✨ | βœ… | βœ… | βœ… | βœ… | βœ… | βœ… | "Yes" and "No" text, with "Yes" selected; used when being asked if you want to overwrite a save-game slot | [view](/images/wshrm.png) | | `xajkg.hsp` | 640x480 | RGB565 Little Endian | ✨ | βœ… | βœ… | βœ… | βœ… | βœ… | βœ… | Game Boy main menu background | [view](/images/xajkg.png) | @@ -521,7 +527,7 @@ These are other files that have been identified, which don't fit into the other | `tvctu.uby` | | ✨ | 🚩 | βœ… | βœ… | βœ… | βœ… | UI strings in Russian | | `vdaz5.bjk` | | ✨ | 🚩 | βœ… | βœ… | βœ… | βœ… | UI strings in Arabic | | `wtrxj.lbd` | | ✨ | 🚩 | βœ… | βœ… | βœ… | βœ… | UI strings in Malay | -| `xjebd.clq` | | ✨ | 🚩 | βœ… | βœ… | βœ… | βœ… | UI strings in Hebrew | +| `xjebd.clq` | | ✨ | 🚩 | βœ… | βœ… | βœ… | βœ… | UI strings in Hebrew; has in inaccurate translation, see SF2000 FixHebrew by `amir16yp` in the [Tools and Links](#tools-and-links) section | #### Foldername.ini This file controls some of the UI settings for the main menu. It's a plain-text file, but not an actual INI file. It's contents from the 1.5 firmware (just as an example) are as follows: @@ -665,6 +671,7 @@ All of these are linked above already in their relevant sections, but just in ca - [Save State Tool](https://vonmillhausen.github.io/sf2000/tools/saveStateTool.htm) - [SF2000 Battery Level Patcher by Dteyn](https://github.com/Dteyn/SF2000_Battery_Level_Patcher) - [SF2000 Bluetooth Mod by IQ_132](https://neo-source.com/stuff/datafrog/) +- [SF2000 FixHebrew by `amir16yp`](https://github.com/amir16yp/sf2000-fixhebrew) (corrects Hebrew inaccuracies in the stock UI theme) - [SF2000 SNES Emulator Fix by Dteyn](https://dteyn.github.io/sf2000/tools/snesEmulatorFix.htm) - [SF2000 Theme Compilation Page](https://zerter555.github.io/sf2000-collection/) - [Silent background music file](/sounds/silentMusic/pagefile.sys) (replace the file in the `Resources` folder on the microSD card) @@ -675,6 +682,8 @@ All of these are linked above already in their relevant sections, but just in ca --- ## Document Version History +- `20231210 - 1.46`: Added a sub-section to [Hardware](#hardware) about [the USB-C port](#usb-c-port), along with a mention of the hardware hack to add USB-C to USB-C charging support (thanks for the suggestion, `@uli42`). Minor updates to [the custom firmware FAQ](#is-there-any-custom-firmware). Updates to the [Arcade](#arcade) section to note that the specific version of FBA on the SF2000 is a custom build with internal tweaks made by the firmware's developer. Made a minor correction to the [.zfb Files](#zfb-files) section (had resolution dimensions swapped by mistake). Added a note to the [Default ROMs](#default-roms) section with the specific dimensions of the thumbnail image they contain. Added links to `amir16yp`'s corrected Hebrew menu translations. + - `20231105 - 1.45`: Updated [the is-this-any-good FAQ](#is-this-thing-any-good) to mention screen tearing (thanks for the suggestion `superbottle`!), as well as references to the demonstration of the screen tearing fix. Updated [the CFW FAQ](#is-there-any-custom-firmware) with the latest details regarding the multicore alpha. Added a note about the screen tearing fix demo to the [Display](#display) section. Added a note to the [Wireless Connectivity](#wireless-connectivity) section to mention that wireless controllers compatible with the froggy cannot be used with non-froggy-style devices. Rearranged some files in the [Used](#images-used) and [Unused](#images-unused) sections, and moved that one pesky unknown file to the [Other](#other-files) section (thanks for the help, `bnister`!). - `20231020 - 1.44`: Updated [the CFW FAQ](#is-there-any-custom-firmware) with some more details on the multicore experiment. Fixed a typo (Cave Story, not Cave Store - thanks `neddunn`!).