Console emulation in Linux: The Nintendo family
19/04/2009Welcome to this blog’s first article series! Over the coming weeks we are going to be discussing console emulation in Linux, and what options there are for us out there in the Linux world. Throughout the articles I will focus on regular consoles as well as portable ones. I might go into older consoles (meaning anything that came out more than 10 years before I was born), but I don’t have as much experience with those as more modern consoles - so I don’t know yet. But for this article, we are going to take a good hard look at the Nintendo family, from the NES to the NDS!
If you’re more of a SEGA or Playstation guy, hop on over to my article on those systems!
Summary
What is emulation?
By definition, emulation an ambition and effort to equal, excel or surpass another; to compete or rival with some degree of success, especially through imitation. It can also refer to the simulation of equipment or phenomena by artificial means, such as by software modeling. In practice, it refers to the art of playing kickass console games in an environment where it wasn’t originally designed to be played (such as for example your computer).
Let’s say Joe Schmoe from Littleton, Texas, decides that he wants to get his Seiken Densetsu 3 (to us westeners that would be Legend of Mana 2, for some odd reason) on. I order to do that, he would first need to get his hands on a Super Famicom (Japanese equivalent of the Super Nintendo), since the game was only ever released in Japan. The he would need to learn to read Japanese, as the game has never officially been translated into English. And then finally he would have to scour flea markets and online marketplaces for a copy of the game, which isn’t exactly super easy to get hold of these days.
Luckily console emulators solve that problem for him. Thanks to them, Joe can just download the game to his computer and play it right then and there. There are even unofficial translations that he can download, so he doesn’t even have to learn Japanese! It should be said that downloading the game isn’t exactly legal, so even if no one really cares if Joe downloads a 15-20 years old game, technically he could have the feds knocking on his door and arresting him for violating copyright laws and whatnot. However! The emulators themselves are perfectly legal! They are actually protected by US and European laws regarding reverse engineering. So if you’re an overly ethical person, you can still use emulators to play homebrew games - games that are independently developed and released for free.
To sum it all up, to be able to play console games on your computer you need the following things:
- A computer running fairly recent versions of either Windows, Linux or Mac OS.
- An emulator for the system your trying to emulate.
- ROMs or ISOs for the games you want to play.
The first and the second part you’re going to have to get on your own, as it would be illegal for me to link to ROMs. But I do think that our good friend Google knows where to find them.
Emulators for Linux
Please note that I’m not going to list all available emulators for the various systems. I’m just going to list the ones I have used personally or the ones I’ve found to work the best. If you think I’m missing a great emulator, please say so in the comments.
Nintendo Entertainment System (NES)
The NES was released back in the late eighties. As far as I know, there were three versions of it. The Japanese Famicom, the NES shown in the picture above, and the NES 2, which was a top loading version with some hardware flaws fixed. I’ve got one of these suckers sitting in my bedroom, and it’s got some of the best games I’ve ever played.
Here are some of the best NES emulators available for Linux:
FCE Ultra (using Gfceu frontend)
I’ve used FCEU in Windows before, and I’ve always thought it was absolutely great. Now that I’ve used it in Linux, I’m not as impressed. FCEU doesn’t have a GUI, so I recommend getting a frontend like Gfceu so you don’t have to deal with the scary ol’ terminal. In the command-line version I can’t find options for setting the controls. So far I’ve found the start button and the directional pad. But I still have no idea where select, A and B are mapped to. Using the Gfceu frontend I’ve found where to set the keys, even though it’s a little cryptic. I suggest clicking the help button if you’re stuck wondering what the heck to do. Also it doesn’t seem to support the use of save states - a feature that I think is very important. However, it will play your games perfectly. It supports network play as well as openGL rendering.
Installation
If you’re running a recent version of Ubuntu fceu and gfceu are both in the repositories. In fact, I suggest you check out the repositories regardless of what distribution you’re running. With a little luck both fceu and gfceu are in there.
If not, then you can go to FCEU’s sourceforge page and download binaries from there. Gfceu can also be obtained from the offical page. Installation should be fairly straightforward - just follow the instructions on the respective sites. It should be noted that both FCEU and Gfceu are now officially discontinued projects. Instead they have been replaced by FCEUX, which is an active project to combine all the different forks of FCEU.
FCEUX
Right off the bat I can say that FCEUX is like a slightly improved version of FCEU + Gfceu, minus the network play. Yeah, that’s right. Network play doesn’t work yet. But apart from that it supports pretty much the same features as FCEU does, and suffers from the same flaws (most notably the lack of save states).
Installation
FCEUX probably isn’t in the repositories of your distribution yet. So you’ll have to go to the official homepage to get it. There’s a precompiled .deb if that’s your kind of thing, but you can also download and compile the source yourself if you want to.
Super Nintendo (SNES)
The SNES was released as the successor to the NES, sometime in the beginning of the nineties. It had twice the bitsize, even though no one actually knew what that meant. What people did know was that the graphics were a lot better, and that this badboy was going to be the home of many, many great games. This is by far my favorite console to date.
Zsnes
Zsnes is by far the best SNES emulator out there. It hasn’t been updated for over a year now, but that’s most likely because it already rocks so hard - there’s just not that much to fix! I have yet to find a SNES game that it can’t play. It supports multiple save states, game genie codes, network play, multiple video- and audio modes, gameplay video capture, and just pretty much anything else you can come up with.
Installation
With a little luck Zsnes is in your distribution’s repositories. Just do a search and you’ll probably find it. But just in case you’re running some weird distribution that doesn’t care much for emulation, you can download the source code from the official page and compile it yourself. Or I guess you could do a google search for Zsnes 1.51 + your system architecture + .deb/.rpm or what have you.
Snes9x (with snes9express frontend)
Snes9express is one of two frontends for snes9x that I know of (the other one is GSnes9x, which uses the old GTK1 toolkit for its GUI). Snes9x in itself only has a command line interface, so if you don’t want to have to mess with that, I suggest you get snes9express. As you can see it looks quite similar to fceux, with a very simple interface that’s quite easy to understand. However, it lacks some of the features of Zsnes, namely video capturing and game genie support (plus some other minor stuff). I’ve always found snes9x and its frontends to be a little unstable. For example, running games in fullscreen gives me errors. But if you would happen to come across a game that doesn’t work well in Zsnes, I guess you could give it a try.
Installation
As with most emulators in this article, snes9x and snes9express are most likely in your distribution’s repositories. If not, you can check out Snes9X and Snes9Express for Linux binaries and source code.
The Game Boy Line
The Game Boy line is by far the best selling series of handheld gaming devices ever. It all started back in 1989 when the first Game Boy (seen to the far left) was released. It had a small, poorly (as in not at all) lit screen, required 4 6V batteries, and its full color palette consisted of four shades of green. Despite this, just the original Game Boy alone sold almost 120 million copies worldwide. Together with its successors, the Gameboy Pocket, the Gameboy Light, the Gameboy Color, Gameboy Advance, Gameboy Advance SP, and Gameboy Micro, it’s sold over 200 million copies over a period of 15 years.
VisualBoy Advance (with VisualBoy Advance-GTK frontend)
Visualboy Advance is really all you need for all your Game Boy emulation needs - regardless of whether you want to play a GBA or GB game. I’ve used this for years in Windows, and the Linux version seems to work almost as well. The only thing I see right away that it’s lacking is the ability to cheat. The Windows version supports a pretty advance memory address changer-thingamabob, but I can’t find that functionality in the Linux version at all. Nevertheless, it supports save states, the use of joypads, fullscreen view, and the “speed-up” button that is just crucial for us impatient gamers. In the screenshot below it says that it’s running at 32% speed, but that was just because the window lost focus as I was taking the screenshot. In reality it runs just fine at around 99-103% speed. It also seems to be able to play almost all games perfectly, so I highly recommend getting this if you are looking to emulate GB or GBA games.
Installation
As always, look in your repositories first. For me the packages were called visualboyadvance and visualboyadvance-gtk. If it’s not in there, go to the official VisualBoy Advance page to download the source. The latest Linux version available there is 1.7.1.
VisualBoy Advance (with VBA Express frontend)
This frontend is so ugly it’s not even funny. It uses GTK1 as its toolkit, so all GTK elements look terrible. And the whole Gameboy Advance look just looks tacky. Nevertheless, some might prefer this to VisualBoy Advance-GTK. But it supports pretty much the same features as VBA-GTK, so I can’t really see why anyone would. It runs the games just fine though, as they’re both based on the same backend. The only thing that really bothers me is that it launches the game in a separate window, so if you want to change some settings you have to switch focus from the game to an entirely different window. Just like with VBA-GTK it supports savestates, full screen view, joypads, and the super important “speed-up” button.
Installation
I found it in the repositories under the name of vbaexpress, so I suggest you start looking there. If it’s not there, go here to either download some pre-compiled packages or compile the source code yourself.
Virtual Boy
The Virtual Boy is a strange beast indeed. When it was released in 1995, it was the first mostly-portable console to be able to display “true 3D-graphics”, through the use of something called parallax. Basically it was like a giant pair of binoculars, where each eye was watching a separate screen - one showing only black, and one showing red. This gave the illusion that you were watching a 3D game on a 2D screen. Like you might imagine from the look of it, it never became very popular. Nintendo shut down production of it after a year, and only 22 games were ever released for it. Nevertheless, some of those games were actually OK. For a full list of games, click here.
Reality Boy
As far as I know, Reality Boy is the only Virtual Boy emulator available for Linux. In windows it does have a frontend, but in Linux you’ll just have to get by with the command line. Still, the basic syntax is pretty easy once you’ve installed it. I’ve created a basic script for downloading and installing Reality Boy, which you can find in the installation section.
This emulator is still in beta, so obviously it doesn’t have all the features that you might expect. For example, there’s no way to set the key bindings. For now you’ll just have to live with the default controllers or the alternative controller.
Just like it doesn’t support configuring the controllers, neither does it support save states or cheating. I’m not even sure if it supports a majority of the Virtual Boy’s majestic game library. But still, there are some pretty OK games out there for this system. If you haven’t tried it before, I suggest you do so.
Installation
I’ve created a pretty basic script to dowload and install Reality Boy 0.84. You can download it here. Just make it executable and run it, and you’ll have Reality Boy up and running within seconds. Please note that you need to have allegro 4.2 and allegro4.2-dev installed for Reality Boy to work.
The emulator is command-line only. But the general syntax is easy. Just type this into a terminal:
./full/path/to/rboy_linux full/path/to/virtualboy/rom.vb
For further info, just run the binary produced from compiling the game or go to the official website.
Nintendo 64
The N64 was released in 1996 in Japan and the US (we Europeans had to wait until 1997). At the time it was the most powerful home gaming console available, even though it had some major hardware limitations - such limited space due to the cartridge game format, and low texture cache size, resulting in blurry graphics. Blurry graphics or not, it still sold almost 33 million units, and is the home to some of the very best games of all time (e.g. the extremely overrated Legend of Zelda: Ocarina of Time).
Mupen64Plus
Mupen64Plus is the only stable Nintedo 64 emulator available for Linux, as far as I know. And by stable I don’t mean stable like Zsnes that runs every rom available for its console. I mean stable as in doesn’t crash before you even get to the GUI. It’s got some major graphical glitches with most games - some are so bad that you can’t even play the game. Before writing this, I tried playing Harvest Moon 64, which I clearly remember playing in Project 64 (Windows-only N64 emulator) a couple of years back. In Mupen64Plus it was completely unplayable!
But like I said, it’s the only thing we’ve got. And some games run fine. The other game I tried before writing this, Conker’s Bad Fur Day, seems to work fine. Mupen64Plus supports full screen play, multiple video-, audio- and input settings are available, and there’s even a rom manager!
Installation
For the first time in this article I don’t recommend getting mupen64plus from your repositores (unless they are super up-to-date), as the latest version (1.5) was released January 15th 2009. So instead of getting it from the repos, go to the Mupen64Plus website and download the Linux binaries from there. All you have to do in untar it and run the installation script (as root).
GameCube
The GameCube was the first of Nintendo’s consoles to use optical discs (if you don’t count the Nintendo 64DD). It was also the first Nintendo Console to officially support online play, although only four games ever had any real online content. It was first released in 2001 (feels like yesterday, doesn’t it?) together with a fairly weak selection of games. That lack of third-party support, along with its “family-friendly” appeal caused it to lose its marketshare to its competitors, the Playstation 2 and the Xbox. However, some pretty good games were released for this baby, so being able to emulate them would be great.
Dolphin
There are two Gamecube emulators available for Linux; Dolphin and Tuxcube. However, that last one isn’t in active development at the moment, and it’s not quite as complete as Dolphin is. Sadly I wasn’t able to play any games in either of them, as my video drivers don’t support openGL2.0 (damn Intel!). I was however able to install and run the frontend, so I got a pretty good idea of how the emulator is supposed to work.
It supports Action Replay Codes, save states, memory cards, Wii motes (!!), and most other things you’d expect to find. I was actually surprised to see how far GameCube emulation had come since I was last active in the emulation scene a couple of years ago. The games aren’t really playable yet, as the frame rate is quite low. But at least you can run them. If you have a really good computer and want to try playing the GameCube version of Alien Homnid (one of the relatively few games that work near-perfectly in the emulator), I suggest you try it out. In fact, if you do, be sure to send me an email and let me know if it worked or not. My email is available at the very bottom of this page.
Installation
In order to install Dolphin you can just go here and download a build that suits your system. To run dolphin, just run the exectuable you find in the main folder. If that doesn’t work for you, you can head on over to the google code page, download the source code and compile it yourself (that’s what I did, because I’m an idiot and didn’t find the precompiled binaries).
If you’re running a fairly recent version of Ubuntu, you can just copy and paste this into a terminal to install Dolphin’s dependencies as well as compile Dolphin itself.
sudo apt-get install subversion scons g++ wx2.8-headers libwxbase2.8-0 libwxbase2.8-dbg libwxbase2.8-dev libwxgtk2.8-0 libwxgtk2.8-dbg libwxgtk2.8-dev libsdl1.2-dev nvidia-cg-toolkit libxxf86vm1-dbg libxxf86vm-dev libxext6-dbg libxext-dev libglew1.5-dev libcairo2-dbg libcairo2-dev libao2 libao-dev libbluetooth-dev && svn checkout http://dolphin-emu.googlecode.com/svn/trunk/ dolphin-emu-read-only && cd dolphin-emu-read-only && scons
To run Dolphin, just do the following from the installation directory:
cd Binary/Linux-* && ./Dolphin
Nintendo DS
Just like the Game Boy line, the Nintendo DS and its redesigns was a smashing success in the portable gaming market. It was released about 4 years ago, and since then it has sold over 96 million units worldwide. At the time it was the only major portable gaming device to use a touch pad and a dual screen layout. The touch screen allowed game developers to develop some rather unique games not presently seen on the portable gaming scene. All in all, this is a great little gadget that I would advice pretty much anyone to buy.
DeSmuME
DeSmuME is one of two actively developed NDS emulators for Linux, and it’s the only NDS emulator that is both actively developed and open source. It has two different frontends, one using GTK+ and one using Glade, as well as a CLI option. The screenshots show the GTK+ frontend, as I find that to be prettier than the Glade one. It doesn’t have a whole lot of features as this point, but it still runs pretty great. There are small visual glitches in some games, and the sound was laggy for me. But overall it works well. It doesn’t support save states, cheating or anything like that. You basically just set the keys and run the game.
Remember that this console was released just four years ago, so seeing as how the N64 (a console that was released 13 years ago) emulators still have major glitches, NDS emulation has come a long way in a short amount of time.
Installation
The repositories for Ubuntu 8.10 contain version 0.8 of DeSmuME, and the latest release at the time of writing is 0.92, so I recommend getting the source code and compiling it yourself. It’s very easy. Just follow the instructions in the readme (Linux version). The source code can be found here. I’ve created a .deb package using checkinstall, but I can’t guarantee that it’s going to work for you. So use at your own risk.
The other NDS emulator I was talking about is called iDeaS, and is a closed source application created by a person who calls himself Lino. I would have liked to review his emulator as well, but it just throws me a segmentation fault and dies, so there’s not that much for me to review.If you have tried it and want to write a short review, feel free to email me and I’ll include it in this post. My email is available at the bottom of this post.
Closing
After several days of trying out plenty of different emulators for Linux, I can tell you a couple of things;
First of all, I’m so glad to see that almost all of the best console emulators out there are open- or at least partially open source. The few closed source emulators I’ve tried either haven’t worked at all, or been super buggy. I’m guessing that it’s for legal reason, as no one dares try to make a commercial console emulator, and thus there’s really no point to keeping the source closed.
Second, the development of emulators progresses very quickly. When I was last into emulators 3-4 years ago, GameCube or Nintendo DS emulation was still a distant dream, and now NDS emulation works almost perfectly, and GameCube emulation is well on its way. If things keep progressing this fast, I’m betting that we’ll have full Wii emulation within the next 5 years (Dolphin can already play some Wii intro movies!). Now I just wish that someone would try to get Nintendo 64 emulation in Linux to the point where Project 64 for Windows is, where most games work perfectly without a lot of glitches. It’s sad to see that we still can’t fully emulate games for a 13 year old console. I know that the hardware makes it difficult - I’m certainly not saying that it’s an easy task. I’m just saying that it’s already been done on the Windows side, so why can’t it be done in Linux?
Last of all I can tell you that nothing beats playing games on their original consoles. Sure you can plug in an Xbox controller and play the games almost the same way they were meant to play, but it still doesn’t beat the feeling of having to bang the top of your NES and blow into your game cartridge a couple of times to get the games working. And playing Super Smash Bros with your friends using the original Nintendo 64 controllers is so much more fun than trying to play four people on one keyboard. What I’m trying to say that if you are able to buy the original games and play them exactly the way they were supposed to be played - you should.
If you want more emulator goodness, check out my article on console emulation in Linux: SEGA and Playstation!
Disclamer
If you think I’ve missed listing a great emulator for any of the above mentioned systems, please do send me an email containing a link to it. Optionally you could also include your review of the emulator - just remember to keep it short. Also, if you are the author of any of these emulators, or the copyright owner of any of the images used, and want them removed, my email address can be found at the very bottom of this page.

























There are 3 comments on this article: