Update README.md

Updated the is-this-any-good FAQ 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 with the latest details regarding the multicore alpha. Added a note about the screen tearing fix demo to the Display section. Added a note to the 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 and Unused sections, and moved that one pesky unknown file to the Other section (thanks for the help, `bnister`!)
This commit is contained in:
vonmillhausen 2023-11-05 18:17:45 +00:00
parent 1374b0436e
commit 5c4affdb17

View File

@ -59,7 +59,6 @@ This document is a collection of notes and information I've made about the devic
- [Favourites and History](#favourites-and-history)
- [ROM Lists](#rom-lists)
- [Sounds](#sounds)
- [Unknown Files](#unknown-files)
- [Notes For Theme Creators](#notes-for-theme-creators)
- [Tools and Links](#tools-and-links)
- [Document Version History](#document-version-history)
@ -71,18 +70,18 @@ This document is a collection of notes and information I've made about the devic
### Is this thing any good?
For a cheap device, it's actually fairly capable - most Game Boy, Game Boy Color, NES and Genesis/Mega Drive games play at full speed, and many arcade, Game Boy Advance and SNES titles do as well. The device has an IPS panel (not OCA laminated), and a user-replaceable 18650 battery, which can be charged via a USB-C port on the device. It also has analog A/V out (note: not HDMI), meaning it can be connected to a CRT TV - the type of display most arcade, Genesis/Mega Drive and SNES games were originally intended to be displayed on. It has a built-in 2.4GHz antenna, and can receive input from a compatible wireless controller (usually sold separately).
Some downsides to the device: it's mono only (you only get the left-channel audio), there's no headphone jack (although there is a volume wheel), screen brightness cannot be altered (it's fairly bright), SNES and Game Boy Advance are hit-or-miss in terms of performance (some games are fine, many games run unplayably slowly), the stock firmware is closed-source so the device's performance may never get any better than as-shipped, and some folks have had issues with the buttons (quality control is hit-or-miss, and some folks have had terrible button response, such as a d-pad that can't do diagonals reliably, or ABXY buttons that sit flush with or even go under the case).
Some downsides to the device: There's a decent amount of screen-tearing, due to a difference between the display panel's refresh rate and the rate at which it's fed image data by the rest of the hardware (although this has been shown to be mostly addressable via software changes). It's mono only; and worse yet, you only get the left-channel audio (so stereo games just lack the right audio channel entirely). There's no headphone jack (although there is a volume wheel), screen brightness cannot be altered (it's fairly bright), SNES and Game Boy Advance are hit-or-miss in terms of performance (some games are fine, many games run unplayably slowly), the stock firmware is closed-source so the device's performance may never get any better than as-shipped, and some folks have had issues with the buttons (quality control is hit-or-miss, and some folks have had terrible button response, such as a d-pad that can't do diagonals reliably, or ABXY buttons that sit flush with or even go under the case). Finally, while the device features A/V out, it does so in a slightly odd resolution (576i) which may result in borders being chopped off on your TV, depending on how your TV deals with the signal.
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 (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 October 20th 2023, **no**, not yet. Two main efforts have been made:
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:
#### 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 and PC-Engine, 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. 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. If you want to try the current **experimental** pre-alpha build, see the pinned post in 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. 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!**
@ -122,8 +121,8 @@ Alternatively, you can do it manually with a fair bit of work. The _images_ for
### SNES games run really slowly... what's wrong?
There's a bug in all stock firmware versions prior to 1.71 which often causes SNES games to run really slowly on first launch (and their sound is slow and lower pitch too); this only impacts SNES. `bnister` discovered that this appears to be related to a firmware bug, in which certain settings (audio rate and clock speed) for the SNES emulator are set _after_ Retroarch has been initialised, causing Retroarch to get confused and run at half rate. This bug was fixed in firmware 1.71, so you can [upgrade to that firmware version](#firmwarebios-bisrvasd) to fix things. If you don't want to upgrade to 1.71, there are two other ways to fix or work-around the issue:
* `Dteyn` has created a web-based tool which will patch your BIOS with a workaround to correct the issue - [you can find their tool here](https://dteyn.github.io/sf2000/tools/snesEmulatorFix.htm).
* Quitting back to the game selection menu via `START + SELECT`, and then immediately re-launching the game again will get the game to run at full speed the second time around; this would need to be done at least once every time you power on the SF2000.
* `Dteyn` has created a web-based tool which will patch your BIOS with a workaround to correct the issue - [you can find their tool here](https://dteyn.github.io/sf2000/tools/snesEmulatorFix.htm)
* Quitting back to the game selection menu via `START + SELECT`, and then immediately re-launching the game again will get the game to run at full speed the second time around; this would need to be done at least once every time you power on the SF2000
Note however that the stock firmware does also struggle a bit with SNES emulation in general, so any slowdown or poor SNES performance you see after addressing the bug is just what you get.
@ -157,7 +156,7 @@ If you have questions about the SF2000 you can't find the answer to, the best pl
Although the main CPU of the SF2000 has literally had it's markings milled off by a routing tool, the community has determined that it's a HCSEMI B210, a single-core MIPS processor running at 810 MHz (or 918 MHz with the 1.6 firmware onwards). It appears to be a clone of an ALi Tech chip. [An SDK has been found](http://www.zcsd-tech.com//download/content-54.html) for it.
### Display
The SF2000 features a `240x320` IPS display panel (not OCA laminated), which has been rotated 90° clockwise to give a `320x240` display. It demonstrates screen tearing for all emulators, running from the right of the console to the left due to the panel rotation.
The SF2000 features a `240x320` IPS display panel (not OCA laminated), which has been rotated 90° clockwise to give a `320x240` display. It demonstrates screen tearing for all emulators, running from the right of the console to the left due to the panel rotation. In October 2023, an experimental software patch for the BIOS was demonstrated which greatly reduced the screen tearing, though possibly at the cost of slight performance impacts.
### Buttons
The ABXY are basically a clone of the original SNES controller buttons. Although everyone seems to be getting two purple and two lilac coloured buttons, there's a disparity to the _type_ of buttons folks are getting - some get two convex and two concave buttons, others have gotten three concave and one convex, etc..
@ -175,7 +174,7 @@ The SF2000 uses a Switch-style thumb stick that does _not_ depress for L2/R2. It
### MicroSD Card
The SF2000 uses a microSD card for storing everything, including the device's firmware. Most SF2000s ship with an included card, formatted for 16 GB of storage. Some of the included "16 GB" microSD cards are actually 32 GB cards, even though "16 GB" is printed on them - they are genuinely 32 GB cards, and the default 16 GB partition can be expanded to use the rest of the card if desired.
The SF2000 is _very_ picky about the types of microSD cards it works with - many folks have had issues where well know, name-brand cards refuse to work in the device, while cheaper cards (like the stock card) work fine. The reasons for this have not yet been determined. If you've swapped over to using a non-stock microSD card, and your SF2000 isn't booting (and you've ruled out [the bootloader bug](#bootloader-bug)), then there's a good chance your SF2000 just won't work with the microSD card you're using.
The SF2000 is _very_ picky about the types of microSD cards it works with - many folks have had issues where well known name-brand cards refuse to work in the device, while cheaper cards (like the stock card) work fine. The reasons for this have not yet been determined. If you've swapped over to using a non-stock microSD card, and your SF2000 isn't booting (and you've ruled out [the bootloader bug](#bootloader-bug)), then there's a good chance your SF2000 just won't work with the microSD card you're using.
### Battery
The SF2000 takes a 18650 type rechargeable battery, which is easily user replaceable (it's behind a battery door with a screw), and comes with a 1,500mAh one which runs for about 4 hours. 18650 batteries with and without "nubs" both fit fine. The console has built-in over-charge protection, but _does not have under-charge protection, so for safety do not leave the console turned on when the battery is low_. From when it displays a full-screen low battery indicator, it takes about 3.5 hours to charge the stock battery. The green charging light does _not_ turn off when fully charged.
@ -185,7 +184,7 @@ Also note that while you can technically charge the SF2000 while it is powered o
The stock firmware's power monitoring system (which controls the battery level indicator on the main menu, along with when the device warns the user about a low battery condition) is poorly calibrated for the stock battery that comes with the device; as such, the SF2000 basically indicates it has a full battery at all times. `bnister` and `dteyn` from Discord worked together to identify the locations within the stock firmware where the calibrations are stored, and determined more appropriate calibration values for the stock battery. `dteyn` wrote a web-based tool which will patch an existing `bisrv.asd` file to use the new values; you can [find their "Data Frog SF2000 Battery Meter Fix" tool here](https://dteyn.github.io/sf2000/tools/batteryMeterFix.htm). They also have a Python script to do the patching specifically for the 1.6 firmware - you can [find that script here](https://github.com/Dteyn/SF2000_Battery_Level_Patcher), along with much more detail about the issue and the solution.
### Wireless Connectivity
The SF2000 does not feature WiFi or Bluetooth, but it _does_ have a 2.4Ghz antenna to support local wireless multiplayer using a compatible 2.4Ghz wireless controller for Player 2. The Y2 SFC wireless controller and the SF900 wireless controller have both been reported to work fine.
The SF2000 does not feature WiFi or Bluetooth, but it _does_ have a 2.4Ghz antenna to support local wireless multiplayer using a compatible 2.4Ghz wireless controller for Player 2. The Y2 SFC wireless controller and the SF900 wireless controller have both been reported to work fine. Note that controllers that are compatible with the SF2000 cannot be used with PCs, Android phones, or other such devices.
### A/V Output
The SF2000 features a mini-jack for analogue composite A/V output. The device is capable of output a user-selectable PAL or NTSC video signal. Only the _left_ audio channel is output - the device does _not_ down-mix to mono, which results in missing audio channels in games that expect to output stereo sound.
@ -262,11 +261,11 @@ Emulator is gpSP v0.91 (Git commit [`261b2db`](https://github.com/libretro/gpsp/
While the SF2000 does include a copy of the real GBA BIOS file in the `bios` folder, there's a bug in the 1.5 firmware (and possibly earlier firmwares) that prevents that BIOS from ever actually being loaded. As such, gpSP _always_ falls back to the built-in "NORMMATT" BIOS instead (a reverse-engineered BIOS that is not identical to Nintendo's one). This has been noted to have some compatibility issues - for example, the main menu on "The Legend of Zelda - The Minish Cap" is broken on a stock SF2000 using the 1.5 firmware due to the NORMMATT BIOS. You can correct for this bug by copying the `gba_bios.bin` file from the `bios` folder to the two following locations (create any folders as needed - and credit to `bnister` for the finding!):
- `GBA/mnt/sda1/bios/gba_bios.bin` (this fixes it for the main GBA game list)
- `ROMS/mnt/sda1/bios/gba_bios.bin` (this fixes it for GBA games added to the user `ROMS` folder)
- `sd:/GBA/mnt/sda1/bios/gba_bios.bin` (this fixes it for the main GBA game list)
- `sd:/ROMS/mnt/sda1/bios/gba_bios.bin` (this fixes it for GBA games added to the user `ROMS` folder)
### Save States
All of the above emulators support stave sates natively through an interface that is accessed by pressing SELECT + START simultaneously in-game. Four save state slots are provided per-game; the files have the extensions `.sa0`, `.sa1`, `.sa2` and `.sa3` depending on which slot they're for, and are stored in a `save` subfolder along-side wherever the game's ROM file is stored. The extension is appended to the name of the ROM file the save state is for; for example, if the ROM is called `SD:/ROMS/Apotris.gba`, and the save state is for slot 2, then the save state file name will be `SD:/ROMS/save/Apotris.GBA.sa1`. One weird note is that save states created for ROMs stored in the user `ROMS` folder on the device get their ROM file extension capitalised when a save state is created (as per the previous example with `Apotris`, where `.gba` became `.GBA`); this does _not_ happen with save states created in the other ROM folders. The capitalisation doesn't appear to matter - the SF2000 successfully loads save states with any extension capitalisation in any folder.
All of the above emulators support stave sates natively through an interface that is accessed by pressing SELECT + START simultaneously in-game. Four save state slots are provided per-game; the files have the extensions `.sa0`, `.sa1`, `.sa2` and `.sa3` depending on which slot they're for, and are stored in a `save` subfolder along-side wherever the game's ROM file is stored. The extension is appended to the name of the ROM file the save state is for; for example, if the ROM is called `sd:/ROMS/Apotris.gba`, and the save state is for slot 2, then the save state file name will be `sd:/ROMS/save/Apotris.GBA.sa1`. One weird note is that save states created for ROMs stored in the user `ROMS` folder on the device get their ROM file extension capitalised when a save state is created (as per the previous example with `Apotris`, where `.gba` became `.GBA`); this does _not_ happen with save states created in the other ROM folders. The capitalisation doesn't appear to matter - the SF2000 successfully loads save states with any extension capitalisation in any folder.
If you want to back-up the save states you've got on your SD2000's microSD card, simply back up the `save` folders and their contents (be sure not to mix up which `save` folder belongs to which ROM folder on the device). [Tadpole](https://github.com/EricGoldsteinNz/tadpole) also has a save backup feature, which will give you a `.zip` file containing all of your saves.
@ -324,7 +323,7 @@ If your SF2000 is currently able to boot normally (i.e., when you power it on, y
4. Connect the microSD card to your computer
5. Download this zip file: [SF2000_bootloader_bugfix.zip](https://cdn.discordapp.com/attachments/1099465777825972347/1105582470990135316/SF2000_bootloader_bugfix.zip)
6. Extract the zip file; inside is a folder called `UpdateFirmware`, containing a single file called `Firmware.upk`
7. Copy the `UpdateFirmware` folder to the root of the microSD card, so that the `UpdateFirmware` folder is in the same place as the `bios` and `roms` folders (i.e., you'll have an `SD:/UpdateFirmware/Firmware.upk` file)
7. Copy the `UpdateFirmware` folder to the root of the microSD card, so that the `UpdateFirmware` folder is in the same place as the `bios` and `roms` folders (i.e., you'll have an `sd:/UpdateFirmware/Firmware.upk` file)
8. Eject the microSD card from your computer, and put it back in the SF2000
9. Turn the SF2000 on; you should see a message in the lower-left corner of the screen indicating that patching is taking place. The process will only last a few seconds. If you do not see this message, and instead just go to the main menu as normal, then either this means your SF2000 has previously had the fix applied already, or you should double-check you've placed the patch file in the right place
10. When the patching is complete, you will be taken to the main menu as usual
@ -407,9 +406,7 @@ As far as I am aware, all of the below images are actively used by the latest fi
| `fvecpl.ai` | 40x24 | BGRA | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Game Boy game-list indicator | [view](/images/fvecpl.png) |
| `gakne.ctp` | 576x256 | BGRA | | | ✨ | ✅ | ✅ | ✅ | ✅ | A new copy of the English menu labels image, identical to older versions of `dxkgi.ctp` (which was changed entirely in the May 15th firmware) | [view](/images/gakne.ctp.png) |
| `gkavc.ers` | 576x256 | BGRA | | | ✨ | ✅ | ✅ | ✅ | ✅ | A new copy of the Chinese menu labels image, identical to older versions of `itiss.ers` (which was changed entirely in the May 15th firmware) | [view](/images/gkavc.ers.png) |
| `gpsvc.bvs` | 392x80 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | In-game menu save-state slot (position 3) | [view](/images/gpsvc.png) |
| `hctml.ers` | 640x480 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Arcade main menu background | [view](/images/hctml.png) |
| `hgcpl.cke` | 392x80 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | In-game menu save-state slot (position 2) | [view](/images/hgcpl.png) |
| `hlink.bvs` | 640x480 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Search keyboard (hover) | [view](/images/hlink.png) |
| `htui.kcc` | 40x24 | BGRA | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Game Boy Color game-list indicator | [view](/images/htui.png) |
| `icm32.dll` | 40x24 | BGRA | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Game Boy Advance game-list indicator | [view](/images/icm32.png) |
@ -422,13 +419,11 @@ As far as I am aware, all of the below images are actively used by the latest fi
| `jccatm.kbp` | 640x480 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | "Battery Empty" screen | [view](/images/jccatm.png) |
| `ke89a.bvs` | 1008x164 | BRGA | | ✨ | 🚩 | ✅ | ✅ | ✅ | ✅ | User settings screen icons and labels in Portuguese | [view](/images/ke89a.bvs.png) |
| `kmbcj.acp` | 640x480 | RGB565 Little Endian | | | ✨ | ✅ | ✅ | ✅ | ✅ | The full-screen background image for the new button mapping screen | [view](/images/kmbcj.acp.png) |
| `ksxbar.ax` | 392x80 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | In-game menu save-state slot (position 4) | [view](/images/ksxbar.png) |
| `lfsvc.dll` | 640x480 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Search game-list background | [view](/images/lfsvc.png) |
| `lk7tc.bvs` | 52x192 | BGRA | | | ✨ | ✅ | ✅ | ✅ | ✅ | Transparent labels for the button assignments in the new button mapping feature; these are the ones overlaid on the big SF2000 image showing the current assignments | [view](/images/lk7tc.bvs.png) |
| `lkvax.aef` | 640x480 | RGB565 Little Endian | | | ✨ | ✅ | ✅ | ✅ | ✅ | History game-list background | [view](/images/lkvax.aef.png) |
| `mkhbc.rcv` | 640x1440 | RGB565 Little Endian | | | ✨ | ✅ | ✅ | ✅ | ✅ | Six vertically-stacked images of the SF2000 with different buttons highlighted, used as part of the new button mapping feature's UI | [view](/images/mkhbc.rcv.png) |
| `mksh.rcv` | 640x480 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Search keyboard (normal) | [view](/images/mksh.png) |
| `msdmo.gdb` | 392x80 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | In-game menu save-state slot (position 1) | [view](/images/msdmo.png) |
| `msgsm.dll` | 40x24 | BGRA | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Arcade game-list indicator | [view](/images/msgsm.png) |
| `mssvp.nec` | 1008x164 | BRGA | | ✨ | 🚩 | ✅ | ✅ | ✅ | ✅ | User settings screen icons and labels in Japanese | [view](/images/mssvp.nec.png) |
| `normidna.bin` | 40x24 | BGRA | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Search game-list indicator | [view](/images/normidna.png) |
@ -468,13 +463,17 @@ To the best of my knowledge, the following image files are currently __unused__
| `fcont.ctp` | 640x480 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Alternate UI: User main menu background | [view](/images/unused/fcont.ctp.png) |
| `fdbil.ph` | 1100x120 | BGRA | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Large icons for each system, including systems not supported by the SF2000 (selected) | [view](/images/unused/fdbil.ph.png) |
| `gpapi.bvs` | 640x480 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | In-game menu (position 5; looks like it was for some kind of button layout changing UI) | [view](/images/unused/gpapi.bvs.png) |
| `gpsvc.bvs` | 392x80 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | In-game menu save-state slot (position 3) | [view](/images/gpsvc.png) |
| `hgcpl.cke` | 392x80 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | In-game menu save-state slot (position 2) | [view](/images/hgcpl.png) |
| `ihds.bke` | 640x480 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Genesis/Mega Drive game-list background, with baked-in thumbnail placeholder | [view](/images/unused/ihds.bke.png) |
| `kdill.hsp` | 640x480 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Alternate UI: Game Boy Advance main menu background | [view](/images/unused/kdill.hsp.png) |
| `ksxbar.ax` | 392x80 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | In-game menu save-state slot (position 4) | [view](/images/ksxbar.png) |
| `logilda.be` | 40x24 | BGRA | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | CPS1 game-list indicator | [view](/images/unused/logilda.be.png) |
| `mfc64.emc` | 40x24 | BGRA | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | CPS2 game-list indicator | [view](/images/unused/mfc64.emc.png) |
| `mfpmp.ers` | 640x480 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Alternate UI: Arcade main menu background | [view](/images/unused/mfpmp.ers.png) |
| `mhg4s.ihg` | 400x192 | RGB565 Little Endian | | | ✨ | ✅ | ✅ | ✅ | ✅ | Background and buttons for a "warning" prompt with "OK", "Yes" and "No" buttons. Also has rounded edges stored in a separate image file, `zaqrc.olc` | [view](/images/unused/mhg4s.ihg.png) |
| `mrtac.klo` | 40x24 | BGRA | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Neo Geo game-list indicator | [view](/images/unused/mrtac.klo.png) |
| `msdmo.gdb` | 392x80 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | In-game menu save-state slot (position 1) | [view](/images/msdmo.png) |
| `msdtc.bke` | 640x480 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Alternate UI: Game Boy Advance main menu background | [view](/images/unused/msdtc.bke.png) |
| `mswbv.cpl` | 640x480 | RGB565 Little Endian | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Alternate UI: Game Boy Advance main menu background | [view](/images/unused/mswbv.cpl.png) |
| `nettrace.dll` | 40x24 | BGRA | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Unknown game-list indicator (grey joystick with yellow buttons) | [view](/images/unused/nettrace.dll.png) |
@ -509,6 +508,7 @@ These are other files that have been identified, which don't fit into the other
| `History.bin` | | | ✨ | ✅ | ✅ | ✅ | ✅ | Used to store the history of played ROMs; only appears after the first game is played after installing the 05.15 or later firmware. User ROMs are not added to history, only built-in games. If a built-in game that is referenced in history is removed from the device, the device will crash when trying to view the History screen. You can delete the History.bin file to clear the device's history; there is no built-in functionality to do so |
| `jsnno.uby` | | ✨ | 🚩 | ✅ | ✅ | ✅ | ✅ | UI strings in Dutch |
| `kcbn7.avc` | | ✨ | ❌ | | | | | Duplicate copy of `bisrv.asd`, the main firmware for the device which is found in the BIOS folder |
| `kcnuv.lit` | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | A bunch of 4-byte binary chunks (e.g., `0xC4 0x00 0x00 0x00`), followed by a list of .NES ROM file names. Very similar to the `.bvs`/`.nec`/`.tax` files detailed in the [ROM Lists](#rom-lists) section below, but doesn't have the same type of "header" they have. This file is not referenced anywhere in the BIOS, and is unused |
| `KeyMapInfo.kmp` | | | ✨ | ✅ | ✅ | ✅ | ✅ | Used to store the user-assignable global button mappings for each emulated system |
| `lf9lb.cut` | | ✨ | 🚩 | ✅ | ✅ | ✅ | ✅ | UI strings in Portuguese |
| `ntrcq.oba` | | ✨ | 🚩 | ✅ | ✅ | ✅ | ✅ | UI strings in Japanese |
@ -548,7 +548,7 @@ FF8000 ROMS
And here's my current understanding of what each line is used for:
- `SF2000`: The name of the device; I don't believe it's actively used anywhere, please correct me if I'm wrong!
- `SF2000`: The name of the device; this string is checked by the BIOS to ensure it matches `SF2000`
- `17`: The number of languages supported by the firmware
- `FFFFFF`: Hexadecimal colour (RGB) for the general game-list texts, and the `x/yyy` game count in the top-right corner of each game-list
- `FF8000 ROMS`: The first defined main menu section (the sections that are scrolled vertically on the main menu). Internally they are numbered from 0; so the `ROMS` section (user ROMs and settings) is 0, `FC` (NES) is 1, `SFC` (SNES) is 2, etc.. The `FF8000` is the hexadecimal colour (RGB) to display the text of the currently selected/highlighted game in the list; the default colour is orange. _Side note:_ after the `ARCADE` section, there's two additional `ROMS` sections; the firmware is hard-coded to have ten sections. The SF2000 appears to share its firmware with other similar devices, and some of those devices feature different menu sections (e.g., "CPS1", "Neo Geo", etc.). I suspect that the best of those systems has ten sections in its main menu, which doesn't match up with the eight sections on the SF2000 (seven supported systems + the user ROMs/settings section). As the firmware requires ten sections to be defined, they just repeated the `ROMS` section to fill in the remaining places. Like I say, that's just a guess!
@ -631,13 +631,6 @@ If you want to do it using [Audacity](https://www.audacityteam.org/), the steps
If you would like to silence all the _UI_ sounds (everything other than the background music), `dteyn` has created a [Silent Sounds Pack](https://github.com/Dteyn/sf2000/raw/main/sounds/silentSounds/SF2000_Silent_Sounds_Pack.zip) (direct link to `.zip`). It contains eight replacement silent audio files - just drop them into the `Resources` folder on the microSD card, replacing the eight current files, and say goodbye to the SF2000's UI noises.
### Unknown Files
These are files that I have not yet determined what they do; if anyone has any information on these, do post about it in the Data Frog channel in the Retro Handhelds Discord server please!
| Filename | 03.15 | 04.20 | 05.15 | 1.5 | 1.6 | 1.7 | 1.71 | Description |
| -------- | ----- | ----- | ----- | --- | --- | --- | ---- | ----------- |
| `kcnuv.lit` | ✨ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | UNKNOWN; a bunch of 4-byte binary chunks (e.g., `0xC4 0x00 0x00 0x00`), followed by a list of .NES ROM file names. Very similar to the `.bvs`/`.nec`/`.tax` files detailed above, but doesn't have the same type of "header" they have |
### Notes For Theme Creators
This section isn't really about the `Resources` files per-se, but it's tangentially related. The fact that the SF2000's UI resources are pulled from the microSD card opens up the door to "theming" the device, which is great. However, if you do decide you want to make a theme for the SF2000, here's a few things I've found that you may want to bear in mind:
@ -682,6 +675,8 @@ All of these are linked above already in their relevant sections, but just in ca
---
## Document Version History
- `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`!).
- `20231019 - 1.43`: Refactored [the CFW FAQ](#is-there-any-custom-firmware) to make the hcRTOS and multicore efforts more distinct. Refactored [the shortcuts FAQ](#how-do-i-change-the-four-shortcutsgames-listed-on-each-systems-main-menu-page) to mention Tadpole first (easier for most folks). Refactored [the slow SNES FAQ](#snes-games-run-really-slowly-whats-wrong) in light of 1.71. Refactored [the quiet A/V output FAQ](#when-i-connect-the-sf2000-to-a-tv-via-the-av-cable-the-sound-is-very-quietlow---is-that-normal) to suggest firmware updating first. Added details about the new 1.71 firmware version to the [Firmware](#firmwarebios-bisrvasd) and [Resources](#resources) sections, and did a lot of little edits throughout the doc as well to standardise on Data Frog's version numbering (seems to be what most folks refer to). Added a note that [the permanent bootload bugfix](#if-your-sf2000-is-currently-able-to-boot-normally) only needs to be applied once per device. Added another modification example to the analysis of [`Foldername.ini`](#foldernameini) courtesy of `wyverino`.