sf2000/README.md

215 lines
21 KiB
Markdown
Raw Normal View History

2023-05-07 18:23:05 +02:00
# SF2000
2023-05-07 19:50:23 +02:00
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".
2023-05-07 18:23:05 +02:00
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-replacable "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, there's no head-phone 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 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 (they're quite cheap, and sit flush when pressed).
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.
2023-05-07 22:01:25 +02:00
---
2023-05-07 21:55:09 +02:00
## Hardware
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. It appears to be a clone of an ALi Tech chip.
---
## biserv.asd
The firmware for the SF2000 is actually located on the microSD card, in a file called `biserv.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. The file is currently being investigated. Here are some findings from it:
### Key Bindings
`osaka#9664` 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.kmp`). They also discovered where in the `biserv.asd` file the default mappings for each emulator are stored. Working with this information, `notv37#4200` worked out what bits related to what buttons for each emulator. Using `notv37#4200`'s findings, `osaka#9664` has put together a web-based tool which can be used to alter the default key bindings for each emulator, as well as to create game-specific bindings - you can [find that tool here](https://bnister.github.io/sf2000/bisrv_keymaps.html).
### Boot Logo
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 `biserv.asd`, at offset `0x9B91D8`. It's a `512x200` RGB565 Little Endian raw image file, and looks like this:
![Boot Logo](/images/bootlogo.png)
---
2023-05-07 15:27:28 +02:00
## Resources
2023-05-07 16:41:49 +02:00
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 the `20230420` firmware and what they are used for, grouped by broad categories:
2023-05-07 15:27:28 +02:00
2023-05-07 16:41:49 +02:00
### Fonts
| Filename | 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)
2023-05-07 20:26:53 +02:00
As far as I am aware, all of the below images are actively used by the `20230420` version of the firmware; 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, design it for `320x240`, and then double the resolution when exporting the final images to the device for a crisper look.
| Filename | Resolution | Format | Description | View |
| -------- | ---------- | ------ | ----------- | ---- |
2023-05-07 21:27:47 +02:00
| aepic.nec | 576x256 | BGRA | Main menu labels in Korean | [view](/images/aepic.png) |
| apisa.dlk | 640x480 | RGB565 Little Endian | Arcade game list background | [view](/images/apisa.png) |
| appvc.ikb | 150x214 | BRGA | Game art placeholder | [view](/images/appvc.png) |
| awusa.tax | 576x256 | BRGA | Main menu labels in Thai | [view](/images/awusa.png) |
| bisrv.nec | 640x480 | RGB565 Little Endian | In-game menu (position 3) | [view](/images/bisrv.png) |
| bttlve.kbp | 60x144 | BGRA | Battery level indicator icons | [view](/images/bttlve.png) |
| c1eac.pal | 640x480 | RGB565 Little Endian | SNES game-list background | [view](/images/c1eac.png) |
| cero.phl | 640x480 | RGB565 Little Endian | Game Boy Color game-list background | [view](/images/cero.png) |
| certlm.msa | 40x24 | BGRA | NES game-list indicator | [view](/images/certlm.png) |
| d2d1.hgp | 640x480 | RGB565 Little Endian | In-game menu (position 2) | [view](/images/d2d1.png) |
| dism.csf | 640x480 | RGB565 Little Endian | In-game menu (position 1) | [view](/images/dism.png) |
| djctq.rsd | 40x24 | BGRA | SNES game-list indicator | [view](/images/djctq.png) |
| djoin.nec | 576x256 | BRGA | Main menu labels in Spanish | [view](/images/djoin.png) |
| dpskc.ctp | 640x320 | RGB565 Little Endian | In-game menu save-state slots (positions 1, 2, 3 and 4) | [view](/images/dpskc.png) |
| drivr.ers | 640x480 | RGB565 Little Endian | SNES main menu background | [view](/images/drivr.png) |
| dsuei.cpl | 640x480 | RGB565 Little Endian | User ROMs main menu background | [view](/images/dsuei.png) |
| dxdiag.bin | 40x24 | BGRA | Genesis/Mega Drive game-list indicator | [view](/images/dxdiag.png) |
| dxkgi.ctp | 576x256 | BRGA | Main menu labels in English | [view](/images/dxkgi.png) |
| dxva2.nec | 640x480 | RGB565 Little Endian | Search keyboard (pressed) | [view](/images/dxva2.png) |
| ectte.bke | 161x126 | BRGA | Main menu icon selection box | [view](/images/ectte.png) |
| efsui.stc | 640x480 | RGB565 Little Endian | Game Boy Advance game-list background | [view](/images/efsui.png) |
| esent.bvs | 576x256 | BRGA | Main menu labels in Turkish | [view](/images/esent.png) |
| exaxz.hsp | 152x1224 | BRGA | Main menu "Games Exist" and "Start: Open" labels for all languages | [view](/images/exaxz.png) |
| fixas.ctp | 640x480 | RGB565 Little Endian | NES main menu background | [view](/images/fixas.png) |
| fltmc.sta | 640x480 | RGB565 Little Endian | Game Boy game-list background | [view](/images/fltmc.png) |
| fvecpl.ai | 40x24 | BGRA | Game Boy game-list indicator | [view](/images/fvecpl.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) |
| icuin.cpl | 640x480 | RGB565 Little Endian | Genesis/Mega Drive main menu background | [view](/images/icuin.png) |
| ihdsf.bke | 640x480 | RGB565 Little Endian | Genesis/Mega Drive game-list background | [view](/images/ihdsf.png) |
| irftp.ctp | 640x480 | RGB565 Little Endian | Game Boy Advance main menu background | [view](/images/irftp.png) |
| irmon.tax | 576x256 | BRGA | Main menu labels in Dutch | [view](/images/irmon.png) |
| itiss.ers | 576x256 | BRGA | Main menu labels in Chinese | [view](/images/itiss.png) |
| jccatm.kbp | 640x480 | RGB565 Little Endian | "Battery Empty" screen | [view](/images/jccatm.png) |
| ke89a.bvs | 576x256 | BRGA | Main menu labels in Portuguese | [view](/images/ke89a.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) |
| 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 | 576x256 | BRGA | Main menu labels in Japanese | [view](/images/mssvp.png) |
| normidna.bin | 40x24 | BGRA | Search game-list indicator | [view](/images/normidna.png) |
| ntdll.bvs | 576x256 | BRGA | Main menu labels in Polish | [view](/images/ntdll.png) |
| pcadm.nec | 576x256 | BRGA | Main menu labels in Italian | [view](/images/pcadm.png) |
| pwsso.occ | 640x480 | RGB565 Little Endian | In-game menu (position 4) | [view](/images/pcadm.png) |
| qasf.bel | 640x480 | RGB565 Little Endian | User game-list background | [view](/images/qasf.png) |
| qwave.bke | 640x480 | RGB565 Little Endian | Game Boy Color main menu background | [view](/images/qwave.png) |
| rmapi.tax | 576x256 | BRGA | Main menu labels in German | [view](/images/rmapi.png) |
| sdclt.occ | 120x2280 | RGB565 Little Endian | TV system and UI language selection icons | [view](/images/sdclt.png) |
| sebsc.bvs | 576x256 | BRGA | Main menu labels in French | [view](/images/sebsc.png) |
| sfcdr.cpl | 576x1344 | BRGA | Main menu system logos | [view](/images/sfcdr.png) |
| subst.tax | 576x256 | BRGA | Main menu labels in Russian | [view](/images/subst.png) |
| ucby4.aax | 576x256 | BRGA | Main menu labels in Arabic | [view](/images/ucby4.png) |
| urlkp.bvs | 640x480 | RGB565 Little Endian | NES game-list background | [view](/images/urlkp.png) |
| vidca.bvs | 576x256 | BRGA | Main menu labels in Hebrew | [view](/images/vidca.png) |
| vssvc.nec | 576x256 | BRGA | Main menu labels in Malay | [view](/images/vssvc.png) |
| xajkg.hsp | 640x480 | RGB565 Little Endian | Game Boy main menu background | [view](/images/xajkg.png) |
2023-05-07 17:15:00 +02:00
### Images (Unused)
2023-05-07 17:32:57 +02:00
To the best of my knowledge, the following image files are currently __unused__ by the `20230420` 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.
2023-05-07 17:15:00 +02:00
2023-05-07 22:01:25 +02:00
| Filename | Resolution | Format | Description | View |
| -------- | ---------- | ------ | ----------- | ---- |
| aeinv.bke | 640x480 | RGB565 Little Endian | Alternate UI: Genesis/Mega Drive main menu background | [view](/images/unused/aeinv.png) |
| aepic.ers | 640x480 | RGB565 Little Endian | Alternate UI: User main menu background | [view](/images/unused/aepic.png) |
| c1e.pal | 640x480 | RGB565 Little Endian | CPS2 game-list background | [view](/images/unused/c1e.png) |
| cca.bvs | 640x480 | RGB565 Little Endian | In-game menu (position 1; Chinese language hardcoded) | [view](/images/unused/cca.png) |
| dectMap.key | 640x480 | RGB565 Little Endian | Button test screen (active) | [view](/images/unused/dectMap.png) |
| desk.cpl | 640x480 | RGB565 Little Endian | Eight-game selection screen | [view](/images/unused/desk.png) |
| djoin.hsp | 640x480 | RGB565 Little Endian | Alternate UI: Arcade main menu background | [view](/images/unused/djoin.png) |
| fcont.ctp | 640x480 | RGB565 Little Endian | Alternate UI: User main menu background | [view](/images/unused/fcont.png) |
| fdbil.ph | 1100x120 | BGRA | Large icons for each system, including systems not supported by the SF2000 (selected) | [view](/images/unused/fdbil.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.png) |
| igc64.dll | 217x37 | BGRA | "Yes" and "No" text, with "No" selected | [view](/images/unused/igc64.png) |
| ihds.bke | 640x480 | RGB565 Little Endian | Genesis/Mega Drive game-list background, with baked-in thumbnail placeholder | [view](/images/unused/ihds.png) |
| kdill.hsp | 640x480 | RGB565 Little Endian | Alternate UI: Game Boy Advance main menu background | [view](/images/unused/kdill.png) |
| logilda.be | 40x24 | BGRA | CPS1 game-list indicator | [view](/images/unused/logilda.png) |
| mfc64.emc | 40x24 | BGRA | CPS2 game-list indicator | [view](/images/unused/mfc64.png) |
| mfpmp.ers | 640x480 | RGB565 Little Endian | Alternate UI: Arcade main menu background | [view](/images/unused/mfpmp.png) |
| mrtac.klo | 40x24 | BGRA | Neogeo game-list indicator | [view](/images/unused/mrtac.png) |
| msdtc.bke | 640x480 | RGB565 Little Endian | Alternate UI: Game Boy Advance main menu background | [view](/images/unused/msdtc.png) |
| mswbv.cpl | 640x480 | RGB565 Little Endian | Alternate UI: Game Boy Advance main menu background | [view](/images/unused/mswbv.png) |
| nettrace.dll | 40x24 | BGRA | Unknown game-list indicator (grey joystick with yellow buttons) | [view](/images/unused/nettrace.png) |
| nsibm.ctp | 640x480 | RGB565 Little Endian | Alternate UI: Arcade main menu background | [view](/images/unused/nsibm.png) |
| nvinf.hsp | 16x240 | BGRA | Latin numbers 0 to 9 listed vertically | [view](/images/unused/nvinf.png) |
| 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](/images/unused/nvinfohsp.png) |
| pcadm.hsp | 640x480 | RGB565 Little Endian | Alternate UI: User main menu background (NTSC TV system selected) | [view](/images/unused/pcadm.png) |
| plasy.ers | 640x480 | RGB565 Little Endian | Alternate UI: Game Boy Advance main menu background | [view](/images/unused/plasy.png) |
| rmapi.cpl | 640x480 | RGB565 Little Endian | Alternate UI: User main menu background (English UI language selected) | [view](/images/unused/rmapi.png) |
| seltMap.key | 640x480 | RGB565 Little Endian | Button test screen | [view](/images/unused/seltMap.png) |
| spmpm.gdp | 640x480 | RGB565 Little Endian | Alternate UI: NES game-list background, with baked-in thumbnail placeholder | [view](/images/unused/spmpm.png) |
| subst.bke | 640x480 | RGB565 Little Endian | Alternate UI: Arcade main menu background | [view](/images/unused/subst.png) |
| tsmcf.cpl | 640x480 | RGB565 Little Endian | Alternate UI: Arcade main menu background | [view](/images/unused/tsmcf.png) |
| url.bvs | 640x480 | RGB565 Little Endian | CPS1 game-list background | [view](/images/unused/url.png) |
| werui.ioc | 320x240 | RGB565 Little Endian | "NODATA" save-state thumbnail placeholder image, with a "horror" style typeface | [view](/images/unused/werui.png) |
| wshom.ocx | 1100x120 | BGRA | Large icons for each system, including systems not supported by the SF2000 (normal) | [view](/images/unused/wshom.png) |
| wshrm.nec | 217x37 | BGRA | "Yes" and "No" text, with "Yes" selected | [view](/images/unused/wshrm.png) |
| x86e.hgp | 640x480 | RGB565 Little Endian | Neogeo game-list background | [view](/images/unused/x86e.png) |
2023-05-07 16:41:49 +02:00
2023-05-07 18:07:26 +02:00
### 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 | Description |
| -------- | ----------- |
| bfrjd.odb | UI strings in Korean |
| bxvtb.sby | UI strings in Thai |
| dufdr.cwr | UI strings in Turkish |
| eknjo.ofd | UI strings in Spanish |
| fhshl.skb | UI strings in English |
| Foldername.ini | Used to control menu rotation for the main menu (this information came from the 4PDA forum) |
| 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 |
| 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 |
### ROM Lists
2023-05-07 18:11:02 +02:00
Credit for this section goes to `taizou#9644`, author of [Frog Tool](https://github.com/tzlion/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 Frog Tool, you should really check it out.
2023-05-07 18:07:26 +02:00
| Files | Description |
2023-05-07 18:10:06 +02:00
| ----- | ----------- |
2023-05-07 18:07:26 +02:00
| 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 contains 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 |
### Sounds
There are two sound files in the `20230420` firmware, both in raw signed 16-bit PCM format (little-endian, mono, 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 21543 Hz, and then speed the audio up to 22050 Hz, using the resulting audio as the raw data (credit to `notv37#4200` in Discord for doing the math on that).
| Filename | Description |
| -------- | ----------- |
| pagefile.sys | Main menu background music |
| swapfile.sys | Short "navigation" sound |
2023-05-07 16:41:49 +02:00
### Unknown Files
2023-05-07 18:07:26 +02:00
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!
2023-05-07 16:41:49 +02:00
| Filename | Description |
| -------- | ----------- |
| Archive.sys | UNKNOWN; 8 bytes, first are `0x02`, the rest are all `0x00` |
| c2fkec.pgt | UNKNOWN; binary |
| dpnet.dll | UNKNOWN; binary |
2023-05-07 18:07:26 +02:00
| dsreg.bvs | UNKNOWN; binary. __Not__ the same format as the `*.bvs` files mentioned in the "ROM Lists" section above |
2023-05-07 16:41:49 +02:00
| help.lis | UNKNOWN; binary |
| 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 |
| mfsvr.nkf | UNKNOWN; binary |
| nyquest.gdb | UNKNOWN; binary |
| oldversion.kbe | UNKNOWN; binary |
2023-05-07 18:07:26 +02:00
| TSMFK.TAX | UNKNOWN; four bytes, all `0x00`. __Not__ the same format as the `*.tax` files mentioned in the "ROM Lists" section above |
---
## Version History
20230507 - 1.0: Original creation of this page.