Recently, I purchased a “Retro game stick” online. For reference, you can find them here with these non affiliate links:
It is a pretty good deal, costing roughly $40 and it comes with two wireless controllers that look like the original play station controllers. Then you have an HDMI “stick” that you plug into the TV, and you plug in a USB cord to power it, and you have a built in library of 20000+ games. Essentially, it is just a minimalist Linux distribution that runs a GUI, called “miniGUI” and launches the appropriate game with an appropriate emulator, having mapped the controllers as joysticks. It has emulators for Atari, Arcade machines, Game Boy/advanced/color, Nintendo, Super Nintendo, Sega Genesis/CD, and the original Play Station.
As is, it works great. The only problem is that of the 20000+ games, over 12000 of them are the same game in a foreign language, or a game that doesn’t exist in English. I can’t speak or read Chinese, Italian, Japanese, etc. So realistically, those games do me no good. Furthermore, of the remaining 8000 games, some of them are so old or cheesy or ridiculous that I wouldn’t play them. Then, there are about 500 games that I probably would not let my young children play, such as “Resident Evil”. So it would be nice if I could weed out a lot of the games. Also, I would like to add a few games, especially in the Play Station department.
It is cumbersome to have all the extra games, since it requires that you scroll through the games with the controller. There is a search function, but if you type in Heavy Barrel, you get the USA version, the Italian version, the Japanese Version, etc., etc., and they are not all labeled as such, requiring you to open each one and find out what language it is written in. Also, a lot of the games are miss-named. For example: “The Blues Brothers” was called “The Melancholy Siblings”, and “Chubby Cherub” was called “Little Round Angel” or something like that, which makes the search function a bit useless.
Well, we know Linux. We know how to play games in emulators. This should be easy. And it sort of was. Overall, I would give this task a skill level of: Low, but a work level of: High. That said, I will outline the whole process I used for you and if you have one, you can hack away, or if you want to buy one, then you know you can set it straight with these hacks.
WARNING: I am not responsible for anything that happens to your device. I am not responsible when your older brother gets mad because you deleted all the games and then beats you up. I am not responsible for you missing work because you had too much fun playing retro video games. Proceed at your own risk!
If you choose to go down this road, my advice is that the very first thing you do is pull out the SD card (this one was 64GB) and put it into your Linux computer and do a full backup:
$ sudo bash -c "dd if=/dev/mmcblk0 | gzip > ./mmcblk0-backup.gz"
My backup was roughly 30GB in size, which is large, but if you mess anything up, it is handy to just re-write the card and go back to the way it was. I also made backups when I was done with my hacks, so I can save myself the future work if anything ever goes wrong with the card. Then I recommend you make a folder on your computer, I called mine “emulator_games” and mount the SD cards 51GB partition (it has several partitions, but this is the one with the games), and copy all of the contents of that partition to your folder, so you can work on the files a little quicker.
Once mounted, the first thing I did was navigate to the “game” folder, which has sub-folders of each emulator, atari, fc, sfc, etc.
This is where all the games are stored. You can add or remove the games from these folders. But as I found out, that will not change anything in the minigui representation of the games. How you get rid of or add games is completely up to you. I just used Thunar’s built in menu option to “Select by pattern…” and removed loads of games that way. For instance, a lot of games that are in Japanese have “NameOfGame (Japan)” or “NameOfGame (J)” and the same for German, Italian, Chinese, Korean, USA, etc. So I selected all that had *(J* and deleted them to get rid of all the Japanese versions of a game, and did the same for the other languages in each folder.
This worked rather well to get rid of about 12000 games. Then I went through the folders, removing games I know I didn’t want, or removing games that started with Kanji or other foreign characters. Finally, I removed games that I felt were not appropriate for my kids, like Resident Evil and the like. Even so, there were lots of duplicates of games. In particular, there were games that were “NameOfGame” followed by “NameOfGame (USA)” and I deleted any duplicates, preferring to keep the USA version if there was a choice.
Of course, I had to open up some of the games in my computer with an emulator to figure out what it was. This process could take weeks, because there are still so many games, and often they were miss-labeled, as I mentioned earlier. I did not bother to fix all of their names. I don’t have time for that, but it would be a good idea for someone who doesn’t have a life.
At this point, I thought that was all I had to do, so I put the SD card back into the game stick, and then loaded it up. Unfortunately, the list of games was still the same. I tried clicking on games I know I deleted, and it just flashes the loading screen and goes back to the minigui menu.
Since that didn’t work, I looked around for some sort of file or database containing all of the names of the games. It took me a while to realize that the file “sj.a” was the MySQL database that the minigui reads to know what games are available and how to load them.
I found that out with the file command:
$ file ./sj.a
./sj.a: SQLite 3.x database, last written using SQLite version 3037002, page size 1024, file counter 829, database pages 5992, 1st free page 3494, free pages 4774, cookie 0x15d, schema 4, UTF-8, version-valid-for 829
So, I quickly installed sqlitebrowser:
$ sudo apt install sqlitebrowser
SQlitebrowser is a super handy tool for working with these database files in a graphical interface. I want to cover this some more, but there is a lot to discuss, so I will put that into another post, hopefully later today.
Stay tuned, because it is possible to add and remove games from this console!
Linux – keep it simple.