Skip to the content.

SF2000

The SF2000 is a cheap hand-held emulation gaming console which was released in early 2023. Although the device itself is sold by a variety of vendors, it was the vendor "Data Frog" who caught public attention, and so the device is often simply referred to as "the Data Frog".

This document is a collection of notes and information I've made about the device.


Table of Contents


FAQ (Frequently Asked Questions)

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: 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 (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 February 23rd 2024, 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 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 has been set up by kobil for the work on modifying the stock firmware; additionally, a GitHub repo 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. 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 - otherwise you're likely to end up with a non-booting device. Seriously - do this before you do anything else!

Afterwards, in no particular order, some of the current customisation options available are:

Many of the above tasks can be done using Tadpole, a general management tool for the SF2000 developed by .ericgoldstein and jasongrieves_02643. Eric also wrote a guide for setting up the SF2000, which you can find here.

How do I install new menu themes?

The SF2000 doesn't natively support themes at all; however, all of the images and sounds for the stock theme live in the Resources folder on the microSD card. Therefore, by simply replacing the stock theme's files, the stock theme can be replaced.

A centralised repository for boot logos, custom themes and background music has been created by Zerter#4954, which you can find here; you can also find many of them linked in the The Frog's Best Bits 🐸 thread of the 🐸data_frog_sf2000 channel in the Retro Handhelds Discord server.

The community built tool Tadpole can be used to change the theme on the SF2000, amongst many other features.

If you wish to manually install a theme you've downloaded, just take the files from the theme, and use them to replace the existing files on the microSD card. You might want to make your own backup of the stock Resources folder first, in case you want to go back to the stock theme yourself at a later date. Note also that in addition to theme assets, the Resources folder also contains data files related to your button mapping, favourites and history, etc.; so when backing up or replacing files in Resources for themes, just be aware not to overwrite anything non-theme-related you want to keep.

Another thing to note: some themes might come with an updated boot logo. If that logo is provided as a bisrv.asd file in the bios folder, this is actually a modified firmware for the device, which happens to contain the new logo. If you decide to replace your existing bisrv.asd file, you might want to make sure that the theme's firmware version matches the firmware version already on your device. Generally, it's probably safer just to update your own firmware's boot logo with an image file.

How do I change the four shortcuts/games listed on each system's main menu page?

Recent versions of Tadpole by .ericgoldstein and jasongrieves_02643 have support for changing the shortcuts if you're looking for an automated way to do things. There's also a separate web-based tool from Zerter#4954 which lets you edit these icons, you can find it here.

Alternatively, you can do it manually with a fair bit of work. The images for the shortcuts are baked into each system's main menu background image - check out the "Images (Used)" section below, and use your browser's search feature to search for main menu background, and you'll see what I mean. The text under each shortcut is stored in a separate image - in firmware version 1.5 onwards, the files are gkavc.ers if the device's language is set to Chinese, or gakne.ctp for all other languages (again, check the details in the "Images (Used)" section below). Finally, the actual roms that are launched for each shortcut are stored in the xfgle.hgp file, which is plain text - you can learn more about it in the "ROM Lists" section below.

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 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:

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.

Help! My SF2000 won't turn on, or is stuck at a black screen!

The three most likely causes for this are:

When I connect the SF2000 to a TV via the A/V cable, the sound is very quiet/low - is that normal?

This was due to a bug in some earlier firmware versions; it was officially fixed in firmware 1.6, so if you're running a prior firmware version (check here), you can upgrade to a newer firmware version.

Alternatively, Zerter#4954 from Discord found a workaround if you don't want to upgrade:

when I did this the AV audio work normally: I had to load the game first then plug-in the 2.5mm to rca jack. [...] but when I quit then exit then tried the game again it returns to very low audio. [...] will need to do the work around again

So you can try launching the game first, and then plug in the A/V cable to get full volume on the TV.

Game saves don't seem to be working for me? Save states are fine, but the built-in save function in games doesn't seem to work?

Unfortunately, correct - with the stock firmware, the built-in save feature of emulated games does not work correctly, and the SF2000 won't store new save data after the first time it's created for a game. If you want to save your progress in a game on the SF2000's stock firmware, use save states instead. Note that firmware 1.6 appears to have fixed this for GBA based on community reports, but not for other emulated systems.

What's the GB300?

The GB300 is essentially an SF2000 in a vertical form-factor. There are some differences though - it has a worse quality screen, lacks hardware support for wireless controllers, and is incompatible with SF2000 firmware due to the different display panel being used. Some folks from the SF2000 dev community have already produced some tools and things for the GB300 - I won't be covering the device myself, but I will put a few links in the Tools and Links section below to get you started, and you should really hop (pun intended) into the 🐸data_frog_sf2000 channel in the Retro Handhelds Discord server and do some searches there (specifically you should also check out the Gb300 dev thread in that channel).

I have a question that isn't answered here... who or where do I ask?

If you have questions about the SF2000 you can't find the answer to, the best place to ask is in the 🐸data_frog_sf2000 channel in the Retro Handhelds Discord server.


Hardware

CPU

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 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. 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..

Both the buttons and the underlying membrane from an original SNES controller can be swapped into the SF2000, which may improve the "feel" of the buttons. Note that the SF2000 uses ABXY buttons that have two plastic tabs sticking out to keep them in the shell (at 180 degrees from each other); some after-market SNES-style buttons have three tabs, and won't fit the housing.

Some folks have modded the stock ABXY buttons on their SF2000s by adding a thin strip of tape or other thin material into the circular depression under each button - this causes the buttons to be raised a bit higher out of the shell, and to not sink as far into the shell when the button is pressed.

D-Pad

Just like the ABXY buttons, the d-pad is a clone of the SNES d-pad. An original SNES d-pad and membrane can be swapped into the SF2000 as well.

Thumb Stick

The SF2000 uses a Switch-style thumb stick that does not depress for L2/R2. It is compatible with Switch thumb stick third-party covers.

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 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), 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.

Also note that while you can technically charge the SF2000 while it is powered on, doing so using a charger that supports fast charging or power delivery has a high chance of blowing the charging module IC and killing the device (multiple community reports). For safest charging, use a charger that only supports a maximum output of 5v.

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. They also have a Python script to do the patching specifically for the 1.6 firmware - you can find that script here, 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. 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.

There's some limited evidence to suggest the A/V output is at 576i. When outputting a PAL signal, while the signal is indeed 50Hz, it seems like the emulators are still targeting 60Hz output - PAL scrolling is "jerky". Switching the device to output NTSC, scrolling becomes smooth. This holds true regardless of using a PAL or NTSC version of a ROM. Depending on your external display, video output over A/V may be somewhat heavily cropped on all screen edges - if so, this can result in UI elements at screen edges in games (health bars, remaining credits, etc.) being out-of-frame. Switching between PAL and NTSC doesn't alter the visible screen area. I've tested with a modern flat-panel Panasonic TV (cropped), a 1980s Commodore 1702 monitor (cropped), and with a cheap USB 2.0 "EasyCap" video-capture USB stick (not cropped).

On my own unit, plugging in a charging cable while outputting over A/V introduces a lot of video noise in the A/V signal; so those planning to use the SF2000 as a TV console may need to do so while running on battery for the best experience.

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.

USB-C Port

The SF2000 has a USB-C port for charging the battery (see the 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

The device advertises support for arcade, NES, SNES, Genesis/Mega Drive, Game Boy, Game Boy Color and Game Boy Advance; it also supports loading Master System ROMs. SNES and GBA performance are very hit-or miss (more miss than hit, really); the other consoles actually perform fairly well. All consoles currently stretch their output to fill the display, and do not maintain aspect ratio.

The SF2000 appears to be using Libretro with a custom front-end (i.e., not RetroArch).

Arcade

The device is running a customised version of Final Burn Alpha, close to v0.2.96.86 (Git commit a324b2d), but with a tacked-on Libretro interface from v0.2.97.42 (Git 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 dat files - one for all sets technically supported by the SF2000's current BIOS (as of May 2023; though note that "supported" does not mean working or playable), and one for all playable sets 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" 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 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:

Neo Geo Unibios Menu

Discord user nanchon18#2262 discovered that with Neo Geo games using the Unibios, the Unibios menu can be accessed in-game by pressing SELECT + START + up simultaneously. The Unibios allows access to features like cheats and DIP-switch settings for the game.

.skp Files

Another thing worth mentioning about arcade emulation on the SF2000; in the ARCADE folder on the microSD card is a sub-folder called skp. This folder contains (by default) 167 .skp files, each named after one of the zipped ROM sets in the ARCADE/bin folder (e.g., mslug.zip.skp). These files are actually save state bundle files, just like the ones you can save yourself using the save state feature - the only difference is that these have the .skp extension instead of .sa#, and these are loaded automatically when the game itself is loaded. Many of these files start their respective arcade game up with a credit already inserted. One speculative possibility for why these files exist is that some arcade games will start to a dip-switch screen, or some other ROM-check screen, which may be difficult to bypass with the SF2000's limited controls - a save state that automatically loads past such a screen is therefore very useful to have.

As the .skp files are just save states under a different name, if you want to mess around with them you can use my Save State Tool to do so - if you're creating a new .skp file, just pick any save state slot, and change the downloaded SF2000 save state bundle extension from .sa# to .skp.

You can learn more about save states below.

.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 name of the .zfb file is how the game is named in the SF2000 menu. The four arcade game shortcuts on the top-level SF2000 menu point directly to their respective .zip files, and not to the .zfb files (as the .zfbs are just for a name and a thumbnail, neither of which are required on the top-level menu).

NES

Emulator is FCEUmm (Git commit 7cdfc7e). There are references in the firmware to different NES palettes, but there's no interface or configuration for the emulator itself to choose one. On the original firmware, the A and B buttons were swapped. See "Button Mappings/Key Bindings" section below.

SNES

Emulator is Snes9x 2005 v1.36 (Git commit b94a804). For most firmware versions before 1.71, SNES games often appear to run very slowly on first launch; you can learn more about this issue and how to correct it here.

Genesis/Mega Drive

Emulator is PicoDrive 1.91 (Git commit cbc93b6). Works pretty well. This emulator is capable of loading Master System ROMs if placed in the user ROMs folder on the microSD card; Game Gear ROMs do not load. Some PAL-region games may run too fast; NTSC-region games seem to always run at the correct speed. On the original firmware, A was mapped to A, B was mapped to B, and RB was mapped to C for some reason. See "Button Mappings/Key Bindings" section below.

Game Boy

Emulator is TGB Dual v0.8.3 (Git commit 9be31d3). Uses a black and white colour palette, which currently cannot be changed. On the original firmware, the A and B buttons were swapped. See "Button Mappings/Key Bindings" section below.

Game Boy Color

Emulator is TGB Dual v0.8.3 (Git commit 9be31d3). On the original firmware, the A and B buttons were swapped. See "Button Mappings/Key Bindings" section below.

Game Boy Advance

Emulator is gpSP v0.91 (Git commit 261b2db). Performance is fairly poor. On the original firmware, A and B buttons are mapped correctly, but the GBA shoulder buttons are mapped to X and Y for some reason. See "Button Mappings/Key Bindings" section below.

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!):

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.

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 also has a save backup feature, which will give you a .zip file containing all of your saves.

The save state files themselves contain two zlib-compressed data blobs, plus associated metadata - one blob for the raw save state data created by the emulator itself, and one blob for the thumbnail used for the save state in the UI. The exact format is as follows

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.

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 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.

I was curious to see how the included ROMs matched up against the current "No-Intro" 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, and a raw CSV file of the same data here. 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.


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 occasionally 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; 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.

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. Refer to Tadpole's documentation for more information.

Known firmware versions are currently (dates approximate):

Date Version Notes
Mid-March ? The original firmware that shipped with the first batch of devices
April 20th ? The first official firmware update; fixed some button mappings for Genesis, added support for 15 new languages. Also partially broke SNES compatibility - many SNES games will run very slowly on first launch, but quitting and immediately re-launching the game will have it run at normal speed (normal for the SF2000, anyway)
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.5 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.6 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 The SNES first-launch speed bug was fixed, however 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. DO NOT USE THIS FIRMWARE VERSION!
October 13th 1.71 This is a bugfix release - the bug with SNES save states introduced in 1.7 was fixed, so this firmware appears to be stable again. Analysis shows no other significant changes from 1.7

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.

Custom firmware (CFW) is currently in the very early stages of development (see here). In the meantime, the stock firmware has been investigated quite a bit; here are some findings from it:

Bootloader Bug

The bootloader on the SF2000 (the bit of code embedded in the devices hardware; it initialises things, and kicks-off loading of the BIOS from bisrv.asd) has a bug, which can cause the SF2000 to lock-up with a black screen during boot if the bios folder has been messed with. Specifically, the bug is triggered when the bios folder's FAT table contains a multiple of 4 entries, or a multiple of 4 plus 1.

It's strongly recommended that you fix the bug on your SF2000, as failure to do so can cause some headaches for you down the road with a non-booting device. There's a couple of ways to go about fixing it:

If Your SF2000 Is Currently Able To Boot Normally

If your SF2000 is currently able to boot normally (i.e., when you power it on, you get to the stock main menu), then you can permanently fix the bug in the device's hardware as follows (credit to bnister for both finding the root cause for the bug, and creating the permanent fix) - this only needs to be done once per SF2000, and is not tied to the microSD card or BIOS in any way:

  1. Ensure your SF2000 is in a state where it boots normally when turned on (displays a boot logo, proceeds to the stock firmware main menu)
  2. Ensure your SF2000's battery is fully charged (having the device power off during the patching process will likely "brick" it, rendering it inoperable)
  3. Power off the SF2000, and remove the microSD card
  4. Connect the microSD card to your computer
  5. Download this zip file: 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)
  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
  11. Power off the SF2000, and remove the microSD card
  12. Connect the microSD card to your computer
  13. Delete the UpdateFirmware folder (it's no longer needed)

If Your SF2000 Is Currently Not Booting (Black Screen)

If your device is currently not booting, and you've modified the bios folder in any way (e.g., patching a new boot logo, upgrading firmware, etc.), you can attempt to get the SF2000 booting again by creating empty text files inside the bios folder, one at a time (this creates new FAT entries, and should get you away from numbers of entries the stock bootloader doesn't like). For example, create an empty file in the bios folder called "temp1.txt", put the microSD card back in the SF2000, and see if it boots. If it still doesn't, add a "temp2.txt" file to the bios folder, put the card back in the SF2000 and try booting again, etc..

Alternatively, recent versions of Tadpole can help to automate this process for you.

NOTE: Once you get your SF2000 booting again, I strongly suggest you perform the permanent fix to the bug to prevent from getting into the same situation again in the future.

There are also some other reasons why an SF2000 may not be booting.

Button Mappings/Key Bindings

bnister discovered that the OS supports loading game-specific key bindings from .kmp files, stored in the save folder for each system and named after a game's ROM file (e.g., /FC/save/Game Name.EXT.kmp). They also discovered where in the bisrv.asd file the default mappings for each emulator are stored. Working with this information, notv37 worked out what bits related to what buttons for each emulator. Using both their findings, we now have a tool which can be used to update both the global button mappings for the emulators, as well as create per-ROM mappings - you can find this tool here.

Note that the game-specific key bindings function have been removed from the May 15th firmware onwards.

When the device is powered on, a "Welcome" image is displayed for a short time before the main menu appears. This image comes from inside bisrv.asd, (towards the end; exact offset varies between BIOS revisions). It's a 512x200 RGB565 Little Endian raw image file, and looks like this:

Boot Logo

The image is actually displayed at half-resolution on the internal display though, 256x100, centred in the middle of the screen. The boot logo can be changed to an arbitrary 256x100 image using a web-based tool I wrote, which you can find here.


Resources

The Resources folder on the microSD card contains all of the resources used by the device's firmware to construct the user interface at runtime. The following tables list the files from various firmware versions (the numbered columns, in approximate mm.dd format for firmwares we don't have official version numbers for, and regular version numbers for the rest) and what they are used for, grouped by broad categories. Resolution and format given are for the latest firmware version only; details may be different for older firmwares. The icons in the firmware columns have the following meanings:

Fonts

Filename 03.15 04.20 05.15 1.5 1.6 1.7 1.71 Description
Arial_cn.ttf ✨ βœ… βœ… βœ… βœ… βœ… The "Arial" typeface, containing Latin, Greek, Cyrillic, Chinese, and Japanese characters. Duplicate of yahei_Arial.ttf, the single font file from the original firmware version
Arial_en.ttf ✨ βœ… βœ… βœ… βœ… βœ… The "Arial" typeface, containing Latin, Greek, Cyrillic, Armenian, Hebrew and Arabic characters
Arial_jp.ttf ✨ βœ… βœ… βœ… βœ… βœ… The "Arial" typeface, containing Latin, Greek, Cyrillic, Chinese and Japanese characters
Arial_kr.ttf ✨ βœ… βœ… βœ… βœ… βœ… The "Arial" typeface, containing Latin, Greek, Cyrillic, Chinese, Japanese and Korean characters
Tahoma.ttf ✨ βœ… βœ… βœ… βœ… βœ… The "Tahoma" typeface, containing Latin, Greek, Cyrillic, Armenian, Hebrew, Arabic and Thai characters
yahei_Arial.ttf ✨ βœ… βœ… βœ… βœ… βœ… βœ… The "Arial" typeface, containing Latin, Greek, Cyrillic, Chinese, Japanese and Korean characters

Images (Used)

As far as I am aware, all of the below images are actively used by the latest firmware version; happy to take any corrections if it turns out any of them are unused! Note that while the stock theme is based around a 640x480 resolution, the actual display on the SF2000 is a 320x240 one. The OS on the device uses nearest-neighbour scaling for its images, giving the stock UI a somewhat aliased appearance. If you're planning to make your own theme for the SF2000, see my Notes For Theme Creators section below for some tips and tricks. I've written a generic image tool for the SF2000 - it lets you convert SF2000-formatted images to PNG files, and lets you convert PNG or JPEG images to SF2000 formats (which may be useful if you want to theme your device); you can find this tool here.

Filename Resolution Format 03.15 04.20 05.15 1.5 1.6 1.7 1.71 Description View
aepic.nec 1008x164 BGRA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in Korean view
apisa.dlk 640x480 RGB565 Little Endian ✨ βœ… 🚩 βœ… βœ… βœ… βœ… Arcade game-list background view
appvc.ikb 150x214 BRGA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Game art placeholder view
awusa.tax 1008x164 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in Thai view
bisrv.nec 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… In-game menu (position 3) view
bttlve.kbp 60x144 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Battery level indicator icons view
c1eac.pal 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… SNES game-list background view
cero.phl 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Game Boy Color game-list background view
certlm.msa 40x24 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… NES game-list indicator view
cketp.bvs 640x816 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… The console selection images at the bottom of the new button mapping feature screen view
d2d1.hgp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… In-game menu (position 2) view
dism.cef 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… In-game menu (position 1) view
djctq.rsd 40x24 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… SNES game-list indicator view
djoin.nec 1008x164 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in Spanish view
dpskc.ctp 640x320 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… In-game menu save-state slots (positions 1, 2, 3 and 4) view
drivr.ers 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… SNES main menu background view
dsuei.cpl 640x480 RGB565 Little Endian ✨ βœ… 🚩 βœ… βœ… βœ… βœ… User ROMs main menu background view
dxdiag.bin 40x24 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Genesis/Mega Drive game-list indicator view
dxkgi.ctp 1008x164 BRGA ✨ βœ… 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in English view
dxva2.nec 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Search keyboard (pressed) view
ectte.bke 161x126 BRGA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Main menu icon selection box view
efsui.stc 640x480 RGB565 Little Endian ✨ βœ… 🚩 βœ… βœ… βœ… βœ… Game Boy Advance game-list background view
esent.bvs 1008x164 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in Turkish view
exaxz.hsp 152x1224 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… βœ… Main menu "Games Exist" and "Start: Open" labels for all languages view
fixas.ctp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… NES main menu background view
fltmc.sta 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Game Boy game-list background view
fvecpl.ai 40x24 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Game Boy game-list indicator view
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
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
hctml.ers 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Arcade main menu background view
hlink.bvs 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Search keyboard (hover) view
htui.kcc 40x24 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Game Boy Color game-list indicator view
icm32.dll 40x24 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Game Boy Advance game-list indicator view
icuin.cpl 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Genesis/Mega Drive main menu background view
igc64.dll 217x37 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… "Yes" and "No" text, with "No" selected; used when being asked if you want to overwrite a save-game slot view
ihdsf.bke 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Genesis/Mega Drive game-list background view
irftp.ctp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Game Boy Advance main menu background view
irmon.tax 1008x164 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in Dutch view
itiss.ers 1008x164 BRGA ✨ βœ… 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in Chinese view
jccatm.kbp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… "Battery Empty" screen view
ke89a.bvs 1008x164 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in Portuguese view
kmbcj.acp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… The full-screen background image for the new button mapping screen view
lfsvc.dll 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Search game-list background view
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
lkvax.aef 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… History game-list background view
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
mksh.rcv 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Search keyboard (normal) view
msgsm.dll 40x24 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Arcade game-list indicator view
mssvp.nec 1008x164 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in Japanese view
normidna.bin 40x24 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Search game-list indicator view
ntdll.bvs 1008x164 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in Polish view
nvinf.hsp 16x240 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Latin numbers 0 to 9 listed vertically, used for the number of games available in each main menu category view
okcg2.old 32x32 BGRA ✨ βœ… βœ… βœ… βœ… The star icon that appears beside favourited games in the game-lists view
pcadm.nec 1008x164 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in Italian view
pwsso.occ 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… In-game menu (position 4) view
qasf.bel 640x480 RGB565 Little Endian ✨ βœ… 🚩 βœ… βœ… βœ… βœ… User game-list background view
qwave.bke 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Game Boy Color main menu background view
rmapi.tax 1008x164 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in German view
sdclt.occ 120x240 RGB565 Little Endian ✨ 🚩 🚩 βœ… βœ… βœ… βœ… TV system selection icons view
sensc.bvs 1008x164 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in French view
sfcdr.cpl 576x1344 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… βœ… Main menu system logos view
subst.tax 1008x164 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in Russian view
ucby4.aax 1008x164 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in Arabic view
urlkp.bvs 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… NES game-list background view
uyhbc.dck 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… Favourites game-list background view
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 section view
vssvc.nec 1008x164 BRGA ✨ 🚩 βœ… βœ… βœ… βœ… User settings screen icons and labels in Malay view
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
xajkg.hsp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Game Boy main menu background view
ztrba.nec 64x320 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… Non-transparent labels for the button assignments in the new button mapping feature; these are the ones that pop up when you go to change a button assignment view

Images (Unused)

To the best of my knowledge, the following image files are currently unused by the 20230515 firmware, and were probably left over from previous devices (the SF2000 shares a bit of lineage with some USB-stick devices) or development. The images marked "Alternate UI" below appear to have been for a UI where the systems were scrolled through horizontally, and the "shortcut" games for each system were scrolled vertically.

Filename Resolution Format 03.15 04.20 05.15 1.5 1.6 1.7 1.71 Description View
aeinv.bke 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: Genesis/Mega Drive main menu background view
aepic.ers 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: User main menu background view
c1e.pal 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… CPS2 game-list background view
cca.bvs 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… In-game menu (position 1; Chinese language hardcoded) view
dectMap.key 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Button test screen (active) view
desk.cpl 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Eight-game selection screen view
djoin.hsp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: Arcade main menu background view
fcont.ctp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: User main menu background view
fdbil.ph 1100x120 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Large icons for each system, including systems not supported by the SF2000 (selected) view
gpapi.bvs 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… In-game menu (position 5; looks like it was for some kind of button layout changing UI) view
gpsvc.bvs 392x80 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… In-game menu save-state slot (position 3) view
hgcpl.cke 392x80 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… In-game menu save-state slot (position 2) view
ihds.bke 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Genesis/Mega Drive game-list background, with baked-in thumbnail placeholder view
kdill.hsp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: Game Boy Advance main menu background view
ksxbar.ax 392x80 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… In-game menu save-state slot (position 4) view
logilda.be 40x24 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… CPS1 game-list indicator view
mfc64.emc 40x24 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… CPS2 game-list indicator view
mfpmp.ers 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: Arcade main menu background view
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
mrtac.klo 40x24 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Neo Geo game-list indicator view
msdmo.gdb 392x80 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… In-game menu save-state slot (position 1) view
msdtc.bke 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: Game Boy Advance main menu background view
mswbv.cpl 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: Game Boy Advance main menu background view
nettrace.dll 40x24 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Unknown game-list indicator (grey joystick with yellow buttons) view
nsibm.ctp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: Arcade main menu background view
nvinfohsp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: Genesis/Mega Drive main menu background (note: there's no extension separator for this file, I suspect the file name is typo'd in the filesystem!) view
pcadm.hsp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: User main menu background (NTSC TV system selected) view
plasy.ers 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: Game Boy Advance main menu background view
rmapi.cpl 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: User main menu background (English UI language selected) view
seltMap.key 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Button test screen view
spmpm.gdp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: NES game-list background, with baked-in thumbnail placeholder view
subst.bke 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: Arcade main menu background view
tsmcf.cpl 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Alternate UI: Arcade main menu background view
url.bvs 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… CPS1 game-list background view
werui.ioc 320x240 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… "NODATA" save-state thumbnail placeholder image, with a "horror" style typeface view
wshom.ocx 1100x120 BGRA ✨ βœ… βœ… βœ… βœ… βœ… βœ… Large icons for each system, including systems not supported by the SF2000 (normal) view
x86e.hgp 640x480 RGB565 Little Endian ✨ βœ… βœ… βœ… βœ… βœ… βœ… Neo Geo game-list background view
zaqrc.olc 8x224 BGRA ✨ βœ… βœ… βœ… βœ… Rounded ends that pair with the warning dialogue stored in mhg4s.ihg view

Other Files

These are other files that have been identified, which don't fit into the other categories. Non-Latin characters in the files are encoded in UTF-8.

Filename 03.15 04.20 05.15 1.5 1.6 1.7 1.71 Description
Archive.sys ✨ 🚩 βœ… βœ… βœ… βœ… βœ… Stores the settings for UI language and TV system. Two 32-bit words (4-bytes), little endian. The first is UI language; 0x00000000 is English, 0x01000000 is Chinese, etc.. The second is the TV system setting; 0x00000000 is NTSC, 0x01000000 is PAL. Note the "🚩" icon here indicates the format of the data, or the permissible values were changed (as opposed to the data itself, which will vary from device to device based on user settings)
bfrjd.odb ✨ 🚩 βœ… βœ… βœ… βœ… UI strings in Korean
bxvtb.sby ✨ 🚩 βœ… βœ… βœ… βœ… UI strings in Thai
dufdr.cwr ✨ 🚩 βœ… βœ… βœ… βœ… UI strings in Turkish
eknjo.ofd ✨ 🚩 βœ… βœ… βœ… βœ… UI strings in Spanish
Favorites.bin ✨ βœ… βœ… βœ… βœ… Used to store the list of ROMs added to the Favorites list; only appears after the first game is favourited after installing the 05.15 or later firmware. User ROMs cannot be added to favourites, only built-in games
fhshl.skb ✨ βœ… 🚩 βœ… βœ… βœ… βœ… UI strings in English
Foldername.ini ✨ 🚩 🚩 βœ… βœ… βœ… βœ… Used to control menu rotation for the main menu; see below for more notes on this
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 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
ouenj.dut ✨ 🚩 βœ… βœ… βœ… βœ… UI strings in Polish
qdbec.ofd ✨ 🚩 βœ… βœ… βœ… βœ… UI strings in Italian
sgotd.cwt ✨ 🚩 βœ… βœ… βœ… βœ… UI strings in French
snbqj.uby ✨ 🚩 βœ… βœ… βœ… βœ… UI strings in German
t2act.sgf ✨ βœ… 🚩 βœ… βœ… βœ… βœ… UI strings in Chinese
Test.zsf ✨ ❌ A SNES ROM, which displays a controller test program
tvctu.uby ✨ 🚩 βœ… βœ… βœ… βœ… UI strings in Russian
vdaz5.bjk ✨ 🚩 βœ… βœ… βœ… βœ… UI strings in Arabic
wtrxj.lbd ✨ 🚩 βœ… βœ… βœ… βœ… UI strings in Malay
xjebd.clq ✨ 🚩 βœ… βœ… βœ… βœ… UI strings in Hebrew; has in inaccurate translation, see SF2000 FixHebrew by amir16yp in the 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:

SF2000
17
FFFFFF
FF8000 ROMS
FF8000 FC
FF8000 SFC
FF8000 MD
FF8000 GB
FF8000 GBC
FF8000 GBA
FF8000 ARCADE
FF8000 ROMS
FF8000 ROMS
8 7 0
24 184 144 208
40 24

And here's my current understanding of what each line is used for:

NOTE: While the text colours above work just fine with the SF2000 first boots up, after loading a game and returning to the menu the general game-list/game count colour reverts to an off-white colour, and is likely being pulled from inside the BIOS somewhere. Also note that currently there is no way to choose a highlight colour for the Favourites or History sections - those are fixed at the stock orange colour (FF8000), and are almost certainly hardcoded in the BIOS as well.

Favourites and History

The Favorites.bin and History.bin files above both share the same file structure:

The ROM lists are numbered as follows:

Number ROM List List File
1 NES rdbui.tax
2 SNES urefs.tax
3 Genesis/Mega Drive scksp.tax
4 Game Boy vdsdc.tax
5 Game Boy Color pnpui.tax
6 Game Boy Advance vfnet.tax
7 Arcade mswb7.tax

So, for example: if your most recently played game (first in the history list) was "Batman - The Video Game" for Game Boy, and that game happened to be the ninth game listed in the Game Boy section on your device, the fifth and sixth bytes in your History.bin would be 0x04 0x00 (which is 4 in decimal, i.e. the "Game Boy" ROM list), and the seventh and eighth bytes would be 0x08 0x00 (which is 8 in decimal, i.e. the 9th game in the 0-based list of Game Boy games). The Favorites.bin file works exactly the same way, just with games you've favourited rather than played recently.

For more information on the ROM lists in general, see the next section.

ROM Lists

Credit for this section goes to taizou, author of FROGTOOL. These files relate to the built-in game-lists under each main system; the list of games is pulled from these files instead of being built at runtime - annoying, but presumably for performance reasons. It means if you want to change the list of built-in games (instead of using the User ROMs section), you have to edit these files - hence FROGTOOL, you should really check it out. There is also a tool called Tadpole by .ericgoldstein which provides a GUI for FROGTOOL along with some additional features.

Files Description
mfpmp.bvs (Arcade), mgdel.bvs (Game Boy Color), nethn.bvs (NES), qdvd6.bvs (Game Boy), sppnp.bvs (Game Boy Advance), wmiui.bvs (Genesis/Mega Drive), xvb6c.bvs (SNES) Pinyin translations of the English ROM names, used for Chinese language searching. Not all game names are translated
adsnt.nec (SNES), fhcfg.nec (NES), htuiw.nec (Game Boy Advance), msdtc.nec (Arcade), setxa.nec (Genesis/Mega Drive), umboa.nec (Game Boy), wjere.nec (Game Boy Color) Chinese translations of the English ROM names, used to display the game-lists when the UI language is set to Chinese. Not all game names are translated
mswb7.tax (Arcade), pnpui.tax (Game Boy Color), rdbui.tax (NES), scksp.tax (Genesis/Mega Drive), urefs.tax (SNES), vdsdc.tax (Game Boy), vfnet.tax (Game Boy Advance) English ROM Names, used to display the game-lists when the UI language is set to English
xfgle.hgp, xfgle.hgp.bak The xfgle.hgp file is a plain-text file containing the ROM "shortcuts" on the main menu for each game system. The xfgle.hgp.bak file appears to be a test version of this file that was not removed from the firmware before being sent to production
TSMFK.TAX This is a ROM list file similar to the other .tax files, except it is built at run-time from the ROM files in the user roms folder. The file is regenerated each time the device boots

Sounds

There are several sound files in the 20230420 firmware, stored in raw signed 16-bit PCM format (mono, little-endian at 22050 Hz). The SF2000 seems to play the files back at an incorrect sample rate vs. the raw data; if you want to customise the background music, resample your audio to 21560 Hz (21561.1 Hz is technically precise, but 21560 Hz is easer to remember, and all but the most exacting of human ears is unlikely to detect the difference), and then speed the audio up to 22050 Hz, using the resulting audio as the raw data (credit to notv37 in Discord for doing the initial discovery math, and to bnister for doing technical follow-up in the firmware - you can read their deep-dive into the details here (Discord link - you may need to be a member of the Retro Handhelds Discord server first for the link to work)).

If you want to do it using Audacity, the steps are:

  1. Open your audio file; there's a hard-coded limit of 1 minute 30 seconds on the maximum length of the audio you can use, so if your audio file is longer than that, you'll need to trim it to be 1 minute 30 seconds or shorter (longer audio will glitch)
  2. Click the "Audio Setup" button on the top toolbar, choose "Audio Settings..."
    • Set "Project Sample Rate" to "22050 Hz"
    • Click "OK"
  3. Click the "Select" button in the lower-left corner of your audio track area to select all the audio
  4. If your track is stereo, down-mix to mono: "Tracks" menu > "Mix" > "Mix Stereo Down to Mono"
  5. "Tracks" menu > "Resample..."
    • Set "New sample rate (Hz)" to "22050"
    • Click "OK"
  6. "Effect" menu > "Pitch and Tempo" > "Change Speed..."
    • Set "Speed Multiplier" to "1.023"
    • Click "Apply" (your audio will now sound slightly too high-pitched if you play it back, but don't worry - the SF2000 plays everything slightly slow/low-pitched, so we speed/pitch things up before exporting so it plays back correctly)
  7. "File" menu > "Export" > "Export Audio..."
    • Set "Save as type" to "Other uncompressed files"
    • In "Format Options", set "Header" to "RAW (header-less)"; set "Encoding" to "Signed 16-bit PCM"
    • Enter your "File name" as pagefile.sys, and click "Save"
    • If the "Edit Metadata Tags" window appears, just leave everything blank and click "OK"
  8. Replace the existing pagefile.sys file in the Resources folder on your SF2000 microSD card

dteyn has also created a Python script called Kerokero which can take a .WAV file, trim it if it's longer than 90 seconds, and convert it to a pagefile.sys for you - you can find Kerokero here.

Filename 03.15 04.20 05.15 1.5 1.6 1.7 1.71 Description Listen
c2fkec.pgt ✨ βœ… 🚩 βœ… βœ… βœ… βœ… "Popping" sound that is played when moving around the search keyboard listen
dpnet.dll ✨ βœ… βœ… βœ… βœ… βœ… βœ… "Downwards Zap" sound, unknown usage listen
dsreg.bvs ✨ βœ… βœ… βœ… βœ… βœ… βœ… "Upwards Bleeping" sound, unknown usage listen
help.lis ✨ βœ… βœ… βœ… βœ… βœ… βœ… "Double Buzzer" sound, unknown usage listen
mfsvr.nkf ✨ βœ… 🚩 βœ… βœ… βœ… βœ… "Beep" sound that is played when entering a letter on the search keyboard listen
nyquest.gdb ✨ βœ… 🚩 βœ… βœ… βœ… βœ… "Whooshing" sound that is played when switching between emulated systems on the main menu, between the "Resume", "Quit", "Load" and "Save" options on the in-game menu, and scrolling by pages within a system's game-list listen
oldversion.kbe ✨ βœ… 🚩 βœ… βœ… βœ… βœ… "Three Note Upward Chime" sound that is played when deleting a letter on the search keyboard listen
pagefile.sys ✨ βœ… 🚩 βœ… βœ… βœ… βœ… Main menu background music. If you don't like background music, and would rather just have silence, you can find a replacement silent pagefile.sys here - just replace the one in the Resources folder (don't forget to backup the original file first, in case you ever want that jaunty tune again!) listen
swapfile.sys ✨ βœ… βœ… βœ… βœ… βœ… βœ… "Squishy" sound played when navigating horizontally through "shortcut" games on the main menu, or vertically within a system's game-list listen

If you would like to silence all the UI sounds (everything other than the background music), dteyn has created a Silent Sounds Pack (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.

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:


All of these are linked above already in their relevant sections, but just in case you prefer to see them as a pulled-out list, here they are again:


Document Version History